well-petal 0.0.73 → 0.0.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/petal.js +40 -40
  2. package/package.json +1 -1
package/dist/petal.js CHANGED
@@ -26,17 +26,7 @@ return /******/ (() => { // webpackBootstrap
26
26
  \*********************************************************************************/
27
27
  /***/ ((module, __webpack_exports__, __webpack_require__) => {
28
28
 
29
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* ===========================\n Dropdown Core Styles\n =========================== */\n\n/* Default CSS variable values */\n[petal-el=\"dropdown\"] {\n --dropdown-open-duration: 0.5s;\n --dropdown-close-duration: 0.3s;\n}\n\n/* ===========================\n Dropdown Animations\n =========================== */\n\n/* Dropdown Menu: Initial (Closed) State - Hidden and prevent interaction */\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"] {\n visibility: hidden;\n pointer-events: none;\n}\n\n/* Dropdown Menu: Open State - Visible and allow interaction */\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"] {\n visibility: visible;\n pointer-events: auto;\n}\n\n/* Dropdown Drawer: Initial (Closed) State - Common Styles */\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-drawer\"] {\n visibility: hidden;\n opacity: 0;\n transition:\n transform var(--dropdown-close-duration, 0.3s) ease,\n opacity var(--dropdown-close-duration, 0.3s) ease,\n visibility 0s var(--dropdown-close-duration, 0.3s);\n}\n\n/* Dropdown Drawer: Open State - Common Styles */\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-drawer\"] {\n visibility: visible;\n opacity: 1;\n transition:\n transform var(--dropdown-open-duration, 0.5s) ease,\n opacity var(--dropdown-open-duration, 0.5s) ease,\n visibility 0s;\n}\n\n/* Animation: Slide Down (Default) */\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim=\"slide-down\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(-10px);\n transform-origin: top;\n}\n\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim=\"slide-down\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(0);\n}\n\n/* Animation: Slide Up */\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim=\"slide-up\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(10px);\n transform-origin: bottom;\n}\n\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim=\"slide-up\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(0);\n}\n\n/* Animation: Slide Left */\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim=\"slide-left\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(10px);\n}\n\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim=\"slide-left\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(0);\n}\n\n/* Animation: Slide Right */\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim=\"slide-right\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(-10px);\n}\n\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim=\"slide-right\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(0);\n}\n\n/* ===========================\n Tablet Animations (max-width: 991px)\n =========================== */\n\n@media screen and (max-width: 991px) {\n /* Animation: Slide Down */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-tablet=\"slide-down\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(-10px);\n transform-origin: top;\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-tablet=\"slide-down\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(0);\n }\n\n /* Animation: Slide Up */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-tablet=\"slide-up\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(10px);\n transform-origin: bottom;\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-tablet=\"slide-up\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(0);\n }\n\n /* Animation: Slide Left */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-tablet=\"slide-left\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(10px);\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-tablet=\"slide-left\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(0);\n }\n\n /* Animation: Slide Right */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-tablet=\"slide-right\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(-10px);\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-tablet=\"slide-right\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(0);\n }\n}\n\n/* ===========================\n Mobile Landscape Animations (max-width: 767px)\n =========================== */\n\n@media screen and (max-width: 767px) {\n /* Animation: Slide Down */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-mobile-landscape=\"slide-down\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(-10px);\n transform-origin: top;\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-mobile-landscape=\"slide-down\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(0);\n }\n\n /* Animation: Slide Up */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-mobile-landscape=\"slide-up\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(10px);\n transform-origin: bottom;\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-mobile-landscape=\"slide-up\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(0);\n }\n\n /* Animation: Slide Left */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-mobile-landscape=\"slide-left\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(10px);\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-mobile-landscape=\"slide-left\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(0);\n }\n\n /* Animation: Slide Right */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-mobile-landscape=\"slide-right\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(-10px);\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-mobile-landscape=\"slide-right\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(0);\n }\n}\n\n/* ===========================\n Mobile Animations (max-width: 479px)\n =========================== */\n\n@media screen and (max-width: 479px) {\n /* Animation: Slide Down */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-mobile=\"slide-down\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(-10px);\n transform-origin: top;\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-mobile=\"slide-down\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(0);\n }\n\n /* Animation: Slide Up */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-mobile=\"slide-up\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(10px);\n transform-origin: bottom;\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-mobile=\"slide-up\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(0);\n }\n\n /* Animation: Slide Left */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-mobile=\"slide-left\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(10px);\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-mobile=\"slide-left\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(0);\n }\n\n /* Animation: Slide Right */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-mobile=\"slide-right\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(-10px);\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-mobile=\"slide-right\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(0);\n }\n}\n\n/* ===========================\n Dropdown Backdrop\n =========================== */\n\n[petal-el=\"dropdown-backdrop\"] {\n opacity: 0;\n transition: opacity var(--dropdown-close-duration, 0.3s) ease;\n}\n\nbody:has([petal-el=\"dropdown\"] > [petal-el=\"dropdown-toggle\"][aria-expanded=\"true\"]) [petal-el=\"dropdown-backdrop\"] {\n opacity: 1;\n transition: opacity var(--dropdown-open-duration, 0.5s) ease;\n}\n\n/* ===========================\n Mobile Styles (Override on small containers)\n =========================== */\n\n@media screen and (max-width: 991px) {\n /* Hide dropdown toggle permanently on tablet ONLY when petal-dropdown-expand-tablet is true */\n [petal-el=\"dropdown\"][petal-dropdown-expand-tablet=\"true\"] [petal-el=\"dropdown-toggle\"] {\n display: none !important;\n }\n\n /* Make dropdown menu static positioning on tablet */\n [petal-el=\"dropdown\"][petal-dropdown-expand-tablet=\"true\"] [petal-el=\"dropdown-menu\"] {\n position: static !important;\n }\n\n /* Unset all styles on dropdown-drawer on tablet ONLY when petal-dropdown-expand-tablet is true */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-dropdown-expand-tablet=\"true\"] [petal-el=\"dropdown-drawer\"] {\n all: unset !important;\n display: block !important;\n }\n\n /* Hide dropdown background on tablet ONLY when petal-dropdown-expand-tablet is true */\n [petal-el=\"dropdown\"][petal-dropdown-expand-tablet=\"true\"] [petal-el=\"dropdown-background\"] {\n display: none;\n }\n}\n\n@media screen and (max-width: 767px) {\n /* Hide dropdown toggle permanently on mobile landscape ONLY when petal-dropdown-expand-mobile-landscape is true */\n [petal-el=\"dropdown\"][petal-dropdown-expand-mobile-landscape=\"true\"] [petal-el=\"dropdown-toggle\"] {\n display: none !important;\n }\n\n /* Make dropdown menu static positioning on mobile landscape */\n [petal-el=\"dropdown\"][petal-dropdown-expand-mobile-landscape=\"true\"] [petal-el=\"dropdown-menu\"] {\n position: static !important;\n }\n\n /* Unset all styles on dropdown-drawer on mobile landscape ONLY when petal-dropdown-expand-mobile-landscape is true */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-dropdown-expand-mobile-landscape=\"true\"] [petal-el=\"dropdown-drawer\"] {\n all: unset !important;\n display: block !important;\n }\n\n /* Hide dropdown background on mobile landscape ONLY when petal-dropdown-expand-mobile-landscape is true */\n [petal-el=\"dropdown\"][petal-dropdown-expand-mobile-landscape=\"true\"] [petal-el=\"dropdown-background\"] {\n display: none;\n }\n}\n\n@media screen and (max-width: 479px) {\n /* Hide dropdown toggle permanently on mobile ONLY when petal-dropdown-expand-mobile is true */\n [petal-el=\"dropdown\"][petal-dropdown-expand-mobile=\"true\"] [petal-el=\"dropdown-toggle\"] {\n display: none !important;\n }\n\n /* Make dropdown menu static positioning on mobile */\n [petal-el=\"dropdown\"][petal-dropdown-expand-mobile=\"true\"] [petal-el=\"dropdown-menu\"] {\n position: static !important;\n }\n\n /* Unset all styles on dropdown-drawer on mobile ONLY when petal-dropdown-expand-mobile is true */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-dropdown-expand-mobile=\"true\"] [petal-el=\"dropdown-drawer\"] {\n all: unset !important;\n display: block !important;\n }\n\n /* Hide dropdown background on mobile ONLY when petal-dropdown-expand-mobile is true */\n [petal-el=\"dropdown\"][petal-dropdown-expand-mobile=\"true\"] [petal-el=\"dropdown-background\"] {\n display: none;\n }\n}\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://petal/./src/modules/dropdown/dropdown.css?./node_modules/css-loader/dist/cjs.js");
30
-
31
- /***/ }),
32
-
33
- /***/ "./node_modules/css-loader/dist/cjs.js!./src/modules/nav/nav.css":
34
- /*!***********************************************************************!*\
35
- !*** ./node_modules/css-loader/dist/cjs.js!./src/modules/nav/nav.css ***!
36
- \***********************************************************************/
37
- /***/ ((module, __webpack_exports__, __webpack_require__) => {
38
-
39
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* Navigation Height Calculation */\n\n/* Set position based on petal-position attribute */\n[petal-el=\"banner\"][petal-position=\"sticky\"],\n[petal-el=\"secondary-nav\"][petal-position=\"sticky\"],\n[petal-el=\"nav\"][petal-position=\"sticky\"] {\n position: sticky !important;\n}\n\n[petal-el=\"banner\"][petal-position=\"static\"],\n[petal-el=\"secondary-nav\"][petal-position=\"static\"],\n[petal-el=\"nav\"][petal-position=\"static\"] {\n position: static !important;\n top: 0 !important;\n}\n\n[petal-el=\"banner\"][petal-position=\"relative\"],\n[petal-el=\"secondary-nav\"][petal-position=\"relative\"],\n[petal-el=\"nav\"][petal-position=\"relative\"] {\n position: relative !important;\n top: 0 !important;\n}\n\n/* Initialize individual height variables */\n:root {\n --nav--banner-contribution: 0px;\n --nav--secondary-nav-contribution: 0px;\n --nav--nav-contribution: 0px;\n}\n\n/* Banner height contribution - set on :root using :has() */\n/* Visible + Sticky */\n:root:has([petal-el=\"banner\"]:not(.w-condition-invisible):not(.petal-hide-banner)[petal-position=\"sticky\"]) {\n --nav--banner-contribution: var(--nav--nav-banner-height, 0px);\n}\n\n/* Visible + Static or Hidden - contributes 0px */\n:root:has([petal-el=\"banner\"][petal-position=\"static\"]),\n:root:has([petal-el=\"banner\"].w-condition-invisible),\n:root:has([petal-el=\"banner\"].petal-hide-banner) {\n --nav--banner-contribution: 0px;\n}\n\n/* Secondary Nav height contribution - set on :root using :has() */\n/* Visible + Sticky */\n:root:has([petal-el=\"secondary-nav\"]:not(.w-condition-invisible)[petal-position=\"sticky\"]) {\n --nav--secondary-nav-contribution: var(--nav--nav-secondary-height, 0px);\n}\n\n/* Visible + Static or Hidden - contributes 0px */\n:root:has([petal-el=\"secondary-nav\"][petal-position=\"static\"]),\n:root:has([petal-el=\"secondary-nav\"].w-condition-invisible) {\n --nav--secondary-nav-contribution: 0px;\n}\n\n/* Nav height contribution - set on :root using :has() */\n/* Sticky */\n:root:has([petal-el=\"nav\"][petal-position=\"sticky\"]) {\n --nav--nav-contribution: var(--nav--nav-height, 0px);\n}\n\n/* Static - contributes 0px */\n:root:has([petal-el=\"nav\"][petal-position=\"static\"]) {\n --nav--nav-contribution: 0px;\n}\n\n/* Calculate total nav height */\n:root {\n --nav--nav-secondary-offset: var(--nav--banner-contribution);\n --nav--nav-offset: calc(var(--nav--banner-contribution) + var(--nav--secondary-nav-contribution));\n --nav--nav-height-total: calc(var(--nav--banner-contribution) + var(--nav--secondary-nav-contribution) + var(--nav--nav-contribution));\n}\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://petal/./src/modules/nav/nav.css?./node_modules/css-loader/dist/cjs.js");
29
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* ===========================\n Dropdown Core Styles\n =========================== */\n\n/* Default CSS variable values */\n[petal-el=\"dropdown\"] {\n --dropdown-open-duration: 0.5s;\n --dropdown-close-duration: 0.3s;\n}\n\n/* ===========================\n Dropdown Animations\n =========================== */\n\n/* Dropdown Menu: Initial (Closed) State - Hidden and prevent interaction */\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"] {\n display: none;\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n}\n\n/* Dropdown Menu: Open State - Visible and allow interaction */\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"] {\n visibility: visible;\n pointer-events: auto;\n}\n\n/* Dropdown Drawer: Initial (Closed) State - Common Styles */\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-drawer\"] {\n visibility: hidden;\n opacity: 0;\n transition:\n transform var(--dropdown-close-duration, 0.3s) ease,\n opacity var(--dropdown-close-duration, 0.3s) ease,\n visibility 0s var(--dropdown-close-duration, 0.3s);\n}\n\n/* Dropdown Drawer: Open State - Common Styles */\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-drawer\"] {\n visibility: visible;\n opacity: 1;\n transition:\n transform var(--dropdown-open-duration, 0.5s) ease,\n opacity var(--dropdown-open-duration, 0.5s) ease,\n visibility 0s;\n}\n\n/* Animation: Slide Down (Default) */\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim=\"slide-down\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(-10px);\n transform-origin: top;\n}\n\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim=\"slide-down\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(0);\n}\n\n/* Animation: Slide Up */\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim=\"slide-up\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(10px);\n transform-origin: bottom;\n}\n\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim=\"slide-up\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(0);\n}\n\n/* Animation: Slide Left */\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim=\"slide-left\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(10px);\n}\n\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim=\"slide-left\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(0);\n}\n\n/* Animation: Slide Right */\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim=\"slide-right\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(-10px);\n}\n\nhtml:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim=\"slide-right\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(0);\n}\n\n/* ===========================\n Tablet Animations (max-width: 991px)\n =========================== */\n\n@media screen and (max-width: 991px) {\n /* Animation: Slide Down */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-tablet=\"slide-down\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(-10px);\n transform-origin: top;\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-tablet=\"slide-down\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(0);\n }\n\n /* Animation: Slide Up */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-tablet=\"slide-up\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(10px);\n transform-origin: bottom;\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-tablet=\"slide-up\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(0);\n }\n\n /* Animation: Slide Left */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-tablet=\"slide-left\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(10px);\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-tablet=\"slide-left\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(0);\n }\n\n /* Animation: Slide Right */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-tablet=\"slide-right\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(-10px);\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-tablet=\"slide-right\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(0);\n }\n}\n\n/* ===========================\n Mobile Landscape Animations (max-width: 767px)\n =========================== */\n\n@media screen and (max-width: 767px) {\n /* Animation: Slide Down */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-mobile-landscape=\"slide-down\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(-10px);\n transform-origin: top;\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-mobile-landscape=\"slide-down\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(0);\n }\n\n /* Animation: Slide Up */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-mobile-landscape=\"slide-up\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(10px);\n transform-origin: bottom;\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-mobile-landscape=\"slide-up\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(0);\n }\n\n /* Animation: Slide Left */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-mobile-landscape=\"slide-left\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(10px);\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-mobile-landscape=\"slide-left\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(0);\n }\n\n /* Animation: Slide Right */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-mobile-landscape=\"slide-right\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(-10px);\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-mobile-landscape=\"slide-right\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(0);\n }\n}\n\n/* ===========================\n Mobile Animations (max-width: 479px)\n =========================== */\n\n@media screen and (max-width: 479px) {\n /* Animation: Slide Down */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-mobile=\"slide-down\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(-10px);\n transform-origin: top;\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-mobile=\"slide-down\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(0);\n }\n\n /* Animation: Slide Up */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-mobile=\"slide-up\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(10px);\n transform-origin: bottom;\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-mobile=\"slide-up\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateY(0);\n }\n\n /* Animation: Slide Left */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-mobile=\"slide-left\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(10px);\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-mobile=\"slide-left\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(0);\n }\n\n /* Animation: Slide Right */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"] [petal-el=\"dropdown-menu\"][data-anim-mobile=\"slide-right\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(-10px);\n }\n\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-state=\"open\"] [petal-el=\"dropdown-menu\"][data-anim-mobile=\"slide-right\"] [petal-el=\"dropdown-drawer\"] {\n transform: translateX(0);\n }\n}\n\n/* ===========================\n Dropdown Backdrop\n =========================== */\n\n[petal-el=\"dropdown-backdrop\"] {\n opacity: 0;\n transition: opacity var(--dropdown-close-duration, 0.3s) ease;\n}\n\nbody:has([petal-el=\"dropdown\"] > [petal-el=\"dropdown-toggle\"][aria-expanded=\"true\"]) [petal-el=\"dropdown-backdrop\"] {\n opacity: 1;\n transition: opacity var(--dropdown-open-duration, 0.5s) ease;\n}\n\n/* ===========================\n Mobile Styles (Override on small containers)\n =========================== */\n\n@media screen and (max-width: 991px) {\n /* Hide dropdown toggle permanently on tablet ONLY when petal-dropdown-expand-tablet is true */\n [petal-el=\"dropdown\"][petal-dropdown-expand-tablet=\"true\"] [petal-el=\"dropdown-toggle\"] {\n display: none !important;\n }\n\n /* Make dropdown menu static positioning on tablet */\n [petal-el=\"dropdown\"][petal-dropdown-expand-tablet=\"true\"] [petal-el=\"dropdown-menu\"] {\n position: static !important;\n }\n\n /* Unset all styles on dropdown-drawer on tablet ONLY when petal-dropdown-expand-tablet is true */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-dropdown-expand-tablet=\"true\"] [petal-el=\"dropdown-drawer\"] {\n all: unset !important;\n display: block !important;\n }\n\n /* Hide dropdown background on tablet ONLY when petal-dropdown-expand-tablet is true */\n [petal-el=\"dropdown\"][petal-dropdown-expand-tablet=\"true\"] [petal-el=\"dropdown-background\"] {\n display: none;\n }\n}\n\n@media screen and (max-width: 767px) {\n /* Hide dropdown toggle permanently on mobile landscape ONLY when petal-dropdown-expand-mobile-landscape is true */\n [petal-el=\"dropdown\"][petal-dropdown-expand-mobile-landscape=\"true\"] [petal-el=\"dropdown-toggle\"] {\n display: none !important;\n }\n\n /* Make dropdown menu static positioning on mobile landscape */\n [petal-el=\"dropdown\"][petal-dropdown-expand-mobile-landscape=\"true\"] [petal-el=\"dropdown-menu\"] {\n position: static !important;\n }\n\n /* Unset all styles on dropdown-drawer on mobile landscape ONLY when petal-dropdown-expand-mobile-landscape is true */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-dropdown-expand-mobile-landscape=\"true\"] [petal-el=\"dropdown-drawer\"] {\n all: unset !important;\n display: block !important;\n }\n\n /* Hide dropdown background on mobile landscape ONLY when petal-dropdown-expand-mobile-landscape is true */\n [petal-el=\"dropdown\"][petal-dropdown-expand-mobile-landscape=\"true\"] [petal-el=\"dropdown-background\"] {\n display: none;\n }\n}\n\n@media screen and (max-width: 479px) {\n /* Hide dropdown toggle permanently on mobile ONLY when petal-dropdown-expand-mobile is true */\n [petal-el=\"dropdown\"][petal-dropdown-expand-mobile=\"true\"] [petal-el=\"dropdown-toggle\"] {\n display: none !important;\n }\n\n /* Make dropdown menu static positioning on mobile */\n [petal-el=\"dropdown\"][petal-dropdown-expand-mobile=\"true\"] [petal-el=\"dropdown-menu\"] {\n position: static !important;\n }\n\n /* Unset all styles on dropdown-drawer on mobile ONLY when petal-dropdown-expand-mobile is true */\n html:not(.wf-design-mode) [petal-el=\"dropdown\"][petal-dropdown-expand-mobile=\"true\"] [petal-el=\"dropdown-drawer\"] {\n all: unset !important;\n display: block !important;\n }\n\n /* Hide dropdown background on mobile ONLY when petal-dropdown-expand-mobile is true */\n [petal-el=\"dropdown\"][petal-dropdown-expand-mobile=\"true\"] [petal-el=\"dropdown-background\"] {\n display: none;\n }\n}\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://petal/./src/modules/dropdown/dropdown.css?./node_modules/css-loader/dist/cjs.js");
40
30
 
41
31
  /***/ }),
