{"product_id":"urackify-expandable-dish-drying-rack-for-kitchen-counter-16-2-23-7-black","title":"Urackify Expandable Dish Drying Rack for Kitchen Counter, 16.2-23.7\", Black","description":"\u003cdiv id=\"aplus\" class=\"a-section a-spacing-large bucket\"\u003e \u003chr noshade size=\"1\" class=\"bucketDivider\"\u003e\n                                  \u003cstyle\u003e\n    .aplus-v2 .aplus-content-wrapper {\n        position: relative;\n        overflow: hidden;\n    }\n\n    .aplus-v2 .container-with-background-image {\n        width: 100%;\n        height: 100%;\n        background-repeat: no-repeat;\n        background-size: cover;\n    }\n\n    .aplus-v2 .aplus-module-csa-wrapper {\n        display: flow-root;\n    }\n\u003c\/style\u003e\n  \u003cscript type=\"application\/javascript\"\u003e\n    function logShoppableMetrics(moduleName, showsAddToCart) {\n        if (window.ue \u0026amp;\u0026amp; window.ue.count) {\n            window.ue.count(\"aplus:shoppable:\" + moduleName + \":addToCart\", showsAddToCart ? 1 : 0);\n        }\n    }\n\u003c\/script\u003e\n\n                                                  \u003ch2\u003eFrom the brand\u003c\/h2\u003e   \u003cdiv lang=\"en_US\"\u003e\n    \u003cdiv class=\"aplus-v2 desktop celwidget\" cel_widget_id=\"aplus\"\u003e\n            \u003cdiv class=\"aplus-content-wrapper\"\u003e\n                                                        \u003cstyle\u003e\n    .aplus-v2 .apm-brand-story-carousel-container {\n        position: relative;\n    }\n\n    .aplus-v2 .apm-brand-story-carousel-hero-container,\n    .aplus-v2 .apm-brand-story-carousel-hero-container \u0026gt; div {\n        position: absolute;\n        width: 100%;\n    }\n\u003c\/style\u003e\n\n    \u003cstyle\u003e\n        \/*\n          Ensuring the carousel takes only the space it needs.\n          The sizes need to be set again on the absolutely positioned elements so they can take up space.\n        *\/\n        .aplus-v2 .apm-brand-story-carousel-container,\n        .aplus-v2 .apm-brand-story-carousel-hero-container {\n            height: 625px;\n            width: 100%;\n            max-width: 1464px;\n            margin-left: auto;\n            margin-right: auto;\n            overflow: hidden;\n        }\n\n        .aplus-v2 .apm-brand-story-carousel-hero-container,\n        .aplus-v2 .apm-brand-story-carousel-hero-container \u0026gt; div {\n            height: 625px;\n        }\n    \u003c\/style\u003e\n   \u003cstyle\u003e\n        .aplus-v2 .apm-brand-story-carousel.a-carousel-container {\n            padding: 0px;\n        }\n\n        \/*\n          This centers the carousel vertically on top of the hero image container and after the logo area (125px).\n          Margin-top = (heroHeight - cardHeight - logoAreaHeight) \/ 2 + logoAreaHeight\n        *\/\n        .aplus-v2 .apm-brand-story-carousel .a-carousel-row-inner {\n            margin-top: 149px;\n        }\n\n        \/*\n          Cards need to have a width set, otherwise they default to 50px or so.\n          All cards must have the same width. The carousel will resize itself so all cards take the width of the largest card.\n          The left margin is for leaving a space between each card.\n        *\/\n        .aplus-v2 .apm-brand-story-carousel .a-carousel-card {\n            width: 362px;\n            margin-left: 30px !important;\n        }\n\n        \/* styling the navigation buttons so they are taller, flush with the sides, and have a clean white background *\/\n        .aplus-v2 .apm-brand-story-carousel .a-carousel-col.a-carousel-left,\n        .aplus-v2 .apm-brand-story-carousel .a-carousel-col.a-carousel-right {\n            padding: 0px;\n        }\n\n        .aplus-v2 .apm-brand-story-carousel .a-carousel-col.a-carousel-left .a-button-image,\n        .aplus-v2 .apm-brand-story-carousel .a-carousel-col.a-carousel-right .a-button-image {\n            border: none;\n            margin: 0px;\n        }\n\n        .aplus-v2 .apm-brand-story-carousel .a-carousel-col.a-carousel-left .a-button-image .a-button-inner,\n        .aplus-v2 .apm-brand-story-carousel .a-carousel-col.a-carousel-right .a-button-image .a-button-inner {\n            background: #fff;\n            padding: 20px 6px;\n        }\n\n        .aplus-v2 .apm-brand-story-carousel .a-carousel-col.a-carousel-left .a-button-image .a-button-inner {\n            border-radius: 0px 4px 4px 0px;\n        }\n\n        .aplus-v2 .apm-brand-story-carousel .a-carousel-col.a-carousel-right .a-button-image .a-button-inner {\n            border-radius: 4px 0px 0px 4px;\n        }\n    \u003c\/style\u003e\n  \u003cdiv\u003e\n        \u003cdiv class=\"apm-brand-story-carousel-container\"\u003e\n                 \u003cdiv class=\"apm-brand-story-carousel-hero-container\"\u003e\n                             \u003cdiv class=\"celwidget aplus-module brand-story-hero-1-image-logo aplus-brand-story-hero\" cel_widget_id=\"aplus-brand-story-hero-1-image-logo\"\u003e\n             \u003cdiv class=\"apm-brand-story-hero\"\u003e\n    \u003cdiv class=\"apm-brand-story-background-image\"\u003e\n                                              \u003cimg alt=\"\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/eca6a8e9-b2f2-4828-930c-53aa8166206c.__CR0,0,3660,1563_PT0_SX1464_V1___.png\"\u003e  \u003c\/div\u003e\n\n     \u003cdiv class=\"apm-brand-story-text-bottom\"\u003e\n                                                    \u003ch3\u003e Urackify Dish Drying Rack \u003c\/h3\u003e                                      \u003cp\u003e Urackify is committed to creating dish racks that truly help with kitchen storage and meet different needs. \u003c\/p\u003e    \u003c\/div\u003e\n     \u003c\/div\u003e\n\u003cdiv style=\"clear:both\"\u003e\u003c\/div\u003e\n   \u003c\/div\u003e\n                             \u003c\/div\u003e\n\n                    \u003cdiv id=\"apm-brand-story-carousel\" data-a-carousel-options='{\"minimum_gutter_width\":10,\"show_partial_next\":true,\"name\":\"brand-story-carousel\",\"single_page_align\":\"left\",\"circular\":false}' aria-label=\"Featured content carousel\" aria-roledescription=\"carousel\" role=\"region\" class=\"a-begin a-carousel-container a-carousel-static a-carousel-display-stretchyGoodness a-carousel-transition-slide apm-brand-story-carousel size-cards a-carousel-container\"\u003e\n\u003cinput autocomplete=\"on\" type=\"hidden\" class=\"a-carousel-firstvisibleitem\"\u003e \u003cdiv class=\"a-row a-carousel-controls a-carousel-row a-carousel-has-buttons\"\u003e\u003cdiv class=\"a-carousel-row-inner\"\u003e\n\u003cdiv class=\"a-carousel-col a-carousel-left\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"a-carousel-col a-carousel-center\"\u003e\u003cdiv class=\"a-carousel-viewport\" aria-roledescription=\"slide\"\u003e\u003col class=\"a-carousel\" role=\"list\"\u003e  \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card apm-brand-story-carousel-card-0\"\u003e   \u003c\/li\u003e      \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card apm-brand-story-carousel-card-1\"\u003e           \u003cdiv class=\"celwidget aplus-module brand-story-card-3-about aplus-brand-story-card\" cel_widget_id=\"aplus-brand-story-card-3-about\"\u003e\n             \u003cdiv class=\"apm-brand-story-card\"\u003e\n    \u003cdiv class=\"apm-brand-story-logo-image\"\u003e\n                                              \u003cimg alt=\"\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/7dc20c64-d116-48d7-a8c0-d996a79796c6.__CR848,0,1303,600_PT0_SX315_V1___.jpg\"\u003e  \u003c\/div\u003e\n    \u003cdiv class=\"apm-brand-story-slogan-text\"\u003e\n                                                \u003ch3\u003e What Urackify Values Most \u003c\/h3\u003e                                      \u003cp\u003e Urackify merges practicality with timeless design, creating kitchen essentials that enhance daily life. Our engineered solutions prioritize adaptability, and minimalist aesthetics—crafted to last and adapt to your lifestyle. Every detail, from intuitive usability to subtle finishes, reflects a focus on functional beauty. We believe a well-designed kitchen transforms routines into moments of quiet joy. \u003c\/p\u003e    \u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"clear:both\"\u003e\u003c\/div\u003e\n   \u003c\/div\u003e\n \u003c\/li\u003e    \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card apm-brand-story-carousel-card-2\"\u003e           \u003cdiv class=\"celwidget aplus-module brand-story-card-2-media-asset aplus-brand-story-card\" cel_widget_id=\"aplus-brand-story-card-2-media-asset\"\u003e\n             \u003cdiv class=\"apm-brand-story-card\"\u003e\n    \u003cdiv class=\"apm-brand-story-background-image\"\u003e\n                                              \u003cimg alt=\"dish rack\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/f405f0b9-a4da-4324-9552-adafca51c976.__CR1,0,1120,1402_PT0_SX362_V1___.png\"\u003e  \u003c\/div\u003e\n\n     \u003c\/div\u003e\n\u003cdiv style=\"clear:both\"\u003e\u003c\/div\u003e\n   \u003c\/div\u003e\n \u003c\/li\u003e    \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card apm-brand-story-carousel-card-3\"\u003e           \u003cdiv class=\"celwidget aplus-module brand-story-card-2-media-asset aplus-brand-story-card\" cel_widget_id=\"aplus-brand-story-card-2-media-asset\"\u003e\n             \u003cdiv class=\"apm-brand-story-card\"\u003e\n    \u003cdiv class=\"apm-brand-story-background-image\"\u003e\n                                              \u003cimg alt=\"dish rack\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/946bb558-5ec5-4ee7-9957-1d3025e9089e.__CR0,0,1121,1403_PT0_SX362_V1___.png\"\u003e  \u003c\/div\u003e\n\n     \u003c\/div\u003e\n\u003cdiv style=\"clear:both\"\u003e\u003c\/div\u003e\n   \u003c\/div\u003e\n \u003c\/li\u003e    \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card apm-brand-story-carousel-card-4\"\u003e           \u003cdiv class=\"celwidget aplus-module brand-story-card-1-four-asin aplus-brand-story-card\" cel_widget_id=\"aplus-brand-story-card-1-four-asin\"\u003e\n                  \u003cdiv class=\"apm-brand-story-card\"\u003e\n    \u003cdiv class=\"apm-brand-story-image-grid\" role=\"list\"\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003c\/div\u003e\n\n      \u003cdiv class=\"apm-brand-story-text apm-brand-story-text-single\"\u003e\n                                                     \u003ch3\u003e Basic Integrated Dish Rack \u003c\/h3\u003e      \u003c\/div\u003e\n     \u003c\/div\u003e\n\u003cdiv style=\"clear:both\"\u003e\u003c\/div\u003e\n   \u003c\/div\u003e\n \u003c\/li\u003e    \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card apm-brand-story-carousel-card-5\"\u003e           \u003cdiv class=\"celwidget aplus-module brand-story-card-1-four-asin aplus-brand-story-card\" cel_widget_id=\"aplus-brand-story-card-1-four-asin\"\u003e\n                  \u003cdiv class=\"apm-brand-story-card\"\u003e\n    \u003cdiv class=\"apm-brand-story-image-grid\" role=\"list\"\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003c\/div\u003e\n\n      \u003cdiv class=\"apm-brand-story-text apm-brand-story-text-single\"\u003e\n                                                     \u003ch3\u003e High-End Dish drying rack \u003c\/h3\u003e      \u003c\/div\u003e\n     \u003c\/div\u003e\n\u003cdiv style=\"clear:both\"\u003e\u003c\/div\u003e\n   \u003c\/div\u003e\n \u003c\/li\u003e    \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card apm-brand-story-carousel-card-6\"\u003e           \u003cdiv class=\"celwidget aplus-module brand-story-card-1-four-asin aplus-brand-story-card\" cel_widget_id=\"aplus-brand-story-card-1-four-asin\"\u003e\n                  \u003cdiv class=\"apm-brand-story-card\"\u003e\n    \u003cdiv class=\"apm-brand-story-image-grid\" role=\"list\"\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003c\/div\u003e\n\n      \u003cdiv class=\"apm-brand-story-text apm-brand-story-text-single\"\u003e\n                                                     \u003ch3\u003e Extendable Dish Rack \u003c\/h3\u003e      \u003c\/div\u003e\n     \u003c\/div\u003e\n\u003cdiv style=\"clear:both\"\u003e\u003c\/div\u003e\n   \u003c\/div\u003e\n \u003c\/li\u003e    \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card apm-brand-story-carousel-card-7\"\u003e           \u003cdiv class=\"celwidget aplus-module brand-story-card-1-four-asin aplus-brand-story-card\" cel_widget_id=\"aplus-brand-story-card-1-four-asin\"\u003e\n                  \u003cdiv class=\"apm-brand-story-card\"\u003e\n    \u003cdiv class=\"apm-brand-story-image-grid\" role=\"list\"\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003c\/div\u003e\n\n      \u003cdiv class=\"apm-brand-story-text apm-brand-story-text-single\"\u003e\n                                                     \u003ch3\u003e 2 Tier Dish Rack \u003c\/h3\u003e      \u003c\/div\u003e\n     \u003c\/div\u003e\n\u003cdiv style=\"clear:both\"\u003e\u003c\/div\u003e\n   \u003c\/div\u003e\n \u003c\/li\u003e    \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card apm-brand-story-carousel-card-8\"\u003e           \u003cdiv class=\"celwidget aplus-module brand-story-card-1-four-asin aplus-brand-story-card\" cel_widget_id=\"aplus-brand-story-card-1-four-asin\"\u003e\n                  \u003cdiv class=\"apm-brand-story-card\"\u003e\n    \u003cdiv class=\"apm-brand-story-image-grid\" role=\"list\"\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003c\/div\u003e\n\n      \u003cdiv class=\"apm-brand-story-text apm-brand-story-text-single\"\u003e\n                                                     \u003ch3\u003e Sink Dish Rack \u003c\/h3\u003e      \u003c\/div\u003e\n     \u003c\/div\u003e\n\u003cdiv style=\"clear:both\"\u003e\u003c\/div\u003e\n   \u003c\/div\u003e\n \u003c\/li\u003e    \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card apm-brand-story-carousel-card-9\"\u003e           \u003cdiv class=\"celwidget aplus-module brand-story-card-1-four-asin aplus-brand-story-card\" cel_widget_id=\"aplus-brand-story-card-1-four-asin\"\u003e\n                  \u003cdiv class=\"apm-brand-story-card\"\u003e\n    \u003cdiv class=\"apm-brand-story-image-grid\" role=\"list\"\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003cdiv class=\"apm-brand-story-image-grid-item\" role=\"listitem\"\u003e\n                 \u003c\/div\u003e\n         \u003c\/div\u003e\n\n      \u003cdiv class=\"apm-brand-story-text apm-brand-story-text-single\"\u003e\n                                                     \u003ch3\u003e Dish Rack for Kitchen Counter \u003c\/h3\u003e      \u003c\/div\u003e\n     \u003c\/div\u003e\n\u003cdiv style=\"clear:both\"\u003e\u003c\/div\u003e\n   \u003c\/div\u003e\n \u003c\/li\u003e    \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card apm-brand-story-carousel-card-10\"\u003e           \u003cdiv class=\"celwidget aplus-module brand-story-card-2-media-asset aplus-brand-story-card\" cel_widget_id=\"aplus-brand-story-card-2-media-asset\"\u003e\n             \u003cdiv class=\"apm-brand-story-card\"\u003e\n    \u003cdiv class=\"apm-brand-story-background-image\"\u003e\n                                              \u003cimg alt=\"\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/f376efe8-f989-4806-8e51-855c2613c8d3.__CR0,0,362,453_PT0_SX362_V1___.jpg\"\u003e  \u003c\/div\u003e\n\n     \u003cdiv class=\"apm-brand-story-text-bottom\"\u003e\n                                                    \u003ch3\u003e Innovative Dish Rack \u003c\/h3\u003e                                      \u003cp\u003e The first one to blend practicality and warmth with refined aesthetics \u003c\/p\u003e    \u003c\/div\u003e\n     \u003c\/div\u003e\n\u003cdiv style=\"clear:both\"\u003e\u003c\/div\u003e\n   \u003c\/div\u003e\n \u003c\/li\u003e    \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card apm-brand-story-carousel-card-11\"\u003e           \u003cdiv class=\"celwidget aplus-module brand-story-card-2-media-asset aplus-brand-story-card\" cel_widget_id=\"aplus-brand-story-card-2-media-asset\"\u003e\n             \u003cdiv class=\"apm-brand-story-card\"\u003e\n    \u003cdiv class=\"apm-brand-story-background-image\"\u003e\n                                              \u003cimg alt=\"\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/bfa3274d-bd20-4fe8-bf49-1668ecd46544.__CR0,0,362,453_PT0_SX362_V1___.jpg\"\u003e  \u003c\/div\u003e\n\n     \u003cdiv class=\"apm-brand-story-text-bottom\"\u003e\n                                                    \u003ch3\u003e New Release \u003c\/h3\u003e                                      \u003cp\u003e Two Layer Bread Box for Kitchen Countertop \u003c\/p\u003e    \u003c\/div\u003e\n     \u003c\/div\u003e\n\u003cdiv style=\"clear:both\"\u003e\u003c\/div\u003e\n   \u003c\/div\u003e\n \u003c\/li\u003e   \u003c\/ol\u003e\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv class=\"a-carousel-col a-carousel-right\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e \u003cspan class=\"a-end aok-hidden\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e \u003c\/div\u003e\n        \u003cdiv class=\"aplus-brandstory-pagination\"\u003e\n             \u003c\/div\u003e\n    \u003c\/div\u003e\n \u003c\/div\u003e\n    \u003c\/div\u003e\n\u003c\/div\u003e    \u003c\/div\u003e                                 \u003cdiv id=\"aplus\" class=\"a-section a-spacing-large bucket\"\u003e \u003chr noshade size=\"1\" class=\"bucketDivider\"\u003e\n                                  \u003cstyle\u003e\n    .aplus-v2 .aplus-content-wrapper {\n        position: relative;\n        overflow: hidden;\n    }\n\n    .aplus-v2 .container-with-background-image {\n        width: 100%;\n        height: 100%;\n        background-repeat: no-repeat;\n        background-size: cover;\n    }\n\n    .aplus-v2 .aplus-module-csa-wrapper {\n        display: flow-root;\n    }\n\u003c\/style\u003e\n  \u003cscript type=\"application\/javascript\"\u003e\n    function logShoppableMetrics(moduleName, showsAddToCart) {\n        if (window.ue \u0026amp;\u0026amp; window.ue.count) {\n            window.ue.count(\"aplus:shoppable:\" + moduleName + \":addToCart\", showsAddToCart ? 1 : 0);\n        }\n    }\n\u003c\/script\u003e\n\n                                                \u003ch2\u003eProduct description\u003c\/h2\u003e   \u003cdiv lang=\"en_US\"\u003e\n    \u003cdiv class=\"aplus-v2 desktop celwidget\" cel_widget_id=\"aplus\"\u003e\n            \u003cscript type=\"application\/javascript\"\u003e\n\n    \/**\n     * Common event handler for click and keydown events.\n     * @param {Event} event - The event object.\n     * @param {Function} handleClickOrEnter - Function to handle click or Enter key events.\n     * @param {Function} handleEsc - Function to handle Esc key events.\n     *\/\n    \/\/ [TODO][AplusMantle-8064] Create common event handler util(key events, click events) in AplusModuleResources\n    function handleClickAndKeyEvents(event, handleClickOrEnterOrSpace) {\n        const ENTER_KEY_CODE = 13;\n        const ESCAPE_KEY_CODE = 27;\n        const SPACE_KEY_CODE = 32;\n        const isClick = event.type === 'click';\n        const isKeydown = event.type === 'keydown';\n        const isEnter = isKeydown \u0026amp;\u0026amp; event.keyCode === ENTER_KEY_CODE;\n        const isSpace = isKeydown \u0026amp;\u0026amp; event.keyCode === SPACE_KEY_CODE;\n        const isEsc = isKeydown \u0026amp;\u0026amp; event.keyCode === ESCAPE_KEY_CODE;\n\n        if (isClick || isEnter || isSpace) {\n            handleClickOrEnterOrSpace();\n        } else if (isEsc) {\n            handleEsc(event);\n        }\n    }\n\n    \/**\n    * Function to handle esc key event.\n    * @param {Event} event - The event object.\n    *\/\n    function handleEsc(event) {\n        event.target.blur()  \/\/ force remove focus\n    }\n\n\u003c\/script\u003e      \u003cdiv class=\"aplus-content-wrapper\"\u003e\n                                  \u003cdiv class=\"aplus-module-csa-wrapper\" data-csa-c-type=\"widget\" data-csa-c-content-id=\"amzn1.aplus.7c31eeec-3553-4674-98ce-c0d2178688c8:1788573902473.f04ebc15-e168-4523-b0fd-67bbea537da7.en_US\"\u003e\n     \u003cdiv class=\"celwidget aplus-module premium-module-8-hero-video aplus-premium\" cel_widget_id=\"aplus-premium-module-8-hero-video\"\u003e\n                    \u003cdiv class=\"a-section a-spacing-none premium-aplus premium-aplus-module-8\"\u003e                                   \u003cdiv class=\"a-section a-spacing-none premium-aplus-module-8-video\"\u003e  \u003cdiv class=\"a-section a-spacing-none video-placeholder\"\u003e\u003c\/div\u003e  \u003cdiv class=\"a-section a-spacing-none video-container\"\u003e       \u003cdiv id=\"36b49d85-6aa1-4810-bd43-c6a41e70b66e\" style=\"width:100%; height:100%;\"\u003e\n\n\n\n\n\u003clink rel=\"stylesheet\" href=\"https:\/\/m.media-amazon.com\/images\/I\/01XyOJGuDTL.css?AUIClients\/VSEPlayer\"\u003e\n\u003clink rel=\"stylesheet\" href=\"https:\/\/m.media-amazon.com\/images\/I\/51NP-5Gx4JL._RC|11s4jq82GaL.css_.css?AUIClients\/Brila\"\u003e\n\u003cdiv data-csa-c-component=\"aplus-vse-video-widget\" data-csa-c-content-id=\"amzn1.vse.video.08267830deb34042a1d6a505c54aa832\" data-csa-c-cs-type=\"vse\" data-csa-c-painter=\"vse-player\" data-csa-c-slot-id=\"aplus-ive-player\" data-csa-c-type=\"widget\" data-csa-op-log-render=\"\" class=\"a-section vse-player-container\"\u003e\n\u003cscript type=\"a-state\" data-a-state='{\"key\":\"aplus-1900-player-cd15fa98-f937-4513-9bfd-abaabb4f777a-player-ps\"}'\u003e{\"parentAsin\":\"\",\"enableFullScreenByDefault\":false,\"clickstreamNexusMetricsConfig\":{\"producerId\":\"vsemetrics_playercards\",\"schemaId\":\"clickstream.CustomerEvent.4\",\"actionType\":\"DISCOVERY\",\"eventOwner\":\"vsemetrics_playercards\",\"eventType\":\"IVEVideoView\",\"productId\":\"B0GGB7MZC1\"},\"videoReferenceId\":\"5ec8b275-212b-43b6-9cf9-751bc30a71a0_ef252baf-5b4d-4081-86b0-e4d9de1f5f6a\",\"contentId\":\"B0GGB7MZC1\",\"ccvDisclosure\":\"\",\"closedCaptionsConfig\":{\"captionsOnTexts\":{\"de\":\"German (Automated)\",\"ja\":\"Japanese (Automated)\",\"en\":\"English (Automated)\",\"fr\":\"French (Automated)\",\"es\":\"Spanish (Automated)\"},\"captionsOffText\":\"Captions off\",\"languageToLabelTexts\":{\"English\":\"English\",\"French\":\"French\",\"German\":\"German\",\"Spanish\":\"Spanish\",\"Japanese\":\"Japanese\"}},\"mimeType\":\"application\/x-mpegURL\",\"videoHeight\":480,\"disableReportIllegalLink\":false,\"videoWidth\":854,\"initialClosedCaptions\":\"en,https:\/\/m.media-amazon.com\/images\/S\/vse-vms-closed-captions-artifact-us-east-1-prod\/closedCaptions\/ae3d8f1e-6b09-4b41-a18b-56fca2f6c743.vtt\",\"useHotspotsNX\":false,\"eligibleToTriggerCCWeblab\":false,\"videoUrl\":\"https:\/\/m.media-amazon.com\/images\/S\/vse-vms-transcoding-artifact-us-east-1-prod\/ede09ae0-6db4-4e40-900a-9418e7010abd\/default.jobtemplate.hls.m3u8\",\"metricsEmissionMethod\":\"nexus\",\"imageUrl\":\"https:\/\/m.media-amazon.com\/images\/I\/81tzXZZ5aaL.jpg\",\"needPlayerFactory\":false,\"isMobile\":false,\"showHotspots\":false,\"aciContentId\":\"amzn1.vse.video.08267830deb34042a1d6a505c54aa832\",\"altText\":\"Expandable Dish Drying Rack for Kitchen Counter\",\"videoContentId\":\"08267830deb34042a1d6a505c54aa832\",\"clientPrefix\":\"aplus-1900\",\"hotSpotsV3Weblab\":\"\",\"productAsin\":\"B0GGB7MZC1\",\"labelDetails\":{\"labelName\":\"\",\"labelType\":\"\",\"labelWeblabName\":\"\",\"labelWeblabTreatment\":\"\",\"showLabel\":false,\"tooltipSelector\":\"\"},\"sushiMetricsConfig\":{\"eventSource\":\"Player\",\"endpoint\":\"https:\/\/unagi-na.amazon.com\/1\/events\/com.amazon.eel.vse.metrics.prod.events.test\",\"requestId\":\"JTJJSXTSP5Y5CP0JGTT4\",\"sessionId\":\"146-1324233-2676035\",\"customerId\":\"0\",\"refMarkers\":\"aplus-1900_ref\",\"sessionType\":1,\"placementContext\":\"desktop_web.AplusWidget.aplusdp\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"weblabIds\":\"\",\"isInternal\":false,\"isRobot\":false,\"clientId\":\"VSE-US\",\"videoAsinList\":\"\",\"pageAsin\":\"B0GGB7MZC1\"},\"reportUrl\":\"\",\"videoTitle\":\"Expandable Dish Drying Rack for Kitchen Counter\",\"vendorName\":\"\",\"nexusMetricsConfig\":{\"eventSource\":\"Player\",\"isInternal\":false,\"playerTSMMetricsSchemaId\":\"vse.VSECardsPlayerEvents.9\",\"widgetMetricsSchemaId\":\"vse.VSECardsEvents.9\",\"producerId\":\"vsemetrics_playercards\",\"refMarkers\":\"aplus-1900_ref\",\"placementContext\":\"desktop_web.AplusWidget.aplusdp\",\"weblabIds\":\"\",\"clientId\":\"VSE-US\",\"videoAsin\":\"08267830deb34042a1d6a505c54aa832\",\"videoAsinList\":\"\",\"pageAsin\":\"B0GGB7MZC1\"},\"awaConfig\":{\"useUpNextComponent\":false,\"clickstreamNexusMetricsConfig\":{\"producerId\":\"vsemetrics_playercards\",\"schemaId\":\"clickstream.CustomerEvent.4\",\"actionType\":\"DISCOVERY\",\"eventOwner\":\"vsemetrics_playercards\",\"eventType\":\"IVEVideoView\",\"productId\":\"B0GGB7MZC1\"},\"initialVideo\":\"08267830deb34042a1d6a505c54aa832\",\"shouldPreload\":true,\"enableClickBasedAttribution\":false,\"isChromelessPlayer\":false,\"closedCaptionsConfig\":{\"captionsOnTexts\":{\"de\":\"German (Automated)\",\"ja\":\"Japanese (Automated)\",\"en\":\"English (Automated)\",\"fr\":\"French (Automated)\",\"es\":\"Spanish (Automated)\"},\"captionsOffText\":\"Captions off\",\"languageToLabelTexts\":{\"English\":\"English\",\"French\":\"French\",\"German\":\"German\",\"Spanish\":\"Spanish\",\"Japanese\":\"Japanese\"}},\"enableDynamicBlur\":false,\"showPlayerPlayButton\":false,\"isVideoImmersivePlayer\":false,\"metricsEmissionMethod\":\"nexus\",\"skipInitialFocus\":false,\"playerSkin\":\"none\",\"disabledViewIds\":[\"replayHint\"],\"includeEarnsComissionDisclosure\":false,\"customerId\":\"0\",\"containerId\":\"aplus-1900-player-cd15fa98-f937-4513-9bfd-abaabb4f777a\",\"allowCrossOrigin\":false,\"requestMetadata\":{\"clientId\":\"VSE-US\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"requestId\":\"JTJJSXTSP5Y5CP0JGTT4\",\"sessionId\":\"146-1324233-2676035\",\"method\":\"desktop_web.AplusWidget.aplusdp\",\"pageAsin\":\"\"},\"shouldLoop\":false,\"shouldDisableControls\":false,\"alwaysSetInitialVideo\":true,\"showPlayerCloseButton\":false,\"clientPrefix\":\"aplus-1900\",\"useAutoplayFallback\":false,\"sushiMetricsConfig\":{\"eventSource\":\"Player\",\"endpoint\":\"https:\/\/unagi-na.amazon.com\/1\/events\/com.amazon.eel.vse.metrics.prod.events.test\",\"requestId\":\"JTJJSXTSP5Y5CP0JGTT4\",\"sessionId\":\"146-1324233-2676035\",\"customerId\":\"0\",\"refMarkers\":\"aplus-1900_ref\",\"sessionType\":1,\"placementContext\":\"desktop_web.AplusWidget.aplusdp\",\"marketplaceId\":\"ATVPDKIKX0DER\",\"weblabIds\":\"\",\"isInternal\":false,\"isRobot\":false,\"clientId\":\"VSE-US\",\"videoAsinList\":\"\",\"pageAsin\":\"B0GGB7MZC1\"},\"ospLinkCode\":\"vse\",\"showPosterImage\":true,\"languageCode\":\"en\",\"languageLocalization\":{\"play\":\"Play\",\"volumeLevel\":\"Volume Level\",\"subtitles\":\"Subtitles\",\"volumeSlider\":\"Volume Slider\",\"playVideo\":\"Click to play video\",\"fullscreen\":\"Fullscreen\",\"scrubberBar\":\"Scrubber bar\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"pause\":\"Pause\",\"captions\":\"Captions\",\"nonfullscreen\":\"Non-Fullscreen\"},\"version\":\"\",\"isMoreVideosButtonEnabled\":false,\"nexusMetricsConfig\":{\"eventSource\":\"Player\",\"isInternal\":false,\"playerTSMMetricsSchemaId\":\"vse.VSECardsPlayerEvents.9\",\"widgetMetricsSchemaId\":\"vse.VSECardsEvents.9\",\"producerId\":\"vsemetrics_playercards\",\"refMarkers\":\"aplus-1900_ref\",\"placementContext\":\"desktop_web.AplusWidget.aplusdp\",\"weblabIds\":\"\",\"clientId\":\"VSE-US\",\"videoAsin\":\"08267830deb34042a1d6a505c54aa832\",\"videoAsinList\":\"\",\"pageAsin\":\"B0GGB7MZC1\"},\"shouldStartMuted\":false,\"airyVersion\":\"VideoJS\",\"languagePreferenceStrings\":{},\"enableInactiveFocus\":true,\"showVideoInfo\":false,\"isReactFactory\":false,\"osaInstrumentationConfig\":{\"schemaId\":\"csa.VideoInteractions.2\",\"producerId\":\"vsemetrics_csa_instrumentation\"},\"enableDelphiAttribution\":true,\"includeReportWidget\":false,\"shouldAutoplay\":false},\"placement\":\"desktop_web.AplusWidget.aplusdp\"}\u003c\/script\u003e\u003cdiv class=\"vse-airy-container vse-player-container none \"\u003e\n\u003cdiv id=\"ive-aplus-1900-player-label-container\" data-element-id=\"ive-player-label-container\" class=\"a-section a-spacing-none ive-player-label-container\"\u003e\n\u003cspan class=\"a-declarative\" data-action=\"a-popover\" data-a-popover='{\"name\":\"ive-aplus-1900-label-type-tooltip\",\"width\":\"300\",\"position\":\"triggerRight\",\"dataStrategy\":\"preload\"}'\u003e\u003c\/span\u003e\u003cdiv class=\"a-popover-preload\" id=\"a-popover-ive-aplus-1900-label-type-tooltip\"\u003e\n\u003cspan class=\"ive-demo-label-tooltip ive-player-label-tooltip aok-hidden\"\u003eThe video showcases the product in use.\u003c\/span\u003e\u003cspan class=\"ive-assembly-label-tooltip ive-player-label-tooltip aok-hidden\"\u003eThe video guides you through product setup.\u003c\/span\u003e\u003cspan class=\"ive-comparison-label-tooltip ive-player-label-tooltip aok-hidden\"\u003eThe video compares multiple products.\u003c\/span\u003e\u003cspan class=\"ive-unboxing-label-tooltip ive-player-label-tooltip aok-hidden\"\u003eThe video shows the product being unpacked.\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"aplus-1900-player-cd15fa98-f937-4513-9bfd-abaabb4f777a\" class=\"vse-player\" data-element-id=\"vse-player-container\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ch1 class=\"vse-video-player-title\"\u003e Expandable Dish Drying Rack for Kitchen Counter\u003c\/h1\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n  (window.AmazonUIPageJS ? AmazonUIPageJS : P).load.js('https:\/\/m.media-amazon.com\/images\/I\/61rtJ3+GOOL.js?AUIClients\/VSEPlayer');\n  (window.AmazonUIPageJS ? AmazonUIPageJS : P).load.js('https:\/\/m.media-amazon.com\/images\/I\/3175HHgX+OL._RC|11KFCxsEshL.js,11uNd0zHc-L.js,51ocjucRF0L.js,41tLmUCnr0L.js,91G7VmlBk7L.js,11cPgPsKKOL.js_.js?AUIClients\/Brila');\n\u003c\/script\u003e\n\n\u003c\/div\u003e\n      \u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"a-section a-text-center\"\u003e                                   \u003cp class=\"aplus-description aplus-container-3 aplus-p1\"\u003e This expandable dish rack adjusts to fit your needs—easily storing and drying dishes for everyday use or when entertaining guests！ \u003c\/p\u003e    \u003c\/div\u003e \u003c\/div\u003e    \u003c\/div\u003e\n     \u003c\/div\u003e\n               \u003cdiv class=\"aplus-module-csa-wrapper\" data-csa-c-type=\"widget\" data-csa-c-content-id=\"amzn1.aplus.7c31eeec-3553-4674-98ce-c0d2178688c8:1788573902473.8ab985e5-5ebb-4bfa-865c-54b6ed83e354.en_US\"\u003e\n     \u003cdiv class=\"celwidget aplus-module premium-module-2-fullbackground-image aplus-premium\" cel_widget_id=\"aplus-premium-module-2-fullbackground-image\"\u003e\n                             \u003cdiv class=\"a-section a-spacing-none premium-aplus premium-aplus-module-2\"\u003e                                   \u003cdiv class=\"a-section a-spacing-none premium-background-wrapper\"\u003e  \u003cdiv class=\"a-section a-spacing-none background-image\"\u003e                                     \u003cimg alt=\"Text reads \u0026amp;#39;Adjustable Capacity\u0026amp;#39;. Black dish drying rack with adjustable dividers holding blue and yellow plates, utensils, and other dishware on countertop.\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/98ecf762-7d40-48b1-a5c0-88e4cd6d17bd.__CR0,0,1464,600_PT0_SX1464_V1___.jpg\"\u003e  \u003c\/div\u003e   \u003c\/div\u003e \u003cdiv class=\"a-section a-text-center\"\u003e                                   \u003cp class=\"aplus-description aplus-container-3 aplus-p1\"\u003e This expandable dish rack slides from 16.14\" to 23.62\". Note:Please place the dish rack flat on the countertop before expanding it. \u003c\/p\u003e    \u003c\/div\u003e \u003c\/div\u003e      \u003c\/div\u003e\n     \u003c\/div\u003e\n               \u003cdiv class=\"aplus-module-csa-wrapper\" data-csa-c-type=\"widget\" data-csa-c-content-id=\"amzn1.aplus.7c31eeec-3553-4674-98ce-c0d2178688c8:1788573902473.27f7b0c1-1359-4f68-96eb-7445f6042572.en_US\"\u003e\n     \u003cdiv class=\"celwidget aplus-module premium-module-2-fullbackground-image aplus-premium\" cel_widget_id=\"aplus-premium-module-2-fullbackground-image\"\u003e\n                             \u003cdiv class=\"a-section a-spacing-none premium-aplus premium-aplus-module-2\"\u003e                                   \u003cdiv class=\"a-section a-spacing-none premium-background-wrapper\"\u003e  \u003cdiv class=\"a-section a-spacing-none background-image\"\u003e                                     \u003cimg alt=\"stainless steel dish drying rack expandable black large rustproof dish drainer for kitchen counter\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/eb8f39c1-5077-42ac-a1ff-5c3f455bcebd.__CR0,0,1464,600_PT0_SX1464_V1___.jpg\"\u003e  \u003c\/div\u003e   \u003c\/div\u003e \u003cdiv class=\"a-section a-text-center\"\u003e                                   \u003cp class=\"aplus-description aplus-container-3 aplus-p1\"\u003e This dish drainer enables quick and efficient fully automatic drainage. No more worries about water pooling on your countertop！ \u003c\/p\u003e    \u003c\/div\u003e \u003c\/div\u003e      \u003c\/div\u003e\n     \u003c\/div\u003e\n               \u003cdiv class=\"aplus-module-csa-wrapper\" data-csa-c-type=\"widget\" data-csa-c-content-id=\"amzn1.aplus.7c31eeec-3553-4674-98ce-c0d2178688c8:1788573902473.22257d45-2a54-4b70-8899-582ab91eab19.en_US\"\u003e\n     \u003cdiv class=\"celwidget aplus-module premium-module-2-fullbackground-image aplus-premium\" cel_widget_id=\"aplus-premium-module-2-fullbackground-image\"\u003e\n                             \u003cdiv class=\"a-section a-spacing-none premium-aplus premium-aplus-module-2\"\u003e                                   \u003cdiv class=\"a-section a-spacing-none premium-background-wrapper\"\u003e  \u003cdiv class=\"a-section a-spacing-none background-image\"\u003e                                     \u003cimg alt=\"stainless steel dish drying rack expandable black large rustproof dish drainer for kitchen counter\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/981b6e66-3eaa-429c-8ef6-8923fed6a954.__CR0,0,1464,600_PT0_SX1464_V1___.jpg\"\u003e  \u003c\/div\u003e   \u003c\/div\u003e \u003cdiv class=\"a-section a-text-center\"\u003e                                   \u003cp class=\"aplus-description aplus-container-3 aplus-p1\"\u003e The three-way adjustable drain spout allows the dish rack to adapt to different kitchen countertops, ensuring smooth drainage no matter where the faucet is. \u003c\/p\u003e    \u003c\/div\u003e \u003c\/div\u003e      \u003c\/div\u003e\n     \u003c\/div\u003e\n               \u003cdiv class=\"aplus-module-csa-wrapper\" data-csa-c-type=\"widget\" data-csa-c-content-id=\"amzn1.aplus.7c31eeec-3553-4674-98ce-c0d2178688c8:1788573902473.834ca178-bea1-488d-b5d2-77cef39a3af8.en_US\"\u003e\n     \u003cdiv class=\"celwidget aplus-module premium-module-2-fullbackground-image aplus-premium\" cel_widget_id=\"aplus-premium-module-2-fullbackground-image\"\u003e\n                             \u003cdiv class=\"a-section a-spacing-none premium-aplus premium-aplus-module-2\"\u003e                                   \u003cdiv class=\"a-section a-spacing-none premium-background-wrapper\"\u003e  \u003cdiv class=\"a-section a-spacing-none background-image\"\u003e                                     \u003cimg alt=\"Text reads \u0026amp;#39;Retract\u0026amp;#39;, \u0026amp;#39;Extend\u0026amp;#39;, \u0026amp;#39;Limited Space\u0026amp;#39;, \u0026amp;#39;Next to the Wall\u0026amp;#39;, \u0026amp;#39;Narrow Countertop\u0026amp;#39;, \u0026amp;#39;Kitchen Island\u0026amp;#39;. Dish rack with yellow and black design shown in four configurations demonstrating retractable and extendable positioning options.\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/34d535d8-7c2d-4572-aa1d-52830187ed74.__CR0,0,1464,600_PT0_SX1464_V1___.jpg\"\u003e  \u003c\/div\u003e   \u003c\/div\u003e \u003cdiv class=\"a-section a-text-center\"\u003e                                   \u003cp class=\"aplus-description aplus-container-3 aplus-p1\"\u003e Our dual-peak design holds dinner plates of all sizes securely.Made with stainless steel guardrails and a high-strength fingerprint-resistant PP drip tray, this dish drainer resists rust and daily wear. \u003c\/p\u003e    \u003c\/div\u003e \u003c\/div\u003e      \u003c\/div\u003e\n     \u003c\/div\u003e\n               \u003cdiv class=\"aplus-module-csa-wrapper\" data-csa-c-type=\"widget\" data-csa-c-content-id=\"amzn1.aplus.7c31eeec-3553-4674-98ce-c0d2178688c8:1788573902473.eb73aa1b-3cbb-4742-97ea-4422f392c77a.en_US\"\u003e\n     \u003cdiv class=\"celwidget aplus-module premium-module-13-carousel aplus-premium\" cel_widget_id=\"aplus-premium-module-13-carousel\"\u003e\n                                                                    \u003cdiv class=\"a-section a-spacing-none premium-aplus premium-aplus-module-13\"\u003e                                     \u003cdiv class=\"a-section a-spacing-none aplus-carousel-container\"\u003e \u003cdiv id=\"premium-aplus-13-carousel-5-id\" data-a-carousel-options='{\"peek_percentage\":0,\"minimum_gutter_width\":0,\"show_partial_next\":false,\"name\":\"premium-aplus-13-carousel-5\"}' aria-label=\"Featured content carousel\" aria-roledescription=\"carousel\" data-a-display-strategy=\"single\" data-a-transition-strategy=\"slideCircular\" role=\"region\" class=\"a-begin a-carousel-container a-carousel-static a-carousel-display-single a-carousel-transition-slideCircular\"\u003e\n\u003cinput autocomplete=\"on\" type=\"hidden\" class=\"a-carousel-firstvisibleitem\"\u003e  \u003cdiv class=\"a-row a-carousel-controls a-carousel-row a-carousel-has-buttons a-carousel-overlay-buttons a-carousel-rounded-buttons\"\u003e\u003cdiv class=\"a-carousel-row-inner\"\u003e\n\u003cdiv class=\"a-carousel-col a-carousel-left\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"a-carousel-col a-carousel-center\"\u003e\u003cdiv class=\"a-carousel-viewport\" aria-roledescription=\"slide\"\u003e\u003col class=\"a-carousel\" role=\"list\"\u003e     \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card aplus-carousel-element\" aria-setsize=\"2\"\u003e \u003cdiv id=\"premium-aplus-13-carousel-5-slide-0\"\u003e\n                                         \u003cdiv class=\"a-section a-spacing-none aplus-card-image\"\u003e                                         \u003cimg alt=\"stainless steel dish drying rack expandable black large rustproof dish drainer for kitchen counter\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/cbfa337a-9dd3-493d-809c-d03e462a22e6.__CR0,0,1464,600_PT0_SX1464_V1___.jpg\"\u003e    \u003c\/div\u003e   \u003c\/div\u003e\n                            \u003c\/li\u003e      \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card aplus-carousel-element\" aria-setsize=\"2\"\u003e \u003cdiv id=\"premium-aplus-13-carousel-5-slide-1\"\u003e\n                                         \u003cdiv class=\"a-section a-spacing-none aplus-card-image\"\u003e                                         \u003cimg alt=\"stainless steel dish drying rack expandable black large rustproof dish drainer for kitchen counter\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/7d2bd18b-9f1a-47d3-a746-e991c1e15e54.__CR0,0,1464,600_PT0_SX1464_V1___.jpg\"\u003e    \u003c\/div\u003e   \u003c\/div\u003e\n                            \u003c\/li\u003e                   \u003c\/ol\u003e\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv class=\"a-carousel-col a-carousel-right\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e \u003cspan class=\"a-end aok-hidden\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e \u003cdiv class=\"a-section a-spacing-none aplus-pagination-wrapper\"\u003e      \u003cscript\u003e\n\nP.now(\"premium-aplus-13-carousel-5\").execute(\"init-pagination-carousel\", function(init) {\n    if (init) {\n        return;\n    }\n    P.register(\"premium-aplus-13-carousel-5\", function() {\n        return function() {\n            P.when(\"A\", \"jQuery\", \"a-carousel-framework\", \"ready\").execute(\"paginate-carousel\", function (A, $, framework) {\n                const ENTER_KEY_CODE = 13;\n                const ESCAPE_KEY_CODE = 27;\n                const LEFT_ARROW_KEY = 37;\n                const RIGHT_ARROW_KEY = 39;\n                const HOME_KEY = 36;\n                const END_KEY = 35;\n\n                var moduleId = \"5\";\n                var carouselName = \"premium-aplus-13-carousel-5\";\n                var paginationAction = \"aplus-pagination-dot-action-\" + moduleId + \"-\" + carouselName;\n                var paginationGroup = \"#aplus-pagination-group-\" + moduleId + \"-\" + carouselName;\n\n                \/* If the carousel goes to a new page *\/\n                A.on(\"a:carousel:\"+carouselName+\":change:pageNumber\", function (data) {\n                    A.$(paginationGroup+\" .carousel-slider-circle\").removeClass(\"aplus-carousel-active\").attr('aria-selected', 'false').attr('tabindex', -1)\n                                    .eq(data.newValue - 1).addClass(\"aplus-carousel-active\").attr('aria-selected', 'true').attr('tabindex', 0);\n                });\n\n                function syncPaginationDotsWithCarouselPages(numPages) {\n                    const parentElement = document.querySelector(paginationGroup);\n                    if (parentElement \u0026amp;\u0026amp; parentElement.children) {\n                        const children = parentElement.children;\n                        for (let i = 0; i \u0026lt; children.length; i++) {\n                            if (i \u0026gt;= numPages) {\n                                \/\/ If number of dots \u0026gt; num of pages, we should hide other dots\n                                children[i].classList.add('aplus-pagination-dot--display-none');\n                            } else if (children[i].classList.contains('aplus-pagination-dot--display-none')) {\n                                \/\/ Reset display of dots if it was hidden before\n                                children[i].classList.remove('aplus-pagination-dot--display-none');\n                            }\n                        }\n                    }\n                }\n\n                framework.onInit(carouselName, function (carousel) {\n                    try {\n                        var totalPages = carousel.getAttr('totalPages');\n                        syncPaginationDotsWithCarouselPages(totalPages);\n                        \/* Resize event handler to re-calculate the pagination dots count based on orientation *\/\n                        window.addEventListener('resize', function() {\n                            carousel.resize();\n                            totalPages = carousel.getAttr('totalPages');\n                            syncPaginationDotsWithCarouselPages(totalPages);\n                        });\n\n                        A.declarative(paginationAction, 'click keydown', function(event){\n                            var isClick = event.type === 'click';\n                            var isKeydown = event.type === 'keydown';\n                            var isEnter = isKeydown \u0026amp;\u0026amp; event.$event.keyCode === ENTER_KEY_CODE;\n                            var isEsc = isKeydown \u0026amp;\u0026amp; event.$event.keyCode === ESCAPE_KEY_CODE;\n                            var isLeftArrow = isKeydown \u0026amp;\u0026amp; event.$event.keyCode === LEFT_ARROW_KEY;\n                            var isRightArrow = isKeydown \u0026amp;\u0026amp; event.$event.keyCode === RIGHT_ARROW_KEY;\n                            var isHome = isKeydown \u0026amp;\u0026amp; event.$event.keyCode === HOME_KEY;\n                            var isEnd = isKeydown \u0026amp;\u0026amp; event.$event.keyCode === END_KEY;\n\n                            if (isClick || isEnter) {\n                                var data = event.data;\n                                carousel.gotoPage(data.page);\n                            } else if (isEsc) {\n                                event.$target.blur();\n                            } else if (isLeftArrow || isRightArrow || isHome || isEnd) {\n                                event.$event.preventDefault();\n                                const dots = A.$(paginationGroup + \" .carousel-slider-circle\");\n                                const currentIndex = dots.index(event.$target);\n                                let nextIndex;\n\n                                if (isLeftArrow) {\n                                    nextIndex = currentIndex \u0026gt; 0 ? currentIndex - 1 : dots.length - 1;\n                                } else if (isRightArrow) {\n                                    nextIndex = currentIndex \u0026lt; dots.length - 1 ? currentIndex + 1 : 0;\n                                } else if (isHome) {\n                                    nextIndex = 0;\n                                } else if (isEnd) {\n                                    nextIndex = dots.length - 1;\n                                }\n\n                                dots.eq(nextIndex).focus();\n                                carousel.gotoPage(nextIndex + 1);\n                            }\n                        });\n                    } catch (e) {\n                        P.log('Failed to init ' + carouselName + '. Error: ' + e.message, 'FATAL', 'AplusModuleResources');\n                    }\n                });\n            });\n        }\n    });\n});\n\u003c\/script\u003e\n     \u003cdiv class=\"aplus-mantle aplus-module\"\u003e\n        \u003cdiv class=\"aplus-carousel-nav\"\u003e\n            \u003cul id=\"aplus-pagination-group-5-premium-aplus-13-carousel-5\" class=\"aplus-pagination-dots\" aria-label=\"tablist-section\" role=\"tablist\"\u003e\n                  \u003cli class=\"aplus-pagination-dot\"\u003e\n                        \u003cspan class=\"a-declarative carousel-slider-circle aplus-display-inline-block aplus-carousel-active\" aria-selected=\"true\" data-action=\"aplus-pagination-dot-action-5-premium-aplus-13-carousel-5\" data-aplus-pagination-dot-action-5-premium-aplus-13-carousel-5='{\"page\": 1}' aria-label=\"slide-1\" aria-controls=\"premium-aplus-13-carousel-5-slide-0\" tabindex=\"0\" role=\"tab\"\u003e\u003c\/span\u003e\n                    \u003c\/li\u003e\n                  \u003cli class=\"aplus-pagination-dot\"\u003e\n                        \u003cspan class=\"a-declarative carousel-slider-circle aplus-display-inline-block \" aria-selected=\"false\" data-action=\"aplus-pagination-dot-action-5-premium-aplus-13-carousel-5\" data-aplus-pagination-dot-action-5-premium-aplus-13-carousel-5='{\"page\": 2}' aria-label=\"slide-2\" aria-controls=\"premium-aplus-13-carousel-5-slide-1\" tabindex=\"-1\" role=\"tab\"\u003e\u003c\/span\u003e\n                    \u003c\/li\u003e\n                 \u003c\/ul\u003e\n        \u003c\/div\u003e\n    \u003c\/div\u003e\n \u003c\/div\u003e \u003c\/div\u003e \u003cdiv class=\"a-section a-text-center\"\u003e                                  \u003c\/div\u003e \u003c\/div\u003e  \u003c\/div\u003e\n     \u003c\/div\u003e\n               \u003cdiv class=\"aplus-module-csa-wrapper\" data-csa-c-type=\"widget\" data-csa-c-content-id=\"amzn1.aplus.7c31eeec-3553-4674-98ce-c0d2178688c8:1788573902473.c300aa8f-7b7b-4221-8051-3a38d6689832.en_US\"\u003e\n     \u003cdiv class=\"celwidget aplus-module premium-module-11-faq aplus-premium\" cel_widget_id=\"aplus-premium-module-11-faq\"\u003e\n                                                                                                            \u003cdiv class=\"a-section a-spacing-none premium-aplus premium-aplus-module-11\"\u003e \u003cdiv data-faq-block=\"6\" class=\"a-section a-spacing-none aplus-container-2 faqs-container 6\"\u003e  \u003cul class=\"faq-list\"\u003e\n                    \u003cli id=\"faq-qa-pair-0\" class=\"faq-block\"\u003e\n                            \u003ch3\u003e\n                                \u003cspan data-faq-question=\"\" role=\"button\" tabindex=\"0\" aria-controls=\"faq-0\" aria-expanded=\"false\"\u003e\n                                                                      \u003cp class=\"aplus-question aplus-p1\"\u003e How big can it expand? OK for a tiny kitchen? \u003c\/p\u003e    \u003cspan class=\"faq-arrow\" aria-label=\"\"\u003e\u003c\/span\u003e\n                                \u003c\/span\u003e  \n                            \u003c\/h3\u003e\n                                                              \u003cp class=\"aplus-answer aplus-p2\"\u003e Expands 16.14\" to 23.62\". Fits small apartments or big loads. Collapses to save space. \u003c\/p\u003e    \u003c\/li\u003e\n                         \u003cli id=\"faq-qa-pair-1\" class=\"faq-block\"\u003e\n                            \u003ch3\u003e\n                                \u003cspan data-faq-question=\"\" role=\"button\" tabindex=\"0\" aria-controls=\"faq-1\" aria-expanded=\"false\"\u003e\n                                                                      \u003cp class=\"aplus-question aplus-p1\"\u003e Does the spout leak? Water all goes into sink? \u003c\/p\u003e    \u003cspan class=\"faq-arrow\" aria-label=\"\"\u003e\u003c\/span\u003e\n                                \u003c\/span\u003e  \n                            \u003c\/h3\u003e\n                                                              \u003cp class=\"aplus-answer aplus-p2\"\u003e No leaks. Angled drainboard + adjustable 3‑way spout sends all water into sink. Utensil holder has drainage holes too. \u003c\/p\u003e    \u003c\/li\u003e\n                         \u003cli id=\"faq-qa-pair-2\" class=\"faq-block\"\u003e\n                            \u003ch3\u003e\n                                \u003cspan data-faq-question=\"\" role=\"button\" tabindex=\"0\" aria-controls=\"faq-2\" aria-expanded=\"false\"\u003e\n                                                                      \u003cp class=\"aplus-question aplus-p1\"\u003e Hard to assemble? Wobble when full? \u003c\/p\u003e    \u003cspan class=\"faq-arrow\" aria-label=\"\"\u003e\u003c\/span\u003e\n                                \u003c\/span\u003e  \n                            \u003c\/h3\u003e\n                                                              \u003cp class=\"aplus-answer aplus-p2\"\u003e Tool‑free, makes together in 1 minute. The feet on the bottom are equipped with non-slip pads to prevent the dish rack from sliding \u003c\/p\u003e    \u003c\/li\u003e\n                         \u003cli id=\"faq-qa-pair-3\" class=\"faq-block\"\u003e\n                            \u003ch3\u003e\n                                \u003cspan data-faq-question=\"\" role=\"button\" tabindex=\"0\" aria-controls=\"faq-3\" aria-expanded=\"false\"\u003e\n                                                                      \u003cp class=\"aplus-question aplus-p1\"\u003e Is the drain spout hard to snap on? \u003c\/p\u003e    \u003cspan class=\"faq-arrow\" aria-label=\"\"\u003e\u003c\/span\u003e\n                                \u003c\/span\u003e  \n                            \u003c\/h3\u003e\n                                                              \u003cp class=\"aplus-answer aplus-p2\"\u003e Not at all. Just support the back of the drainboard while snapping it on – easy and secure. \u003c\/p\u003e    \u003c\/li\u003e\n                         \u003cli id=\"faq-qa-pair-4\" class=\"faq-block\"\u003e\n                            \u003ch3\u003e\n                                \u003cspan data-faq-question=\"\" role=\"button\" tabindex=\"0\" aria-controls=\"faq-4\" aria-expanded=\"false\"\u003e\n                                                                      \u003cp class=\"aplus-question aplus-p1\"\u003e Does the dish rack tilt , making plates and glasses slide off? \u003c\/p\u003e    \u003cspan class=\"faq-arrow\" aria-label=\"\"\u003e\u003c\/span\u003e\n                                \u003c\/span\u003e  \n                            \u003c\/h3\u003e\n                                                              \u003cp class=\"aplus-answer aplus-p2\"\u003e No. The dual‑peak holders keep plates of all sizes upright and steady. The raised guardrail helps keep plates and bowls from slipping off the sides \u003c\/p\u003e    \u003c\/li\u003e\n                      \u003c\/ul\u003e\n        \u003c\/div\u003e \u003c\/div\u003e  \u003c\/div\u003e\n     \u003c\/div\u003e\n         \u003c\/div\u003e\n    \u003c\/div\u003e\n\u003c\/div\u003e    \u003c\/div\u003e                                 ","brand":"KitchenGrid","offers":[{"title":"Black","offer_id":43729022255165,"sku":null,"price":25.88,"currency_code":"AUD","in_stock":true},{"title":"Gray","offer_id":43729022287933,"sku":null,"price":25.59,"currency_code":"AUD","in_stock":true},{"title":"Matte Grey","offer_id":43729022320701,"sku":null,"price":25.49,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0668\/5025\/9005\/files\/71glPoffJ-L._AC_SL1500.jpg?v=1790577405","url":"https:\/\/dovellianova.com\/products\/urackify-expandable-dish-drying-rack-for-kitchen-counter-16-2-23-7-black","provider":"KitchenGrid","version":"1.0","type":"link"}