{"version":3,"file":"_layout.svelte-CAdFXuwa.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/(app)/_layout.svelte.js"],"sourcesContent":["import { c as create_ssr_component, v as validate_component, s as spread, a as escape_attribute_value, b as escape_object, d as add_attribute, f as add_styles, g as merge_ssr_styles, e as escape, m as missing_component, h as each } from \"../../../chunks/ssr.js\";\n/* empty css */\nimport { I as Icon$1 } from \"../../../chunks/Icon.js\";\nimport { c as compute_rest_props, g as getContext, s as setContext, a as subscribe, n as noop$1, o as onDestroy } from \"../../../chunks/lifecycle.js\";\nimport \"dequal\";\nimport { c as createElHelpers, w as withGet, m as makeElement, s as styleToString, p as portalAttr, e as effect, i as isHTMLElement, a as executeCallbacks, b as addMeltEventListener, F as FIRST_LAST_KEYS, k as kbd, S as SELECTION_KEYS, u as useEscapeKeydown, n as noop, d as isElementDisabled, f as safeOnMount, g as isBrowser, h as addEventListener, j as disabledAttr, o as omit, l as is_void } from \"../../../chunks/index3.js\";\nimport { w as writable, d as derived } from \"../../../chunks/index2.js\";\nimport { t as toWritableStores, o as overridable, c as createBitAttrs, r as removeUndefined, g as getOptionUpdater, a as createDispatcher, d as disabledAttrs, b as cn$1, e as toastState, u as useEffect } from \"../../../chunks/Toaster.svelte_svelte_type_style_lang.js\";\nimport { c as createTypeaheadSearch, g as generateIds, d as derivedVisible, u as usePopper, a as getPortalDestination, h as handleRovingFocus, b as usePortal, s as sleep, r as removeHighlight, e as handleFocus, f as removeScroll, i as getNextFocusable, j as getPreviousFocusable, k as addHighlight, l as generateId, m as getPositioningUpdater, D as Dialog_portal, n as Dialog_overlay, o as fade, p as Dialog_content, q as Dialog_close, X, t as fly, v as Dialog, w as Dialog_trigger } from \"../../../chunks/x.js\";\nimport { t as tick } from \"../../../chunks/scheduler.js\";\nimport \"clsx\";\nimport { tv } from \"tailwind-variants\";\nimport { d as derivedMode, M as Mode_watcher } from \"../../../chunks/mode-watcher.js\";\nimport { c as config } from \"../../../chunks/config.js\";\nimport { c as cn, f as flyAndScale, B as Button } from \"../../../chunks/button.js\";\nconst Menu$1 = create_ssr_component(($$result, $$props, $$bindings, slots) => {\n const iconNode = [\n [\n \"line\",\n {\n \"x1\": \"4\",\n \"x2\": \"20\",\n \"y1\": \"12\",\n \"y2\": \"12\"\n }\n ],\n [\n \"line\",\n {\n \"x1\": \"4\",\n \"x2\": \"20\",\n \"y1\": \"6\",\n \"y2\": \"6\"\n }\n ],\n [\n \"line\",\n {\n \"x1\": \"4\",\n \"x2\": \"20\",\n \"y1\": \"18\",\n \"y2\": \"18\"\n }\n ]\n ];\n return `${validate_component(Icon$1, \"Icon\").$$render($$result, Object.assign({}, { name: \"menu\" }, $$props, { iconNode }), {}, {\n default: () => {\n return `${slots.default ? slots.default({}) : ``}`;\n }\n })}`;\n});\nconst Menu$2 = Menu$1;\nconst Package_2 = create_ssr_component(($$result, $$props, $$bindings, slots) => {\n const iconNode = [\n [\n \"path\",\n {\n \"d\": \"M3 9h18v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9Z\"\n }\n ],\n [\n \"path\",\n {\n \"d\": \"m3 9 2.45-4.9A2 2 0 0 1 7.24 3h9.52a2 2 0 0 1 1.8 1.1L21 9\"\n }\n ],\n [\"path\", { \"d\": \"M12 3v6\" }]\n ];\n return `${validate_component(Icon$1, \"Icon\").$$render($$result, Object.assign({}, { name: \"package-2\" }, $$props, { iconNode }), {}, {\n default: () => {\n return `${slots.default ? slots.default({}) : ``}`;\n }\n })}`;\n});\nconst Package2 = Package_2;\nconst Circle_user = create_ssr_component(($$result, $$props, $$bindings, slots) => {\n const iconNode = [\n [\"circle\", { \"cx\": \"12\", \"cy\": \"12\", \"r\": \"10\" }],\n [\"circle\", { \"cx\": \"12\", \"cy\": \"10\", \"r\": \"3\" }],\n [\n \"path\",\n {\n \"d\": \"M7 20.662V19a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v1.662\"\n }\n ]\n ];\n return `${validate_component(Icon$1, \"Icon\").$$render($$result, Object.assign({}, { name: \"circle-user\" }, $$props, { iconNode }), {}, {\n default: () => {\n return `${slots.default ? slots.default({}) : ``}`;\n }\n })}`;\n});\nconst CircleUser = Circle_user;\nconst Sun = create_ssr_component(($$result, $$props, $$bindings, slots) => {\n let $$restProps = compute_rest_props($$props, [\"size\", \"role\", \"color\", \"ariaLabel\", \"withEvents\"]);\n const ctx = getContext(\"iconCtx\") ?? {};\n let { size = ctx.size || \"24\" } = $$props;\n let { role = ctx.role || \"img\" } = $$props;\n let { color = ctx.color || \"currentColor\" } = $$props;\n let { ariaLabel = \"sun,\" } = $$props;\n let { withEvents = false } = $$props;\n if ($$props.size === void 0 && $$bindings.size && size !== void 0)\n $$bindings.size(size);\n if ($$props.role === void 0 && $$bindings.role && role !== void 0)\n $$bindings.role(role);\n if ($$props.color === void 0 && $$bindings.color && color !== void 0)\n $$bindings.color(color);\n if ($$props.ariaLabel === void 0 && $$bindings.ariaLabel && ariaLabel !== void 0)\n $$bindings.ariaLabel(ariaLabel);\n if ($$props.withEvents === void 0 && $$bindings.withEvents && withEvents !== void 0)\n $$bindings.withEvents(withEvents);\n return `${withEvents ? `` : ``} `;\n});\nconst Moon = create_ssr_component(($$result, $$props, $$bindings, slots) => {\n let $$restProps = compute_rest_props($$props, [\"size\", \"role\", \"color\", \"ariaLabel\", \"withEvents\"]);\n const ctx = getContext(\"iconCtx\") ?? {};\n let { size = ctx.size || \"24\" } = $$props;\n let { role = ctx.role || \"img\" } = $$props;\n let { color = ctx.color || \"currentColor\" } = $$props;\n let { ariaLabel = \"moon,\" } = $$props;\n let { withEvents = false } = $$props;\n if ($$props.size === void 0 && $$bindings.size && size !== void 0)\n $$bindings.size(size);\n if ($$props.role === void 0 && $$bindings.role && role !== void 0)\n $$bindings.role(role);\n if ($$props.color === void 0 && $$bindings.color && color !== void 0)\n $$bindings.color(color);\n if ($$props.ariaLabel === void 0 && $$bindings.ariaLabel && ariaLabel !== void 0)\n $$bindings.ariaLabel(ariaLabel);\n if ($$props.withEvents === void 0 && $$bindings.withEvents && withEvents !== void 0)\n $$bindings.withEvents(withEvents);\n return `${withEvents ? `` : ``} `;\n});\nconst SUB_OPEN_KEYS = {\n ltr: [...SELECTION_KEYS, kbd.ARROW_RIGHT],\n rtl: [...SELECTION_KEYS, kbd.ARROW_LEFT]\n};\nconst SUB_CLOSE_KEYS = {\n ltr: [kbd.ARROW_LEFT],\n rtl: [kbd.ARROW_RIGHT]\n};\nconst menuIdParts = [\"menu\", \"trigger\"];\nconst defaults$2 = {\n arrowSize: 8,\n positioning: {\n placement: \"bottom\"\n },\n preventScroll: true,\n closeOnEscape: true,\n closeOnOutsideClick: true,\n portal: void 0,\n loop: false,\n dir: \"ltr\",\n defaultOpen: false,\n typeahead: true,\n closeOnItemClick: true,\n onOutsideClick: void 0\n};\nfunction createMenuBuilder(opts) {\n const { name, selector } = createElHelpers(opts.selector);\n const { preventScroll, arrowSize, positioning, closeOnEscape, closeOnOutsideClick, portal, forceVisible, typeahead, loop, closeFocus, disableFocusFirstItem, closeOnItemClick, onOutsideClick } = opts.rootOptions;\n const rootOpen = opts.rootOpen;\n const rootActiveTrigger = opts.rootActiveTrigger;\n const nextFocusable = opts.nextFocusable;\n const prevFocusable = opts.prevFocusable;\n const isUsingKeyboard = withGet.writable(false);\n const lastPointerX = withGet(writable(0));\n const pointerGraceIntent = withGet(writable(null));\n const pointerDir = withGet(writable(\"right\"));\n const currentFocusedItem = withGet(writable(null));\n const pointerMovingToSubmenu = withGet(derived([pointerDir, pointerGraceIntent], ([$pointerDir, $pointerGraceIntent]) => {\n return (e) => {\n const isMovingTowards = $pointerDir === $pointerGraceIntent?.side;\n return isMovingTowards && isPointerInGraceArea(e, $pointerGraceIntent?.area);\n };\n }));\n const { typed, handleTypeaheadSearch } = createTypeaheadSearch();\n const rootIds = toWritableStores({ ...generateIds(menuIdParts), ...opts.ids });\n const isVisible = derivedVisible({\n open: rootOpen,\n forceVisible,\n activeTrigger: rootActiveTrigger\n });\n const rootMenu = makeElement(name(), {\n stores: [isVisible, portal, rootIds.menu, rootIds.trigger],\n returned: ([$isVisible, $portal, $rootMenuId, $rootTriggerId]) => {\n return {\n role: \"menu\",\n hidden: $isVisible ? void 0 : true,\n style: styleToString({\n display: $isVisible ? void 0 : \"none\"\n }),\n id: $rootMenuId,\n \"aria-labelledby\": $rootTriggerId,\n \"data-state\": $isVisible ? \"open\" : \"closed\",\n \"data-portal\": portalAttr($portal),\n tabindex: -1\n };\n },\n action: (node) => {\n let unsubPopper = noop;\n const unsubDerived = effect([isVisible, rootActiveTrigger, positioning, closeOnOutsideClick, portal, closeOnEscape], ([$isVisible, $rootActiveTrigger, $positioning, $closeOnOutsideClick, $portal, $closeOnEscape]) => {\n unsubPopper();\n if (!$isVisible || !$rootActiveTrigger)\n return;\n tick().then(() => {\n unsubPopper();\n setMeltMenuAttribute(node, selector);\n unsubPopper = usePopper(node, {\n anchorElement: $rootActiveTrigger,\n open: rootOpen,\n options: {\n floating: $positioning,\n modal: {\n closeOnInteractOutside: $closeOnOutsideClick,\n shouldCloseOnInteractOutside: (e) => {\n onOutsideClick.get()?.(e);\n if (e.defaultPrevented)\n return false;\n if (isHTMLElement($rootActiveTrigger) && $rootActiveTrigger.contains(e.target)) {\n return false;\n }\n return true;\n },\n onClose: () => {\n rootOpen.set(false);\n $rootActiveTrigger.focus();\n },\n open: $isVisible\n },\n portal: getPortalDestination(node, $portal),\n escapeKeydown: $closeOnEscape ? void 0 : null\n }\n }).destroy;\n });\n });\n const unsubEvents = executeCallbacks(addMeltEventListener(node, \"keydown\", (e) => {\n const target = e.target;\n const menuEl = e.currentTarget;\n if (!isHTMLElement(target) || !isHTMLElement(menuEl))\n return;\n const isKeyDownInside = target.closest('[role=\"menu\"]') === menuEl;\n if (!isKeyDownInside)\n return;\n if (FIRST_LAST_KEYS.includes(e.key)) {\n handleMenuNavigation(e, loop.get() ?? false);\n }\n if (e.key === kbd.TAB) {\n e.preventDefault();\n rootOpen.set(false);\n handleTabNavigation(e, nextFocusable, prevFocusable);\n return;\n }\n const isCharacterKey = e.key.length === 1;\n const isModifierKey = e.ctrlKey || e.altKey || e.metaKey;\n if (!isModifierKey && isCharacterKey && typeahead.get() === true) {\n handleTypeaheadSearch(e.key, getMenuItems(menuEl));\n }\n }));\n return {\n destroy() {\n unsubDerived();\n unsubEvents();\n unsubPopper();\n }\n };\n }\n });\n const rootTrigger = makeElement(name(\"trigger\"), {\n stores: [rootOpen, rootIds.menu, rootIds.trigger],\n returned: ([$rootOpen, $rootMenuId, $rootTriggerId]) => {\n return {\n \"aria-controls\": $rootMenuId,\n \"aria-expanded\": $rootOpen,\n \"data-state\": $rootOpen ? \"open\" : \"closed\",\n id: $rootTriggerId,\n tabindex: 0\n };\n },\n action: (node) => {\n applyAttrsIfDisabled(node);\n rootActiveTrigger.update((p) => {\n if (p)\n return p;\n return node;\n });\n const unsub = executeCallbacks(addMeltEventListener(node, \"click\", (e) => {\n const $rootOpen = rootOpen.get();\n const triggerEl = e.currentTarget;\n if (!isHTMLElement(triggerEl))\n return;\n handleOpen(triggerEl);\n if (!$rootOpen)\n e.preventDefault();\n }), addMeltEventListener(node, \"keydown\", (e) => {\n const triggerEl = e.currentTarget;\n if (!isHTMLElement(triggerEl))\n return;\n if (!(SELECTION_KEYS.includes(e.key) || e.key === kbd.ARROW_DOWN))\n return;\n e.preventDefault();\n handleOpen(triggerEl);\n const menuId = triggerEl.getAttribute(\"aria-controls\");\n if (!menuId)\n return;\n const menu = document.getElementById(menuId);\n if (!menu)\n return;\n const menuItems = getMenuItems(menu);\n if (!menuItems.length)\n return;\n handleRovingFocus(menuItems[0]);\n }));\n return {\n destroy: unsub\n };\n }\n });\n const rootArrow = makeElement(name(\"arrow\"), {\n stores: arrowSize,\n returned: ($arrowSize) => ({\n \"data-arrow\": true,\n style: styleToString({\n position: \"absolute\",\n width: `var(--arrow-size, ${$arrowSize}px)`,\n height: `var(--arrow-size, ${$arrowSize}px)`\n })\n })\n });\n const overlay = makeElement(name(\"overlay\"), {\n stores: [isVisible],\n returned: ([$isVisible]) => {\n return {\n hidden: $isVisible ? void 0 : true,\n tabindex: -1,\n style: styleToString({\n display: $isVisible ? void 0 : \"none\"\n }),\n \"aria-hidden\": \"true\",\n \"data-state\": stateAttr($isVisible)\n };\n },\n action: (node) => {\n let unsubEscapeKeydown = noop;\n if (closeOnEscape.get()) {\n const escapeKeydown = useEscapeKeydown(node, {\n handler: () => {\n rootOpen.set(false);\n const $rootActiveTrigger = rootActiveTrigger.get();\n if ($rootActiveTrigger)\n $rootActiveTrigger.focus();\n }\n });\n if (escapeKeydown && escapeKeydown.destroy) {\n unsubEscapeKeydown = escapeKeydown.destroy;\n }\n }\n const unsubPortal = effect([portal], ([$portal]) => {\n if ($portal === null)\n return noop;\n const portalDestination = getPortalDestination(node, $portal);\n if (portalDestination === null)\n return noop;\n return usePortal(node, portalDestination).destroy;\n });\n return {\n destroy() {\n unsubEscapeKeydown();\n unsubPortal();\n }\n };\n }\n });\n const item = makeElement(name(\"item\"), {\n returned: () => {\n return {\n role: \"menuitem\",\n tabindex: -1,\n \"data-orientation\": \"vertical\"\n };\n },\n action: (node) => {\n setMeltMenuAttribute(node, selector);\n applyAttrsIfDisabled(node);\n const unsub = executeCallbacks(addMeltEventListener(node, \"pointerdown\", (e) => {\n const itemEl = e.currentTarget;\n if (!isHTMLElement(itemEl))\n return;\n if (isElementDisabled(itemEl)) {\n e.preventDefault();\n return;\n }\n }), addMeltEventListener(node, \"click\", (e) => {\n const itemEl = e.currentTarget;\n if (!isHTMLElement(itemEl))\n return;\n if (isElementDisabled(itemEl)) {\n e.preventDefault();\n return;\n }\n if (e.defaultPrevented) {\n handleRovingFocus(itemEl);\n return;\n }\n if (closeOnItemClick.get()) {\n sleep(1).then(() => {\n rootOpen.set(false);\n });\n }\n }), addMeltEventListener(node, \"keydown\", (e) => {\n onItemKeyDown(e);\n }), addMeltEventListener(node, \"pointermove\", (e) => {\n onMenuItemPointerMove(e);\n }), addMeltEventListener(node, \"pointerleave\", (e) => {\n onMenuItemPointerLeave(e);\n }), addMeltEventListener(node, \"focusin\", (e) => {\n onItemFocusIn(e);\n }), addMeltEventListener(node, \"focusout\", (e) => {\n onItemFocusOut(e);\n }));\n return {\n destroy: unsub\n };\n }\n });\n const group = makeElement(name(\"group\"), {\n returned: () => {\n return (groupId) => ({\n role: \"group\",\n \"aria-labelledby\": groupId\n });\n }\n });\n const groupLabel = makeElement(name(\"group-label\"), {\n returned: () => {\n return (groupId) => ({\n id: groupId\n });\n }\n });\n const checkboxItemDefaults = {\n defaultChecked: false,\n disabled: false\n };\n const createCheckboxItem = (props) => {\n const withDefaults = { ...checkboxItemDefaults, ...props };\n const checkedWritable = withDefaults.checked ?? writable(withDefaults.defaultChecked ?? null);\n const checked = overridable(checkedWritable, withDefaults.onCheckedChange);\n const disabled = writable(withDefaults.disabled);\n const checkboxItem = makeElement(name(\"checkbox-item\"), {\n stores: [checked, disabled],\n returned: ([$checked, $disabled]) => {\n return {\n role: \"menuitemcheckbox\",\n tabindex: -1,\n \"data-orientation\": \"vertical\",\n \"aria-checked\": isIndeterminate($checked) ? \"mixed\" : $checked ? \"true\" : \"false\",\n \"data-disabled\": disabledAttr($disabled),\n \"data-state\": getCheckedState($checked)\n };\n },\n action: (node) => {\n setMeltMenuAttribute(node, selector);\n applyAttrsIfDisabled(node);\n const unsub = executeCallbacks(addMeltEventListener(node, \"pointerdown\", (e) => {\n const itemEl = e.currentTarget;\n if (!isHTMLElement(itemEl))\n return;\n if (isElementDisabled(itemEl)) {\n e.preventDefault();\n return;\n }\n }), addMeltEventListener(node, \"click\", (e) => {\n const itemEl = e.currentTarget;\n if (!isHTMLElement(itemEl))\n return;\n if (isElementDisabled(itemEl)) {\n e.preventDefault();\n return;\n }\n if (e.defaultPrevented) {\n handleRovingFocus(itemEl);\n return;\n }\n checked.update((prev) => {\n if (isIndeterminate(prev))\n return true;\n return !prev;\n });\n if (closeOnItemClick.get()) {\n tick().then(() => {\n rootOpen.set(false);\n });\n }\n }), addMeltEventListener(node, \"keydown\", (e) => {\n onItemKeyDown(e);\n }), addMeltEventListener(node, \"pointermove\", (e) => {\n const itemEl = e.currentTarget;\n if (!isHTMLElement(itemEl))\n return;\n if (isElementDisabled(itemEl)) {\n onItemLeave(e);\n return;\n }\n onMenuItemPointerMove(e, itemEl);\n }), addMeltEventListener(node, \"pointerleave\", (e) => {\n onMenuItemPointerLeave(e);\n }), addMeltEventListener(node, \"focusin\", (e) => {\n onItemFocusIn(e);\n }), addMeltEventListener(node, \"focusout\", (e) => {\n onItemFocusOut(e);\n }));\n return {\n destroy: unsub\n };\n }\n });\n const isChecked = derived(checked, ($checked) => $checked === true);\n const _isIndeterminate = derived(checked, ($checked) => $checked === \"indeterminate\");\n return {\n elements: {\n checkboxItem\n },\n states: {\n checked\n },\n helpers: {\n isChecked,\n isIndeterminate: _isIndeterminate\n },\n options: {\n disabled\n }\n };\n };\n const createMenuRadioGroup = (args = {}) => {\n const valueWritable = args.value ?? writable(args.defaultValue ?? null);\n const value = overridable(valueWritable, args.onValueChange);\n const radioGroup = makeElement(name(\"radio-group\"), {\n returned: () => ({\n role: \"group\"\n })\n });\n const radioItemDefaults = {\n disabled: false\n };\n const radioItem = makeElement(name(\"radio-item\"), {\n stores: [value],\n returned: ([$value]) => {\n return (itemProps) => {\n const { value: itemValue, disabled } = { ...radioItemDefaults, ...itemProps };\n const checked = $value === itemValue;\n return {\n disabled,\n role: \"menuitemradio\",\n \"data-state\": checked ? \"checked\" : \"unchecked\",\n \"aria-checked\": checked,\n \"data-disabled\": disabledAttr(disabled),\n \"data-value\": itemValue,\n \"data-orientation\": \"vertical\",\n tabindex: -1\n };\n };\n },\n action: (node) => {\n setMeltMenuAttribute(node, selector);\n const unsub = executeCallbacks(addMeltEventListener(node, \"pointerdown\", (e) => {\n const itemEl = e.currentTarget;\n if (!isHTMLElement(itemEl))\n return;\n const itemValue = node.dataset.value;\n const disabled = node.dataset.disabled;\n if (disabled || itemValue === void 0) {\n e.preventDefault();\n return;\n }\n }), addMeltEventListener(node, \"click\", (e) => {\n const itemEl = e.currentTarget;\n if (!isHTMLElement(itemEl))\n return;\n const itemValue = node.dataset.value;\n const disabled = node.dataset.disabled;\n if (disabled || itemValue === void 0) {\n e.preventDefault();\n return;\n }\n if (e.defaultPrevented) {\n if (!isHTMLElement(itemEl))\n return;\n handleRovingFocus(itemEl);\n return;\n }\n value.set(itemValue);\n if (closeOnItemClick.get()) {\n tick().then(() => {\n rootOpen.set(false);\n });\n }\n }), addMeltEventListener(node, \"keydown\", (e) => {\n onItemKeyDown(e);\n }), addMeltEventListener(node, \"pointermove\", (e) => {\n const itemEl = e.currentTarget;\n if (!isHTMLElement(itemEl))\n return;\n const itemValue = node.dataset.value;\n const disabled = node.dataset.disabled;\n if (disabled || itemValue === void 0) {\n onItemLeave(e);\n return;\n }\n onMenuItemPointerMove(e, itemEl);\n }), addMeltEventListener(node, \"pointerleave\", (e) => {\n onMenuItemPointerLeave(e);\n }), addMeltEventListener(node, \"focusin\", (e) => {\n onItemFocusIn(e);\n }), addMeltEventListener(node, \"focusout\", (e) => {\n onItemFocusOut(e);\n }));\n return {\n destroy: unsub\n };\n }\n });\n const isChecked = derived(value, ($value) => {\n return (itemValue) => {\n return $value === itemValue;\n };\n });\n return {\n elements: {\n radioGroup,\n radioItem\n },\n states: {\n value\n },\n helpers: {\n isChecked\n }\n };\n };\n const { elements: { root: separator } } = createSeparator({\n orientation: \"horizontal\"\n });\n const subMenuDefaults = {\n ...defaults$2,\n disabled: false,\n positioning: {\n placement: \"right-start\",\n gutter: 8\n }\n };\n const createSubmenu = (args) => {\n const withDefaults = { ...subMenuDefaults, ...args };\n const subOpenWritable = withDefaults.open ?? writable(false);\n const subOpen = overridable(subOpenWritable, withDefaults?.onOpenChange);\n const options = toWritableStores(omit(withDefaults, \"ids\"));\n const { positioning: positioning2, arrowSize: arrowSize2, disabled } = options;\n const subActiveTrigger = withGet(writable(null));\n const subOpenTimer = withGet(writable(null));\n const pointerGraceTimer = withGet(writable(0));\n const subIds = toWritableStores({ ...generateIds(menuIdParts), ...withDefaults.ids });\n safeOnMount(() => {\n const subTrigger2 = document.getElementById(subIds.trigger.get());\n if (subTrigger2) {\n subActiveTrigger.set(subTrigger2);\n }\n });\n const subIsVisible = derivedVisible({\n open: subOpen,\n forceVisible,\n activeTrigger: subActiveTrigger\n });\n const subMenu = makeElement(name(\"submenu\"), {\n stores: [subIsVisible, subIds.menu, subIds.trigger],\n returned: ([$subIsVisible, $subMenuId, $subTriggerId]) => {\n return {\n role: \"menu\",\n hidden: $subIsVisible ? void 0 : true,\n style: styleToString({\n display: $subIsVisible ? void 0 : \"none\"\n }),\n id: $subMenuId,\n \"aria-labelledby\": $subTriggerId,\n \"data-state\": $subIsVisible ? \"open\" : \"closed\",\n // unit tests fail on `.closest` if the id starts with a number\n // so using a data attribute\n \"data-id\": $subMenuId,\n tabindex: -1\n };\n },\n action: (node) => {\n let unsubPopper = noop;\n const unsubDerived = effect([subIsVisible, positioning2], ([$subIsVisible, $positioning]) => {\n unsubPopper();\n if (!$subIsVisible)\n return;\n const activeTrigger = subActiveTrigger.get();\n if (!activeTrigger)\n return;\n tick().then(() => {\n unsubPopper();\n const parentMenuEl = getParentMenu(activeTrigger);\n unsubPopper = usePopper(node, {\n anchorElement: activeTrigger,\n open: subOpen,\n options: {\n floating: $positioning,\n portal: isHTMLElement(parentMenuEl) ? parentMenuEl : void 0,\n modal: null,\n focusTrap: null,\n escapeKeydown: null\n }\n }).destroy;\n });\n });\n const unsubEvents = executeCallbacks(addMeltEventListener(node, \"keydown\", (e) => {\n if (e.key === kbd.ESCAPE) {\n return;\n }\n const target = e.target;\n const menuEl = e.currentTarget;\n if (!isHTMLElement(target) || !isHTMLElement(menuEl))\n return;\n const isKeyDownInside = target.closest('[role=\"menu\"]') === menuEl;\n if (!isKeyDownInside)\n return;\n if (FIRST_LAST_KEYS.includes(e.key)) {\n e.stopImmediatePropagation();\n handleMenuNavigation(e, loop.get() ?? false);\n return;\n }\n const isCloseKey = SUB_CLOSE_KEYS[\"ltr\"].includes(e.key);\n const isModifierKey = e.ctrlKey || e.altKey || e.metaKey;\n const isCharacterKey = e.key.length === 1;\n if (isCloseKey) {\n const $subActiveTrigger = subActiveTrigger.get();\n e.preventDefault();\n subOpen.update(() => {\n if ($subActiveTrigger) {\n handleRovingFocus($subActiveTrigger);\n }\n return false;\n });\n return;\n }\n if (e.key === kbd.TAB) {\n e.preventDefault();\n rootOpen.set(false);\n handleTabNavigation(e, nextFocusable, prevFocusable);\n return;\n }\n if (!isModifierKey && isCharacterKey && typeahead.get() === true) {\n handleTypeaheadSearch(e.key, getMenuItems(menuEl));\n }\n }), addMeltEventListener(node, \"pointermove\", (e) => {\n onMenuPointerMove(e);\n }), addMeltEventListener(node, \"focusout\", (e) => {\n const $subActiveTrigger = subActiveTrigger.get();\n if (isUsingKeyboard.get()) {\n const target = e.target;\n const submenuEl = document.getElementById(subIds.menu.get());\n if (!isHTMLElement(submenuEl) || !isHTMLElement(target))\n return;\n if (!submenuEl.contains(target) && target !== $subActiveTrigger) {\n subOpen.set(false);\n }\n } else {\n const menuEl = e.currentTarget;\n const relatedTarget = e.relatedTarget;\n if (!isHTMLElement(relatedTarget) || !isHTMLElement(menuEl))\n return;\n if (!menuEl.contains(relatedTarget) && relatedTarget !== $subActiveTrigger) {\n subOpen.set(false);\n }\n }\n }));\n return {\n destroy() {\n unsubDerived();\n unsubPopper();\n unsubEvents();\n }\n };\n }\n });\n const subTrigger = makeElement(name(\"subtrigger\"), {\n stores: [subOpen, disabled, subIds.menu, subIds.trigger],\n returned: ([$subOpen, $disabled, $subMenuId, $subTriggerId]) => {\n return {\n role: \"menuitem\",\n id: $subTriggerId,\n tabindex: -1,\n \"aria-controls\": $subMenuId,\n \"aria-expanded\": $subOpen,\n \"data-state\": $subOpen ? \"open\" : \"closed\",\n \"data-disabled\": disabledAttr($disabled),\n \"aria-haspopop\": \"menu\"\n };\n },\n action: (node) => {\n setMeltMenuAttribute(node, selector);\n applyAttrsIfDisabled(node);\n subActiveTrigger.update((p) => {\n if (p)\n return p;\n return node;\n });\n const unsubTimer = () => {\n clearTimerStore(subOpenTimer);\n window.clearTimeout(pointerGraceTimer.get());\n pointerGraceIntent.set(null);\n };\n const unsubEvents = executeCallbacks(addMeltEventListener(node, \"click\", (e) => {\n if (e.defaultPrevented)\n return;\n const triggerEl = e.currentTarget;\n if (!isHTMLElement(triggerEl) || isElementDisabled(triggerEl))\n return;\n handleRovingFocus(triggerEl);\n if (!subOpen.get()) {\n subOpen.update((prev) => {\n const isAlreadyOpen = prev;\n if (!isAlreadyOpen) {\n subActiveTrigger.set(triggerEl);\n return !prev;\n }\n return prev;\n });\n }\n }), addMeltEventListener(node, \"keydown\", (e) => {\n const $typed = typed.get();\n const triggerEl = e.currentTarget;\n if (!isHTMLElement(triggerEl) || isElementDisabled(triggerEl))\n return;\n const isTypingAhead = $typed.length > 0;\n if (isTypingAhead && e.key === kbd.SPACE)\n return;\n if (SUB_OPEN_KEYS[\"ltr\"].includes(e.key)) {\n if (!subOpen.get()) {\n triggerEl.click();\n e.preventDefault();\n return;\n }\n const menuId = triggerEl.getAttribute(\"aria-controls\");\n if (!menuId)\n return;\n const menuEl = document.getElementById(menuId);\n if (!isHTMLElement(menuEl))\n return;\n const firstItem = getMenuItems(menuEl)[0];\n handleRovingFocus(firstItem);\n }\n }), addMeltEventListener(node, \"pointermove\", (e) => {\n if (!isMouse(e))\n return;\n onItemEnter(e);\n if (e.defaultPrevented)\n return;\n const triggerEl = e.currentTarget;\n if (!isHTMLElement(triggerEl))\n return;\n if (!isFocusWithinSubmenu(subIds.menu.get())) {\n handleRovingFocus(triggerEl);\n }\n const openTimer = subOpenTimer.get();\n if (!subOpen.get() && !openTimer && !isElementDisabled(triggerEl)) {\n subOpenTimer.set(window.setTimeout(() => {\n subOpen.update(() => {\n subActiveTrigger.set(triggerEl);\n return true;\n });\n clearTimerStore(subOpenTimer);\n }, 100));\n }\n }), addMeltEventListener(node, \"pointerleave\", (e) => {\n if (!isMouse(e))\n return;\n clearTimerStore(subOpenTimer);\n const submenuEl = document.getElementById(subIds.menu.get());\n const contentRect = submenuEl?.getBoundingClientRect();\n if (contentRect) {\n const side = submenuEl?.dataset.side;\n const rightSide = side === \"right\";\n const bleed = rightSide ? -5 : 5;\n const contentNearEdge = contentRect[rightSide ? \"left\" : \"right\"];\n const contentFarEdge = contentRect[rightSide ? \"right\" : \"left\"];\n pointerGraceIntent.set({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: e.clientX + bleed, y: e.clientY },\n { x: contentNearEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.bottom },\n { x: contentNearEdge, y: contentRect.bottom }\n ],\n side\n });\n window.clearTimeout(pointerGraceTimer.get());\n pointerGraceTimer.set(window.setTimeout(() => {\n pointerGraceIntent.set(null);\n }, 300));\n } else {\n onTriggerLeave(e);\n if (e.defaultPrevented)\n return;\n pointerGraceIntent.set(null);\n }\n }), addMeltEventListener(node, \"focusout\", (e) => {\n const triggerEl = e.currentTarget;\n if (!isHTMLElement(triggerEl))\n return;\n removeHighlight(triggerEl);\n const relatedTarget = e.relatedTarget;\n if (!isHTMLElement(relatedTarget))\n return;\n const menuId = triggerEl.getAttribute(\"aria-controls\");\n if (!menuId)\n return;\n const menu = document.getElementById(menuId);\n if (menu && !menu.contains(relatedTarget)) {\n subOpen.set(false);\n }\n }), addMeltEventListener(node, \"focusin\", (e) => {\n onItemFocusIn(e);\n }));\n return {\n destroy() {\n unsubTimer();\n unsubEvents();\n }\n };\n }\n });\n const subArrow = makeElement(name(\"subarrow\"), {\n stores: arrowSize2,\n returned: ($arrowSize) => ({\n \"data-arrow\": true,\n style: styleToString({\n position: \"absolute\",\n width: `var(--arrow-size, ${$arrowSize}px)`,\n height: `var(--arrow-size, ${$arrowSize}px)`\n })\n })\n });\n effect([rootOpen], ([$rootOpen]) => {\n if (!$rootOpen) {\n subActiveTrigger.set(null);\n subOpen.set(false);\n }\n });\n effect([pointerGraceIntent], ([$pointerGraceIntent]) => {\n if (!isBrowser || $pointerGraceIntent)\n return;\n window.clearTimeout(pointerGraceTimer.get());\n });\n effect([subOpen], ([$subOpen]) => {\n if (!isBrowser)\n return;\n if ($subOpen && isUsingKeyboard.get()) {\n sleep(1).then(() => {\n const menuEl = document.getElementById(subIds.menu.get());\n if (!menuEl)\n return;\n const menuItems = getMenuItems(menuEl);\n if (!menuItems.length)\n return;\n handleRovingFocus(menuItems[0]);\n });\n }\n if (!$subOpen) {\n const focusedItem = currentFocusedItem.get();\n const subTriggerEl = document.getElementById(subIds.trigger.get());\n if (focusedItem) {\n sleep(1).then(() => {\n const menuEl = document.getElementById(subIds.menu.get());\n if (!menuEl)\n return;\n if (menuEl.contains(focusedItem)) {\n removeHighlight(focusedItem);\n }\n });\n }\n if (!subTriggerEl || document.activeElement === subTriggerEl)\n return;\n removeHighlight(subTriggerEl);\n }\n });\n return {\n ids: subIds,\n elements: {\n subTrigger,\n subMenu,\n subArrow\n },\n states: {\n subOpen\n },\n options\n };\n };\n safeOnMount(() => {\n const triggerEl = document.getElementById(rootIds.trigger.get());\n if (isHTMLElement(triggerEl) && rootOpen.get()) {\n rootActiveTrigger.set(triggerEl);\n }\n const unsubs = [];\n const handlePointer = () => isUsingKeyboard.set(false);\n const handleKeyDown = () => {\n isUsingKeyboard.set(true);\n unsubs.push(executeCallbacks(addEventListener(document, \"pointerdown\", handlePointer, { capture: true, once: true }), addEventListener(document, \"pointermove\", handlePointer, { capture: true, once: true })));\n };\n const keydownListener = (e) => {\n if (e.key === kbd.ESCAPE && closeOnEscape.get()) {\n rootOpen.set(false);\n return;\n }\n };\n unsubs.push(addEventListener(document, \"keydown\", handleKeyDown, { capture: true }));\n unsubs.push(addEventListener(document, \"keydown\", keydownListener));\n return () => {\n unsubs.forEach((unsub) => unsub());\n };\n });\n effect([rootOpen, currentFocusedItem], ([$rootOpen, $currentFocusedItem]) => {\n if (!$rootOpen && $currentFocusedItem) {\n removeHighlight($currentFocusedItem);\n }\n });\n effect([rootOpen], ([$rootOpen]) => {\n if (!isBrowser)\n return;\n if (!$rootOpen) {\n const $rootActiveTrigger = rootActiveTrigger.get();\n if (!$rootActiveTrigger)\n return;\n const $closeFocus = closeFocus.get();\n if (!$rootOpen && $rootActiveTrigger) {\n handleFocus({ prop: $closeFocus, defaultEl: $rootActiveTrigger });\n }\n }\n });\n effect([rootOpen, preventScroll], ([$rootOpen, $preventScroll]) => {\n if (!isBrowser)\n return;\n const unsubs = [];\n if (opts.removeScroll && $rootOpen && $preventScroll) {\n unsubs.push(removeScroll());\n }\n sleep(1).then(() => {\n const menuEl = document.getElementById(rootIds.menu.get());\n if (menuEl && $rootOpen && isUsingKeyboard.get()) {\n if (disableFocusFirstItem.get()) {\n handleRovingFocus(menuEl);\n return;\n }\n const menuItems = getMenuItems(menuEl);\n if (!menuItems.length)\n return;\n handleRovingFocus(menuItems[0]);\n }\n });\n return () => {\n unsubs.forEach((unsub) => unsub());\n };\n });\n effect(rootOpen, ($rootOpen) => {\n if (!isBrowser)\n return;\n const handlePointer = () => isUsingKeyboard.set(false);\n const handleKeyDown = (e) => {\n isUsingKeyboard.set(true);\n if (e.key === kbd.ESCAPE && $rootOpen && closeOnEscape.get()) {\n rootOpen.set(false);\n return;\n }\n };\n return executeCallbacks(addEventListener(document, \"pointerdown\", handlePointer, { capture: true, once: true }), addEventListener(document, \"pointermove\", handlePointer, { capture: true, once: true }), addEventListener(document, \"keydown\", handleKeyDown, { capture: true }));\n });\n function handleOpen(triggerEl) {\n rootOpen.update((prev) => {\n const isOpen = !prev;\n if (isOpen) {\n nextFocusable.set(getNextFocusable(triggerEl));\n prevFocusable.set(getPreviousFocusable(triggerEl));\n rootActiveTrigger.set(triggerEl);\n }\n return isOpen;\n });\n }\n function onItemFocusIn(e) {\n const itemEl = e.currentTarget;\n if (!isHTMLElement(itemEl))\n return;\n const $currentFocusedItem = currentFocusedItem.get();\n if ($currentFocusedItem) {\n removeHighlight($currentFocusedItem);\n }\n addHighlight(itemEl);\n currentFocusedItem.set(itemEl);\n }\n function onItemFocusOut(e) {\n const itemEl = e.currentTarget;\n if (!isHTMLElement(itemEl))\n return;\n removeHighlight(itemEl);\n }\n function onItemEnter(e) {\n if (isPointerMovingToSubmenu(e)) {\n e.preventDefault();\n }\n }\n function onItemLeave(e) {\n if (isPointerMovingToSubmenu(e)) {\n return;\n }\n const target = e.target;\n if (!isHTMLElement(target))\n return;\n const parentMenuEl = getParentMenu(target);\n if (!parentMenuEl)\n return;\n handleRovingFocus(parentMenuEl);\n }\n function onTriggerLeave(e) {\n if (isPointerMovingToSubmenu(e)) {\n e.preventDefault();\n }\n }\n function onMenuPointerMove(e) {\n if (!isMouse(e))\n return;\n const target = e.target;\n const currentTarget = e.currentTarget;\n if (!isHTMLElement(currentTarget) || !isHTMLElement(target))\n return;\n const $lastPointerX = lastPointerX.get();\n const pointerXHasChanged = $lastPointerX !== e.clientX;\n if (currentTarget.contains(target) && pointerXHasChanged) {\n const newDir = e.clientX > $lastPointerX ? \"right\" : \"left\";\n pointerDir.set(newDir);\n lastPointerX.set(e.clientX);\n }\n }\n function onMenuItemPointerMove(e, currTarget = null) {\n if (!isMouse(e))\n return;\n onItemEnter(e);\n if (e.defaultPrevented)\n return;\n if (currTarget) {\n handleRovingFocus(currTarget);\n return;\n }\n const currentTarget = e.currentTarget;\n if (!isHTMLElement(currentTarget))\n return;\n handleRovingFocus(currentTarget);\n }\n function onMenuItemPointerLeave(e) {\n if (!isMouse(e))\n return;\n onItemLeave(e);\n }\n function onItemKeyDown(e) {\n const $typed = typed.get();\n const isTypingAhead = $typed.length > 0;\n if (isTypingAhead && e.key === kbd.SPACE) {\n e.preventDefault();\n return;\n }\n if (SELECTION_KEYS.includes(e.key)) {\n e.preventDefault();\n const itemEl = e.currentTarget;\n if (!isHTMLElement(itemEl))\n return;\n itemEl.click();\n }\n }\n function isIndeterminate(checked) {\n return checked === \"indeterminate\";\n }\n function getCheckedState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n }\n function isPointerMovingToSubmenu(e) {\n return pointerMovingToSubmenu.get()(e);\n }\n function getParentMenu(element) {\n const parentMenuEl = element.closest('[role=\"menu\"]');\n if (!isHTMLElement(parentMenuEl))\n return null;\n return parentMenuEl;\n }\n return {\n elements: {\n trigger: rootTrigger,\n menu: rootMenu,\n overlay,\n item,\n group,\n groupLabel,\n arrow: rootArrow,\n separator\n },\n builders: {\n createCheckboxItem,\n createSubmenu,\n createMenuRadioGroup\n },\n states: {\n open: rootOpen\n },\n helpers: {\n handleTypeaheadSearch\n },\n ids: rootIds,\n options: opts.rootOptions\n };\n}\nfunction handleTabNavigation(e, nextFocusable, prevFocusable) {\n if (e.shiftKey) {\n const $prevFocusable = prevFocusable.get();\n if ($prevFocusable) {\n e.preventDefault();\n sleep(1).then(() => $prevFocusable.focus());\n prevFocusable.set(null);\n }\n } else {\n const $nextFocusable = nextFocusable.get();\n if ($nextFocusable) {\n e.preventDefault();\n sleep(1).then(() => $nextFocusable.focus());\n nextFocusable.set(null);\n }\n }\n}\nfunction getMenuItems(menuElement) {\n return Array.from(menuElement.querySelectorAll(`[data-melt-menu-id=\"${menuElement.id}\"]`)).filter((item) => isHTMLElement(item));\n}\nfunction applyAttrsIfDisabled(element) {\n if (!element || !isElementDisabled(element))\n return;\n element.setAttribute(\"data-disabled\", \"\");\n element.setAttribute(\"aria-disabled\", \"true\");\n}\nfunction clearTimerStore(timerStore) {\n if (!isBrowser)\n return;\n const timer = timerStore.get();\n if (timer) {\n window.clearTimeout(timer);\n timerStore.set(null);\n }\n}\nfunction isMouse(e) {\n return e.pointerType === \"mouse\";\n}\nfunction setMeltMenuAttribute(element, selector) {\n if (!element)\n return;\n const menuEl = element.closest(`${selector()}, ${selector(\"submenu\")}`);\n if (!isHTMLElement(menuEl))\n return;\n element.setAttribute(\"data-melt-menu-id\", menuEl.id);\n}\nfunction handleMenuNavigation(e, loop) {\n e.preventDefault();\n const currentFocusedItem = document.activeElement;\n const currentTarget = e.currentTarget;\n if (!isHTMLElement(currentFocusedItem) || !isHTMLElement(currentTarget))\n return;\n const menuItems = getMenuItems(currentTarget);\n if (!menuItems.length)\n return;\n const candidateNodes = menuItems.filter((item) => {\n if (item.hasAttribute(\"data-disabled\") || item.getAttribute(\"disabled\") === \"true\") {\n return false;\n }\n return true;\n });\n const currentIndex = candidateNodes.indexOf(currentFocusedItem);\n let nextIndex;\n switch (e.key) {\n case kbd.ARROW_DOWN:\n if (loop) {\n nextIndex = currentIndex < candidateNodes.length - 1 ? currentIndex + 1 : 0;\n } else {\n nextIndex = currentIndex < candidateNodes.length - 1 ? currentIndex + 1 : currentIndex;\n }\n break;\n case kbd.ARROW_UP:\n if (loop) {\n nextIndex = currentIndex > 0 ? currentIndex - 1 : candidateNodes.length - 1;\n } else {\n nextIndex = currentIndex < 0 ? candidateNodes.length - 1 : currentIndex > 0 ? currentIndex - 1 : 0;\n }\n break;\n case kbd.HOME:\n nextIndex = 0;\n break;\n case kbd.END:\n nextIndex = candidateNodes.length - 1;\n break;\n default:\n return;\n }\n handleRovingFocus(candidateNodes[nextIndex]);\n}\nfunction isPointerInGraceArea(e, area) {\n if (!area)\n return false;\n const cursorPos = { x: e.clientX, y: e.clientY };\n return isPointInPolygon(cursorPos, area);\n}\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect)\n inside = !inside;\n }\n return inside;\n}\nfunction isFocusWithinSubmenu(submenuId) {\n const activeEl = document.activeElement;\n if (!isHTMLElement(activeEl))\n return false;\n const submenuEl = activeEl.closest(`[data-id=\"${submenuId}\"]`);\n return isHTMLElement(submenuEl);\n}\nfunction stateAttr(open) {\n return open ? \"open\" : \"closed\";\n}\nconst defaults$1 = {\n arrowSize: 8,\n positioning: {\n placement: \"bottom\"\n },\n preventScroll: true,\n closeOnEscape: true,\n closeOnOutsideClick: true,\n portal: void 0,\n loop: false,\n dir: \"ltr\",\n defaultOpen: false,\n forceVisible: false,\n typeahead: true,\n closeFocus: void 0,\n disableFocusFirstItem: false,\n closeOnItemClick: true,\n onOutsideClick: void 0\n};\nfunction createDropdownMenu(props) {\n const withDefaults = { ...defaults$1, ...props };\n const rootOptions = toWritableStores(omit(withDefaults, \"ids\"));\n const openWritable = withDefaults.open ?? writable(withDefaults.defaultOpen);\n const rootOpen = overridable(openWritable, withDefaults?.onOpenChange);\n const rootActiveTrigger = withGet(writable(null));\n const nextFocusable = withGet(writable(null));\n const prevFocusable = withGet(writable(null));\n const { elements, builders, ids, states, options } = createMenuBuilder({\n rootOptions,\n rootOpen,\n rootActiveTrigger: withGet(rootActiveTrigger),\n nextFocusable: withGet(nextFocusable),\n prevFocusable: withGet(prevFocusable),\n selector: \"dropdown-menu\",\n removeScroll: true,\n ids: withDefaults.ids\n });\n return {\n ids,\n elements,\n states,\n builders,\n options\n };\n}\nconst defaults = {\n orientation: \"horizontal\",\n decorative: false\n};\nconst createSeparator = (props) => {\n const withDefaults = { ...defaults, ...props };\n const options = toWritableStores(withDefaults);\n const { orientation, decorative } = options;\n const root = makeElement(\"separator\", {\n stores: [orientation, decorative],\n returned: ([$orientation, $decorative]) => {\n const ariaOrientation = $orientation === \"vertical\" ? $orientation : void 0;\n return {\n role: $decorative ? \"none\" : \"separator\",\n \"aria-orientation\": ariaOrientation,\n \"aria-hidden\": $decorative,\n \"data-orientation\": $orientation\n };\n }\n });\n return {\n elements: {\n root\n },\n options\n };\n};\nfunction getMenuData() {\n const NAME = \"menu\";\n const SUB_NAME = \"menu-submenu\";\n const RADIO_GROUP_NAME = \"menu-radiogroup\";\n const CHECKBOX_ITEM_NAME = \"menu-checkboxitem\";\n const RADIO_ITEM_NAME = \"menu-radioitem\";\n const GROUP_NAME = \"menu-group\";\n const PARTS = [\n \"arrow\",\n \"checkbox-indicator\",\n \"checkbox-item\",\n \"content\",\n \"group\",\n \"item\",\n \"label\",\n \"radio-group\",\n \"radio-item\",\n \"radio-indicator\",\n \"separator\",\n \"sub-content\",\n \"sub-trigger\",\n \"trigger\"\n ];\n return {\n NAME,\n SUB_NAME,\n RADIO_GROUP_NAME,\n CHECKBOX_ITEM_NAME,\n RADIO_ITEM_NAME,\n GROUP_NAME,\n PARTS\n };\n}\nfunction getCtx() {\n const { NAME } = getMenuData();\n return getContext(NAME);\n}\nfunction setCtx(props) {\n const { NAME, PARTS } = getMenuData();\n const getAttrs = createBitAttrs(\"menu\", PARTS);\n const dropdownMenu = {\n ...createDropdownMenu({ ...removeUndefined(props), forceVisible: true }),\n getAttrs\n };\n setContext(NAME, dropdownMenu);\n return {\n ...dropdownMenu,\n updateOption: getOptionUpdater(dropdownMenu.options)\n };\n}\nfunction getGroupLabel() {\n const { GROUP_NAME } = getMenuData();\n const id = getContext(GROUP_NAME) ?? generateId();\n const { elements: { groupLabel }, getAttrs } = getCtx();\n return { groupLabel, id, getAttrs };\n}\nfunction updatePositioning(props) {\n const defaultPlacement = {\n side: \"bottom\",\n align: \"center\"\n };\n const withDefaults = { ...defaultPlacement, ...props };\n const { options: { positioning } } = getCtx();\n const updater = getPositioningUpdater(positioning);\n updater(withDefaults);\n}\nconst Menu_item = create_ssr_component(($$result, $$props, $$bindings, slots) => {\n let builder;\n let attrs;\n let $$restProps = compute_rest_props($$props, [\"href\", \"asChild\", \"disabled\", \"el\"]);\n let $item, $$unsubscribe_item;\n let { href = void 0 } = $$props;\n let { asChild = false } = $$props;\n let { disabled = false } = $$props;\n let { el = void 0 } = $$props;\n const { elements: { item }, getAttrs } = getCtx();\n $$unsubscribe_item = subscribe(item, (value) => $item = value);\n createDispatcher();\n if ($$props.href === void 0 && $$bindings.href && href !== void 0)\n $$bindings.href(href);\n if ($$props.asChild === void 0 && $$bindings.asChild && asChild !== void 0)\n $$bindings.asChild(asChild);\n if ($$props.disabled === void 0 && $$bindings.disabled && disabled !== void 0)\n $$bindings.disabled(disabled);\n if ($$props.el === void 0 && $$bindings.el && el !== void 0)\n $$bindings.el(el);\n builder = $item;\n attrs = {\n ...getAttrs(\"item\"),\n ...disabledAttrs(disabled)\n };\n {\n Object.assign(builder, attrs);\n }\n $$unsubscribe_item();\n return `${asChild ? `${slots.default ? slots.default({ builder }) : ``}` : `${((tag) => {\n return tag ? `<${href ? \"a\" : \"div\"}${spread(\n [\n { href: escape_attribute_value(href) },\n escape_object(builder),\n escape_object($$restProps)\n ],\n {}\n )}${add_attribute(\"this\", el, 0)}>${is_void(tag) ? \"\" : `${slots.default ? slots.default({ builder }) : ``}`}${is_void(tag) ? \"\" : `${tag}>`}` : \"\";\n })(href ? \"a\" : \"div\")}`}`;\n});\nconst Menu_label = create_ssr_component(($$result, $$props, $$bindings, slots) => {\n let builder;\n let $$restProps = compute_rest_props($$props, [\"asChild\", \"el\"]);\n let $groupLabel, $$unsubscribe_groupLabel;\n let { asChild = false } = $$props;\n let { el = void 0 } = $$props;\n const { groupLabel, id, getAttrs } = getGroupLabel();\n $$unsubscribe_groupLabel = subscribe(groupLabel, (value) => $groupLabel = value);\n const attrs = getAttrs(\"label\");\n if ($$props.asChild === void 0 && $$bindings.asChild && asChild !== void 0)\n $$bindings.asChild(asChild);\n if ($$props.el === void 0 && $$bindings.el && el !== void 0)\n $$bindings.el(el);\n builder = $groupLabel(id);\n {\n Object.assign(builder, attrs);\n }\n $$unsubscribe_groupLabel();\n return `${asChild ? `${slots.default ? slots.default({ builder }) : ``}` : `