42
32
 
@@ -46,7 +36,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
46
36
  \*************************************************************/
47
37
  /***/ ((module, __webpack_exports__, __webpack_require__) => {
48
38
 
49
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/** BANNER **/\n.petal-hide-banner {\n display: none !important;\n}\n\n/** NAV **/\n\n/* Disable scrolling when mobile nav is open */\nbody:has([petal-el=\"nav\"] .w-nav-button.w--open):not(:has([petal-el=\"nav-desktop\"]:not(.w-condition-invisible))) {\n overflow: hidden;\n}\n\n/** DROPDOWN **/\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://petal/./src/petal.css?./node_modules/css-loader/dist/cjs.js");
39
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/**---------- GENERAL -------------**/\n.wf-design-mode [data-show-in-designer=\"true\"] {\n display: block;\n}\n/**----------- BANNER -------------**/\n.petal-hide-banner {\n display: none !important;\n}\n/**------------- NAV --------------**/\n\n/* Set position based on petal-position attribute */\n[petal-el=\"banner\"][petal-position=\"sticky\"],\n[petal-el=\"secondary-nav\"][petal-position=\"sticky\"],\n[petal-el=\"nav\"][petal-position=\"sticky\"] {\n position: sticky !important;\n}\n\n[petal-el=\"banner\"][petal-position=\"static\"],\n[petal-el=\"secondary-nav\"][petal-position=\"static\"],\n[petal-el=\"nav\"][petal-position=\"static\"] {\n position: static !important;\n top: 0 !important;\n}\n\n[petal-el=\"banner\"][petal-position=\"relative\"],\n[petal-el=\"secondary-nav\"][petal-position=\"relative\"],\n[petal-el=\"nav\"][petal-position=\"relative\"] {\n position: relative !important;\n top: 0 !important;\n}\n\n/* Initialize individual height variables */\n:root {\n --nav--banner-contribution: 0px;\n --nav--secondary-nav-contribution: 0px;\n --nav--nav-contribution: 0px;\n}\n\n/* Banner height contribution - set on :root using :has() */\n/* Visible + Sticky */\n:root:has([petal-el=\"banner\"]:not(.w-condition-invisible):not(.petal-hide-banner)[petal-position=\"sticky\"]) {\n --nav--banner-contribution: var(--nav--nav-banner-height, 0px);\n}\n\n/* Visible + Static or Hidden - contributes 0px */\n:root:has([petal-el=\"banner\"][petal-position=\"static\"]),\n:root:has([petal-el=\"banner\"].w-condition-invisible),\n:root:has([petal-el=\"banner\"].petal-hide-banner) {\n --nav--banner-contribution: 0px;\n}\n\n/* Secondary Nav height contribution - set on :root using :has() */\n/* Visible + Sticky */\n:root:has([petal-el=\"secondary-nav\"]:not(.w-condition-invisible)[petal-position=\"sticky\"]) {\n --nav--secondary-nav-contribution: var(--nav--nav-secondary-height, 0px);\n}\n\n/* Visible + Static or Hidden - contributes 0px */\n:root:has([petal-el=\"secondary-nav\"][petal-position=\"static\"]),\n:root:has([petal-el=\"secondary-nav\"].w-condition-invisible) {\n --nav--secondary-nav-contribution: 0px;\n}\n\n/* Nav height contribution - set on :root using :has() */\n/* Sticky */\n:root:has([petal-el=\"nav\"][petal-position=\"sticky\"]) {\n --nav--nav-contribution: var(--nav--nav-height, 0px);\n}\n\n/* Static - contributes 0px */\n:root:has([petal-el=\"nav\"][petal-position=\"static\"]) {\n --nav--nav-contribution: 0px;\n}\n\n/* Calculate total nav height */\n:root {\n --nav--nav-secondary-offset: var(--nav--banner-contribution);\n --nav--nav-offset: calc(var(--nav--banner-contribution) + var(--nav--secondary-nav-contribution));\n --nav--nav-height-total: calc(var(--nav--banner-contribution) + var(--nav--secondary-nav-contribution) + var(--nav--nav-contribution));\n}\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://petal/./src/petal.css?./node_modules/css-loader/dist/cjs.js");
50
40
 
51
41
  /***/ }),
52
42
 
@@ -166,7 +156,7 @@ eval("\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElem
166
156
  \**************************/
167
157
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
168
158
 
169
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getPopupGSAPAnimation: () => (/* binding */ getPopupGSAPAnimation),\n/* harmony export */ isPopupAnimation: () => (/* binding */ isPopupAnimation)\n/* harmony export */ });\n/* harmony import */ var _lib_animations__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/animations */ \"./src/lib/animations.ts\");\n/* harmony import */ var _lib_attributes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/attributes */ \"./src/lib/attributes.ts\");\n/* harmony import */ var _lib_breakpoints__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/breakpoints */ \"./src/lib/breakpoints.ts\");\n\n\n\nconst validAnimations = [\"scale\", \"slide-up\", \"slide-down\", \"slide-left\", \"slide-right\"];\nconst animationOpenMap = {\n scale: _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateScaleUp,\n \"slide-up\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateOpenSlideUp,\n \"slide-down\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateOpenSlideDown,\n \"slide-left\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateOpenSlideLeft,\n \"slide-right\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateOpenSlideRight,\n};\nconst animationCloseMap = {\n scale: _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateScaleDown,\n \"slide-up\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateCloseSlideUp,\n \"slide-down\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateCloseSlideDown,\n \"slide-left\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateCloseSlideLeft,\n \"slide-right\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateCloseSlideRight,\n};\n// Map open animations to their corresponding close animations\nconst reverseAnimationMap = {\n scale: \"scale\",\n \"slide-up\": \"slide-down\",\n \"slide-down\": \"slide-up\",\n \"slide-left\": \"slide-right\",\n \"slide-right\": \"slide-left\",\n};\n/**\n * Creates GSAP animation based on the popup's attributes\n * @param popup The Popup element\n * @param direction Open or Close\n * @returns GSAP animation vars for the popup\n */\nfunction getPopupGSAPAnimation(popup, direction) {\n // Determine the name of the animation to perform\n let animationName = getAnimationName(popup, direction);\n // Get the animation function\n let anim;\n if (direction === \"open\")\n anim = animationOpenMap[animationName]();\n else\n anim = animationCloseMap[animationName]();\n // Set the animation duration\n const duration = parseFloat(popup.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_DURATION) || \"0.5\");\n anim.to.duration = duration;\n return anim;\n}\n/**\n *\n * @param popup The Popup element\n * @param direction Open or Close\n * @returns The name of the animation to perform\n */\nfunction getAnimationName(popup, direction) {\n const openDesktop = getPopupAnimation(popup, _lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_ANIM_OPEN);\n const openMobile = getPopupAnimation(popup, _lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_ANIM_OPEN_MOBILE);\n const closeDesktop = getPopupAnimation(popup, _lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_ANIM_CLOSE);\n const closeMobile = getPopupAnimation(popup, _lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_ANIM_CLOSE_MOBILE);\n if (direction === \"open\") {\n if ((0,_lib_breakpoints__WEBPACK_IMPORTED_MODULE_2__.isMobile)())\n return openMobile;\n else\n return openDesktop;\n }\n // If closing\n else {\n const hasCloseDesktop = popup.hasAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_ANIM_CLOSE);\n const hasCloseMobile = popup.hasAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_ANIM_CLOSE_MOBILE);\n if ((0,_lib_breakpoints__WEBPACK_IMPORTED_MODULE_2__.isMobile)()) {\n // If no mobile close animation is set, use the reverse of the open animation\n return hasCloseMobile ? closeMobile : reverseAnimationMap[openMobile];\n }\n else {\n // If no desktop close animation is set, use the reverse of the open animation\n return hasCloseDesktop ? closeDesktop : reverseAnimationMap[openDesktop];\n }\n }\n}\n// Validate popup animation string\nfunction isPopupAnimation(value) {\n return validAnimations.includes(value);\n}\n// Safe parser with fallback\nfunction getPopupAnimation(popup, attr) {\n const raw = popup.getAttribute(attr);\n return isPopupAnimation(raw !== null && raw !== void 0 ? raw : \"\") ? raw : \"slide-up\";\n}\n\n\n//# sourceURL=webpack://petal/./src/animation.ts?");
159
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getModalGSAPAnimation: () => (/* binding */ getModalGSAPAnimation),\n/* harmony export */ isModalAnimation: () => (/* binding */ isModalAnimation)\n/* harmony export */ });\n/* harmony import */ var _lib_animations__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/animations */ \"./src/lib/animations.ts\");\n/* harmony import */ var _lib_attributes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/attributes */ \"./src/lib/attributes.ts\");\n/* harmony import */ var _lib_breakpoints__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/breakpoints */ \"./src/lib/breakpoints.ts\");\n\n\n\nconst validAnimations = [\"scale\", \"slide-up\", \"slide-down\", \"slide-left\", \"slide-right\"];\nconst animationOpenMap = {\n scale: _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateScaleUp,\n \"slide-up\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateOpenSlideUp,\n \"slide-down\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateOpenSlideDown,\n \"slide-left\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateOpenSlideLeft,\n \"slide-right\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateOpenSlideRight,\n};\nconst animationCloseMap = {\n scale: _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateScaleDown,\n \"slide-up\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateCloseSlideUp,\n \"slide-down\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateCloseSlideDown,\n \"slide-left\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateCloseSlideLeft,\n \"slide-right\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateCloseSlideRight,\n};\n// Map open animations to their corresponding close animations\nconst reverseAnimationMap = {\n scale: \"scale\",\n \"slide-up\": \"slide-down\",\n \"slide-down\": \"slide-up\",\n \"slide-left\": \"slide-right\",\n \"slide-right\": \"slide-left\",\n};\n/**\n * Map modal type to animation for each direction\n */\nconst modalTypeAnimationMap = {\n center: { open: \"scale\", close: \"scale\" },\n left: { open: \"slide-right\", close: \"slide-left\" },\n right: { open: \"slide-left\", close: \"slide-right\" },\n top: { open: \"slide-down\", close: \"slide-up\" },\n bottom: { open: \"slide-up\", close: \"slide-down\" },\n};\n/**\n * Creates GSAP animation based on the modal's type and attributes\n * @param modal The Modal element\n * @param direction Open or Close\n * @param modalType The modal type (center, left, right, top, bottom)\n * @returns GSAP animation vars for the modal\n */\nfunction getModalGSAPAnimation(modal, direction, modalType) {\n let animationName;\n // If modal type is provided and no custom animation attributes are set, use type-based animation\n if (modalType && !modal.hasAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_ANIM_OPEN) && !modal.hasAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_ANIM_OPEN_MOBILE)) {\n animationName = modalTypeAnimationMap[modalType][direction];\n }\n else {\n // Otherwise, use the attribute-based animation (legacy behavior)\n animationName = getAnimationName(modal, direction);\n }\n // Get the animation function\n let anim;\n if (direction === \"open\")\n anim = animationOpenMap[animationName]();\n else\n anim = animationCloseMap[animationName]();\n // Set the animation duration\n const duration = parseFloat(modal.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_DURATION) || \"0.5\");\n anim.to.duration = duration;\n return anim;\n}\n/**\n *\n * @param modal The Modal element\n * @param direction Open or Close\n * @returns The name of the animation to perform\n */\nfunction getAnimationName(modal, direction) {\n const openDesktop = getModalAnimation(modal, _lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_ANIM_OPEN);\n const openMobile = getModalAnimation(modal, _lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_ANIM_OPEN_MOBILE);\n const closeDesktop = getModalAnimation(modal, _lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_ANIM_CLOSE);\n const closeMobile = getModalAnimation(modal, _lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_ANIM_CLOSE_MOBILE);\n if (direction === \"open\") {\n if ((0,_lib_breakpoints__WEBPACK_IMPORTED_MODULE_2__.isMobile)())\n return openMobile;\n else\n return openDesktop;\n }\n // If closing\n else {\n const hasCloseDesktop = modal.hasAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_ANIM_CLOSE);\n const hasCloseMobile = modal.hasAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_ANIM_CLOSE_MOBILE);\n if ((0,_lib_breakpoints__WEBPACK_IMPORTED_MODULE_2__.isMobile)()) {\n // If no mobile close animation is set, use the reverse of the open animation\n return hasCloseMobile ? closeMobile : reverseAnimationMap[openMobile];\n }\n else {\n // If no desktop close animation is set, use the reverse of the open animation\n return hasCloseDesktop ? closeDesktop : reverseAnimationMap[openDesktop];\n }\n }\n}\n// Validate modal animation string\nfunction isModalAnimation(value) {\n return validAnimations.includes(value);\n}\n// Safe parser with fallback\nfunction getModalAnimation(modal, attr) {\n const raw = modal.getAttribute(attr);\n return isModalAnimation(raw !== null && raw !== void 0 ? raw : \"\") ? raw : \"slide-up\";\n}\n\n\n//# sourceURL=webpack://petal/./src/animation.ts?");
170
160
 
171
161
  /***/ }),
172
162
 
@@ -176,7 +166,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
176
166
  \*******************************/
177
167
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
178
168
 
