@b1-road/react 0.1.0-alpha.0

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 (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +300 -0
  3. package/dist/__tests__/a11y.test.d.ts +1 -0
  4. package/dist/__tests__/contract-replay.test.d.ts +1 -0
  5. package/dist/__tests__/create-role-dialog.test.d.ts +1 -0
  6. package/dist/__tests__/form-errors.test.d.ts +1 -0
  7. package/dist/__tests__/pending-invitations.test.d.ts +1 -0
  8. package/dist/__tests__/setup.d.ts +0 -0
  9. package/dist/api/client.d.ts +253 -0
  10. package/dist/api/client.test.d.ts +1 -0
  11. package/dist/api/cookie-mode.test.d.ts +1 -0
  12. package/dist/api/errors.d.ts +107 -0
  13. package/dist/api/errors.test.d.ts +1 -0
  14. package/dist/api/hooks.d.ts +126 -0
  15. package/dist/api/hooks.test.d.ts +1 -0
  16. package/dist/api/mock-client.d.ts +121 -0
  17. package/dist/api/mock-client.test.d.ts +1 -0
  18. package/dist/api/types.d.ts +7 -0
  19. package/dist/appearance/appearance.d.ts +19 -0
  20. package/dist/components/BusinessUnitSwitcher.d.ts +15 -0
  21. package/dist/components/BusinessUnitsMgmt.d.ts +35 -0
  22. package/dist/components/business-units/BusinessUnitDetail.d.ts +6 -0
  23. package/dist/components/business-units/BusinessUnitList.d.ts +5 -0
  24. package/dist/components/business-units/BusinessUnitRow.d.ts +7 -0
  25. package/dist/components/business-units/BusinessUnitSettings.d.ts +5 -0
  26. package/dist/components/business-units/BusinessUnitsTab.d.ts +5 -0
  27. package/dist/components/business-units/CreateBusinessUnitForm.d.ts +6 -0
  28. package/dist/components/business-units/MembersList.d.ts +5 -0
  29. package/dist/components/business-units/PendingInvitations.d.ts +15 -0
  30. package/dist/components/invitations/InvitationsList.d.ts +7 -0
  31. package/dist/components/invitations/InvitationsTab.d.ts +5 -0
  32. package/dist/components/invitations/InviteForm.d.ts +7 -0
  33. package/dist/components/roles/BUSelector.d.ts +8 -0
  34. package/dist/components/roles/CreateRoleDialog.d.ts +8 -0
  35. package/dist/components/roles/PermissionPicker.d.ts +10 -0
  36. package/dist/components/roles/RoleEditor.d.ts +7 -0
  37. package/dist/components/roles/RoleRow.d.ts +7 -0
  38. package/dist/components/roles/RolesList.d.ts +7 -0
  39. package/dist/components/roles/RolesTab.d.ts +1 -0
  40. package/dist/components/shared/Avatar.d.ts +7 -0
  41. package/dist/components/shared/EmptyState.d.ts +10 -0
  42. package/dist/components/shared/LoadMoreFooter.d.ts +18 -0
  43. package/dist/i18n/context.d.ts +21 -0
  44. package/dist/i18n/en.d.ts +2 -0
  45. package/dist/i18n/pt-BR.d.ts +2 -0
  46. package/dist/i18n/types.d.ts +227 -0
  47. package/dist/index.cjs +56 -0
  48. package/dist/index.cjs.map +1 -0
  49. package/dist/index.d.ts +25 -0
  50. package/dist/index.js +16566 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/lib/cn.d.ts +2 -0
  53. package/dist/lib/use-form-errors.d.ts +34 -0
  54. package/dist/provider/RoadProvider.d.ts +93 -0
  55. package/dist/provider/context.d.ts +12 -0
  56. package/dist/provider/cookie-mode-integration.test.d.ts +1 -0
  57. package/dist/provider/current-business-unit.d.ts +37 -0
  58. package/dist/provider/current-business-unit.test.d.ts +1 -0
  59. package/dist/provider/strict-mode-checks.test.d.ts +1 -0
  60. package/dist/style.css +1 -0
  61. package/dist/ui/alert-dialog.d.ts +8 -0
  62. package/dist/ui/badge.d.ts +9 -0
  63. package/dist/ui/button.d.ts +11 -0
  64. package/dist/ui/checkbox.d.ts +2 -0
  65. package/dist/ui/dialog.d.ts +17 -0
  66. package/dist/ui/dropdown-menu.d.ts +10 -0
  67. package/dist/ui/field.d.ts +26 -0
  68. package/dist/ui/input.d.ts +4 -0
  69. package/dist/ui/label.d.ts +2 -0
  70. package/dist/ui/select.d.ts +6 -0
  71. package/dist/ui/skeleton.d.ts +2 -0
  72. package/dist/ui/tabs.d.ts +5 -0
  73. package/dist/ui/textarea.d.ts +2 -0
  74. package/dist/ui/tooltip.d.ts +5 -0
  75. package/package.json +126 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../node_modules/@tanstack/query-core/build/modern/subscribable.js","../node_modules/@tanstack/query-core/build/modern/focusManager.js","../node_modules/@tanstack/query-core/build/modern/timeoutManager.js","../node_modules/@tanstack/query-core/build/modern/utils.js","../node_modules/@tanstack/query-core/build/modern/environmentManager.js","../node_modules/@tanstack/query-core/build/modern/thenable.js","../node_modules/@tanstack/query-core/build/modern/notifyManager.js","../node_modules/@tanstack/query-core/build/modern/onlineManager.js","../node_modules/@tanstack/query-core/build/modern/retryer.js","../node_modules/@tanstack/query-core/build/modern/removable.js","../node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../node_modules/@tanstack/query-core/build/modern/query.js","../node_modules/@tanstack/query-core/build/modern/queryObserver.js","../node_modules/@tanstack/query-core/build/modern/infiniteQueryObserver.js","../node_modules/@tanstack/query-core/build/modern/mutation.js","../node_modules/@tanstack/query-core/build/modern/mutationCache.js","../node_modules/@tanstack/query-core/build/modern/mutationObserver.js","../node_modules/@tanstack/query-core/build/modern/queryCache.js","../node_modules/@tanstack/query-core/build/modern/queryClient.js","../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js","../node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.js","../node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js","../node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js","../node_modules/@tanstack/react-query/build/modern/suspense.js","../node_modules/@tanstack/react-query/build/modern/useBaseQuery.js","../node_modules/@tanstack/react-query/build/modern/useQuery.js","../node_modules/@tanstack/react-query/build/modern/useMutation.js","../node_modules/@tanstack/react-query/build/modern/useInfiniteQuery.js","../node_modules/sonner/dist/index.mjs","../src/provider/context.ts","../src/api/hooks.ts","../src/provider/current-business-unit.tsx","../src/appearance/appearance.ts","../src/api/errors.ts","../src/api/client.ts","../node_modules/clsx/dist/clsx.mjs","../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/lib/cn.ts","../src/provider/RoadProvider.tsx","../node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/class-variance-authority/dist/index.mjs","../src/ui/button.tsx","../node_modules/@radix-ui/primitive/dist/index.mjs","../node_modules/@radix-ui/react-context/dist/index.mjs","../node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../node_modules/@radix-ui/react-id/dist/index.mjs","../node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs","../node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../node_modules/@radix-ui/react-portal/dist/index.mjs","../node_modules/@radix-ui/react-presence/dist/index.mjs","../node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../node_modules/tslib/tslib.es6.mjs","../node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../node_modules/use-callback-ref/dist/es2015/assignRef.js","../node_modules/use-callback-ref/dist/es2015/useRef.js","../node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../node_modules/use-sidecar/dist/es2015/medium.js","../node_modules/use-sidecar/dist/es2015/exports.js","../node_modules/react-remove-scroll/dist/es2015/medium.js","../node_modules/react-remove-scroll/dist/es2015/UI.js","../node_modules/get-nonce/dist/es2015/index.js","../node_modules/react-style-singleton/dist/es2015/singleton.js","../node_modules/react-style-singleton/dist/es2015/hook.js","../node_modules/react-style-singleton/dist/es2015/component.js","../node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../node_modules/react-remove-scroll-bar/dist/es2015/component.js","../node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../node_modules/react-remove-scroll/dist/es2015/sidecar.js","../node_modules/react-remove-scroll/dist/es2015/Combination.js","../node_modules/aria-hidden/dist/es2015/index.js","../node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-dialog/dist/index.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js","../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js","../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js","../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/arrow-left.js","../node_modules/lucide-react/dist/esm/icons/building-2.js","../node_modules/lucide-react/dist/esm/icons/check.js","../node_modules/lucide-react/dist/esm/icons/chevron-down.js","../node_modules/lucide-react/dist/esm/icons/chevron-right.js","../node_modules/lucide-react/dist/esm/icons/circle-alert.js","../node_modules/lucide-react/dist/esm/icons/copy.js","../node_modules/lucide-react/dist/esm/icons/loader-circle.js","../node_modules/lucide-react/dist/esm/icons/lock.js","../node_modules/lucide-react/dist/esm/icons/mail.js","../node_modules/lucide-react/dist/esm/icons/minus.js","../node_modules/lucide-react/dist/esm/icons/pause.js","../node_modules/lucide-react/dist/esm/icons/play.js","../node_modules/lucide-react/dist/esm/icons/plus.js","../node_modules/lucide-react/dist/esm/icons/refresh-cw.js","../node_modules/lucide-react/dist/esm/icons/rotate-cw.js","../node_modules/lucide-react/dist/esm/icons/search.js","../node_modules/lucide-react/dist/esm/icons/settings.js","../node_modules/lucide-react/dist/esm/icons/shield-check.js","../node_modules/lucide-react/dist/esm/icons/sparkles.js","../node_modules/lucide-react/dist/esm/icons/trash-2.js","../node_modules/lucide-react/dist/esm/icons/users.js","../node_modules/lucide-react/dist/esm/icons/x.js","../src/ui/dialog.tsx","../node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-collection/dist/index.mjs","../node_modules/@radix-ui/react-direction/dist/index.mjs","../node_modules/@radix-ui/react-roving-focus/dist/index.mjs","../node_modules/@radix-ui/react-tabs/dist/index.mjs","../src/ui/tabs.tsx","../src/i18n/en.ts","../src/i18n/pt-BR.ts","../src/i18n/context.ts","../src/ui/input.tsx","../src/ui/skeleton.tsx","../src/components/shared/EmptyState.tsx","../src/components/shared/Avatar.tsx","../src/ui/badge.tsx","../src/components/business-units/BusinessUnitRow.tsx","../src/ui/label.tsx","../src/ui/field.tsx","../src/lib/use-form-errors.ts","../src/components/business-units/CreateBusinessUnitForm.tsx","../src/components/business-units/PendingInvitations.tsx","../src/components/business-units/BusinessUnitList.tsx","../node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-alert-dialog/dist/index.mjs","../src/ui/alert-dialog.tsx","../src/components/shared/LoadMoreFooter.tsx","../src/components/business-units/MembersList.tsx","../src/components/business-units/BusinessUnitSettings.tsx","../node_modules/@radix-ui/number/dist/index.mjs","../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../node_modules/@radix-ui/react-arrow/dist/index.mjs","../node_modules/@radix-ui/react-use-size/dist/index.mjs","../node_modules/@radix-ui/react-popper/dist/index.mjs","../node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-use-previous/dist/index.mjs","../node_modules/@radix-ui/react-visually-hidden/dist/index.mjs","../node_modules/@radix-ui/react-select/dist/index.mjs","../src/ui/select.tsx","../src/components/invitations/InviteForm.tsx","../src/components/invitations/InvitationsList.tsx","../src/components/invitations/InvitationsTab.tsx","../src/components/business-units/BusinessUnitDetail.tsx","../src/components/business-units/BusinessUnitsTab.tsx","../src/components/roles/BUSelector.tsx","../src/components/roles/RoleRow.tsx","../src/components/roles/RolesList.tsx","../src/ui/textarea.tsx","../node_modules/@radix-ui/react-checkbox/dist/index.mjs","../src/ui/checkbox.tsx","../src/components/roles/PermissionPicker.tsx","../src/components/roles/RoleEditor.tsx","../src/components/roles/CreateRoleDialog.tsx","../src/components/roles/RolesTab.tsx","../src/components/BusinessUnitsMgmt.tsx","../node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-menu/dist/index.mjs","../node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs","../src/ui/dropdown-menu.tsx","../node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-tooltip/dist/index.mjs","../src/ui/tooltip.tsx","../src/components/BusinessUnitSwitcher.tsx","../src/api/mock-client.ts"],"sourcesContent":["// src/subscribable.ts\nvar Subscribable = class {\n constructor() {\n this.listeners = /* @__PURE__ */ new Set();\n this.subscribe = this.subscribe.bind(this);\n }\n subscribe(listener) {\n this.listeners.add(listener);\n this.onSubscribe();\n return () => {\n this.listeners.delete(listener);\n this.onUnsubscribe();\n };\n }\n hasListeners() {\n return this.listeners.size > 0;\n }\n onSubscribe() {\n }\n onUnsubscribe() {\n }\n};\nexport {\n Subscribable\n};\n//# sourceMappingURL=subscribable.js.map","// src/focusManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nvar FocusManager = class extends Subscribable {\n #focused;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onFocus) => {\n if (typeof window !== \"undefined\" && window.addEventListener) {\n const listener = () => onFocus();\n window.addEventListener(\"visibilitychange\", listener, false);\n return () => {\n window.removeEventListener(\"visibilitychange\", listener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup((focused) => {\n if (typeof focused === \"boolean\") {\n this.setFocused(focused);\n } else {\n this.onFocus();\n }\n });\n }\n setFocused(focused) {\n const changed = this.#focused !== focused;\n if (changed) {\n this.#focused = focused;\n this.onFocus();\n }\n }\n onFocus() {\n const isFocused = this.isFocused();\n this.listeners.forEach((listener) => {\n listener(isFocused);\n });\n }\n isFocused() {\n if (typeof this.#focused === \"boolean\") {\n return this.#focused;\n }\n return globalThis.document?.visibilityState !== \"hidden\";\n }\n};\nvar focusManager = new FocusManager();\nexport {\n FocusManager,\n focusManager\n};\n//# sourceMappingURL=focusManager.js.map","// src/timeoutManager.ts\nvar defaultTimeoutProvider = {\n // We need the wrapper function syntax below instead of direct references to\n // global setTimeout etc.\n //\n // BAD: `setTimeout: setTimeout`\n // GOOD: `setTimeout: (cb, delay) => setTimeout(cb, delay)`\n //\n // If we use direct references here, then anything that wants to spy on or\n // replace the global setTimeout (like tests) won't work since we'll already\n // have a hard reference to the original implementation at the time when this\n // file was imported.\n setTimeout: (callback, delay) => setTimeout(callback, delay),\n clearTimeout: (timeoutId) => clearTimeout(timeoutId),\n setInterval: (callback, delay) => setInterval(callback, delay),\n clearInterval: (intervalId) => clearInterval(intervalId)\n};\nvar TimeoutManager = class {\n // We cannot have TimeoutManager<T> as we must instantiate it with a concrete\n // type at app boot; and if we leave that type, then any new timer provider\n // would need to support the default provider's concrete timer ID, which is\n // infeasible across environments.\n //\n // We settle for type safety for the TimeoutProvider type, and accept that\n // this class is unsafe internally to allow for extension.\n #provider = defaultTimeoutProvider;\n #providerCalled = false;\n setTimeoutProvider(provider) {\n if (process.env.NODE_ENV !== \"production\") {\n if (this.#providerCalled && provider !== this.#provider) {\n console.error(\n `[timeoutManager]: Switching provider after calls to previous provider might result in unexpected behavior.`,\n { previous: this.#provider, provider }\n );\n }\n }\n this.#provider = provider;\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = false;\n }\n }\n setTimeout(callback, delay) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = true;\n }\n return this.#provider.setTimeout(callback, delay);\n }\n clearTimeout(timeoutId) {\n this.#provider.clearTimeout(timeoutId);\n }\n setInterval(callback, delay) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = true;\n }\n return this.#provider.setInterval(callback, delay);\n }\n clearInterval(intervalId) {\n this.#provider.clearInterval(intervalId);\n }\n};\nvar timeoutManager = new TimeoutManager();\nfunction systemSetTimeoutZero(callback) {\n setTimeout(callback, 0);\n}\nexport {\n TimeoutManager,\n defaultTimeoutProvider,\n systemSetTimeoutZero,\n timeoutManager\n};\n//# sourceMappingURL=timeoutManager.js.map","// src/utils.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar isServer = typeof window === \"undefined\" || \"Deno\" in globalThis;\nfunction noop() {\n}\nfunction functionalUpdate(updater, input) {\n return typeof updater === \"function\" ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n return typeof value === \"number\" && value >= 0 && value !== Infinity;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction resolveStaleTime(staleTime, query) {\n return typeof staleTime === \"function\" ? staleTime(query) : staleTime;\n}\nfunction resolveQueryBoolean(option, query) {\n return typeof option === \"function\" ? option(query) : option;\n}\nfunction matchQuery(filters, query) {\n const {\n type = \"all\",\n exact,\n fetchStatus,\n predicate,\n queryKey,\n stale\n } = filters;\n if (queryKey) {\n if (exact) {\n if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n return false;\n }\n } else if (!partialMatchKey(query.queryKey, queryKey)) {\n return false;\n }\n }\n if (type !== \"all\") {\n const isActive = query.isActive();\n if (type === \"active\" && !isActive) {\n return false;\n }\n if (type === \"inactive\" && isActive) {\n return false;\n }\n }\n if (typeof stale === \"boolean\" && query.isStale() !== stale) {\n return false;\n }\n if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n return false;\n }\n if (predicate && !predicate(query)) {\n return false;\n }\n return true;\n}\nfunction matchMutation(filters, mutation) {\n const { exact, status, predicate, mutationKey } = filters;\n if (mutationKey) {\n if (!mutation.options.mutationKey) {\n return false;\n }\n if (exact) {\n if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n return false;\n }\n } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n return false;\n }\n }\n if (status && mutation.state.status !== status) {\n return false;\n }\n if (predicate && !predicate(mutation)) {\n return false;\n }\n return true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n const hashFn = options?.queryKeyHashFn || hashKey;\n return hashFn(queryKey);\n}\nfunction hashKey(queryKey) {\n return JSON.stringify(\n queryKey,\n (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n result[key] = val[key];\n return result;\n }, {}) : val\n );\n}\nfunction partialMatchKey(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n return Object.keys(b).every((key) => partialMatchKey(a[key], b[key]));\n }\n return false;\n}\nvar hasOwn = Object.prototype.hasOwnProperty;\nfunction replaceEqualDeep(a, b, depth = 0) {\n if (a === b) {\n return a;\n }\n if (depth > 500) return b;\n const array = isPlainArray(a) && isPlainArray(b);\n if (!array && !(isPlainObject(a) && isPlainObject(b))) return b;\n const aItems = array ? a : Object.keys(a);\n const aSize = aItems.length;\n const bItems = array ? b : Object.keys(b);\n const bSize = bItems.length;\n const copy = array ? new Array(bSize) : {};\n let equalItems = 0;\n for (let i = 0; i < bSize; i++) {\n const key = array ? i : bItems[i];\n const aItem = a[key];\n const bItem = b[key];\n if (aItem === bItem) {\n copy[key] = aItem;\n if (array ? i < aSize : hasOwn.call(a, key)) equalItems++;\n continue;\n }\n if (aItem === null || bItem === null || typeof aItem !== \"object\" || typeof bItem !== \"object\") {\n copy[key] = bItem;\n continue;\n }\n const v = replaceEqualDeep(aItem, bItem, depth + 1);\n copy[key] = v;\n if (v === aItem) equalItems++;\n }\n return aSize === bSize && equalItems === aSize ? a : copy;\n}\nfunction shallowEqualObjects(a, b) {\n if (!b || Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n for (const key in a) {\n if (a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n}\nfunction isPlainArray(value) {\n return Array.isArray(value) && value.length === Object.keys(value).length;\n}\nfunction isPlainObject(o) {\n if (!hasObjectPrototype(o)) {\n return false;\n }\n const ctor = o.constructor;\n if (ctor === void 0) {\n return true;\n }\n const prot = ctor.prototype;\n if (!hasObjectPrototype(prot)) {\n return false;\n }\n if (!prot.hasOwnProperty(\"isPrototypeOf\")) {\n return false;\n }\n if (Object.getPrototypeOf(o) !== Object.prototype) {\n return false;\n }\n return true;\n}\nfunction hasObjectPrototype(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction sleep(timeout) {\n return new Promise((resolve) => {\n timeoutManager.setTimeout(resolve, timeout);\n });\n}\nfunction replaceData(prevData, data, options) {\n if (typeof options.structuralSharing === \"function\") {\n return options.structuralSharing(prevData, data);\n } else if (options.structuralSharing !== false) {\n if (process.env.NODE_ENV !== \"production\") {\n try {\n return replaceEqualDeep(prevData, data);\n } catch (error) {\n console.error(\n `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`\n );\n throw error;\n }\n }\n return replaceEqualDeep(prevData, data);\n }\n return data;\n}\nfunction keepPreviousData(previousData) {\n return previousData;\n}\nfunction addToEnd(items, item, max = 0) {\n const newItems = [...items, item];\n return max && newItems.length > max ? newItems.slice(1) : newItems;\n}\nfunction addToStart(items, item, max = 0) {\n const newItems = [item, ...items];\n return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n}\nvar skipToken = /* @__PURE__ */ Symbol();\nfunction ensureQueryFn(options, fetchOptions) {\n if (process.env.NODE_ENV !== \"production\") {\n if (options.queryFn === skipToken) {\n console.error(\n `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`\n );\n }\n }\n if (!options.queryFn && fetchOptions?.initialPromise) {\n return () => fetchOptions.initialPromise;\n }\n if (!options.queryFn || options.queryFn === skipToken) {\n return () => Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`));\n }\n return options.queryFn;\n}\nfunction shouldThrowError(throwOnError, params) {\n if (typeof throwOnError === \"function\") {\n return throwOnError(...params);\n }\n return !!throwOnError;\n}\nfunction addConsumeAwareSignal(object, getSignal, onCancelled) {\n let consumed = false;\n let signal;\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n signal ??= getSignal();\n if (consumed) {\n return signal;\n }\n consumed = true;\n if (signal.aborted) {\n onCancelled();\n } else {\n signal.addEventListener(\"abort\", onCancelled, { once: true });\n }\n return signal;\n }\n });\n return object;\n}\nexport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn,\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n isPlainArray,\n isPlainObject,\n isServer,\n isValidTimeout,\n keepPreviousData,\n matchMutation,\n matchQuery,\n noop,\n partialMatchKey,\n replaceData,\n replaceEqualDeep,\n resolveQueryBoolean,\n resolveStaleTime,\n shallowEqualObjects,\n shouldThrowError,\n skipToken,\n sleep,\n timeUntilStale\n};\n//# sourceMappingURL=utils.js.map","// src/environmentManager.ts\nimport { isServer } from \"./utils.js\";\nvar environmentManager = /* @__PURE__ */ (() => {\n let isServerFn = () => isServer;\n return {\n /**\n * Returns whether the current runtime should be treated as a server environment.\n */\n isServer() {\n return isServerFn();\n },\n /**\n * Overrides the server check globally.\n */\n setIsServer(isServerValue) {\n isServerFn = isServerValue;\n }\n };\n})();\nexport {\n environmentManager\n};\n//# sourceMappingURL=environmentManager.js.map","// src/thenable.ts\nimport { noop } from \"./utils.js\";\nfunction pendingThenable() {\n let resolve;\n let reject;\n const thenable = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n thenable.status = \"pending\";\n thenable.catch(() => {\n });\n function finalize(data) {\n Object.assign(thenable, data);\n delete thenable.resolve;\n delete thenable.reject;\n }\n thenable.resolve = (value) => {\n finalize({\n status: \"fulfilled\",\n value\n });\n resolve(value);\n };\n thenable.reject = (reason) => {\n finalize({\n status: \"rejected\",\n reason\n });\n reject(reason);\n };\n return thenable;\n}\nfunction tryResolveSync(promise) {\n let data;\n promise.then((result) => {\n data = result;\n return result;\n }, noop)?.catch(noop);\n if (data !== void 0) {\n return { data };\n }\n return void 0;\n}\nexport {\n pendingThenable,\n tryResolveSync\n};\n//# sourceMappingURL=thenable.js.map","// src/notifyManager.ts\nimport { systemSetTimeoutZero } from \"./timeoutManager.js\";\nvar defaultScheduler = systemSetTimeoutZero;\nfunction createNotifyManager() {\n let queue = [];\n let transactions = 0;\n let notifyFn = (callback) => {\n callback();\n };\n let batchNotifyFn = (callback) => {\n callback();\n };\n let scheduleFn = defaultScheduler;\n const schedule = (callback) => {\n if (transactions) {\n queue.push(callback);\n } else {\n scheduleFn(() => {\n notifyFn(callback);\n });\n }\n };\n const flush = () => {\n const originalQueue = queue;\n queue = [];\n if (originalQueue.length) {\n scheduleFn(() => {\n batchNotifyFn(() => {\n originalQueue.forEach((callback) => {\n notifyFn(callback);\n });\n });\n });\n }\n };\n return {\n batch: (callback) => {\n let result;\n transactions++;\n try {\n result = callback();\n } finally {\n transactions--;\n if (!transactions) {\n flush();\n }\n }\n return result;\n },\n /**\n * All calls to the wrapped function will be batched.\n */\n batchCalls: (callback) => {\n return (...args) => {\n schedule(() => {\n callback(...args);\n });\n };\n },\n schedule,\n /**\n * Use this method to set a custom notify function.\n * This can be used to for example wrap notifications with `React.act` while running tests.\n */\n setNotifyFunction: (fn) => {\n notifyFn = fn;\n },\n /**\n * Use this method to set a custom function to batch notifications together into a single tick.\n * By default React Query will use the batch function provided by ReactDOM or React Native.\n */\n setBatchNotifyFunction: (fn) => {\n batchNotifyFn = fn;\n },\n setScheduler: (fn) => {\n scheduleFn = fn;\n }\n };\n}\nvar notifyManager = createNotifyManager();\nexport {\n createNotifyManager,\n defaultScheduler,\n notifyManager\n};\n//# sourceMappingURL=notifyManager.js.map","// src/onlineManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nvar OnlineManager = class extends Subscribable {\n #online = true;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onOnline) => {\n if (typeof window !== \"undefined\" && window.addEventListener) {\n const onlineListener = () => onOnline(true);\n const offlineListener = () => onOnline(false);\n window.addEventListener(\"online\", onlineListener, false);\n window.addEventListener(\"offline\", offlineListener, false);\n return () => {\n window.removeEventListener(\"online\", onlineListener);\n window.removeEventListener(\"offline\", offlineListener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup(this.setOnline.bind(this));\n }\n setOnline(online) {\n const changed = this.#online !== online;\n if (changed) {\n this.#online = online;\n this.listeners.forEach((listener) => {\n listener(online);\n });\n }\n }\n isOnline() {\n return this.#online;\n }\n};\nvar onlineManager = new OnlineManager();\nexport {\n OnlineManager,\n onlineManager\n};\n//# sourceMappingURL=onlineManager.js.map","// src/retryer.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { sleep } from \"./utils.js\";\nfunction defaultRetryDelay(failureCount) {\n return Math.min(1e3 * 2 ** failureCount, 3e4);\n}\nfunction canFetch(networkMode) {\n return (networkMode ?? \"online\") === \"online\" ? onlineManager.isOnline() : true;\n}\nvar CancelledError = class extends Error {\n constructor(options) {\n super(\"CancelledError\");\n this.revert = options?.revert;\n this.silent = options?.silent;\n }\n};\nfunction isCancelledError(value) {\n return value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n let isRetryCancelled = false;\n let failureCount = 0;\n let continueFn;\n const thenable = pendingThenable();\n const isResolved = () => thenable.status !== \"pending\";\n const cancel = (cancelOptions) => {\n if (!isResolved()) {\n const error = new CancelledError(cancelOptions);\n reject(error);\n config.onCancel?.(error);\n }\n };\n const cancelRetry = () => {\n isRetryCancelled = true;\n };\n const continueRetry = () => {\n isRetryCancelled = false;\n };\n const canContinue = () => focusManager.isFocused() && (config.networkMode === \"always\" || onlineManager.isOnline()) && config.canRun();\n const canStart = () => canFetch(config.networkMode) && config.canRun();\n const resolve = (value) => {\n if (!isResolved()) {\n continueFn?.();\n thenable.resolve(value);\n }\n };\n const reject = (value) => {\n if (!isResolved()) {\n continueFn?.();\n thenable.reject(value);\n }\n };\n const pause = () => {\n return new Promise((continueResolve) => {\n continueFn = (value) => {\n if (isResolved() || canContinue()) {\n continueResolve(value);\n }\n };\n config.onPause?.();\n }).then(() => {\n continueFn = void 0;\n if (!isResolved()) {\n config.onContinue?.();\n }\n });\n };\n const run = () => {\n if (isResolved()) {\n return;\n }\n let promiseOrValue;\n const initialPromise = failureCount === 0 ? config.initialPromise : void 0;\n try {\n promiseOrValue = initialPromise ?? config.fn();\n } catch (error) {\n promiseOrValue = Promise.reject(error);\n }\n Promise.resolve(promiseOrValue).then(resolve).catch((error) => {\n if (isResolved()) {\n return;\n }\n const retry = config.retry ?? (environmentManager.isServer() ? 0 : 3);\n const retryDelay = config.retryDelay ?? defaultRetryDelay;\n const delay = typeof retryDelay === \"function\" ? retryDelay(failureCount, error) : retryDelay;\n const shouldRetry = retry === true || typeof retry === \"number\" && failureCount < retry || typeof retry === \"function\" && retry(failureCount, error);\n if (isRetryCancelled || !shouldRetry) {\n reject(error);\n return;\n }\n failureCount++;\n config.onFail?.(failureCount, error);\n sleep(delay).then(() => {\n return canContinue() ? void 0 : pause();\n }).then(() => {\n if (isRetryCancelled) {\n reject(error);\n } else {\n run();\n }\n });\n });\n };\n return {\n promise: thenable,\n status: () => thenable.status,\n cancel,\n continue: () => {\n continueFn?.();\n return thenable;\n },\n cancelRetry,\n continueRetry,\n canStart,\n start: () => {\n if (canStart()) {\n run();\n } else {\n pause().then(run);\n }\n return thenable;\n }\n };\n}\nexport {\n CancelledError,\n canFetch,\n createRetryer,\n isCancelledError\n};\n//# sourceMappingURL=retryer.js.map","// src/removable.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { isValidTimeout } from \"./utils.js\";\nvar Removable = class {\n #gcTimeout;\n destroy() {\n this.clearGcTimeout();\n }\n scheduleGc() {\n this.clearGcTimeout();\n if (isValidTimeout(this.gcTime)) {\n this.#gcTimeout = timeoutManager.setTimeout(() => {\n this.optionalRemove();\n }, this.gcTime);\n }\n }\n updateGcTime(newGcTime) {\n this.gcTime = Math.max(\n this.gcTime || 0,\n newGcTime ?? (environmentManager.isServer() ? Infinity : 5 * 60 * 1e3)\n );\n }\n clearGcTimeout() {\n if (this.#gcTimeout !== void 0) {\n timeoutManager.clearTimeout(this.#gcTimeout);\n this.#gcTimeout = void 0;\n }\n }\n};\nexport {\n Removable\n};\n//# sourceMappingURL=removable.js.map","// src/infiniteQueryBehavior.ts\nimport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn\n} from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n return {\n onFetch: (context, query) => {\n const options = context.options;\n const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n const oldPages = context.state.data?.pages || [];\n const oldPageParams = context.state.data?.pageParams || [];\n let result = { pages: [], pageParams: [] };\n let currentPage = 0;\n const fetchFn = async () => {\n let cancelled = false;\n const addSignalProperty = (object) => {\n addConsumeAwareSignal(\n object,\n () => context.signal,\n () => cancelled = true\n );\n };\n const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n const fetchPage = async (data, param, previous) => {\n if (cancelled) {\n return Promise.reject(context.signal.reason);\n }\n if (param == null && data.pages.length) {\n return Promise.resolve(data);\n }\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: context.client,\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? \"backward\" : \"forward\",\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n const page = await queryFn(queryFnContext);\n const { maxPages } = context.options;\n const addTo = previous ? addToStart : addToEnd;\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n };\n };\n if (direction && oldPages.length) {\n const previous = direction === \"backward\";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams\n };\n const param = pageParamFn(options, oldData);\n result = await fetchPage(oldData, param, previous);\n } else {\n const remainingPages = pages ?? oldPages.length;\n do {\n const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n if (currentPage > 0 && param == null) {\n break;\n }\n result = await fetchPage(result, param);\n currentPage++;\n } while (currentPage < remainingPages);\n }\n return result;\n };\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn,\n {\n client: context.client,\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal\n },\n query\n );\n };\n } else {\n context.fetchFn = fetchFn;\n }\n }\n };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n const lastIndex = pages.length - 1;\n return pages.length > 0 ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams\n ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n if (!data) return false;\n return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam) return false;\n return getPreviousPageParam(options, data) != null;\n}\nexport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/query.ts\nimport {\n ensureQueryFn,\n noop,\n replaceData,\n resolveQueryBoolean,\n resolveStaleTime,\n skipToken,\n timeUntilStale\n} from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { CancelledError, canFetch, createRetryer } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar Query = class extends Removable {\n #queryType;\n #initialState;\n #revertState;\n #cache;\n #client;\n #retryer;\n #defaultOptions;\n #abortSignalConsumed;\n constructor(config) {\n super();\n this.#abortSignalConsumed = false;\n this.#defaultOptions = config.defaultOptions;\n this.setOptions(config.options);\n this.observers = [];\n this.#client = config.client;\n this.#cache = this.#client.getQueryCache();\n this.queryKey = config.queryKey;\n this.queryHash = config.queryHash;\n this.#initialState = getDefaultState(this.options);\n this.state = config.state ?? this.#initialState;\n this.scheduleGc();\n }\n get meta() {\n return this.options.meta;\n }\n get queryType() {\n return this.#queryType;\n }\n get promise() {\n return this.#retryer?.promise;\n }\n setOptions(options) {\n this.options = { ...this.#defaultOptions, ...options };\n if (options?._type) {\n this.#queryType = options._type;\n }\n this.updateGcTime(this.options.gcTime);\n if (this.state && this.state.data === void 0) {\n const defaultState = getDefaultState(this.options);\n if (defaultState.data !== void 0) {\n this.setState(\n successState(defaultState.data, defaultState.dataUpdatedAt)\n );\n this.#initialState = defaultState;\n }\n }\n }\n optionalRemove() {\n if (!this.observers.length && this.state.fetchStatus === \"idle\") {\n this.#cache.remove(this);\n }\n }\n setData(newData, options) {\n const data = replaceData(this.state.data, newData, this.options);\n this.#dispatch({\n data,\n type: \"success\",\n dataUpdatedAt: options?.updatedAt,\n manual: options?.manual\n });\n return data;\n }\n setState(state) {\n this.#dispatch({ type: \"setState\", state });\n }\n cancel(options) {\n const promise = this.#retryer?.promise;\n this.#retryer?.cancel(options);\n return promise ? promise.then(noop).catch(noop) : Promise.resolve();\n }\n destroy() {\n super.destroy();\n this.cancel({ silent: true });\n }\n get resetState() {\n return this.#initialState;\n }\n reset() {\n this.destroy();\n this.setState(this.resetState);\n }\n isActive() {\n return this.observers.some(\n (observer) => resolveQueryBoolean(observer.options.enabled, this) !== false\n );\n }\n isDisabled() {\n if (this.getObserversCount() > 0) {\n return !this.isActive();\n }\n return this.options.queryFn === skipToken || !this.isFetched();\n }\n isFetched() {\n return this.state.dataUpdateCount + this.state.errorUpdateCount > 0;\n }\n isStatic() {\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => resolveStaleTime(observer.options.staleTime, this) === \"static\"\n );\n }\n return false;\n }\n isStale() {\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => observer.getCurrentResult().isStale\n );\n }\n return this.state.data === void 0 || this.state.isInvalidated;\n }\n isStaleByTime(staleTime = 0) {\n if (this.state.data === void 0) {\n return true;\n }\n if (staleTime === \"static\") {\n return false;\n }\n if (this.state.isInvalidated) {\n return true;\n }\n return !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n }\n onFocus() {\n const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n onOnline() {\n const observer = this.observers.find((x) => x.shouldFetchOnReconnect());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n addObserver(observer) {\n if (!this.observers.includes(observer)) {\n this.observers.push(observer);\n this.clearGcTimeout();\n this.#cache.notify({ type: \"observerAdded\", query: this, observer });\n }\n }\n removeObserver(observer) {\n if (this.observers.includes(observer)) {\n this.observers = this.observers.filter((x) => x !== observer);\n if (!this.observers.length) {\n if (this.#retryer) {\n if (this.#abortSignalConsumed || this.#isInitialPausedFetch()) {\n this.#retryer.cancel({ revert: true });\n } else {\n this.#retryer.cancelRetry();\n }\n }\n this.scheduleGc();\n }\n this.#cache.notify({ type: \"observerRemoved\", query: this, observer });\n }\n }\n getObserversCount() {\n return this.observers.length;\n }\n #isInitialPausedFetch() {\n return this.state.fetchStatus === \"paused\" && this.state.status === \"pending\";\n }\n invalidate() {\n if (!this.state.isInvalidated) {\n this.#dispatch({ type: \"invalidate\" });\n }\n }\n async fetch(options, fetchOptions) {\n if (this.state.fetchStatus !== \"idle\" && // If the promise in the retryer is already rejected, we have to definitely\n // re-start the fetch; there is a chance that the query is still in a\n // pending state when that happens\n this.#retryer?.status() !== \"rejected\") {\n if (this.state.data !== void 0 && fetchOptions?.cancelRefetch) {\n this.cancel({ silent: true });\n } else if (this.#retryer) {\n this.#retryer.continueRetry();\n return this.#retryer.promise;\n }\n }\n if (options) {\n this.setOptions(options);\n }\n if (!this.options.queryFn) {\n const observer = this.observers.find((x) => x.options.queryFn);\n if (observer) {\n this.setOptions(observer.options);\n }\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (!Array.isArray(this.options.queryKey)) {\n console.error(\n `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`\n );\n }\n }\n const abortController = new AbortController();\n const addSignalProperty = (object) => {\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n this.#abortSignalConsumed = true;\n return abortController.signal;\n }\n });\n };\n const fetchFn = () => {\n const queryFn = ensureQueryFn(this.options, fetchOptions);\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: this.#client,\n queryKey: this.queryKey,\n meta: this.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n this.#abortSignalConsumed = false;\n if (this.options.persister) {\n return this.options.persister(\n queryFn,\n queryFnContext,\n this\n );\n }\n return queryFn(queryFnContext);\n };\n const createFetchContext = () => {\n const context2 = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n client: this.#client,\n state: this.state,\n fetchFn\n };\n addSignalProperty(context2);\n return context2;\n };\n const context = createFetchContext();\n const behavior = this.#queryType === \"infinite\" ? infiniteQueryBehavior(\n this.options.pages\n ) : this.options.behavior;\n behavior?.onFetch(context, this);\n this.#revertState = this.state;\n if (this.state.fetchStatus === \"idle\" || this.state.fetchMeta !== context.fetchOptions?.meta) {\n this.#dispatch({ type: \"fetch\", meta: context.fetchOptions?.meta });\n }\n this.#retryer = createRetryer({\n initialPromise: fetchOptions?.initialPromise,\n fn: context.fetchFn,\n onCancel: (error) => {\n if (error instanceof CancelledError && error.revert) {\n this.setState({\n ...this.#revertState,\n fetchStatus: \"idle\"\n });\n }\n abortController.abort();\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue: () => {\n this.#dispatch({ type: \"continue\" });\n },\n retry: context.options.retry,\n retryDelay: context.options.retryDelay,\n networkMode: context.options.networkMode,\n canRun: () => true\n });\n try {\n const data = await this.#retryer.start();\n if (data === void 0) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\n `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`\n );\n }\n throw new Error(`${this.queryHash} data is undefined`);\n }\n this.setData(data);\n this.#cache.config.onSuccess?.(data, this);\n this.#cache.config.onSettled?.(\n data,\n this.state.error,\n this\n );\n return data;\n } catch (error) {\n if (error instanceof CancelledError) {\n if (error.silent) {\n return this.#retryer.promise;\n } else if (error.revert) {\n if (this.state.data === void 0) {\n throw error;\n }\n return this.state.data;\n }\n }\n this.#dispatch({\n type: \"error\",\n error\n });\n this.#cache.config.onError?.(\n error,\n this\n );\n this.#cache.config.onSettled?.(\n this.state.data,\n error,\n this\n );\n throw error;\n } finally {\n this.scheduleGc();\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n fetchFailureCount: action.failureCount,\n fetchFailureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n fetchStatus: \"paused\"\n };\n case \"continue\":\n return {\n ...state,\n fetchStatus: \"fetching\"\n };\n case \"fetch\":\n return {\n ...state,\n ...fetchState(state.data, this.options),\n fetchMeta: action.meta ?? null\n };\n case \"success\":\n const newState = {\n ...state,\n ...successState(action.data, action.dataUpdatedAt),\n dataUpdateCount: state.dataUpdateCount + 1,\n ...!action.manual && {\n fetchStatus: \"idle\",\n fetchFailureCount: 0,\n fetchFailureReason: null\n }\n };\n this.#revertState = action.manual ? newState : void 0;\n return newState;\n case \"error\":\n const error = action.error;\n return {\n ...state,\n error,\n errorUpdateCount: state.errorUpdateCount + 1,\n errorUpdatedAt: Date.now(),\n fetchFailureCount: state.fetchFailureCount + 1,\n fetchFailureReason: error,\n fetchStatus: \"idle\",\n status: \"error\",\n // flag existing data as invalidated if we get a background error\n // note that \"no data\" always means stale so we can set unconditionally here\n isInvalidated: true\n };\n case \"invalidate\":\n return {\n ...state,\n isInvalidated: true\n };\n case \"setState\":\n return {\n ...state,\n ...action.state\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.observers.forEach((observer) => {\n observer.onQueryUpdate();\n });\n this.#cache.notify({ query: this, type: \"updated\", action });\n });\n }\n};\nfunction fetchState(data, options) {\n return {\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchStatus: canFetch(options.networkMode) ? \"fetching\" : \"paused\",\n ...data === void 0 && {\n error: null,\n status: \"pending\"\n }\n };\n}\nfunction successState(data, dataUpdatedAt) {\n return {\n data,\n dataUpdatedAt: dataUpdatedAt ?? Date.now(),\n error: null,\n isInvalidated: false,\n status: \"success\"\n };\n}\nfunction getDefaultState(options) {\n const data = typeof options.initialData === \"function\" ? options.initialData() : options.initialData;\n const hasData = data !== void 0;\n const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === \"function\" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n return {\n data,\n dataUpdateCount: 0,\n dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: hasData ? \"success\" : \"pending\",\n fetchStatus: \"idle\"\n };\n}\nexport {\n Query,\n fetchState\n};\n//# sourceMappingURL=query.js.map","// src/queryObserver.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { fetchState } from \"./query.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport {\n isValidTimeout,\n noop,\n replaceData,\n resolveQueryBoolean,\n resolveStaleTime,\n shallowEqualObjects,\n timeUntilStale\n} from \"./utils.js\";\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar QueryObserver = class extends Subscribable {\n constructor(client, options) {\n super();\n this.options = options;\n this.#client = client;\n this.#selectError = null;\n this.#currentThenable = pendingThenable();\n this.bindMethods();\n this.setOptions(options);\n }\n #client;\n #currentQuery = void 0;\n #currentQueryInitialState = void 0;\n #currentResult = void 0;\n #currentResultState;\n #currentResultOptions;\n #currentThenable;\n #selectError;\n #selectFn;\n #selectResult;\n // This property keeps track of the last query with defined data.\n // It will be used to pass the previous data and query to the placeholder function between renders.\n #lastQueryWithDefinedData;\n #staleTimeoutId;\n #refetchIntervalId;\n #currentRefetchInterval;\n #trackedProps = /* @__PURE__ */ new Set();\n bindMethods() {\n this.refetch = this.refetch.bind(this);\n }\n onSubscribe() {\n if (this.listeners.size === 1) {\n this.#currentQuery.addObserver(this);\n if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n this.#executeFetch();\n } else {\n this.updateResult();\n }\n this.#updateTimers();\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.destroy();\n }\n }\n shouldFetchOnReconnect() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnReconnect\n );\n }\n shouldFetchOnWindowFocus() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnWindowFocus\n );\n }\n destroy() {\n this.listeners = /* @__PURE__ */ new Set();\n this.#clearStaleTimeout();\n this.#clearRefetchInterval();\n this.#currentQuery.removeObserver(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n const prevQuery = this.#currentQuery;\n this.options = this.#client.defaultQueryOptions(options);\n if (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== \"boolean\") {\n throw new Error(\n \"Expected enabled to be a boolean or a callback that returns a boolean\"\n );\n }\n this.#updateQuery();\n this.#currentQuery.setOptions(this.options);\n if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getQueryCache().notify({\n type: \"observerOptionsUpdated\",\n query: this.#currentQuery,\n observer: this\n });\n }\n const mounted = this.hasListeners();\n if (mounted && shouldFetchOptionally(\n this.#currentQuery,\n prevQuery,\n this.options,\n prevOptions\n )) {\n this.#executeFetch();\n }\n this.updateResult();\n if (mounted && (this.#currentQuery !== prevQuery || resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== resolveQueryBoolean(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) {\n this.#updateStaleTimeout();\n }\n const nextRefetchInterval = this.#computeRefetchInterval();\n if (mounted && (this.#currentQuery !== prevQuery || resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== resolveQueryBoolean(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) {\n this.#updateRefetchInterval(nextRefetchInterval);\n }\n }\n getOptimisticResult(options) {\n const query = this.#client.getQueryCache().build(this.#client, options);\n const result = this.createResult(query, options);\n if (shouldAssignObserverCurrentProperties(this, result)) {\n this.#currentResult = result;\n this.#currentResultOptions = this.options;\n this.#currentResultState = this.#currentQuery.state;\n }\n return result;\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n trackResult(result, onPropTracked) {\n return new Proxy(result, {\n get: (target, key) => {\n this.trackProp(key);\n onPropTracked?.(key);\n if (key === \"promise\") {\n this.trackProp(\"data\");\n if (!this.options.experimental_prefetchInRender && this.#currentThenable.status === \"pending\") {\n this.#currentThenable.reject(\n new Error(\n \"experimental_prefetchInRender feature flag is not enabled\"\n )\n );\n }\n }\n return Reflect.get(target, key);\n }\n });\n }\n trackProp(key) {\n this.#trackedProps.add(key);\n }\n getCurrentQuery() {\n return this.#currentQuery;\n }\n refetch({ ...options } = {}) {\n return this.fetch({\n ...options\n });\n }\n fetchOptimistic(options) {\n const defaultedOptions = this.#client.defaultQueryOptions(options);\n const query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n return query.fetch().then(() => this.createResult(query, defaultedOptions));\n }\n fetch(fetchOptions) {\n return this.#executeFetch({\n ...fetchOptions,\n cancelRefetch: fetchOptions.cancelRefetch ?? true\n }).then(() => {\n this.updateResult();\n return this.#currentResult;\n });\n }\n #executeFetch(fetchOptions) {\n this.#updateQuery();\n let promise = this.#currentQuery.fetch(\n this.options,\n fetchOptions\n );\n if (!fetchOptions?.throwOnError) {\n promise = promise.catch(noop);\n }\n return promise;\n }\n #updateStaleTimeout() {\n this.#clearStaleTimeout();\n const staleTime = resolveStaleTime(\n this.options.staleTime,\n this.#currentQuery\n );\n if (environmentManager.isServer() || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n return;\n }\n const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime);\n const timeout = time + 1;\n this.#staleTimeoutId = timeoutManager.setTimeout(() => {\n if (!this.#currentResult.isStale) {\n this.updateResult();\n }\n }, timeout);\n }\n #computeRefetchInterval() {\n return (typeof this.options.refetchInterval === \"function\" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false;\n }\n #updateRefetchInterval(nextInterval) {\n this.#clearRefetchInterval();\n this.#currentRefetchInterval = nextInterval;\n if (environmentManager.isServer() || resolveQueryBoolean(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) {\n return;\n }\n this.#refetchIntervalId = timeoutManager.setInterval(() => {\n if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {\n this.#executeFetch();\n }\n }, this.#currentRefetchInterval);\n }\n #updateTimers() {\n this.#updateStaleTimeout();\n this.#updateRefetchInterval(this.#computeRefetchInterval());\n }\n #clearStaleTimeout() {\n if (this.#staleTimeoutId !== void 0) {\n timeoutManager.clearTimeout(this.#staleTimeoutId);\n this.#staleTimeoutId = void 0;\n }\n }\n #clearRefetchInterval() {\n if (this.#refetchIntervalId !== void 0) {\n timeoutManager.clearInterval(this.#refetchIntervalId);\n this.#refetchIntervalId = void 0;\n }\n }\n createResult(query, options) {\n const prevQuery = this.#currentQuery;\n const prevOptions = this.options;\n const prevResult = this.#currentResult;\n const prevResultState = this.#currentResultState;\n const prevResultOptions = this.#currentResultOptions;\n const queryChange = query !== prevQuery;\n const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;\n const { state } = query;\n let newState = { ...state };\n let isPlaceholderData = false;\n let data;\n if (options._optimisticResults) {\n const mounted = this.hasListeners();\n const fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n if (fetchOnMount || fetchOptionally) {\n newState = {\n ...newState,\n ...fetchState(state.data, query.options)\n };\n }\n if (options._optimisticResults === \"isRestoring\") {\n newState.fetchStatus = \"idle\";\n }\n }\n let { error, errorUpdatedAt, status } = newState;\n data = newState.data;\n let skipSelect = false;\n if (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n let placeholderData;\n if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n placeholderData = prevResult.data;\n skipSelect = true;\n } else {\n placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(\n this.#lastQueryWithDefinedData?.state.data,\n this.#lastQueryWithDefinedData\n ) : options.placeholderData;\n }\n if (placeholderData !== void 0) {\n status = \"success\";\n data = replaceData(\n prevResult?.data,\n placeholderData,\n options\n );\n isPlaceholderData = true;\n }\n }\n if (options.select && data !== void 0 && !skipSelect) {\n if (prevResult && data === prevResultState?.data && options.select === this.#selectFn) {\n data = this.#selectResult;\n } else {\n try {\n this.#selectFn = options.select;\n data = options.select(data);\n data = replaceData(prevResult?.data, data, options);\n this.#selectResult = data;\n this.#selectError = null;\n } catch (selectError) {\n this.#selectError = selectError;\n }\n }\n }\n if (this.#selectError) {\n error = this.#selectError;\n data = this.#selectResult;\n errorUpdatedAt = Date.now();\n status = \"error\";\n }\n const isFetching = newState.fetchStatus === \"fetching\";\n const isPending = status === \"pending\";\n const isError = status === \"error\";\n const isLoading = isPending && isFetching;\n const hasData = data !== void 0;\n const result = {\n status,\n fetchStatus: newState.fetchStatus,\n isPending,\n isSuccess: status === \"success\",\n isError,\n isInitialLoading: isLoading,\n isLoading,\n data,\n dataUpdatedAt: newState.dataUpdatedAt,\n error,\n errorUpdatedAt,\n failureCount: newState.fetchFailureCount,\n failureReason: newState.fetchFailureReason,\n errorUpdateCount: newState.errorUpdateCount,\n isFetched: query.isFetched(),\n isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n isFetching,\n isRefetching: isFetching && !isPending,\n isLoadingError: isError && !hasData,\n isPaused: newState.fetchStatus === \"paused\",\n isPlaceholderData,\n isRefetchError: isError && hasData,\n isStale: isStale(query, options),\n refetch: this.refetch,\n promise: this.#currentThenable,\n isEnabled: resolveQueryBoolean(options.enabled, query) !== false\n };\n const nextResult = result;\n if (this.options.experimental_prefetchInRender) {\n const hasResultData = nextResult.data !== void 0;\n const isErrorWithoutData = nextResult.status === \"error\" && !hasResultData;\n const finalizeThenableIfPossible = (thenable) => {\n if (isErrorWithoutData) {\n thenable.reject(nextResult.error);\n } else if (hasResultData) {\n thenable.resolve(nextResult.data);\n }\n };\n const recreateThenable = () => {\n const pending = this.#currentThenable = nextResult.promise = pendingThenable();\n finalizeThenableIfPossible(pending);\n };\n const prevThenable = this.#currentThenable;\n switch (prevThenable.status) {\n case \"pending\":\n if (query.queryHash === prevQuery.queryHash) {\n finalizeThenableIfPossible(prevThenable);\n }\n break;\n case \"fulfilled\":\n if (isErrorWithoutData || nextResult.data !== prevThenable.value) {\n recreateThenable();\n }\n break;\n case \"rejected\":\n if (!isErrorWithoutData || nextResult.error !== prevThenable.reason) {\n recreateThenable();\n }\n break;\n }\n }\n return nextResult;\n }\n updateResult() {\n const prevResult = this.#currentResult;\n const nextResult = this.createResult(this.#currentQuery, this.options);\n this.#currentResultState = this.#currentQuery.state;\n this.#currentResultOptions = this.options;\n if (this.#currentResultState.data !== void 0) {\n this.#lastQueryWithDefinedData = this.#currentQuery;\n }\n if (shallowEqualObjects(nextResult, prevResult)) {\n return;\n }\n this.#currentResult = nextResult;\n const shouldNotifyListeners = () => {\n if (!prevResult) {\n return true;\n }\n const { notifyOnChangeProps } = this.options;\n const notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n if (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) {\n return true;\n }\n const includedProps = new Set(\n notifyOnChangePropsValue ?? this.#trackedProps\n );\n if (this.options.throwOnError) {\n includedProps.add(\"error\");\n }\n return Object.keys(this.#currentResult).some((key) => {\n const typedKey = key;\n const changed = this.#currentResult[typedKey] !== prevResult[typedKey];\n return changed && includedProps.has(typedKey);\n });\n };\n this.#notify({ listeners: shouldNotifyListeners() });\n }\n #updateQuery() {\n const query = this.#client.getQueryCache().build(this.#client, this.options);\n if (query === this.#currentQuery) {\n return;\n }\n const prevQuery = this.#currentQuery;\n this.#currentQuery = query;\n this.#currentQueryInitialState = query.state;\n if (this.hasListeners()) {\n prevQuery?.removeObserver(this);\n query.addObserver(this);\n }\n }\n onQueryUpdate() {\n this.updateResult();\n if (this.hasListeners()) {\n this.#updateTimers();\n }\n }\n #notify(notifyOptions) {\n notifyManager.batch(() => {\n if (notifyOptions.listeners) {\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n }\n this.#client.getQueryCache().notify({\n query: this.#currentQuery,\n type: \"observerResultsUpdated\"\n });\n });\n }\n};\nfunction shouldLoadOnMount(query, options) {\n return resolveQueryBoolean(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && resolveQueryBoolean(options.retryOnMount, query) === false);\n}\nfunction shouldFetchOnMount(query, options) {\n return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n if (resolveQueryBoolean(options.enabled, query) !== false && resolveStaleTime(options.staleTime, query) !== \"static\") {\n const value = typeof field === \"function\" ? field(query) : field;\n return value === \"always\" || value !== false && isStale(query, options);\n }\n return false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n return (query !== prevQuery || resolveQueryBoolean(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n return resolveQueryBoolean(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query));\n}\nfunction shouldAssignObserverCurrentProperties(observer, optimisticResult) {\n if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n return true;\n }\n return false;\n}\nexport {\n QueryObserver\n};\n//# sourceMappingURL=queryObserver.js.map","// src/infiniteQueryObserver.ts\nimport { QueryObserver } from \"./queryObserver.js\";\nimport { hasNextPage, hasPreviousPage } from \"./infiniteQueryBehavior.js\";\nvar InfiniteQueryObserver = class extends QueryObserver {\n constructor(client, options) {\n super(client, options);\n }\n bindMethods() {\n super.bindMethods();\n this.fetchNextPage = this.fetchNextPage.bind(this);\n this.fetchPreviousPage = this.fetchPreviousPage.bind(this);\n }\n setOptions(options) {\n options._type = \"infinite\";\n super.setOptions(options);\n }\n getOptimisticResult(options) {\n options._type = \"infinite\";\n return super.getOptimisticResult(options);\n }\n fetchNextPage(options) {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: \"forward\" }\n }\n });\n }\n fetchPreviousPage(options) {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: \"backward\" }\n }\n });\n }\n createResult(query, options) {\n const { state } = query;\n const parentResult = super.createResult(query, options);\n const { isFetching, isRefetching, isError, isRefetchError } = parentResult;\n const fetchDirection = state.fetchMeta?.fetchMore?.direction;\n const isFetchNextPageError = isError && fetchDirection === \"forward\";\n const isFetchingNextPage = isFetching && fetchDirection === \"forward\";\n const isFetchPreviousPageError = isError && fetchDirection === \"backward\";\n const isFetchingPreviousPage = isFetching && fetchDirection === \"backward\";\n const result = {\n ...parentResult,\n fetchNextPage: this.fetchNextPage,\n fetchPreviousPage: this.fetchPreviousPage,\n hasNextPage: hasNextPage(options, state.data),\n hasPreviousPage: hasPreviousPage(options, state.data),\n isFetchNextPageError,\n isFetchingNextPage,\n isFetchPreviousPageError,\n isFetchingPreviousPage,\n isRefetchError: isRefetchError && !isFetchNextPageError && !isFetchPreviousPageError,\n isRefetching: isRefetching && !isFetchingNextPage && !isFetchingPreviousPage\n };\n return result;\n }\n};\nexport {\n InfiniteQueryObserver\n};\n//# sourceMappingURL=infiniteQueryObserver.js.map","// src/mutation.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Removable } from \"./removable.js\";\nimport { createRetryer } from \"./retryer.js\";\nvar Mutation = class extends Removable {\n #client;\n #observers;\n #mutationCache;\n #retryer;\n constructor(config) {\n super();\n this.#client = config.client;\n this.mutationId = config.mutationId;\n this.#mutationCache = config.mutationCache;\n this.#observers = [];\n this.state = config.state || getDefaultState();\n this.setOptions(config.options);\n this.scheduleGc();\n }\n setOptions(options) {\n this.options = options;\n this.updateGcTime(this.options.gcTime);\n }\n get meta() {\n return this.options.meta;\n }\n addObserver(observer) {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer);\n this.clearGcTimeout();\n this.#mutationCache.notify({\n type: \"observerAdded\",\n mutation: this,\n observer\n });\n }\n }\n removeObserver(observer) {\n this.#observers = this.#observers.filter((x) => x !== observer);\n this.scheduleGc();\n this.#mutationCache.notify({\n type: \"observerRemoved\",\n mutation: this,\n observer\n });\n }\n optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === \"pending\") {\n this.scheduleGc();\n } else {\n this.#mutationCache.remove(this);\n }\n }\n }\n continue() {\n return this.#retryer?.continue() ?? // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables);\n }\n async execute(variables) {\n const onContinue = () => {\n this.#dispatch({ type: \"continue\" });\n };\n const mutationFnContext = {\n client: this.#client,\n meta: this.options.meta,\n mutationKey: this.options.mutationKey\n };\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error(\"No mutationFn found\"));\n }\n return this.options.mutationFn(variables, mutationFnContext);\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue,\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n canRun: () => this.#mutationCache.canRun(this)\n });\n const restored = this.state.status === \"pending\";\n const isPaused = !this.#retryer.canStart();\n try {\n if (restored) {\n onContinue();\n } else {\n this.#dispatch({ type: \"pending\", variables, isPaused });\n if (this.#mutationCache.config.onMutate) {\n await this.#mutationCache.config.onMutate(\n variables,\n this,\n mutationFnContext\n );\n }\n const context = await this.options.onMutate?.(\n variables,\n mutationFnContext\n );\n if (context !== this.state.context) {\n this.#dispatch({\n type: \"pending\",\n context,\n variables,\n isPaused\n });\n }\n }\n const data = await this.#retryer.start();\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this,\n mutationFnContext\n );\n await this.options.onSuccess?.(\n data,\n variables,\n this.state.context,\n mutationFnContext\n );\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this,\n mutationFnContext\n );\n await this.options.onSettled?.(\n data,\n null,\n variables,\n this.state.context,\n mutationFnContext\n );\n this.#dispatch({ type: \"success\", data });\n return data;\n } catch (error) {\n try {\n await this.#mutationCache.config.onError?.(\n error,\n variables,\n this.state.context,\n this,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.options.onError?.(\n error,\n variables,\n this.state.context,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.#mutationCache.config.onSettled?.(\n void 0,\n error,\n this.state.variables,\n this.state.context,\n this,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.options.onSettled?.(\n void 0,\n error,\n variables,\n this.state.context,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n this.#dispatch({ type: \"error\", error });\n throw error;\n } finally {\n this.#mutationCache.runNext(this);\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n isPaused: true\n };\n case \"continue\":\n return {\n ...state,\n isPaused: false\n };\n case \"pending\":\n return {\n ...state,\n context: action.context,\n data: void 0,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: action.isPaused,\n status: \"pending\",\n variables: action.variables,\n submittedAt: Date.now()\n };\n case \"success\":\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: \"success\",\n isPaused: false\n };\n case \"error\":\n return {\n ...state,\n data: void 0,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: \"error\"\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action);\n });\n this.#mutationCache.notify({\n mutation: this,\n type: \"updated\",\n action\n });\n });\n }\n};\nfunction getDefaultState() {\n return {\n context: void 0,\n data: void 0,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: \"idle\",\n variables: void 0,\n submittedAt: 0\n };\n}\nexport {\n Mutation,\n getDefaultState\n};\n//# sourceMappingURL=mutation.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#mutations = /* @__PURE__ */ new Set();\n this.#scopes = /* @__PURE__ */ new Map();\n this.#mutationId = 0;\n }\n #mutations;\n #scopes;\n #mutationId;\n build(client, options, state) {\n const mutation = new Mutation({\n client,\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state\n });\n this.add(mutation);\n return mutation;\n }\n add(mutation) {\n this.#mutations.add(mutation);\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n scopedMutations.push(mutation);\n } else {\n this.#scopes.set(scope, [mutation]);\n }\n }\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n if (this.#mutations.delete(mutation)) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n if (scopedMutations.length > 1) {\n const index = scopedMutations.indexOf(mutation);\n if (index !== -1) {\n scopedMutations.splice(index, 1);\n }\n } else if (scopedMutations[0] === mutation) {\n this.#scopes.delete(scope);\n }\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const mutationsWithSameScope = this.#scopes.get(scope);\n const firstPendingMutation = mutationsWithSameScope?.find(\n (m) => m.state.status === \"pending\"\n );\n return !firstPendingMutation || firstPendingMutation === mutation;\n } else {\n return true;\n }\n }\n runNext(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const foundMutation = this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n } else {\n return Promise.resolve();\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.#mutations.forEach((mutation) => {\n this.notify({ type: \"removed\", mutation });\n });\n this.#mutations.clear();\n this.#scopes.clear();\n });\n }\n getAll() {\n return Array.from(this.#mutations);\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (mutation) => matchMutation(defaultedFilters, mutation)\n );\n }\n findAll(filters = {}) {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n resumePausedMutations() {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n return notifyManager.batch(\n () => Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop))\n )\n );\n }\n};\nfunction scopeFor(mutation) {\n return mutation.options.scope?.id;\n}\nexport {\n MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/mutationObserver.ts\nimport { getDefaultState } from \"./mutation.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { hashKey, shallowEqualObjects } from \"./utils.js\";\nvar MutationObserver = class extends Subscribable {\n #client;\n #currentResult = void 0;\n #currentMutation;\n #mutateOptions;\n constructor(client, options) {\n super();\n this.#client = client;\n this.setOptions(options);\n this.bindMethods();\n this.#updateResult();\n }\n bindMethods() {\n this.mutate = this.mutate.bind(this);\n this.reset = this.reset.bind(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n this.options = this.#client.defaultMutationOptions(options);\n if (!shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getMutationCache().notify({\n type: \"observerOptionsUpdated\",\n mutation: this.#currentMutation,\n observer: this\n });\n }\n if (prevOptions?.mutationKey && this.options.mutationKey && hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)) {\n this.reset();\n } else if (this.#currentMutation?.state.status === \"pending\") {\n this.#currentMutation.setOptions(this.options);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#currentMutation?.removeObserver(this);\n }\n }\n onMutationUpdate(action) {\n this.#updateResult();\n this.#notify(action);\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n reset() {\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = void 0;\n this.#updateResult();\n this.#notify();\n }\n mutate(variables, options) {\n this.#mutateOptions = options;\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = this.#client.getMutationCache().build(this.#client, this.options);\n this.#currentMutation.addObserver(this);\n return this.#currentMutation.execute(variables);\n }\n #updateResult() {\n const state = this.#currentMutation?.state ?? getDefaultState();\n this.#currentResult = {\n ...state,\n isPending: state.status === \"pending\",\n isSuccess: state.status === \"success\",\n isError: state.status === \"error\",\n isIdle: state.status === \"idle\",\n mutate: this.mutate,\n reset: this.reset\n };\n }\n #notify(action) {\n notifyManager.batch(() => {\n if (this.#mutateOptions && this.hasListeners()) {\n const variables = this.#currentResult.variables;\n const onMutateResult = this.#currentResult.context;\n const context = {\n client: this.#client,\n meta: this.options.meta,\n mutationKey: this.options.mutationKey\n };\n if (action?.type === \"success\") {\n try {\n this.#mutateOptions.onSuccess?.(\n action.data,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n this.#mutateOptions.onSettled?.(\n action.data,\n null,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n } else if (action?.type === \"error\") {\n try {\n this.#mutateOptions.onError?.(\n action.error,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n this.#mutateOptions.onSettled?.(\n void 0,\n action.error,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n }\n }\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n });\n }\n};\nexport {\n MutationObserver\n};\n//# sourceMappingURL=mutationObserver.js.map","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#queries = /* @__PURE__ */ new Map();\n }\n #queries;\n build(client, options, state) {\n const queryKey = options.queryKey;\n const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n let query = this.get(queryHash);\n if (!query) {\n query = new Query({\n client,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey)\n });\n this.add(query);\n }\n return query;\n }\n add(query) {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query);\n this.notify({\n type: \"added\",\n query\n });\n }\n }\n remove(query) {\n const queryInMap = this.#queries.get(query.queryHash);\n if (queryInMap) {\n query.destroy();\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash);\n }\n this.notify({ type: \"removed\", query });\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query);\n });\n });\n }\n get(queryHash) {\n return this.#queries.get(queryHash);\n }\n getAll() {\n return [...this.#queries.values()];\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (query) => matchQuery(defaultedFilters, query)\n );\n }\n findAll(filters = {}) {\n const queries = this.getAll();\n return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n onFocus() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus();\n });\n });\n }\n onOnline() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline();\n });\n });\n }\n};\nexport {\n QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/queryClient.ts\nimport {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nvar QueryClient = class {\n #queryCache;\n #mutationCache;\n #defaultOptions;\n #queryDefaults;\n #mutationDefaults;\n #mountCount;\n #unsubscribeFocus;\n #unsubscribeOnline;\n constructor(config = {}) {\n this.#queryCache = config.queryCache || new QueryCache();\n this.#mutationCache = config.mutationCache || new MutationCache();\n this.#defaultOptions = config.defaultOptions || {};\n this.#queryDefaults = /* @__PURE__ */ new Map();\n this.#mutationDefaults = /* @__PURE__ */ new Map();\n this.#mountCount = 0;\n }\n mount() {\n this.#mountCount++;\n if (this.#mountCount !== 1) return;\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations();\n this.#queryCache.onFocus();\n }\n });\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations();\n this.#queryCache.onOnline();\n }\n });\n }\n unmount() {\n this.#mountCount--;\n if (this.#mountCount !== 0) return;\n this.#unsubscribeFocus?.();\n this.#unsubscribeFocus = void 0;\n this.#unsubscribeOnline?.();\n this.#unsubscribeOnline = void 0;\n }\n isFetching(filters) {\n return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n }\n isMutating(filters) {\n return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n }\n /**\n * Imperative (non-reactive) way to retrieve data for a QueryKey.\n * Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates.\n *\n * Hint: Do not use this function inside a component, because it won't receive updates.\n * Use `useQuery` to create a `QueryObserver` that subscribes to changes.\n */\n getQueryData(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state.data;\n }\n ensureQueryData(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n const cachedData = query.state.data;\n if (cachedData === void 0) {\n return this.fetchQuery(options);\n }\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\n }\n getQueriesData(filters) {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data;\n return [queryKey, data];\n });\n }\n setQueryData(queryKey, updater, options) {\n const defaultedOptions = this.defaultQueryOptions({ queryKey });\n const query = this.#queryCache.get(\n defaultedOptions.queryHash\n );\n const prevData = query?.state.data;\n const data = functionalUpdate(updater, prevData);\n if (data === void 0) {\n return void 0;\n }\n return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n }\n setQueriesData(filters, updater, options) {\n return notifyManager.batch(\n () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options)\n ])\n );\n }\n getQueryState(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(\n options.queryHash\n )?.state;\n }\n removeQueries(filters) {\n const queryCache = this.#queryCache;\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query);\n });\n });\n }\n resetQueries(filters, options) {\n const queryCache = this.#queryCache;\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset();\n });\n return this.refetchQueries(\n {\n type: \"active\",\n ...filters\n },\n options\n );\n });\n }\n cancelQueries(filters, cancelOptions = {}) {\n const defaultedCancelOptions = { revert: true, ...cancelOptions };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n );\n return Promise.all(promises).then(noop).catch(noop);\n }\n invalidateQueries(filters, options = {}) {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate();\n });\n if (filters?.refetchType === \"none\") {\n return Promise.resolve();\n }\n return this.refetchQueries(\n {\n ...filters,\n type: filters?.refetchType ?? filters?.type ?? \"active\"\n },\n options\n );\n });\n }\n refetchQueries(filters, options = {}) {\n const fetchOptions = {\n ...options,\n cancelRefetch: options.cancelRefetch ?? true\n };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled() && !query.isStatic()).map((query) => {\n let promise = query.fetch(void 0, fetchOptions);\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop);\n }\n return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n })\n );\n return Promise.all(promises).then(noop);\n }\n fetchQuery(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n if (defaultedOptions.retry === void 0) {\n defaultedOptions.retry = false;\n }\n const query = this.#queryCache.build(this, defaultedOptions);\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query)\n ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n }\n prefetchQuery(options) {\n return this.fetchQuery(options).then(noop).catch(noop);\n }\n fetchInfiniteQuery(options) {\n options._type = \"infinite\";\n return this.fetchQuery(options);\n }\n prefetchInfiniteQuery(options) {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n }\n ensureInfiniteQueryData(options) {\n options._type = \"infinite\";\n return this.ensureQueryData(options);\n }\n resumePausedMutations() {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations();\n }\n return Promise.resolve();\n }\n getQueryCache() {\n return this.#queryCache;\n }\n getMutationCache() {\n return this.#mutationCache;\n }\n getDefaultOptions() {\n return this.#defaultOptions;\n }\n setDefaultOptions(options) {\n this.#defaultOptions = options;\n }\n setQueryDefaults(queryKey, options) {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options\n });\n }\n getQueryDefaults(queryKey) {\n const defaults = [...this.#queryDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n setMutationDefaults(mutationKey, options) {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options\n });\n }\n getMutationDefaults(mutationKey) {\n const defaults = [...this.#mutationDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n defaultQueryOptions(options) {\n if (options._defaulted) {\n return options;\n }\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true\n };\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions\n );\n }\n if (defaultedOptions.refetchOnReconnect === void 0) {\n defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n }\n if (defaultedOptions.throwOnError === void 0) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n }\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = \"offlineFirst\";\n }\n if (defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false;\n }\n return defaultedOptions;\n }\n defaultMutationOptions(options) {\n if (options?._defaulted) {\n return options;\n }\n return {\n ...this.#defaultOptions.mutations,\n ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n ...options,\n _defaulted: true\n };\n }\n clear() {\n this.#queryCache.clear();\n this.#mutationCache.clear();\n }\n};\nexport {\n QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","\"use client\";\n\n// src/QueryClientProvider.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar QueryClientContext = React.createContext(\n void 0\n);\nvar useQueryClient = (queryClient) => {\n const client = React.useContext(QueryClientContext);\n if (queryClient) {\n return queryClient;\n }\n if (!client) {\n throw new Error(\"No QueryClient set, use QueryClientProvider to set one\");\n }\n return client;\n};\nvar QueryClientProvider = ({\n client,\n children\n}) => {\n React.useEffect(() => {\n client.mount();\n return () => {\n client.unmount();\n };\n }, [client]);\n return /* @__PURE__ */ jsx(QueryClientContext.Provider, { value: client, children });\n};\nexport {\n QueryClientContext,\n QueryClientProvider,\n useQueryClient\n};\n//# sourceMappingURL=QueryClientProvider.js.map","\"use client\";\n\n// src/IsRestoringProvider.ts\nimport * as React from \"react\";\nvar IsRestoringContext = React.createContext(false);\nvar useIsRestoring = () => React.useContext(IsRestoringContext);\nvar IsRestoringProvider = IsRestoringContext.Provider;\nexport {\n IsRestoringProvider,\n useIsRestoring\n};\n//# sourceMappingURL=IsRestoringProvider.js.map","\"use client\";\n\n// src/QueryErrorResetBoundary.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createValue() {\n let isReset = false;\n return {\n clearReset: () => {\n isReset = false;\n },\n reset: () => {\n isReset = true;\n },\n isReset: () => {\n return isReset;\n }\n };\n}\nvar QueryErrorResetBoundaryContext = React.createContext(createValue());\nvar useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext);\nvar QueryErrorResetBoundary = ({\n children\n}) => {\n const [value] = React.useState(() => createValue());\n return /* @__PURE__ */ jsx(QueryErrorResetBoundaryContext.Provider, { value, children: typeof children === \"function\" ? children(value) : children });\n};\nexport {\n QueryErrorResetBoundary,\n useQueryErrorResetBoundary\n};\n//# sourceMappingURL=QueryErrorResetBoundary.js.map","\"use client\";\n\n// src/errorBoundaryUtils.ts\nimport * as React from \"react\";\nimport { shouldThrowError } from \"@tanstack/query-core\";\nvar ensurePreventErrorBoundaryRetry = (options, errorResetBoundary, query) => {\n const throwOnError = query?.state.error && typeof options.throwOnError === \"function\" ? shouldThrowError(options.throwOnError, [query.state.error, query]) : options.throwOnError;\n if (options.suspense || options.experimental_prefetchInRender || throwOnError) {\n if (!errorResetBoundary.isReset()) {\n options.retryOnMount = false;\n }\n }\n};\nvar useClearResetErrorBoundary = (errorResetBoundary) => {\n React.useEffect(() => {\n errorResetBoundary.clearReset();\n }, [errorResetBoundary]);\n};\nvar getHasError = ({\n result,\n errorResetBoundary,\n throwOnError,\n query,\n suspense\n}) => {\n return result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && (suspense && result.data === void 0 || shouldThrowError(throwOnError, [result.error, query]));\n};\nexport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n};\n//# sourceMappingURL=errorBoundaryUtils.js.map","// src/suspense.ts\nvar defaultThrowOnError = (_error, query) => query.state.data === void 0;\nvar ensureSuspenseTimers = (defaultedOptions) => {\n if (defaultedOptions.suspense) {\n const MIN_SUSPENSE_TIME_MS = 1e3;\n const clamp = (value) => value === \"static\" ? value : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS);\n const originalStaleTime = defaultedOptions.staleTime;\n defaultedOptions.staleTime = typeof originalStaleTime === \"function\" ? (...args) => clamp(originalStaleTime(...args)) : clamp(originalStaleTime);\n if (typeof defaultedOptions.gcTime === \"number\") {\n defaultedOptions.gcTime = Math.max(\n defaultedOptions.gcTime,\n MIN_SUSPENSE_TIME_MS\n );\n }\n }\n};\nvar willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring;\nvar shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending;\nvar fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {\n errorResetBoundary.clearReset();\n});\nexport {\n defaultThrowOnError,\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n};\n//# sourceMappingURL=suspense.js.map","\"use client\";\n\n// src/useBaseQuery.ts\nimport * as React from \"react\";\nimport { environmentManager, noop, notifyManager } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n} from \"./errorBoundaryUtils.js\";\nimport { useIsRestoring } from \"./IsRestoringProvider.js\";\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n} from \"./suspense.js\";\nfunction useBaseQuery(options, Observer, queryClient) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n throw new Error(\n 'Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object'\n );\n }\n }\n const isRestoring = useIsRestoring();\n const errorResetBoundary = useQueryErrorResetBoundary();\n const client = useQueryClient(queryClient);\n const defaultedOptions = client.defaultQueryOptions(options);\n client.getDefaultOptions().queries?._experimental_beforeQuery?.(\n defaultedOptions\n );\n const query = client.getQueryCache().get(defaultedOptions.queryHash);\n if (process.env.NODE_ENV !== \"production\") {\n if (!defaultedOptions.queryFn) {\n console.error(\n `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`\n );\n }\n }\n const subscribed = options.subscribed !== false;\n defaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : subscribed ? \"optimistic\" : void 0;\n ensureSuspenseTimers(defaultedOptions);\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary, query);\n useClearResetErrorBoundary(errorResetBoundary);\n const isNewCacheEntry = !client.getQueryCache().get(defaultedOptions.queryHash);\n const [observer] = React.useState(\n () => new Observer(\n client,\n defaultedOptions\n )\n );\n const result = observer.getOptimisticResult(defaultedOptions);\n const shouldSubscribe = !isRestoring && subscribed;\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop;\n observer.updateResult();\n return unsubscribe;\n },\n [observer, shouldSubscribe]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n React.useEffect(() => {\n observer.setOptions(defaultedOptions);\n }, [defaultedOptions, observer]);\n if (shouldSuspend(defaultedOptions, result)) {\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);\n }\n if (getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query,\n suspense: defaultedOptions.suspense\n })) {\n throw result.error;\n }\n ;\n client.getDefaultOptions().queries?._experimental_afterQuery?.(\n defaultedOptions,\n result\n );\n if (defaultedOptions.experimental_prefetchInRender && !environmentManager.isServer() && willFetch(result, isRestoring)) {\n const promise = isNewCacheEntry ? (\n // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted\n fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n ) : (\n // subscribe to the \"cache promise\" so that we can finalize the currentThenable once data comes in\n query?.promise\n );\n promise?.catch(noop).finally(() => {\n observer.updateResult();\n });\n }\n return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;\n}\nexport {\n useBaseQuery\n};\n//# sourceMappingURL=useBaseQuery.js.map","\"use client\";\n\n// src/useQuery.ts\nimport { QueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useQuery(options, queryClient) {\n return useBaseQuery(options, QueryObserver, queryClient);\n}\nexport {\n useQuery\n};\n//# sourceMappingURL=useQuery.js.map","\"use client\";\n\n// src/useMutation.ts\nimport * as React from \"react\";\nimport {\n MutationObserver,\n noop,\n notifyManager,\n shouldThrowError\n} from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nfunction useMutation(options, queryClient) {\n const client = useQueryClient(queryClient);\n const [observer] = React.useState(\n () => new MutationObserver(\n client,\n options\n )\n );\n React.useEffect(() => {\n observer.setOptions(options);\n }, [observer, options]);\n const result = React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n [observer]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n const mutate = React.useCallback(\n (variables, mutateOptions) => {\n observer.mutate(variables, mutateOptions).catch(noop);\n },\n [observer]\n );\n if (result.error && shouldThrowError(observer.options.throwOnError, [result.error])) {\n throw result.error;\n }\n return { ...result, mutate, mutateAsync: result.mutate };\n}\nexport {\n useMutation\n};\n//# sourceMappingURL=useMutation.js.map","\"use client\";\n\n// src/useInfiniteQuery.ts\nimport { InfiniteQueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useInfiniteQuery(options, queryClient) {\n return useBaseQuery(\n options,\n InfiniteQueryObserver,\n queryClient\n );\n}\nexport {\n useInfiniteQuery\n};\n//# sourceMappingURL=useInfiniteQuery.js.map","'use client';\nfunction __insertCSS(code) {\n if (!code || typeof document == 'undefined') return\n let head = document.head || document.getElementsByTagName('head')[0]\n let style = document.createElement('style')\n style.type = 'text/css'\n head.appendChild(style)\n ;style.styleSheet ? (style.styleSheet.cssText = code) : style.appendChild(document.createTextNode(code))\n}\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nconst getAsset = (type)=>{\n switch(type){\n case 'success':\n return SuccessIcon;\n case 'info':\n return InfoIcon;\n case 'warning':\n return WarningIcon;\n case 'error':\n return ErrorIcon;\n default:\n return null;\n }\n};\nconst bars = Array(12).fill(0);\nconst Loader = ({ visible, className })=>{\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: [\n 'sonner-loading-wrapper',\n className\n ].filter(Boolean).join(' '),\n \"data-visible\": visible\n }, /*#__PURE__*/ React.createElement(\"div\", {\n className: \"sonner-spinner\"\n }, bars.map((_, i)=>/*#__PURE__*/ React.createElement(\"div\", {\n className: \"sonner-loading-bar\",\n key: `spinner-bar-${i}`\n }))));\n};\nconst SuccessIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\",\n clipRule: \"evenodd\"\n}));\nconst WarningIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\",\n clipRule: \"evenodd\"\n}));\nconst InfoIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\",\n clipRule: \"evenodd\"\n}));\nconst ErrorIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\",\n clipRule: \"evenodd\"\n}));\nconst CloseIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"12\",\n height: \"12\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n}, /*#__PURE__*/ React.createElement(\"line\", {\n x1: \"18\",\n y1: \"6\",\n x2: \"6\",\n y2: \"18\"\n}), /*#__PURE__*/ React.createElement(\"line\", {\n x1: \"6\",\n y1: \"6\",\n x2: \"18\",\n y2: \"18\"\n}));\n\nconst useIsDocumentHidden = ()=>{\n const [isDocumentHidden, setIsDocumentHidden] = React.useState(document.hidden);\n React.useEffect(()=>{\n const callback = ()=>{\n setIsDocumentHidden(document.hidden);\n };\n document.addEventListener('visibilitychange', callback);\n return ()=>window.removeEventListener('visibilitychange', callback);\n }, []);\n return isDocumentHidden;\n};\n\nlet toastsCounter = 1;\nclass Observer {\n constructor(){\n // We use arrow functions to maintain the correct `this` reference\n this.subscribe = (subscriber)=>{\n this.subscribers.push(subscriber);\n return ()=>{\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n this.publish = (data)=>{\n this.subscribers.forEach((subscriber)=>subscriber(data));\n };\n this.addToast = (data)=>{\n this.publish(data);\n this.toasts = [\n ...this.toasts,\n data\n ];\n };\n this.create = (data)=>{\n var _data_id;\n const { message, ...rest } = data;\n const id = typeof (data == null ? void 0 : data.id) === 'number' || ((_data_id = data.id) == null ? void 0 : _data_id.length) > 0 ? data.id : toastsCounter++;\n const alreadyExists = this.toasts.find((toast)=>{\n return toast.id === id;\n });\n const dismissible = data.dismissible === undefined ? true : data.dismissible;\n if (this.dismissedToasts.has(id)) {\n this.dismissedToasts.delete(id);\n }\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast)=>{\n if (toast.id === id) {\n this.publish({\n ...toast,\n ...data,\n id,\n title: message\n });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message\n };\n }\n return toast;\n });\n } else {\n this.addToast({\n title: message,\n ...rest,\n dismissible,\n id\n });\n }\n return id;\n };\n this.dismiss = (id)=>{\n if (id) {\n this.dismissedToasts.add(id);\n requestAnimationFrame(()=>this.subscribers.forEach((subscriber)=>subscriber({\n id,\n dismiss: true\n })));\n } else {\n this.toasts.forEach((toast)=>{\n this.subscribers.forEach((subscriber)=>subscriber({\n id: toast.id,\n dismiss: true\n }));\n });\n }\n return id;\n };\n this.message = (message, data)=>{\n return this.create({\n ...data,\n message\n });\n };\n this.error = (message, data)=>{\n return this.create({\n ...data,\n message,\n type: 'error'\n });\n };\n this.success = (message, data)=>{\n return this.create({\n ...data,\n type: 'success',\n message\n });\n };\n this.info = (message, data)=>{\n return this.create({\n ...data,\n type: 'info',\n message\n });\n };\n this.warning = (message, data)=>{\n return this.create({\n ...data,\n type: 'warning',\n message\n });\n };\n this.loading = (message, data)=>{\n return this.create({\n ...data,\n type: 'loading',\n message\n });\n };\n this.promise = (promise, data)=>{\n if (!data) {\n // Nothing to show\n return;\n }\n let id = undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n description: typeof data.description !== 'function' ? data.description : undefined\n });\n }\n const p = Promise.resolve(promise instanceof Function ? promise() : promise);\n let shouldDismiss = id !== undefined;\n let result;\n const originalPromise = p.then(async (response)=>{\n result = [\n 'resolve',\n response\n ];\n const isReactElementResponse = React.isValidElement(response);\n if (isReactElementResponse) {\n shouldDismiss = false;\n this.create({\n id,\n type: 'default',\n message: response\n });\n } else if (isHttpResponse(response) && !response.ok) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(`HTTP error! status: ${response.status}`) : data.error;\n const description = typeof data.description === 'function' ? await data.description(`HTTP error! status: ${response.status}`) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n } else if (response instanceof Error) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(response) : data.error;\n const description = typeof data.description === 'function' ? await data.description(response) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const promiseData = typeof data.success === 'function' ? await data.success(response) : data.success;\n const description = typeof data.description === 'function' ? await data.description(response) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'success',\n description,\n ...toastSettings\n });\n }\n }).catch(async (error)=>{\n result = [\n 'reject',\n error\n ];\n if (data.error !== undefined) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(error) : data.error;\n const description = typeof data.description === 'function' ? await data.description(error) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n }\n }).finally(()=>{\n if (shouldDismiss) {\n // Toast is still in load state (and will be indefinitely — dismiss it)\n this.dismiss(id);\n id = undefined;\n }\n data.finally == null ? void 0 : data.finally.call(data);\n });\n const unwrap = ()=>new Promise((resolve, reject)=>originalPromise.then(()=>result[0] === 'reject' ? reject(result[1]) : resolve(result[1])).catch(reject));\n if (typeof id !== 'string' && typeof id !== 'number') {\n // cannot Object.assign on undefined\n return {\n unwrap\n };\n } else {\n return Object.assign(id, {\n unwrap\n });\n }\n };\n this.custom = (jsx, data)=>{\n const id = (data == null ? void 0 : data.id) || toastsCounter++;\n this.create({\n jsx: jsx(id),\n id,\n ...data\n });\n return id;\n };\n this.getActiveToasts = ()=>{\n return this.toasts.filter((toast)=>!this.dismissedToasts.has(toast.id));\n };\n this.subscribers = [];\n this.toasts = [];\n this.dismissedToasts = new Set();\n }\n}\nconst ToastState = new Observer();\n// bind this to the toast function\nconst toastFunction = (message, data)=>{\n const id = (data == null ? void 0 : data.id) || toastsCounter++;\n ToastState.addToast({\n title: message,\n ...data,\n id\n });\n return id;\n};\nconst isHttpResponse = (data)=>{\n return data && typeof data === 'object' && 'ok' in data && typeof data.ok === 'boolean' && 'status' in data && typeof data.status === 'number';\n};\nconst basicToast = toastFunction;\nconst getHistory = ()=>ToastState.toasts;\nconst getToasts = ()=>ToastState.getActiveToasts();\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nconst toast = Object.assign(basicToast, {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading\n}, {\n getHistory,\n getToasts\n});\n\n__insertCSS(\"[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\");\n\nfunction isAction(action) {\n return action.label !== undefined;\n}\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n// Viewport padding\nconst VIEWPORT_OFFSET = '24px';\n// Mobile viewport padding\nconst MOBILE_VIEWPORT_OFFSET = '16px';\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n// Default toast width\nconst TOAST_WIDTH = 356;\n// Default gap between toasts\nconst GAP = 14;\n// Threshold to dismiss a toast\nconst SWIPE_THRESHOLD = 45;\n// Equal to exit animation duration\nconst TIME_BEFORE_UNMOUNT = 200;\nfunction cn(...classes) {\n return classes.filter(Boolean).join(' ');\n}\nfunction getDefaultSwipeDirections(position) {\n const [y, x] = position.split('-');\n const directions = [];\n if (y) {\n directions.push(y);\n }\n if (x) {\n directions.push(x);\n }\n return directions;\n}\nconst Toast = (props)=>{\n var _toast_classNames, _toast_classNames1, _toast_classNames2, _toast_classNames3, _toast_classNames4, _toast_classNames5, _toast_classNames6, _toast_classNames7, _toast_classNames8;\n const { invert: ToasterInvert, toast, unstyled, interacting, setHeights, visibleToasts, heights, index, toasts, expanded, removeToast, defaultRichColors, closeButton: closeButtonFromToaster, style, cancelButtonStyle, actionButtonStyle, className = '', descriptionClassName = '', duration: durationFromToaster, position, gap, expandByDefault, classNames, icons, closeButtonAriaLabel = 'Close toast' } = props;\n const [swipeDirection, setSwipeDirection] = React.useState(null);\n const [swipeOutDirection, setSwipeOutDirection] = React.useState(null);\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [isSwiped, setIsSwiped] = React.useState(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const remainingTime = React.useRef(toast.duration || durationFromToaster || TOAST_LIFETIME);\n const dragStartTime = React.useRef(null);\n const toastRef = React.useRef(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(()=>heights.findIndex((height)=>height.toastId === toast.id) || 0, [\n heights,\n toast.id\n ]);\n const closeButton = React.useMemo(()=>{\n var _toast_closeButton;\n return (_toast_closeButton = toast.closeButton) != null ? _toast_closeButton : closeButtonFromToaster;\n }, [\n toast.closeButton,\n closeButtonFromToaster\n ]);\n const duration = React.useMemo(()=>toast.duration || durationFromToaster || TOAST_LIFETIME, [\n toast.duration,\n durationFromToaster\n ]);\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartRef = React.useRef(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(()=>{\n return heights.reduce((prev, curr, reducerIndex)=>{\n // Calculate offset up until current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n return prev + curr.height;\n }, 0);\n }, [\n heights,\n heightIndex\n ]);\n const isDocumentHidden = useIsDocumentHidden();\n const invert = toast.invert || ToasterInvert;\n const disabled = toastType === 'loading';\n offset.current = React.useMemo(()=>heightIndex * gap + toastsHeightBefore, [\n heightIndex,\n toastsHeightBefore\n ]);\n React.useEffect(()=>{\n remainingTime.current = duration;\n }, [\n duration\n ]);\n React.useEffect(()=>{\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n React.useEffect(()=>{\n const toastNode = toastRef.current;\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n // Add toast height to heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h)=>[\n {\n toastId: toast.id,\n height,\n position: toast.position\n },\n ...h\n ]);\n return ()=>setHeights((h)=>h.filter((height)=>height.toastId !== toast.id));\n }\n }, [\n setHeights,\n toast.id\n ]);\n React.useLayoutEffect(()=>{\n // Keep height up to date with the content in case it updates\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n setInitialHeight(newHeight);\n setHeights((heights)=>{\n const alreadyExists = heights.find((height)=>height.toastId === toast.id);\n if (!alreadyExists) {\n return [\n {\n toastId: toast.id,\n height: newHeight,\n position: toast.position\n },\n ...heights\n ];\n } else {\n return heights.map((height)=>height.toastId === toast.id ? {\n ...height,\n height: newHeight\n } : height);\n }\n });\n }, [\n mounted,\n toast.title,\n toast.description,\n setHeights,\n toast.id,\n toast.jsx,\n toast.action,\n toast.cancel\n ]);\n const deleteToast = React.useCallback(()=>{\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h)=>h.filter((height)=>height.toastId !== toast.id));\n setTimeout(()=>{\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [\n toast,\n removeToast,\n setHeights,\n offset\n ]);\n React.useEffect(()=>{\n if (toast.promise && toastType === 'loading' || toast.duration === Infinity || toast.type === 'loading') return;\n let timeoutId;\n // Pause the timer on each hover\n const pauseTimer = ()=>{\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n remainingTime.current = remainingTime.current - elapsedTime;\n }\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n const startTimer = ()=>{\n // setTimeout(, Infinity) behaves as if the delay is 0.\n // As a result, the toast would be closed immediately, giving the appearance that it was never rendered.\n // See: https://github.com/denysdovhan/wtfjs?tab=readme-ov-file#an-infinite-timeout\n if (remainingTime.current === Infinity) return;\n closeTimerStartTimeRef.current = new Date().getTime();\n // Let the toast know it has started\n timeoutId = setTimeout(()=>{\n toast.onAutoClose == null ? void 0 : toast.onAutoClose.call(toast, toast);\n deleteToast();\n }, remainingTime.current);\n };\n if (expanded || interacting || isDocumentHidden) {\n pauseTimer();\n } else {\n startTimer();\n }\n return ()=>clearTimeout(timeoutId);\n }, [\n expanded,\n interacting,\n toast,\n toastType,\n isDocumentHidden,\n deleteToast\n ]);\n React.useEffect(()=>{\n if (toast.delete) {\n deleteToast();\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n }\n }, [\n deleteToast,\n toast.delete\n ]);\n function getLoadingIcon() {\n var _toast_classNames;\n if (icons == null ? void 0 : icons.loading) {\n var _toast_classNames1;\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: cn(classNames == null ? void 0 : classNames.loader, toast == null ? void 0 : (_toast_classNames1 = toast.classNames) == null ? void 0 : _toast_classNames1.loader, 'sonner-loader'),\n \"data-visible\": toastType === 'loading'\n }, icons.loading);\n }\n return /*#__PURE__*/ React.createElement(Loader, {\n className: cn(classNames == null ? void 0 : classNames.loader, toast == null ? void 0 : (_toast_classNames = toast.classNames) == null ? void 0 : _toast_classNames.loader),\n visible: toastType === 'loading'\n });\n }\n const icon = toast.icon || (icons == null ? void 0 : icons[toastType]) || getAsset(toastType);\n var _toast_richColors, _icons_close;\n return /*#__PURE__*/ React.createElement(\"li\", {\n tabIndex: 0,\n ref: toastRef,\n className: cn(className, toastClassname, classNames == null ? void 0 : classNames.toast, toast == null ? void 0 : (_toast_classNames = toast.classNames) == null ? void 0 : _toast_classNames.toast, classNames == null ? void 0 : classNames.default, classNames == null ? void 0 : classNames[toastType], toast == null ? void 0 : (_toast_classNames1 = toast.classNames) == null ? void 0 : _toast_classNames1[toastType]),\n \"data-sonner-toast\": \"\",\n \"data-rich-colors\": (_toast_richColors = toast.richColors) != null ? _toast_richColors : defaultRichColors,\n \"data-styled\": !Boolean(toast.jsx || toast.unstyled || unstyled),\n \"data-mounted\": mounted,\n \"data-promise\": Boolean(toast.promise),\n \"data-swiped\": isSwiped,\n \"data-removed\": removed,\n \"data-visible\": isVisible,\n \"data-y-position\": y,\n \"data-x-position\": x,\n \"data-index\": index,\n \"data-front\": isFront,\n \"data-swiping\": swiping,\n \"data-dismissible\": dismissible,\n \"data-type\": toastType,\n \"data-invert\": invert,\n \"data-swipe-out\": swipeOut,\n \"data-swipe-direction\": swipeOutDirection,\n \"data-expanded\": Boolean(expanded || expandByDefault && mounted),\n \"data-testid\": toast.testId,\n style: {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style\n },\n onDragEnd: ()=>{\n setSwiping(false);\n setSwipeDirection(null);\n pointerStartRef.current = null;\n },\n onPointerDown: (event)=>{\n if (event.button === 2) return; // Return early on right click\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n event.target.setPointerCapture(event.pointerId);\n if (event.target.tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = {\n x: event.clientX,\n y: event.clientY\n };\n },\n onPointerUp: ()=>{\n var _toastRef_current, _toastRef_current1, _dragStartTime_current;\n if (swipeOut || !dismissible) return;\n pointerStartRef.current = null;\n const swipeAmountX = Number(((_toastRef_current = toastRef.current) == null ? void 0 : _toastRef_current.style.getPropertyValue('--swipe-amount-x').replace('px', '')) || 0);\n const swipeAmountY = Number(((_toastRef_current1 = toastRef.current) == null ? void 0 : _toastRef_current1.style.getPropertyValue('--swipe-amount-y').replace('px', '')) || 0);\n const timeTaken = new Date().getTime() - ((_dragStartTime_current = dragStartTime.current) == null ? void 0 : _dragStartTime_current.getTime());\n const swipeAmount = swipeDirection === 'x' ? swipeAmountX : swipeAmountY;\n const velocity = Math.abs(swipeAmount) / timeTaken;\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n if (swipeDirection === 'x') {\n setSwipeOutDirection(swipeAmountX > 0 ? 'right' : 'left');\n } else {\n setSwipeOutDirection(swipeAmountY > 0 ? 'down' : 'up');\n }\n deleteToast();\n setSwipeOut(true);\n return;\n } else {\n var _toastRef_current2, _toastRef_current3;\n (_toastRef_current2 = toastRef.current) == null ? void 0 : _toastRef_current2.style.setProperty('--swipe-amount-x', `0px`);\n (_toastRef_current3 = toastRef.current) == null ? void 0 : _toastRef_current3.style.setProperty('--swipe-amount-y', `0px`);\n }\n setIsSwiped(false);\n setSwiping(false);\n setSwipeDirection(null);\n },\n onPointerMove: (event)=>{\n var _window_getSelection, // Apply transform using both x and y values\n _toastRef_current, _toastRef_current1;\n if (!pointerStartRef.current || !dismissible) return;\n const isHighlighted = ((_window_getSelection = window.getSelection()) == null ? void 0 : _window_getSelection.toString().length) > 0;\n if (isHighlighted) return;\n const yDelta = event.clientY - pointerStartRef.current.y;\n const xDelta = event.clientX - pointerStartRef.current.x;\n var _props_swipeDirections;\n const swipeDirections = (_props_swipeDirections = props.swipeDirections) != null ? _props_swipeDirections : getDefaultSwipeDirections(position);\n // Determine swipe direction if not already locked\n if (!swipeDirection && (Math.abs(xDelta) > 1 || Math.abs(yDelta) > 1)) {\n setSwipeDirection(Math.abs(xDelta) > Math.abs(yDelta) ? 'x' : 'y');\n }\n let swipeAmount = {\n x: 0,\n y: 0\n };\n const getDampening = (delta)=>{\n const factor = Math.abs(delta) / 20;\n return 1 / (1.5 + factor);\n };\n // Only apply swipe in the locked direction\n if (swipeDirection === 'y') {\n // Handle vertical swipes\n if (swipeDirections.includes('top') || swipeDirections.includes('bottom')) {\n if (swipeDirections.includes('top') && yDelta < 0 || swipeDirections.includes('bottom') && yDelta > 0) {\n swipeAmount.y = yDelta;\n } else {\n // Smoothly transition to dampened movement\n const dampenedDelta = yDelta * getDampening(yDelta);\n // Ensure we don't jump when transitioning to dampened movement\n swipeAmount.y = Math.abs(dampenedDelta) < Math.abs(yDelta) ? dampenedDelta : yDelta;\n }\n }\n } else if (swipeDirection === 'x') {\n // Handle horizontal swipes\n if (swipeDirections.includes('left') || swipeDirections.includes('right')) {\n if (swipeDirections.includes('left') && xDelta < 0 || swipeDirections.includes('right') && xDelta > 0) {\n swipeAmount.x = xDelta;\n } else {\n // Smoothly transition to dampened movement\n const dampenedDelta = xDelta * getDampening(xDelta);\n // Ensure we don't jump when transitioning to dampened movement\n swipeAmount.x = Math.abs(dampenedDelta) < Math.abs(xDelta) ? dampenedDelta : xDelta;\n }\n }\n }\n if (Math.abs(swipeAmount.x) > 0 || Math.abs(swipeAmount.y) > 0) {\n setIsSwiped(true);\n }\n (_toastRef_current = toastRef.current) == null ? void 0 : _toastRef_current.style.setProperty('--swipe-amount-x', `${swipeAmount.x}px`);\n (_toastRef_current1 = toastRef.current) == null ? void 0 : _toastRef_current1.style.setProperty('--swipe-amount-y', `${swipeAmount.y}px`);\n }\n }, closeButton && !toast.jsx && toastType !== 'loading' ? /*#__PURE__*/ React.createElement(\"button\", {\n \"aria-label\": closeButtonAriaLabel,\n \"data-disabled\": disabled,\n \"data-close-button\": true,\n onClick: disabled || !dismissible ? ()=>{} : ()=>{\n deleteToast();\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n },\n className: cn(classNames == null ? void 0 : classNames.closeButton, toast == null ? void 0 : (_toast_classNames2 = toast.classNames) == null ? void 0 : _toast_classNames2.closeButton)\n }, (_icons_close = icons == null ? void 0 : icons.close) != null ? _icons_close : CloseIcon) : null, (toastType || toast.icon || toast.promise) && toast.icon !== null && ((icons == null ? void 0 : icons[toastType]) !== null || toast.icon) ? /*#__PURE__*/ React.createElement(\"div\", {\n \"data-icon\": \"\",\n className: cn(classNames == null ? void 0 : classNames.icon, toast == null ? void 0 : (_toast_classNames3 = toast.classNames) == null ? void 0 : _toast_classNames3.icon)\n }, toast.promise || toast.type === 'loading' && !toast.icon ? toast.icon || getLoadingIcon() : null, toast.type !== 'loading' ? icon : null) : null, /*#__PURE__*/ React.createElement(\"div\", {\n \"data-content\": \"\",\n className: cn(classNames == null ? void 0 : classNames.content, toast == null ? void 0 : (_toast_classNames4 = toast.classNames) == null ? void 0 : _toast_classNames4.content)\n }, /*#__PURE__*/ React.createElement(\"div\", {\n \"data-title\": \"\",\n className: cn(classNames == null ? void 0 : classNames.title, toast == null ? void 0 : (_toast_classNames5 = toast.classNames) == null ? void 0 : _toast_classNames5.title)\n }, toast.jsx ? toast.jsx : typeof toast.title === 'function' ? toast.title() : toast.title), toast.description ? /*#__PURE__*/ React.createElement(\"div\", {\n \"data-description\": \"\",\n className: cn(descriptionClassName, toastDescriptionClassname, classNames == null ? void 0 : classNames.description, toast == null ? void 0 : (_toast_classNames6 = toast.classNames) == null ? void 0 : _toast_classNames6.description)\n }, typeof toast.description === 'function' ? toast.description() : toast.description) : null), /*#__PURE__*/ React.isValidElement(toast.cancel) ? toast.cancel : toast.cancel && isAction(toast.cancel) ? /*#__PURE__*/ React.createElement(\"button\", {\n \"data-button\": true,\n \"data-cancel\": true,\n style: toast.cancelButtonStyle || cancelButtonStyle,\n onClick: (event)=>{\n // We need to check twice because typescript\n if (!isAction(toast.cancel)) return;\n if (!dismissible) return;\n toast.cancel.onClick == null ? void 0 : toast.cancel.onClick.call(toast.cancel, event);\n deleteToast();\n },\n className: cn(classNames == null ? void 0 : classNames.cancelButton, toast == null ? void 0 : (_toast_classNames7 = toast.classNames) == null ? void 0 : _toast_classNames7.cancelButton)\n }, toast.cancel.label) : null, /*#__PURE__*/ React.isValidElement(toast.action) ? toast.action : toast.action && isAction(toast.action) ? /*#__PURE__*/ React.createElement(\"button\", {\n \"data-button\": true,\n \"data-action\": true,\n style: toast.actionButtonStyle || actionButtonStyle,\n onClick: (event)=>{\n // We need to check twice because typescript\n if (!isAction(toast.action)) return;\n toast.action.onClick == null ? void 0 : toast.action.onClick.call(toast.action, event);\n if (event.defaultPrevented) return;\n deleteToast();\n },\n className: cn(classNames == null ? void 0 : classNames.actionButton, toast == null ? void 0 : (_toast_classNames8 = toast.classNames) == null ? void 0 : _toast_classNames8.actionButton)\n }, toast.action.label) : null);\n};\nfunction getDocumentDirection() {\n if (typeof window === 'undefined') return 'ltr';\n if (typeof document === 'undefined') return 'ltr'; // For Fresh purpose\n const dirAttribute = document.documentElement.getAttribute('dir');\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction;\n }\n return dirAttribute;\n}\nfunction assignOffset(defaultOffset, mobileOffset) {\n const styles = {};\n [\n defaultOffset,\n mobileOffset\n ].forEach((offset, index)=>{\n const isMobile = index === 1;\n const prefix = isMobile ? '--mobile-offset' : '--offset';\n const defaultValue = isMobile ? MOBILE_VIEWPORT_OFFSET : VIEWPORT_OFFSET;\n function assignAll(offset) {\n [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ].forEach((key)=>{\n styles[`${prefix}-${key}`] = typeof offset === 'number' ? `${offset}px` : offset;\n });\n }\n if (typeof offset === 'number' || typeof offset === 'string') {\n assignAll(offset);\n } else if (typeof offset === 'object') {\n [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ].forEach((key)=>{\n if (offset[key] === undefined) {\n styles[`${prefix}-${key}`] = defaultValue;\n } else {\n styles[`${prefix}-${key}`] = typeof offset[key] === 'number' ? `${offset[key]}px` : offset[key];\n }\n });\n } else {\n assignAll(defaultValue);\n }\n });\n return styles;\n}\nfunction useSonner() {\n const [activeToasts, setActiveToasts] = React.useState([]);\n React.useEffect(()=>{\n return ToastState.subscribe((toast)=>{\n if (toast.dismiss) {\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setActiveToasts((toasts)=>toasts.filter((t)=>t.id !== toast.id));\n });\n });\n return;\n }\n // Prevent batching, temp solution.\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setActiveToasts((toasts)=>{\n const indexOfExistingToast = toasts.findIndex((t)=>t.id === toast.id);\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n {\n ...toasts[indexOfExistingToast],\n ...toast\n },\n ...toasts.slice(indexOfExistingToast + 1)\n ];\n }\n return [\n toast,\n ...toasts\n ];\n });\n });\n });\n });\n }, []);\n return {\n toasts: activeToasts\n };\n}\nconst Toaster = /*#__PURE__*/ React.forwardRef(function Toaster(props, ref) {\n const { id, invert, position = 'bottom-right', hotkey = [\n 'altKey',\n 'KeyT'\n ], expand, closeButton, className, offset, mobileOffset, theme = 'light', richColors, duration, style, visibleToasts = VISIBLE_TOASTS_AMOUNT, toastOptions, dir = getDocumentDirection(), gap = GAP, icons, containerAriaLabel = 'Notifications' } = props;\n const [toasts, setToasts] = React.useState([]);\n const filteredToasts = React.useMemo(()=>{\n if (id) {\n return toasts.filter((toast)=>toast.toasterId === id);\n }\n return toasts.filter((toast)=>!toast.toasterId);\n }, [\n toasts,\n id\n ]);\n const possiblePositions = React.useMemo(()=>{\n return Array.from(new Set([\n position\n ].concat(filteredToasts.filter((toast)=>toast.position).map((toast)=>toast.position))));\n }, [\n filteredToasts,\n position\n ]);\n const [heights, setHeights] = React.useState([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [actualTheme, setActualTheme] = React.useState(theme !== 'system' ? theme : typeof window !== 'undefined' ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' : 'light');\n const listRef = React.useRef(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef(null);\n const isFocusWithinRef = React.useRef(false);\n const removeToast = React.useCallback((toastToRemove)=>{\n setToasts((toasts)=>{\n var _toasts_find;\n if (!((_toasts_find = toasts.find((toast)=>toast.id === toastToRemove.id)) == null ? void 0 : _toasts_find.delete)) {\n ToastState.dismiss(toastToRemove.id);\n }\n return toasts.filter(({ id })=>id !== toastToRemove.id);\n });\n }, []);\n React.useEffect(()=>{\n return ToastState.subscribe((toast)=>{\n if (toast.dismiss) {\n // Prevent batching of other state updates\n requestAnimationFrame(()=>{\n setToasts((toasts)=>toasts.map((t)=>t.id === toast.id ? {\n ...t,\n delete: true\n } : t));\n });\n return;\n }\n // Prevent batching, temp solution.\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setToasts((toasts)=>{\n const indexOfExistingToast = toasts.findIndex((t)=>t.id === toast.id);\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n {\n ...toasts[indexOfExistingToast],\n ...toast\n },\n ...toasts.slice(indexOfExistingToast + 1)\n ];\n }\n return [\n toast,\n ...toasts\n ];\n });\n });\n });\n });\n }, [\n toasts\n ]);\n React.useEffect(()=>{\n if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n if (theme === 'system') {\n // check if current preference is dark\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n // it's currently dark\n setActualTheme('dark');\n } else {\n // it's not dark\n setActualTheme('light');\n }\n }\n if (typeof window === 'undefined') return;\n const darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n try {\n // Chrome & Firefox\n darkMediaQuery.addEventListener('change', ({ matches })=>{\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n } catch (error) {\n // Safari < 14\n darkMediaQuery.addListener(({ matches })=>{\n try {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n } catch (e) {\n console.error(e);\n }\n });\n }\n }, [\n theme\n ]);\n React.useEffect(()=>{\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [\n toasts\n ]);\n React.useEffect(()=>{\n const handleKeyDown = (event)=>{\n var _listRef_current;\n const isHotkeyPressed = hotkey.every((key)=>event[key] || event.code === key);\n if (isHotkeyPressed) {\n var _listRef_current1;\n setExpanded(true);\n (_listRef_current1 = listRef.current) == null ? void 0 : _listRef_current1.focus();\n }\n if (event.code === 'Escape' && (document.activeElement === listRef.current || ((_listRef_current = listRef.current) == null ? void 0 : _listRef_current.contains(document.activeElement)))) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return ()=>document.removeEventListener('keydown', handleKeyDown);\n }, [\n hotkey\n ]);\n React.useEffect(()=>{\n if (listRef.current) {\n return ()=>{\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({\n preventScroll: true\n });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n };\n }\n }, [\n listRef.current\n ]);\n return(// Remove item from normal navigation flow, only available via hotkey\n /*#__PURE__*/ React.createElement(\"section\", {\n ref: ref,\n \"aria-label\": `${containerAriaLabel} ${hotkeyLabel}`,\n tabIndex: -1,\n \"aria-live\": \"polite\",\n \"aria-relevant\": \"additions text\",\n \"aria-atomic\": \"false\",\n suppressHydrationWarning: true\n }, possiblePositions.map((position, index)=>{\n var _heights_;\n const [y, x] = position.split('-');\n if (!filteredToasts.length) return null;\n return /*#__PURE__*/ React.createElement(\"ol\", {\n key: position,\n dir: dir === 'auto' ? getDocumentDirection() : dir,\n tabIndex: -1,\n ref: listRef,\n className: className,\n \"data-sonner-toaster\": true,\n \"data-sonner-theme\": actualTheme,\n \"data-y-position\": y,\n \"data-x-position\": x,\n style: {\n '--front-toast-height': `${((_heights_ = heights[0]) == null ? void 0 : _heights_.height) || 0}px`,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${gap}px`,\n ...style,\n ...assignOffset(offset, mobileOffset)\n },\n onBlur: (event)=>{\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({\n preventScroll: true\n });\n lastFocusedElementRef.current = null;\n }\n }\n },\n onFocus: (event)=>{\n const isNotDismissible = event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n if (isNotDismissible) return;\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget;\n }\n },\n onMouseEnter: ()=>setExpanded(true),\n onMouseMove: ()=>setExpanded(true),\n onMouseLeave: ()=>{\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n },\n onDragEnd: ()=>setExpanded(false),\n onPointerDown: (event)=>{\n const isNotDismissible = event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n if (isNotDismissible) return;\n setInteracting(true);\n },\n onPointerUp: ()=>setInteracting(false)\n }, filteredToasts.filter((toast)=>!toast.position && index === 0 || toast.position === position).map((toast, index)=>{\n var _toastOptions_duration, _toastOptions_closeButton;\n return /*#__PURE__*/ React.createElement(Toast, {\n key: toast.id,\n icons: icons,\n index: index,\n toast: toast,\n defaultRichColors: richColors,\n duration: (_toastOptions_duration = toastOptions == null ? void 0 : toastOptions.duration) != null ? _toastOptions_duration : duration,\n className: toastOptions == null ? void 0 : toastOptions.className,\n descriptionClassName: toastOptions == null ? void 0 : toastOptions.descriptionClassName,\n invert: invert,\n visibleToasts: visibleToasts,\n closeButton: (_toastOptions_closeButton = toastOptions == null ? void 0 : toastOptions.closeButton) != null ? _toastOptions_closeButton : closeButton,\n interacting: interacting,\n position: position,\n style: toastOptions == null ? void 0 : toastOptions.style,\n unstyled: toastOptions == null ? void 0 : toastOptions.unstyled,\n classNames: toastOptions == null ? void 0 : toastOptions.classNames,\n cancelButtonStyle: toastOptions == null ? void 0 : toastOptions.cancelButtonStyle,\n actionButtonStyle: toastOptions == null ? void 0 : toastOptions.actionButtonStyle,\n closeButtonAriaLabel: toastOptions == null ? void 0 : toastOptions.closeButtonAriaLabel,\n removeToast: removeToast,\n toasts: filteredToasts.filter((t)=>t.position == toast.position),\n heights: heights.filter((h)=>h.position == toast.position),\n setHeights: setHeights,\n expandByDefault: expand,\n gap: gap,\n expanded: expanded,\n swipeDirections: props.swipeDirections\n });\n }));\n })));\n});\n\nexport { Toaster, toast, useSonner };\n","import { createContext, useContext } from \"react\";\nimport type { Appearance } from \"../appearance/appearance\";\nimport type { RoadClient } from \"../api/client\";\nimport type { LocalizationOverride } from \"../i18n/context\";\n\nexport interface RoadContextValue {\n appearance?: Appearance;\n apiBaseUrl: string;\n locale: string;\n localization?: LocalizationOverride;\n client: RoadClient;\n}\n\nexport const RoadContext = createContext<RoadContextValue | null>(null);\n\nexport function useRoad(): RoadContextValue {\n const ctx = useContext(RoadContext);\n if (!ctx) {\n throw new Error(\"useRoad must be used inside <RoadProvider>\");\n }\n return ctx;\n}\n","import { useCallback } from \"react\";\nimport {\n useInfiniteQuery,\n useMutation,\n useQuery,\n useQueryClient,\n type InfiniteData,\n} from \"@tanstack/react-query\";\nimport { useRoad } from \"../provider/context\";\nimport { useCurrentBusinessUnitId } from \"../provider/current-business-unit\";\nimport type { RoadClient } from \"./client\";\nimport type {\n BusinessUnitDetail,\n CreateBusinessUnitInput,\n CreateInvitationInput,\n CreateRoleInput,\n CurrentUser,\n Invitation,\n Member,\n MyBusinessUnits,\n MyPermissions,\n PaginatedList,\n Permission,\n RoadPermission,\n Role,\n UpdateBusinessUnitInput,\n UpdateRoleInput,\n} from \"./types\";\n\n/**\n * Action argument accepted by useCan(). Autocompletes Road's core permission\n * set (read/manage × the four built-in subjects, plus \"*\"), and accepts any\n * other string for platform-specific permissions.\n */\ntype PermissionInput = RoadPermission | (string & {});\n\nconst KEYS = {\n me: [\"road\", \"me\", \"profile\"] as const,\n myBUs: [\"road\", \"me\", \"business-units\"] as const,\n myPermissions: [\"road\", \"me\", \"permissions\"] as const,\n bu: (id: string) => [\"road\", \"bu\", id] as const,\n members: (id: string) => [\"road\", \"bu\", id, \"members\"] as const,\n invitations: (id: string) => [\"road\", \"bu\", id, \"invitations\"] as const,\n roles: (id: string) => [\"road\", \"bu\", id, \"roles\"] as const,\n role: (buId: string, roleId: string) => [\"road\", \"bu\", buId, \"roles\", roleId] as const,\n permissions: (id: string) => [\"road\", \"bu\", id, \"permissions\"] as const,\n};\n\nexport function useCurrentUser() {\n const { client } = useRoad();\n return useQuery<CurrentUser>({\n queryKey: KEYS.me,\n queryFn: () => client.getCurrentUser(),\n });\n}\n\nexport function useMyBusinessUnits() {\n const { client } = useRoad();\n return useQuery<MyBusinessUnits>({\n queryKey: KEYS.myBUs,\n queryFn: () => client.getMyBusinessUnits(),\n });\n}\n\nexport function useMyPermissions() {\n const { client } = useRoad();\n return useQuery<MyPermissions>({\n queryKey: KEYS.myPermissions,\n queryFn: () => client.getMyPermissions(),\n });\n}\n\n/**\n * Permission check for the current user inside a business unit.\n *\n * Returns a callable that resolves the action against the user's effective\n * permissions for the given BU. A role with `[\"*\"]` short-circuits to true.\n * While permissions are still loading, returns `false` (deny by default).\n *\n * Called with no arguments, reads the current BU from CurrentBusinessUnitContext\n * (set by <BusinessUnitSwitcher /> or useSetCurrentBusinessUnit). Pass an\n * explicit buId — or `null` to denote \"no BU\" — to bypass the context lookup.\n */\nexport function useCan(): (action: PermissionInput) => boolean;\nexport function useCan(buId: string | null | undefined): (action: PermissionInput) => boolean;\nexport function useCan(buId?: string | null): (action: PermissionInput) => boolean {\n const ctxId = useCurrentBusinessUnitId();\n const effectiveBuId = buId === undefined ? ctxId : buId;\n const { data } = useMyPermissions();\n return useCallback(\n (action: string) => {\n if (!effectiveBuId || !data) return false;\n const perms = data[effectiveBuId];\n if (!perms) return false;\n if (perms.includes(\"*\")) return true;\n return perms.includes(action);\n },\n [data, effectiveBuId],\n );\n}\n\n/**\n * Returns the raw RoadClient. Escape hatch for one-off calls or custom\n * queries the typed hooks don't cover (Storybook, integration tests,\n * extending the toolkit).\n */\nexport function useRoadClient(): RoadClient {\n return useRoad().client;\n}\n\nexport interface CanManyResult<P extends string> {\n /** Per-permission result keyed by the input string. */\n permissions: Record<P, boolean>;\n /** True iff every permission in the list is granted. Empty list ⇒ true (vacuous). */\n canAll: boolean;\n /** True iff at least one permission in the list is granted. Empty list ⇒ false. */\n canAny: boolean;\n}\n\n/**\n * Batch permission check — convenient for pages that gate behavior on\n * multiple actions at once. Returns a result with per-permission booleans\n * plus canAll / canAny convenience flags.\n *\n * Calls Road's POST /iam/authorization/authorize/batch endpoint in one\n * round-trip — the engine evaluates every permission with full semantics\n * (manage → CRUD expansion, wildcards, scope inheritance), so this is\n * strictly more accurate than useCan, which does in-memory string-match\n * against the cached useMyPermissions list. React Query caches the\n * result keyed by (buId, permissions), so repeated calls with the same\n * list reuse the cache.\n *\n * Pass an `as const` array to get typed keys on the returned `permissions`\n * record:\n *\n * const { permissions, canAll } = useCanMany([\n * \"manage:Role\",\n * \"manage:Member\",\n * \"manage:Invitation\",\n * ] as const);\n * if (!canAll) return <ReadOnlyView />;\n * permissions[\"manage:Role\"]; // typed string literal\n *\n * Reads the current BU from CurrentBusinessUnitContext when buId is\n * omitted. Pass an explicit buId — or `null` — to bypass the context;\n * with no effective BU, every permission resolves to false (deny-by-\n * default), matching useCan's behavior.\n *\n * While the batch query is loading, every permission also reads false —\n * gated UI hides rather than flashes-visible-then-hidden, same trade-off\n * useCan makes.\n */\nexport function useCanMany<P extends RoadPermission | (string & {})>(\n actions: readonly P[],\n): CanManyResult<P>;\nexport function useCanMany<P extends RoadPermission | (string & {})>(\n actions: readonly P[],\n buId: string | null | undefined,\n): CanManyResult<P>;\nexport function useCanMany<P extends string>(\n actions: readonly P[],\n buId?: string | null,\n): CanManyResult<P> {\n const { client } = useRoad();\n const ctxBuId = useCurrentBusinessUnitId();\n const effectiveBuId = buId === undefined ? ctxBuId : buId;\n // Stable cache key for the action list — array reference identity is\n // unreliable since callers pass inline literals.\n const actionsKey = actions.join(\"|\");\n const { data } = useQuery<Record<string, boolean>>({\n queryKey: [\"road\", \"authorize-batch\", effectiveBuId, actionsKey],\n queryFn: () => client.authorizeBatch(effectiveBuId!, actions as readonly string[]),\n enabled: !!effectiveBuId && actions.length > 0,\n });\n\n // Empty list ⇒ canAll true (vacuous AND), canAny false (vacuous OR) —\n // matches the JSDoc contract and the behaviour callers expect when\n // gating on a conditional permission set.\n const permissions = {} as Record<P, boolean>;\n let canAny = false;\n let canAll = true;\n for (const a of actions) {\n const v = data?.[a] ?? false;\n permissions[a] = v;\n if (v) canAny = true;\n else canAll = false;\n }\n return { permissions, canAll, canAny };\n}\n\nexport function useBusinessUnit(buId: string | null) {\n const { client } = useRoad();\n return useQuery<BusinessUnitDetail>({\n queryKey: buId ? KEYS.bu(buId) : [\"road\", \"bu\", \"null\"],\n queryFn: () => client.getBusinessUnit(buId!),\n enabled: !!buId,\n });\n}\n\n/**\n * Convenience hook that returns the first page of members for a BU\n * unwrapped as `Member[]`. For BUs with thousands of members, prefer\n * {@link useInfiniteMembers} and `loadMore`. With no buId the hook is\n * disabled and `data` stays undefined (same as before pagination).\n */\nexport function useMembers(buId: string | null) {\n const { client } = useRoad();\n return useQuery<Member[]>({\n queryKey: buId ? KEYS.members(buId) : [\"road\", \"bu\", \"null\", \"members\"],\n queryFn: async () => (await client.listMembers(buId!)).data,\n enabled: !!buId,\n });\n}\n\n/**\n * Cursor-paginated members list. Wraps React Query's useInfiniteQuery so\n * callers can flatten across pages or call `fetchNextPage()` from a\n * \"load more\" button. `pagination.cursor` is the cursor for the next page\n * — falsy when the last page has loaded.\n */\nexport function useInfiniteMembers(buId: string | null, limit?: number) {\n const { client } = useRoad();\n return useInfiniteQuery<\n PaginatedList<Member>,\n Error,\n InfiniteData<PaginatedList<Member>>,\n readonly unknown[],\n string | undefined\n >({\n queryKey: buId\n ? [...KEYS.members(buId), \"infinite\", limit ?? null]\n : [\"road\", \"bu\", \"null\", \"members\", \"infinite\"],\n queryFn: ({ pageParam }) =>\n client.listMembers(buId!, { cursor: pageParam, limit }),\n initialPageParam: undefined,\n getNextPageParam: (last) => last.pagination.cursor ?? undefined,\n enabled: !!buId,\n });\n}\n\n/**\n * Convenience hook that returns the first page of invitations for a BU\n * unwrapped as `Invitation[]`. Prefer {@link useInfiniteInvitations}\n * for BUs that may have many pending invitations historically.\n */\nexport function useInvitations(buId: string | null) {\n const { client } = useRoad();\n return useQuery<Invitation[]>({\n queryKey: buId ? KEYS.invitations(buId) : [\"road\", \"bu\", \"null\", \"invitations\"],\n queryFn: async () => (await client.listInvitations(buId!)).data,\n enabled: !!buId,\n });\n}\n\n/** Cursor-paginated invitations list (see {@link useInfiniteMembers}). */\nexport function useInfiniteInvitations(buId: string | null, limit?: number) {\n const { client } = useRoad();\n return useInfiniteQuery<\n PaginatedList<Invitation>,\n Error,\n InfiniteData<PaginatedList<Invitation>>,\n readonly unknown[],\n string | undefined\n >({\n queryKey: buId\n ? [...KEYS.invitations(buId), \"infinite\", limit ?? null]\n : [\"road\", \"bu\", \"null\", \"invitations\", \"infinite\"],\n queryFn: ({ pageParam }) =>\n client.listInvitations(buId!, { cursor: pageParam, limit }),\n initialPageParam: undefined,\n getNextPageParam: (last) => last.pagination.cursor ?? undefined,\n enabled: !!buId,\n });\n}\n\nexport function useCreateBusinessUnit() {\n const { client } = useRoad();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (input: CreateBusinessUnitInput) => client.createBusinessUnit(input),\n onSuccess: () => {\n void qc.invalidateQueries({ queryKey: KEYS.myBUs });\n },\n });\n}\n\nexport function useUpdateBusinessUnit(buId: string) {\n const { client } = useRoad();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (input: UpdateBusinessUnitInput) => client.updateBusinessUnit(buId, input),\n onSuccess: (bu) => {\n qc.setQueryData(KEYS.bu(buId), bu);\n void qc.invalidateQueries({ queryKey: KEYS.myBUs });\n },\n });\n}\n\nexport function useSuspendMember(buId: string) {\n const { client } = useRoad();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (memberId: string) => client.suspendMember(buId, memberId),\n onSuccess: () => qc.invalidateQueries({ queryKey: KEYS.members(buId) }),\n });\n}\n\nexport function useReinstateMember(buId: string) {\n const { client } = useRoad();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (memberId: string) => client.reinstateMember(buId, memberId),\n onSuccess: () => qc.invalidateQueries({ queryKey: KEYS.members(buId) }),\n });\n}\n\nexport function useRemoveMember(buId: string) {\n const { client } = useRoad();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (memberId: string) => client.removeMember(buId, memberId),\n onSuccess: () => {\n void qc.invalidateQueries({ queryKey: KEYS.members(buId) });\n void qc.invalidateQueries({ queryKey: KEYS.bu(buId) });\n },\n });\n}\n\nexport function useCreateInvitation(buId: string) {\n const { client } = useRoad();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (input: CreateInvitationInput) => client.createInvitation(buId, input),\n onSuccess: () => qc.invalidateQueries({ queryKey: KEYS.invitations(buId) }),\n });\n}\n\nexport function useCancelInvitation(buId: string) {\n const { client } = useRoad();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (invitationId: string) => client.cancelInvitation(buId, invitationId),\n onSuccess: () => qc.invalidateQueries({ queryKey: KEYS.invitations(buId) }),\n });\n}\n\nexport function useResendInvitation(buId: string) {\n const { client } = useRoad();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (invitationId: string) => client.resendInvitation(buId, invitationId),\n onSuccess: () => qc.invalidateQueries({ queryKey: KEYS.invitations(buId) }),\n });\n}\n\nexport function useAcceptInvitation() {\n const { client } = useRoad();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (invitationId: string) => client.acceptInvitation(invitationId),\n onSuccess: () => qc.invalidateQueries({ queryKey: KEYS.myBUs }),\n });\n}\n\nexport function useRejectInvitation() {\n const { client } = useRoad();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (invitationId: string) => client.rejectInvitation(invitationId),\n onSuccess: () => qc.invalidateQueries({ queryKey: KEYS.myBUs }),\n });\n}\n\n// ─────────────────────── Roles & Permissions\n\n/**\n * First page of roles for a BU, unwrapped to `Role[]`. The role catalog\n * is typically small (≤ a few dozen) so most callers don't need\n * pagination — when they do, switch to {@link useInfiniteRoles}.\n *\n * Pass `limit` (up to 100, the API's max) to bump the first-page size\n * when the caller needs all roles in one shot — eg. a picker that has\n * to render every available role. For BUs with > 100 roles, use the\n * infinite variant instead.\n */\nexport function useRoles(buId: string | null, limit?: number) {\n const { client } = useRoad();\n return useQuery<Role[]>({\n queryKey: buId\n ? [...KEYS.roles(buId), \"limit\", limit ?? null]\n : [\"road\", \"bu\", \"null\", \"roles\"],\n queryFn: async () => (await client.listRoles(buId!, { limit })).data,\n enabled: !!buId,\n });\n}\n\n/** Cursor-paginated roles list (see {@link useInfiniteMembers}). */\nexport function useInfiniteRoles(buId: string | null, limit?: number) {\n const { client } = useRoad();\n return useInfiniteQuery<\n PaginatedList<Role>,\n Error,\n InfiniteData<PaginatedList<Role>>,\n readonly unknown[],\n string | undefined\n >({\n queryKey: buId\n ? [...KEYS.roles(buId), \"infinite\", limit ?? null]\n : [\"road\", \"bu\", \"null\", \"roles\", \"infinite\"],\n queryFn: ({ pageParam }) =>\n client.listRoles(buId!, { cursor: pageParam, limit }),\n initialPageParam: undefined,\n getNextPageParam: (last) => last.pagination.cursor ?? undefined,\n enabled: !!buId,\n });\n}\n\nexport function useRole(buId: string | null, roleId: string | null) {\n const { client } = useRoad();\n return useQuery<Role>({\n queryKey:\n buId && roleId ? KEYS.role(buId, roleId) : [\"road\", \"bu\", \"null\", \"roles\", \"null\"],\n queryFn: () => client.getRole(buId!, roleId!),\n enabled: !!buId && !!roleId,\n });\n}\n\nexport function usePermissions(buId: string | null) {\n const { client } = useRoad();\n return useQuery<Permission[]>({\n queryKey: buId ? KEYS.permissions(buId) : [\"road\", \"bu\", \"null\", \"permissions\"],\n queryFn: () => client.listPermissions(buId!),\n enabled: !!buId,\n });\n}\n\nexport function useCreateRole(buId: string) {\n const { client } = useRoad();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (input: CreateRoleInput) => client.createRole(buId, input),\n onSuccess: () => qc.invalidateQueries({ queryKey: KEYS.roles(buId) }),\n });\n}\n\nexport function useUpdateRole(buId: string, roleId: string) {\n const { client } = useRoad();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (input: UpdateRoleInput) => client.updateRole(buId, roleId, input),\n onSuccess: (role) => {\n qc.setQueryData(KEYS.role(buId, roleId), role);\n void qc.invalidateQueries({ queryKey: KEYS.roles(buId) });\n },\n });\n}\n\nexport function useDeleteRole(buId: string) {\n const { client } = useRoad();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (roleId: string) => client.deleteRole(buId, roleId),\n onSuccess: () => qc.invalidateQueries({ queryKey: KEYS.roles(buId) }),\n });\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport { useMyBusinessUnits } from \"../api/hooks\";\nimport type { BusinessUnitSummary } from \"../api/types\";\n\nexport interface BusinessUnitStorage {\n get(key: string): string | null;\n set(key: string, value: string): void;\n remove(key: string): void;\n}\n\nconst localStorageBackend: BusinessUnitStorage = {\n get(key) {\n if (typeof window === \"undefined\") return null;\n try {\n return window.localStorage.getItem(key);\n } catch {\n return null;\n }\n },\n set(key, value) {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(key, value);\n } catch {\n // quota exceeded, private mode, disabled storage — silently no-op\n }\n },\n remove(key) {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.removeItem(key);\n } catch {\n // ditto\n }\n },\n};\n\ninterface CurrentBusinessUnitContextValue {\n currentBusinessUnitId: string | null;\n setCurrentBusinessUnitId: (buId: string) => void;\n}\n\nconst CurrentBusinessUnitContext = createContext<CurrentBusinessUnitContextValue | null>(null);\n\nexport interface CurrentBusinessUnitProviderProps {\n /**\n * Initial business unit ID — consulted at mount only. After mount, the\n * provider's internal state owns the value; user selections via\n * useSetCurrentBusinessUnit() take precedence and persist.\n */\n initialBusinessUnitId?: string;\n /** Storage namespace, usually derived from the host's publishableKey or JWT sub. */\n storageKey: string;\n /** Pluggable storage backend; defaults to localStorage with safe SSR fallbacks. */\n storage?: BusinessUnitStorage;\n /** Fires on every selection change. Hosts use this to drive routing, analytics, etc. */\n onSelect?: (buId: string) => void;\n children: ReactNode;\n}\n\nexport function CurrentBusinessUnitProvider({\n initialBusinessUnitId,\n storageKey,\n storage = localStorageBackend,\n onSelect,\n children,\n}: CurrentBusinessUnitProviderProps) {\n const [currentBusinessUnitId, _setId] = useState<string | null>(() => {\n if (initialBusinessUnitId) return initialBusinessUnitId;\n return storage.get(storageKey);\n });\n\n const setCurrentBusinessUnitId = useCallback(\n (buId: string) => {\n _setId(buId);\n storage.set(storageKey, buId);\n onSelect?.(buId);\n },\n [storage, storageKey, onSelect],\n );\n\n const value = useMemo(\n () => ({ currentBusinessUnitId, setCurrentBusinessUnitId }),\n [currentBusinessUnitId, setCurrentBusinessUnitId],\n );\n\n return (\n <CurrentBusinessUnitContext.Provider value={value}>\n <AutoSelectFirst />\n {children}\n </CurrentBusinessUnitContext.Provider>\n );\n}\n\n/**\n * Auto-selects the first available BU when nothing is set yet AND\n * recovers from a stale persisted id — e.g. the user lost membership\n * since their last session.\n *\n * Cases:\n * - no id stored → pick the first membership\n * - stored id matches a membership → keep it\n * - stored id no longer matches → fall back to the first membership\n * (rather than leaving the selection in limbo, which made every\n * gated UI render as denied)\n *\n * Runs whenever memberships data lands; idempotent thereafter because\n * a valid id short-circuits.\n */\nfunction AutoSelectFirst() {\n const ctx = useContext(CurrentBusinessUnitContext);\n const { data } = useMyBusinessUnits();\n useEffect(() => {\n if (!ctx) return;\n if (!data?.memberships) return;\n const first = data.memberships[0]?.businessUnit.id;\n const current = ctx.currentBusinessUnitId;\n const stillValid =\n current !== null &&\n data.memberships.some((m) => m.businessUnit.id === current);\n if (stillValid) return;\n if (first) ctx.setCurrentBusinessUnitId(first);\n }, [ctx, data]);\n return null;\n}\n\n/** Returns the current business unit ID, or null if none is selected / context is absent. */\nexport function useCurrentBusinessUnitId(): string | null {\n const ctx = useContext(CurrentBusinessUnitContext);\n return ctx?.currentBusinessUnitId ?? null;\n}\n\n/**\n * Returns the full BusinessUnitSummary for the current selection, or null if\n * none is selected, the memberships haven't loaded, or the stored ID no longer\n * matches a membership.\n */\nexport function useCurrentBusinessUnit(): BusinessUnitSummary | null {\n const id = useCurrentBusinessUnitId();\n const { data } = useMyBusinessUnits();\n if (!id) return null;\n return data?.memberships.find((m) => m.businessUnit.id === id)?.businessUnit ?? null;\n}\n\n/**\n * Returns a setter for the current business unit. Throws when used outside\n * <RoadProvider> — a clear programming error, unlike the read hooks which\n * gracefully return null.\n */\nexport function useSetCurrentBusinessUnit(): (buId: string) => void {\n const ctx = useContext(CurrentBusinessUnitContext);\n if (!ctx) {\n throw new Error(\"useSetCurrentBusinessUnit must be used inside <RoadProvider>\");\n }\n return ctx.setCurrentBusinessUnitId;\n}\n","import type { CSSProperties } from \"react\";\n\nexport interface AppearanceVariables {\n colorPrimary?: string;\n colorPrimaryForeground?: string;\n colorBackground?: string;\n colorForeground?: string;\n colorMuted?: string;\n colorAccent?: string;\n colorDanger?: string;\n colorBorder?: string;\n borderRadius?: string;\n fontFamily?: string;\n}\n\nexport interface Appearance {\n variables?: AppearanceVariables;\n colorScheme?: \"light\" | \"dark\" | \"auto\";\n}\n\nconst VARIABLE_TO_CSS_VAR: Record<keyof AppearanceVariables, string> = {\n colorPrimary: \"--primary\",\n colorPrimaryForeground: \"--primary-foreground\",\n colorBackground: \"--background\",\n colorForeground: \"--foreground\",\n colorMuted: \"--muted\",\n colorAccent: \"--accent\",\n colorDanger: \"--destructive\",\n colorBorder: \"--border\",\n borderRadius: \"--radius\",\n fontFamily: \"--font-family\",\n};\n\nexport function appearanceToStyle(appearance?: Appearance): CSSProperties {\n if (!appearance?.variables) return {};\n const style: Record<string, string> = {};\n for (const [key, value] of Object.entries(appearance.variables)) {\n if (value === undefined) continue;\n const cssVar = VARIABLE_TO_CSS_VAR[key as keyof AppearanceVariables];\n if (cssVar) style[cssVar] = value;\n }\n return style as CSSProperties;\n}\n\nexport function resolveColorScheme(scheme?: Appearance[\"colorScheme\"]): \"light\" | \"dark\" {\n if (scheme === \"dark\") return \"dark\";\n if (scheme === \"light\") return \"light\";\n if (typeof window !== \"undefined\" && window.matchMedia(\"(prefers-color-scheme: dark)\").matches) {\n return \"dark\";\n }\n return \"light\";\n}\n","/**\n * Road API error taxonomy. Every non-OK HTTP response from the Road API is\n * mapped to one of these classes so integrators can branch on\n * `instanceof` rather than reading raw HTTP status codes.\n *\n * All errors carry the originating HTTP status, the parsed error body\n * (when the response was a Problem-Details JSON document), the\n * `x-request-id` response header, and the `traceparent` trace id when the\n * API emits one — the values the API logs against the request, so an\n * integrator opening a support ticket has something Road on-call can grep\n * for.\n *\n * Inheritance: every specific class extends `RoadApiError`, so existing\n * `catch (e) { if (e instanceof RoadApiError) … }` blocks still catch\n * every Road error.\n */\n\n/**\n * Shape of the API's RFC 7807 Problem Details body. Road's\n * GlobalExceptionFilter emits this for every error response — see\n * `apps/api/src/common/filters/http-exception.filter.ts`.\n */\nexport interface RoadProblemDetails {\n type?: string;\n title?: string;\n status?: number;\n detail?: string;\n instance?: string;\n errors?: Array<{ field: string; code: string; message: string }>;\n meta?: { requestId?: string | null; timestamp?: string; [k: string]: unknown };\n [k: string]: unknown;\n}\n\nexport interface RoadApiErrorInit {\n status: number;\n statusText: string;\n body: string;\n problem?: RoadProblemDetails;\n requestId?: string;\n traceId?: string;\n}\n\n/**\n * Base class for every Road SDK HTTP error. Specific status codes get\n * subclasses (see below) — integrators should usually branch on those.\n */\nexport class RoadApiError extends Error {\n readonly status: number;\n readonly statusText: string;\n readonly body: string;\n readonly problem?: RoadProblemDetails;\n readonly requestId?: string;\n readonly traceId?: string;\n\n constructor(init: RoadApiErrorInit) {\n const detail = init.problem?.detail ?? init.body ?? init.statusText;\n super(`Road API ${init.status} ${init.statusText}: ${detail}`);\n this.name = \"RoadApiError\";\n this.status = init.status;\n this.statusText = init.statusText;\n this.body = init.body;\n this.problem = init.problem;\n this.requestId = init.requestId;\n this.traceId = init.traceId;\n }\n}\n\n/** 401 — JWT missing, expired, or rejected by the API. Host should refresh and retry. */\nexport class RoadAuthError extends RoadApiError {\n constructor(init: RoadApiErrorInit) {\n super(init);\n this.name = \"RoadAuthError\";\n }\n}\n\n/** 403 — authenticated but not authorized for this resource. */\nexport class RoadForbiddenError extends RoadApiError {\n constructor(init: RoadApiErrorInit) {\n super(init);\n this.name = \"RoadForbiddenError\";\n }\n}\n\n/** 404 — resource doesn't exist (or caller can't see it). */\nexport class RoadNotFoundError extends RoadApiError {\n constructor(init: RoadApiErrorInit) {\n super(init);\n this.name = \"RoadNotFoundError\";\n }\n}\n\n/** 409 — request conflicts with current state (duplicate, version skew, …). */\nexport class RoadConflictError extends RoadApiError {\n constructor(init: RoadApiErrorInit) {\n super(init);\n this.name = \"RoadConflictError\";\n }\n}\n\n/**\n * 400 / 422 — request payload failed validation. `fieldErrors` is keyed\n * by the request field name; values are the list of validator messages\n * for that field. Empty when the API returns a non-field-shaped error.\n */\nexport class RoadValidationError extends RoadApiError {\n readonly fieldErrors: Record<string, string[]>;\n\n constructor(init: RoadApiErrorInit) {\n super(init);\n this.name = \"RoadValidationError\";\n this.fieldErrors = buildFieldErrors(init.problem);\n }\n}\n\n/**\n * 429 — caller is rate-limited. `retryAfter` (seconds) is parsed from\n * the `Retry-After` response header when present.\n */\nexport class RoadRateLimitError extends RoadApiError {\n readonly retryAfter?: number;\n\n constructor(init: RoadApiErrorInit & { retryAfter?: number }) {\n super(init);\n this.name = \"RoadRateLimitError\";\n this.retryAfter = init.retryAfter;\n }\n}\n\n/** 5xx — server-side failure. The SDK's retry loop targets this class + network errors. */\nexport class RoadServerError extends RoadApiError {\n constructor(init: RoadApiErrorInit) {\n super(init);\n this.name = \"RoadServerError\";\n }\n}\n\n/** Network failure before/while reading the response (fetch threw). */\nexport class RoadNetworkError extends RoadApiError {\n readonly cause?: unknown;\n\n constructor(message: string, cause?: unknown) {\n super({ status: 0, statusText: \"Network Error\", body: message });\n this.name = \"RoadNetworkError\";\n this.cause = cause;\n }\n}\n\nfunction buildFieldErrors(problem?: RoadProblemDetails): Record<string, string[]> {\n if (!problem?.errors) return {};\n const out: Record<string, string[]> = {};\n for (const err of problem.errors) {\n const key = err.field || \"_root\";\n (out[key] ??= []).push(err.message);\n }\n return out;\n}\n\nexport function mapStatusToError(init: RoadApiErrorInit & { retryAfter?: number }): RoadApiError {\n const { status } = init;\n if (status === 401) return new RoadAuthError(init);\n if (status === 403) return new RoadForbiddenError(init);\n if (status === 404) return new RoadNotFoundError(init);\n if (status === 409) return new RoadConflictError(init);\n if (status === 422 || status === 400) return new RoadValidationError(init);\n if (status === 429) return new RoadRateLimitError(init);\n if (status >= 500 && status < 600) return new RoadServerError(init);\n return new RoadApiError(init);\n}\n","import type {\n BusinessUnitDetail,\n CreateBusinessUnitInput,\n CreateInvitationInput,\n CreateRoleInput,\n CurrentUser,\n Invitation,\n Member,\n MyBusinessUnits,\n MyPermissions,\n Pagination,\n PaginatedList,\n PaginationInput,\n Permission,\n Role,\n UpdateBusinessUnitInput,\n UpdateRoleInput,\n} from \"./types\";\nimport {\n RoadApiError,\n RoadAuthError,\n RoadNetworkError,\n RoadServerError,\n type RoadProblemDetails,\n mapStatusToError,\n} from \"./errors\";\n\nexport interface RoadClient {\n // Me\n getCurrentUser(): Promise<CurrentUser>;\n getMyBusinessUnits(): Promise<MyBusinessUnits>;\n getMyPermissions(): Promise<MyPermissions>;\n\n // BUs\n getBusinessUnit(buId: string): Promise<BusinessUnitDetail>;\n createBusinessUnit(input: CreateBusinessUnitInput): Promise<BusinessUnitDetail>;\n updateBusinessUnit(buId: string, input: UpdateBusinessUnitInput): Promise<BusinessUnitDetail>;\n\n // Members\n listMembers(buId: string, pagination?: PaginationInput): Promise<PaginatedList<Member>>;\n suspendMember(buId: string, memberId: string): Promise<void>;\n reinstateMember(buId: string, memberId: string): Promise<void>;\n removeMember(buId: string, memberId: string): Promise<void>;\n\n // Invitations\n listInvitations(\n buId: string,\n pagination?: PaginationInput,\n ): Promise<PaginatedList<Invitation>>;\n createInvitation(buId: string, input: CreateInvitationInput): Promise<Invitation>;\n cancelInvitation(buId: string, invitationId: string): Promise<void>;\n resendInvitation(buId: string, invitationId: string): Promise<void>;\n acceptInvitation(invitationId: string): Promise<void>;\n rejectInvitation(invitationId: string): Promise<void>;\n\n // Roles & Permissions (scoped to a BU's IAM scope)\n listRoles(buId: string, pagination?: PaginationInput): Promise<PaginatedList<Role>>;\n getRole(buId: string, roleId: string): Promise<Role>;\n createRole(buId: string, input: CreateRoleInput): Promise<Role>;\n updateRole(buId: string, roleId: string, input: UpdateRoleInput): Promise<Role>;\n deleteRole(buId: string, roleId: string): Promise<void>;\n listPermissions(buId: string): Promise<Permission[]>;\n\n /**\n * Authoritative batch permission check — calls the IAM engine and\n * returns a record from permission code → allowed boolean. Honors\n * the engine's full evaluation (manage → CRUD expansion, wildcards,\n * scope inheritance) — strictly more accurate than the string-match\n * useCan does over the cached useMyPermissions map.\n */\n authorizeBatch(buId: string, permissions: readonly string[]): Promise<Record<string, boolean>>;\n}\n\n/**\n * JWT-source contract. A plain string is accepted for backward-compat,\n * but integrators should pass a getter so token rotation in the host's\n * auth state is picked up on every request without forcing a re-render\n * of <RoadProvider>.\n */\nexport type JwtSource = string | (() => string | Promise<string> | null | undefined);\n\n/**\n * How the SDK authenticates against the Road API.\n *\n * - `'cookie'` — true BFF mode. The browser holds an opaque session\n * cookie; the BFF (Laravel / NestJS) proxies requests to Road and\n * attaches the Auth Server JWT server-side. The SDK sends\n * `credentials: 'include'` and **no** `Authorization` header. On\n * non-GETs the SDK echoes a CSRF token from a cookie into the\n * matching header. This is the default and the recommended path per\n * the IETF OAuth-for-Browser-Apps BCP.\n * - `'bearer'` — the host holds the JWT in JS (legacy SPAs, mobile\n * webviews, headless / partner integrations). The SDK reads it from\n * the `jwt` source and sends `Authorization: Bearer …` on every\n * request. No cookie semantics.\n *\n * Picking the mode is a deployment-shape decision, not a runtime\n * switch — flipping it mid-app changes nothing useful and breaks the\n * server-side auth pipeline.\n */\nexport type RoadAuthMode = \"cookie\" | \"bearer\";\n\nexport interface RetryConfig {\n /** Max attempts including the first try. Default 3. */\n maxAttempts?: number;\n /** Base delay in ms for the exponential backoff. Default 250. */\n baseDelay?: number;\n}\n\nexport interface TelemetryHooks {\n /** Fires after a request completes successfully. */\n onRequest?: (event: TelemetryRequestEvent) => void;\n /** Fires after a request fails (after retries are exhausted). */\n onError?: (error: RoadApiError, event: TelemetryRequestEvent) => void;\n}\n\nexport interface TelemetryRequestEvent {\n method: string;\n path: string;\n status: number;\n durationMs: number;\n /** From the Road response's `x-request-id` header; undefined when the call never reached Road. */\n requestId?: string;\n /** From the Road response's `traceparent` header; undefined when absent or the call never reached Road. */\n traceId?: string;\n /** Total attempts made before resolving (1 when no retries occurred). */\n attempts: number;\n}\n\nexport interface HttpClientConfig {\n apiBaseUrl: string;\n /**\n * Transport shape. Defaults to `'cookie'` — the BFF holds the JWT and\n * the browser ships a session cookie. Pass `'bearer'` only when the\n * host actually holds the JWT (mobile/headless/partner integrations).\n */\n authMode?: RoadAuthMode;\n /** Required iff `authMode === 'bearer'`. Ignored in cookie mode. */\n jwt?: JwtSource;\n /**\n * Fired once per terminal 401 with a 1s debounce. In cookie mode the\n * BFF owns refresh; the SDK can't recover and the handler should\n * redirect to the BFF's login URL. In bearer mode this fires after the\n * existing rotation attempt (if any) also fails.\n */\n onUnauthenticated?: () => void;\n /**\n * Cookie name the SDK reads to source a CSRF token on cookie-mode\n * mutations. Default: `'XSRF-TOKEN'` (Laravel's convention; the\n * NestJS BFF adopts the same).\n */\n csrfCookieName?: string;\n /**\n * Header name the SDK writes the CSRF token into on cookie-mode\n * mutations. Default: `'X-XSRF-TOKEN'`.\n */\n csrfHeaderName?: string;\n /**\n * Cross-origin opt-in for cookie mode. Default `false` — same-origin\n * is the recommended deployment. When `true` the BFF must respond\n * with `Access-Control-Allow-Credentials: true` and matching CORS.\n * Ignored in bearer mode.\n */\n withCredentials?: boolean;\n /** Per-call retry policy for idempotent (GET) + idempotency-keyed requests. */\n retry?: RetryConfig;\n /** Observability hooks for the host app. */\n telemetry?: TelemetryHooks;\n}\n\n/** Road API responses wrap most payloads under `{ data }`. */\ntype Envelope<T> = { data: T };\n\n/** Per-scope permission tuples returned by /iam/authorization/me/permissions?scope= */\ninterface PermissionTuple {\n action: string;\n subject: string;\n}\n\n/** Shape the API returns for a Role row (assignmentCount, not memberCount). */\ninterface ApiRole {\n id: string;\n name: string;\n description: string | null;\n permissions: string[];\n isSystem: boolean;\n assignmentCount: number;\n createdAt?: string;\n scopeId?: string;\n metadata?: Record<string, unknown>;\n updatedAt?: string;\n}\n\nfunction apiRoleToRole(r: ApiRole): Role {\n return {\n id: r.id,\n name: r.name,\n description: r.description ?? \"\",\n permissions: r.permissions,\n isSystem: r.isSystem,\n assignmentCount: r.assignmentCount,\n createdAt: r.createdAt ?? \"\",\n };\n}\n\nconst DEFAULT_RETRY: Required<RetryConfig> = {\n maxAttempts: 3,\n baseDelay: 250,\n};\n\n/**\n * Max scope ids per `/iam/authorization/me/permissions?scopes=` request.\n * Mirrors the API's `MAX_BULK_SCOPES` cap (it 400s above this), so\n * `getMyPermissions` chunks large membership sets across several calls.\n */\nconst MAX_BULK_SCOPES = 50;\n\n/**\n * How long to suppress duplicate `onUnauthenticated` callbacks after\n * the first terminal 401. Tuned for two scenarios the SDK actually\n * sees in practice:\n *\n * 1. **Parallel React Query refetches.** When many queries stale\n * simultaneously (window focus, reconnection, prefetch warmup)\n * and the session has expired, every one of them 401s in the same\n * event-loop tick. We want one redirect, not N. React Query's\n * internal batching is well under 1s; 1s catches the burst with\n * headroom.\n *\n * 2. **Manual logout followed by a refetch.** If the integrator's\n * handler calls `window.location.assign()`, the navigation\n * supersedes the debounce — but if they instead clear local state\n * and rely on the next user action, a 401 1.5–2s later should get\n * its own fresh callback.\n *\n * 1s is short enough that a deliberate re-attempt gets its own call\n * and long enough that no realistic burst fires twice. Constants on\n * the floor instead of the ceiling per SDK_DX_BAR Principle 10 — if\n * an integrator outgrows this they can wrap the handler themselves.\n */\nconst UNAUTH_DEBOUNCE_MS = 1000;\n\nconst sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));\n\n/**\n * Cryptographic UUID for the Idempotency-Key header. Falls back to a\n * Math.random-based v4 layout when the browser lacks crypto.randomUUID\n * (very old browsers, jsdom in some Vitest setups). The fallback isn't\n * cryptographically random but the surface only needs collision\n * resistance for a single user's in-flight retries.\n */\nfunction newIdempotencyKey(): string {\n if (typeof globalThis.crypto !== \"undefined\" && typeof globalThis.crypto.randomUUID === \"function\") {\n return globalThis.crypto.randomUUID();\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\ninterface InternalRequestOptions {\n method?: string;\n body?: BodyInit | null;\n headers?: Record<string, string>;\n /**\n * Explicit idempotency key. The SDK auto-generates one for mutating\n * methods; pass an explicit value to make a retry replay safe (eg.\n * when React Query retries a mutation, both attempts should carry the\n * same key).\n */\n idempotencyKey?: string;\n /** Per-call override for the retry policy. */\n retry?: RetryConfig;\n}\n\nexport class HttpRoadClient implements RoadClient {\n /**\n * buId → iamScopeId cache. Populated lazily by resolveScopeId(); the\n * IAM role / permission endpoints are scope-keyed, but the SDK exposes\n * BU-keyed APIs to integrators — this map bridges the two without\n * forcing every call site to fetch the BU detail first.\n */\n private readonly scopeIdByBuId = new Map<string, string>();\n\n /**\n * Timestamp of the last terminal-401 callback. Used to debounce\n * `onUnauthenticated` so parallel in-flight requests that all 401 at\n * once trigger a single redirect rather than a stampede.\n */\n private lastUnauthAt = 0;\n\n constructor(private readonly config: HttpClientConfig) {}\n\n /**\n * Fire the integrator's onUnauthenticated handler at most once per\n * 1 second. The window is intentionally short — long enough to absorb\n * parallel request bursts, short enough that the next manual user\n * action sees a fresh callback if needed. The handler runs inside a\n * try/catch so a broken integrator callback can't break the SDK.\n */\n private notifyUnauthenticated(): void {\n if (!this.config.onUnauthenticated) return;\n const now = Date.now();\n if (now - this.lastUnauthAt < UNAUTH_DEBOUNCE_MS) return;\n this.lastUnauthAt = now;\n try {\n this.config.onUnauthenticated();\n } catch {\n // Integrator handler threw — swallow so the surrounding throw of\n // RoadAuthError still reaches the caller untouched.\n }\n }\n\n /**\n * Resolve the JWT for this request. Supports the legacy `string`\n * form for backward-compat, plus the recommended getter form so the\n * host can rotate tokens without re-mounting <RoadProvider>.\n */\n private async resolveJwt(): Promise<string | undefined> {\n const src = this.config.jwt;\n if (!src) return undefined;\n if (typeof src === \"string\") return src;\n try {\n const value = await src();\n return value ?? undefined;\n } catch {\n return undefined;\n }\n }\n\n private async request<T>(path: string, options: InternalRequestOptions = {}): Promise<T> {\n const method = (options.method ?? \"GET\").toUpperCase();\n const retryCfg = { ...DEFAULT_RETRY, ...this.config.retry, ...options.retry };\n const idempotencyKey =\n options.idempotencyKey ??\n (isMutatingMethod(method) ? newIdempotencyKey() : undefined);\n const isRetryable = method === \"GET\" || method === \"HEAD\" || !!idempotencyKey;\n const maxAttempts = isRetryable ? retryCfg.maxAttempts : 1;\n\n const start = Date.now();\n let attempts = 0;\n let lastError: RoadApiError | undefined;\n\n while (attempts < maxAttempts) {\n attempts += 1;\n try {\n const { value, status, requestId, traceId } = await this.executeRequest<T>(path, {\n method,\n body: options.body,\n headers: options.headers,\n idempotencyKey,\n });\n this.config.telemetry?.onRequest?.({\n method,\n path,\n status,\n durationMs: Date.now() - start,\n requestId,\n traceId,\n attempts,\n });\n return value;\n } catch (err) {\n if (!(err instanceof RoadApiError)) throw err;\n lastError = err;\n if (!shouldRetry(err) || attempts >= maxAttempts) break;\n await sleep(backoffDelay(retryCfg.baseDelay, attempts));\n }\n }\n\n // Exhausted retries — fire telemetry then throw the last error.\n const finalError = lastError!;\n this.config.telemetry?.onError?.(finalError, {\n method,\n path,\n status: finalError.status,\n durationMs: Date.now() - start,\n requestId: finalError.requestId,\n traceId: finalError.traceId,\n attempts,\n });\n throw finalError;\n }\n\n private async executeRequest<T>(\n path: string,\n options: { method: string; body?: BodyInit | null; headers?: Record<string, string>; idempotencyKey?: string },\n ): Promise<{ value: T; status: number; requestId?: string; traceId?: string }> {\n const authMode = this.config.authMode ?? \"cookie\";\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n ...(options.headers ?? {}),\n };\n\n if (authMode === \"bearer\") {\n const jwt = await this.resolveJwt();\n if (jwt) headers.Authorization = `Bearer ${jwt}`;\n } else if (isMutatingMethod(options.method)) {\n // Cookie mode + mutation — echo the CSRF cookie into the header so\n // the BFF's double-submit guard can match them. If the cookie\n // isn't present we send the request without the header and let\n // the BFF 403 — silent omission would be a debugging nightmare.\n const csrfCookie = this.config.csrfCookieName ?? \"XSRF-TOKEN\";\n const csrfHeader = this.config.csrfHeaderName ?? \"X-XSRF-TOKEN\";\n const token = readCookie(csrfCookie);\n if (token) headers[csrfHeader] = token;\n }\n\n if (options.body && !headers[\"Content-Type\"]) headers[\"Content-Type\"] = \"application/json\";\n if (options.idempotencyKey) headers[\"Idempotency-Key\"] = options.idempotencyKey;\n\n const credentials: RequestCredentials =\n authMode === \"cookie\" || this.config.withCredentials === true\n ? \"include\"\n : \"same-origin\";\n\n let res: Response;\n try {\n res = await fetch(`${this.config.apiBaseUrl}${path}`, {\n method: options.method,\n body: options.body ?? undefined,\n headers,\n credentials,\n });\n } catch (cause) {\n // fetch threw — network blip, DNS, CORS preflight, etc.\n throw new RoadNetworkError(\"Network request failed\", cause);\n }\n\n const requestId =\n res.headers.get(\"x-request-id\") ?? res.headers.get(\"X-Request-Id\") ?? undefined;\n const traceId = res.headers.get(\"traceparent\") ?? undefined;\n\n if (!res.ok) {\n const err = await buildErrorFromResponse(res, requestId, traceId);\n if (err instanceof RoadAuthError) this.notifyUnauthenticated();\n throw err;\n }\n\n if (res.status === 204) return { value: undefined as T, status: 204, requestId, traceId };\n const json = (await res.json()) as T;\n return { value: json, status: res.status, requestId, traceId };\n }\n\n /** Fetch & unwrap a `{ data: T }` envelope. */\n private async fetchData<T>(path: string, options?: InternalRequestOptions): Promise<T> {\n const envelope = await this.request<Envelope<T>>(path, options);\n return envelope.data;\n }\n\n /**\n * Fetch a paginated list from a `{ data: T[], meta: { pagination } }`\n * response. The RequestIdInterceptor on the API side moves the\n * controller's top-level `pagination` field into `meta` so every\n * paginated endpoint converges on a single response shape — this\n * helper centralizes the unwrap.\n *\n * Falls back to a single-page response (cursor=null, hasMore=false)\n * when the response has no pagination metadata, so callers that hit\n * legacy endpoints still get a valid `PaginatedList<T>`.\n */\n private async fetchPaginated<T>(\n path: string,\n pagination?: PaginationInput,\n extraParams?: Record<string, string>,\n ): Promise<PaginatedList<T>> {\n const qs = listQueryString(pagination, extraParams);\n const res = await this.request<{\n data: T[];\n meta?: { pagination?: Pagination };\n pagination?: Pagination;\n }>(`${path}${qs}`);\n // The canonical shape is top-level `pagination`; tolerate a legacy\n // `meta.pagination` and synthesize a single-page default if neither is\n // present. (Named distinctly from the `pagination` input arg above.)\n const paginationMeta: Pagination =\n res.pagination ??\n res.meta?.pagination ?? {\n cursor: null,\n hasMore: false,\n totalCount: res.data.length,\n };\n return { data: res.data, pagination: paginationMeta };\n }\n\n /** Resolve buId → iamScopeId, fetching the BU detail once and caching. */\n private async resolveScopeId(buId: string): Promise<string> {\n const cached = this.scopeIdByBuId.get(buId);\n if (cached) return cached;\n const bu = await this.getBusinessUnit(buId);\n this.scopeIdByBuId.set(buId, bu.iamScopeId);\n return bu.iamScopeId;\n }\n\n // ─────────────────────── Me\n\n /**\n * Cookie mode calls Road's canonical `GET /me/profile` (the single\n * server-authoritative profile endpoint). Bearer mode instead decodes the\n * profile from the JWT's payload claims — the Auth Server's JWT already\n * carries sub / email / name / picture, so we read them client-side and\n * avoid an unnecessary round-trip. The id is the JWT `sub` (the stable\n * Auth Server user id, which matches Road's user references everywhere).\n *\n * **Trust model — read carefully (bearer mode).** This path does NOT verify\n * the JWT signature. The claims are decoded with `atob` and returned as-is.\n * A tampered token can produce a `CurrentUser` with arbitrary\n * `name`/`email`/`avatarUrl` — but cannot perform any action against Road,\n * because the API validates the signature on every data call via the Auth\n * Server's JWKS endpoint and rejects forged tokens with 401. The risk is\n * purely cosmetic (the switcher / member rows might display a wrong identity\n * label).\n *\n * If your security review requires server-authoritative identity in bearer\n * mode too, call `GET /me/profile` directly instead of this method.\n *\n * See the SDK README \"Security model\" section for the full discussion.\n */\n async getCurrentUser(): Promise<CurrentUser> {\n // Cookie mode: the SDK has no JWT in the browser. Ask the API,\n // which derives identity from the bearer the BFF proxies in.\n // React Query caches this for the rest of the session.\n if ((this.config.authMode ?? \"cookie\") === \"cookie\") {\n return this.fetchData<CurrentUser>(\"/me/profile\");\n }\n\n // Bearer mode: decode claims from the JWT for zero round-trips.\n // The trust model is documented above — server-side decisions never\n // rely on the decoded claims; this is purely for UI display.\n const jwt = await this.resolveJwt();\n const claims = decodeJwtPayload(jwt);\n if (!claims) {\n throw new RoadAuthError({\n status: 401,\n statusText: \"Unauthorized\",\n body: \"getCurrentUser: no JWT available on RoadClient\",\n });\n }\n const id = typeof claims.sub === \"string\" ? claims.sub : \"\";\n const email = typeof claims.email === \"string\" ? claims.email : \"\";\n const name =\n typeof claims.name === \"string\" && claims.name\n ? claims.name\n : email || id;\n const picture = typeof claims.picture === \"string\" ? claims.picture : undefined;\n return picture ? { id, name, email, avatarUrl: picture } : { id, name, email };\n }\n\n /** GET /me/business-units — server wraps in `{data}` like every other endpoint. */\n getMyBusinessUnits(): Promise<MyBusinessUnits> {\n return this.fetchData<MyBusinessUnits>(\"/me/business-units\");\n }\n\n /**\n * Effective permissions across every membership the user has. Issues a\n * single bulk request to `GET /iam/authorization/me/permissions?scopes=`\n * — the API returns `{ [scopeId]: PermissionTuple[] }` which we flatten\n * into the SDK's `Record<buId, string[]>` shape that useCan /\n * useMyPermissions consume.\n *\n * The mutator already server-side-expands `manage` into the CRUD set,\n * so each BU's list is complete. Wildcards (`*:*`) collapse to `\"*\"`\n * for compatibility with useCan's wildcard-short-circuit.\n *\n * Resolving every BU's iamScopeId still requires a getBusinessUnit\n * fetch per BU (cached after first call), but that runs in parallel —\n * total round-trips: N parallel BU details + 1 batched permissions.\n * The pre-bulk implementation needed 2N sequential calls.\n */\n async getMyPermissions(): Promise<MyPermissions> {\n const { memberships } = await this.getMyBusinessUnits();\n if (memberships.length === 0) return {};\n\n const scopeIdByBu = await Promise.all(\n memberships.map(async (m) => {\n const buId = m.businessUnit.id;\n const scopeId = await this.resolveScopeId(buId);\n return [buId, scopeId] as const;\n }),\n );\n\n // The API caps the `scopes=` CSV at MAX_BULK_SCOPES (returns 400 above\n // it), so fan out into chunks and merge the per-scope results. Scope\n // ids are de-duplicated first (two BUs can share a scope) to keep each\n // request minimal. Real users have single-digit memberships — this\n // only bites large fleets, but a silent 400 there would be worse.\n const uniqueScopeIds = Array.from(\n new Set(scopeIdByBu.map(([, scopeId]) => scopeId)),\n );\n const byScope: Record<string, PermissionTuple[]> = {};\n const parts = await Promise.all(\n chunk(uniqueScopeIds, MAX_BULK_SCOPES).map((ids) =>\n this.fetchData<Record<string, PermissionTuple[]>>(\n `/iam/authorization/me/permissions?scopes=${ids\n .map(encodeURIComponent)\n .join(\",\")}`,\n ),\n ),\n );\n for (const part of parts) Object.assign(byScope, part);\n\n const out: MyPermissions = {};\n for (const [buId, scopeId] of scopeIdByBu) {\n const tuples = byScope[scopeId] ?? [];\n out[buId] = tuples.map((p) =>\n p.action === \"*\" && p.subject === \"*\" ? \"*\" : `${p.action}:${p.subject}`,\n );\n }\n return out;\n }\n\n // ─────────────────────── Business Units\n\n async getBusinessUnit(buId: string): Promise<BusinessUnitDetail> {\n const bu = await this.fetchData<BusinessUnitDetail>(\n `/organization/business-units/${buId}`,\n );\n this.scopeIdByBuId.set(buId, bu.iamScopeId);\n return bu;\n }\n\n async createBusinessUnit(input: CreateBusinessUnitInput): Promise<BusinessUnitDetail> {\n // The API requires a unique, regex-validated slug\n // (`^[a-z0-9]+(?:-[a-z0-9]+)*$`); omitting it 400s. The slug is an\n // auto-generated identifier (immutable after creation, surfaced\n // read-only in BU settings), so derive it from the name when the\n // caller doesn't supply one — matching the mock client's behavior.\n const body: CreateBusinessUnitInput = {\n ...input,\n slug: input.slug ?? deriveSlug(input.name),\n };\n const bu = await this.fetchData<BusinessUnitDetail>(\"/organization/business-units\", {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n this.scopeIdByBuId.set(bu.id, bu.iamScopeId);\n return bu;\n }\n\n async updateBusinessUnit(\n buId: string,\n input: UpdateBusinessUnitInput,\n ): Promise<BusinessUnitDetail> {\n return this.fetchData<BusinessUnitDetail>(\n `/organization/business-units/${buId}`,\n { method: \"PATCH\", body: JSON.stringify(input) },\n );\n }\n\n // ─────────────────────── Members\n\n /**\n * GET .../members — cursor-paginated. Returns `{ items, pagination }` so\n * callers can drive infinite scroll. The API ships paginated lists as\n * `{ data: Member[], meta: { pagination: Pagination, … } }` (the\n * RequestIdInterceptor absorbs the controller's top-level `pagination`\n * into `meta`). We normalize that into the SDK's `PaginatedList<T>`.\n */\n async listMembers(\n buId: string,\n pagination?: PaginationInput,\n ): Promise<PaginatedList<Member>> {\n // Without these flags the API returns members with `roles: []` and no\n // name/email — the projection is opt-in (member.service gates the role\n // JOIN on `includeRoles` and the profile lookups on `includeProfile`).\n // The member list UI needs both, so always request them.\n return this.fetchPaginated<Member>(\n `/organization/business-units/${buId}/members`,\n pagination,\n { includeRoles: \"true\", includeProfile: \"true\" },\n );\n }\n\n async suspendMember(buId: string, memberId: string): Promise<void> {\n await this.request<unknown>(\n `/organization/business-units/${buId}/members/${memberId}/suspend`,\n { method: \"POST\" },\n );\n }\n\n async reinstateMember(buId: string, memberId: string): Promise<void> {\n await this.request<unknown>(\n `/organization/business-units/${buId}/members/${memberId}/reinstate`,\n { method: \"POST\" },\n );\n }\n\n async removeMember(buId: string, memberId: string): Promise<void> {\n await this.request<unknown>(\n `/organization/business-units/${buId}/members/${memberId}`,\n { method: \"DELETE\" },\n );\n }\n\n // ─────────────────────── Invitations\n\n listInvitations(\n buId: string,\n pagination?: PaginationInput,\n ): Promise<PaginatedList<Invitation>> {\n return this.fetchPaginated<Invitation>(\n `/organization/business-units/${buId}/invitations`,\n pagination,\n );\n }\n\n createInvitation(buId: string, input: CreateInvitationInput): Promise<Invitation> {\n return this.fetchData<Invitation>(\n `/organization/business-units/${buId}/invitations`,\n { method: \"POST\", body: JSON.stringify(input) },\n );\n }\n\n async cancelInvitation(buId: string, invitationId: string): Promise<void> {\n await this.request<unknown>(\n `/organization/business-units/${buId}/invitations/${invitationId}/cancel`,\n { method: \"POST\" },\n );\n }\n\n async resendInvitation(buId: string, invitationId: string): Promise<void> {\n await this.request<unknown>(\n `/organization/business-units/${buId}/invitations/${invitationId}/resend`,\n { method: \"POST\" },\n );\n }\n\n async acceptInvitation(invitationId: string): Promise<void> {\n await this.request<unknown>(\n `/organization/invitations/${invitationId}/accept`,\n { method: \"POST\" },\n );\n }\n\n async rejectInvitation(invitationId: string): Promise<void> {\n await this.request<unknown>(\n `/organization/invitations/${invitationId}/reject`,\n { method: \"POST\" },\n );\n }\n\n // ─────────────────────── Roles & Permissions\n //\n // The IAM endpoints are scope-keyed; resolveScopeId() maps buId → scopeId\n // lazily (cached) so the SDK can keep its BU-keyed interface.\n\n async listRoles(\n buId: string,\n pagination?: PaginationInput,\n ): Promise<PaginatedList<Role>> {\n const scopeId = await this.resolveScopeId(buId);\n const paged = await this.fetchPaginated<ApiRole>(\n `/iam/authorization/scopes/${encodeURIComponent(scopeId)}/roles`,\n pagination,\n );\n return {\n data: paged.data.map(apiRoleToRole),\n pagination: paged.pagination,\n };\n }\n\n async getRole(buId: string, roleId: string): Promise<Role> {\n const scopeId = await this.resolveScopeId(buId);\n const r = await this.fetchData<ApiRole>(\n `/iam/authorization/scopes/${encodeURIComponent(scopeId)}/roles/${roleId}`,\n );\n return apiRoleToRole(r);\n }\n\n async createRole(buId: string, input: CreateRoleInput): Promise<Role> {\n const scopeId = await this.resolveScopeId(buId);\n const r = await this.fetchData<ApiRole>(\n `/iam/authorization/scopes/${encodeURIComponent(scopeId)}/roles`,\n {\n method: \"POST\",\n body: JSON.stringify({\n name: input.name,\n description: input.description ?? null,\n permissions: input.permissions,\n }),\n },\n );\n return apiRoleToRole(r);\n }\n\n async updateRole(buId: string, roleId: string, input: UpdateRoleInput): Promise<Role> {\n const scopeId = await this.resolveScopeId(buId);\n const r = await this.fetchData<ApiRole>(\n `/iam/authorization/scopes/${encodeURIComponent(scopeId)}/roles/${roleId}`,\n { method: \"PATCH\", body: JSON.stringify(input) },\n );\n return apiRoleToRole(r);\n }\n\n async deleteRole(buId: string, roleId: string): Promise<void> {\n const scopeId = await this.resolveScopeId(buId);\n await this.request<unknown>(\n `/iam/authorization/scopes/${encodeURIComponent(scopeId)}/roles/${roleId}`,\n { method: \"DELETE\" },\n );\n }\n\n async listPermissions(buId: string): Promise<Permission[]> {\n const scopeId = await this.resolveScopeId(buId);\n return this.fetchData<Permission[]>(\n `/iam/authorization/scopes/${encodeURIComponent(scopeId)}/permissions`,\n );\n }\n\n async authorizeBatch(\n buId: string,\n permissions: readonly string[],\n ): Promise<Record<string, boolean>> {\n if (permissions.length === 0) return {};\n const authMode = this.config.authMode ?? \"cookie\";\n const scopeId = await this.resolveScopeId(buId);\n\n const body: {\n subjectType: \"user\";\n scopeId: string;\n permissions: string[];\n subjectId?: string;\n } = {\n subjectType: \"user\",\n scopeId,\n permissions: [...permissions],\n };\n\n if (authMode === \"bearer\") {\n // Bearer mode: decode the JWT to send subjectId explicitly so the\n // API doesn't need to derive it. Matches bearer-mode behavior.\n const jwt = await this.resolveJwt();\n const claims = decodeJwtPayload(jwt);\n const subjectId = claims && typeof claims.sub === \"string\" ? claims.sub : null;\n if (!subjectId) {\n throw new RoadAuthError({\n status: 401,\n statusText: \"Unauthorized\",\n body: \"authorizeBatch: JWT missing or malformed (no sub claim)\",\n });\n }\n body.subjectId = subjectId;\n }\n // Cookie mode: subjectId omitted — the API derives it from the JWT\n // the BFF attaches server-side.\n\n const { results } = await this.fetchData<{\n results: Array<{ permission: string; allowed: boolean; reason?: string }>;\n }>(\"/iam/authorization/authorize/batch\", {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n return Object.fromEntries(results.map((r) => [r.permission, r.allowed]));\n }\n}\n\nfunction isMutatingMethod(method: string): boolean {\n return method === \"POST\" || method === \"PUT\" || method === \"PATCH\" || method === \"DELETE\";\n}\n\n/**\n * Read a cookie by name from `document.cookie`. Returns `undefined`\n * when the cookie isn't set or the SDK is running in an environment\n * without a `document` (SSR, some test harnesses). Values are\n * URL-decoded — Laravel encodes the CSRF token, and `next-auth`'s\n * pattern decodes consistently.\n */\nfunction readCookie(name: string): string | undefined {\n if (typeof document === \"undefined\") return undefined;\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const match = document.cookie.match(\n new RegExp(\"(?:^|; )\" + escaped + \"=([^;]*)\"),\n );\n if (!match) return undefined;\n try {\n return decodeURIComponent(match[1]!);\n } catch {\n // Malformed encoding — return the raw value rather than throw.\n return match[1];\n }\n}\n\n/**\n * Derive a URL-safe slug from a business-unit name. Lowercases, strips\n * diacritics, collapses any run of non-alphanumerics into a single\n * hyphen, and trims leading/trailing hyphens — producing a value that\n * satisfies the API's `^[a-z0-9]+(?:-[a-z0-9]+)*$` constraint. Falls\n * back to `\"business-unit\"` when the name has no slug-able characters\n * (e.g. a name written entirely in a non-Latin script) so the request\n * never carries an empty slug. Mirrors the mock client's `slugify`.\n */\n/** Split an array into consecutive chunks of at most `size` items. */\nfunction chunk<T>(arr: readonly T[], size: number): T[][] {\n const out: T[][] = [];\n for (let i = 0; i < arr.length; i += size) out.push(arr.slice(i, i + size));\n return out;\n}\n\nfunction deriveSlug(name: string): string {\n const base = name\n .toLowerCase()\n .normalize(\"NFD\")\n .replace(/[̀-ͯ]/g, \"\")\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n return base || \"business-unit\";\n}\n\n/**\n * Build a `?…` query string from optional pagination plus any extra\n * fixed params (e.g. member-projection flags). Returns `\"\"` when there's\n * nothing to encode, so callers can safely append it to a path.\n */\nfunction listQueryString(\n pagination?: PaginationInput,\n extraParams?: Record<string, string>,\n): string {\n const params = new URLSearchParams();\n if (extraParams) {\n for (const [key, value] of Object.entries(extraParams)) params.set(key, value);\n }\n if (pagination?.cursor) params.set(\"cursor\", pagination.cursor);\n if (pagination?.limit !== undefined) params.set(\"limit\", String(pagination.limit));\n const qs = params.toString();\n return qs ? `?${qs}` : \"\";\n}\n\n/**\n * Retry decision. Network failures and 5xx responses are retried; 4xx are\n * not (they won't get better by waiting). 429 is intentionally *not*\n * retried automatically — the caller should backoff using `retryAfter`,\n * not burn budget on tight retries.\n */\nfunction shouldRetry(err: RoadApiError): boolean {\n if (err instanceof RoadNetworkError) return true;\n if (err instanceof RoadServerError) return true;\n return false;\n}\n\nfunction backoffDelay(base: number, attempt: number): number {\n const exp = base * Math.pow(2, attempt - 1);\n const jitter = Math.random() * base;\n return exp + jitter;\n}\n\nasync function buildErrorFromResponse(\n res: Response,\n requestId: string | undefined,\n traceId: string | undefined,\n): Promise<RoadApiError> {\n const body = await res.text().catch(() => \"\");\n const problem = parseProblemDetails(body);\n const retryAfterHeader = res.headers.get(\"retry-after\") ?? res.headers.get(\"Retry-After\");\n const retryAfter = retryAfterHeader ? parseInt(retryAfterHeader, 10) : undefined;\n return mapStatusToError({\n status: res.status,\n statusText: res.statusText,\n body,\n problem,\n requestId: requestId ?? problem?.meta?.requestId ?? undefined,\n traceId,\n retryAfter: Number.isFinite(retryAfter) ? retryAfter : undefined,\n });\n}\n\nfunction parseProblemDetails(body: string): RoadProblemDetails | undefined {\n if (!body) return undefined;\n try {\n const parsed = JSON.parse(body) as RoadProblemDetails;\n if (parsed && typeof parsed === \"object\") return parsed;\n } catch {\n // not JSON — leave problem undefined, body stays available on the error\n }\n return undefined;\n}\n\n/**\n * Decode a JWT's payload claims without signature verification — used only\n * to surface the user's identity claims to the widget UI. The actual auth\n * decisions are made server-side; a tampered token will be rejected by\n * Road's API on any data call.\n *\n * Uses `atob` because the React SDK is browser-only. A node-targeted SDK\n * would swap this for a Buffer-based implementation.\n */\nexport function decodeJwtPayload(jwt: string | undefined): Record<string, unknown> | null {\n if (!jwt) return null;\n const parts = jwt.split(\".\");\n if (parts.length < 2) return null;\n try {\n const payload = parts[1]!.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padded = payload + \"=\".repeat((4 - (payload.length % 4)) % 4);\n return JSON.parse(atob(padded)) as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nconst concatArrays = (array1, array2) => {\n // Pre-allocate for better V8 optimization\n const combinedArray = new Array(array1.length + array2.length);\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i];\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i];\n }\n return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\n }\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n return getGroupRecursive(classParts, startIndex, classMap);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts);\n }\n // Only modifier conflicts\n return modifierConflicts;\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS;\n }\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i];\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId;\n }\n }\n return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n const content = className.slice(1, -1);\n const colonIndex = content.indexOf(':');\n const property = content.slice(0, colonIndex);\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n const len = classGroup.length;\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i];\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n const entries = Object.entries(classDefinition);\n const len = entries.length;\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i];\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n }\n};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n let next = current.nextPart.get(part);\n if (!next) {\n next = createClassPartObject();\n current.nextPart.set(part, next);\n }\n current = next;\n }\n return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value;\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + 1;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n hasImportantModifier = true;\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n });\n return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n currentSegment = [];\n }\n result.push(modifier);\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier);\n }\n }\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n postfixLookupClassGroupIds: createPostfixLookupClassGroupIds(config),\n ...createClassGroupUtils(config)\n});\nconst createPostfixLookupClassGroupIds = config => {\n const lookup = Object.create(null);\n const classGroupIds = config.postfixLookupClassGroups;\n if (classGroupIds) {\n for (let i = 0; i < classGroupIds.length; i++) {\n lookup[classGroupIds[i]] = true;\n }\n }\n return lookup;\n};\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers,\n postfixLookupClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId;\n if (hasPostfixModifier) {\n const baseClassNameWithoutPostfix = baseClassName.substring(0, maybePostfixModifierPosition);\n classGroupId = getClassGroupId(baseClassNameWithoutPostfix);\n const classGroupIdWithPostfix = classGroupId && postfixLookupClassGroupIds[classGroupId] ? getClassGroupId(baseClassName) : undefined;\n if (classGroupIdWithPostfix && classGroupIdWithPostfix !== classGroupId) {\n classGroupId = classGroupIdWithPostfix;\n hasPostfixModifier = false;\n }\n } else {\n classGroupId = getClassGroupId(baseClassName);\n }\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < classLists.length) {\n if (argument = classLists[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isNamedContainerQuery = value => value.startsWith('@container') && (value[10] === '/' && value[11] !== undefined || value[11] === 's' && value[16] !== undefined && value.startsWith('-size/', 10) || value[11] === 'n' && value[18] !== undefined && value.startsWith('-normal/', 10));\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryWeight = value => getIsArbitraryValue(value, isLabelWeight, isAny);\nconst isArbitraryFamilyName = value => getIsArbitraryValue(value, isLabelFamilyName, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\nconst isArbitraryVariableWeight = value => getIsArbitraryVariable(value, isLabelWeight, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelWeight = label => label === 'number' || label === 'weight';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryFamilyName,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isArbitraryVariableWeight,\n isArbitraryWeight,\n isFraction,\n isInteger,\n isNamedContainerQuery,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingInline = () => [isFraction, 'screen', 'full', 'dvw', 'lvw', 'svw', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingBlock = () => [isFraction, 'screen', 'full', 'lh', 'dvh', 'lvh', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Container Type\n * @see https://tailwindcss.com/docs/responsive-design#container-queries\n */\n 'container-type': [{\n '@container': ['', 'normal', 'size', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Container Name\n * @see https://tailwindcss.com/docs/responsive-design#named-containers\n */\n 'container-named': [isNamedContainerQuery],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Inset\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Inset Inline\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Inset Block\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Inset Inline Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-s` in next major release\n */\n start: [{\n 'inset-s': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n start: scaleInset()\n }],\n /**\n * Inset Inline End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-e` in next major release\n */\n end: [{\n 'inset-e': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n end: scaleInset()\n }],\n /**\n * Inset Block Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-bs': [{\n 'inset-bs': scaleInset()\n }],\n /**\n * Inset Block End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-be': [{\n 'inset-be': scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block Start\n * @see https://tailwindcss.com/docs/padding\n */\n pbs: [{\n pbs: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block End\n * @see https://tailwindcss.com/docs/padding\n */\n pbe: [{\n pbe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin Inline\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Block\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Inline Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin Inline End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Block Start\n * @see https://tailwindcss.com/docs/margin\n */\n mbs: [{\n mbs: scaleMargin()\n }],\n /**\n * Margin Block End\n * @see https://tailwindcss.com/docs/margin\n */\n mbe: [{\n mbe: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Inline Size\n * @see https://tailwindcss.com/docs/width\n */\n 'inline-size': [{\n inline: ['auto', ...scaleSizingInline()]\n }],\n /**\n * Min-Inline Size\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-inline-size': [{\n 'min-inline': ['auto', ...scaleSizingInline()]\n }],\n /**\n * Max-Inline Size\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-inline-size': [{\n 'max-inline': ['none', ...scaleSizingInline()]\n }],\n /**\n * Block Size\n * @see https://tailwindcss.com/docs/height\n */\n 'block-size': [{\n block: ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Min-Block Size\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-block-size': [{\n 'min-block': ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Max-Block Size\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-block-size': [{\n 'max-block': ['none', ...scaleSizingBlock()]\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont]\n }],\n /**\n * Font Feature Settings\n * @see https://tailwindcss.com/docs/font-feature-settings\n */\n 'font-features': [{\n 'font-features': [isArbitraryValue]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Tab Size\n * @see https://tailwindcss.com/docs/tab-size\n */\n 'tab-size': [{\n tab: [isInteger, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width Inline\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Block\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Inline Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width Inline End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Block Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-bs': [{\n 'border-bs': scaleBorderWidth()\n }],\n /**\n * Border Width Block End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-be': [{\n 'border-be': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color Inline\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Block\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color Inline Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color Inline End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Block Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-bs': [{\n 'border-bs': scaleColor()\n }],\n /**\n * Border Color Block End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-be': [{\n 'border-be': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n /**\n * Zoom\n * @see https://tailwindcss.com/docs/zoom\n */\n zoom: [{\n zoom: [isInteger, isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scrollbar Thumb Color\n * @see https://tailwindcss.com/docs/scrollbar-color\n */\n 'scrollbar-thumb-color': [{\n 'scrollbar-thumb': scaleColor()\n }],\n /**\n * Scrollbar Track Color\n * @see https://tailwindcss.com/docs/scrollbar-color\n */\n 'scrollbar-track-color': [{\n 'scrollbar-track': scaleColor()\n }],\n /**\n * Scrollbar Gutter\n * @see https://tailwindcss.com/docs/scrollbar-gutter\n */\n 'scrollbar-gutter': [{\n 'scrollbar-gutter': ['auto', 'stable', 'both']\n }],\n /**\n * Scrollbar Width\n * @see https://tailwindcss.com/docs/scrollbar-width\n */\n 'scrollbar-w': [{\n scrollbar: ['auto', 'thin', 'none']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbs': [{\n 'scroll-mbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbe': [{\n 'scroll-mbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbs': [{\n 'scroll-pbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbe': [{\n 'scroll-pbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n 'container-named': ['container-type'],\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'inset-bs', 'inset-be', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pbs', 'pbe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-bs', 'border-w-be', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-bs', 'border-color-be', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mbs', 'scroll-mbe', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pbs', 'scroll-pbe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n postfixLookupClassGroups: ['container-type'],\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'postfixLookupClassGroups', override.postfixLookupClassGroups);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'postfixLookupClassGroups');\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { useMemo, useRef, type ReactNode } from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { Toaster } from \"sonner\";\nimport { RoadContext, useRoad, type RoadContextValue } from \"./context\";\nimport {\n CurrentBusinessUnitProvider,\n type BusinessUnitStorage,\n} from \"./current-business-unit\";\nimport {\n appearanceToStyle,\n resolveColorScheme,\n type Appearance,\n} from \"../appearance/appearance\";\nimport { ROAD_API_URLS } from \"@b1-road/types\";\nimport {\n HttpRoadClient,\n type JwtSource,\n type RetryConfig,\n type RoadAuthMode,\n type RoadClient,\n type TelemetryHooks,\n} from \"../api/client\";\nimport type { LocalizationOverride } from \"../i18n/context\";\nimport { cn } from \"../lib/cn\";\nimport \"../styles/tokens.css\";\n\n/**\n * Discriminated auth-mode props. Three arms:\n *\n * 1. **Cookie default** — no `authMode` (or `authMode: 'cookie'`),\n * no `jwt` (forbidden), `onUnauthenticated` is the documented\n * companion. Smallest expression of intent.\n * 2. **Bearer opt-in** — `authMode: 'bearer'` requires `jwt` at the\n * type level. Forgetting the JWT is a compile error, not a 401\n * in production.\n * 3. **Client override** — when a custom `client` is supplied\n * (tests, playgrounds) the discriminator is relaxed; the override\n * bypasses the production wiring entirely.\n *\n * The runtime boot checks in the provider body stay in place as\n * belt-and-suspenders for raw-JS consumers and for cases where the\n * caller routes around the types (e.g. dynamic props).\n */\nexport type RoadProviderAuthProps =\n | {\n /** Cookie mode (default). The BFF holds the JWT server-side. */\n authMode?: \"cookie\";\n /** Cookie mode never reads `jwt`. */\n jwt?: never;\n /**\n * Fired once per terminal 401 (1s debounce). In cookie mode the\n * BFF owns refresh — the handler should redirect to the BFF's\n * login URL. A console.warn fires at boot if omitted.\n */\n onUnauthenticated?: () => void;\n /** Provider client override is its own arm. */\n client?: never;\n }\n | {\n /** Bearer mode — the host holds the JWT in JS. */\n authMode: \"bearer\";\n /** Required when `authMode='bearer'`. */\n jwt: JwtSource;\n /** Fired once per terminal 401 (1s debounce). */\n onUnauthenticated?: () => void;\n /** Provider client override is its own arm. */\n client?: never;\n }\n | {\n /**\n * Optional client override — primarily for tests and\n * playgrounds. When provided, the production transport wiring is\n * bypassed and the auth-mode discriminator is relaxed.\n */\n client: RoadClient;\n authMode?: RoadAuthMode;\n jwt?: JwtSource;\n onUnauthenticated?: () => void;\n };\n\n/** Shared props (not part of the auth discriminator). */\nexport interface RoadProviderSharedProps {\n /** Cookie name read by the SDK to source a CSRF token. Default `'XSRF-TOKEN'`. */\n csrfCookieName?: string;\n /** Header name the SDK writes the CSRF token into. Default `'X-XSRF-TOKEN'`. */\n csrfHeaderName?: string;\n /** Cross-origin BFF opt-in (cookie mode only). Default `false`. */\n withCredentials?: boolean;\n appearance?: Appearance;\n apiBaseUrl?: string;\n /** BCP-47 locale tag. Built-in: \"en\", \"pt-BR\". Defaults to \"en\". */\n locale?: string;\n /** Partial dictionary override merged on top of the resolved base locale. */\n localization?: LocalizationOverride;\n /**\n * Initial business unit ID. Useful for SSR or deep-linking into a specific\n * BU. Consulted at mount only — user selections via the switcher (or\n * useSetCurrentBusinessUnit) override and persist.\n */\n businessUnitId?: string;\n /** Pluggable storage backend for the current-BU selection. Defaults to localStorage. */\n businessUnitStorage?: BusinessUnitStorage;\n /**\n * Namespace appended to the current-BU storage key. Set this when an\n * app mounts multiple <RoadProvider>s (eg. a sandbox + production\n * comparison) so their selections don't collide.\n */\n storageNamespace?: string;\n /** Fires on every BU selection change. */\n onSelectBusinessUnit?: (buId: string) => void;\n /** Retry policy for transient network/5xx failures. */\n retry?: RetryConfig;\n /** Observability hooks fired on every request (success and failure). */\n telemetry?: TelemetryHooks;\n children: ReactNode;\n}\n\nexport type RoadProviderProps = RoadProviderAuthProps & RoadProviderSharedProps;\n\nconst DEFAULT_API_BASE_URL = ROAD_API_URLS.production;\nconst CURRENT_BU_STORAGE_KEY = \"road:current-bu\";\n\nexport function RoadProvider({\n authMode,\n jwt,\n onUnauthenticated,\n csrfCookieName,\n csrfHeaderName,\n withCredentials,\n appearance,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n locale = \"en\",\n localization,\n client: clientOverride,\n businessUnitId,\n businessUnitStorage,\n storageNamespace,\n onSelectBusinessUnit,\n retry,\n telemetry,\n children,\n}: RoadProviderProps) {\n // Resolve the effective auth mode. Three boot checks, all loud:\n //\n // (1) authMode omitted + jwt provided → throw with migration text.\n // This (jwt without authMode) is the old bearer-first call shape\n // that no longer makes sense under the cookie default. We refuse\n // to silently switch modes.\n // (2) authMode === 'bearer' + no jwt → throw. Bearer mode without a\n // token is a misconfiguration that will 401 every request.\n // (3) authMode === 'cookie' + no onUnauthenticated → console.warn\n // once. Terminal 401s otherwise vanish silently; some demos and\n // Storybook setups legitimately want this, so it's a warning,\n // not a throw.\n //\n // No checks run when a `client` override is passed — tests and\n // playgrounds use that escape hatch with mocks where the production\n // wiring doesn't apply.\n const hasWarned = useRef(false);\n let effectiveAuthMode: RoadAuthMode;\n if (clientOverride) {\n // Skip checks — caller supplied their own client.\n effectiveAuthMode = authMode ?? \"cookie\";\n } else if (authMode === undefined && jwt !== undefined) {\n throw new Error(\n \"<RoadProvider>: 'jwt' is provided but 'authMode' is not. \" +\n \"In @b1-road/react, cookie mode is the default. \" +\n \"Existing bearer-mode integrations must opt in explicitly:\\n\\n\" +\n ' <RoadProvider apiBaseUrl=\"...\" authMode=\"bearer\" jwt={...}>\\n\\n' +\n \"See docs/plans/10-react-cookie-mode-spec.md#6-versioning-and-migration\",\n );\n } else {\n effectiveAuthMode = authMode ?? \"cookie\";\n if (effectiveAuthMode === \"bearer\" && jwt === undefined) {\n throw new Error(\n '<RoadProvider authMode=\"bearer\">: \\'jwt\\' prop is required. ' +\n \"Pass a static string or a () => Promise<string> getter.\",\n );\n }\n if (\n effectiveAuthMode === \"cookie\" &&\n onUnauthenticated === undefined &&\n !hasWarned.current\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"<RoadProvider authMode=\\\"cookie\\\"> without 'onUnauthenticated'. \" +\n \"Terminal 401s will be silent. Wire the handler to redirect to \" +\n \"your BFF login URL.\",\n );\n hasWarned.current = true;\n }\n }\n\n const queryClient = useMemo(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 30_000,\n retry: 1,\n refetchOnWindowFocus: false,\n },\n },\n }),\n [],\n );\n\n const client = useMemo<RoadClient>(\n () =>\n clientOverride ??\n new HttpRoadClient({\n apiBaseUrl,\n authMode: effectiveAuthMode,\n jwt,\n onUnauthenticated,\n csrfCookieName,\n csrfHeaderName,\n withCredentials,\n retry,\n telemetry,\n }),\n [\n clientOverride,\n apiBaseUrl,\n effectiveAuthMode,\n jwt,\n onUnauthenticated,\n csrfCookieName,\n csrfHeaderName,\n withCredentials,\n retry,\n telemetry,\n ],\n );\n\n const value = useMemo<RoadContextValue>(\n () => ({ appearance, apiBaseUrl, locale, localization, client }),\n [appearance, apiBaseUrl, locale, localization, client],\n );\n\n const storageKey = storageNamespace\n ? `${CURRENT_BU_STORAGE_KEY}:${storageNamespace}`\n : CURRENT_BU_STORAGE_KEY;\n\n return (\n <RoadContext.Provider value={value}>\n <QueryClientProvider client={queryClient}>\n <CurrentBusinessUnitProvider\n initialBusinessUnitId={businessUnitId}\n storageKey={storageKey}\n storage={businessUnitStorage}\n onSelect={onSelectBusinessUnit}\n >\n {children}\n <RoadToaster />\n </CurrentBusinessUnitProvider>\n </QueryClientProvider>\n </RoadContext.Provider>\n );\n}\n\n/**\n * Toast surface for the whole toolkit. Mounted at the provider level so\n * widgets that fire toasts (the switcher, modal, future surfaces) don't\n * each have to mount their own — and so toasts work even when the modal\n * isn't open. Each toast carries .road-ui so scoped tokens resolve.\n */\nfunction RoadToaster() {\n const { appearance } = useRoad();\n const scheme = resolveColorScheme(appearance?.colorScheme);\n const style = appearanceToStyle(appearance);\n return (\n <div className={cn(\"road-ui\", scheme === \"dark\" && \"dark\")} style={style}>\n <Toaster\n theme={scheme}\n richColors\n position=\"bottom-right\"\n toastOptions={{ classNames: { toast: cn(\"road-ui\", scheme === \"dark\" && \"dark\") } }}\n />\n </div>\n );\n}\n","// packages/react/compose-refs/src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nvar use = React[\" use \".trim().toString()];\nfunction isPromiseLike(value) {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\nfunction isLazyComponent(element) {\n return element != null && typeof element === \"object\" && \"$$typeof\" in element && element.$$typeof === REACT_LAZY_TYPE && \"_payload\" in element && isPromiseLike(element._payload);\n}\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import { forwardRef, type ButtonHTMLAttributes } from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/cn\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n },\n size: {\n sm: \"h-8 px-3\",\n md: \"h-9 px-4 py-2\",\n lg: \"h-10 px-6\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: { variant: \"default\", size: \"md\" },\n },\n);\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp ref={ref} className={cn(buttonVariants({ variant, size }), className)} {...props} />\n );\n },\n);\nButton.displayName = \"Button\";\n","// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n return function handleEvent(event) {\n originalEventHandler?.(event);\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\nfunction getOwnerWindow(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access window outside of the DOM\");\n }\n return element?.ownerDocument?.defaultView ?? window;\n}\nfunction getOwnerDocument(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access document outside of the DOM\");\n }\n return element?.ownerDocument ?? document;\n}\nfunction getActiveElement(node, activeDescendant = false) {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n return null;\n }\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n if (activeDescendant) {\n const id = activeElement.getAttribute(\"aria-activedescendant\");\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n return activeElement;\n}\nfunction isFrame(element) {\n return element.tagName === \"IFRAME\";\n}\nexport {\n canUseDOM,\n composeEventHandlers,\n getActiveElement,\n getOwnerDocument,\n getOwnerWindow,\n isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-layout-effect/src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/id/src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\" useId \".trim().toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n const [id, setId] = React.useState(useReactId());\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : \"\");\n}\nexport {\n useId\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = () => {\n },\n caller\n}) {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== void 0;\n const value = isControlled ? prop : uncontrolledProp;\n if (true) {\n const isControlledRef = React.useRef(prop !== void 0);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const setValue = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value2 !== prop) {\n onChangeRef.current?.(value2);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n return [value, setValue];\n}\nfunction useUncontrolledState({\n defaultProp,\n onChange\n}) {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n return [value, setValue, onChangeRef];\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n const isControlled = controlledState !== void 0;\n const onChange = useEffectEvent(onChangeProp);\n if (true) {\n const isControlledRef = React2.useRef(controlledState !== void 0);\n React2.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const args = [{ ...initialArg, state: defaultProp }];\n if (init) {\n args.push(init);\n }\n const [internalState, dispatch] = React2.useReducer(\n (state2, action) => {\n if (action.type === SYNC_STATE) {\n return { ...state2, state: action.state };\n }\n const next = reducer(state2, action);\n if (isControlled && !Object.is(next.state, state2.state)) {\n onChange(next.state);\n }\n return next;\n },\n ...args\n );\n const uncontrolledState = internalState.state;\n const prevValueRef = React2.useRef(uncontrolledState);\n React2.useEffect(() => {\n if (prevValueRef.current !== uncontrolledState) {\n prevValueRef.current = uncontrolledState;\n if (!isControlled) {\n onChange(uncontrolledState);\n }\n }\n }, [onChange, uncontrolledState, prevValueRef, isControlled]);\n const state = React2.useMemo(() => {\n const isControlled2 = controlledState !== void 0;\n if (isControlled2) {\n return { ...internalState, state: controlledState };\n }\n return internalState;\n }, [internalState, controlledState]);\n React2.useEffect(() => {\n if (isControlled && !Object.is(controlledState, internalState.state)) {\n dispatch({ type: SYNC_STATE, state: controlledState });\n }\n }, [controlledState, internalState.state, isControlled]);\n return [state, dispatch];\n}\nexport {\n useControllableState,\n useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-callback-ref/src/use-callback-ref.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => (...args) => callbackRef.current?.(...args), []);\n}\nexport {\n useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-escape-keydown/src/use-escape-keydown.tsx\nimport * as React from \"react\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nfunction useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n React.useEffect(() => {\n const handleKeyDown = (event) => {\n if (event.key === \"Escape\") {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n }, [onEscapeKeyDown, ownerDocument]);\n}\nexport {\n useEscapeKeydown\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dismissable-layer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n layers: /* @__PURE__ */ new Set(),\n layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n branches: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n const focusOutside = useFocusOutside((event) => {\n const target = event.target;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = \"none\";\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...layerProps,\n ref: composedRefs,\n style: {\n pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n ...props.style\n },\n onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n onPointerDownCapture: composeEventHandlers(\n props.onPointerDownCapture,\n pointerDownOutside.onPointerDownCapture\n )\n }\n );\n }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {\n });\n React.useEffect(() => {\n const handlePointerDown = (event) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n let handleAndDispatchPointerDownOutsideEvent2 = function() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n };\n var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n const eventDetail = { originalEvent: event };\n if (event.pointerType === \"touch\") {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent2();\n }\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n const handleFocusOutside = useCallbackRef(onFocusOutside);\n const isFocusInsideReactTreeRef = React.useRef(false);\n React.useEffect(() => {\n const handleFocus = (event) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false\n });\n }\n };\n ownerDocument.addEventListener(\"focusin\", handleFocus);\n return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n return {\n onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n };\n}\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler, { once: true });\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n Branch,\n DismissableLayer,\n DismissableLayerBranch,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-scope.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AUTOFOCUS_ON_MOUNT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar FOCUS_SCOPE_NAME = \"FocusScope\";\nvar FocusScope = React.forwardRef((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n }\n }).current;\n React.useEffect(() => {\n if (trapped) {\n let handleFocusIn2 = function(event) {\n if (focusScope.paused || !container) return;\n const target = event.target;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleFocusOut2 = function(event) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget;\n if (relatedTarget === null) return;\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleMutations2 = function(mutations) {\n const focusedElement = document.activeElement;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n };\n var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;\n document.addEventListener(\"focusin\", handleFocusIn2);\n document.addEventListener(\"focusout\", handleFocusOut2);\n const mutationObserver = new MutationObserver(handleMutations2);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n return () => {\n document.removeEventListener(\"focusin\", handleFocusIn2);\n document.removeEventListener(\"focusout\", handleFocusOut2);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n const handleKeyDown = React.useCallback(\n (event) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n const isTabKey = event.key === \"Tab\" && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement;\n if (isTabKey && focusedElement) {\n const container2 = event.currentTarget;\n const [first, last] = getTabbableEdges(container2);\n const hasTabbableElementsInside = first && last;\n if (!hasTabbableElementsInside) {\n if (focusedElement === container2) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n return /* @__PURE__ */ jsx(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });\n});\nFocusScope.displayName = FOCUS_SCOPE_NAME;\nfunction focusFirst(candidates, { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\nfunction getTabbableEdges(container) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last];\n}\nfunction getTabbableCandidates(container) {\n const nodes = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node) => {\n const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n }\n });\n while (walker.nextNode()) nodes.push(walker.currentNode);\n return nodes;\n}\nfunction findVisible(elements, container) {\n for (const element of elements) {\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\nfunction isHidden(node, { upTo }) {\n if (getComputedStyle(node).visibility === \"hidden\") return true;\n while (node) {\n if (upTo !== void 0 && node === upTo) return false;\n if (getComputedStyle(node).display === \"none\") return true;\n node = node.parentElement;\n }\n return false;\n}\nfunction isSelectableInput(element) {\n return element instanceof HTMLInputElement && \"select\" in element;\n}\nfunction focus(element, { select = false } = {}) {\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n element.focus({ preventScroll: true });\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\nvar focusScopesStack = createFocusScopesStack();\nfunction createFocusScopesStack() {\n let stack = [];\n return {\n add(focusScope) {\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n remove(focusScope) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n }\n };\n}\nfunction arrayRemove(array, item) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\nfunction removeLinks(items) {\n return items.filter((item) => item.tagName !== \"A\");\n}\nvar Root = FocusScope;\nexport {\n FocusScope,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/portal.tsx\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PORTAL_NAME = \"Portal\";\nvar Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || mounted && globalThis?.document?.body;\n return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n});\nPortal.displayName = PORTAL_NAME;\nvar Root = Portal;\nexport {\n Portal,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/presence.tsx\nimport * as React2 from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// src/use-state-machine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/presence.tsx\nvar Presence = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === \"function\";\n return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n const [node, setNode] = React2.useState();\n const stylesRef = React2.useRef(null);\n const prevPresentRef = React2.useRef(present);\n const prevAnimationNameRef = React2.useRef(\"none\");\n const initialState = present ? \"mounted\" : \"unmounted\";\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: \"unmounted\",\n ANIMATION_OUT: \"unmountSuspended\"\n },\n unmountSuspended: {\n MOUNT: \"mounted\",\n ANIMATION_END: \"unmounted\"\n },\n unmounted: {\n MOUNT: \"mounted\"\n }\n });\n React2.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n }, [state]);\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n if (present) {\n send(\"MOUNT\");\n } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n send(\"UNMOUNT\");\n } else {\n const isAnimating = prevAnimationName !== currentAnimationName;\n if (wasPresent && isAnimating) {\n send(\"ANIMATION_OUT\");\n } else {\n send(\"UNMOUNT\");\n }\n }\n prevPresentRef.current = present;\n }\n }, [present, send]);\n useLayoutEffect(() => {\n if (node) {\n let timeoutId;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n const handleAnimationEnd = (event) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n send(\"ANIMATION_END\");\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = \"forwards\";\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === \"forwards\") {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event) => {\n if (event.target === node) {\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener(\"animationstart\", handleAnimationStart);\n node.addEventListener(\"animationcancel\", handleAnimationEnd);\n node.addEventListener(\"animationend\", handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener(\"animationstart\", handleAnimationStart);\n node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n node.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n } else {\n send(\"ANIMATION_END\");\n }\n }, [node, send]);\n return {\n isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n ref: React2.useCallback((node2) => {\n stylesRef.current = node2 ? getComputedStyle(node2) : null;\n setNode(node2);\n }, [])\n };\n}\nfunction getAnimationName(styles) {\n return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nvar Root = Presence;\nexport {\n Presence,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-guards.tsx\nimport * as React from \"react\";\nvar count = 0;\nfunction FocusGuards(props) {\n useFocusGuards();\n return props.children;\n}\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll(\"[data-radix-focus-guard]\");\n document.body.insertAdjacentElement(\"afterbegin\", edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement(\"beforeend\", edgeGuards[1] ?? createFocusGuard());\n count++;\n return () => {\n if (count === 1) {\n document.querySelectorAll(\"[data-radix-focus-guard]\").forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\nfunction createFocusGuard() {\n const element = document.createElement(\"span\");\n element.setAttribute(\"data-radix-focus-guard\", \"\");\n element.tabIndex = 0;\n element.style.outline = \"none\";\n element.style.opacity = \"0\";\n element.style.position = \"fixed\";\n element.style.pointerEvents = \"none\";\n return element;\n}\nexport {\n FocusGuards,\n FocusGuards as Root,\n useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n },\n },\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n // handle refs changes - added or removed\n useIsomorphicLayoutEffect(function () {\n var oldValue = currentValues.get(callbackRef);\n if (oldValue) {\n var prevRefs_1 = new Set(oldValue);\n var nextRefs_1 = new Set(refs);\n var current_1 = callbackRef.current;\n prevRefs_1.forEach(function (ref) {\n if (!nextRefs_1.has(ref)) {\n assignRef(ref, null);\n }\n });\n nextRefs_1.forEach(function (ref) {\n if (!prevRefs_1.has(ref)) {\n assignRef(ref, current_1);\n }\n });\n }\n currentValues.set(callbackRef, refs);\n }, [refs]);\n return callbackRef;\n}\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noRelative\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noRelative: noRelative, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n if (!document)\n return null;\n var tag = document.createElement('style');\n tag.type = 'text/css';\n var nonce = getNonce();\n if (nonce) {\n tag.setAttribute('nonce', nonce);\n }\n return tag;\n}\nfunction injectStyles(tag, css) {\n // @ts-ignore\n if (tag.styleSheet) {\n // @ts-ignore\n tag.styleSheet.cssText = css;\n }\n else {\n tag.appendChild(document.createTextNode(css));\n }\n}\nfunction insertStyleTag(tag) {\n var head = document.head || document.getElementsByTagName('head')[0];\n head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n var counter = 0;\n var stylesheet = null;\n return {\n add: function (style) {\n if (counter == 0) {\n if ((stylesheet = makeStyleTag())) {\n injectStyles(stylesheet, style);\n insertStyleTag(stylesheet);\n }\n }\n counter++;\n },\n remove: function () {\n counter--;\n if (!counter && stylesheet) {\n stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n stylesheet = null;\n }\n },\n };\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n var sheet = stylesheetSingleton();\n return function (styles, isDynamic) {\n React.useEffect(function () {\n sheet.add(styles);\n return function () {\n sheet.remove();\n };\n }, [styles && isDynamic]);\n };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n var useStyle = styleHookSingleton();\n var Sheet = function (_a) {\n var styles = _a.styles, dynamic = _a.dynamic;\n useStyle(styles, dynamic);\n return null;\n };\n return Sheet;\n};\n","export var zeroGap = {\n left: 0,\n top: 0,\n right: 0,\n gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n var cs = window.getComputedStyle(document.body);\n var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n if (gapMode === void 0) { gapMode = 'margin'; }\n if (typeof window === 'undefined') {\n return zeroGap;\n }\n var offsets = getOffset(gapMode);\n var documentWidth = document.documentElement.clientWidth;\n var windowWidth = window.innerWidth;\n return {\n left: offsets[0],\n top: offsets[1],\n right: offsets[2],\n gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of <Style\n */\n var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n return true;\n },\n });\n // @ts-ignore\n window.addEventListener('test', options, options);\n // @ts-ignore\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","var alwaysContainsScroll = function (node) {\n // textarea will always _contain_ scroll inside self. It only can be hidden\n return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n if (!(node instanceof Element)) {\n return false;\n }\n var styles = window.getComputedStyle(node);\n return (\n // not-not-scrollable\n styles[overflow] !== 'hidden' &&\n // contains scroll inside self\n !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n var ownerDocument = node.ownerDocument;\n var current = node;\n do {\n // Skip over shadow root\n if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n current = current.host;\n }\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n if (scrollHeight > clientHeight) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n if (!target) {\n break;\n }\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n var parent_1 = target.parentNode;\n // we will \"bubble\" from ShadowDom in case we are, or just to the parent in normal case\n // this is the same logic used in focus-lock\n target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1);\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n // allow drag selection (iOS); check if selection's anchorNode is the same as target or contains target\n var selection = window.getSelection();\n var anchorNode = selection && selection.anchorNode;\n var isTouchingSelection = anchorNode ? anchorNode === target || anchorNode.contains(target) : false;\n if (isTouchingSelection) {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","var getDefaultParent = function (originalTarget) {\n if (typeof document === 'undefined') {\n return null;\n }\n var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n return targets\n .map(function (target) {\n if (parent.contains(target)) {\n return target;\n }\n var correctedTarget = unwrapHost(target);\n if (correctedTarget && parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n return null;\n })\n .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n var markerCounter = markerMap[markerName];\n var hiddenNodes = [];\n var elementsToKeep = new Set();\n var elementsToStop = new Set(targets);\n var keep = function (el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n keep(el.parentNode);\n };\n targets.forEach(keep);\n var deep = function (parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n Array.prototype.forEach.call(parent.children, function (node) {\n if (elementsToKeep.has(node)) {\n deep(node);\n }\n else {\n try {\n var attr = node.getAttribute(controlAttribute);\n var alreadyHidden = attr !== null && attr !== 'false';\n var counterValue = (counterMap.get(node) || 0) + 1;\n var markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenNodes.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledNodes.set(node, true);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, 'true');\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n catch (e) {\n console.error('aria-hidden: cannot operate on ', node, e);\n }\n }\n });\n };\n deep(parentNode);\n elementsToKeep.clear();\n lockCount++;\n return function () {\n hiddenNodes.forEach(function (node) {\n var counterValue = counterMap.get(node) - 1;\n var markerValue = markerCounter.get(node) - 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n if (!counterValue) {\n if (!uncontrolledNodes.has(node)) {\n node.removeAttribute(controlAttribute);\n }\n uncontrolledNodes.delete(node);\n }\n if (!markerValue) {\n node.removeAttribute(markerName);\n }\n });\n lockCount--;\n if (!lockCount) {\n // clear\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledNodes = new WeakMap();\n markerMap = {};\n }\n };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n // we should not hide aria-live elements - https://github.com/theKashey/aria-hidden/issues/10\n // and script elements, as they have no impact on accessibility.\n targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live], script')));\n return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-inert-ed'; }\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-suppressed'; }\n return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContext, createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = (props) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME\n });\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children\n }\n );\n};\nDialog.displayName = DIALOG_NAME;\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = (props) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n};\nDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n }\n);\nDialogOverlay.displayName = OVERLAY_NAME;\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: forwardedRef,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n ) })\n );\n }\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nDialogContent.displayName = CONTENT_NAME;\nvar DialogContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (isRightClick) event.preventDefault();\n }),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault()\n )\n }\n );\n }\n);\nvar DialogContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar DialogContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n useFocusGuards();\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-describedby\": context.descriptionId,\n \"aria-labelledby\": context.titleId,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: composedRefs,\n onDismiss: () => context.onOpenChange(false)\n }\n )\n }\n ),\n /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(TitleWarning, { titleId: context.titleId }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })\n ] })\n ] });\n }\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }\n);\nDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }\n);\nDialogDescription.displayName = DESCRIPTION_NAME;\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nDialogClose.displayName = CLOSE_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar TITLE_WARNING_NAME = \"DialogTitleWarning\";\nvar [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"dialog\"\n});\nvar TitleWarning = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n return null;\n};\nvar DESCRIPTION_WARNING_NAME = \"DialogDescriptionWarning\";\nvar DescriptionWarning = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute(\"aria-describedby\");\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n return null;\n};\nvar Root = Dialog;\nvar Trigger = DialogTrigger;\nvar Portal = DialogPortal;\nvar Overlay = DialogOverlay;\nvar Content = DialogContent;\nvar Title = DialogTitle;\nvar Description = DialogDescription;\nvar Close = DialogClose;\nexport {\n Close,\n Content,\n Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.js';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.js';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.js';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m12 19-7-7 7-7\", key: \"1l729n\" }],\n [\"path\", { d: \"M19 12H5\", key: \"x3x0zl\" }]\n];\nconst ArrowLeft = createLucideIcon(\"arrow-left\", __iconNode);\n\nexport { __iconNode, ArrowLeft as default };\n//# sourceMappingURL=arrow-left.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 12h4\", key: \"a56b0p\" }],\n [\"path\", { d: \"M10 8h4\", key: \"1sr2af\" }],\n [\"path\", { d: \"M14 21v-3a2 2 0 0 0-4 0v3\", key: \"1rgiei\" }],\n [\n \"path\",\n {\n d: \"M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2\",\n key: \"secmi2\"\n }\n ],\n [\"path\", { d: \"M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16\", key: \"16ra0t\" }]\n];\nconst Building2 = createLucideIcon(\"building-2\", __iconNode);\n\nexport { __iconNode, Building2 as default };\n//# sourceMappingURL=building-2.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n];\nconst Copy = createLucideIcon(\"copy\", __iconNode);\n\nexport { __iconNode, Copy as default };\n//# sourceMappingURL=copy.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"loader-circle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"11\", x: \"3\", y: \"11\", rx: \"2\", ry: \"2\", key: \"1w4ew1\" }],\n [\"path\", { d: \"M7 11V7a5 5 0 0 1 10 0v4\", key: \"fwvmzm\" }]\n];\nconst Lock = createLucideIcon(\"lock\", __iconNode);\n\nexport { __iconNode, Lock as default };\n//# sourceMappingURL=lock.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\", key: \"132q7q\" }],\n [\"rect\", { x: \"2\", y: \"4\", width: \"20\", height: \"16\", rx: \"2\", key: \"izxlao\" }]\n];\nconst Mail = createLucideIcon(\"mail\", __iconNode);\n\nexport { __iconNode, Mail as default };\n//# sourceMappingURL=mail.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }]];\nconst Minus = createLucideIcon(\"minus\", __iconNode);\n\nexport { __iconNode, Minus as default };\n//# sourceMappingURL=minus.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { x: \"14\", y: \"3\", width: \"5\", height: \"18\", rx: \"1\", key: \"kaeet6\" }],\n [\"rect\", { x: \"5\", y: \"3\", width: \"5\", height: \"18\", rx: \"1\", key: \"1wsw3u\" }]\n];\nconst Pause = createLucideIcon(\"pause\", __iconNode);\n\nexport { __iconNode, Pause as default };\n//# sourceMappingURL=pause.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\",\n key: \"10ikf1\"\n }\n ]\n];\nconst Play = createLucideIcon(\"play\", __iconNode);\n\nexport { __iconNode, Play as default };\n//# sourceMappingURL=play.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nconst Plus = createLucideIcon(\"plus\", __iconNode);\n\nexport { __iconNode, Plus as default };\n//# sourceMappingURL=plus.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\", key: \"v9h5vc\" }],\n [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }],\n [\"path\", { d: \"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\", key: \"3uifl3\" }],\n [\"path\", { d: \"M8 16H3v5\", key: \"1cv678\" }]\n];\nconst RefreshCw = createLucideIcon(\"refresh-cw\", __iconNode);\n\nexport { __iconNode, RefreshCw as default };\n//# sourceMappingURL=refresh-cw.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\", key: \"1p45f6\" }],\n [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }]\n];\nconst RotateCw = createLucideIcon(\"rotate-cw\", __iconNode);\n\nexport { __iconNode, RotateCw as default };\n//# sourceMappingURL=rotate-cw.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\",\n key: \"1i5ecw\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Settings = createLucideIcon(\"settings\", __iconNode);\n\nexport { __iconNode, Settings as default };\n//# sourceMappingURL=settings.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n];\nconst ShieldCheck = createLucideIcon(\"shield-check\", __iconNode);\n\nexport { __iconNode, ShieldCheck as default };\n//# sourceMappingURL=shield-check.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\",\n key: \"1s2grr\"\n }\n ],\n [\"path\", { d: \"M20 2v4\", key: \"1rf3ol\" }],\n [\"path\", { d: \"M22 4h-4\", key: \"gwowj6\" }],\n [\"circle\", { cx: \"4\", cy: \"20\", r: \"2\", key: \"6kqj1y\" }]\n];\nconst Sparkles = createLucideIcon(\"sparkles\", __iconNode);\n\nexport { __iconNode, Sparkles as default };\n//# sourceMappingURL=sparkles.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash2 = createLucideIcon(\"trash-2\", __iconNode);\n\nexport { __iconNode, Trash2 as default };\n//# sourceMappingURL=trash-2.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\", key: \"1yyitq\" }],\n [\"path\", { d: \"M16 3.128a4 4 0 0 1 0 7.744\", key: \"16gr8j\" }],\n [\"path\", { d: \"M22 21v-2a4 4 0 0 0-3-3.87\", key: \"kshegd\" }],\n [\"circle\", { cx: \"9\", cy: \"7\", r: \"4\", key: \"nufk8\" }]\n];\nconst Users = createLucideIcon(\"users\", __iconNode);\n\nexport { __iconNode, Users as default };\n//# sourceMappingURL=users.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../lib/cn\";\nimport { appearanceToStyle, resolveColorScheme } from \"../appearance/appearance\";\nimport { useRoad } from \"../provider/context\";\n\nexport const Dialog = DialogPrimitive.Root;\nexport const DialogTrigger = DialogPrimitive.Trigger;\nexport const DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = forwardRef<\n ElementRef<typeof DialogPrimitive.Overlay>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/50\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = \"DialogOverlay\";\n\ninterface DialogContentProps extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n hideCloseButton?: boolean;\n}\n\n/**\n * DialogContent renders portaled content. We wrap it in a `.road-ui` element\n * so tokens resolve correctly outside the host page's cascade.\n */\nexport const DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n DialogContentProps\n>(({ className, children, hideCloseButton, ...props }, ref) => {\n const { appearance } = useRoad();\n const scheme = resolveColorScheme(appearance?.colorScheme);\n const style = appearanceToStyle(appearance);\n\n return (\n <DialogPrimitive.Portal>\n <div className={cn(\"road-ui\", scheme === \"dark\" && \"dark\")} style={style}>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 flex w-full max-w-3xl max-h-[85vh] translate-x-[-50%] translate-y-[-50%] flex-col border border-border bg-background shadow-lg rounded-lg overflow-hidden\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n className,\n )}\n {...props}\n >\n {children}\n {!hideCloseButton && (\n <DialogPrimitive.Close\n className=\"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring z-10\"\n aria-label=\"Close\"\n >\n <X className=\"h-4 w-4\" />\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </div>\n </DialogPrimitive.Portal>\n );\n});\nDialogContent.displayName = \"DialogContent\";\n\nexport function DialogHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"flex flex-col gap-1.5\", className)} {...props} />;\n}\n\nexport const DialogTitle = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n));\nDialogTitle.displayName = \"DialogTitle\";\n\nexport const DialogDescription = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = \"DialogDescription\";\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/collection-legacy.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\n\n// src/collection.tsx\nimport React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n #keys;\n constructor(entries) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n set(key, value) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n insert(index, key, value) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n const size = this.size + (has ? 0 : 1);\n if (relativeIndex < 0) {\n actualIndex++;\n }\n const keys = [...this.#keys];\n let nextValue;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i];\n if (keys[i] === key) {\n nextKey = keys[i + 1];\n }\n if (has) {\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1];\n const currentValue = nextValue;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n with(index, key, value) {\n const copy = new _OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n before(key) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n after(key) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n first() {\n return this.entryAt(0);\n }\n last() {\n return this.entryAt(-1);\n }\n clear() {\n this.#keys = [];\n return super.clear();\n }\n delete(key) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n deleteAt(index) {\n const key = this.keyAt(index);\n if (key !== void 0) {\n return this.delete(key);\n }\n return false;\n }\n at(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return this.get(key);\n }\n }\n entryAt(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return [key, this.get(key)];\n }\n }\n indexOf(key) {\n return this.#keys.indexOf(key);\n }\n keyAt(index) {\n return at(this.#keys, index);\n }\n from(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n keyFrom(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n find(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return void 0;\n }\n findIndex(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n filter(predicate, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new _OrderedDict(entries);\n }\n map(callbackfn, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new _OrderedDict(entries);\n }\n reduce(...args) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0);\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n reduceRight(...args) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1);\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index);\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n toSorted(compareFn) {\n const entries = [...this.entries()].sort(compareFn);\n return new _OrderedDict(entries);\n }\n toReversed() {\n const reversed = new _OrderedDict();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index);\n const element = this.get(key);\n reversed.set(key, element);\n }\n return reversed;\n }\n toSpliced(...args) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new _OrderedDict(entries);\n }\n slice(start, end) {\n const result = new _OrderedDict();\n let stop = this.size - 1;\n if (start === void 0) {\n return result;\n }\n if (start < 0) {\n start = start + this.size;\n }\n if (end !== void 0 && end > 0) {\n stop = end - 1;\n }\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index);\n const element = this.get(key);\n result.set(key, element);\n }\n return result;\n }\n every(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n some(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n};\nfunction at(array, index) {\n if (\"at\" in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0\n }\n );\n const CollectionProvider = ({ state, ...props }) => {\n return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const CollectionInit = (props) => {\n const state = useInitCollection();\n return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n };\n CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n const CollectionProviderImpl = (props) => {\n const { scope, children, state } = props;\n const ref = React2.useRef(null);\n const [collectionElement, setCollectionElement] = React2.useState(\n null\n );\n const composeRefs = useComposedRefs2(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n React2.useEffect(() => {\n if (!collectionElement) return;\n const observer = getChildListObserver(() => {\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n return /* @__PURE__ */ jsx2(\n CollectionContextProvider,\n {\n scope,\n itemMap,\n setItemMap,\n collectionRef: composeRefs,\n collectionRefObject: ref,\n collectionElement,\n children\n }\n );\n };\n CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n const CollectionSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n const CollectionItemSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React2.useRef(null);\n const [element, setElement] = React2.useState(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n const { setItemMap } = context;\n const itemDataRef = React2.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n React2.useEffect(() => {\n const itemData2 = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n if (!map.has(element)) {\n map.set(element, { ...itemData2, element });\n return map.toSorted(sortByDocumentPosition);\n }\n return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n });\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useInitCollection() {\n return React2.useState(new OrderedDict());\n }\n function useCollection(scope) {\n const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n return itemMap;\n }\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection\n };\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions\n ];\n}\nfunction shallowEqual(a, b) {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction isElementPreceding(a, b) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === \"childList\") {\n callback();\n return;\n }\n }\n });\n return observer;\n}\nexport {\n createCollection,\n createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n }\n);\nRovingFocusGroup.displayName = GROUP_NAME;\nvar RovingFocusGroupImpl = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n preventScrollOnEntryFocus = false,\n ...groupProps\n } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId ?? null,\n onChange: onCurrentTabStopIdChange,\n caller: GROUP_NAME\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n return /* @__PURE__ */ jsx(\n RovingFocusProvider,\n {\n scope: __scopeRovingFocusGroup,\n orientation,\n dir: direction,\n loop,\n currentTabStopId,\n onItemFocus: React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId]\n ),\n onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n onFocusableItemAdd: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n []\n ),\n onFocusableItemRemove: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n []\n ),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n \"data-orientation\": orientation,\n ...groupProps,\n ref: composedRefs,\n style: { outline: \"none\", ...props.style },\n onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n }),\n onFocus: composeEventHandlers(props.onFocus, (event) => {\n const isKeyboardFocus = !isClickFocusRef.current;\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n );\n const candidateNodes = candidateItems.map((item) => item.ref.current);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n isClickFocusRef.current = false;\n }),\n onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n }\n )\n }\n );\n});\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n children,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeRovingFocusGroup,\n id,\n focusable,\n active,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n tabIndex: isCurrentTabStop ? 0 : -1,\n \"data-orientation\": context.orientation,\n ...itemProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!focusable) event.preventDefault();\n else context.onItemFocus(id);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Tab\" && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n if (event.target !== event.currentTarget) return;\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n if (focusIntent !== void 0) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current);\n if (focusIntent === \"last\") candidateNodes.reverse();\n else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n }\n }),\n children: typeof children === \"function\" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children\n }\n )\n }\n );\n }\n);\nRovingFocusGroupItem.displayName = ITEM_NAME;\nvar MAP_KEY_TO_FOCUS_INTENT = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n Item,\n Root,\n RovingFocusGroup,\n RovingFocusGroupItem,\n createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = \"horizontal\",\n dir,\n activationMode = \"automatic\",\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue ?? \"\",\n caller: TABS_NAME\n });\n return /* @__PURE__ */ jsx(\n TabsProvider,\n {\n scope: __scopeTabs,\n baseId: useId(),\n value,\n onValueChange: setValue,\n orientation,\n dir: direction,\n activationMode,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n \"data-orientation\": orientation,\n ...tabsProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation: context.orientation,\n dir: context.dir,\n loop,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"tablist\",\n \"aria-orientation\": context.orientation,\n ...listProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: isSelected,\n children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": contentId,\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n id: triggerId,\n ...triggerProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n const isAutomaticActivation = context.activationMode !== \"manual\";\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })\n }\n )\n }\n );\n }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-orientation\": context.orientation,\n role: \"tabpanel\",\n \"aria-labelledby\": triggerId,\n hidden: !present,\n id: contentId,\n tabIndex: 0,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n },\n children: present && children\n }\n ) });\n }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n Content,\n List,\n Root2 as Root,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Trigger,\n createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","import { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"../lib/cn\";\n\nexport const Tabs = TabsPrimitive.Root;\n\nexport const TabsList = forwardRef<\n ElementRef<typeof TabsPrimitive.List>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-9 items-center justify-start gap-1 rounded-lg bg-muted p-1 text-muted-foreground\",\n className,\n )}\n {...props}\n />\n));\nTabsList.displayName = \"TabsList\";\n\nexport const TabsTrigger = forwardRef<\n ElementRef<typeof TabsPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium transition-all\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow\",\n className,\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = \"TabsTrigger\";\n\nexport const TabsContent = forwardRef<\n ElementRef<typeof TabsPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-4 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"data-[state=active]:animate-in data-[state=active]:fade-in-0\",\n className,\n )}\n {...props}\n />\n));\nTabsContent.displayName = \"TabsContent\";\n","import type { Localization } from \"./types\";\n\nexport const en: Localization = {\n common: {\n cancel: \"Cancel\",\n save: \"Save\",\n saveChanges: \"Save changes\",\n discard: \"Discard\",\n delete: \"Delete\",\n remove: \"Remove\",\n edit: \"Edit\",\n create: \"Create\",\n search: \"Search\",\n refresh: \"Refresh\",\n back: \"Back\",\n close: \"Close\",\n submit: \"Submit\",\n tryAgain: \"Try again\",\n noMatches: \"No matches\",\n noMatchesQuery: 'No results match \"{{query}}\".',\n yes: \"Yes\",\n no: \"No\",\n you: \"You\",\n system: \"System\",\n suspended: \"Suspended\",\n member: { one: \"member\", other: \"members\" },\n permission: { one: \"permission\", other: \"permissions\" },\n day: { one: \"day\", other: \"days\" },\n invitation: { one: \"invitation\", other: \"invitations\" },\n selectedCountOf: \"{{selected}} of {{total}}\",\n sendCount: \"Send {{count}} {{label}}\",\n loadMore: \"Load more\",\n loading: \"Loading…\",\n showingOf: \"Showing {{shown}} of {{total}}\",\n actionFailed: \"Couldn't complete that. Try again.\",\n },\n\n shell: {\n triggerLabel: \"Manage business units\",\n modalTitle: \"Business units\",\n modalDescription: \"Manage business units, their members, and roles.\",\n tabBusinessUnits: \"Business Units\",\n tabRoles: \"Roles\",\n },\n\n switcher: {\n triggerCurrentLabel: \"Current business unit\",\n triggerSelectLabel: \"Select business unit\",\n triggerEmptyLabel: \"Create business unit\",\n triggerLoadingLabel: \"Loading…\",\n triggerErrorLabel: \"Couldn't load\",\n switcherHeader: \"Business units\",\n pendingInvitationsHeader: \"Pending invitations\",\n invitedTitle: \"You've been invited\",\n pendingCount: {\n one: \"{{count}} pending invitation\",\n other: \"{{count}} pending invitations\",\n },\n searchPlaceholder: \"Search business units…\",\n noMatches: \"No business units match\",\n manageCta: \"Manage units\",\n currentBadge: \"Current\",\n emptyTitle: \"No business units yet\",\n emptyCta: \"Create business unit\",\n errorTitle: \"Couldn't load business units\",\n errorRetry: \"Retry\",\n },\n\n businessUnits: {\n emptyTitle: \"No business units yet\",\n emptyDescription:\n \"Business units organize your members and roles. Create one to get started.\",\n emptyCta: \"Create business unit\",\n listSearchPlaceholder: \"Search business units…\",\n newButton: \"New\",\n errorTitle: \"Couldn't load your business units\",\n errorDescription: \"Check your connection and try again.\",\n createFormName: \"Name\",\n createNamePlaceholder: \"Acme Corp\",\n createSubmit: \"Create business unit\",\n createNameTaken:\n \"A business unit with this name already exists. Choose a different name.\",\n detailMemberCount: { one: \"{{count}} member\", other: \"{{count}} members\" },\n detailTabMembers: \"Members\",\n detailTabInvitations: \"Invitations\",\n detailTabSettings: \"Settings\",\n settingsName: \"Name\",\n settingsIdentifier: \"Identifier\",\n settingsIdentifierHelp:\n \"A unique, lowercase identifier for this business unit. Auto-generated from the name.\",\n settingsMemberLimit: \"Member limit\",\n settingsMemberLimitHelp: \"Leave empty for no limit.\",\n memberLimitInvalid: \"Member limit must be a positive whole number.\",\n settingsJoinCode: \"Join code\",\n settingsJoinCodeHelp: \"Anyone with this code can join this business unit.\",\n },\n\n members: {\n emptyTitle: \"No members yet\",\n emptyDescription: \"Invite people to this business unit to get started.\",\n searchPlaceholder: \"Search members…\",\n suspend: \"Suspend\",\n reinstate: \"Reinstate\",\n suspendToast: \"{{name}} suspended\",\n reinstateToast: \"{{name}} reinstated\",\n undo: \"Undo\",\n removeTitle: \"Remove {{name}}?\",\n removeDescription:\n \"They will lose access immediately. You can invite them again later.\",\n removeConfirm: \"Remove\",\n removeToast: \"{{name}} removed\",\n perBuSearchPlaceholder: \"Search members…\",\n crossBuSearchPlaceholder: \"Search members or business units…\",\n pendingInvitationsHeader: \"Pending invitations\",\n invitedToJoin: \"You've been invited to join.\",\n invitedAs: \"Invited as {{role}}\",\n expiresInDays: { one: \"Expires in {{count}} day.\", other: \"Expires in {{count}} days.\" },\n expiresToday: \"Expires today\",\n accept: \"Accept\",\n decline: \"Decline\",\n joined: \"Joined {{businessUnit}}\",\n declined: \"Declined invitation to {{businessUnit}}\",\n couldNotLoad: \"Couldn't load members\",\n partialLoadWarning:\n \"Couldn't load members from some business units. The list below may be incomplete.\",\n },\n\n roles: {\n emptyTitle: \"No roles yet\",\n emptyDescription:\n \"Roles bundle permissions so members can do specific things in this business unit.\",\n emptyCta: \"Create role\",\n newButton: \"New role\",\n buSelectorLabel: \"Business unit:\",\n noBusinessUnits: \"No business units\",\n noAccessTitle: \"You don't have access to roles\",\n noAccessDescription: \"Managing roles is available to business unit owners and admins.\",\n couldNotLoad: \"Couldn't load roles\",\n couldNotLoadDescription: \"Check your connection and try again.\",\n notFound: \"This role no longer exists.\",\n rowAllPermissions: \"All permissions\",\n rowPermissionsCount: { one: \"{{count}} permission\", other: \"{{count}} permissions\" },\n systemBadge: \"System\",\n systemBannerNote:\n \"System roles are managed by Road and can't be edited or deleted. Clone this role if you want a customized version.\",\n editorName: \"Name\",\n editorDescription: \"Description\",\n editorDescriptionPlaceholder: \"Short, helpful summary of what this role can do.\",\n permissionsHeader: \"Permissions\",\n deleteRole: \"Delete role\",\n deleteTitle: 'Delete role \"{{name}}\"?',\n deleteDescription:\n \"Members currently assigned to this role will lose its permissions. This can't be undone.\",\n deleteConfirm: \"Delete role\",\n deleteToast: 'Role \"{{name}}\" deleted',\n savedToast: '\"{{name}}\" saved',\n allPermissionsBadge: \"All permissions\",\n allPermissionsDescription:\n \"This role has full access to every action in this business unit.\",\n create: {\n title: \"Create role\",\n descChoose: \"Start blank or duplicate an existing role's permissions.\",\n descBlank: \"Name the role and choose its permissions.\",\n descClonePick: \"Pick which role to clone.\",\n descCloneName: \"Name the role and review its permissions.\",\n blankTitle: \"Start blank\",\n blankDescription: \"Build a role from scratch and pick the exact permissions.\",\n cloneTitle: \"Clone from existing\",\n cloneDescriptionAvailable: \"Duplicate an existing role and tweak its permissions.\",\n cloneDescriptionUnavailable: \"No roles yet to clone from. Create one blank first.\",\n pickSourcePrompt: \"Pick a role to clone:\",\n cloningFromBanner:\n \"Cloning from {{role}} — its {{permissions}} will be copied over (you can adjust them after).\",\n nameField: \"Name\",\n namePlaceholder: \"e.g. Editor\",\n descriptionField: \"Description (optional)\",\n descriptionPlaceholder: \"Short, helpful summary of what this role can do.\",\n permissionsHint: \"Select at least one permission for this role.\",\n permissionsError: \"Couldn't load permissions.\",\n submit: \"Create role\",\n createdToast: 'Role \"{{name}}\" created',\n },\n },\n\n invitations: {\n emptyTitle: \"No invitations yet\",\n emptyDescription: \"Invite people by email and assign them a role.\",\n inviteButton: \"Invite people\",\n formEmailsField: \"Email{{plural}}\",\n formEmailsPlaceholder: \"alex@example.com, sam@example.com\",\n formEmailsHelp: \"Comma- or space-separated for multiple invitations.\",\n formEmailsValidCount: \"{{count}} valid.\",\n formEmailsInvalidCount: \"{{count}} invalid: {{examples}}\",\n formRoleField: \"Role\",\n formRolePlaceholder: \"Pick a role\",\n formSubmitSingle: \"Send invitation\",\n formSubmitMany: \"Send {{count}} invitations\",\n sentToast: \"Sent {{count}} invitations\",\n sentSingleToast: \"Invitation sent\",\n sentPartialToast: \"Sent {{succeeded}} of {{total}}. Some failed.\",\n sentErrorToast: \"Couldn't send invitations\",\n resend: \"Resend\",\n cancel: \"Cancel\",\n resendToast: \"Invitation resent to {{email}}\",\n cancelToast: \"Invitation to {{email}} cancelled\",\n cancelTitle: \"Cancel invitation to {{email}}?\",\n cancelDescription:\n \"The invite link will no longer work. You can send a fresh invitation any time.\",\n cancelConfirm: \"Cancel invitation\",\n cancelKeep: \"Keep invitation\",\n couldNotLoad: \"Couldn't load invitations\",\n statusPending: \"pending\",\n statusAccepted: \"accepted\",\n statusExpired: \"expired\",\n statusCancelled: \"cancelled\",\n statusRejected: \"rejected\",\n invitedRelative: \"invited {{relative}}\",\n expiresRelative: \"expires {{relative}}\",\n },\n\n validation: {\n required: \"This field is required.\",\n tooLong: \"Use at most {{max}} characters.\",\n slugFormat: \"Use only lowercase letters, numbers, and hyphens (e.g. acme-corp).\",\n emailInvalid: \"Enter a valid email address.\",\n urlInvalid: \"Enter a valid URL (starting with https://).\",\n atLeastOne: \"Select at least one option.\",\n generic: \"Check this field.\",\n formSummary: \"Please review the highlighted fields.\",\n },\n};\n","import type { Localization } from \"./types\";\n\nexport const ptBR: Localization = {\n common: {\n cancel: \"Cancelar\",\n save: \"Salvar\",\n saveChanges: \"Salvar alterações\",\n discard: \"Descartar\",\n delete: \"Excluir\",\n remove: \"Remover\",\n edit: \"Editar\",\n create: \"Criar\",\n search: \"Buscar\",\n refresh: \"Atualizar\",\n back: \"Voltar\",\n close: \"Fechar\",\n submit: \"Enviar\",\n tryAgain: \"Tentar novamente\",\n noMatches: \"Nenhum resultado\",\n noMatchesQuery: 'Nenhum resultado para \"{{query}}\".',\n yes: \"Sim\",\n no: \"Não\",\n you: \"Você\",\n system: \"Sistema\",\n suspended: \"Suspenso\",\n member: { one: \"membro\", other: \"membros\" },\n permission: { one: \"permissão\", other: \"permissões\" },\n day: { one: \"dia\", other: \"dias\" },\n invitation: { one: \"convite\", other: \"convites\" },\n selectedCountOf: \"{{selected}} de {{total}}\",\n sendCount: \"Enviar {{count}} {{label}}\",\n loadMore: \"Carregar mais\",\n loading: \"Carregando…\",\n showingOf: \"Mostrando {{shown}} de {{total}}\",\n actionFailed: \"Não foi possível concluir. Tente novamente.\",\n },\n\n shell: {\n triggerLabel: \"Gerenciar unidades de negócio\",\n modalTitle: \"Unidades de negócio\",\n modalDescription: \"Gerencie unidades de negócio, seus membros e funções.\",\n tabBusinessUnits: \"Unidades\",\n tabRoles: \"Funções\",\n },\n\n switcher: {\n triggerCurrentLabel: \"Unidade de negócio atual\",\n triggerSelectLabel: \"Selecionar unidade\",\n triggerEmptyLabel: \"Criar unidade\",\n triggerLoadingLabel: \"Carregando…\",\n triggerErrorLabel: \"Não foi possível carregar\",\n switcherHeader: \"Unidades de negócio\",\n pendingInvitationsHeader: \"Convites pendentes\",\n invitedTitle: \"Você foi convidado\",\n pendingCount: {\n one: \"{{count}} convite pendente\",\n other: \"{{count}} convites pendentes\",\n },\n searchPlaceholder: \"Buscar unidades…\",\n noMatches: \"Nenhuma unidade encontrada\",\n manageCta: \"Gerenciar unidades\",\n currentBadge: \"Atual\",\n emptyTitle: \"Nenhuma unidade ainda\",\n emptyCta: \"Criar unidade\",\n errorTitle: \"Não foi possível carregar unidades\",\n errorRetry: \"Tentar novamente\",\n },\n\n businessUnits: {\n emptyTitle: \"Nenhuma unidade ainda\",\n emptyDescription:\n \"Unidades de negócio organizam seus membros e funções. Crie uma para começar.\",\n emptyCta: \"Criar unidade\",\n listSearchPlaceholder: \"Buscar unidades…\",\n newButton: \"Nova\",\n errorTitle: \"Não foi possível carregar suas unidades\",\n errorDescription: \"Verifique sua conexão e tente novamente.\",\n createFormName: \"Nome\",\n createNamePlaceholder: \"Acme Corp\",\n createSubmit: \"Criar unidade\",\n createNameTaken:\n \"Já existe uma unidade de negócio com esse nome. Escolha outro.\",\n detailMemberCount: { one: \"{{count}} membro\", other: \"{{count}} membros\" },\n detailTabMembers: \"Membros\",\n detailTabInvitations: \"Convites\",\n detailTabSettings: \"Configurações\",\n settingsName: \"Nome\",\n settingsIdentifier: \"Identificador\",\n settingsIdentifierHelp:\n \"Identificador único em minúsculas para esta unidade. Gerado automaticamente a partir do nome.\",\n settingsMemberLimit: \"Limite de membros\",\n settingsMemberLimitHelp: \"Deixe vazio para não ter limite.\",\n memberLimitInvalid: \"O limite de membros deve ser um número inteiro positivo.\",\n settingsJoinCode: \"Código de entrada\",\n settingsJoinCodeHelp: \"Qualquer pessoa com este código pode entrar nesta unidade.\",\n },\n\n members: {\n emptyTitle: \"Nenhum membro ainda\",\n emptyDescription: \"Convide pessoas para esta unidade para começar.\",\n searchPlaceholder: \"Buscar membros…\",\n suspend: \"Suspender\",\n reinstate: \"Reativar\",\n suspendToast: \"{{name}} suspenso\",\n reinstateToast: \"{{name}} reativado\",\n undo: \"Desfazer\",\n removeTitle: \"Remover {{name}}?\",\n removeDescription:\n \"A pessoa perderá o acesso imediatamente. Você pode convidá-la novamente mais tarde.\",\n removeConfirm: \"Remover\",\n removeToast: \"{{name}} removido\",\n perBuSearchPlaceholder: \"Buscar membros…\",\n crossBuSearchPlaceholder: \"Buscar membros ou unidades…\",\n pendingInvitationsHeader: \"Convites pendentes\",\n invitedToJoin: \"Você foi convidado para participar.\",\n invitedAs: \"Convidado como {{role}}\",\n expiresInDays: { one: \"Expira em {{count}} dia.\", other: \"Expira em {{count}} dias.\" },\n expiresToday: \"Expira hoje\",\n accept: \"Aceitar\",\n decline: \"Recusar\",\n joined: \"Você entrou em {{businessUnit}}\",\n declined: \"Convite para {{businessUnit}} recusado\",\n couldNotLoad: \"Não foi possível carregar os membros\",\n partialLoadWarning:\n \"Não foi possível carregar membros de algumas unidades de negócio. A lista abaixo pode estar incompleta.\",\n },\n\n roles: {\n emptyTitle: \"Nenhuma função ainda\",\n emptyDescription:\n \"Funções agrupam permissões para que os membros possam realizar ações específicas nesta unidade.\",\n emptyCta: \"Criar função\",\n newButton: \"Nova função\",\n buSelectorLabel: \"Unidade:\",\n noBusinessUnits: \"Nenhuma unidade\",\n noAccessTitle: \"Você não tem acesso às funções\",\n noAccessDescription: \"A gestão de funções é disponível para proprietários e admins da unidade.\",\n couldNotLoad: \"Não foi possível carregar as funções\",\n couldNotLoadDescription: \"Verifique sua conexão e tente novamente.\",\n notFound: \"Esta função não existe mais.\",\n rowAllPermissions: \"Todas as permissões\",\n rowPermissionsCount: { one: \"{{count}} permissão\", other: \"{{count}} permissões\" },\n systemBadge: \"Sistema\",\n systemBannerNote:\n \"Funções de sistema são gerenciadas pela Road e não podem ser editadas ou excluídas. Clone esta função se quiser uma versão personalizada.\",\n editorName: \"Nome\",\n editorDescription: \"Descrição\",\n editorDescriptionPlaceholder: \"Resumo curto do que esta função pode fazer.\",\n permissionsHeader: \"Permissões\",\n deleteRole: \"Excluir função\",\n deleteTitle: 'Excluir a função \"{{name}}\"?',\n deleteDescription:\n \"Membros atualmente atribuídos a esta função perderão suas permissões. Esta ação não pode ser desfeita.\",\n deleteConfirm: \"Excluir função\",\n deleteToast: 'Função \"{{name}}\" excluída',\n savedToast: '\"{{name}}\" salva',\n allPermissionsBadge: \"Todas as permissões\",\n allPermissionsDescription: \"Esta função tem acesso total a todas as ações desta unidade.\",\n create: {\n title: \"Criar função\",\n descChoose: \"Comece em branco ou duplique as permissões de uma função existente.\",\n descBlank: \"Dê um nome à função e escolha suas permissões.\",\n descClonePick: \"Escolha qual função clonar.\",\n descCloneName: \"Dê um nome à função e revise suas permissões.\",\n blankTitle: \"Começar em branco\",\n blankDescription: \"Crie uma função do zero escolhendo as permissões exatas.\",\n cloneTitle: \"Clonar de existente\",\n cloneDescriptionAvailable: \"Duplique uma função existente e ajuste suas permissões.\",\n cloneDescriptionUnavailable: \"Nenhuma função para clonar ainda. Crie uma em branco primeiro.\",\n pickSourcePrompt: \"Escolha uma função para clonar:\",\n cloningFromBanner:\n \"Clonando de {{role}} — suas {{permissions}} serão copiadas (você pode ajustá-las depois).\",\n nameField: \"Nome\",\n namePlaceholder: \"ex: Editor\",\n descriptionField: \"Descrição (opcional)\",\n descriptionPlaceholder: \"Resumo curto do que esta função pode fazer.\",\n permissionsHint: \"Selecione ao menos uma permissão para esta função.\",\n permissionsError: \"Não foi possível carregar as permissões.\",\n submit: \"Criar função\",\n createdToast: 'Função \"{{name}}\" criada',\n },\n },\n\n invitations: {\n emptyTitle: \"Nenhum convite ainda\",\n emptyDescription: \"Convide pessoas por e-mail e atribua uma função.\",\n inviteButton: \"Convidar pessoas\",\n formEmailsField: \"E-mail{{plural}}\",\n formEmailsPlaceholder: \"alex@exemplo.com, sam@exemplo.com\",\n formEmailsHelp: \"Separe por vírgula ou espaço para múltiplos convites.\",\n formEmailsValidCount: \"{{count}} válido(s).\",\n formEmailsInvalidCount: \"{{count}} inválido(s): {{examples}}\",\n formRoleField: \"Função\",\n formRolePlaceholder: \"Escolha uma função\",\n formSubmitSingle: \"Enviar convite\",\n formSubmitMany: \"Enviar {{count}} convites\",\n sentToast: \"{{count}} convites enviados\",\n sentSingleToast: \"Convite enviado\",\n sentPartialToast: \"{{succeeded}} de {{total}} enviados. Alguns falharam.\",\n sentErrorToast: \"Não foi possível enviar os convites\",\n resend: \"Reenviar\",\n cancel: \"Cancelar\",\n resendToast: \"Convite reenviado para {{email}}\",\n cancelToast: \"Convite para {{email}} cancelado\",\n cancelTitle: \"Cancelar convite para {{email}}?\",\n cancelDescription:\n \"O link do convite não funcionará mais. Você pode enviar um novo convite a qualquer momento.\",\n cancelConfirm: \"Cancelar convite\",\n cancelKeep: \"Manter convite\",\n couldNotLoad: \"Não foi possível carregar os convites\",\n statusPending: \"pendente\",\n statusAccepted: \"aceito\",\n statusExpired: \"expirado\",\n statusCancelled: \"cancelado\",\n statusRejected: \"recusado\",\n invitedRelative: \"convidado {{relative}}\",\n expiresRelative: \"expira {{relative}}\",\n },\n\n validation: {\n required: \"Campo obrigatório.\",\n tooLong: \"Use no máximo {{max}} caracteres.\",\n slugFormat: \"Use apenas letras minúsculas, números e hifens (ex.: acme-corp).\",\n emailInvalid: \"Informe um e-mail válido.\",\n urlInvalid: \"Informe uma URL válida (começando com https://).\",\n atLeastOne: \"Selecione pelo menos uma opção.\",\n generic: \"Verifique este campo.\",\n formSummary: \"Revise os campos destacados.\",\n },\n};\n","import { useMemo } from \"react\";\nimport { useRoad } from \"../provider/context\";\nimport type { Localization, PluralForm } from \"./types\";\nimport { en } from \"./en\";\nimport { ptBR } from \"./pt-BR\";\n\n/*\n * Locale dictionaries are statically bundled today (`en` + `pt-BR`).\n * The SDK review plan §4.2 calls for code-splitting via dynamic\n * `import(\"./i18n/${locale}.ts\")` once a third locale ships — at two\n * locales × ~8KB source the bundle savings (~3KB brotli) don't justify\n * the loading-state cost the dynamic form introduces (every widget has\n * to handle \"locale not loaded yet\"). When fr/es/de land, swap the\n * static imports below for an async loader + provider-level await.\n */\n\ntype DeepPartial<T> = {\n [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];\n};\n\nexport type LocalizationOverride = DeepPartial<Localization>;\n\nexport const BUILT_IN_LOCALES = { en, \"pt-BR\": ptBR } as const;\nexport type BuiltInLocale = keyof typeof BUILT_IN_LOCALES;\n\nfunction isPluralForm(v: unknown): v is PluralForm {\n return (\n typeof v === \"object\" &&\n v !== null &&\n \"one\" in v &&\n \"other\" in v &&\n typeof (v as PluralForm).one === \"string\" &&\n typeof (v as PluralForm).other === \"string\"\n );\n}\n\nfunction deepMerge<T>(base: T, override?: DeepPartial<T>): T {\n if (!override) return base;\n if (typeof base !== \"object\" || base === null) return (override as T) ?? base;\n // Plural forms are atomic — override replaces wholesale rather than per-key.\n if (isPluralForm(base)) return (override as T) ?? base;\n\n const out: Record<string, unknown> = { ...(base as Record<string, unknown>) };\n for (const key of Object.keys(override as object)) {\n const v = (override as Record<string, unknown>)[key];\n if (v === undefined) continue;\n out[key] = deepMerge((base as Record<string, unknown>)[key], v as DeepPartial<unknown>);\n }\n return out as T;\n}\n\nfunction format(template: string, vars?: Record<string, string | number>): string {\n if (!vars) return template;\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, k) => {\n const v = vars[k];\n return v === undefined ? \"\" : String(v);\n });\n}\n\nfunction plural(\n form: PluralForm,\n count: number,\n vars?: Record<string, string | number>,\n): string {\n const template = count === 1 ? form.one : form.other;\n return format(template, { count, ...vars });\n}\n\nfunction relative(iso: string, locale: string): string {\n const ms = new Date(iso).getTime() - Date.now();\n const days = Math.round(ms / 86400000);\n try {\n return new Intl.RelativeTimeFormat(locale, { numeric: \"auto\" }).format(days, \"day\");\n } catch {\n return new Intl.RelativeTimeFormat(\"en\", { numeric: \"auto\" }).format(days, \"day\");\n }\n}\n\nexport interface Translator {\n dict: Localization;\n locale: string;\n format: typeof format;\n plural: typeof plural;\n relative: (iso: string) => string;\n}\n\nexport function useT(): Translator {\n const { locale, localization } = useRoad();\n return useMemo(() => {\n const base = BUILT_IN_LOCALES[locale as BuiltInLocale] ?? BUILT_IN_LOCALES.en;\n const dict = deepMerge(base, localization);\n return {\n dict,\n locale,\n format,\n plural,\n relative: (iso: string) => relative(iso, locale),\n };\n }, [locale, localization]);\n}\n","import { forwardRef, type InputHTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(({ className, ...props }, ref) => (\n <input\n ref={ref}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-background px-3 py-1 text-sm shadow-sm\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"transition-colors\",\n className,\n )}\n {...props}\n />\n));\nInput.displayName = \"Input\";\n","import { type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"animate-pulse rounded-md bg-muted\", className)} {...props} />;\n}\n","import { type ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\ninterface EmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n className?: string;\n}\n\nexport function EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center gap-3 rounded-lg border border-dashed border-border bg-card/50 px-6 py-12 text-center\",\n className,\n )}\n >\n {icon && (\n <div className=\"rounded-full bg-muted p-3 text-muted-foreground\" aria-hidden>\n {icon}\n </div>\n )}\n <div className=\"max-w-sm\">\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n {description && <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>}\n </div>\n {action && <div className=\"mt-2\">{action}</div>}\n </div>\n );\n}\n","import { cn } from \"../../lib/cn\";\n\ninterface AvatarProps {\n name: string;\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nconst GRADIENTS = [\n \"from-rose-400 to-orange-400\",\n \"from-amber-400 to-yellow-400\",\n \"from-emerald-400 to-cyan-400\",\n \"from-sky-400 to-indigo-400\",\n \"from-violet-400 to-fuchsia-400\",\n \"from-pink-400 to-rose-400\",\n];\n\nfunction hashName(name: string): number {\n let h = 0;\n for (let i = 0; i < name.length; i++) h = (h * 31 + name.charCodeAt(i)) | 0;\n return Math.abs(h);\n}\n\nfunction initials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"?\";\n if (parts.length === 1) return parts[0]!.slice(0, 2).toUpperCase();\n return (parts[0]![0]! + parts[parts.length - 1]![0]!).toUpperCase();\n}\n\nconst SIZES = {\n sm: \"h-7 w-7 text-[10px]\",\n md: \"h-9 w-9 text-xs\",\n lg: \"h-12 w-12 text-sm\",\n};\n\nexport function Avatar({ name, size = \"md\", className }: AvatarProps) {\n const gradient = GRADIENTS[hashName(name) % GRADIENTS.length];\n return (\n <div\n aria-hidden\n className={cn(\n \"flex items-center justify-center rounded-full bg-gradient-to-br text-white font-semibold shrink-0\",\n gradient,\n SIZES[size],\n className,\n )}\n >\n {initials(name)}\n </div>\n );\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium transition-colors\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-secondary text-secondary-foreground\",\n outline: \"border-border text-foreground\",\n success:\n \"border-transparent bg-emerald-100 text-emerald-900 dark:bg-emerald-950 dark:text-emerald-100\",\n warning:\n \"border-transparent bg-amber-100 text-amber-900 dark:bg-amber-950 dark:text-amber-100\",\n danger:\n \"border-transparent bg-rose-100 text-rose-900 dark:bg-rose-950 dark:text-rose-100\",\n muted: \"border-transparent bg-muted text-muted-foreground\",\n },\n },\n defaultVariants: { variant: \"default\" },\n },\n);\n\nexport interface BadgeProps\n extends HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {}\n\nexport function Badge({ className, variant, ...props }: BadgeProps) {\n return <span className={cn(badgeVariants({ variant }), className)} {...props} />;\n}\n","import { ChevronRight, Users } from \"lucide-react\";\nimport { Avatar } from \"../shared/Avatar\";\nimport { Badge } from \"../../ui/badge\";\nimport { cn } from \"../../lib/cn\";\nimport type { Membership } from \"../../api/types\";\n\ninterface Props {\n membership: Membership;\n onSelect: (buId: string) => void;\n}\n\nexport function BusinessUnitRow({ membership, onSelect }: Props) {\n const { businessUnit, roles } = membership;\n const primaryRole = roles[0]?.name;\n\n return (\n <button\n type=\"button\"\n onClick={() => onSelect(businessUnit.id)}\n className={cn(\n \"group flex w-full items-center gap-3 rounded-lg border border-border bg-card px-3 py-3 text-left\",\n \"transition-all hover:border-foreground/20 hover:bg-accent/50\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n )}\n >\n <Avatar name={businessUnit.name} size=\"md\" />\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate text-sm font-medium text-foreground\">{businessUnit.name}</span>\n {primaryRole && (\n <Badge variant=\"muted\" className=\"shrink-0\">\n {primaryRole}\n </Badge>\n )}\n </div>\n <div className=\"mt-0.5 flex items-center gap-1 text-xs text-muted-foreground\">\n <span className=\"font-mono truncate\">{businessUnit.slug}</span>\n </div>\n </div>\n\n <ChevronRight\n className=\"h-4 w-4 shrink-0 text-muted-foreground/50 transition-transform group-hover:translate-x-0.5 group-hover:text-muted-foreground\"\n aria-hidden\n />\n <Users className=\"sr-only\" />\n </button>\n );\n}\n","import { forwardRef, type LabelHTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport const Label = forwardRef<HTMLLabelElement, LabelHTMLAttributes<HTMLLabelElement>>(\n ({ className, ...props }, ref) => (\n <label\n ref={ref}\n className={cn(\"text-sm font-medium leading-none text-foreground\", className)}\n {...props}\n />\n ),\n);\nLabel.displayName = \"Label\";\n","import { cloneElement, isValidElement, type ReactElement, type ReactNode } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Label } from \"./label\";\n\nexport interface FieldProps {\n /** Wired to the control's `id`, the label's `htmlFor`, and the message ids. */\n id: string;\n label: ReactNode;\n /** Inline validation message. When set, the control is marked invalid. */\n error?: string;\n /** Helper text shown when there's no error. */\n hint?: ReactNode;\n required?: boolean;\n /** The single form control (Input, Textarea, native select, or a group wrapper). */\n children: ReactElement;\n className?: string;\n}\n\n/**\n * Label + control + inline validation message, with the accessibility wiring a\n * screen reader needs. The control receives `id`, `aria-invalid`, and an\n * `aria-describedby` pointing at whichever of the hint/error is showing; the\n * error renders as a live `role=\"alert\"`. Declaring `id` once on `<Field>`\n * keeps the three references (label, control, message) in sync.\n *\n * The error state is also reflected visually by merging a destructive\n * border/ring onto the control's own className — independent of any Tailwind\n * `aria-*` variant config, so the field turns red consistently across apps.\n */\nexport function Field({ id, label, error, hint, required, children, className }: FieldProps) {\n const errorId = `${id}-error`;\n const hintId = `${id}-hint`;\n const describedBy = error ? errorId : hint ? hintId : undefined;\n\n let control: ReactNode = children;\n if (isValidElement(children)) {\n const childProps = children.props as Record<string, unknown>;\n const merged = [childProps[\"aria-describedby\"], describedBy].filter(Boolean).join(\" \");\n control = cloneElement(children as ReactElement<Record<string, unknown>>, {\n id,\n \"aria-invalid\": error ? true : undefined,\n \"aria-describedby\": merged || undefined,\n className: cn(\n childProps[\"className\"] as string | undefined,\n error && \"border-destructive focus-visible:ring-destructive\",\n ),\n });\n }\n\n return (\n <div className={cn(\"space-y-1.5\", className)}>\n <Label htmlFor={id}>\n {label}\n {required ? <span aria-hidden className=\"ml-0.5 text-destructive\">*</span> : null}\n </Label>\n {control}\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-sm text-destructive\">\n {error}\n </p>\n ) : hint ? (\n <p id={hintId} className=\"text-sm text-muted-foreground\">\n {hint}\n </p>\n ) : null}\n </div>\n );\n}\n","import { useCallback, useState } from \"react\";\nimport { RoadValidationError } from \"../api/errors\";\n\n/** Field key (the control's DOM id) → inline message. */\nexport type FieldErrors = Record<string, string>;\n\nexport interface FormErrors {\n /** Per-field messages, keyed by the control's DOM id. */\n errors: FieldErrors;\n /** Top-of-form message for problems that can't be tied to a single field. */\n formError: string | null;\n /** Apply client-validation results; returns `true` if any errors (caller should stop). */\n failClient: (errors: FieldErrors) => boolean;\n /**\n * Map a thrown error's server-side field validation onto the form. Returns\n * `true` iff it consumed a field-validation error (so the caller should NOT\n * also toast); `false` for non-validation faults, which the caller surfaces\n * its own way.\n *\n * @param knownFields control ids this form actually renders — anything else\n * (including the API's `\"unknown\"` for nested paths) routes to `formError`.\n * @param fieldMap optional API-field → control-id remap (e.g. snake_case DTO\n * fields whose inputs use a shorter id).\n */\n applyServer: (\n err: unknown,\n knownFields: string[],\n fieldMap?: Record<string, string>,\n ) => boolean;\n /** Clear one field's error (call from its onChange); also clears `formError`. */\n clear: (key: string) => void;\n reset: () => void;\n}\n\n/** Focus the first existing control among `keys`, after the next paint. */\nfunction scheduleFocus(keys: string[]): void {\n if (typeof window === \"undefined\" || keys.length === 0) return;\n if (typeof window.requestAnimationFrame !== \"function\") return;\n window.requestAnimationFrame(() => {\n for (const k of keys) {\n const el = document.getElementById(k);\n if (el) {\n el.focus();\n return;\n }\n }\n });\n}\n\n/**\n * One source of truth for a form's validation errors — client-side rules and\n * the server's 400 backstop, unified. Localized copy is injected so the hook\n * stays framework-agnostic (the SDK passes its i18n dict; apps pass literals).\n */\nexport function useFormErrors(copy: { generic: string; formSummary: string }): FormErrors {\n const [errors, setErrors] = useState<FieldErrors>({});\n const [formError, setFormError] = useState<string | null>(null);\n const { generic, formSummary } = copy;\n\n const failClient = useCallback((next: FieldErrors) => {\n const keys = Object.keys(next);\n setErrors(next);\n setFormError(null);\n scheduleFocus(keys);\n return keys.length > 0;\n }, []);\n\n const applyServer = useCallback(\n (err: unknown, knownFields: string[], fieldMap?: Record<string, string>) => {\n if (!(err instanceof RoadValidationError)) return false;\n const detail = err.fieldErrors;\n if (Object.keys(detail).length === 0) return false;\n\n // The API's validation messages are English; we surface a localized\n // generic per mapped field instead and keep the raw detail for debugging.\n // eslint-disable-next-line no-console\n console.debug(\"[road] field validation\", detail);\n\n const mapped = new Set<string>();\n let hasFormLevel = false;\n for (const apiField of Object.keys(detail)) {\n const key = fieldMap?.[apiField] ?? apiField;\n if (knownFields.includes(key)) mapped.add(key);\n else hasFormLevel = true;\n }\n\n const next: FieldErrors = {};\n for (const key of knownFields) if (mapped.has(key)) next[key] = generic;\n\n setErrors(next);\n setFormError(Object.keys(next).length === 0 || hasFormLevel ? formSummary : null);\n scheduleFocus(Object.keys(next));\n return true;\n },\n [generic, formSummary],\n );\n\n const clear = useCallback((key: string) => {\n setErrors((prev) => {\n if (!(key in prev)) return prev;\n const next = { ...prev };\n delete next[key];\n return next;\n });\n setFormError(null);\n }, []);\n\n const reset = useCallback(() => {\n setErrors({});\n setFormError(null);\n }, []);\n\n return { errors, formError, failClient, applyServer, clear, reset };\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"../../ui/button\";\nimport { Input } from \"../../ui/input\";\nimport { Field } from \"../../ui/field\";\nimport { useCreateBusinessUnit } from \"../../api/hooks\";\nimport { RoadConflictError } from \"../../api/errors\";\nimport { useFormErrors } from \"../../lib/use-form-errors\";\nimport { useT } from \"../../i18n/context\";\n\ninterface Props {\n onCancel: () => void;\n onCreated: (buId: string) => void;\n}\n\nconst NAME_MAX = 120;\n\nexport function CreateBusinessUnitForm({ onCancel, onCreated }: Props) {\n const [name, setName] = useState(\"\");\n const nameRef = useRef<HTMLInputElement>(null);\n const t = useT();\n\n const create = useCreateBusinessUnit();\n const form = useFormErrors({\n generic: t.dict.validation.generic,\n formSummary: t.dict.validation.formSummary,\n });\n\n useEffect(() => {\n nameRef.current?.focus();\n }, []);\n\n const submit = async () => {\n const errs: Record<string, string> = {};\n const trimmed = name.trim();\n if (!trimmed) errs[\"bu-name\"] = t.dict.validation.required;\n else if (trimmed.length > NAME_MAX)\n errs[\"bu-name\"] = t.format(t.dict.validation.tooLong, { max: NAME_MAX });\n if (form.failClient(errs)) return;\n\n try {\n const bu = await create.mutateAsync({ name: trimmed });\n onCreated(bu.id);\n } catch (err) {\n // A field-validation 400 highlights the input.\n if (form.applyServer(err, [\"bu-name\"], { name: \"bu-name\" })) return;\n // The slug is derived from the name server-side, so a 409 means that\n // identifier is already taken — point the user at the name field\n // rather than a vague toast.\n if (err instanceof RoadConflictError) {\n form.failClient({ \"bu-name\": t.dict.businessUnits.createNameTaken });\n return;\n }\n toast.error(t.dict.common.actionFailed);\n }\n };\n\n return (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n void submit();\n }}\n className=\"rounded-lg border border-border bg-card p-4 animate-in fade-in-0 slide-in-from-top-2 duration-200\"\n >\n {form.formError && (\n <p role=\"alert\" className=\"mb-3 text-sm text-destructive\">\n {form.formError}\n </p>\n )}\n\n <Field\n id=\"bu-name\"\n label={t.dict.businessUnits.createFormName}\n error={form.errors[\"bu-name\"]}\n >\n <Input\n ref={nameRef}\n value={name}\n onChange={(e) => {\n setName(e.target.value);\n form.clear(\"bu-name\");\n }}\n placeholder={t.dict.businessUnits.createNamePlaceholder}\n disabled={create.isPending}\n />\n </Field>\n\n <div className=\"mt-4 flex items-center justify-end gap-2\">\n <Button type=\"button\" variant=\"ghost\" onClick={onCancel} disabled={create.isPending}>\n {t.dict.common.cancel}\n </Button>\n <Button type=\"submit\" disabled={create.isPending}>\n {create.isPending && <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />}\n {t.dict.businessUnits.createSubmit}\n </Button>\n </div>\n </form>\n );\n}\n","import { useMemo } from \"react\";\nimport { Check, Loader2, Mail } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { Avatar } from \"../shared/Avatar\";\nimport { Button } from \"../../ui/button\";\nimport { useAcceptInvitation, useRejectInvitation } from \"../../api/hooks\";\nimport { useT } from \"../../i18n/context\";\nimport type { PendingInvitation } from \"../../api/types\";\n\n/**\n * The \"invitation inbox\" — pending BU invitations surfaced at the top of the\n * business-units tab (and as the hero for a freshly-invited user who has no\n * memberships yet). Each card shows the business unit, the offered role, and a\n * humanized expiry, with one-click Accept / Decline.\n *\n * Data + actions come from {@link useAcceptInvitation} / {@link useRejectInvitation},\n * which invalidate the my-business-units query on success — so an accepted BU\n * slides into the list below and a declined one disappears, with no manual\n * refetch wiring at the call site.\n */\nexport function PendingInvitations({\n invitations,\n}: {\n invitations: PendingInvitation[];\n}) {\n const t = useT();\n if (invitations.length === 0) return null;\n\n return (\n <section\n aria-label={t.dict.members.pendingInvitationsHeader}\n className=\"rounded-lg border border-primary/20 bg-primary/[0.04] p-3 animate-in fade-in-0 slide-in-from-top-1 duration-200\"\n >\n <div className=\"mb-2 flex items-center gap-2 px-0.5\">\n <Mail className=\"h-3.5 w-3.5 text-primary\" aria-hidden />\n <span className=\"text-sm font-medium\">\n {t.dict.members.pendingInvitationsHeader}\n </span>\n <span className=\"flex h-4 min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[10px] font-semibold leading-none text-primary-foreground\">\n {invitations.length}\n </span>\n </div>\n <ul role=\"list\" className=\"space-y-2\">\n {invitations.map((inv) => (\n <li key={inv.id}>\n <InvitationCard invitation={inv} />\n </li>\n ))}\n </ul>\n </section>\n );\n}\n\nfunction InvitationCard({ invitation }: { invitation: PendingInvitation }) {\n const t = useT();\n const accept = useAcceptInvitation();\n const reject = useRejectInvitation();\n const busy = accept.isPending || reject.isPending;\n const expiry = useExpiryLabel(invitation.expiresAt, t);\n\n const handleAccept = async () => {\n try {\n await accept.mutateAsync(invitation.id);\n toast.success(\n t.format(t.dict.members.joined, {\n businessUnit: invitation.businessUnit.name,\n }),\n );\n } catch {\n toast.error(t.dict.common.actionFailed);\n }\n };\n\n const handleDecline = async () => {\n try {\n await reject.mutateAsync(invitation.id);\n toast.message(\n t.format(t.dict.members.declined, {\n businessUnit: invitation.businessUnit.name,\n }),\n );\n } catch {\n toast.error(t.dict.common.actionFailed);\n }\n };\n\n return (\n <div className=\"flex items-center gap-3 rounded-md border border-border bg-card p-2.5\">\n <Avatar name={invitation.businessUnit.name} size=\"md\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-sm font-medium\">\n {invitation.businessUnit.name}\n </div>\n <div className=\"flex items-center gap-1.5 truncate text-xs text-muted-foreground\">\n <span className=\"truncate\">\n {t.format(t.dict.members.invitedAs, { role: invitation.roleName })}\n </span>\n {expiry && (\n <>\n <span aria-hidden>·</span>\n <span\n className={\n expiry.soon ? \"text-amber-600 dark:text-amber-500\" : undefined\n }\n >\n {expiry.label}\n </span>\n </>\n )}\n </div>\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={handleDecline} disabled={busy}>\n {reject.isPending && <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />}\n {t.dict.members.decline}\n </Button>\n <Button size=\"sm\" onClick={handleAccept} disabled={busy}>\n {accept.isPending ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Check className=\"h-3.5 w-3.5\" />\n )}\n {t.dict.members.accept}\n </Button>\n </div>\n </div>\n );\n}\n\n/**\n * Humanize an ISO expiry into \"Expires today\" / \"Expires in N days\", flagging\n * the last 48h as `soon` so the card can tint it. Coarse by design — invitation\n * windows are measured in days, so no live ticking is needed.\n */\nfunction useExpiryLabel(\n expiresAt: string,\n t: ReturnType<typeof useT>,\n): { label: string; soon: boolean } | null {\n return useMemo(() => {\n const ms = new Date(expiresAt).getTime() - Date.now();\n if (Number.isNaN(ms)) return null;\n const days = Math.ceil(ms / 86_400_000);\n if (days <= 0) return { label: t.dict.members.expiresToday, soon: true };\n return { label: t.plural(t.dict.members.expiresInDays, days), soon: days <= 2 };\n }, [expiresAt, t]);\n}\n","import { useMemo, useState } from \"react\";\nimport { Building2, Plus, RefreshCw, Search } from \"lucide-react\";\nimport { Button } from \"../../ui/button\";\nimport { Input } from \"../../ui/input\";\nimport { Skeleton } from \"../../ui/skeleton\";\nimport { EmptyState } from \"../shared/EmptyState\";\nimport { useMyBusinessUnits } from \"../../api/hooks\";\nimport { useT } from \"../../i18n/context\";\nimport { BusinessUnitRow } from \"./BusinessUnitRow\";\nimport { CreateBusinessUnitForm } from \"./CreateBusinessUnitForm\";\nimport { PendingInvitations } from \"./PendingInvitations\";\n\ninterface Props {\n onSelect: (buId: string) => void;\n}\n\nexport function BusinessUnitList({ onSelect }: Props) {\n const [creating, setCreating] = useState(false);\n const [query, setQuery] = useState(\"\");\n const { data, isPending, isError, refetch, isRefetching } = useMyBusinessUnits();\n const t = useT();\n\n const filtered = useMemo(() => {\n if (!data) return [];\n const q = query.trim().toLowerCase();\n if (!q) return data.memberships;\n return data.memberships.filter(\n (m) =>\n m.businessUnit.name.toLowerCase().includes(q) ||\n m.businessUnit.slug.toLowerCase().includes(q),\n );\n }, [data, query]);\n\n // ─────────── loading\n if (isPending) {\n return (\n <div className=\"space-y-3\" aria-busy>\n <Skeleton className=\"h-9 w-full max-w-xs\" />\n <div className=\"space-y-2\">\n {[0, 1, 2].map((i) => (\n <Skeleton key={i} className=\"h-16 w-full\" />\n ))}\n </div>\n </div>\n );\n }\n\n // ─────────── error\n if (isError) {\n return (\n <EmptyState\n icon={<RefreshCw className=\"h-5 w-5\" />}\n title={t.dict.businessUnits.errorTitle}\n description={t.dict.businessUnits.errorDescription}\n action={\n <Button variant=\"outline\" onClick={() => void refetch()}>\n <RefreshCw className=\"h-3.5 w-3.5\" /> {t.dict.common.tryAgain}\n </Button>\n }\n />\n );\n }\n\n const memberships = data!.memberships;\n const pendingInvitations = data!.pendingInvitations;\n const showSearch = memberships.length >= 5;\n\n // ─────────── empty (no memberships)\n if (memberships.length === 0) {\n if (creating) {\n return (\n <CreateBusinessUnitForm\n onCancel={() => setCreating(false)}\n onCreated={(id) => {\n setCreating(false);\n onSelect(id);\n }}\n />\n );\n }\n // Freshly-invited newcomer: lead with the invitation(s); creating your own\n // business unit stays available as a quieter, secondary path.\n if (pendingInvitations.length > 0) {\n return (\n <div className=\"space-y-4\">\n <PendingInvitations invitations={pendingInvitations} />\n <div className=\"flex justify-center\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setCreating(true)}>\n <Plus className=\"h-3.5 w-3.5\" /> {t.dict.businessUnits.emptyCta}\n </Button>\n </div>\n </div>\n );\n }\n return (\n <EmptyState\n icon={<Building2 className=\"h-5 w-5\" />}\n title={t.dict.businessUnits.emptyTitle}\n description={t.dict.businessUnits.emptyDescription}\n action={\n <Button onClick={() => setCreating(true)}>\n <Plus className=\"h-3.5 w-3.5\" /> {t.dict.businessUnits.emptyCta}\n </Button>\n }\n />\n );\n }\n\n return (\n <div className=\"space-y-3\">\n {pendingInvitations.length > 0 && (\n <PendingInvitations invitations={pendingInvitations} />\n )}\n <div className=\"flex items-center gap-2\">\n {showSearch ? (\n <div className=\"relative flex-1\">\n <Search className=\"pointer-events-none absolute left-3 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={t.dict.businessUnits.listSearchPlaceholder}\n className=\"pl-9\"\n />\n </div>\n ) : (\n <div className=\"flex-1\" />\n )}\n <Button variant=\"outline\" size=\"sm\" onClick={() => void refetch()} disabled={isRefetching}>\n <RefreshCw className={isRefetching ? \"h-3.5 w-3.5 animate-spin\" : \"h-3.5 w-3.5\"} />\n <span className=\"sr-only\">{t.dict.common.refresh}</span>\n </Button>\n <Button size=\"sm\" onClick={() => setCreating(true)} disabled={creating}>\n <Plus className=\"h-3.5 w-3.5\" /> {t.dict.businessUnits.newButton}\n </Button>\n </div>\n\n {creating && (\n <CreateBusinessUnitForm\n onCancel={() => setCreating(false)}\n onCreated={(id) => {\n setCreating(false);\n onSelect(id);\n }}\n />\n )}\n\n {filtered.length === 0 ? (\n <EmptyState\n icon={<Search className=\"h-5 w-5\" />}\n title={t.dict.common.noMatches}\n description={t.format(t.dict.common.noMatchesQuery, { query })}\n />\n ) : (\n <ul className=\"space-y-2\" role=\"list\">\n {filtered.map((m) => (\n <li key={m.businessUnit.id}>\n <BusinessUnitRow membership={m} onSelect={onSelect} />\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/alert-dialog.tsx\nimport * as React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { createDialogScope } from \"@radix-ui/react-dialog\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar ROOT_NAME = \"AlertDialog\";\nvar [createAlertDialogContext, createAlertDialogScope] = createContextScope(ROOT_NAME, [\n createDialogScope\n]);\nvar useDialogScope = createDialogScope();\nvar AlertDialog = (props) => {\n const { __scopeAlertDialog, ...alertDialogProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Root, { ...dialogScope, ...alertDialogProps, modal: true });\n};\nAlertDialog.displayName = ROOT_NAME;\nvar TRIGGER_NAME = \"AlertDialogTrigger\";\nvar AlertDialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...triggerProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Trigger, { ...dialogScope, ...triggerProps, ref: forwardedRef });\n }\n);\nAlertDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"AlertDialogPortal\";\nvar AlertDialogPortal = (props) => {\n const { __scopeAlertDialog, ...portalProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Portal, { ...dialogScope, ...portalProps });\n};\nAlertDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"AlertDialogOverlay\";\nvar AlertDialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...overlayProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Overlay, { ...dialogScope, ...overlayProps, ref: forwardedRef });\n }\n);\nAlertDialogOverlay.displayName = OVERLAY_NAME;\nvar CONTENT_NAME = \"AlertDialogContent\";\nvar [AlertDialogContentProvider, useAlertDialogContentContext] = createAlertDialogContext(CONTENT_NAME);\nvar Slottable = createSlottable(\"AlertDialogContent\");\nvar AlertDialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, children, ...contentProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const cancelRef = React.useRef(null);\n return /* @__PURE__ */ jsx(\n DialogPrimitive.WarningProvider,\n {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"alert-dialog\",\n children: /* @__PURE__ */ jsx(AlertDialogContentProvider, { scope: __scopeAlertDialog, cancelRef, children: /* @__PURE__ */ jsxs(\n DialogPrimitive.Content,\n {\n role: \"alertdialog\",\n ...dialogScope,\n ...contentProps,\n ref: composedRefs,\n onOpenAutoFocus: composeEventHandlers(contentProps.onOpenAutoFocus, (event) => {\n event.preventDefault();\n cancelRef.current?.focus({ preventScroll: true });\n }),\n onPointerDownOutside: (event) => event.preventDefault(),\n onInteractOutside: (event) => event.preventDefault(),\n children: [\n /* @__PURE__ */ jsx(Slottable, { children }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef })\n ]\n }\n ) })\n }\n );\n }\n);\nAlertDialogContent.displayName = CONTENT_NAME;\nvar TITLE_NAME = \"AlertDialogTitle\";\nvar AlertDialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...titleProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Title, { ...dialogScope, ...titleProps, ref: forwardedRef });\n }\n);\nAlertDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"AlertDialogDescription\";\nvar AlertDialogDescription = React.forwardRef((props, forwardedRef) => {\n const { __scopeAlertDialog, ...descriptionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Description, { ...dialogScope, ...descriptionProps, ref: forwardedRef });\n});\nAlertDialogDescription.displayName = DESCRIPTION_NAME;\nvar ACTION_NAME = \"AlertDialogAction\";\nvar AlertDialogAction = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...actionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...actionProps, ref: forwardedRef });\n }\n);\nAlertDialogAction.displayName = ACTION_NAME;\nvar CANCEL_NAME = \"AlertDialogCancel\";\nvar AlertDialogCancel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...cancelProps } = props;\n const { cancelRef } = useAlertDialogContentContext(CANCEL_NAME, __scopeAlertDialog);\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const ref = useComposedRefs(forwardedRef, cancelRef);\n return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...cancelProps, ref });\n }\n);\nAlertDialogCancel.displayName = CANCEL_NAME;\nvar DescriptionWarning = ({ contentRef }) => {\n const MESSAGE = `\\`${CONTENT_NAME}\\` requires a description for the component to be accessible for screen reader users.\n\nYou can add a description to the \\`${CONTENT_NAME}\\` by passing a \\`${DESCRIPTION_NAME}\\` component as a child, which also benefits sighted users by adding visible context to the dialog.\n\nAlternatively, you can use your own component as a description by assigning it an \\`id\\` and passing the same value to the \\`aria-describedby\\` prop in \\`${CONTENT_NAME}\\`. If the description is confusing or duplicative for sighted users, you can use the \\`@radix-ui/react-visually-hidden\\` primitive as a wrapper around your description component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;\n React.useEffect(() => {\n const hasDescription = document.getElementById(\n contentRef.current?.getAttribute(\"aria-describedby\")\n );\n if (!hasDescription) console.warn(MESSAGE);\n }, [MESSAGE, contentRef]);\n return null;\n};\nvar Root2 = AlertDialog;\nvar Trigger2 = AlertDialogTrigger;\nvar Portal2 = AlertDialogPortal;\nvar Overlay2 = AlertDialogOverlay;\nvar Content2 = AlertDialogContent;\nvar Action = AlertDialogAction;\nvar Cancel = AlertDialogCancel;\nvar Title2 = AlertDialogTitle;\nvar Description2 = AlertDialogDescription;\nexport {\n Action,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n Cancel,\n Content2 as Content,\n Description2 as Description,\n Overlay2 as Overlay,\n Portal2 as Portal,\n Root2 as Root,\n Title2 as Title,\n Trigger2 as Trigger,\n createAlertDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","import { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\nimport { cn } from \"../lib/cn\";\nimport { appearanceToStyle, resolveColorScheme } from \"../appearance/appearance\";\nimport { useRoad } from \"../provider/context\";\n\nexport const AlertDialog = AlertDialogPrimitive.Root;\nexport const AlertDialogTrigger = AlertDialogPrimitive.Trigger;\n\nexport const AlertDialogContent = forwardRef<\n ElementRef<typeof AlertDialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => {\n const { appearance } = useRoad();\n const scheme = resolveColorScheme(appearance?.colorScheme);\n const style = appearanceToStyle(appearance);\n return (\n <AlertDialogPrimitive.Portal>\n <div className={cn(\"road-ui\", scheme === \"dark\" && \"dark\")} style={style}>\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-[60] bg-black/50\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n )}\n />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-[60] grid w-full max-w-md translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-background p-6 shadow-lg rounded-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n className,\n )}\n {...props}\n >\n {children}\n </AlertDialogPrimitive.Content>\n </div>\n </AlertDialogPrimitive.Portal>\n );\n});\nAlertDialogContent.displayName = \"AlertDialogContent\";\n\nexport const AlertDialogTitle = forwardRef<\n ElementRef<typeof AlertDialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\"text-base font-semibold text-foreground\", className)}\n {...props}\n />\n));\nAlertDialogTitle.displayName = \"AlertDialogTitle\";\n\nexport const AlertDialogDescription = forwardRef<\n ElementRef<typeof AlertDialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nAlertDialogDescription.displayName = \"AlertDialogDescription\";\n\nexport const AlertDialogAction = AlertDialogPrimitive.Action;\nexport const AlertDialogCancel = AlertDialogPrimitive.Cancel;\n","import { Loader2 } from \"lucide-react\";\nimport { Button } from \"../../ui/button\";\nimport { useT } from \"../../i18n/context\";\n\ninterface Props {\n /** Number of items already rendered across all loaded pages. */\n shown: number;\n /** Total row count from `pagination.totalCount`. */\n total: number;\n hasNextPage: boolean;\n isFetchingNextPage: boolean;\n /** Bound to `useInfiniteQuery().fetchNextPage`. */\n onLoadMore: () => void;\n}\n\n/**\n * Shared footer for paginated lists. Renders nothing when total is 0,\n * shows a \"X of Y\" count, and renders a \"Load more\" button when more\n * pages remain. Hides the button (but keeps the count) once the last\n * page has loaded.\n */\nexport function LoadMoreFooter({\n shown,\n total,\n hasNextPage,\n isFetchingNextPage,\n onLoadMore,\n}: Props) {\n const t = useT();\n if (total === 0) return null;\n return (\n <div className=\"flex items-center justify-between gap-3 pt-1 text-xs text-muted-foreground\">\n <span>{t.format(t.dict.common.showingOf, { shown, total })}</span>\n {hasNextPage && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onLoadMore}\n disabled={isFetchingNextPage}\n >\n {isFetchingNextPage ? (\n <>\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" /> {t.dict.common.loading}\n </>\n ) : (\n t.dict.common.loadMore\n )}\n </Button>\n )}\n </div>\n );\n}\n","import { useMemo, useState } from \"react\";\nimport { Pause, Play, Search, Trash2, Users } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { Avatar } from \"../shared/Avatar\";\nimport { Badge } from \"../../ui/badge\";\nimport { Button } from \"../../ui/button\";\nimport { Input } from \"../../ui/input\";\nimport { Skeleton } from \"../../ui/skeleton\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"../../ui/alert-dialog\";\nimport { EmptyState } from \"../shared/EmptyState\";\nimport { LoadMoreFooter } from \"../shared/LoadMoreFooter\";\nimport {\n useCan,\n useInfiniteMembers,\n useReinstateMember,\n useRemoveMember,\n useSuspendMember,\n} from \"../../api/hooks\";\nimport { useT } from \"../../i18n/context\";\nimport type { Member } from \"../../api/types\";\n\ninterface Props {\n buId: string;\n}\n\nexport function MembersList({ buId }: Props) {\n const [query, setQuery] = useState(\"\");\n const {\n data,\n isPending,\n isError,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n } = useInfiniteMembers(buId);\n const t = useT();\n\n // Flatten all loaded pages into a single array. The search box below\n // filters only over loaded rows — when query is active and totalCount\n // exceeds shown, we hint the user to load more.\n const members = useMemo(\n () => (data ? data.pages.flatMap((p) => p.data) : []),\n [data],\n );\n const totalCount = data?.pages[0]?.pagination.totalCount ?? 0;\n\n const filtered = useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return members;\n return members.filter(\n (m) => m.name.toLowerCase().includes(q) || m.email.toLowerCase().includes(q),\n );\n }, [members, query]);\n\n if (isPending) {\n return (\n <div className=\"space-y-2\">\n {[0, 1, 2, 3].map((i) => (\n <Skeleton key={i} className=\"h-14 w-full\" />\n ))}\n </div>\n );\n }\n if (isError) {\n return (\n <EmptyState\n icon={<Users className=\"h-5 w-5\" />}\n title={t.dict.members.couldNotLoad}\n description={t.dict.businessUnits.errorDescription}\n />\n );\n }\n\n if (totalCount === 0) {\n return (\n <EmptyState\n icon={<Users className=\"h-5 w-5\" />}\n title={t.dict.members.emptyTitle}\n description={t.dict.members.emptyDescription}\n />\n );\n }\n\n return (\n <div className=\"space-y-3\">\n {members.length >= 5 && (\n <div className=\"relative\">\n <Search className=\"pointer-events-none absolute left-3 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={t.dict.members.perBuSearchPlaceholder}\n className=\"pl-9\"\n />\n </div>\n )}\n\n {filtered.length === 0 ? (\n <EmptyState\n icon={<Search className=\"h-5 w-5\" />}\n title={t.dict.common.noMatches}\n description={t.format(t.dict.common.noMatchesQuery, { query })}\n />\n ) : (\n <ul className=\"divide-y divide-border rounded-lg border border-border bg-card\" role=\"list\">\n {filtered.map((m) => (\n <li key={m.id}>\n <MemberRow member={m} buId={buId} />\n </li>\n ))}\n </ul>\n )}\n\n <LoadMoreFooter\n shown={members.length}\n total={totalCount}\n hasNextPage={hasNextPage}\n isFetchingNextPage={isFetchingNextPage}\n onLoadMore={() => void fetchNextPage()}\n />\n </div>\n );\n}\n\nfunction MemberRow({ member, buId }: { member: Member; buId: string }) {\n const suspend = useSuspendMember(buId);\n const reinstate = useReinstateMember(buId);\n const remove = useRemoveMember(buId);\n const t = useT();\n const can = useCan(buId);\n const canManage = can(\"manage:Member\");\n\n const isSuspended = member.status === \"suspended\";\n\n const handleToggleSuspend = async () => {\n try {\n if (isSuspended) {\n await reinstate.mutateAsync(member.id);\n toast.success(t.format(t.dict.members.reinstateToast, { name: member.name }));\n } else {\n await suspend.mutateAsync(member.id);\n toast.message(t.format(t.dict.members.suspendToast, { name: member.name }), {\n action: {\n label: t.dict.members.undo,\n onClick: () => void reinstate.mutateAsync(member.id),\n },\n });\n }\n } catch {\n toast.error(t.dict.businessUnits.errorTitle);\n }\n };\n\n const handleRemove = async () => {\n try {\n await remove.mutateAsync(member.id);\n toast.success(t.format(t.dict.members.removeToast, { name: member.name }));\n } catch {\n toast.error(t.dict.members.couldNotLoad);\n }\n };\n\n return (\n <div className=\"flex items-center gap-3 px-3 py-3\">\n <Avatar name={member.name} />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate text-sm font-medium text-foreground\">{member.name}</span>\n {isSuspended && (\n <Badge variant=\"warning\" className=\"shrink-0\">\n {t.dict.common.suspended}\n </Badge>\n )}\n </div>\n <div className=\"truncate text-xs text-muted-foreground\">{member.email}</div>\n </div>\n <div className=\"flex shrink-0 items-center gap-1.5\">\n {member.roles.map((r) => (\n <Badge key={r.id} variant=\"muted\">\n {r.name}\n </Badge>\n ))}\n </div>\n {canManage && (\n <div className=\"flex shrink-0 items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleToggleSuspend}\n disabled={suspend.isPending || reinstate.isPending}\n title={isSuspended ? t.dict.members.reinstate : t.dict.members.suspend}\n >\n {isSuspended ? <Play className=\"h-4 w-4\" /> : <Pause className=\"h-4 w-4\" />}\n <span className=\"sr-only\">\n {isSuspended ? t.dict.members.reinstate : t.dict.members.suspend}\n </span>\n </Button>\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" title={t.dict.common.remove}>\n <Trash2 className=\"h-4 w-4\" />\n <span className=\"sr-only\">{t.dict.common.remove}</span>\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogTitle>\n {t.format(t.dict.members.removeTitle, { name: member.name })}\n </AlertDialogTitle>\n <AlertDialogDescription>{t.dict.members.removeDescription}</AlertDialogDescription>\n <div className=\"mt-2 flex justify-end gap-2\">\n <AlertDialogCancel asChild>\n <Button variant=\"outline\">{t.dict.common.cancel}</Button>\n </AlertDialogCancel>\n <AlertDialogAction asChild>\n <Button variant=\"destructive\" onClick={handleRemove}>\n {t.dict.members.removeConfirm}\n </Button>\n </AlertDialogAction>\n </div>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n )}\n </div>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { Check, Copy, Loader2 } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"../../ui/button\";\nimport { Input } from \"../../ui/input\";\nimport { Label } from \"../../ui/label\";\nimport { Skeleton } from \"../../ui/skeleton\";\nimport { useBusinessUnit, useCan, useUpdateBusinessUnit } from \"../../api/hooks\";\nimport { useT } from \"../../i18n/context\";\n\ninterface Props {\n buId: string;\n}\n\nexport function BusinessUnitSettings({ buId }: Props) {\n const { data, isPending } = useBusinessUnit(buId);\n const update = useUpdateBusinessUnit(buId);\n const t = useT();\n const can = useCan(buId);\n const canManage = can(\"manage:BUSettings\");\n\n const [name, setName] = useState(\"\");\n const [memberLimit, setMemberLimit] = useState<string>(\"\");\n const [copied, setCopied] = useState(false);\n\n useEffect(() => {\n if (!data) return;\n setName(data.name);\n setMemberLimit(data.memberLimit?.toString() ?? \"\");\n }, [data]);\n\n if (isPending) {\n return (\n <div className=\"space-y-4\">\n <Skeleton className=\"h-9 w-full max-w-sm\" />\n <Skeleton className=\"h-9 w-full max-w-sm\" />\n <Skeleton className=\"h-9 w-32\" />\n </div>\n );\n }\n if (!data) return null;\n\n const dirty =\n name !== data.name ||\n memberLimit !== (data.memberLimit?.toString() ?? \"\");\n\n const handleSave = async () => {\n // Validate `memberLimit` before round-tripping to the API. An\n // empty string clears the cap; anything else must be a positive\n // integer. Reject NaN, decimals, and zero / negative — these\n // would otherwise be silently coerced to bogus values by Number().\n let memberLimitPayload: number | null;\n if (memberLimit === \"\") {\n memberLimitPayload = null;\n } else {\n const parsed = Number(memberLimit);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n toast.error(t.dict.businessUnits.memberLimitInvalid);\n return;\n }\n memberLimitPayload = parsed;\n }\n try {\n await update.mutateAsync({\n name: name.trim(),\n memberLimit: memberLimitPayload,\n });\n toast.success(t.dict.common.saveChanges);\n } catch {\n toast.error(t.dict.common.saveChanges);\n }\n };\n\n const handleCopyJoinCode = async () => {\n if (!data.joinCode) return;\n await navigator.clipboard.writeText(data.joinCode);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n };\n\n return (\n <div className=\"space-y-6\">\n <section className=\"space-y-4\">\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"settings-name\">{t.dict.businessUnits.settingsName}</Label>\n <Input\n id=\"settings-name\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n className=\"max-w-sm\"\n disabled={!canManage || update.isPending}\n />\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"settings-slug\">{t.dict.businessUnits.settingsIdentifier}</Label>\n <Input\n id=\"settings-slug\"\n value={data.slug}\n readOnly\n className=\"max-w-sm font-mono text-xs\"\n />\n <p className=\"text-xs text-muted-foreground\">\n {t.dict.businessUnits.settingsIdentifierHelp}\n </p>\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"settings-limit\">{t.dict.businessUnits.settingsMemberLimit}</Label>\n <Input\n id=\"settings-limit\"\n type=\"number\"\n min={1}\n value={memberLimit}\n onChange={(e) => setMemberLimit(e.target.value)}\n className=\"max-w-sm\"\n disabled={!canManage || update.isPending}\n />\n <p className=\"text-xs text-muted-foreground\">\n {t.dict.businessUnits.settingsMemberLimitHelp}\n </p>\n </div>\n </section>\n\n {data.joinCode && (\n <section className=\"space-y-2\">\n <Label>{t.dict.businessUnits.settingsJoinCode}</Label>\n <div className=\"flex max-w-sm items-center gap-2 rounded-md border border-border bg-muted/50 px-3 py-2\">\n <code className=\"flex-1 font-mono text-sm\">{data.joinCode}</code>\n <Button variant=\"ghost\" size=\"icon\" onClick={handleCopyJoinCode}>\n {copied ? (\n <Check className=\"h-4 w-4 text-emerald-600\" />\n ) : (\n <Copy className=\"h-4 w-4\" />\n )}\n <span className=\"sr-only\">{t.dict.businessUnits.settingsJoinCode}</span>\n </Button>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {t.dict.businessUnits.settingsJoinCodeHelp}\n </p>\n </section>\n )}\n\n {canManage && (\n <div className=\"flex justify-end gap-2 pt-2 border-t border-border\">\n <Button\n variant=\"ghost\"\n onClick={() => {\n setName(data.name);\n setMemberLimit(data.memberLimit?.toString() ?? \"\");\n }}\n disabled={!dirty || update.isPending}\n >\n {t.dict.common.discard}\n </Button>\n <Button onClick={handleSave} disabled={!dirty || update.isPending}>\n {update.isPending && <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />}\n {t.dict.common.saveChanges}\n </Button>\n </div>\n )}\n </div>\n );\n}\n","// packages/core/number/src/number.ts\nfunction clamp(value, [min, max]) {\n return Math.min(max, Math.max(min, value));\n}\nexport {\n clamp\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n const firstChar = placement[0];\n return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n const side = getSide(placement);\n return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n ...platform,\n detectOverflow\n };\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let resetCount = 0;\n const middlewareData = {};\n for (let i = 0; i < middleware.length; i++) {\n const currentMiddleware = middleware[i];\n if (!currentMiddleware) {\n continue;\n }\n const {\n name,\n fn\n } = currentMiddleware;\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform: platformWithDetectOverflow,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData[name] = {\n ...middlewareData[name],\n ...data\n };\n if (reset && resetCount < MAX_RESET_COUNT) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects,\n platform\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n platform\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n try {\n if (element.matches(':popover-open')) {\n return true;\n }\n } catch (_e) {\n // no-op\n }\n try {\n return element.matches(':modal');\n } catch (_e) {\n return false;\n }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (isWebKitValue == null) {\n isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n }\n return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n } else {\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n }\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n let top = firstRect.top;\n let right = firstRect.right;\n let bottom = firstRect.bottom;\n let left = firstRect.left;\n for (let i = 1; i < clippingAncestors.length; i++) {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n top = max(rect.top, top);\n right = min(rect.right, right);\n bottom = min(rect.bottom, bottom);\n left = max(rect.left, left);\n }\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n if (floating) {\n resizeObserver.observe(floating);\n }\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { computePosition, arrow as arrow$2, autoPlacement as autoPlacement$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar isClient = typeof document !== 'undefined';\n\nvar noop = function noop() {};\nvar index = isClient ? useLayoutEffect : noop;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (typeof a === 'function' && a.toString() === b.toString()) {\n return true;\n }\n let length;\n let i;\n let keys;\n if (a && b && typeof a === 'object') {\n if (Array.isArray(a)) {\n length = a.length;\n if (length !== b.length) return false;\n for (i = length; i-- !== 0;) {\n if (!deepEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) {\n return false;\n }\n for (i = length; i-- !== 0;) {\n if (!{}.hasOwnProperty.call(b, keys[i])) {\n return false;\n }\n }\n for (i = length; i-- !== 0;) {\n const key = keys[i];\n if (key === '_owner' && a.$$typeof) {\n continue;\n }\n if (!deepEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n const ref = React.useRef(value);\n index(() => {\n ref.current = value;\n });\n return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform,\n elements: {\n reference: externalReference,\n floating: externalFloating\n } = {},\n transform = true,\n whileElementsMounted,\n open\n } = options;\n const [data, setData] = React.useState({\n x: 0,\n y: 0,\n strategy,\n placement,\n middlewareData: {},\n isPositioned: false\n });\n const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n if (!deepEqual(latestMiddleware, middleware)) {\n setLatestMiddleware(middleware);\n }\n const [_reference, _setReference] = React.useState(null);\n const [_floating, _setFloating] = React.useState(null);\n const setReference = React.useCallback(node => {\n if (node !== referenceRef.current) {\n referenceRef.current = node;\n _setReference(node);\n }\n }, []);\n const setFloating = React.useCallback(node => {\n if (node !== floatingRef.current) {\n floatingRef.current = node;\n _setFloating(node);\n }\n }, []);\n const referenceEl = externalReference || _reference;\n const floatingEl = externalFloating || _floating;\n const referenceRef = React.useRef(null);\n const floatingRef = React.useRef(null);\n const dataRef = React.useRef(data);\n const hasWhileElementsMounted = whileElementsMounted != null;\n const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n const platformRef = useLatestRef(platform);\n const openRef = useLatestRef(open);\n const update = React.useCallback(() => {\n if (!referenceRef.current || !floatingRef.current) {\n return;\n }\n const config = {\n placement,\n strategy,\n middleware: latestMiddleware\n };\n if (platformRef.current) {\n config.platform = platformRef.current;\n }\n computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n const fullData = {\n ...data,\n // The floating element's position may be recomputed while it's closed\n // but still mounted (such as when transitioning out). To ensure\n // `isPositioned` will be `false` initially on the next open, avoid\n // setting it to `true` when `open === false` (must be specified).\n isPositioned: openRef.current !== false\n };\n if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n dataRef.current = fullData;\n ReactDOM.flushSync(() => {\n setData(fullData);\n });\n }\n });\n }, [latestMiddleware, placement, strategy, platformRef, openRef]);\n index(() => {\n if (open === false && dataRef.current.isPositioned) {\n dataRef.current.isPositioned = false;\n setData(data => ({\n ...data,\n isPositioned: false\n }));\n }\n }, [open]);\n const isMountedRef = React.useRef(false);\n index(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n index(() => {\n if (referenceEl) referenceRef.current = referenceEl;\n if (floatingEl) floatingRef.current = floatingEl;\n if (referenceEl && floatingEl) {\n if (whileElementsMountedRef.current) {\n return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n }\n update();\n }\n }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n const refs = React.useMemo(() => ({\n reference: referenceRef,\n floating: floatingRef,\n setReference,\n setFloating\n }), [setReference, setFloating]);\n const elements = React.useMemo(() => ({\n reference: referenceEl,\n floating: floatingEl\n }), [referenceEl, floatingEl]);\n const floatingStyles = React.useMemo(() => {\n const initialStyles = {\n position: strategy,\n left: 0,\n top: 0\n };\n if (!elements.floating) {\n return initialStyles;\n }\n const x = roundByDPR(elements.floating, data.x);\n const y = roundByDPR(elements.floating, data.y);\n if (transform) {\n return {\n ...initialStyles,\n transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n ...(getDPR(elements.floating) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy,\n left: x,\n top: y\n };\n }, [strategy, transform, elements.floating, data.x, data.y]);\n return React.useMemo(() => ({\n ...data,\n update,\n refs,\n elements,\n floatingStyles\n }), [data, update, refs, elements, floatingStyles]);\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow$1 = options => {\n function isRef(value) {\n return {}.hasOwnProperty.call(value, 'current');\n }\n return {\n name: 'arrow',\n options,\n fn(state) {\n const {\n element,\n padding\n } = typeof options === 'function' ? options(state) : options;\n if (element && isRef(element)) {\n if (element.current != null) {\n return arrow$2({\n element: element.current,\n padding\n }).fn(state);\n }\n return {};\n }\n if (element) {\n return arrow$2({\n element,\n padding\n }).fn(state);\n }\n return {};\n }\n };\n};\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = (options, deps) => {\n const result = offset$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = (options, deps) => {\n const result = shift$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => {\n const result = limitShift$1(options);\n return {\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = (options, deps) => {\n const result = flip$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = (options, deps) => {\n const result = size$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = (options, deps) => {\n const result = autoPlacement$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = (options, deps) => {\n const result = hide$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = (options, deps) => {\n const result = inline$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = (options, deps) => {\n const result = arrow$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","// src/arrow.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Arrow\";\nvar Arrow = React.forwardRef((props, forwardedRef) => {\n const { children, width = 10, height = 5, ...arrowProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.svg,\n {\n ...arrowProps,\n ref: forwardedRef,\n width,\n height,\n viewBox: \"0 0 30 10\",\n preserveAspectRatio: \"none\",\n children: props.asChild ? children : /* @__PURE__ */ jsx(\"polygon\", { points: \"0,0 30,0 15,10\" })\n }\n );\n});\nArrow.displayName = NAME;\nvar Root = Arrow;\nexport {\n Arrow,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-size/src/use-size.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nfunction useSize(element) {\n const [size, setSize] = React.useState(void 0);\n useLayoutEffect(() => {\n if (element) {\n setSize({ width: element.offsetWidth, height: element.offsetHeight });\n const resizeObserver = new ResizeObserver((entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n if (!entries.length) {\n return;\n }\n const entry = entries[0];\n let width;\n let height;\n if (\"borderBoxSize\" in entry) {\n const borderSizeEntry = entry[\"borderBoxSize\"];\n const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n width = borderSize[\"inlineSize\"];\n height = borderSize[\"blockSize\"];\n } else {\n width = element.offsetWidth;\n height = element.offsetHeight;\n }\n setSize({ width, height });\n });\n resizeObserver.observe(element, { box: \"border-box\" });\n return () => resizeObserver.unobserve(element);\n } else {\n setSize(void 0);\n }\n }, [element]);\n return size;\n}\nexport {\n useSize\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popper.tsx\nimport * as React from \"react\";\nimport {\n useFloating,\n autoUpdate,\n offset,\n shift,\n limitShift,\n hide,\n arrow as floatingUIarrow,\n flip,\n size\n} from \"@floating-ui/react-dom\";\nimport * as ArrowPrimitive from \"@radix-ui/react-arrow\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"];\nvar ALIGN_OPTIONS = [\"start\", \"center\", \"end\"];\nvar POPPER_NAME = \"Popper\";\nvar [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\nvar [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);\nvar Popper = (props) => {\n const { __scopePopper, children } = props;\n const [anchor, setAnchor] = React.useState(null);\n return /* @__PURE__ */ jsx(PopperProvider, { scope: __scopePopper, anchor, onAnchorChange: setAnchor, children });\n};\nPopper.displayName = POPPER_NAME;\nvar ANCHOR_NAME = \"PopperAnchor\";\nvar PopperAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopper, virtualRef, ...anchorProps } = props;\n const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const anchorRef = React.useRef(null);\n React.useEffect(() => {\n const previousAnchor = anchorRef.current;\n anchorRef.current = virtualRef?.current || ref.current;\n if (previousAnchor !== anchorRef.current) {\n context.onAnchorChange(anchorRef.current);\n }\n });\n return virtualRef ? null : /* @__PURE__ */ jsx(Primitive.div, { ...anchorProps, ref: composedRefs });\n }\n);\nPopperAnchor.displayName = ANCHOR_NAME;\nvar CONTENT_NAME = \"PopperContent\";\nvar [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);\nvar PopperContent = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopper,\n side = \"bottom\",\n sideOffset = 0,\n align = \"center\",\n alignOffset = 0,\n arrowPadding = 0,\n avoidCollisions = true,\n collisionBoundary = [],\n collisionPadding: collisionPaddingProp = 0,\n sticky = \"partial\",\n hideWhenDetached = false,\n updatePositionStrategy = \"optimized\",\n onPlaced,\n ...contentProps\n } = props;\n const context = usePopperContext(CONTENT_NAME, __scopePopper);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [arrow, setArrow] = React.useState(null);\n const arrowSize = useSize(arrow);\n const arrowWidth = arrowSize?.width ?? 0;\n const arrowHeight = arrowSize?.height ?? 0;\n const desiredPlacement = side + (align !== \"center\" ? \"-\" + align : \"\");\n const collisionPadding = typeof collisionPaddingProp === \"number\" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n const hasExplicitBoundaries = boundary.length > 0;\n const detectOverflowOptions = {\n padding: collisionPadding,\n boundary: boundary.filter(isNotNull),\n // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n altBoundary: hasExplicitBoundaries\n };\n const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n strategy: \"fixed\",\n placement: desiredPlacement,\n whileElementsMounted: (...args) => {\n const cleanup = autoUpdate(...args, {\n animationFrame: updatePositionStrategy === \"always\"\n });\n return cleanup;\n },\n elements: {\n reference: context.anchor\n },\n middleware: [\n offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n avoidCollisions && shift({\n mainAxis: true,\n crossAxis: false,\n limiter: sticky === \"partial\" ? limitShift() : void 0,\n ...detectOverflowOptions\n }),\n avoidCollisions && flip({ ...detectOverflowOptions }),\n size({\n ...detectOverflowOptions,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const { width: anchorWidth, height: anchorHeight } = rects.reference;\n const contentStyle = elements.floating.style;\n contentStyle.setProperty(\"--radix-popper-available-width\", `${availableWidth}px`);\n contentStyle.setProperty(\"--radix-popper-available-height\", `${availableHeight}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-width\", `${anchorWidth}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-height\", `${anchorHeight}px`);\n }\n }),\n arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n transformOrigin({ arrowWidth, arrowHeight }),\n hideWhenDetached && hide({ strategy: \"referenceHidden\", ...detectOverflowOptions })\n ]\n });\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const handlePlaced = useCallbackRef(onPlaced);\n useLayoutEffect(() => {\n if (isPositioned) {\n handlePlaced?.();\n }\n }, [isPositioned, handlePlaced]);\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n return /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: refs.setFloating,\n \"data-radix-popper-content-wrapper\": \"\",\n style: {\n ...floatingStyles,\n transform: isPositioned ? floatingStyles.transform : \"translate(0, -200%)\",\n // keep off the page when measuring\n minWidth: \"max-content\",\n zIndex: contentZIndex,\n [\"--radix-popper-transform-origin\"]: [\n middlewareData.transformOrigin?.x,\n middlewareData.transformOrigin?.y\n ].join(\" \"),\n // hide the content if using the hide middleware and should be hidden\n // set visibility to hidden and disable pointer events so the UI behaves\n // as if the PopperContent isn't there at all\n ...middlewareData.hide?.referenceHidden && {\n visibility: \"hidden\",\n pointerEvents: \"none\"\n }\n },\n dir: props.dir,\n children: /* @__PURE__ */ jsx(\n PopperContentProvider,\n {\n scope: __scopePopper,\n placedSide,\n onArrowChange: setArrow,\n arrowX,\n arrowY,\n shouldHideArrow: cannotCenterArrow,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-side\": placedSide,\n \"data-align\": placedAlign,\n ...contentProps,\n ref: composedRefs,\n style: {\n ...contentProps.style,\n // if the PopperContent hasn't been placed yet (not all measurements done)\n // we prevent animations so that users's animation don't kick in too early referring wrong sides\n animation: !isPositioned ? \"none\" : void 0\n }\n }\n )\n }\n )\n }\n );\n }\n);\nPopperContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"PopperArrow\";\nvar OPPOSITE_SIDE = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\"\n};\nvar PopperArrow = React.forwardRef(function PopperArrow2(props, forwardedRef) {\n const { __scopePopper, ...arrowProps } = props;\n const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n return (\n // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n // doesn't report size as we'd expect on SVG elements.\n // it reports their bounding box which is effectively the largest path inside the SVG.\n /* @__PURE__ */ jsx(\n \"span\",\n {\n ref: contentContext.onArrowChange,\n style: {\n position: \"absolute\",\n left: contentContext.arrowX,\n top: contentContext.arrowY,\n [baseSide]: 0,\n transformOrigin: {\n top: \"\",\n right: \"0 0\",\n bottom: \"center 0\",\n left: \"100% 0\"\n }[contentContext.placedSide],\n transform: {\n top: \"translateY(100%)\",\n right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n bottom: `rotate(180deg)`,\n left: \"translateY(50%) rotate(-90deg) translateX(50%)\"\n }[contentContext.placedSide],\n visibility: contentContext.shouldHideArrow ? \"hidden\" : void 0\n },\n children: /* @__PURE__ */ jsx(\n ArrowPrimitive.Root,\n {\n ...arrowProps,\n ref: forwardedRef,\n style: {\n ...arrowProps.style,\n // ensures the element can be measured correctly (mostly for if SVG)\n display: \"block\"\n }\n }\n )\n }\n )\n );\n});\nPopperArrow.displayName = ARROW_NAME;\nfunction isNotNull(value) {\n return value !== null;\n}\nvar transformOrigin = (options) => ({\n name: \"transformOrigin\",\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isArrowHidden = cannotCenterArrow;\n const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: \"0%\", center: \"50%\", end: \"100%\" }[placedAlign];\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n let x = \"\";\n let y = \"\";\n if (placedSide === \"bottom\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${-arrowHeight}px`;\n } else if (placedSide === \"top\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${rects.floating.height + arrowHeight}px`;\n } else if (placedSide === \"right\") {\n x = `${-arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n } else if (placedSide === \"left\") {\n x = `${rects.floating.width + arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n }\n return { data: { x, y } };\n }\n});\nfunction getSideAndAlignFromPlacement(placement) {\n const [side, align = \"center\"] = placement.split(\"-\");\n return [side, align];\n}\nvar Root2 = Popper;\nvar Anchor = PopperAnchor;\nvar Content = PopperContent;\nvar Arrow = PopperArrow;\nexport {\n ALIGN_OPTIONS,\n Anchor,\n Arrow,\n Content,\n Popper,\n PopperAnchor,\n PopperArrow,\n PopperContent,\n Root2 as Root,\n SIDE_OPTIONS,\n createPopperScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-previous/src/use-previous.tsx\nimport * as React from \"react\";\nfunction usePrevious(value) {\n const ref = React.useRef({ value, previous: value });\n return React.useMemo(() => {\n if (ref.current.value !== value) {\n ref.current.previous = ref.current.value;\n ref.current.value = value;\n }\n return ref.current.previous;\n }, [value]);\n}\nexport {\n usePrevious\n};\n//# sourceMappingURL=index.mjs.map\n","// src/visually-hidden.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar VISUALLY_HIDDEN_STYLES = Object.freeze({\n // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss\n position: \"absolute\",\n border: 0,\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\"\n});\nvar NAME = \"VisuallyHidden\";\nvar VisuallyHidden = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...props,\n ref: forwardedRef,\n style: { ...VISUALLY_HIDDEN_STYLES, ...props.style }\n }\n );\n }\n);\nVisuallyHidden.displayName = NAME;\nvar Root = VisuallyHidden;\nexport {\n Root,\n VISUALLY_HIDDEN_STYLES,\n VisuallyHidden\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/select.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { VISUALLY_HIDDEN_STYLES } from \"@radix-ui/react-visually-hidden\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar OPEN_KEYS = [\" \", \"Enter\", \"ArrowUp\", \"ArrowDown\"];\nvar SELECTION_KEYS = [\" \", \"Enter\"];\nvar SELECT_NAME = \"Select\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SELECT_NAME);\nvar [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [\n createCollectionScope,\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [SelectProvider, useSelectContext] = createSelectContext(SELECT_NAME);\nvar [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME);\nvar Select = (props) => {\n const {\n __scopeSelect,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n value: valueProp,\n defaultValue,\n onValueChange,\n dir,\n name,\n autoComplete,\n disabled,\n required,\n form\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const [trigger, setTrigger] = React.useState(null);\n const [valueNode, setValueNode] = React.useState(null);\n const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);\n const direction = useDirection(dir);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: SELECT_NAME\n });\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue,\n onChange: onValueChange,\n caller: SELECT_NAME\n });\n const triggerPointerDownPosRef = React.useRef(null);\n const isFormControl = trigger ? form || !!trigger.closest(\"form\") : true;\n const [nativeOptionsSet, setNativeOptionsSet] = React.useState(/* @__PURE__ */ new Set());\n const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(\";\");\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsxs(\n SelectProvider,\n {\n required,\n scope: __scopeSelect,\n trigger,\n onTriggerChange: setTrigger,\n valueNode,\n onValueNodeChange: setValueNode,\n valueNodeHasChildren,\n onValueNodeHasChildrenChange: setValueNodeHasChildren,\n contentId: useId(),\n value,\n onValueChange: setValue,\n open,\n onOpenChange: setOpen,\n dir: direction,\n triggerPointerDownPosRef,\n disabled,\n children: [\n /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n SelectNativeOptionsProvider,\n {\n scope: props.__scopeSelect,\n onNativeOptionAdd: React.useCallback((option) => {\n setNativeOptionsSet((prev) => new Set(prev).add(option));\n }, []),\n onNativeOptionRemove: React.useCallback((option) => {\n setNativeOptionsSet((prev) => {\n const optionsSet = new Set(prev);\n optionsSet.delete(option);\n return optionsSet;\n });\n }, []),\n children\n }\n ) }),\n isFormControl ? /* @__PURE__ */ jsxs(\n SelectBubbleInput,\n {\n \"aria-hidden\": true,\n required,\n tabIndex: -1,\n name,\n autoComplete,\n value,\n onChange: (event) => setValue(event.target.value),\n disabled,\n form,\n children: [\n value === void 0 ? /* @__PURE__ */ jsx(\"option\", { value: \"\" }) : null,\n Array.from(nativeOptionsSet)\n ]\n },\n nativeSelectKey\n ) : null\n ]\n }\n ) });\n};\nSelect.displayName = SELECT_NAME;\nvar TRIGGER_NAME = \"SelectTrigger\";\nvar SelectTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, disabled = false, ...triggerProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(TRIGGER_NAME, __scopeSelect);\n const isDisabled = context.disabled || disabled;\n const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);\n const getItems = useCollection(__scopeSelect);\n const pointerTypeRef = React.useRef(\"touch\");\n const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.value === context.value);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem !== void 0) {\n context.onValueChange(nextItem.value);\n }\n });\n const handleOpen = (pointerEvent) => {\n if (!isDisabled) {\n context.onOpenChange(true);\n resetTypeahead();\n }\n if (pointerEvent) {\n context.triggerPointerDownPosRef.current = {\n x: Math.round(pointerEvent.pageX),\n y: Math.round(pointerEvent.pageY)\n };\n }\n };\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"combobox\",\n \"aria-controls\": context.contentId,\n \"aria-expanded\": context.open,\n \"aria-required\": context.required,\n \"aria-autocomplete\": \"none\",\n dir: context.dir,\n \"data-state\": context.open ? \"open\" : \"closed\",\n disabled: isDisabled,\n \"data-disabled\": isDisabled ? \"\" : void 0,\n \"data-placeholder\": shouldShowPlaceholder(context.value) ? \"\" : void 0,\n ...triggerProps,\n ref: composedRefs,\n onClick: composeEventHandlers(triggerProps.onClick, (event) => {\n event.currentTarget.focus();\n if (pointerTypeRef.current !== \"mouse\") {\n handleOpen(event);\n }\n }),\n onPointerDown: composeEventHandlers(triggerProps.onPointerDown, (event) => {\n pointerTypeRef.current = event.pointerType;\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n if (event.button === 0 && event.ctrlKey === false && event.pointerType === \"mouse\") {\n handleOpen(event);\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(triggerProps.onKeyDown, (event) => {\n const isTypingAhead = searchRef.current !== \"\";\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if (isTypingAhead && event.key === \" \") return;\n if (OPEN_KEYS.includes(event.key)) {\n handleOpen();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nSelectTrigger.displayName = TRIGGER_NAME;\nvar VALUE_NAME = \"SelectValue\";\nvar SelectValue = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, className, style, children, placeholder = \"\", ...valueProps } = props;\n const context = useSelectContext(VALUE_NAME, __scopeSelect);\n const { onValueNodeHasChildrenChange } = context;\n const hasChildren = children !== void 0;\n const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);\n useLayoutEffect(() => {\n onValueNodeHasChildrenChange(hasChildren);\n }, [onValueNodeHasChildrenChange, hasChildren]);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...valueProps,\n ref: composedRefs,\n style: { pointerEvents: \"none\" },\n children: shouldShowPlaceholder(context.value) ? /* @__PURE__ */ jsx(Fragment, { children: placeholder }) : children\n }\n );\n }\n);\nSelectValue.displayName = VALUE_NAME;\nvar ICON_NAME = \"SelectIcon\";\nvar SelectIcon = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, children, ...iconProps } = props;\n return /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...iconProps, ref: forwardedRef, children: children || \"\\u25BC\" });\n }\n);\nSelectIcon.displayName = ICON_NAME;\nvar PORTAL_NAME = \"SelectPortal\";\nvar SelectPortal = (props) => {\n return /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, ...props });\n};\nSelectPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"SelectContent\";\nvar SelectContent = React.forwardRef(\n (props, forwardedRef) => {\n const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);\n const [fragment, setFragment] = React.useState();\n useLayoutEffect(() => {\n setFragment(new DocumentFragment());\n }, []);\n if (!context.open) {\n const frag = fragment;\n return frag ? ReactDOM.createPortal(\n /* @__PURE__ */ jsx(SelectContentProvider, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx(\"div\", { children: props.children }) }) }),\n frag\n ) : null;\n }\n return /* @__PURE__ */ jsx(SelectContentImpl, { ...props, ref: forwardedRef });\n }\n);\nSelectContent.displayName = CONTENT_NAME;\nvar CONTENT_MARGIN = 10;\nvar [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME);\nvar CONTENT_IMPL_NAME = \"SelectContentImpl\";\nvar Slot = createSlot(\"SelectContent.RemoveScroll\");\nvar SelectContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSelect,\n position = \"item-aligned\",\n onCloseAutoFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n //\n // PopperContent props\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n //\n ...contentProps\n } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const [content, setContent] = React.useState(null);\n const [viewport, setViewport] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [selectedItem, setSelectedItem] = React.useState(null);\n const [selectedItemText, setSelectedItemText] = React.useState(\n null\n );\n const getItems = useCollection(__scopeSelect);\n const [isPositioned, setIsPositioned] = React.useState(false);\n const firstValidItemFoundRef = React.useRef(false);\n React.useEffect(() => {\n if (content) return hideOthers(content);\n }, [content]);\n useFocusGuards();\n const focusFirst = React.useCallback(\n (candidates) => {\n const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);\n const [lastItem] = restItems.slice(-1);\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate?.scrollIntoView({ block: \"nearest\" });\n if (candidate === firstItem && viewport) viewport.scrollTop = 0;\n if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;\n candidate?.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n },\n [getItems, viewport]\n );\n const focusSelectedItem = React.useCallback(\n () => focusFirst([selectedItem, content]),\n [focusFirst, selectedItem, content]\n );\n React.useEffect(() => {\n if (isPositioned) {\n focusSelectedItem();\n }\n }, [isPositioned, focusSelectedItem]);\n const { onOpenChange, triggerPointerDownPosRef } = context;\n React.useEffect(() => {\n if (content) {\n let pointerMoveDelta = { x: 0, y: 0 };\n const handlePointerMove = (event) => {\n pointerMoveDelta = {\n x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),\n y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0))\n };\n };\n const handlePointerUp = (event) => {\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault();\n } else {\n if (!content.contains(event.target)) {\n onOpenChange(false);\n }\n }\n document.removeEventListener(\"pointermove\", handlePointerMove);\n triggerPointerDownPosRef.current = null;\n };\n if (triggerPointerDownPosRef.current !== null) {\n document.addEventListener(\"pointermove\", handlePointerMove);\n document.addEventListener(\"pointerup\", handlePointerUp, { capture: true, once: true });\n }\n return () => {\n document.removeEventListener(\"pointermove\", handlePointerMove);\n document.removeEventListener(\"pointerup\", handlePointerUp, { capture: true });\n };\n }\n }, [content, onOpenChange, triggerPointerDownPosRef]);\n React.useEffect(() => {\n const close = () => onOpenChange(false);\n window.addEventListener(\"blur\", close);\n window.addEventListener(\"resize\", close);\n return () => {\n window.removeEventListener(\"blur\", close);\n window.removeEventListener(\"resize\", close);\n };\n }, [onOpenChange]);\n const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem) {\n setTimeout(() => nextItem.ref.current.focus());\n }\n });\n const itemRefCallback = React.useCallback(\n (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== void 0 && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItem(node);\n if (isFirstValidItem) firstValidItemFoundRef.current = true;\n }\n },\n [context.value]\n );\n const handleItemLeave = React.useCallback(() => content?.focus(), [content]);\n const itemTextRefCallback = React.useCallback(\n (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== void 0 && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItemText(node);\n }\n },\n [context.value]\n );\n const SelectPosition = position === \"popper\" ? SelectPopperPosition : SelectItemAlignedPosition;\n const popperContentProps = SelectPosition === SelectPopperPosition ? {\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions\n } : {};\n return /* @__PURE__ */ jsx(\n SelectContentProvider,\n {\n scope: __scopeSelect,\n content,\n viewport,\n onViewportChange: setViewport,\n itemRefCallback,\n selectedItem,\n onItemLeave: handleItemLeave,\n itemTextRefCallback,\n focusSelectedItem,\n selectedItemText,\n position,\n isPositioned,\n searchRef,\n children: /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: context.open,\n onMountAutoFocus: (event) => {\n event.preventDefault();\n },\n onUnmountAutoFocus: composeEventHandlers(onCloseAutoFocus, (event) => {\n context.trigger?.focus({ preventScroll: true });\n event.preventDefault();\n }),\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: true,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: () => context.onOpenChange(false),\n children: /* @__PURE__ */ jsx(\n SelectPosition,\n {\n role: \"listbox\",\n id: context.contentId,\n \"data-state\": context.open ? \"open\" : \"closed\",\n dir: context.dir,\n onContextMenu: (event) => event.preventDefault(),\n ...contentProps,\n ...popperContentProps,\n onPlaced: () => setIsPositioned(true),\n ref: composedRefs,\n style: {\n // flex layout so we can place the scroll buttons properly\n display: \"flex\",\n flexDirection: \"column\",\n // reset the outline by default as the content MAY get focused\n outline: \"none\",\n ...contentProps.style\n },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if ([\"ArrowUp\", \"ArrowDown\", \"Home\", \"End\"].includes(event.key)) {\n const items = getItems().filter((item) => !item.disabled);\n let candidateNodes = items.map((item) => item.ref.current);\n if ([\"ArrowUp\", \"End\"].includes(event.key)) {\n candidateNodes = candidateNodes.slice().reverse();\n }\n if ([\"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n const currentElement = event.target;\n const currentIndex = candidateNodes.indexOf(currentElement);\n candidateNodes = candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n event.preventDefault();\n }\n })\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nSelectContentImpl.displayName = CONTENT_IMPL_NAME;\nvar ITEM_ALIGNED_POSITION_NAME = \"SelectItemAlignedPosition\";\nvar SelectItemAlignedPosition = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, onPlaced, ...popperProps } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);\n const [contentWrapper, setContentWrapper] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const getItems = useCollection(__scopeSelect);\n const shouldExpandOnScrollRef = React.useRef(false);\n const shouldRepositionRef = React.useRef(true);\n const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;\n const position = React.useCallback(() => {\n if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) {\n const triggerRect = context.trigger.getBoundingClientRect();\n const contentRect = content.getBoundingClientRect();\n const valueNodeRect = context.valueNode.getBoundingClientRect();\n const itemTextRect = selectedItemText.getBoundingClientRect();\n if (context.dir !== \"rtl\") {\n const itemTextOffset = itemTextRect.left - contentRect.left;\n const left = valueNodeRect.left - itemTextOffset;\n const leftDelta = triggerRect.left - left;\n const minContentWidth = triggerRect.width + leftDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const rightEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedLeft = clamp(left, [\n CONTENT_MARGIN,\n // Prevents the content from going off the starting edge of the\n // viewport. It may still go off the ending edge, but this can be\n // controlled by the user since they may want to manage overflow in a\n // specific way.\n // https://github.com/radix-ui/primitives/issues/2049\n Math.max(CONTENT_MARGIN, rightEdge - contentWidth)\n ]);\n contentWrapper.style.minWidth = minContentWidth + \"px\";\n contentWrapper.style.left = clampedLeft + \"px\";\n } else {\n const itemTextOffset = contentRect.right - itemTextRect.right;\n const right = window.innerWidth - valueNodeRect.right - itemTextOffset;\n const rightDelta = window.innerWidth - triggerRect.right - right;\n const minContentWidth = triggerRect.width + rightDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const leftEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedRight = clamp(right, [\n CONTENT_MARGIN,\n Math.max(CONTENT_MARGIN, leftEdge - contentWidth)\n ]);\n contentWrapper.style.minWidth = minContentWidth + \"px\";\n contentWrapper.style.right = clampedRight + \"px\";\n }\n const items = getItems();\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const itemsHeight = viewport.scrollHeight;\n const contentStyles = window.getComputedStyle(content);\n const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);\n const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);\n const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);\n const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);\n const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth;\n const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);\n const viewportStyles = window.getComputedStyle(viewport);\n const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);\n const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);\n const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;\n const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;\n const selectedItemHalfHeight = selectedItem.offsetHeight / 2;\n const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;\n const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;\n const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;\n const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;\n if (willAlignWithoutTopOverflow) {\n const isLastItem = items.length > 0 && selectedItem === items[items.length - 1].ref.current;\n contentWrapper.style.bottom = \"0px\";\n const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight;\n const clampedTriggerMiddleToBottomEdge = Math.max(\n triggerMiddleToBottomEdge,\n selectedItemHalfHeight + // viewport might have padding bottom, include it to avoid a scrollable viewport\n (isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth\n );\n const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;\n contentWrapper.style.height = height + \"px\";\n } else {\n const isFirstItem = items.length > 0 && selectedItem === items[0].ref.current;\n contentWrapper.style.top = \"0px\";\n const clampedTopEdgeToTriggerMiddle = Math.max(\n topEdgeToTriggerMiddle,\n contentBorderTopWidth + viewport.offsetTop + // viewport might have padding top, include it to avoid a scrollable viewport\n (isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight\n );\n const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;\n contentWrapper.style.height = height + \"px\";\n viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;\n }\n contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;\n contentWrapper.style.minHeight = minContentHeight + \"px\";\n contentWrapper.style.maxHeight = availableHeight + \"px\";\n onPlaced?.();\n requestAnimationFrame(() => shouldExpandOnScrollRef.current = true);\n }\n }, [\n getItems,\n context.trigger,\n context.valueNode,\n contentWrapper,\n content,\n viewport,\n selectedItem,\n selectedItemText,\n context.dir,\n onPlaced\n ]);\n useLayoutEffect(() => position(), [position]);\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n const handleScrollButtonChange = React.useCallback(\n (node) => {\n if (node && shouldRepositionRef.current === true) {\n position();\n focusSelectedItem?.();\n shouldRepositionRef.current = false;\n }\n },\n [position, focusSelectedItem]\n );\n return /* @__PURE__ */ jsx(\n SelectViewportProvider,\n {\n scope: __scopeSelect,\n contentWrapper,\n shouldExpandOnScrollRef,\n onScrollButtonChange: handleScrollButtonChange,\n children: /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: setContentWrapper,\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n position: \"fixed\",\n zIndex: contentZIndex\n },\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...popperProps,\n ref: composedRefs,\n style: {\n // When we get the height of the content, it includes borders. If we were to set\n // the height without having `boxSizing: 'border-box'` it would be too big.\n boxSizing: \"border-box\",\n // We need to ensure the content doesn't get taller than the wrapper\n maxHeight: \"100%\",\n ...popperProps.style\n }\n }\n )\n }\n )\n }\n );\n});\nSelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;\nvar POPPER_POSITION_NAME = \"SelectPopperPosition\";\nvar SelectPopperPosition = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeSelect,\n align = \"start\",\n collisionPadding = CONTENT_MARGIN,\n ...popperProps\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n return /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n ...popperScope,\n ...popperProps,\n ref: forwardedRef,\n align,\n collisionPadding,\n style: {\n // Ensure border-box for floating-ui calculations\n boxSizing: \"border-box\",\n ...popperProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-select-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-select-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-select-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-select-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-select-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nSelectPopperPosition.displayName = POPPER_POSITION_NAME;\nvar [SelectViewportProvider, useSelectViewportContext] = createSelectContext(CONTENT_NAME, {});\nvar VIEWPORT_NAME = \"SelectViewport\";\nvar SelectViewport = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, nonce, ...viewportProps } = props;\n const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);\n const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);\n const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);\n const prevScrollTopRef = React.useRef(0);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`\n },\n nonce\n }\n ),\n /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-select-viewport\": \"\",\n role: \"presentation\",\n ...viewportProps,\n ref: composedRefs,\n style: {\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: \"relative\",\n flex: 1,\n // Viewport should only be scrollable in the vertical direction.\n // This won't work in vertical writing modes, so we'll need to\n // revisit this if/when that is supported\n // https://developer.chrome.com/blog/vertical-form-controls\n overflow: \"hidden auto\",\n ...viewportProps.style\n },\n onScroll: composeEventHandlers(viewportProps.onScroll, (event) => {\n const viewport = event.currentTarget;\n const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;\n if (shouldExpandOnScrollRef?.current && contentWrapper) {\n const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);\n if (scrolledBy > 0) {\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const cssMinHeight = parseFloat(contentWrapper.style.minHeight);\n const cssHeight = parseFloat(contentWrapper.style.height);\n const prevHeight = Math.max(cssMinHeight, cssHeight);\n if (prevHeight < availableHeight) {\n const nextHeight = prevHeight + scrolledBy;\n const clampedNextHeight = Math.min(availableHeight, nextHeight);\n const heightDiff = nextHeight - clampedNextHeight;\n contentWrapper.style.height = clampedNextHeight + \"px\";\n if (contentWrapper.style.bottom === \"0px\") {\n viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;\n contentWrapper.style.justifyContent = \"flex-end\";\n }\n }\n }\n }\n prevScrollTopRef.current = viewport.scrollTop;\n })\n }\n ) })\n ] });\n }\n);\nSelectViewport.displayName = VIEWPORT_NAME;\nvar GROUP_NAME = \"SelectGroup\";\nvar [SelectGroupContextProvider, useSelectGroupContext] = createSelectContext(GROUP_NAME);\nvar SelectGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...groupProps } = props;\n const groupId = useId();\n return /* @__PURE__ */ jsx(SelectGroupContextProvider, { scope: __scopeSelect, id: groupId, children: /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", \"aria-labelledby\": groupId, ...groupProps, ref: forwardedRef }) });\n }\n);\nSelectGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"SelectLabel\";\nvar SelectLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...labelProps } = props;\n const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);\n return /* @__PURE__ */ jsx(Primitive.div, { id: groupContext.id, ...labelProps, ref: forwardedRef });\n }\n);\nSelectLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"SelectItem\";\nvar [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME);\nvar SelectItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSelect,\n value,\n disabled = false,\n textValue: textValueProp,\n ...itemProps\n } = props;\n const context = useSelectContext(ITEM_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);\n const isSelected = context.value === value;\n const [textValue, setTextValue] = React.useState(textValueProp ?? \"\");\n const [isFocused, setIsFocused] = React.useState(false);\n const composedRefs = useComposedRefs(\n forwardedRef,\n (node) => contentContext.itemRefCallback?.(node, value, disabled)\n );\n const textId = useId();\n const pointerTypeRef = React.useRef(\"touch\");\n const handleSelect = () => {\n if (!disabled) {\n context.onValueChange(value);\n context.onOpenChange(false);\n }\n };\n if (value === \"\") {\n throw new Error(\n \"A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.\"\n );\n }\n return /* @__PURE__ */ jsx(\n SelectItemContextProvider,\n {\n scope: __scopeSelect,\n value,\n disabled,\n textId,\n isSelected,\n onItemTextChange: React.useCallback((node) => {\n setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? \"\").trim());\n }, []),\n children: /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeSelect,\n value,\n disabled,\n textValue,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"option\",\n \"aria-labelledby\": textId,\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-selected\": isSelected && isFocused,\n \"data-state\": isSelected ? \"checked\" : \"unchecked\",\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n tabIndex: disabled ? void 0 : -1,\n ...itemProps,\n ref: composedRefs,\n onFocus: composeEventHandlers(itemProps.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(itemProps.onBlur, () => setIsFocused(false)),\n onClick: composeEventHandlers(itemProps.onClick, () => {\n if (pointerTypeRef.current !== \"mouse\") handleSelect();\n }),\n onPointerUp: composeEventHandlers(itemProps.onPointerUp, () => {\n if (pointerTypeRef.current === \"mouse\") handleSelect();\n }),\n onPointerDown: composeEventHandlers(itemProps.onPointerDown, (event) => {\n pointerTypeRef.current = event.pointerType;\n }),\n onPointerMove: composeEventHandlers(itemProps.onPointerMove, (event) => {\n pointerTypeRef.current = event.pointerType;\n if (disabled) {\n contentContext.onItemLeave?.();\n } else if (pointerTypeRef.current === \"mouse\") {\n event.currentTarget.focus({ preventScroll: true });\n }\n }),\n onPointerLeave: composeEventHandlers(itemProps.onPointerLeave, (event) => {\n if (event.currentTarget === document.activeElement) {\n contentContext.onItemLeave?.();\n }\n }),\n onKeyDown: composeEventHandlers(itemProps.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef?.current !== \"\";\n if (isTypingAhead && event.key === \" \") return;\n if (SELECTION_KEYS.includes(event.key)) handleSelect();\n if (event.key === \" \") event.preventDefault();\n })\n }\n )\n }\n )\n }\n );\n }\n);\nSelectItem.displayName = ITEM_NAME;\nvar ITEM_TEXT_NAME = \"SelectItemText\";\nvar SelectItemText = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, className, style, ...itemTextProps } = props;\n const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);\n const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);\n const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);\n const [itemTextNode, setItemTextNode] = React.useState(null);\n const composedRefs = useComposedRefs(\n forwardedRef,\n (node) => setItemTextNode(node),\n itemContext.onItemTextChange,\n (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)\n );\n const textContent = itemTextNode?.textContent;\n const nativeOption = React.useMemo(\n () => /* @__PURE__ */ jsx(\"option\", { value: itemContext.value, disabled: itemContext.disabled, children: textContent }, itemContext.value),\n [itemContext.disabled, itemContext.value, textContent]\n );\n const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;\n useLayoutEffect(() => {\n onNativeOptionAdd(nativeOption);\n return () => onNativeOptionRemove(nativeOption);\n }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),\n itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? ReactDOM.createPortal(itemTextProps.children, context.valueNode) : null\n ] });\n }\n);\nSelectItemText.displayName = ITEM_TEXT_NAME;\nvar ITEM_INDICATOR_NAME = \"SelectItemIndicator\";\nvar SelectItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...itemIndicatorProps } = props;\n const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);\n return itemContext.isSelected ? /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...itemIndicatorProps, ref: forwardedRef }) : null;\n }\n);\nSelectItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SCROLL_UP_BUTTON_NAME = \"SelectScrollUpButton\";\nvar SelectScrollUpButton = React.forwardRef((props, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const [canScrollUp, setCanScrollUp] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n let handleScroll2 = function() {\n const canScrollUp2 = viewport.scrollTop > 0;\n setCanScrollUp(canScrollUp2);\n };\n var handleScroll = handleScroll2;\n const viewport = contentContext.viewport;\n handleScroll2();\n viewport.addEventListener(\"scroll\", handleScroll2);\n return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n return canScrollUp ? /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n ...props,\n ref: composedRefs,\n onAutoScroll: () => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;\n }\n }\n }\n ) : null;\n});\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\nvar SCROLL_DOWN_BUTTON_NAME = \"SelectScrollDownButton\";\nvar SelectScrollDownButton = React.forwardRef((props, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const [canScrollDown, setCanScrollDown] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n let handleScroll2 = function() {\n const maxScroll = viewport.scrollHeight - viewport.clientHeight;\n const canScrollDown2 = Math.ceil(viewport.scrollTop) < maxScroll;\n setCanScrollDown(canScrollDown2);\n };\n var handleScroll = handleScroll2;\n const viewport = contentContext.viewport;\n handleScroll2();\n viewport.addEventListener(\"scroll\", handleScroll2);\n return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n return canScrollDown ? /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n ...props,\n ref: composedRefs,\n onAutoScroll: () => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;\n }\n }\n }\n ) : null;\n});\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\nvar SelectScrollButtonImpl = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;\n const contentContext = useSelectContentContext(\"SelectScrollButton\", __scopeSelect);\n const autoScrollTimerRef = React.useRef(null);\n const getItems = useCollection(__scopeSelect);\n const clearAutoScrollTimer = React.useCallback(() => {\n if (autoScrollTimerRef.current !== null) {\n window.clearInterval(autoScrollTimerRef.current);\n autoScrollTimerRef.current = null;\n }\n }, []);\n React.useEffect(() => {\n return () => clearAutoScrollTimer();\n }, [clearAutoScrollTimer]);\n useLayoutEffect(() => {\n const activeItem = getItems().find((item) => item.ref.current === document.activeElement);\n activeItem?.ref.current?.scrollIntoView({ block: \"nearest\" });\n }, [getItems]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"aria-hidden\": true,\n ...scrollIndicatorProps,\n ref: forwardedRef,\n style: { flexShrink: 0, ...scrollIndicatorProps.style },\n onPointerDown: composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n }),\n onPointerMove: composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {\n contentContext.onItemLeave?.();\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n }),\n onPointerLeave: composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {\n clearAutoScrollTimer();\n })\n }\n );\n});\nvar SEPARATOR_NAME = \"SelectSeparator\";\nvar SelectSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { \"aria-hidden\": true, ...separatorProps, ref: forwardedRef });\n }\n);\nSelectSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"SelectArrow\";\nvar SelectArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(ARROW_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);\n return context.open && contentContext.position === \"popper\" ? /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;\n }\n);\nSelectArrow.displayName = ARROW_NAME;\nvar BUBBLE_INPUT_NAME = \"SelectBubbleInput\";\nvar SelectBubbleInput = React.forwardRef(\n ({ __scopeSelect, value, ...props }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const prevValue = usePrevious(value);\n React.useEffect(() => {\n const select = ref.current;\n if (!select) return;\n const selectProto = window.HTMLSelectElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n selectProto,\n \"value\"\n );\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event(\"change\", { bubbles: true });\n setValue.call(select, value);\n select.dispatchEvent(event);\n }\n }, [prevValue, value]);\n return /* @__PURE__ */ jsx(\n Primitive.select,\n {\n ...props,\n style: { ...VISUALLY_HIDDEN_STYLES, ...props.style },\n ref: composedRefs,\n defaultValue: value\n }\n );\n }\n);\nSelectBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction shouldShowPlaceholder(value) {\n return value === \"\" || value === void 0;\n}\nfunction useTypeaheadSearch(onSearchChange) {\n const handleSearchChange = useCallbackRef(onSearchChange);\n const searchRef = React.useRef(\"\");\n const timerRef = React.useRef(0);\n const handleTypeaheadSearch = React.useCallback(\n (key) => {\n const search = searchRef.current + key;\n handleSearchChange(search);\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n },\n [handleSearchChange]\n );\n const resetTypeahead = React.useCallback(() => {\n searchRef.current = \"\";\n window.clearTimeout(timerRef.current);\n }, []);\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n return [searchRef, handleTypeaheadSearch, resetTypeahead];\n}\nfunction findNextItem(items, search, currentItem) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;\n let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));\n const excludeCurrentItem = normalizedSearch.length === 1;\n if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n const nextItem = wrappedItems.find(\n (item) => item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextItem !== currentItem ? nextItem : void 0;\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root2 = Select;\nvar Trigger = SelectTrigger;\nvar Value = SelectValue;\nvar Icon = SelectIcon;\nvar Portal = SelectPortal;\nvar Content2 = SelectContent;\nvar Viewport = SelectViewport;\nvar Group = SelectGroup;\nvar Label = SelectLabel;\nvar Item = SelectItem;\nvar ItemText = SelectItemText;\nvar ItemIndicator = SelectItemIndicator;\nvar ScrollUpButton = SelectScrollUpButton;\nvar ScrollDownButton = SelectScrollDownButton;\nvar Separator = SelectSeparator;\nvar Arrow2 = SelectArrow;\nexport {\n Arrow2 as Arrow,\n Content2 as Content,\n Group,\n Icon,\n Item,\n ItemIndicator,\n ItemText,\n Label,\n Portal,\n Root2 as Root,\n ScrollDownButton,\n ScrollUpButton,\n Select,\n SelectArrow,\n SelectContent,\n SelectGroup,\n SelectIcon,\n SelectItem,\n SelectItemIndicator,\n SelectItemText,\n SelectLabel,\n SelectPortal,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n SelectViewport,\n Separator,\n Trigger,\n Value,\n Viewport,\n createSelectScope\n};\n//# sourceMappingURL=index.mjs.map\n","import { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport { cn } from \"../lib/cn\";\nimport { appearanceToStyle, resolveColorScheme } from \"../appearance/appearance\";\nimport { useRoad } from \"../provider/context\";\n\nexport const Select = SelectPrimitive.Root;\nexport const SelectValue = SelectPrimitive.Value;\n\nexport const SelectTrigger = forwardRef<\n ElementRef<typeof SelectPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-9 w-full items-center justify-between gap-2 rounded-md border border-input bg-background px-3 py-1 text-sm shadow-sm\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[placeholder]:text-muted-foreground\",\n \"transition-colors\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-3.5 w-3.5 opacity-60\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = \"SelectTrigger\";\n\nexport const SelectContent = forwardRef<\n ElementRef<typeof SelectPrimitive.Content>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => {\n const { appearance } = useRoad();\n const scheme = resolveColorScheme(appearance?.colorScheme);\n const style = appearanceToStyle(appearance);\n\n return (\n <SelectPrimitive.Portal>\n <div className={cn(\"road-ui\", scheme === \"dark\" && \"dark\")} style={style}>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n className={cn(\n \"relative z-[70] max-h-[300px] min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n position === \"popper\" && \"data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" && \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </div>\n </SelectPrimitive.Portal>\n );\n});\nSelectContent.displayName = \"SelectContent\";\n\nexport const SelectItem = forwardRef<\n ElementRef<typeof SelectPrimitive.Item>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center gap-2 rounded-sm py-1.5 pl-2 pr-7 text-sm outline-none\",\n \"focus:bg-accent focus:text-accent-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-3.5 w-3.5\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = \"SelectItem\";\n","import { useEffect, useRef, useState } from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"../../ui/button\";\nimport { Input } from \"../../ui/input\";\nimport { Label } from \"../../ui/label\";\nimport { Field } from \"../../ui/field\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../ui/select\";\nimport { Skeleton } from \"../../ui/skeleton\";\nimport { useCreateInvitation, useRoles } from \"../../api/hooks\";\nimport { useFormErrors } from \"../../lib/use-form-errors\";\nimport { useT } from \"../../i18n/context\";\n\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\ninterface Props {\n buId: string;\n onCancel: () => void;\n onInvited: () => void;\n}\n\nfunction parseEmails(input: string): { valid: string[]; invalid: string[] } {\n const items = input\n .split(/[\\s,;]+/)\n .map((s) => s.trim())\n .filter(Boolean);\n const valid: string[] = [];\n const invalid: string[] = [];\n for (const item of items) {\n if (EMAIL_RE.test(item)) valid.push(item);\n else invalid.push(item);\n }\n return { valid, invalid };\n}\n\nexport function InviteForm({ buId, onCancel, onInvited }: Props) {\n const [emailsInput, setEmailsInput] = useState(\"\");\n const [roleId, setRoleId] = useState<string | undefined>(undefined);\n const [submitting, setSubmitting] = useState(false);\n const emailRef = useRef<HTMLInputElement>(null);\n\n // Need all roles available for the picker — request the max page size\n // (100) so realistic catalogs always land in one round-trip. BUs with\n // > 100 roles aren't supported by this simple picker; they'd need a\n // search-as-you-type variant backed by useInfiniteRoles.\n const { data: roles, isPending: rolesPending } = useRoles(buId, 100);\n const createInv = useCreateInvitation(buId);\n const t = useT();\n const form = useFormErrors({\n generic: t.dict.validation.generic,\n formSummary: t.dict.validation.formSummary,\n });\n\n useEffect(() => {\n emailRef.current?.focus();\n }, []);\n\n // Default to first non-System role, falling back to first role overall.\n useEffect(() => {\n if (!roleId && roles && roles.length > 0) {\n const firstCustom = roles.find((r) => !r.isSystem) ?? roles[0]!;\n setRoleId(firstCustom.id);\n }\n }, [roles, roleId]);\n\n const parsed = parseEmails(emailsInput);\n\n const submit = async () => {\n const errs: Record<string, string> = {};\n if (parsed.valid.length === 0 && parsed.invalid.length === 0)\n errs[\"invite-emails\"] = t.dict.validation.required;\n else if (parsed.invalid.length > 0) errs[\"invite-emails\"] = t.dict.validation.emailInvalid;\n if (!roleId) errs[\"invite-role\"] = t.dict.validation.required;\n if (form.failClient(errs)) return;\n if (!roleId) return; // narrowed by the check above; keeps the loop type-safe\n\n setSubmitting(true);\n try {\n let succeeded = 0;\n for (const email of parsed.valid) {\n try {\n await createInv.mutateAsync({ email, roleId });\n succeeded++;\n } catch {\n // continue; tally below\n }\n }\n if (succeeded === parsed.valid.length) {\n toast.success(\n succeeded === 1\n ? t.dict.invitations.sentSingleToast\n : t.format(t.dict.invitations.sentToast, { count: succeeded }),\n );\n onInvited();\n } else if (succeeded > 0) {\n toast.warning(\n t.format(t.dict.invitations.sentPartialToast, {\n succeeded,\n total: parsed.valid.length,\n }),\n );\n onInvited();\n } else {\n toast.error(t.dict.invitations.sentErrorToast);\n }\n } finally {\n setSubmitting(false);\n }\n };\n\n const roleError = form.errors[\"invite-role\"];\n\n const emailsHint = (\n <>\n {t.dict.invitations.formEmailsHelp}\n {parsed.valid.length > 0 && (\n <>\n {\" \"}\n <span className=\"text-foreground\">\n {t.format(t.dict.invitations.formEmailsValidCount, { count: parsed.valid.length })}\n </span>\n </>\n )}\n {parsed.invalid.length > 0 && (\n <>\n {\" \"}\n <span className=\"text-destructive\">\n {t.format(t.dict.invitations.formEmailsInvalidCount, {\n count: parsed.invalid.length,\n examples:\n parsed.invalid.slice(0, 3).join(\", \") + (parsed.invalid.length > 3 ? \"…\" : \"\"),\n })}\n </span>\n </>\n )}\n </>\n );\n\n return (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n void submit();\n }}\n className=\"rounded-lg border border-border bg-card p-4 animate-in fade-in-0 slide-in-from-top-2 duration-200\"\n >\n <div className=\"space-y-3\">\n <Field\n id=\"invite-emails\"\n label={t.format(t.dict.invitations.formEmailsField, {\n plural: parsed.valid.length > 1 ? \"s\" : \"\",\n })}\n error={form.errors[\"invite-emails\"]}\n hint={emailsHint}\n >\n <Input\n ref={emailRef}\n value={emailsInput}\n onChange={(e) => {\n setEmailsInput(e.target.value);\n form.clear(\"invite-emails\");\n }}\n placeholder={t.dict.invitations.formEmailsPlaceholder}\n disabled={submitting}\n />\n </Field>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"invite-role\">{t.dict.invitations.formRoleField}</Label>\n {rolesPending ? (\n <Skeleton className=\"h-9 w-full max-w-sm\" />\n ) : (\n <Select\n value={roleId}\n onValueChange={(v) => {\n setRoleId(v);\n form.clear(\"invite-role\");\n }}\n disabled={submitting}\n >\n <SelectTrigger\n id=\"invite-role\"\n className={`max-w-sm${\n roleError ? \" border-destructive focus-visible:ring-destructive\" : \"\"\n }`}\n aria-invalid={roleError ? true : undefined}\n aria-describedby={roleError ? \"invite-role-error\" : undefined}\n >\n <SelectValue placeholder={t.dict.invitations.formRolePlaceholder} />\n </SelectTrigger>\n <SelectContent>\n {(roles ?? []).map((r) => (\n <SelectItem key={r.id} value={r.id}>\n {r.name}\n {r.isSystem && (\n <span className=\"ml-1 text-xs text-muted-foreground\">\n ({t.dict.common.system.toLowerCase()})\n </span>\n )}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n {roleError && (\n <p id=\"invite-role-error\" role=\"alert\" className=\"text-sm text-destructive\">\n {roleError}\n </p>\n )}\n </div>\n </div>\n\n {form.formError && (\n <p role=\"alert\" className=\"mt-3 text-sm text-destructive\">\n {form.formError}\n </p>\n )}\n\n <div className=\"mt-4 flex items-center justify-end gap-2\">\n <Button type=\"button\" variant=\"ghost\" onClick={onCancel} disabled={submitting}>\n {t.dict.common.cancel}\n </Button>\n <Button type=\"submit\" disabled={submitting}>\n {submitting && <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />}\n {parsed.valid.length > 1\n ? t.format(t.dict.invitations.formSubmitMany, { count: parsed.valid.length })\n : t.dict.invitations.formSubmitSingle}\n </Button>\n </div>\n </form>\n );\n}\n","import { Loader2, RotateCw, X } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { Avatar } from \"../shared/Avatar\";\nimport { Badge } from \"../../ui/badge\";\nimport { Button } from \"../../ui/button\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"../../ui/alert-dialog\";\nimport { useCan, useCancelInvitation, useResendInvitation } from \"../../api/hooks\";\nimport { useT, type Translator } from \"../../i18n/context\";\nimport type { Invitation } from \"../../api/types\";\n\ninterface Props {\n buId: string;\n invitations: Invitation[];\n}\n\nfunction statusVariant(status: Invitation[\"status\"]): \"default\" | \"muted\" | \"warning\" | \"danger\" {\n switch (status) {\n case \"pending\":\n return \"default\";\n case \"accepted\":\n return \"muted\";\n case \"expired\":\n return \"warning\";\n case \"cancelled\":\n return \"danger\";\n case \"rejected\":\n return \"danger\";\n }\n}\n\nfunction statusLabel(t: Translator, status: Invitation[\"status\"]): string {\n switch (status) {\n case \"pending\":\n return t.dict.invitations.statusPending;\n case \"accepted\":\n return t.dict.invitations.statusAccepted;\n case \"expired\":\n return t.dict.invitations.statusExpired;\n case \"cancelled\":\n return t.dict.invitations.statusCancelled;\n case \"rejected\":\n return t.dict.invitations.statusRejected;\n }\n}\n\nexport function InvitationsList({ buId, invitations }: Props) {\n // Pending first, then by date.\n const sorted = [...invitations].sort((a, b) => {\n if (a.status === \"pending\" && b.status !== \"pending\") return -1;\n if (b.status === \"pending\" && a.status !== \"pending\") return 1;\n return new Date(b.invitedAt).getTime() - new Date(a.invitedAt).getTime();\n });\n\n return (\n <ul className=\"divide-y divide-border rounded-lg border border-border bg-card\" role=\"list\">\n {sorted.map((inv) => (\n <li key={inv.id}>\n <InvitationRow buId={buId} invitation={inv} />\n </li>\n ))}\n </ul>\n );\n}\n\nfunction InvitationRow({ buId, invitation }: { buId: string; invitation: Invitation }) {\n const cancel = useCancelInvitation(buId);\n const resend = useResendInvitation(buId);\n const t = useT();\n const can = useCan(buId);\n const canManage = can(\"manage:Invitation\");\n const isPending = invitation.status === \"pending\";\n\n const handleResend = async () => {\n try {\n await resend.mutateAsync(invitation.id);\n toast.success(t.format(t.dict.invitations.resendToast, { email: invitation.email }));\n } catch {\n toast.error(t.dict.invitations.couldNotLoad);\n }\n };\n\n const handleCancel = async () => {\n try {\n await cancel.mutateAsync(invitation.id);\n toast.message(t.format(t.dict.invitations.cancelToast, { email: invitation.email }));\n } catch {\n toast.error(t.dict.invitations.couldNotLoad);\n }\n };\n\n const relative = t.relative(isPending ? invitation.expiresAt : invitation.invitedAt);\n const dateLabel = t.format(\n isPending ? t.dict.invitations.expiresRelative : t.dict.invitations.invitedRelative,\n { relative },\n );\n\n return (\n <div className=\"flex items-center gap-3 px-3 py-3\">\n <Avatar name={invitation.email} />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate text-sm font-medium text-foreground\">{invitation.email}</span>\n <Badge variant={statusVariant(invitation.status)}>\n {statusLabel(t, invitation.status)}\n </Badge>\n </div>\n <div className=\"mt-0.5 text-xs text-muted-foreground\">\n {invitation.roleName} · {dateLabel}\n </div>\n </div>\n {isPending && canManage && (\n <div className=\"flex shrink-0 items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleResend}\n disabled={resend.isPending}\n title={t.dict.invitations.resend}\n >\n {resend.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <RotateCw className=\"h-4 w-4\" />\n )}\n <span className=\"sr-only\">{t.dict.invitations.resend}</span>\n </Button>\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" title={t.dict.invitations.cancel}>\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">{t.dict.invitations.cancel}</span>\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogTitle>\n {t.format(t.dict.invitations.cancelTitle, { email: invitation.email })}\n </AlertDialogTitle>\n <AlertDialogDescription>\n {t.dict.invitations.cancelDescription}\n </AlertDialogDescription>\n <div className=\"mt-2 flex justify-end gap-2\">\n <AlertDialogCancel asChild>\n <Button variant=\"outline\">{t.dict.invitations.cancelKeep}</Button>\n </AlertDialogCancel>\n <AlertDialogAction asChild>\n <Button variant=\"destructive\" onClick={handleCancel}>\n {t.dict.invitations.cancelConfirm}\n </Button>\n </AlertDialogAction>\n </div>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n )}\n </div>\n );\n}\n","import { useMemo, useState } from \"react\";\nimport { Mail, Plus, RefreshCw } from \"lucide-react\";\nimport { Button } from \"../../ui/button\";\nimport { Skeleton } from \"../../ui/skeleton\";\nimport { EmptyState } from \"../shared/EmptyState\";\nimport { LoadMoreFooter } from \"../shared/LoadMoreFooter\";\nimport { useCan, useInfiniteInvitations } from \"../../api/hooks\";\nimport { useT } from \"../../i18n/context\";\nimport { InviteForm } from \"./InviteForm\";\nimport { InvitationsList } from \"./InvitationsList\";\n\ninterface Props {\n buId: string;\n}\n\nexport function InvitationsTab({ buId }: Props) {\n const [composing, setComposing] = useState(false);\n const {\n data,\n isPending,\n isError,\n refetch,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n } = useInfiniteInvitations(buId);\n const t = useT();\n const can = useCan(buId);\n const canManage = can(\"manage:Invitation\");\n\n const invitations = useMemo(\n () => (data ? data.pages.flatMap((p) => p.data) : []),\n [data],\n );\n const totalCount = data?.pages[0]?.pagination.totalCount ?? 0;\n\n if (isPending) {\n return (\n <div className=\"space-y-2\">\n {[0, 1, 2].map((i) => (\n <Skeleton key={i} className=\"h-16 w-full\" />\n ))}\n </div>\n );\n }\n\n if (isError) {\n return (\n <EmptyState\n icon={<RefreshCw className=\"h-5 w-5\" />}\n title={t.dict.invitations.couldNotLoad}\n description={t.dict.businessUnits.errorDescription}\n action={\n <Button variant=\"outline\" onClick={() => void refetch()}>\n <RefreshCw className=\"h-3.5 w-3.5\" /> {t.dict.common.tryAgain}\n </Button>\n }\n />\n );\n }\n\n if (totalCount === 0 && !composing) {\n return (\n <EmptyState\n icon={<Mail className=\"h-5 w-5\" />}\n title={t.dict.invitations.emptyTitle}\n description={t.dict.invitations.emptyDescription}\n action={\n canManage ? (\n <Button onClick={() => setComposing(true)}>\n <Plus className=\"h-3.5 w-3.5\" /> {t.dict.invitations.inviteButton}\n </Button>\n ) : undefined\n }\n />\n );\n }\n\n return (\n <div className=\"space-y-3\">\n {canManage && (\n <div className=\"flex items-center justify-end\">\n {!composing && (\n <Button size=\"sm\" onClick={() => setComposing(true)}>\n <Plus className=\"h-3.5 w-3.5\" /> {t.dict.invitations.inviteButton}\n </Button>\n )}\n </div>\n )}\n\n {composing && canManage && (\n <InviteForm\n buId={buId}\n onCancel={() => setComposing(false)}\n onInvited={() => setComposing(false)}\n />\n )}\n\n {invitations.length > 0 && <InvitationsList buId={buId} invitations={invitations} />}\n\n <LoadMoreFooter\n shown={invitations.length}\n total={totalCount}\n hasNextPage={hasNextPage}\n isFetchingNextPage={isFetchingNextPage}\n onLoadMore={() => void fetchNextPage()}\n />\n </div>\n );\n}\n","import { ArrowLeft } from \"lucide-react\";\nimport { Avatar } from \"../shared/Avatar\";\nimport { Badge } from \"../../ui/badge\";\nimport { Button } from \"../../ui/button\";\nimport { Skeleton } from \"../../ui/skeleton\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../../ui/tabs\";\nimport { useBusinessUnit, useCan, useMyPermissions } from \"../../api/hooks\";\nimport { useT } from \"../../i18n/context\";\nimport { MembersList } from \"./MembersList\";\nimport { BusinessUnitSettings } from \"./BusinessUnitSettings\";\nimport { InvitationsTab } from \"../invitations/InvitationsTab\";\n\ninterface Props {\n buId: string;\n onBack: () => void;\n}\n\nexport function BusinessUnitDetail({ buId, onBack }: Props) {\n const { data, isPending } = useBusinessUnit(buId);\n const { isPending: permsPending } = useMyPermissions();\n const can = useCan(buId);\n const t = useT();\n\n // Only surface the tabs the viewer can actually use. A \"Member\" without\n // read:Member / manage:Invitation would otherwise open these tabs and hit a\n // 403 that the lists render as a misleading \"couldn't load — check your\n // connection\". The Tabs `key` re-seeds `defaultValue` once permissions\n // resolve, so the first tab is always one the user can see.\n const showMembers = can(\"read:Member\");\n const showInvitations = can(\"manage:Invitation\");\n const defaultTab = showMembers\n ? \"members\"\n : showInvitations\n ? \"invitations\"\n : \"settings\";\n\n return (\n <div className=\"animate-in fade-in-0 slide-in-from-right-2 duration-200\">\n <header className=\"mb-4 flex items-center gap-3\">\n <Button variant=\"ghost\" size=\"icon\" onClick={onBack} aria-label={t.dict.common.back}>\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n {isPending || !data ? (\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-9 w-9 rounded-full\" />\n <div className=\"space-y-1.5\">\n <Skeleton className=\"h-4 w-32\" />\n <Skeleton className=\"h-3 w-24\" />\n </div>\n </div>\n ) : (\n <div className=\"flex min-w-0 items-center gap-3\">\n <Avatar name={data.name} />\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <h3 className=\"truncate text-base font-semibold text-foreground\">{data.name}</h3>\n <Badge variant=\"muted\" className=\"shrink-0\">\n {t.plural(t.dict.businessUnits.detailMemberCount, data.memberCount)}\n </Badge>\n </div>\n <p className=\"truncate font-mono text-xs text-muted-foreground\">{data.slug}</p>\n </div>\n </div>\n )}\n </header>\n\n <Tabs key={permsPending ? \"perms-loading\" : \"perms-ready\"} defaultValue={defaultTab}>\n <TabsList>\n {showMembers && (\n <TabsTrigger value=\"members\">{t.dict.businessUnits.detailTabMembers}</TabsTrigger>\n )}\n {showInvitations && (\n <TabsTrigger value=\"invitations\">\n {t.dict.businessUnits.detailTabInvitations}\n </TabsTrigger>\n )}\n <TabsTrigger value=\"settings\">{t.dict.businessUnits.detailTabSettings}</TabsTrigger>\n </TabsList>\n\n {showMembers && (\n <TabsContent value=\"members\">\n <MembersList buId={buId} />\n </TabsContent>\n )}\n {showInvitations && (\n <TabsContent value=\"invitations\">\n <InvitationsTab buId={buId} />\n </TabsContent>\n )}\n <TabsContent value=\"settings\">\n <BusinessUnitSettings buId={buId} />\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { BusinessUnitList } from \"./BusinessUnitList\";\nimport { BusinessUnitDetail } from \"./BusinessUnitDetail\";\n\nexport interface BusinessUnitsTabProps {\n /** Initial BU to deep-link into — opens the detail view instead of the list. */\n initialBuId?: string | null;\n}\n\nexport function BusinessUnitsTab({ initialBuId = null }: BusinessUnitsTabProps = {}) {\n const [selectedBuId, setSelectedBuId] = useState<string | null>(initialBuId);\n\n if (selectedBuId) {\n return <BusinessUnitDetail buId={selectedBuId} onBack={() => setSelectedBuId(null)} />;\n }\n return (\n <div className=\"animate-in fade-in-0 duration-200\">\n <BusinessUnitList onSelect={setSelectedBuId} />\n </div>\n );\n}\n","import { cn } from \"../../lib/cn\";\nimport { useT } from \"../../i18n/context\";\nimport type { BusinessUnitSummary } from \"../../api/types\";\n\ninterface Props {\n businessUnits: BusinessUnitSummary[];\n value: string;\n onChange: (buId: string) => void;\n}\n\nexport function BUSelector({ businessUnits, value, onChange }: Props) {\n const t = useT();\n if (businessUnits.length <= 1) return null;\n return (\n <div className=\"flex items-center gap-1.5 overflow-x-auto pb-1\" role=\"tablist\">\n <span className=\"shrink-0 text-xs font-medium text-muted-foreground\">\n {t.dict.roles.buSelectorLabel}\n </span>\n {businessUnits.map((bu) => {\n const active = bu.id === value;\n return (\n <button\n key={bu.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n onClick={() => onChange(bu.id)}\n className={cn(\n \"shrink-0 rounded-full px-3 py-1 text-xs font-medium transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n active\n ? \"bg-primary text-primary-foreground\"\n : \"bg-muted text-muted-foreground hover:bg-accent hover:text-accent-foreground\",\n )}\n >\n {bu.name}\n </button>\n );\n })}\n </div>\n );\n}\n","import { ChevronRight, Lock, Users } from \"lucide-react\";\nimport { Badge } from \"../../ui/badge\";\nimport { cn } from \"../../lib/cn\";\nimport { useT } from \"../../i18n/context\";\nimport type { Role } from \"../../api/types\";\n\ninterface Props {\n role: Role;\n onSelect: (roleId: string) => void;\n}\n\nexport function RoleRow({ role, onSelect }: Props) {\n const t = useT();\n const permissionLabel = role.permissions.includes(\"*\")\n ? t.dict.roles.rowAllPermissions\n : t.plural(t.dict.roles.rowPermissionsCount, role.permissions.length);\n\n return (\n <button\n type=\"button\"\n onClick={() => onSelect(role.id)}\n className={cn(\n \"group flex w-full items-start gap-3 rounded-lg border border-border bg-card px-3 py-3 text-left\",\n \"transition-all hover:border-foreground/20 hover:bg-accent/50\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate text-sm font-medium text-foreground\">{role.name}</span>\n {role.isSystem && (\n <Badge variant=\"muted\" className=\"shrink-0 gap-1\">\n <Lock className=\"h-3 w-3\" aria-hidden /> {t.dict.roles.systemBadge}\n </Badge>\n )}\n </div>\n {role.description && (\n <p className=\"mt-0.5 line-clamp-1 text-xs text-muted-foreground\">{role.description}</p>\n )}\n <div className=\"mt-1.5 flex items-center gap-3 text-xs text-muted-foreground\">\n <span>{permissionLabel}</span>\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" aria-hidden />\n {role.assignmentCount}{\" \"}\n {t.plural(t.dict.common.member, role.assignmentCount).replace(/\\{\\{count\\}\\}/g, \"\")}\n </span>\n </div>\n </div>\n\n <ChevronRight\n className=\"mt-1 h-4 w-4 shrink-0 text-muted-foreground/50 transition-transform group-hover:translate-x-0.5 group-hover:text-muted-foreground\"\n aria-hidden\n />\n </button>\n );\n}\n","import { useMemo } from \"react\";\nimport { Plus, RefreshCw, ShieldCheck } from \"lucide-react\";\nimport { Button } from \"../../ui/button\";\nimport { Skeleton } from \"../../ui/skeleton\";\nimport { EmptyState } from \"../shared/EmptyState\";\nimport { LoadMoreFooter } from \"../shared/LoadMoreFooter\";\nimport { useCan, useInfiniteRoles } from \"../../api/hooks\";\nimport { useT } from \"../../i18n/context\";\nimport { RoleRow } from \"./RoleRow\";\n\ninterface Props {\n buId: string;\n onSelect: (roleId: string) => void;\n onCreate: () => void;\n}\n\nexport function RolesList({ buId, onSelect, onCreate }: Props) {\n const {\n data,\n isPending,\n isError,\n refetch,\n isRefetching,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n } = useInfiniteRoles(buId);\n const t = useT();\n const can = useCan(buId);\n const canManage = can(\"manage:Role\");\n\n const roles = useMemo(\n () => (data ? data.pages.flatMap((p) => p.data) : []),\n [data],\n );\n const totalCount = data?.pages[0]?.pagination.totalCount ?? 0;\n\n if (isPending) {\n return (\n <div className=\"space-y-2\">\n {[0, 1, 2].map((i) => (\n <Skeleton key={i} className=\"h-16 w-full\" />\n ))}\n </div>\n );\n }\n\n if (isError) {\n return (\n <EmptyState\n icon={<RefreshCw className=\"h-5 w-5\" />}\n title={t.dict.roles.couldNotLoad}\n description={t.dict.roles.couldNotLoadDescription}\n action={\n <Button variant=\"outline\" onClick={() => void refetch()}>\n <RefreshCw className=\"h-3.5 w-3.5\" /> {t.dict.common.tryAgain}\n </Button>\n }\n />\n );\n }\n\n if (totalCount === 0) {\n return (\n <EmptyState\n icon={<ShieldCheck className=\"h-5 w-5\" />}\n title={t.dict.roles.emptyTitle}\n description={t.dict.roles.emptyDescription}\n action={\n canManage ? (\n <Button onClick={onCreate}>\n <Plus className=\"h-3.5 w-3.5\" /> {t.dict.roles.emptyCta}\n </Button>\n ) : undefined\n }\n />\n );\n }\n\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-end gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => void refetch()}\n disabled={isRefetching}\n >\n <RefreshCw className={isRefetching ? \"h-3.5 w-3.5 animate-spin\" : \"h-3.5 w-3.5\"} />\n <span className=\"sr-only\">{t.dict.common.refresh}</span>\n </Button>\n {canManage && (\n <Button size=\"sm\" onClick={onCreate}>\n <Plus className=\"h-3.5 w-3.5\" /> {t.dict.roles.newButton}\n </Button>\n )}\n </div>\n <ul className=\"space-y-2\" role=\"list\">\n {roles.map((r) => (\n <li key={r.id}>\n <RoleRow role={r} onSelect={onSelect} />\n </li>\n ))}\n </ul>\n <LoadMoreFooter\n shown={roles.length}\n total={totalCount}\n hasNextPage={hasNextPage}\n isFetchingNextPage={isFetchingNextPage}\n onLoadMore={() => void fetchNextPage()}\n />\n </div>\n );\n}\n","import { forwardRef, type TextareaHTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport const Textarea = forwardRef<\n HTMLTextAreaElement,\n TextareaHTMLAttributes<HTMLTextAreaElement>\n>(({ className, ...props }, ref) => (\n <textarea\n ref={ref}\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm shadow-sm\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"transition-colors resize-y\",\n className,\n )}\n {...props}\n />\n));\nTextarea.displayName = \"Textarea\";\n","\"use client\";\n\n// src/checkbox.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar CHECKBOX_NAME = \"Checkbox\";\nvar [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);\nvar [CheckboxProviderImpl, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);\nfunction CheckboxProvider(props) {\n const {\n __scopeCheckbox,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: CHECKBOX_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n disabled,\n setChecked,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n required,\n defaultChecked: isIndeterminate(defaultChecked) ? false : defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(\n CheckboxProviderImpl,\n {\n scope: __scopeCheckbox,\n ...context,\n children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children\n }\n );\n}\nvar TRIGGER_NAME = \"CheckboxTrigger\";\nvar CheckboxTrigger = React.forwardRef(\n ({ __scopeCheckbox, onKeyDown, onClick, ...checkboxProps }, forwardedRef) => {\n const {\n control,\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n isFormControl,\n bubbleInput\n } = useCheckboxContext(TRIGGER_NAME, __scopeCheckbox);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const form = control?.form;\n if (form) {\n const reset = () => setChecked(initialCheckedStateRef.current);\n form.addEventListener(\"reset\", reset);\n return () => form.removeEventListener(\"reset\", reset);\n }\n }, [control, setChecked]);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"checkbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...checkboxProps,\n ref: composedRefs,\n onKeyDown: composeEventHandlers(onKeyDown, (event) => {\n if (event.key === \"Enter\") event.preventDefault();\n }),\n onClick: composeEventHandlers(onClick, (event) => {\n setChecked((prevChecked) => isIndeterminate(prevChecked) ? true : !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }\n);\nCheckboxTrigger.displayName = TRIGGER_NAME;\nvar Checkbox = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeCheckbox,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...checkboxProps\n } = props;\n return /* @__PURE__ */ jsx(\n CheckboxProvider,\n {\n __scopeCheckbox,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n CheckboxTrigger,\n {\n ...checkboxProps,\n ref: forwardedRef,\n __scopeCheckbox\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n CheckboxBubbleInput,\n {\n __scopeCheckbox\n }\n )\n ] })\n }\n );\n }\n);\nCheckbox.displayName = CHECKBOX_NAME;\nvar INDICATOR_NAME = \"CheckboxIndicator\";\nvar CheckboxIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeCheckbox, forceMount, ...indicatorProps } = props;\n const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);\n return /* @__PURE__ */ jsx(\n Presence,\n {\n present: forceMount || isIndeterminate(context.checked) || context.checked === true,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...indicatorProps,\n ref: forwardedRef,\n style: { pointerEvents: \"none\", ...props.style }\n }\n )\n }\n );\n }\n);\nCheckboxIndicator.displayName = INDICATOR_NAME;\nvar BUBBLE_INPUT_NAME = \"CheckboxBubbleInput\";\nvar CheckboxBubbleInput = React.forwardRef(\n ({ __scopeCheckbox, ...props }, forwardedRef) => {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useCheckboxContext(BUBBLE_INPUT_NAME, __scopeCheckbox);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const bubbles = !hasConsumerStoppedPropagationRef.current;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n input.indeterminate = isIndeterminate(checked);\n setChecked.call(input, isIndeterminate(checked) ? false : checked);\n input.dispatchEvent(event);\n }\n }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n const defaultCheckedRef = React.useRef(isIndeterminate(checked) ? false : checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }\n);\nCheckboxBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nexport {\n Checkbox,\n CheckboxIndicator,\n CheckboxIndicator as Indicator,\n Checkbox as Root,\n createCheckboxScope,\n CheckboxBubbleInput as unstable_BubbleInput,\n CheckboxBubbleInput as unstable_CheckboxBubbleInput,\n CheckboxProvider as unstable_CheckboxProvider,\n CheckboxTrigger as unstable_CheckboxTrigger,\n CheckboxProvider as unstable_Provider,\n CheckboxTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","import { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check, Minus } from \"lucide-react\";\nimport { cn } from \"../lib/cn\";\n\nexport const Checkbox = forwardRef<\n ElementRef<typeof CheckboxPrimitive.Root>,\n ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-[4px] border border-input bg-background shadow-sm\",\n \"transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=checked]:text-primary-foreground\",\n \"data-[state=indeterminate]:bg-primary data-[state=indeterminate]:border-primary data-[state=indeterminate]:text-primary-foreground\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center\">\n {props.checked === \"indeterminate\" ? (\n <Minus className=\"h-3 w-3\" strokeWidth={3} />\n ) : (\n <Check className=\"h-3 w-3\" strokeWidth={3} />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = \"Checkbox\";\n","import { useMemo } from \"react\";\nimport { Checkbox } from \"../../ui/checkbox\";\nimport { Badge } from \"../../ui/badge\";\nimport { cn } from \"../../lib/cn\";\nimport { useT } from \"../../i18n/context\";\nimport type { Permission } from \"../../api/types\";\n\ninterface Props {\n permissions: Permission[];\n /** Currently selected permission codes. Use [\"*\"] to indicate wildcard (all). */\n value: string[];\n onChange: (next: string[]) => void;\n disabled?: boolean;\n}\n\ninterface CategoryGroup {\n category: string;\n perms: Permission[];\n}\n\nfunction groupByCategory(permissions: Permission[]): CategoryGroup[] {\n const map = new Map<string, Permission[]>();\n for (const p of permissions) {\n if (!map.has(p.category)) map.set(p.category, []);\n map.get(p.category)!.push(p);\n }\n return Array.from(map, ([category, perms]) => ({ category, perms }));\n}\n\nexport function PermissionPicker({ permissions, value, onChange, disabled }: Props) {\n const t = useT();\n const isWildcard = value.includes(\"*\");\n const selected = useMemo(() => new Set(value), [value]);\n const groups = useMemo(() => groupByCategory(permissions), [permissions]);\n\n if (isWildcard) {\n return (\n <div className=\"rounded-lg border border-border bg-muted/30 p-4 text-sm\">\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"default\">{t.dict.roles.allPermissionsBadge}</Badge>\n <span className=\"text-muted-foreground\">{t.dict.roles.allPermissionsDescription}</span>\n </div>\n </div>\n );\n }\n\n const toggle = (code: string, checked: boolean) => {\n if (disabled) return;\n if (checked) onChange([...value, code]);\n else onChange(value.filter((c) => c !== code));\n };\n\n const toggleCategory = (group: CategoryGroup, checked: boolean) => {\n if (disabled) return;\n const codes = group.perms.map((p) => p.code);\n if (checked) {\n const set = new Set(value);\n for (const c of codes) set.add(c);\n onChange(Array.from(set));\n } else {\n onChange(value.filter((c) => !codes.includes(c)));\n }\n };\n\n return (\n <div className=\"space-y-3\">\n {groups.map((group) => {\n const selectedInGroup = group.perms.filter((p) => selected.has(p.code)).length;\n const allSelected = selectedInGroup === group.perms.length;\n const someSelected = selectedInGroup > 0 && !allSelected;\n\n return (\n <section\n key={group.category}\n className=\"rounded-lg border border-border bg-card overflow-hidden\"\n >\n <header className=\"flex items-center justify-between gap-3 border-b border-border bg-muted/30 px-3 py-2\">\n <label className=\"flex items-center gap-2.5 cursor-pointer\">\n <Checkbox\n checked={allSelected ? true : someSelected ? \"indeterminate\" : false}\n onCheckedChange={(c) => toggleCategory(group, !!c)}\n disabled={disabled}\n aria-label={`Toggle all ${group.category} permissions`}\n />\n <span className=\"text-sm font-medium text-foreground\">{group.category}</span>\n </label>\n <span className=\"text-xs text-muted-foreground\">\n {t.format(t.dict.common.selectedCountOf, {\n selected: selectedInGroup,\n total: group.perms.length,\n })}\n </span>\n </header>\n <ul className=\"divide-y divide-border\">\n {group.perms.map((p) => {\n const checked = selected.has(p.code);\n return (\n <li key={p.code}>\n <label\n className={cn(\n \"flex cursor-pointer items-start gap-2.5 px-3 py-2.5 transition-colors\",\n !disabled && \"hover:bg-accent/30\",\n disabled && \"cursor-not-allowed opacity-70\",\n )}\n >\n <Checkbox\n className=\"mt-0.5\"\n checked={checked}\n onCheckedChange={(c) => toggle(p.code, !!c)}\n disabled={disabled}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate text-sm text-foreground\">{p.name}</span>\n <code className=\"shrink-0 font-mono text-[10px] text-muted-foreground\">\n {p.code}\n </code>\n </div>\n {p.description && (\n <p className=\"mt-0.5 text-xs text-muted-foreground\">{p.description}</p>\n )}\n </div>\n </label>\n </li>\n );\n })}\n </ul>\n </section>\n );\n })}\n </div>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { ArrowLeft, Loader2, Lock, Trash2, Users } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { Badge } from \"../../ui/badge\";\nimport { Button } from \"../../ui/button\";\nimport { Input } from \"../../ui/input\";\nimport { Field } from \"../../ui/field\";\nimport { Skeleton } from \"../../ui/skeleton\";\nimport { Textarea } from \"../../ui/textarea\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"../../ui/alert-dialog\";\nimport { PermissionPicker } from \"./PermissionPicker\";\nimport {\n useCan,\n useDeleteRole,\n usePermissions,\n useRole,\n useUpdateRole,\n} from \"../../api/hooks\";\nimport { useFormErrors } from \"../../lib/use-form-errors\";\nimport { useT } from \"../../i18n/context\";\n\ninterface Props {\n buId: string;\n roleId: string;\n onBack: () => void;\n}\n\nexport function RoleEditor({ buId, roleId, onBack }: Props) {\n const { data: role, isPending, isError, refetch } = useRole(buId, roleId);\n const { data: permissions } = usePermissions(buId);\n const update = useUpdateRole(buId, roleId);\n const remove = useDeleteRole(buId);\n const t = useT();\n const form = useFormErrors({\n generic: t.dict.validation.generic,\n formSummary: t.dict.validation.formSummary,\n });\n const can = useCan(buId);\n const canManage = can(\"manage:Role\");\n\n const [name, setName] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [perms, setPerms] = useState<string[]>([]);\n\n useEffect(() => {\n if (!role) return;\n setName(role.name);\n setDescription(role.description);\n setPerms(role.permissions);\n }, [role]);\n\n if (isPending) {\n return (\n <div className=\"animate-in fade-in-0 duration-200 space-y-4\">\n <Skeleton className=\"h-9 w-40\" />\n <Skeleton className=\"h-32 w-full\" />\n <Skeleton className=\"h-64 w-full\" />\n </div>\n );\n }\n\n if (isError) {\n return (\n <div className=\"space-y-4\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={onBack}>\n <ArrowLeft className=\"h-4 w-4\" />\n {t.dict.common.back}\n </Button>\n <div\n role=\"alert\"\n className=\"rounded-md border border-destructive/40 bg-destructive/5 px-4 py-6 text-sm text-destructive\"\n >\n <p className=\"font-medium\">{t.dict.roles.couldNotLoad}</p>\n <p className=\"mt-1 text-destructive/80\">\n {t.dict.roles.couldNotLoadDescription}\n </p>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3\"\n onClick={() => refetch()}\n >\n {t.dict.common.tryAgain}\n </Button>\n </div>\n </div>\n );\n }\n\n // useRole has settled (not pending, not error) but the query returned\n // nothing — treat as \"role not found\" rather than falling back to the\n // skeleton loop forever.\n if (!role) {\n return (\n <div className=\"space-y-4\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={onBack}>\n <ArrowLeft className=\"h-4 w-4\" />\n {t.dict.common.back}\n </Button>\n <div className=\"rounded-md border border-border bg-muted/40 px-4 py-6 text-sm text-muted-foreground\">\n {t.dict.roles.notFound}\n </div>\n </div>\n );\n }\n\n const dirty =\n name !== role.name ||\n description !== role.description ||\n !sameSet(perms, role.permissions);\n\n // System roles are always read-only; otherwise gate on manage:Role.\n const readOnly = role.isSystem || !canManage;\n\n const handleSave = async () => {\n const errs: Record<string, string> = {};\n const trimmedName = name.trim();\n if (!trimmedName) errs[\"role-name-edit\"] = t.dict.validation.required;\n else if (trimmedName.length > 80)\n errs[\"role-name-edit\"] = t.format(t.dict.validation.tooLong, { max: 80 });\n if (description.trim().length > 300)\n errs[\"role-description-edit\"] = t.format(t.dict.validation.tooLong, { max: 300 });\n if (form.failClient(errs)) return;\n\n try {\n await update.mutateAsync({\n name: trimmedName,\n description: description.trim(),\n permissions: perms,\n });\n toast.success(t.format(t.dict.roles.savedToast, { name: role.name }));\n } catch (err) {\n if (!form.applyServer(err, [\"role-name-edit\", \"role-description-edit\"])) {\n toast.error(t.dict.common.actionFailed);\n }\n }\n };\n\n const handleDelete = async () => {\n try {\n await remove.mutateAsync(roleId);\n toast.success(t.format(t.dict.roles.deleteToast, { name: role.name }));\n onBack();\n } catch {\n toast.error(t.dict.roles.deleteRole);\n }\n };\n\n return (\n <div className=\"animate-in fade-in-0 slide-in-from-right-2 duration-200 space-y-5 pb-2\">\n <header className=\"flex items-center gap-2\">\n <Button variant=\"ghost\" size=\"icon\" onClick={onBack} aria-label={t.dict.common.back}>\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <h3 className=\"text-base font-semibold text-foreground\">{role.name}</h3>\n {role.isSystem && (\n <Badge variant=\"muted\" className=\"gap-1\">\n <Lock className=\"h-3 w-3\" aria-hidden /> {t.dict.roles.systemBadge}\n </Badge>\n )}\n <span className=\"ml-auto flex items-center gap-1 text-xs text-muted-foreground\">\n <Users className=\"h-3 w-3\" aria-hidden />\n {role.assignmentCount}{\" \"}\n {t.plural(t.dict.common.member, role.assignmentCount).replace(/\\{\\{count\\}\\}/g, \"\")}\n </span>\n </header>\n\n {role.isSystem && (\n <div className=\"rounded-md border border-border bg-muted/30 px-3 py-2 text-xs text-muted-foreground\">\n {t.dict.roles.systemBannerNote}\n </div>\n )}\n\n <section className=\"space-y-3\">\n <Field\n id=\"role-name-edit\"\n label={t.dict.roles.editorName}\n error={form.errors[\"role-name-edit\"]}\n >\n <Input\n value={name}\n onChange={(e) => {\n setName(e.target.value);\n form.clear(\"role-name-edit\");\n }}\n className=\"max-w-sm\"\n disabled={readOnly || update.isPending}\n />\n </Field>\n <Field\n id=\"role-description-edit\"\n label={t.dict.roles.editorDescription}\n error={form.errors[\"role-description-edit\"]}\n >\n <Textarea\n value={description}\n onChange={(e) => {\n setDescription(e.target.value);\n form.clear(\"role-description-edit\");\n }}\n rows={2}\n placeholder={t.dict.roles.editorDescriptionPlaceholder}\n disabled={readOnly || update.isPending}\n />\n </Field>\n </section>\n\n <section className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <h4 className=\"text-sm font-semibold text-foreground\">{t.dict.roles.permissionsHeader}</h4>\n {!perms.includes(\"*\") && (\n <span className=\"text-xs text-muted-foreground\">\n {t.format(t.dict.common.selectedCountOf, {\n selected: perms.length,\n total: permissions?.length ?? 0,\n })}\n </span>\n )}\n </div>\n {permissions ? (\n <PermissionPicker\n permissions={permissions}\n value={perms}\n onChange={setPerms}\n disabled={readOnly || update.isPending}\n />\n ) : (\n <Skeleton className=\"h-48 w-full\" />\n )}\n </section>\n\n {!readOnly && (\n <>\n {form.formError && (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n {form.formError}\n </p>\n )}\n <div className=\"flex items-center justify-between gap-2 border-t border-border pt-4\">\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\" className=\"text-destructive hover:bg-destructive/10\">\n <Trash2 className=\"h-3.5 w-3.5\" />\n {t.dict.roles.deleteRole}\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogTitle>\n {t.format(t.dict.roles.deleteTitle, { name: role.name })}\n </AlertDialogTitle>\n <AlertDialogDescription>{t.dict.roles.deleteDescription}</AlertDialogDescription>\n <div className=\"mt-2 flex justify-end gap-2\">\n <AlertDialogCancel asChild>\n <Button variant=\"outline\">{t.dict.common.cancel}</Button>\n </AlertDialogCancel>\n <AlertDialogAction asChild>\n <Button variant=\"destructive\" onClick={handleDelete}>\n {t.dict.roles.deleteConfirm}\n </Button>\n </AlertDialogAction>\n </div>\n </AlertDialogContent>\n </AlertDialog>\n\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"ghost\"\n onClick={() => {\n setName(role.name);\n setDescription(role.description);\n setPerms(role.permissions);\n form.reset();\n }}\n disabled={!dirty || update.isPending}\n >\n {t.dict.common.discard}\n </Button>\n <Button onClick={handleSave} disabled={!dirty || update.isPending}>\n {update.isPending && <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />}\n {t.dict.common.saveChanges}\n </Button>\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n\nfunction sameSet(a: string[], b: string[]): boolean {\n if (a.length !== b.length) return false;\n const s = new Set(a);\n return b.every((x) => s.has(x));\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { Copy, Loader2, Sparkles } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"../../ui/button\";\nimport { Input } from \"../../ui/input\";\nimport { Field } from \"../../ui/field\";\nimport { Textarea } from \"../../ui/textarea\";\nimport { Badge } from \"../../ui/badge\";\nimport { Skeleton } from \"../../ui/skeleton\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"../../ui/dialog\";\nimport { cn } from \"../../lib/cn\";\nimport { PermissionPicker } from \"./PermissionPicker\";\nimport { useCreateRole, usePermissions, useRoles } from \"../../api/hooks\";\nimport { useFormErrors, type FieldErrors } from \"../../lib/use-form-errors\";\nimport { useT, type Translator } from \"../../i18n/context\";\nimport type { Permission, Role } from \"../../api/types\";\n\ninterface Props {\n buId: string;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onCreated: (roleId: string) => void;\n}\n\ntype Mode = \"choose\" | \"blank\" | \"clone\";\n\n/**\n * Seed the permission selection when cloning.\n *\n * - wildcard source (`[\"*\"]`) → `[\"*\"]` — preserve the full grant; the\n * picker renders it as a read-only \"all permissions\" state. (A naive\n * `p !== \"*\"` filter would drop the only entry and produce an empty role.)\n * - concrete source → its permission list verbatim, editable in the picker.\n *\n * Blank mode starts from `[]` and the user picks in this same dialog. A role\n * with zero permissions grants nothing and the API rejects it, so permissions\n * are part of *creating* a role (not a later step) and the Create button stays\n * disabled until at least one is selected — the user never reaches that error.\n */\nfunction cloneSeed(cloneSource: Role | undefined): string[] {\n if (!cloneSource) return [];\n return cloneSource.permissions.includes(\"*\") ? [\"*\"] : [...cloneSource.permissions];\n}\n\nexport function CreateRoleDialog({ buId, open, onOpenChange, onCreated }: Props) {\n const [mode, setMode] = useState<Mode>(\"choose\");\n const [name, setName] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [cloneRoleId, setCloneRoleId] = useState<string | null>(null);\n const [perms, setPerms] = useState<string[]>([]);\n // Which clone source we've already seeded the picker from — so a background\n // roles refetch (a fresh `cloneSource` object) can't clobber the user's edits.\n const seededSourceId = useRef<string | null>(null);\n\n // Need every existing role for the \"clone from\" picker — request the\n // max page size (100). BUs with > 100 roles fall back to cloning from\n // the first page only; that's a deliberate scope limit until a\n // search-driven picker variant lands.\n const { data: roles } = useRoles(buId, 100);\n const {\n data: permissions,\n isError: permissionsError,\n refetch: refetchPermissions,\n } = usePermissions(buId);\n const create = useCreateRole(buId);\n const t = useT();\n const form = useFormErrors({\n generic: t.dict.validation.generic,\n formSummary: t.dict.validation.formSummary,\n });\n const resetForm = form.reset;\n\n useEffect(() => {\n if (!open) {\n setMode(\"choose\");\n setName(\"\");\n setDescription(\"\");\n setCloneRoleId(null);\n setPerms([]);\n seededSourceId.current = null;\n resetForm();\n }\n }, [open, resetForm]);\n\n const cloneSource = roles?.find((r) => r.id === cloneRoleId);\n\n // Seed the picker once per selected clone source (keyed on the source id, not\n // the object reference, so re-renders / background refetches don't re-seed).\n useEffect(() => {\n if (mode === \"clone\" && cloneSource && seededSourceId.current !== cloneSource.id) {\n seededSourceId.current = cloneSource.id;\n setPerms(cloneSeed(cloneSource));\n }\n }, [mode, cloneSource]);\n\n const pickMode = (m: Mode) => {\n setMode(m);\n if (m === \"blank\") setPerms([]); // a fresh blank role starts with no grants\n };\n\n // Returning to the chooser abandons the current draft; allow a re-pick of the\n // same source to re-seed from scratch.\n const backToChoose = () => {\n setMode(\"choose\");\n seededSourceId.current = null;\n };\n\n const submit = async () => {\n const errs: Record<string, string> = {};\n const trimmedName = name.trim();\n if (!trimmedName) errs[\"role-name\"] = t.dict.validation.required;\n else if (trimmedName.length > 80)\n errs[\"role-name\"] = t.format(t.dict.validation.tooLong, { max: 80 });\n if (description.trim().length > 300)\n errs[\"role-description\"] = t.format(t.dict.validation.tooLong, { max: 300 });\n if (form.failClient(errs)) return;\n\n try {\n const role = await create.mutateAsync({\n name: trimmedName,\n description: description.trim() || undefined,\n permissions: perms,\n cloneFromRoleId: mode === \"clone\" ? cloneRoleId ?? undefined : undefined,\n });\n toast.success(t.format(t.dict.roles.create.createdToast, { name: role.name }));\n onCreated(role.id);\n } catch (err) {\n if (!form.applyServer(err, [\"role-name\", \"role-description\"])) {\n toast.error(t.dict.common.actionFailed);\n }\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-lg\">\n <div className=\"px-6 pt-6 pb-4\">\n <DialogHeader>\n <DialogTitle>{t.dict.roles.create.title}</DialogTitle>\n <DialogDescription>\n {mode === \"choose\" && t.dict.roles.create.descChoose}\n {mode === \"blank\" && t.dict.roles.create.descBlank}\n {mode === \"clone\" && !cloneRoleId && t.dict.roles.create.descClonePick}\n {mode === \"clone\" && cloneRoleId && t.dict.roles.create.descCloneName}\n </DialogDescription>\n </DialogHeader>\n </div>\n\n <div className=\"px-6 pb-6\">\n {mode === \"choose\" ? (\n <ChooseStep onPick={pickMode} hasRoles={!!roles && roles.length > 0} t={t} />\n ) : mode === \"clone\" && !cloneRoleId ? (\n <PickSourceStep roles={roles ?? []} onPick={(id) => setCloneRoleId(id)} t={t} />\n ) : (\n <NameStep\n cloneSource={mode === \"clone\" ? cloneSource ?? null : null}\n name={name}\n description={description}\n permissions={permissions}\n permissionsError={permissionsError}\n onRetryPermissions={() => void refetchPermissions()}\n perms={perms}\n onChangePerms={setPerms}\n onChangeName={(v) => {\n setName(v);\n form.clear(\"role-name\");\n }}\n onChangeDescription={(v) => {\n setDescription(v);\n form.clear(\"role-description\");\n }}\n errors={form.errors}\n formError={form.formError}\n onBack={backToChoose}\n onSubmit={() => void submit()}\n submitting={create.isPending}\n t={t}\n />\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction ChooseStep({\n onPick,\n hasRoles,\n t,\n}: {\n onPick: (mode: Mode) => void;\n hasRoles: boolean;\n t: Translator;\n}) {\n return (\n <div className=\"grid gap-2\">\n <ChooseCard\n icon={<Sparkles className=\"h-4 w-4\" />}\n title={t.dict.roles.create.blankTitle}\n description={t.dict.roles.create.blankDescription}\n onClick={() => onPick(\"blank\")}\n />\n <ChooseCard\n icon={<Copy className=\"h-4 w-4\" />}\n title={t.dict.roles.create.cloneTitle}\n description={\n hasRoles\n ? t.dict.roles.create.cloneDescriptionAvailable\n : t.dict.roles.create.cloneDescriptionUnavailable\n }\n onClick={() => onPick(\"clone\")}\n disabled={!hasRoles}\n />\n </div>\n );\n}\n\nfunction ChooseCard({\n icon,\n title,\n description,\n onClick,\n disabled,\n}: {\n icon: React.ReactNode;\n title: string;\n description: string;\n onClick: () => void;\n disabled?: boolean;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n className={cn(\n \"flex items-start gap-3 rounded-lg border border-border bg-card p-3 text-left transition-all\",\n \"hover:border-foreground/20 hover:bg-accent/50\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-card disabled:hover:border-border\",\n )}\n >\n <div className=\"mt-0.5 rounded-md bg-muted p-2 text-muted-foreground\">{icon}</div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-medium text-foreground\">{title}</div>\n <div className=\"mt-0.5 text-xs text-muted-foreground\">{description}</div>\n </div>\n </button>\n );\n}\n\nfunction PickSourceStep({\n roles,\n onPick,\n t,\n}: {\n roles: Role[];\n onPick: (id: string) => void;\n t: Translator;\n}) {\n return (\n <div className=\"space-y-2\">\n <p className=\"text-sm text-muted-foreground\">{t.dict.roles.create.pickSourcePrompt}</p>\n <ul className=\"space-y-1.5\" role=\"list\">\n {roles.map((r) => (\n <li key={r.id}>\n <button\n type=\"button\"\n onClick={() => onPick(r.id)}\n className={cn(\n \"flex w-full items-center justify-between gap-3 rounded-md border border-border bg-card px-3 py-2 text-left transition-all\",\n \"hover:border-foreground/20 hover:bg-accent/50\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n )}\n >\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2 text-sm font-medium text-foreground\">\n <span className=\"truncate\">{r.name}</span>\n {r.isSystem && (\n <Badge variant=\"muted\" className=\"shrink-0\">\n {t.dict.roles.systemBadge}\n </Badge>\n )}\n </div>\n {r.description && (\n <p className=\"mt-0.5 line-clamp-1 text-xs text-muted-foreground\">\n {r.description}\n </p>\n )}\n </div>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {r.permissions.includes(\"*\")\n ? t.dict.roles.rowAllPermissions\n : t.plural(t.dict.common.permission, r.permissions.length, {\n count: r.permissions.length,\n })}\n </span>\n </button>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\nfunction NameStep({\n cloneSource,\n name,\n description,\n permissions,\n permissionsError,\n onRetryPermissions,\n perms,\n onChangePerms,\n onChangeName,\n onChangeDescription,\n errors,\n formError,\n onBack,\n onSubmit,\n submitting,\n t,\n}: {\n cloneSource: Role | null;\n name: string;\n description: string;\n permissions: Permission[] | undefined;\n permissionsError: boolean;\n onRetryPermissions: () => void;\n perms: string[];\n onChangePerms: (next: string[]) => void;\n onChangeName: (v: string) => void;\n onChangeDescription: (v: string) => void;\n errors: FieldErrors;\n formError: string | null;\n onBack: () => void;\n onSubmit: () => void;\n submitting: boolean;\n t: Translator;\n}) {\n const isWildcard = perms.includes(\"*\");\n // A role must carry at least one permission to be meaningful (and the API\n // enforces it), so creation is gated here — never via a server-side error.\n const canSubmit = name.trim().length > 0 && perms.length > 0;\n\n const permissionsLabel = cloneSource\n ? cloneSource.permissions.includes(\"*\")\n ? t.dict.roles.rowAllPermissions.toLowerCase()\n : t.plural(t.dict.common.permission, cloneSource.permissions.length, {\n count: cloneSource.permissions.length,\n })\n : \"\";\n\n return (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n onSubmit();\n }}\n className=\"space-y-4\"\n >\n {cloneSource && (\n <div className=\"rounded-md border border-border bg-muted/30 px-3 py-2 text-xs text-muted-foreground\">\n {t.format(t.dict.roles.create.cloningFromBanner, {\n role: cloneSource.name,\n permissions: permissionsLabel,\n })}\n </div>\n )}\n\n <Field id=\"role-name\" label={t.dict.roles.create.nameField} error={errors[\"role-name\"]}>\n <Input\n autoFocus\n value={name}\n onChange={(e) => onChangeName(e.target.value)}\n placeholder={t.dict.roles.create.namePlaceholder}\n disabled={submitting}\n />\n </Field>\n <Field\n id=\"role-description\"\n label={t.dict.roles.create.descriptionField}\n error={errors[\"role-description\"]}\n >\n <Textarea\n value={description}\n onChange={(e) => onChangeDescription(e.target.value)}\n placeholder={t.dict.roles.create.descriptionPlaceholder}\n rows={2}\n disabled={submitting}\n />\n </Field>\n\n {/* Permissions are chosen here so a role is never created empty. */}\n <section className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium text-foreground\">\n {t.dict.roles.permissionsHeader}\n </span>\n {!isWildcard && permissions && (\n <span className=\"text-xs text-muted-foreground\">\n {t.format(t.dict.common.selectedCountOf, {\n selected: perms.length,\n total: permissions.length,\n })}\n </span>\n )}\n </div>\n {permissionsError ? (\n <div\n role=\"alert\"\n className=\"rounded-lg border border-destructive/40 bg-destructive/5 px-3 py-3 text-sm text-destructive\"\n >\n <p>{t.dict.roles.create.permissionsError}</p>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-2\"\n onClick={onRetryPermissions}\n >\n {t.dict.common.tryAgain}\n </Button>\n </div>\n ) : permissions ? (\n <div className=\"max-h-64 overflow-y-auto pr-1\">\n <PermissionPicker\n permissions={permissions}\n value={perms}\n onChange={onChangePerms}\n disabled={submitting}\n />\n </div>\n ) : (\n <Skeleton className=\"h-40 w-full\" />\n )}\n {permissions && !permissionsError && perms.length === 0 && (\n <p className=\"text-xs text-muted-foreground\">{t.dict.roles.create.permissionsHint}</p>\n )}\n </section>\n\n {formError && (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n {formError}\n </p>\n )}\n\n <div className=\"flex items-center justify-between gap-2 pt-2\">\n <Button type=\"button\" variant=\"ghost\" onClick={onBack} disabled={submitting}>\n {t.dict.common.back}\n </Button>\n <Button type=\"submit\" disabled={submitting || !canSubmit}>\n {submitting && <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />}\n {t.dict.roles.create.submit}\n </Button>\n </div>\n </form>\n );\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { Building2, Lock } from \"lucide-react\";\nimport { Skeleton } from \"../../ui/skeleton\";\nimport { EmptyState } from \"../shared/EmptyState\";\nimport { useMyBusinessUnits, useMyPermissions } from \"../../api/hooks\";\nimport { useT } from \"../../i18n/context\";\nimport { BUSelector } from \"./BUSelector\";\nimport { RolesList } from \"./RolesList\";\nimport { RoleEditor } from \"./RoleEditor\";\nimport { CreateRoleDialog } from \"./CreateRoleDialog\";\n\nexport function RolesTab() {\n const { data, isPending, isError } = useMyBusinessUnits();\n const { data: perms, isPending: permsPending } = useMyPermissions();\n const [activeBuId, setActiveBuId] = useState<string | null>(null);\n const [selectedRoleId, setSelectedRoleId] = useState<string | null>(null);\n const [creating, setCreating] = useState(false);\n const t = useT();\n\n // The role catalog is an Owner/Admin surface. Only offer (and default to) the\n // business units where the viewer can actually manage roles — a plain Member\n // then sees a single calm \"no access\" state below, instead of selecting a BU\n // and hitting a per-BU \"couldn't load\" error.\n const manageableBus = useMemo(() => {\n if (!data || !perms) return [];\n return data.memberships\n .map((m) => m.businessUnit)\n .filter((bu) => {\n const p = perms[bu.id];\n return !!p && (p.includes(\"*\") || p.includes(\"manage:Role\"));\n });\n }, [data, perms]);\n\n // Default to the first manageable BU; also recover if the active one falls out\n // of the manageable set (e.g. permissions changed mid-session).\n useEffect(() => {\n if (\n manageableBus.length > 0 &&\n (!activeBuId || !manageableBus.some((b) => b.id === activeBuId))\n ) {\n setActiveBuId(manageableBus[0]!.id);\n }\n }, [activeBuId, manageableBus]);\n\n if (isPending || permsPending) {\n return (\n <div className=\"space-y-3\">\n <Skeleton className=\"h-7 w-48\" />\n <Skeleton className=\"h-16 w-full\" />\n <Skeleton className=\"h-16 w-full\" />\n </div>\n );\n }\n\n if (isError) {\n return (\n <EmptyState\n title={t.dict.roles.couldNotLoad}\n description={t.dict.roles.couldNotLoadDescription}\n />\n );\n }\n\n if (data!.memberships.length === 0) {\n return (\n <EmptyState\n icon={<Building2 className=\"h-5 w-5\" />}\n title={t.dict.roles.noBusinessUnits}\n description={t.dict.businessUnits.emptyDescription}\n />\n );\n }\n\n // Has business units, but can't manage roles in any of them.\n if (manageableBus.length === 0) {\n return (\n <EmptyState\n icon={<Lock className=\"h-5 w-5\" />}\n title={t.dict.roles.noAccessTitle}\n description={t.dict.roles.noAccessDescription}\n />\n );\n }\n\n if (!activeBuId) return null;\n\n return (\n <div className=\"space-y-4 animate-in fade-in-0 duration-200\">\n <BUSelector\n businessUnits={manageableBus}\n value={activeBuId}\n onChange={(id) => {\n setActiveBuId(id);\n setSelectedRoleId(null);\n }}\n />\n\n {selectedRoleId ? (\n <RoleEditor\n buId={activeBuId}\n roleId={selectedRoleId}\n onBack={() => setSelectedRoleId(null)}\n />\n ) : (\n <RolesList\n buId={activeBuId}\n onSelect={setSelectedRoleId}\n onCreate={() => setCreating(true)}\n />\n )}\n\n <CreateRoleDialog\n buId={activeBuId}\n open={creating}\n onOpenChange={setCreating}\n onCreated={(roleId) => {\n setCreating(false);\n setSelectedRoleId(roleId);\n }}\n />\n </div>\n );\n}\n","import { useCallback, useState, type ReactNode } from \"react\";\nimport { Button } from \"../ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../ui/dialog\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../ui/tabs\";\nimport { appearanceToStyle, resolveColorScheme } from \"../appearance/appearance\";\nimport { useRoad } from \"../provider/context\";\nimport { useT } from \"../i18n/context\";\nimport { cn } from \"../lib/cn\";\nimport { BusinessUnitsTab } from \"./business-units/BusinessUnitsTab\";\nimport { RolesTab } from \"./roles/RolesTab\";\n\nexport type BusinessUnitsMgmtTab = \"business-units\" | \"roles\";\n\ninterface BusinessUnitsMgmtCommonProps {\n /** Tab to show on each open. Defaults to \"business-units\". */\n initialTab?: BusinessUnitsMgmtTab;\n /**\n * Deep-link into a specific business unit on each open — routes the Business\n * Units tab to that BU's detail view instead of the list.\n */\n initialBusinessUnitId?: string;\n}\n\n/**\n * Uncontrolled mode — component owns the open-state and renders a\n * trigger (default or the one passed via `trigger`). `open` and\n * `onOpenChange` MUST NOT be provided.\n */\ninterface BusinessUnitsMgmtUncontrolledProps extends BusinessUnitsMgmtCommonProps {\n trigger?: ReactNode;\n open?: never;\n onOpenChange?: never;\n}\n\n/**\n * Controlled mode — host owns the open-state and provides BOTH `open`\n * and `onOpenChange`. The discriminated union enforces this pairing at\n * compile time: `{ open: true }` without `onOpenChange` is a type\n * error.\n */\ninterface BusinessUnitsMgmtControlledProps extends BusinessUnitsMgmtCommonProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n trigger?: never;\n}\n\nexport type BusinessUnitsMgmtProps =\n | BusinessUnitsMgmtUncontrolledProps\n | BusinessUnitsMgmtControlledProps;\n\nexport function BusinessUnitsMgmt({\n trigger,\n open,\n onOpenChange,\n initialTab = \"business-units\",\n initialBusinessUnitId,\n}: BusinessUnitsMgmtProps) {\n const isControlled = open !== undefined;\n const { appearance } = useRoad();\n const t = useT();\n const scheme = resolveColorScheme(appearance?.colorScheme);\n const style = appearanceToStyle(appearance);\n\n // Bumped on each closed→open transition so the inner Tabs + BusinessUnitsTab\n // remount with fresh state — gives initialTab / initialBusinessUnitId\n // reliable deep-link semantics regardless of where the user left off.\n const [sessionId, setSessionId] = useState(0);\n const handleOpenChange = useCallback(\n (newOpen: boolean) => {\n if (newOpen) setSessionId((id) => id + 1);\n onOpenChange?.(newOpen);\n },\n [onOpenChange],\n );\n\n // Normalize initialTab to a tab that actually exists. Radix renders an empty\n // dialog when defaultValue matches no TabsTrigger, so an untyped JS caller\n // still passing the removed \"members\" value would otherwise see a blank pane.\n const defaultTab: BusinessUnitsMgmtTab = initialTab === \"roles\" ? \"roles\" : \"business-units\";\n\n return (\n <Dialog open={open} onOpenChange={handleOpenChange}>\n {!isControlled && (\n <span className={cn(\"road-ui inline-block\", scheme === \"dark\" && \"dark\")} style={style}>\n <DialogTrigger asChild>{trigger ?? <Button>{t.dict.shell.triggerLabel}</Button>}</DialogTrigger>\n </span>\n )}\n <DialogContent className=\"max-w-4xl\">\n <Tabs key={sessionId} defaultValue={defaultTab} className=\"flex min-h-0 flex-1 flex-col\">\n <div className=\"border-b border-border px-6 pt-6 pb-3 space-y-3\">\n <DialogHeader>\n <DialogTitle>{t.dict.shell.modalTitle}</DialogTitle>\n <DialogDescription>{t.dict.shell.modalDescription}</DialogDescription>\n </DialogHeader>\n <TabsList>\n <TabsTrigger value=\"business-units\">{t.dict.shell.tabBusinessUnits}</TabsTrigger>\n <TabsTrigger value=\"roles\">{t.dict.shell.tabRoles}</TabsTrigger>\n </TabsList>\n </div>\n\n <div className=\"min-h-0 flex-1 overflow-y-auto px-6 py-4\">\n <TabsContent value=\"business-units\" className=\"mt-0\">\n <BusinessUnitsTab initialBuId={initialBusinessUnitId ?? null} />\n </TabsContent>\n <TabsContent value=\"roles\" className=\"mt-0\">\n <RolesTab />\n </TabsContent>\n </div>\n </Tabs>\n </DialogContent>\n </Dialog>\n );\n}\n\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs, composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SELECTION_KEYS = [\"Enter\", \" \"];\nvar FIRST_KEYS = [\"ArrowDown\", \"PageUp\", \"Home\"];\nvar LAST_KEYS = [\"ArrowUp\", \"PageDown\", \"End\"];\nvar FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];\nvar SUB_OPEN_KEYS = {\n ltr: [...SELECTION_KEYS, \"ArrowRight\"],\n rtl: [...SELECTION_KEYS, \"ArrowLeft\"]\n};\nvar SUB_CLOSE_KEYS = {\n ltr: [\"ArrowLeft\"],\n rtl: [\"ArrowRight\"]\n};\nvar MENU_NAME = \"Menu\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(MENU_NAME);\nvar [createMenuContext, createMenuScope] = createContextScope(MENU_NAME, [\n createCollectionScope,\n createPopperScope,\n createRovingFocusGroupScope\n]);\nvar usePopperScope = createPopperScope();\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [MenuProvider, useMenuContext] = createMenuContext(MENU_NAME);\nvar [MenuRootProvider, useMenuRootContext] = createMenuContext(MENU_NAME);\nvar Menu = (props) => {\n const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props;\n const popperScope = usePopperScope(__scopeMenu);\n const [content, setContent] = React.useState(null);\n const isUsingKeyboardRef = React.useRef(false);\n const handleOpenChange = useCallbackRef(onOpenChange);\n const direction = useDirection(dir);\n React.useEffect(() => {\n const handleKeyDown = () => {\n isUsingKeyboardRef.current = true;\n document.addEventListener(\"pointerdown\", handlePointer, { capture: true, once: true });\n document.addEventListener(\"pointermove\", handlePointer, { capture: true, once: true });\n };\n const handlePointer = () => isUsingKeyboardRef.current = false;\n document.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n document.removeEventListener(\"pointerdown\", handlePointer, { capture: true });\n document.removeEventListener(\"pointermove\", handlePointer, { capture: true });\n };\n }, []);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuRootProvider,\n {\n scope: __scopeMenu,\n onClose: React.useCallback(() => handleOpenChange(false), [handleOpenChange]),\n isUsingKeyboardRef,\n dir: direction,\n modal,\n children\n }\n )\n }\n ) });\n};\nMenu.displayName = MENU_NAME;\nvar ANCHOR_NAME = \"MenuAnchor\";\nvar MenuAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...anchorProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }\n);\nMenuAnchor.displayName = ANCHOR_NAME;\nvar PORTAL_NAME = \"MenuPortal\";\nvar [PortalProvider, usePortalContext] = createMenuContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar MenuPortal = (props) => {\n const { __scopeMenu, forceMount, children, container } = props;\n const context = useMenuContext(PORTAL_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeMenu, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"MenuContent\";\nvar [MenuContentProvider, useMenuContentContext] = createMenuContext(CONTENT_NAME);\nvar MenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: rootContext.modal ? /* @__PURE__ */ jsx(MenuRootContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(MenuRootContentNonModal, { ...contentProps, ref: forwardedRef }) }) }) });\n }\n);\nvar MenuRootContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const content = ref.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: context.open,\n disableOutsideScroll: true,\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n ),\n onDismiss: () => context.onOpenChange(false)\n }\n );\n }\n);\nvar MenuRootContentNonModal = React.forwardRef((props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n onDismiss: () => context.onOpenChange(false)\n }\n );\n});\nvar Slot = createSlot(\"MenuContent.ScrollLock\");\nvar MenuContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeMenu,\n loop = false,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEntryFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n disableOutsideScroll,\n ...contentProps\n } = props;\n const context = useMenuContext(CONTENT_NAME, __scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const getItems = useCollection(__scopeMenu);\n const [currentItemId, setCurrentItemId] = React.useState(null);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef, context.onContentChange);\n const timerRef = React.useRef(0);\n const searchRef = React.useRef(\"\");\n const pointerGraceTimerRef = React.useRef(0);\n const pointerGraceIntentRef = React.useRef(null);\n const pointerDirRef = React.useRef(\"right\");\n const lastPointerXRef = React.useRef(0);\n const ScrollLockWrapper = disableOutsideScroll ? RemoveScroll : React.Fragment;\n const scrollLockWrapperProps = disableOutsideScroll ? { as: Slot, allowPinchZoom: true } : void 0;\n const handleTypeaheadSearch = (key) => {\n const search = searchRef.current + key;\n const items = getItems().filter((item) => !item.disabled);\n const currentItem = document.activeElement;\n const currentMatch = items.find((item) => item.ref.current === currentItem)?.textValue;\n const values = items.map((item) => item.textValue);\n const nextMatch = getNextMatch(values, search, currentMatch);\n const newItem = items.find((item) => item.textValue === nextMatch)?.ref.current;\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n if (newItem) {\n setTimeout(() => newItem.focus());\n }\n };\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n useFocusGuards();\n const isPointerMovingToSubmenu = React.useCallback((event) => {\n const isMovingTowards = pointerDirRef.current === pointerGraceIntentRef.current?.side;\n return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef.current?.area);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentProvider,\n {\n scope: __scopeMenu,\n searchRef,\n onItemEnter: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n onItemLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) return;\n contentRef.current?.focus();\n setCurrentItemId(null);\n },\n [isPointerMovingToSubmenu]\n ),\n onTriggerLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n pointerGraceTimerRef,\n onPointerGraceIntentChange: React.useCallback((intent) => {\n pointerGraceIntentRef.current = intent;\n }, []),\n children: /* @__PURE__ */ jsx(ScrollLockWrapper, { ...scrollLockWrapperProps, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: trapFocus,\n onMountAutoFocus: composeEventHandlers(onOpenAutoFocus, (event) => {\n event.preventDefault();\n contentRef.current?.focus({ preventScroll: true });\n }),\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n children: /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n dir: rootContext.dir,\n orientation: \"vertical\",\n loop,\n currentTabStopId: currentItemId,\n onCurrentTabStopIdChange: setCurrentItemId,\n onEntryFocus: composeEventHandlers(onEntryFocus, (event) => {\n if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();\n }),\n preventScrollOnEntryFocus: true,\n children: /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n role: \"menu\",\n \"aria-orientation\": \"vertical\",\n \"data-state\": getOpenState(context.open),\n \"data-radix-menu-content\": \"\",\n dir: rootContext.dir,\n ...popperScope,\n ...contentProps,\n ref: composedRefs,\n style: { outline: \"none\", ...contentProps.style },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const target = event.target;\n const isKeyDownInside = target.closest(\"[data-radix-menu-content]\") === event.currentTarget;\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n const isCharacterKey = event.key.length === 1;\n if (isKeyDownInside) {\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);\n }\n const content = contentRef.current;\n if (event.target !== content) return;\n if (!FIRST_LAST_KEYS.includes(event.key)) return;\n event.preventDefault();\n const items = getItems().filter((item) => !item.disabled);\n const candidateNodes = items.map((item) => item.ref.current);\n if (LAST_KEYS.includes(event.key)) candidateNodes.reverse();\n focusFirst(candidateNodes);\n }),\n onBlur: composeEventHandlers(props.onBlur, (event) => {\n if (!event.currentTarget.contains(event.target)) {\n window.clearTimeout(timerRef.current);\n searchRef.current = \"\";\n }\n }),\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n const target = event.target;\n const pointerXHasChanged = lastPointerXRef.current !== event.clientX;\n if (event.currentTarget.contains(target) && pointerXHasChanged) {\n const newDir = event.clientX > lastPointerXRef.current ? \"right\" : \"left\";\n pointerDirRef.current = newDir;\n lastPointerXRef.current = event.clientX;\n }\n })\n )\n }\n )\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"MenuGroup\";\nvar MenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...groupProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", ...groupProps, ref: forwardedRef });\n }\n);\nMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"MenuLabel\";\nvar MenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...labelProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { ...labelProps, ref: forwardedRef });\n }\n);\nMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"MenuItem\";\nvar ITEM_SELECT = \"menu.itemSelect\";\nvar MenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { disabled = false, onSelect, ...itemProps } = props;\n const ref = React.useRef(null);\n const rootContext = useMenuRootContext(ITEM_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(ITEM_NAME, props.__scopeMenu);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const isPointerDownRef = React.useRef(false);\n const handleSelect = () => {\n const menuItem = ref.current;\n if (!disabled && menuItem) {\n const itemSelectEvent = new CustomEvent(ITEM_SELECT, { bubbles: true, cancelable: true });\n menuItem.addEventListener(ITEM_SELECT, (event) => onSelect?.(event), { once: true });\n dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);\n if (itemSelectEvent.defaultPrevented) {\n isPointerDownRef.current = false;\n } else {\n rootContext.onClose();\n }\n }\n };\n return /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n ...itemProps,\n ref: composedRefs,\n disabled,\n onClick: composeEventHandlers(props.onClick, handleSelect),\n onPointerDown: (event) => {\n props.onPointerDown?.(event);\n isPointerDownRef.current = true;\n },\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n if (!isPointerDownRef.current) event.currentTarget?.click();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (disabled || isTypingAhead && event.key === \" \") return;\n if (SELECTION_KEYS.includes(event.key)) {\n event.currentTarget.click();\n event.preventDefault();\n }\n })\n }\n );\n }\n);\nMenuItem.displayName = ITEM_NAME;\nvar MenuItemImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, disabled = false, textValue, ...itemProps } = props;\n const contentContext = useMenuContentContext(ITEM_NAME, __scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [isFocused, setIsFocused] = React.useState(false);\n const [textContent, setTextContent] = React.useState(\"\");\n React.useEffect(() => {\n const menuItem = ref.current;\n if (menuItem) {\n setTextContent((menuItem.textContent ?? \"\").trim());\n }\n }, [itemProps.children]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeMenu,\n disabled,\n textValue: textValue ?? textContent,\n children: /* @__PURE__ */ jsx(RovingFocusGroup.Item, { asChild: true, ...rovingFocusGroupScope, focusable: !disabled, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"menuitem\",\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n ...itemProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n if (disabled) {\n contentContext.onItemLeave(event);\n } else {\n contentContext.onItemEnter(event);\n if (!event.defaultPrevented) {\n const item = event.currentTarget;\n item.focus({ preventScroll: true });\n }\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => contentContext.onItemLeave(event))\n ),\n onFocus: composeEventHandlers(props.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(props.onBlur, () => setIsFocused(false))\n }\n ) })\n }\n );\n }\n);\nvar CHECKBOX_ITEM_NAME = \"MenuCheckboxItem\";\nvar MenuCheckboxItem = React.forwardRef(\n (props, forwardedRef) => {\n const { checked = false, onCheckedChange, ...checkboxItemProps } = props;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemcheckbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n ...checkboxItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n checkboxItemProps.onSelect,\n () => onCheckedChange?.(isIndeterminate(checked) ? true : !checked),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"MenuRadioGroup\";\nvar [RadioGroupProvider, useRadioGroupContext] = createMenuContext(\n RADIO_GROUP_NAME,\n { value: void 0, onValueChange: () => {\n } }\n);\nvar MenuRadioGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { value, onValueChange, ...groupProps } = props;\n const handleValueChange = useCallbackRef(onValueChange);\n return /* @__PURE__ */ jsx(RadioGroupProvider, { scope: props.__scopeMenu, value, onValueChange: handleValueChange, children: /* @__PURE__ */ jsx(MenuGroup, { ...groupProps, ref: forwardedRef }) });\n }\n);\nMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"MenuRadioItem\";\nvar MenuRadioItem = React.forwardRef(\n (props, forwardedRef) => {\n const { value, ...radioItemProps } = props;\n const context = useRadioGroupContext(RADIO_ITEM_NAME, props.__scopeMenu);\n const checked = value === context.value;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemradio\",\n \"aria-checked\": checked,\n ...radioItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n radioItemProps.onSelect,\n () => context.onValueChange?.(value),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar ITEM_INDICATOR_NAME = \"MenuItemIndicator\";\nvar [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext(\n ITEM_INDICATOR_NAME,\n { checked: false }\n);\nvar MenuItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, forceMount, ...itemIndicatorProps } = props;\n const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(\n Presence,\n {\n present: forceMount || isIndeterminate(indicatorContext.checked) || indicatorContext.checked === true,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...itemIndicatorProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(indicatorContext.checked)\n }\n )\n }\n );\n }\n);\nMenuItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SEPARATOR_NAME = \"MenuSeparator\";\nvar MenuSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"separator\",\n \"aria-orientation\": \"horizontal\",\n ...separatorProps,\n ref: forwardedRef\n }\n );\n }\n);\nMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"MenuArrow\";\nvar MenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nMenuArrow.displayName = ARROW_NAME;\nvar SUB_NAME = \"MenuSub\";\nvar [MenuSubProvider, useMenuSubContext] = createMenuContext(SUB_NAME);\nvar MenuSub = (props) => {\n const { __scopeMenu, children, open = false, onOpenChange } = props;\n const parentMenuContext = useMenuContext(SUB_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const [trigger, setTrigger] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const handleOpenChange = useCallbackRef(onOpenChange);\n React.useEffect(() => {\n if (parentMenuContext.open === false) handleOpenChange(false);\n return () => handleOpenChange(false);\n }, [parentMenuContext.open, handleOpenChange]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuSubProvider,\n {\n scope: __scopeMenu,\n contentId: useId(),\n triggerId: useId(),\n trigger,\n onTriggerChange: setTrigger,\n children\n }\n )\n }\n ) });\n};\nMenuSub.displayName = SUB_NAME;\nvar SUB_TRIGGER_NAME = \"MenuSubTrigger\";\nvar MenuSubTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const openTimerRef = React.useRef(null);\n const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;\n const scope = { __scopeMenu: props.__scopeMenu };\n const clearOpenTimer = React.useCallback(() => {\n if (openTimerRef.current) window.clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }, []);\n React.useEffect(() => clearOpenTimer, [clearOpenTimer]);\n React.useEffect(() => {\n const pointerGraceTimer = pointerGraceTimerRef.current;\n return () => {\n window.clearTimeout(pointerGraceTimer);\n onPointerGraceIntentChange(null);\n };\n }, [pointerGraceTimerRef, onPointerGraceIntentChange]);\n return /* @__PURE__ */ jsx(MenuAnchor, { asChild: true, ...scope, children: /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n id: subContext.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": subContext.contentId,\n \"data-state\": getOpenState(context.open),\n ...props,\n ref: composeRefs(forwardedRef, subContext.onTriggerChange),\n onClick: (event) => {\n props.onClick?.(event);\n if (props.disabled || event.defaultPrevented) return;\n event.currentTarget.focus();\n if (!context.open) context.onOpenChange(true);\n },\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n contentContext.onItemEnter(event);\n if (event.defaultPrevented) return;\n if (!props.disabled && !context.open && !openTimerRef.current) {\n contentContext.onPointerGraceIntentChange(null);\n openTimerRef.current = window.setTimeout(() => {\n context.onOpenChange(true);\n clearOpenTimer();\n }, 100);\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => {\n clearOpenTimer();\n const contentRect = context.content?.getBoundingClientRect();\n if (contentRect) {\n const side = context.content?.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 contentContext.onPointerGraceIntentChange({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: event.clientX + bleed, y: event.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(pointerGraceTimerRef.current);\n pointerGraceTimerRef.current = window.setTimeout(\n () => contentContext.onPointerGraceIntentChange(null),\n 300\n );\n } else {\n contentContext.onTriggerLeave(event);\n if (event.defaultPrevented) return;\n contentContext.onPointerGraceIntentChange(null);\n }\n })\n ),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (props.disabled || isTypingAhead && event.key === \" \") return;\n if (SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {\n context.onOpenChange(true);\n context.content?.focus();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"MenuSubContent\";\nvar MenuSubContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...subContentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n id: subContext.contentId,\n \"aria-labelledby\": subContext.triggerId,\n ...subContentProps,\n ref: composedRefs,\n align: \"start\",\n side: rootContext.dir === \"rtl\" ? \"left\" : \"right\",\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n trapFocus: false,\n onOpenAutoFocus: (event) => {\n if (rootContext.isUsingKeyboardRef.current) ref.current?.focus();\n event.preventDefault();\n },\n onCloseAutoFocus: (event) => event.preventDefault(),\n onFocusOutside: composeEventHandlers(props.onFocusOutside, (event) => {\n if (event.target !== subContext.trigger) context.onOpenChange(false);\n }),\n onEscapeKeyDown: composeEventHandlers(props.onEscapeKeyDown, (event) => {\n rootContext.onClose();\n event.preventDefault();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isKeyDownInside = event.currentTarget.contains(event.target);\n const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);\n if (isKeyDownInside && isCloseKey) {\n context.onOpenChange(false);\n subContext.trigger?.focus();\n event.preventDefault();\n }\n })\n }\n ) }) }) });\n }\n);\nMenuSubContent.displayName = SUB_CONTENT_NAME;\nfunction getOpenState(open) {\n return open ? \"open\" : \"closed\";\n}\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getCheckedState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nfunction focusFirst(candidates) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nfunction getNextMatch(values, search, currentMatch) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1;\n let wrappedValues = wrapArray(values, Math.max(currentMatchIndex, 0));\n const excludeCurrentMatch = normalizedSearch.length === 1;\n if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v) => v !== currentMatch);\n const nextMatch = wrappedValues.find(\n (value) => value.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextMatch !== currentMatch ? nextMatch : void 0;\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 ii = polygon[i];\n const jj = polygon[j];\n const xi = ii.x;\n const yi = ii.y;\n const xj = jj.x;\n const yj = jj.y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\nfunction isPointerInGraceArea(event, area) {\n if (!area) return false;\n const cursorPos = { x: event.clientX, y: event.clientY };\n return isPointInPolygon(cursorPos, area);\n}\nfunction whenMouse(handler) {\n return (event) => event.pointerType === \"mouse\" ? handler(event) : void 0;\n}\nvar Root3 = Menu;\nvar Anchor2 = MenuAnchor;\nvar Portal = MenuPortal;\nvar Content2 = MenuContent;\nvar Group = MenuGroup;\nvar Label = MenuLabel;\nvar Item2 = MenuItem;\nvar CheckboxItem = MenuCheckboxItem;\nvar RadioGroup = MenuRadioGroup;\nvar RadioItem = MenuRadioItem;\nvar ItemIndicator = MenuItemIndicator;\nvar Separator = MenuSeparator;\nvar Arrow2 = MenuArrow;\nvar Sub = MenuSub;\nvar SubTrigger = MenuSubTrigger;\nvar SubContent = MenuSubContent;\nexport {\n Anchor2 as Anchor,\n Arrow2 as Arrow,\n CheckboxItem,\n Content2 as Content,\n Group,\n Item2 as Item,\n ItemIndicator,\n Label,\n Menu,\n MenuAnchor,\n MenuArrow,\n MenuCheckboxItem,\n MenuContent,\n MenuGroup,\n MenuItem,\n MenuItemIndicator,\n MenuLabel,\n MenuPortal,\n MenuRadioGroup,\n MenuRadioItem,\n MenuSeparator,\n MenuSub,\n MenuSubContent,\n MenuSubTrigger,\n Portal,\n RadioGroup,\n RadioItem,\n Root3 as Root,\n Separator,\n Sub,\n SubContent,\n SubTrigger,\n createMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dropdown-menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as MenuPrimitive from \"@radix-ui/react-menu\";\nimport { createMenuScope } from \"@radix-ui/react-menu\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DROPDOWN_MENU_NAME = \"DropdownMenu\";\nvar [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(\n DROPDOWN_MENU_NAME,\n [createMenuScope]\n);\nvar useMenuScope = createMenuScope();\nvar [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);\nvar DropdownMenu = (props) => {\n const {\n __scopeDropdownMenu,\n children,\n dir,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const triggerRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DROPDOWN_MENU_NAME\n });\n return /* @__PURE__ */ jsx(\n DropdownMenuProvider,\n {\n scope: __scopeDropdownMenu,\n triggerId: useId(),\n triggerRef,\n contentId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children: /* @__PURE__ */ jsx(MenuPrimitive.Root, { ...menuScope, open, onOpenChange: setOpen, dir, modal, children })\n }\n );\n};\nDropdownMenu.displayName = DROPDOWN_MENU_NAME;\nvar TRIGGER_NAME = \"DropdownMenuTrigger\";\nvar DropdownMenuTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;\n const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Anchor, { asChild: true, ...menuScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n id: context.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.open ? context.contentId : void 0,\n \"data-state\": context.open ? \"open\" : \"closed\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n ...triggerProps,\n ref: composeRefs(forwardedRef, context.triggerRef),\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onOpenToggle();\n if (!context.open) event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (disabled) return;\n if ([\"Enter\", \" \"].includes(event.key)) context.onOpenToggle();\n if (event.key === \"ArrowDown\") context.onOpenChange(true);\n if ([\"Enter\", \" \", \"ArrowDown\"].includes(event.key)) event.preventDefault();\n })\n }\n ) });\n }\n);\nDropdownMenuTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DropdownMenuPortal\";\nvar DropdownMenuPortal = (props) => {\n const { __scopeDropdownMenu, ...portalProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Portal, { ...menuScope, ...portalProps });\n};\nDropdownMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"DropdownMenuContent\";\nvar DropdownMenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...contentProps } = props;\n const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const hasInteractedOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.Content,\n {\n id: context.contentId,\n \"aria-labelledby\": context.triggerId,\n ...menuScope,\n ...contentProps,\n ref: forwardedRef,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n hasInteractedOutsideRef.current = false;\n event.preventDefault();\n }),\n onInteractOutside: composeEventHandlers(props.onInteractOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;\n }),\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n }\n);\nDropdownMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"DropdownMenuGroup\";\nvar DropdownMenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...groupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Group, { ...menuScope, ...groupProps, ref: forwardedRef });\n }\n);\nDropdownMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"DropdownMenuLabel\";\nvar DropdownMenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...labelProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Label, { ...menuScope, ...labelProps, ref: forwardedRef });\n }\n);\nDropdownMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"DropdownMenuItem\";\nvar DropdownMenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Item, { ...menuScope, ...itemProps, ref: forwardedRef });\n }\n);\nDropdownMenuItem.displayName = ITEM_NAME;\nvar CHECKBOX_ITEM_NAME = \"DropdownMenuCheckboxItem\";\nvar DropdownMenuCheckboxItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...checkboxItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.CheckboxItem, { ...menuScope, ...checkboxItemProps, ref: forwardedRef });\n});\nDropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"DropdownMenuRadioGroup\";\nvar DropdownMenuRadioGroup = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioGroupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioGroup, { ...menuScope, ...radioGroupProps, ref: forwardedRef });\n});\nDropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"DropdownMenuRadioItem\";\nvar DropdownMenuRadioItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioItem, { ...menuScope, ...radioItemProps, ref: forwardedRef });\n});\nDropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar INDICATOR_NAME = \"DropdownMenuItemIndicator\";\nvar DropdownMenuItemIndicator = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemIndicatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.ItemIndicator, { ...menuScope, ...itemIndicatorProps, ref: forwardedRef });\n});\nDropdownMenuItemIndicator.displayName = INDICATOR_NAME;\nvar SEPARATOR_NAME = \"DropdownMenuSeparator\";\nvar DropdownMenuSeparator = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...separatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Separator, { ...menuScope, ...separatorProps, ref: forwardedRef });\n});\nDropdownMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"DropdownMenuArrow\";\nvar DropdownMenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...arrowProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Arrow, { ...menuScope, ...arrowProps, ref: forwardedRef });\n }\n);\nDropdownMenuArrow.displayName = ARROW_NAME;\nvar DropdownMenuSub = (props) => {\n const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: \"DropdownMenuSub\"\n });\n return /* @__PURE__ */ jsx(MenuPrimitive.Sub, { ...menuScope, open, onOpenChange: setOpen, children });\n};\nvar SUB_TRIGGER_NAME = \"DropdownMenuSubTrigger\";\nvar DropdownMenuSubTrigger = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...subTriggerProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.SubTrigger, { ...menuScope, ...subTriggerProps, ref: forwardedRef });\n});\nDropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"DropdownMenuSubContent\";\nvar DropdownMenuSubContent = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...subContentProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.SubContent,\n {\n ...menuScope,\n ...subContentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nDropdownMenuSubContent.displayName = SUB_CONTENT_NAME;\nvar Root2 = DropdownMenu;\nvar Trigger = DropdownMenuTrigger;\nvar Portal2 = DropdownMenuPortal;\nvar Content2 = DropdownMenuContent;\nvar Group2 = DropdownMenuGroup;\nvar Label2 = DropdownMenuLabel;\nvar Item2 = DropdownMenuItem;\nvar CheckboxItem2 = DropdownMenuCheckboxItem;\nvar RadioGroup2 = DropdownMenuRadioGroup;\nvar RadioItem2 = DropdownMenuRadioItem;\nvar ItemIndicator2 = DropdownMenuItemIndicator;\nvar Separator2 = DropdownMenuSeparator;\nvar Arrow2 = DropdownMenuArrow;\nvar Sub2 = DropdownMenuSub;\nvar SubTrigger2 = DropdownMenuSubTrigger;\nvar SubContent2 = DropdownMenuSubContent;\nexport {\n Arrow2 as Arrow,\n CheckboxItem2 as CheckboxItem,\n Content2 as Content,\n DropdownMenu,\n DropdownMenuArrow,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuItemIndicator,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n Group2 as Group,\n Item2 as Item,\n ItemIndicator2 as ItemIndicator,\n Label2 as Label,\n Portal2 as Portal,\n RadioGroup2 as RadioGroup,\n RadioItem2 as RadioItem,\n Root2 as Root,\n Separator2 as Separator,\n Sub2 as Sub,\n SubContent2 as SubContent,\n SubTrigger2 as SubTrigger,\n Trigger,\n createDropdownMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","import { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { cn } from \"../lib/cn\";\nimport { appearanceToStyle, resolveColorScheme } from \"../appearance/appearance\";\nimport { useRoad } from \"../provider/context\";\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root;\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\nexport const DropdownMenuSeparator = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = \"DropdownMenuSeparator\";\n\nexport const DropdownMenuLabel = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Label>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-xs font-medium text-muted-foreground\", className)}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = \"DropdownMenuLabel\";\n\nexport const DropdownMenuContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 6, ...props }, ref) => {\n const { appearance } = useRoad();\n const scheme = resolveColorScheme(appearance?.colorScheme);\n const style = appearanceToStyle(appearance);\n\n return (\n <DropdownMenuPrimitive.Portal>\n <div className={cn(\"road-ui\", scheme === \"dark\" && \"dark\")} style={style}>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-[70] min-w-[16rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-lg\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n {...props}\n />\n </div>\n </DropdownMenuPrimitive.Portal>\n );\n});\nDropdownMenuContent.displayName = \"DropdownMenuContent\";\n\nexport const DropdownMenuItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Item>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none\",\n \"focus:bg-accent focus:text-accent-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = \"DropdownMenuItem\";\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tooltip.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport * as VisuallyHiddenPrimitive from \"@radix-ui/react-visually-hidden\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar [createTooltipContext, createTooltipScope] = createContextScope(\"Tooltip\", [\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar PROVIDER_NAME = \"TooltipProvider\";\nvar DEFAULT_DELAY_DURATION = 700;\nvar TOOLTIP_OPEN = \"tooltip.open\";\nvar [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME);\nvar TooltipProvider = (props) => {\n const {\n __scopeTooltip,\n delayDuration = DEFAULT_DELAY_DURATION,\n skipDelayDuration = 300,\n disableHoverableContent = false,\n children\n } = props;\n const isOpenDelayedRef = React.useRef(true);\n const isPointerInTransitRef = React.useRef(false);\n const skipDelayTimerRef = React.useRef(0);\n React.useEffect(() => {\n const skipDelayTimer = skipDelayTimerRef.current;\n return () => window.clearTimeout(skipDelayTimer);\n }, []);\n return /* @__PURE__ */ jsx(\n TooltipProviderContextProvider,\n {\n scope: __scopeTooltip,\n isOpenDelayedRef,\n delayDuration,\n onOpen: React.useCallback(() => {\n window.clearTimeout(skipDelayTimerRef.current);\n isOpenDelayedRef.current = false;\n }, []),\n onClose: React.useCallback(() => {\n window.clearTimeout(skipDelayTimerRef.current);\n skipDelayTimerRef.current = window.setTimeout(\n () => isOpenDelayedRef.current = true,\n skipDelayDuration\n );\n }, [skipDelayDuration]),\n isPointerInTransitRef,\n onPointerInTransitChange: React.useCallback((inTransit) => {\n isPointerInTransitRef.current = inTransit;\n }, []),\n disableHoverableContent,\n children\n }\n );\n};\nTooltipProvider.displayName = PROVIDER_NAME;\nvar TOOLTIP_NAME = \"Tooltip\";\nvar [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);\nvar Tooltip = (props) => {\n const {\n __scopeTooltip,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n disableHoverableContent: disableHoverableContentProp,\n delayDuration: delayDurationProp\n } = props;\n const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const [trigger, setTrigger] = React.useState(null);\n const contentId = useId();\n const openTimerRef = React.useRef(0);\n const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;\n const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n const wasOpenDelayedRef = React.useRef(false);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: (open2) => {\n if (open2) {\n providerContext.onOpen();\n document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n } else {\n providerContext.onClose();\n }\n onOpenChange?.(open2);\n },\n caller: TOOLTIP_NAME\n });\n const stateAttribute = React.useMemo(() => {\n return open ? wasOpenDelayedRef.current ? \"delayed-open\" : \"instant-open\" : \"closed\";\n }, [open]);\n const handleOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n wasOpenDelayedRef.current = false;\n setOpen(true);\n }, [setOpen]);\n const handleClose = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n setOpen(false);\n }, [setOpen]);\n const handleDelayedOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = window.setTimeout(() => {\n wasOpenDelayedRef.current = true;\n setOpen(true);\n openTimerRef.current = 0;\n }, delayDuration);\n }, [delayDuration, setOpen]);\n React.useEffect(() => {\n return () => {\n if (openTimerRef.current) {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n };\n }, []);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n TooltipContextProvider,\n {\n scope: __scopeTooltip,\n contentId,\n open,\n stateAttribute,\n trigger,\n onTriggerChange: setTrigger,\n onTriggerEnter: React.useCallback(() => {\n if (providerContext.isOpenDelayedRef.current) handleDelayedOpen();\n else handleOpen();\n }, [providerContext.isOpenDelayedRef, handleDelayedOpen, handleOpen]),\n onTriggerLeave: React.useCallback(() => {\n if (disableHoverableContent) {\n handleClose();\n } else {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n }, [handleClose, disableHoverableContent]),\n onOpen: handleOpen,\n onClose: handleClose,\n disableHoverableContent,\n children\n }\n ) });\n};\nTooltip.displayName = TOOLTIP_NAME;\nvar TRIGGER_NAME = \"TooltipTrigger\";\nvar TooltipTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTooltip, ...triggerProps } = props;\n const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n const isPointerDownRef = React.useRef(false);\n const hasPointerMoveOpenedRef = React.useRef(false);\n const handlePointerUp = React.useCallback(() => isPointerDownRef.current = false, []);\n React.useEffect(() => {\n return () => document.removeEventListener(\"pointerup\", handlePointerUp);\n }, [handlePointerUp]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n \"aria-describedby\": context.open ? context.contentId : void 0,\n \"data-state\": context.stateAttribute,\n ...triggerProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n if (event.pointerType === \"touch\") return;\n if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {\n context.onTriggerEnter();\n hasPointerMoveOpenedRef.current = true;\n }\n }),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {\n context.onTriggerLeave();\n hasPointerMoveOpenedRef.current = false;\n }),\n onPointerDown: composeEventHandlers(props.onPointerDown, () => {\n if (context.open) {\n context.onClose();\n }\n isPointerDownRef.current = true;\n document.addEventListener(\"pointerup\", handlePointerUp, { once: true });\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n if (!isPointerDownRef.current) context.onOpen();\n }),\n onBlur: composeEventHandlers(props.onBlur, context.onClose),\n onClick: composeEventHandlers(props.onClick, context.onClose)\n }\n ) });\n }\n);\nTooltipTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"TooltipPortal\";\nvar [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar TooltipPortal = (props) => {\n const { __scopeTooltip, forceMount, children, container } = props;\n const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nTooltipPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"TooltipContent\";\nvar TooltipContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n const { forceMount = portalContext.forceMount, side = \"top\", ...contentProps } = props;\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ jsx(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) });\n }\n);\nvar TooltipContentHoverable = React.forwardRef((props, forwardedRef) => {\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [pointerGraceArea, setPointerGraceArea] = React.useState(null);\n const { trigger, onClose } = context;\n const content = ref.current;\n const { onPointerInTransitChange } = providerContext;\n const handleRemoveGraceArea = React.useCallback(() => {\n setPointerGraceArea(null);\n onPointerInTransitChange(false);\n }, [onPointerInTransitChange]);\n const handleCreateGraceArea = React.useCallback(\n (event, hoverTarget) => {\n const currentTarget = event.currentTarget;\n const exitPoint = { x: event.clientX, y: event.clientY };\n const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n setPointerGraceArea(graceArea);\n onPointerInTransitChange(true);\n },\n [onPointerInTransitChange]\n );\n React.useEffect(() => {\n return () => handleRemoveGraceArea();\n }, [handleRemoveGraceArea]);\n React.useEffect(() => {\n if (trigger && content) {\n const handleTriggerLeave = (event) => handleCreateGraceArea(event, content);\n const handleContentLeave = (event) => handleCreateGraceArea(event, trigger);\n trigger.addEventListener(\"pointerleave\", handleTriggerLeave);\n content.addEventListener(\"pointerleave\", handleContentLeave);\n return () => {\n trigger.removeEventListener(\"pointerleave\", handleTriggerLeave);\n content.removeEventListener(\"pointerleave\", handleContentLeave);\n };\n }\n }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n React.useEffect(() => {\n if (pointerGraceArea) {\n const handleTrackPointerGrace = (event) => {\n const target = event.target;\n const pointerPosition = { x: event.clientX, y: event.clientY };\n const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n if (hasEnteredTarget) {\n handleRemoveGraceArea();\n } else if (isPointerOutsideGraceArea) {\n handleRemoveGraceArea();\n onClose();\n }\n };\n document.addEventListener(\"pointermove\", handleTrackPointerGrace);\n return () => document.removeEventListener(\"pointermove\", handleTrackPointerGrace);\n }\n }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n return /* @__PURE__ */ jsx(TooltipContentImpl, { ...props, ref: composedRefs });\n});\nvar [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, { isInside: false });\nvar Slottable = createSlottable(\"TooltipContent\");\nvar TooltipContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTooltip,\n children,\n \"aria-label\": ariaLabel,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...contentProps\n } = props;\n const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const { onClose } = context;\n React.useEffect(() => {\n document.addEventListener(TOOLTIP_OPEN, onClose);\n return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n }, [onClose]);\n React.useEffect(() => {\n if (context.trigger) {\n const handleScroll = (event) => {\n const target = event.target;\n if (target?.contains(context.trigger)) onClose();\n };\n window.addEventListener(\"scroll\", handleScroll, { capture: true });\n return () => window.removeEventListener(\"scroll\", handleScroll, { capture: true });\n }\n }, [context.trigger, onClose]);\n return /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: onClose,\n children: /* @__PURE__ */ jsxs(\n PopperPrimitive.Content,\n {\n \"data-state\": context.stateAttribute,\n ...popperScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-tooltip-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-tooltip-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-tooltip-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-tooltip-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-tooltip-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n },\n children: [\n /* @__PURE__ */ jsx(Slottable, { children }),\n /* @__PURE__ */ jsx(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: /* @__PURE__ */ jsx(VisuallyHiddenPrimitive.Root, { id: context.contentId, role: \"tooltip\", children: ariaLabel || children }) })\n ]\n }\n )\n }\n );\n }\n);\nTooltipContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"TooltipArrow\";\nvar TooltipArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTooltip, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeTooltip);\n const visuallyHiddenContentContext = useVisuallyHiddenContentContext(\n ARROW_NAME,\n __scopeTooltip\n );\n return visuallyHiddenContentContext.isInside ? null : /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nTooltipArrow.displayName = ARROW_NAME;\nfunction getExitSideFromRect(point, rect) {\n const top = Math.abs(rect.top - point.y);\n const bottom = Math.abs(rect.bottom - point.y);\n const right = Math.abs(rect.right - point.x);\n const left = Math.abs(rect.left - point.x);\n switch (Math.min(top, bottom, right, left)) {\n case left:\n return \"left\";\n case right:\n return \"right\";\n case top:\n return \"top\";\n case bottom:\n return \"bottom\";\n default:\n throw new Error(\"unreachable\");\n }\n}\nfunction getPaddedExitPoints(exitPoint, exitSide, padding = 5) {\n const paddedExitPoints = [];\n switch (exitSide) {\n case \"top\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y + padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"bottom\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y - padding }\n );\n break;\n case \"left\":\n paddedExitPoints.push(\n { x: exitPoint.x + padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"right\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x - padding, y: exitPoint.y + padding }\n );\n break;\n }\n return paddedExitPoints;\n}\nfunction getPointsFromRect(rect) {\n const { top, right, bottom, left } = rect;\n return [\n { x: left, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom }\n ];\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 ii = polygon[i];\n const jj = polygon[j];\n const xi = ii.x;\n const yi = ii.y;\n const xj = jj.x;\n const yj = jj.y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\nfunction getHull(points) {\n const newPoints = points.slice();\n newPoints.sort((a, b) => {\n if (a.x < b.x) return -1;\n else if (a.x > b.x) return 1;\n else if (a.y < b.y) return -1;\n else if (a.y > b.y) return 1;\n else return 0;\n });\n return getHullPresorted(newPoints);\n}\nfunction getHullPresorted(points) {\n if (points.length <= 1) return points.slice();\n const upperHull = [];\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n while (upperHull.length >= 2) {\n const q = upperHull[upperHull.length - 1];\n const r = upperHull[upperHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n else break;\n }\n upperHull.push(p);\n }\n upperHull.pop();\n const lowerHull = [];\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n while (lowerHull.length >= 2) {\n const q = lowerHull[lowerHull.length - 1];\n const r = lowerHull[lowerHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n else break;\n }\n lowerHull.push(p);\n }\n lowerHull.pop();\n if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {\n return upperHull;\n } else {\n return upperHull.concat(lowerHull);\n }\n}\nvar Provider = TooltipProvider;\nvar Root3 = Tooltip;\nvar Trigger = TooltipTrigger;\nvar Portal = TooltipPortal;\nvar Content2 = TooltipContent;\nvar Arrow2 = TooltipArrow;\nexport {\n Arrow2 as Arrow,\n Content2 as Content,\n Portal,\n Provider,\n Root3 as Root,\n Tooltip,\n TooltipArrow,\n TooltipContent,\n TooltipPortal,\n TooltipProvider,\n TooltipTrigger,\n Trigger,\n createTooltipScope\n};\n//# sourceMappingURL=index.mjs.map\n","import { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"../lib/cn\";\nimport { appearanceToStyle, resolveColorScheme } from \"../appearance/appearance\";\nimport { useRoad } from \"../provider/context\";\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipContent = forwardRef<\n ElementRef<typeof TooltipPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 6, ...props }, ref) => {\n const { appearance } = useRoad();\n const scheme = resolveColorScheme(appearance?.colorScheme);\n const style = appearanceToStyle(appearance);\n\n return (\n <TooltipPrimitive.Portal>\n <div className={cn(\"road-ui\", scheme === \"dark\" && \"dark\")} style={style}>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-[70] overflow-hidden rounded-md border border-border bg-popover px-2.5 py-1.5 text-xs text-popover-foreground shadow-md\",\n \"data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n className,\n )}\n {...props}\n />\n </div>\n </TooltipPrimitive.Portal>\n );\n});\nTooltipContent.displayName = \"TooltipContent\";\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { AlertCircle, Check, ChevronDown, Loader2, Mail, Plus, Settings, X } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { Badge } from \"../ui/badge\";\nimport { Button } from \"../ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\nimport { Input } from \"../ui/input\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../ui/tooltip\";\nimport { Skeleton } from \"../ui/skeleton\";\nimport { appearanceToStyle, resolveColorScheme } from \"../appearance/appearance\";\nimport { useRoad } from \"../provider/context\";\nimport {\n useCurrentBusinessUnit,\n useSetCurrentBusinessUnit,\n} from \"../provider/current-business-unit\";\nimport {\n useAcceptInvitation,\n useMyBusinessUnits,\n useRejectInvitation,\n} from \"../api/hooks\";\nimport { useT } from \"../i18n/context\";\nimport { cn } from \"../lib/cn\";\nimport type { Membership, PendingInvitation } from \"../api/types\";\nimport { Avatar } from \"./shared/Avatar\";\nimport { BusinessUnitsMgmt, type BusinessUnitsMgmtTab } from \"./BusinessUnitsMgmt\";\n\nconst SEARCH_THRESHOLD = 5;\nconst AUTO_COLLAPSE_THRESHOLD_PX = 180;\n\nexport interface BusinessUnitSwitcherProps {\n /**\n * Force the trigger into collapsed (true) or expanded (false) mode. When\n * unset (default), the component auto-detects via ResizeObserver on its\n * own container — under 180px wide it shows the compact icon-only trigger\n * with a tooltip; at or above 180px it shows the expanded trigger (avatar\n * + name + role + chevron). Hosts whose sidebar collapse state lives in\n * app state pass the prop explicitly; hosts using a fluid container can\n * leave it unset and let the switcher react to width.\n */\n collapsed?: boolean;\n /** Additional class on the trigger button — useful for sidebar layout. */\n className?: string;\n}\n\nexport function BusinessUnitSwitcher({ collapsed, className }: BusinessUnitSwitcherProps) {\n const { data, isLoading, isError, refetch } = useMyBusinessUnits();\n const currentBu = useCurrentBusinessUnit();\n const setBu = useSetCurrentBusinessUnit();\n const t = useT();\n const { appearance } = useRoad();\n const scheme = resolveColorScheme(appearance?.colorScheme);\n const style = appearanceToStyle(appearance);\n\n // Auto-collapse via ResizeObserver — only active when the collapsed prop\n // is undefined. When the host passes an explicit value, that wins and we\n // skip observation entirely.\n const wrapRef = useRef<HTMLSpanElement>(null);\n const [autoCollapsed, setAutoCollapsed] = useState(false);\n useEffect(() => {\n if (collapsed !== undefined) return;\n const el = wrapRef.current;\n if (!el) return;\n setAutoCollapsed(el.getBoundingClientRect().width < AUTO_COLLAPSE_THRESHOLD_PX);\n const observer = new ResizeObserver(([entry]) => {\n if (!entry) return;\n setAutoCollapsed(entry.contentRect.width < AUTO_COLLAPSE_THRESHOLD_PX);\n });\n observer.observe(el);\n return () => observer.disconnect();\n }, [collapsed]);\n const isCollapsed = collapsed ?? autoCollapsed;\n\n // Embedded Manage modal — controlled by the switcher so it can launch from\n // the \"Manage business units\" CTA without integrators having to wire it up.\n const [mgmtOpen, setMgmtOpen] = useState(false);\n const [mgmtTab, setMgmtTab] = useState<BusinessUnitsMgmtTab>(\"business-units\");\n const [mgmtBuId, setMgmtBuId] = useState<string | undefined>(undefined);\n\n const [search, setSearch] = useState(\"\");\n\n const memberships = data?.memberships ?? [];\n const pendingInvitations = data?.pendingInvitations ?? [];\n const showSearch = memberships.length >= SEARCH_THRESHOLD;\n\n const filteredMemberships = useMemo(() => {\n if (!search.trim()) return memberships;\n const q = search.trim().toLowerCase();\n return memberships.filter(\n (m) =>\n m.businessUnit.name.toLowerCase().includes(q) ||\n m.businessUnit.slug.toLowerCase().includes(q),\n );\n }, [memberships, search]);\n\n const currentMembership = useMemo(\n () => memberships.find((m) => m.businessUnit.id === currentBu?.id) ?? null,\n [memberships, currentBu],\n );\n\n const openManage = (opts?: { tab?: BusinessUnitsMgmtTab; buId?: string }) => {\n setMgmtTab(opts?.tab ?? \"business-units\");\n setMgmtBuId(opts?.buId);\n setMgmtOpen(true);\n };\n\n const handleSelect = (buId: string) => {\n if (buId !== currentBu?.id) setBu(buId);\n setSearch(\"\");\n };\n\n // ─────────────────────────── render\n\n const wrap = (trigger: React.ReactNode, content: React.ReactNode) => (\n <>\n <span\n ref={wrapRef}\n className={cn(\"road-ui inline-block w-full\", scheme === \"dark\" && \"dark\")}\n style={style}\n >\n <TooltipProvider delayDuration={250}>\n <DropdownMenu>\n {trigger}\n {content}\n </DropdownMenu>\n </TooltipProvider>\n </span>\n <BusinessUnitsMgmt\n open={mgmtOpen}\n onOpenChange={setMgmtOpen}\n initialTab={mgmtTab}\n initialBusinessUnitId={mgmtBuId}\n />\n </>\n );\n\n // Loading: skeleton trigger, no dropdown\n if (isLoading) {\n return wrap(\n <div\n className={cn(\n \"flex w-full items-center gap-3 rounded-lg p-2\",\n isCollapsed && \"justify-center\",\n className,\n )}\n >\n <Skeleton className=\"h-9 w-9 shrink-0 rounded-full\" />\n {!isCollapsed && (\n <div className=\"min-w-0 flex-1 space-y-1.5\">\n <Skeleton className=\"h-3.5 w-24\" />\n <Skeleton className=\"h-2.5 w-16\" />\n </div>\n )}\n </div>,\n null,\n );\n }\n\n // Error: no dropdown — trigger is a retry button\n if (isError) {\n return wrap(\n <button\n type=\"button\"\n onClick={() => void refetch()}\n className={cn(\n \"flex w-full items-center gap-3 rounded-lg border border-destructive/40 bg-destructive/5 p-2 text-left text-sm text-destructive transition-colors hover:bg-destructive/10\",\n isCollapsed && \"justify-center\",\n className,\n )}\n aria-label={t.dict.switcher.errorTitle}\n >\n <AlertCircle className=\"h-5 w-5 shrink-0\" aria-hidden />\n {!isCollapsed && <span className=\"truncate\">{t.dict.switcher.errorRetry}</span>}\n </button>,\n null,\n );\n }\n\n // Empty (no memberships) AND no invitations: a quiet \"create your first BU\"\n // CTA that opens Manage directly to the BU tab.\n if (memberships.length === 0 && pendingInvitations.length === 0) {\n return wrap(\n <button\n type=\"button\"\n onClick={() => openManage({ tab: \"business-units\" })}\n className={cn(\n \"flex w-full items-center gap-3 rounded-lg border border-dashed border-border p-2 text-left text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\",\n isCollapsed && \"justify-center\",\n className,\n )}\n aria-label={t.dict.switcher.emptyCta}\n >\n <div className=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-full border border-dashed border-border\">\n <Plus className=\"h-4 w-4\" aria-hidden />\n </div>\n {!isCollapsed && <span className=\"truncate\">{t.dict.switcher.emptyCta}</span>}\n </button>,\n null,\n );\n }\n\n // Invited but not yet a member: don't dead-end on \"Create unit\". Advertise the\n // invitation count on the trigger (primary-tinted, with a badge) and open a\n // dropdown that lists the invitations to accept, plus a quiet path to create\n // your own business unit.\n if (memberships.length === 0) {\n const invitedTrigger = (\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className={cn(\n \"flex w-full items-center gap-3 rounded-lg border border-primary/30 bg-primary/5 p-2 text-left transition-colors hover:bg-primary/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"data-[state=open]:bg-primary/10\",\n isCollapsed && \"justify-center\",\n className,\n )}\n aria-label={t.plural(t.dict.switcher.pendingCount, pendingInvitations.length)}\n >\n <div className=\"relative shrink-0\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-full bg-primary/10 text-primary\">\n <Mail className=\"h-4 w-4\" aria-hidden />\n </div>\n <span className=\"absolute -right-1 -top-1 flex h-4 min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[10px] font-semibold text-primary-foreground ring-2 ring-background\">\n {pendingInvitations.length}\n </span>\n </div>\n {!isCollapsed && (\n <>\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-sm font-medium text-foreground\">\n {t.dict.switcher.invitedTitle}\n </div>\n <div className=\"truncate text-xs text-muted-foreground\">\n {t.plural(t.dict.switcher.pendingCount, pendingInvitations.length)}\n </div>\n </div>\n <ChevronDown className=\"h-4 w-4 shrink-0 text-muted-foreground\" aria-hidden />\n </>\n )}\n </button>\n </DropdownMenuTrigger>\n );\n\n return wrap(\n isCollapsed ? (\n <Tooltip>\n <TooltipTrigger asChild>{invitedTrigger}</TooltipTrigger>\n <TooltipContent side=\"right\">\n <div className=\"font-medium\">{t.dict.switcher.invitedTitle}</div>\n <div className=\"text-muted-foreground\">\n {t.plural(t.dict.switcher.pendingCount, pendingInvitations.length)}\n </div>\n </TooltipContent>\n </Tooltip>\n ) : (\n invitedTrigger\n ),\n <DropdownMenuContent\n align={isCollapsed ? \"start\" : \"end\"}\n side={isCollapsed ? \"right\" : \"bottom\"}\n className=\"w-80\"\n >\n <InvitationsMenuSection invitations={pendingInvitations} />\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={() => openManage({ tab: \"business-units\" })}>\n <Plus className=\"h-4 w-4 text-muted-foreground\" aria-hidden />\n <span>{t.dict.switcher.emptyCta}</span>\n </DropdownMenuItem>\n </DropdownMenuContent>,\n );\n }\n\n // Populated trigger — expanded or collapsed variant\n const triggerEl = (\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className={cn(\n \"flex w-full items-center gap-3 rounded-lg p-2 text-left transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n isCollapsed && \"justify-center\",\n className,\n )}\n aria-label={\n currentBu\n ? `${t.dict.switcher.triggerCurrentLabel}: ${currentBu.name}`\n : t.dict.switcher.triggerSelectLabel\n }\n >\n <div className=\"relative shrink-0\">\n <Avatar name={currentBu?.name ?? \"?\"} size=\"md\" />\n {pendingInvitations.length > 0 && (\n <span\n className={cn(\n \"absolute -right-1 -top-1 flex items-center justify-center rounded-full bg-primary text-[10px] font-semibold text-primary-foreground ring-2 ring-background\",\n isCollapsed ? \"h-4 w-4\" : \"h-4 min-w-4 px-1\",\n )}\n aria-label={t.plural(t.dict.switcher.pendingCount, pendingInvitations.length)}\n >\n {isCollapsed ? \"\" : pendingInvitations.length}\n </span>\n )}\n </div>\n {!isCollapsed && (\n <>\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-sm font-medium text-foreground\">\n {currentBu?.name ?? t.dict.switcher.triggerSelectLabel}\n </div>\n {currentMembership && currentMembership.roles[0] && (\n <div className=\"truncate text-xs text-muted-foreground\">\n {currentMembership.roles[0].name}\n </div>\n )}\n </div>\n <ChevronDown className=\"h-4 w-4 shrink-0 text-muted-foreground\" aria-hidden />\n </>\n )}\n </button>\n </DropdownMenuTrigger>\n );\n\n // In collapsed mode wrap the trigger in a tooltip so the name + role\n // surface on hover. Reuses TooltipTrigger asChild to share the same DOM\n // node with DropdownMenuTrigger.\n const trigger = isCollapsed ? (\n <Tooltip>\n <TooltipTrigger asChild>{triggerEl}</TooltipTrigger>\n <TooltipContent side=\"right\">\n <div className=\"font-medium\">\n {currentBu?.name ?? t.dict.switcher.triggerSelectLabel}\n </div>\n {currentMembership?.roles[0] && (\n <div className=\"text-muted-foreground\">{currentMembership.roles[0].name}</div>\n )}\n {pendingInvitations.length > 0 && (\n <div className=\"mt-1 text-primary\">\n {t.plural(t.dict.switcher.pendingCount, pendingInvitations.length)}\n </div>\n )}\n </TooltipContent>\n </Tooltip>\n ) : (\n triggerEl\n );\n\n const dropdownContent = (\n <DropdownMenuContent\n align={isCollapsed ? \"start\" : \"end\"}\n side={isCollapsed ? \"right\" : \"bottom\"}\n className=\"w-80\"\n >\n {pendingInvitations.length > 0 && (\n <>\n <InvitationsMenuSection invitations={pendingInvitations} />\n <DropdownMenuSeparator />\n </>\n )}\n\n <DropdownMenuLabel>{t.dict.switcher.switcherHeader}</DropdownMenuLabel>\n\n {showSearch && (\n <div className=\"px-1 pb-1.5\">\n <Input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={t.dict.switcher.searchPlaceholder}\n className=\"h-8 text-xs\"\n // Stop Radix from hijacking arrow keys for menu nav while typing\n onKeyDown={(e) => e.stopPropagation()}\n autoFocus\n />\n </div>\n )}\n\n {filteredMemberships.length === 0 ? (\n <div className=\"px-2 py-3 text-center text-xs text-muted-foreground\">\n {t.dict.switcher.noMatches}\n </div>\n ) : (\n <div className=\"max-h-72 overflow-y-auto\">\n {filteredMemberships.map((m) => (\n <BURow\n key={m.businessUnit.id}\n membership={m}\n isCurrent={m.businessUnit.id === currentBu?.id}\n onSelect={() => handleSelect(m.businessUnit.id)}\n currentBadge={t.dict.switcher.currentBadge}\n suspendedLabel={t.dict.common.suspended}\n />\n ))}\n </div>\n )}\n\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={() => openManage({ tab: \"business-units\" })}>\n <Settings className=\"h-4 w-4 text-muted-foreground\" aria-hidden />\n <span>{t.dict.switcher.manageCta}</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n );\n\n return wrap(trigger, dropdownContent);\n}\n\n// ─────────────────────────── sub-components\n\ninterface BURowProps {\n membership: Membership;\n isCurrent: boolean;\n onSelect: () => void;\n currentBadge: string;\n suspendedLabel: string;\n}\n\nfunction BURow({ membership, isCurrent, onSelect, currentBadge, suspendedLabel }: BURowProps) {\n const { businessUnit, status, roles } = membership;\n const role = roles[0];\n const isSuspended = status === \"suspended\";\n\n return (\n <DropdownMenuItem\n onSelect={(e) => {\n if (isSuspended) {\n e.preventDefault();\n return;\n }\n onSelect();\n }}\n aria-current={isCurrent ? \"true\" : undefined}\n className={cn(\n \"py-2\",\n isCurrent && \"bg-accent/40\",\n isSuspended && \"opacity-60\",\n )}\n >\n <Avatar name={businessUnit.name} size=\"sm\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate text-sm font-medium\">{businessUnit.name}</span>\n {isCurrent && (\n <Badge variant=\"muted\" className=\"h-4 px-1.5 text-[10px]\">\n {currentBadge}\n </Badge>\n )}\n {isSuspended && (\n <Badge variant=\"danger\" className=\"h-4 px-1.5 text-[10px]\">\n {suspendedLabel}\n </Badge>\n )}\n </div>\n {role && <div className=\"truncate text-xs text-muted-foreground\">{role.name}</div>}\n </div>\n {isCurrent && <Check className=\"h-4 w-4 shrink-0 text-primary\" aria-hidden />}\n </DropdownMenuItem>\n );\n}\n\n/** The pending-invitations block shared by the populated and invited-empty menus. */\nfunction InvitationsMenuSection({ invitations }: { invitations: PendingInvitation[] }) {\n const t = useT();\n return (\n <>\n <DropdownMenuLabel className=\"flex items-center gap-2\">\n <Mail className=\"h-3.5 w-3.5\" aria-hidden />\n {t.dict.switcher.pendingInvitationsHeader}\n <Badge variant=\"default\" className=\"h-4 px-1.5\">\n {invitations.length}\n </Badge>\n </DropdownMenuLabel>\n {invitations.map((inv) => (\n <SwitcherInvitationRow key={inv.id} invitation={inv} />\n ))}\n </>\n );\n}\n\nfunction SwitcherInvitationRow({ invitation }: { invitation: PendingInvitation }) {\n const accept = useAcceptInvitation();\n const reject = useRejectInvitation();\n const t = useT();\n const pending = accept.isPending || reject.isPending;\n\n const handleAccept = async (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n try {\n await accept.mutateAsync(invitation.id);\n toast.success(\n t.format(t.dict.members.joined, { businessUnit: invitation.businessUnit.name }),\n );\n } catch {\n toast.error(t.dict.members.couldNotLoad);\n }\n };\n\n const handleReject = async (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n try {\n await reject.mutateAsync(invitation.id);\n toast.message(\n t.format(t.dict.members.declined, { businessUnit: invitation.businessUnit.name }),\n );\n } catch {\n toast.error(t.dict.members.couldNotLoad);\n }\n };\n\n // Plain div, not DropdownMenuItem — invitation actions shouldn't close the menu.\n return (\n <div className=\"flex items-center gap-2.5 px-2 py-2\">\n <Avatar name={invitation.businessUnit.name} size=\"sm\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-sm font-medium\">{invitation.businessUnit.name}</div>\n <div className=\"truncate text-xs text-muted-foreground\">{invitation.roleName}</div>\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleReject}\n disabled={pending}\n aria-label={t.dict.members.decline}\n className=\"h-7 w-7 p-0\"\n >\n {reject.isPending ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <X className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n <Button\n size=\"sm\"\n onClick={handleAccept}\n disabled={pending}\n aria-label={t.dict.members.accept}\n className=\"h-7 w-7 p-0\"\n >\n {accept.isPending ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Check className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n </div>\n </div>\n );\n}\n","import type { RoadClient } from \"./client\";\nimport type {\n BusinessUnitDetail,\n CreateBusinessUnitInput,\n CreateInvitationInput,\n CreateRoleInput,\n CurrentUser,\n Invitation,\n Member,\n Membership,\n MyBusinessUnits,\n MyPermissions,\n PaginatedList,\n PaginationInput,\n Permission,\n Role,\n UpdateBusinessUnitInput,\n UpdateRoleInput,\n} from \"./types\";\n\nconst sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));\nconst id = () => Math.random().toString(36).slice(2, 10);\n\n/**\n * In-memory cursor pagination. Cursors are plain stringified indices —\n * good enough for a mock client; the real API uses opaque base64 cursors\n * that encode (sort column, id), but the SDK treats both as opaque.\n */\nfunction paginate<T>(\n rows: ReadonlyArray<T>,\n pagination?: PaginationInput,\n): PaginatedList<T> {\n const limit = pagination?.limit ?? 20;\n const start = pagination?.cursor ? Math.max(0, parseInt(pagination.cursor, 10) || 0) : 0;\n const slice = rows.slice(start, start + limit);\n const nextStart = start + limit;\n const hasMore = nextStart < rows.length;\n return {\n data: slice,\n pagination: {\n cursor: hasMore ? String(nextStart) : null,\n hasMore,\n totalCount: rows.length,\n },\n };\n}\n\nfunction slugify(name: string): string {\n return name\n .toLowerCase()\n .normalize(\"NFD\")\n .replace(/[̀-ͯ]/g, \"\")\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nexport interface MockClientOptions {\n /** Artificial network delay in ms. Default 350. */\n latency?: number;\n /** Force every call to fail with this error. Useful for testing error states. */\n failWith?: string;\n /** Seed with no BUs to demonstrate the empty state. */\n empty?: boolean;\n}\n\nexport function createMockClient(options: MockClientOptions = {}): RoadClient {\n const latency = options.latency ?? 350;\n\n const state = options.empty ? seedEmpty() : seedRich();\n\n async function maybeFail() {\n await sleep(latency);\n if (options.failWith) throw new Error(options.failWith);\n }\n\n return {\n async getCurrentUser(): Promise<CurrentUser> {\n await maybeFail();\n return { id: \"current-user\", name: \"You\", email: \"you@example.com\" };\n },\n\n async getMyBusinessUnits(): Promise<MyBusinessUnits> {\n await maybeFail();\n const memberships: Membership[] = state.businessUnits.map((bu) => ({\n businessUnit: { id: bu.id, name: bu.name, slug: bu.slug },\n status: \"active\",\n joinedAt: bu.createdAt,\n roles: state.userRoles[bu.id] ?? [],\n }));\n return { memberships, pendingInvitations: state.pendingInvitations };\n },\n\n async getMyPermissions(): Promise<MyPermissions> {\n await maybeFail();\n const out: MyPermissions = {};\n for (const bu of state.businessUnits) {\n const myRoles = state.userRoles[bu.id] ?? [];\n const fullRoles = (state.roles[bu.id] ?? []).filter((r) =>\n myRoles.some((mr) => mr.id === r.id),\n );\n if (fullRoles.some((r) => r.permissions.includes(\"*\"))) {\n out[bu.id] = [\"*\"];\n } else {\n const set = new Set<string>();\n for (const r of fullRoles) for (const p of r.permissions) set.add(p);\n out[bu.id] = Array.from(set);\n }\n }\n return out;\n },\n\n async getBusinessUnit(buId: string): Promise<BusinessUnitDetail> {\n await maybeFail();\n const bu = state.businessUnits.find((x) => x.id === buId);\n if (!bu) throw new Error(\"Business unit not found\");\n return { ...bu, memberCount: (state.members[buId] ?? []).length };\n },\n\n async createBusinessUnit(input: CreateBusinessUnitInput): Promise<BusinessUnitDetail> {\n await maybeFail();\n const newBu: BusinessUnitDetail = {\n id: id(),\n name: input.name,\n slug: input.slug ?? slugify(input.name),\n status: \"active\",\n memberCount: 1,\n memberLimit: input.memberLimit ?? null,\n joinCode: id().toUpperCase(),\n createdAt: new Date().toISOString(),\n iamScopeId: `scope-${id()}`,\n };\n state.businessUnits = [newBu, ...state.businessUnits];\n state.userRoles[newBu.id] = [{ id: \"role-owner\", name: \"Owner\" }];\n state.members[newBu.id] = [\n {\n id: id(),\n userId: \"current-user\",\n status: \"active\",\n joinedAt: newBu.createdAt,\n name: \"You\",\n email: \"you@example.com\",\n roles: [{ id: \"role-owner\", name: \"Owner\" }],\n },\n ];\n state.roles[newBu.id] = makeRoles({ includeBilling: false, customCount: 0 });\n state.permissions[newBu.id] = makePermissions(newBu.iamScopeId);\n return newBu;\n },\n\n async updateBusinessUnit(\n buId: string,\n input: UpdateBusinessUnitInput,\n ): Promise<BusinessUnitDetail> {\n await maybeFail();\n const bu = state.businessUnits.find((x) => x.id === buId);\n if (!bu) throw new Error(\"Business unit not found\");\n if (input.name !== undefined) bu.name = input.name;\n if (input.joinCode !== undefined) bu.joinCode = input.joinCode;\n if (input.memberLimit !== undefined) bu.memberLimit = input.memberLimit;\n return { ...bu, memberCount: (state.members[buId] ?? []).length };\n },\n\n async listMembers(\n buId: string,\n pagination?: PaginationInput,\n ): Promise<PaginatedList<Member>> {\n await maybeFail();\n return paginate(state.members[buId] ?? [], pagination);\n },\n\n async suspendMember(buId: string, memberId: string) {\n await maybeFail();\n const m = (state.members[buId] ?? []).find((x) => x.id === memberId);\n if (m) m.status = \"suspended\";\n },\n\n async reinstateMember(buId: string, memberId: string) {\n await maybeFail();\n const m = (state.members[buId] ?? []).find((x) => x.id === memberId);\n if (m) m.status = \"active\";\n },\n\n async removeMember(buId: string, memberId: string) {\n await maybeFail();\n state.members[buId] = (state.members[buId] ?? []).filter((x) => x.id !== memberId);\n },\n\n async listInvitations(\n buId: string,\n pagination?: PaginationInput,\n ): Promise<PaginatedList<Invitation>> {\n await maybeFail();\n return paginate(state.invitations[buId] ?? [], pagination);\n },\n\n async createInvitation(buId: string, input: CreateInvitationInput): Promise<Invitation> {\n await maybeFail();\n const role = (state.roles[buId] ?? []).find((r) => r.id === input.roleId);\n const inv: Invitation = {\n id: id(),\n email: input.email,\n roleId: input.roleId,\n roleName: role?.name ?? \"Member\",\n status: \"pending\",\n invitedAt: new Date().toISOString(),\n expiresAt: new Date(Date.now() + 14 * 86400000).toISOString(),\n };\n state.invitations[buId] = [inv, ...(state.invitations[buId] ?? [])];\n return inv;\n },\n\n async cancelInvitation(buId: string, invitationId: string) {\n await maybeFail();\n state.invitations[buId] = (state.invitations[buId] ?? []).map((inv) =>\n inv.id === invitationId ? { ...inv, status: \"cancelled\" } : inv,\n );\n },\n\n async resendInvitation(buId: string, invitationId: string) {\n await maybeFail();\n state.invitations[buId] = (state.invitations[buId] ?? []).map((inv) =>\n inv.id === invitationId\n ? { ...inv, invitedAt: new Date().toISOString(), expiresAt: new Date(Date.now() + 14 * 86400000).toISOString() }\n : inv,\n );\n },\n\n async acceptInvitation(invitationId: string) {\n await maybeFail();\n const idx = state.pendingInvitations.findIndex((inv) => inv.id === invitationId);\n if (idx < 0) throw new Error(\"Invitation not found\");\n const inv = state.pendingInvitations[idx]!;\n state.pendingInvitations.splice(idx, 1);\n // Create a BU + membership so the user \"joins\" — exercises the populated state.\n const newBu: BusinessUnitDetail = {\n id: inv.businessUnit.id,\n name: inv.businessUnit.name,\n slug: inv.businessUnit.slug,\n status: \"active\",\n memberCount: 1,\n memberLimit: null,\n joinCode: null,\n createdAt: new Date().toISOString(),\n iamScopeId: `scope-${inv.businessUnit.id}`,\n };\n if (!state.businessUnits.find((b) => b.id === newBu.id)) {\n state.businessUnits = [newBu, ...state.businessUnits];\n }\n const roleName = inv.roleName;\n state.userRoles[newBu.id] = [{ id: `role-${roleName.toLowerCase()}`, name: roleName }];\n state.members[newBu.id] = [\n {\n id: id(),\n userId: \"current-user\",\n status: \"active\",\n joinedAt: new Date().toISOString(),\n name: \"You\",\n email: \"you@example.com\",\n roles: [{ id: `role-${roleName.toLowerCase()}`, name: roleName }],\n },\n ];\n state.roles[newBu.id] = makeRoles({ includeBilling: false, customCount: 0 });\n state.permissions[newBu.id] = makePermissions(newBu.iamScopeId);\n },\n\n async rejectInvitation(invitationId: string) {\n await maybeFail();\n state.pendingInvitations = state.pendingInvitations.filter((inv) => inv.id !== invitationId);\n },\n\n async listRoles(\n buId: string,\n pagination?: PaginationInput,\n ): Promise<PaginatedList<Role>> {\n await maybeFail();\n return paginate(state.roles[buId] ?? [], pagination);\n },\n\n async getRole(buId: string, roleId: string): Promise<Role> {\n await maybeFail();\n const role = (state.roles[buId] ?? []).find((r) => r.id === roleId);\n if (!role) throw new Error(\"Role not found\");\n return role;\n },\n\n async createRole(buId: string, input: CreateRoleInput): Promise<Role> {\n await maybeFail();\n const role: Role = {\n id: id(),\n name: input.name,\n description: input.description ?? \"\",\n permissions: [...input.permissions],\n isSystem: false,\n assignmentCount: 0,\n createdAt: new Date().toISOString(),\n };\n state.roles[buId] = [role, ...(state.roles[buId] ?? [])];\n return role;\n },\n\n async updateRole(\n buId: string,\n roleId: string,\n input: UpdateRoleInput,\n ): Promise<Role> {\n await maybeFail();\n const role = (state.roles[buId] ?? []).find((r) => r.id === roleId);\n if (!role) throw new Error(\"Role not found\");\n if (input.name !== undefined) role.name = input.name;\n if (input.description !== undefined)\n role.description = input.description ?? \"\";\n if (input.permissions !== undefined) role.permissions = [...input.permissions];\n return { ...role };\n },\n\n async deleteRole(buId: string, roleId: string): Promise<void> {\n await maybeFail();\n const role = (state.roles[buId] ?? []).find((r) => r.id === roleId);\n if (role?.isSystem) throw new Error(\"System roles cannot be deleted\");\n state.roles[buId] = (state.roles[buId] ?? []).filter((r) => r.id !== roleId);\n },\n\n async listPermissions(buId: string): Promise<Permission[]> {\n await maybeFail();\n return state.permissions[buId] ?? [];\n },\n\n async authorizeBatch(\n buId: string,\n permissions: readonly string[],\n ): Promise<Record<string, boolean>> {\n await maybeFail();\n if (permissions.length === 0) return {};\n const myRoles = state.userRoles[buId] ?? [];\n const fullRoles = (state.roles[buId] ?? []).filter((r) =>\n myRoles.some((mr) => mr.id === r.id),\n );\n const hasWildcard = fullRoles.some((r) => r.permissions.includes(\"*\"));\n if (hasWildcard) {\n return Object.fromEntries(permissions.map((p) => [p, true]));\n }\n const granted = new Set<string>();\n for (const r of fullRoles) for (const p of r.permissions) granted.add(p);\n // Mirror the API engine's manage→CRUD expansion: a role with\n // manage:Subject implies create/read/update/delete:Subject.\n const CRUD = [\"create\", \"read\", \"update\", \"delete\"] as const;\n for (const code of [...granted]) {\n const [action, subject] = code.split(\":\");\n if (action === \"manage\" && subject) {\n for (const verb of CRUD) granted.add(`${verb}:${subject}`);\n }\n }\n return Object.fromEntries(permissions.map((p) => [p, granted.has(p)]));\n },\n };\n}\n\n// ───────────────────────────────────────── seed data\n\ninterface MockState {\n businessUnits: BusinessUnitDetail[];\n userRoles: Record<string, { id: string; name: string }[]>;\n members: Record<string, Member[]>;\n invitations: Record<string, Invitation[]>;\n pendingInvitations: MyBusinessUnits[\"pendingInvitations\"];\n roles: Record<string, Role[]>;\n permissions: Record<string, Permission[]>;\n}\n\nfunction seedEmpty(): MockState {\n return {\n businessUnits: [],\n userRoles: {},\n members: {},\n invitations: {},\n pendingInvitations: [],\n roles: {},\n permissions: {},\n };\n}\n\nfunction seedRich(): MockState {\n const acme: BusinessUnitDetail = {\n id: \"bu-acme\",\n name: \"Acme Corp\",\n slug: \"acme-corp\",\n status: \"active\",\n memberCount: 12,\n memberLimit: 50,\n joinCode: \"ACME-7K9P\",\n createdAt: \"2025-09-14T10:30:00Z\",\n iamScopeId: \"scope-bu-acme\",\n };\n const horizon: BusinessUnitDetail = {\n id: \"bu-horizon\",\n name: \"Horizon Labs\",\n slug: \"horizon-labs\",\n status: \"active\",\n memberCount: 4,\n memberLimit: null,\n joinCode: null,\n createdAt: \"2026-01-08T14:12:00Z\",\n iamScopeId: \"scope-bu-horizon\",\n };\n const aurora: BusinessUnitDetail = {\n id: \"bu-aurora\",\n name: \"Aurora Studio\",\n slug: \"aurora-studio\",\n status: \"active\",\n memberCount: 28,\n memberLimit: 30,\n joinCode: \"AUR-2025\",\n createdAt: \"2024-11-02T09:00:00Z\",\n iamScopeId: \"scope-bu-aurora\",\n };\n\n return {\n businessUnits: [acme, horizon, aurora],\n userRoles: {\n [acme.id]: [{ id: \"role-owner\", name: \"Owner\" }],\n [horizon.id]: [{ id: \"role-admin\", name: \"Admin\" }],\n [aurora.id]: [{ id: \"role-member\", name: \"Member\" }],\n },\n members: {\n [acme.id]: makeMembers(acme.id, 12, \"Owner\"),\n [horizon.id]: makeMembers(horizon.id, 4, \"Admin\"),\n [aurora.id]: makeMembers(aurora.id, 28, \"Member\"),\n },\n invitations: {\n [acme.id]: [\n {\n id: \"inv-1\",\n email: \"alex@example.com\",\n roleId: \"role-member\",\n roleName: \"Member\",\n status: \"pending\",\n invitedAt: \"2026-05-20T08:00:00Z\",\n expiresAt: \"2026-06-03T08:00:00Z\",\n },\n ],\n [horizon.id]: [],\n [aurora.id]: [],\n },\n pendingInvitations: [\n {\n id: \"my-inv-1\",\n businessUnit: { id: \"bu-northwind\", name: \"Northwind Trading\", slug: \"northwind\" },\n roleName: \"Member\",\n expiresAt: new Date(Date.now() + 5 * 86400000).toISOString(),\n },\n ],\n roles: {\n [acme.id]: makeRoles({ includeBilling: true, customCount: 1 }),\n [horizon.id]: makeRoles({ includeBilling: false, customCount: 0 }),\n [aurora.id]: makeRoles({ includeBilling: true, customCount: 2 }),\n },\n permissions: {\n [acme.id]: makePermissions(acme.iamScopeId),\n [horizon.id]: makePermissions(horizon.iamScopeId),\n [aurora.id]: makePermissions(aurora.iamScopeId),\n },\n };\n}\n\nconst PERMISSION_CATALOG = [\n { code: \"read:Member\", name: \"View members\", description: \"View members of this business unit\", category: \"Member\" },\n { code: \"manage:Member\", name: \"Manage members\", description: \"Invite, suspend, or remove members\", category: \"Member\" },\n { code: \"read:Role\", name: \"View roles\", description: \"View roles defined in this business unit\", category: \"Role\" },\n { code: \"manage:Role\", name: \"Manage roles\", description: \"Create, edit, or delete roles\", category: \"Role\" },\n { code: \"read:BUDashboard\", name: \"View business unit\", description: \"View business unit details and dashboard\", category: \"Business unit\" },\n { code: \"update:BUSettings\", name: \"Edit business unit settings\", description: \"Update name, identifier, member limit, etc.\", category: \"Business unit\" },\n { code: \"manage:BUSettings\", name: \"Manage business unit settings\", description: \"Full control over business unit settings (implies update).\", category: \"Business unit\" },\n { code: \"read:Invitation\", name: \"View invitations\", description: \"View pending invitations\", category: \"Invitation\" },\n { code: \"manage:Invitation\", name: \"Manage invitations\", description: \"Send, resend, or cancel invitations\", category: \"Invitation\" },\n { code: \"read:Billing\", name: \"View billing\", description: \"View billing details and invoices\", category: \"Billing\" },\n { code: \"manage:Billing\", name: \"Manage billing\", description: \"Update payment methods and billing settings\", category: \"Billing\" },\n] as const;\n\nfunction makePermissions(scopeId: string): Permission[] {\n return PERMISSION_CATALOG.map((p) => ({\n id: `perm-${p.code}`,\n ...p,\n scopeId,\n createdAt: \"2024-01-01T00:00:00.000Z\",\n }));\n}\n\nfunction makeRoles({\n includeBilling,\n customCount,\n}: {\n includeBilling: boolean;\n customCount: number;\n}): Role[] {\n const ALL = PERMISSION_CATALOG.filter((p) => includeBilling || p.category !== \"Billing\").map(\n (p) => p.code,\n );\n const READ_ONLY = ALL.filter((c) => c.startsWith(\"read:\"));\n const ADMIN_NO_BILLING = ALL.filter((c) => !c.startsWith(\"manage:Billing\"));\n\n const roles: Role[] = [\n {\n id: \"role-owner\",\n name: \"Owner\",\n description: \"Full access to everything in this business unit.\",\n permissions: [\"*\"],\n isSystem: true,\n assignmentCount: 1,\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n {\n id: \"role-admin\",\n name: \"Admin\",\n description: \"Manage members, roles, and business unit settings.\",\n permissions: ADMIN_NO_BILLING,\n isSystem: true,\n assignmentCount: 2,\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n {\n id: \"role-member\",\n name: \"Member\",\n description: \"Read-only access to members, roles, and business unit details.\",\n permissions: READ_ONLY,\n isSystem: true,\n assignmentCount: 9,\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n if (customCount >= 1) {\n roles.push({\n id: \"role-custom-support\",\n name: \"Support\",\n description: \"Read members and invitations; can manage invitations.\",\n permissions: [\"read:Member\", \"read:Invitation\", \"manage:Invitation\"],\n isSystem: false,\n assignmentCount: 3,\n createdAt: \"2024-01-01T00:00:00.000Z\",\n });\n }\n if (customCount >= 2) {\n roles.push({\n id: \"role-custom-billing\",\n name: \"Billing manager\",\n description: \"Manage billing without member or role access.\",\n permissions: [\"read:Billing\", \"manage:Billing\"],\n isSystem: false,\n assignmentCount: 1,\n createdAt: \"2024-01-01T00:00:00.000Z\",\n });\n }\n\n return roles;\n}\n\nconst FIRST_NAMES = [\n \"Alex\", \"Bea\", \"Caio\", \"Dani\", \"Eva\", \"Felipe\", \"Gabi\", \"Hugo\",\n \"Ines\", \"João\", \"Karina\", \"Lucas\", \"Maria\", \"Nico\", \"Olivia\", \"Pedro\",\n \"Quintino\", \"Rita\", \"Sofia\", \"Tomás\", \"Ulysses\", \"Vera\", \"Wagner\", \"Xavier\",\n \"Yara\", \"Zé\", \"Antonio\", \"Bia\",\n];\n\n// Stable userId across BUs so the same person appearing in multiple BUs\n// deduplicates in the cross-BU view. The membership-row id (`m-…`) stays\n// BU-scoped since memberships are per-BU.\nfunction makeMembers(buId: string, count: number, ownerRole: string): Member[] {\n return Array.from({ length: count }).map((_, i) => {\n const first = FIRST_NAMES[i % FIRST_NAMES.length];\n const name = i === 0 ? \"You\" : `${first} ${([\"Silva\", \"Santos\", \"Oliveira\", \"Costa\"][i % 4])}`;\n const role =\n i === 0\n ? ownerRole\n : ([\"Admin\", \"Member\", \"Member\", \"Member\"][i % 4] ?? \"Member\");\n return {\n id: `m-${buId}-${i}`,\n userId: i === 0 ? \"current-user\" : `u-${i}`,\n status: i === 3 ? \"suspended\" : \"active\",\n joinedAt: new Date(Date.now() - i * 86400000 * 7).toISOString(),\n name,\n email: i === 0 ? \"you@example.com\" : `${first.toLowerCase()}.${i}@example.com`,\n roles: [{ id: `role-${role.toLowerCase()}`, name: role }],\n } satisfies Member;\n });\n}\n\n// ───────────────────────────────────────── fluent builder\n//\n// SDK review §4.3 — the single-arg `createMockClient({ empty, latency,\n// failWith })` is fine for the playground's happy-path-or-empty cases,\n// but external integrators writing Storybook + integration tests need\n// to assemble specific scenarios (a BU with one suspended member, a\n// custom role with a tight permission set, a pending invitation\n// expiring tomorrow…). The builder below curates a draft `MockState`\n// step-by-step and `.build()` hands back a `RoadClient` bound to it.\n\n/** Failure scenarios that flip the mock into a known failure mode. */\nexport type MockScenario =\n | \"network-error\"\n | \"auth-error\"\n | \"rate-limit\"\n | \"server-error\";\n\ninterface BuilderState {\n state: MockState;\n latency: number;\n scenario?: MockScenario;\n /**\n * Cookie-mode `onUnauthenticated` handler, fired by the\n * `auth-error` scenario so widget-level tests can assert that a\n * terminal 401 routes through the integrator's redirect callback.\n * This is the only piece of cookie-mode wiring the in-memory mock\n * actually exercises — see {@link MockClientBuilder.withCookieMode}\n * for the full caveats.\n */\n onUnauthenticated?: () => void;\n}\n\n/**\n * Fluent builder for `RoadClient` mocks. Each `with*` call mutates the\n * draft state and returns `this` so chains compose. Call `.build()` to\n * materialize a `RoadClient` bound to the assembled state.\n *\n * Defaults: starts empty (no BUs), latency 0ms, no scenario.\n *\n * ```ts\n * const client = mockClientBuilder()\n * .withLatency(50)\n * .withBusinessUnit({ name: \"Acme\", role: \"Owner\" })\n * .withMember(\"Acme\", { name: \"Alex\", email: \"alex@x.com\", role: \"Admin\" })\n * .withInvitation(\"Acme\", { email: \"pending@x.com\", roleName: \"Member\" })\n * .build();\n * ```\n */\nexport class MockClientBuilder {\n private readonly draft: BuilderState;\n\n constructor() {\n this.draft = {\n state: seedEmpty(),\n latency: 0,\n };\n }\n\n /** Set artificial network latency in ms. */\n withLatency(ms: number): this {\n this.draft.latency = ms;\n return this;\n }\n\n /**\n * Seed with the rich playground data (3 BUs with members, roles, an\n * invitation, a pending cross-BU invitation). Replaces any prior\n * `withBusinessUnit` calls in the chain.\n */\n withRichSeed(): this {\n this.draft.state = seedRich();\n return this;\n }\n\n /**\n * Add a business unit. `name` is required; everything else is derived\n * with sensible defaults. `role` declares the current user's role\n * within this BU — defaults to \"Owner\" with wildcard permissions.\n */\n withBusinessUnit(spec: {\n id?: string;\n name: string;\n slug?: string;\n role?: string;\n memberLimit?: number | null;\n /** Wildcard-grant the user — defaults to true for Owner / false otherwise. */\n wildcard?: boolean;\n }): this {\n const id = spec.id ?? `bu-${slugify(spec.name)}`;\n const slug = spec.slug ?? slugify(spec.name);\n const roleName = spec.role ?? \"Owner\";\n const wildcard = spec.wildcard ?? roleName === \"Owner\";\n const bu: BusinessUnitDetail = {\n id,\n name: spec.name,\n slug,\n status: \"active\",\n memberCount: 1,\n memberLimit: spec.memberLimit ?? null,\n joinCode: null,\n createdAt: new Date().toISOString(),\n iamScopeId: `scope-${id}`,\n };\n this.draft.state.businessUnits.push(bu);\n\n const roleId = `role-${slugify(roleName)}`;\n const baseRoles: Role[] = [\n {\n id: roleId,\n name: roleName,\n description: wildcard\n ? `Full access (${roleName}).`\n : `${roleName} access.`,\n permissions: wildcard ? [\"*\"] : [\"read:Member\", \"read:Role\", \"read:BUDashboard\"],\n isSystem: true,\n assignmentCount: 1,\n createdAt: bu.createdAt,\n },\n ];\n this.draft.state.roles[id] = baseRoles;\n this.draft.state.userRoles[id] = [{ id: roleId, name: roleName }];\n this.draft.state.members[id] = [\n {\n id: `m-${id}-self`,\n userId: \"current-user\",\n status: \"active\",\n joinedAt: bu.createdAt,\n name: \"You\",\n email: \"you@example.com\",\n roles: [{ id: roleId, name: roleName }],\n },\n ];\n this.draft.state.invitations[id] = [];\n this.draft.state.permissions[id] = makePermissions(bu.iamScopeId);\n return this;\n }\n\n /** Add a member to an existing BU. `buName` matches `BusinessUnit.name`. */\n withMember(\n buName: string,\n spec: { name: string; email: string; role?: string; status?: Member[\"status\"] },\n ): this {\n const bu = this.requireBu(buName);\n const roleName = spec.role ?? \"Member\";\n const member: Member = {\n id: `m-${bu.id}-${(this.draft.state.members[bu.id]?.length ?? 0)}`,\n userId: `u-${slugify(spec.email)}`,\n status: spec.status ?? \"active\",\n joinedAt: new Date().toISOString(),\n name: spec.name,\n email: spec.email,\n roles: [{ id: `role-${slugify(roleName)}`, name: roleName }],\n };\n this.draft.state.members[bu.id] = [\n ...(this.draft.state.members[bu.id] ?? []),\n member,\n ];\n return this;\n }\n\n /** Add a custom role to a BU. The role does NOT auto-assign to anyone. */\n withRole(\n buName: string,\n spec: {\n name: string;\n description?: string;\n permissions: string[];\n isSystem?: boolean;\n },\n ): this {\n const bu = this.requireBu(buName);\n const role: Role = {\n id: `role-${slugify(spec.name)}`,\n name: spec.name,\n description: spec.description ?? \"\",\n permissions: [...spec.permissions],\n isSystem: spec.isSystem ?? false,\n assignmentCount: 0,\n createdAt: bu.createdAt,\n };\n this.draft.state.roles[bu.id] = [\n ...(this.draft.state.roles[bu.id] ?? []),\n role,\n ];\n return this;\n }\n\n /** Add a pending invitation to a BU. */\n withInvitation(\n buName: string,\n spec: { email: string; roleName: string; expiresInDays?: number },\n ): this {\n const bu = this.requireBu(buName);\n const inv: Invitation = {\n id: `inv-${slugify(spec.email)}-${id()}`,\n email: spec.email,\n roleId: `role-${slugify(spec.roleName)}`,\n roleName: spec.roleName,\n status: \"pending\",\n invitedAt: new Date().toISOString(),\n expiresAt: new Date(\n Date.now() + (spec.expiresInDays ?? 14) * 86400000,\n ).toISOString(),\n };\n this.draft.state.invitations[bu.id] = [\n inv,\n ...(this.draft.state.invitations[bu.id] ?? []),\n ];\n return this;\n }\n\n /** Add a cross-BU pending invitation visible on the current user's surface. */\n withPendingInvitation(spec: {\n businessUnit: { id?: string; name: string; slug?: string };\n roleName: string;\n expiresInDays?: number;\n }): this {\n this.draft.state.pendingInvitations.push({\n id: `pinv-${id()}`,\n businessUnit: {\n id: spec.businessUnit.id ?? `bu-${slugify(spec.businessUnit.name)}`,\n name: spec.businessUnit.name,\n slug: spec.businessUnit.slug ?? slugify(spec.businessUnit.name),\n },\n roleName: spec.roleName,\n expiresAt: new Date(\n Date.now() + (spec.expiresInDays ?? 5) * 86400000,\n ).toISOString(),\n });\n return this;\n }\n\n /**\n * Flip the mock into a failure scenario. Every call rejects with a\n * shape matching the scenario (Error message keyed for assertions).\n */\n withScenario(scenario: MockScenario): this {\n this.draft.scenario = scenario;\n return this;\n }\n\n /**\n * Wire an `onUnauthenticated` handler that the `auth-error`\n * scenario fires (with the same 1s debounce HttpRoadClient uses).\n * Lets tests assert the cookie-mode redirect path without standing\n * up an HTTP fixture.\n *\n * ## Scope — what this does and does not do\n *\n * ✓ **Does**: fire `onUnauthenticated` on `withScenario(\"auth-error\")`,\n * debounced to once per 1s window, with handler-exception safety\n * matching the production HttpRoadClient.\n *\n * ✗ **Does not** simulate cookie-mode transport behavior. The\n * in-memory mock has no fetch, no `credentials: 'include'`, no\n * `XSRF-TOKEN` echo, no `Authorization` header omission. Those are\n * transport concerns and need an HTTP-level fixture to test\n * honestly.\n *\n * For tests that need to assert HTTP-level cookie-mode behavior\n * (CSRF echo, credentials, no Authorization), mock `globalThis.fetch`\n * directly against `HttpRoadClient` — see\n * `src/api/cookie-mode.test.ts` for the canonical pattern.\n */\n withCookieMode(opts: { onUnauthenticated?: () => void } = {}): this {\n this.draft.onUnauthenticated = opts.onUnauthenticated;\n return this;\n }\n\n /** Materialize the assembled state into a RoadClient. */\n build(): RoadClient {\n return createMockClientFromState(this.draft);\n }\n\n private requireBu(buName: string): BusinessUnitDetail {\n const bu = this.draft.state.businessUnits.find((b) => b.name === buName);\n if (!bu) {\n throw new Error(\n `MockClientBuilder: business unit \"${buName}\" not found — call withBusinessUnit(\"${buName}\") first.`,\n );\n }\n return bu;\n }\n}\n\n/** Entry point for the fluent mock-client builder. See {@link MockClientBuilder}. */\nexport function mockClientBuilder(): MockClientBuilder {\n return new MockClientBuilder();\n}\n\n/**\n * Construct a `RoadClient` from a pre-assembled draft. Used internally by\n * {@link MockClientBuilder.build}; kept private to the module since the\n * builder is the supported entry point.\n */\n/**\n * Mirror of HttpRoadClient's UNAUTH_DEBOUNCE_MS. Kept in sync by\n * convention — the mock and the real client should behave the same on\n * burst 401s so production and test traces don't diverge.\n */\nconst MOCK_UNAUTH_DEBOUNCE_MS = 1000;\n\nfunction createMockClientFromState(draft: BuilderState): RoadClient {\n const stateRef = draft.state;\n // Local debounce state for the auth-error scenario, bounded to this\n // mock instance so tests stay isolated.\n let lastUnauthAt = 0;\n\n async function maybeFail() {\n if (draft.latency > 0) await sleep(draft.latency);\n if (!draft.scenario) return;\n switch (draft.scenario) {\n case \"network-error\":\n throw new Error(\"Mock scenario: network-error\");\n case \"auth-error\": {\n if (draft.onUnauthenticated) {\n const now = Date.now();\n if (now - lastUnauthAt >= MOCK_UNAUTH_DEBOUNCE_MS) {\n lastUnauthAt = now;\n try {\n draft.onUnauthenticated();\n } catch {\n // Swallow — match HttpRoadClient's handler-safety contract.\n }\n }\n }\n throw new Error(\"Mock scenario: auth-error (401)\");\n }\n case \"rate-limit\":\n throw new Error(\"Mock scenario: rate-limit (429)\");\n case \"server-error\":\n throw new Error(\"Mock scenario: server-error (5xx)\");\n }\n }\n\n // Reuse the body of createMockClient by inlining the state binding.\n // This duplicates the method bodies but keeps the existing options-API\n // implementation untouched — the alternative (refactoring\n // createMockClient to take state as a parameter) would touch a lot of\n // lines for marginal DRY gain.\n return {\n async getCurrentUser(): Promise<CurrentUser> {\n await maybeFail();\n return { id: \"current-user\", name: \"You\", email: \"you@example.com\" };\n },\n\n async getMyBusinessUnits(): Promise<MyBusinessUnits> {\n await maybeFail();\n const memberships: Membership[] = stateRef.businessUnits.map((bu) => ({\n businessUnit: { id: bu.id, name: bu.name, slug: bu.slug },\n status: \"active\",\n joinedAt: bu.createdAt,\n roles: stateRef.userRoles[bu.id] ?? [],\n }));\n return { memberships, pendingInvitations: stateRef.pendingInvitations };\n },\n\n async getMyPermissions(): Promise<MyPermissions> {\n await maybeFail();\n const out: MyPermissions = {};\n for (const bu of stateRef.businessUnits) {\n const myRoles = stateRef.userRoles[bu.id] ?? [];\n const fullRoles = (stateRef.roles[bu.id] ?? []).filter((r) =>\n myRoles.some((mr) => mr.id === r.id),\n );\n if (fullRoles.some((r) => r.permissions.includes(\"*\"))) {\n out[bu.id] = [\"*\"];\n } else {\n const set = new Set<string>();\n for (const r of fullRoles) for (const p of r.permissions) set.add(p);\n out[bu.id] = Array.from(set);\n }\n }\n return out;\n },\n\n async getBusinessUnit(buId: string): Promise<BusinessUnitDetail> {\n await maybeFail();\n const bu = stateRef.businessUnits.find((x) => x.id === buId);\n if (!bu) throw new Error(\"Business unit not found\");\n return { ...bu, memberCount: (stateRef.members[buId] ?? []).length };\n },\n\n async createBusinessUnit(input) {\n await maybeFail();\n const newBu: BusinessUnitDetail = {\n id: id(),\n name: input.name,\n slug: input.slug ?? slugify(input.name),\n status: \"active\",\n memberCount: 1,\n memberLimit: input.memberLimit ?? null,\n joinCode: id().toUpperCase(),\n createdAt: new Date().toISOString(),\n iamScopeId: `scope-${id()}`,\n };\n stateRef.businessUnits = [newBu, ...stateRef.businessUnits];\n stateRef.userRoles[newBu.id] = [{ id: \"role-owner\", name: \"Owner\" }];\n stateRef.members[newBu.id] = [\n {\n id: id(),\n userId: \"current-user\",\n status: \"active\",\n joinedAt: newBu.createdAt,\n name: \"You\",\n email: \"you@example.com\",\n roles: [{ id: \"role-owner\", name: \"Owner\" }],\n },\n ];\n stateRef.roles[newBu.id] = makeRoles({ includeBilling: false, customCount: 0 });\n stateRef.permissions[newBu.id] = makePermissions(newBu.iamScopeId);\n return newBu;\n },\n\n async updateBusinessUnit(buId, input) {\n await maybeFail();\n const bu = stateRef.businessUnits.find((x) => x.id === buId);\n if (!bu) throw new Error(\"Business unit not found\");\n if (input.name !== undefined) bu.name = input.name;\n if (input.joinCode !== undefined) bu.joinCode = input.joinCode;\n if (input.memberLimit !== undefined) bu.memberLimit = input.memberLimit;\n return { ...bu, memberCount: (stateRef.members[buId] ?? []).length };\n },\n\n async listMembers(buId, pagination) {\n await maybeFail();\n return paginate(stateRef.members[buId] ?? [], pagination);\n },\n\n async suspendMember(buId, memberId) {\n await maybeFail();\n const m = (stateRef.members[buId] ?? []).find((x) => x.id === memberId);\n if (m) m.status = \"suspended\";\n },\n async reinstateMember(buId, memberId) {\n await maybeFail();\n const m = (stateRef.members[buId] ?? []).find((x) => x.id === memberId);\n if (m) m.status = \"active\";\n },\n async removeMember(buId, memberId) {\n await maybeFail();\n stateRef.members[buId] = (stateRef.members[buId] ?? []).filter(\n (x) => x.id !== memberId,\n );\n },\n\n async listInvitations(buId, pagination) {\n await maybeFail();\n return paginate(stateRef.invitations[buId] ?? [], pagination);\n },\n async createInvitation(buId, input) {\n await maybeFail();\n const role = (stateRef.roles[buId] ?? []).find((r) => r.id === input.roleId);\n const inv: Invitation = {\n id: id(),\n email: input.email,\n roleId: input.roleId,\n roleName: role?.name ?? \"Member\",\n status: \"pending\",\n invitedAt: new Date().toISOString(),\n expiresAt: new Date(Date.now() + 14 * 86400000).toISOString(),\n };\n stateRef.invitations[buId] = [inv, ...(stateRef.invitations[buId] ?? [])];\n return inv;\n },\n async cancelInvitation(buId, invitationId) {\n await maybeFail();\n stateRef.invitations[buId] = (stateRef.invitations[buId] ?? []).map((inv) =>\n inv.id === invitationId ? { ...inv, status: \"cancelled\" } : inv,\n );\n },\n async resendInvitation(buId, invitationId) {\n await maybeFail();\n stateRef.invitations[buId] = (stateRef.invitations[buId] ?? []).map((inv) =>\n inv.id === invitationId\n ? {\n ...inv,\n invitedAt: new Date().toISOString(),\n expiresAt: new Date(Date.now() + 14 * 86400000).toISOString(),\n }\n : inv,\n );\n },\n async acceptInvitation(invitationId: string) {\n await maybeFail();\n const idx = stateRef.pendingInvitations.findIndex(\n (inv) => inv.id === invitationId,\n );\n if (idx < 0) throw new Error(\"Invitation not found\");\n const inv = stateRef.pendingInvitations[idx]!;\n stateRef.pendingInvitations.splice(idx, 1);\n const newBu: BusinessUnitDetail = {\n id: inv.businessUnit.id,\n name: inv.businessUnit.name,\n slug: inv.businessUnit.slug,\n status: \"active\",\n memberCount: 1,\n memberLimit: null,\n joinCode: null,\n createdAt: new Date().toISOString(),\n iamScopeId: `scope-${inv.businessUnit.id}`,\n };\n if (!stateRef.businessUnits.find((b) => b.id === newBu.id)) {\n stateRef.businessUnits = [newBu, ...stateRef.businessUnits];\n }\n const roleName = inv.roleName;\n const roleId = `role-${roleName.toLowerCase()}`;\n stateRef.userRoles[newBu.id] = [{ id: roleId, name: roleName }];\n stateRef.members[newBu.id] = [\n {\n id: id(),\n userId: \"current-user\",\n status: \"active\",\n joinedAt: new Date().toISOString(),\n name: \"You\",\n email: \"you@example.com\",\n roles: [{ id: roleId, name: roleName }],\n },\n ];\n stateRef.roles[newBu.id] = makeRoles({ includeBilling: false, customCount: 0 });\n stateRef.permissions[newBu.id] = makePermissions(newBu.iamScopeId);\n },\n async rejectInvitation(invitationId: string) {\n await maybeFail();\n stateRef.pendingInvitations = stateRef.pendingInvitations.filter(\n (inv) => inv.id !== invitationId,\n );\n },\n\n async listRoles(buId, pagination) {\n await maybeFail();\n return paginate(stateRef.roles[buId] ?? [], pagination);\n },\n async getRole(buId, roleId) {\n await maybeFail();\n const role = (stateRef.roles[buId] ?? []).find((r) => r.id === roleId);\n if (!role) throw new Error(\"Role not found\");\n return role;\n },\n async createRole(buId, input) {\n await maybeFail();\n const role: Role = {\n id: id(),\n name: input.name,\n description: input.description ?? \"\",\n permissions: [...input.permissions],\n isSystem: false,\n assignmentCount: 0,\n createdAt: new Date().toISOString(),\n };\n stateRef.roles[buId] = [role, ...(stateRef.roles[buId] ?? [])];\n return role;\n },\n async updateRole(buId, roleId, input) {\n await maybeFail();\n const role = (stateRef.roles[buId] ?? []).find((r) => r.id === roleId);\n if (!role) throw new Error(\"Role not found\");\n if (input.name !== undefined) role.name = input.name;\n if (input.description !== undefined)\n role.description = input.description ?? \"\";\n if (input.permissions !== undefined) role.permissions = [...input.permissions];\n return { ...role };\n },\n async deleteRole(buId, roleId) {\n await maybeFail();\n const role = (stateRef.roles[buId] ?? []).find((r) => r.id === roleId);\n if (role?.isSystem) throw new Error(\"System roles cannot be deleted\");\n stateRef.roles[buId] = (stateRef.roles[buId] ?? []).filter(\n (r) => r.id !== roleId,\n );\n },\n\n async listPermissions(buId) {\n await maybeFail();\n return stateRef.permissions[buId] ?? [];\n },\n\n async authorizeBatch(buId, permissions) {\n await maybeFail();\n if (permissions.length === 0) return {};\n const myRoles = stateRef.userRoles[buId] ?? [];\n const fullRoles = (stateRef.roles[buId] ?? []).filter((r) =>\n myRoles.some((mr) => mr.id === r.id),\n );\n const hasWildcard = fullRoles.some((r) => r.permissions.includes(\"*\"));\n if (hasWildcard) {\n return Object.fromEntries(permissions.map((p) => [p, true]));\n }\n const granted = new Set<string>();\n for (const r of fullRoles) for (const p of r.permissions) granted.add(p);\n const CRUD = [\"create\", \"read\", \"update\", \"delete\"] as const;\n for (const code of [...granted]) {\n const [action, subject] = code.split(\":\");\n if (action === \"manage\" && subject) {\n for (const verb of CRUD) granted.add(`${verb}:${subject}`);\n }\n }\n return Object.fromEntries(permissions.map((p) => [p, granted.has(p)]));\n },\n };\n}\n"],"names":["Subscribable","listener","FocusManager","#focused","#cleanup","#setup","onFocus","setup","focused","isFocused","focusManager","defaultTimeoutProvider","callback","delay","timeoutId","intervalId","TimeoutManager","#provider","#providerCalled","provider","timeoutManager","systemSetTimeoutZero","isServer","noop","functionalUpdate","updater","input","isValidTimeout","value","timeUntilStale","updatedAt","staleTime","resolveStaleTime","query","resolveQueryBoolean","option","matchQuery","filters","type","exact","fetchStatus","predicate","queryKey","stale","hashQueryKeyByOptions","partialMatchKey","isActive","matchMutation","mutation","status","mutationKey","hashKey","options","_","val","isPlainObject","result","key","a","b","hasOwn","replaceEqualDeep","depth","array","isPlainArray","aSize","bItems","bSize","copy","equalItems","i","aItem","bItem","shallowEqualObjects","o","hasObjectPrototype","ctor","prot","sleep","timeout","resolve","replaceData","prevData","data","error","addToEnd","items","item","max","newItems","addToStart","skipToken","ensureQueryFn","fetchOptions","shouldThrowError","throwOnError","params","addConsumeAwareSignal","object","getSignal","onCancelled","consumed","signal","environmentManager","isServerFn","isServerValue","pendingThenable","reject","thenable","_resolve","_reject","finalize","reason","defaultScheduler","createNotifyManager","queue","transactions","notifyFn","batchNotifyFn","scheduleFn","schedule","flush","originalQueue","args","fn","notifyManager","OnlineManager","#online","onOnline","onlineListener","offlineListener","online","onlineManager","defaultRetryDelay","failureCount","canFetch","networkMode","CancelledError","createRetryer","config","isRetryCancelled","continueFn","isResolved","cancel","cancelOptions","cancelRetry","continueRetry","canContinue","canStart","pause","continueResolve","run","promiseOrValue","initialPromise","retry","retryDelay","shouldRetry","Removable","#gcTimeout","newGcTime","infiniteQueryBehavior","pages","context","direction","oldPages","oldPageParams","currentPage","fetchFn","cancelled","addSignalProperty","queryFn","fetchPage","param","previous","queryFnContext","queryFnContext2","page","maxPages","addTo","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","remainingPages","pageParams","lastIndex","hasNextPage","hasPreviousPage","Query","#queryType","#initialState","#revertState","#cache","#client","#retryer","#defaultOptions","#abortSignalConsumed","getDefaultState","defaultState","successState","newData","#dispatch","state","promise","observer","x","#isInitialPausedFetch","abortController","context2","action","reducer","fetchState","newState","dataUpdatedAt","hasData","initialDataUpdatedAt","QueryObserver","client","#selectError","#currentThenable","#currentQuery","#currentQueryInitialState","#currentResult","#currentResultState","#currentResultOptions","#selectFn","#selectResult","#lastQueryWithDefinedData","#staleTimeoutId","#refetchIntervalId","#currentRefetchInterval","#trackedProps","shouldFetchOnMount","#executeFetch","#updateTimers","shouldFetchOn","#clearStaleTimeout","#clearRefetchInterval","prevOptions","prevQuery","#updateQuery","mounted","shouldFetchOptionally","#updateStaleTimeout","nextRefetchInterval","#computeRefetchInterval","#updateRefetchInterval","shouldAssignObserverCurrentProperties","onPropTracked","target","defaultedOptions","nextInterval","prevResult","prevResultState","prevResultOptions","queryInitialState","isPlaceholderData","fetchOnMount","fetchOptionally","errorUpdatedAt","skipSelect","placeholderData","selectError","isFetching","isPending","isError","isLoading","nextResult","isStale","hasResultData","isErrorWithoutData","finalizeThenableIfPossible","recreateThenable","pending","prevThenable","shouldNotifyListeners","notifyOnChangeProps","notifyOnChangePropsValue","includedProps","typedKey","#notify","notifyOptions","shouldLoadOnMount","field","optimisticResult","InfiniteQueryObserver","parentResult","isRefetching","isRefetchError","fetchDirection","isFetchNextPageError","isFetchingNextPage","isFetchPreviousPageError","isFetchingPreviousPage","Mutation","#observers","#mutationCache","variables","onContinue","mutationFnContext","restored","isPaused","e","MutationCache","#mutations","#scopes","#mutationId","scope","scopeFor","scopedMutations","index","firstPendingMutation","m","defaultedFilters","event","pausedMutations","MutationObserver","#currentMutation","#mutateOptions","#updateResult","onMutateResult","QueryCache","#queries","queryHash","queryInMap","queries","QueryClient","#queryCache","#queryDefaults","#mutationDefaults","#mountCount","#unsubscribeFocus","#unsubscribeOnline","cachedData","queryCache","defaultedCancelOptions","promises","defaults","queryDefault","QueryClientContext","React","useQueryClient","queryClient","QueryClientProvider","children","jsx","IsRestoringContext","useIsRestoring","createValue","isReset","QueryErrorResetBoundaryContext","useQueryErrorResetBoundary","ensurePreventErrorBoundaryRetry","errorResetBoundary","useClearResetErrorBoundary","getHasError","suspense","ensureSuspenseTimers","clamp","originalStaleTime","willFetch","isRestoring","shouldSuspend","fetchOptimistic","useBaseQuery","Observer","subscribed","isNewCacheEntry","shouldSubscribe","onStoreChange","unsubscribe","useQuery","useMutation","mutate","mutateOptions","useInfiniteQuery","__insertCSS","code","head","style","getAsset","SuccessIcon","InfoIcon","WarningIcon","ErrorIcon","bars","Loader","visible","className","CloseIcon","useIsDocumentHidden","isDocumentHidden","setIsDocumentHidden","toastsCounter","subscriber","_data_id","message","rest","id","alreadyExists","toast","dismissible","p","shouldDismiss","originalPromise","response","isHttpResponse","promiseData","description","toastSettings","unwrap","ToastState","toastFunction","basicToast","getHistory","getToasts","isAction","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","MOBILE_VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_THRESHOLD","TIME_BEFORE_UNMOUNT","cn","classes","getDefaultSwipeDirections","position","y","directions","Toast","props","_toast_classNames","_toast_classNames1","_toast_classNames2","_toast_classNames3","_toast_classNames4","_toast_classNames5","_toast_classNames6","_toast_classNames7","_toast_classNames8","ToasterInvert","unstyled","interacting","setHeights","visibleToasts","heights","toasts","expanded","removeToast","defaultRichColors","closeButtonFromToaster","cancelButtonStyle","actionButtonStyle","descriptionClassName","durationFromToaster","gap","expandByDefault","classNames","icons","closeButtonAriaLabel","swipeDirection","setSwipeDirection","swipeOutDirection","setSwipeOutDirection","setMounted","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","isSwiped","setIsSwiped","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","remainingTime","dragStartTime","toastRef","isFront","isVisible","toastType","toastClassname","toastDescriptionClassname","heightIndex","height","closeButton","_toast_closeButton","duration","closeTimerStartTimeRef","offset","lastCloseTimerStartTimeRef","pointerStartRef","toastsHeightBefore","prev","curr","reducerIndex","invert","disabled","toastNode","h","originalHeight","newHeight","deleteToast","elapsedTime","getLoadingIcon","icon","_toast_richColors","_icons_close","_toastRef_current","_toastRef_current1","_dragStartTime_current","swipeAmountX","swipeAmountY","timeTaken","swipeAmount","velocity","_toastRef_current2","_toastRef_current3","_window_getSelection","yDelta","xDelta","_props_swipeDirections","swipeDirections","getDampening","delta","dampenedDelta","getDocumentDirection","dirAttribute","assignOffset","defaultOffset","mobileOffset","styles","isMobile","prefix","defaultValue","assignAll","Toaster","ref","hotkey","expand","theme","richColors","toastOptions","dir","containerAriaLabel","setToasts","filteredToasts","possiblePositions","setExpanded","setInteracting","actualTheme","setActualTheme","listRef","hotkeyLabel","lastFocusedElementRef","isFocusWithinRef","toastToRemove","_toasts_find","t","ReactDOM","indexOfExistingToast","darkMediaQuery","matches","handleKeyDown","_listRef_current","_listRef_current1","_heights_","_toastOptions_duration","_toastOptions_closeButton","RoadContext","createContext","useRoad","ctx","useContext","KEYS","buId","roleId","useCurrentUser","useMyBusinessUnits","useMyPermissions","useCan","ctxId","useCurrentBusinessUnitId","effectiveBuId","useCallback","perms","useRoadClient","useCanMany","actions","ctxBuId","actionsKey","permissions","canAny","canAll","v","useBusinessUnit","useInfiniteMembers","limit","pageParam","last","useInfiniteInvitations","useCreateBusinessUnit","qc","useUpdateBusinessUnit","bu","useSuspendMember","memberId","useReinstateMember","useRemoveMember","useCreateInvitation","useCancelInvitation","invitationId","useResendInvitation","useAcceptInvitation","useRejectInvitation","useRoles","useInfiniteRoles","useRole","usePermissions","useCreateRole","useUpdateRole","role","useDeleteRole","localStorageBackend","CurrentBusinessUnitContext","CurrentBusinessUnitProvider","initialBusinessUnitId","storageKey","storage","onSelect","currentBusinessUnitId","_setId","useState","setCurrentBusinessUnitId","useMemo","jsxs","AutoSelectFirst","useEffect","first","current","useCurrentBusinessUnit","useSetCurrentBusinessUnit","VARIABLE_TO_CSS_VAR","appearanceToStyle","appearance","cssVar","resolveColorScheme","scheme","RoadApiError","init","detail","RoadAuthError","RoadForbiddenError","RoadNotFoundError","RoadConflictError","RoadValidationError","buildFieldErrors","RoadRateLimitError","RoadServerError","RoadNetworkError","cause","problem","out","err","mapStatusToError","apiRoleToRole","r","DEFAULT_RETRY","MAX_BULK_SCOPES","UNAUTH_DEBOUNCE_MS","ms","newIdempotencyKey","c","HttpRoadClient","now","src","path","method","retryCfg","idempotencyKey","isMutatingMethod","maxAttempts","start","attempts","lastError","requestId","traceId","backoffDelay","finalError","authMode","headers","jwt","csrfCookie","csrfHeader","token","readCookie","credentials","res","buildErrorFromResponse","pagination","extraParams","qs","listQueryString","paginationMeta","cached","claims","decodeJwtPayload","email","name","picture","memberships","scopeIdByBu","scopeId","uniqueScopeIds","byScope","parts","chunk","ids","part","tuples","body","deriveSlug","paged","subjectId","results","escaped","match","arr","size","base","attempt","exp","jitter","parseProblemDetails","retryAfterHeader","retryAfter","parsed","payload","padded","f","n","clsx","concatArrays","array1","array2","combinedArray","createClassValidatorObject","classGroupId","validator","createClassPartObject","nextPart","validators","CLASS_PART_SEPARATOR","EMPTY_CONFLICTS","ARBITRARY_PROPERTY_PREFIX","createClassGroupUtils","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","getGroupIdForArbitraryProperty","classParts","startIndex","getGroupRecursive","hasPostfixModifier","modifierConflicts","baseConflicts","classPartObject","currentClassPart","nextClassPartObject","classRest","validatorsLength","validatorObj","content","colonIndex","property","classGroups","processClassGroups","group","processClassesRecursively","classGroup","len","classDefinition","processClassDefinition","processStringDefinition","processFunctionDefinition","processObjectDefinition","classPartObjectToEdit","getPart","isThemeGetter","entries","next","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","EMPTY_MODIFIERS","createResultObject","modifiers","hasImportantModifier","baseClassName","maybePostfixModifierPosition","isExternal","createParseClassName","experimentalParseClassName","parseClassName","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","fullPrefix","parseClassNameOriginal","createSortModifiers","modifierWeights","mod","currentSegment","modifier","isArbitrary","isOrderSensitive","createConfigUtils","createPostfixLookupClassGroupIds","lookup","classGroupIds","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","sortModifiers","postfixLookupClassGroupIds","classGroupsInConflict","originalClassName","baseClassNameWithoutPostfix","classGroupIdWithPostfix","variantModifier","modifierId","classId","conflictGroups","twJoin","classLists","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fallbackThemeArr","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isNamedContainerQuery","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryWeight","isLabelWeight","isArbitraryFamilyName","isLabelFamilyName","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","isArbitraryVariableWeight","testLabel","testValue","shouldMatchNoLabel","label","getDefaultConfig","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleSizingInline","scaleSizingBlock","scaleColor","scaleBgPosition","scaleBgRepeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","twMerge","inputs","DEFAULT_API_BASE_URL","ROAD_API_URLS","CURRENT_BU_STORAGE_KEY","RoadProvider","onUnauthenticated","csrfCookieName","csrfHeaderName","withCredentials","apiBaseUrl","locale","localization","clientOverride","businessUnitId","businessUnitStorage","storageNamespace","onSelectBusinessUnit","telemetry","hasWarned","useRef","effectiveAuthMode","RoadToaster","setRef","composeRefs","refs","node","hasCleanup","cleanups","cleanup","useComposedRefs","REACT_LAZY_TYPE","use","isPromiseLike","isLazyComponent","element","createSlot","ownerName","SlotClone","createSlotClone","Slot2","forwardedRef","slotProps","childrenArray","slottable","isSlottable","newElement","newChildren","child","Slot","childrenRef","getElementRef","props2","mergeProps","SLOTTABLE_IDENTIFIER","childProps","overrideProps","propName","slotPropValue","childPropValue","getter","mayWarn","falsyToString","cx","cva","_config_compoundVariants","variants","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","acc","getCompoundVariantClassNames","cvClass","cvClassName","compoundVariantOptions","buttonVariants","Button","forwardRef","asChild","composeEventHandlers","originalEventHandler","ourEventHandler","checkForDefaultPrevented","createContext2","rootComponentName","defaultContext","Context","Provider","useContext2","consumerName","createContextScope","scopeName","createContextScopeDeps","defaultContexts","createContext3","BaseContext","createScope","scopeContexts","contexts","composeContextScopes","scopes","baseScope","scopeHooks","createScope2","overrideScopes","nextScopes","nextScopes2","useScope","currentScope","useLayoutEffect2","useReactId","count","useId","deterministicId","setId","useLayoutEffect","reactId","useInsertionEffect","useControllableState","prop","defaultProp","onChange","caller","uncontrolledProp","setUncontrolledProp","onChangeRef","useUncontrolledState","isControlled","isControlledRef","wasControlled","setValue","nextValue","value2","isFunction","prevValueRef","NODES","Primitive","primitive","Node","primitiveProps","Comp","dispatchDiscreteCustomEvent","useCallbackRef","callbackRef","useEscapeKeydown","onEscapeKeyDownProp","ownerDocument","onEscapeKeyDown","DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableLayerContext","DismissableLayer","disableOutsidePointerEvents","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","layerProps","setNode","force","composedRefs","node2","layers","highestLayerWithOutsidePointerEventsDisabled","highestLayerWithOutsidePointerEventsDisabledIndex","isBodyPointerEventsDisabled","isPointerEventsEnabled","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","branch","focusOutside","useFocusOutside","dispatchUpdate","handleUpdate","BRANCH_NAME","DismissableLayerBranch","handlePointerDownOutside","isPointerInsideReactTreeRef","handleClickRef","handlePointerDown","handleAndDispatchPointerDownOutsideEvent2","handleAndDispatchCustomEvent","eventDetail","timerId","handleFocusOutside","isFocusInsideReactTreeRef","handleFocus","handler","discrete","AUTOFOCUS_ON_MOUNT","AUTOFOCUS_ON_UNMOUNT","EVENT_OPTIONS","FOCUS_SCOPE_NAME","FocusScope","loop","trapped","onMountAutoFocusProp","onUnmountAutoFocusProp","scopeProps","container","setContainer","onMountAutoFocus","onUnmountAutoFocus","focusScope","handleFocusIn2","focus","handleFocusOut2","relatedTarget","handleMutations2","mutations","mutationObserver","focusScopesStack","previouslyFocusedElement","mountEvent","focusFirst","removeLinks","getTabbableCandidates","unmountEvent","isTabKey","focusedElement","container2","getTabbableEdges","candidates","select","candidate","findVisible","nodes","walker","isHiddenInput","elements","isHidden","upTo","isSelectableInput","createFocusScopesStack","stack","activeFocusScope","arrayRemove","updatedArray","PORTAL_NAME","Portal","containerProp","portalProps","useStateMachine","initialState","machine","Presence","present","presence","usePresence","React2","stylesRef","prevPresentRef","prevAnimationNameRef","send","currentAnimationName","getAnimationName","wasPresent","prevAnimationName","ownerWindow","handleAnimationEnd","isCurrentAnimation","currentFillMode","handleAnimationStart","useFocusGuards","edgeGuards","createFocusGuard","__assign","s","__rest","__spreadArray","to","from","pack","l","ar","zeroRightClassName","fullWidthClassName","noScrollbarsClassName","removedBarSizeVariable","assignRef","initialValue","useIsomorphicLayoutEffect","currentValues","useMergeRefs","newValue","oldValue","prevRefs_1","nextRefs_1","current_1","ItoI","innerCreateMedium","middleware","buffer","assigned","medium","cb","cbs","pendingQueue","executeQueue","cycle","filter","createSidecarMedium","SideCar","_a","sideCar","Target","exportSidecar","exported","effectCar","nothing","RemoveScroll","parentRef","callbacks","setCallbacks","forwardProps","removeScrollBar","enabled","shards","noRelative","noIsolation","inert","allowPinchZoom","_b","Container","gapMode","containerRef","containerProps","getNonce","makeStyleTag","tag","nonce","injectStyles","css","insertStyleTag","stylesheetSingleton","counter","stylesheet","styleHookSingleton","sheet","isDynamic","styleSingleton","useStyle","Sheet","dynamic","zeroGap","parse","getOffset","cs","left","top","right","getGapWidth","offsets","documentWidth","windowWidth","Style","lockAttribute","getStyles","allowRelative","important","getCurrentUseCounter","useLockAttribute","newCounter","RemoveScrollBar","noImportant","passiveSupported","nonPassive","alwaysContainsScroll","elementCanBeScrolled","overflow","elementCouldBeVScrolled","elementCouldBeHScrolled","locationCouldBeScrolled","axis","isScrollable","elementCouldBeScrolled","getScrollVariables","scrollHeight","clientHeight","getVScrollVariables","scrollTop","getHScrollVariables","scrollLeft","scrollWidth","clientWidth","getDirectionFactor","handleScroll","endTarget","sourceDelta","noOverscroll","directionFactor","targetInLock","shouldCancelScroll","isDeltaPositive","availableScroll","availableScrollTop","scroll_1","capacity","elementScroll","parent_1","getTouchXY","getDeltaXY","extractRef","deltaCompare","generateStyle","idCounter","lockStack","RemoveScrollSideCar","shouldPreventQueue","touchStartRef","activeAxis","lastProps","allow_1","el","shouldCancelEvent","parent","touch","touchStart","deltaX","deltaY","currentAxis","moveDirection","selection","anchorNode","isTouchingSelection","canBeScrolledInMainDirection","cancelingAxis","shouldPrevent","_event","sourceEvent","shardNodes","shouldStop","shouldCancel","should","getOutermostShadowParent","scrollTouchStart","scrollWheel","scrollTouchMove","inst","shadowParent","ReactRemoveScroll","getDefaultParent","originalTarget","sampleTarget","counterMap","uncontrolledNodes","markerMap","lockCount","unwrapHost","correctTargets","targets","correctedTarget","applyAttributeToOthers","parentNode","markerName","controlAttribute","markerCounter","hiddenNodes","elementsToKeep","elementsToStop","keep","deep","attr","alreadyHidden","counterValue","markerValue","hideOthers","activeParentNode","DIALOG_NAME","createDialogContext","createDialogScope","DialogProvider","useDialogContext","Dialog","__scopeDialog","openProp","defaultOpen","onOpenChange","modal","triggerRef","contentRef","open","setOpen","prevOpen","TRIGGER_NAME","DialogTrigger","triggerProps","composedTriggerRef","getState","PortalProvider","usePortalContext","DialogPortal","forceMount","PortalPrimitive","OVERLAY_NAME","DialogOverlay","portalContext","overlayProps","DialogOverlayImpl","CONTENT_NAME","DialogContent","contentProps","DialogContentModal","DialogContentNonModal","DialogContentImpl","originalEvent","ctrlLeftClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","trapFocus","onOpenAutoFocus","onCloseAutoFocus","Fragment","TitleWarning","DescriptionWarning","TITLE_NAME","DialogTitle","titleProps","DESCRIPTION_NAME","DialogDescription","descriptionProps","CLOSE_NAME","DialogClose","closeProps","TITLE_WARNING_NAME","WarningProvider","useWarningContext","titleId","titleWarningContext","MESSAGE","DESCRIPTION_WARNING_NAME","descriptionId","describedById","Root","Trigger","Overlay","Content","Title","Description","Close","mergeClasses","toKebabCase","toCamelCase","p1","p2","toPascalCase","camelCase","defaultAttributes","hasA11yProp","Icon","color","strokeWidth","absoluteStrokeWidth","iconNode","createElement","attrs","createLucideIcon","iconName","Component","__iconNode","ArrowLeft","Building2","Check","ChevronDown","ChevronRight","CircleAlert","Copy","LoaderCircle","Lock","Mail","Minus","Pause","Play","Plus","RefreshCw","RotateCw","Search","Settings","ShieldCheck","Sparkles","Trash2","Users","X","DialogPrimitive.Root","DialogPrimitive.Trigger","DialogPrimitive.Overlay","hideCloseButton","DialogPrimitive.Portal","DialogPrimitive.Content","DialogPrimitive.Close","DialogHeader","DialogPrimitive.Title","DialogPrimitive.Description","createCollection","PROVIDER_NAME","createCollectionContext","createCollectionScope","CollectionProviderImpl","useCollectionContext","CollectionProvider","itemMap","COLLECTION_SLOT_NAME","CollectionSlotImpl","CollectionSlot","ITEM_SLOT_NAME","ITEM_DATA_ATTR","CollectionItemSlotImpl","CollectionItemSlot","itemData","useCollection","collectionNode","orderedNodes","DirectionContext","useDirection","localDir","globalDir","ENTRY_FOCUS","GROUP_NAME","Collection","createRovingFocusGroupContext","createRovingFocusGroupScope","RovingFocusProvider","useRovingFocusContext","RovingFocusGroup","RovingFocusGroupImpl","__scopeRovingFocusGroup","orientation","currentTabStopIdProp","defaultCurrentTabStopId","onCurrentTabStopIdChange","onEntryFocus","preventScrollOnEntryFocus","groupProps","currentTabStopId","setCurrentTabStopId","isTabbingBackOut","setIsTabbingBackOut","handleEntryFocus","getItems","isClickFocusRef","focusableItemsCount","setFocusableItemsCount","tabStopId","prevCount","isKeyboardFocus","entryFocusEvent","activeItem","currentItem","candidateNodes","ITEM_NAME","RovingFocusGroupItem","focusable","active","itemProps","autoId","isCurrentTabStop","onFocusableItemAdd","onFocusableItemRemove","focusIntent","getFocusIntent","currentIndex","wrapArray","MAP_KEY_TO_FOCUS_INTENT","getDirectionAwareKey","preventScroll","PREVIOUSLY_FOCUSED_ELEMENT","Item","TABS_NAME","createTabsContext","useRovingFocusGroupScope","TabsProvider","useTabsContext","Tabs","__scopeTabs","valueProp","onValueChange","activationMode","tabsProps","TAB_LIST_NAME","TabsList","listProps","rovingFocusGroupScope","RovingFocusGroup.Root","TabsTrigger","triggerId","makeTriggerId","contentId","makeContentId","isSelected","RovingFocusGroup.Item","isAutomaticActivation","TabsContent","isMountAnimationPreventedRef","rAF","baseId","Root2","List","TabsPrimitive.Root","TabsPrimitive.List","TabsPrimitive.Trigger","TabsPrimitive.Content","en","ptBR","BUILT_IN_LOCALES","isPluralForm","deepMerge","override","format","template","vars","plural","form","relative","iso","days","useT","Input","Skeleton","EmptyState","title","GRADIENTS","hashName","initials","SIZES","Avatar","gradient","badgeVariants","Badge","BusinessUnitRow","membership","businessUnit","roles","primaryRole","Label","Field","hint","required","errorId","hintId","describedBy","control","isValidElement","merged","cloneElement","scheduleFocus","keys","useFormErrors","errors","setErrors","formError","setFormError","generic","formSummary","failClient","applyServer","knownFields","fieldMap","mapped","hasFormLevel","apiField","clear","reset","NAME_MAX","CreateBusinessUnitForm","onCancel","onCreated","setName","nameRef","create","submit","errs","trimmed","Loader2","PendingInvitations","invitations","inv","InvitationCard","invitation","accept","busy","expiry","useExpiryLabel","handleAccept","handleDecline","expiresAt","BusinessUnitList","creating","setCreating","setQuery","refetch","filtered","q","pendingInvitations","showSearch","createSlottable","Slottable2","Fragment2","ROOT_NAME","createAlertDialogContext","useDialogScope","AlertDialog","__scopeAlertDialog","alertDialogProps","dialogScope","AlertDialogTrigger","AlertDialogPortal","AlertDialogOverlay","AlertDialogContentProvider","useAlertDialogContentContext","Slottable","AlertDialogContent","cancelRef","DialogPrimitive.WarningProvider","AlertDialogTitle","AlertDialogDescription","ACTION_NAME","AlertDialogAction","actionProps","CANCEL_NAME","AlertDialogCancel","cancelProps","Trigger2","Portal2","Overlay2","Content2","Action","Cancel","Title2","Description2","AlertDialogPrimitive.Root","AlertDialogPrimitive.Trigger","AlertDialogPrimitive.Portal","AlertDialogPrimitive.Overlay","AlertDialogPrimitive.Content","AlertDialogPrimitive.Title","AlertDialogPrimitive.Description","AlertDialogPrimitive.Action","AlertDialogPrimitive.Cancel","LoadMoreFooter","shown","total","onLoadMore","MembersList","fetchNextPage","members","totalCount","MemberRow","member","suspend","reinstate","remove","canManage","isSuspended","handleToggleSuspend","handleRemove","BusinessUnitSettings","memberLimit","setMemberLimit","copied","setCopied","dirty","handleSave","memberLimitPayload","handleCopyJoinCode","min","sides","round","floor","createCoords","oppositeSideMap","end","evaluate","getSide","placement","getAlignment","getOppositeAxis","getAxisLength","getSideAxis","firstChar","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getSideList","side","isStart","getOppositeAxisPlacements","flipAlignment","list","expandPaddingObject","padding","getPaddingObject","rectToClientRect","rect","width","computeCoordsFromPlacement","_ref","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","detectOverflow","_await$platform$isEle","platform","strategy","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","MAX_RESET_COUNT","computePosition","platformWithDetectOverflow","statefulPlacement","resetCount","middlewareData","currentMiddleware","nextX","nextY","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","shouldAddOffset","alignmentOffset","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflows","overflowsData","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","d","resetPlacement","_overflowsData$filter2","currentSideAxis","getSideOffsets","isAnySideFullyClipped","hide","originSides","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","limitShift","rawOffset","computedOffset","limitMin","limitMax","_middlewareData$offse2","isOriginSide","_state$middlewareData","_state$middlewareData2","apply","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","xMax","yMin","yMax","nextDimensions","hasWindow","getNodeName","isNode","getWindow","_node$ownerDocument","getDocumentElement","isElement","isHTMLElement","isShadowRoot","isOverflowElement","overflowX","overflowY","display","getComputedStyle","isTableElement","isTopLayer","willChangeRe","containRe","isNotNone","isWebKitValue","isContainingBlock","elementOrCss","isWebKit","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","getNodeScroll","getNearestOverflowAncestor","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","getComputedStyle$1","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","$","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","getWindowScrollBarX","leftScroll","getHTMLOffset","documentElement","scroll","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","SCROLLBAR_MAX","getViewportRect","visualViewport","visualViewportBased","windowScrollbarX","doc","bodyStyles","bodyMarginInline","clippingStableScrollbarWidth","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstRect","bottom","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","rectsAreEqual","observeMove","onMove","io","root","_io","refresh","skip","threshold","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","ratio","autoUpdate","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset$1","shift$1","flip$1","size$1","hide$1","arrow$1","limitShift$1","mergedOptions","platformWithCache","computePosition$1","isClient","deepEqual","getDPR","roundByDPR","dpr","useLatestRef","useFloating","externalReference","externalFloating","transform","whileElementsMounted","setData","latestMiddleware","setLatestMiddleware","_reference","_setReference","_floating","_setFloating","setReference","referenceRef","setFloating","floatingRef","floatingEl","dataRef","hasWhileElementsMounted","whileElementsMountedRef","platformRef","openRef","fullData","isMountedRef","floatingStyles","initialStyles","isRef","arrow$2","deps","NAME","Arrow","arrowProps","useSize","setSize","entry","borderSizeEntry","borderSize","POPPER_NAME","createPopperContext","createPopperScope","PopperProvider","usePopperContext","Popper","__scopePopper","anchor","setAnchor","ANCHOR_NAME","PopperAnchor","virtualRef","anchorProps","anchorRef","previousAnchor","PopperContentProvider","useContentContext","PopperContent","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPaddingProp","sticky","hideWhenDetached","updatePositionStrategy","onPlaced","setContent","setArrow","arrowSize","arrowWidth","arrowHeight","desiredPlacement","collisionPadding","hasExplicitBoundaries","isNotNull","isPositioned","anchorWidth","anchorHeight","contentStyle","floatingUIarrow","transformOrigin","placedSide","placedAlign","getSideAndAlignFromPlacement","handlePlaced","arrowX","arrowY","cannotCenterArrow","contentZIndex","setContentZIndex","ARROW_NAME","OPPOSITE_SIDE","PopperArrow","contentContext","baseSide","ArrowPrimitive.Root","isArrowHidden","noArrowAlign","arrowXCenter","arrowYCenter","Anchor","usePrevious","VISUALLY_HIDDEN_STYLES","VisuallyHidden","OPEN_KEYS","SELECTION_KEYS","SELECT_NAME","createSelectContext","usePopperScope","SelectProvider","useSelectContext","SelectNativeOptionsProvider","useSelectNativeOptionsContext","Select","__scopeSelect","autoComplete","popperScope","trigger","setTrigger","valueNode","setValueNode","valueNodeHasChildren","setValueNodeHasChildren","triggerPointerDownPosRef","isFormControl","nativeOptionsSet","setNativeOptionsSet","nativeSelectKey","PopperPrimitive.Root","optionsSet","SelectBubbleInput","SelectTrigger","isDisabled","pointerTypeRef","searchRef","handleTypeaheadSearch","resetTypeahead","useTypeaheadSearch","search","enabledItems","nextItem","findNextItem","handleOpen","pointerEvent","PopperPrimitive.Anchor","shouldShowPlaceholder","isTypingAhead","VALUE_NAME","SelectValue","placeholder","valueProps","onValueNodeHasChildrenChange","hasChildren","ICON_NAME","SelectIcon","iconProps","SelectPortal","SelectContent","fragment","setFragment","frag","SelectContentProvider","SelectContentImpl","CONTENT_MARGIN","useSelectContentContext","CONTENT_IMPL_NAME","viewport","setViewport","selectedItem","setSelectedItem","selectedItemText","setSelectedItemText","setIsPositioned","firstValidItemFoundRef","firstItem","restItems","lastItem","focusSelectedItem","pointerMoveDelta","handlePointerMove","handlePointerUp","close","itemRefCallback","isFirstValidItem","handleItemLeave","itemTextRefCallback","SelectPosition","SelectPopperPosition","SelectItemAlignedPosition","popperContentProps","isModifierKey","currentElement","ITEM_ALIGNED_POSITION_NAME","popperProps","contentWrapper","setContentWrapper","shouldExpandOnScrollRef","shouldRepositionRef","triggerRect","contentRect","valueNodeRect","itemTextRect","itemTextOffset","leftDelta","minContentWidth","contentWidth","rightEdge","clampedLeft","rightDelta","leftEdge","clampedRight","itemsHeight","contentStyles","contentBorderTopWidth","contentPaddingTop","contentBorderBottomWidth","contentPaddingBottom","fullContentHeight","minContentHeight","viewportStyles","viewportPaddingTop","viewportPaddingBottom","topEdgeToTriggerMiddle","triggerMiddleToBottomEdge","selectedItemHalfHeight","itemOffsetMiddle","contentTopToItemMiddle","itemMiddleToContentBottom","isLastItem","viewportOffsetBottom","clampedTriggerMiddleToBottomEdge","isFirstItem","handleScrollButtonChange","SelectViewportProvider","POPPER_POSITION_NAME","PopperPrimitive.Content","useSelectViewportContext","VIEWPORT_NAME","SelectViewport","viewportProps","viewportContext","prevScrollTopRef","scrolledBy","cssMinHeight","cssHeight","prevHeight","nextHeight","clampedNextHeight","heightDiff","SelectGroupContextProvider","useSelectGroupContext","SelectGroup","groupId","LABEL_NAME","SelectLabel","labelProps","groupContext","SelectItemContextProvider","useSelectItemContext","SelectItem","textValueProp","textValue","setTextValue","setIsFocused","textId","handleSelect","prevTextValue","ITEM_TEXT_NAME","SelectItemText","itemTextProps","itemContext","nativeOptionsContext","itemTextNode","setItemTextNode","textContent","nativeOption","onNativeOptionAdd","onNativeOptionRemove","ITEM_INDICATOR_NAME","SelectItemIndicator","itemIndicatorProps","SCROLL_UP_BUTTON_NAME","SelectScrollUpButton","canScrollUp","setCanScrollUp","handleScroll2","canScrollUp2","SelectScrollButtonImpl","SCROLL_DOWN_BUTTON_NAME","SelectScrollDownButton","canScrollDown","setCanScrollDown","maxScroll","canScrollDown2","onAutoScroll","scrollIndicatorProps","autoScrollTimerRef","clearAutoScrollTimer","SEPARATOR_NAME","SelectSeparator","separatorProps","SelectArrow","PopperPrimitive.Arrow","BUBBLE_INPUT_NAME","prevValue","selectProto","onSearchChange","handleSearchChange","timerRef","updateSearch","normalizedSearch","char","currentItemIndex","wrappedItems","Value","Viewport","ItemText","ItemIndicator","SelectPrimitive.Root","SelectPrimitive.Value","SelectPrimitive.Trigger","SelectPrimitive.Icon","SelectPrimitive.Portal","SelectPrimitive.Content","SelectPrimitive.Viewport","SelectPrimitive.Item","SelectPrimitive.ItemText","SelectPrimitive.ItemIndicator","EMAIL_RE","parseEmails","valid","invalid","InviteForm","onInvited","emailsInput","setEmailsInput","setRoleId","submitting","setSubmitting","emailRef","rolesPending","createInv","firstCustom","succeeded","roleError","emailsHint","statusVariant","statusLabel","InvitationsList","sorted","InvitationRow","resend","handleResend","handleCancel","dateLabel","InvitationsTab","composing","setComposing","BusinessUnitDetail","onBack","permsPending","can","showMembers","showInvitations","defaultTab","BusinessUnitsTab","initialBuId","selectedBuId","setSelectedBuId","BUSelector","businessUnits","RoleRow","permissionLabel","RolesList","onCreate","Textarea","CHECKBOX_NAME","createCheckboxContext","CheckboxProviderImpl","useCheckboxContext","CheckboxProvider","__scopeCheckbox","checkedProp","defaultChecked","onCheckedChange","internal_do_not_use_render","checked","setChecked","setControl","bubbleInput","setBubbleInput","hasConsumerStoppedPropagationRef","isIndeterminate","CheckboxTrigger","onKeyDown","onClick","checkboxProps","initialCheckedStateRef","prevChecked","Checkbox","CheckboxBubbleInput","INDICATOR_NAME","CheckboxIndicator","indicatorProps","controlSize","inputProto","bubbles","defaultCheckedRef","CheckboxPrimitive.Root","CheckboxPrimitive.Indicator","groupByCategory","map","category","PermissionPicker","isWildcard","selected","groups","toggle","toggleCategory","codes","set","selectedInGroup","allSelected","someSelected","RoleEditor","setDescription","setPerms","sameSet","readOnly","trimmedName","handleDelete","cloneSeed","cloneSource","CreateRoleDialog","mode","setMode","cloneRoleId","setCloneRoleId","seededSourceId","permissionsError","refetchPermissions","resetForm","pickMode","backToChoose","ChooseStep","PickSourceStep","NameStep","onPick","hasRoles","ChooseCard","onRetryPermissions","onChangePerms","onChangeName","onChangeDescription","onSubmit","canSubmit","permissionsLabel","RolesTab","activeBuId","setActiveBuId","selectedRoleId","setSelectedRoleId","manageableBus","BusinessUnitsMgmt","initialTab","sessionId","setSessionId","handleOpenChange","newOpen","FIRST_KEYS","LAST_KEYS","FIRST_LAST_KEYS","SUB_OPEN_KEYS","SUB_CLOSE_KEYS","MENU_NAME","createMenuContext","createMenuScope","MenuProvider","useMenuContext","MenuRootProvider","useMenuRootContext","Menu","__scopeMenu","isUsingKeyboardRef","handlePointer","MenuAnchor","MenuPortal","MenuContentProvider","useMenuContentContext","MenuContent","rootContext","MenuRootContentModal","MenuRootContentNonModal","MenuContentImpl","disableOutsideScroll","currentItemId","setCurrentItemId","pointerGraceTimerRef","pointerGraceIntentRef","pointerDirRef","lastPointerXRef","ScrollLockWrapper","scrollLockWrapperProps","currentMatch","values","nextMatch","getNextMatch","newItem","isPointerMovingToSubmenu","isPointerInGraceArea","intent","getOpenState","isKeyDownInside","isCharacterKey","whenMouse","pointerXHasChanged","newDir","MenuGroup","MenuLabel","ITEM_SELECT","MenuItem","isPointerDownRef","menuItem","itemSelectEvent","MenuItemImpl","setTextContent","CHECKBOX_ITEM_NAME","MenuCheckboxItem","checkboxItemProps","ItemIndicatorProvider","getCheckedState","RADIO_GROUP_NAME","RadioGroupProvider","useRadioGroupContext","MenuRadioGroup","handleValueChange","RADIO_ITEM_NAME","MenuRadioItem","radioItemProps","useItemIndicatorContext","MenuItemIndicator","indicatorContext","MenuSeparator","MenuArrow","SUB_NAME","MenuSubProvider","useMenuSubContext","SUB_TRIGGER_NAME","MenuSubTrigger","subContext","openTimerRef","onPointerGraceIntentChange","clearOpenTimer","pointerGraceTimer","rightSide","bleed","contentNearEdge","contentFarEdge","SUB_CONTENT_NAME","MenuSubContent","subContentProps","isCloseKey","currentMatchIndex","wrappedValues","isPointInPolygon","point","polygon","inside","j","ii","jj","xi","yi","xj","yj","area","cursorPos","Root3","Anchor2","Group","Item2","CheckboxItem","RadioGroup","RadioItem","Separator","Arrow2","SubTrigger","SubContent","DROPDOWN_MENU_NAME","createDropdownMenuContext","useMenuScope","DropdownMenuProvider","useDropdownMenuContext","DropdownMenu","__scopeDropdownMenu","menuScope","MenuPrimitive.Root","DropdownMenuTrigger","MenuPrimitive.Anchor","DropdownMenuPortal","MenuPrimitive.Portal","DropdownMenuContent","MenuPrimitive.Content","isRightClick","DropdownMenuGroup","MenuPrimitive.Group","DropdownMenuLabel","MenuPrimitive.Label","DropdownMenuItem","MenuPrimitive.Item","DropdownMenuCheckboxItem","MenuPrimitive.CheckboxItem","DropdownMenuRadioGroup","radioGroupProps","MenuPrimitive.RadioGroup","DropdownMenuRadioItem","MenuPrimitive.RadioItem","DropdownMenuItemIndicator","MenuPrimitive.ItemIndicator","DropdownMenuSeparator","MenuPrimitive.Separator","DropdownMenuArrow","MenuPrimitive.Arrow","DropdownMenuSubTrigger","subTriggerProps","MenuPrimitive.SubTrigger","DropdownMenuSubContent","MenuPrimitive.SubContent","Label2","Separator2","DropdownMenuPrimitive.Root","DropdownMenuPrimitive.Trigger","DropdownMenuPrimitive.Separator","DropdownMenuPrimitive.Label","DropdownMenuPrimitive.Portal","DropdownMenuPrimitive.Content","inset","DropdownMenuPrimitive.Item","createTooltipContext","DEFAULT_DELAY_DURATION","TOOLTIP_OPEN","TooltipProviderContextProvider","useTooltipProviderContext","TooltipProvider","__scopeTooltip","delayDuration","skipDelayDuration","disableHoverableContent","isOpenDelayedRef","isPointerInTransitRef","skipDelayTimerRef","skipDelayTimer","inTransit","TOOLTIP_NAME","TooltipContextProvider","useTooltipContext","Tooltip","disableHoverableContentProp","delayDurationProp","providerContext","wasOpenDelayedRef","open2","stateAttribute","handleClose","handleDelayedOpen","TooltipTrigger","hasPointerMoveOpenedRef","TooltipPortal","TooltipContent","TooltipContentImpl","TooltipContentHoverable","pointerGraceArea","setPointerGraceArea","onClose","onPointerInTransitChange","handleRemoveGraceArea","handleCreateGraceArea","hoverTarget","currentTarget","exitPoint","exitSide","getExitSideFromRect","paddedExitPoints","getPaddedExitPoints","hoverTargetPoints","getPointsFromRect","graceArea","getHull","handleTriggerLeave","handleContentLeave","handleTrackPointerGrace","pointerPosition","hasEnteredTarget","isPointerOutsideGraceArea","VisuallyHiddenContentContextProvider","useVisuallyHiddenContentContext","ariaLabel","VisuallyHiddenPrimitive.Root","TooltipArrow","points","newPoints","getHullPresorted","upperHull","lowerHull","TooltipPrimitive.Provider","TooltipPrimitive.Root","TooltipPrimitive.Trigger","TooltipPrimitive.Portal","TooltipPrimitive.Content","SEARCH_THRESHOLD","AUTO_COLLAPSE_THRESHOLD_PX","BusinessUnitSwitcher","collapsed","currentBu","setBu","wrapRef","autoCollapsed","setAutoCollapsed","isCollapsed","mgmtOpen","setMgmtOpen","mgmtTab","setMgmtTab","mgmtBuId","setMgmtBuId","setSearch","filteredMemberships","currentMembership","openManage","opts","wrap","AlertCircle","invitedTrigger","InvitationsMenuSection","triggerEl","dropdownContent","BURow","isCurrent","currentBadge","suspendedLabel","SwitcherInvitationRow","handleReject","paginate","rows","slice","nextStart","hasMore","slugify","createMockClient","latency","seedEmpty","seedRich","maybeFail","myRoles","fullRoles","mr","newBu","makeRoles","makePermissions","idx","roleName","granted","CRUD","subject","verb","acme","horizon","aurora","makeMembers","PERMISSION_CATALOG","includeBilling","customCount","ALL","READ_ONLY","ADMIN_NO_BILLING","FIRST_NAMES","ownerRole","MockClientBuilder","spec","slug","wildcard","baseRoles","buName","scenario","createMockClientFromState","mockClientBuilder","MOCK_UNAUTH_DEBOUNCE_MS","draft","stateRef","lastUnauthAt"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,35,36,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,112,113,114,115,116,133,134,139,140,141,142,143,144,145,146,147,148,149,150,151,162,169,170,171,173,174]}