179
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ animateCloseSlideDown: () => (/* binding */ animateCloseSlideDown),\n/* harmony export */ animateCloseSlideLeft: () => (/* binding */ animateCloseSlideLeft),\n/* harmony export */ animateCloseSlideRight: () => (/* binding */ animateCloseSlideRight),\n/* harmony export */ animateCloseSlideUp: () => (/* binding */ animateCloseSlideUp),\n/* harmony export */ animateDropdownCloseSlideDown: () => (/* binding */ animateDropdownCloseSlideDown),\n/* harmony export */ animateDropdownCloseSlideLeft: () => (/* binding */ animateDropdownCloseSlideLeft),\n/* harmony export */ animateDropdownCloseSlideRight: () => (/* binding */ animateDropdownCloseSlideRight),\n/* harmony export */ animateDropdownCloseSlideUp: () => (/* binding */ animateDropdownCloseSlideUp),\n/* harmony export */ animateDropdownOpenSlideDown: () => (/* binding */ animateDropdownOpenSlideDown),\n/* harmony export */ animateDropdownOpenSlideLeft: () => (/* binding */ animateDropdownOpenSlideLeft),\n/* harmony export */ animateDropdownOpenSlideRight: () => (/* binding */ animateDropdownOpenSlideRight),\n/* harmony export */ animateDropdownOpenSlideUp: () => (/* binding */ animateDropdownOpenSlideUp),\n/* harmony export */ animateMaskClosed: () => (/* binding */ animateMaskClosed),\n/* harmony export */ animateMaskOpen: () => (/* binding */ animateMaskOpen),\n/* harmony export */ animateOpenSlideDown: () => (/* binding */ animateOpenSlideDown),\n/* harmony export */ animateOpenSlideLeft: () => (/* binding */ animateOpenSlideLeft),\n/* harmony export */ animateOpenSlideRight: () => (/* binding */ animateOpenSlideRight),\n/* harmony export */ animateOpenSlideUp: () => (/* binding */ animateOpenSlideUp),\n/* harmony export */ animateScaleDown: () => (/* binding */ animateScaleDown),\n/* harmony export */ animateScaleUp: () => (/* binding */ animateScaleUp)\n/* harmony export */ });\nfunction animateScaleUp() {\n return {\n from: { scale: 0, opacity: 0 },\n to: { scale: 1, opacity: 1, ease: \"power1.inOut\" },\n };\n}\nfunction animateScaleDown() {\n return {\n from: { scale: 1, opacity: 0 },\n to: { scale: 0, opacity: 1, ease: \"power1.inOut\" },\n };\n}\nfunction animateOpenSlideUp() {\n return {\n from: { y: \"100%\", x: \"0%\", opacity: 0 }, // From bottom\n to: { y: \"0%\", x: \"0%\", opacity: 1, ease: \"power1.inOut\" }, // To top\n };\n}\nfunction animateOpenSlideDown() {\n return {\n from: { y: \"-100%\", x: \"0%\", opacity: 0 }, // From top\n to: { y: \"0%\", x: \"0%\", opacity: 1, ease: \"power1.inOut\" }, // To bottom\n };\n}\nfunction animateOpenSlideRight() {\n return {\n from: { x: \"-100%\", y: \"0%\", opacity: 0 }, // From left\n to: { x: \"0%\", y: \"0%\", opacity: 1, ease: \"power1.inOut\" }, // To center\n };\n}\nfunction animateOpenSlideLeft() {\n return {\n from: { x: \"100%\", y: \"0%\", opacity: 0 }, // From right\n to: { x: \"0%\", y: \"0%\", opacity: 1, ease: \"power1.inOut\" }, // To center\n };\n}\nfunction animateCloseSlideUp() {\n return {\n from: { y: \"0%\", x: \"0%\", opacity: 1 }, // From bottom\n to: { y: \"-100%\", x: \"0%\", opacity: 0, ease: \"power1.inOut\" }, // To top\n };\n}\nfunction animateCloseSlideDown() {\n return {\n from: { y: \"0%\", x: \"0%\", opacity: 1 }, // From top\n to: { y: \"100%\", x: \"0%\", opacity: 0, ease: \"power1.inOut\" }, // To bottom\n };\n}\nfunction animateCloseSlideRight() {\n return {\n from: { x: \"0%\", y: \"0%\", opacity: 1 }, // From left\n to: { x: \"100%\", y: \"0%\", opacity: 0, ease: \"power1.inOut\" }, // To center\n };\n}\nfunction animateCloseSlideLeft() {\n return {\n from: { x: \"0%\", y: \"0%\", opacity: 1 }, // From right\n to: { x: \"-100%\", y: \"0%\", opacity: 0, ease: \"power1.inOut\" }, // To center\n };\n}\n// Mask animations\nfunction animateMaskOpen(opacity) {\n return {\n from: { opacity: 0 },\n to: { opacity: opacity, duration: 0.5 },\n };\n}\nfunction animateMaskClosed(opacity) {\n return {\n from: { opacity: opacity },\n to: { opacity: 0, duration: 0.5 },\n };\n}\n// Dropdown animations (subtle movements for dropdown menus)\nfunction animateDropdownOpenSlideDown(offset = 25) {\n return {\n from: { x: 0, y: typeof offset === \"number\" ? -offset : `-${offset}`, opacity: 0 },\n to: { x: 0, y: 0, opacity: 1, ease: \"power1.inOut\" },\n };\n}\nfunction animateDropdownCloseSlideDown(offset = 25) {\n return {\n from: { x: 0, y: 0, opacity: 1 },\n to: { x: 0, y: typeof offset === \"number\" ? -offset : `-${offset}`, opacity: 0, ease: \"power1.inOut\" },\n };\n}\nfunction animateDropdownOpenSlideUp(offset = 25) {\n return {\n from: { x: 0, y: offset, opacity: 0 },\n to: { x: 0, y: 0, opacity: 1, ease: \"power1.inOut\" },\n };\n}\nfunction animateDropdownCloseSlideUp(offset = 25) {\n return {\n from: { x: 0, y: 0, opacity: 1 },\n to: { x: 0, y: offset, opacity: 0, ease: \"power1.inOut\" },\n };\n}\nfunction animateDropdownOpenSlideLeft(offset = 25) {\n return {\n from: { x: offset, y: 0, opacity: 0 },\n to: { x: 0, y: 0, opacity: 1, ease: \"power1.inOut\" },\n };\n}\nfunction animateDropdownCloseSlideLeft(offset = 25) {\n return {\n from: { x: 0, y: 0, opacity: 1 },\n to: { x: offset, y: 0, opacity: 0, ease: \"power1.inOut\" },\n };\n}\nfunction animateDropdownOpenSlideRight(offset = 25) {\n return {\n from: { x: typeof offset === \"number\" ? -offset : `-${offset}`, y: 0, opacity: 0 },\n to: { x: 0, y: 0, opacity: 1, ease: \"power1.inOut\" },\n };\n}\nfunction animateDropdownCloseSlideRight(offset = 25) {\n return {\n from: { x: 0, y: 0, opacity: 1 },\n to: { x: typeof offset === \"number\" ? -offset : `-${offset}`, y: 0, opacity: 0, ease: \"power1.inOut\" },\n };\n}\n\n\n//# sourceURL=webpack://petal/./src/lib/animations.ts?");
169
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ animateCloseSlideDown: () => (/* binding */ animateCloseSlideDown),\n/* harmony export */ animateCloseSlideLeft: () => (/* binding */ animateCloseSlideLeft),\n/* harmony export */ animateCloseSlideRight: () => (/* binding */ animateCloseSlideRight),\n/* harmony export */ animateCloseSlideUp: () => (/* binding */ animateCloseSlideUp),\n/* harmony export */ animateDropdownCloseSlideDown: () => (/* binding */ animateDropdownCloseSlideDown),\n/* harmony export */ animateDropdownCloseSlideLeft: () => (/* binding */ animateDropdownCloseSlideLeft),\n/* harmony export */ animateDropdownCloseSlideRight: () => (/* binding */ animateDropdownCloseSlideRight),\n/* harmony export */ animateDropdownCloseSlideUp: () => (/* binding */ animateDropdownCloseSlideUp),\n/* harmony export */ animateDropdownOpenSlideDown: () => (/* binding */ animateDropdownOpenSlideDown),\n/* harmony export */ animateDropdownOpenSlideLeft: () => (/* binding */ animateDropdownOpenSlideLeft),\n/* harmony export */ animateDropdownOpenSlideRight: () => (/* binding */ animateDropdownOpenSlideRight),\n/* harmony export */ animateDropdownOpenSlideUp: () => (/* binding */ animateDropdownOpenSlideUp),\n/* harmony export */ animateMaskClosed: () => (/* binding */ animateMaskClosed),\n/* harmony export */ animateMaskOpen: () => (/* binding */ animateMaskOpen),\n/* harmony export */ animateOpenSlideDown: () => (/* binding */ animateOpenSlideDown),\n/* harmony export */ animateOpenSlideLeft: () => (/* binding */ animateOpenSlideLeft),\n/* harmony export */ animateOpenSlideRight: () => (/* binding */ animateOpenSlideRight),\n/* harmony export */ animateOpenSlideUp: () => (/* binding */ animateOpenSlideUp),\n/* harmony export */ animateScaleDown: () => (/* binding */ animateScaleDown),\n/* harmony export */ animateScaleUp: () => (/* binding */ animateScaleUp)\n/* harmony export */ });\nfunction animateScaleUp() {\n return {\n from: { scale: 0, opacity: 0 },\n to: { scale: 1, opacity: 1, ease: \"power1.inOut\" },\n };\n}\nfunction animateScaleDown() {\n return {\n from: { scale: 1, opacity: 1 },\n to: { scale: 0, opacity: 0, ease: \"power1.inOut\" },\n };\n}\nfunction animateOpenSlideUp() {\n return {\n from: { y: \"100%\", x: \"0%\", opacity: 0 }, // From bottom\n to: { y: \"0%\", x: \"0%\", opacity: 1, ease: \"power1.inOut\" }, // To top\n };\n}\nfunction animateOpenSlideDown() {\n return {\n from: { y: \"-100%\", x: \"0%\", opacity: 0 }, // From top\n to: { y: \"0%\", x: \"0%\", opacity: 1, ease: \"power1.inOut\" }, // To bottom\n };\n}\nfunction animateOpenSlideRight() {\n return {\n from: { x: \"-100%\", y: \"0%\", opacity: 0 }, // From left\n to: { x: \"0%\", y: \"0%\", opacity: 1, ease: \"power1.inOut\" }, // To center\n };\n}\nfunction animateOpenSlideLeft() {\n return {\n from: { x: \"100%\", y: \"0%\", opacity: 0 }, // From right\n to: { x: \"0%\", y: \"0%\", opacity: 1, ease: \"power1.inOut\" }, // To center\n };\n}\nfunction animateCloseSlideUp() {\n return {\n from: { y: \"0%\", x: \"0%\", opacity: 1 }, // From bottom\n to: { y: \"-100%\", x: \"0%\", opacity: 0, ease: \"power1.inOut\" }, // To top\n };\n}\nfunction animateCloseSlideDown() {\n return {\n from: { y: \"0%\", x: \"0%\", opacity: 1 }, // From top\n to: { y: \"100%\", x: \"0%\", opacity: 0, ease: \"power1.inOut\" }, // To bottom\n };\n}\nfunction animateCloseSlideRight() {\n return {\n from: { x: \"0%\", y: \"0%\", opacity: 1 }, // From left\n to: { x: \"100%\", y: \"0%\", opacity: 0, ease: \"power1.inOut\" }, // To center\n };\n}\nfunction animateCloseSlideLeft() {\n return {\n from: { x: \"0%\", y: \"0%\", opacity: 1 }, // From right\n to: { x: \"-100%\", y: \"0%\", opacity: 0, ease: \"power1.inOut\" }, // To center\n };\n}\n// Mask animations\nfunction animateMaskOpen(opacity) {\n return {\n from: { opacity: 0 },\n to: { opacity: opacity, duration: 0.5 },\n };\n}\nfunction animateMaskClosed(opacity) {\n return {\n from: { opacity: opacity },\n to: { opacity: 0, duration: 0.5 },\n };\n}\n// Dropdown animations (subtle movements for dropdown menus)\nfunction animateDropdownOpenSlideDown(offset = 25) {\n return {\n from: { x: 0, y: typeof offset === \"number\" ? -offset : `-${offset}`, opacity: 0 },\n to: { x: 0, y: 0, opacity: 1, ease: \"power1.inOut\" },\n };\n}\nfunction animateDropdownCloseSlideDown(offset = 25) {\n return {\n from: { x: 0, y: 0, opacity: 1 },\n to: { x: 0, y: typeof offset === \"number\" ? -offset : `-${offset}`, opacity: 0, ease: \"power1.inOut\" },\n };\n}\nfunction animateDropdownOpenSlideUp(offset = 25) {\n return {\n from: { x: 0, y: offset, opacity: 0 },\n to: { x: 0, y: 0, opacity: 1, ease: \"power1.inOut\" },\n };\n}\nfunction animateDropdownCloseSlideUp(offset = 25) {\n return {\n from: { x: 0, y: 0, opacity: 1 },\n to: { x: 0, y: offset, opacity: 0, ease: \"power1.inOut\" },\n };\n}\nfunction animateDropdownOpenSlideLeft(offset = 25) {\n return {\n from: { x: offset, y: 0, opacity: 0 },\n to: { x: 0, y: 0, opacity: 1, ease: \"power1.inOut\" },\n };\n}\nfunction animateDropdownCloseSlideLeft(offset = 25) {\n return {\n from: { x: 0, y: 0, opacity: 1 },\n to: { x: offset, y: 0, opacity: 0, ease: \"power1.inOut\" },\n };\n}\nfunction animateDropdownOpenSlideRight(offset = 25) {\n return {\n from: { x: typeof offset === \"number\" ? -offset : `-${offset}`, y: 0, opacity: 0 },\n to: { x: 0, y: 0, opacity: 1, ease: \"power1.inOut\" },\n };\n}\nfunction animateDropdownCloseSlideRight(offset = 25) {\n return {\n from: { x: 0, y: 0, opacity: 1 },\n to: { x: typeof offset === \"number\" ? -offset : `-${offset}`, y: 0, opacity: 0, ease: \"power1.inOut\" },\n };\n}\n\n\n//# sourceURL=webpack://petal/./src/lib/animations.ts?");
180
170
 
181
171
  /***/ }),
182
172
 
@@ -186,7 +176,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
186
176
  \*******************************/
187
177
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
188
178
 
189
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ARIA_EXPANDED: () => (/* binding */ ARIA_EXPANDED),\n/* harmony export */ ATTR_ALLOW_CLOSE: () => (/* binding */ ATTR_ALLOW_CLOSE),\n/* harmony export */ ATTR_PETAL_ANIM_CLOSE: () => (/* binding */ ATTR_PETAL_ANIM_CLOSE),\n/* harmony export */ ATTR_PETAL_ANIM_CLOSE_MOBILE: () => (/* binding */ ATTR_PETAL_ANIM_CLOSE_MOBILE),\n/* harmony export */ ATTR_PETAL_ANIM_OPEN: () => (/* binding */ ATTR_PETAL_ANIM_OPEN),\n/* harmony export */ ATTR_PETAL_ANIM_OPEN_MOBILE: () => (/* binding */ ATTR_PETAL_ANIM_OPEN_MOBILE),\n/* harmony export */ ATTR_PETAL_BANNER: () => (/* binding */ ATTR_PETAL_BANNER),\n/* harmony export */ ATTR_PETAL_BANNER_CLOSE: () => (/* binding */ ATTR_PETAL_BANNER_CLOSE),\n/* harmony export */ ATTR_PETAL_BANNER_CLOSED_CLASS: () => (/* binding */ ATTR_PETAL_BANNER_CLOSED_CLASS),\n/* harmony export */ ATTR_PETAL_CLOSE: () => (/* binding */ ATTR_PETAL_CLOSE),\n/* harmony export */ ATTR_PETAL_DEBUG: () => (/* binding */ ATTR_PETAL_DEBUG),\n/* harmony export */ ATTR_PETAL_DISABLE_SCROLL_ON_OPEN: () => (/* binding */ ATTR_PETAL_DISABLE_SCROLL_ON_OPEN),\n/* harmony export */ ATTR_PETAL_DROPDOWN: () => (/* binding */ ATTR_PETAL_DROPDOWN),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_CLOSE_SPEED: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_CLOSE_SPEED),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_MOBILE: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_MOBILE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_MOBILE_LANDSCAPE: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_MOBILE_LANDSCAPE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_OFFSET: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_OFFSET),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE_LANDSCAPE: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE_LANDSCAPE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_OFFSET_TABLET: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_OFFSET_TABLET),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_OPEN_SPEED: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_OPEN_SPEED),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_TABLET: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_TABLET),\n/* harmony export */ ATTR_PETAL_DROPDOWN_BACKDROP: () => (/* binding */ ATTR_PETAL_DROPDOWN_BACKDROP),\n/* harmony export */ ATTR_PETAL_DROPDOWN_CLOSE: () => (/* binding */ ATTR_PETAL_DROPDOWN_CLOSE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_CLOSE_DELAY: () => (/* binding */ ATTR_PETAL_DROPDOWN_CLOSE_DELAY),\n/* harmony export */ ATTR_PETAL_DROPDOWN_EXPAND_MOBILE: () => (/* binding */ ATTR_PETAL_DROPDOWN_EXPAND_MOBILE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_EXPAND_MOBILE_LANDSCAPE: () => (/* binding */ ATTR_PETAL_DROPDOWN_EXPAND_MOBILE_LANDSCAPE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_EXPAND_TABLET: () => (/* binding */ ATTR_PETAL_DROPDOWN_EXPAND_TABLET),\n/* harmony export */ ATTR_PETAL_DROPDOWN_MENU: () => (/* binding */ ATTR_PETAL_DROPDOWN_MENU),\n/* harmony export */ ATTR_PETAL_DROPDOWN_MENU_BOX: () => (/* binding */ ATTR_PETAL_DROPDOWN_MENU_BOX),\n/* harmony export */ ATTR_PETAL_DROPDOWN_OPEN_DELAY: () => (/* binding */ ATTR_PETAL_DROPDOWN_OPEN_DELAY),\n/* harmony export */ ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER: () => (/* binding */ ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER),\n/* harmony export */ ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_MOBILE: () => (/* binding */ ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_MOBILE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_MOBILE_LANDSCAPE: () => (/* binding */ ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_MOBILE_LANDSCAPE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_TABLET: () => (/* binding */ ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_TABLET),\n/* harmony export */ ATTR_PETAL_DROPDOWN_OVERLAY: () => (/* binding */ ATTR_PETAL_DROPDOWN_OVERLAY),\n/* harmony export */ ATTR_PETAL_DROPDOWN_SCROLL: () => (/* binding */ ATTR_PETAL_DROPDOWN_SCROLL),\n/* harmony export */ ATTR_PETAL_DROPDOWN_SHOW_DESKTOP: () => (/* binding */ ATTR_PETAL_DROPDOWN_SHOW_DESKTOP),\n/* harmony export */ ATTR_PETAL_DROPDOWN_SHOW_MOBILE: () => (/* binding */ ATTR_PETAL_DROPDOWN_SHOW_MOBILE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_SHOW_MOBILE_LANDSCAPE: () => (/* binding */ ATTR_PETAL_DROPDOWN_SHOW_MOBILE_LANDSCAPE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_SHOW_TABLET: () => (/* binding */ ATTR_PETAL_DROPDOWN_SHOW_TABLET),\n/* harmony export */ ATTR_PETAL_DROPDOWN_TOGGLE: () => (/* binding */ ATTR_PETAL_DROPDOWN_TOGGLE),\n/* harmony export */ ATTR_PETAL_DURATION: () => (/* binding */ ATTR_PETAL_DURATION),\n/* harmony export */ ATTR_PETAL_ELEMENT: () => (/* binding */ ATTR_PETAL_ELEMENT),\n/* harmony export */ ATTR_PETAL_GROUP: () => (/* binding */ ATTR_PETAL_GROUP),\n/* harmony export */ ATTR_PETAL_MASK: () => (/* binding */ ATTR_PETAL_MASK),\n/* harmony export */ ATTR_PETAL_MASK_CLOSE: () => (/* binding */ ATTR_PETAL_MASK_CLOSE),\n/* harmony export */ ATTR_PETAL_MASK_OPACITY: () => (/* binding */ ATTR_PETAL_MASK_OPACITY),\n/* harmony export */ ATTR_PETAL_NAME: () => (/* binding */ ATTR_PETAL_NAME),\n/* harmony export */ ATTR_PETAL_NAV: () => (/* binding */ ATTR_PETAL_NAV),\n/* harmony export */ ATTR_PETAL_NAV_SECONDARY: () => (/* binding */ ATTR_PETAL_NAV_SECONDARY),\n/* harmony export */ ATTR_PETAL_OPEN: () => (/* binding */ ATTR_PETAL_OPEN),\n/* harmony export */ ATTR_PETAL_POPUP: () => (/* binding */ ATTR_PETAL_POPUP),\n/* harmony export */ ATTR_PETAL_POSITION: () => (/* binding */ ATTR_PETAL_POSITION),\n/* harmony export */ ATTR_PETAL_SESSION_TTL: () => (/* binding */ ATTR_PETAL_SESSION_TTL),\n/* harmony export */ ATTR_PETAL_SHOW_DELAY: () => (/* binding */ ATTR_PETAL_SHOW_DELAY),\n/* harmony export */ ATTR_PETAL_SHOW_ONCE: () => (/* binding */ ATTR_PETAL_SHOW_ONCE),\n/* harmony export */ ATTR_PETAL_SLOT: () => (/* binding */ ATTR_PETAL_SLOT),\n/* harmony export */ ATTR_PETAL_STATE: () => (/* binding */ ATTR_PETAL_STATE)\n/* harmony export */ });\n// BASE\nconst ATTR_PETAL_NAME = \"petal\";\nconst ATTR_PETAL_ELEMENT = \"petal-el\";\nconst ATTR_PETAL_GROUP = \"petal-group\"; // Group name for coordinated behavior across components\nconst ATTR_PETAL_STATE = \"petal-state\";\nconst ATTR_PETAL_DEBUG = \"petal-debug\"; // Enable debug console logging\n// BEHAVIOR\nconst ATTR_PETAL_SHOW_ONCE = \"petal-show-once\"; // Regardless of other settings, only show the popup once per user session\nconst ATTR_PETAL_SHOW_DELAY = \"petal-show-delay\"; // Time to wait before showing popup (in seconds)\nconst ATTR_PETAL_SESSION_TTL = \"petal-session-ttl\"; // Time to keep user session (in hours)\n/**-------------------------*\n * POPUP\n *--------------------------*/\n// ELEMENTS\nconst ATTR_PETAL_POPUP = \"popup\";\nconst ATTR_PETAL_OPEN = \"open\";\nconst ATTR_PETAL_CLOSE = \"close\";\nconst ATTR_PETAL_MASK = \"mask\";\nconst ATTR_PETAL_SLOT = \"slot\";\n// MASK\nconst ATTR_PETAL_MASK_OPACITY = \"petal-mask-opacity\";\nconst ATTR_PETAL_MASK_CLOSE = \"petal-mask-close\";\n// ANIMATIONS\nconst ATTR_PETAL_ANIM_OPEN = \"petal-anim-open\";\nconst ATTR_PETAL_ANIM_CLOSE = \"petal-anim-close\";\nconst ATTR_PETAL_ANIM_OPEN_MOBILE = \"petal-anim-open-mobile\";\nconst ATTR_PETAL_ANIM_CLOSE_MOBILE = \"petal-anim-close-mobile\";\nconst ATTR_PETAL_DURATION = \"petal-duration\";\n/**-------------------------*\n * NAV\n *--------------------------*/\n// ELEMENTS\nconst ATTR_PETAL_NAV = \"nav\";\nconst ATTR_PETAL_NAV_SECONDARY = \"nav-secondary\";\nconst ATTR_PETAL_BANNER = \"banner\";\nconst ATTR_PETAL_BANNER_CLOSE = \"banner-close\";\n// SETTINGS\nconst ATTR_ALLOW_CLOSE = \"petal-allow-close\";\nconst ATTR_PETAL_POSITION = \"petal-position\";\n// CSS\nconst ATTR_PETAL_BANNER_CLOSED_CLASS = \"petal-hide-nav-banner\";\n/**-------------------------*\n * DROPDOWN\n *--------------------------*/\n// ELEMENTS\nconst ATTR_PETAL_DROPDOWN = \"dropdown\";\nconst ATTR_PETAL_DROPDOWN_TOGGLE = \"dropdown-toggle\";\nconst ATTR_PETAL_DROPDOWN_MENU = \"dropdown-menu\";\nconst ATTR_PETAL_DROPDOWN_MENU_BOX = \"dropdown-drawer\";\nconst ATTR_PETAL_DROPDOWN_OVERLAY = \"dropdown-overlay\";\nconst ATTR_PETAL_DROPDOWN_CLOSE = \"dropdown-close\";\nconst ATTR_PETAL_DROPDOWN_SCROLL = \"dropdown-scroll\";\nconst ATTR_PETAL_DROPDOWN_BACKDROP = \"dropdown-backdrop\";\n// BEHAVIOR\nconst ATTR_PETAL_DISABLE_SCROLL_ON_OPEN = \"petal-disable-scroll-on-open\";\nconst ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER = \"petal-dropdown-open-on-hover\";\nconst ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_TABLET = \"petal-dropdown-open-on-hover-tablet\";\nconst ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_MOBILE_LANDSCAPE = \"petal-dropdown-open-on-hover-mobile-landscape\";\nconst ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_MOBILE = \"petal-dropdown-open-on-hover-mobile\";\nconst ATTR_PETAL_DROPDOWN_OPEN_DELAY = \"petal-dropdown-open-delay\";\nconst ATTR_PETAL_DROPDOWN_CLOSE_DELAY = \"petal-dropdown-close-delay\";\n// VISIBILITY\nconst ATTR_PETAL_DROPDOWN_SHOW_DESKTOP = \"petal-dropdown-show-desktop\";\nconst ATTR_PETAL_DROPDOWN_SHOW_TABLET = \"petal-dropdown-show-tablet\";\nconst ATTR_PETAL_DROPDOWN_SHOW_MOBILE_LANDSCAPE = \"petal-dropdown-show-mobile-landscape\";\nconst ATTR_PETAL_DROPDOWN_SHOW_MOBILE = \"petal-dropdown-show-mobile\";\n// EXPAND\nconst ATTR_PETAL_DROPDOWN_EXPAND_MOBILE = \"petal-dropdown-expand-mobile\";\nconst ATTR_PETAL_DROPDOWN_EXPAND_MOBILE_LANDSCAPE = \"petal-dropdown-expand-mobile-landscape\";\nconst ATTR_PETAL_DROPDOWN_EXPAND_TABLET = \"petal-dropdown-expand-tablet\";\n// ANIMATIONS\nconst ATTR_PETAL_DROPDOWN_ANIM = \"petal-dropdown-anim\";\nconst ATTR_PETAL_DROPDOWN_ANIM_TABLET = \"petal-dropdown-anim-tablet\";\nconst ATTR_PETAL_DROPDOWN_ANIM_MOBILE_LANDSCAPE = \"petal-dropdown-anim-mobile-landscape\";\nconst ATTR_PETAL_DROPDOWN_ANIM_MOBILE = \"petal-dropdown-anim-mobile\";\nconst ATTR_PETAL_DROPDOWN_ANIM_OPEN_SPEED = \"petal-dropdown-anim-open-speed\";\nconst ATTR_PETAL_DROPDOWN_ANIM_CLOSE_SPEED = \"petal-dropdown-anim-close-speed\";\nconst ATTR_PETAL_DROPDOWN_ANIM_OFFSET = \"petal-dropdown-anim-offset\";\nconst ATTR_PETAL_DROPDOWN_ANIM_OFFSET_TABLET = \"petal-dropdown-anim-offset-tablet\";\nconst ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE_LANDSCAPE = \"petal-dropdown-anim-offset-mobile-landscape\";\nconst ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE = \"petal-dropdown-anim-offset-mobile\";\n// ARIA ATTRIBUTES\nconst ARIA_EXPANDED = \"aria-expanded\";\n\n\n//# sourceURL=webpack://petal/./src/lib/attributes.ts?");
179
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ARIA_EXPANDED: () => (/* binding */ ARIA_EXPANDED),\n/* harmony export */ ATTR_ALLOW_CLOSE: () => (/* binding */ ATTR_ALLOW_CLOSE),\n/* harmony export */ ATTR_PETAL_ANIM_CLOSE: () => (/* binding */ ATTR_PETAL_ANIM_CLOSE),\n/* harmony export */ ATTR_PETAL_ANIM_CLOSE_MOBILE: () => (/* binding */ ATTR_PETAL_ANIM_CLOSE_MOBILE),\n/* harmony export */ ATTR_PETAL_ANIM_OPEN: () => (/* binding */ ATTR_PETAL_ANIM_OPEN),\n/* harmony export */ ATTR_PETAL_ANIM_OPEN_MOBILE: () => (/* binding */ ATTR_PETAL_ANIM_OPEN_MOBILE),\n/* harmony export */ ATTR_PETAL_BANNER: () => (/* binding */ ATTR_PETAL_BANNER),\n/* harmony export */ ATTR_PETAL_BANNER_CLOSE: () => (/* binding */ ATTR_PETAL_BANNER_CLOSE),\n/* harmony export */ ATTR_PETAL_BANNER_CLOSED_CLASS: () => (/* binding */ ATTR_PETAL_BANNER_CLOSED_CLASS),\n/* harmony export */ ATTR_PETAL_CLOSE: () => (/* binding */ ATTR_PETAL_CLOSE),\n/* harmony export */ ATTR_PETAL_DEBUG: () => (/* binding */ ATTR_PETAL_DEBUG),\n/* harmony export */ ATTR_PETAL_DIALOG: () => (/* binding */ ATTR_PETAL_DIALOG),\n/* harmony export */ ATTR_PETAL_DISABLE_SCROLL_ON_OPEN: () => (/* binding */ ATTR_PETAL_DISABLE_SCROLL_ON_OPEN),\n/* harmony export */ ATTR_PETAL_DROPDOWN: () => (/* binding */ ATTR_PETAL_DROPDOWN),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_CLOSE_SPEED: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_CLOSE_SPEED),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_MOBILE: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_MOBILE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_MOBILE_LANDSCAPE: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_MOBILE_LANDSCAPE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_OFFSET: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_OFFSET),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE_LANDSCAPE: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE_LANDSCAPE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_OFFSET_TABLET: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_OFFSET_TABLET),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_OPEN_SPEED: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_OPEN_SPEED),\n/* harmony export */ ATTR_PETAL_DROPDOWN_ANIM_TABLET: () => (/* binding */ ATTR_PETAL_DROPDOWN_ANIM_TABLET),\n/* harmony export */ ATTR_PETAL_DROPDOWN_CLOSE: () => (/* binding */ ATTR_PETAL_DROPDOWN_CLOSE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_CLOSE_DELAY: () => (/* binding */ ATTR_PETAL_DROPDOWN_CLOSE_DELAY),\n/* harmony export */ ATTR_PETAL_DROPDOWN_EXPAND_MOBILE: () => (/* binding */ ATTR_PETAL_DROPDOWN_EXPAND_MOBILE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_EXPAND_MOBILE_LANDSCAPE: () => (/* binding */ ATTR_PETAL_DROPDOWN_EXPAND_MOBILE_LANDSCAPE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_EXPAND_TABLET: () => (/* binding */ ATTR_PETAL_DROPDOWN_EXPAND_TABLET),\n/* harmony export */ ATTR_PETAL_DROPDOWN_MENU: () => (/* binding */ ATTR_PETAL_DROPDOWN_MENU),\n/* harmony export */ ATTR_PETAL_DROPDOWN_MENU_BOX: () => (/* binding */ ATTR_PETAL_DROPDOWN_MENU_BOX),\n/* harmony export */ ATTR_PETAL_DROPDOWN_OPEN_DELAY: () => (/* binding */ ATTR_PETAL_DROPDOWN_OPEN_DELAY),\n/* harmony export */ ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER: () => (/* binding */ ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER),\n/* harmony export */ ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_MOBILE: () => (/* binding */ ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_MOBILE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_MOBILE_LANDSCAPE: () => (/* binding */ ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_MOBILE_LANDSCAPE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_TABLET: () => (/* binding */ ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_TABLET),\n/* harmony export */ ATTR_PETAL_DROPDOWN_SCROLL: () => (/* binding */ ATTR_PETAL_DROPDOWN_SCROLL),\n/* harmony export */ ATTR_PETAL_DROPDOWN_SHOW_DESKTOP: () => (/* binding */ ATTR_PETAL_DROPDOWN_SHOW_DESKTOP),\n/* harmony export */ ATTR_PETAL_DROPDOWN_SHOW_MOBILE: () => (/* binding */ ATTR_PETAL_DROPDOWN_SHOW_MOBILE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_SHOW_MOBILE_LANDSCAPE: () => (/* binding */ ATTR_PETAL_DROPDOWN_SHOW_MOBILE_LANDSCAPE),\n/* harmony export */ ATTR_PETAL_DROPDOWN_SHOW_TABLET: () => (/* binding */ ATTR_PETAL_DROPDOWN_SHOW_TABLET),\n/* harmony export */ ATTR_PETAL_DROPDOWN_TOGGLE: () => (/* binding */ ATTR_PETAL_DROPDOWN_TOGGLE),\n/* harmony export */ ATTR_PETAL_DURATION: () => (/* binding */ ATTR_PETAL_DURATION),\n/* harmony export */ ATTR_PETAL_ELEMENT: () => (/* binding */ ATTR_PETAL_ELEMENT),\n/* harmony export */ ATTR_PETAL_GROUP: () => (/* binding */ ATTR_PETAL_GROUP),\n/* harmony export */ ATTR_PETAL_MASK_CLOSE: () => (/* binding */ ATTR_PETAL_MASK_CLOSE),\n/* harmony export */ ATTR_PETAL_MODAL: () => (/* binding */ ATTR_PETAL_MODAL),\n/* harmony export */ ATTR_PETAL_MODAL_TYPE: () => (/* binding */ ATTR_PETAL_MODAL_TYPE),\n/* harmony export */ ATTR_PETAL_NAME: () => (/* binding */ ATTR_PETAL_NAME),\n/* harmony export */ ATTR_PETAL_NAV: () => (/* binding */ ATTR_PETAL_NAV),\n/* harmony export */ ATTR_PETAL_NAV_SECONDARY: () => (/* binding */ ATTR_PETAL_NAV_SECONDARY),\n/* harmony export */ ATTR_PETAL_OPEN: () => (/* binding */ ATTR_PETAL_OPEN),\n/* harmony export */ ATTR_PETAL_OVERLAY: () => (/* binding */ ATTR_PETAL_OVERLAY),\n/* harmony export */ ATTR_PETAL_OVERLAY_OPACITY: () => (/* binding */ ATTR_PETAL_OVERLAY_OPACITY),\n/* harmony export */ ATTR_PETAL_POSITION: () => (/* binding */ ATTR_PETAL_POSITION),\n/* harmony export */ ATTR_PETAL_SESSION_TTL: () => (/* binding */ ATTR_PETAL_SESSION_TTL),\n/* harmony export */ ATTR_PETAL_SHOW_DELAY: () => (/* binding */ ATTR_PETAL_SHOW_DELAY),\n/* harmony export */ ATTR_PETAL_SHOW_ONCE: () => (/* binding */ ATTR_PETAL_SHOW_ONCE),\n/* harmony export */ ATTR_PETAL_STATE: () => (/* binding */ ATTR_PETAL_STATE)\n/* harmony export */ });\n// BASE\nconst ATTR_PETAL_NAME = \"petal\";\nconst ATTR_PETAL_ELEMENT = \"petal-el\";\nconst ATTR_PETAL_GROUP = \"petal-group\"; // Group name for coordinated behavior across components\nconst ATTR_PETAL_STATE = \"petal-state\";\nconst ATTR_PETAL_DEBUG = \"petal-debug\"; // Enable debug console logging\n// BEHAVIOR\nconst ATTR_PETAL_SHOW_ONCE = \"petal-show-once\"; // Regardless of other settings, only show the modal once per user session\nconst ATTR_PETAL_SHOW_DELAY = \"petal-show-delay\"; // Time to wait before showing modal (in seconds)\nconst ATTR_PETAL_SESSION_TTL = \"petal-session-ttl\"; // Time to keep user session (in hours)\n/**-------------------------*\n * OVERLAY\n *--------------------------*/\nconst ATTR_PETAL_OVERLAY = \"overlay\";\nconst ATTR_PETAL_OVERLAY_OPACITY = \"petal-overlay-opacity\";\nconst ATTR_PETAL_MASK_CLOSE = \"petal-overlay-close\";\n/**-------------------------*\n * MODAL\n *--------------------------*/\n// ELEMENTS\nconst ATTR_PETAL_MODAL = \"modal\";\nconst ATTR_PETAL_OPEN = \"open\";\nconst ATTR_PETAL_CLOSE = \"close\";\nconst ATTR_PETAL_DIALOG = \"dialog\";\n// MODAL TYPE\nconst ATTR_PETAL_MODAL_TYPE = \"petal-modal-type\";\n// ANIMATIONS\nconst ATTR_PETAL_ANIM_OPEN = \"petal-anim-open\";\nconst ATTR_PETAL_ANIM_CLOSE = \"petal-anim-close\";\nconst ATTR_PETAL_ANIM_OPEN_MOBILE = \"petal-anim-open-mobile\";\nconst ATTR_PETAL_ANIM_CLOSE_MOBILE = \"petal-anim-close-mobile\";\nconst ATTR_PETAL_DURATION = \"petal-duration\";\n/**-------------------------*\n * NAV\n *--------------------------*/\n// ELEMENTS\nconst ATTR_PETAL_NAV = \"nav\";\nconst ATTR_PETAL_NAV_SECONDARY = \"nav-secondary\";\nconst ATTR_PETAL_BANNER = \"banner\";\nconst ATTR_PETAL_BANNER_CLOSE = \"banner-close\";\n// SETTINGS\nconst ATTR_ALLOW_CLOSE = \"petal-allow-close\";\nconst ATTR_PETAL_POSITION = \"petal-position\";\n// CSS\nconst ATTR_PETAL_BANNER_CLOSED_CLASS = \"petal-hide-nav-banner\";\n/**-------------------------*\n * DROPDOWN\n *--------------------------*/\n// ELEMENTS\nconst ATTR_PETAL_DROPDOWN = \"dropdown\";\nconst ATTR_PETAL_DROPDOWN_TOGGLE = \"dropdown-toggle\";\nconst ATTR_PETAL_DROPDOWN_MENU = \"dropdown-menu\";\nconst ATTR_PETAL_DROPDOWN_MENU_BOX = \"dropdown-drawer\";\nconst ATTR_PETAL_DROPDOWN_CLOSE = \"dropdown-close\";\nconst ATTR_PETAL_DROPDOWN_SCROLL = \"dropdown-scroll\";\n// BEHAVIOR\nconst ATTR_PETAL_DISABLE_SCROLL_ON_OPEN = \"petal-disable-scroll-on-open\";\n// OPEN/CLOSE BEHAVIOR\nconst ATTR_PETAL_DROPDOWN_OPEN_DELAY = \"petal-dropdown-open-delay\";\nconst ATTR_PETAL_DROPDOWN_CLOSE_DELAY = \"petal-dropdown-close-delay\";\nconst ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER = \"petal-dropdown-open-on-hover\";\nconst ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_TABLET = \"petal-dropdown-open-on-hover-tablet\";\nconst ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_MOBILE_LANDSCAPE = \"petal-dropdown-open-on-hover-mobile-landscape\";\nconst ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_MOBILE = \"petal-dropdown-open-on-hover-mobile\";\n// VISIBILITY\nconst ATTR_PETAL_DROPDOWN_SHOW_DESKTOP = \"petal-dropdown-show-desktop\";\nconst ATTR_PETAL_DROPDOWN_SHOW_TABLET = \"petal-dropdown-show-tablet\";\nconst ATTR_PETAL_DROPDOWN_SHOW_MOBILE_LANDSCAPE = \"petal-dropdown-show-mobile-landscape\";\nconst ATTR_PETAL_DROPDOWN_SHOW_MOBILE = \"petal-dropdown-show-mobile\";\n// EXPAND\nconst ATTR_PETAL_DROPDOWN_EXPAND_TABLET = \"petal-dropdown-expand-tablet\";\nconst ATTR_PETAL_DROPDOWN_EXPAND_MOBILE_LANDSCAPE = \"petal-dropdown-expand-mobile-landscape\";\nconst ATTR_PETAL_DROPDOWN_EXPAND_MOBILE = \"petal-dropdown-expand-mobile\";\n// ANIMATIONS\nconst ATTR_PETAL_DROPDOWN_ANIM = \"petal-dropdown-anim\";\nconst ATTR_PETAL_DROPDOWN_ANIM_TABLET = \"petal-dropdown-anim-tablet\";\nconst ATTR_PETAL_DROPDOWN_ANIM_MOBILE_LANDSCAPE = \"petal-dropdown-anim-mobile-landscape\";\nconst ATTR_PETAL_DROPDOWN_ANIM_MOBILE = \"petal-dropdown-anim-mobile\";\nconst ATTR_PETAL_DROPDOWN_ANIM_OPEN_SPEED = \"petal-dropdown-anim-open-speed\";\nconst ATTR_PETAL_DROPDOWN_ANIM_CLOSE_SPEED = \"petal-dropdown-anim-close-speed\";\nconst ATTR_PETAL_DROPDOWN_ANIM_OFFSET = \"petal-dropdown-anim-offset\";\nconst ATTR_PETAL_DROPDOWN_ANIM_OFFSET_TABLET = \"petal-dropdown-anim-offset-tablet\";\nconst ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE_LANDSCAPE = \"petal-dropdown-anim-offset-mobile-landscape\";\nconst ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE = \"petal-dropdown-anim-offset-mobile\";\n// ARIA ATTRIBUTES\nconst ARIA_EXPANDED = \"aria-expanded\";\n\n\n//# sourceURL=webpack://petal/./src/lib/attributes.ts?");
190
180
 
191
181
  /***/ }),
192
182
 
@@ -200,23 +190,13 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
200
190
 
201
191
  /***/ }),
202
192
 
203
- /***/ "./src/lib/console.ts":
204
- /*!****************************!*\
205
- !*** ./src/lib/console.ts ***!
206
- \****************************/
207
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
208
-
209
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MissingMaskError: () => (/* binding */ MissingMaskError),\n/* harmony export */ MissingNameError: () => (/* binding */ MissingNameError),\n/* harmony export */ MissingPopupError: () => (/* binding */ MissingPopupError),\n/* harmony export */ MissingSlotError: () => (/* binding */ MissingSlotError),\n/* harmony export */ MissingTriggerError: () => (/* binding */ MissingTriggerError),\n/* harmony export */ PetalError: () => (/* binding */ PetalError),\n/* harmony export */ logPetalError: () => (/* binding */ logPetalError)\n/* harmony export */ });\n// Custom Error classes for Petal\nclass PetalError extends Error {\n constructor(message, element, petalName) {\n super(message);\n this.element = element;\n this.petalName = petalName;\n this.name = \"PetalError\";\n }\n}\nclass MissingNameError extends PetalError {\n constructor(trigger) {\n super('Trigger is missing the \"petal\" attribute', trigger);\n this.name = \"MissingNameError\";\n }\n}\nclass MissingPopupError extends PetalError {\n constructor(popupName, trigger) {\n super(`Popup with name \"${popupName}\" not found`, trigger, popupName);\n this.name = \"MissingPopupError\";\n }\n}\nclass MissingTriggerError extends PetalError {\n constructor(popupName, trigger) {\n super(`Trigger error for \"${popupName}\"`, trigger, popupName);\n this.name = \"MissingTriggerError\";\n }\n}\nclass MissingMaskError extends PetalError {\n constructor(popupName, trigger) {\n super(`Mask not found for \"${popupName}\"`, trigger, popupName);\n this.name = \"MissingMaskError\";\n }\n}\nclass MissingSlotError extends PetalError {\n constructor(popupName, trigger) {\n super(`Slot not found for \"${popupName}\"`, trigger, popupName);\n this.name = \"MissingSlotError\";\n }\n}\n// Helper function to log errors (for backward compatibility or simple logging)\nfunction logPetalError(error) {\n console.error(`[${error.name}]:`, error.message, error.element);\n}\n\n\n//# sourceURL=webpack://petal/./src/lib/console.ts?");
210
-
211
- /***/ }),
212
-
213
193
  /***/ "./src/lib/helpers.ts":
214
194
  /*!****************************!*\
215
195
  !*** ./src/lib/helpers.ts ***!
216
196
  \****************************/
217
197
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
218
198
 
219
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getAllPetalElementsOfType: () => (/* binding */ getAllPetalElementsOfType)\n/* harmony export */ });\n/* harmony import */ var _attributes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./attributes */ \"./src/lib/attributes.ts\");\n\nfunction getAllPetalElementsOfType(el) {\n return document.querySelectorAll(`[${_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${el}']`);\n}\n\n\n//# sourceURL=webpack://petal/./src/lib/helpers.ts?");
199
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ findClosestPetalParent: () => (/* binding */ findClosestPetalParent),\n/* harmony export */ findPetalElementByName: () => (/* binding */ findPetalElementByName),\n/* harmony export */ findPetalElementByNameOrInParent: () => (/* binding */ findPetalElementByNameOrInParent),\n/* harmony export */ findPetalElementsByName: () => (/* binding */ findPetalElementsByName),\n/* harmony export */ findPetalElementsByNameOrInParent: () => (/* binding */ findPetalElementsByNameOrInParent),\n/* harmony export */ getAllPetalElementsOfType: () => (/* binding */ getAllPetalElementsOfType),\n/* harmony export */ getPetalElementInParent: () => (/* binding */ getPetalElementInParent),\n/* harmony export */ getPetalElementsInParent: () => (/* binding */ getPetalElementsInParent)\n/* harmony export */ });\n/* harmony import */ var _attributes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./attributes */ \"./src/lib/attributes.ts\");\n\nfunction getAllPetalElementsOfType(el) {\n return document.querySelectorAll(`[${_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${el}']`);\n}\nfunction getPetalElementInParent(parent, el) {\n return parent.querySelector(`[${_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${el}']`);\n}\nfunction getPetalElementsInParent(parent, el) {\n return parent.querySelectorAll(`[${_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${el}']`);\n}\n/**\n * Find Petal Element by Name\n * @param name The Petal Name for the Element (Set with petal=['NAME']).\n * @param el The Attribute of the Element to get.\n * @returns An Element of the correct type with the matching name or null if none is found.\n */\nfunction findPetalElementByName(name, el) {\n return document.querySelector(`[${_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_NAME}='${name}'][${_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${el}']`);\n}\n/**\n * Find Petal Elements by Name\n * @param name The Petal Name for the Elements (Set with petal=['NAME']).\n * @param el The Attribute of the Elements to get.\n * @returns Elements of the correct type with the matching name or null if none is found.\n */\nfunction findPetalElementsByName(name, el) {\n return document.querySelectorAll(`[${_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_NAME}='${name}'][${_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${el}']`);\n}\nfunction findPetalElementByNameOrInParent(parent, name, el) {\n // First try to find by name globally\n const globalMatch = findPetalElementByName(name, el);\n if (globalMatch)\n return globalMatch;\n // If no name match, try to find within the parent\n return getPetalElementInParent(parent, el);\n}\nfunction findPetalElementsByNameOrInParent(parent, name, el) {\n // First try to find by name globally\n const globalMatch = findPetalElementsByName(name, el);\n if (globalMatch)\n return globalMatch;\n // If no name match, try to find within the parent\n return getPetalElementsInParent(parent, el);\n}\n/**\n * Find the closest parent element with a specific petal-el attribute\n * @param element The starting element\n * @param petalElType The petal-el type to search for (e.g., 'modal', 'dropdown')\n * @returns The closest parent with the specified petal-el type, or null if none found\n */\nfunction findClosestPetalParent(element, petalElType) {\n let current = element.parentElement;\n while (current) {\n if (current.getAttribute(_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT) === petalElType) {\n return current;\n }\n current = current.parentElement;\n }\n return null;\n}\n\n\n//# sourceURL=webpack://petal/./src/lib/helpers.ts?");
220
200
 
221
201
  /***/ }),
222
202
 
@@ -226,7 +206,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
226
206
  \***************************/
227
207
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
228
208
 
229
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ checkClosedState: () => (/* binding */ checkClosedState),\n/* harmony export */ clearClosedState: () => (/* binding */ clearClosedState),\n/* harmony export */ storeClosedState: () => (/* binding */ storeClosedState)\n/* harmony export */ });\n/**\n * Store Closed State in Session Storage\n * @param type The type of element (popup or banner)\n * @param name The name of the Petal Element to store\n */\nfunction storeClosedState(type, name) {\n const now = new Date();\n sessionStorage.setItem(getMemoryKey(type, name), now.getTime().toString());\n}\n/**\n * Check Closed State in Session Storage\n * @param type The type of element (popup or banner)\n * @param name The name of the Petal Element to check\n * @param sessionTTLMinutes The length that the session is valid for (in minutes)\n * @returns True if the element has been closed in this session and the session is still valid, false otherwise\n */\nfunction checkClosedState(type, name, sessionTTLMinutes) {\n const timestampStr = sessionStorage.getItem(getMemoryKey(type, name));\n if (!timestampStr)\n return false;\n const timestamp = parseInt(timestampStr, 10);\n if (isNaN(timestamp)) {\n sessionStorage.removeItem(getMemoryKey(type, name));\n return false;\n }\n const now = new Date();\n const itemTime = new Date(timestamp);\n const diffMinutes = (now.getTime() - itemTime.getTime()) / (1000 * 60);\n if (diffMinutes > sessionTTLMinutes) {\n // Session expired\n sessionStorage.removeItem(getMemoryKey(type, name));\n return false;\n }\n return true;\n}\n/**\n * Clear Closed State from Session Storage\n * @param type The type of element (popup or banner)\n * @param name The name of the Petal Element to clear\n */\nfunction clearClosedState(type, name) {\n sessionStorage.removeItem(getMemoryKey(type, name));\n}\nfunction getMemoryKey(key, name) {\n return `petal_memory_${key}_${name}`;\n}\n\n\n//# sourceURL=webpack://petal/./src/lib/memory.ts?");
209
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ checkClosedState: () => (/* binding */ checkClosedState),\n/* harmony export */ clearClosedState: () => (/* binding */ clearClosedState),\n/* harmony export */ storeClosedState: () => (/* binding */ storeClosedState)\n/* harmony export */ });\n/**\n * Store Closed State in Session Storage\n * @param type The type of element (modal or banner)\n * @param name The name of the Petal Element to store\n */\nfunction storeClosedState(type, name) {\n const now = new Date();\n sessionStorage.setItem(getMemoryKey(type, name), now.getTime().toString());\n}\n/**\n * Check Closed State in Session Storage\n * @param type The type of element (modal or banner)\n * @param name The name of the Petal Element to check\n * @param sessionTTLMinutes The length that the session is valid for (in minutes)\n * @returns True if the element has been closed in this session and the session is still valid, false otherwise\n */\nfunction checkClosedState(type, name, sessionTTLMinutes) {\n const timestampStr = sessionStorage.getItem(getMemoryKey(type, name));\n if (!timestampStr)\n return false;\n const timestamp = parseInt(timestampStr, 10);\n if (isNaN(timestamp)) {\n sessionStorage.removeItem(getMemoryKey(type, name));\n return false;\n }\n const now = new Date();\n const itemTime = new Date(timestamp);\n const diffMinutes = (now.getTime() - itemTime.getTime()) / (1000 * 60);\n if (diffMinutes > sessionTTLMinutes) {\n // Session expired\n sessionStorage.removeItem(getMemoryKey(type, name));\n return false;\n }\n return true;\n}\n/**\n * Clear Closed State from Session Storage\n * @param type The type of element (modal or banner)\n * @param name The name of the Petal Element to clear\n */\nfunction clearClosedState(type, name) {\n sessionStorage.removeItem(getMemoryKey(type, name));\n}\nfunction getMemoryKey(key, name) {\n return `petal_memory_${key}_${name}`;\n}\n\n\n//# sourceURL=webpack://petal/./src/lib/memory.ts?");
230
210
 
231
211
  /***/ }),
232
212
 
@@ -266,7 +246,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
266
246
  \***************************************************/
267
247
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
268
248
 
269
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ animateClose: () => (/* binding */ animateClose),\n/* harmony export */ animateOpen: () => (/* binding */ animateOpen),\n/* harmony export */ initializeDrawerPosition: () => (/* binding */ initializeDrawerPosition)\n/* harmony export */ });\n/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! gsap */ \"./node_modules/gsap/index.js\");\n/* harmony import */ var _lib_animations__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/animations */ \"./src/lib/animations.ts\");\n/* harmony import */ var _lib_attributes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../lib/attributes */ \"./src/lib/attributes.ts\");\n/**\n * Dropdown Animator Module\n *\n * Handles GSAP animations for dropdown menus including:\n * - Opening/closing animations\n * - Overlay fade transitions\n * - Timeline management\n */\n\n\n\n// Animation mapping\nconst animationOpenMap = {\n \"slide-down\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateDropdownOpenSlideDown,\n \"slide-up\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateDropdownOpenSlideUp,\n \"slide-left\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateDropdownOpenSlideLeft,\n \"slide-right\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateDropdownOpenSlideRight,\n};\nconst animationCloseMap = {\n \"slide-down\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateDropdownCloseSlideDown,\n \"slide-up\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateDropdownCloseSlideUp,\n \"slide-left\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateDropdownCloseSlideLeft,\n \"slide-right\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateDropdownCloseSlideRight,\n};\n/**\n * Animates dropdown opening with GSAP\n */\nfunction animateOpen(elements, currentAnim, currentOffset, config, index) {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - performOpen() executing with GSAP`);\n const { dropdown, toggle, menu, drawer, overlay } = elements;\n const animFunc = animationOpenMap[currentAnim];\n const anim = animFunc(currentOffset);\n // Create GSAP timeline\n const tl = gsap__WEBPACK_IMPORTED_MODULE_2__.gsap.timeline();\n // Set menu to visible with flex display\n tl.set(menu, { display: \"flex\", visibility: \"visible\" });\n // Set overlay to flex and visible if it exists\n if (overlay) {\n tl.set(overlay, { display: \"flex\", visibility: \"visible\" }, \"<\");\n }\n // Animate the drawer\n anim.to.duration = config.animOpenSpeed;\n tl.fromTo(drawer, anim.from, anim.to, \"<\");\n // Update ARIA and state\n toggle.setAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ARIA_EXPANDED, \"true\");\n dropdown.setAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_STATE, \"open\");\n // Fade in overlay\n if (overlay) {\n tl.to(overlay, { opacity: 1, duration: config.animOpenSpeed }, \"<\");\n }\n return tl;\n}\n/**\n * Animates dropdown closing with GSAP\n */\nfunction animateClose(elements, currentAnim, currentOffset, config, index) {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - closeDropdown() executing with GSAP`);\n const { dropdown, toggle, menu, drawer, overlay } = elements;\n const animFunc = animationCloseMap[currentAnim];\n const anim = animFunc(currentOffset);\n // Create GSAP timeline\n const tl = gsap__WEBPACK_IMPORTED_MODULE_2__.gsap.timeline({\n onComplete: () => {\n // Update ARIA and state after animation completes\n toggle.setAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ARIA_EXPANDED, \"false\");\n dropdown.setAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_STATE, \"closed\");\n // Set visibility to hidden after animation completes\n gsap__WEBPACK_IMPORTED_MODULE_2__.gsap.set(menu, { visibility: \"hidden\" });\n if (overlay) {\n gsap__WEBPACK_IMPORTED_MODULE_2__.gsap.set(overlay, { display: \"none\", visibility: \"hidden\" });\n }\n },\n });\n // Animate the drawer\n anim.to.duration = config.animCloseSpeed;\n tl.fromTo(drawer, anim.from, anim.to);\n // Fade out overlay\n if (overlay) {\n tl.to(overlay, { opacity: 0, duration: config.animCloseSpeed }, \"<\");\n }\n return tl;\n}\n/**\n * Initialize drawer to its animation's starting position\n */\nfunction initializeDrawerPosition(drawer, currentAnim, currentOffset) {\n const animFunc = animationOpenMap[currentAnim];\n const anim = animFunc(currentOffset);\n gsap__WEBPACK_IMPORTED_MODULE_2__.gsap.set(drawer, anim.from);\n}\n\n\n//# sourceURL=webpack://petal/./src/modules/dropdown/dropdown-animator.ts?");
249
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ animateClose: () => (/* binding */ animateClose),\n/* harmony export */ animateOpen: () => (/* binding */ animateOpen),\n/* harmony export */ initializeDrawerPosition: () => (/* binding */ initializeDrawerPosition)\n/* harmony export */ });\n/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! gsap */ \"./node_modules/gsap/index.js\");\n/* harmony import */ var _lib_animations__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/animations */ \"./src/lib/animations.ts\");\n/* harmony import */ var _lib_attributes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../lib/attributes */ \"./src/lib/attributes.ts\");\n/**\n * Dropdown Animator Module\n *\n * Handles GSAP animations for dropdown menus including:\n * - Opening/closing animations\n * - Overlay fade transitions\n * - Timeline management\n */\n\n\n\n// Animation mapping\nconst animationOpenMap = {\n \"slide-down\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateDropdownOpenSlideDown,\n \"slide-up\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateDropdownOpenSlideUp,\n \"slide-left\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateDropdownOpenSlideLeft,\n \"slide-right\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateDropdownOpenSlideRight,\n};\nconst animationCloseMap = {\n \"slide-down\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateDropdownCloseSlideDown,\n \"slide-up\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateDropdownCloseSlideUp,\n \"slide-left\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateDropdownCloseSlideLeft,\n \"slide-right\": _lib_animations__WEBPACK_IMPORTED_MODULE_0__.animateDropdownCloseSlideRight,\n};\n/**\n * Animates dropdown opening with GSAP\n */\nfunction animateOpen(elements, currentAnim, currentOffset, config, index) {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - performOpen() executing with GSAP`);\n const { dropdown, toggle, menu, drawer, overlay } = elements;\n const animFunc = animationOpenMap[currentAnim];\n const anim = animFunc(currentOffset);\n // Create GSAP timeline\n const tl = gsap__WEBPACK_IMPORTED_MODULE_2__.gsap.timeline();\n // Set menu to visible with flex display\n tl.set(menu, { display: \"flex\", visibility: \"visible\" });\n // Set overlay to flex and visible if it exists\n if (overlay) {\n tl.set(overlay, { display: \"flex\", visibility: \"visible\" }, \"<\");\n }\n // Animate the drawer\n anim.to.duration = config.animOpenSpeed;\n tl.fromTo(drawer, anim.from, anim.to, \"<\");\n // Update ARIA and state\n toggle.setAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ARIA_EXPANDED, \"true\");\n dropdown.setAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_STATE, \"open\");\n // Fade in overlay\n if (overlay) {\n tl.to(overlay, { opacity: 1, duration: config.animOpenSpeed }, \"<\");\n }\n return tl;\n}\n/**\n * Animates dropdown closing with GSAP\n */\nfunction animateClose(elements, currentAnim, currentOffset, config, index) {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - closeDropdown() executing with GSAP`);\n const { dropdown, toggle, menu, drawer, overlay } = elements;\n const animFunc = animationCloseMap[currentAnim];\n const anim = animFunc(currentOffset);\n // Create GSAP timeline\n const tl = gsap__WEBPACK_IMPORTED_MODULE_2__.gsap.timeline({\n onComplete: () => {\n // Update ARIA and state after animation completes\n toggle.setAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ARIA_EXPANDED, \"false\");\n dropdown.setAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_1__.ATTR_PETAL_STATE, \"closed\");\n // Set display to none and visibility to hidden after animation completes\n gsap__WEBPACK_IMPORTED_MODULE_2__.gsap.set(menu, { display: \"none\", visibility: \"hidden\" });\n if (overlay) {\n gsap__WEBPACK_IMPORTED_MODULE_2__.gsap.set(overlay, { display: \"none\", visibility: \"hidden\" });\n }\n },\n });\n // Animate the drawer\n anim.to.duration = config.animCloseSpeed;\n tl.fromTo(drawer, anim.from, anim.to);\n // Fade out overlay\n if (overlay) {\n tl.to(overlay, { opacity: 0, duration: config.animCloseSpeed }, \"<\");\n }\n return tl;\n}\n/**\n * Initialize drawer to its animation's starting position\n */\nfunction initializeDrawerPosition(drawer, currentAnim, currentOffset) {\n const animFunc = animationOpenMap[currentAnim];\n const anim = animFunc(currentOffset);\n gsap__WEBPACK_IMPORTED_MODULE_2__.gsap.set(drawer, anim.from);\n}\n\n\n//# sourceURL=webpack://petal/./src/modules/dropdown/dropdown-animator.ts?");
270
250
 
271
251
  /***/ }),
272
252
 
@@ -276,7 +256,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
276
256
  \*************************************************/
277
257
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
278
258
 
279
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getCurrentAnimation: () => (/* binding */ getCurrentAnimation),\n/* harmony export */ getCurrentOffset: () => (/* binding */ getCurrentOffset),\n/* harmony export */ getCurrentOpenOnHover: () => (/* binding */ getCurrentOpenOnHover),\n/* harmony export */ getCurrentShowState: () => (/* binding */ getCurrentShowState),\n/* harmony export */ logConfig: () => (/* binding */ logConfig),\n/* harmony export */ parseDropdownConfig: () => (/* binding */ parseDropdownConfig)\n/* harmony export */ });\n/* harmony import */ var _lib_attributes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/attributes */ \"./src/lib/attributes.ts\");\n/**\n * Dropdown Configuration Module\n *\n * Handles parsing and managing dropdown configuration from HTML attributes\n * including animations, delays, offsets, and responsive breakpoints.\n */\n\n/**\n * Parse offset value from attribute string\n * Returns number for pixel values, string for percentage values\n */\nfunction parseOffset(value) {\n if (value.includes(\"%\")) {\n return value;\n }\n return parseInt(value);\n}\n/**\n * Parse boolean attribute value with null for unspecified\n */\nfunction parseBooleanOrNull(value) {\n if (value === null)\n return null;\n return value === \"true\";\n}\n/**\n * Parses dropdown configuration from HTML element attributes\n */\nfunction parseDropdownConfig(dropdown) {\n // Group coordination\n const group = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_GROUP) || null;\n // Debug mode\n const debug = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DEBUG) === \"true\";\n // Check if device has mouse capability (pointer device)\n const hasMouse = window.matchMedia(\"(pointer: fine)\").matches;\n // Scroll lock\n const disableScrollOnOpen = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DISABLE_SCROLL_ON_OPEN) === \"true\";\n // Open-on-hover configuration with breakpoints\n const openOnHoverDesktopAttr = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER);\n const openOnHoverTabletAttr = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_TABLET);\n const openOnHoverMobileLandscapeAttr = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_MOBILE_LANDSCAPE);\n const openOnHoverMobileAttr = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_MOBILE);\n const openOnHoverDesktop = openOnHoverDesktopAttr === \"true\";\n const openOnHoverTablet = parseBooleanOrNull(openOnHoverTabletAttr);\n const openOnHoverMobileLandscape = parseBooleanOrNull(openOnHoverMobileLandscapeAttr);\n const openOnHoverMobile = parseBooleanOrNull(openOnHoverMobileAttr);\n // Show on breakpoints configuration (defaults to true)\n const showDesktopAttr = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_SHOW_DESKTOP);\n const showTabletAttr = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_SHOW_TABLET);\n const showMobileLandscapeAttr = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_SHOW_MOBILE_LANDSCAPE);\n const showMobileAttr = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_SHOW_MOBILE);\n const showDesktop = showDesktopAttr === null ? true : showDesktopAttr === \"true\";\n const showTablet = parseBooleanOrNull(showTabletAttr);\n const showMobileLandscape = parseBooleanOrNull(showMobileLandscapeAttr);\n const showMobile = parseBooleanOrNull(showMobileAttr);\n // Delays\n const openDelay = parseInt(dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_OPEN_DELAY) || \"200\");\n const closeDelay = parseInt(dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_CLOSE_DELAY) || \"200\");\n // Animation configuration\n const anim = (dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM) || \"slide-down\");\n const animTablet = (dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_TABLET) || anim);\n const animMobileLandscape = (dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_MOBILE_LANDSCAPE) || animTablet);\n const animMobile = (dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_MOBILE) || animMobileLandscape);\n // Animation speed configuration (in milliseconds, converted to seconds for GSAP)\n const animOpenSpeed = parseInt(dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_OPEN_SPEED) || \"500\") / 1000;\n const animCloseSpeed = parseInt(dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_CLOSE_SPEED) || \"300\") / 1000;\n // Animation offset configuration (in pixels or percentage) with breakpoints\n const animOffsetRaw = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_OFFSET) || \"25\";\n const animOffset = parseOffset(animOffsetRaw);\n const animOffsetTablet = parseOffset(dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_OFFSET_TABLET) || animOffsetRaw);\n const animOffsetMobileLandscape = parseOffset(dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE_LANDSCAPE) || dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_OFFSET_TABLET) || animOffsetRaw);\n const animOffsetMobile = parseOffset(dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE) ||\n dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE_LANDSCAPE) ||\n dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_OFFSET_TABLET) ||\n animOffsetRaw);\n return {\n group,\n debug,\n hasMouse,\n disableScrollOnOpen,\n openOnHoverDesktop,\n openOnHoverTablet,\n openOnHoverMobileLandscape,\n openOnHoverMobile,\n showDesktop,\n showTablet,\n showMobileLandscape,\n showMobile,\n openDelay,\n closeDelay,\n anim,\n animTablet,\n animMobileLandscape,\n animMobile,\n animOpenSpeed,\n animCloseSpeed,\n animOffset,\n animOffsetTablet,\n animOffsetMobileLandscape,\n animOffsetMobile,\n };\n}\n/**\n * Get current animation based on screen width\n */\nfunction getCurrentAnimation(config) {\n const width = window.innerWidth;\n if (width <= 479)\n return config.animMobile;\n if (width <= 767)\n return config.animMobileLandscape;\n if (width <= 991)\n return config.animTablet;\n return config.anim;\n}\n/**\n * Get current animation offset based on screen width\n */\nfunction getCurrentOffset(config) {\n const width = window.innerWidth;\n if (width <= 479)\n return config.animOffsetMobile;\n if (width <= 767)\n return config.animOffsetMobileLandscape;\n if (width <= 991)\n return config.animOffsetTablet;\n return config.animOffset;\n}\n/**\n * Get current open-on-hover setting based on screen width and device capability\n */\nfunction getCurrentOpenOnHover(config) {\n const width = window.innerWidth;\n let shouldHover = config.openOnHoverDesktop;\n if (width <= 479 && config.openOnHoverMobile !== null) {\n shouldHover = config.openOnHoverMobile;\n }\n else if (width <= 767 && config.openOnHoverMobileLandscape !== null) {\n shouldHover = config.openOnHoverMobileLandscape;\n }\n else if (width <= 991 && config.openOnHoverTablet !== null) {\n shouldHover = config.openOnHoverTablet;\n }\n // Only enable hover if device has mouse\n return shouldHover && config.hasMouse;\n}\n/**\n * Get current show state based on screen width\n */\nfunction getCurrentShowState(config) {\n const width = window.innerWidth;\n let shouldShow = config.showDesktop;\n if (width <= 479 && config.showMobile !== null) {\n shouldShow = config.showMobile;\n }\n else if (width <= 767 && config.showMobileLandscape !== null) {\n shouldShow = config.showMobileLandscape;\n }\n else if (width <= 991 && config.showTablet !== null) {\n shouldShow = config.showTablet;\n }\n return shouldShow;\n}\n/**\n * Log configuration for debugging\n */\nfunction logConfig(index, config) {\n if (!config.debug)\n return;\n console.log(`Dropdown ${index + 1} - Config:`, {\n group: config.group,\n debug: config.debug,\n hasMouse: config.hasMouse,\n openOnHoverDesktop: config.openOnHoverDesktop,\n openOnHoverTablet: config.openOnHoverTablet,\n openOnHoverMobileLandscape: config.openOnHoverMobileLandscape,\n openOnHoverMobile: config.openOnHoverMobile,\n openOnHover: getCurrentOpenOnHover(config),\n showDesktop: config.showDesktop,\n showTablet: config.showTablet,\n showMobileLandscape: config.showMobileLandscape,\n showMobile: config.showMobile,\n shouldShow: getCurrentShowState(config),\n openDelay: config.openDelay,\n closeDelay: config.closeDelay,\n anim: config.anim,\n animTablet: config.animTablet,\n animMobileLandscape: config.animMobileLandscape,\n animMobile: config.animMobile,\n animOpenSpeed: `${config.animOpenSpeed}s`,\n animCloseSpeed: `${config.animCloseSpeed}s`,\n animOffset: config.animOffset,\n animOffsetTablet: config.animOffsetTablet,\n animOffsetMobileLandscape: config.animOffsetMobileLandscape,\n animOffsetMobile: config.animOffsetMobile,\n });\n}\n\n\n//# sourceURL=webpack://petal/./src/modules/dropdown/dropdown-config.ts?");
259
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getCurrentAnimation: () => (/* binding */ getCurrentAnimation),\n/* harmony export */ getCurrentOffset: () => (/* binding */ getCurrentOffset),\n/* harmony export */ getCurrentOpenOnHover: () => (/* binding */ getCurrentOpenOnHover),\n/* harmony export */ getCurrentShowState: () => (/* binding */ getCurrentShowState),\n/* harmony export */ logConfig: () => (/* binding */ logConfig),\n/* harmony export */ parseDropdownConfig: () => (/* binding */ parseDropdownConfig)\n/* harmony export */ });\n/* harmony import */ var _lib_attributes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/attributes */ \"./src/lib/attributes.ts\");\n/**\n * Dropdown Configuration Module\n *\n * Handles parsing and managing dropdown configuration from HTML attributes\n * including animations, delays, offsets, and responsive breakpoints.\n */\n\n/**\n * Parse offset value from attribute string\n * Returns number for pixel values, string for percentage values\n */\nfunction parseOffset(value) {\n if (value.includes(\"%\")) {\n return value;\n }\n return parseInt(value);\n}\n/**\n * Parse boolean attribute value with null for unspecified\n */\nfunction parseBooleanOrNull(value) {\n if (value === null)\n return null;\n return value === \"true\";\n}\n/**\n * Parses dropdown configuration from HTML element attributes\n */\nfunction parseDropdownConfig(dropdown) {\n // Group coordination\n const group = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_GROUP) || null;\n // Debug mode\n const debug = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DEBUG) === \"true\";\n // Check if device has mouse capability (pointer device)\n const hasMouse = window.matchMedia(\"(pointer: fine)\").matches;\n // Scroll lock\n const disableScrollOnOpen = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DISABLE_SCROLL_ON_OPEN) === \"true\";\n // Open-on-hover configuration with breakpoints\n const openOnHoverDesktopAttr = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER);\n const openOnHoverTabletAttr = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_TABLET);\n const openOnHoverMobileLandscapeAttr = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_MOBILE_LANDSCAPE);\n const openOnHoverMobileAttr = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_OPEN_ON_HOVER_MOBILE);\n const openOnHoverDesktop = openOnHoverDesktopAttr === \"true\";\n const openOnHoverTablet = parseBooleanOrNull(openOnHoverTabletAttr);\n const openOnHoverMobileLandscape = parseBooleanOrNull(openOnHoverMobileLandscapeAttr);\n const openOnHoverMobile = parseBooleanOrNull(openOnHoverMobileAttr);\n // Show on breakpoints configuration (defaults to true)\n const showDesktopAttr = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_SHOW_DESKTOP);\n const showTabletAttr = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_SHOW_TABLET);\n const showMobileLandscapeAttr = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_SHOW_MOBILE_LANDSCAPE);\n const showMobileAttr = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_SHOW_MOBILE);\n const showDesktop = showDesktopAttr === null ? true : showDesktopAttr === \"true\";\n const showTablet = parseBooleanOrNull(showTabletAttr);\n const showMobileLandscape = parseBooleanOrNull(showMobileLandscapeAttr);\n const showMobile = parseBooleanOrNull(showMobileAttr);\n // Delays\n const openDelay = parseInt(dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_OPEN_DELAY) || \"200\");\n const closeDelay = parseInt(dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_CLOSE_DELAY) || \"200\");\n // Animation configuration\n const anim = (dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM) || \"slide-down\");\n const animTablet = (dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_TABLET) || anim);\n const animMobileLandscape = (dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_MOBILE_LANDSCAPE) || animTablet);\n const animMobile = (dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_MOBILE) || animMobileLandscape);\n // Animation speed configuration (in milliseconds, converted to seconds for GSAP)\n const animOpenSpeed = parseInt(dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_OPEN_SPEED) || \"500\") / 1000;\n const animCloseSpeed = parseInt(dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_CLOSE_SPEED) || \"300\") / 1000;\n // Animation offset configuration (in pixels or percentage) with breakpoints\n const animOffsetRaw = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_OFFSET) || \"25\";\n const animOffset = parseOffset(animOffsetRaw);\n const animOffsetTablet = parseOffset(dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_OFFSET_TABLET) || animOffsetRaw);\n const animOffsetMobileLandscape = parseOffset(dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE_LANDSCAPE) || dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_OFFSET_TABLET) || animOffsetRaw);\n const animOffsetMobile = parseOffset(dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE) ||\n dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_OFFSET_MOBILE_LANDSCAPE) ||\n dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_ANIM_OFFSET_TABLET) ||\n animOffsetRaw);\n return {\n group,\n debug,\n hasMouse,\n disableScrollOnOpen,\n openOnHoverDesktop,\n openOnHoverTablet,\n openOnHoverMobileLandscape,\n openOnHoverMobile,\n showDesktop,\n showTablet,\n showMobileLandscape,\n showMobile,\n openDelay,\n closeDelay,\n anim,\n animTablet,\n animMobileLandscape,\n animMobile,\n animOpenSpeed,\n animCloseSpeed,\n animOffset,\n animOffsetTablet,\n animOffsetMobileLandscape,\n animOffsetMobile,\n };\n}\n/**\n * Get current animation based on screen width\n */\nfunction getCurrentAnimation(config) {\n const width = window.innerWidth;\n if (width <= 479)\n return config.animMobile;\n if (width <= 767)\n return config.animMobileLandscape;\n if (width <= 991)\n return config.animTablet;\n return config.anim;\n}\n/**\n * Get current animation offset based on screen width\n */\nfunction getCurrentOffset(config) {\n const width = window.innerWidth;\n if (width <= 479)\n return config.animOffsetMobile;\n if (width <= 767)\n return config.animOffsetMobileLandscape;\n if (width <= 991)\n return config.animOffsetTablet;\n return config.animOffset;\n}\n/**\n * Get current open-on-hover setting based on screen width and device capability\n */\nfunction getCurrentOpenOnHover(config) {\n const width = window.innerWidth;\n let shouldHover = config.openOnHoverDesktop;\n if (width <= 479 && config.openOnHoverMobile !== null) {\n shouldHover = config.openOnHoverMobile;\n }\n else if (width <= 767 && config.openOnHoverMobileLandscape !== null) {\n shouldHover = config.openOnHoverMobileLandscape;\n }\n else if (width <= 991 && config.openOnHoverTablet !== null) {\n shouldHover = config.openOnHoverTablet;\n }\n // Only enable hover if device has mouse OR on desktop (width > 991)\n // This ensures hover works on desktop even if pointer detection is uncertain\n return shouldHover && (config.hasMouse || width > 991);\n}\n/**\n * Get current show state based on screen width\n */\nfunction getCurrentShowState(config) {\n const width = window.innerWidth;\n let shouldShow = config.showDesktop;\n if (width <= 479 && config.showMobile !== null) {\n shouldShow = config.showMobile;\n }\n else if (width <= 767 && config.showMobileLandscape !== null) {\n shouldShow = config.showMobileLandscape;\n }\n else if (width <= 991 && config.showTablet !== null) {\n shouldShow = config.showTablet;\n }\n return shouldShow;\n}\n/**\n * Log configuration for debugging\n */\nfunction logConfig(index, config) {\n if (!config.debug)\n return;\n console.log(`Dropdown ${index + 1} - Config:`, {\n group: config.group,\n debug: config.debug,\n hasMouse: config.hasMouse,\n openOnHoverDesktop: config.openOnHoverDesktop,\n openOnHoverTablet: config.openOnHoverTablet,\n openOnHoverMobileLandscape: config.openOnHoverMobileLandscape,\n openOnHoverMobile: config.openOnHoverMobile,\n openOnHover: getCurrentOpenOnHover(config),\n showDesktop: config.showDesktop,\n showTablet: config.showTablet,\n showMobileLandscape: config.showMobileLandscape,\n showMobile: config.showMobile,\n shouldShow: getCurrentShowState(config),\n openDelay: config.openDelay,\n closeDelay: config.closeDelay,\n anim: config.anim,\n animTablet: config.animTablet,\n animMobileLandscape: config.animMobileLandscape,\n animMobile: config.animMobile,\n animOpenSpeed: `${config.animOpenSpeed}s`,\n animCloseSpeed: `${config.animCloseSpeed}s`,\n animOffset: config.animOffset,\n animOffsetTablet: config.animOffsetTablet,\n animOffsetMobileLandscape: config.animOffsetMobileLandscape,\n animOffsetMobile: config.animOffsetMobile,\n });\n}\n\n\n//# sourceURL=webpack://petal/./src/modules/dropdown/dropdown-config.ts?");
280
260
 
281
261
  /***/ }),
282
262
 
@@ -306,27 +286,47 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
306
286
  \******************************************/
307
287
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
308
288
 
309
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ initializeDropdowns: () => (/* binding */ initializeDropdowns)\n/* harmony export */ });\n/* harmony import */ var _lib_attributes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/attributes */ \"./src/lib/attributes.ts\");\n/* harmony import */ var _dropdown_config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dropdown-config */ \"./src/modules/dropdown/dropdown-config.ts\");\n/* harmony import */ var _dropdown_controller__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dropdown-controller */ \"./src/modules/dropdown/dropdown-controller.ts\");\n/**\n * Dropdown Component\n *\n * Handles interactive dropdown menus with support for:\n * - Click or hover-based opening\n * - Customizable close delays\n * - Grouped dropdown coordination\n * - CSS-based animations\n * - Accessibility (aria-expanded)\n * - Named element linking (petal=\"name\")\n *\n * HTML Attributes (defined in attributes.ts):\n * - petal=\"name\" (optional) - Links elements together by name. When set on a dropdown container,\n * all related elements (toggle, menu, overlay, close) must have the same petal=\"name\" attribute.\n * Elements are matched by both name and type before firing their behavior.\n * - petal-el=\"dropdown\" - Container element\n * - petal-el=\"dropdown-toggle\" - Clickable/hoverable trigger\n * - petal-el=\"dropdown-menu\" - Menu content\n * - petal-el=\"dropdown-drawer\" - Menu inner box\n * - petal-el=\"dropdown-overlay\" (optional) - Background overlay\n * - petal-el=\"dropdown-close\" (optional) - Clickable element that closes the dropdown\n * - petal-group=\"name\" (optional) - Group name for coordinated animations\n * - petal-dropdown-open-on-hover=\"true\" (optional) - Use hover instead of click\n * - petal-dropdown-open-delay=\"ms\" (optional) - Open delay in milliseconds (default: 200)\n * - petal-dropdown-close-delay=\"ms\" (optional) - Close delay in milliseconds (default: 200)\n * - petal-dropdown-anim=\"slide-down|slide-up|slide-left|slide-right\" (optional) - Desktop animation (default: slide-down)\n * - petal-dropdown-anim-tablet=\"slide-down|slide-up|slide-left|slide-right\" (optional) - Tablet animation (inherits from petal-dropdown-anim)\n * - petal-dropdown-anim-mobile-landscape=\"slide-down|slide-up|slide-left|slide-right\" (optional) - Mobile landscape animation (inherits from petal-dropdown-anim-tablet)\n * - petal-dropdown-anim-mobile=\"slide-down|slide-up|slide-left|slide-right\" (optional) - Mobile animation (inherits from petal-dropdown-anim-mobile-landscape)\n * - petal-dropdown-anim-open-speed=\"ms\" (optional) - Animation speed when opening in milliseconds (default: 500)\n * - petal-dropdown-anim-close-speed=\"ms\" (optional) - Animation speed when closing in milliseconds (default: 300)\n */\n\n\n\nfunction initializeDropdowns() {\n const init = () => {\n const dropdowns = document.querySelectorAll(`[${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN}']`);\n dropdowns.forEach((dropdown, index) => {\n // ===========================\n // Element References\n // ===========================\n // Get the name attribute from the dropdown container\n const petalName = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_NAME);\n // Build selectors that match elements by both name and type\n const buildSelector = (elementType) => {\n if (petalName) {\n return `[${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_NAME}='${petalName}'][${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${elementType}']`;\n }\n return `[${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${elementType}']`;\n };\n const toggle = petalName\n ? document.querySelector(buildSelector(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_TOGGLE))\n : dropdown.querySelector(`[${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_TOGGLE}']`);\n const menu = petalName\n ? document.querySelector(buildSelector(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_MENU))\n : dropdown.querySelector(`[${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_MENU}']`);\n const drawer = petalName\n ? document.querySelector(buildSelector(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_MENU_BOX))\n : dropdown.querySelector(`[${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_MENU_BOX}']`);\n const overlay = petalName\n ? document.querySelector(buildSelector(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_OVERLAY))\n : dropdown.querySelector(`[${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_OVERLAY}']`);\n const close = petalName\n ? document.querySelector(buildSelector(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_CLOSE))\n : dropdown.querySelector(`[${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_CLOSE}']`);\n // Validate required elements\n if (!toggle || !menu || !drawer) {\n return;\n }\n // ===========================\n // Configuration\n // ===========================\n const config = (0,_dropdown_config__WEBPACK_IMPORTED_MODULE_1__.parseDropdownConfig)(dropdown);\n if (config.debug) {\n console.log(`\\n=== Initializing Dropdown ${index + 1} ===`);\n if (petalName) {\n console.log(`Dropdown ${index + 1} - Name: \"${petalName}\"`);\n }\n console.log(`Dropdown ${index + 1} - Found toggle:`, toggle);\n console.log(`Dropdown ${index + 1} - Found menu:`, menu);\n console.log(`Dropdown ${index + 1} - Found drawer:`, drawer);\n console.log(`Dropdown ${index + 1} - Found overlay:`, overlay);\n console.log(`Dropdown ${index + 1} - Found close:`, close);\n }\n (0,_dropdown_config__WEBPACK_IMPORTED_MODULE_1__.logConfig)(index, config);\n // ===========================\n // Controller Setup\n // ===========================\n const elements = { dropdown, toggle, menu, drawer, overlay };\n const controller = new _dropdown_controller__WEBPACK_IMPORTED_MODULE_2__.DropdownController(elements, config, index);\n // ===========================\n // Initialization\n // ===========================\n // Set initial aria-expanded state and ensure dropdown is closed\n toggle.setAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ARIA_EXPANDED, \"false\");\n dropdown.setAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_STATE, \"closed\");\n // Initialize drawer to its animation's starting position\n controller.initializeDrawer();\n // Event listener references with console logging\n const mouseEnterHandler = () => {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - MOUSEENTER event triggered`);\n controller.open();\n };\n const mouseLeaveHandler = () => {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - MOUSELEAVE event triggered`);\n controller.closeWithDelay();\n };\n const clickOutsideHandler = (event) => {\n controller.handleOutsideClick(event, dropdown);\n };\n // Function to attach/detach event listeners based on hover mode\n const updateEventListeners = () => {\n const previousMode = controller.getOpenOnHover();\n const modeChanged = controller.updateOpenOnHover();\n if (modeChanged) {\n const newMode = controller.getOpenOnHover();\n if (config.debug)\n console.log(`Dropdown ${index + 1} - Switching interaction mode to ${newMode ? \"hover\" : \"click\"}`);\n // Remove old listeners\n if (previousMode) {\n dropdown.removeEventListener(\"mouseenter\", mouseEnterHandler);\n dropdown.removeEventListener(\"mouseleave\", mouseLeaveHandler);\n }\n else {\n toggle.removeEventListener(\"click\", controller.toggle);\n document.removeEventListener(\"click\", clickOutsideHandler);\n }\n // Attach new listeners\n if (newMode) {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - Attaching hover event listeners`);\n dropdown.addEventListener(\"mouseenter\", mouseEnterHandler);\n dropdown.addEventListener(\"mouseleave\", mouseLeaveHandler);\n }\n else {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - Attaching click event listeners`);\n toggle.addEventListener(\"click\", controller.toggle);\n document.addEventListener(\"click\", clickOutsideHandler);\n }\n }\n };\n // Reinitialize drawer position on window resize and update event listeners\n const handleResize = () => {\n controller.handleResize();\n updateEventListeners();\n };\n window.addEventListener(\"resize\", handleResize);\n // Initial event listener setup\n const initialOpenOnHover = controller.getOpenOnHover();\n if (initialOpenOnHover) {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - Attaching hover event listeners`);\n dropdown.addEventListener(\"mouseenter\", mouseEnterHandler);\n dropdown.addEventListener(\"mouseleave\", mouseLeaveHandler);\n }\n else {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - Attaching click event listeners`);\n toggle.addEventListener(\"click\", controller.toggle);\n document.addEventListener(\"click\", clickOutsideHandler);\n }\n // Attach click listener to dropdown-close element (if it exists)\n if (close) {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - Attaching click listener to close element`);\n close.addEventListener(\"click\", controller.close);\n }\n if (config.debug)\n console.log(`Dropdown ${index + 1} - Initialization complete\\n`);\n });\n };\n // Run immediately if DOM is ready, otherwise wait for DOMContentLoaded\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", init);\n }\n else {\n init();\n }\n}\n\n\n//# sourceURL=webpack://petal/./src/modules/dropdown/dropdown.ts?");
289
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ initializeDropdowns: () => (/* binding */ initializeDropdowns)\n/* harmony export */ });\n/* harmony import */ var _lib_attributes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/attributes */ \"./src/lib/attributes.ts\");\n/* harmony import */ var _dropdown_config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dropdown-config */ \"./src/modules/dropdown/dropdown-config.ts\");\n/* harmony import */ var _dropdown_controller__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dropdown-controller */ \"./src/modules/dropdown/dropdown-controller.ts\");\n/* harmony import */ var _lib_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../lib/helpers */ \"./src/lib/helpers.ts\");\n/**\n * Dropdown Component\n *\n * Handles interactive dropdown menus with support for:\n * - Click or hover-based opening\n * - Customizable close delays\n * - Grouped dropdown coordination\n * - CSS-based animations\n * - Accessibility (aria-expanded)\n * - Named element linking (petal=\"name\")\n *\n * HTML Attributes (defined in attributes.ts):\n * - petal=\"name\" (optional) - Links elements together by name. When set on a dropdown container,\n * all related elements (toggle, menu, overlay, close) must have the same petal=\"name\" attribute.\n * Elements are matched by both name and type before firing their behavior.\n * - petal-el=\"dropdown\" - Container element\n * - petal-el=\"dropdown-toggle\" - Clickable/hoverable trigger\n * - petal-el=\"dropdown-menu\" - Menu content\n * - petal-el=\"dropdown-drawer\" - Menu inner box\n * - petal-el=\"overlay\" (optional) - Background overlay\n * - petal-el=\"dropdown-close\" (optional) - Clickable element that closes the dropdown\n * - petal-group=\"name\" (optional) - Group name for coordinated animations\n * - petal-dropdown-open-on-hover=\"true\" (optional) - Use hover instead of click\n * - petal-dropdown-open-delay=\"ms\" (optional) - Open delay in milliseconds (default: 200)\n * - petal-dropdown-close-delay=\"ms\" (optional) - Close delay in milliseconds (default: 200)\n * - petal-dropdown-anim=\"slide-down|slide-up|slide-left|slide-right\" (optional) - Desktop animation (default: slide-down)\n * - petal-dropdown-anim-tablet=\"slide-down|slide-up|slide-left|slide-right\" (optional) - Tablet animation (inherits from petal-dropdown-anim)\n * - petal-dropdown-anim-mobile-landscape=\"slide-down|slide-up|slide-left|slide-right\" (optional) - Mobile landscape animation (inherits from petal-dropdown-anim-tablet)\n * - petal-dropdown-anim-mobile=\"slide-down|slide-up|slide-left|slide-right\" (optional) - Mobile animation (inherits from petal-dropdown-anim-mobile-landscape)\n * - petal-dropdown-anim-open-speed=\"ms\" (optional) - Animation speed when opening in milliseconds (default: 500)\n * - petal-dropdown-anim-close-speed=\"ms\" (optional) - Animation speed when closing in milliseconds (default: 300)\n */\n\n\n\n\nfunction initializeDropdowns() {\n const init = () => {\n const dropdowns = document.querySelectorAll(`[${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN}']`);\n dropdowns.forEach((dropdown, index) => {\n // ===========================\n // Element References\n // ===========================\n // Get the name attribute from the dropdown container\n const petalName = dropdown.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_NAME);\n // Build selectors that match elements by both name and type\n const buildSelector = (elementType) => {\n if (petalName) {\n return `[${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_NAME}='${petalName}'][${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${elementType}']`;\n }\n return `[${_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_ELEMENT}='${elementType}']`;\n };\n const toggle = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_3__.findPetalElementByNameOrInParent)(dropdown, petalName, _lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_TOGGLE);\n const menu = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_3__.findPetalElementByNameOrInParent)(dropdown, petalName, _lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_MENU);\n const drawer = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_3__.findPetalElementByNameOrInParent)(dropdown, petalName, _lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_MENU_BOX);\n const overlay = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_3__.findPetalElementByNameOrInParent)(dropdown, petalName, _lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_OVERLAY);\n const close = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_3__.findPetalElementByNameOrInParent)(dropdown, petalName, _lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DROPDOWN_CLOSE);\n // Validate required elements\n if (!toggle || !menu || !drawer) {\n return;\n }\n // ===========================\n // Configuration\n // ===========================\n const config = (0,_dropdown_config__WEBPACK_IMPORTED_MODULE_1__.parseDropdownConfig)(dropdown);\n if (config.debug) {\n console.log(`\\n=== Initializing Dropdown ${index + 1} ===`);\n if (petalName) {\n console.log(`Dropdown ${index + 1} - Name: \"${petalName}\"`);\n }\n console.log(`Dropdown ${index + 1} - Found toggle:`, toggle);\n console.log(`Dropdown ${index + 1} - Found menu:`, menu);\n console.log(`Dropdown ${index + 1} - Found drawer:`, drawer);\n console.log(`Dropdown ${index + 1} - Found overlay:`, overlay);\n console.log(`Dropdown ${index + 1} - Found close:`, close);\n }\n (0,_dropdown_config__WEBPACK_IMPORTED_MODULE_1__.logConfig)(index, config);\n // ===========================\n // Controller Setup\n // ===========================\n const elements = { dropdown, toggle, menu, drawer, overlay };\n const controller = new _dropdown_controller__WEBPACK_IMPORTED_MODULE_2__.DropdownController(elements, config, index);\n // ===========================\n // Initialization\n // ===========================\n // Set initial aria-expanded state and ensure dropdown is closed\n toggle.setAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ARIA_EXPANDED, \"false\");\n dropdown.setAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_STATE, \"closed\");\n // Initialize drawer to its animation's starting position\n controller.initializeDrawer();\n // Event listener references with console logging\n const mouseEnterHandler = () => {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - MOUSEENTER event triggered`);\n controller.open();\n };\n const mouseLeaveHandler = () => {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - MOUSELEAVE event triggered`);\n controller.closeWithDelay();\n };\n const clickOutsideHandler = (event) => {\n controller.handleOutsideClick(event, dropdown);\n };\n // Function to attach/detach event listeners based on hover mode\n const updateEventListeners = () => {\n const previousMode = controller.getOpenOnHover();\n const modeChanged = controller.updateOpenOnHover();\n if (modeChanged) {\n const newMode = controller.getOpenOnHover();\n if (config.debug)\n console.log(`Dropdown ${index + 1} - Switching interaction mode to ${newMode ? \"hover\" : \"click\"}`);\n // Remove old listeners\n if (previousMode) {\n dropdown.removeEventListener(\"mouseenter\", mouseEnterHandler);\n dropdown.removeEventListener(\"mouseleave\", mouseLeaveHandler);\n }\n else {\n toggle.removeEventListener(\"click\", controller.toggle);\n document.removeEventListener(\"click\", clickOutsideHandler);\n }\n // Attach new listeners\n if (newMode) {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - Attaching hover event listeners`);\n dropdown.addEventListener(\"mouseenter\", mouseEnterHandler);\n dropdown.addEventListener(\"mouseleave\", mouseLeaveHandler);\n }\n else {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - Attaching click event listeners`);\n toggle.addEventListener(\"click\", controller.toggle);\n document.addEventListener(\"click\", clickOutsideHandler);\n }\n }\n };\n // Reinitialize drawer position on window resize and update event listeners\n const handleResize = () => {\n controller.handleResize();\n updateEventListeners();\n };\n window.addEventListener(\"resize\", handleResize);\n // Initial event listener setup\n const initialOpenOnHover = controller.getOpenOnHover();\n if (initialOpenOnHover) {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - Attaching hover event listeners`);\n dropdown.addEventListener(\"mouseenter\", mouseEnterHandler);\n dropdown.addEventListener(\"mouseleave\", mouseLeaveHandler);\n }\n else {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - Attaching click event listeners`);\n toggle.addEventListener(\"click\", controller.toggle);\n document.addEventListener(\"click\", clickOutsideHandler);\n }\n // Attach click listener to dropdown-close element (if it exists)\n if (close) {\n if (config.debug)\n console.log(`Dropdown ${index + 1} - Attaching click listener to close element`);\n close.addEventListener(\"click\", controller.close);\n }\n if (config.debug)\n console.log(`Dropdown ${index + 1} - Initialization complete\\n`);\n });\n };\n // Run immediately if DOM is ready, otherwise wait for DOMContentLoaded\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", init);\n }\n else {\n init();\n }\n}\n\n\n//# sourceURL=webpack://petal/./src/modules/dropdown/dropdown.ts?");
290
+
291
+ /***/ }),
292
+
293
+ /***/ "./src/modules/modal/modal-animator.ts":
294
+ /*!*********************************************!*\
295
+ !*** ./src/modules/modal/modal-animator.ts ***!
296
+ \*********************************************/
297
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
298
+
299
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ animateClose: () => (/* binding */ animateClose),\n/* harmony export */ animateOpen: () => (/* binding */ animateOpen),\n/* harmony export */ initializeElements: () => (/* binding */ initializeElements)\n/* harmony export */ });\n/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! gsap */ \"./node_modules/gsap/index.js\");\n/* harmony import */ var _animation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../animation */ \"./src/animation.ts\");\n/* harmony import */ var _lib_animations__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../lib/animations */ \"./src/lib/animations.ts\");\n/**\n * Modal Animator Module\n *\n * Handles GSAP animations for modals including:\n * - Dialog opening/closing animations\n * - Mask fade transitions\n * - Timeline management\n */\n\n\n\n/**\n * Animates modal opening with GSAP\n */\nfunction animateOpen(elements, config) {\n const { modal, dialog, mask } = elements;\n const tl = gsap__WEBPACK_IMPORTED_MODULE_2__.gsap.timeline();\n if (config.debug)\n console.log(`[DEBUG] Modal \"${config.name}\" - openModal() called`);\n // Set Modal display to flex\n tl.set(modal, { display: \"flex\" });\n if (config.debug)\n console.log(`[DEBUG] Modal \"${config.name}\" - Set display to flex`);\n // Set initial dialog state to prevent flicker\n const anim = (0,_animation__WEBPACK_IMPORTED_MODULE_0__.getModalGSAPAnimation)(modal, \"open\", config.type);\n tl.set(dialog, anim.from);\n // Animate Mask open\n tl.fromTo(mask, (0,_lib_animations__WEBPACK_IMPORTED_MODULE_1__.animateMaskOpen)(config.maskOpacity).from, (0,_lib_animations__WEBPACK_IMPORTED_MODULE_1__.animateMaskOpen)(config.maskOpacity).to, \"<\");\n if (config.debug)\n console.log(`[DEBUG] Modal \"${config.name}\" - Animating mask open (opacity: ${config.maskOpacity})`);\n // Animate Dialog Open\n tl.to(dialog, anim.to);\n if (config.debug)\n console.log(`[DEBUG] Modal \"${config.name}\" - Animating dialog open`);\n return tl;\n}\n/**\n * Animates modal closing with GSAP\n */\nfunction animateClose(elements, config) {\n const { modal, dialog, mask } = elements;\n const tl = gsap__WEBPACK_IMPORTED_MODULE_2__.gsap.timeline();\n if (config.debug)\n console.log(`[DEBUG] Modal \"${config.name}\" - closeModal() called`);\n // Animate the Dialog Closed\n const anim = (0,_animation__WEBPACK_IMPORTED_MODULE_0__.getModalGSAPAnimation)(modal, \"close\", config.type);\n tl.fromTo(dialog, anim.from, anim.to);\n if (config.debug)\n console.log(`[DEBUG] Modal \"${config.name}\" - Animating dialog close`);\n // Animate Mask Closed\n tl.to(mask, (0,_lib_animations__WEBPACK_IMPORTED_MODULE_1__.animateMaskClosed)(0).to, \"<\");\n if (config.debug)\n console.log(`[DEBUG] Modal \"${config.name}\" - Animating mask close`);\n // Hide the Modal and clear transforms so they don't persist\n tl.set(modal, { display: \"none\" });\n tl.set(dialog, { clearProps: \"x,y,scale,transform\" });\n if (config.debug)\n console.log(`[DEBUG] Modal \"${config.name}\" - Set display to none and cleared transforms`);\n return tl;\n}\n/**\n * Initialize modal elements to their starting state\n */\nfunction initializeElements(elements, config) {\n const { modal, mask } = elements;\n // Initialize Mask\n mask.style.opacity = \"0\";\n if (config.debug)\n console.log(` [DEBUG] Set mask opacity to 0`);\n // Initialize Modal\n modal.style.display = \"none\";\n if (config.debug)\n console.log(` [DEBUG] Set modal display to none`);\n}\n\n\n//# sourceURL=webpack://petal/./src/modules/modal/modal-animator.ts?");
300
+
301
+ /***/ }),
302
+
303
+ /***/ "./src/modules/modal/modal-config.ts":
304
+ /*!*******************************************!*\
305
+ !*** ./src/modules/modal/modal-config.ts ***!
306
+ \*******************************************/
307
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
308
+
309
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ logConfig: () => (/* binding */ logConfig),\n/* harmony export */ parseModalConfig: () => (/* binding */ parseModalConfig)\n/* harmony export */ });\n/* harmony import */ var _lib_attributes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/attributes */ \"./src/lib/attributes.ts\");\n/**\n * Modal Configuration Module\n *\n * Handles parsing modal configuration from HTML attributes.\n */\n\n/**\n * Parses modal configuration from HTML element attributes\n */\nfunction parseModalConfig(modal) {\n const name = modal.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_NAME) || \"unknown\";\n const debug = modal.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DEBUG) === \"true\";\n const maskOpacity = parseFloat(modal.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_OVERLAY_OPACITY) || \"0.15\");\n const typeAttr = modal.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_MODAL_TYPE);\n const type = isValidModalType(typeAttr) ? typeAttr : \"center\";\n return {\n name,\n debug,\n maskOpacity,\n type,\n };\n}\n/**\n * Type guard to validate modal type\n */\nfunction isValidModalType(value) {\n return value === \"center\" || value === \"left\" || value === \"right\" || value === \"top\" || value === \"bottom\";\n}\n/**\n * Log configuration for debugging\n */\nfunction logConfig(config) {\n if (!config.debug)\n return;\n console.log(` → Modal: \"${config.name}\"`);\n console.log(` [DEBUG] Debug mode enabled for modal \"${config.name}\"`);\n console.log(` [DEBUG] Overlay opacity: ${config.maskOpacity}`);\n console.log(` [DEBUG] Modal type: ${config.type}`);\n}\n\n\n//# sourceURL=webpack://petal/./src/modules/modal/modal-config.ts?");
310
310
 
311
311
  /***/ }),
312
312
 
313
- /***/ "./src/modules/nav/nav.css":
314
- /*!*********************************!*\
315
- !*** ./src/modules/nav/nav.css ***!
316
- \*********************************/
313
+ /***/ "./src/modules/modal/modal-controller.ts":
314
+ /*!***********************************************!*\
315
+ !*** ./src/modules/modal/modal-controller.ts ***!
316
+ \***********************************************/
317
317
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
318
318
 
319
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ \"./node_modules/style-loader/dist/runtime/styleDomAPI.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ \"./node_modules/style-loader/dist/runtime/insertBySelector.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ \"./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ \"./node_modules/style-loader/dist/runtime/insertStyleElement.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ \"./node_modules/style-loader/dist/runtime/styleTagTransform.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_nav_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js!./nav.css */ \"./node_modules/css-loader/dist/cjs.js!./src/modules/nav/nav.css\");\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());\noptions.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());\noptions.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, \"head\");\noptions.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());\noptions.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());\n\nvar update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_nav_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"], options);\n\n\n\n\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_nav_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"] && _node_modules_css_loader_dist_cjs_js_nav_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals ? _node_modules_css_loader_dist_cjs_js_nav_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals : undefined);\n\n\n//# sourceURL=webpack://petal/./src/modules/nav/nav.css?");
319
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ModalController: () => (/* binding */ ModalController)\n/* harmony export */ });\n/* harmony import */ var _lib_memory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/memory */ \"./src/lib/memory.ts\");\n/* harmony import */ var _video__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../video */ \"./src/video.ts\");\n/* harmony import */ var _modal_animator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modal-animator */ \"./src/modules/modal/modal-animator.ts\");\n/**\n * Modal Controller Module\n *\n * Manages modal state and orchestrates opening/closing logic with animations.\n */\n\n\n\nclass ModalController {\n constructor(elements, config) {\n this.elements = elements;\n this.config = config;\n this.currentTimeline = null;\n /**\n * Opens the modal using GSAP\n */\n this.open = () => {\n // Kill any existing timeline\n if (this.currentTimeline) {\n this.currentTimeline.kill();\n this.currentTimeline = null;\n }\n this.currentTimeline = (0,_modal_animator__WEBPACK_IMPORTED_MODULE_2__.animateOpen)(this.elements, this.config);\n };\n /**\n * Closes the modal using GSAP\n */\n this.close = () => {\n // Kill any existing timeline\n if (this.currentTimeline) {\n this.currentTimeline.kill();\n this.currentTimeline = null;\n }\n // Pause any videos inside the modal\n (0,_video__WEBPACK_IMPORTED_MODULE_1__.pauseVideo)(this.elements.modal);\n if (this.config.debug)\n console.log(`[DEBUG] Modal \"${this.config.name}\" - Paused any videos`);\n // Store modal closed state\n (0,_lib_memory__WEBPACK_IMPORTED_MODULE_0__.storeClosedState)(\"modal\", this.config.name);\n if (this.config.debug)\n console.log(`[DEBUG] Modal \"${this.config.name}\" - Stored closed state in session`);\n this.currentTimeline = (0,_modal_animator__WEBPACK_IMPORTED_MODULE_2__.animateClose)(this.elements, this.config);\n };\n }\n}\n\n\n//# sourceURL=webpack://petal/./src/modules/modal/modal-controller.ts?");
320
320
 
321
321
  /***/ }),
322
322
 
323
- /***/ "./src/modules/popup/popup.ts":
323
+ /***/ "./src/modules/modal/modal.ts":
324
324
  /*!************************************!*\
325
- !*** ./src/modules/popup/popup.ts ***!
325
+ !*** ./src/modules/modal/modal.ts ***!
326
326
  \************************************/
327
327
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
328
328
 
329
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ closePopup: () => (/* binding */ closePopup),\n/* harmony export */ findPetal: () => (/* binding */ findPetal),\n/* harmony export */ findPopupElement: () => (/* binding */ findPopupElement),\n/* harmony export */ forEachPopupTrigger: () => (/* binding */ forEachPopupTrigger),\n/* harmony export */ initializeAllPopups: () => (/* binding */ initializeAllPopups),\n/* harmony export */ initializePopupTriggers: () => (/* binding */ initializePopupTriggers),\n/* harmony export */ openPopup: () => (/* binding */ openPopup)\n/* harmony export */ });\n/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! gsap */ \"./node_modules/gsap/index.js\");\n/* harmony import */ var _animation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../animation */ \"./src/animation.ts\");\n/* harmony import */ var _lib_console__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../lib/console */ \"./src/lib/console.ts\");\n/* harmony import */ var _lib_animations__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../lib/animations */ \"./src/lib/animations.ts\");\n/* harmony import */ var _lib_attributes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../lib/attributes */ \"./src/lib/attributes.ts\");\n/* harmony import */ var _lib_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../lib/helpers */ \"./src/lib/helpers.ts\");\n/* harmony import */ var _lib_memory__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../lib/memory */ \"./src/lib/memory.ts\");\n/* harmony import */ var _video__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../video */ \"./src/video.ts\");\n\n\n\n\n\n\n\n\nfunction initializeAllPopups() {\n const popups = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getAllPetalElementsOfType)(_lib_attributes__WEBPACK_IMPORTED_MODULE_3__.ATTR_PETAL_POPUP);\n console.log(`🌸 Detected ${popups.length} popup(s)`);\n popups.forEach((popup) => {\n const popupElement = popup;\n const name = popup.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_3__.ATTR_PETAL_NAME) || \"unknown\";\n console.log(` → Popup: \"${name}\"`);\n const mask = findPopupElement(popup, \"mask\");\n const slot = findPopupElement(popup, \"slot\");\n // Set slot opacity to 0\n if (slot)\n slot.style.opacity = \"0\";\n // Set mask opacity to 0\n if (mask)\n mask.style.opacity = \"0\";\n // Set popup display to none\n popupElement.style.display = \"none\";\n });\n}\nfunction openPopup(petal) {\n const { name, popup, slot, mask } = petal;\n const tl = gsap__WEBPACK_IMPORTED_MODULE_7__.gsap.timeline();\n // Set Popup display to flex\n tl.set(popup, { display: \"flex\" });\n // Animate Mask open\n const maskOpacity = parseFloat((mask === null || mask === void 0 ? void 0 : mask.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_3__.ATTR_PETAL_MASK_OPACITY)) || \"0.15\");\n tl.fromTo(mask, (0,_lib_animations__WEBPACK_IMPORTED_MODULE_2__.animateMaskOpen)(maskOpacity).from, (0,_lib_animations__WEBPACK_IMPORTED_MODULE_2__.animateMaskOpen)(maskOpacity).to, \"<\");\n // Animate Slot Open\n const anim = (0,_animation__WEBPACK_IMPORTED_MODULE_0__.getPopupGSAPAnimation)(popup, \"open\");\n tl.set(slot, { clearProps: \"x,y,scale,transform\" });\n tl.fromTo(slot, anim.from, anim.to);\n}\nfunction closePopup(petal) {\n const { name, popup, slot, mask } = petal;\n const tl = gsap__WEBPACK_IMPORTED_MODULE_7__.gsap.timeline();\n // VIDEO: Pause any videos inside the popup\n (0,_video__WEBPACK_IMPORTED_MODULE_6__.pauseVideo)(popup);\n // SESSION: Store popup closed state\n (0,_lib_memory__WEBPACK_IMPORTED_MODULE_5__.storeClosedState)(\"popup\", name);\n // Animate the Slot Closed\n const anim = (0,_animation__WEBPACK_IMPORTED_MODULE_0__.getPopupGSAPAnimation)(popup, \"close\");\n tl.fromTo(slot, anim.from, anim.to);\n // Animate Mask Closed\n if (mask)\n tl.to(mask, (0,_lib_animations__WEBPACK_IMPORTED_MODULE_2__.animateMaskClosed)(0).to, \"<\");\n // Hide the Popup and clear transforms so they don't persist\n tl.set(popup, { display: \"none\" });\n tl.set(slot, { clearProps: \"x,y,scale,transform\" });\n}\nfunction initializePopupTriggers() {\n // Initialize Popup Open Triggers\n const openTriggers = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getAllPetalElementsOfType)(_lib_attributes__WEBPACK_IMPORTED_MODULE_3__.ATTR_PETAL_OPEN);\n console.log(`🌸 Detected ${openTriggers.length} open trigger(s)`);\n forEachPopupTrigger(openTriggers, (petal) => {\n const { trigger } = petal;\n console.log(` → Open trigger for: \"${petal.name}\"`);\n trigger.addEventListener(\"click\", () => openPopup(petal));\n });\n // Initialize Popup Close Triggers\n const closeTriggers = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getAllPetalElementsOfType)(_lib_attributes__WEBPACK_IMPORTED_MODULE_3__.ATTR_PETAL_CLOSE);\n console.log(`🌸 Detected ${closeTriggers.length} close trigger(s)`);\n forEachPopupTrigger(closeTriggers, (petal) => {\n const { trigger } = petal;\n console.log(` Close trigger for: \"${petal.name}\"`);\n trigger.addEventListener(\"click\", () => closePopup(petal));\n });\n // Initialize Mask Close Triggers (masks with petal-mask-close=\"true\")\n const popups = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getAllPetalElementsOfType)(_lib_attributes__WEBPACK_IMPORTED_MODULE_3__.ATTR_PETAL_POPUP);\n popups.forEach((popup) => {\n const mask = findPopupElement(popup, \"mask\");\n const maskClose = popup.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_3__.ATTR_PETAL_MASK_CLOSE) === \"true\";\n if (mask && maskClose) {\n mask.addEventListener(\"click\", () => {\n const slot = findPopupElement(popup, \"slot\");\n const name = popup.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_3__.ATTR_PETAL_NAME) || popup.id;\n if (slot) {\n closePopup({ name, popup: popup, slot, mask, trigger: mask });\n }\n });\n }\n });\n}\nfunction findPetal(el) {\n const popupName = el.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_3__.ATTR_PETAL_NAME);\n if (!popupName)\n throw new _lib_console__WEBPACK_IMPORTED_MODULE_1__.MissingNameError(el);\n const popup = document.querySelector(`[${_lib_attributes__WEBPACK_IMPORTED_MODULE_3__.ATTR_PETAL_NAME}='${popupName}'][${_lib_attributes__WEBPACK_IMPORTED_MODULE_3__.ATTR_PETAL_ELEMENT}='${_lib_attributes__WEBPACK_IMPORTED_MODULE_3__.ATTR_PETAL_POPUP}']`);\n if (!popup)\n throw new _lib_console__WEBPACK_IMPORTED_MODULE_1__.MissingPopupError(popupName, el);\n return popup;\n}\nfunction findPopupElement(popup, attr) {\n return popup.querySelector(`[${_lib_attributes__WEBPACK_IMPORTED_MODULE_3__.ATTR_PETAL_ELEMENT}='${attr}']`);\n}\n// Helper to iterate over triggers with error handling\nfunction forEachPopupTrigger(triggers, callback) {\n triggers.forEach((trigger) => {\n try {\n const popup = findPetal(trigger);\n const name = trigger.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_3__.ATTR_PETAL_NAME) || \"unknown\";\n const mask = popup.querySelector(`[${_lib_attributes__WEBPACK_IMPORTED_MODULE_3__.ATTR_PETAL_ELEMENT}='mask']`);\n if (!mask)\n throw new _lib_console__WEBPACK_IMPORTED_MODULE_1__.MissingMaskError(name, trigger);\n const slot = popup.querySelector(`[${_lib_attributes__WEBPACK_IMPORTED_MODULE_3__.ATTR_PETAL_ELEMENT}='slot']`);\n if (!slot)\n throw new _lib_console__WEBPACK_IMPORTED_MODULE_1__.MissingSlotError(name, trigger);\n callback({ name, trigger: trigger, popup, mask, slot });\n }\n catch (error) {\n if (error instanceof _lib_console__WEBPACK_IMPORTED_MODULE_1__.PetalError) {\n // Log and skip invalid triggers\n console.error(`[${error.name}]:`, error.message, error.element);\n }\n else {\n throw error; // Re-throw unexpected errors\n }\n }\n });\n}\n\n\n//# sourceURL=webpack://petal/./src/modules/popup/popup.ts?");
329
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ initializeAllModals: () => (/* binding */ initializeAllModals)\n/* harmony export */ });\n/* harmony import */ var _lib_attributes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/attributes */ \"./src/lib/attributes.ts\");\n/* harmony import */ var _lib_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../lib/helpers */ \"./src/lib/helpers.ts\");\n/* harmony import */ var _modal_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modal-config */ \"./src/modules/modal/modal-config.ts\");\n/* harmony import */ var _modal_controller__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modal-controller */ \"./src/modules/modal/modal-controller.ts\");\n/* harmony import */ var _modal_animator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modal-animator */ \"./src/modules/modal/modal-animator.ts\");\n/**\n * Modal Component\n *\n * Handles interactive modal dialogs with support for:\n * - GSAP animations\n * - Overlay with configurable opacity\n * - Video pause on close\n * - Session state storage\n * - Open/close triggers\n * - Overlay click-to-close\n *\n * HTML Attributes (defined in attributes.ts):\n * - petal-el=\"modal\" - Container element\n * - petal-el=\"overlay\" - Background overlay\n * - petal-el=\"dialog\" - Dialog content\n * - petal=\"name\" - Modal identifier (optional)\n * - petal-el=\"open\" - Open trigger (requires petal=\"name\" on trigger if outside modal)\n * - petal-el=\"close\" - Close trigger (auto-detects parent modal if no name)\n * - petal-overlay-close=\"true\" - Enable overlay click-to-close (default: true)\n * - petal-overlay-opacity=\"0.15\" - Overlay opacity (default: 0.15)\n * - petal-modal-type=\"center|left|right|top|bottom\" - Modal position type (default: center)\n * - petal-debug=\"true\" - Enable debug logging\n */\n\n\n\n\n\n/**\n * Initialize all modals on the page\n */\nfunction initializeAllModals() {\n console.log(`🌸 [MODAL] initializeAllModals() called`);\n const modals = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.getAllPetalElementsOfType)(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_MODAL);\n console.log(`🌸 [MODAL] Detected ${modals.length} modal(s)`);\n modals.forEach((modal, index) => {\n console.log(`🌸 [MODAL] Processing modal ${index + 1}/${modals.length}`);\n const name = modal.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_NAME) || null;\n console.log(`🌸 [MODAL] Modal name: \"${name}\"`);\n // ===========================\n // Element References\n // ===========================\n const overlay = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.findPetalElementByNameOrInParent)(modal, name, _lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_OVERLAY);\n const dialog = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.findPetalElementByNameOrInParent)(modal, name, _lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_DIALOG);\n const openTriggers = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.findPetalElementsByNameOrInParent)(modal, name, _lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_OPEN);\n const closeTriggers = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.findPetalElementsByNameOrInParent)(modal, name, _lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_CLOSE);\n console.log(`🌸 [MODAL] Found overlay: ${!!overlay}, dialog: ${!!dialog}`);\n console.log(`🌸 [MODAL] Detected ${(openTriggers === null || openTriggers === void 0 ? void 0 : openTriggers.length) || \"0\"} open trigger(s)`);\n console.log(`🌸 [MODAL] Detected ${(closeTriggers === null || closeTriggers === void 0 ? void 0 : closeTriggers.length) || \"0\"} close trigger(s)`);\n if (!overlay || !dialog) {\n console.warn(`⚠️ [MODAL] Skipping modal \"${name}\" - missing ${!overlay ? \"overlay\" : \"\"} ${!dialog ? \"dialog\" : \"\"}`);\n return;\n }\n // ===========================\n // Configuration\n // ===========================\n const config = (0,_modal_config__WEBPACK_IMPORTED_MODULE_2__.parseModalConfig)(modal);\n (0,_modal_config__WEBPACK_IMPORTED_MODULE_2__.logConfig)(config);\n // ===========================\n // Initialization\n // ===========================\n const elements = {\n modal: modal,\n dialog,\n mask: overlay,\n };\n // Create a single controller instance for this modal\n console.log(`🌸 [MODAL] Creating controller for modal \"${config.name}\"`);\n const controller = new _modal_controller__WEBPACK_IMPORTED_MODULE_3__.ModalController(elements, config);\n // Initialize Open Triggers\n console.log(`🌸 [MODAL] Attaching listeners to ${(openTriggers === null || openTriggers === void 0 ? void 0 : openTriggers.length) || 0} open trigger(s)`);\n openTriggers === null || openTriggers === void 0 ? void 0 : openTriggers.forEach((trigger, triggerIndex) => {\n console.log(`🌸 [MODAL] Attaching click listener to open trigger ${triggerIndex + 1}`);\n if (config.debug)\n console.log(` [DEBUG] Attached click listener to open trigger`);\n trigger.addEventListener(\"click\", () => {\n console.log(`🌸 [MODAL] Open trigger clicked for modal \"${config.name}\"`);\n if (config.debug)\n console.log(`[DEBUG] Modal \"${config.name}\" - Open trigger clicked`);\n controller.open();\n });\n });\n // Initialize Close Triggers\n console.log(`🌸 [MODAL] Attaching listeners to ${(closeTriggers === null || closeTriggers === void 0 ? void 0 : closeTriggers.length) || 0} close trigger(s)`);\n closeTriggers === null || closeTriggers === void 0 ? void 0 : closeTriggers.forEach((trigger, triggerIndex) => {\n console.log(`🌸 [MODAL] Attaching click listener to close trigger ${triggerIndex + 1}`);\n if (config.debug)\n console.log(` [DEBUG] Attached click listener to close trigger`);\n trigger.addEventListener(\"click\", () => {\n console.log(`🌸 [MODAL] Close trigger clicked for modal \"${config.name}\"`);\n if (config.debug)\n console.log(`[DEBUG] Modal \"${config.name}\" - Close trigger clicked`);\n controller.close();\n });\n });\n // Find and attach close triggers without names (that are children of this modal)\n if (!name) {\n const allCloseTriggers = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.getAllPetalElementsOfType)(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_CLOSE);\n allCloseTriggers.forEach((trigger) => {\n // Check if this close trigger doesn't have a name and is a child of this modal\n const triggerName = trigger.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_NAME);\n if (!triggerName) {\n const parentModal = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.findClosestPetalParent)(trigger, _lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_MODAL);\n if (parentModal === modal) {\n console.log(`🌸 [MODAL] Attaching click listener to unnamed close trigger`);\n if (config.debug)\n console.log(` [DEBUG] Attached click listener to unnamed close trigger`);\n trigger.addEventListener(\"click\", () => {\n console.log(`🌸 [MODAL] Unnamed close trigger clicked for modal \"${config.name}\"`);\n if (config.debug)\n console.log(`[DEBUG] Modal \"${config.name}\" - Unnamed close trigger clicked`);\n controller.close();\n });\n }\n }\n });\n }\n // Initialize Overlay Close Trigger\n const overlayCloseAttr = modal.getAttribute(_lib_attributes__WEBPACK_IMPORTED_MODULE_0__.ATTR_PETAL_MASK_CLOSE);\n const overlayClose = overlayCloseAttr === null ? true : overlayCloseAttr === \"true\";\n console.log(`🌸 [MODAL] Overlay close enabled: ${overlayClose}`);\n if (overlay && overlayClose) {\n console.log(`🌸 [MODAL] Attaching click listener to overlay`);\n if (config.debug)\n console.log(` [DEBUG] Attached click listener to overlay for modal \"${config.name}\"`);\n overlay.addEventListener(\"click\", () => {\n console.log(`🌸 [MODAL] Overlay clicked for modal \"${config.name}\"`);\n if (config.debug)\n console.log(`[DEBUG] Modal \"${config.name}\" - Overlay clicked`);\n controller.close();\n });\n }\n console.log(`🌸 [MODAL] Initializing elements for modal \"${config.name}\"`);\n (0,_modal_animator__WEBPACK_IMPORTED_MODULE_4__.initializeElements)(elements, config);\n console.log(`🌸 [MODAL] Modal \"${config.name}\" initialization complete`);\n });\n}\n\n\n//# sourceURL=webpack://petal/./src/modules/modal/modal.ts?");
330
330
 
331
331
  /***/ }),
332
332
 
@@ -346,7 +346,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
346
346
  \**********************/
347
347
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
348
348
 
349
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _modules_popup_popup__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modules/popup/popup */ \"./src/modules/popup/popup.ts\");\n/* harmony import */ var _modules_banner_banner__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/banner/banner */ \"./src/modules/banner/banner.ts\");\n/* harmony import */ var _modules_dropdown_dropdown__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/dropdown/dropdown */ \"./src/modules/dropdown/dropdown.ts\");\n/* harmony import */ var _petal_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./petal.css */ \"./src/petal.css\");\n/* harmony import */ var _modules_dropdown_dropdown_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/dropdown/dropdown.css */ \"./src/modules/dropdown/dropdown.css\");\n/* harmony import */ var _modules_nav_nav_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/nav/nav.css */ \"./src/modules/nav/nav.css\");\n\n\n\n\n\n\nconsole.log(`🌸 Hello from Wellflow Petal v${\"0.0.73\"}`);\n(0,_modules_popup_popup__WEBPACK_IMPORTED_MODULE_0__.initializeAllPopups)();\n(0,_modules_popup_popup__WEBPACK_IMPORTED_MODULE_0__.initializePopupTriggers)();\n(0,_modules_banner_banner__WEBPACK_IMPORTED_MODULE_1__.initializeBanner)();\n(0,_modules_dropdown_dropdown__WEBPACK_IMPORTED_MODULE_2__.initializeDropdowns)();\n\n\n//# sourceURL=webpack://petal/./src/petal.ts?");
349
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _modules_modal_modal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modules/modal/modal */ \"./src/modules/modal/modal.ts\");\n/* harmony import */ var _modules_banner_banner__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/banner/banner */ \"./src/modules/banner/banner.ts\");\n/* harmony import */ var _modules_dropdown_dropdown__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/dropdown/dropdown */ \"./src/modules/dropdown/dropdown.ts\");\n/* harmony import */ var _petal_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./petal.css */ \"./src/petal.css\");\n/* harmony import */ var _modules_dropdown_dropdown_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/dropdown/dropdown.css */ \"./src/modules/dropdown/dropdown.css\");\n\n\n\n\n\nconsole.log(`🌸 Hello from Wellflow Petal v${\"0.0.75\"}`);\n(0,_modules_modal_modal__WEBPACK_IMPORTED_MODULE_0__.initializeAllModals)();\n(0,_modules_banner_banner__WEBPACK_IMPORTED_MODULE_1__.initializeBanner)();\n(0,_modules_dropdown_dropdown__WEBPACK_IMPORTED_MODULE_2__.initializeDropdowns)();\n\n\n//# sourceURL=webpack://petal/./src/petal.ts?");
350
350
 
351
351
  /***/ }),
352
352
 
@@ -356,7 +356,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mod
356
356
  \**********************/
357
357
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
358
358
 
359
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ pauseVideo: () => (/* binding */ pauseVideo)\n/* harmony export */ });\nfunction pauseVideo(popup) {\n // Pause all <video> elements inside the popup before hiding it\n popup.querySelectorAll(\"video\").forEach((video) => {\n if (!video.paused)\n video.pause();\n });\n}\n\n\n//# sourceURL=webpack://petal/./src/video.ts?");
359
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ pauseVideo: () => (/* binding */ pauseVideo)\n/* harmony export */ });\nfunction pauseVideo(modal) {\n // Pause all <video> elements inside the modal before hiding it\n modal.querySelectorAll(\"video\").forEach((video) => {\n if (!video.paused)\n video.pause();\n });\n}\n\n\n//# sourceURL=webpack://petal/./src/video.ts?");
360
360
 
361
361
  /***/ })
362
362
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "well-petal",
3
- "version": "0.0.73",
3
+ "version": "0.0.75",
4
4
  "description": "Webflow Popups powered by attributes",
5
5
  "main": "dist/petal.js",
6
6
  "files": [