@riverbankcms/sdk 0.2.0 → 0.2.1

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 (176) hide show
  1. package/dist/cli/index.js +4840 -9
  2. package/dist/cli/index.js.map +1 -1
  3. package/dist/client/bookings.d.mts +82 -2
  4. package/dist/client/bookings.d.ts +82 -2
  5. package/dist/client/bookings.js +1623 -3
  6. package/dist/client/bookings.js.map +1 -1
  7. package/dist/client/bookings.mjs +1610 -5
  8. package/dist/client/bookings.mjs.map +1 -1
  9. package/dist/client/client.d.mts +8 -5
  10. package/dist/client/client.d.ts +8 -5
  11. package/dist/client/client.js +16856 -322
  12. package/dist/client/client.js.map +1 -1
  13. package/dist/client/client.mjs +16838 -307
  14. package/dist/client/client.mjs.map +1 -1
  15. package/dist/client/hooks.d.mts +10 -7
  16. package/dist/client/hooks.d.ts +10 -7
  17. package/dist/client/hooks.js +5074 -4
  18. package/dist/client/hooks.js.map +1 -1
  19. package/dist/client/hooks.mjs +5074 -4
  20. package/dist/client/hooks.mjs.map +1 -1
  21. package/dist/client/rendering/client.d.mts +7 -1
  22. package/dist/client/rendering/client.d.ts +7 -1
  23. package/dist/client/rendering/client.js +17388 -2
  24. package/dist/client/rendering/client.js.map +1 -1
  25. package/dist/client/rendering/client.mjs +17382 -2
  26. package/dist/client/rendering/client.mjs.map +1 -1
  27. package/dist/client/resolver-BhueZVxZ.d.mts +61 -0
  28. package/dist/client/resolver-BhueZVxZ.d.ts +61 -0
  29. package/dist/client/usePage-BBcFCxOU.d.ts +6297 -0
  30. package/dist/client/usePage-BydHcMYB.d.mts +6297 -0
  31. package/dist/server/Layout-CLg8oH_S.d.ts +44 -0
  32. package/dist/server/Layout-DK_9OOgb.d.mts +44 -0
  33. package/dist/server/chunk-3J46ILMJ.mjs +2111 -0
  34. package/dist/server/chunk-3J46ILMJ.mjs.map +1 -0
  35. package/dist/server/{chunk-JB4LIEFS.js → chunk-5R4NMVXA.js} +15 -8
  36. package/dist/server/chunk-5R4NMVXA.js.map +1 -0
  37. package/dist/server/{chunk-ADREPXFU.js → chunk-62ZJI564.js} +3 -3
  38. package/dist/server/{chunk-ADREPXFU.js.map → chunk-62ZJI564.js.map} +1 -1
  39. package/dist/server/chunk-7DS4Q3GA.mjs +333 -0
  40. package/dist/server/chunk-7DS4Q3GA.mjs.map +1 -0
  41. package/dist/server/chunk-BJTO5JO5.mjs +11 -0
  42. package/dist/server/{chunk-4Z5FBFRL.mjs → chunk-BPKYRPCQ.mjs} +7 -3
  43. package/dist/server/{chunk-4Z5FBFRL.mjs.map → chunk-BPKYRPCQ.mjs.map} +1 -1
  44. package/dist/server/chunk-DGUM43GV.js +11 -0
  45. package/dist/server/chunk-DGUM43GV.js.map +1 -0
  46. package/dist/server/chunk-EGTDJ4PL.js +5461 -0
  47. package/dist/server/chunk-EGTDJ4PL.js.map +1 -0
  48. package/dist/server/chunk-FK64TZBT.mjs +831 -0
  49. package/dist/server/chunk-FK64TZBT.mjs.map +1 -0
  50. package/dist/server/chunk-GKYNDDJS.js +2111 -0
  51. package/dist/server/chunk-GKYNDDJS.js.map +1 -0
  52. package/dist/server/chunk-HOY77YBF.js +333 -0
  53. package/dist/server/chunk-HOY77YBF.js.map +1 -0
  54. package/dist/server/chunk-INWKF3IC.js +831 -0
  55. package/dist/server/chunk-INWKF3IC.js.map +1 -0
  56. package/dist/server/{chunk-2RW5HAQQ.mjs → chunk-JTAERCX2.mjs} +2 -2
  57. package/dist/server/chunk-O5DC7MYW.mjs +9606 -0
  58. package/dist/server/chunk-O5DC7MYW.mjs.map +1 -0
  59. package/dist/server/{chunk-PEAXKTDU.mjs → chunk-OP2GHK27.mjs} +2 -2
  60. package/dist/server/{chunk-WKG57P2H.mjs → chunk-PN3CHDVX.mjs} +10 -3
  61. package/dist/server/{chunk-WKG57P2H.mjs.map → chunk-PN3CHDVX.mjs.map} +1 -1
  62. package/dist/server/chunk-SF63XAX7.js +9606 -0
  63. package/dist/server/chunk-SF63XAX7.js.map +1 -0
  64. package/dist/server/{chunk-F472SMKX.js → chunk-TO7FD6TQ.js} +4 -4
  65. package/dist/server/{chunk-F472SMKX.js.map → chunk-TO7FD6TQ.js.map} +1 -1
  66. package/dist/server/chunk-USQF2XTU.mjs +5461 -0
  67. package/dist/server/chunk-USQF2XTU.mjs.map +1 -0
  68. package/dist/server/{chunk-SW7LE4M3.js → chunk-XLVL5WPH.js} +12 -8
  69. package/dist/server/chunk-XLVL5WPH.js.map +1 -0
  70. package/dist/server/components-BzdA6NAc.d.mts +305 -0
  71. package/dist/server/components-DhIcstww.d.ts +305 -0
  72. package/dist/server/components.d.mts +13 -49
  73. package/dist/server/components.d.ts +13 -49
  74. package/dist/server/components.js +7 -4
  75. package/dist/server/components.js.map +1 -1
  76. package/dist/server/components.mjs +9 -6
  77. package/dist/server/components.mjs.map +1 -1
  78. package/dist/server/config-validation.d.mts +2 -2
  79. package/dist/server/config-validation.d.ts +2 -2
  80. package/dist/server/config-validation.js +6 -3
  81. package/dist/server/config-validation.js.map +1 -1
  82. package/dist/server/config-validation.mjs +5 -2
  83. package/dist/server/config.d.mts +3 -3
  84. package/dist/server/config.d.ts +3 -3
  85. package/dist/server/config.js +6 -3
  86. package/dist/server/config.js.map +1 -1
  87. package/dist/server/config.mjs +5 -2
  88. package/dist/server/config.mjs.map +1 -1
  89. package/dist/server/data.d.mts +9 -8
  90. package/dist/server/data.d.ts +9 -8
  91. package/dist/server/data.js +4 -2
  92. package/dist/server/data.js.map +1 -1
  93. package/dist/server/data.mjs +3 -1
  94. package/dist/server/{index-C6M0Wfjq.d.ts → index-BB28KAui.d.ts} +1 -1
  95. package/dist/server/{index-B0yI_V6Z.d.mts → index-C_FVup_o.d.mts} +1 -1
  96. package/dist/server/index.d.mts +1554 -5
  97. package/dist/server/index.d.ts +1554 -5
  98. package/dist/server/index.js +4 -4
  99. package/dist/server/index.js.map +1 -1
  100. package/dist/server/index.mjs +4 -4
  101. package/dist/server/index.mjs.map +1 -1
  102. package/dist/server/{loadContent-CJcbYF3J.d.ts → loadContent-AQOBf_gP.d.ts} +4 -4
  103. package/dist/server/{loadContent-zhlL4YSE.d.mts → loadContent-DBmprsB4.d.mts} +4 -4
  104. package/dist/server/loadPage-3ECPF426.js +11 -0
  105. package/dist/server/loadPage-3ECPF426.js.map +1 -0
  106. package/dist/server/{loadPage-CCf15nt8.d.mts → loadPage-BMg8PJxJ.d.ts} +146 -5
  107. package/dist/server/loadPage-LW273NYO.mjs +11 -0
  108. package/dist/server/loadPage-LW273NYO.mjs.map +1 -0
  109. package/dist/server/{loadPage-BYmVMk0V.d.ts → loadPage-pg4HimlK.d.mts} +146 -5
  110. package/dist/server/metadata.d.mts +9 -6
  111. package/dist/server/metadata.d.ts +9 -6
  112. package/dist/server/metadata.js +3 -1
  113. package/dist/server/metadata.js.map +1 -1
  114. package/dist/server/metadata.mjs +2 -0
  115. package/dist/server/metadata.mjs.map +1 -1
  116. package/dist/server/rendering/server.d.mts +9 -7
  117. package/dist/server/rendering/server.d.ts +9 -7
  118. package/dist/server/rendering/server.js +7 -4
  119. package/dist/server/rendering/server.js.map +1 -1
  120. package/dist/server/rendering/server.mjs +6 -3
  121. package/dist/server/rendering.d.mts +172 -9
  122. package/dist/server/rendering.d.ts +172 -9
  123. package/dist/server/rendering.js +12 -9
  124. package/dist/server/rendering.js.map +1 -1
  125. package/dist/server/rendering.mjs +14 -11
  126. package/dist/server/rendering.mjs.map +1 -1
  127. package/dist/server/routing.d.mts +9 -6
  128. package/dist/server/routing.d.ts +9 -6
  129. package/dist/server/routing.js +4 -2
  130. package/dist/server/routing.js.map +1 -1
  131. package/dist/server/routing.mjs +3 -1
  132. package/dist/server/routing.mjs.map +1 -1
  133. package/dist/server/schema-Bpy9N5ZI.d.mts +1870 -0
  134. package/dist/server/schema-Bpy9N5ZI.d.ts +1870 -0
  135. package/dist/server/server.d.mts +11 -8
  136. package/dist/server/server.d.ts +11 -8
  137. package/dist/server/server.js +7 -5
  138. package/dist/server/server.js.map +1 -1
  139. package/dist/server/server.mjs +6 -4
  140. package/dist/server/theme-bridge.js +13 -10
  141. package/dist/server/theme-bridge.js.map +1 -1
  142. package/dist/server/theme-bridge.mjs +10 -7
  143. package/dist/server/theme-bridge.mjs.map +1 -1
  144. package/dist/server/theme.js +3 -1
  145. package/dist/server/theme.js.map +1 -1
  146. package/dist/server/theme.mjs +2 -0
  147. package/dist/server/theme.mjs.map +1 -1
  148. package/dist/server/{types-BCeqWtI2.d.ts → types--u4GLCAY.d.ts} +1 -1
  149. package/dist/server/types-BprgZt-t.d.ts +4149 -0
  150. package/dist/server/types-C0G9IxWO.d.mts +4149 -0
  151. package/dist/server/{types-Bbo01M7P.d.mts → types-_nDnPHpv.d.mts} +27 -1
  152. package/dist/server/{types-Bbo01M7P.d.ts → types-_nDnPHpv.d.ts} +27 -1
  153. package/dist/server/{types-BCeqWtI2.d.mts → types-_zWJTgv0.d.mts} +1 -1
  154. package/package.json +6 -6
  155. package/dist/server/chunk-3KKZVGH4.mjs +0 -179
  156. package/dist/server/chunk-3KKZVGH4.mjs.map +0 -1
  157. package/dist/server/chunk-4Z3GPTCS.js +0 -179
  158. package/dist/server/chunk-4Z3GPTCS.js.map +0 -1
  159. package/dist/server/chunk-JB4LIEFS.js.map +0 -1
  160. package/dist/server/chunk-QQ6U4QX6.js +0 -120
  161. package/dist/server/chunk-QQ6U4QX6.js.map +0 -1
  162. package/dist/server/chunk-R5YGLRUG.mjs +0 -122
  163. package/dist/server/chunk-R5YGLRUG.mjs.map +0 -1
  164. package/dist/server/chunk-SW7LE4M3.js.map +0 -1
  165. package/dist/server/chunk-W3K7LVPS.mjs +0 -120
  166. package/dist/server/chunk-W3K7LVPS.mjs.map +0 -1
  167. package/dist/server/chunk-YHEZMVTS.js +0 -122
  168. package/dist/server/chunk-YHEZMVTS.js.map +0 -1
  169. package/dist/server/loadPage-DVH3DW6E.js +0 -9
  170. package/dist/server/loadPage-DVH3DW6E.js.map +0 -1
  171. package/dist/server/loadPage-PHQZ6XQZ.mjs +0 -9
  172. package/dist/server/types-C6gmRHLe.d.mts +0 -150
  173. package/dist/server/types-C6gmRHLe.d.ts +0 -150
  174. /package/dist/server/{loadPage-PHQZ6XQZ.mjs.map → chunk-BJTO5JO5.mjs.map} +0 -0
  175. /package/dist/server/{chunk-2RW5HAQQ.mjs.map → chunk-JTAERCX2.mjs.map} +0 -0
  176. /package/dist/server/{chunk-PEAXKTDU.mjs.map → chunk-OP2GHK27.mjs.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/rendering/client.ts"],"sourcesContent":["'use client';\n\n// Client component registry for interactive block components.\n// Re-exported for consumers who need to provide a custom registry.\nexport { clientComponentRegistry } from '@riverbankcms/blocks/client';\n"],"mappings":";;;AAIA,SAAS,+BAA+B;","names":[]}
1
+ {"version":3,"sources":["../../../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../../../blocks/src/theme/utils/colorStyles.ts","../../../../blocks/src/primitives/layout/Section.tsx","../../../../blocks/src/primitives/layout/Stack.tsx","../../../../blocks/src/primitives/layout/Inline.tsx","../../../../blocks/src/primitives/layout/Grid.tsx","../../../../blocks/src/system/runtime/nodes/layout.tsx","../../../../blocks/src/primitives/content/components/RichText.tsx","../../../../blocks/src/primitives/content/components/Text.tsx","../../../../blocks/src/system/runtime/nodes/basic.tsx","../../../../media-core/src/types.ts","../../../../media-core/src/url.ts","../../../../blocks/src/system/runtime/nodes/media.tsx","../../../../blocks/src/system/runtime/nodes/form.server.tsx","../../../../blocks/src/system/runtime/nodes/carousel.server.tsx","../../../../blocks/src/system/runtime/nodes/accordion.server.tsx","../../../../blocks/src/system/runtime/nodes/header-section.server.tsx","../../../../blocks/src/system/runtime/nodes/event-list.server.tsx","../../../../blocks/src/system/runtime/nodes/booking-form.server.tsx","../../../../blocks/src/system/runtime/nodes/event-registration.server.tsx","../../../../blocks/src/system/runtime/nodes/events/shared/utils.ts","../../../../blocks/src/system/runtime/nodes/events/shared/EventCard.tsx","../../../../blocks/src/system/runtime/nodes/events/shared/EmptyState.tsx","../../../../blocks/src/system/runtime/nodes/events/EventSpotlight.tsx","../../../../blocks/src/system/runtime/nodes/events/EventListing.server.tsx","../../../../blocks/src/system/runtime/hooks/useEventPagination.ts","../../../../blocks/src/system/runtime/utils/api-url.ts","../../../../blocks/src/system/runtime/nodes/events/EventListing.client.tsx","../../../../blocks/src/system/runtime/nodes/events/EventCalendar.client.tsx","../../../../blocks/src/system/runtime/hooks/useCalendarEvents.ts","../../../../blocks/src/system/runtime/components/registry.server.ts","../../../../blocks/src/system/runtime/nodes/form.client.tsx","../../../../turnstile/dist/client.mjs","../../../../turnstile/dist/index.mjs","../../../../blocks/src/system/runtime/hooks/useFormSubmission.ts","../../../../blocks/src/system/runtime/nodes/booking-form.client.tsx","../../../../blocks/src/system/runtime/components/multi-step/MultiStepForm.tsx","../../../../blocks/src/system/runtime/components/multi-step/MultiStepContext.tsx","../../../../blocks/src/system/runtime/components/multi-step/useMultiStep.ts","../../../../blocks/src/system/runtime/components/booking/SuccessMessage.tsx","../../../../blocks/src/system/runtime/hooks/useBookingSteps.ts","../../../../blocks/src/system/runtime/components/booking/ServiceResourceSelector.tsx","../../../../blocks/src/system/runtime/components/booking/ServiceSelectionStep.tsx","../../../../blocks/src/system/runtime/components/booking/DateTimeSelectionStep.tsx","../../../../blocks/src/utils/date-formatting.ts","../../../../blocks/src/system/runtime/components/booking/DatePicker.tsx","../../../../blocks/src/system/runtime/components/booking/TimeSlotSelector.tsx","../../../../blocks/src/system/runtime/hooks/useAvailableSlots.ts","../../../../blocks/src/system/runtime/hooks/useAvailableDates.ts","../../../../blocks/src/system/runtime/components/multi-step/DynamicFormFields.tsx","../../../../blocks/src/system/runtime/hooks/useBookingSubmission.ts","../../../../blocks/src/system/runtime/nodes/event-calendar-grid.client.tsx","../../../../blocks/src/system/runtime/nodes/event-list.client.tsx","../../../../blocks/src/system/runtime/nodes/event-registration.client.tsx","../../../../blocks/src/system/runtime/nodes/event-registration/utils.ts","../../../../blocks/src/system/runtime/nodes/event-registration/EventSelectionStep.tsx","../../../../blocks/src/system/runtime/nodes/event-registration/TicketSelectionStep.tsx","../../../../blocks/src/system/runtime/nodes/event-registration/AttendeeDetailsStep.tsx","../../../../blocks/src/system/runtime/nodes/event-registration/SuccessStep.tsx","../../../../blocks/src/system/runtime/nodes/event-registration/ErrorStep.tsx","../../../../blocks/src/system/runtime/nodes/carousel.tsx","../../../../../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/src/lib/class-group-utils.ts","../../../../../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/src/lib/lru-cache.ts","../../../../../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/src/lib/parse-class-name.ts","../../../../../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/src/lib/sort-modifiers.ts","../../../../../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/src/lib/config-utils.ts","../../../../../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/src/lib/merge-classlist.ts","../../../../../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/src/lib/tw-join.ts","../../../../../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/src/lib/create-tailwind-merge.ts","../../../../../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/src/lib/from-theme.ts","../../../../../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/src/lib/validators.ts","../../../../../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/src/lib/default-config.ts","../../../../../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/src/lib/merge-configs.ts","../../../../../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/src/lib/extend-tailwind-merge.ts","../../../../../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/src/lib/tw-merge.ts","../../../../../node_modules/.pnpm/@radix-ui+react-slot@1.2.3_@types+react@19.1.11_react@19.1.0/node_modules/@radix-ui/react-slot/src/slot.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.2_@types+react@19.1.11_react@19.1.0/node_modules/@radix-ui/react-compose-refs/src/compose-refs.tsx","../../../../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.mjs","../../../../ui/src/lib/cn.ts","../../../../ui/src/button.tsx","../../../../ui/src/card.tsx","../../../../ui/src/collapsible.tsx","../../../../ui/src/dialog.tsx","../../../../ui/src/dropdown-menu.tsx","../../../../ui/src/form.tsx","../../../../ui/src/label.tsx","../../../../ui/src/input.tsx","../../../../ui/src/popover.tsx","../../../../ui/src/color-picker.tsx","../../../../ui/src/carousel.tsx","../../../../ui/src/select.tsx","../../../../ui/src/separator.tsx","../../../../ui/src/sheet.tsx","../../../../ui/src/skeleton.tsx","../../../../ui/src/spinner.tsx","../../../../ui/src/delayed-spinner.tsx","../../../../ui/src/pending-button.tsx","../../../../ui/src/async-boundary.tsx","../../../../ui/src/switch.tsx","../../../../ui/src/textarea.tsx","../../../../ui/src/toggle.tsx","../../../../ui/src/tooltip.tsx","../../../../ui/src/badge.tsx","../../../../ui/src/accordion.tsx","../../../../ui/src/section-accordion.tsx","../../../../ui/src/calendar.tsx","../../../../ui/src/menubar.tsx","../../../../ui/src/fixed-bottom-surface.tsx","../../../../ui/src/editor-drawer.tsx","../../../../ui/src/resizable-split-pane.tsx","../../../../ui/src/tabs.tsx","../../../../ui/src/dev-toolbar.tsx","../../../../ui/src/navigation-tabs.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-collapsible@1.1.12_@types+react-dom@19.1.7_@types+react@19.1.11__@types_5c4980fde4617b6868840eabc900f597/node_modules/@radix-ui/react-collapsible/src/collapsible.tsx","../../../../../node_modules/.pnpm/@radix-ui+primitive@1.1.3/node_modules/@radix-ui/primitive/src/primitive.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-context@1.1.2_@types+react@19.1.11_react@19.1.0/node_modules/@radix-ui/react-context/src/create-context.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.2.2_@types+react@19.1.11_react@19.1.0/node_modules/@radix-ui/react-use-controllable-state/src/use-controllable-state.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.2.2_@types+react@19.1.11_react@19.1.0/node_modules/@radix-ui/react-use-controllable-state/src/use-controllable-state-reducer.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.1_@types+react@19.1.11_react@19.1.0/node_modules/@radix-ui/react-use-layout-effect/src/use-layout-effect.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-primitive@2.1.3_@types+react-dom@19.1.7_@types+react@19.1.11__@types+re_f3627d6c2bdfac32db08d5e5adfb7d9b/node_modules/@radix-ui/react-primitive/src/primitive.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-presence@1.1.5_@types+react-dom@19.1.7_@types+react@19.1.11__@types+rea_20d9bd21e3f3dbc237aba3bed28da75d/node_modules/@radix-ui/react-presence/src/presence.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-presence@1.1.5_@types+react-dom@19.1.7_@types+react@19.1.11__@types+rea_20d9bd21e3f3dbc237aba3bed28da75d/node_modules/@radix-ui/react-presence/src/use-state-machine.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-id@1.1.1_@types+react@19.1.11_react@19.1.0/node_modules/@radix-ui/react-id/src/id.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-dialog@1.1.15_@types+react-dom@19.1.7_@types+react@19.1.11__@types+reac_37f402b2e1c1f470aa5144b42a60a27f/node_modules/@radix-ui/react-dialog/src/dialog.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-dismissable-layer@1.1.11_@types+react-dom@19.1.7_@types+react@19.1.11___c377fa4602454ccc13383a155033b51a/node_modules/@radix-ui/react-dismissable-layer/src/dismissable-layer.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.1_@types+react@19.1.11_react@19.1.0/node_modules/@radix-ui/react-use-callback-ref/src/use-callback-ref.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-use-escape-keydown@1.1.1_@types+react@19.1.11_react@19.1.0/node_modules/@radix-ui/react-use-escape-keydown/src/use-escape-keydown.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-focus-scope@1.1.7_@types+react-dom@19.1.7_@types+react@19.1.11__@types+_ce46fc0b7551212195ce0931b1803d75/node_modules/@radix-ui/react-focus-scope/src/focus-scope.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-portal@1.1.9_@types+react-dom@19.1.7_@types+react@19.1.11__@types+react_e674d618ec8918c196e3c297ffa487c1/node_modules/@radix-ui/react-portal/src/portal.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-focus-guards@1.1.3_@types+react@19.1.11_react@19.1.0/node_modules/@radix-ui/react-focus-guards/src/focus-guards.tsx","../../../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../../../node_modules/.pnpm/react-remove-scroll@2.7.1_@types+react@19.1.11_react@19.1.0/node_modules/react-remove-scroll/dist/es2015/Combination.js","../../../../../node_modules/.pnpm/react-remove-scroll@2.7.1_@types+react@19.1.11_react@19.1.0/node_modules/react-remove-scroll/dist/es2015/UI.js","../../../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.1.11_react@19.1.0/node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../../../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.1.11_react@19.1.0/node_modules/use-callback-ref/dist/es2015/assignRef.js","../../../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.1.11_react@19.1.0/node_modules/use-callback-ref/dist/es2015/useRef.js","../../../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.1.11_react@19.1.0/node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../../../../../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@19.1.11_react@19.1.0/node_modules/use-sidecar/dist/es2015/medium.js","../../../../../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@19.1.11_react@19.1.0/node_modules/use-sidecar/dist/es2015/exports.js","../../../../../node_modules/.pnpm/react-remove-scroll@2.7.1_@types+react@19.1.11_react@19.1.0/node_modules/react-remove-scroll/dist/es2015/medium.js","../../../../../node_modules/.pnpm/react-remove-scroll@2.7.1_@types+react@19.1.11_react@19.1.0/node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../../../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.1.11_react@19.1.0/node_modules/react-remove-scroll-bar/dist/es2015/component.js","../../../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.1.11_react@19.1.0/node_modules/react-style-singleton/dist/es2015/hook.js","../../../../../node_modules/.pnpm/get-nonce@1.0.1/node_modules/get-nonce/dist/es2015/index.js","../../../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.1.11_react@19.1.0/node_modules/react-style-singleton/dist/es2015/singleton.js","../../../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.1.11_react@19.1.0/node_modules/react-style-singleton/dist/es2015/component.js","../../../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.1.11_react@19.1.0/node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../../../../../node_modules/.pnpm/react-remove-scroll@2.7.1_@types+react@19.1.11_react@19.1.0/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../../../../../node_modules/.pnpm/react-remove-scroll@2.7.1_@types+react@19.1.11_react@19.1.0/node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../../../../../node_modules/.pnpm/react-remove-scroll@2.7.1_@types+react@19.1.11_react@19.1.0/node_modules/react-remove-scroll/dist/es2015/sidecar.js","../../../../../node_modules/.pnpm/aria-hidden@1.2.6/node_modules/aria-hidden/dist/es2015/index.js","../../../../../node_modules/.pnpm/lucide-react@0.541.0_react@19.1.0/node_modules/shared/src/utils.ts","../../../../../node_modules/.pnpm/lucide-react@0.541.0_react@19.1.0/node_modules/lucide-react/src/defaultAttributes.ts","../../../../../node_modules/.pnpm/lucide-react@0.541.0_react@19.1.0/node_modules/lucide-react/src/Icon.ts","../../../../../node_modules/.pnpm/lucide-react@0.541.0_react@19.1.0/node_modules/lucide-react/src/createLucideIcon.ts","../../../../../node_modules/.pnpm/lucide-react@0.541.0_react@19.1.0/node_modules/lucide-react/src/icons/arrow-down.ts","../../../../../node_modules/.pnpm/lucide-react@0.541.0_react@19.1.0/node_modules/lucide-react/src/icons/check.ts","../../../../../node_modules/.pnpm/lucide-react@0.541.0_react@19.1.0/node_modules/lucide-react/src/icons/chevron-down.ts","../../../../../node_modules/.pnpm/lucide-react@0.541.0_react@19.1.0/node_modules/lucide-react/src/icons/chevron-left.ts","../../../../../node_modules/.pnpm/lucide-react@0.541.0_react@19.1.0/node_modules/lucide-react/src/icons/chevron-right.ts","../../../../../node_modules/.pnpm/lucide-react@0.541.0_react@19.1.0/node_modules/lucide-react/src/icons/circle-minus.ts","../../../../../node_modules/.pnpm/lucide-react@0.541.0_react@19.1.0/node_modules/lucide-react/src/icons/circle-plus.ts","../../../../../node_modules/.pnpm/lucide-react@0.541.0_react@19.1.0/node_modules/lucide-react/src/icons/circle.ts","../../../../../node_modules/.pnpm/lucide-react@0.541.0_react@19.1.0/node_modules/lucide-react/src/icons/loader-circle.ts","../../../../../node_modules/.pnpm/lucide-react@0.541.0_react@19.1.0/node_modules/lucide-react/src/icons/minus.ts","../../../../../node_modules/.pnpm/lucide-react@0.541.0_react@19.1.0/node_modules/lucide-react/src/icons/plus.ts","../../../../../node_modules/.pnpm/lucide-react@0.541.0_react@19.1.0/node_modules/lucide-react/src/icons/x.ts","../../../../../node_modules/.pnpm/@radix-ui+react-dropdown-menu@2.1.16_@types+react-dom@19.1.7_@types+react@19.1.11__@typ_165f5be56e9ae5bc8f2d84dae7a8aed1/node_modules/@radix-ui/react-dropdown-menu/src/dropdown-menu.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-menu@2.1.16_@types+react-dom@19.1.7_@types+react@19.1.11__@types+react@_92d5e31fdad1568fa2989c704b7792b2/node_modules/@radix-ui/react-menu/src/menu.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-collection@1.1.7_@types+react-dom@19.1.7_@types+react@19.1.11__@types+r_41cf431b5025b08e9774c311c670e57f/node_modules/@radix-ui/react-collection/src/collection-legacy.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-collection@1.1.7_@types+react-dom@19.1.7_@types+react@19.1.11__@types+r_41cf431b5025b08e9774c311c670e57f/node_modules/@radix-ui/react-collection/src/collection.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-collection@1.1.7_@types+react-dom@19.1.7_@types+react@19.1.11__@types+r_41cf431b5025b08e9774c311c670e57f/node_modules/@radix-ui/react-collection/src/ordered-dictionary.ts","../../../../../node_modules/.pnpm/@radix-ui+react-direction@1.1.1_@types+react@19.1.11_react@19.1.0/node_modules/@radix-ui/react-direction/src/direction.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-popper@1.2.8_@types+react-dom@19.1.7_@types+react@19.1.11__@types+react_194391930e604d54d377742c5b37fe11/node_modules/@radix-ui/react-popper/src/popper.tsx","../../../../../node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../../../node_modules/.pnpm/@floating-ui+core@1.7.3/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../../../node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../../../node_modules/.pnpm/@floating-ui+dom@1.7.4/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../../../node_modules/.pnpm/@floating-ui+react-dom@2.1.6_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../../../../../node_modules/.pnpm/@radix-ui+react-arrow@1.1.7_@types+react-dom@19.1.7_@types+react@19.1.11__@types+react@_7e73cccaa0c004510300e64acfa8a34b/node_modules/@radix-ui/react-arrow/src/arrow.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-use-size@1.1.1_@types+react@19.1.11_react@19.1.0/node_modules/@radix-ui/react-use-size/src/use-size.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-roving-focus@1.1.11_@types+react-dom@19.1.7_@types+react@19.1.11__@type_aa9362ab9f0bb1bfbc636d665e1a21d8/node_modules/@radix-ui/react-roving-focus/src/roving-focus-group.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-popover@1.1.15_@types+react-dom@19.1.7_@types+react@19.1.11__@types+rea_85ac753efbde36564866d2ce667badec/node_modules/@radix-ui/react-popover/src/popover.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/hooks/useEventCallback.ts","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/utils/clamp.ts","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/common/Interactive.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/utils/format.ts","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/common/Pointer.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/utils/round.ts","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/utils/convert.ts","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/common/Hue.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/common/Saturation.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/utils/compare.ts","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/hooks/useColorManipulation.ts","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/utils/nonce.ts","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/hooks/useIsomorphicLayoutEffect.ts","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/hooks/useStyleSheet.ts","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/common/ColorPicker.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/HexColorPicker.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/common/Alpha.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/common/AlphaColorPicker.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/HexAlphaColorPicker.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/HslaColorPicker.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/HslaStringColorPicker.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/HslColorPicker.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/HslStringColorPicker.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/HsvaColorPicker.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/HsvaStringColorPicker.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/HsvColorPicker.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/HsvStringColorPicker.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/RgbaColorPicker.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/RgbaStringColorPicker.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/RgbColorPicker.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/RgbStringColorPicker.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/utils/validate.ts","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/common/ColorInput.tsx","../../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-colorful/src/components/HexColorInput.tsx","../../../../../node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/src/components/utils.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/utils.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Alignment.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/EventStore.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Animations.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Axis.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Limit.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Counter.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/DragHandler.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/DragTracker.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/NodeRects.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/PercentOfView.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ResizeHandler.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollBody.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollBounds.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollContain.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollLimit.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollLooper.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollProgress.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollSnaps.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/SlideRegistry.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollTarget.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollTo.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/SlideFocus.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Vector1d.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Translate.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/SlideLooper.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/SlidesHandler.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/SlidesInView.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/SlideSizes.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/SlidesToScroll.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Engine.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/EventHandler.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Options.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/OptionsHandler.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/PluginsHandler.ts","../../../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/EmblaCarousel.ts","../../../../../node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.1.0/node_modules/embla-carousel-react/src/components/useEmblaCarousel.ts","../../../../../node_modules/.pnpm/@radix-ui+react-use-previous@1.1.1_@types+react@19.1.11_react@19.1.0/node_modules/@radix-ui/react-use-previous/src/use-previous.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-switch@1.2.6_@types+react-dom@19.1.7_@types+react@19.1.11__@types+react_9761ae076cdb11fb014f6d067385f6cc/node_modules/@radix-ui/react-switch/src/switch.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-toggle@1.1.10_@types+react-dom@19.1.7_@types+react@19.1.11__@types+reac_9e6a51e8baa8e8cd9c846442c1b8c0e0/node_modules/@radix-ui/react-toggle/src/toggle.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-accordion@1.2.12_@types+react-dom@19.1.7_@types+react@19.1.11__@types+r_b7e140b757cb4590400293f81fd8d4c2/node_modules/@radix-ui/react-accordion/src/accordion.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-tabs@1.1.13_@types+react-dom@19.1.7_@types+react@19.1.11__@types+react@_7c4427c7002a80ee70608bfb486f030b/node_modules/@radix-ui/react-tabs/src/tabs.tsx","../../../../blocks/src/system/runtime/nodes/accordion.tsx","../../../../blocks/src/theme/accordions/types.ts","../../../../blocks/src/system/runtime/nodes/header-section.client.tsx","../../../../blocks/src/system/runtime/components/registry.client.tsx"],"sourcesContent":["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;","import type { CSSProperties } from 'react';\n\n/**\n * Theme color tokens support three formats:\n *\n * 1. Semantic/palette tokens: 'text', 'surface', 'primary', 'mutedText', 'neutral-900', etc.\n * These resolve to CSS variables like `var(--tb-primary)`\n *\n * 2. Tokens with opacity: 'surface/95', 'primary/50', 'border/20'\n * Format: `{token}/{opacity%}`\n * These resolve to rgba with the specified opacity (e.g., `rgba(var(--tb-surface), 0.95)`)\n *\n * 3. Raw CSS values: 'raw:transparent', 'raw:#ffffff', 'raw:rgba(255, 0, 0, 0.5)'\n * Format: `raw:{css-value}`\n * These bypass the CSS variable system and output the literal value\n *\n * @example\n * // Semantic token\n * rgbColorValue('primary') // => 'rgb(var(--tb-primary))'\n *\n * @example\n * // Token with opacity\n * rgbColorValue('surface/95') // => 'rgba(var(--tb-surface), 0.95)'\n *\n * @example\n * // Raw value\n * rgbColorValue('raw:transparent') // => 'transparent'\n */\ntype ThemeColorToken = string;\n\ntype ParsedToken = {\n token: string;\n alpha?: number;\n raw?: string;\n};\n\nconst COLOR_VAR_PREFIX = '--tb-';\n\nfunction parseToken(source: ThemeColorToken): ParsedToken {\n if (source.startsWith('raw:')) {\n return { token: source, raw: source.slice(4) };\n }\n if (source.includes('/')) {\n const [token, opacity] = source.split('/');\n const alpha = Number(opacity) / 100;\n if (!Number.isNaN(alpha)) {\n return { token, alpha };\n }\n return { token: source };\n }\n return { token: source };\n}\n\n/**\n * Converts a theme color token to a CSS rgb/rgba value.\n * This is the primary function for applying theme colors to CSS properties.\n *\n * @param token - Theme color token (semantic, with opacity, or raw)\n * @returns CSS color value (rgb, rgba, or raw CSS value)\n *\n * @example\n * rgbColorValue('primary') // => 'rgb(var(--tb-primary))'\n * rgbColorValue('surface/95') // => 'rgba(var(--tb-surface), 0.95)'\n * rgbColorValue('raw:transparent') // => 'transparent'\n */\nexport function rgbColorValue(token: ThemeColorToken): string {\n const { token: baseToken, alpha, raw } = parseToken(token);\n if (raw) {\n return raw;\n }\n const cssVar = `${COLOR_VAR_PREFIX}${baseToken}`;\n if (alpha === undefined) {\n return `rgb(var(${cssVar}))`;\n }\n return `rgba(var(${cssVar}), ${alpha})`;\n}\n\n/**\n * Converts a theme color token to a CSS variable reference.\n * Note: This returns the base variable without rgb() wrapper, ignoring opacity.\n *\n * @param token - Theme color token\n * @returns CSS variable reference\n *\n * @example\n * cssVarValue('primary') // => 'var(--tb-primary)'\n * cssVarValue('surface/95') // => 'var(--tb-surface)' (opacity ignored)\n */\nexport function cssVarValue(token: ThemeColorToken): string {\n const { token: baseToken } = parseToken(token);\n return `var(${COLOR_VAR_PREFIX}${baseToken})`;\n}\n\n/**\n * Creates a backgroundColor style object from a theme token.\n *\n * @param token - Theme color token\n * @returns CSSProperties with backgroundColor\n */\nexport function backgroundColorStyle(token: ThemeColorToken): CSSProperties {\n return { backgroundColor: rgbColorValue(token) };\n}\n\n/**\n * Creates a text color style object from a theme token.\n *\n * @param token - Theme color token\n * @returns CSSProperties with color\n */\nexport function textColorStyle(token: ThemeColorToken): CSSProperties {\n return { color: rgbColorValue(token) };\n}\n\n/**\n * Creates a border color style object from a theme token.\n *\n * @param token - Theme color token\n * @returns CSSProperties with borderColor\n */\nexport function borderColorStyle(token: ThemeColorToken): CSSProperties {\n return { borderColor: rgbColorValue(token) };\n}\n\n/**\n * Creates a linear gradient background from theme tokens.\n *\n * @param tokens - Array of theme color tokens for gradient stops\n * @param direction - CSS gradient direction (default: 'to bottom')\n * @returns CSSProperties with backgroundImage\n *\n * @example\n * gradientBackgroundStyle(['primary', 'secondary'])\n * // => { backgroundImage: 'linear-gradient(to bottom, rgb(var(--tb-primary)), rgb(var(--tb-secondary)))' }\n *\n * @example\n * gradientBackgroundStyle(['primary/80', 'secondary/60'], '45deg')\n * // => { backgroundImage: 'linear-gradient(45deg, rgba(var(--tb-primary), 0.8), rgba(var(--tb-secondary), 0.6))' }\n */\nexport function gradientBackgroundStyle(\n tokens: ThemeColorToken[],\n direction: string = 'to bottom',\n): CSSProperties {\n const stops = tokens.map((stop) => rgbColorValue(stop)).join(', ');\n return { backgroundImage: `linear-gradient(${direction}, ${stops})` };\n}\n\n/**\n * Creates a Tailwind ring color style object from a theme token.\n * Used for focus ring styling with Tailwind's ring utilities.\n *\n * @param token - Theme color token\n * @returns CSSProperties with --tw-ring-color CSS variable\n */\nexport function ringColorStyle(token: ThemeColorToken): CSSProperties {\n return { '--tw-ring-color': rgbColorValue(token) } as CSSProperties;\n}\n\n/**\n * Merges multiple CSSProperties objects into a single object.\n * Later styles override earlier ones. Undefined values are filtered out.\n * Returns undefined if the merged result is empty.\n *\n * @param styles - Variable number of CSSProperties objects (can be undefined)\n * @returns Merged CSSProperties object, or undefined if empty\n *\n * @example\n * mergeStyles(\n * backgroundColorStyle('surface'),\n * textColorStyle('text'),\n * borderColorStyle('border')\n * )\n * // => { backgroundColor: '...', color: '...', borderColor: '...' }\n */\nexport function mergeStyles(...styles: Array<CSSProperties | undefined>): CSSProperties | undefined {\n const merged = styles.filter(Boolean).reduce<CSSProperties>((acc, style) => Object.assign(acc, style!), {});\n return Object.keys(merged).length ? merged : undefined;\n}\n\n","import React from \"react\";\nimport clsx from \"clsx\";\nimport { backgroundColorStyle, mergeStyles } from \"../../theme/utils/colorStyles\";\nimport { PrimitiveProps } from \"../types\";\n\ntype SectionProps = PrimitiveProps & {\n background: string,\n allowOverflow?: boolean,\n /** Data slot attribute for CSS targeting */\n 'data-slot'?: string,\n}\nexport default function Section({\n as: Comp = \"section\",\n children,\n background = 'background',\n className = '',\n allowOverflow = false,\n style,\n 'data-slot': dataSlot,\n}: SectionProps) {\n const overflowClass = allowOverflow ? 'overflow-visible' : 'overflow-hidden';\n const alwaysClass = clsx('relative isolate', overflowClass, className);\n const backgroundStyle = background ? backgroundColorStyle(background) : undefined;\n\n return <Comp className={alwaysClass} style={mergeStyles(backgroundStyle, style)} data-slot={dataSlot ?? 'section'}>\n {children}\n </Comp>;\n}\n","// primitives/stack.tsx\nimport React from \"react\";\nimport clsx from \"clsx\"\nimport { PrimitiveProps } from \"../types\"\n\ntype StackProps = PrimitiveProps & {\n gap?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\"\n align?: \"start\" | \"center\" | \"end\" | \"stretch\"\n justify?: \"start\" | \"center\" | \"end\" | \"between\"\n /** Data slot attribute for CSS targeting */\n 'data-slot'?: string\n}\n\nexport function Stack({\n as: Comp = \"div\",\n gap = \"md\",\n align = \"stretch\",\n justify = \"start\",\n className,\n children,\n 'data-slot': dataSlot,\n}: StackProps) {\n return (\n <Comp\n className={clsx(\n \"flex flex-col\",\n {\n \"gap-0\": gap === \"none\",\n \"gap-1\": gap === \"xs\",\n \"gap-2\": gap === \"sm\",\n \"gap-4\": gap === \"md\",\n \"gap-6\": gap === \"lg\",\n \"items-start\": align === \"start\",\n \"items-center\": align === \"center\",\n \"items-end\": align === \"end\",\n \"items-stretch\": align === \"stretch\",\n \"justify-start\": justify === \"start\",\n \"justify-center\": justify === \"center\",\n \"justify-end\": justify === \"end\",\n \"justify-between\": justify === \"between\",\n },\n className\n )}\n data-slot={dataSlot ?? 'stack'}\n >\n {children}\n </Comp>\n )\n}\n","// primitives/inline.tsx\nimport React from \"react\";\nimport clsx from \"clsx\";\nimport { PrimitiveProps } from \"../types\";\n\ntype InlineProps = PrimitiveProps & {\n gap?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\"\n align?: \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\"\n justify?: \"start\" | \"center\" | \"end\" | \"between\"\n wrap?: boolean\n /** Data slot attribute for CSS targeting */\n 'data-slot'?: string\n}\n\nexport function Inline({\n as: Comp = \"div\",\n gap = \"md\",\n align = \"center\",\n justify = \"start\",\n wrap = false,\n className,\n children,\n 'data-slot': dataSlot,\n}: InlineProps) {\n return (\n <Comp\n className={clsx(\n \"flex\",\n wrap && \"flex-wrap\",\n {\n \"gap-0\": gap === \"none\",\n \"gap-1\": gap === \"xs\",\n \"gap-2\": gap === \"sm\",\n \"gap-4\": gap === \"md\",\n \"gap-6\": gap === \"lg\",\n \"items-start\": align === \"start\",\n \"items-center\": align === \"center\",\n \"items-end\": align === \"end\",\n \"items-stretch\": align === \"stretch\",\n \"items-baseline\": align === \"baseline\",\n \"justify-start\": justify === \"start\",\n \"justify-center\": justify === \"center\",\n \"justify-end\": justify === \"end\",\n \"justify-between\": justify === \"between\",\n },\n className\n )}\n data-slot={dataSlot ?? 'inline'}\n >\n {children}\n </Comp>\n )\n}\n","// primitives/grid.tsx\nimport React from \"react\";\nimport clsx from \"clsx\";\nimport { PrimitiveProps } from \"../types\";\n\ntype GridProps = PrimitiveProps & {\n cols?: number | { base?: number; sm?: number; md?: number; lg?: number; xl?: number }\n gap?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\"\n /** Data slot attribute for CSS targeting */\n 'data-slot'?: string\n}\n\nexport function Grid({\n as: Comp = \"div\",\n cols = { base: 1, md: 2 },\n gap = \"md\",\n className,\n children,\n 'data-slot': dataSlot,\n}: GridProps) {\n // Normalize cols to object format\n // If cols is a number, convert it to { base: cols }\n const colsObj = typeof cols === 'number' ? { base: cols } : cols;\n\n const colClasses = [\n colsObj.base && `grid-cols-${colsObj.base}`,\n colsObj.sm && `sm:grid-cols-${colsObj.sm}`,\n colsObj.md && `md:grid-cols-${colsObj.md}`,\n colsObj.lg && `lg:grid-cols-${colsObj.lg}`,\n colsObj.xl && `xl:grid-cols-${colsObj.xl}`,\n ]\n\n return (\n <Comp\n className={clsx(\n \"grid\",\n colClasses,\n {\n \"gap-0\": gap === \"none\",\n \"gap-1\": gap === \"xs\",\n \"gap-2\": gap === \"sm\",\n \"gap-4\": gap === \"md\",\n \"gap-6\": gap === \"lg\",\n },\n className\n )}\n data-slot={dataSlot ?? 'grid'}\n >\n {children}\n </Comp>\n )\n}\n","import React from 'react'\n\nimport Section from '../../../primitives/layout/Section'\nimport { Stack as StackPrimitive } from '../../../primitives/layout/Stack'\nimport { Inline as InlinePrimitive } from '../../../primitives/layout/Inline'\nimport { Grid as GridPrimitive } from '../../../primitives/layout/Grid'\n\nexport const SectionNode: React.FC<any> = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, allowOverflow, ...props }) => <Section {...props} allowOverflow={allowOverflow} />\nexport const StackNode: React.FC<any> = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => <StackPrimitive {...props} />\nexport const InlineNode: React.FC<any> = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => <InlinePrimitive {...props} />\nexport const GridNode: React.FC<any> = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => <GridPrimitive {...props} />\nexport const DivNode: React.FC<any> = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => (\n <div {...props} />\n)\n","import React from 'react';\nimport type { RichTextPrimitiveProps } from \"../primitives\";\nimport type { TipTapNode } from \"../../../system/manifest/richTextSchema\";\n\nfunction renderMarks(text: string, marks: Array<{ type: string }> | null | undefined, key: string) {\n if (!marks || marks.length === 0) return text;\n return marks.reduce<React.ReactNode>((acc, mark) => {\n switch (mark.type) {\n case 'bold':\n case 'strong':\n return <strong key={`${key}-b`}>{acc}</strong>;\n case 'italic':\n case 'em':\n return <em key={`${key}-i`}>{acc}</em>;\n default:\n return acc;\n }\n }, text);\n}\n\nfunction renderDoc(node: TipTapNode | null | undefined, key: string): React.ReactNode {\n if (!node || !node.type) return null;\n const children = node.content?.map((child, index) => renderDoc(child, `${key}-${index}`));\n\n switch (node.type) {\n case 'doc':\n return <>{children}</>;\n case 'paragraph':\n if (!children && !node.text) return <p key={key} />;\n return <p key={key}>{children ?? renderMarks(node.text ?? '', node.marks, key)}</p>;\n case 'heading': {\n const level = Math.min(Math.max((node.attrs?.level as number) ?? 2, 1), 6);\n const headingTag = `h${level}`;\n return React.createElement(headingTag, { key }, children);\n }\n case 'bulletList':\n return <ul key={key}>{children}</ul>;\n case 'orderedList':\n return <ol key={key}>{children}</ol>;\n case 'listItem':\n return <li key={key}>{children}</li>;\n case 'blockquote':\n return <blockquote key={key}>{children}</blockquote>;\n case 'horizontalRule':\n return <hr key={key} />;\n case 'text':\n return renderMarks(node.text ?? '', node.marks, key);\n default:\n return null;\n }\n}\n\nexport default function RichText({ as: Comp = 'div', className = '', doc, path }: RichTextPrimitiveProps) {\n const content = doc ? renderDoc(doc, 'doc') : null;\n const dataAttributes = path ? { 'data-builder-richtext': path } : undefined;\n return (\n <Comp className={`${className}`} {...dataAttributes}>\n {content}\n </Comp>\n );\n}\n","import React from \"react\";\nimport type { TextProps } from \"../primitives\";\n\nexport default function Text({ as: Comp = \"span\", children, className = \"\", path }: TextProps) {\n const dataAttributes = path ? { 'data-builder-text': path } : undefined;\n return <Comp className={className} {...dataAttributes}>{children}</Comp>;\n}\n","import React from 'react'\n\nimport RichTextPrimitive from '../../../primitives/content/components/RichText'\nimport TextPrimitive from '../../../primitives/content/components/Text'\n\nexport type TextNodeProps = {\n value?: React.ReactNode\n className?: string\n path?: string\n children?: React.ReactNode\n}\n\nexport const TextNode: React.FC<TextNodeProps & { blockId?: string; blockKind?: string; blockContent?: unknown; fragmentRegistry?: unknown; pathBase?: string }> = ({ value, children, blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...rest }) => {\n return <TextPrimitive {...rest}>{value ?? children}</TextPrimitive>\n}\n\nexport type RichTextNodeProps = {\n value?: unknown\n path?: string\n className?: string\n children?: React.ReactNode\n}\n\nexport const RichTextNode: React.FC<RichTextNodeProps & { blockId?: string; blockKind?: string; blockContent?: unknown; fragmentRegistry?: unknown; pathBase?: string }> = ({ value, blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...rest }) => {\n // Unwrap legacy { doc: {...} } format for backward compatibility\n const doc = (value as any)?.doc ?? value\n return <RichTextPrimitive doc={doc as any} {...rest} />\n}\n\nexport type ButtonNodeProps = {\n value?: React.ReactNode\n href?: string\n className?: string\n target?: string\n rel?: string\n children?: React.ReactNode\n /** Button variant ID (reads from theme.buttons.variants) */\n variantId?: string\n /** Disabled state */\n disabled?: boolean\n /** Button type (for form buttons) */\n type?: 'button' | 'submit' | 'reset'\n}\n\nexport const ButtonNode: React.FC<\n ButtonNodeProps & { blockId?: string; blockKind?: string; blockContent?: unknown; fragmentRegistry?: unknown; pathBase?: string }\n> = ({\n value,\n children,\n href,\n variantId = 'primary',\n disabled,\n type = 'button',\n blockId: _blockId,\n blockKind: _blockKind,\n blockContent: _blockContent,\n fragmentRegistry: _fragmentRegistry,\n pathBase: _pathBase,\n className,\n ...rest\n}) => {\n const content = value ?? children\n\n if (!content) {\n console.warn('[ButtonNode] No content to render - value and children are both empty')\n return null\n }\n\n // Simple class application - variant ID plus any custom classes\n // All styling is in generated CSS (no Tailwind utility classes needed)\n const combinedClassName = [variantId, className].filter(Boolean).join(' ')\n\n // If href is provided, render as link\n if (href) {\n return (\n <a\n href={href}\n className={combinedClassName}\n {...rest}\n >\n {content}\n </a>\n )\n }\n\n // Otherwise render as button\n return (\n <button\n type={type}\n disabled={disabled}\n className={combinedClassName}\n {...rest}\n >\n {content}\n </button>\n )\n}\n\nexport type LinkNodeProps = {\n href?: string\n className?: string\n target?: string\n rel?: string\n children?: React.ReactNode\n}\n\nexport const LinkNode: React.FC<\n LinkNodeProps & { blockId?: string; blockKind?: string; blockContent?: unknown; fragmentRegistry?: unknown; pathBase?: string }\n> = ({\n href = '#',\n children,\n blockId: _blockId,\n blockKind: _blockKind,\n blockContent: _blockContent,\n fragmentRegistry: _fragmentRegistry,\n pathBase: _pathBase,\n ...rest\n}) => {\n if (!children) return null\n return (\n <a href={href} {...rest}>\n {children}\n </a>\n )\n}\n","export type MediaSource = 'upload' | 'instagram'\n\nexport type MediaAsset = {\n id: string\n siteId: string\n storageBucket: string\n storagePath: string\n filename: string\n mimeType: string\n width?: number\n height?: number\n bytes?: number\n checksumSha256?: string\n source: MediaSource\n altText?: string\n caption?: string\n exif?: Record<string, unknown>\n createdBy?: string\n createdAt: string\n updatedAt: string\n classifiedAt?: string\n labelsCached?: string[]\n // Video metadata\n durationSeconds?: number\n thumbnailAssetId?: string\n isThumbnail?: boolean\n}\n\nexport type TransformFit =\n | 'clip'\n | 'crop'\n | 'fill'\n | 'fillmax'\n | 'max'\n | 'scale'\n | 'min'\n\nexport type TransformCrop =\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'center'\n | 'focalpoint'\n | 'entropy'\n\nexport type TransformFormat = 'jpg' | 'pjpg' | 'png' | 'webp' | 'avif' | 'json'\n\nexport type TransformFlip = 'h' | 'v' | 'hv'\n\nexport type TransformColorSpace = 'srgb' | 'cmyk' | 'b-w' | 'origin'\n\nexport type TransformRect = [number, number, number, number]\n\nexport type TransformParams = {\n w?: number\n h?: number\n dpr?: number\n fit?: TransformFit\n crop?: TransformCrop\n fpX?: number\n fpY?: number\n rect?: TransformRect\n q?: number\n fm?: TransformFormat\n autoFormat?: boolean\n bg?: string\n flip?: TransformFlip\n or?: 0 | 90 | 180 | 270\n pad?: number\n blur?: number\n sharp?: number\n invert?: boolean\n sat?: number\n cs?: TransformColorSpace\n}\n\nexport type ParamKey = keyof TransformParams\n\n// SVG detection utilities\nexport const SVG_MIME_TYPE = 'image/svg+xml'\n\nexport function isSvgMimeType(mimeType: string | undefined): boolean {\n return mimeType === SVG_MIME_TYPE\n}\n","import type { MediaAsset, ParamKey, TransformParams } from './types'\n\nconst DEFAULT_BASE_PATH = '/api/img'\n\nconst formatNumber = (value: number) =>\n Number.isInteger(value)\n ? value.toString()\n : value.toFixed(6).replace(/0+$/, '').replace(/\\.$/, '')\n\nconst addParam = <T extends ParamKey>(\n search: URLSearchParams,\n key: T,\n value: TransformParams[T] | undefined\n) => {\n if (value === undefined) return\n\n switch (key) {\n case 'fpX':\n search.set('fp-x', formatNumber(value as number))\n break\n case 'fpY':\n search.set('fp-y', formatNumber(value as number))\n break\n case 'rect': {\n const rect = value as TransformParams['rect'] | undefined\n if (!rect) break\n search.set('rect', rect.map(formatNumber).join(','))\n break\n }\n case 'autoFormat':\n if (value) {\n search.append('auto', 'format')\n }\n break\n case 'invert':\n search.set('invert', (value as boolean) ? 'true' : 'false')\n break\n default:\n search.set(\n key,\n typeof value === 'number' ? formatNumber(value) : String(value)\n )\n }\n}\n\nconst ORDER: ParamKey[] = [\n 'w',\n 'h',\n 'dpr',\n 'fit',\n 'crop',\n 'fpX',\n 'fpY',\n 'rect',\n 'q',\n 'fm',\n 'autoFormat',\n 'bg',\n 'flip',\n 'or',\n 'pad',\n 'blur',\n 'sharp',\n 'invert',\n 'sat',\n 'cs'\n]\n\nexport const getImageUrl = (\n asset: Pick<MediaAsset, 'id'>,\n params: TransformParams = {},\n basePath: string = DEFAULT_BASE_PATH\n) => {\n const trimmedBase = basePath.endsWith('/')\n ? basePath.slice(0, Math.max(basePath.length - 1, 0))\n : basePath\n const path = `${trimmedBase}/${encodeURIComponent(asset.id)}`\n const searchParams = new URLSearchParams()\n\n ORDER.forEach((key) => {\n addParam(searchParams, key, params[key])\n })\n\n const query = searchParams.toString()\n return query ? `${path}?${query}` : path\n}\n","import React from 'react'\nimport clsx from 'clsx'\nimport { getImageUrl } from '@riverbankcms/media-core'\nimport type { Media } from '../../../lib/media'\nimport {\n backgroundColorStyle,\n mergeStyles,\n textColorStyle,\n} from '../../../theme/utils/colorStyles'\n\n// Inline getCmsApiUrl to avoid circular dependency with @riverbankcms/api\nfunction getCmsApiUrl(): string {\n const dashboardUrl = process.env.NEXT_PUBLIC_DASHBOARD_URL\n if (dashboardUrl) {\n const base = dashboardUrl.replace(/\\/$/, '')\n return `${base}/api`\n }\n\n const legacyApiUrl = process.env.NEXT_PUBLIC_CMS_API_URL\n if (legacyApiUrl) {\n return legacyApiUrl.replace(/\\/$/, '')\n }\n\n throw new Error(\n 'NEXT_PUBLIC_DASHBOARD_URL is not configured. ' +\n 'Set it to your dashboard URL (e.g., http://dashboard.local:4000)'\n )\n}\n\nconst debugMediaNodeLog = (...args: Array<unknown>) => {\n if (typeof window !== 'undefined' && (window as any).__DEBUG_MEDIA_NODE__) {\n console.log('[MediaNode]', ...args)\n }\n}\n\nexport type MediaNodeProps = {\n value?: Media | null\n className?: string\n style?: React.CSSProperties\n children?: React.ReactNode\n /**\n * Preview API key for accessing unpublished images.\n * Pass this when rendering preview/draft content on SDK sites.\n */\n previewKey?: string | null\n}\n\nexport const MediaNode: React.FC<MediaNodeProps> = ({ value, className, style, previewKey }) => {\n if (!value) return null\n\n if (value.type === 'video') {\n const src = value.src\n if (!src) return null\n return (\n <video className={className} style={style} src={src} autoPlay muted loop playsInline aria-label={value.alt ?? ''} />\n )\n }\n\n const imageUrl = resolveImageUrl(value, { previewKey })\n if (!imageUrl) {\n return (\n <div\n className={clsx('flex h-48 w-full items-center justify-center', className)}\n style={mergeStyles(backgroundColorStyle('neutral-200'), style)}\n >\n <span className=\"text-sm\" style={textColorStyle('neutral-600')}>\n Image unavailable\n </span>\n </div>\n )\n }\n\n // Check if image URL is cross-origin (different domain than current page)\n const isCrossOrigin = typeof window !== 'undefined' && imageUrl.startsWith('http') && !imageUrl.startsWith(window.location.origin)\n\n // For cross-origin images:\n // - Signed URLs from storage: use 'anonymous' (auth is in URL token)\n // - API routes (/api/img, /api/public/img): use 'use-credentials' to send cookies\n const isApiRoute = imageUrl.includes('/api/img') || imageUrl.includes('/api/public/img')\n const crossOriginMode = isCrossOrigin && isApiRoute ? 'use-credentials' : (isCrossOrigin ? 'anonymous' : undefined)\n\n return (\n <img\n src={imageUrl}\n alt={value.alt ?? ''}\n className={className}\n style={style}\n loading=\"lazy\"\n crossOrigin={crossOriginMode}\n />\n )\n}\n\nexport type ResolveImageUrlOptions = {\n /**\n * Preview API key for accessing unpublished images.\n * When provided, appended as ?preview_key=xxx to the image URL.\n */\n previewKey?: string | null\n}\n\nexport function resolveImageUrl(value: Media, options: ResolveImageUrlOptions = {}): string | undefined {\n if (value.type !== 'image') return undefined\n const params: Record<string, unknown> = {}\n const rect = value.transform?.rect\n const hotspot = value.transform?.hotspot\n\n if (rect && Array.isArray(rect) && rect.length === 4) {\n params.rect = rect.join(',')\n }\n if (hotspot && typeof hotspot.x === 'number' && typeof hotspot.y === 'number') {\n const x = clamp(hotspot.x)\n const y = clamp(hotspot.y)\n params.hotspot = `${x.toFixed(4)},${y.toFixed(4)}`\n }\n\n debugMediaNodeLog('resolveImageUrl input', {\n assetId: value.assetId,\n src: value.src,\n type: value.type,\n hasPreviewKey: !!options.previewKey,\n })\n\n // 1) Asset ID - route through the public image proxy\n // This handles media library assets from the private 'media' bucket\n // - Published assets: accessible without authentication\n // - Unpublished assets: require preview_key query param\n if (value.assetId) {\n const cmsApiBase = getCmsApiUrl()\n const basePath = `${cmsApiBase}/public/img`\n\n let resolved = getImageUrl({ id: value.assetId }, params, basePath)\n\n // Append preview key for accessing unpublished images\n if (options.previewKey) {\n const separator = resolved.includes('?') ? '&' : '?'\n resolved = `${resolved}${separator}preview_key=${encodeURIComponent(options.previewKey)}`\n }\n\n debugMediaNodeLog('resolve:asset-id', {\n assetId: value.assetId,\n cmsApiBase,\n basePath,\n resolvedUrl: resolved,\n hasPreviewKey: !!options.previewKey,\n })\n return resolved\n }\n\n // 2) Explicit src - used when there's no assetId (e.g., external URLs, site logos from public buckets)\n if (typeof value.src === 'string' && value.src.length > 0) {\n debugMediaNodeLog('resolve:explicit-src', { src: value.src })\n return value.src\n }\n\n // 3) Loose fallback for legacy shapes\n debugMediaNodeLog('resolve:fallback-url', { fallbackUrl: (value as any).url ?? null })\n return (value as any).url ?? undefined\n}\n\nfunction clamp(v: number, min = 0, max = 1) {\n return Math.min(Math.max(v, min), max)\n}\n","import React from 'react'\nimport clsx from 'clsx'\nimport {\n backgroundColorStyle,\n borderColorStyle,\n mergeStyles,\n textColorStyle,\n} from '../../../theme/utils/colorStyles'\n\ntype FormNodeProps = {\n value?: any\n submitLabel?: string\n successMessage?: string | null\n className?: string\n}\n\n// Server-safe, non-interactive form rendering\nexport const FormNodeSSR: React.FC<FormNodeProps> = ({ value, submitLabel, successMessage: _successMessage, className }) => {\n const form = value\n if (!form) {\n return (\n <div\n className={clsx('rounded-md border border-dashed p-6 text-sm', className)}\n style={mergeStyles(\n backgroundColorStyle('surface'),\n borderColorStyle('border'),\n textColorStyle('mutedText'),\n )}\n >\n Missing or unknown form.\n </div>\n )\n }\n\n const fields = (form as any)?.schemaJson?.fields\n return (\n <form method=\"POST\" action=\"/api/forms/submit\" className={clsx('space-y-4', className)}>\n <input type=\"hidden\" name=\"form_id\" value={form.id} />\n {/* Honeypot */}\n <input type=\"text\" name=\"company\" className=\"hidden\" tabIndex={-1} autoComplete=\"off\" />\n\n {Array.isArray(fields)\n ? fields.map((field: any) => {\n const inputId = `f_${field.id}`\n const label = String(field.label ?? field.id)\n const required = Boolean(field.required)\n const type = String(field.type ?? 'text')\n if (type === 'textarea') {\n return (\n <div key={field.id} className=\"space-y-1\">\n <label htmlFor={inputId} className=\"form-label\">\n {label}\n </label>\n <textarea\n id={inputId}\n name={field.id}\n required={required}\n placeholder={field.placeholder}\n rows={field.rows}\n className=\"form-textarea\"\n />\n </div>\n )\n }\n if (type === 'select') {\n const options: Array<{ value: string; label: string }> = field.options ?? []\n const multiple = Boolean(field.multiple)\n return (\n <div key={field.id} className=\"space-y-1\">\n <label htmlFor={inputId} className=\"form-label\">\n {label}\n </label>\n <select\n id={inputId}\n name={field.id}\n multiple={multiple}\n required={required}\n className=\"form-select\"\n >\n {!multiple && <option value=\"\">Select…</option>}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>{opt.label}</option>\n ))}\n </select>\n </div>\n )\n }\n if (type === 'radio') {\n const options: Array<{ value: string; label: string }> = field.options ?? []\n return (\n <fieldset key={field.id} className=\"space-y-2\">\n <legend className=\"form-label\">\n {label}\n </legend>\n {options.map((opt) => (\n <label\n key={opt.value}\n className=\"flex items-center gap-2 form-label\"\n >\n <input type=\"radio\" name={field.id} value={opt.value} required={required} className=\"form-radio\" />\n <span>{opt.label}</span>\n </label>\n ))}\n </fieldset>\n )\n }\n if (type === 'checkbox' || type === 'consent') {\n return (\n <label\n key={field.id}\n className=\"flex items-center gap-2 form-label\"\n >\n <input type=\"checkbox\" name={field.id} required={required} className=\"form-checkbox\" />\n <span>{label}</span>\n </label>\n )\n }\n const inputType = type === 'email' || type === 'url' || type === 'tel' || type === 'number' ? type : 'text'\n const extra: Record<string, any> = {}\n if (inputType === 'text' || inputType === 'email' || inputType === 'url' || inputType === 'tel') {\n if (typeof field.minLength === 'number') extra.minLength = field.minLength\n if (typeof field.maxLength === 'number') extra.maxLength = field.maxLength\n if (typeof field.pattern === 'string' && field.pattern) extra.pattern = field.pattern\n }\n if (inputType === 'number') {\n if (typeof field.min === 'number') extra.min = field.min\n if (typeof field.max === 'number') extra.max = field.max\n }\n return (\n <div key={field.id} className=\"space-y-1\">\n <label htmlFor={inputId} className=\"form-label\">\n {label}\n </label>\n <input\n id={inputId}\n name={field.id}\n type={inputType}\n required={required}\n placeholder={field.placeholder}\n {...extra}\n className=\"form-input\"\n />\n </div>\n )\n })\n : null}\n\n <div>\n <button\n type=\"submit\"\n className=\"primary\"\n >\n {submitLabel || 'Submit'}\n </button>\n </div>\n </form>\n )\n}\n\n","import React from 'react';\nimport clsx from 'clsx';\n\ntype CarouselNodeProps = {\n children?: React.ReactNode;\n className?: string;\n slidesToShow?: number | string;\n transition?: 'slide' | 'fade';\n showControls?: boolean | string;\n};\n\n/**\n * Server-safe carousel shell.\n * Renders static markup with controls; client counterpart hydrates behavior.\n */\nexport const CarouselNodeSSR: React.FC<CarouselNodeProps> = ({\n children,\n className,\n slidesToShow = 1,\n transition = 'slide',\n showControls = true,\n}) => {\n const slides = React.Children.toArray(children).filter(Boolean);\n const resolvedSlides = normalizeSlidesToShow(slidesToShow);\n const basis = `${100 / resolvedSlides}%`;\n const controlsEnabled = normalizeBoolean(showControls);\n const showNav = controlsEnabled && slides.length > resolvedSlides;\n\n return (\n <div\n className={clsx('relative', className)}\n data-slides-to-show={resolvedSlides}\n data-transition={transition}\n data-show-controls={controlsEnabled ? 'true' : 'false'}\n >\n <div className=\"overflow-hidden\">\n <div className=\"flex\">\n {slides.map((slide, index) => (\n <div\n key={index}\n className={clsx(\n 'shrink-0',\n transition === 'fade' && 'transition-opacity duration-500 ease-in-out',\n )}\n style={{ flex: `0 0 ${basis}` }}\n >\n {slide}\n </div>\n ))}\n </div>\n </div>\n {showNav ? (\n <div className=\"absolute inset-y-0 left-0 flex items-center px-2\">\n <span className=\"inline-flex h-9 w-9 items-center justify-center rounded-full bg-black/60 text-white\">\n ‹\n </span>\n </div>\n ) : null}\n {showNav ? (\n <div className=\"absolute inset-y-0 right-0 flex items-center px-2\">\n <span className=\"inline-flex h-9 w-9 items-center justify-center rounded-full bg-black/60 text-white\">\n ›\n </span>\n </div>\n ) : null}\n </div>\n );\n};\n\nfunction normalizeSlidesToShow(value: number | string | undefined): number {\n const parsed =\n typeof value === 'string'\n ? Number.parseInt(value, 10)\n : typeof value === 'number'\n ? value\n : 1;\n if (!Number.isFinite(parsed) || parsed <= 0) return 1;\n return Math.max(1, Math.min(4, parsed));\n}\n\nfunction normalizeBoolean(value: boolean | string | undefined): boolean {\n if (typeof value === 'string') {\n return value !== 'false';\n }\n return Boolean(value);\n}\n\nexport default CarouselNodeSSR;\n","import React from 'react';\nimport clsx from 'clsx';\nimport RichTextPrimitive from '../../../primitives/content/components/RichText';\n\ntype AccordionNodeProps = {\n children?: React.ReactNode;\n className?: string;\n type?: 'single' | 'multiple';\n defaultValue?: string | string[];\n collapsible?: boolean;\n};\n\nexport const AccordionNodeSSR: React.FC<AccordionNodeProps> = ({\n children,\n className,\n type = 'single',\n defaultValue,\n}) => {\n return (\n <div\n className={clsx('w-full accordion-root', className)}\n data-accordion-type={type}\n data-default-value={Array.isArray(defaultValue) ? defaultValue.join(',') : defaultValue}\n >\n {children}\n </div>\n );\n};\n\ntype AccordionItemNodeProps = {\n className?: string;\n value?: string | number | null;\n trigger?: unknown;\n content?: unknown;\n question?: unknown;\n answer?: unknown;\n};\n\nexport const AccordionItemNodeSSR: React.FC<AccordionItemNodeProps> = ({\n className,\n value,\n trigger,\n content,\n question,\n answer,\n}) => {\n const resolvedValue =\n value !== undefined && value !== null ? String(value) : undefined;\n const triggerSource = trigger ?? question;\n const contentSource = content ?? answer;\n\n return (\n <div className={clsx('border-b accordion-item', className)} data-accordion-value={resolvedValue}>\n <div className=\"flex w-full items-center justify-between py-3 accordion-trigger\">\n <span className=\"flex-1\">{resolveNode(triggerSource)}</span>\n <span aria-hidden=\"true\">+</span>\n </div>\n <div className=\"pb-3 accordion-content\">{resolveNode(contentSource)}</div>\n </div>\n );\n};\n\nfunction resolveNode(value: unknown): React.ReactNode {\n if (typeof value === 'string' || typeof value === 'number') return String(value);\n if (isDocNode(value)) {\n return <RichTextPrimitive doc={value as any} />;\n }\n return value as React.ReactNode;\n}\n\nfunction isDocNode(value: unknown): value is { type?: string; content?: unknown } {\n return Boolean(value && typeof value === 'object' && 'type' in (value as Record<string, unknown>));\n}\n\nexport default AccordionNodeSSR;\n","import React from 'react';\nimport Section from '../../../primitives/layout/Section';\n\ntype HeaderSectionNodeProps = React.PropsWithChildren<{\n className?: string;\n [key: string]: unknown;\n}>;\n\n/**\n * Server-safe header section without scroll effects.\n * Client counterpart adds scroll-aware behavior.\n */\nconst HeaderSectionNode: React.FC<HeaderSectionNodeProps> = ({ children, className, ...rest }) => {\n return (\n <Section {...(rest as any)} className={className}>\n {children}\n </Section>\n );\n};\n\nexport default HeaderSectionNode;\n","import React from 'react';\nimport clsx from 'clsx';\nimport type { PublicEvent } from '../../blocks/events/shared/types';\n\ntype EventListProps = {\n events?: PublicEvent[] | null;\n /** Layout mode: grid (cards) or stack (vertical list) */\n layout?: 'grid' | 'stack';\n /** Number of columns in grid layout (2, 3, or 4) */\n columns?: '2' | '3' | '4';\n /** Card variant from theme (default, variant1, variant2) */\n cardVariant?: 'default' | 'variant1' | 'variant2';\n /** Button variant from theme (primary, secondary, outline, link) */\n buttonVariant?: 'primary' | 'secondary' | 'outline' | 'link';\n /** Button text (default: 'View event') */\n buttonText?: string;\n showVenue?: boolean;\n showCapacity?: boolean;\n emptyMessage?: string;\n /** Base path for event registration URLs (default: '/events') */\n basePath?: string;\n className?: string;\n};\n\n/** Default base path for event URLs */\nconst DEFAULT_EVENT_BASE_PATH = '/events';\n\n/** Column class mappings for grid layout */\nconst COLUMN_CLASSES: Record<string, string> = {\n '2': 'sm:grid-cols-2',\n '3': 'sm:grid-cols-2 lg:grid-cols-3',\n '4': 'sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',\n};\n\n/**\n * Extract the date portion from an ISO timestamp for URL building\n */\nfunction formatDateForUrl(isoTimestamp: string): string {\n return isoTimestamp.split('T')[0];\n}\n\n/**\n * Build the registration URL for an event occurrence\n */\nfunction buildEventUrl(basePath: string, slug: string, startsAt: string): string {\n const date = formatDateForUrl(startsAt);\n const normalizedPath = basePath.startsWith('/') ? basePath : `/${basePath}`;\n const cleanPath = normalizedPath.endsWith('/') ? normalizedPath.slice(0, -1) : normalizedPath;\n return `${cleanPath}/${slug}/${date}`;\n}\n\n/**\n * Format date for display (server-safe, no Intl)\n * Returns: \"Monday, January 15, 2025\"\n */\nfunction formatDate(isoTimestamp: string): string {\n const date = new Date(isoTimestamp);\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const months = ['January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'];\n return `${days[date.getDay()]}, ${months[date.getMonth()]} ${date.getDate()}, ${date.getFullYear()}`;\n}\n\n/**\n * Format time for display (server-safe, no Intl)\n * Returns: \"10:00 AM\"\n */\nfunction formatTime(isoTimestamp: string): string {\n const date = new Date(isoTimestamp);\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const ampm = hours >= 12 ? 'PM' : 'AM';\n const displayHours = hours % 12 || 12;\n const displayMinutes = minutes.toString().padStart(2, '0');\n return `${displayHours}:${displayMinutes} ${ampm}`;\n}\n\n/**\n * EventCard Component (Server-safe)\n */\nconst EventCardSSR: React.FC<{\n event: PublicEvent;\n cardVariant?: 'default' | 'variant1' | 'variant2';\n buttonVariant?: 'primary' | 'secondary' | 'outline' | 'link';\n buttonText?: string;\n showVenue?: boolean;\n showCapacity?: boolean;\n basePath: string;\n}> = ({\n event,\n cardVariant = 'default',\n buttonVariant = 'primary',\n buttonText = 'View event',\n showVenue = true,\n showCapacity = true,\n basePath,\n}) => {\n const formattedDate = formatDate(event.startsAt);\n const formattedTime = `${formatTime(event.startsAt)} - ${formatTime(event.endsAt)}`;\n\n const isSoldOut = event.capacity !== null && event.availableSpots === 0;\n const spotsLeft = event.availableSpots;\n\n const cardClass = `card-${cardVariant}`;\n const buttonClass = `button-${buttonVariant}`;\n\n return (\n <article className={`${cardClass} group flex flex-col`}>\n <div className=\"card-content flex flex-col h-full\">\n <div className=\"mb-3\">\n <time className=\"text-sm font-medium opacity-60\">\n {formattedDate}\n </time>\n <p className=\"text-sm opacity-70\">{formattedTime}</p>\n </div>\n\n <h3 className=\"card-title mb-2 text-lg font-semibold\">\n {event.title}\n </h3>\n\n {event.description && (\n <p className=\"card-body mb-3 line-clamp-2 text-sm opacity-70\">\n {event.description}\n </p>\n )}\n\n {showVenue && event.venue && (\n <div className=\"mb-3 text-sm opacity-60\">\n <span className=\"font-medium\">{event.venue.name}</span>\n {event.venue.address && (\n <span className=\"ml-1 opacity-70\">\n &middot; {event.venue.address}\n </span>\n )}\n </div>\n )}\n\n <div className=\"mt-auto flex items-center justify-between pt-4\">\n {showCapacity && event.capacity !== null && (\n <div>\n {isSoldOut ? (\n <span className=\"badge-status badge-status-sold-out\">\n Sold Out\n </span>\n ) : spotsLeft !== null && spotsLeft <= 5 ? (\n <span className=\"badge-status badge-status-low\">\n {spotsLeft} {spotsLeft === 1 ? 'spot' : 'spots'} left\n </span>\n ) : (\n <span className=\"badge-status badge-status-available\">\n {spotsLeft} spots available\n </span>\n )}\n </div>\n )}\n\n {!isSoldOut && (\n <a\n href={buildEventUrl(basePath, event.slug, event.startsAt)}\n className={buttonClass}\n >\n {buttonText}\n </a>\n )}\n </div>\n </div>\n </article>\n );\n};\n\n/**\n * EventListSSR Component\n *\n * Server-safe version of EventListClient for SSR rendering.\n * Renders the same HTML structure for proper hydration.\n */\nexport const EventListSSR: React.FC<EventListProps> = ({\n events,\n layout = 'grid',\n columns = '3',\n cardVariant = 'default',\n buttonVariant = 'primary',\n buttonText = 'View event',\n showVenue = true,\n showCapacity = true,\n emptyMessage = 'No upcoming events scheduled.',\n basePath = DEFAULT_EVENT_BASE_PATH,\n className,\n}) => {\n const normalizedEvents = events ?? [];\n\n if (normalizedEvents.length === 0) {\n return (\n <div className={clsx('event-list event-list-empty rounded-xl border border-dashed p-12 text-center', className)}>\n <p className=\"text-base opacity-60\">{emptyMessage}</p>\n </div>\n );\n }\n\n const containerClass = layout === 'stack'\n ? 'flex flex-col gap-6'\n : `grid gap-6 ${COLUMN_CLASSES[columns] || COLUMN_CLASSES['3']}`;\n\n return (\n <div className={clsx('event-list', containerClass, className)}>\n {normalizedEvents.map((event) => (\n <EventCardSSR\n key={event.id}\n event={event}\n cardVariant={cardVariant}\n buttonVariant={buttonVariant}\n buttonText={buttonText}\n showVenue={showVenue}\n showCapacity={showCapacity}\n basePath={basePath}\n />\n ))}\n </div>\n );\n};\n\nexport default EventListSSR;\n","import React from 'react';\n\ntype BookingFormProps = {\n siteId?: string;\n formId?: string;\n serviceId?: string | null;\n resourceId?: string | null;\n submitLabel?: string | null;\n successMessage?: string | null;\n className?: string | null;\n children?: React.ReactNode;\n};\n\n/**\n * Server-safe placeholder for booking form.\n * Renders a container with identifying data attributes so hydration can attach\n * to a stable shell without pulling client hooks into the server graph.\n */\nexport function BookingFormSSR({\n siteId,\n formId,\n serviceId,\n resourceId,\n submitLabel,\n successMessage,\n className,\n children,\n}: BookingFormProps) {\n return (\n <div\n className={`booking-form-ssr ${className ?? ''}`.trim()}\n data-booking-form\n data-site-id={siteId ?? undefined}\n data-form-id={formId ?? undefined}\n data-service-id={serviceId ?? undefined}\n data-resource-id={resourceId ?? undefined}\n >\n <div className=\"booking-form-ssr__summary\">\n <strong>{submitLabel ?? 'Book now'}</strong>\n {successMessage ? <p className=\"booking-form-ssr__success\">{successMessage}</p> : null}\n </div>\n {children}\n </div>\n );\n}\n\nexport default BookingFormSSR;\n","import React from 'react';\n\ntype EventRegistrationProps = {\n siteId?: string;\n className?: string | null;\n buttonText?: string | null;\n maxTickets?: string | null;\n children?: React.ReactNode;\n};\n\n/**\n * Server-safe placeholder for event registration.\n * Provides a static container for island hydration without importing client hooks.\n */\nexport function EventRegistrationSSR({ siteId, className, buttonText, maxTickets, children }: EventRegistrationProps) {\n return (\n <div\n className={`event-registration ${className ?? ''}`.trim()}\n data-event-registration\n data-site-id={siteId ?? undefined}\n data-max-tickets={maxTickets ?? undefined}\n >\n <div className=\"event-registration__summary\">\n <strong>{buttonText ?? 'Register'}</strong>\n </div>\n {children}\n </div>\n );\n}\n\nexport default EventRegistrationSSR;\n","/**\n * Shared utility functions for event blocks\n */\n\n/** Default base path for event URLs */\nexport const DEFAULT_EVENT_BASE_PATH = '/events';\n\n/** Column class mappings for grid layouts */\nexport const COLUMN_CLASSES: Record<string, string> = {\n '2': 'sm:grid-cols-2',\n '3': 'sm:grid-cols-2 lg:grid-cols-3',\n '4': 'sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',\n};\n\n/**\n * Build container class based on layout mode\n * @param layout - 'grid' or 'stack'\n * @param columns - Number of columns for grid layout ('2', '3', '4')\n * @returns Tailwind class string for the container\n */\nexport function getContainerClass(layout: 'grid' | 'stack', columns: string): string {\n if (layout === 'stack') {\n return 'flex flex-col gap-6';\n }\n return `grid gap-6 ${COLUMN_CLASSES[columns] || COLUMN_CLASSES['3']}`;\n}\n\n\n/** Day names starting from Sunday */\nexport const DAY_NAMES = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n/** Month names */\nexport const MONTH_NAMES = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n];\n\n/**\n * Extract the date portion from an ISO timestamp for URL building\n * @example formatDateForUrl('2025-01-15T10:00:00Z') => '2025-01-15'\n */\nexport function formatDateForUrl(isoTimestamp: string): string {\n return isoTimestamp.split('T')[0];\n}\n\n/**\n * Build the registration URL for an event occurrence\n * Pattern: /:basePath/:slug/:date\n */\nexport function buildEventUrl(basePath: string, slug: string, startsAt: string): string {\n const date = formatDateForUrl(startsAt);\n const normalizedPath = basePath.startsWith('/') ? basePath : `/${basePath}`;\n const cleanPath = normalizedPath.endsWith('/') ? normalizedPath.slice(0, -1) : normalizedPath;\n return `${cleanPath}/${slug}/${date}`;\n}\n\n/**\n * Format date for display (server-safe, no Intl)\n * Returns: \"Monday, January 15, 2025\"\n */\nexport function formatDate(isoTimestamp: string): string {\n const date = new Date(isoTimestamp);\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const months = ['January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'];\n return `${days[date.getDay()]}, ${months[date.getMonth()]} ${date.getDate()}, ${date.getFullYear()}`;\n}\n\n/**\n * Format time for display (server-safe, no Intl)\n * Returns: \"10:00 AM\"\n */\nexport function formatTime(isoTimestamp: string): string {\n const date = new Date(isoTimestamp);\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const ampm = hours >= 12 ? 'PM' : 'AM';\n const displayHours = hours % 12 || 12;\n const displayMinutes = minutes.toString().padStart(2, '0');\n return `${displayHours}:${displayMinutes} ${ampm}`;\n}\n\n/**\n * Format a date as YYYY-MM-DD for use as a map key\n */\nexport function formatDateKey(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\n/**\n * Check if a date is today\n */\nexport function isToday(date: Date): boolean {\n const today = new Date();\n return date.getDate() === today.getDate() &&\n date.getMonth() === today.getMonth() &&\n date.getFullYear() === today.getFullYear();\n}\n\n/**\n * Get the start of month for a given date\n */\nexport function getStartOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\n\n/**\n * Get the end of month for a given date\n */\nexport function getEndOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0);\n}\n\n/**\n * Add months to a date\n */\nexport function addMonths(date: Date, months: number): Date {\n const result = new Date(date);\n result.setMonth(result.getMonth() + months);\n return result;\n}\n\n/**\n * Get date range for 3 months centered on a given date\n * @param date Reference date\n * @returns Date range spanning previous, current, and next months (ISO strings)\n */\nexport function getThreeMonthRange(date: Date): { from: string; to: string } {\n const year = date.getFullYear();\n const month = date.getMonth();\n // Previous month start\n const prevStart = new Date(year, month - 1, 1);\n // Next month end\n const nextEnd = new Date(year, month + 2, 0);\n return {\n from: `${formatDateKey(prevStart)}T00:00:00Z`,\n to: `${formatDateKey(nextEnd)}T23:59:59Z`,\n };\n}\n","import React from 'react';\nimport type { PublicEvent, CardVariant, ButtonVariant } from '../../../../blocks/events/shared/types';\nimport { buildEventUrl, formatDate, formatTime, DEFAULT_EVENT_BASE_PATH } from './utils';\n\ntype EventCardProps = {\n event: PublicEvent;\n cardVariant?: CardVariant;\n buttonVariant?: ButtonVariant;\n buttonText?: string;\n showVenue?: boolean;\n showCapacity?: boolean;\n basePath?: string;\n};\n\n/**\n * EventCard Component\n *\n * Displays a single event with title, date, venue, and capacity.\n * Uses theme card and button variant classes for styling.\n *\n * This component is server-safe (uses no client APIs like Intl).\n */\nexport const EventCard: React.FC<EventCardProps> = ({\n event,\n cardVariant = 'default',\n buttonVariant = 'primary',\n buttonText = 'View event',\n showVenue = true,\n showCapacity = true,\n basePath = DEFAULT_EVENT_BASE_PATH,\n}) => {\n const formattedDate = formatDate(event.startsAt);\n const formattedTime = `${formatTime(event.startsAt)} - ${formatTime(event.endsAt)}`;\n\n const isSoldOut = event.capacity !== null && event.availableSpots === 0;\n const spotsLeft = event.availableSpots;\n\n const cardClass = `card-${cardVariant}`;\n const buttonClass = `button-${buttonVariant}`;\n\n return (\n <article className={`${cardClass} group flex flex-col`}>\n <div className=\"card-content flex flex-col h-full\">\n {/* Date and time header */}\n <div className=\"mb-3\">\n <time className=\"text-sm font-medium opacity-60\">\n {formattedDate}\n </time>\n <p className=\"text-sm opacity-70\">{formattedTime}</p>\n </div>\n\n {/* Event title */}\n <h3 className=\"card-title mb-2 text-lg font-semibold\">\n {event.title}\n </h3>\n\n {/* Description */}\n {event.description && (\n <p className=\"card-body mb-3 line-clamp-2 text-sm opacity-70\">\n {event.description}\n </p>\n )}\n\n {/* Venue */}\n {showVenue && event.venue && (\n <div className=\"mb-3 text-sm opacity-60\">\n <span className=\"font-medium\">{event.venue.name}</span>\n {event.venue.address && (\n <span className=\"ml-1 opacity-70\">\n &middot; {event.venue.address}\n </span>\n )}\n </div>\n )}\n\n {/* Footer with capacity and register button */}\n <div className=\"mt-auto flex items-center justify-between pt-4\">\n {/* Capacity indicator */}\n {showCapacity && event.capacity !== null && (\n <div>\n {isSoldOut ? (\n <span className=\"badge-status badge-status-sold-out\">\n Sold Out\n </span>\n ) : spotsLeft !== null && spotsLeft <= 5 ? (\n <span className=\"badge-status badge-status-low\">\n {spotsLeft} {spotsLeft === 1 ? 'spot' : 'spots'} left\n </span>\n ) : (\n <span className=\"badge-status badge-status-available\">\n {spotsLeft} spots available\n </span>\n )}\n </div>\n )}\n\n {/* Action button */}\n {!isSoldOut && (\n <a\n href={buildEventUrl(basePath, event.slug, event.startsAt)}\n className={buttonClass}\n >\n {buttonText}\n </a>\n )}\n </div>\n </div>\n </article>\n );\n};\n\nexport default EventCard;\n","import React from 'react';\n\ntype EmptyStateProps = {\n message?: string;\n className?: string;\n};\n\n/**\n * EmptyState Component\n * Displays when no events are available\n */\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n message = 'No upcoming events scheduled.',\n className,\n}) => {\n return (\n <div className={`event-list-empty rounded-xl border border-dashed p-12 text-center ${className || ''}`}>\n <p className=\"text-base opacity-60\">{message}</p>\n </div>\n );\n};\n\nexport default EmptyState;\n","import React from 'react';\nimport type { PublicEvent, CardVariant, ButtonVariant, EventLayout } from '../../../blocks/events/shared/types';\nimport { EventCard, EmptyState, getContainerClass } from './shared';\n\ntype EventSpotlightProps = {\n events?: PublicEvent[] | null;\n layout?: EventLayout;\n columns?: '2' | '3';\n cardVariant?: CardVariant;\n buttonVariant?: ButtonVariant;\n buttonText?: string;\n showVenue?: boolean;\n showCapacity?: boolean;\n emptyMessage?: string;\n className?: string;\n};\n\n/**\n * EventSpotlight Component\n *\n * Displays a simple list of featured upcoming events.\n * This is a server-safe component with no client-side interactivity.\n *\n * Designed for homepages and landing pages to highlight 1-6 events.\n */\nexport const EventSpotlight: React.FC<EventSpotlightProps> = ({\n events,\n layout = 'grid',\n columns = '3',\n cardVariant = 'default',\n buttonVariant = 'primary',\n buttonText = 'View event',\n showVenue = true,\n showCapacity = true,\n emptyMessage = 'No upcoming events scheduled.',\n className,\n}) => {\n const normalizedEvents = events ?? [];\n\n // Empty state\n if (normalizedEvents.length === 0) {\n return <EmptyState message={emptyMessage} className={className} />;\n }\n\n // Build container class based on layout\n const containerClass = getContainerClass(layout, columns);\n\n return (\n <div className={`event-spotlight ${containerClass} ${className || ''}`}>\n {normalizedEvents.map((event) => (\n <EventCard\n key={event.id}\n event={event}\n cardVariant={cardVariant}\n buttonVariant={buttonVariant}\n buttonText={buttonText}\n showVenue={showVenue}\n showCapacity={showCapacity}\n />\n ))}\n </div>\n );\n};\n\nexport default EventSpotlight;\n","import React from 'react';\nimport type { PublicEvent, CardVariant, ButtonVariant, EventLayout, ColumnOption } from '../../../blocks/events/shared/types';\nimport { EventCard, EmptyState, getContainerClass } from './shared';\n\ntype EventListingProps = {\n events?: PublicEvent[] | null;\n siteId: string;\n layout?: EventLayout;\n columns?: ColumnOption;\n eventsPerPage?: string;\n loadMoreText?: string;\n cardVariant?: CardVariant;\n buttonVariant?: ButtonVariant;\n buttonText?: string;\n showVenue?: boolean;\n showCapacity?: boolean;\n emptyMessage?: string;\n className?: string;\n};\n\n/**\n * EventListing SSR Component\n *\n * Server-safe version for SSR rendering.\n * Renders initial events without pagination (client handles that).\n */\nexport const EventListingSSR: React.FC<EventListingProps> = ({\n events,\n layout = 'grid',\n columns = '3',\n cardVariant = 'default',\n buttonVariant = 'primary',\n buttonText = 'View event',\n showVenue = true,\n showCapacity = true,\n emptyMessage = 'No upcoming events scheduled.',\n className,\n}) => {\n const normalizedEvents = events ?? [];\n\n // Empty state\n if (normalizedEvents.length === 0) {\n return <EmptyState message={emptyMessage} className={className} />;\n }\n\n // Build container class based on layout\n const containerClass = getContainerClass(layout, columns);\n\n return (\n <div className={`event-listing ${className || ''}`}>\n <div className={containerClass}>\n {normalizedEvents.map((event) => (\n <EventCard\n key={event.id}\n event={event}\n cardVariant={cardVariant}\n buttonVariant={buttonVariant}\n buttonText={buttonText}\n showVenue={showVenue}\n showCapacity={showCapacity}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport default EventListingSSR;\n","\"use client\"\n\nimport { useState, useCallback, useRef } from 'react';\nimport type { PublicEvent } from '../../blocks/events/shared/types';\nimport { getCmsApiUrl } from '../utils/api-url';\n\ntype UseEventPaginationOptions = {\n /** Site ID for API requests */\n siteId: string;\n /** Initial events from server-side render */\n initialEvents?: PublicEvent[];\n /** Number of events per page */\n pageSize?: number;\n};\n\ntype EventPaginationState = {\n /** All loaded events */\n events: PublicEvent[];\n /** Whether a load operation is in progress */\n loading: boolean;\n /** Error from last load attempt */\n error: Error | null;\n /** Whether more events are available */\n hasMore: boolean;\n /** Load the next page of events */\n loadMore: () => void;\n};\n\n/**\n * Hook for paginated event loading with \"load more\" functionality.\n *\n * Uses cursor-based pagination by tracking the last event's startsAt\n * to fetch subsequent pages.\n *\n * @example\n * ```tsx\n * const { events, loading, hasMore, loadMore } = useEventPagination({\n * siteId: 'site-123',\n * initialEvents: serverEvents,\n * pageSize: 12,\n * });\n * ```\n */\nexport function useEventPagination({\n siteId,\n initialEvents = [],\n pageSize = 12,\n}: UseEventPaginationOptions): EventPaginationState {\n const [events, setEvents] = useState<PublicEvent[]>(initialEvents);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [hasMore, setHasMore] = useState(initialEvents.length >= pageSize);\n\n // Request ID for handling race conditions\n const requestIdRef = useRef(0);\n\n const loadMore = useCallback(async () => {\n if (loading || !hasMore) return;\n\n const currentRequestId = ++requestIdRef.current;\n setLoading(true);\n setError(null);\n\n try {\n // Get cursor from last event's startsAt\n const lastEvent = events[events.length - 1];\n const from = lastEvent ? lastEvent.startsAt : undefined;\n\n // Build API URL\n const params = new URLSearchParams({\n limit: String(pageSize),\n ...(from ? { from } : {}),\n });\n\n const apiBaseUrl = getCmsApiUrl();\n const response = await fetch(\n `${apiBaseUrl}/public/sites/${siteId}/events?${params.toString()}`\n );\n\n if (!response.ok) {\n throw new Error(`Failed to load events: ${response.statusText}`);\n }\n\n const newEvents: PublicEvent[] = await response.json();\n\n // Only update if this is still the current request\n if (currentRequestId === requestIdRef.current) {\n setEvents((prev) => {\n // Filter out any duplicates based on event ID\n const existingIds = new Set(prev.map((e) => e.id));\n const uniqueNew = newEvents.filter((e) => !existingIds.has(e.id));\n return [...prev, ...uniqueNew];\n });\n setHasMore(newEvents.length >= pageSize);\n }\n } catch (err) {\n if (currentRequestId === requestIdRef.current) {\n setError(err instanceof Error ? err : new Error('Unknown error'));\n }\n } finally {\n if (currentRequestId === requestIdRef.current) {\n setLoading(false);\n }\n }\n }, [siteId, events, loading, hasMore, pageSize]);\n\n return {\n events,\n loading,\n error,\n hasMore,\n loadMore,\n };\n}\n\nexport default useEventPagination;\n","/**\n * Get the CMS API base URL\n *\n * Resolves the API URL from environment variables.\n * Priority: NEXT_PUBLIC_BUILDER_API_URL (SDK sites) > NEXT_PUBLIC_DASHBOARD_URL (frontend app)\n *\n * @returns The base API URL (e.g., \"http://dashboard.local:4000/api\")\n * @throws Error if no valid URL is configured\n */\nexport function getCmsApiUrl(): string {\n // SDK sites use this (explicit API URL, no /api suffix needed)\n const builderApiUrl = process.env.NEXT_PUBLIC_BUILDER_API_URL;\n if (builderApiUrl) {\n return builderApiUrl.replace(/\\/$/, '');\n }\n\n // Frontend app uses this (dashboard URL, append /api)\n const dashboardUrl = process.env.NEXT_PUBLIC_DASHBOARD_URL;\n if (dashboardUrl) {\n const base = dashboardUrl.replace(/\\/$/, '');\n return `${base}/api`;\n }\n\n // Legacy fallback\n const legacyApiUrl = process.env.NEXT_PUBLIC_CMS_API_URL;\n if (legacyApiUrl) {\n return legacyApiUrl.replace(/\\/$/, '');\n }\n\n throw new Error(\n 'No API URL configured. Set NEXT_PUBLIC_BUILDER_API_URL (SDK sites) ' +\n 'or NEXT_PUBLIC_DASHBOARD_URL (frontend app).'\n );\n}\n","\"use client\"\n\nimport React from 'react';\nimport type { PublicEvent, CardVariant, ButtonVariant, EventLayout, ColumnOption } from '../../../blocks/events/shared/types';\nimport { EventCard, EmptyState, getContainerClass } from './shared';\nimport { useEventPagination } from '../../hooks/useEventPagination';\n\ntype EventListingProps = {\n events?: PublicEvent[] | null;\n siteId: string;\n layout?: EventLayout;\n columns?: ColumnOption;\n eventsPerPage?: string;\n loadMoreText?: string;\n cardVariant?: CardVariant;\n buttonVariant?: ButtonVariant;\n buttonText?: string;\n showVenue?: boolean;\n showCapacity?: boolean;\n emptyMessage?: string;\n className?: string;\n};\n\n/**\n * EventListing Component\n *\n * Displays a paginated list of events with a \"load more\" button.\n * Server-rendered initially, with client-side pagination for subsequent pages.\n */\nexport const EventListingClient: React.FC<EventListingProps> = ({\n events: initialEvents,\n siteId,\n layout = 'grid',\n columns = '3',\n eventsPerPage = '12',\n loadMoreText,\n cardVariant = 'default',\n buttonVariant = 'primary',\n buttonText = 'View event',\n showVenue = true,\n showCapacity = true,\n emptyMessage = 'No upcoming events scheduled.',\n className,\n}) => {\n // Use fallback for empty string or undefined\n const loadMoreButtonText = loadMoreText || 'Load more';\n const pageSize = parseInt(eventsPerPage, 10) || 12;\n\n const {\n events,\n loading,\n error,\n hasMore,\n loadMore,\n } = useEventPagination({\n siteId,\n initialEvents: initialEvents ?? [],\n pageSize,\n });\n\n // Empty state\n if (events.length === 0 && !loading) {\n return <EmptyState message={emptyMessage} className={className} />;\n }\n\n // Build container class based on layout\n const containerClass = getContainerClass(layout, columns);\n\n return (\n <div className={`event-listing ${className || ''}`}>\n {/* Event cards grid/stack */}\n <div className={containerClass}>\n {events.map((event) => (\n <EventCard\n key={event.id}\n event={event}\n cardVariant={cardVariant}\n buttonVariant={buttonVariant}\n buttonText={buttonText}\n showVenue={showVenue}\n showCapacity={showCapacity}\n />\n ))}\n </div>\n\n {/* Error state */}\n {error && (\n <div className=\"mt-6 text-center\">\n <p className=\"text-red-600 text-sm mb-2\">\n Failed to load more events\n </p>\n <button\n type=\"button\"\n onClick={loadMore}\n className={`button-${buttonVariant}`}\n >\n Try again\n </button>\n </div>\n )}\n\n {/* Load more button */}\n {hasMore && !error && (\n <div className=\"mt-8 text-center\">\n <button\n type=\"button\"\n onClick={loadMore}\n disabled={loading}\n className={`button-${buttonVariant} ${loading ? 'opacity-50 cursor-wait' : ''}`}\n >\n {loading ? 'Loading...' : loadMoreButtonText}\n </button>\n </div>\n )}\n </div>\n );\n};\n\nexport default EventListingClient;\n","\"use client\"\n\nimport React, { useMemo } from 'react';\nimport type { PublicEvent, ButtonVariant, CalendarView, WeekStart } from '../../../blocks/events/shared/types';\nimport { useCalendarEvents } from '../../hooks/useCalendarEvents';\nimport {\n buildEventUrl,\n formatTime,\n formatDateKey,\n isToday,\n DEFAULT_EVENT_BASE_PATH,\n DAY_NAMES,\n MONTH_NAMES,\n} from './shared/utils';\n\ntype EventCalendarProps = {\n events?: PublicEvent[] | null;\n siteId: string;\n calendarView?: CalendarView;\n startOfWeek?: WeekStart;\n buttonVariant?: ButtonVariant;\n emptyMessage?: string;\n className?: string;\n};\n\n/**\n * Get calendar days for a month view\n */\nfunction getMonthCalendarDays(year: number, month: number, startOfWeek: WeekStart): Date[] {\n const firstDayOfMonth = new Date(year, month, 1);\n const lastDayOfMonth = new Date(year, month + 1, 0);\n\n let startOffset = firstDayOfMonth.getDay();\n if (startOfWeek === 'monday') {\n startOffset = startOffset === 0 ? 6 : startOffset - 1;\n }\n\n const days: Date[] = [];\n\n // Add days from previous month\n for (let i = startOffset - 1; i >= 0; i--) {\n days.push(new Date(year, month, -i));\n }\n\n // Add days of current month\n for (let day = 1; day <= lastDayOfMonth.getDate(); day++) {\n days.push(new Date(year, month, day));\n }\n\n // Add days from next month to complete grid (6 rows = 42 days)\n while (days.length < 42) {\n const nextDay = days.length - startOffset - lastDayOfMonth.getDate() + 1;\n days.push(new Date(year, month + 1, nextDay));\n }\n\n return days;\n}\n\n/**\n * Get calendar days for a week view\n */\nfunction getWeekCalendarDays(baseDate: Date, startOfWeek: WeekStart): Date[] {\n const days: Date[] = [];\n\n const dayOfWeek = baseDate.getDay();\n const daysToStart = startOfWeek === 'monday'\n ? (dayOfWeek === 0 ? 6 : dayOfWeek - 1)\n : dayOfWeek;\n\n const weekStart = new Date(baseDate);\n weekStart.setDate(baseDate.getDate() - daysToStart);\n\n for (let i = 0; i < 7; i++) {\n const date = new Date(weekStart);\n date.setDate(weekStart.getDate() + i);\n days.push(date);\n }\n\n return days;\n}\n\n/**\n * Group events by date key\n */\nfunction groupEventsByDate(events: PublicEvent[]): Map<string, PublicEvent[]> {\n const map = new Map<string, PublicEvent[]>();\n\n for (const event of events) {\n const dateKey = event.startsAt.split('T')[0];\n const existing = map.get(dateKey) || [];\n existing.push(event);\n map.set(dateKey, existing);\n }\n\n return map;\n}\n\n/**\n * CalendarDayCell - Renders a single day in the calendar\n */\nconst CalendarDayCell: React.FC<{\n date: Date;\n events: PublicEvent[];\n isCurrentMonth: boolean;\n basePath: string;\n}> = ({ date, events, isCurrentMonth, basePath }) => {\n const today = isToday(date);\n\n return (\n <div\n className={`\n calendar-day min-h-[100px] border-b border-r border-current/10 p-1\n ${!isCurrentMonth ? 'opacity-40' : ''}\n ${today ? 'bg-current/5' : ''}\n `}\n >\n {/* Day number */}\n <div className={`\n text-sm font-medium mb-1 px-1\n ${today ? 'text-current font-bold' : 'opacity-70'}\n `}>\n {date.getDate()}\n </div>\n\n {/* Events for this day */}\n <div className=\"space-y-1\">\n {events.slice(0, 3).map((event) => (\n <a\n key={event.id}\n href={buildEventUrl(basePath, event.slug, event.startsAt)}\n className=\"block text-xs p-1 rounded truncate bg-current/10 hover:bg-current/20 transition-colors\"\n title={`${event.title} at ${formatTime(event.startsAt)}`}\n >\n <span className=\"font-medium opacity-70\">{formatTime(event.startsAt)}</span>\n {' '}\n <span>{event.title}</span>\n </a>\n ))}\n {events.length > 3 && (\n <div className=\"text-xs opacity-60 px-1\">\n +{events.length - 3} more\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * EventCalendar Component\n *\n * Interactive calendar showing events by month or week.\n * Uses useCalendarEvents hook for 3-month caching and navigation.\n */\nexport const EventCalendarClient: React.FC<EventCalendarProps> = ({\n events: initialEvents,\n siteId,\n calendarView = 'month',\n startOfWeek = 'monday',\n buttonVariant = 'primary',\n emptyMessage = 'No upcoming events scheduled.',\n className,\n}) => {\n const {\n events,\n viewDate,\n loading,\n error,\n goToPrevious,\n goToNext,\n goToToday,\n } = useCalendarEvents({\n siteId,\n initialEvents: initialEvents ?? [],\n preloadMonths: 1,\n });\n\n const eventsByDate = useMemo(() => groupEventsByDate(events), [events]);\n\n // Get day names in correct order\n const dayNames = useMemo(() => {\n if (startOfWeek === 'monday') {\n return [...DAY_NAMES.slice(1), DAY_NAMES[0]];\n }\n return DAY_NAMES;\n }, [startOfWeek]);\n\n // Get calendar days\n const calendarDays = useMemo(() => {\n if (calendarView === 'week') {\n return getWeekCalendarDays(viewDate, startOfWeek);\n }\n return getMonthCalendarDays(\n viewDate.getFullYear(),\n viewDate.getMonth(),\n startOfWeek\n );\n }, [viewDate, calendarView, startOfWeek]);\n\n // Format header title\n const headerTitle = useMemo(() => {\n if (calendarView === 'week') {\n const weekStart = calendarDays[0];\n const weekEnd = calendarDays[6];\n const startMonth = MONTH_NAMES[weekStart.getMonth()];\n const endMonth = MONTH_NAMES[weekEnd.getMonth()];\n\n if (weekStart.getMonth() === weekEnd.getMonth()) {\n return `${startMonth} ${weekStart.getDate()} - ${weekEnd.getDate()}, ${weekEnd.getFullYear()}`;\n }\n return `${startMonth} ${weekStart.getDate()} - ${endMonth} ${weekEnd.getDate()}, ${weekEnd.getFullYear()}`;\n }\n return `${MONTH_NAMES[viewDate.getMonth()]} ${viewDate.getFullYear()}`;\n }, [viewDate, calendarView, calendarDays]);\n\n return (\n <div className={`event-calendar-grid ${className || ''}`}>\n {/* Navigation header */}\n <div className=\"flex items-center justify-between mb-4\">\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={goToPrevious}\n className=\"p-2 rounded hover:bg-current/10 transition-colors\"\n aria-label={calendarView === 'week' ? 'Previous week' : 'Previous month'}\n >\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n\n <h3 className=\"text-lg font-semibold min-w-[200px] text-center\">\n {headerTitle}\n {loading && <span className=\"ml-2 text-sm opacity-50\">(loading...)</span>}\n </h3>\n\n <button\n type=\"button\"\n onClick={goToNext}\n className=\"p-2 rounded hover:bg-current/10 transition-colors\"\n aria-label={calendarView === 'week' ? 'Next week' : 'Next month'}\n >\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n\n <button\n type=\"button\"\n onClick={goToToday}\n className={`button-${buttonVariant} text-sm px-3 py-1`}\n >\n Today\n </button>\n </div>\n\n {/* Calendar grid */}\n <div className=\"border border-current/20 rounded-lg overflow-hidden\">\n {/* Day headers */}\n <div className=\"grid grid-cols-7 bg-current/5\">\n {dayNames.map((day) => (\n <div\n key={day}\n className=\"text-center py-2 text-sm font-medium opacity-70 border-b border-current/10\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar days */}\n <div className=\"grid grid-cols-7\">\n {calendarDays.map((date) => {\n const dateKey = formatDateKey(date);\n const dayEvents = eventsByDate.get(dateKey) || [];\n\n return (\n <CalendarDayCell\n key={dateKey}\n date={date}\n events={dayEvents}\n isCurrentMonth={date.getMonth() === viewDate.getMonth()}\n basePath={DEFAULT_EVENT_BASE_PATH}\n />\n );\n })}\n </div>\n </div>\n\n {/* Error state */}\n {error && (\n <div className=\"mt-4 text-center\">\n <p className=\"text-red-600 text-sm mb-2\">\n Failed to load events\n </p>\n <button\n type=\"button\"\n onClick={goToToday}\n className={`button-${buttonVariant} text-sm px-3 py-1`}\n >\n Try again\n </button>\n </div>\n )}\n\n {/* Empty state hint */}\n {events.length === 0 && !loading && !error && (\n <p className=\"text-center text-sm opacity-60 mt-4\">\n {emptyMessage}\n </p>\n )}\n </div>\n );\n};\n\nexport default EventCalendarClient;\n","\"use client\"\n\nimport { useState, useCallback, useRef, useMemo, useEffect } from 'react';\nimport type { PublicEvent } from '../../blocks/events/shared/types';\nimport { getThreeMonthRange, addMonths } from '../nodes/events/shared/utils';\nimport { getCmsApiUrl } from '../utils/api-url';\n\n/** Maximum events to fetch per calendar request (covers 3 months of events) */\nconst CALENDAR_FETCH_LIMIT = 200;\n\ntype UseCalendarEventsOptions = {\n /** Site ID for API requests */\n siteId: string;\n /** Initial events from server-side render */\n initialEvents?: PublicEvent[];\n /** Number of months to pre-fetch in each direction (default: 1) */\n preloadMonths?: number;\n};\n\ntype CalendarEventsState = {\n /** Events visible in the current view */\n events: PublicEvent[];\n /** Current view date (center of the calendar) */\n viewDate: Date;\n /** Whether events are being loaded */\n loading: boolean;\n /** Error from last fetch */\n error: Error | null;\n /** Set the view date */\n setViewDate: (date: Date) => void;\n /** Navigate to previous month */\n goToPrevious: () => void;\n /** Navigate to next month */\n goToNext: () => void;\n /** Navigate to today */\n goToToday: () => void;\n};\n\n/**\n * Generate a cache key for a month\n */\nfunction getMonthKey(date: Date): string {\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}`;\n}\n\n/**\n * Hook for calendar event management with month-based caching.\n *\n * Pre-fetches 3 months (previous, current, next) and caches by month.\n * Navigation within cached range is instant; fetches at boundaries.\n *\n * @example\n * ```tsx\n * const { events, viewDate, loading, goToPrevious, goToNext } = useCalendarEvents({\n * siteId: 'site-123',\n * initialEvents: serverEvents,\n * });\n * ```\n */\nexport function useCalendarEvents({\n siteId,\n initialEvents = [],\n preloadMonths = 1,\n}: UseCalendarEventsOptions): CalendarEventsState {\n const [viewDate, setViewDate] = useState(() => new Date());\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n // Version counter to trigger re-computation when cache updates\n const [cacheVersion, setCacheVersion] = useState(0);\n\n // Cache events by month key\n const cacheRef = useRef<Map<string, PublicEvent[]>>(new Map());\n\n // Track which months have been fully loaded (not just have events)\n const loadedMonthsRef = useRef<Set<string>>(new Set());\n\n // Track which months are currently being fetched\n const fetchingRef = useRef<Set<string>>(new Set());\n\n // Request ID for race condition handling\n const requestIdRef = useRef(0);\n\n // Track if initial events have been processed\n const initializedRef = useRef(false);\n\n // Initialize cache with server-provided events (runs once)\n useEffect(() => {\n if (initializedRef.current) return;\n initializedRef.current = true;\n\n // Group initial events by month\n for (const event of initialEvents) {\n const eventDate = new Date(event.startsAt);\n const monthKey = getMonthKey(eventDate);\n const existing = cacheRef.current.get(monthKey) || [];\n if (!existing.some((e) => e.id === event.id)) {\n cacheRef.current.set(monthKey, [...existing, event]);\n }\n }\n\n // Mark the current month as loaded if we have any initial events\n // This prevents immediate re-fetch on mount\n if (initialEvents.length > 0) {\n const currentMonthKey = getMonthKey(new Date());\n loadedMonthsRef.current.add(currentMonthKey);\n // Also mark the current month in the cache if not already there\n if (!cacheRef.current.has(currentMonthKey)) {\n cacheRef.current.set(currentMonthKey, []);\n }\n }\n }, [initialEvents]);\n\n /**\n * Fetch events for a date range and add to cache\n */\n const fetchEventsForRange = useCallback(async (from: string, to: string, targetMonths: string[]) => {\n // Check if all target months are already loaded or being fetched\n const monthsToFetch = targetMonths.filter(\n (m) => !loadedMonthsRef.current.has(m) && !fetchingRef.current.has(m)\n );\n\n if (monthsToFetch.length === 0) return;\n\n // Mark months as being fetched\n monthsToFetch.forEach((m) => fetchingRef.current.add(m));\n\n const currentRequestId = ++requestIdRef.current;\n setLoading(true);\n setError(null);\n\n try {\n const params = new URLSearchParams({\n from,\n to,\n limit: String(CALENDAR_FETCH_LIMIT),\n });\n\n const apiBaseUrl = getCmsApiUrl();\n const response = await fetch(\n `${apiBaseUrl}/public/sites/${siteId}/events?${params.toString()}`\n );\n\n if (!response.ok) {\n throw new Error(`Failed to load events: ${response.statusText}`);\n }\n\n const events: PublicEvent[] = await response.json();\n\n // Only update if this is still the current request\n if (currentRequestId === requestIdRef.current) {\n // Group events by month and add to cache\n for (const event of events) {\n const eventDate = new Date(event.startsAt);\n const monthKey = getMonthKey(eventDate);\n const existing = cacheRef.current.get(monthKey) || [];\n if (!existing.some((e) => e.id === event.id)) {\n cacheRef.current.set(monthKey, [...existing, event]);\n }\n }\n\n // Mark all fetched months as loaded and ensure they have cache entries\n for (const month of monthsToFetch) {\n loadedMonthsRef.current.add(month);\n if (!cacheRef.current.has(month)) {\n cacheRef.current.set(month, []);\n }\n }\n\n // Trigger re-computation of events\n setCacheVersion((v) => v + 1);\n }\n } catch (err) {\n if (currentRequestId === requestIdRef.current) {\n setError(err instanceof Error ? err : new Error('Unknown error'));\n }\n } finally {\n // Unmark months as being fetched\n monthsToFetch.forEach((m) => fetchingRef.current.delete(m));\n\n if (currentRequestId === requestIdRef.current) {\n setLoading(false);\n }\n }\n }, [siteId]);\n\n /**\n * Ensure events are cached for months around the current view\n */\n const ensureEventsLoaded = useCallback((date: Date) => {\n const targetMonths: string[] = [];\n\n // Get months in range (prev, current, next based on preloadMonths)\n for (let i = -preloadMonths; i <= preloadMonths; i++) {\n const targetDate = addMonths(date, i);\n targetMonths.push(getMonthKey(targetDate));\n }\n\n // Check if any months need fetching (not yet loaded and not currently fetching)\n const unloadedMonths = targetMonths.filter(\n (m) => !loadedMonthsRef.current.has(m) && !fetchingRef.current.has(m)\n );\n\n if (unloadedMonths.length > 0) {\n const range = getThreeMonthRange(date);\n fetchEventsForRange(range.from, range.to, unloadedMonths);\n }\n }, [preloadMonths, fetchEventsForRange]);\n\n // Load events when view date changes\n useEffect(() => {\n ensureEventsLoaded(viewDate);\n }, [viewDate, ensureEventsLoaded]);\n\n /**\n * Get events for the current view (current month)\n */\n const events = useMemo(() => {\n const monthKey = getMonthKey(viewDate);\n const monthEvents = cacheRef.current.get(monthKey) || [];\n\n // Sort by start time\n return [...monthEvents].sort(\n (a, b) => new Date(a.startsAt).getTime() - new Date(b.startsAt).getTime()\n );\n // Note: cacheVersion triggers update when cache changes (refs don't trigger re-renders)\n }, [viewDate, cacheVersion]);\n\n const goToPrevious = useCallback(() => {\n setViewDate((current) => addMonths(current, -1));\n }, []);\n\n const goToNext = useCallback(() => {\n setViewDate((current) => addMonths(current, 1));\n }, []);\n\n const goToToday = useCallback(() => {\n setViewDate(new Date());\n }, []);\n\n return {\n events,\n viewDate,\n loading,\n error,\n setViewDate,\n goToPrevious,\n goToNext,\n goToToday,\n };\n}\n\nexport default useCalendarEvents;\n","import type { ComponentRegistry } from '../resolver'\nimport { SectionNode, StackNode, InlineNode, GridNode, DivNode } from '../nodes/layout'\nimport { TextNode, RichTextNode, ButtonNode, LinkNode } from '../nodes/basic'\nimport { MediaNode } from '../nodes/media'\nimport { FormNodeSSR } from '../nodes/form.server'\nimport { CarouselNodeSSR } from '../nodes/carousel.server'\nimport { AccordionNodeSSR, AccordionItemNodeSSR } from '../nodes/accordion.server'\nimport HeaderSectionNode from '../nodes/header-section.server'\nimport { EventListSSR } from '../nodes/event-list.server'\nimport BookingFormSSR from '../nodes/booking-form.server'\nimport EventRegistrationSSR from '../nodes/event-registration.server'\nimport { EventSpotlight, EventListingSSR } from '../nodes/events'\n\nexport const serverComponentRegistry: ComponentRegistry = {\n div: DivNode,\n section: SectionNode,\n headerSection: HeaderSectionNode,\n stack: StackNode,\n inline: InlineNode,\n grid: GridNode,\n text: TextNode,\n richText: RichTextNode,\n button: ButtonNode,\n media: MediaNode,\n link: LinkNode,\n form: FormNodeSSR,\n carousel: CarouselNodeSSR,\n accordion: AccordionNodeSSR,\n accordionItem: AccordionItemNodeSSR,\n 'event-list': EventListSSR,\n 'booking-form': BookingFormSSR,\n 'event-registration': EventRegistrationSSR,\n // New event blocks\n 'event-spotlight': EventSpotlight,\n 'event-listing': EventListingSSR,\n 'event-calendar': EventSpotlight, // SSR fallback - calendar renders events as spotlight\n}\n","\"use client\"\n\nimport React, { useState } from 'react'\nimport clsx from 'clsx'\nimport { TurnstileWidget } from '@riverbankcms/turnstile/client'\nimport { hasTurnstile } from '@riverbankcms/turnstile'\nimport {\n backgroundColorStyle,\n borderColorStyle,\n mergeStyles,\n textColorStyle,\n} from '../../../theme/utils/colorStyles'\nimport { useFormSubmission } from '../hooks/useFormSubmission'\n\ntype FormNodeProps = {\n value?: any\n submitLabel?: string\n successMessage?: string | null\n className?: string\n}\n\nexport const FormNodeClient: React.FC<FormNodeProps> = ({ value, submitLabel, successMessage, className }) => {\n const form = value\n const { submit, isSubmitting, error, isSuccess } = useFormSubmission()\n const [turnstileToken, setTurnstileToken] = useState<string | null>(null)\n\n if (!form) {\n return (\n <div\n className={clsx('rounded-md border border-dashed p-6 text-sm', className)}\n style={mergeStyles(\n backgroundColorStyle('surface'),\n borderColorStyle('border'),\n textColorStyle('mutedText'),\n )}\n >\n Missing or unknown form.\n </div>\n )\n }\n\n const fields = (form as any)?.schemaJson?.fields\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>): Promise<void> => {\n e.preventDefault()\n const formData = new FormData(e.currentTarget)\n\n // Check honeypot (silent fail for bots)\n const honeypot = formData.get('company') as string\n if (honeypot?.trim()) return\n\n // Build data object from form fields\n const data: Record<string, unknown> = {}\n // Use Array.from for broader TypeScript compatibility\n const entries = Array.from(formData as unknown as Iterable<[string, FormDataEntryValue]>)\n for (const [key, fieldValue] of entries) {\n // Skip internal fields\n if (key === 'company' || key === 'cf-turnstile-response') continue\n\n // Handle multi-value fields (checkboxes, multi-selects)\n if (key in data) {\n const existing = data[key]\n data[key] = Array.isArray(existing) ? [...existing, fieldValue] : [existing, fieldValue]\n } else {\n data[key] = fieldValue\n }\n }\n\n try {\n await submit({\n formId: form.id,\n data,\n meta: {\n honeypot,\n turnstileToken,\n referer: typeof window !== 'undefined' ? window.location.href : undefined,\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : undefined,\n },\n })\n } catch {\n // Error is already set in hook state\n }\n }\n\n if (isSuccess) {\n return (\n <div className={`rounded-md border border-green-200 bg-green-50 p-4 text-sm text-green-900 ${className ?? ''}`}>\n {successMessage?.trim() || 'Thanks — we received your submission.'}\n </div>\n )\n }\n\n const errorBanner = error\n ? (\n <div className=\"mb-2 rounded-md border border-red-200 bg-red-50 p-3 text-sm text-red-900\">\n {error}\n </div>\n ) : null\n\n return (\n <form onSubmit={handleSubmit} className={clsx('space-y-4', className)}>\n {/* Turnstile */}\n {hasTurnstile() ? (\n <TurnstileWidget onTokenChange={setTurnstileToken} />\n ) : null}\n {errorBanner}\n {/* Honeypot */}\n <input type=\"text\" name=\"company\" className=\"hidden\" tabIndex={-1} autoComplete=\"off\" />\n\n {Array.isArray(fields)\n ? fields.map((field: any) => {\n const inputId = `f_${field.id}`\n const label = String(field.label ?? field.id)\n const required = Boolean(field.required)\n const type = String(field.type ?? 'text')\n if (type === 'textarea') {\n return (\n <div key={field.id} className=\"space-y-1\">\n <label htmlFor={inputId} className=\"form-label\">\n {label}\n </label>\n <textarea\n id={inputId}\n name={field.id}\n required={required}\n placeholder={field.placeholder}\n rows={field.rows}\n className=\"form-textarea\"\n />\n </div>\n )\n }\n if (type === 'select') {\n const options: Array<{ value: string; label: string }> = field.options ?? []\n const multiple = Boolean(field.multiple)\n return (\n <div key={field.id} className=\"space-y-1\">\n <label htmlFor={inputId} className=\"form-label\">\n {label}\n </label>\n <select\n id={inputId}\n name={field.id}\n multiple={multiple}\n required={required}\n className=\"form-select\"\n >\n {!multiple && <option value=\"\">Select…</option>}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>{opt.label}</option>\n ))}\n </select>\n </div>\n )\n }\n if (type === 'radio') {\n const options: Array<{ value: string; label: string }> = field.options ?? []\n return (\n <fieldset key={field.id} className=\"space-y-2\">\n <legend className=\"form-label\">\n {label}\n </legend>\n {options.map((opt) => (\n <label\n key={opt.value}\n className=\"flex items-center gap-2 form-label\"\n >\n <input type=\"radio\" name={field.id} value={opt.value} required={required} className=\"form-radio\" />\n <span>{opt.label}</span>\n </label>\n ))}\n </fieldset>\n )\n }\n if (type === 'checkbox' || type === 'consent') {\n return (\n <label\n key={field.id}\n className=\"flex items-center gap-2 form-label\"\n >\n <input type=\"checkbox\" name={field.id} required={required} className=\"form-checkbox\" />\n <span>{label}</span>\n </label>\n )\n }\n const inputType = type === 'email' || type === 'url' || type === 'tel' || type === 'number' ? type : 'text'\n const extra: Record<string, any> = {}\n if (inputType === 'text' || inputType === 'email' || inputType === 'url' || inputType === 'tel') {\n if (typeof field.minLength === 'number') extra.minLength = field.minLength\n if (typeof field.maxLength === 'number') extra.maxLength = field.maxLength\n if (typeof field.pattern === 'string' && field.pattern) extra.pattern = field.pattern\n }\n if (inputType === 'number') {\n if (typeof field.min === 'number') extra.min = field.min\n if (typeof field.max === 'number') extra.max = field.max\n }\n return (\n <div key={field.id} className=\"space-y-1\">\n <label htmlFor={inputId} className=\"form-label\">\n {label}\n </label>\n <input\n id={inputId}\n name={field.id}\n type={inputType}\n required={required}\n placeholder={field.placeholder}\n {...extra}\n className=\"form-input\"\n />\n </div>\n )\n })\n : null}\n\n <div>\n <button\n type=\"submit\"\n className=\"primary\"\n disabled={isSubmitting}\n >\n {isSubmitting ? 'Submitting...' : (submitLabel || 'Submit')}\n </button>\n </div>\n </form>\n )\n}\n","\"use client\";\n\n// src/TurnstileWidget.tsx\nimport { useEffect, useRef } from \"react\";\nfunction ensureScript() {\n return new Promise((resolve) => {\n if (typeof window === \"undefined\") return resolve();\n const existing = document.querySelector(\"script[data-turnstile]\");\n if (existing && window.turnstile) return resolve();\n if (existing && !window.turnstile) {\n existing.addEventListener(\"load\", () => resolve());\n existing.addEventListener(\"error\", () => resolve());\n return;\n }\n const s = document.createElement(\"script\");\n s.src = \"https://challenges.cloudflare.com/turnstile/v0/api.js\";\n s.async = true;\n s.defer = true;\n s.setAttribute(\"data-turnstile\", \"1\");\n s.onload = () => resolve();\n s.onerror = () => resolve();\n document.head.appendChild(s);\n });\n}\nfunction TurnstileWidget({ inputName = \"cf-turnstile-response\", onTokenChange, className }) {\n const containerRef = useRef(null);\n useEffect(() => {\n const siteKey = process.env.NEXT_PUBLIC_TURNSTILE_SITE_KEY;\n if (!siteKey || !containerRef.current) return;\n let destroyed = false;\n (async () => {\n await ensureScript();\n if (destroyed || !containerRef.current) return;\n const form = containerRef.current.closest(\"form\");\n const input = form?.querySelector(`input[name=\"${inputName}\"]`);\n const setToken = (token) => {\n if (input && typeof token === \"string\") input.value = token;\n if (input && token === null) input.value = \"\";\n try {\n onTokenChange?.(token);\n } catch {\n }\n };\n try {\n window.turnstile?.render(containerRef.current, {\n sitekey: siteKey,\n callback: (token) => setToken(token),\n \"refresh-expired\": \"auto\",\n \"retry-interval\": 5e3\n });\n } catch {\n }\n })();\n return () => {\n destroyed = true;\n };\n }, [inputName]);\n return /* @__PURE__ */ React.createElement(\"div\", { ref: containerRef, className: className || \"hidden\" });\n}\nexport {\n TurnstileWidget\n};\n","// src/index.ts\nasync function verifyTurnstileToken(token, opts = {}) {\n try {\n const secret = process.env.TURNSTILE_SECRET_KEY;\n if (!secret) return true;\n if (!token) return false;\n const form = new URLSearchParams();\n form.set(\"secret\", secret);\n form.set(\"response\", token);\n if (opts.remoteIp) form.set(\"remoteip\", opts.remoteIp);\n const res = await fetch(\"https://challenges.cloudflare.com/turnstile/v0/siteverify\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/x-www-form-urlencoded\" },\n body: form\n });\n const json = await res.json();\n if (!json?.success) return false;\n if (opts.expectedHostnames && opts.expectedHostnames.length > 0) {\n if (!json.hostname || !opts.expectedHostnames.includes(json.hostname)) return false;\n }\n return true;\n } catch {\n return false;\n }\n}\nfunction getSiteKey() {\n const v = process.env.NEXT_PUBLIC_TURNSTILE_SITE_KEY;\n return v && v.trim().length > 0 ? v : null;\n}\nfunction hasTurnstile() {\n return Boolean(getSiteKey());\n}\nexport {\n getSiteKey,\n hasTurnstile,\n verifyTurnstileToken\n};\n","/**\n * Hook for submitting form data to the CMS API\n *\n * Pattern follows useBookingSubmission.ts\n */\n\nimport { useState } from 'react';\nimport { getCmsApiUrl } from '../utils/api-url';\n\nexport type FormSubmissionData = {\n formId: string;\n data: Record<string, unknown>;\n meta?: {\n honeypot?: string;\n turnstileToken?: string | null;\n referer?: string;\n userAgent?: string;\n path?: string;\n };\n};\n\ntype UseFormSubmissionResult = {\n submit: (data: FormSubmissionData) => Promise<void>;\n isSubmitting: boolean;\n error: string | null;\n isSuccess: boolean;\n};\n\n/**\n * Hook for submitting form data\n *\n * Handles API call, loading state, and error handling.\n * Returns isSuccess=true after successful submission.\n */\nexport function useFormSubmission(): UseFormSubmissionResult {\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [isSuccess, setIsSuccess] = useState(false);\n\n const submit = async (data: FormSubmissionData) => {\n setIsSubmitting(true);\n setError(null);\n\n try {\n const apiUrl = getCmsApiUrl();\n const response = await fetch(`${apiUrl}/forms/submit`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n formId: data.formId,\n data: data.data,\n meta: data.meta,\n }),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.error || 'Failed to submit form');\n }\n\n setIsSuccess(true);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to submit form');\n throw err; // Re-throw so caller can handle if needed\n } finally {\n setIsSubmitting(false);\n }\n };\n\n return { submit, isSubmitting, error, isSuccess };\n}\n","\"use client\"\n\nimport React, { useState } from 'react';\nimport { MultiStepForm } from '../components/multi-step/MultiStepForm';\nimport { SuccessMessage } from '../components/booking/SuccessMessage';\nimport { useBookingSteps, type BookingFormData } from '../hooks/useBookingSteps';\nimport { useBookingSubmission } from '../hooks/useBookingSubmission';\n\nexport type Service = {\n id: string;\n siteId: string;\n title: string;\n description?: string;\n durationMinutes?: number;\n};\n\nexport type FormConfig = {\n id: string;\n siteId: string;\n userId: string;\n name: string;\n schemaJson?: any;\n settingsJson?: any;\n createdAt: string;\n updatedAt: string;\n};\n\ntype BookingFormProps = {\n siteId: string;\n formId: string;\n className?: string;\n // Data passed from server-side data loaders\n form?: FormConfig | null;\n services?: Service[];\n};\n\n/**\n * BookingFormClient Component\n *\n * Multi-step booking form that:\n * 1. Receives form configuration and services from server-side loaders\n * 2. Shows service/resource selection if needed\n * 3. Shows date/time slot selection (fetched dynamically based on user selection)\n * 4. Shows dynamic custom fields\n * 5. Submits booking\n */\nexport const BookingFormClient: React.FC<BookingFormProps> = ({\n siteId: siteIdProp,\n formId,\n className,\n form,\n services = [],\n}) => {\n const [isSuccess, setIsSuccess] = useState(false);\n\n // Fallback: if siteId isn't passed via binding, get it from form data\n const siteId = siteIdProp || form?.siteId || '';\n\n // Validate required props\n React.useEffect(() => {\n if (!siteId) {\n console.error('[BookingFormClient] ERROR: siteId is missing!');\n }\n if (!form) {\n console.warn('[BookingFormClient] Form data not loaded');\n }\n console.log('[BookingFormClient] Loaded with:', {\n siteId,\n formId,\n hasForm: !!form,\n servicesCount: Array.isArray(services) ? services.length : 'not an array',\n servicesData: services,\n });\n }, [siteId, formId, form, services]);\n\n // Normalize form config to expected shape\n const formConfig = form ? {\n id: form.id,\n name: form.name,\n slug: '', // Not needed for booking form\n settings: form.settingsJson,\n schema: form.schemaJson,\n } : null;\n\n // Normalize services to ensure it's always an array\n const normalizedServices = React.useMemo(() => {\n if (Array.isArray(services)) {\n return services;\n }\n if (services && typeof services === 'object') {\n // If it's an object with a services property, extract it\n if ('services' in services) {\n return (services as any).services || [];\n }\n // If it's an object with service objects as values, convert to array\n return Object.values(services);\n }\n return [];\n }, [services]);\n\n // Build step array based on configuration\n const steps = useBookingSteps(siteId, formConfig, normalizedServices);\n\n const { submit } = useBookingSubmission(siteId);\n\n // Show error if form data is missing\n if (!form) {\n return (\n <div className={`rounded-lg border border-destructive bg-destructive/10 p-4 ${className ?? ''}`}>\n <p className=\"text-sm text-destructive\">Booking form not found. Please check your configuration.</p>\n </div>\n );\n }\n\n const handleComplete = async (data: BookingFormData) => {\n try {\n // Extract booking data\n const serviceId = data.serviceId || formConfig?.settings?.serviceId;\n const resourceId = data.resourceId || formConfig?.settings?.resourceId;\n\n if (!serviceId || !data.selectedSlot) {\n throw new Error('Missing required booking information');\n }\n\n // Calculate endAt from service duration\n console.log('[BookingFormClient] Looking for service:', {\n serviceId,\n availableServices: normalizedServices,\n });\n const selectedService = normalizedServices.find((s: Service) => s.id === serviceId);\n console.log('[BookingFormClient] Selected service:', selectedService);\n\n if (!selectedService) {\n throw new Error(`Service not found: ${serviceId}`);\n }\n if (!selectedService.durationMinutes) {\n throw new Error(\n `Service \"${selectedService.title || serviceId}\" is missing duration. ` +\n `Please update the service in the dashboard to include a duration (e.g., 30 minutes).`\n );\n }\n\n // Calculate end time by adding duration to start time\n const startDate = new Date(data.selectedSlot);\n const endDate = new Date(startDate.getTime() + selectedService.durationMinutes * 60 * 1000);\n\n // Extract custom fields (everything except our known booking fields)\n const bookingFields = new Set(['serviceId', 'resourceId', 'selectedDate', 'selectedSlot']);\n const customFields: Record<string, any> = {};\n for (const [key, value] of Object.entries(data)) {\n if (!bookingFields.has(key)) {\n customFields[key] = value;\n }\n }\n\n // Submit booking with formId\n await submit({\n formId,\n serviceId,\n resourceId,\n startAt: data.selectedSlot,\n endAt: endDate.toISOString(),\n customFields,\n timezone: 'UTC', // TODO: Get from resource or user preference\n });\n\n setIsSuccess(true);\n } catch (err) {\n console.error('Booking submission failed:', err);\n throw err;\n }\n };\n\n // Success state\n if (isSuccess) {\n const successMessage = formConfig?.settings?.successMessage ||\n 'Your appointment has been booked! Check your email for confirmation.';\n return <SuccessMessage message={successMessage} className={className} />;\n }\n\n // Multi-step form\n return (\n <div className={className}>\n <MultiStepForm<BookingFormData>\n steps={steps}\n initialData={{\n serviceId: formConfig?.settings?.serviceId,\n resourceId: formConfig?.settings?.resourceId,\n }}\n onComplete={handleComplete}\n progressStyle=\"steps\"\n persistToUrl={false}\n allowSkip={false}\n />\n </div>\n );\n};\n","'use client';\n\nimport React, { cloneElement, isValidElement } from 'react';\nimport { MultiStepContext } from './MultiStepContext';\nimport { useMultiStep } from './useMultiStep';\nimport type { MultiStepFormProps } from './types';\n\n/**\n * MultiStepForm Component\n *\n * Generic orchestrator for multi-step forms. Handles step navigation,\n * data accumulation, validation, and progress indication.\n *\n * Usage:\n * ```tsx\n * <MultiStepForm\n * steps={[\n * { id: 'step1', title: 'Step 1', component: <Step1 /> },\n * { id: 'step2', title: 'Step 2', component: <Step2 /> },\n * ]}\n * onComplete={(data) => console.log('Done!', data)}\n * progressStyle=\"dots\"\n * />\n * ```\n */\nexport function MultiStepForm<TData = any>({\n steps,\n initialData,\n onComplete,\n onStepChange,\n onDataChange,\n progressStyle = 'dots',\n className = '',\n persistToUrl = false,\n allowSkip = false,\n}: MultiStepFormProps<TData>): React.ReactElement {\n const context = useMultiStep<TData>({\n steps,\n initialData,\n onStepChange,\n onDataChange,\n onComplete,\n persistToUrl,\n });\n\n const {\n visibleSteps,\n currentStepIndex,\n goToNext,\n goToPrevious,\n goToStep,\n canGoNext,\n canGoBack,\n isFirstStep,\n isLastStep,\n errors,\n isValidating,\n isSubmitting,\n } = context;\n\n const currentStep = visibleSteps[currentStepIndex];\n\n if (!currentStep) {\n return (\n <div className=\"text-center py-12\">\n <p className=\"text-muted-foreground\">No steps available</p>\n </div>\n );\n }\n\n // Clone the step component and inject context if it's a React element\n const stepComponent = isValidElement(currentStep.component)\n ? cloneElement(currentStep.component as React.ReactElement<any>, {\n // Step components can access context via hooks, but we also pass key props\n stepId: currentStep.id,\n stepIndex: currentStepIndex,\n } as any) // Type assertion needed for dynamic props\n : currentStep.component;\n\n const showBackButton = !isFirstStep && !currentStep.hideBack && canGoBack;\n const showNextButton = !currentStep.isTerminal;\n const nextButtonLabel = isLastStep\n ? (currentStep.nextLabel || 'Complete')\n : (currentStep.nextLabel || 'Continue');\n const backButtonLabel = currentStep.backLabel || 'Back';\n\n return (\n <MultiStepContext.Provider value={context}>\n <div className={`multi-step-form ${className}`}>\n {/* Progress Indicator */}\n {progressStyle !== 'none' && (\n <div className=\"mb-8\">\n <ProgressIndicator\n steps={visibleSteps}\n currentIndex={currentStepIndex}\n style={progressStyle}\n onStepClick={allowSkip ? goToStep : undefined}\n />\n </div>\n )}\n\n {/* Step Content */}\n <div className=\"step-content\">{stepComponent}</div>\n\n {/* Error Display */}\n {Object.keys(errors).length > 0 && (\n <div className=\"mt-6 alert alert-error\">\n {errors._form && (\n <p className=\"text-sm font-medium\">{errors._form}</p>\n )}\n {Object.entries(errors)\n .filter(([key]) => key !== '_form')\n .map(([key, message]) => (\n <p key={key} className=\"text-sm\">\n {message}\n </p>\n ))}\n </div>\n )}\n\n {/* Navigation Buttons */}\n {(showBackButton || showNextButton) && (\n <div className=\"flex gap-3 mt-8\">\n {showBackButton && (\n <button\n type=\"button\"\n onClick={goToPrevious}\n disabled={!canGoBack}\n className=\"outline btn-md\"\n >\n {backButtonLabel}\n </button>\n )}\n\n {showNextButton && (\n <button\n type=\"button\"\n onClick={goToNext}\n disabled={!canGoNext}\n className=\"primary btn-md flex-1\"\n >\n {isValidating && (\n <span className=\"inline-block animate-spin rounded-full h-4 w-4 border-b-2 border-current\"></span>\n )}\n {isSubmitting && (\n <span className=\"inline-block animate-spin rounded-full h-4 w-4 border-b-2 border-current\"></span>\n )}\n {!isValidating && !isSubmitting && nextButtonLabel}\n {isValidating && 'Validating...'}\n {isSubmitting && 'Submitting...'}\n </button>\n )}\n </div>\n )}\n </div>\n </MultiStepContext.Provider>\n );\n}\n\n/**\n * ProgressIndicator Component\n *\n * Visual indicator of progress through the steps.\n * Supports dots, steps, and bar styles.\n */\nfunction ProgressIndicator({\n steps,\n currentIndex,\n style,\n onStepClick,\n}: {\n steps: Array<{ id: string; title: string }>;\n currentIndex: number;\n style: 'dots' | 'steps' | 'bar';\n onStepClick?: (index: number) => void;\n}) {\n if (style === 'dots') {\n return (\n <div className=\"flex items-center justify-center gap-2\">\n {steps.map((step, index) => {\n const isActive = index === currentIndex;\n const isCompleted = index < currentIndex;\n const isClickable = onStepClick && index <= currentIndex;\n\n return (\n <button\n key={step.id}\n type=\"button\"\n onClick={isClickable ? () => onStepClick(index) : undefined}\n disabled={!isClickable}\n className={`\n step-dot transition-all\n ${isActive ? 'step-dot-active' : ''}\n ${isCompleted ? 'step-dot-complete' : ''}\n ${isClickable ? 'cursor-pointer hover:scale-125' : 'cursor-default'}\n `}\n aria-label={step.title}\n />\n );\n })}\n </div>\n );\n }\n\n if (style === 'steps') {\n return (\n <div className=\"flex items-center justify-between\">\n {steps.map((step, index) => {\n const isActive = index === currentIndex;\n const isCompleted = index < currentIndex;\n const isClickable = onStepClick && index <= currentIndex;\n const isLast = index === steps.length - 1;\n\n return (\n <div key={step.id} className=\"flex items-center flex-1\">\n <button\n type=\"button\"\n onClick={isClickable ? () => onStepClick(index) : undefined}\n disabled={!isClickable}\n className={`\n flex items-center gap-2\n ${isClickable ? 'cursor-pointer' : 'cursor-default'}\n `}\n >\n <div\n className={`\n step-circle transition-colors\n ${isActive ? 'step-circle-active' : ''}\n ${isCompleted ? 'step-circle-complete' : ''}\n `}\n >\n {isCompleted ? '✓' : index + 1}\n </div>\n <span\n className={`\n text-sm hidden sm:inline\n ${isActive ? 'font-medium' : ''}\n ${isCompleted || !isActive ? 'status-muted' : ''}\n `}\n >\n {step.title}\n </span>\n </button>\n\n {!isLast && (\n <div className=\"step-connector mx-2 hidden sm:block\" />\n )}\n </div>\n );\n })}\n </div>\n );\n }\n\n // Bar style\n const progress = ((currentIndex + 1) / steps.length) * 100;\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm status-muted\">\n <span>\n Step {currentIndex + 1} of {steps.length}\n </span>\n <span>{Math.round(progress)}%</span>\n </div>\n <div className=\"progress-bar\">\n <div\n className=\"progress-fill\"\n style={{ width: `${progress}%` }}\n />\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { createContext, useContext } from 'react';\nimport type { MultiStepContextValue } from './types';\n\n/**\n * React Context for Multi-Step Form State\n *\n * Provides step navigation, data management, and validation state\n * to all child components within a multi-step form.\n */\nexport const MultiStepContext = createContext<MultiStepContextValue | null>(null);\n\n/**\n * Hook to access multi-step form context\n *\n * Must be used within a MultiStepForm component.\n *\n * @throws Error if used outside of MultiStepForm\n * @returns The multi-step context value with full state and navigation\n */\nexport function useMultiStepContext<TData = any>(): MultiStepContextValue<TData> {\n const context = useContext(MultiStepContext);\n\n if (!context) {\n throw new Error(\n 'useMultiStepContext must be used within a MultiStepForm component. ' +\n 'Make sure your component is wrapped in <MultiStepForm>.'\n );\n }\n\n return context as MultiStepContextValue<TData>;\n}\n\n/**\n * Hook to access multi-step form data\n *\n * Convenience hook that returns just the data portion of the context.\n * Useful for components that only need to read/write data.\n *\n * @returns Object with data and updateData function\n */\nexport function useMultiStepData<TData = any>(): {\n data: Partial<TData>;\n updateData: (updates: Partial<TData>) => void;\n} {\n const { data, updateData } = useMultiStepContext<TData>();\n return { data, updateData };\n}\n\n/**\n * Hook to access multi-step navigation\n *\n * Convenience hook that returns just the navigation functions.\n * Useful for custom step components that need to control navigation.\n *\n * @returns Object with navigation functions and state\n */\nexport function useMultiStepNavigation(): {\n goToNext: () => Promise<void>;\n goToPrevious: () => void;\n goToStep: (stepIndex: number) => void;\n goToStepById: (stepId: string) => void;\n canGoNext: boolean;\n canGoBack: boolean;\n isFirstStep: boolean;\n isLastStep: boolean;\n currentStepIndex: number;\n currentStepId: string;\n} {\n const {\n goToNext,\n goToPrevious,\n goToStep,\n goToStepById,\n canGoNext,\n canGoBack,\n isFirstStep,\n isLastStep,\n currentStepIndex,\n currentStepId,\n } = useMultiStepContext();\n\n return {\n goToNext,\n goToPrevious,\n goToStep,\n goToStepById,\n canGoNext,\n canGoBack,\n isFirstStep,\n isLastStep,\n currentStepIndex,\n currentStepId,\n };\n}\n","'use client';\n\nimport { useState, useCallback, useMemo, useEffect } from 'react';\nimport type { Step, MultiStepContextValue, StepValidationResult } from './types';\n\n/**\n * Core hook for multi-step form logic\n *\n * Manages step navigation, data accumulation, and validation.\n * This is the engine that powers the MultiStepForm component.\n */\nexport function useMultiStep<TData = any>({\n steps,\n initialData = {},\n onStepChange,\n onDataChange,\n onComplete,\n persistToUrl = false,\n}: {\n steps: Step<TData>[];\n initialData?: Partial<TData>;\n onStepChange?: (stepId: string, stepIndex: number) => void;\n onDataChange?: (data: Partial<TData>) => void;\n onComplete?: (data: TData) => void | Promise<void>;\n persistToUrl?: boolean;\n}): MultiStepContextValue<TData> {\n // State\n const [data, setData] = useState<Partial<TData>>(initialData);\n const [currentStepIndex, setCurrentStepIndex] = useState(0);\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [isValidating, setIsValidating] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n // Filter steps based on conditions\n const visibleSteps = useMemo(() => {\n return steps.filter((step) => {\n if (!step.condition) return true;\n return step.condition(data);\n });\n }, [steps, data]);\n\n const currentStep = visibleSteps[currentStepIndex];\n const currentStepId = currentStep?.id || '';\n\n // Sync step to URL if enabled\n useEffect(() => {\n if (persistToUrl && currentStep) {\n const url = new URL(window.location.href);\n url.searchParams.set('step', currentStep.id);\n window.history.replaceState({}, '', url.toString());\n }\n }, [currentStepIndex, currentStep, persistToUrl]);\n\n // Read step from URL on mount\n useEffect(() => {\n if (persistToUrl) {\n const url = new URL(window.location.href);\n const stepId = url.searchParams.get('step');\n if (stepId) {\n const stepIndex = visibleSteps.findIndex((s) => s.id === stepId);\n if (stepIndex !== -1) {\n setCurrentStepIndex(stepIndex);\n }\n }\n }\n // Only run on mount - empty deps array is intentional\n }, []);\n\n // Notify on step change\n useEffect(() => {\n if (onStepChange && currentStep) {\n onStepChange(currentStep.id, currentStepIndex);\n }\n }, [currentStepIndex, currentStep, onStepChange]);\n\n // Update data\n const updateData = useCallback(\n (updates: Partial<TData>) => {\n setData((prev) => {\n const newData = { ...prev, ...updates };\n onDataChange?.(newData);\n return newData;\n });\n // Clear errors when data changes\n setErrors({});\n },\n [onDataChange]\n );\n\n // Validate current step\n const validateCurrentStep = useCallback(async (): Promise<boolean> => {\n if (!currentStep?.validate) return true;\n\n setIsValidating(true);\n setErrors({});\n\n try {\n const result: StepValidationResult = await currentStep.validate(data);\n\n if (result.valid) {\n return true;\n } else {\n setErrors(result.errors);\n return false;\n }\n } catch (error) {\n console.error('Step validation error:', error);\n setErrors({ _form: 'Validation failed. Please try again.' });\n return false;\n } finally {\n setIsValidating(false);\n }\n }, [currentStep, data]);\n\n // Navigate to next step\n const goToNext = useCallback(async () => {\n // Validate current step\n const isValid = await validateCurrentStep();\n if (!isValid) return;\n\n // Check if this is the last step\n if (currentStepIndex === visibleSteps.length - 1) {\n // Complete the form\n if (onComplete) {\n setIsSubmitting(true);\n try {\n await onComplete(data as TData);\n } catch (error) {\n console.error('Form submission error:', error);\n setErrors({ _form: 'Submission failed. Please try again.' });\n } finally {\n setIsSubmitting(false);\n }\n }\n return;\n }\n\n // Move to next step\n setCurrentStepIndex((prev) => Math.min(prev + 1, visibleSteps.length - 1));\n setErrors({});\n }, [currentStepIndex, visibleSteps.length, validateCurrentStep, onComplete, data]);\n\n // Navigate to previous step\n const goToPrevious = useCallback(() => {\n setCurrentStepIndex((prev) => Math.max(prev - 1, 0));\n setErrors({});\n }, []);\n\n // Navigate to specific step by index\n const goToStep = useCallback(\n (stepIndex: number) => {\n if (stepIndex >= 0 && stepIndex < visibleSteps.length) {\n setCurrentStepIndex(stepIndex);\n setErrors({});\n }\n },\n [visibleSteps.length]\n );\n\n // Navigate to specific step by ID\n const goToStepById = useCallback(\n (stepId: string) => {\n const stepIndex = visibleSteps.findIndex((s) => s.id === stepId);\n if (stepIndex !== -1) {\n goToStep(stepIndex);\n }\n },\n [visibleSteps, goToStep]\n );\n\n // Reset form\n const reset = useCallback(() => {\n setData(initialData);\n setCurrentStepIndex(0);\n setErrors({});\n setIsValidating(false);\n setIsSubmitting(false);\n }, [initialData]);\n\n // Computed properties\n const canGoNext = !isValidating && !isSubmitting;\n const canGoBack = currentStepIndex > 0 && !isValidating && !isSubmitting;\n const isFirstStep = currentStepIndex === 0;\n const isLastStep = currentStepIndex === visibleSteps.length - 1;\n\n return {\n currentStepIndex,\n currentStepId,\n visibleSteps,\n data,\n errors,\n isValidating,\n isSubmitting,\n goToNext,\n goToPrevious,\n goToStep,\n goToStepById,\n updateData,\n canGoNext,\n canGoBack,\n isFirstStep,\n isLastStep,\n reset,\n };\n}\n","/**\n * SuccessMessage Component\n *\n * Displays success message after successful appointment booking.\n */\n\nimport React from 'react';\n\ntype SuccessMessageProps = {\n message: string;\n className?: string;\n};\n\nexport const SuccessMessage: React.FC<SuccessMessageProps> = ({ message, className }) => {\n return (\n <div\n className={`alert alert-success text-sm ${className ?? ''}`}\n role=\"alert\"\n aria-live=\"polite\"\n >\n {message}\n </div>\n );\n};\n","/**\n * Hook to build multi-step booking flow\n */\n\nimport React, { useMemo } from 'react';\nimport type { Step } from '../components/multi-step/types';\nimport type { BookingFormConfig, Service } from './useBookingFormConfig';\nimport { ServiceSelectionStep } from '../components/booking/ServiceSelectionStep';\nimport { DateTimeSelectionStep } from '../components/booking/DateTimeSelectionStep';\nimport { DynamicFormFields } from '../components/multi-step/DynamicFormFields';\n\nexport type BookingFormData = {\n serviceId?: string;\n resourceId?: string;\n selectedDate?: string;\n selectedSlot?: string;\n [key: string]: any; // Dynamic form fields\n};\n\n/**\n * Build the array of steps for the booking flow\n *\n * Steps are conditionally included based on form configuration:\n * - Service selection: Only if multiple services available\n * - Date/time selection: Always included\n * - Custom fields: Only if form has fields defined\n */\nexport function useBookingSteps(\n siteId: string,\n formConfig: BookingFormConfig | null,\n services: Service[]\n): Step<BookingFormData>[] {\n return useMemo<Step<BookingFormData>[]>(() => {\n if (!formConfig) return [];\n\n const stepsArray: Step<BookingFormData>[] = [];\n\n // Determine the service ID to use\n // Priority: form settings > single available service\n const effectiveServiceId = formConfig.settings?.serviceId ||\n (services.length === 1 ? services[0].id : undefined);\n\n // Step 1: Service/Resource Selection (conditional)\n const needsServiceSelection =\n (!formConfig.settings?.serviceId && services.length > 1) ||\n (formConfig.settings?.serviceIds && formConfig.settings.serviceIds.length > 1);\n\n if (needsServiceSelection) {\n stepsArray.push({\n id: 'service-selection',\n title: 'Select Service',\n component: React.createElement(ServiceSelectionStep, { siteId, services }),\n condition: () => needsServiceSelection,\n validate: (data) => {\n if (!data.serviceId) {\n return { valid: false, errors: { _form: 'Please select a service' } };\n }\n return { valid: true };\n },\n });\n }\n\n // Step 2: Date/Time Selection\n // Pass the single service info to display when there's only one service\n const singleService = services.length === 1 ? services[0] : undefined;\n stepsArray.push({\n id: 'datetime-selection',\n title: 'Select Date & Time',\n component: React.createElement(DateTimeSelectionStep, {\n siteId,\n preSelectedServiceId: effectiveServiceId,\n preSelectedResourceId: formConfig.settings?.resourceId,\n singleService,\n }),\n validate: (data) => {\n if (!data.selectedSlot) {\n return { valid: false, errors: { _form: 'Please select a date and time' } };\n }\n return { valid: true };\n },\n });\n\n // Step 3: Custom Fields (if any)\n if (formConfig.schema?.fields && formConfig.schema.fields.length > 0) {\n stepsArray.push({\n id: 'custom-fields',\n title: 'Your Information',\n component: React.createElement(DynamicFormFields, { fields: formConfig.schema.fields }),\n validate: (data) => {\n const errors: Record<string, string> = {};\n\n for (const field of formConfig.schema!.fields) {\n if (field.required && !data[field.id]) {\n errors[field.id] = `${field.label} is required`;\n }\n }\n\n if (Object.keys(errors).length > 0) {\n return { valid: false, errors };\n }\n\n return { valid: true };\n },\n });\n }\n\n return stepsArray;\n }, [formConfig, services, siteId]);\n}\n","'use client';\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { getCmsApiUrl } from '../../utils/api-url';\n\nexport interface Service {\n id: string;\n title: string;\n description?: string;\n durationMinutes?: number;\n}\n\nexport interface Resource {\n id: string;\n displayName: string;\n title?: string;\n}\n\nexport interface ServiceResourceSelectorProps {\n siteId: string;\n services: Service[];\n preSelectedServiceId?: string;\n preSelectedResourceId?: string;\n onSelect: (selection: { serviceId: string; resourceId?: string }) => void;\n onBack?: () => void;\n heading?: string;\n description?: string;\n}\n\n/**\n * ServiceResourceSelector Component\n *\n * Handles Step 1 of the booking flow: service and resource selection.\n * Only shown when the booking form allows multiple services or when\n * resource selection is needed.\n *\n * Features:\n * - Service selection (if multiple services available)\n * - Resource selection (if multiple resources available for selected service)\n * - Auto-skips if only one option available\n * - Fetches resources dynamically when service is selected\n */\nexport function ServiceResourceSelector({\n siteId,\n services,\n preSelectedServiceId,\n preSelectedResourceId,\n onSelect,\n onBack,\n heading = 'Select Service',\n description = 'Choose the service you\\'d like to book',\n}: ServiceResourceSelectorProps): React.ReactElement {\n const [selectedServiceId, setSelectedServiceId] = useState<string | undefined>(\n preSelectedServiceId\n );\n const [selectedResourceId, setSelectedResourceId] = useState<string | undefined>(\n preSelectedResourceId\n );\n const [resources, setResources] = useState<Resource[]>([]);\n const [isLoadingResources, setIsLoadingResources] = useState(false);\n const [resourceError, setResourceError] = useState<string | null>(null);\n\n const showServiceSelect = !preSelectedServiceId && services.length > 1;\n const showResourceSelect = resources.length > 1 && !preSelectedResourceId;\n\n // Load resources when service is selected\n const handleServiceChange = useCallback(async (serviceId: string) => {\n setSelectedServiceId(serviceId);\n setSelectedResourceId(undefined);\n setResourceError(null);\n\n // Fetch resources for this service\n try {\n setIsLoadingResources(true);\n const apiUrl = getCmsApiUrl();\n const response = await fetch(\n `${apiUrl}/sites/${siteId}/bookings/resources/reference?serviceId=${serviceId}`\n );\n\n if (!response.ok) {\n throw new Error('Failed to load resources');\n }\n\n const data = await response.json();\n const loadedResources = data.options?.map((opt: any) => ({\n id: opt.id,\n displayName: opt.label,\n })) || [];\n\n setResources(loadedResources);\n } catch (err) {\n console.error('Failed to load resources:', err);\n setResourceError('Failed to load practitioners. Please try again.');\n setResources([]);\n } finally {\n setIsLoadingResources(false);\n }\n }, [siteId]);\n\n const handleContinue = () => {\n if (selectedServiceId) {\n onSelect({\n serviceId: selectedServiceId,\n resourceId: selectedResourceId === '__any__' ? undefined : selectedResourceId,\n });\n }\n };\n\n const canContinue = selectedServiceId && !isLoadingResources;\n\n // Auto-select if only one service\n useEffect(() => {\n if (services.length === 1 && !selectedServiceId) {\n handleServiceChange(services[0].id);\n }\n }, [services, selectedServiceId, handleServiceChange]);\n\n return (\n <div className=\"space-y-6 max-w-2xl mx-auto\">\n {/* Header */}\n <div>\n <h2 className=\"text-2xl font-bold\">{heading}</h2>\n {description && <p className=\"text-muted-foreground mt-2\">{description}</p>}\n </div>\n\n {/* Service Selection */}\n {showServiceSelect && (\n <div className=\"space-y-3\">\n <label className=\"text-sm font-medium\">Service</label>\n <div className=\"grid gap-3\">\n {services.map((service) => (\n <button\n key={service.id}\n type=\"button\"\n onClick={() => handleServiceChange(service.id)}\n className={`\n relative p-4 rounded-lg border-2 text-left transition-all\n ${\n selectedServiceId === service.id\n ? 'border-primary bg-primary/5'\n : 'border-border hover:border-primary/50'\n }\n `}\n >\n <div className=\"flex items-start justify-between\">\n <div>\n <div className=\"font-medium\">{service.title}</div>\n {service.description && (\n <div className=\"text-sm text-muted-foreground mt-1\">\n {service.description}\n </div>\n )}\n {service.durationMinutes && (\n <div className=\"text-sm text-muted-foreground mt-1\">\n {service.durationMinutes} minutes\n </div>\n )}\n </div>\n {selectedServiceId === service.id && (\n <div className=\"flex-shrink-0 w-5 h-5 rounded-full bg-primary flex items-center justify-center\">\n <svg\n className=\"w-3 h-3 text-primary-foreground\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path d=\"M5 13l4 4L19 7\"></path>\n </svg>\n </div>\n )}\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Resource Selection */}\n {showResourceSelect && selectedServiceId && !isLoadingResources && (\n <div className=\"space-y-3\">\n <label className=\"text-sm font-medium\">Practitioner (Optional)</label>\n <p className=\"text-sm text-muted-foreground\">\n Choose a specific practitioner or select \"Any Available\"\n </p>\n <div className=\"grid gap-3\">\n <button\n type=\"button\"\n onClick={() => setSelectedResourceId('__any__')}\n className={`\n relative p-4 rounded-lg border-2 text-left transition-all\n ${\n selectedResourceId === '__any__'\n ? 'border-primary bg-primary/5'\n : 'border-border hover:border-primary/50'\n }\n `}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"font-medium\">Any Available</div>\n {selectedResourceId === '__any__' && (\n <div className=\"flex-shrink-0 w-5 h-5 rounded-full bg-primary flex items-center justify-center\">\n <svg\n className=\"w-3 h-3 text-primary-foreground\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path d=\"M5 13l4 4L19 7\"></path>\n </svg>\n </div>\n )}\n </div>\n </button>\n {resources.map((resource) => (\n <button\n key={resource.id}\n type=\"button\"\n onClick={() => setSelectedResourceId(resource.id)}\n className={`\n relative p-4 rounded-lg border-2 text-left transition-all\n ${\n selectedResourceId === resource.id\n ? 'border-primary bg-primary/5'\n : 'border-border hover:border-primary/50'\n }\n `}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"font-medium\">{resource.displayName}</div>\n {selectedResourceId === resource.id && (\n <div className=\"flex-shrink-0 w-5 h-5 rounded-full bg-primary flex items-center justify-center\">\n <svg\n className=\"w-3 h-3 text-primary-foreground\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path d=\"M5 13l4 4L19 7\"></path>\n </svg>\n </div>\n )}\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Loading State */}\n {isLoadingResources && (\n <div className=\"text-center py-8\">\n <div className=\"inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-primary\"></div>\n <p className=\"text-sm text-muted-foreground mt-2\">Loading practitioners...</p>\n </div>\n )}\n\n {/* Error State */}\n {resourceError && (\n <div className=\"alert alert-error text-sm\">\n {resourceError}\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex gap-3\">\n {onBack && (\n <button\n type=\"button\"\n onClick={onBack}\n className=\"px-6 py-2 rounded-lg border border-border hover:bg-muted transition-colors\"\n >\n Back\n </button>\n )}\n <button\n type=\"button\"\n onClick={handleContinue}\n disabled={!canContinue}\n className=\"flex-1 px-6 py-2 rounded-lg bg-primary text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n Continue to Date Selection\n </button>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport { useMultiStepData } from '../multi-step/MultiStepContext';\nimport { ServiceResourceSelector } from './ServiceResourceSelector';\nimport type { Service } from '../../hooks/useBookingFormConfig';\n\ninterface ServiceSelectionStepProps {\n siteId: string;\n services: Service[];\n}\n\n/**\n * ServiceSelectionStep Component\n *\n * Step 1: Service and optionally resource selection\n * Uses multi-step context to update booking data\n */\nexport function ServiceSelectionStep({\n siteId,\n services,\n}: ServiceSelectionStepProps): React.ReactElement {\n const { updateData } = useMultiStepData();\n\n return (\n <ServiceResourceSelector\n siteId={siteId}\n services={services}\n onSelect={({ serviceId, resourceId }) => {\n updateData({ serviceId, resourceId });\n }}\n />\n );\n}\n","'use client';\n\nimport React, { useEffect, useMemo } from 'react';\nimport { useMultiStepData } from '../multi-step/MultiStepContext';\nimport { DatePicker } from './DatePicker';\nimport { TimeSlotSelector } from './TimeSlotSelector';\nimport { useAvailableSlots } from '../../hooks/useAvailableSlots';\nimport { useAvailableDates } from '../../hooks/useAvailableDates';\nimport type { BookingFormData } from '../../hooks/useBookingSteps';\nimport type { Service } from '../../hooks/useBookingFormConfig';\n\ninterface DateTimeSelectionStepProps {\n siteId: string;\n preSelectedServiceId?: string;\n preSelectedResourceId?: string;\n /** When there's only one service, pass it here to display info and auto-select */\n singleService?: Service;\n}\n\n/**\n * DateTimeSelectionStep Component\n *\n * Step 2: Date and time slot selection\n * Integrates with multi-step context and fetches available slots.\n * Prefetches available dates to filter the date picker.\n */\nexport function DateTimeSelectionStep({\n siteId,\n preSelectedServiceId,\n preSelectedResourceId,\n singleService,\n}: DateTimeSelectionStepProps): React.ReactElement {\n const { data, updateData } = useMultiStepData<BookingFormData>();\n\n // Get serviceId/resourceId from context if available, otherwise use preselected\n const serviceId = data.serviceId || preSelectedServiceId;\n const resourceId = data.resourceId || preSelectedResourceId;\n const selectedDate = data.selectedDate || '';\n const selectedSlot = data.selectedSlot || '';\n\n // Auto-populate serviceId in form data if we have a preselected service\n // This ensures the submission has the serviceId even when service selection step is skipped\n useEffect(() => {\n if (preSelectedServiceId && !data.serviceId) {\n updateData({ serviceId: preSelectedServiceId });\n }\n }, [preSelectedServiceId, data.serviceId, updateData]);\n\n // Prefetch available dates for filtering the date picker\n const {\n availableDates,\n isLoading: isLoadingDates,\n error: datesError,\n hasMore,\n loadMore,\n } = useAvailableDates({\n siteId,\n serviceId,\n resourceId,\n timezone: 'UTC',\n initialDays: 30,\n });\n\n // Fetch slots for the selected date\n const { slots, isLoading: isLoadingSlots, error: slotsError } = useAvailableSlots({\n siteId,\n serviceId,\n resourceId,\n selectedDate,\n timezone: 'UTC',\n });\n\n // Convert available dates Set to sorted array for DatePicker\n const filteredDateOptions = useMemo(() => {\n if (isLoadingDates || availableDates.size === 0) {\n return []; // Will show loading or empty state\n }\n return [...availableDates].sort();\n }, [availableDates, isLoadingDates]);\n\n const handleDateChange = (date: string) => {\n updateData({ selectedDate: date, selectedSlot: '' }); // Reset slot when date changes\n };\n\n const handleSlotChange = (slot: string) => {\n updateData({ selectedSlot: slot });\n };\n\n // Combine errors for display\n const error = datesError || slotsError;\n\n return (\n <div className=\"space-y-6\">\n {/* Show service info when there's only one service */}\n {singleService && (\n <div className=\"rounded-lg border border-border bg-muted/30 p-4\">\n <h3 className=\"font-medium text-foreground\">{singleService.title}</h3>\n {singleService.description && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{singleService.description}</p>\n )}\n {singleService.durationMinutes && (\n <p className=\"mt-1 text-sm text-muted-foreground\">\n Duration: {singleService.durationMinutes} minutes\n </p>\n )}\n </div>\n )}\n\n {error && (\n <div className=\"alert alert-error text-sm\">\n {error}\n </div>\n )}\n\n <DatePicker\n value={selectedDate}\n onChange={handleDateChange}\n dateOptions={filteredDateOptions}\n isLoading={isLoadingDates}\n isEmpty={!isLoadingDates && filteredDateOptions.length === 0}\n hasMore={hasMore}\n onLoadMore={loadMore}\n />\n\n {selectedDate && (\n <TimeSlotSelector\n value={selectedSlot}\n onChange={handleSlotChange}\n slots={slots}\n isLoading={isLoadingSlots}\n />\n )}\n </div>\n );\n}\n","/**\n * Date and time formatting utilities for blocks\n */\n\n/**\n * Maximum number of days to show in booking date picker.\n * Supports 90+ day visibility with progressive loading.\n */\nexport const BOOKING_DATE_RANGE_DAYS = 90;\n\n/**\n * Number of days to fetch per chunk when loading available dates.\n * Used by useAvailableDates hook for pagination.\n */\nexport const BOOKING_FETCH_CHUNK_DAYS = 30;\n\n/**\n * Generates an array of ISO date strings (YYYY-MM-DD) starting from today\n * @param days - Number of days to generate\n * @returns Array of date strings\n */\nexport function generateDateRange(days: number): string[] {\n const dates: string[] = [];\n const today = new Date();\n\n for (let i = 0; i < days; i++) {\n const date = new Date(today);\n date.setDate(date.getDate() + i);\n dates.push(date.toISOString().split('T')[0]);\n }\n\n return dates;\n}\n\n/**\n * Formats an ISO date string (YYYY-MM-DD) to a human-readable format\n * @param dateStr - ISO date string (e.g., \"2025-03-15\")\n * @returns Formatted date (e.g., \"Friday, March 15, 2025\")\n */\nexport function formatDate(dateStr: string): string {\n const date = new Date(dateStr + 'T00:00:00');\n return date.toLocaleDateString(undefined, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n}\n\n/**\n * Formats an ISO datetime string to a human-readable time\n * @param isoString - ISO datetime string (e.g., \"2025-03-15T14:30:00Z\")\n * @returns Formatted time (e.g., \"2:30 PM EST\")\n */\nexport function formatTime(isoString: string): string {\n const date = new Date(isoString);\n return date.toLocaleTimeString(undefined, {\n hour: 'numeric',\n minute: '2-digit',\n timeZoneName: 'short',\n });\n}\n","/**\n * DatePicker Component\n *\n * Displays a dropdown for selecting an appointment date from available dates.\n * Supports loading states, empty states, and progressive loading.\n */\n\nimport React from 'react';\nimport { formatDate } from '../../../../utils/date-formatting';\n\ntype DatePickerProps = {\n value: string;\n onChange: (date: string) => void;\n dateOptions: string[];\n required?: boolean;\n isLoading?: boolean;\n isEmpty?: boolean;\n hasMore?: boolean;\n onLoadMore?: () => void;\n};\n\nexport const DatePicker: React.FC<DatePickerProps> = ({\n value,\n onChange,\n dateOptions,\n required = true,\n isLoading = false,\n isEmpty = false,\n hasMore = false,\n onLoadMore,\n}) => {\n // Loading state - show skeleton\n if (isLoading) {\n return (\n <div className=\"space-y-2\">\n <label className=\"form-label\">\n Select Date{required && <span className=\"required-marker\">*</span>}\n </label>\n <div className=\"h-10 w-full animate-pulse rounded-control card-surface\" />\n <p className=\"text-xs status-muted\">Loading available dates...</p>\n </div>\n );\n }\n\n // Empty state - no dates available\n if (isEmpty) {\n return (\n <div className=\"space-y-2\">\n <label className=\"form-label\">\n Select Date{required && <span className=\"required-marker\">*</span>}\n </label>\n <div className=\"alert alert-warning\">\n <p className=\"text-sm\">\n No available dates in this period.\n {hasMore && onLoadMore && (\n <button\n type=\"button\"\n onClick={onLoadMore}\n className=\"ml-2 underline hover:no-underline\"\n >\n Check later dates\n </button>\n )}\n </p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-2\">\n <label htmlFor=\"booking-date\" className=\"form-label\">\n Select Date{required && <span className=\"required-marker\">*</span>}\n </label>\n <select\n id=\"booking-date\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n required={required}\n className=\"form-select\"\n >\n <option value=\"\">Choose a date...</option>\n {dateOptions.map((date: string) => (\n <option key={date} value={date}>\n {formatDate(date)}\n </option>\n ))}\n </select>\n {hasMore && onLoadMore && (\n <button\n type=\"button\"\n onClick={onLoadMore}\n className=\"button-link text-sm\"\n >\n Load more dates →\n </button>\n )}\n </div>\n );\n};\n","/**\n * TimeSlotSelector Component\n *\n * Displays available time slots for the selected date with loading and empty states.\n */\n\nimport React from 'react';\nimport { formatTime } from '../../../../utils/date-formatting';\nimport type { TimeSlot } from '../../hooks/useAvailableSlots';\n\ntype TimeSlotSelectorProps = {\n value: string;\n onChange: (slotStartTime: string) => void;\n slots: TimeSlot[];\n isLoading: boolean;\n required?: boolean;\n};\n\nexport const TimeSlotSelector: React.FC<TimeSlotSelectorProps> = ({\n value,\n onChange,\n slots,\n isLoading,\n required = true,\n}) => {\n return (\n <div className=\"space-y-2\">\n <label htmlFor=\"booking-slot\" className=\"form-label\">\n Select Time{required && <span className=\"required-marker\">*</span>}\n </label>\n {isLoading ? (\n <div className=\"alert alert-info text-sm text-center\">\n Loading available times...\n </div>\n ) : slots.length === 0 ? (\n <div className=\"alert text-sm text-center status-muted\">\n No available times for this date\n </div>\n ) : (\n <select\n id=\"booking-slot\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n required={required}\n className=\"form-select\"\n >\n <option value=\"\">Choose a time...</option>\n {slots.map((slot) => (\n <option key={slot.startAt} value={slot.startAt}>\n {formatTime(slot.startAt)}\n </option>\n ))}\n </select>\n )}\n </div>\n );\n};\n","/**\n * Custom hook for fetching available appointment slots\n */\n\nimport { useState, useEffect } from 'react';\nimport { getCmsApiUrl } from '../utils/api-url';\n\nexport type TimeSlot = {\n startAt: string;\n endAt: string;\n resourceId: string;\n};\n\ntype UseAvailableSlotsOptions = {\n siteId: string;\n serviceId: string | undefined;\n resourceId: string | undefined;\n selectedDate: string;\n timezone: string;\n};\n\ntype UseAvailableSlotsResult = {\n slots: TimeSlot[];\n isLoading: boolean;\n error: string | null;\n};\n\n/**\n * Fetches available appointment slots for a given date\n *\n * Automatically refetches when dependencies change.\n * Returns empty slots array until a date is selected.\n */\nexport function useAvailableSlots({\n siteId,\n serviceId,\n resourceId,\n selectedDate,\n timezone,\n}: UseAvailableSlotsOptions): UseAvailableSlotsResult {\n const [slots, setSlots] = useState<TimeSlot[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n // Don't fetch if required params are missing\n if (!selectedDate || !serviceId) {\n setSlots([]);\n return;\n }\n\n const fetchSlots = async () => {\n setIsLoading(true);\n setError(null);\n setSlots([]);\n\n try {\n const params = new URLSearchParams({\n siteId,\n serviceId,\n startDate: selectedDate,\n endDate: selectedDate,\n timezone,\n });\n\n if (resourceId) {\n params.append('resourceId', resourceId);\n }\n\n const apiUrl = getCmsApiUrl();\n // Use public endpoint - no authentication required\n const response = await fetch(`${apiUrl}/public/bookings/availability/slots?${params}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.error || 'Failed to load available times');\n }\n\n const data = await response.json();\n setSlots(data.slots);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load available times');\n } finally {\n setIsLoading(false);\n }\n };\n\n fetchSlots();\n }, [selectedDate, serviceId, resourceId, timezone, siteId]);\n\n return { slots, isLoading, error };\n}\n","/**\n * Custom hook for fetching dates with available appointment slots\n *\n * Prefetches available dates for a date range with support for progressive loading.\n * Returns a Set for O(1) lookup when filtering DatePicker options.\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport { getCmsApiUrl } from '../utils/api-url';\nimport { BOOKING_FETCH_CHUNK_DAYS } from '../../../utils/date-formatting';\n\nexport type UseAvailableDatesOptions = {\n siteId: string;\n serviceId: string | undefined;\n resourceId?: string;\n timezone?: string;\n initialDays?: number; // Default: 30\n};\n\nexport type UseAvailableDatesResult = {\n availableDates: Set<string>; // O(1) lookup by date (YYYY-MM-DD)\n isLoading: boolean;\n error: string | null;\n hasMore: boolean;\n loadMore: () => void;\n loadedRange: { start: string; end: string } | null;\n};\n\n/**\n * Fetches dates with availability for a service\n *\n * On mount, fetches the first `initialDays` days.\n * Call `loadMore()` to fetch the next chunk of dates.\n * Uses requestId pattern to handle race conditions.\n */\nexport function useAvailableDates({\n siteId,\n serviceId,\n resourceId,\n timezone = 'UTC',\n initialDays = 30,\n}: UseAvailableDatesOptions): UseAvailableDatesResult {\n const [availableDates, setAvailableDates] = useState<Set<string>>(new Set());\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [hasMore, setHasMore] = useState(false);\n const [loadedRange, setLoadedRange] = useState<{ start: string; end: string } | null>(null);\n\n const nextStartDateRef = useRef<string | null>(null);\n const requestIdRef = useRef(0);\n\n const fetchDates = useCallback(\n async (startDate: string, endDate: string, append = false) => {\n if (!serviceId) {\n console.log('[useAvailableDates] No serviceId, skipping fetch');\n return;\n }\n\n const requestId = ++requestIdRef.current;\n setIsLoading(true);\n setError(null);\n\n try {\n const apiUrl = getCmsApiUrl();\n const params = new URLSearchParams({\n siteId,\n serviceId,\n startDate,\n endDate,\n timezone,\n });\n if (resourceId) {\n params.append('resourceId', resourceId);\n }\n\n const url = `${apiUrl}/public/bookings/availability/dates?${params}`;\n console.log('[useAvailableDates] Fetching:', url);\n\n const res = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n console.log('[useAvailableDates] Response status:', res.status);\n\n // Check for stale request\n if (requestId !== requestIdRef.current) return;\n\n if (!res.ok) {\n const errorData = await res.json().catch(() => ({}));\n console.log('[useAvailableDates] Error response:', errorData);\n throw new Error(errorData.error || 'Failed to fetch available dates');\n }\n\n const data = await res.json();\n console.log('[useAvailableDates] Received dates:', data);\n\n setAvailableDates((prev) => {\n const newSet = append ? new Set(prev) : new Set<string>();\n (data.dates as string[]).forEach((d) => newSet.add(d));\n console.log('[useAvailableDates] Updated availableDates Set size:', newSet.size);\n return newSet;\n });\n\n setHasMore(data.hasMore);\n nextStartDateRef.current = data.nextStartDate || null;\n setLoadedRange((prev) => ({\n start: append && prev ? prev.start : data.startDate,\n end: data.endDate,\n }));\n } catch (err) {\n // Check for stale request\n if (requestId !== requestIdRef.current) return;\n setError(err instanceof Error ? err.message : 'Failed to load available dates');\n } finally {\n // Check for stale request\n if (requestId === requestIdRef.current) {\n setIsLoading(false);\n }\n }\n },\n [siteId, serviceId, resourceId, timezone]\n );\n\n // Initial fetch when serviceId becomes available\n useEffect(() => {\n if (!serviceId) {\n // Reset state when serviceId is cleared\n setAvailableDates(new Set());\n setLoadedRange(null);\n setHasMore(false);\n return;\n }\n\n const today = new Date().toISOString().split('T')[0];\n const endDate = new Date(Date.now() + initialDays * 24 * 60 * 60 * 1000)\n .toISOString()\n .split('T')[0];\n\n fetchDates(today, endDate, false);\n }, [serviceId, fetchDates, initialDays]);\n\n const loadMore = useCallback(() => {\n if (!nextStartDateRef.current || isLoading) return;\n\n const start = nextStartDateRef.current;\n const msPerDay = 24 * 60 * 60 * 1000;\n const end = new Date(new Date(start).getTime() + BOOKING_FETCH_CHUNK_DAYS * msPerDay)\n .toISOString()\n .split('T')[0];\n\n fetchDates(start, end, true);\n }, [fetchDates, isLoading]);\n\n return {\n availableDates,\n isLoading,\n error,\n hasMore,\n loadMore,\n loadedRange,\n };\n}\n","'use client';\n\nimport React, { useState, useCallback } from 'react';\nimport { useMultiStepData } from './MultiStepContext';\n\n/**\n * Form field option\n */\nexport interface FormFieldOption {\n value: string;\n label: string;\n}\n\n/**\n * Form field definition (matches packages/db/src/schemas/forms.ts)\n */\nexport interface FormField {\n id: string;\n label: string;\n type:\n | 'text'\n | 'email'\n | 'textarea'\n | 'select'\n | 'radio'\n | 'checkbox'\n | 'consent'\n | 'tel'\n | 'url'\n | 'number'\n | 'date'\n | 'time';\n required?: boolean;\n placeholder?: string;\n helpText?: string;\n options?: FormFieldOption[];\n multiple?: boolean;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n min?: number;\n max?: number;\n}\n\n/**\n * DynamicFormFields Component Props\n */\nexport interface DynamicFormFieldsProps {\n fields: FormField[];\n showLabels?: boolean;\n className?: string;\n}\n\n/**\n * DynamicFormFields Component\n *\n * Renders form fields dynamically based on FormField definitions.\n * Integrates with multi-step context for data management.\n *\n * Features:\n * - Supports all field types from form schema\n * - Client-side validation\n * - Accessible form controls\n * - Integrates with multi-step context\n *\n * Usage:\n * ```tsx\n * <DynamicFormFields\n * fields={formSchema.fields}\n * showLabels={true}\n * />\n * ```\n */\nexport function DynamicFormFields({\n fields,\n showLabels = true,\n className = '',\n}: DynamicFormFieldsProps): React.ReactElement {\n const { data, updateData } = useMultiStepData<Record<string, any>>();\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n\n const handleChange = useCallback(\n (fieldId: string, value: any) => {\n updateData({ [fieldId]: value });\n },\n [updateData]\n );\n\n const handleBlur = useCallback((fieldId: string) => {\n setTouched((prev) => ({ ...prev, [fieldId]: true }));\n }, []);\n\n const getFieldError = useCallback(\n (field: FormField): string | null => {\n const value = data[field.id];\n const isTouched = touched[field.id];\n\n if (!isTouched) return null;\n\n // Required validation\n if (field.required && !value) {\n return `${field.label} is required`;\n }\n\n // Type-specific validation\n if (value) {\n switch (field.type) {\n case 'email':\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n return 'Please enter a valid email address';\n }\n break;\n case 'url':\n try {\n new URL(value);\n } catch {\n return 'Please enter a valid URL';\n }\n break;\n case 'tel':\n if (!/^[+\\d\\s\\-()]+$/.test(value)) {\n return 'Please enter a valid phone number';\n }\n break;\n case 'number':\n const num = Number(value);\n if (isNaN(num)) {\n return 'Please enter a valid number';\n }\n if (field.min !== undefined && num < field.min) {\n return `Value must be at least ${field.min}`;\n }\n if (field.max !== undefined && num > field.max) {\n return `Value must be at most ${field.max}`;\n }\n break;\n }\n\n // Length validation\n if (typeof value === 'string') {\n if (field.minLength && value.length < field.minLength) {\n return `Must be at least ${field.minLength} characters`;\n }\n if (field.maxLength && value.length > field.maxLength) {\n return `Must be at most ${field.maxLength} characters`;\n }\n }\n\n // Pattern validation\n if (field.pattern && typeof value === 'string') {\n const regex = new RegExp(field.pattern);\n if (!regex.test(value)) {\n return 'Please match the required format';\n }\n }\n }\n\n return null;\n },\n [data, touched]\n );\n\n return (\n <div className={`space-y-6 ${className}`}>\n {fields.map((field) => {\n const error = getFieldError(field);\n const value = data[field.id] ?? '';\n\n return (\n <div key={field.id} className=\"space-y-2\">\n {showLabels && (\n <label htmlFor={field.id} className=\"form-label\">\n {field.label}\n {field.required && <span className=\"required-marker\">*</span>}\n </label>\n )}\n\n {field.helpText && (\n <p className=\"text-sm status-muted\">{field.helpText}</p>\n )}\n\n <FieldInput\n field={field}\n value={value}\n onChange={(val) => handleChange(field.id, val)}\n onBlur={() => handleBlur(field.id)}\n error={error}\n />\n\n {error && <p className=\"text-sm status-error\">{error}</p>}\n </div>\n );\n })}\n </div>\n );\n}\n\n/**\n * FieldInput Component\n *\n * Renders the appropriate input component based on field type\n */\nfunction FieldInput({\n field,\n value,\n onChange,\n onBlur,\n error,\n}: {\n field: FormField;\n value: any;\n onChange: (value: any) => void;\n onBlur: () => void;\n error: string | null;\n}) {\n // Use generated form classes from theme\n // Error state is handled via aria-invalid attribute in the generated CSS\n const inputClass = 'form-input';\n const textareaClass = 'form-textarea';\n const selectClass = 'form-select';\n const checkboxClass = 'form-checkbox';\n const radioClass = 'form-radio';\n\n switch (field.type) {\n case 'textarea':\n return (\n <textarea\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n placeholder={field.placeholder}\n required={field.required}\n minLength={field.minLength}\n maxLength={field.maxLength}\n rows={4}\n aria-invalid={error ? 'true' : undefined}\n className={textareaClass}\n />\n );\n\n case 'select':\n if (field.multiple) {\n return (\n <select\n id={field.id}\n name={field.id}\n value={Array.isArray(value) ? value : []}\n onChange={(e) => {\n const selected = Array.from(e.target.selectedOptions, (opt) => opt.value);\n onChange(selected);\n }}\n onBlur={onBlur}\n required={field.required}\n multiple\n aria-invalid={error ? 'true' : undefined}\n className={`${selectClass} h-32`}\n >\n {field.options?.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n );\n }\n\n return (\n <select\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n required={field.required}\n aria-invalid={error ? 'true' : undefined}\n className={selectClass}\n >\n <option value=\"\">Select an option...</option>\n {field.options?.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n );\n\n case 'radio':\n return (\n <div className=\"space-y-2\">\n {field.options?.map((opt) => (\n <label key={opt.value} className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name={field.id}\n value={opt.value}\n checked={value === opt.value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n required={field.required}\n className={radioClass}\n />\n <span className=\"text-sm\">{opt.label}</span>\n </label>\n ))}\n </div>\n );\n\n case 'checkbox':\n if (field.options && field.options.length > 1) {\n // Multiple checkboxes\n const checkedValues = Array.isArray(value) ? value : [];\n return (\n <div className=\"space-y-2\">\n {field.options.map((opt) => (\n <label key={opt.value} className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n name={field.id}\n value={opt.value}\n checked={checkedValues.includes(opt.value)}\n onChange={(e) => {\n const newValues = e.target.checked\n ? [...checkedValues, opt.value]\n : checkedValues.filter((v) => v !== opt.value);\n onChange(newValues);\n }}\n onBlur={onBlur}\n className={checkboxClass}\n />\n <span className=\"text-sm\">{opt.label}</span>\n </label>\n ))}\n </div>\n );\n }\n\n // Single checkbox\n return (\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n id={field.id}\n name={field.id}\n checked={!!value}\n onChange={(e) => onChange(e.target.checked)}\n onBlur={onBlur}\n required={field.required}\n className={checkboxClass}\n />\n <span className=\"text-sm\">{field.placeholder || field.label}</span>\n </label>\n );\n\n case 'consent':\n return (\n <label className=\"flex items-start gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n id={field.id}\n name={field.id}\n checked={!!value}\n onChange={(e) => onChange(e.target.checked)}\n onBlur={onBlur}\n required={field.required}\n className={`${checkboxClass} mt-0.5`}\n />\n <span className=\"text-sm\">{field.placeholder || field.label}</span>\n </label>\n );\n\n case 'number':\n return (\n <input\n type=\"number\"\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n placeholder={field.placeholder}\n required={field.required}\n min={field.min}\n max={field.max}\n aria-invalid={error ? 'true' : undefined}\n className={inputClass}\n />\n );\n\n case 'date':\n return (\n <input\n type=\"date\"\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n required={field.required}\n min={field.min ? String(field.min) : undefined}\n max={field.max ? String(field.max) : undefined}\n aria-invalid={error ? 'true' : undefined}\n className={inputClass}\n />\n );\n\n case 'time':\n return (\n <input\n type=\"time\"\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n required={field.required}\n aria-invalid={error ? 'true' : undefined}\n className={inputClass}\n />\n );\n\n // text, email, tel, url\n default:\n return (\n <input\n type={field.type}\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n placeholder={field.placeholder}\n required={field.required}\n minLength={field.minLength}\n maxLength={field.maxLength}\n pattern={field.pattern}\n aria-invalid={error ? 'true' : undefined}\n className={inputClass}\n />\n );\n }\n}\n","/**\n * Custom hook for submitting appointment bookings\n */\n\nimport { useState } from 'react';\nimport { getCmsApiUrl } from '../utils/api-url';\n\nexport type BookingSubmissionData = {\n formId: string; // NEW - references the booking form\n serviceId: string;\n resourceId?: string; // Optional - may be undefined if \"any available\"\n startAt: string;\n endAt: string;\n customFields: Record<string, any>; // NEW - dynamic fields from form schema\n timezone: string;\n};\n\ntype UseBookingSubmissionResult = {\n submit: (data: BookingSubmissionData) => Promise<void>;\n isSubmitting: boolean;\n error: string | null;\n isSuccess: boolean;\n};\n\n/**\n * Hook for submitting appointment bookings\n *\n * Handles API call, loading state, and error handling.\n * Returns isSuccess=true after successful submission.\n */\nexport function useBookingSubmission(siteId: string): UseBookingSubmissionResult {\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [isSuccess, setIsSuccess] = useState(false);\n\n const submit = async (data: BookingSubmissionData) => {\n setIsSubmitting(true);\n setError(null);\n\n try {\n const apiUrl = getCmsApiUrl();\n // Use public endpoint - no authentication required\n const response = await fetch(`${apiUrl}/public/bookings/appointments`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n formId: data.formId,\n serviceId: data.serviceId,\n resourceId: data.resourceId || null,\n startAt: data.startAt,\n endAt: data.endAt,\n customFields: data.customFields,\n timezone: data.timezone,\n }),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.error || 'Failed to book appointment');\n }\n\n setIsSuccess(true);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to book appointment');\n throw err; // Re-throw so caller can handle if needed\n } finally {\n setIsSubmitting(false);\n }\n };\n\n return { submit, isSubmitting, error, isSuccess };\n}\n","\"use client\"\n\nimport React, { useState, useMemo } from 'react';\nimport type { PublicEvent } from '../../blocks/events/shared/types';\n\ntype CalendarGridProps = {\n events?: PublicEvent[] | null;\n /** Calendar view mode: month or week */\n calendarView?: 'month' | 'week';\n /** First day of the week: sunday (0) or monday (1) */\n startOfWeek?: 'sunday' | 'monday';\n /** Button variant from theme */\n buttonVariant?: 'primary' | 'secondary' | 'outline' | 'link';\n /** Base path for event URLs */\n basePath?: string;\n /** Message when no events */\n emptyMessage?: string;\n className?: string;\n};\n\n/** Day names starting from Sunday */\nconst DAY_NAMES = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n/** Month names */\nconst MONTH_NAMES = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n];\n\n/**\n * Get calendar days for a month view\n * Returns array of Date objects including padding days from prev/next months\n */\nfunction getMonthCalendarDays(year: number, month: number, startOfWeek: 'sunday' | 'monday'): Date[] {\n const firstDayOfMonth = new Date(year, month, 1);\n const lastDayOfMonth = new Date(year, month + 1, 0);\n\n // Get the day of week for the first day (0 = Sunday, 1 = Monday, etc.)\n let startOffset = firstDayOfMonth.getDay();\n if (startOfWeek === 'monday') {\n startOffset = startOffset === 0 ? 6 : startOffset - 1;\n }\n\n const days: Date[] = [];\n\n // Add days from previous month\n for (let i = startOffset - 1; i >= 0; i--) {\n const date = new Date(year, month, -i);\n days.push(date);\n }\n\n // Add days of current month\n for (let day = 1; day <= lastDayOfMonth.getDate(); day++) {\n days.push(new Date(year, month, day));\n }\n\n // Add days from next month to complete the grid (always show 6 rows = 42 days)\n while (days.length < 42) {\n const nextDay = days.length - startOffset - lastDayOfMonth.getDate() + 1;\n days.push(new Date(year, month + 1, nextDay));\n }\n\n return days;\n}\n\n/**\n * Get calendar days for a week view\n */\nfunction getWeekCalendarDays(baseDate: Date, startOfWeek: 'sunday' | 'monday'): Date[] {\n const days: Date[] = [];\n\n // Find the start of the week\n const dayOfWeek = baseDate.getDay();\n const daysToStart = startOfWeek === 'monday'\n ? (dayOfWeek === 0 ? 6 : dayOfWeek - 1)\n : dayOfWeek;\n\n const weekStart = new Date(baseDate);\n weekStart.setDate(baseDate.getDate() - daysToStart);\n\n // Add 7 days\n for (let i = 0; i < 7; i++) {\n const date = new Date(weekStart);\n date.setDate(weekStart.getDate() + i);\n days.push(date);\n }\n\n return days;\n}\n\n/**\n * Group events by date (YYYY-MM-DD)\n */\nfunction groupEventsByDate(events: PublicEvent[]): Map<string, PublicEvent[]> {\n const map = new Map<string, PublicEvent[]>();\n\n for (const event of events) {\n const dateKey = event.startsAt.split('T')[0];\n const existing = map.get(dateKey) || [];\n existing.push(event);\n map.set(dateKey, existing);\n }\n\n return map;\n}\n\n/**\n * Format a date as YYYY-MM-DD\n */\nfunction formatDateKey(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\n/**\n * Build event URL\n */\nfunction buildEventUrl(basePath: string, slug: string, startsAt: string): string {\n const date = startsAt.split('T')[0];\n const normalizedPath = basePath.startsWith('/') ? basePath : `/${basePath}`;\n const cleanPath = normalizedPath.endsWith('/') ? normalizedPath.slice(0, -1) : normalizedPath;\n return `${cleanPath}/${slug}/${date}`;\n}\n\n/**\n * Format time for display\n */\nfunction formatTime(isoString: string): string {\n const date = new Date(isoString);\n return date.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n });\n}\n\n/**\n * Check if a date is today\n */\nfunction isToday(date: Date): boolean {\n const today = new Date();\n return date.getDate() === today.getDate() &&\n date.getMonth() === today.getMonth() &&\n date.getFullYear() === today.getFullYear();\n}\n\n/**\n * Check if date is in the current month being viewed\n */\nfunction isCurrentMonth(date: Date, viewMonth: number): boolean {\n return date.getMonth() === viewMonth;\n}\n\n/**\n * CalendarDayCell - Renders a single day in the calendar\n */\nconst CalendarDayCell: React.FC<{\n date: Date;\n events: PublicEvent[];\n isCurrentMonth: boolean;\n basePath: string;\n}> = ({ date, events, isCurrentMonth, basePath }) => {\n const today = isToday(date);\n\n return (\n <div\n className={`\n calendar-day min-h-[100px] border-b border-r border-current/10 p-1\n ${!isCurrentMonth ? 'opacity-40' : ''}\n ${today ? 'bg-current/5' : ''}\n `}\n >\n {/* Day number */}\n <div className={`\n text-sm font-medium mb-1 px-1\n ${today ? 'text-current font-bold' : 'opacity-70'}\n `}>\n {date.getDate()}\n </div>\n\n {/* Events for this day */}\n <div className=\"space-y-1\">\n {events.slice(0, 3).map((event) => (\n <a\n key={event.id}\n href={buildEventUrl(basePath, event.slug, event.startsAt)}\n className={`\n block text-xs p-1 rounded truncate\n bg-current/10 hover:bg-current/20 transition-colors\n `}\n title={`${event.title} at ${formatTime(event.startsAt)}`}\n >\n <span className=\"font-medium opacity-70\">{formatTime(event.startsAt)}</span>\n {' '}\n <span>{event.title}</span>\n </a>\n ))}\n {events.length > 3 && (\n <div className=\"text-xs opacity-60 px-1\">\n +{events.length - 3} more\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * CalendarGrid Component\n *\n * Displays events in a calendar month or week view\n */\nexport const CalendarGrid: React.FC<CalendarGridProps> = ({\n events,\n calendarView = 'month',\n startOfWeek = 'monday',\n buttonVariant = 'primary',\n basePath = '/events',\n emptyMessage = 'No upcoming events scheduled.',\n className,\n}) => {\n // Current view date (for navigation)\n const [viewDate, setViewDate] = useState(() => new Date());\n\n const normalizedEvents = events ?? [];\n const eventsByDate = useMemo(\n () => groupEventsByDate(normalizedEvents),\n [normalizedEvents]\n );\n\n // Get day names in correct order\n const dayNames = useMemo(() => {\n if (startOfWeek === 'monday') {\n return [...DAY_NAMES.slice(1), DAY_NAMES[0]];\n }\n return DAY_NAMES;\n }, [startOfWeek]);\n\n // Get calendar days\n const calendarDays = useMemo(() => {\n if (calendarView === 'week') {\n return getWeekCalendarDays(viewDate, startOfWeek);\n }\n return getMonthCalendarDays(\n viewDate.getFullYear(),\n viewDate.getMonth(),\n startOfWeek\n );\n }, [viewDate, calendarView, startOfWeek]);\n\n // Navigation handlers\n const goToPrevious = () => {\n const newDate = new Date(viewDate);\n if (calendarView === 'week') {\n newDate.setDate(newDate.getDate() - 7);\n } else {\n newDate.setMonth(newDate.getMonth() - 1);\n }\n setViewDate(newDate);\n };\n\n const goToNext = () => {\n const newDate = new Date(viewDate);\n if (calendarView === 'week') {\n newDate.setDate(newDate.getDate() + 7);\n } else {\n newDate.setMonth(newDate.getMonth() + 1);\n }\n setViewDate(newDate);\n };\n\n const goToToday = () => {\n setViewDate(new Date());\n };\n\n // Format header title\n const headerTitle = useMemo(() => {\n if (calendarView === 'week') {\n const weekStart = calendarDays[0];\n const weekEnd = calendarDays[6];\n const startMonth = MONTH_NAMES[weekStart.getMonth()];\n const endMonth = MONTH_NAMES[weekEnd.getMonth()];\n\n if (weekStart.getMonth() === weekEnd.getMonth()) {\n return `${startMonth} ${weekStart.getDate()} - ${weekEnd.getDate()}, ${weekEnd.getFullYear()}`;\n }\n return `${startMonth} ${weekStart.getDate()} - ${endMonth} ${weekEnd.getDate()}, ${weekEnd.getFullYear()}`;\n }\n return `${MONTH_NAMES[viewDate.getMonth()]} ${viewDate.getFullYear()}`;\n }, [viewDate, calendarView, calendarDays]);\n\n return (\n <div className={`event-calendar-grid ${className || ''}`}>\n {/* Navigation header */}\n <div className=\"flex items-center justify-between mb-4\">\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={goToPrevious}\n className=\"p-2 rounded hover:bg-current/10 transition-colors\"\n aria-label={calendarView === 'week' ? 'Previous week' : 'Previous month'}\n >\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n\n <h3 className=\"text-lg font-semibold min-w-[200px] text-center\">\n {headerTitle}\n </h3>\n\n <button\n type=\"button\"\n onClick={goToNext}\n className=\"p-2 rounded hover:bg-current/10 transition-colors\"\n aria-label={calendarView === 'week' ? 'Next week' : 'Next month'}\n >\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n\n <button\n type=\"button\"\n onClick={goToToday}\n className={`button-${buttonVariant} text-sm px-3 py-1`}\n >\n Today\n </button>\n </div>\n\n {/* Calendar grid */}\n <div className=\"border border-current/20 rounded-lg overflow-hidden\">\n {/* Day headers */}\n <div className=\"grid grid-cols-7 bg-current/5\">\n {dayNames.map((day) => (\n <div\n key={day}\n className=\"text-center py-2 text-sm font-medium opacity-70 border-b border-current/10\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar days */}\n <div className=\"grid grid-cols-7\">\n {calendarDays.map((date) => {\n const dateKey = formatDateKey(date);\n const dayEvents = eventsByDate.get(dateKey) || [];\n\n return (\n <CalendarDayCell\n key={dateKey}\n date={date}\n events={dayEvents}\n isCurrentMonth={isCurrentMonth(date, viewDate.getMonth())}\n basePath={basePath}\n />\n );\n })}\n </div>\n </div>\n\n {/* Empty state hint */}\n {normalizedEvents.length === 0 && (\n <p className=\"text-center text-sm opacity-60 mt-4\">\n {emptyMessage}\n </p>\n )}\n </div>\n );\n};\n\nexport default CalendarGrid;\n","'use client'\n\nimport React from 'react';\nimport clsx from 'clsx';\n\n// Import from shared types\nimport type { PublicEvent } from '../../blocks/events/shared/types';\nimport { CalendarGrid } from './event-calendar-grid.client';\nexport type { PublicEvent };\n\ntype EventListProps = {\n events?: PublicEvent[] | null;\n /** Layout mode: grid (cards), stack (vertical list), or calendar (grid view) */\n layout?: 'grid' | 'stack' | 'calendar';\n /** Number of columns in grid layout (2, 3, or 4) */\n columns?: '2' | '3' | '4';\n /** Calendar view mode: month or week (only used when layout='calendar') */\n calendarView?: 'month' | 'week';\n /** First day of the week (only used when layout='calendar') */\n startOfWeek?: 'sunday' | 'monday';\n /** Card variant from theme (default, variant1, variant2) */\n cardVariant?: 'default' | 'variant1' | 'variant2';\n /** Button variant from theme (primary, secondary, outline, link) */\n buttonVariant?: 'primary' | 'secondary' | 'outline' | 'link';\n /** Button text (default: 'View event') */\n buttonText?: string;\n showVenue?: boolean;\n showCapacity?: boolean;\n emptyMessage?: string;\n /** Base path for event registration URLs (default: '/events') */\n basePath?: string;\n className?: string;\n};\n\n/**\n * Extract the date portion from an ISO timestamp for URL building\n * @example formatDateForUrl('2025-01-15T10:00:00Z') => '2025-01-15'\n */\nfunction formatDateForUrl(isoTimestamp: string): string {\n return isoTimestamp.split('T')[0];\n}\n\n/**\n * Build the registration URL for an event occurrence\n * Pattern: /:basePath/:slug/:date\n */\nfunction buildEventUrl(basePath: string, slug: string, startsAt: string): string {\n const date = formatDateForUrl(startsAt);\n // Ensure basePath starts with / and doesn't end with /\n const normalizedPath = basePath.startsWith('/') ? basePath : `/${basePath}`;\n const cleanPath = normalizedPath.endsWith('/') ? normalizedPath.slice(0, -1) : normalizedPath;\n return `${cleanPath}/${slug}/${date}`;\n}\n\n/**\n * EventCard Component\n * Displays a single event with title, date, venue, and capacity\n * Uses theme card and button variant classes for styling\n */\nconst EventCard: React.FC<{\n event: PublicEvent;\n cardVariant?: 'default' | 'variant1' | 'variant2';\n buttonVariant?: 'primary' | 'secondary' | 'outline' | 'link';\n buttonText?: string;\n showVenue?: boolean;\n showCapacity?: boolean;\n basePath: string;\n}> = ({\n event,\n cardVariant = 'default',\n buttonVariant = 'primary',\n buttonText = 'View event',\n showVenue = true,\n showCapacity = true,\n basePath,\n}) => {\n const startsAt = new Date(event.startsAt);\n const endsAt = new Date(event.endsAt);\n\n // Format date and time\n const dateFormatter = new Intl.DateTimeFormat('en-US', {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n\n const timeFormatter = new Intl.DateTimeFormat('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n });\n\n const formattedDate = dateFormatter.format(startsAt);\n const formattedTime = `${timeFormatter.format(startsAt)} - ${timeFormatter.format(endsAt)}`;\n\n // Determine availability badge\n const isSoldOut = event.capacity !== null && event.availableSpots === 0;\n const spotsLeft = event.availableSpots;\n\n // Build card class using theme variant\n const cardClass = `card-${cardVariant}`;\n // Build button class using theme variant\n const buttonClass = `button-${buttonVariant}`;\n\n return (\n <article className={`${cardClass} group flex flex-col`}>\n {/* Card content wrapper - theme handles padding via .card-content */}\n <div className=\"card-content flex flex-col h-full\">\n {/* Date and time header */}\n <div className=\"mb-3\">\n <time className=\"text-sm font-medium opacity-60\">\n {formattedDate}\n </time>\n <p className=\"text-sm opacity-70\">{formattedTime}</p>\n </div>\n\n {/* Event title */}\n <h3 className=\"card-title mb-2 text-lg font-semibold\">\n {event.title}\n </h3>\n\n {/* Description */}\n {event.description && (\n <p className=\"card-body mb-3 line-clamp-2 text-sm opacity-70\">\n {event.description}\n </p>\n )}\n\n {/* Venue */}\n {showVenue && event.venue && (\n <div className=\"mb-3 text-sm opacity-60\">\n <span className=\"font-medium\">{event.venue.name}</span>\n {event.venue.address && (\n <span className=\"ml-1 opacity-70\">\n &middot; {event.venue.address}\n </span>\n )}\n </div>\n )}\n\n {/* Footer with capacity and register button */}\n <div className=\"mt-auto flex items-center justify-between pt-4\">\n {/* Capacity indicator - uses theme-neutral opacity styling */}\n {showCapacity && event.capacity !== null && (\n <div>\n {isSoldOut ? (\n <span className=\"badge-status badge-status-sold-out\">\n Sold Out\n </span>\n ) : spotsLeft !== null && spotsLeft <= 5 ? (\n <span className=\"badge-status badge-status-low\">\n {spotsLeft} {spotsLeft === 1 ? 'spot' : 'spots'} left\n </span>\n ) : (\n <span className=\"badge-status badge-status-available\">\n {spotsLeft} spots available\n </span>\n )}\n </div>\n )}\n\n {/* Action button - uses theme button variant */}\n {!isSoldOut && (\n <a\n href={buildEventUrl(basePath, event.slug, event.startsAt)}\n className={buttonClass}\n >\n {buttonText}\n </a>\n )}\n </div>\n </div>\n </article>\n );\n};\n\n/**\n * EventListClient Component\n *\n * Displays a list of upcoming events from the public events API.\n * Used by the Event Calendar block.\n *\n * Supports two layouts:\n * - grid: Responsive grid with configurable columns (2/3/4)\n * - stack: Vertical list with full-width cards\n */\n/** Default base path for event URLs */\nconst DEFAULT_EVENT_BASE_PATH = '/events';\n\n/** Column class mappings for grid layout */\nconst COLUMN_CLASSES: Record<string, string> = {\n '2': 'sm:grid-cols-2',\n '3': 'sm:grid-cols-2 lg:grid-cols-3',\n '4': 'sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',\n};\n\nexport const EventListClient: React.FC<EventListProps> = ({\n events,\n layout = 'grid',\n columns = '3',\n calendarView = 'month',\n startOfWeek = 'monday',\n cardVariant = 'default',\n buttonVariant = 'primary',\n buttonText = 'View event',\n showVenue = true,\n showCapacity = true,\n emptyMessage = 'No upcoming events scheduled.',\n basePath = DEFAULT_EVENT_BASE_PATH,\n className,\n}) => {\n // Data loader validates via Zod schema, so events is always an array or null/undefined\n const normalizedEvents = events ?? [];\n\n // Calendar layout - render CalendarGrid component\n if (layout === 'calendar') {\n return (\n <CalendarGrid\n events={normalizedEvents}\n calendarView={calendarView}\n startOfWeek={startOfWeek}\n buttonVariant={buttonVariant}\n basePath={basePath}\n emptyMessage={emptyMessage}\n className={className}\n />\n );\n }\n\n // Empty state - uses theme-neutral styling via opacity\n if (!normalizedEvents || normalizedEvents.length === 0) {\n return (\n <div className={clsx('event-list event-list-empty rounded-xl border border-dashed p-12 text-center', className)}>\n <p className=\"text-base opacity-60\">{emptyMessage}</p>\n </div>\n );\n }\n\n // Build container class based on layout\n const containerClass = layout === 'stack'\n ? 'flex flex-col gap-6'\n : `grid gap-6 ${COLUMN_CLASSES[columns] || COLUMN_CLASSES['3']}`;\n\n return (\n <div className={clsx('event-list', containerClass, className)}>\n {normalizedEvents.map((event) => (\n <EventCard\n key={event.id}\n event={event}\n cardVariant={cardVariant}\n buttonVariant={buttonVariant}\n buttonText={buttonText}\n showVenue={showVenue}\n showCapacity={showCapacity}\n basePath={basePath}\n />\n ))}\n </div>\n );\n};\n\nexport default EventListClient;\n","\"use client\"\n\nimport React, { useState } from 'react';\n\nimport {\n type PublicEvent,\n type OccurrenceContext,\n type FormData,\n type RegistrationStep,\n type RegistrationResult,\n buildRegistrationEndpoint,\n EventSelectionStep,\n TicketSelectionStep,\n AttendeeDetailsStep,\n SuccessStep,\n ErrorStep,\n} from './event-registration';\n\nexport type { PublicEvent, OccurrenceContext };\n\ntype EventRegistrationProps = {\n siteId?: string;\n occurrenceContext?: OccurrenceContext | null;\n contentEntry?: {\n id: string;\n slug: string;\n contentTypeSlug: string;\n } | null;\n events?: PublicEvent[] | null;\n maxTickets?: string;\n showVenue?: boolean;\n showCapacity?: boolean;\n successMessage?: string;\n waitlistMessage?: string;\n buttonText?: string;\n buttonVariant?: 'primary' | 'secondary' | 'outline';\n className?: string;\n /**\n * Optional custom registration endpoint URL pattern.\n * Use {siteId} as a placeholder for the site ID.\n * Default: /api/public/sites/{siteId}/events/register\n */\n registrationEndpoint?: string;\n};\n\n/**\n * Validate form data\n */\nfunction validateFormData(formData: FormData): Partial<Record<keyof FormData, string>> {\n const errors: Partial<Record<keyof FormData, string>> = {};\n\n if (!formData.name.trim()) {\n errors.name = 'Name is required';\n }\n\n if (!formData.email.trim()) {\n errors.email = 'Email is required';\n } else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(formData.email)) {\n errors.email = 'Invalid email address';\n }\n\n return errors;\n}\n\n/**\n * Submit registration to API\n */\nasync function submitRegistration(\n endpoint: string,\n data: {\n occurrenceId: string;\n email: string;\n name: string;\n ticketsCount: number;\n phone?: string;\n notes?: string;\n },\n): Promise<{ success: boolean; status: 'confirmed' | 'waitlist'; waitlistPosition?: number }> {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(data),\n });\n\n const result = await response.json();\n\n if (!response.ok) {\n throw new Error(result.error || 'Registration failed');\n }\n\n return result;\n}\n\n/**\n * EventRegistrationClient Component\n *\n * Multi-step registration form for events.\n * Handles occurrence selection, ticket count, and attendee information.\n */\nexport const EventRegistrationClient: React.FC<EventRegistrationProps> = ({\n siteId,\n occurrenceContext,\n events,\n maxTickets = '5',\n showVenue = true,\n showCapacity = true,\n successMessage = 'Thank you for registering! Check your email for confirmation details.',\n waitlistMessage = \"You've been added to the waitlist. We'll notify you if a spot opens up.\",\n buttonText = 'Complete Registration',\n buttonVariant = 'primary',\n className,\n registrationEndpoint,\n}) => {\n const maxTicketsNum = parseInt(maxTickets, 10) || 5;\n\n // Find pre-selected event from occurrence context (flat structure)\n // Match by occurrence ID or by date if ID not in events list\n const preSelectedEvent = occurrenceContext\n ? events?.find((e) =>\n e.id === occurrenceContext.id ||\n e.startsAt.startsWith(occurrenceContext.startsAt.split('T')[0])\n )\n : null;\n\n // State - skip event selection if we have occurrence context\n const hasPreSelectedContext = !!(occurrenceContext || preSelectedEvent);\n const [step, setStep] = useState<RegistrationStep>(\n hasPreSelectedContext ? 'select-tickets' : 'select-event'\n );\n const [selectedEvent, setSelectedEvent] = useState<PublicEvent | null>(preSelectedEvent ?? null);\n const [ticketsCount, setTicketsCount] = useState(1);\n const [formData, setFormData] = useState<FormData>({\n name: '',\n email: '',\n phone: '',\n notes: '',\n });\n const [errors, setErrors] = useState<Partial<Record<keyof FormData, string>>>({});\n const [registrationResult, setRegistrationResult] = useState<RegistrationResult | null>(null);\n const [errorMessage, setErrorMessage] = useState<string>('');\n\n const normalizedEvents = events ?? [];\n\n // Validation\n const validateForm = (): boolean => {\n const newErrors = validateFormData(formData);\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n // Submit registration\n const handleSubmit = async (): Promise<void> => {\n // Use occurrence context ID if available, otherwise fall back to selected event\n const occurrenceId = occurrenceContext?.id ?? selectedEvent?.id;\n if (!validateForm() || !occurrenceId || !siteId) return;\n\n setStep('submitting');\n\n try {\n const endpoint = buildRegistrationEndpoint(siteId, registrationEndpoint);\n const result = await submitRegistration(endpoint, {\n occurrenceId,\n email: formData.email.trim().toLowerCase(),\n name: formData.name.trim(),\n ticketsCount,\n phone: formData.phone.trim() || undefined,\n notes: formData.notes.trim() || undefined,\n });\n\n setRegistrationResult({\n status: result.status,\n waitlistPosition: result.waitlistPosition,\n });\n setStep('success');\n } catch (error) {\n setErrorMessage(error instanceof Error ? error.message : 'Registration failed');\n setStep('error');\n }\n };\n\n // Event handlers\n const handleEventSelect = (event: PublicEvent): void => {\n setSelectedEvent(event);\n setStep('select-tickets');\n };\n\n const handleRetry = (): void => {\n setStep(hasPreSelectedContext ? 'select-tickets' : 'select-event');\n setErrorMessage('');\n };\n\n // Build button class using theme variant\n const buttonClass = `button-${buttonVariant}`;\n\n // Empty state\n if (normalizedEvents.length === 0 && !occurrenceContext) {\n return (\n <div className=\"event-registration-empty rounded-xl border border-dashed p-12 text-center\">\n <p className=\"text-base opacity-60\">No events available for registration.</p>\n </div>\n );\n }\n\n return (\n <div className={`event-registration ${className || ''}`}>\n <div className=\"rounded-xl border border-current/20 p-6\">\n {step === 'select-event' && (\n <EventSelectionStep\n events={normalizedEvents}\n selectedEvent={selectedEvent}\n onSelect={handleEventSelect}\n showVenue={showVenue}\n showCapacity={showCapacity}\n />\n )}\n\n {step === 'select-tickets' && (selectedEvent || occurrenceContext) && (\n <>\n <TicketSelectionStep\n event={selectedEvent}\n occurrenceContext={occurrenceContext}\n ticketsCount={ticketsCount}\n maxTickets={maxTicketsNum}\n onTicketsChange={setTicketsCount}\n onBack={() => setStep('select-event')}\n showBackButton={!hasPreSelectedContext}\n />\n <div className=\"mt-6\">\n <button\n type=\"button\"\n onClick={() => setStep('enter-details')}\n className={buttonClass}\n >\n Continue\n </button>\n </div>\n </>\n )}\n\n {step === 'enter-details' && (\n <>\n <AttendeeDetailsStep\n formData={formData}\n onChange={setFormData}\n onBack={() => setStep('select-tickets')}\n errors={errors}\n />\n <div className=\"mt-6\">\n <button\n type=\"button\"\n onClick={handleSubmit}\n className={buttonClass}\n >\n {buttonText}\n </button>\n </div>\n </>\n )}\n\n {step === 'submitting' && (\n <div className=\"text-center p-8\">\n <div className=\"w-16 h-16 mx-auto mb-4 rounded-full border-4 border-current/20 border-t-current animate-spin\" />\n <p className=\"opacity-70\">Processing your registration...</p>\n </div>\n )}\n\n {step === 'success' && registrationResult && (\n <SuccessStep\n message={registrationResult.status === 'confirmed' ? successMessage : waitlistMessage}\n status={registrationResult.status}\n waitlistPosition={registrationResult.waitlistPosition}\n />\n )}\n\n {step === 'error' && (\n <ErrorStep message={errorMessage} onRetry={handleRetry} />\n )}\n </div>\n </div>\n );\n};\n\nexport default EventRegistrationClient;\n","import { getCmsApiUrl } from '../../utils/api-url';\n\n/**\n * Format date for display\n */\nexport function formatDate(isoTimestamp: string): string {\n const date = new Date(isoTimestamp);\n return new Intl.DateTimeFormat('en-US', {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(date);\n}\n\n/**\n * Format time for display\n */\nexport function formatTime(isoTimestamp: string): string {\n const date = new Date(isoTimestamp);\n return new Intl.DateTimeFormat('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n }).format(date);\n}\n\n/**\n * Build the registration API endpoint URL\n *\n * Uses getCmsApiUrl() to get the dashboard API base URL, ensuring the\n * client-side form submission targets the correct API endpoint.\n *\n * @param siteId - The site ID\n * @param customEndpoint - Optional custom endpoint override\n * @returns The full API endpoint URL\n */\nexport function buildRegistrationEndpoint(siteId: string, customEndpoint?: string): string {\n if (customEndpoint) {\n return customEndpoint.replace('{siteId}', siteId);\n }\n const apiBaseUrl = getCmsApiUrl();\n return `${apiBaseUrl}/public/sites/${siteId}/events/register`;\n}\n","\"use client\"\n\nimport React from 'react';\nimport type { PublicEvent } from './types';\nimport { formatDate, formatTime } from './utils';\n\ntype EventSelectionStepProps = {\n events: PublicEvent[];\n selectedEvent: PublicEvent | null;\n onSelect: (event: PublicEvent) => void;\n showVenue?: boolean;\n showCapacity?: boolean;\n};\n\n/**\n * Event Selection Step\n *\n * Displays a list of available events for the user to select from.\n * Shows venue and capacity information based on configuration.\n */\nexport const EventSelectionStep: React.FC<EventSelectionStepProps> = ({\n events,\n selectedEvent,\n onSelect,\n showVenue,\n showCapacity,\n}) => {\n return (\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold\">Select an Event</h3>\n <div className=\"space-y-3\">\n {events.map((event) => {\n const isSelected = selectedEvent?.id === event.id;\n const isSoldOut = event.capacity !== null && event.availableSpots === 0;\n\n return (\n <button\n key={event.id}\n type=\"button\"\n onClick={() => !isSoldOut && onSelect(event)}\n disabled={isSoldOut}\n className={`w-full text-left p-4 rounded-lg border transition-colors ${\n isSelected\n ? 'border-current bg-current/10'\n : isSoldOut\n ? 'border-dashed opacity-50 cursor-not-allowed'\n : 'border-current/20 hover:border-current/50'\n }`}\n >\n <div className=\"flex justify-between items-start\">\n <div>\n <h4 className=\"font-medium\">{event.title}</h4>\n <p className=\"text-sm opacity-70\">\n {formatDate(event.startsAt)} at {formatTime(event.startsAt)}\n </p>\n {showVenue && event.venue && (\n <p className=\"text-sm opacity-60\">{event.venue.name}</p>\n )}\n </div>\n {showCapacity && event.capacity !== null && (\n <span className={`text-sm px-2 py-1 rounded ${\n isSoldOut\n ? 'bg-red-100 text-red-700'\n : event.availableSpots !== null && event.availableSpots <= 5\n ? 'bg-amber-100 text-amber-700'\n : 'bg-green-100 text-green-700'\n }`}>\n {isSoldOut\n ? 'Sold Out'\n : `${event.availableSpots} spots left`}\n </span>\n )}\n </div>\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n","\"use client\"\n\nimport React from 'react';\nimport type { PublicEvent, OccurrenceContext } from './types';\nimport { formatDate, formatTime } from './utils';\n\ntype TicketSelectionStepProps = {\n event: PublicEvent | null;\n occurrenceContext?: OccurrenceContext | null;\n ticketsCount: number;\n maxTickets: number;\n onTicketsChange: (count: number) => void;\n onBack: () => void;\n showBackButton?: boolean;\n};\n\n/**\n * Ticket Selection Step\n *\n * Allows users to select how many tickets they want for the selected event.\n * Respects both max tickets per registration and available spots.\n *\n * Can use either a full PublicEvent or just occurrence context (when on event page).\n */\nexport const TicketSelectionStep: React.FC<TicketSelectionStepProps> = ({\n event,\n occurrenceContext,\n ticketsCount,\n maxTickets,\n onTicketsChange,\n onBack,\n showBackButton = true,\n}) => {\n // Use event data if available, otherwise fall back to occurrence context\n const availableSpots = event?.availableSpots ?? maxTickets;\n const maxAllowed = Math.min(maxTickets, availableSpots);\n\n // Get display values from event or occurrence context\n const title = event?.title ?? 'This event';\n const startsAt = event?.startsAt ?? occurrenceContext?.startsAt ?? '';\n\n return (\n <div className=\"space-y-4\">\n {showBackButton && (\n <button\n type=\"button\"\n onClick={onBack}\n className=\"text-sm opacity-70 hover:opacity-100\"\n >\n &larr; Back to event selection\n </button>\n )}\n <h3 className=\"text-lg font-semibold\">How many tickets?</h3>\n {startsAt && (\n <div className=\"p-4 rounded-lg border border-current/20\">\n <h4 className=\"font-medium\">{title}</h4>\n <p className=\"text-sm opacity-70\">\n {formatDate(startsAt)} at {formatTime(startsAt)}\n </p>\n </div>\n )}\n <div className=\"flex items-center gap-4\">\n <button\n type=\"button\"\n onClick={() => onTicketsChange(Math.max(1, ticketsCount - 1))}\n disabled={ticketsCount <= 1}\n className=\"w-10 h-10 rounded-full border border-current/20 disabled:opacity-50\"\n >\n -\n </button>\n <span className=\"text-2xl font-bold w-8 text-center\">{ticketsCount}</span>\n <button\n type=\"button\"\n onClick={() => onTicketsChange(Math.min(maxAllowed, ticketsCount + 1))}\n disabled={ticketsCount >= maxAllowed}\n className=\"w-10 h-10 rounded-full border border-current/20 disabled:opacity-50\"\n >\n +\n </button>\n </div>\n <p className=\"text-sm opacity-70\">\n {maxAllowed} tickets maximum\n {event?.availableSpots != null && ` (${event.availableSpots} spots available)`}\n </p>\n </div>\n );\n};\n","\"use client\"\n\nimport React from 'react';\nimport type { FormData } from './types';\n\ntype AttendeeDetailsStepProps = {\n formData: FormData;\n onChange: (data: FormData) => void;\n onBack: () => void;\n errors: Partial<Record<keyof FormData, string>>;\n};\n\n/**\n * Attendee Details Step\n *\n * Collects attendee information: name, email, phone, and notes.\n * Validates required fields and displays errors.\n */\nexport const AttendeeDetailsStep: React.FC<AttendeeDetailsStepProps> = ({\n formData,\n onChange,\n onBack,\n errors,\n}) => {\n return (\n <div className=\"space-y-4\">\n <button\n type=\"button\"\n onClick={onBack}\n className=\"text-sm opacity-70 hover:opacity-100\"\n >\n &larr; Back to ticket selection\n </button>\n <h3 className=\"text-lg font-semibold\">Your Information</h3>\n <div className=\"space-y-3\">\n <div>\n <label className=\"block text-sm font-medium mb-1\">\n Name <span className=\"text-red-500\">*</span>\n </label>\n <input\n type=\"text\"\n value={formData.name}\n onChange={(e) => onChange({ ...formData, name: e.target.value })}\n className={`w-full px-3 py-2 rounded-lg border ${\n errors.name ? 'border-red-500' : 'border-current/20'\n } bg-transparent`}\n placeholder=\"Your full name\"\n />\n {errors.name && <p className=\"text-sm text-red-500 mt-1\">{errors.name}</p>}\n </div>\n <div>\n <label className=\"block text-sm font-medium mb-1\">\n Email <span className=\"text-red-500\">*</span>\n </label>\n <input\n type=\"email\"\n value={formData.email}\n onChange={(e) => onChange({ ...formData, email: e.target.value })}\n className={`w-full px-3 py-2 rounded-lg border ${\n errors.email ? 'border-red-500' : 'border-current/20'\n } bg-transparent`}\n placeholder=\"your@email.com\"\n />\n {errors.email && <p className=\"text-sm text-red-500 mt-1\">{errors.email}</p>}\n </div>\n <div>\n <label className=\"block text-sm font-medium mb-1\">Phone</label>\n <input\n type=\"tel\"\n value={formData.phone}\n onChange={(e) => onChange({ ...formData, phone: e.target.value })}\n className=\"w-full px-3 py-2 rounded-lg border border-current/20 bg-transparent\"\n placeholder=\"(optional)\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium mb-1\">Notes</label>\n <textarea\n value={formData.notes}\n onChange={(e) => onChange({ ...formData, notes: e.target.value })}\n className=\"w-full px-3 py-2 rounded-lg border border-current/20 bg-transparent\"\n placeholder=\"Any special requirements or notes (optional)\"\n rows={3}\n />\n </div>\n </div>\n </div>\n );\n};\n","\"use client\"\n\nimport React from 'react';\n\ntype SuccessStepProps = {\n message: string;\n status: 'confirmed' | 'waitlist';\n waitlistPosition?: number;\n};\n\n/**\n * Success Step\n *\n * Displays registration confirmation with appropriate icon and message\n * based on whether the registration was confirmed or added to waitlist.\n */\nexport const SuccessStep: React.FC<SuccessStepProps> = ({\n message,\n status,\n waitlistPosition,\n}) => {\n return (\n <div className=\"text-center p-8\">\n <div className={`w-16 h-16 mx-auto mb-4 rounded-full flex items-center justify-center ${\n status === 'confirmed' ? 'bg-green-100 text-green-600' : 'bg-amber-100 text-amber-600'\n }`}>\n {status === 'confirmed' ? (\n <svg className=\"w-8 h-8\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n ) : (\n <svg className=\"w-8 h-8\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n )}\n </div>\n <h3 className=\"text-xl font-semibold mb-2\">\n {status === 'confirmed' ? 'Registration Confirmed!' : 'Added to Waitlist'}\n </h3>\n {status === 'waitlist' && waitlistPosition && (\n <p className=\"text-sm opacity-70 mb-2\">Position: #{waitlistPosition}</p>\n )}\n <p className=\"opacity-70\">{message}</p>\n </div>\n );\n};\n","\"use client\"\n\nimport React from 'react';\n\ntype ErrorStepProps = {\n message: string;\n onRetry: () => void;\n};\n\n/**\n * Error Step\n *\n * Displays an error message with a retry button when registration fails.\n */\nexport const ErrorStep: React.FC<ErrorStepProps> = ({ message, onRetry }) => {\n return (\n <div className=\"text-center p-8\">\n <div className=\"w-16 h-16 mx-auto mb-4 rounded-full flex items-center justify-center bg-red-100 text-red-600\">\n <svg className=\"w-8 h-8\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </div>\n <h3 className=\"text-xl font-semibold mb-2\">Registration Failed</h3>\n <p className=\"opacity-70 mb-4\">{message}</p>\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"px-4 py-2 rounded-lg border border-current/20 hover:border-current/50\"\n >\n Try Again\n </button>\n </div>\n );\n};\n","'use client';\n\nimport React from 'react';\nimport clsx from 'clsx';\nimport {\n Carousel as UICarousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n useCarousel,\n} from '@riverbankcms/ui';\n\nexport type CarouselNodeProps = {\n children?: React.ReactNode;\n className?: string;\n slidesToShow?: number;\n transition?: 'slide' | 'fade';\n showControls?: boolean;\n};\n\nexport const CarouselNode: React.FC<CarouselNodeProps> = ({\n children,\n className,\n slidesToShow = 1,\n transition = 'slide',\n showControls = true,\n}) => {\n const slides = React.Children.toArray(children).filter(Boolean);\n const resolvedSlides = React.useMemo(() => {\n const numeric =\n typeof slidesToShow === 'string'\n ? Number.parseInt(slidesToShow, 10)\n : slidesToShow;\n if (Number.isFinite(numeric) && numeric && numeric > 0) {\n return Math.max(1, Math.min(4, Number(numeric)));\n }\n return 1;\n }, [slidesToShow]);\n const basis = `${100 / resolvedSlides}%`;\n const controlsEnabled =\n typeof showControls === 'string'\n ? showControls !== 'false'\n : Boolean(showControls);\n\n return (\n <div\n className={clsx('relative', className)}\n data-slides-to-show={resolvedSlides}\n data-transition={transition}\n data-show-controls={controlsEnabled ? 'true' : 'false'}\n >\n <UICarousel opts={{ align: 'start', slidesToScroll: 1, containScroll: 'trimSnaps' }}>\n <CarouselContent className=\"w-full\">\n {slides.map((slide, index) => (\n <CarouselSlide\n key={index}\n index={index}\n basis={basis}\n transition={transition}\n >\n {slide}\n </CarouselSlide>\n ))}\n </CarouselContent>\n {controlsEnabled && slides.length > resolvedSlides ? (\n <>\n <CarouselPrevious />\n <CarouselNext />\n </>\n ) : null}\n </UICarousel>\n </div>\n );\n};\n\ntype CarouselSlideProps = {\n index: number;\n basis: string;\n transition: 'slide' | 'fade';\n children: React.ReactNode;\n};\n\nconst CarouselSlide: React.FC<CarouselSlideProps> = ({ index, basis, transition, children }) => {\n const { api } = useCarousel();\n const [selected, setSelected] = React.useState(0);\n\n React.useEffect(() => {\n if (!api) return;\n const handleSelect = () => {\n setSelected(api.selectedScrollSnap());\n };\n api.on('select', handleSelect);\n api.on('reInit', handleSelect);\n handleSelect();\n return () => {\n api.off('select', handleSelect);\n api.off('reInit', handleSelect);\n };\n }, [api]);\n\n const isActive = selected === index;\n\n return (\n <CarouselItem\n data-active={isActive}\n className={clsx(\n transition === 'fade' && 'transition-opacity duration-500 ease-in-out',\n transition === 'fade' && !isActive ? 'opacity-0 pointer-events-none' : 'opacity-100',\n )}\n style={{ flex: `0 0 ${basis}` }}\n >\n {children}\n </CarouselItem>\n );\n};\n","import {\n AnyClassGroupIds,\n AnyConfig,\n AnyThemeGroupIds,\n ClassGroup,\n ClassValidator,\n Config,\n ThemeGetter,\n ThemeObject,\n} from './types'\n\nexport interface ClassPartObject {\n nextPart: Map<string, ClassPartObject>\n validators: ClassValidatorObject[]\n classGroupId?: AnyClassGroupIds\n}\n\ninterface ClassValidatorObject {\n classGroupId: AnyClassGroupIds\n validator: ClassValidator\n}\n\nconst CLASS_PART_SEPARATOR = '-'\n\nexport const createClassGroupUtils = (config: AnyConfig) => {\n const classMap = createClassMap(config)\n const { conflictingClassGroups, conflictingClassGroupModifiers } = config\n\n const getClassGroupId = (className: string) => {\n const classParts = className.split(CLASS_PART_SEPARATOR)\n\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift()\n }\n\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className)\n }\n\n const getConflictingClassGroupIds = (\n classGroupId: AnyClassGroupIds,\n hasPostfixModifier: boolean,\n ) => {\n const conflicts = conflictingClassGroups[classGroupId] || []\n\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]!]\n }\n\n return conflicts\n }\n\n return {\n getClassGroupId,\n getConflictingClassGroupIds,\n }\n}\n\nconst getGroupRecursive = (\n classParts: string[],\n classPartObject: ClassPartObject,\n): AnyClassGroupIds | undefined => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId\n }\n\n const currentClassPart = classParts[0]!\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart)\n const classGroupFromNextClassPart = nextClassPartObject\n ? getGroupRecursive(classParts.slice(1), nextClassPartObject)\n : undefined\n\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart\n }\n\n if (classPartObject.validators.length === 0) {\n return undefined\n }\n\n const classRest = classParts.join(CLASS_PART_SEPARATOR)\n\n return classPartObject.validators.find(({ validator }) => validator(classRest))?.classGroupId\n}\n\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/\n\nconst getGroupIdForArbitraryProperty = (className: string) => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)![1]\n const property = arbitraryPropertyClassName?.substring(\n 0,\n arbitraryPropertyClassName.indexOf(':'),\n )\n\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property\n }\n }\n}\n\n/**\n * Exported for testing only\n */\nexport const createClassMap = (config: Config<AnyClassGroupIds, AnyThemeGroupIds>) => {\n const { theme, classGroups } = config\n const classMap: ClassPartObject = {\n nextPart: new Map<string, ClassPartObject>(),\n validators: [],\n }\n\n for (const classGroupId in classGroups) {\n processClassesRecursively(classGroups[classGroupId]!, classMap, classGroupId, theme)\n }\n\n return classMap\n}\n\nconst processClassesRecursively = (\n classGroup: ClassGroup<AnyThemeGroupIds>,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n classGroup.forEach((classDefinition) => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit =\n classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n classPartObjectToEdit.classGroupId = classGroupId\n return\n }\n\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(\n classDefinition(theme),\n classPartObject,\n classGroupId,\n theme,\n )\n return\n }\n\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId,\n })\n\n return\n }\n\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(\n classGroup,\n getPart(classPartObject, key),\n classGroupId,\n theme,\n )\n })\n })\n}\n\nconst getPart = (classPartObject: ClassPartObject, path: string) => {\n let currentClassPartObject = classPartObject\n\n path.split(CLASS_PART_SEPARATOR).forEach((pathPart) => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: [],\n })\n }\n\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart)!\n })\n\n return currentClassPartObject\n}\n\nconst isThemeGetter = (func: ClassValidator | ThemeGetter): func is ThemeGetter =>\n (func as ThemeGetter).isThemeGetter\n","// Export is needed because TypeScript complains about an error otherwise:\n// Error: …/tailwind-merge/src/config-utils.ts(8,17): semantic error TS4058: Return type of exported function has or is using name 'LruCache' from external module \"…/tailwind-merge/src/lru-cache\" but cannot be named.\nexport interface LruCache<Key, Value> {\n get(key: Key): Value | undefined\n set(key: Key, value: Value): void\n}\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nexport const createLruCache = <Key, Value>(maxCacheSize: number): LruCache<Key, Value> => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {},\n }\n }\n\n let cacheSize = 0\n let cache = new Map<Key, Value>()\n let previousCache = new Map<Key, Value>()\n\n const update = (key: Key, value: Value) => {\n cache.set(key, value)\n cacheSize++\n\n if (cacheSize > maxCacheSize) {\n cacheSize = 0\n previousCache = cache\n cache = new Map()\n }\n }\n\n return {\n get(key) {\n let value = cache.get(key)\n\n if (value !== undefined) {\n return value\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value)\n return value\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value)\n } else {\n update(key, value)\n }\n },\n }\n}\n","import { AnyConfig, ParsedClassName } from './types'\n\nexport const IMPORTANT_MODIFIER = '!'\nconst MODIFIER_SEPARATOR = ':'\nconst MODIFIER_SEPARATOR_LENGTH = MODIFIER_SEPARATOR.length\n\nexport const createParseClassName = (config: AnyConfig) => {\n const { prefix, experimentalParseClassName } = config\n\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: string): ParsedClassName => {\n const modifiers = []\n\n let bracketDepth = 0\n let parenDepth = 0\n let modifierStart = 0\n let postfixModifierPosition: number | undefined\n\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index]\n\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index))\n modifierStart = index + MODIFIER_SEPARATOR_LENGTH\n continue\n }\n\n if (currentCharacter === '/') {\n postfixModifierPosition = index\n continue\n }\n }\n\n if (currentCharacter === '[') {\n bracketDepth++\n } else if (currentCharacter === ']') {\n bracketDepth--\n } else if (currentCharacter === '(') {\n parenDepth++\n } else if (currentCharacter === ')') {\n parenDepth--\n }\n }\n\n const baseClassNameWithImportantModifier =\n modifiers.length === 0 ? className : className.substring(modifierStart)\n const baseClassName = stripImportantModifier(baseClassNameWithImportantModifier)\n const hasImportantModifier = baseClassName !== baseClassNameWithImportantModifier\n const maybePostfixModifierPosition =\n postfixModifierPosition && postfixModifierPosition > modifierStart\n ? postfixModifierPosition - modifierStart\n : undefined\n\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n }\n }\n\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR\n const parseClassNameOriginal = parseClassName\n parseClassName = (className) =>\n className.startsWith(fullPrefix)\n ? parseClassNameOriginal(className.substring(fullPrefix.length))\n : {\n isExternal: true,\n modifiers: [],\n hasImportantModifier: false,\n baseClassName: className,\n maybePostfixModifierPosition: undefined,\n }\n }\n\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName\n parseClassName = (className) =>\n experimentalParseClassName({ className, parseClassName: parseClassNameOriginal })\n }\n\n return parseClassName\n}\n\nconst stripImportantModifier = (baseClassName: string) => {\n if (baseClassName.endsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(0, baseClassName.length - 1)\n }\n\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 if (baseClassName.startsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(1)\n }\n\n return baseClassName\n}\n","import { AnyConfig } from './types'\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 */\nexport const createSortModifiers = (config: AnyConfig) => {\n const orderSensitiveModifiers = Object.fromEntries(\n config.orderSensitiveModifiers.map((modifier) => [modifier, true]),\n )\n\n const sortModifiers = (modifiers: string[]) => {\n if (modifiers.length <= 1) {\n return modifiers\n }\n\n const sortedModifiers: string[] = []\n let unsortedModifiers: string[] = []\n\n modifiers.forEach((modifier) => {\n const isPositionSensitive = modifier[0] === '[' || orderSensitiveModifiers[modifier]\n\n if (isPositionSensitive) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier)\n unsortedModifiers = []\n } else {\n unsortedModifiers.push(modifier)\n }\n })\n\n sortedModifiers.push(...unsortedModifiers.sort())\n\n return sortedModifiers\n }\n\n return sortModifiers\n}\n","import { createClassGroupUtils } from './class-group-utils'\nimport { createLruCache } from './lru-cache'\nimport { createParseClassName } from './parse-class-name'\nimport { createSortModifiers } from './sort-modifiers'\nimport { AnyConfig } from './types'\n\nexport type ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createConfigUtils = (config: AnyConfig) => ({\n cache: createLruCache<string, string>(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config),\n})\n","import { ConfigUtils } from './config-utils'\nimport { IMPORTANT_MODIFIER } from './parse-class-name'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\n\nexport const mergeClassList = (classList: string, configUtils: ConfigUtils) => {\n const { parseClassName, getClassGroupId, getConflictingClassGroupIds, sortModifiers } =\n configUtils\n\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: string[] = []\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX)\n\n let result = ''\n\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index]!\n\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n } = parseClassName(originalClassName)\n\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n let hasPostfixModifier = !!maybePostfixModifierPosition\n let classGroupId = getClassGroupId(\n hasPostfixModifier\n ? baseClassName.substring(0, maybePostfixModifierPosition)\n : baseClassName,\n )\n\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n classGroupId = getClassGroupId(baseClassName)\n\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n hasPostfixModifier = false\n }\n\n const variantModifier = sortModifiers(modifiers).join(':')\n\n const modifierId = hasImportantModifier\n ? variantModifier + IMPORTANT_MODIFIER\n : variantModifier\n\n const classId = modifierId + classGroupId\n\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue\n }\n\n classGroupsInConflict.push(classId)\n\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\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n }\n\n return result\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 */\n\nexport type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false\ntype ClassNameArray = ClassNameValue[]\n\nexport function twJoin(...classLists: ClassNameValue[]): string\nexport function twJoin() {\n let index = 0\n let argument: ClassNameValue\n let resolvedValue: string\n let string = ''\n\n while (index < arguments.length) {\n if ((argument = arguments[index++])) {\n if ((resolvedValue = toValue(argument))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n return string\n}\n\nconst toValue = (mix: ClassNameArray | string) => {\n if (typeof mix === 'string') {\n return mix\n }\n\n let resolvedValue: string\n let string = ''\n\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n\n return string\n}\n","import { createConfigUtils } from './config-utils'\nimport { mergeClassList } from './merge-classlist'\nimport { ClassNameValue, twJoin } from './tw-join'\nimport { AnyConfig } from './types'\n\ntype CreateConfigFirst = () => AnyConfig\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\ntype TailwindMerge = (...classLists: ClassNameValue[]) => string\ntype ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport function createTailwindMerge(\n createConfigFirst: CreateConfigFirst,\n ...createConfigRest: CreateConfigSubsequent[]\n): TailwindMerge {\n let configUtils: ConfigUtils\n let cacheGet: ConfigUtils['cache']['get']\n let cacheSet: ConfigUtils['cache']['set']\n let functionToCall = initTailwindMerge\n\n function initTailwindMerge(classList: string) {\n const config = createConfigRest.reduce(\n (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),\n createConfigFirst() as AnyConfig,\n )\n\n configUtils = createConfigUtils(config)\n cacheGet = configUtils.cache.get\n cacheSet = configUtils.cache.set\n functionToCall = tailwindMerge\n\n return tailwindMerge(classList)\n }\n\n function tailwindMerge(classList: string) {\n const cachedResult = cacheGet(classList)\n\n if (cachedResult) {\n return cachedResult\n }\n\n const result = mergeClassList(classList, configUtils)\n cacheSet(classList, result)\n\n return result\n }\n\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments as any))\n }\n}\n","import { DefaultThemeGroupIds, NoInfer, ThemeGetter, ThemeObject } from './types'\n\nexport const fromTheme = <\n AdditionalThemeGroupIds extends string = never,\n DefaultThemeGroupIdsInner extends string = DefaultThemeGroupIds,\n>(key: NoInfer<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>): ThemeGetter => {\n const themeGetter = (theme: ThemeObject<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>) =>\n theme[key] || []\n\n themeGetter.isThemeGetter = true as const\n\n return themeGetter\n}\n","const arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i\nconst fractionRegex = /^\\d+\\/\\d+$/\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/\nconst lengthUnitRegex =\n /\\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 =\n /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/\n\nexport const isFraction = (value: string) => fractionRegex.test(value)\n\nexport const isNumber = (value: string) => !!value && !Number.isNaN(Number(value))\n\nexport const isInteger = (value: string) => !!value && Number.isInteger(Number(value))\n\nexport const isPercent = (value: string) => value.endsWith('%') && isNumber(value.slice(0, -1))\n\nexport const isTshirtSize = (value: string) => tshirtUnitRegex.test(value)\n\nexport const isAny = () => true\n\nconst isLengthOnly = (value: string) =>\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.\n lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)\n\nconst isNever = () => false\n\nconst isShadow = (value: string) => shadowRegex.test(value)\n\nconst isImage = (value: string) => imageRegex.test(value)\n\nexport const isAnyNonArbitrary = (value: string) =>\n !isArbitraryValue(value) && !isArbitraryVariable(value)\n\nexport const isArbitrarySize = (value: string) => getIsArbitraryValue(value, isLabelSize, isNever)\n\nexport const isArbitraryValue = (value: string) => arbitraryValueRegex.test(value)\n\nexport const isArbitraryLength = (value: string) =>\n getIsArbitraryValue(value, isLabelLength, isLengthOnly)\n\nexport const isArbitraryNumber = (value: string) =>\n getIsArbitraryValue(value, isLabelNumber, isNumber)\n\nexport const isArbitraryPosition = (value: string) =>\n getIsArbitraryValue(value, isLabelPosition, isNever)\n\nexport const isArbitraryImage = (value: string) => getIsArbitraryValue(value, isLabelImage, isImage)\n\nexport const isArbitraryShadow = (value: string) =>\n getIsArbitraryValue(value, isLabelShadow, isShadow)\n\nexport const isArbitraryVariable = (value: string) => arbitraryVariableRegex.test(value)\n\nexport const isArbitraryVariableLength = (value: string) =>\n getIsArbitraryVariable(value, isLabelLength)\n\nexport const isArbitraryVariableFamilyName = (value: string) =>\n getIsArbitraryVariable(value, isLabelFamilyName)\n\nexport const isArbitraryVariablePosition = (value: string) =>\n getIsArbitraryVariable(value, isLabelPosition)\n\nexport const isArbitraryVariableSize = (value: string) => getIsArbitraryVariable(value, isLabelSize)\n\nexport const isArbitraryVariableImage = (value: string) =>\n getIsArbitraryVariable(value, isLabelImage)\n\nexport const isArbitraryVariableShadow = (value: string) =>\n getIsArbitraryVariable(value, isLabelShadow, true)\n\n// Helpers\n\nconst getIsArbitraryValue = (\n value: string,\n testLabel: (label: string) => boolean,\n testValue: (value: string) => boolean,\n) => {\n const result = arbitraryValueRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return testLabel(result[1])\n }\n\n return testValue(result[2]!)\n }\n\n return false\n}\n\nconst getIsArbitraryVariable = (\n value: string,\n testLabel: (label: string) => boolean,\n shouldMatchNoLabel = false,\n) => {\n const result = arbitraryVariableRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return testLabel(result[1])\n }\n return shouldMatchNoLabel\n }\n\n return false\n}\n\n// Labels\n\nconst isLabelPosition = (label: string) => label === 'position' || label === 'percentage'\n\nconst isLabelImage = (label: string) => label === 'image' || label === 'url'\n\nconst isLabelSize = (label: string) => label === 'length' || label === 'size' || label === 'bg-size'\n\nconst isLabelLength = (label: string) => label === 'length'\n\nconst isLabelNumber = (label: string) => label === 'number'\n\nconst isLabelFamilyName = (label: string) => label === 'family-name'\n\nconst isLabelShadow = (label: string) => label === 'shadow'\n","import { fromTheme } from './from-theme'\nimport { Config, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\nimport {\n isAny,\n isAnyNonArbitrary,\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 isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize,\n} from './validators'\n\nexport const getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\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 /**\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\n const scaleBreak = () =>\n ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'] as const\n const scalePosition = () =>\n [\n 'center',\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top',\n 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top',\n 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom',\n 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom',\n ] as const\n const scalePositionWithArbitrary = () =>\n [...scalePosition(), isArbitraryVariable, isArbitraryValue] as const\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'] as const\n const scaleOverscroll = () => ['auto', 'contain', 'none'] as const\n const scaleUnambiguousSpacing = () =>\n [isArbitraryVariable, isArbitraryValue, themeSpacing] as const\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()] as const\n const scaleGridTemplateColsRows = () =>\n [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue] as const\n const scaleGridColRowStartAndEnd = () =>\n [\n 'auto',\n { span: ['full', isInteger, isArbitraryVariable, isArbitraryValue] },\n isInteger,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleGridColRowStartOrEnd = () =>\n [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] as const\n const scaleGridAutoColsRows = () =>\n ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue] as const\n const scaleAlignPrimaryAxis = () =>\n [\n 'start',\n 'end',\n 'center',\n 'between',\n 'around',\n 'evenly',\n 'stretch',\n 'baseline',\n 'center-safe',\n 'end-safe',\n ] as const\n const scaleAlignSecondaryAxis = () =>\n ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'] as const\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()] as const\n const scaleSizing = () =>\n [\n isFraction,\n 'auto',\n 'full',\n 'dvw',\n 'dvh',\n 'lvw',\n 'lvh',\n 'svw',\n 'svh',\n 'min',\n 'max',\n 'fit',\n ...scaleUnambiguousSpacing(),\n ] as const\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue] as const\n const scaleBgPosition = () =>\n [\n ...scalePosition(),\n isArbitraryVariablePosition,\n isArbitraryPosition,\n { position: [isArbitraryVariable, isArbitraryValue] },\n ] as const\n const scaleBgRepeat = () => ['no-repeat', { repeat: ['', 'x', 'y', 'space', 'round'] }] as const\n const scaleBgSize = () =>\n [\n 'auto',\n 'cover',\n 'contain',\n isArbitraryVariableSize,\n isArbitrarySize,\n { size: [isArbitraryVariable, isArbitraryValue] },\n ] as const\n const scaleGradientStopPosition = () =>\n [isPercent, isArbitraryVariableLength, isArbitraryLength] as const\n const scaleRadius = () =>\n [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n 'full',\n themeRadius,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleBorderWidth = () =>\n ['', isNumber, isArbitraryVariableLength, isArbitraryLength] as const\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'] as const\n const scaleBlendMode = () =>\n [\n 'normal',\n 'multiply',\n 'screen',\n 'overlay',\n 'darken',\n 'lighten',\n 'color-dodge',\n 'color-burn',\n 'hard-light',\n 'soft-light',\n 'difference',\n 'exclusion',\n 'hue',\n 'saturation',\n 'color',\n 'luminosity',\n ] as const\n const scaleMaskImagePosition = () =>\n [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition] as const\n const scaleBlur = () =>\n [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeBlur,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()] as const\n\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': [\n 'thin',\n 'extralight',\n 'light',\n 'normal',\n 'medium',\n 'semibold',\n 'bold',\n 'extrabold',\n 'black',\n ],\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 /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [\n {\n aspect: [\n 'auto',\n 'square',\n isFraction,\n isArbitraryValue,\n isArbitraryVariable,\n themeAspect,\n ],\n },\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 * 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': [{ 'break-after': scaleBreak() }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{ 'break-before': scaleBreak() }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{ box: ['border', 'content'] }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: [\n 'block',\n 'inline-block',\n 'inline',\n 'flex',\n 'inline-flex',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'flow-root',\n 'grid',\n 'inline-grid',\n 'contents',\n 'list-item',\n 'hidden',\n ],\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: [{ float: ['right', 'left', 'none', 'start', 'end'] }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }],\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': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{ object: scalePositionWithArbitrary() }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{ overflow: scaleOverflow() }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{ 'overflow-x': scaleOverflow() }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{ 'overflow-y': scaleOverflow() }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{ overscroll: scaleOverscroll() }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{ 'overscroll-x': scaleOverscroll() }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{ 'overscroll-y': scaleOverscroll() }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{ inset: scaleInset() }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{ 'inset-x': scaleInset() }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{ 'inset-y': scaleInset() }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{ start: scaleInset() }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{ end: scaleInset() }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{ top: scaleInset() }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{ right: scaleInset() }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{ bottom: scaleInset() }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{ left: scaleInset() }],\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: [{ z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] }],\n\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [\n {\n basis: [\n isFraction,\n 'full',\n 'auto',\n themeContainer,\n ...scaleUnambiguousSpacing(),\n ],\n },\n ],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{ flex: ['nowrap', 'wrap', 'wrap-reverse'] }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{ flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue] }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{ grow: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{ shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [\n {\n order: [\n isInteger,\n 'first',\n 'last',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{ 'grid-cols': scaleGridTemplateColsRows() }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{ col: scaleGridColRowStartAndEnd() }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{ 'col-start': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{ 'col-end': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{ 'grid-rows': scaleGridTemplateColsRows() }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{ row: scaleGridColRowStartAndEnd() }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{ 'row-start': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{ 'row-end': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{ 'auto-cols': scaleGridAutoColsRows() }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{ 'auto-rows': scaleGridAutoColsRows() }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{ gap: scaleUnambiguousSpacing() }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{ 'gap-x': scaleUnambiguousSpacing() }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{ 'gap-y': scaleUnambiguousSpacing() }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{ justify: [...scaleAlignPrimaryAxis(), 'normal'] }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{ 'justify-items': [...scaleAlignSecondaryAxis(), 'normal'] }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{ 'justify-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{ content: ['normal', ...scaleAlignPrimaryAxis()] }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{ items: [...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [\n { self: ['auto', ...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] },\n ],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{ 'place-content': scaleAlignPrimaryAxis() }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{ 'place-items': [...scaleAlignSecondaryAxis(), 'baseline'] }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{ 'place-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{ p: scaleUnambiguousSpacing() }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{ px: scaleUnambiguousSpacing() }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{ py: scaleUnambiguousSpacing() }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{ ps: scaleUnambiguousSpacing() }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{ pe: scaleUnambiguousSpacing() }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{ pt: scaleUnambiguousSpacing() }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{ pr: scaleUnambiguousSpacing() }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{ pb: scaleUnambiguousSpacing() }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{ pl: scaleUnambiguousSpacing() }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{ m: scaleMargin() }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{ mx: scaleMargin() }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{ my: scaleMargin() }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{ ms: scaleMargin() }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{ me: scaleMargin() }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{ mt: scaleMargin() }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{ mr: scaleMargin() }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{ mb: scaleMargin() }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{ ml: scaleMargin() }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{ 'space-x': scaleUnambiguousSpacing() }],\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': [{ 'space-y': scaleUnambiguousSpacing() }],\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 // --------------\n // --- Sizing ---\n // --------------\n\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{ size: scaleSizing() }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{ w: [themeContainer, 'screen', ...scaleSizing()] }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [\n {\n 'min-w': [\n themeContainer,\n 'screen',\n /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none',\n ...scaleSizing(),\n ],\n },\n ],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [\n {\n 'max-w': [\n themeContainer,\n 'screen',\n 'none',\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose',\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n { screen: [themeBreakpoint] },\n ...scaleSizing(),\n ],\n },\n ],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{ h: ['screen', 'lh', ...scaleSizing()] }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{ 'min-h': ['screen', 'lh', 'none', ...scaleSizing()] }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{ 'max-h': ['screen', 'lh', ...scaleSizing()] }],\n\n // ------------------\n // --- Typography ---\n // ------------------\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': [{ font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber] }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [\n {\n 'font-stretch': [\n 'ultra-condensed',\n 'extra-condensed',\n 'condensed',\n 'semi-condensed',\n 'normal',\n 'semi-expanded',\n 'expanded',\n 'extra-expanded',\n 'ultra-expanded',\n isPercent,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{ font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont] }],\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: [{ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue] }],\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 {\n leading: [\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading,\n ...scaleUnambiguousSpacing(),\n ],\n },\n ],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{ 'list-image': ['none', isArbitraryVariable, isArbitraryValue] }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{ list: ['inside', 'outside'] }],\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': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }],\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': [{ placeholder: scaleColor() }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{ text: scaleColor() }],\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': [{ decoration: [...scaleLineStyle(), 'wavy'] }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [\n {\n decoration: [\n isNumber,\n 'from-font',\n 'auto',\n isArbitraryVariable,\n isArbitraryLength,\n ],\n },\n ],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{ decoration: scaleColor() }],\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': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{ indent: scaleUnambiguousSpacing() }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [\n {\n align: [\n 'baseline',\n 'top',\n 'middle',\n 'bottom',\n 'text-top',\n 'text-bottom',\n 'sub',\n 'super',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\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: [{ break: ['normal', 'words', 'all', 'keep'] }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{ wrap: ['break-word', 'anywhere', 'normal'] }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{ hyphens: ['none', 'manual', 'auto'] }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{ content: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n // -------------------\n // --- Backgrounds ---\n // -------------------\n\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{ bg: scaleBgPosition() }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{ bg: scaleBgRepeat() }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{ bg: scaleBgSize() }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [\n {\n bg: [\n 'none',\n {\n linear: [\n { to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] },\n isInteger,\n isArbitraryVariable,\n isArbitraryValue,\n ],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue],\n },\n isArbitraryVariableImage,\n isArbitraryImage,\n ],\n },\n ],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{ bg: scaleColor() }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{ from: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{ via: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{ to: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{ from: scaleColor() }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{ via: scaleColor() }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{ to: scaleColor() }],\n\n // ---------------\n // --- Borders ---\n // ---------------\n\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{ rounded: scaleRadius() }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{ 'rounded-s': scaleRadius() }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{ 'rounded-e': scaleRadius() }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{ 'rounded-t': scaleRadius() }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{ 'rounded-r': scaleRadius() }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{ 'rounded-b': scaleRadius() }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{ 'rounded-l': scaleRadius() }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{ 'rounded-ss': scaleRadius() }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{ 'rounded-se': scaleRadius() }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{ 'rounded-ee': scaleRadius() }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{ 'rounded-es': scaleRadius() }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{ 'rounded-tl': scaleRadius() }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{ 'rounded-tr': scaleRadius() }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{ 'rounded-br': scaleRadius() }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{ 'rounded-bl': scaleRadius() }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{ border: scaleBorderWidth() }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{ 'border-x': scaleBorderWidth() }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{ 'border-y': scaleBorderWidth() }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{ 'border-s': scaleBorderWidth() }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{ 'border-e': scaleBorderWidth() }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{ 'border-t': scaleBorderWidth() }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{ 'border-r': scaleBorderWidth() }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{ 'border-b': scaleBorderWidth() }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{ 'border-l': scaleBorderWidth() }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{ 'divide-x': scaleBorderWidth() }],\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': [{ 'divide-y': scaleBorderWidth() }],\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': [{ border: [...scaleLineStyle(), 'hidden', 'none'] }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{ divide: [...scaleLineStyle(), 'hidden', 'none'] }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{ border: scaleColor() }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{ 'border-x': scaleColor() }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{ 'border-y': scaleColor() }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{ 'border-s': scaleColor() }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{ 'border-e': scaleColor() }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{ 'border-t': scaleColor() }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{ 'border-r': scaleColor() }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{ 'border-b': scaleColor() }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{ 'border-l': scaleColor() }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{ divide: scaleColor() }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{ outline: [...scaleLineStyle(), 'none', 'hidden'] }],\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': [{ outline: scaleColor() }],\n\n // ---------------\n // --- Effects ---\n // ---------------\n\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [\n {\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{ shadow: scaleColor() }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [\n {\n 'inset-shadow': [\n 'none',\n themeInsetShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\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': [{ 'inset-shadow': scaleColor() }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{ ring: scaleBorderWidth() }],\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': [{ ring: scaleColor() }],\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': [{ 'ring-offset': [isNumber, isArbitraryLength] }],\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': [{ 'ring-offset': scaleColor() }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{ 'inset-ring': scaleBorderWidth() }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{ 'inset-ring': scaleColor() }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [\n {\n 'text-shadow': [\n 'none',\n themeTextShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{ 'text-shadow': scaleColor() }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{ opacity: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{ 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter'] }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{ 'bg-blend': scaleBlendMode() }],\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 /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{ mask: ['add', 'subtract', 'intersect', 'exclude'] }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{ 'mask-linear': [isNumber] }],\n 'mask-image-linear-from-pos': [{ 'mask-linear-from': scaleMaskImagePosition() }],\n 'mask-image-linear-to-pos': [{ 'mask-linear-to': scaleMaskImagePosition() }],\n 'mask-image-linear-from-color': [{ 'mask-linear-from': scaleColor() }],\n 'mask-image-linear-to-color': [{ 'mask-linear-to': scaleColor() }],\n 'mask-image-t-from-pos': [{ 'mask-t-from': scaleMaskImagePosition() }],\n 'mask-image-t-to-pos': [{ 'mask-t-to': scaleMaskImagePosition() }],\n 'mask-image-t-from-color': [{ 'mask-t-from': scaleColor() }],\n 'mask-image-t-to-color': [{ 'mask-t-to': scaleColor() }],\n 'mask-image-r-from-pos': [{ 'mask-r-from': scaleMaskImagePosition() }],\n 'mask-image-r-to-pos': [{ 'mask-r-to': scaleMaskImagePosition() }],\n 'mask-image-r-from-color': [{ 'mask-r-from': scaleColor() }],\n 'mask-image-r-to-color': [{ 'mask-r-to': scaleColor() }],\n 'mask-image-b-from-pos': [{ 'mask-b-from': scaleMaskImagePosition() }],\n 'mask-image-b-to-pos': [{ 'mask-b-to': scaleMaskImagePosition() }],\n 'mask-image-b-from-color': [{ 'mask-b-from': scaleColor() }],\n 'mask-image-b-to-color': [{ 'mask-b-to': scaleColor() }],\n 'mask-image-l-from-pos': [{ 'mask-l-from': scaleMaskImagePosition() }],\n 'mask-image-l-to-pos': [{ 'mask-l-to': scaleMaskImagePosition() }],\n 'mask-image-l-from-color': [{ 'mask-l-from': scaleColor() }],\n 'mask-image-l-to-color': [{ 'mask-l-to': scaleColor() }],\n 'mask-image-x-from-pos': [{ 'mask-x-from': scaleMaskImagePosition() }],\n 'mask-image-x-to-pos': [{ 'mask-x-to': scaleMaskImagePosition() }],\n 'mask-image-x-from-color': [{ 'mask-x-from': scaleColor() }],\n 'mask-image-x-to-color': [{ 'mask-x-to': scaleColor() }],\n 'mask-image-y-from-pos': [{ 'mask-y-from': scaleMaskImagePosition() }],\n 'mask-image-y-to-pos': [{ 'mask-y-to': scaleMaskImagePosition() }],\n 'mask-image-y-from-color': [{ 'mask-y-from': scaleColor() }],\n 'mask-image-y-to-color': [{ 'mask-y-to': scaleColor() }],\n 'mask-image-radial': [{ 'mask-radial': [isArbitraryVariable, isArbitraryValue] }],\n 'mask-image-radial-from-pos': [{ 'mask-radial-from': scaleMaskImagePosition() }],\n 'mask-image-radial-to-pos': [{ 'mask-radial-to': scaleMaskImagePosition() }],\n 'mask-image-radial-from-color': [{ 'mask-radial-from': scaleColor() }],\n 'mask-image-radial-to-color': [{ 'mask-radial-to': scaleColor() }],\n 'mask-image-radial-shape': [{ 'mask-radial': ['circle', 'ellipse'] }],\n 'mask-image-radial-size': [\n { 'mask-radial': [{ closest: ['side', 'corner'], farthest: ['side', 'corner'] }] },\n ],\n 'mask-image-radial-pos': [{ 'mask-radial-at': scalePosition() }],\n 'mask-image-conic-pos': [{ 'mask-conic': [isNumber] }],\n 'mask-image-conic-from-pos': [{ 'mask-conic-from': scaleMaskImagePosition() }],\n 'mask-image-conic-to-pos': [{ 'mask-conic-to': scaleMaskImagePosition() }],\n 'mask-image-conic-from-color': [{ 'mask-conic-from': scaleColor() }],\n 'mask-image-conic-to-color': [{ 'mask-conic-to': scaleColor() }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{ mask: ['alpha', 'luminance', 'match'] }],\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': [{ mask: scaleBgPosition() }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{ mask: scaleBgRepeat() }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{ mask: scaleBgSize() }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{ 'mask-type': ['alpha', 'luminance'] }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{ mask: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n // ---------------\n // --- Filters ---\n // ---------------\n\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [\n {\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{ blur: scaleBlur() }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{ brightness: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{ contrast: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [\n {\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeDropShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{ 'drop-shadow': scaleColor() }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{ grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{ 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{ invert: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{ saturate: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{ sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [\n {\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{ 'backdrop-blur': scaleBlur() }],\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 // --------------\n // --- Tables ---\n // --------------\n\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{ border: ['collapse', 'separate'] }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{ 'border-spacing': scaleUnambiguousSpacing() }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{ 'border-spacing-x': scaleUnambiguousSpacing() }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{ 'border-spacing-y': scaleUnambiguousSpacing() }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{ table: ['auto', 'fixed'] }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{ caption: ['top', 'bottom'] }],\n\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [\n {\n transition: [\n '',\n 'all',\n 'colors',\n 'opacity',\n 'shadow',\n 'transform',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{ transition: ['normal', 'discrete'] }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{ duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue] }],\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: [{ delay: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{ animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue] }],\n\n // ------------------\n // --- Transforms ---\n // ------------------\n\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{ backface: ['hidden', 'visible'] }],\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': [{ 'perspective-origin': scalePositionWithArbitrary() }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{ rotate: scaleRotate() }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{ 'rotate-x': scaleRotate() }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{ 'rotate-y': scaleRotate() }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{ 'rotate-z': scaleRotate() }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{ scale: scaleScale() }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{ 'scale-x': scaleScale() }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{ 'scale-y': scaleScale() }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{ 'scale-z': scaleScale() }],\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: [{ skew: scaleSkew() }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{ 'skew-x': scaleSkew() }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{ 'skew-y': scaleSkew() }],\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': [{ origin: scalePositionWithArbitrary() }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{ transform: ['3d', 'flat'] }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{ translate: scaleTranslate() }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{ 'translate-x': scaleTranslate() }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{ 'translate-y': scaleTranslate() }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{ 'translate-z': scaleTranslate() }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{ accent: scaleColor() }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{ appearance: ['none', 'auto'] }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{ caret: scaleColor() }],\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 {\n cursor: [\n 'auto',\n 'default',\n 'pointer',\n 'wait',\n 'text',\n 'move',\n 'help',\n 'not-allowed',\n 'none',\n 'context-menu',\n 'progress',\n 'cell',\n 'crosshair',\n 'vertical-text',\n 'alias',\n 'copy',\n 'no-drop',\n 'grab',\n 'grabbing',\n 'all-scroll',\n 'col-resize',\n 'row-resize',\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n 'ew-resize',\n 'ns-resize',\n 'nesw-resize',\n 'nwse-resize',\n 'zoom-in',\n 'zoom-out',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{ 'field-sizing': ['fixed', 'content'] }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{ 'pointer-events': ['auto', 'none'] }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{ resize: ['none', '', 'y', 'x'] }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{ scroll: ['auto', 'smooth'] }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{ 'scroll-m': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{ 'scroll-mx': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{ 'scroll-my': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{ 'scroll-ms': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{ 'scroll-me': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{ 'scroll-mt': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{ 'scroll-mr': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{ 'scroll-mb': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{ 'scroll-ml': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{ 'scroll-p': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{ 'scroll-px': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{ 'scroll-py': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{ 'scroll-ps': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{ 'scroll-pe': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{ 'scroll-pt': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{ 'scroll-pr': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{ 'scroll-pb': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{ 'scroll-pl': scaleUnambiguousSpacing() }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{ snap: ['normal', 'always'] }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{ snap: ['mandatory', 'proximity'] }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{ touch: ['auto', 'none', 'manipulation'] }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{ 'touch-pan': ['x', 'left', 'right'] }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{ 'touch-pan': ['y', 'up', 'down'] }],\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: [{ select: ['none', 'text', 'all', 'auto'] }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [\n {\n 'will-change': [\n 'auto',\n 'scroll',\n 'contents',\n 'transform',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n\n // -----------\n // --- SVG ---\n // -----------\n\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{ fill: ['none', ...scaleColor()] }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [\n {\n stroke: [\n isNumber,\n isArbitraryVariableLength,\n isArbitraryLength,\n isArbitraryNumber,\n ],\n },\n ],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{ stroke: ['none', ...scaleColor()] }],\n\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }],\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', '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', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': [\n 'fvn-ordinal',\n 'fvn-slashed-zero',\n 'fvn-figure',\n 'fvn-spacing',\n 'fvn-fraction',\n ],\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: [\n 'rounded-s',\n 'rounded-e',\n 'rounded-t',\n 'rounded-r',\n 'rounded-b',\n 'rounded-l',\n 'rounded-ss',\n 'rounded-se',\n 'rounded-ee',\n 'rounded-es',\n 'rounded-tl',\n 'rounded-tr',\n 'rounded-br',\n 'rounded-bl',\n ],\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': [\n 'border-w-x',\n 'border-w-y',\n 'border-w-s',\n 'border-w-e',\n 'border-w-t',\n 'border-w-r',\n 'border-w-b',\n 'border-w-l',\n ],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': [\n 'border-color-x',\n 'border-color-y',\n 'border-color-s',\n 'border-color-e',\n 'border-color-t',\n 'border-color-r',\n 'border-color-b',\n 'border-color-l',\n ],\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': [\n 'scroll-mx',\n 'scroll-my',\n 'scroll-ms',\n 'scroll-me',\n 'scroll-mt',\n 'scroll-mr',\n 'scroll-mb',\n 'scroll-ml',\n ],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': [\n 'scroll-px',\n 'scroll-py',\n 'scroll-ps',\n 'scroll-pe',\n 'scroll-pt',\n 'scroll-pr',\n 'scroll-pb',\n 'scroll-pl',\n ],\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 orderSensitiveModifiers: [\n '*',\n '**',\n 'after',\n 'backdrop',\n 'before',\n 'details-content',\n 'file',\n 'first-letter',\n 'first-line',\n 'marker',\n 'placeholder',\n 'selection',\n ],\n } as const satisfies Config<DefaultClassGroupIds, DefaultThemeGroupIds>\n}\n","import { AnyConfig, ConfigExtension, NoInfer } from './types'\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 */\nexport const mergeConfigs = <ClassGroupIds extends string, ThemeGroupIds extends string = never>(\n baseConfig: AnyConfig,\n {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {},\n }: ConfigExtension<ClassGroupIds, ThemeGroupIds>,\n) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize)\n overrideProperty(baseConfig, 'prefix', prefix)\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName)\n\n overrideConfigProperties(baseConfig.theme, override.theme)\n overrideConfigProperties(baseConfig.classGroups, override.classGroups)\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups)\n overrideConfigProperties(\n baseConfig.conflictingClassGroupModifiers,\n override.conflictingClassGroupModifiers,\n )\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers)\n\n mergeConfigProperties(baseConfig.theme, extend.theme)\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups)\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups)\n mergeConfigProperties(\n baseConfig.conflictingClassGroupModifiers,\n extend.conflictingClassGroupModifiers,\n )\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers')\n\n return baseConfig\n}\n\nconst overrideProperty = <T extends object, K extends keyof T>(\n baseObject: T,\n overrideKey: K,\n overrideValue: T[K] | undefined,\n) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue\n }\n}\n\nconst overrideConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n overrideObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key])\n }\n }\n}\n\nconst mergeConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n mergeObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key)\n }\n }\n}\n\nconst mergeArrayProperties = <Key extends string>(\n baseObject: Partial<Record<NoInfer<Key>, readonly unknown[]>>,\n mergeObject: Partial<Record<NoInfer<Key>, readonly unknown[]>>,\n key: Key,\n) => {\n const mergeValue = mergeObject[key]\n\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue\n }\n}\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\nimport { mergeConfigs } from './merge-configs'\nimport { AnyConfig, ConfigExtension, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\n\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\n\nexport const extendTailwindMerge = <\n AdditionalClassGroupIds extends string = never,\n AdditionalThemeGroupIds extends string = never,\n>(\n configExtension:\n | ConfigExtension<\n DefaultClassGroupIds | AdditionalClassGroupIds,\n DefaultThemeGroupIds | AdditionalThemeGroupIds\n >\n | CreateConfigSubsequent,\n ...createConfig: CreateConfigSubsequent[]\n) =>\n typeof configExtension === 'function'\n ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig)\n : createTailwindMerge(\n () => mergeConfigs(getDefaultConfig(), configExtension),\n ...createConfig,\n )\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\n\nexport const twMerge = createTailwindMerge(getDefaultConfig)\n","import * as React from 'react';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlot(ownerName: string) {\n const SlotClone = createSlotClone(ownerName);\n const Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children;\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement)\n ? (newElement.props as { children: React.ReactNode }).children\n : null;\n } else {\n return child;\n }\n });\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {React.isValidElement(newElement)\n ? React.cloneElement(newElement, undefined, newChildren)\n : null}\n </SlotClone>\n );\n }\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {children}\n </SlotClone>\n );\n });\n\n Slot.displayName = `${ownerName}.Slot`;\n return Slot;\n}\n\nconst Slot = createSlot('Slot');\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotCloneProps {\n children: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ function createSlotClone(ownerName: string) {\n const SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props = mergeProps(slotProps, children.props as AnyProps);\n // do not pass ref to React.Fragment for React 19 compatibility\n if (children.type !== React.Fragment) {\n props.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props);\n }\n\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst SLOTTABLE_IDENTIFIER = Symbol('radix.slottable');\n\ninterface SlottableProps {\n children: React.ReactNode;\n}\n\ninterface SlottableComponent extends React.FC<SlottableProps> {\n __radixId: symbol;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlottable(ownerName: string) {\n const Slottable: SlottableComponent = ({ children }) => {\n return <>{children}</>;\n };\n Slottable.displayName = `${ownerName}.Slottable`;\n Slottable.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable;\n}\n\nconst Slottable = createSlottable('Slottable');\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype AnyProps = Record<string, any>;\n\nfunction isSlottable(\n child: React.ReactNode\n): child is React.ReactElement<SlottableProps, typeof Slottable> {\n return (\n React.isValidElement(child) &&\n typeof child.type === 'function' &&\n '__radixId' in child.type &&\n child.type.__radixId === SLOTTABLE_IDENTIFIER\n );\n}\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n // all child props should override\n const overrideProps = { ...childProps };\n\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n // if the handler exists on both, we compose them\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: unknown[]) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n }\n // but if it exists only on the slot, we use only this one\n else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n }\n // if it's `style`, we merge them\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\n return { ...slotProps, ...overrideProps };\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element.props as { ref?: React.Ref<unknown> }).ref;\n }\n\n // Not DEV\n return (element.props as { ref?: React.Ref<unknown> }).ref || (element as any).ref;\n}\n\nexport {\n Slot,\n Slottable,\n //\n Slot as Root,\n};\nexport type { SlotProps };\n","import * as React from 'react';\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === 'function') {\n return ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\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\n // React <19 will log an error to the console if a callback ref returns a\n // value. We don't use ref cleanups internally so this will only happen if a\n // user's ref callback returns a value, which we only expect if they are\n // using the cleanup functionality added in React 19.\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}\n\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\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 { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","'use client'\n\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\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-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 cursor-pointer [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-foreground hover:text-white',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n outline: 'bg-foreground text-white hover:bg-[oklch(0.20_0.02_30)]',\n secondary: 'bg-foreground text-white hover:bg-[oklch(0.20_0.02_30)]',\n ghost: 'hover:bg-foreground hover:text-white',\n link: 'text-foreground underline-offset-4 hover:underline',\n onDark: 'bg-white/10 text-white border border-white/20 shadow-sm hover:bg-white/20',\n onDarkOutline: 'bg-transparent text-white border border-white/30 hover:bg-white/10',\n },\n size: {\n default: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-md px-3 text-xs',\n lg: 'h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button'\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\n\nimport { cn } from './lib/cn'\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"bg-muted text-card-foreground flex flex-col gap-6 rounded-xl py-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","\"use client\"\n\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\nimport * as React from \"react\"\n\nimport { cn } from './lib/cn'\n\nconst Collapsible = CollapsiblePrimitive.Root\n\nconst CollapsibleTrigger = React.forwardRef<\n React.ElementRef<typeof CollapsiblePrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <CollapsiblePrimitive.Trigger\n ref={ref}\n className={cn(\"[&[data-state=open]>svg]:rotate-180\", className)}\n {...props}\n />\n))\nCollapsibleTrigger.displayName = CollapsiblePrimitive.Trigger.displayName\n\nconst CollapsibleContent = React.forwardRef<\n React.ElementRef<typeof CollapsiblePrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Content>\n>(({ className, ...props }, ref) => (\n <CollapsiblePrimitive.Content\n ref={ref}\n className={cn(\n [\n // Ensure closed content is not visible at rest\n \"overflow-hidden data-[state=closed]:h-0 data-[state=open]:h-auto\",\n // Animate between states (requires globals.css keyframes)\n \"data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down\",\n ].join(\" \"),\n className,\n )}\n {...props}\n />\n))\nCollapsibleContent.displayName = CollapsiblePrimitive.Content.displayName\n\nexport { Collapsible, CollapsibleContent, CollapsibleTrigger }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from './lib/cn'\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from './lib/cn'\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-foreground focus:text-white data-[state=open]:bg-foreground data-[state=open]:text-white [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border-[3px] border-foreground bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName\n\ntype DropdownMenuContentProps = React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content> & {\n container?: HTMLElement | null\n}\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n DropdownMenuContentProps\n>(({ className, sideOffset = 4, container, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal {...(container ? { container } : {})}>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border-[3px] border-foreground bg-popover p-1 text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-foreground focus:text-white data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-foreground focus:text-white data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-foreground focus:text-white data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n Controller,\n FormProvider,\n useFormContext,\n useFormState,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from \"react-hook-form\"\n\nimport { cn } from './lib/cn'\nimport { Label } from './label'\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState } = useFormContext()\n const formState = useFormState({ name: fieldContext.name })\n const fieldState = getFieldState(fieldContext.name, formState)\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\")\n }\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n)\n\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n data-slot=\"form-item\"\n className={cn(\"mb-6 last:mb-0\", className)}\n {...props}\n />\n </FormItemContext.Provider>\n )\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn(\"data-[error=true]:text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n )\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(\"text-muted-foreground text-sm mb-0\", className)}\n {...props}\n />\n )\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message ?? \"\") : props.children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn(\"text-destructive text-sm\", className)}\n {...props}\n >\n {body}\n </p>\n )\n}\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from './lib/cn'\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","import * as React from \"react\"\n\nimport { cn } from './lib/cn'\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border-2 bg-white px-3 py-1 text-base shadow-xs transition-[color,border-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring\",\n \"aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from './lib/cn'\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverAnchor = PopoverPrimitive.Anchor\n\ntype PopoverContentProps = React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\n container?: HTMLElement | null\n}\n\nfunction getSafePortalContainer(container?: HTMLElement | null): HTMLElement | undefined {\n if (typeof document === 'undefined') return undefined\n if (!container) return undefined\n // React 19 disallows portaling into a container that already has React\n // children. Ensure we mount into a dedicated empty child element.\n const ATTR = 'data-portal-root'\n let target = container.querySelector<HTMLElement>(`[${ATTR}]`)\n if (!target) {\n target = document.createElement('div')\n target.setAttribute(ATTR, '')\n container.appendChild(target)\n }\n return target\n}\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n PopoverContentProps\n>(({ className, align = \"center\", sideOffset = 4, container, ...props }, ref) => (\n <PopoverPrimitive.Portal {...(container ? { container: getSafePortalContainer(container) } : {})}>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","'use client';\n\nimport { forwardRef, useEffect, useMemo, useRef, useState, type ForwardedRef, type MutableRefObject } from 'react';\nimport { HexColorPicker } from 'react-colorful';\n\nimport type { ButtonProps } from './button';\nimport { Button } from './button';\nimport { Input } from './input';\nimport { Popover, PopoverContent, PopoverTrigger } from './popover';\nimport { cn } from './lib';\n\ninterface ColorPickerProps {\n value: string;\n onChange: (value: string) => void;\n onBlur?: () => void;\n label?: string;\n}\n\nfunction useForwardedRef<T>(ref: ForwardedRef<T>) {\n const innerRef = useRef<T | null>(null);\n\n useEffect(() => {\n if (!ref) return;\n if (typeof ref === 'function') {\n ref(innerRef.current);\n } else {\n (ref as MutableRefObject<T | null>).current = innerRef.current;\n }\n });\n return innerRef;\n}\n\nconst ColorPicker = forwardRef<\n HTMLInputElement,\n Omit<ButtonProps, 'value' | 'onChange' | 'onBlur'> & ColorPickerProps & ButtonProps\n>(\n (\n { disabled, value, onChange, onBlur, name, className, size, label, ...props },\n forwardedRef,\n ) => {\n const ref = useForwardedRef(forwardedRef);\n const [open, setOpen] = useState(false);\n\n const parsedValue = useMemo(() => {\n return value || '#FFFFFF';\n }, [value]);\n\n return (\n <div className={cn('inline-block', props.style ? '' : '')}>\n <Popover onOpenChange={setOpen} open={open}>\n <PopoverTrigger asChild disabled={disabled} onBlur={onBlur}>\n <Button\n {...props}\n className={cn('block', className)}\n name={name}\n onClick={() => {\n setOpen(true);\n }}\n size={size}\n style={{\n backgroundColor: parsedValue,\n ...(props.style as any),\n }}\n variant=\"outline\"\n >\n <div />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-full\">\n <HexColorPicker color={parsedValue} onChange={onChange} />\n <Input\n maxLength={7}\n onChange={(e) => {\n onChange(e?.currentTarget?.value);\n }}\n ref={ref}\n value={parsedValue}\n />\n </PopoverContent>\n </Popover>\n {label ? <div className=\"mt-1 text-xs text-gray-600\">{label}</div> : null}\n </div>\n );\n },\n);\nColorPicker.displayName = 'ColorPicker';\n\nexport { ColorPicker };\n","'use client';\n\nimport * as React from 'react';\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\n\nimport { Button } from './button';\nimport { cn } from './lib';\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype CarouselViewportRef = UseEmblaCarouselType[0];\ntype CarouselOptions = Parameters<typeof useEmblaCarousel>[0];\ntype CarouselPlugin = Parameters<typeof useEmblaCarousel>[1] extends Array<infer Plugin>\n ? Plugin\n : never;\n\ntype CarouselContextProps = {\n carouselRef: CarouselViewportRef;\n api: CarouselApi | undefined;\n orientation: 'horizontal' | 'vertical';\n};\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nexport function useCarousel() {\n const context = React.useContext(CarouselContext);\n if (!context) {\n throw new Error('useCarousel must be used within <Carousel>');\n }\n return context;\n}\n\nexport interface CarouselProps extends React.HTMLAttributes<HTMLDivElement> {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin[];\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const Carousel = React.forwardRef<HTMLDivElement, CarouselProps>(\n (\n { opts, plugins, orientation = 'horizontal', className, children, ...props },\n ref,\n ) => {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === 'horizontal' ? 'x' : 'y',\n },\n plugins,\n );\n\n return (\n <CarouselContext.Provider value={{ carouselRef, api, orientation }}>\n <div\n ref={ref}\n className={cn('relative', orientation === 'vertical' && 'flex flex-col', className)}\n {...props}\n >\n <div ref={carouselRef} className=\"overflow-hidden\">\n <div className=\"flex\">{children}</div>\n </div>\n </div>\n </CarouselContext.Provider>\n );\n },\n);\nCarousel.displayName = 'Carousel';\n\nexport interface CarouselContentProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CarouselContent = React.forwardRef<HTMLDivElement, CarouselContentProps>(\n ({ className, ...props }, ref) => {\n const { orientation } = useCarousel();\n return (\n <div\n ref={ref}\n className={cn(\n 'flex',\n orientation === 'horizontal' ? 'ml-0' : '-mt-0 flex-col',\n className,\n )}\n {...props}\n />\n );\n },\n);\nCarouselContent.displayName = 'CarouselContent';\n\nexport interface CarouselItemProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CarouselItem = React.forwardRef<HTMLDivElement, CarouselItemProps>(\n ({ className, ...props }, ref) => {\n const { orientation } = useCarousel();\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-roledescription=\"slide\"\n className={cn(\n 'min-w-0 shrink-0 grow-0 basis-full',\n orientation === 'horizontal' ? 'pr-4' : 'pb-4',\n className,\n )}\n {...props}\n />\n );\n },\n);\nCarouselItem.displayName = 'CarouselItem';\n\nexport interface CarouselControlProps extends React.ComponentProps<typeof Button> {}\n\nconst Control = React.forwardRef<HTMLButtonElement, CarouselControlProps>(\n ({ className, variant = 'outline', size = 'icon', ...props }, ref) => (\n <Button ref={ref} className={cn('h-8 w-8', className)} variant={variant} size={size} {...props} />\n ),\n);\nControl.displayName = 'CarouselControl';\n\nexport const CarouselPrevious = React.forwardRef<HTMLButtonElement, CarouselControlProps>(\n ({ className, children, ...props }, ref) => {\n const { api, orientation } = useCarousel();\n const isHorizontal = orientation === 'horizontal';\n\n return (\n <Control\n ref={ref}\n className={cn(\n 'absolute z-10',\n isHorizontal\n ? 'left-2 top-1/2 -translate-y-1/2'\n : 'left-1/2 top-2 -translate-x-1/2',\n className,\n )}\n onClick={() => api?.scrollPrev()}\n {...props}\n >\n {children ?? <ChevronLeft className=\"h-4 w-4\" aria-hidden=\"true\" />}\n <span className=\"sr-only\">Previous slide</span>\n </Control>\n );\n },\n);\nCarouselPrevious.displayName = 'CarouselPrevious';\n\nexport const CarouselNext = React.forwardRef<HTMLButtonElement, CarouselControlProps>(\n ({ className, children, ...props }, ref) => {\n const { api, orientation } = useCarousel();\n const isHorizontal = orientation === 'horizontal';\n\n return (\n <Control\n ref={ref}\n className={cn(\n 'absolute z-10',\n isHorizontal\n ? 'right-2 top-1/2 -translate-y-1/2'\n : 'bottom-2 left-1/2 -translate-x-1/2',\n className,\n )}\n onClick={() => api?.scrollNext()}\n {...props}\n >\n {children ?? <ChevronRight className=\"h-4 w-4\" aria-hidden=\"true\" />}\n <span className=\"sr-only\">Next slide</span>\n </Control>\n );\n },\n);\nCarouselNext.displayName = 'CarouselNext';\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from './lib/cn'\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border-2 bg-white px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,border-color] outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n // Let Radix mount into its default portal container (document.body).\n // Avoid explicitly passing `document.body` to sidestep React 19's stricter\n // rules about reusing root containers for portals.\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-[100] max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border-2 border-input shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-primary focus:text-white [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from './lib/cn'\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from './lib/cn'\n\nfunction Sheet({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50 md:bg-transparent md:pointer-events-none\",\n className\n )}\n {...props}\n />\n )\n}\n\ntype SheetSide = \"top\" | \"bottom\" | \"left\" | \"right\"\n\nconst SIDE_CLASSNAMES: Record<SheetSide, string> = {\n top: \"inset-x-0 top-0 border-b rounded-b-lg data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top h-[88vh] md:h-auto\",\n bottom:\n \"inset-x-0 bottom-0 border-t rounded-t-lg data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom h-[88vh] md:h-auto\",\n left: [\n \"inset-x-0 bottom-0 border-t rounded-t-lg data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom h-[88vh]\",\n \"md:inset-y-0 md:left-0 md:right-auto md:top-0 md:bottom-0 md:h-full md:w-[420px] md:rounded-r-lg md:border-t-0 md:border-r\",\n \"md:data-[state=closed]:slide-out-to-left md:data-[state=open]:slide-in-from-left\",\n ].join(\" \"),\n right: [\n \"inset-x-0 bottom-0 border-t rounded-t-lg data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom h-[88vh]\",\n \"md:inset-y-0 md:right-0 md:left-auto md:top-0 md:bottom-0 md:h-full md:w-[420px] md:rounded-l-lg md:border-t-0 md:border-l\",\n \"md:data-[state=closed]:slide-out-to-right md:data-[state=open]:slide-in-from-right\",\n ].join(\" \"),\n}\n\nconst SheetContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n side?: SheetSide\n }\n>(({ className, children, showCloseButton = true, side = \"bottom\", ...props }, ref) => {\n return (\n <SheetPortal>\n <SheetOverlay />\n <DialogPrimitive.Content\n ref={ref}\n data-slot=\"sheet-content\"\n data-side={side}\n className={cn(\n \"fixed z-50 grid gap-4 bg-background p-5 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out\",\n SIDE_CLASSNAMES[side] ?? SIDE_CLASSNAMES.bottom,\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"sheet-close\"\n className=\"ring-offset-background focus:ring-ring absolute right-4 top-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </SheetPortal>\n )\n})\nSheetContent.displayName = DialogPrimitive.Content.displayName\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-base font-semibold\", className)}\n {...props}\n />\n )}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )}\n\nexport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetOverlay,\n SheetPortal,\n SheetTitle,\n SheetTrigger,\n}\n","import type { ComponentPropsWithoutRef, CSSProperties } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cn } from './lib/cn'\n\ntype SkeletonProps = ComponentPropsWithoutRef<'div'>\n\ntype Dimension = number | string | undefined\n\nconst toCssSize = (value: Dimension) => {\n if (typeof value === 'number') return `${value}px`\n return value\n}\n\nconst mergeStyle = (\n base: CSSProperties | undefined,\n additions: CSSProperties,\n): CSSProperties => ({\n ...base,\n ...additions,\n})\n\nconst SkeletonRoot = forwardRef<HTMLDivElement, SkeletonProps>(function SkeletonRoot(\n { className, style, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n data-slot=\"skeleton\"\n className={cn('animate-pulse rounded-md bg-accent', className)}\n style={style}\n {...props}\n />\n )\n})\nSkeletonRoot.displayName = 'Skeleton'\n\ninterface SkeletonTextProps extends SkeletonProps {\n width?: Dimension\n}\n\nconst SkeletonText = forwardRef<HTMLDivElement, SkeletonTextProps>(function SkeletonText(\n { width, style, className, ...props },\n ref,\n) {\n const computedStyle = width\n ? mergeStyle(style, { width: toCssSize(width) })\n : style\n return (\n <SkeletonRoot\n ref={ref}\n className={cn('h-4 rounded-sm', className)}\n style={computedStyle}\n {...props}\n />\n )\n})\nSkeletonText.displayName = 'Skeleton.Text'\n\ninterface SkeletonLineProps extends SkeletonProps {\n width?: Dimension\n height?: Dimension\n}\n\nconst SkeletonLine = forwardRef<HTMLDivElement, SkeletonLineProps>(function SkeletonLine(\n { width = '100%', height = 12, style, className, ...props },\n ref,\n) {\n const computedStyle = mergeStyle(style, {\n width: toCssSize(width),\n height: toCssSize(height),\n })\n return (\n <SkeletonRoot\n ref={ref}\n className={cn('rounded-sm', className)}\n style={computedStyle}\n {...props}\n />\n )\n})\nSkeletonLine.displayName = 'Skeleton.Line'\n\ninterface SkeletonBlockProps extends SkeletonProps {\n width?: Dimension\n height?: Dimension\n aspectRatio?: number | string\n}\n\nconst SkeletonBlock = forwardRef<HTMLDivElement, SkeletonBlockProps>(function SkeletonBlock(\n { width = '100%', height, aspectRatio, style, className, ...props },\n ref,\n) {\n const additions: CSSProperties = {\n width: toCssSize(width),\n }\n if (height) additions.height = toCssSize(height)\n if (aspectRatio) {\n additions.aspectRatio = typeof aspectRatio === 'number' ? `${aspectRatio}` : aspectRatio\n }\n return (\n <SkeletonRoot\n ref={ref}\n className={cn('w-full', className)}\n style={mergeStyle(style, additions)}\n {...props}\n />\n )\n})\nSkeletonBlock.displayName = 'Skeleton.Block'\n\ninterface SkeletonAvatarProps extends SkeletonProps {\n size?: Dimension\n}\n\nconst SkeletonAvatar = forwardRef<HTMLDivElement, SkeletonAvatarProps>(function SkeletonAvatar(\n { size = 40, style, className, ...props },\n ref,\n) {\n const computedStyle = mergeStyle(style, {\n width: toCssSize(size),\n height: toCssSize(size),\n })\n return (\n <SkeletonRoot\n ref={ref}\n className={cn('rounded-full', className)}\n style={computedStyle}\n {...props}\n />\n )\n})\nSkeletonAvatar.displayName = 'Skeleton.Avatar'\n\ninterface SkeletonBadgeProps extends SkeletonProps {\n width?: Dimension\n}\n\nconst SkeletonBadge = forwardRef<HTMLDivElement, SkeletonBadgeProps>(function SkeletonBadge(\n { width = 72, style, className, ...props },\n ref,\n) {\n const computedStyle = width ? mergeStyle(style, { width: toCssSize(width) }) : style\n return (\n <SkeletonRoot\n ref={ref}\n className={cn('h-5 rounded-full', className)}\n style={computedStyle}\n {...props}\n />\n )\n})\nSkeletonBadge.displayName = 'Skeleton.Badge'\n\ntype SkeletonComponent = typeof SkeletonRoot & {\n Text: typeof SkeletonText\n Line: typeof SkeletonLine\n Block: typeof SkeletonBlock\n Avatar: typeof SkeletonAvatar\n Badge: typeof SkeletonBadge\n}\n\nconst Skeleton = SkeletonRoot as SkeletonComponent\n\nSkeleton.Text = SkeletonText\nSkeleton.Line = SkeletonLine\nSkeleton.Block = SkeletonBlock\nSkeleton.Avatar = SkeletonAvatar\nSkeleton.Badge = SkeletonBadge\n\nexport { Skeleton }\n","import type { HTMLAttributes } from 'react'\n\nimport { Loader2 } from 'lucide-react'\n\nimport { cn } from './lib/cn'\n\nconst sizeClasses = {\n xs: 'size-3',\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n} as const\n\nexport type SpinnerSize = keyof typeof sizeClasses\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {\n size?: SpinnerSize\n srLabel?: string\n}\n\nexport function Spinner({\n size = 'sm',\n srLabel,\n className,\n ...props\n}: SpinnerProps) {\n const accessibilityProps = srLabel\n ? { role: 'status' as const, 'aria-live': 'polite' as const }\n : { 'aria-hidden': true as const }\n\n return (\n <span\n {...accessibilityProps}\n className={cn('inline-flex items-center justify-center text-current', className)}\n {...props}\n >\n <Loader2\n aria-hidden=\"true\"\n className={cn('animate-spin motion-reduce:animate-none', sizeClasses[size])}\n />\n {srLabel ? <span className=\"sr-only\">{srLabel}</span> : null}\n </span>\n )\n}\n","'use client'\n\nimport { useEffect, useState } from 'react'\n\nimport { cn } from './lib/cn'\nimport { Spinner, type SpinnerProps } from './spinner'\n\nexport interface DelayedSpinnerProps extends SpinnerProps {\n active: boolean\n delay?: number\n keepMounted?: boolean\n}\n\nexport function DelayedSpinner({\n active,\n delay = 200,\n keepMounted = false,\n className,\n ...props\n}: DelayedSpinnerProps) {\n const [visible, setVisible] = useState(active && delay <= 0)\n useEffect(() => {\n if (!active) {\n setVisible(false)\n return\n }\n if (delay <= 0) {\n setVisible(true)\n return\n }\n const timer = window.setTimeout(() => setVisible(true), delay)\n return () => window.clearTimeout(timer)\n }, [active, delay])\n\n if (!visible && !keepMounted) {\n return null\n }\n\n return (\n <Spinner\n className={cn(!visible ? 'opacity-0' : null, className)}\n aria-hidden={!visible ? true : undefined}\n {...props}\n />\n )\n}\n","'use client'\n\nimport { forwardRef, type ReactNode } from 'react'\n\nimport { cn } from './lib/cn'\nimport { Button, type ButtonProps } from './button'\nimport { DelayedSpinner, type DelayedSpinnerProps } from './delayed-spinner'\n\ntype SpinnerPlacement = 'start' | 'end'\n\nexport interface PendingButtonProps extends ButtonProps {\n isPending: boolean\n pendingLabel?: ReactNode\n spinnerPlacement?: SpinnerPlacement\n spinnerDelay?: number\n spinnerProps?: Omit<DelayedSpinnerProps, 'active' | 'delay'>\n}\n\nexport const PendingButton = forwardRef<HTMLButtonElement, PendingButtonProps>(\n function PendingButton(\n {\n isPending,\n pendingLabel,\n spinnerPlacement = 'start',\n spinnerDelay = 200,\n spinnerProps,\n children,\n className,\n disabled,\n ...props\n },\n ref,\n ) {\n const content = isPending && pendingLabel != null ? pendingLabel : children\n const computedDisabled = disabled ?? isPending\n const renderSpinner = () => {\n const {\n className: spinnerClassName,\n size: spinnerSize,\n ...rest\n } = spinnerProps ?? {}\n return (\n <DelayedSpinner\n active={isPending}\n delay={spinnerDelay}\n size={spinnerSize ?? 'sm'}\n className={cn('text-current', spinnerClassName)}\n {...rest}\n />\n )\n }\n\n return (\n <Button\n ref={ref}\n className={cn('transition-[opacity,transform]', className)}\n aria-busy={isPending}\n data-pending={isPending ? '' : undefined}\n disabled={computedDisabled}\n {...props}\n >\n {spinnerPlacement === 'start' ? renderSpinner() : null}\n <span aria-live=\"polite\" className=\"flex items-center justify-center\">\n {content}\n </span>\n {spinnerPlacement === 'end' ? renderSpinner() : null}\n </Button>\n )\n },\n)\n","'use client'\n\nimport type { ReactElement, ReactNode } from 'react'\nimport { Suspense } from 'react'\nimport { ErrorBoundary, type FallbackProps } from 'react-error-boundary'\n\nexport type AsyncBoundaryFallback =\n | ReactElement\n | null\n | ((props: FallbackProps) => ReactElement | null)\n\ntype ErrorFallbackRender = (props: FallbackProps) => ReactElement | null\n\nexport interface AsyncBoundaryProps {\n children: ReactNode\n fallback: ReactNode\n errorFallback?: AsyncBoundaryFallback\n resetKeys?: unknown[]\n onReset?: () => void\n}\n\nconst defaultErrorFallback = ({ error }: FallbackProps) => (\n <div\n role=\"alert\"\n className=\"text-sm text-destructive\"\n >\n Something went wrong: {error.message}\n </div>\n)\n\nconst resolveFallback = (\n errorFallback: AsyncBoundaryFallback | undefined,\n): ErrorFallbackRender => {\n if (typeof errorFallback === 'function') {\n return errorFallback\n }\n return (props: FallbackProps) =>\n errorFallback ?? defaultErrorFallback(props)\n}\n\nexport function AsyncBoundary({\n children,\n fallback,\n errorFallback,\n resetKeys,\n onReset,\n}: AsyncBoundaryProps) {\n const fallbackRender = resolveFallback(errorFallback) as any\n\n return (\n <ErrorBoundary\n fallbackRender={fallbackRender}\n onReset={onReset}\n resetKeys={resetKeys}\n >\n <Suspense fallback={fallback}>{children}</Suspense>\n </ErrorBoundary>\n )\n}\n","\"use client\"\n\nimport * as React from 'react'\nimport * as SwitchPrimitive from '@radix-ui/react-switch'\n\nimport { cn } from './lib/cn'\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitive.Root\n ref={ref}\n className={cn(\n 'peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n className={cn(\n 'pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0'\n )}\n />\n </SwitchPrimitive.Root>\n))\nSwitch.displayName = SwitchPrimitive.Root.displayName\n\nexport { Switch }\n","import * as React from \"react\"\n\nimport { cn } from './lib/cn'\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border-2 border-input bg-white px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:border-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm transition-[color,border-color]\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n})\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from './lib/cn'\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline:\n \"border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n default: \"h-9 px-2 min-w-9\",\n sm: \"h-8 px-1.5 min-w-8\",\n lg: \"h-10 px-2.5 min-w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst Toggle = React.forwardRef<\n React.ElementRef<typeof TogglePrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> &\n VariantProps<typeof toggleVariants>\n>(({ className, variant, size, ...props }, ref) => (\n <TogglePrimitive.Root\n ref={ref}\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n))\n\nToggle.displayName = TogglePrimitive.Root.displayName\n\nexport { Toggle, toggleVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from './lib/cn'\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\ntype TooltipContentProps = React.ComponentProps<typeof TooltipPrimitive.Content> & {\n container?: HTMLElement | null\n}\n\nfunction getSafePortalContainer(container?: HTMLElement | null): HTMLElement | undefined {\n if (typeof document === 'undefined') return undefined\n if (!container) return undefined\n const ATTR = 'data-portal-root'\n let target = container.querySelector<HTMLElement>(`[${ATTR}]`)\n if (!target) {\n target = document.createElement('div')\n target.setAttribute(ATTR, '')\n container.appendChild(target)\n }\n return target\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n container,\n ...props\n}: TooltipContentProps) {\n return (\n <TooltipPrimitive.Portal {...(container ? { container: getSafePortalContainer(container) } : {})}>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from './lib/cn'\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-white hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80\",\n success:\n \"border-transparent bg-success text-success-foreground shadow hover:bg-success/80\",\n outline: \"text-foreground border-2 border-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }\n","\"use client\"\n\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport * as React from \"react\"\n\nimport { cn } from './lib/cn'\n\nconst Accordion = AccordionPrimitive.Root\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border-2 border-input rounded-md\", className)}\n {...props}\n />\n))\nAccordionItem.displayName = \"AccordionItem\"\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header asChild>\n <div className=\"m-0 flex w-full\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={className}\n {...props}\n >\n {children}\n </AccordionPrimitive.Trigger>\n </div>\n </AccordionPrimitive.Header>\n))\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n data-animation=\"accordion\"\n className={className}\n {...props}\n >\n {children}\n </AccordionPrimitive.Content>\n))\nAccordionContent.displayName = AccordionPrimitive.Content.displayName\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger }\n","\"use client\"\n\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDown } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from './lib/cn'\n\n/**\n * SectionAccordion - An accordion variant with title, description, and optional error badge.\n *\n * Used for settings panels and editors where each section needs contextual description.\n * Provides consistent styling with rotating chevron icon.\n */\n\nconst SectionAccordion = AccordionPrimitive.Root\n\nconst SectionAccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border-2 border-input rounded-md\", className)}\n {...props}\n />\n))\nSectionAccordionItem.displayName = \"SectionAccordionItem\"\n\ninterface SectionAccordionTriggerProps\n extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> {\n title: string\n description?: string\n invalid?: boolean\n}\n\nconst SectionAccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n SectionAccordionTriggerProps\n>(({ className, title, description, invalid, ...props }, ref) => (\n <AccordionPrimitive.Header asChild>\n <div className=\"m-0 flex w-full\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex flex-1 items-center justify-between px-4 py-3 text-left text-sm font-medium transition-all\",\n \"hover:bg-muted/50\",\n \"[&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"flex items-center gap-2\">\n {title}\n {invalid && (\n <span className=\"rounded bg-destructive/10 px-1.5 py-0.5 text-[10px] font-medium text-destructive\">\n Fix errors\n </span>\n )}\n </span>\n {description && (\n <span className=\"text-xs font-normal text-muted-foreground\">\n {description}\n </span>\n )}\n </div>\n <ChevronDown className=\"h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </div>\n </AccordionPrimitive.Header>\n))\nSectionAccordionTrigger.displayName = \"SectionAccordionTrigger\"\n\nconst SectionAccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className={cn(\n \"overflow-hidden text-sm\",\n \"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\",\n className\n )}\n {...props}\n >\n <div className=\"px-4 pb-4 pt-0\">{children}</div>\n </AccordionPrimitive.Content>\n))\nSectionAccordionContent.displayName = \"SectionAccordionContent\"\n\nexport {\n SectionAccordion,\n SectionAccordionContent,\n SectionAccordionItem,\n SectionAccordionTrigger,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\"\nimport { DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\"\n\nimport { cn } from \"./lib/utils\"\nimport { Button, buttonVariants } from \"./button\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"bg-background group/calendar p-3 [--cell-size:theme(spacing.8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-md bg-accent\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\n today: cn(\n \"bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />\n )\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon\n className={cn(\"size-4\", className)}\n {...props}\n />\n )\n }\n\n return (\n <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />\n )\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n {children}\n </div>\n </td>\n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef<HTMLButtonElement>(null)\n // React.useEffect(() => {\n // if (modifiers.focused) ref.current?.focus()\n // }, [modifiers.focused])\n\n return (\n <Button\n onClick={(e) => { e.preventDefault();\n e.stopPropagation();\n props.onClick?.(e);\n }}\n onBlur={(e) => { e.preventDefault();\n e.stopPropagation();\n props.onBlur?.(e);\n }}\n ref={ref}\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n","'use client'\n\nimport * as React from 'react'\nimport * as MenubarPrimitive from '@radix-ui/react-menubar'\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react'\n\nimport { cn } from './lib/cn'\n\nfunction Menubar({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Root>) {\n return (\n <MenubarPrimitive.Root\n data-slot=\"menubar\"\n className={cn(\n \"bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarMenu({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Menu>) {\n return <MenubarPrimitive.Menu data-slot=\"menubar-menu\" {...props} />\n}\n\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Group>) {\n return <MenubarPrimitive.Group data-slot=\"menubar-group\" {...props} />\n}\n\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Portal>) {\n return <MenubarPrimitive.Portal data-slot=\"menubar-portal\" {...props} />\n}\n\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {\n return (\n <MenubarPrimitive.RadioGroup data-slot=\"menubar-radio-group\" {...props} />\n )\n}\n\nfunction MenubarTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {\n return (\n <MenubarPrimitive.Trigger\n data-slot=\"menubar-trigger\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarContent({\n className,\n align = \"start\",\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Content>) {\n return (\n <MenubarPortal>\n <MenubarPrimitive.Content\n data-slot=\"menubar-content\"\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </MenubarPortal>\n )\n}\n\nfunction MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenubarPrimitive.Item\n data-slot=\"menubar-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {\n return (\n <MenubarPrimitive.CheckboxItem\n data-slot=\"menubar-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.CheckboxItem>\n )\n}\n\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {\n return (\n <MenubarPrimitive.RadioItem\n data-slot=\"menubar-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.RadioItem>\n )\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.Label\n data-slot=\"menubar-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Separator>) {\n return (\n <MenubarPrimitive.Separator\n data-slot=\"menubar-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction MenubarShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"menubar-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarSub({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {\n return <MenubarPrimitive.Sub data-slot=\"menubar-sub\" {...props} />\n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.SubTrigger\n data-slot=\"menubar-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </MenubarPrimitive.SubTrigger>\n )\n}\n\nfunction MenubarSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {\n return (\n <MenubarPrimitive.SubContent\n data-slot=\"menubar-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Menubar,\n MenubarPortal,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarSeparator,\n MenubarLabel,\n MenubarItem,\n MenubarShortcut,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n}\n","\"use client\";\n\nimport { useEffect, useRef, type PropsWithChildren } from 'react';\n\nimport { cn } from './lib';\n\ntype FixedBottomSurfaceVariant = 'light' | 'dark';\ntype FixedBottomSurfaceWidth = 'full' | 'centered';\n\nexport type FixedBottomSurfaceProps = PropsWithChildren<{\n className?: string;\n contentClassName?: string;\n variant?: FixedBottomSurfaceVariant;\n width?: FixedBottomSurfaceWidth;\n}>;\n\nconst SURFACE_CLASS_BY_VARIANT: Record<FixedBottomSurfaceVariant, string> = {\n light: 'z-40 border-t border-slate-200 bg-slate-100/80 text-slate-900',\n // Conservative dark overlay to guarantee contrast on top of any page surface\n dark: 'z-[60] border-t border-white/10 bg-black/70 text-slate-50',\n};\n\nconst CONTENT_CLASS_BY_WIDTH: Record<FixedBottomSurfaceWidth, string> = {\n full: 'w-full',\n centered: 'w-full max-w-5xl',\n};\n\nexport function FixedBottomSurface({\n children,\n className,\n contentClassName,\n variant = 'dark',\n width = 'centered',\n}: FixedBottomSurfaceProps) {\n const surfaceRef = useRef<HTMLDivElement>(null);\n\n // Set CSS variable for editor chrome offset so drawer doesn't overlap status bar\n useEffect(() => {\n const updateOffset = () => {\n if (surfaceRef.current) {\n const height = surfaceRef.current.offsetHeight;\n document.documentElement.style.setProperty('--builder-editor-chrome-offset', `${height}px`);\n }\n };\n\n updateOffset();\n\n // Update on resize in case content wraps differently\n const observer = new ResizeObserver(updateOffset);\n if (surfaceRef.current) {\n observer.observe(surfaceRef.current);\n }\n\n return () => {\n observer.disconnect();\n document.documentElement.style.removeProperty('--builder-editor-chrome-offset');\n };\n }, []);\n\n return (\n <div\n ref={surfaceRef}\n className={cn(\n 'fixed inset-x-0 bottom-0 backdrop-blur',\n SURFACE_CLASS_BY_VARIANT[variant],\n className,\n )}\n style={{ paddingBottom: 'env(safe-area-inset-bottom, 0px)' }}\n >\n <div className={cn('mx-auto px-4 py-3', CONTENT_CLASS_BY_WIDTH[width], contentClassName)}>{children}</div>\n </div>\n );\n}\n\n","\"use client\";\n\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n} from \"react\";\nimport { ChevronRight, X } from \"lucide-react\";\n\nimport { cn } from \"./lib/cn\";\nimport { Button } from \"./button\";\n\ntype DrawerWidth = number;\n\nconst DEFAULT_WIDTH: DrawerWidth = 420;\nconst MIN_WIDTH: DrawerWidth = 320;\nconst MAX_WIDTH: DrawerWidth = 720;\nconst WIDTH_STORAGE_KEY = 'builder.editorDrawer.width';\n\nexport type EditorDrawerSection = {\n id: string;\n title: string;\n description?: string;\n indicator?: React.ReactNode;\n defaultOpen?: boolean;\n content: React.ReactNode;\n};\n\nexport type EditorDrawerProps = {\n open: boolean;\n onOpenChange?: (next: boolean) => void;\n sections: EditorDrawerSection[];\n headerSlot?: React.ReactNode;\n footerSlot?: React.ReactNode;\n activeSectionId?: string | null;\n onActiveSectionChange?: (sectionId: string) => void;\n className?: string;\n style?: CSSProperties;\n};\n\nexport function EditorDrawer({\n open,\n onOpenChange,\n sections,\n headerSlot,\n footerSlot,\n activeSectionId,\n onActiveSectionChange,\n className,\n style,\n}: EditorDrawerProps) {\n const [width, setWidth] = useState<DrawerWidth>(DEFAULT_WIDTH);\n const [openMap, setOpenMap] = useState<Record<string, boolean>>({});\n const [isResizing, setIsResizing] = useState(false);\n const dragStartX = useRef(0);\n const dragStartWidth = useRef<DrawerWidth>(DEFAULT_WIDTH);\n\n // Load persisted width on mount (client-only)\n useEffect(() => {\n try {\n const raw = typeof window !== 'undefined' ? window.localStorage.getItem(WIDTH_STORAGE_KEY) : null;\n if (raw) {\n const parsed = Number(raw);\n if (!Number.isNaN(parsed)) {\n setWidth(Math.min(MAX_WIDTH, Math.max(MIN_WIDTH, parsed)));\n }\n }\n } catch {}\n }, []);\n\n useEffect(() => {\n if (!sections.length) return;\n setOpenMap((prev) => {\n const next = { ...prev };\n for (const section of sections) {\n if (!(section.id in next)) {\n next[section.id] = Boolean(section.defaultOpen);\n }\n }\n return next;\n });\n }, [sections]);\n\n useEffect(() => {\n if (!activeSectionId) return;\n setOpenMap((prev) => ({\n ...prev,\n [activeSectionId]: true,\n }));\n }, [activeSectionId]);\n\n const handlePointerMove = useCallback((event: PointerEvent) => {\n event.preventDefault();\n const delta = dragStartX.current - event.clientX;\n const nextWidth = Math.min(\n MAX_WIDTH,\n Math.max(MIN_WIDTH, dragStartWidth.current + delta),\n );\n setWidth(nextWidth);\n }, []);\n\n const stopResizing = useCallback(() => {\n setIsResizing(false);\n window.removeEventListener(\"pointermove\", handlePointerMove);\n window.removeEventListener(\"pointerup\", stopResizing);\n // Persist width at end of interaction\n try {\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(WIDTH_STORAGE_KEY, String(width));\n }\n } catch {}\n }, [handlePointerMove, width]);\n\n const startResizing = useCallback(\n (event: React.PointerEvent<HTMLDivElement>) => {\n if (!open) return;\n setIsResizing(true);\n dragStartX.current = event.clientX;\n dragStartWidth.current = width;\n window.addEventListener(\"pointermove\", handlePointerMove);\n window.addEventListener(\"pointerup\", stopResizing);\n },\n [handlePointerMove, open, stopResizing, width],\n );\n\n useEffect(\n () => () => {\n window.removeEventListener(\"pointermove\", handlePointerMove);\n window.removeEventListener(\"pointerup\", stopResizing);\n },\n [handlePointerMove, stopResizing],\n );\n\n const toggleSection = useCallback(\n (sectionId: string) => {\n setOpenMap((prev) => ({\n ...prev,\n [sectionId]: !prev[sectionId],\n }));\n onActiveSectionChange?.(sectionId);\n },\n [onActiveSectionChange],\n );\n\n const renderedSections = useMemo(\n () =>\n sections.map((section) => {\n const expanded = Boolean(openMap[section.id]);\n return (\n <section\n key={section.id}\n className=\"overflow-hidden\"\n >\n <header>\n <button\n type=\"button\"\n onClick={() => toggleSection(section.id)}\n className={cn(\n \"flex w-full items-center gap-3 px-4 py-3 text-left text-sm\",\n expanded ? \"bg-white/5\" : \"\",\n )}\n aria-expanded={expanded}\n >\n <ChevronRight\n className={cn(\n \"h-4 w-4 transition-transform\",\n expanded ? \"rotate-90\" : \"\",\n )}\n />\n <div className=\"flex flex-1 flex-col gap-1\">\n <span>{section.title}</span>\n {section.description ? (\n <span className=\"text-xs font-normal text-slate-400\">\n {section.description}\n </span>\n ) : null}\n </div>\n {section.indicator ? (\n <div className=\"text-xs text-slate-300\">{section.indicator}</div>\n ) : null}\n </button>\n </header>\n <div\n className={cn(\n \"grid transition-[grid-template-rows] duration-200 ease-out\",\n expanded ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\",\n )}\n >\n <div className=\"overflow-hidden\">\n <div className=\"px-4 py-4 text-sm text-slate-100\">\n {section.content}\n </div>\n </div>\n </div>\n </section>\n );\n }),\n [openMap, sections, toggleSection],\n );\n\n const drawerWidthVar = `${width}px`;\n const resolvedStyle = useMemo<React.CSSProperties | undefined>(() => {\n const offset = \"var(--builder-editor-chrome-offset, 0px)\";\n if (style) {\n return {\n bottom: offset,\n ...style,\n };\n }\n return {\n bottom: offset,\n };\n }, [style]);\n\n return (\n <div\n className={cn(\n \"pointer-events-none fixed inset-0 z-[75] transition\",\n open ? \"pointer-events-auto\" : \"pointer-events-none\",\n className,\n )}\n style={resolvedStyle}\n data-editor-drawer={open ? \"open\" : \"closed\"}\n >\n <div\n className={cn(\n \"absolute inset-y-0 right-0 flex justify-end transition-transform duration-200 ease-out\",\n open ? \"translate-x-0\" : \"translate-x-full\",\n )}\n >\n <div\n className=\"relative flex h-full flex-col border-l shadow-2xl backdrop-blur bg-background/95\"\n style={{ width: drawerWidthVar }}\n >\n <div className=\"flex items-center justify-between border-b border-white/10 px-4 py-3\">\n <div className=\"flex items-center gap-3 text-sm font-semibold\">\n <span>Editor</span>\n {headerSlot}\n </div>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => onOpenChange?.(false)}\n aria-label=\"Close editor drawer\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n\n <div className=\"flex-1 overflow-y-auto px-4 py-4\">\n <div className=\"flex flex-col gap-3\">{renderedSections}</div>\n </div>\n\n {footerSlot ? (\n <div className=\"border-t px-4 py-3\">{footerSlot}</div>\n ) : null}\n\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n tabIndex={0}\n className={cn(\n \"absolute left-0 top-0 h-full w-1 cursor-ew-resize rounded-full\",\n isResizing ? \"bg-black/20\" : \"bg-transparent\",\n )}\n onPointerDown={startResizing}\n />\n </div>\n </div>\n </div>\n );\n}\n","/**\n * Resizable split pane component\n *\n * Two-panel layout with draggable resize handle.\n * On mobile (<1024px), switches to tabs.\n */\n\n'use client';\n\nimport { useState, useRef, useCallback, useEffect, type ReactNode } from 'react';\nimport { GripVertical } from 'lucide-react';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from './tabs';\nimport { cn } from './lib/utils';\n\nexport type ResizableSplitPaneProps = {\n /**\n * Left panel content\n */\n left: ReactNode;\n\n /**\n * Right panel content\n */\n right: ReactNode;\n\n /**\n * Default split percentage (0-100)\n * @default 40\n */\n defaultSplit?: number;\n\n /**\n * Minimum left panel width in pixels\n * @default 300\n */\n minLeftWidth?: number;\n\n /**\n * Minimum right panel width in pixels\n * @default 400\n */\n minRightWidth?: number;\n\n /**\n * Left panel label (for mobile tabs)\n * @default 'Editor'\n */\n leftLabel?: string;\n\n /**\n * Right panel label (for mobile tabs)\n * @default 'Preview'\n */\n rightLabel?: string;\n\n /**\n * Default active tab on mobile\n * @default 'left'\n */\n defaultTab?: 'left' | 'right';\n\n /**\n * Container className\n */\n className?: string;\n\n /**\n * Callback when split percentage changes\n */\n onSplitChange?: (splitPercent: number) => void;\n\n /**\n * Controlled split percentage (makes component controlled)\n */\n splitPercent?: number;\n};\n\nexport function ResizableSplitPane({\n left,\n right,\n defaultSplit = 40,\n minLeftWidth = 300,\n minRightWidth = 400,\n leftLabel = 'Editor',\n rightLabel = 'Preview',\n defaultTab = 'left',\n className,\n onSplitChange,\n splitPercent: controlledSplitPercent,\n}: ResizableSplitPaneProps) {\n const [internalSplitPercent, setInternalSplitPercent] = useState(defaultSplit);\n const [isDragging, setIsDragging] = useState(false);\n const [isMobile, setIsMobile] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Use controlled or uncontrolled split percentage\n const splitPercent = controlledSplitPercent ?? internalSplitPercent;\n const setSplitPercent = useCallback(\n (value: number) => {\n setInternalSplitPercent(value);\n onSplitChange?.(value);\n },\n [onSplitChange],\n );\n\n // Check if mobile on mount and window resize\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth < 1024);\n };\n\n checkMobile();\n window.addEventListener('resize', checkMobile);\n return () => window.removeEventListener('resize', checkMobile);\n }, []);\n\n // Handle drag start\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n setIsDragging(true);\n }, []);\n\n // Handle drag move\n const handleMouseMove = useCallback(\n (e: MouseEvent) => {\n if (!isDragging || !containerRef.current) return;\n\n const container = containerRef.current;\n const containerRect = container.getBoundingClientRect();\n const containerWidth = containerRect.width;\n\n // Calculate new split position\n const mouseX = e.clientX - containerRect.left;\n let newSplitPercent = (mouseX / containerWidth) * 100;\n\n // Apply min width constraints\n const minLeftPercent = (minLeftWidth / containerWidth) * 100;\n const minRightPercent = (minRightWidth / containerWidth) * 100;\n\n newSplitPercent = Math.max(minLeftPercent, newSplitPercent);\n newSplitPercent = Math.min(100 - minRightPercent, newSplitPercent);\n\n setSplitPercent(newSplitPercent);\n },\n [isDragging, minLeftWidth, minRightWidth, setSplitPercent],\n );\n\n // Handle drag end\n const handleMouseUp = useCallback(() => {\n setIsDragging(false);\n }, []);\n\n // Add/remove mouse event listeners\n useEffect(() => {\n if (isDragging) {\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }\n }, [isDragging, handleMouseMove, handleMouseUp]);\n\n // Mobile: render tabs\n if (isMobile) {\n return (\n <div className={cn('h-full', className)}>\n <Tabs defaultValue={defaultTab} className=\"flex h-full flex-col\">\n <TabsList className=\"w-full justify-start rounded-none border-b\">\n <TabsTrigger value=\"left\" className=\"flex-1\">\n {leftLabel}\n </TabsTrigger>\n <TabsTrigger value=\"right\" className=\"flex-1\">\n {rightLabel}\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"left\" className=\"flex-1 overflow-auto\">\n {left}\n </TabsContent>\n <TabsContent value=\"right\" className=\"flex-1 overflow-auto\">\n {right}\n </TabsContent>\n </Tabs>\n </div>\n );\n }\n\n // Desktop: render split pane\n return (\n <div\n ref={containerRef}\n className={cn('relative flex h-full', className)}\n style={{\n cursor: isDragging ? 'col-resize' : undefined,\n }}\n >\n {/* Left panel */}\n <div\n className=\"overflow-auto\"\n style={{\n width: `${splitPercent}%`,\n }}\n >\n {left}\n </div>\n\n {/* Resize handle */}\n <div\n className={cn(\n 'group relative flex w-1.5 flex-shrink-0 cursor-col-resize items-center justify-center border-x bg-border/30 transition-colors hover:bg-border',\n isDragging && 'bg-primary',\n )}\n onMouseDown={handleMouseDown}\n >\n <div className=\"absolute inset-y-0 flex items-center\">\n <GripVertical\n className={cn(\n 'h-3 w-3 text-muted-foreground transition-colors group-hover:text-foreground',\n isDragging && 'text-primary-foreground',\n )}\n />\n </div>\n </div>\n\n {/* Right panel */}\n <div\n className=\"overflow-auto\"\n style={{\n width: `${100 - splitPercent}%`,\n }}\n >\n {right}\n </div>\n\n {/* Drag overlay (prevents iframe issues) */}\n {isDragging && (\n <div className=\"pointer-events-none fixed inset-0 z-50 cursor-col-resize\" />\n )}\n </div>\n );\n}\n","import * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"./lib/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.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-center rounded-lg bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.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 ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow\",\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","'use client';\n\nimport { useState, type CSSProperties, type ReactNode } from 'react';\nimport { Settings2Icon } from 'lucide-react';\n\nimport { cn } from './lib';\nimport { Button } from './button';\nimport { Sheet, SheetContent, SheetTrigger } from './sheet';\n\nexport interface DevToolbarShellProps {\n triggerLabel?: ReactNode;\n triggerIcon?: ReactNode;\n badge?: ReactNode;\n header?: ReactNode;\n children: ReactNode;\n footer?: ReactNode;\n side?: 'top' | 'right' | 'bottom' | 'left';\n offsetCssVar?: string;\n buttonClassName?: string;\n sheetContentClassName?: string;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n buttonStyle?: CSSProperties;\n}\n\nexport function DevToolbarShell({\n triggerLabel = 'Dev tools',\n triggerIcon = <Settings2Icon className=\"size-4\" />,\n badge,\n header,\n children,\n footer,\n side = 'right',\n offsetCssVar = '--builder-editor-chrome-offset',\n buttonClassName,\n sheetContentClassName,\n defaultOpen = false,\n onOpenChange,\n buttonStyle,\n}: DevToolbarShellProps) {\n const [open, setOpen] = useState(defaultOpen);\n\n const handleOpenChange = (next: boolean) => {\n setOpen(next);\n onOpenChange?.(next);\n };\n\n return (\n <Sheet open={open} onOpenChange={handleOpenChange}>\n <SheetTrigger asChild>\n <Button\n size=\"sm\"\n variant=\"secondary\"\n className={cn('fixed right-4 z-[70] flex items-center gap-2 shadow-lg', buttonClassName)}\n style={{\n bottom: `calc(1rem + var(${offsetCssVar}, 0px))`,\n ...buttonStyle,\n }}\n >\n {triggerIcon}\n {triggerLabel}\n {badge}\n </Button>\n </SheetTrigger>\n\n <SheetContent\n side={side}\n className={cn(\n 'flex w-full flex-col gap-6 bg-[#0b0f19] text-white md:w-[380px]',\n sheetContentClassName,\n )}\n showCloseButton\n >\n {header}\n {children}\n {footer}\n </SheetContent>\n </Sheet>\n );\n}\n","'use client'\n\nimport { useEffect, useMemo, useState } from 'react'\nimport { cn } from './lib'\n\nexport type NavigationTab = {\n id: string\n label: string\n badge?: number\n content?: React.ReactNode\n}\n\nexport type NavigationTabsVariant = 'default'\n\nexport type NavigationTabsProps = {\n tabs: NavigationTab[]\n activeTab?: string\n onTabChange?: (tabId: string) => void\n variant?: NavigationTabsVariant // Reserved for future variants\n urlParam?: string // Optional: sync with URL query param or hash\n className?: string\n trailingActions?: React.ReactNode // Optional: content rendered after tabs (right-aligned)\n}\n\n/**\n * Unified navigation tabs component for dashboard sub-navigation.\n * Provides consistent styling and behavior for page-level tab navigation.\n *\n * Features:\n * - Clean, minimal design with underline indicator\n * - Optional badge counts\n * - URL synchronization via query param or hash\n * - Keyboard navigation and ARIA support\n */\nexport function NavigationTabs({\n tabs,\n activeTab: controlledActiveTab,\n onTabChange,\n variant: _variant = 'default',\n urlParam,\n className,\n trailingActions,\n}: NavigationTabsProps) {\n const tabIds = useMemo(() => new Set(tabs.map((tab) => tab.id)), [tabs])\n\n const resolveInitial = () => {\n if (controlledActiveTab && tabIds.has(controlledActiveTab)) {\n return controlledActiveTab\n }\n return tabs[0]?.id ?? ''\n }\n\n const [internalActiveTab, setInternalActiveTab] = useState(resolveInitial)\n const activeTab = controlledActiveTab ?? internalActiveTab\n\n // Sync with controlled prop\n useEffect(() => {\n if (!controlledActiveTab) return\n if (tabIds.has(controlledActiveTab)) {\n setInternalActiveTab(controlledActiveTab)\n }\n }, [controlledActiveTab, tabIds])\n\n // URL synchronization on mount only (for initial load from URL)\n useEffect(() => {\n if (typeof window === 'undefined' || !urlParam) return\n\n const url = new URL(window.location.href)\n let urlValue: string | null = null\n\n // Check hash-based routing (e.g., #overview)\n if (urlParam === 'hash') {\n urlValue = window.location.hash.replace('#', '').trim().toLowerCase()\n } else {\n // Query param based (e.g., ?tab=overview)\n urlValue = url.searchParams.get(urlParam)\n }\n\n if (urlValue) {\n const match = tabs.find((tab) => tab.id.toLowerCase() === urlValue.toLowerCase())\n if (match && match.id !== activeTab) {\n // Notify parent if controlled\n if (onTabChange) {\n onTabChange(match.id)\n } else {\n // Update internal state if uncontrolled\n setInternalActiveTab(match.id)\n }\n }\n }\n\n // Only listen to hashchange for hash-based routing\n if (urlParam === 'hash') {\n const handleHashChange = () => {\n const hash = window.location.hash.replace('#', '').trim().toLowerCase()\n if (hash) {\n const match = tabs.find((tab) => tab.id.toLowerCase() === hash.toLowerCase())\n if (match && match.id !== activeTab) {\n if (onTabChange) {\n onTabChange(match.id)\n } else {\n setInternalActiveTab(match.id)\n }\n }\n }\n }\n\n window.addEventListener('hashchange', handleHashChange)\n return () => {\n window.removeEventListener('hashchange', handleHashChange)\n }\n }\n }, []) // Only run on mount\n\n // Update URL when tab changes\n useEffect(() => {\n if (typeof window === 'undefined' || !urlParam) return\n\n const url = new URL(window.location.href)\n\n if (urlParam === 'hash') {\n // Hash-based routing\n const newHash = `#${activeTab}`\n if (window.location.hash !== newHash) {\n window.history.replaceState({}, '', `${url.pathname}${url.search}${newHash}`)\n }\n } else {\n // Query param based\n const currentValue = url.searchParams.get(urlParam)\n if (currentValue !== activeTab) {\n // Only set if not the default (first tab), to keep URLs clean\n if (activeTab === tabs[0]?.id) {\n url.searchParams.delete(urlParam)\n } else {\n url.searchParams.set(urlParam, activeTab)\n }\n window.history.replaceState({}, '', `${url.pathname}?${url.searchParams.toString()}`)\n }\n }\n }, [activeTab, urlParam, tabs])\n\n const handleTabClick = (tabId: string) => {\n setInternalActiveTab(tabId)\n if (onTabChange) {\n onTabChange(tabId)\n }\n }\n\n if (!tabs.length) {\n return null\n }\n\n return (\n <nav role=\"tablist\" aria-label=\"Navigation tabs\" className={cn('flex flex-wrap items-center gap-2', className)}>\n <div className=\"flex flex-wrap gap-2\">\n {tabs.map((tab) => {\n const isActive = tab.id === activeTab\n\n return (\n <button\n key={tab.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`nav-tab-panel-${tab.id}`}\n onClick={() => handleTabClick(tab.id)}\n className={cn(\n 'flex items-center gap-2 px-3 py-1.5 text-sm font-medium transition-colors border-b-2',\n isActive\n ? 'border-primary text-foreground'\n : 'border-transparent text-muted-foreground hover:text-foreground hover:border-muted-foreground/30'\n )}\n >\n <span>{tab.label}</span>\n {typeof tab.badge === 'number' ? (\n <span\n className={cn(\n 'rounded-full px-2 py-0.5 text-xs font-medium',\n isActive\n ? 'bg-muted text-muted-foreground'\n : 'bg-muted-foreground/10 text-muted-foreground'\n )}\n >\n {tab.badge}\n </span>\n ) : null}\n </button>\n )\n })}\n </div>\n {trailingActions ? (\n <div className=\"ml-auto flex items-center gap-2\">{trailingActions}</div>\n ) : null}\n </nav>\n )\n}\n\nexport type NavigationTabPanelsProps = {\n tabs: NavigationTab[]\n activeTab: string\n className?: string\n}\n\n/**\n * Optional companion component for rendering tab content panels.\n * Use this when tabs control content visibility (not just state).\n */\nexport function NavigationTabPanels({ tabs, activeTab, className }: NavigationTabPanelsProps) {\n return (\n <>\n {tabs.map((tab) => (\n <div\n key={tab.id}\n id={`nav-tab-panel-${tab.id}`}\n role=\"tabpanel\"\n aria-labelledby={`nav-tab-trigger-${tab.id}`}\n hidden={tab.id !== activeTab}\n className={cn('space-y-4', className)}\n >\n {tab.id === activeTab ? tab.content : null}\n </div>\n ))}\n </>\n )\n}\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Presence } from '@radix-ui/react-presence';\nimport { useId } from '@radix-ui/react-id';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Collapsible\n * -----------------------------------------------------------------------------------------------*/\n\nconst COLLAPSIBLE_NAME = 'Collapsible';\n\ntype ScopedProps<P> = P & { __scopeCollapsible?: Scope };\nconst [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);\n\ntype CollapsibleContextValue = {\n contentId: string;\n disabled?: boolean;\n open: boolean;\n onOpenToggle(): void;\n};\n\nconst [CollapsibleProvider, useCollapsibleContext] =\n createCollapsibleContext<CollapsibleContextValue>(COLLAPSIBLE_NAME);\n\ntype CollapsibleElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface CollapsibleProps extends PrimitiveDivProps {\n defaultOpen?: boolean;\n open?: boolean;\n disabled?: boolean;\n onOpenChange?(open: boolean): void;\n}\n\nconst Collapsible = React.forwardRef<CollapsibleElement, CollapsibleProps>(\n (props: ScopedProps<CollapsibleProps>, forwardedRef) => {\n const {\n __scopeCollapsible,\n open: openProp,\n defaultOpen,\n disabled,\n onOpenChange,\n ...collapsibleProps\n } = props;\n\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: COLLAPSIBLE_NAME,\n });\n\n return (\n <CollapsibleProvider\n scope={__scopeCollapsible}\n disabled={disabled}\n contentId={useId()}\n open={open}\n onOpenToggle={React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}\n >\n <Primitive.div\n data-state={getState(open)}\n data-disabled={disabled ? '' : undefined}\n {...collapsibleProps}\n ref={forwardedRef}\n />\n </CollapsibleProvider>\n );\n }\n);\n\nCollapsible.displayName = COLLAPSIBLE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * CollapsibleTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'CollapsibleTrigger';\n\ntype CollapsibleTriggerElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface CollapsibleTriggerProps extends PrimitiveButtonProps {}\n\nconst CollapsibleTrigger = React.forwardRef<CollapsibleTriggerElement, CollapsibleTriggerProps>(\n (props: ScopedProps<CollapsibleTriggerProps>, forwardedRef) => {\n const { __scopeCollapsible, ...triggerProps } = props;\n const context = useCollapsibleContext(TRIGGER_NAME, __scopeCollapsible);\n return (\n <Primitive.button\n type=\"button\"\n aria-controls={context.contentId}\n aria-expanded={context.open || false}\n data-state={getState(context.open)}\n data-disabled={context.disabled ? '' : undefined}\n disabled={context.disabled}\n {...triggerProps}\n ref={forwardedRef}\n onClick={composeEventHandlers(props.onClick, context.onOpenToggle)}\n />\n );\n }\n);\n\nCollapsibleTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * CollapsibleContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'CollapsibleContent';\n\ntype CollapsibleContentElement = CollapsibleContentImplElement;\ninterface CollapsibleContentProps extends Omit<CollapsibleContentImplProps, 'present'> {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst CollapsibleContent = React.forwardRef<CollapsibleContentElement, CollapsibleContentProps>(\n (props: ScopedProps<CollapsibleContentProps>, forwardedRef) => {\n const { forceMount, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, props.__scopeCollapsible);\n return (\n <Presence present={forceMount || context.open}>\n {({ present }) => (\n <CollapsibleContentImpl {...contentProps} ref={forwardedRef} present={present} />\n )}\n </Presence>\n );\n }\n);\n\nCollapsibleContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype CollapsibleContentImplElement = React.ComponentRef<typeof Primitive.div>;\ninterface CollapsibleContentImplProps extends PrimitiveDivProps {\n present: boolean;\n}\n\nconst CollapsibleContentImpl = React.forwardRef<\n CollapsibleContentImplElement,\n CollapsibleContentImplProps\n>((props: ScopedProps<CollapsibleContentImplProps>, forwardedRef) => {\n const { __scopeCollapsible, present, children, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, __scopeCollapsible);\n const [isPresent, setIsPresent] = React.useState(present);\n const ref = React.useRef<CollapsibleContentImplElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const heightRef = React.useRef<number | undefined>(0);\n const height = heightRef.current;\n const widthRef = React.useRef<number | undefined>(0);\n const width = widthRef.current;\n // when opening we want it to immediately open to retrieve dimensions\n // when closing we delay `present` to retrieve dimensions before closing\n const isOpen = context.open || isPresent;\n const isMountAnimationPreventedRef = React.useRef(isOpen);\n const originalStylesRef = React.useRef<Record<string, string>>(undefined);\n\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => (isMountAnimationPreventedRef.current = false));\n return () => cancelAnimationFrame(rAF);\n }, []);\n\n useLayoutEffect(() => {\n const node = ref.current;\n if (node) {\n originalStylesRef.current = originalStylesRef.current || {\n transitionDuration: node.style.transitionDuration,\n animationName: node.style.animationName,\n };\n // block any animations/transitions so the element renders at its full dimensions\n node.style.transitionDuration = '0s';\n node.style.animationName = 'none';\n\n // get width and height from full dimensions\n const rect = node.getBoundingClientRect();\n heightRef.current = rect.height;\n widthRef.current = rect.width;\n\n // kick off any animations/transitions that were originally set up if it isn't the initial mount\n if (!isMountAnimationPreventedRef.current) {\n node.style.transitionDuration = originalStylesRef.current.transitionDuration!;\n node.style.animationName = originalStylesRef.current.animationName!;\n }\n\n setIsPresent(present);\n }\n /**\n * depends on `context.open` because it will change to `false`\n * when a close is triggered but `present` will be `false` on\n * animation end (so when close finishes). This allows us to\n * retrieve the dimensions *before* closing.\n */\n }, [context.open, present]);\n\n return (\n <Primitive.div\n data-state={getState(context.open)}\n data-disabled={context.disabled ? '' : undefined}\n id={context.contentId}\n hidden={!isOpen}\n {...contentProps}\n ref={composedRefs}\n style={{\n [`--radix-collapsible-content-height` as any]: height ? `${height}px` : undefined,\n [`--radix-collapsible-content-width` as any]: width ? `${width}px` : undefined,\n ...props.style,\n }}\n >\n {isOpen && children}\n </Primitive.div>\n );\n});\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open?: boolean) {\n return open ? 'open' : 'closed';\n}\n\nconst Root = Collapsible;\nconst Trigger = CollapsibleTrigger;\nconst Content = CollapsibleContent;\n\nexport {\n createCollapsibleScope,\n //\n Collapsible,\n CollapsibleTrigger,\n CollapsibleContent,\n //\n Root,\n Trigger,\n Content,\n};\nexport type { CollapsibleProps, CollapsibleTriggerProps, CollapsibleContentProps };\n","/* eslint-disable no-restricted-properties */\n\n/* eslint-disable no-restricted-globals */\nexport const canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n/* eslint-enable no-restricted-globals */\n\nexport function composeEventHandlers<E extends { defaultPrevented: boolean }>(\n originalEventHandler?: (event: E) => void,\n ourEventHandler?: (event: E) => void,\n { checkForDefaultPrevented = true } = {}\n) {\n return function handleEvent(event: E) {\n originalEventHandler?.(event);\n\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\n\nexport function getOwnerWindow(element: Node | null | undefined) {\n if (!canUseDOM) {\n throw new Error('Cannot access window outside of the DOM');\n }\n // eslint-disable-next-line no-restricted-globals\n return element?.ownerDocument?.defaultView ?? window;\n}\n\nexport function getOwnerDocument(element: Node | null | undefined) {\n if (!canUseDOM) {\n throw new Error('Cannot access document outside of the DOM');\n }\n // eslint-disable-next-line no-restricted-globals\n return element?.ownerDocument ?? document;\n}\n\n/**\n * Lifted from https://github.com/ariakit/ariakit/blob/main/packages/ariakit-core/src/utils/dom.ts#L37\n * MIT License, Copyright (c) AriaKit.\n */\nexport function getActiveElement(\n node: Node | null | undefined,\n activeDescendant = false\n): HTMLElement | null {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n // `activeElement` might be an empty object if we're interacting with elements\n // inside of an iframe.\n return null;\n }\n\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\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\n return activeElement as HTMLElement | null;\n}\n\nexport function isFrame(element: Element): element is HTMLIFrameElement {\n return element.tagName === 'IFRAME';\n}\n","import * as React from 'react';\n\nfunction createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext?: ContextValueType\n) {\n const Context = React.createContext<ContextValueType | undefined>(defaultContext);\n\n const Provider: React.FC<ContextValueType & { children: React.ReactNode }> = (props) => {\n const { children, ...context } = props;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return <Context.Provider value={value}>{children}</Context.Provider>;\n };\n\n Provider.displayName = rootComponentName + 'Provider';\n\n function useContext(consumerName: string) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n return [Provider, useContext] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/\n\ntype Scope<C = any> = { [scopeName: string]: React.Context<C>[] } | undefined;\ntype ScopeHook = (scope: Scope) => { [__scopeProp: string]: Scope };\ninterface CreateScope {\n scopeName: string;\n (): ScopeHook;\n}\n\nfunction createContextScope(scopeName: string, createContextScopeDeps: CreateScope[] = []) {\n let defaultContexts: any[] = [];\n\n /* -----------------------------------------------------------------------------------------------\n * createContext\n * ---------------------------------------------------------------------------------------------*/\n\n function createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext?: ContextValueType\n ) {\n const BaseContext = React.createContext<ContextValueType | undefined>(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n\n const Provider: React.FC<\n ContextValueType & { scope: Scope<ContextValueType>; children: React.ReactNode }\n > = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return <Context.Provider value={value}>{children}</Context.Provider>;\n };\n\n Provider.displayName = rootComponentName + 'Provider';\n\n function useContext(consumerName: string, scope: Scope<ContextValueType | undefined>) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n return [Provider, useContext] as const;\n }\n\n /* -----------------------------------------------------------------------------------------------\n * createScope\n * ---------------------------------------------------------------------------------------------*/\n\n const createScope: CreateScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope: Scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n\n createScope.scopeName = scopeName;\n return [createContext, composeContextScopes(createScope, ...createContextScopeDeps)] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/\n\nfunction composeContextScopes(...scopes: CreateScope[]) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n\n const createScope: CreateScope = () => {\n const scopeHooks = scopes.map((createScope) => ({\n useScope: createScope(),\n scopeName: createScope.scopeName,\n }));\n\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes, { useScope, scopeName }) => {\n // We are calling a hook inside a callback which React warns against to avoid inconsistent\n // renders, however, scoping doesn't have render side effects so we ignore the rule.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes, ...currentScope };\n }, {});\n\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nexport { createContext, createContextScope };\nexport type { CreateScope, Scope };\n","import * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n// Prevent bundlers from trying to optimize the import\nconst useInsertionEffect: typeof useLayoutEffect =\n (React as any)[' useInsertionEffect '.trim().toString()] || useLayoutEffect;\n\ntype ChangeHandler<T> = (state: T) => void;\ntype SetStateFn<T> = React.Dispatch<React.SetStateAction<T>>;\n\ninterface UseControllableStateParams<T> {\n prop?: T | undefined;\n defaultProp: T;\n onChange?: ChangeHandler<T>;\n caller?: string;\n}\n\nexport function useControllableState<T>({\n prop,\n defaultProp,\n onChange = () => {},\n caller,\n}: UseControllableStateParams<T>): [T, SetStateFn<T>] {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange,\n });\n const isControlled = prop !== undefined;\n const value = isControlled ? prop : uncontrolledProp;\n\n // OK to disable conditionally calling hooks here because they will always run\n // consistently in the same environment. Bundlers should be able to remove the\n // code block entirely in production.\n /* eslint-disable react-hooks/rules-of-hooks */\n if (process.env.NODE_ENV !== 'production') {\n const isControlledRef = React.useRef(prop !== undefined);\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 /* eslint-enable react-hooks/rules-of-hooks */\n\n const setValue = React.useCallback<SetStateFn<T>>(\n (nextValue) => {\n if (isControlled) {\n const value = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value !== prop) {\n onChangeRef.current?.(value);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n\n return [value, setValue];\n}\n\nfunction useUncontrolledState<T>({\n defaultProp,\n onChange,\n}: Omit<UseControllableStateParams<T>, 'prop'>): [\n Value: T,\n setValue: React.Dispatch<React.SetStateAction<T>>,\n OnChangeRef: React.RefObject<ChangeHandler<T> | undefined>,\n] {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n\n return [value, setValue, onChangeRef];\n}\n\nfunction isFunction(value: unknown): value is (...args: any[]) => any {\n return typeof value === 'function';\n}\n","import * as React from 'react';\nimport { useEffectEvent } from '@radix-ui/react-use-effect-event';\n\ntype ChangeHandler<T> = (state: T) => void;\n\ninterface UseControllableStateParams<T> {\n prop: T | undefined;\n defaultProp: T;\n onChange: ChangeHandler<T> | undefined;\n caller: string;\n}\n\ninterface AnyAction {\n type: string;\n}\n\nconst SYNC_STATE = Symbol('RADIX:SYNC_STATE');\n\ninterface SyncStateAction<T> {\n type: typeof SYNC_STATE;\n state: T;\n}\n\nexport function useControllableStateReducer<T, S extends {}, A extends AnyAction>(\n reducer: (prevState: S & { state: T }, action: A) => S & { state: T },\n userArgs: UseControllableStateParams<T>,\n initialState: S\n): [S & { state: T }, React.Dispatch<A>];\n\nexport function useControllableStateReducer<T, S extends {}, I, A extends AnyAction>(\n reducer: (prevState: S & { state: T }, action: A) => S & { state: T },\n userArgs: UseControllableStateParams<T>,\n initialArg: I,\n init: (i: I & { state: T }) => S\n): [S & { state: T }, React.Dispatch<A>];\n\nexport function useControllableStateReducer<T, S extends {}, A extends AnyAction>(\n reducer: (prevState: S & { state: T }, action: A) => S & { state: T },\n userArgs: UseControllableStateParams<T>,\n initialArg: any,\n init?: (i: any) => Omit<S, 'state'>\n): [S & { state: T }, React.Dispatch<A>] {\n const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n const isControlled = controlledState !== undefined;\n\n const onChange = useEffectEvent(onChangeProp);\n\n // OK to disable conditionally calling hooks here because they will always run\n // consistently in the same environment. Bundlers should be able to remove the\n // code block entirely in production.\n /* eslint-disable react-hooks/rules-of-hooks */\n if (process.env.NODE_ENV !== 'production') {\n const isControlledRef = React.useRef(controlledState !== undefined);\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 /* eslint-enable react-hooks/rules-of-hooks */\n\n type InternalState = S & { state: T };\n const args: [InternalState] = [{ ...initialArg, state: defaultProp }];\n if (init) {\n // @ts-expect-error\n args.push(init);\n }\n\n const [internalState, dispatch] = React.useReducer(\n (state: InternalState, action: A | SyncStateAction<T>): InternalState => {\n if (action.type === SYNC_STATE) {\n return { ...state, state: action.state };\n }\n\n const next = reducer(state, action);\n if (isControlled && !Object.is(next.state, state.state)) {\n onChange(next.state);\n }\n return next;\n },\n ...args\n );\n\n const uncontrolledState = internalState.state;\n const prevValueRef = React.useRef(uncontrolledState);\n React.useEffect(() => {\n if (prevValueRef.current !== uncontrolledState) {\n prevValueRef.current = uncontrolledState;\n if (!isControlled) {\n onChange(uncontrolledState);\n }\n }\n }, [onChange, uncontrolledState, prevValueRef, isControlled]);\n\n const state = React.useMemo(() => {\n const isControlled = controlledState !== undefined;\n if (isControlled) {\n return { ...internalState, state: controlledState };\n }\n\n return internalState;\n }, [internalState, controlledState]);\n\n React.useEffect(() => {\n // Sync internal state for controlled components so that reducer is called\n // with the correct state values\n if (isControlled && !Object.is(controlledState, internalState.state)) {\n dispatch({ type: SYNC_STATE, state: controlledState });\n }\n }, [controlledState, internalState.state, isControlled]);\n\n return [state, dispatch as React.Dispatch<A>];\n}\n","import * as React from 'react';\n\n/**\n * On the server, React emits a warning when calling `useLayoutEffect`.\n * This is because neither `useLayoutEffect` nor `useEffect` run on the server.\n * We use this safe version which suppresses the warning by replacing it with a noop on the server.\n *\n * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */\nconst useLayoutEffect = globalThis?.document ? React.useLayoutEffect : () => {};\n\nexport { useLayoutEffect };\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { createSlot } from '@radix-ui/react-slot';\n\nconst 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] as const;\n\ntype Primitives = { [E in (typeof NODES)[number]]: PrimitiveForwardRefComponent<E> };\ntype PrimitivePropsWithRef<E extends React.ElementType> = React.ComponentPropsWithRef<E> & {\n asChild?: boolean;\n};\n\ninterface PrimitiveForwardRefComponent<E extends React.ElementType>\n extends React.ForwardRefExoticComponent<PrimitivePropsWithRef<E>> {}\n\n/* -------------------------------------------------------------------------------------------------\n * Primitive\n * -----------------------------------------------------------------------------------------------*/\n\nconst Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props: PrimitivePropsWithRef<typeof node>, forwardedRef: any) => {\n const { asChild, ...primitiveProps } = props;\n const Comp: any = asChild ? Slot : node;\n\n if (typeof window !== 'undefined') {\n (window as any)[Symbol.for('radix-ui')] = true;\n }\n\n return <Comp {...primitiveProps} ref={forwardedRef} />;\n });\n\n Node.displayName = `Primitive.${node}`;\n\n return { ...primitive, [node]: Node };\n}, {} as Primitives);\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Flush custom event dispatch\n * https://github.com/radix-ui/primitives/pull/1378\n *\n * React batches *all* event handlers since version 18, this introduces certain considerations when using custom event types.\n *\n * Internally, React prioritises events in the following order:\n * - discrete\n * - continuous\n * - default\n *\n * https://github.com/facebook/react/blob/a8a4742f1c54493df00da648a3f9d26e3db9c8b5/packages/react-dom/src/events/ReactDOMEventListener.js#L294-L350\n *\n * `discrete` is an important distinction as updates within these events are applied immediately.\n * React however, is not able to infer the priority of custom event types due to how they are detected internally.\n * Because of this, it's possible for updates from custom events to be unexpectedly batched when\n * dispatched by another `discrete` event.\n *\n * In order to ensure that updates from custom events are applied predictably, we need to manually flush the batch.\n * This utility should be used when dispatching a custom event from within another `discrete` event, this utility\n * is not necessary when dispatching known event types, or if dispatching a custom type inside a non-discrete event.\n * For example:\n *\n * dispatching a known click 👎\n * target.dispatchEvent(new Event(‘click’))\n *\n * dispatching a custom type within a non-discrete event 👎\n * onScroll={(event) => event.target.dispatchEvent(new CustomEvent(‘customType’))}\n *\n * dispatching a custom type within a `discrete` event 👍\n * onPointerDown={(event) => dispatchDiscreteCustomEvent(event.target, new CustomEvent(‘customType’))}\n *\n * Note: though React classifies `focus`, `focusin` and `focusout` events as `discrete`, it's not recommended to use\n * this utility with them. This is because it's possible for those handlers to be called implicitly during render\n * e.g. when focus is within a component as it is unmounted, or when managing focus on mount.\n */\n\nfunction dispatchDiscreteCustomEvent<E extends CustomEvent>(target: E['target'], event: E) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Primitive;\n\nexport {\n Primitive,\n //\n Root,\n //\n dispatchDiscreteCustomEvent,\n};\nexport type { PrimitivePropsWithRef };\n","import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useStateMachine } from './use-state-machine';\n\ninterface PresenceProps {\n children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n present: boolean;\n}\n\nconst Presence: React.FC<PresenceProps> = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n\n const child = (\n typeof children === 'function'\n ? children({ present: presence.isPresent })\n : React.Children.only(children)\n ) as React.ReactElement<{ ref?: React.Ref<HTMLElement> }>;\n\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === 'function';\n return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\nPresence.displayName = 'Presence';\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n const [node, setNode] = React.useState<HTMLElement>();\n const stylesRef = React.useRef<CSSStyleDeclaration | null>(null);\n const prevPresentRef = React.useRef(present);\n const prevAnimationNameRef = React.useRef<string>('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\n React.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n }, [state]);\n\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n\n if (present) {\n send('MOUNT');\n } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n // If there is no exit animation or the element is hidden, animations won't run\n // so we unmount instantly\n send('UNMOUNT');\n } else {\n /**\n * When `present` changes to `false`, we check changes to animation-name to\n * determine whether an animation has started. We chose this approach (reading\n * computed styles) because there is no `animationrun` event and `animationstart`\n * fires after `animation-delay` has expired which would be too late.\n */\n const isAnimating = prevAnimationName !== currentAnimationName;\n\n if (wasPresent && isAnimating) {\n send('ANIMATION_OUT');\n } else {\n send('UNMOUNT');\n }\n }\n\n prevPresentRef.current = present;\n }\n }, [present, send]);\n\n useLayoutEffect(() => {\n if (node) {\n let timeoutId: number;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n /**\n * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n * make sure we only trigger ANIMATION_END for the currently active animation.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n // The event.animationName is unescaped for CSS syntax,\n // so we need to escape it to compare with the animationName computed from the style.\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n // With React 18 concurrency this update is applied a frame after the\n // animation ends, creating a flash of visible content. By setting the\n // animation fill mode to \"forwards\", we force the node to keep the\n // styles of the last keyframe, removing the flash.\n //\n // Previously we flushed the update via ReactDom.flushSync, but with\n // exit animations this resulted in the node being removed from the\n // DOM before the synthetic animationEnd event was dispatched, meaning\n // user-provided event handlers would not be called.\n // https://github.com/radix-ui/primitives/pull/1849\n send('ANIMATION_END');\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = 'forwards';\n // Reset the style after the node had time to unmount (for cases\n // where the component chooses not to unmount). Doing this any\n // sooner than `setTimeout` (e.g. with `requestAnimationFrame`)\n // still causes a flash.\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === 'forwards') {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event: AnimationEvent) => {\n if (event.target === node) {\n // if animation occurred, store its name as the previous animation.\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 // Transition to the unmounted state if the node is removed prematurely.\n // We avoid doing so during cleanup as the node may change but still exist.\n send('ANIMATION_END');\n }\n }, [node, send]);\n\n return {\n isPresent: ['mounted', 'unmountSuspended'].includes(state),\n ref: React.useCallback((node: HTMLElement) => {\n stylesRef.current = node ? getComputedStyle(node) : null;\n setNode(node);\n }, []),\n };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getAnimationName(styles: CSSStyleDeclaration | null) {\n return styles?.animationName || 'none';\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement<{ ref?: React.Ref<unknown> }>) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\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\n // Not DEV\n return element.props.ref || (element as any).ref;\n}\n\nconst Root = Presence;\n\nexport {\n Presence,\n //\n Root,\n};\nexport type { PresenceProps };\n","import * as React from 'react';\n\ntype Machine<S> = { [k: string]: { [k: string]: S } };\ntype MachineState<T> = keyof T;\ntype MachineEvent<T> = keyof UnionToIntersection<T[keyof T]>;\n\n// 🤯 https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n ? R\n : never;\n\nexport function useStateMachine<M>(\n initialState: MachineState<M>,\n machine: M & Machine<MachineState<M>>\n) {\n return React.useReducer((state: MachineState<M>, event: MachineEvent<M>): MachineState<M> => {\n const nextState = (machine[state] as any)[event];\n return nextState ?? state;\n }, initialState);\n}\n","import * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n// We spaces with `.trim().toString()` to prevent bundlers from trying to `import { useId } from 'react';`\nconst useReactId = (React as any)[' useId '.trim().toString()] || (() => undefined);\nlet count = 0;\n\nfunction useId(deterministicId?: string): string {\n const [id, setId] = React.useState<string | undefined>(useReactId());\n // React versions older than 18 will have client-side ids only.\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : '');\n}\n\nexport { useId };\n","import * 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';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Dialog\n * -----------------------------------------------------------------------------------------------*/\n\nconst DIALOG_NAME = 'Dialog';\n\ntype ScopedProps<P> = P & { __scopeDialog?: Scope };\nconst [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\n\ntype DialogContextValue = {\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n contentRef: React.RefObject<DialogContentElement | null>;\n contentId: string;\n titleId: string;\n descriptionId: string;\n open: boolean;\n onOpenChange(open: boolean): void;\n onOpenToggle(): void;\n modal: boolean;\n};\n\nconst [DialogProvider, useDialogContext] = createDialogContext<DialogContextValue>(DIALOG_NAME);\n\ninterface DialogProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n modal?: boolean;\n}\n\nconst Dialog: React.FC<DialogProps> = (props: ScopedProps<DialogProps>) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n } = props;\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const contentRef = React.useRef<DialogContentElement>(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME,\n });\n\n return (\n <DialogProvider\n scope={__scopeDialog}\n triggerRef={triggerRef}\n contentRef={contentRef}\n contentId={useId()}\n titleId={useId()}\n descriptionId={useId()}\n open={open}\n onOpenChange={setOpen}\n onOpenToggle={React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}\n modal={modal}\n >\n {children}\n </DialogProvider>\n );\n};\n\nDialog.displayName = DIALOG_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'DialogTrigger';\n\ntype DialogTriggerElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface DialogTriggerProps extends PrimitiveButtonProps {}\n\nconst DialogTrigger = React.forwardRef<DialogTriggerElement, DialogTriggerProps>(\n (props: ScopedProps<DialogTriggerProps>, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return (\n <Primitive.button\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);\n\nDialogTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'DialogPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createDialogContext<PortalContextValue>(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef<typeof PortalPrimitive>;\ninterface DialogPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogPortal: React.FC<DialogPortalProps> = (props: ScopedProps<DialogPortalProps>) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return (\n <PortalProvider scope={__scopeDialog} forceMount={forceMount}>\n {React.Children.map(children, (child) => (\n <Presence present={forceMount || context.open}>\n <PortalPrimitive asChild container={container}>\n {child}\n </PortalPrimitive>\n </Presence>\n ))}\n </PortalProvider>\n );\n};\n\nDialogPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst OVERLAY_NAME = 'DialogOverlay';\n\ntype DialogOverlayElement = DialogOverlayImplElement;\ninterface DialogOverlayProps extends DialogOverlayImplProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogOverlay = React.forwardRef<DialogOverlayElement, DialogOverlayProps>(\n (props: ScopedProps<DialogOverlayProps>, 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 ? (\n <Presence present={forceMount || context.open}>\n <DialogOverlayImpl {...overlayProps} ref={forwardedRef} />\n </Presence>\n ) : null;\n }\n);\n\nDialogOverlay.displayName = OVERLAY_NAME;\n\ntype DialogOverlayImplElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface DialogOverlayImplProps extends PrimitiveDivProps {}\n\nconst Slot = createSlot('DialogOverlay.RemoveScroll');\n\nconst DialogOverlayImpl = React.forwardRef<DialogOverlayImplElement, DialogOverlayImplProps>(\n (props: ScopedProps<DialogOverlayImplProps>, 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 <RemoveScroll as={Slot} allowPinchZoom shards={[context.contentRef]}>\n <Primitive.div\n data-state={getState(context.open)}\n {...overlayProps}\n ref={forwardedRef}\n // We re-enable pointer-events prevented by `Dialog.Content` to allow scrolling the overlay.\n style={{ pointerEvents: 'auto', ...overlayProps.style }}\n />\n </RemoveScroll>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'DialogContent';\n\ntype DialogContentElement = DialogContentTypeElement;\ninterface DialogContentProps extends DialogContentTypeProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogContent = React.forwardRef<DialogContentElement, DialogContentProps>(\n (props: ScopedProps<DialogContentProps>, 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 (\n <Presence present={forceMount || context.open}>\n {context.modal ? (\n <DialogContentModal {...contentProps} ref={forwardedRef} />\n ) : (\n <DialogContentNonModal {...contentProps} ref={forwardedRef} />\n )}\n </Presence>\n );\n }\n);\n\nDialogContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentTypeElement = DialogContentImplElement;\ninterface DialogContentTypeProps\n extends Omit<DialogContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {}\n\nconst DialogContentModal = React.forwardRef<DialogContentTypeElement, DialogContentTypeProps>(\n (props: ScopedProps<DialogContentTypeProps>, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef<HTMLDivElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n\n // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n\n return (\n <DialogContentImpl\n {...props}\n ref={composedRefs}\n // we make sure focus isn't trapped once `DialogContent` has been closed\n // (closed !== unmounted when animating out)\n trapFocus={context.open}\n disableOutsidePointerEvents\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\n // If the event is a right-click, we shouldn't close because\n // it is effectively as if we right-clicked the `Overlay`.\n if (isRightClick) event.preventDefault();\n })}\n // When focus is trapped, a `focusout` event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={composeEventHandlers(props.onFocusOutside, (event) =>\n event.preventDefault()\n )}\n />\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst DialogContentNonModal = React.forwardRef<DialogContentTypeElement, DialogContentTypeProps>(\n (props: ScopedProps<DialogContentTypeProps>, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n\n return (\n <DialogContentImpl\n {...props}\n ref={forwardedRef}\n trapFocus={false}\n disableOutsidePointerEvents={false}\n onCloseAutoFocus={(event) => {\n props.onCloseAutoFocus?.(event);\n\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n }\n\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n }}\n onInteractOutside={(event) => {\n props.onInteractOutside?.(event);\n\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === 'pointerdown') {\n hasPointerDownOutsideRef.current = true;\n }\n }\n\n // Prevent dismissing when clicking the trigger.\n // As the trigger is already setup to close, without doing so would\n // cause it to close and immediately open.\n const target = event.target as HTMLElement;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n\n // On Safari if the trigger is inside a container with tabIndex={0}, when clicked\n // we will get the pointer down outside event on the trigger, but then a subsequent\n // focus outside event on the container, we ignore any focus outside event when we've\n // already had a pointer down outside event.\n if (event.detail.originalEvent.type === 'focusin' && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }}\n />\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentImplElement = React.ComponentRef<typeof DismissableLayer>;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef<typeof DismissableLayer>;\ntype FocusScopeProps = React.ComponentPropsWithoutRef<typeof FocusScope>;\ninterface DialogContentImplProps extends Omit<DismissableLayerProps, 'onDismiss'> {\n /**\n * When `true`, focus cannot escape the `Content` via keyboard,\n * pointer, or a programmatic focus.\n * @defaultValue false\n */\n trapFocus?: FocusScopeProps['trapped'];\n\n /**\n * Event handler called when auto-focusing on open.\n * Can be prevented.\n */\n onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];\n\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n}\n\nconst DialogContentImpl = React.forwardRef<DialogContentImplElement, DialogContentImplProps>(\n (props: ScopedProps<DialogContentImplProps>, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef<HTMLDivElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n\n // Make sure the whole tree has focus guards as our `Dialog` will be\n // the last element in the DOM (because of the `Portal`)\n useFocusGuards();\n\n return (\n <>\n <FocusScope\n asChild\n loop\n trapped={trapFocus}\n onMountAutoFocus={onOpenAutoFocus}\n onUnmountAutoFocus={onCloseAutoFocus}\n >\n <DismissableLayer\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 </FocusScope>\n {process.env.NODE_ENV !== 'production' && (\n <>\n <TitleWarning titleId={context.titleId} />\n <DescriptionWarning contentRef={contentRef} descriptionId={context.descriptionId} />\n </>\n )}\n </>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTitle\n * -----------------------------------------------------------------------------------------------*/\n\nconst TITLE_NAME = 'DialogTitle';\n\ntype DialogTitleElement = React.ComponentRef<typeof Primitive.h2>;\ntype PrimitiveHeading2Props = React.ComponentPropsWithoutRef<typeof Primitive.h2>;\ninterface DialogTitleProps extends PrimitiveHeading2Props {}\n\nconst DialogTitle = React.forwardRef<DialogTitleElement, DialogTitleProps>(\n (props: ScopedProps<DialogTitleProps>, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return <Primitive.h2 id={context.titleId} {...titleProps} ref={forwardedRef} />;\n }\n);\n\nDialogTitle.displayName = TITLE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogDescription\n * -----------------------------------------------------------------------------------------------*/\n\nconst DESCRIPTION_NAME = 'DialogDescription';\n\ntype DialogDescriptionElement = React.ComponentRef<typeof Primitive.p>;\ntype PrimitiveParagraphProps = React.ComponentPropsWithoutRef<typeof Primitive.p>;\ninterface DialogDescriptionProps extends PrimitiveParagraphProps {}\n\nconst DialogDescription = React.forwardRef<DialogDescriptionElement, DialogDescriptionProps>(\n (props: ScopedProps<DialogDescriptionProps>, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return <Primitive.p id={context.descriptionId} {...descriptionProps} ref={forwardedRef} />;\n }\n);\n\nDialogDescription.displayName = DESCRIPTION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'DialogClose';\n\ntype DialogCloseElement = React.ComponentRef<typeof Primitive.button>;\ninterface DialogCloseProps extends PrimitiveButtonProps {}\n\nconst DialogClose = React.forwardRef<DialogCloseElement, DialogCloseProps>(\n (props: ScopedProps<DialogCloseProps>, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return (\n <Primitive.button\n type=\"button\"\n {...closeProps}\n ref={forwardedRef}\n onClick={composeEventHandlers(props.onClick, () => context.onOpenChange(false))}\n />\n );\n }\n);\n\nDialogClose.displayName = CLOSE_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open: boolean) {\n return open ? 'open' : 'closed';\n}\n\nconst TITLE_WARNING_NAME = 'DialogTitleWarning';\n\nconst [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: 'dialog',\n});\n\ntype TitleWarningProps = { titleId?: string };\n\nconst TitleWarning: React.FC<TitleWarningProps> = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n\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\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n\n return null;\n};\n\nconst DESCRIPTION_WARNING_NAME = 'DialogDescriptionWarning';\n\ntype DescriptionWarningProps = {\n contentRef: React.RefObject<DialogContentElement | null>;\n descriptionId?: string;\n};\n\nconst DescriptionWarning: React.FC<DescriptionWarningProps> = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute('aria-describedby');\n // if we have an id and the user hasn't set aria-describedby={undefined}\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n\n return null;\n};\n\nconst Root = Dialog;\nconst Trigger = DialogTrigger;\nconst Portal = DialogPortal;\nconst Overlay = DialogOverlay;\nconst Content = DialogContent;\nconst Title = DialogTitle;\nconst Description = DialogDescription;\nconst Close = DialogClose;\n\nexport {\n createDialogScope,\n //\n Dialog,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogContent,\n DialogTitle,\n DialogDescription,\n DialogClose,\n //\n Root,\n Trigger,\n Portal,\n Overlay,\n Content,\n Title,\n Description,\n Close,\n //\n WarningProvider,\n};\nexport type {\n DialogProps,\n DialogTriggerProps,\n DialogPortalProps,\n DialogOverlayProps,\n DialogContentProps,\n DialogTitleProps,\n DialogDescriptionProps,\n DialogCloseProps,\n};\n","import * 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';\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayer\n * -----------------------------------------------------------------------------------------------*/\n\nconst DISMISSABLE_LAYER_NAME = 'DismissableLayer';\nconst CONTEXT_UPDATE = 'dismissableLayer.update';\nconst POINTER_DOWN_OUTSIDE = 'dismissableLayer.pointerDownOutside';\nconst FOCUS_OUTSIDE = 'dismissableLayer.focusOutside';\n\nlet originalBodyPointerEvents: string;\n\nconst DismissableLayerContext = React.createContext({\n layers: new Set<DismissableLayerElement>(),\n layersWithOutsidePointerEventsDisabled: new Set<DismissableLayerElement>(),\n branches: new Set<DismissableLayerBranchElement>(),\n});\n\ntype DismissableLayerElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface DismissableLayerProps extends PrimitiveDivProps {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents?: boolean;\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n /**\n * Event handler called when the focus moves outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onFocusOutside?: (event: FocusOutsideEvent) => void;\n /**\n * Event handler called when an interaction happens outside the `DismissableLayer`.\n * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n * Can be prevented.\n */\n onInteractOutside?: (event: PointerDownOutsideEvent | FocusOutsideEvent) => void;\n /**\n * Handler called when the `DismissableLayer` should be dismissed\n */\n onDismiss?: () => void;\n}\n\nconst DismissableLayer = React.forwardRef<DismissableLayerElement, DismissableLayerProps>(\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<DismissableLayerElement | null>(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node) => setNode(node));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); // prettier-ignore\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled!); // prettier-ignore\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target as HTMLElement;\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\n const focusOutside = useFocusOutside((event) => {\n const target = event.target as HTMLElement;\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\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\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 (\n disableOutsidePointerEvents &&\n context.layersWithOutsidePointerEventsDisabled.size === 1\n ) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n\n /**\n * We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect\n * because a change to `disableOutsidePointerEvents` would remove this layer from the stack\n * and add it to the end again so the layering order wouldn't be _creation order_.\n * We only want them to be removed from context stacks when unmounted.\n */\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\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n\n return (\n <Primitive.div\n {...layerProps}\n ref={composedRefs}\n style={{\n pointerEvents: isBodyPointerEventsDisabled\n ? isPointerEventsEnabled\n ? 'auto'\n : 'none'\n : undefined,\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);\n\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayerBranch\n * -----------------------------------------------------------------------------------------------*/\n\nconst BRANCH_NAME = 'DismissableLayerBranch';\n\ntype DismissableLayerBranchElement = React.ComponentRef<typeof Primitive.div>;\ninterface DismissableLayerBranchProps extends PrimitiveDivProps {}\n\nconst DismissableLayerBranch = React.forwardRef<\n DismissableLayerBranchElement,\n DismissableLayerBranchProps\n>((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef<DismissableLayerBranchElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\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\n return <Primitive.div {...props} ref={composedRefs} />;\n});\n\nDismissableLayerBranch.displayName = BRANCH_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PointerDownOutsideEvent = CustomEvent<{ originalEvent: PointerEvent }>;\ntype FocusOutsideEvent = CustomEvent<{ originalEvent: FocusEvent }>;\n\n/**\n * Listens for `pointerdown` outside a react subtree. We use `pointerdown` rather than `pointerup`\n * to mimic layer dismissing behaviour present in OS.\n * Returns props to pass to the node we want to check for outside events.\n */\nfunction usePointerDownOutside(\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside) as EventListener;\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {});\n\n React.useEffect(() => {\n const handlePointerDown = (event: PointerEvent) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n\n function handleAndDispatchPointerDownOutsideEvent() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n }\n\n /**\n * On touch devices, we need to wait for a click event because browsers implement\n * a ~350ms delay between the time the user stops touching the display and when the\n * browser executres events. We need to ensure we don't reactivate pointer-events within\n * this timeframe otherwise the browser may execute events that should have been prevented.\n *\n * Additionally, this also lets us deal automatically with cancellations when a click event\n * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc.\n *\n * This is why we also continuously remove the previous listener, because we cannot be\n * certain that it was raised, and therefore cleaned-up.\n */\n if (event.pointerType === 'touch') {\n ownerDocument.removeEventListener('click', handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent;\n ownerDocument.addEventListener('click', handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent();\n }\n } else {\n // We need to remove the event listener in case the outside click has been canceled.\n // See: https://github.com/radix-ui/primitives/issues/2171\n ownerDocument.removeEventListener('click', handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n /**\n * if this hook executes in a component that mounts via a `pointerdown` event, the event\n * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid\n * this by delaying the event listener registration on the document.\n * This is not React specific, but rather how the DOM works, ie:\n * ```\n * button.addEventListener('pointerdown', () => {\n * console.log('I will log');\n * document.addEventListener('pointerdown', () => {\n * console.log('I will also log');\n * })\n * });\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\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => (isPointerInsideReactTreeRef.current = true),\n };\n}\n\n/**\n * Listens for when focus happens outside a react subtree.\n * Returns props to pass to the root (node) of the subtree we want to check.\n */\nfunction useFocusOutside(\n onFocusOutside?: (event: FocusOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handleFocusOutside = useCallbackRef(onFocusOutside) as EventListener;\n const isFocusInsideReactTreeRef = React.useRef(false);\n\n React.useEffect(() => {\n const handleFocus = (event: FocusEvent) => {\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\n return {\n onFocusCapture: () => (isFocusInsideReactTreeRef.current = true),\n onBlurCapture: () => (isFocusInsideReactTreeRef.current = false),\n };\n}\n\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\n\nfunction handleAndDispatchCustomEvent<E extends CustomEvent, OriginalEvent extends Event>(\n name: string,\n handler: ((event: E) => void) | undefined,\n detail: { originalEvent: OriginalEvent } & (E extends CustomEvent<infer D> ? D : never),\n { discrete }: { discrete: boolean }\n) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler as EventListener, { once: true });\n\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\n\nconst Root = DismissableLayer;\nconst Branch = DismissableLayerBranch;\n\nexport {\n DismissableLayer,\n DismissableLayerBranch,\n //\n Root,\n Branch,\n};\nexport type { DismissableLayerProps };\n","import * as React from 'react';\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nfunction useCallbackRef<T extends (...args: any[]) => any>(callback: T | undefined): T {\n const callbackRef = React.useRef(callback);\n\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n\n // https://github.com/facebook/react/issues/19240\n return React.useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []);\n}\n\nexport { useCallbackRef };\n","import * as React from 'react';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\n/**\n * Listens for when the escape key is down\n */\nfunction useEscapeKeydown(\n onEscapeKeyDownProp?: (event: KeyboardEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\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}\n\nexport { useEscapeKeydown };\n","import * 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';\n\nconst AUTOFOCUS_ON_MOUNT = 'focusScope.autoFocusOnMount';\nconst AUTOFOCUS_ON_UNMOUNT = 'focusScope.autoFocusOnUnmount';\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\ntype FocusableTarget = HTMLElement | { focus(): void };\n\n/* -------------------------------------------------------------------------------------------------\n * FocusScope\n * -----------------------------------------------------------------------------------------------*/\n\nconst FOCUS_SCOPE_NAME = 'FocusScope';\n\ntype FocusScopeElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface FocusScopeProps extends PrimitiveDivProps {\n /**\n * When `true`, tabbing from last item will focus first tabbable\n * and shift+tab from first item will focus last tababble.\n * @defaultValue false\n */\n loop?: boolean;\n\n /**\n * When `true`, focus cannot escape the focus scope via keyboard,\n * pointer, or a programmatic focus.\n * @defaultValue false\n */\n trapped?: boolean;\n\n /**\n * Event handler called when auto-focusing on mount.\n * Can be prevented.\n */\n onMountAutoFocus?: (event: Event) => void;\n\n /**\n * Event handler called when auto-focusing on unmount.\n * Can be prevented.\n */\n onUnmountAutoFocus?: (event: Event) => void;\n}\n\nconst FocusScope = React.forwardRef<FocusScopeElement, FocusScopeProps>((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<HTMLElement | null>(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef<HTMLElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n\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\n // Takes care of trapping focus if focus is moved outside programmatically for example\n React.useEffect(() => {\n if (trapped) {\n function handleFocusIn(event: FocusEvent) {\n if (focusScope.paused || !container) return;\n const target = event.target as HTMLElement | null;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }\n\n function handleFocusOut(event: FocusEvent) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n\n // A `focusout` event with a `null` `relatedTarget` will happen in at least two cases:\n //\n // 1. When the user switches app/tabs/windows/the browser itself loses focus.\n // 2. In Google Chrome, when the focused element is removed from the DOM.\n //\n // We let the browser do its thing here because:\n //\n // 1. The browser already keeps a memory of what's focused for when the page gets refocused.\n // 2. In Google Chrome, if we try to focus the deleted focused element (as per below), it\n // throws the CPU to 100%, so we avoid doing anything for this reason here too.\n if (relatedTarget === null) return;\n\n // If the focus has moved to an actual legitimate element (`relatedTarget !== null`)\n // that is outside the container, we move focus to the last valid focused element inside.\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }\n\n // When the focused element gets removed from the DOM, browsers move focus\n // back to the document.body. In this case, we move focus to the container\n // to keep focus trapped correctly.\n function handleMutations(mutations: MutationRecord[]) {\n const focusedElement = document.activeElement as HTMLElement | null;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n }\n\n document.addEventListener('focusin', handleFocusIn);\n document.addEventListener('focusout', handleFocusOut);\n const mutationObserver = new MutationObserver(handleMutations);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n\n return () => {\n document.removeEventListener('focusin', handleFocusIn);\n document.removeEventListener('focusout', handleFocusOut);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement as HTMLElement | null;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n\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\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n\n // We hit a react bug (fixed in v17) with focusing in unmount.\n // We need to delay the focus a little to get around it for now.\n // See: https://github.com/facebook/react/issues/17894\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 // we need to remove the listener after we `dispatchEvent`\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n\n // Takes care of looping focus (when tabbing whilst at the edges)\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n\n const isTabKey = event.key === 'Tab' && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement as HTMLElement | null;\n\n if (isTabKey && focusedElement) {\n const container = event.currentTarget as HTMLElement;\n const [first, last] = getTabbableEdges(container);\n const hasTabbableElementsInside = first && last;\n\n // we can only wrap focus if we have tabbable edges\n if (!hasTabbableElementsInside) {\n if (focusedElement === container) 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\n return (\n <Primitive.div tabIndex={-1} {...scopeProps} ref={composedRefs} onKeyDown={handleKeyDown} />\n );\n});\n\nFocusScope.displayName = FOCUS_SCOPE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Attempts focusing the first element in a list of candidates.\n * Stops when focus has actually moved.\n */\nfunction focusFirst(candidates: HTMLElement[], { 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}\n\n/**\n * Returns the first and last tabbable elements inside a container.\n */\nfunction getTabbableEdges(container: HTMLElement) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last] as const;\n}\n\n/**\n * Returns a list of potential tabbable candidates.\n *\n * NOTE: This is only a close approximation. For example it doesn't take into account cases like when\n * elements are not visible. This cannot be worked out easily by just reading a property, but rather\n * necessitate runtime knowledge (computed styles, etc). We deal with these cases separately.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker\n * Credit: https://github.com/discord/focus-layers/blob/master/src/util/wrapFocus.tsx#L1\n */\nfunction getTabbableCandidates(container: HTMLElement) {\n const nodes: HTMLElement[] = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node: any) => {\n const isHiddenInput = node.tagName === 'INPUT' && node.type === 'hidden';\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n // `.tabIndex` is not the same as the `tabindex` attribute. It works on the\n // runtime's understanding of tabbability, so this automatically accounts\n // for any kind of element that could be tabbed to.\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n },\n });\n while (walker.nextNode()) nodes.push(walker.currentNode as HTMLElement);\n // we do not take into account the order of nodes with positive `tabIndex` as it\n // hinders accessibility to have tab order different from visual order.\n return nodes;\n}\n\n/**\n * Returns the first visible element in a list.\n * NOTE: Only checks visibility up to the `container`.\n */\nfunction findVisible(elements: HTMLElement[], container: HTMLElement) {\n for (const element of elements) {\n // we stop checking if it's hidden at the `container` level (excluding)\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\n\nfunction isHidden(node: HTMLElement, { upTo }: { upTo?: HTMLElement }) {\n if (getComputedStyle(node).visibility === 'hidden') return true;\n while (node) {\n // we stop at `upTo` (excluding it)\n if (upTo !== undefined && node === upTo) return false;\n if (getComputedStyle(node).display === 'none') return true;\n node = node.parentElement as HTMLElement;\n }\n return false;\n}\n\nfunction isSelectableInput(element: any): element is FocusableTarget & { select: () => void } {\n return element instanceof HTMLInputElement && 'select' in element;\n}\n\nfunction focus(element?: FocusableTarget | null, { select = false } = {}) {\n // only focus if that element is focusable\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n // NOTE: we prevent scrolling on focus, to minimize jarring transitions for users\n element.focus({ preventScroll: true });\n // only select if its not the same element, it supports selection and we need to select\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * FocusScope stack\n * -----------------------------------------------------------------------------------------------*/\n\ntype FocusScopeAPI = { paused: boolean; pause(): void; resume(): void };\nconst focusScopesStack = createFocusScopesStack();\n\nfunction createFocusScopesStack() {\n /** A stack of focus scopes, with the active one at the top */\n let stack: FocusScopeAPI[] = [];\n\n return {\n add(focusScope: FocusScopeAPI) {\n // pause the currently active focus scope (at the top of the stack)\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n // remove in case it already exists (because we'll re-add it at the top of the stack)\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n\n remove(focusScope: FocusScopeAPI) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n },\n };\n}\n\nfunction arrayRemove<T>(array: T[], item: T) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\n\nfunction removeLinks(items: HTMLElement[]) {\n return items.filter((item) => item.tagName !== 'A');\n}\n\nconst Root = FocusScope;\n\nexport {\n FocusScope,\n //\n Root,\n};\nexport type { FocusScopeProps };\n","import * 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';\n\n/* -------------------------------------------------------------------------------------------------\n * Portal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'Portal';\n\ntype PortalElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface PortalProps extends PrimitiveDivProps {\n /**\n * An optional container where the portaled content should be appended.\n */\n container?: Element | DocumentFragment | null;\n}\n\nconst Portal = React.forwardRef<PortalElement, PortalProps>((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\n ? ReactDOM.createPortal(<Primitive.div {...portalProps} ref={forwardedRef} />, container)\n : null;\n});\n\nPortal.displayName = PORTAL_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Portal;\n\nexport {\n Portal,\n //\n Root,\n};\nexport type { PortalProps };\n","import * as React from 'react';\n\n/** Number of components which have requested interest to have focus guards */\nlet count = 0;\n\ninterface FocusGuardsProps {\n children?: React.ReactNode;\n}\n\nfunction FocusGuards(props: FocusGuardsProps) {\n useFocusGuards();\n return props.children;\n}\n\n/**\n * Injects a pair of focus guards at the edges of the whole DOM tree\n * to ensure `focusin` & `focusout` events can be caught consistently.\n */\nfunction useFocusGuards() {\n /* eslint-disable no-restricted-globals */\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\n return () => {\n if (count === 1) {\n document.querySelectorAll('[data-radix-focus-guard]').forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n /* eslint-enable no-restricted-globals */\n}\n\nfunction createFocusGuard() {\n // eslint-disable-next-line no-restricted-globals\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}\n\nexport {\n FocusGuards,\n //\n FocusGuards as Root,\n //\n useFocusGuards,\n};\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","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","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","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 { __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 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 * 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","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","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 { 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","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 { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\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","import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n\n/**\n * Is empty string\n *\n * @param {unknown} value\n * @returns {boolean} Whether the value is an empty string\n */\nexport const isEmptyString = (value: unknown): boolean => value === '';\n\n/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n};\n","export default {\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","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n 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 default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n 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\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 5v14', key: 's699le' }],\n ['path', { d: 'm19 12-7 7-7-7', key: '1idqje' }],\n];\n\n/**\n * @component @name ArrowDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgNXYxNCIgLz4KICA8cGF0aCBkPSJtMTkgMTItNyA3LTctNyIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/arrow-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowDown = createLucideIcon('arrow-down', __iconNode);\n\nexport default ArrowDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]];\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgNiA5IDE3bC01LTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('check', __iconNode);\n\nexport default Check;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]];\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('chevron-down', __iconNode);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm15 18-6-6 6-6', key: '1wnfg3' }]];\n\n/**\n * @component @name ChevronLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTUgMTgtNi02IDYtNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronLeft = createLucideIcon('chevron-left', __iconNode);\n\nexport default ChevronLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'M8 12h8', key: '1wcyev' }],\n];\n\n/**\n * @component @name CircleMinus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KICA8cGF0aCBkPSJNOCAxMmg4IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/circle-minus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CircleMinus = createLucideIcon('circle-minus', __iconNode);\n\nexport default CircleMinus;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'M8 12h8', key: '1wcyev' }],\n ['path', { d: 'M12 8v8', key: 'napkw2' }],\n];\n\n/**\n * @component @name CirclePlus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KICA8cGF0aCBkPSJNOCAxMmg4IiAvPgogIDxwYXRoIGQ9Ik0xMiA4djgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/circle-plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CirclePlus = createLucideIcon('circle-plus', __iconNode);\n\nexport default CirclePlus;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }]];\n\n/**\n * @component @name Circle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Circle = createLucideIcon('circle', __iconNode);\n\nexport default Circle;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M21 12a9 9 0 1 1-6.219-8.56', key: '13zald' }]];\n\n/**\n * @component @name LoaderCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/loader-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LoaderCircle = createLucideIcon('loader-circle', __iconNode);\n\nexport default LoaderCircle;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M5 12h14', key: '1ays0h' }]];\n\n/**\n * @component @name Minus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSAxMmgxNCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/minus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Minus = createLucideIcon('minus', __iconNode);\n\nexport default Minus;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'M12 5v14', key: 's699le' }],\n];\n\n/**\n * @component @name Plus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSAxMmgxNCIgLz4KICA8cGF0aCBkPSJNMTIgNXYxNCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Plus = createLucideIcon('plus', __iconNode);\n\nexport default Plus;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","import * 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';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenu\n * -----------------------------------------------------------------------------------------------*/\n\nconst DROPDOWN_MENU_NAME = 'DropdownMenu';\n\ntype ScopedProps<P> = P & { __scopeDropdownMenu?: Scope };\nconst [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(\n DROPDOWN_MENU_NAME,\n [createMenuScope]\n);\nconst useMenuScope = createMenuScope();\n\ntype DropdownMenuContextValue = {\n triggerId: string;\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n contentId: string;\n open: boolean;\n onOpenChange(open: boolean): void;\n onOpenToggle(): void;\n modal: boolean;\n};\n\nconst [DropdownMenuProvider, useDropdownMenuContext] =\n createDropdownMenuContext<DropdownMenuContextValue>(DROPDOWN_MENU_NAME);\n\ninterface DropdownMenuProps {\n children?: React.ReactNode;\n dir?: Direction;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n modal?: boolean;\n}\n\nconst DropdownMenu: React.FC<DropdownMenuProps> = (props: ScopedProps<DropdownMenuProps>) => {\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<HTMLButtonElement>(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DROPDOWN_MENU_NAME,\n });\n\n return (\n <DropdownMenuProvider\n scope={__scopeDropdownMenu}\n triggerId={useId()}\n triggerRef={triggerRef}\n contentId={useId()}\n open={open}\n onOpenChange={setOpen}\n onOpenToggle={React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}\n modal={modal}\n >\n <MenuPrimitive.Root {...menuScope} open={open} onOpenChange={setOpen} dir={dir} modal={modal}>\n {children}\n </MenuPrimitive.Root>\n </DropdownMenuProvider>\n );\n};\n\nDropdownMenu.displayName = DROPDOWN_MENU_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'DropdownMenuTrigger';\n\ntype DropdownMenuTriggerElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface DropdownMenuTriggerProps extends PrimitiveButtonProps {}\n\nconst DropdownMenuTrigger = React.forwardRef<DropdownMenuTriggerElement, DropdownMenuTriggerProps>(\n (props: ScopedProps<DropdownMenuTriggerProps>, forwardedRef) => {\n const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;\n const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return (\n <MenuPrimitive.Anchor asChild {...menuScope}>\n <Primitive.button\n type=\"button\"\n id={context.triggerId}\n aria-haspopup=\"menu\"\n aria-expanded={context.open}\n aria-controls={context.open ? context.contentId : undefined}\n data-state={context.open ? 'open' : 'closed'}\n data-disabled={disabled ? '' : undefined}\n disabled={disabled}\n {...triggerProps}\n ref={composeRefs(forwardedRef, context.triggerRef)}\n onPointerDown={composeEventHandlers(props.onPointerDown, (event) => {\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onOpenToggle();\n // prevent trigger focusing when opening\n // this allows the content to be given focus without competition\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 // prevent keydown from scrolling window / first focused item to execute\n // that keydown (inadvertently closing the menu)\n if (['Enter', ' ', 'ArrowDown'].includes(event.key)) event.preventDefault();\n })}\n />\n </MenuPrimitive.Anchor>\n );\n }\n);\n\nDropdownMenuTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'DropdownMenuPortal';\n\ntype MenuPortalProps = React.ComponentPropsWithoutRef<typeof MenuPrimitive.Portal>;\ninterface DropdownMenuPortalProps extends MenuPortalProps {}\n\nconst DropdownMenuPortal: React.FC<DropdownMenuPortalProps> = (\n props: ScopedProps<DropdownMenuPortalProps>\n) => {\n const { __scopeDropdownMenu, ...portalProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Portal {...menuScope} {...portalProps} />;\n};\n\nDropdownMenuPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'DropdownMenuContent';\n\ntype DropdownMenuContentElement = React.ComponentRef<typeof MenuPrimitive.Content>;\ntype MenuContentProps = React.ComponentPropsWithoutRef<typeof MenuPrimitive.Content>;\ninterface DropdownMenuContentProps extends Omit<MenuContentProps, 'onEntryFocus'> {}\n\nconst DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, DropdownMenuContentProps>(\n (props: ScopedProps<DropdownMenuContentProps>, 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\n return (\n <MenuPrimitive.Content\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 // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n })}\n onInteractOutside={composeEventHandlers(props.onInteractOutside, (event) => {\n const originalEvent = event.detail.originalEvent as PointerEvent;\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':\n 'var(--radix-popper-transform-origin)',\n '--radix-dropdown-menu-content-available-width': 'var(--radix-popper-available-width)',\n '--radix-dropdown-menu-content-available-height':\n '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);\n\nDropdownMenuContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'DropdownMenuGroup';\n\ntype DropdownMenuGroupElement = React.ComponentRef<typeof MenuPrimitive.Group>;\ntype MenuGroupProps = React.ComponentPropsWithoutRef<typeof MenuPrimitive.Group>;\ninterface DropdownMenuGroupProps extends MenuGroupProps {}\n\nconst DropdownMenuGroup = React.forwardRef<DropdownMenuGroupElement, DropdownMenuGroupProps>(\n (props: ScopedProps<DropdownMenuGroupProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...groupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Group {...menuScope} {...groupProps} ref={forwardedRef} />;\n }\n);\n\nDropdownMenuGroup.displayName = GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuLabel\n * -----------------------------------------------------------------------------------------------*/\n\nconst LABEL_NAME = 'DropdownMenuLabel';\n\ntype DropdownMenuLabelElement = React.ComponentRef<typeof MenuPrimitive.Label>;\ntype MenuLabelProps = React.ComponentPropsWithoutRef<typeof MenuPrimitive.Label>;\ninterface DropdownMenuLabelProps extends MenuLabelProps {}\n\nconst DropdownMenuLabel = React.forwardRef<DropdownMenuLabelElement, DropdownMenuLabelProps>(\n (props: ScopedProps<DropdownMenuLabelProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...labelProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Label {...menuScope} {...labelProps} ref={forwardedRef} />;\n }\n);\n\nDropdownMenuLabel.displayName = LABEL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'DropdownMenuItem';\n\ntype DropdownMenuItemElement = React.ComponentRef<typeof MenuPrimitive.Item>;\ntype MenuItemProps = React.ComponentPropsWithoutRef<typeof MenuPrimitive.Item>;\ninterface DropdownMenuItemProps extends MenuItemProps {}\n\nconst DropdownMenuItem = React.forwardRef<DropdownMenuItemElement, DropdownMenuItemProps>(\n (props: ScopedProps<DropdownMenuItemProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Item {...menuScope} {...itemProps} ref={forwardedRef} />;\n }\n);\n\nDropdownMenuItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuCheckboxItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst CHECKBOX_ITEM_NAME = 'DropdownMenuCheckboxItem';\n\ntype DropdownMenuCheckboxItemElement = React.ComponentRef<typeof MenuPrimitive.CheckboxItem>;\ntype MenuCheckboxItemProps = React.ComponentPropsWithoutRef<typeof MenuPrimitive.CheckboxItem>;\ninterface DropdownMenuCheckboxItemProps extends MenuCheckboxItemProps {}\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n DropdownMenuCheckboxItemElement,\n DropdownMenuCheckboxItemProps\n>((props: ScopedProps<DropdownMenuCheckboxItemProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...checkboxItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.CheckboxItem {...menuScope} {...checkboxItemProps} ref={forwardedRef} />;\n});\n\nDropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuRadioGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_GROUP_NAME = 'DropdownMenuRadioGroup';\n\ntype DropdownMenuRadioGroupElement = React.ComponentRef<typeof MenuPrimitive.RadioGroup>;\ntype MenuRadioGroupProps = React.ComponentPropsWithoutRef<typeof MenuPrimitive.RadioGroup>;\ninterface DropdownMenuRadioGroupProps extends MenuRadioGroupProps {}\n\nconst DropdownMenuRadioGroup = React.forwardRef<\n DropdownMenuRadioGroupElement,\n DropdownMenuRadioGroupProps\n>((props: ScopedProps<DropdownMenuRadioGroupProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioGroupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.RadioGroup {...menuScope} {...radioGroupProps} ref={forwardedRef} />;\n});\n\nDropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuRadioItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_ITEM_NAME = 'DropdownMenuRadioItem';\n\ntype DropdownMenuRadioItemElement = React.ComponentRef<typeof MenuPrimitive.RadioItem>;\ntype MenuRadioItemProps = React.ComponentPropsWithoutRef<typeof MenuPrimitive.RadioItem>;\ninterface DropdownMenuRadioItemProps extends MenuRadioItemProps {}\n\nconst DropdownMenuRadioItem = React.forwardRef<\n DropdownMenuRadioItemElement,\n DropdownMenuRadioItemProps\n>((props: ScopedProps<DropdownMenuRadioItemProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.RadioItem {...menuScope} {...radioItemProps} ref={forwardedRef} />;\n});\n\nDropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuItemIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDICATOR_NAME = 'DropdownMenuItemIndicator';\n\ntype DropdownMenuItemIndicatorElement = React.ComponentRef<typeof MenuPrimitive.ItemIndicator>;\ntype MenuItemIndicatorProps = React.ComponentPropsWithoutRef<typeof MenuPrimitive.ItemIndicator>;\ninterface DropdownMenuItemIndicatorProps extends MenuItemIndicatorProps {}\n\nconst DropdownMenuItemIndicator = React.forwardRef<\n DropdownMenuItemIndicatorElement,\n DropdownMenuItemIndicatorProps\n>((props: ScopedProps<DropdownMenuItemIndicatorProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemIndicatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.ItemIndicator {...menuScope} {...itemIndicatorProps} ref={forwardedRef} />;\n});\n\nDropdownMenuItemIndicator.displayName = INDICATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSeparator\n * -----------------------------------------------------------------------------------------------*/\n\nconst SEPARATOR_NAME = 'DropdownMenuSeparator';\n\ntype DropdownMenuSeparatorElement = React.ComponentRef<typeof MenuPrimitive.Separator>;\ntype MenuSeparatorProps = React.ComponentPropsWithoutRef<typeof MenuPrimitive.Separator>;\ninterface DropdownMenuSeparatorProps extends MenuSeparatorProps {}\n\nconst DropdownMenuSeparator = React.forwardRef<\n DropdownMenuSeparatorElement,\n DropdownMenuSeparatorProps\n>((props: ScopedProps<DropdownMenuSeparatorProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...separatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Separator {...menuScope} {...separatorProps} ref={forwardedRef} />;\n});\n\nDropdownMenuSeparator.displayName = SEPARATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'DropdownMenuArrow';\n\ntype DropdownMenuArrowElement = React.ComponentRef<typeof MenuPrimitive.Arrow>;\ntype MenuArrowProps = React.ComponentPropsWithoutRef<typeof MenuPrimitive.Arrow>;\ninterface DropdownMenuArrowProps extends MenuArrowProps {}\n\nconst DropdownMenuArrow = React.forwardRef<DropdownMenuArrowElement, DropdownMenuArrowProps>(\n (props: ScopedProps<DropdownMenuArrowProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...arrowProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Arrow {...menuScope} {...arrowProps} ref={forwardedRef} />;\n }\n);\n\nDropdownMenuArrow.displayName = ARROW_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSub\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DropdownMenuSubProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n}\n\nconst DropdownMenuSub: React.FC<DropdownMenuSubProps> = (\n props: ScopedProps<DropdownMenuSubProps>\n) => {\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\n return (\n <MenuPrimitive.Sub {...menuScope} open={open} onOpenChange={setOpen}>\n {children}\n </MenuPrimitive.Sub>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSubTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_TRIGGER_NAME = 'DropdownMenuSubTrigger';\n\ntype DropdownMenuSubTriggerElement = React.ComponentRef<typeof MenuPrimitive.SubTrigger>;\ntype MenuSubTriggerProps = React.ComponentPropsWithoutRef<typeof MenuPrimitive.SubTrigger>;\ninterface DropdownMenuSubTriggerProps extends MenuSubTriggerProps {}\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n DropdownMenuSubTriggerElement,\n DropdownMenuSubTriggerProps\n>((props: ScopedProps<DropdownMenuSubTriggerProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...subTriggerProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.SubTrigger {...menuScope} {...subTriggerProps} ref={forwardedRef} />;\n});\n\nDropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSubContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_CONTENT_NAME = 'DropdownMenuSubContent';\n\ntype DropdownMenuSubContentElement = React.ComponentRef<typeof MenuPrimitive.Content>;\ntype MenuSubContentProps = React.ComponentPropsWithoutRef<typeof MenuPrimitive.SubContent>;\ninterface DropdownMenuSubContentProps extends MenuSubContentProps {}\n\nconst DropdownMenuSubContent = React.forwardRef<\n DropdownMenuSubContentElement,\n DropdownMenuSubContentProps\n>((props: ScopedProps<DropdownMenuSubContentProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...subContentProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n\n return (\n <MenuPrimitive.SubContent\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});\n\nDropdownMenuSubContent.displayName = SUB_CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = DropdownMenu;\nconst Trigger = DropdownMenuTrigger;\nconst Portal = DropdownMenuPortal;\nconst Content = DropdownMenuContent;\nconst Group = DropdownMenuGroup;\nconst Label = DropdownMenuLabel;\nconst Item = DropdownMenuItem;\nconst CheckboxItem = DropdownMenuCheckboxItem;\nconst RadioGroup = DropdownMenuRadioGroup;\nconst RadioItem = DropdownMenuRadioItem;\nconst ItemIndicator = DropdownMenuItemIndicator;\nconst Separator = DropdownMenuSeparator;\nconst Arrow = DropdownMenuArrow;\nconst Sub = DropdownMenuSub;\nconst SubTrigger = DropdownMenuSubTrigger;\nconst SubContent = DropdownMenuSubContent;\n\nexport {\n createDropdownMenuScope,\n //\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuPortal,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuItemIndicator,\n DropdownMenuSeparator,\n DropdownMenuArrow,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n //\n Root,\n Trigger,\n Portal,\n Content,\n Group,\n Label,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n ItemIndicator,\n Separator,\n Arrow,\n Sub,\n SubTrigger,\n SubContent,\n};\nexport type {\n DropdownMenuProps,\n DropdownMenuTriggerProps,\n DropdownMenuPortalProps,\n DropdownMenuContentProps,\n DropdownMenuGroupProps,\n DropdownMenuLabelProps,\n DropdownMenuItemProps,\n DropdownMenuCheckboxItemProps,\n DropdownMenuRadioGroupProps,\n DropdownMenuRadioItemProps,\n DropdownMenuItemIndicatorProps,\n DropdownMenuSeparatorProps,\n DropdownMenuArrowProps,\n DropdownMenuSubProps,\n DropdownMenuSubTriggerProps,\n DropdownMenuSubContentProps,\n};\n","import * 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';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\nconst SELECTION_KEYS = ['Enter', ' '];\nconst FIRST_KEYS = ['ArrowDown', 'PageUp', 'Home'];\nconst LAST_KEYS = ['ArrowUp', 'PageDown', 'End'];\nconst FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];\nconst SUB_OPEN_KEYS: Record<Direction, string[]> = {\n ltr: [...SELECTION_KEYS, 'ArrowRight'],\n rtl: [...SELECTION_KEYS, 'ArrowLeft'],\n};\nconst SUB_CLOSE_KEYS: Record<Direction, string[]> = {\n ltr: ['ArrowLeft'],\n rtl: ['ArrowRight'],\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Menu\n * -----------------------------------------------------------------------------------------------*/\n\nconst MENU_NAME = 'Menu';\n\ntype ItemData = { disabled: boolean; textValue: string };\nconst [Collection, useCollection, createCollectionScope] = createCollection<\n MenuItemElement,\n ItemData\n>(MENU_NAME);\n\ntype ScopedProps<P> = P & { __scopeMenu?: Scope };\nconst [createMenuContext, createMenuScope] = createContextScope(MENU_NAME, [\n createCollectionScope,\n createPopperScope,\n createRovingFocusGroupScope,\n]);\nconst usePopperScope = createPopperScope();\nconst useRovingFocusGroupScope = createRovingFocusGroupScope();\n\ntype MenuContextValue = {\n open: boolean;\n onOpenChange(open: boolean): void;\n content: MenuContentElement | null;\n onContentChange(content: MenuContentElement | null): void;\n};\n\nconst [MenuProvider, useMenuContext] = createMenuContext<MenuContextValue>(MENU_NAME);\n\ntype MenuRootContextValue = {\n onClose(): void;\n isUsingKeyboardRef: React.RefObject<boolean>;\n dir: Direction;\n modal: boolean;\n};\n\nconst [MenuRootProvider, useMenuRootContext] = createMenuContext<MenuRootContextValue>(MENU_NAME);\n\ninterface MenuProps {\n children?: React.ReactNode;\n open?: boolean;\n onOpenChange?(open: boolean): void;\n dir?: Direction;\n modal?: boolean;\n}\n\nconst Menu: React.FC<MenuProps> = (props: ScopedProps<MenuProps>) => {\n const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props;\n const popperScope = usePopperScope(__scopeMenu);\n const [content, setContent] = React.useState<MenuContentElement | null>(null);\n const isUsingKeyboardRef = React.useRef(false);\n const handleOpenChange = useCallbackRef(onOpenChange);\n const direction = useDirection(dir);\n\n React.useEffect(() => {\n // Capture phase ensures we set the boolean before any side effects execute\n // in response to the key or pointer event as they might depend on this value.\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\n return (\n <PopperPrimitive.Root {...popperScope}>\n <MenuProvider\n scope={__scopeMenu}\n open={open}\n onOpenChange={handleOpenChange}\n content={content}\n onContentChange={setContent}\n >\n <MenuRootProvider\n scope={__scopeMenu}\n onClose={React.useCallback(() => handleOpenChange(false), [handleOpenChange])}\n isUsingKeyboardRef={isUsingKeyboardRef}\n dir={direction}\n modal={modal}\n >\n {children}\n </MenuRootProvider>\n </MenuProvider>\n </PopperPrimitive.Root>\n );\n};\n\nMenu.displayName = MENU_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuAnchor\n * -----------------------------------------------------------------------------------------------*/\n\nconst ANCHOR_NAME = 'MenuAnchor';\n\ntype MenuAnchorElement = React.ComponentRef<typeof PopperPrimitive.Anchor>;\ntype PopperAnchorProps = React.ComponentPropsWithoutRef<typeof PopperPrimitive.Anchor>;\ninterface MenuAnchorProps extends PopperAnchorProps {}\n\nconst MenuAnchor = React.forwardRef<MenuAnchorElement, MenuAnchorProps>(\n (props: ScopedProps<MenuAnchorProps>, forwardedRef) => {\n const { __scopeMenu, ...anchorProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return <PopperPrimitive.Anchor {...popperScope} {...anchorProps} ref={forwardedRef} />;\n }\n);\n\nMenuAnchor.displayName = ANCHOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'MenuPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createMenuContext<PortalContextValue>(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef<typeof PortalPrimitive>;\ninterface MenuPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst MenuPortal: React.FC<MenuPortalProps> = (props: ScopedProps<MenuPortalProps>) => {\n const { __scopeMenu, forceMount, children, container } = props;\n const context = useMenuContext(PORTAL_NAME, __scopeMenu);\n return (\n <PortalProvider scope={__scopeMenu} forceMount={forceMount}>\n <Presence present={forceMount || context.open}>\n <PortalPrimitive asChild container={container}>\n {children}\n </PortalPrimitive>\n </Presence>\n </PortalProvider>\n );\n};\n\nMenuPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'MenuContent';\n\ntype MenuContentContextValue = {\n onItemEnter(event: React.PointerEvent): void;\n onItemLeave(event: React.PointerEvent): void;\n onTriggerLeave(event: React.PointerEvent): void;\n searchRef: React.RefObject<string>;\n pointerGraceTimerRef: React.MutableRefObject<number>;\n onPointerGraceIntentChange(intent: GraceIntent | null): void;\n};\nconst [MenuContentProvider, useMenuContentContext] =\n createMenuContext<MenuContentContextValue>(CONTENT_NAME);\n\ntype MenuContentElement = MenuRootContentTypeElement;\n/**\n * We purposefully don't union MenuRootContent and MenuSubContent props here because\n * they have conflicting prop types. We agreed that we would allow MenuSubContent to\n * accept props that it would just ignore.\n */\ninterface MenuContentProps extends MenuRootContentTypeProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst MenuContent = React.forwardRef<MenuContentElement, MenuContentProps>(\n (props: ScopedProps<MenuContentProps>, 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\n return (\n <Collection.Provider scope={props.__scopeMenu}>\n <Presence present={forceMount || context.open}>\n <Collection.Slot scope={props.__scopeMenu}>\n {rootContext.modal ? (\n <MenuRootContentModal {...contentProps} ref={forwardedRef} />\n ) : (\n <MenuRootContentNonModal {...contentProps} ref={forwardedRef} />\n )}\n </Collection.Slot>\n </Presence>\n </Collection.Provider>\n );\n }\n);\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype MenuRootContentTypeElement = MenuContentImplElement;\ninterface MenuRootContentTypeProps\n extends Omit<MenuContentImplProps, keyof MenuContentImplPrivateProps> {}\n\nconst MenuRootContentModal = React.forwardRef<MenuRootContentTypeElement, MenuRootContentTypeProps>(\n (props: ScopedProps<MenuRootContentTypeProps>, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef<MenuRootContentTypeElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\n // Hide everything from ARIA except the `MenuContent`\n React.useEffect(() => {\n const content = ref.current;\n if (content) return hideOthers(content);\n }, []);\n\n return (\n <MenuContentImpl\n {...props}\n ref={composedRefs}\n // we make sure we're not trapping once it's been closed\n // (closed !== unmounted when animating out)\n trapFocus={context.open}\n // make sure to only disable pointer events when open\n // this avoids blocking interactions while animating out\n disableOutsidePointerEvents={context.open}\n disableOutsideScroll\n // When focus is trapped, a `focusout` event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n )}\n onDismiss={() => context.onOpenChange(false)}\n />\n );\n }\n);\n\nconst MenuRootContentNonModal = React.forwardRef<\n MenuRootContentTypeElement,\n MenuRootContentTypeProps\n>((props: ScopedProps<MenuRootContentTypeProps>, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n return (\n <MenuContentImpl\n {...props}\n ref={forwardedRef}\n trapFocus={false}\n disableOutsidePointerEvents={false}\n disableOutsideScroll={false}\n onDismiss={() => context.onOpenChange(false)}\n />\n );\n});\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype MenuContentImplElement = React.ComponentRef<typeof PopperPrimitive.Content>;\ntype FocusScopeProps = React.ComponentPropsWithoutRef<typeof FocusScope>;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef<typeof DismissableLayer>;\ntype RovingFocusGroupProps = React.ComponentPropsWithoutRef<typeof RovingFocusGroup.Root>;\ntype PopperContentProps = React.ComponentPropsWithoutRef<typeof PopperPrimitive.Content>;\ntype MenuContentImplPrivateProps = {\n onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];\n onDismiss?: DismissableLayerProps['onDismiss'];\n disableOutsidePointerEvents?: DismissableLayerProps['disableOutsidePointerEvents'];\n\n /**\n * Whether scrolling outside the `MenuContent` should be prevented\n * (default: `false`)\n */\n disableOutsideScroll?: boolean;\n\n /**\n * Whether focus should be trapped within the `MenuContent`\n * (default: false)\n */\n trapFocus?: FocusScopeProps['trapped'];\n};\ninterface MenuContentImplProps\n extends MenuContentImplPrivateProps,\n Omit<PopperContentProps, 'dir' | 'onPlaced'> {\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n\n /**\n * Whether keyboard navigation should loop around\n * @defaultValue false\n */\n loop?: RovingFocusGroupProps['loop'];\n\n onEntryFocus?: RovingFocusGroupProps['onEntryFocus'];\n onEscapeKeyDown?: DismissableLayerProps['onEscapeKeyDown'];\n onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];\n onFocusOutside?: DismissableLayerProps['onFocusOutside'];\n onInteractOutside?: DismissableLayerProps['onInteractOutside'];\n}\n\nconst Slot = createSlot('MenuContent.ScrollLock');\n\nconst MenuContentImpl = React.forwardRef<MenuContentImplElement, MenuContentImplProps>(\n (props: ScopedProps<MenuContentImplProps>, 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<string | null>(null);\n const contentRef = React.useRef<HTMLDivElement>(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<GraceIntent | null>(null);\n const pointerDirRef = React.useRef<Side>('right');\n const lastPointerXRef = React.useRef(0);\n\n const ScrollLockWrapper = disableOutsideScroll ? RemoveScroll : React.Fragment;\n const scrollLockWrapperProps = disableOutsideScroll\n ? { as: Slot, allowPinchZoom: true }\n : undefined;\n\n const handleTypeaheadSearch = (key: string) => {\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\n // Reset `searchRef` 1 second after it was last updated\n (function updateSearch(value: string) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== '') timerRef.current = window.setTimeout(() => updateSearch(''), 1000);\n })(search);\n\n if (newItem) {\n /**\n * Imperative focus during keydown is risky so we prevent React's batching updates\n * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n */\n setTimeout(() => (newItem as HTMLElement).focus());\n }\n };\n\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n\n // Make sure the whole tree has focus guards as our `MenuContent` may be\n // the last element in the DOM (because of the `Portal`)\n useFocusGuards();\n\n const isPointerMovingToSubmenu = React.useCallback((event: React.PointerEvent) => {\n const isMovingTowards = pointerDirRef.current === pointerGraceIntentRef.current?.side;\n return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef.current?.area);\n }, []);\n\n return (\n <MenuContentProvider\n scope={__scopeMenu}\n searchRef={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={pointerGraceTimerRef}\n onPointerGraceIntentChange={React.useCallback((intent) => {\n pointerGraceIntentRef.current = intent;\n }, [])}\n >\n <ScrollLockWrapper {...scrollLockWrapperProps}>\n <FocusScope\n asChild\n trapped={trapFocus}\n onMountAutoFocus={composeEventHandlers(onOpenAutoFocus, (event) => {\n // when opening, explicitly focus the content area only and leave\n // `onEntryFocus` in control of focusing first item\n event.preventDefault();\n contentRef.current?.focus({ preventScroll: true });\n })}\n onUnmountAutoFocus={onCloseAutoFocus}\n >\n <DismissableLayer\n asChild\n disableOutsidePointerEvents={disableOutsidePointerEvents}\n onEscapeKeyDown={onEscapeKeyDown}\n onPointerDownOutside={onPointerDownOutside}\n onFocusOutside={onFocusOutside}\n onInteractOutside={onInteractOutside}\n onDismiss={onDismiss}\n >\n <RovingFocusGroup.Root\n asChild\n {...rovingFocusGroupScope}\n dir={rootContext.dir}\n orientation=\"vertical\"\n loop={loop}\n currentTabStopId={currentItemId}\n onCurrentTabStopIdChange={setCurrentItemId}\n onEntryFocus={composeEventHandlers(onEntryFocus, (event) => {\n // only focus first item when using keyboard\n if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();\n })}\n preventScrollOnEntryFocus\n >\n <PopperPrimitive.Content\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 // submenu key events bubble through portals. We only care about keys in this menu.\n const target = event.target as HTMLElement;\n const isKeyDownInside =\n 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 // menus should not be navigated using tab key so we prevent it\n if (event.key === 'Tab') event.preventDefault();\n if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);\n }\n // focus first/last item based on key pressed\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 // clear search buffer when leaving the menu\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 as HTMLElement;\n const pointerXHasChanged = lastPointerXRef.current !== event.clientX;\n\n // We don't use `event.movementX` for this check because Safari will\n // always return `0` on a pointer event.\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 </RovingFocusGroup.Root>\n </DismissableLayer>\n </FocusScope>\n </ScrollLockWrapper>\n </MenuContentProvider>\n );\n }\n);\n\nMenuContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'MenuGroup';\n\ntype MenuGroupElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface MenuGroupProps extends PrimitiveDivProps {}\n\nconst MenuGroup = React.forwardRef<MenuGroupElement, MenuGroupProps>(\n (props: ScopedProps<MenuGroupProps>, forwardedRef) => {\n const { __scopeMenu, ...groupProps } = props;\n return <Primitive.div role=\"group\" {...groupProps} ref={forwardedRef} />;\n }\n);\n\nMenuGroup.displayName = GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuLabel\n * -----------------------------------------------------------------------------------------------*/\n\nconst LABEL_NAME = 'MenuLabel';\n\ntype MenuLabelElement = React.ComponentRef<typeof Primitive.div>;\ninterface MenuLabelProps extends PrimitiveDivProps {}\n\nconst MenuLabel = React.forwardRef<MenuLabelElement, MenuLabelProps>(\n (props: ScopedProps<MenuLabelProps>, forwardedRef) => {\n const { __scopeMenu, ...labelProps } = props;\n return <Primitive.div {...labelProps} ref={forwardedRef} />;\n }\n);\n\nMenuLabel.displayName = LABEL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'MenuItem';\nconst ITEM_SELECT = 'menu.itemSelect';\n\ntype MenuItemElement = MenuItemImplElement;\ninterface MenuItemProps extends Omit<MenuItemImplProps, 'onSelect'> {\n onSelect?: (event: Event) => void;\n}\n\nconst MenuItem = React.forwardRef<MenuItemElement, MenuItemProps>(\n (props: ScopedProps<MenuItemProps>, forwardedRef) => {\n const { disabled = false, onSelect, ...itemProps } = props;\n const ref = React.useRef<HTMLDivElement>(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\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\n return (\n <MenuItemImpl\n {...itemProps}\n ref={composedRefs}\n disabled={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 // Pointer down can move to a different menu item which should activate it on pointer up.\n // We dispatch a click for selection to allow composition with click based triggers and to\n // prevent Firefox from getting stuck in text selection mode when the menu closes.\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 /**\n * We prevent default browser behaviour for selection keys as they should trigger\n * a selection only:\n * - prevents space from scrolling the page.\n * - if keydown causes focus to move, prevents keydown from firing on the new target.\n */\n event.preventDefault();\n }\n })}\n />\n );\n }\n);\n\nMenuItem.displayName = ITEM_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype MenuItemImplElement = React.ComponentRef<typeof Primitive.div>;\ninterface MenuItemImplProps extends PrimitiveDivProps {\n disabled?: boolean;\n textValue?: string;\n}\n\nconst MenuItemImpl = React.forwardRef<MenuItemImplElement, MenuItemImplProps>(\n (props: ScopedProps<MenuItemImplProps>, 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<HTMLDivElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [isFocused, setIsFocused] = React.useState(false);\n\n // get the item's `.textContent` as default strategy for typeahead `textValue`\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\n return (\n <Collection.ItemSlot\n scope={__scopeMenu}\n disabled={disabled}\n textValue={textValue ?? textContent}\n >\n <RovingFocusGroup.Item asChild {...rovingFocusGroupScope} focusable={!disabled}>\n <Primitive.div\n role=\"menuitem\"\n data-highlighted={isFocused ? '' : undefined}\n aria-disabled={disabled || undefined}\n data-disabled={disabled ? '' : undefined}\n {...itemProps}\n ref={composedRefs}\n /**\n * We focus items on `pointerMove` to achieve the following:\n *\n * - Mouse over an item (it focuses)\n * - Leave mouse where it is and use keyboard to focus a different item\n * - Wiggle mouse without it leaving previously focused item\n * - Previously focused item should re-focus\n *\n * If we used `mouseOver`/`mouseEnter` it would not re-focus when the mouse\n * wiggles. This is to match native menu implementation.\n */\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 </RovingFocusGroup.Item>\n </Collection.ItemSlot>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * MenuCheckboxItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst CHECKBOX_ITEM_NAME = 'MenuCheckboxItem';\n\ntype MenuCheckboxItemElement = MenuItemElement;\n\ntype CheckedState = boolean | 'indeterminate';\n\ninterface MenuCheckboxItemProps extends MenuItemProps {\n checked?: CheckedState;\n // `onCheckedChange` can never be called with `\"indeterminate\"` from the inside\n onCheckedChange?: (checked: boolean) => void;\n}\n\nconst MenuCheckboxItem = React.forwardRef<MenuCheckboxItemElement, MenuCheckboxItemProps>(\n (props: ScopedProps<MenuCheckboxItemProps>, forwardedRef) => {\n const { checked = false, onCheckedChange, ...checkboxItemProps } = props;\n return (\n <ItemIndicatorProvider scope={props.__scopeMenu} checked={checked}>\n <MenuItem\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 </ItemIndicatorProvider>\n );\n }\n);\n\nMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuRadioGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_GROUP_NAME = 'MenuRadioGroup';\n\nconst [RadioGroupProvider, useRadioGroupContext] = createMenuContext<MenuRadioGroupProps>(\n RADIO_GROUP_NAME,\n { value: undefined, onValueChange: () => {} }\n);\n\ntype MenuRadioGroupElement = React.ComponentRef<typeof MenuGroup>;\ninterface MenuRadioGroupProps extends MenuGroupProps {\n value?: string;\n onValueChange?: (value: string) => void;\n}\n\nconst MenuRadioGroup = React.forwardRef<MenuRadioGroupElement, MenuRadioGroupProps>(\n (props: ScopedProps<MenuRadioGroupProps>, forwardedRef) => {\n const { value, onValueChange, ...groupProps } = props;\n const handleValueChange = useCallbackRef(onValueChange);\n return (\n <RadioGroupProvider scope={props.__scopeMenu} value={value} onValueChange={handleValueChange}>\n <MenuGroup {...groupProps} ref={forwardedRef} />\n </RadioGroupProvider>\n );\n }\n);\n\nMenuRadioGroup.displayName = RADIO_GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuRadioItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_ITEM_NAME = 'MenuRadioItem';\n\ntype MenuRadioItemElement = React.ComponentRef<typeof MenuItem>;\ninterface MenuRadioItemProps extends MenuItemProps {\n value: string;\n}\n\nconst MenuRadioItem = React.forwardRef<MenuRadioItemElement, MenuRadioItemProps>(\n (props: ScopedProps<MenuRadioItemProps>, forwardedRef) => {\n const { value, ...radioItemProps } = props;\n const context = useRadioGroupContext(RADIO_ITEM_NAME, props.__scopeMenu);\n const checked = value === context.value;\n return (\n <ItemIndicatorProvider scope={props.__scopeMenu} checked={checked}>\n <MenuItem\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 </ItemIndicatorProvider>\n );\n }\n);\n\nMenuRadioItem.displayName = RADIO_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuItemIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_INDICATOR_NAME = 'MenuItemIndicator';\n\ntype CheckboxContextValue = { checked: CheckedState };\n\nconst [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext<CheckboxContextValue>(\n ITEM_INDICATOR_NAME,\n { checked: false }\n);\n\ntype MenuItemIndicatorElement = React.ComponentRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface MenuItemIndicatorProps extends PrimitiveSpanProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst MenuItemIndicator = React.forwardRef<MenuItemIndicatorElement, MenuItemIndicatorProps>(\n (props: ScopedProps<MenuItemIndicatorProps>, forwardedRef) => {\n const { __scopeMenu, forceMount, ...itemIndicatorProps } = props;\n const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu);\n return (\n <Presence\n present={\n forceMount ||\n isIndeterminate(indicatorContext.checked) ||\n indicatorContext.checked === true\n }\n >\n <Primitive.span\n {...itemIndicatorProps}\n ref={forwardedRef}\n data-state={getCheckedState(indicatorContext.checked)}\n />\n </Presence>\n );\n }\n);\n\nMenuItemIndicator.displayName = ITEM_INDICATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuSeparator\n * -----------------------------------------------------------------------------------------------*/\n\nconst SEPARATOR_NAME = 'MenuSeparator';\n\ntype MenuSeparatorElement = React.ComponentRef<typeof Primitive.div>;\ninterface MenuSeparatorProps extends PrimitiveDivProps {}\n\nconst MenuSeparator = React.forwardRef<MenuSeparatorElement, MenuSeparatorProps>(\n (props: ScopedProps<MenuSeparatorProps>, forwardedRef) => {\n const { __scopeMenu, ...separatorProps } = props;\n return (\n <Primitive.div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n {...separatorProps}\n ref={forwardedRef}\n />\n );\n }\n);\n\nMenuSeparator.displayName = SEPARATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'MenuArrow';\n\ntype MenuArrowElement = React.ComponentRef<typeof PopperPrimitive.Arrow>;\ntype PopperArrowProps = React.ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;\ninterface MenuArrowProps extends PopperArrowProps {}\n\nconst MenuArrow = React.forwardRef<MenuArrowElement, MenuArrowProps>(\n (props: ScopedProps<MenuArrowProps>, forwardedRef) => {\n const { __scopeMenu, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return <PopperPrimitive.Arrow {...popperScope} {...arrowProps} ref={forwardedRef} />;\n }\n);\n\nMenuArrow.displayName = ARROW_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuSub\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_NAME = 'MenuSub';\n\ntype MenuSubContextValue = {\n contentId: string;\n triggerId: string;\n trigger: MenuSubTriggerElement | null;\n onTriggerChange(trigger: MenuSubTriggerElement | null): void;\n};\n\nconst [MenuSubProvider, useMenuSubContext] = createMenuContext<MenuSubContextValue>(SUB_NAME);\n\ninterface MenuSubProps {\n children?: React.ReactNode;\n open?: boolean;\n onOpenChange?(open: boolean): void;\n}\n\nconst MenuSub: React.FC<MenuSubProps> = (props: ScopedProps<MenuSubProps>) => {\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<MenuSubTriggerElement | null>(null);\n const [content, setContent] = React.useState<MenuContentElement | null>(null);\n const handleOpenChange = useCallbackRef(onOpenChange);\n\n // Prevent the parent menu from reopening with open submenus.\n React.useEffect(() => {\n if (parentMenuContext.open === false) handleOpenChange(false);\n return () => handleOpenChange(false);\n }, [parentMenuContext.open, handleOpenChange]);\n\n return (\n <PopperPrimitive.Root {...popperScope}>\n <MenuProvider\n scope={__scopeMenu}\n open={open}\n onOpenChange={handleOpenChange}\n content={content}\n onContentChange={setContent}\n >\n <MenuSubProvider\n scope={__scopeMenu}\n contentId={useId()}\n triggerId={useId()}\n trigger={trigger}\n onTriggerChange={setTrigger}\n >\n {children}\n </MenuSubProvider>\n </MenuProvider>\n </PopperPrimitive.Root>\n );\n};\n\nMenuSub.displayName = SUB_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuSubTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_TRIGGER_NAME = 'MenuSubTrigger';\n\ntype MenuSubTriggerElement = MenuItemImplElement;\ninterface MenuSubTriggerProps extends MenuItemImplProps {}\n\nconst MenuSubTrigger = React.forwardRef<MenuSubTriggerElement, MenuSubTriggerProps>(\n (props: ScopedProps<MenuSubTriggerProps>, 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<number | null>(null);\n const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;\n const scope = { __scopeMenu: props.__scopeMenu };\n\n const clearOpenTimer = React.useCallback(() => {\n if (openTimerRef.current) window.clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }, []);\n\n React.useEffect(() => clearOpenTimer, [clearOpenTimer]);\n\n React.useEffect(() => {\n const pointerGraceTimer = pointerGraceTimerRef.current;\n return () => {\n window.clearTimeout(pointerGraceTimer);\n onPointerGraceIntentChange(null);\n };\n }, [pointerGraceTimerRef, onPointerGraceIntentChange]);\n\n return (\n <MenuAnchor asChild {...scope}>\n <MenuItemImpl\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 // This is redundant for mouse users but we cannot determine pointer type from\n // click event and we cannot use pointerup event (see git history for reasons why)\n onClick={(event) => {\n props.onClick?.(event);\n if (props.disabled || event.defaultPrevented) return;\n /**\n * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)\n * and we rely heavily on `onFocusOutside` for submenus to close when switching\n * between separate submenus.\n */\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\n const contentRect = context.content?.getBoundingClientRect();\n if (contentRect) {\n // TODO: make sure to update this when we change positioning logic\n const side = context.content?.dataset.side as 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\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\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\n // There's 100ms where the user may leave an item before the submenu was opened.\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 // The trigger may hold focus if opened via pointer interaction\n // so we ensure content is given focus again when switching to keyboard.\n context.content?.focus();\n // prevent window from scrolling\n event.preventDefault();\n }\n })}\n />\n </MenuAnchor>\n );\n }\n);\n\nMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuSubContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_CONTENT_NAME = 'MenuSubContent';\n\ntype MenuSubContentElement = MenuContentImplElement;\ninterface MenuSubContentProps\n extends Omit<\n MenuContentImplProps,\n keyof MenuContentImplPrivateProps | 'onCloseAutoFocus' | 'onEntryFocus' | 'side' | 'align'\n > {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst MenuSubContent = React.forwardRef<MenuSubContentElement, MenuSubContentProps>(\n (props: ScopedProps<MenuSubContentProps>, 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<MenuSubContentElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n return (\n <Collection.Provider scope={props.__scopeMenu}>\n <Presence present={forceMount || context.open}>\n <Collection.Slot scope={props.__scopeMenu}>\n <MenuContentImpl\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 // when opening a submenu, focus content for keyboard users only\n if (rootContext.isUsingKeyboardRef.current) ref.current?.focus();\n event.preventDefault();\n }}\n // The menu might close because of focusing another menu item in the parent menu. We\n // don't want it to refocus the trigger in that case so we handle trigger focus ourselves.\n onCloseAutoFocus={(event) => event.preventDefault()}\n onFocusOutside={composeEventHandlers(props.onFocusOutside, (event) => {\n // We prevent closing when the trigger is focused to avoid triggering a re-open animation\n // on pointer interaction.\n if (event.target !== subContext.trigger) context.onOpenChange(false);\n })}\n onEscapeKeyDown={composeEventHandlers(props.onEscapeKeyDown, (event) => {\n rootContext.onClose();\n // ensure pressing escape in submenu doesn't escape full screen mode\n event.preventDefault();\n })}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n // Submenu key events bubble through portals. We only care about keys in this menu.\n const isKeyDownInside = event.currentTarget.contains(event.target as HTMLElement);\n const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);\n if (isKeyDownInside && isCloseKey) {\n context.onOpenChange(false);\n // We focus manually because we prevented it in `onCloseAutoFocus`\n subContext.trigger?.focus();\n // prevent window from scrolling\n event.preventDefault();\n }\n })}\n />\n </Collection.Slot>\n </Presence>\n </Collection.Provider>\n );\n }\n);\n\nMenuSubContent.displayName = SUB_CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getOpenState(open: boolean) {\n return open ? 'open' : 'closed';\n}\n\nfunction isIndeterminate(checked?: CheckedState): checked is 'indeterminate' {\n return checked === 'indeterminate';\n}\n\nfunction getCheckedState(checked: CheckedState) {\n return isIndeterminate(checked) ? 'indeterminate' : checked ? 'checked' : 'unchecked';\n}\n\nfunction focusFirst(candidates: HTMLElement[]) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n // if focus is already where we want to go, we don't want to keep going through the candidates\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nfunction wrapArray<T>(array: T[], startIndex: number) {\n return array.map<T>((_, index) => array[(startIndex + index) % array.length]!);\n}\n\n/**\n * This is the \"meat\" of the typeahead matching logic. It takes in all the values,\n * the search and the current match, and returns the next match (or `undefined`).\n *\n * We normalize the search because if a user has repeatedly pressed a character,\n * we want the exact same behavior as if we only had that one character\n * (ie. cycle through options starting with that character)\n *\n * We also reorder the values by wrapping the array around the current match.\n * This is so we always look forward from the current match, and picking the first\n * match will always be the correct one.\n *\n * Finally, if the normalized search is exactly one character, we exclude the\n * current match from the values because otherwise it would be the first to match always\n * and focus would never move. This is as opposed to the regular case, where we\n * don't want focus to move if the current match still matches.\n */\nfunction getNextMatch(values: string[], search: string, currentMatch?: string) {\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((value) =>\n value.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextMatch !== currentMatch ? nextMatch : undefined;\n}\n\ntype Point = { x: number; y: number };\ntype Polygon = Point[];\ntype Side = 'left' | 'right';\ntype GraceIntent = { area: Polygon; side: Side };\n\n// Determine if a point is inside of a polygon.\n// Based on https://github.com/substack/point-in-polygon\nfunction isPointInPolygon(point: Point, polygon: 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\n // prettier-ignore\n const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n\n return inside;\n}\n\nfunction isPointerInGraceArea(event: React.PointerEvent, area?: Polygon) {\n if (!area) return false;\n const cursorPos = { x: event.clientX, y: event.clientY };\n return isPointInPolygon(cursorPos, area);\n}\n\nfunction whenMouse<E>(handler: React.PointerEventHandler<E>): React.PointerEventHandler<E> {\n return (event) => (event.pointerType === 'mouse' ? handler(event) : undefined);\n}\n\nconst Root = Menu;\nconst Anchor = MenuAnchor;\nconst Portal = MenuPortal;\nconst Content = MenuContent;\nconst Group = MenuGroup;\nconst Label = MenuLabel;\nconst Item = MenuItem;\nconst CheckboxItem = MenuCheckboxItem;\nconst RadioGroup = MenuRadioGroup;\nconst RadioItem = MenuRadioItem;\nconst ItemIndicator = MenuItemIndicator;\nconst Separator = MenuSeparator;\nconst Arrow = MenuArrow;\nconst Sub = MenuSub;\nconst SubTrigger = MenuSubTrigger;\nconst SubContent = MenuSubContent;\n\nexport {\n createMenuScope,\n //\n Menu,\n MenuAnchor,\n MenuPortal,\n MenuContent,\n MenuGroup,\n MenuLabel,\n MenuItem,\n MenuCheckboxItem,\n MenuRadioGroup,\n MenuRadioItem,\n MenuItemIndicator,\n MenuSeparator,\n MenuArrow,\n MenuSub,\n MenuSubTrigger,\n MenuSubContent,\n //\n Root,\n Anchor,\n Portal,\n Content,\n Group,\n Label,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n ItemIndicator,\n Separator,\n Arrow,\n Sub,\n SubTrigger,\n SubContent,\n};\nexport type {\n MenuProps,\n MenuAnchorProps,\n MenuPortalProps,\n MenuContentProps,\n MenuGroupProps,\n MenuLabelProps,\n MenuItemProps,\n MenuCheckboxItemProps,\n MenuRadioGroupProps,\n MenuRadioItemProps,\n MenuItemIndicatorProps,\n MenuSeparatorProps,\n MenuArrowProps,\n MenuSubProps,\n MenuSubTriggerProps,\n MenuSubContentProps,\n};\n","import React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createSlot, type Slot } from '@radix-ui/react-slot';\n\ntype SlotProps = React.ComponentPropsWithoutRef<typeof Slot>;\ntype CollectionElement = HTMLElement;\ninterface CollectionProps extends SlotProps {\n scope: any;\n}\n\n// We have resorted to returning slots directly rather than exposing primitives that can then\n// be slotted like `<CollectionItem as={Slot}>…</CollectionItem>`.\n// This is because we encountered issues with generic types that cannot be statically analysed\n// due to creating them dynamically via createCollection.\n\nfunction createCollection<ItemElement extends HTMLElement, ItemData = {}>(name: string) {\n /* -----------------------------------------------------------------------------------------------\n * CollectionProvider\n * ---------------------------------------------------------------------------------------------*/\n\n const PROVIDER_NAME = name + 'CollectionProvider';\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n\n type ContextValue = {\n collectionRef: React.RefObject<CollectionElement | null>;\n itemMap: Map<\n React.RefObject<ItemElement | null>,\n { ref: React.RefObject<ItemElement | null> } & ItemData\n >;\n };\n\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext<ContextValue>(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: new Map() }\n );\n\n const CollectionProvider: React.FC<{ children?: React.ReactNode; scope: any }> = (props) => {\n const { scope, children } = props;\n const ref = React.useRef<CollectionElement>(null);\n const itemMap = React.useRef<ContextValue['itemMap']>(new Map()).current;\n return (\n <CollectionProviderImpl scope={scope} itemMap={itemMap} collectionRef={ref}>\n {children}\n </CollectionProviderImpl>\n );\n };\n\n CollectionProvider.displayName = PROVIDER_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionSlot\n * ---------------------------------------------------------------------------------------------*/\n\n const COLLECTION_SLOT_NAME = name + 'CollectionSlot';\n\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef<CollectionElement, CollectionProps>(\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 <CollectionSlotImpl ref={composedRefs}>{children}</CollectionSlotImpl>;\n }\n );\n\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionItem\n * ---------------------------------------------------------------------------------------------*/\n\n const ITEM_SLOT_NAME = name + 'CollectionItemSlot';\n const ITEM_DATA_ATTR = 'data-radix-collection-item';\n\n type CollectionItemSlotProps = ItemData & {\n children: React.ReactNode;\n scope: any;\n };\n\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef<ItemElement, CollectionItemSlotProps>(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef<ItemElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...(itemData as unknown as ItemData) });\n return () => void context.itemMap.delete(ref);\n });\n\n return (\n <CollectionItemSlotImpl {...{ [ITEM_DATA_ATTR]: '' }} ref={composedRefs}>\n {children}\n </CollectionItemSlotImpl>\n );\n }\n );\n\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * useCollection\n * ---------------------------------------------------------------------------------------------*/\n\n function useCollection(scope: any) {\n const context = useCollectionContext(name + 'CollectionConsumer', scope);\n\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\n return getItems;\n }\n\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope,\n ] as const;\n}\n\nexport { createCollection };\nexport type { CollectionProps };\n","import React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createSlot, type Slot } from '@radix-ui/react-slot';\nimport type { EntryOf } from './ordered-dictionary';\nimport { OrderedDict } from './ordered-dictionary';\n\ntype SlotProps = React.ComponentPropsWithoutRef<typeof Slot>;\ntype CollectionElement = HTMLElement;\ninterface CollectionProps extends SlotProps {\n scope: any;\n}\n\ninterface BaseItemData {\n id?: string;\n}\n\ntype ItemDataWithElement<\n ItemData extends BaseItemData,\n ItemElement extends HTMLElement,\n> = ItemData & {\n element: ItemElement;\n};\n\ntype ItemMap<ItemElement extends HTMLElement, ItemData extends BaseItemData> = OrderedDict<\n ItemElement,\n ItemDataWithElement<ItemData, ItemElement>\n>;\n\nfunction createCollection<\n ItemElement extends HTMLElement,\n ItemData extends BaseItemData = BaseItemData,\n>(name: string) {\n /* -----------------------------------------------------------------------------------------------\n * CollectionProvider\n * ---------------------------------------------------------------------------------------------*/\n\n const PROVIDER_NAME = name + 'CollectionProvider';\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n\n type ContextValue = {\n collectionElement: CollectionElement | null;\n collectionRef: React.Ref<CollectionElement | null>;\n collectionRefObject: React.RefObject<CollectionElement | null>;\n itemMap: ItemMap<ItemElement, ItemData>;\n setItemMap: React.Dispatch<React.SetStateAction<ItemMap<ItemElement, ItemData>>>;\n };\n\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext<ContextValue>(\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\n type CollectionState = [\n ItemMap: ItemMap<ItemElement, ItemData>,\n SetItemMap: React.Dispatch<React.SetStateAction<ItemMap<ItemElement, ItemData>>>,\n ];\n\n const CollectionProvider: React.FC<{\n children?: React.ReactNode;\n scope: any;\n state?: CollectionState;\n }> = ({ state, ...props }) => {\n return state ? (\n <CollectionProviderImpl {...props} state={state} />\n ) : (\n <CollectionInit {...props} />\n );\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n\n const CollectionInit: React.FC<{\n children?: React.ReactNode;\n scope: any;\n }> = (props) => {\n const state = useInitCollection();\n return <CollectionProviderImpl {...props} state={state} />;\n };\n CollectionInit.displayName = PROVIDER_NAME + 'Init';\n\n const CollectionProviderImpl: React.FC<{\n children?: React.ReactNode;\n scope: any;\n state: CollectionState;\n }> = (props) => {\n const { scope, children, state } = props;\n const ref = React.useRef<CollectionElement>(null);\n const [collectionElement, setCollectionElement] = React.useState<CollectionElement | null>(\n null\n );\n const composeRefs = useComposedRefs(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n\n React.useEffect(() => {\n if (!collectionElement) return;\n\n const observer = getChildListObserver(() => {\n // setItemMap((map) => {\n // const copy = new OrderedDict(map).toSorted(([, a], [, b]) =>\n // !a.element || !b.element ? 0 : isElementPreceding(a.element, b.element) ? -1 : 1\n // );\n // // check if the order has changed\n // let index = -1;\n // for (const entry of copy) {\n // index++;\n // const key = map.keyAt(index)!;\n // const [copyKey] = entry;\n // if (key !== copyKey) {\n // // order has changed!\n // return copy;\n // }\n // }\n // return map;\n // });\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true,\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n\n return (\n <CollectionContextProvider\n scope={scope}\n itemMap={itemMap}\n setItemMap={setItemMap}\n collectionRef={composeRefs}\n collectionRefObject={ref}\n collectionElement={collectionElement}\n >\n {children}\n </CollectionContextProvider>\n );\n };\n\n CollectionProviderImpl.displayName = PROVIDER_NAME + 'Impl';\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionSlot\n * ---------------------------------------------------------------------------------------------*/\n\n const COLLECTION_SLOT_NAME = name + 'CollectionSlot';\n\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef<CollectionElement, CollectionProps>(\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 <CollectionSlotImpl ref={composedRefs}>{children}</CollectionSlotImpl>;\n }\n );\n\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionItem\n * ---------------------------------------------------------------------------------------------*/\n\n const ITEM_SLOT_NAME = name + 'CollectionItemSlot';\n const ITEM_DATA_ATTR = 'data-radix-collection-item';\n\n type CollectionItemSlotProps = ItemData & {\n children: React.ReactNode;\n scope: any;\n };\n\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef<ItemElement, CollectionItemSlotProps>(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef<ItemElement>(null);\n const [element, setElement] = React.useState<ItemElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n\n const { setItemMap } = context;\n\n const itemDataRef = React.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n\n React.useEffect(() => {\n const itemData = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n\n if (!map.has(element)) {\n map.set(element, { ...(itemData as unknown as ItemData), element });\n return map.toSorted(sortByDocumentPosition);\n }\n\n return map\n .set(element, { ...(itemData as unknown as ItemData), element })\n .toSorted(sortByDocumentPosition);\n });\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\n return (\n <CollectionItemSlotImpl {...{ [ITEM_DATA_ATTR]: '' }} ref={composedRefs as any}>\n {children}\n </CollectionItemSlotImpl>\n );\n }\n );\n\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * useInitCollection\n * ---------------------------------------------------------------------------------------------*/\n\n function useInitCollection() {\n return React.useState<ItemMap<ItemElement, ItemData>>(new OrderedDict());\n }\n\n /* -----------------------------------------------------------------------------------------------\n * useCollection\n * ---------------------------------------------------------------------------------------------*/\n\n function useCollection(scope: any) {\n const { itemMap } = useCollectionContext(name + 'CollectionConsumer', scope);\n\n return itemMap;\n }\n\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection,\n };\n\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions,\n ] as const;\n}\n\nexport { createCollection };\nexport type { CollectionProps };\n\nfunction shallowEqual(a: any, b: any) {\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}\n\nfunction isElementPreceding(a: Element, b: Element) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\n\nfunction sortByDocumentPosition<E extends HTMLElement, T extends BaseItemData>(\n a: EntryOf<ItemMap<E, T>>,\n b: EntryOf<ItemMap<E, T>>\n) {\n return !a[1].element || !b[1].element\n ? 0\n : isElementPreceding(a[1].element, b[1].element)\n ? -1\n : 1;\n}\n\nfunction getChildListObserver(callback: () => void) {\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\n return observer;\n}\n","// Not a real member because it shouldn't be accessible, but the super class\n// calls `set` which needs to read the instanciation state, so it can't be a\n// private member.\nconst __instanciated = new WeakMap<OrderedDict<any, any>, boolean>();\nexport class OrderedDict<K, V> extends Map<K, V> {\n #keys: K[];\n\n constructor(iterable?: Iterable<readonly [K, V]> | null | undefined);\n constructor(entries?: readonly (readonly [K, V])[] | null) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n\n set(key: K, value: V) {\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\n insert(index: number, key: K, value: V) {\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\n if (safeIndex === this.size || (has && safeIndex === this.size - 1) || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n\n const size = this.size + (has ? 0 : 1);\n\n // If you insert at, say, -2, without this bit you'd replace the\n // second-to-last item and push the rest up one, which means the new item is\n // 3rd to last. This isn't very intuitive; inserting at -2 is more like\n // saying \"make this item the second to last\".\n if (relativeIndex < 0) {\n actualIndex++;\n }\n\n const keys = [...this.#keys];\n let nextValue: V | undefined;\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 // delete first to ensure that the item is moved to the end\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\n with(index: number, key: K, value: V) {\n const copy = new OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n\n before(key: K) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return undefined;\n }\n return this.entryAt(index);\n }\n\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key: K, newKey: K, value: V) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n\n after(key: K) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return undefined;\n }\n return this.entryAt(index);\n }\n\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key: K, newKey: K, value: V) {\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\n first() {\n return this.entryAt(0);\n }\n\n last() {\n return this.entryAt(-1);\n }\n\n clear() {\n this.#keys = [];\n return super.clear();\n }\n\n delete(key: K) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n\n deleteAt(index: number) {\n const key = this.keyAt(index);\n if (key !== undefined) {\n return this.delete(key);\n }\n return false;\n }\n\n at(index: number) {\n const key = at(this.#keys, index);\n if (key !== undefined) {\n return this.get(key);\n }\n }\n\n entryAt(index: number): [K, V] | undefined {\n const key = at(this.#keys, index);\n if (key !== undefined) {\n return [key, this.get(key)!];\n }\n }\n\n indexOf(key: K) {\n return this.#keys.indexOf(key);\n }\n\n keyAt(index: number) {\n return at(this.#keys, index);\n }\n\n from(key: K, offset: number) {\n const index = this.indexOf(key);\n if (index === -1) {\n return undefined;\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\n keyFrom(key: K, offset: number) {\n const index = this.indexOf(key);\n if (index === -1) {\n return undefined;\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\n find(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => boolean,\n thisArg?: any\n ) {\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 undefined;\n }\n\n findIndex(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => boolean,\n thisArg?: any\n ) {\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\n filter<KK extends K, VV extends V>(\n predicate: (entry: [K, V], index: number, dict: OrderedDict<K, V>) => entry is [KK, VV],\n thisArg?: any\n ): OrderedDict<KK, VV>;\n\n filter(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n thisArg?: any\n ): OrderedDict<K, V>;\n\n filter(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n thisArg?: any\n ) {\n const entries: Array<[K, V]> = [];\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\n map<U>(\n callbackfn: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => U,\n thisArg?: any\n ): OrderedDict<K, U> {\n const entries: [K, U][] = [];\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\n reduce(\n callbackfn: (\n previousValue: [K, V],\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => [K, V]\n ): [K, V];\n reduce(\n callbackfn: (\n previousValue: [K, V],\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => [K, V],\n initialValue: [K, V]\n ): [K, V];\n reduce<U>(\n callbackfn: (\n previousValue: U,\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => U,\n initialValue: U\n ): U;\n\n reduce<U>(\n ...args: [\n (\n previousValue: U,\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => U,\n U?,\n ]\n ) {\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 as any;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n\n reduceRight(\n callbackfn: (\n previousValue: [K, V],\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => [K, V]\n ): [K, V];\n reduceRight(\n callbackfn: (\n previousValue: [K, V],\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => [K, V],\n initialValue: [K, V]\n ): [K, V];\n reduceRight<U>(\n callbackfn: (\n previousValue: [K, V],\n currentValue: U,\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => U,\n initialValue: U\n ): U;\n\n reduceRight<U>(\n ...args: [\n (\n previousValue: U,\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => U,\n U?,\n ]\n ) {\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 as any;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n\n toSorted(compareFn?: (a: [K, V], b: [K, V]) => number): OrderedDict<K, V> {\n const entries = [...this.entries()].sort(compareFn);\n return new OrderedDict(entries);\n }\n\n toReversed(): OrderedDict<K, V> {\n const reversed = new OrderedDict<K, V>();\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\n toSpliced(start: number, deleteCount?: number): OrderedDict<K, V>;\n toSpliced(start: number, deleteCount: number, ...items: [K, V][]): OrderedDict<K, V>;\n\n toSpliced(...args: [start: number, deleteCount: number, ...items: [K, V][]]) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new OrderedDict(entries);\n }\n\n slice(start?: number, end?: number) {\n const result = new OrderedDict<K, V>();\n let stop = this.size - 1;\n\n if (start === undefined) {\n return result;\n }\n\n if (start < 0) {\n start = start + this.size;\n }\n\n if (end !== undefined && end > 0) {\n stop = end - 1;\n }\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\n every(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n thisArg?: any\n ) {\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\n some(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n thisArg?: any\n ) {\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}\n\nexport type KeyOf<D extends OrderedDict<any, any>> =\n D extends OrderedDict<infer K, any> ? K : never;\nexport type ValueOf<D extends OrderedDict<any, any>> =\n D extends OrderedDict<any, infer V> ? V : never;\nexport type EntryOf<D extends OrderedDict<any, any>> = [KeyOf<D>, ValueOf<D>];\nexport type KeyFrom<E extends EntryOf<any>> = E[0];\nexport type ValueFrom<E extends EntryOf<any>> = E[1];\n\nfunction at<T>(array: ArrayLike<T>, index: number): T | undefined {\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 ? undefined : array[actualIndex];\n}\n\nfunction toSafeIndex(array: ArrayLike<any>, index: number) {\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}\n\nfunction toSafeInteger(number: number) {\n // eslint-disable-next-line no-self-compare\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n","import * as React from 'react';\n\ntype Direction = 'ltr' | 'rtl';\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\n/* -------------------------------------------------------------------------------------------------\n * Direction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DirectionProviderProps {\n children?: React.ReactNode;\n dir: Direction;\n}\nconst DirectionProvider: React.FC<DirectionProviderProps> = (props) => {\n const { dir, children } = props;\n return <DirectionContext.Provider value={dir}>{children}</DirectionContext.Provider>;\n};\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useDirection(localDir?: Direction) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || 'ltr';\n}\n\nconst Provider = DirectionProvider;\n\nexport {\n useDirection,\n //\n Provider,\n //\n DirectionProvider,\n};\n","import * 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';\n\nimport type { Placement, Middleware } from '@floating-ui/react-dom';\nimport type { Scope } from '@radix-ui/react-context';\nimport type { Measurable } from '@radix-ui/rect';\n\nconst SIDE_OPTIONS = ['top', 'right', 'bottom', 'left'] as const;\nconst ALIGN_OPTIONS = ['start', 'center', 'end'] as const;\n\ntype Side = (typeof SIDE_OPTIONS)[number];\ntype Align = (typeof ALIGN_OPTIONS)[number];\n\n/* -------------------------------------------------------------------------------------------------\n * Popper\n * -----------------------------------------------------------------------------------------------*/\n\nconst POPPER_NAME = 'Popper';\n\ntype ScopedProps<P> = P & { __scopePopper?: Scope };\nconst [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\n\ntype PopperContextValue = {\n anchor: Measurable | null;\n onAnchorChange(anchor: Measurable | null): void;\n};\nconst [PopperProvider, usePopperContext] = createPopperContext<PopperContextValue>(POPPER_NAME);\n\ninterface PopperProps {\n children?: React.ReactNode;\n}\nconst Popper: React.FC<PopperProps> = (props: ScopedProps<PopperProps>) => {\n const { __scopePopper, children } = props;\n const [anchor, setAnchor] = React.useState<Measurable | null>(null);\n return (\n <PopperProvider scope={__scopePopper} anchor={anchor} onAnchorChange={setAnchor}>\n {children}\n </PopperProvider>\n );\n};\n\nPopper.displayName = POPPER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopperAnchor\n * -----------------------------------------------------------------------------------------------*/\n\nconst ANCHOR_NAME = 'PopperAnchor';\n\ntype PopperAnchorElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface PopperAnchorProps extends PrimitiveDivProps {\n virtualRef?: React.RefObject<Measurable>;\n}\n\nconst PopperAnchor = React.forwardRef<PopperAnchorElement, PopperAnchorProps>(\n (props: ScopedProps<PopperAnchorProps>, forwardedRef) => {\n const { __scopePopper, virtualRef, ...anchorProps } = props;\n const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n const ref = React.useRef<PopperAnchorElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\n const anchorRef = React.useRef<Measurable | null>(null);\n React.useEffect(() => {\n const previousAnchor = anchorRef.current;\n anchorRef.current = virtualRef?.current || ref.current;\n if (previousAnchor !== anchorRef.current) {\n // Consumer can anchor the popper to something that isn't\n // a DOM node e.g. pointer position, so we override the\n // `anchorRef` with their virtual ref in this case.\n context.onAnchorChange(anchorRef.current);\n }\n });\n\n return virtualRef ? null : <Primitive.div {...anchorProps} ref={composedRefs} />;\n }\n);\n\nPopperAnchor.displayName = ANCHOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopperContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'PopperContent';\n\ntype PopperContentContextValue = {\n placedSide: Side;\n onArrowChange(arrow: HTMLSpanElement | null): void;\n arrowX?: number;\n arrowY?: number;\n shouldHideArrow: boolean;\n};\n\nconst [PopperContentProvider, useContentContext] =\n createPopperContext<PopperContentContextValue>(CONTENT_NAME);\n\ntype Boundary = Element | null;\n\ntype PopperContentElement = React.ComponentRef<typeof Primitive.div>;\ninterface PopperContentProps extends PrimitiveDivProps {\n side?: Side;\n sideOffset?: number;\n align?: Align;\n alignOffset?: number;\n arrowPadding?: number;\n avoidCollisions?: boolean;\n collisionBoundary?: Boundary | Boundary[];\n collisionPadding?: number | Partial<Record<Side, number>>;\n sticky?: 'partial' | 'always';\n hideWhenDetached?: boolean;\n updatePositionStrategy?: 'optimized' | 'always';\n onPlaced?: () => void;\n}\n\nconst PopperContent = React.forwardRef<PopperContentElement, PopperContentProps>(\n (props: ScopedProps<PopperContentProps>, 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\n const context = usePopperContext(CONTENT_NAME, __scopePopper);\n\n const [content, setContent] = React.useState<HTMLDivElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n\n const [arrow, setArrow] = React.useState<HTMLSpanElement | null>(null);\n const arrowSize = useSize(arrow);\n const arrowWidth = arrowSize?.width ?? 0;\n const arrowHeight = arrowSize?.height ?? 0;\n\n const desiredPlacement = (side + (align !== 'center' ? '-' + align : '')) as Placement;\n\n const collisionPadding =\n typeof collisionPaddingProp === 'number'\n ? collisionPaddingProp\n : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n\n const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n const hasExplicitBoundaries = boundary.length > 0;\n\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\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 &&\n shift({\n mainAxis: true,\n crossAxis: false,\n limiter: sticky === 'partial' ? limitShift() : undefined,\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\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n\n const handlePlaced = useCallbackRef(onPlaced);\n useLayoutEffect(() => {\n if (isPositioned) {\n handlePlaced?.();\n }\n }, [isPositioned, handlePlaced]);\n\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n\n const [contentZIndex, setContentZIndex] = React.useState<string>();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n\n return (\n <div\n ref={refs.setFloating}\n data-radix-popper-content-wrapper=\"\"\n style={{\n ...floatingStyles,\n transform: isPositioned ? floatingStyles.transform : 'translate(0, -200%)', // keep off the page when measuring\n minWidth: 'max-content',\n zIndex: contentZIndex,\n ['--radix-popper-transform-origin' as any]: [\n middlewareData.transformOrigin?.x,\n middlewareData.transformOrigin?.y,\n ].join(' '),\n\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 // Floating UI interally calculates logical alignment based the `dir` attribute on\n // the reference/floating node, we must add this attribute here to ensure\n // this is calculated when portalled as well as inline.\n dir={props.dir}\n >\n <PopperContentProvider\n scope={__scopePopper}\n placedSide={placedSide}\n onArrowChange={setArrow}\n arrowX={arrowX}\n arrowY={arrowY}\n shouldHideArrow={cannotCenterArrow}\n >\n <Primitive.div\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' : undefined,\n }}\n />\n </PopperContentProvider>\n </div>\n );\n }\n);\n\nPopperContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopperArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'PopperArrow';\n\nconst OPPOSITE_SIDE: Record<Side, Side> = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n};\n\ntype PopperArrowElement = React.ComponentRef<typeof ArrowPrimitive.Root>;\ntype ArrowProps = React.ComponentPropsWithoutRef<typeof ArrowPrimitive.Root>;\ninterface PopperArrowProps extends ArrowProps {}\n\nconst PopperArrow = React.forwardRef<PopperArrowElement, PopperArrowProps>(function PopperArrow(\n props: ScopedProps<PopperArrowProps>,\n forwardedRef\n) {\n const { __scopePopper, ...arrowProps } = props;\n const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n\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 <span\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' : undefined,\n }}\n >\n <ArrowPrimitive.Root\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 </span>\n );\n});\n\nPopperArrow.displayName = ARROW_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction isNotNull<T>(value: T | null): value is T {\n return value !== null;\n}\n\nconst transformOrigin = (options: { arrowWidth: number; arrowHeight: number }): Middleware => ({\n name: 'transformOrigin',\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n\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\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: '0%', center: '50%', end: '100%' }[placedAlign];\n\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n\n let x = '';\n let y = '';\n\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});\n\nfunction getSideAndAlignFromPlacement(placement: Placement) {\n const [side, align = 'center'] = placement.split('-');\n return [side as Side, align as Align] as const;\n}\n\nconst Root = Popper;\nconst Anchor = PopperAnchor;\nconst Content = PopperContent;\nconst Arrow = PopperArrow;\n\nexport {\n createPopperScope,\n //\n Popper,\n PopperAnchor,\n PopperContent,\n PopperArrow,\n //\n Root,\n Anchor,\n Content,\n Arrow,\n //\n SIDE_OPTIONS,\n ALIGN_OPTIONS,\n};\nexport type { PopperProps, PopperAnchorProps, PopperContentProps, PopperArrowProps };\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};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\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}\nconst yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);\nfunction getSideAxis(placement) {\n return yAxisSides.has(getSide(placement)) ? '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.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\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 return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\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 * 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 validMiddleware = middleware.filter(Boolean);\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 middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\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,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\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 * 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/**\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 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 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 } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await 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 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 } = 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 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 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}\nconst invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);\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) && !invalidOverflowDisplayValues.has(display);\n}\nconst tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);\nfunction isTableElement(element) {\n return tableElements.has(getNodeName(element));\n}\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n return topLayerSelectors.some(selector => {\n try {\n return element.matches(selector);\n } catch (_e) {\n return false;\n }\n });\n}\nconst transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];\nconst willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];\nconst containValues = ['paint', 'layout', 'strict', 'content'];\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\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 transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));\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 (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nconst lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);\nfunction isLastTraversableNode(node) {\n return lastTraversableNodeNames.has(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 }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\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 (isHTMLElement(offsetParent)) {\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\nconst absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);\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 && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || 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 firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.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) : []), ...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) {\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 resizeObserver.observe(floating);\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 ...offset$1(options),\n options: [options, deps]\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 ...shift$1(options),\n options: [options, deps]\n});\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => ({\n ...limitShift$1(options),\n options: [options, deps]\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 ...flip$1(options),\n options: [options, deps]\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 ...size$1(options),\n options: [options, deps]\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 ...autoPlacement$1(options),\n options: [options, deps]\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 ...hide$1(options),\n options: [options, deps]\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 ...inline$1(options),\n options: [options, deps]\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 ...arrow$1(options),\n options: [options, deps]\n});\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","import * as React from 'react';\nimport { Primitive } from '@radix-ui/react-primitive';\n\n/* -------------------------------------------------------------------------------------------------\n * Arrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst NAME = 'Arrow';\n\ntype ArrowElement = React.ComponentRef<typeof Primitive.svg>;\ntype PrimitiveSvgProps = React.ComponentPropsWithoutRef<typeof Primitive.svg>;\ninterface ArrowProps extends PrimitiveSvgProps {}\n\nconst Arrow = React.forwardRef<ArrowElement, ArrowProps>((props, forwardedRef) => {\n const { children, width = 10, height = 5, ...arrowProps } = props;\n return (\n <Primitive.svg\n {...arrowProps}\n ref={forwardedRef}\n width={width}\n height={height}\n viewBox=\"0 0 30 10\"\n preserveAspectRatio=\"none\"\n >\n {/* We use their children if they're slotting to replace the whole svg */}\n {props.asChild ? children : <polygon points=\"0,0 30,0 15,10\" />}\n </Primitive.svg>\n );\n});\n\nArrow.displayName = NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Arrow;\n\nexport {\n Arrow,\n //\n Root,\n};\nexport type { ArrowProps };\n","/// <reference types=\"resize-observer-browser\" />\n\nimport * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\nfunction useSize(element: HTMLElement | null) {\n const [size, setSize] = React.useState<{ width: number; height: number } | undefined>(undefined);\n\n useLayoutEffect(() => {\n if (element) {\n // provide size as early as possible\n setSize({ width: element.offsetWidth, height: element.offsetHeight });\n\n const resizeObserver = new ResizeObserver((entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n\n // Since we only observe the one element, we don't need to loop over the\n // array\n if (!entries.length) {\n return;\n }\n\n const entry = entries[0];\n let width: number;\n let height: number;\n\n if ('borderBoxSize' in entry) {\n const borderSizeEntry = entry['borderBoxSize'];\n // iron out differences between browsers\n const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n width = borderSize['inlineSize'];\n height = borderSize['blockSize'];\n } else {\n // for browsers that don't support `borderBoxSize`\n // we calculate it ourselves to get the correct border box.\n width = element.offsetWidth;\n height = element.offsetHeight;\n }\n\n setSize({ width, height });\n });\n\n resizeObserver.observe(element, { box: 'border-box' });\n\n return () => resizeObserver.unobserve(element);\n } else {\n // We only want to reset to `undefined` when the element becomes `null`,\n // not if it changes to another element.\n setSize(undefined);\n }\n }, [element]);\n\n return size;\n}\n\nexport { useSize };\n","import * 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';\n\nimport type { Scope } from '@radix-ui/react-context';\n\nconst ENTRY_FOCUS = 'rovingFocusGroup.onEntryFocus';\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\n/* -------------------------------------------------------------------------------------------------\n * RovingFocusGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'RovingFocusGroup';\n\ntype ItemData = { id: string; focusable: boolean; active: boolean };\nconst [Collection, useCollection, createCollectionScope] = createCollection<\n HTMLSpanElement,\n ItemData\n>(GROUP_NAME);\n\ntype ScopedProps<P> = P & { __scopeRovingFocusGroup?: Scope };\nconst [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\n\ntype Orientation = React.AriaAttributes['aria-orientation'];\ntype Direction = 'ltr' | 'rtl';\n\ninterface RovingFocusGroupOptions {\n /**\n * The orientation of the group.\n * Mainly so arrow navigation is done accordingly (left & right vs. up & down)\n */\n orientation?: Orientation;\n /**\n * The direction of navigation between items.\n */\n dir?: Direction;\n /**\n * Whether keyboard navigation should loop around\n * @defaultValue false\n */\n loop?: boolean;\n}\n\ntype RovingContextValue = RovingFocusGroupOptions & {\n currentTabStopId: string | null;\n onItemFocus(tabStopId: string): void;\n onItemShiftTab(): void;\n onFocusableItemAdd(): void;\n onFocusableItemRemove(): void;\n};\n\nconst [RovingFocusProvider, useRovingFocusContext] =\n createRovingFocusGroupContext<RovingContextValue>(GROUP_NAME);\n\ntype RovingFocusGroupElement = RovingFocusGroupImplElement;\ninterface RovingFocusGroupProps extends RovingFocusGroupImplProps {}\n\nconst RovingFocusGroup = React.forwardRef<RovingFocusGroupElement, RovingFocusGroupProps>(\n (props: ScopedProps<RovingFocusGroupProps>, forwardedRef) => {\n return (\n <Collection.Provider scope={props.__scopeRovingFocusGroup}>\n <Collection.Slot scope={props.__scopeRovingFocusGroup}>\n <RovingFocusGroupImpl {...props} ref={forwardedRef} />\n </Collection.Slot>\n </Collection.Provider>\n );\n }\n);\n\nRovingFocusGroup.displayName = GROUP_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype RovingFocusGroupImplElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface RovingFocusGroupImplProps\n extends Omit<PrimitiveDivProps, 'dir'>,\n RovingFocusGroupOptions {\n currentTabStopId?: string | null;\n defaultCurrentTabStopId?: string;\n onCurrentTabStopIdChange?: (tabStopId: string | null) => void;\n onEntryFocus?: (event: Event) => void;\n preventScrollOnEntryFocus?: boolean;\n}\n\nconst RovingFocusGroupImpl = React.forwardRef<\n RovingFocusGroupImplElement,\n RovingFocusGroupImplProps\n>((props: ScopedProps<RovingFocusGroupImplProps>, 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<RovingFocusGroupImplElement>(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\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\n return (\n <RovingFocusProvider\n scope={__scopeRovingFocusGroup}\n orientation={orientation}\n dir={direction}\n loop={loop}\n currentTabStopId={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 >\n <Primitive.div\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 // We normally wouldn't need this check, because we already check\n // that the focus is on the current target and not bubbling to it.\n // We do this because Safari doesn't focus buttons when clicked, and\n // instead, the wrapper will get focused and not through a bubbling event.\n const isKeyboardFocus = !isClickFocusRef.current;\n\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n\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 ) as typeof items;\n const candidateNodes = candidateItems.map((item) => item.ref.current!);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n\n isClickFocusRef.current = false;\n })}\n onBlur={composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))}\n />\n </RovingFocusProvider>\n );\n});\n\n/* -------------------------------------------------------------------------------------------------\n * RovingFocusGroupItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'RovingFocusGroupItem';\n\ntype RovingFocusItemElement = React.ComponentRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface RovingFocusItemProps extends Omit<PrimitiveSpanProps, 'children'> {\n tabStopId?: string;\n focusable?: boolean;\n active?: boolean;\n children?:\n | React.ReactNode\n | ((props: { hasTabStop: boolean; isCurrentTabStop: boolean }) => React.ReactNode);\n}\n\nconst RovingFocusGroupItem = React.forwardRef<RovingFocusItemElement, RovingFocusItemProps>(\n (props: ScopedProps<RovingFocusItemProps>, 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\n const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n\n return (\n <Collection.ItemSlot\n scope={__scopeRovingFocusGroup}\n id={id}\n focusable={focusable}\n active={active}\n >\n <Primitive.span\n tabIndex={isCurrentTabStop ? 0 : -1}\n data-orientation={context.orientation}\n {...itemProps}\n ref={forwardedRef}\n onMouseDown={composeEventHandlers(props.onMouseDown, (event) => {\n // We prevent focusing non-focusable items on `mousedown`.\n // Even though the item has tabIndex={-1}, that only means take it out of the tab order.\n if (!focusable) event.preventDefault();\n // Safari doesn't focus a button when clicked so we run our logic on mousedown also\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\n if (event.target !== event.currentTarget) return;\n\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n\n if (focusIntent !== undefined) {\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\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\n ? wrapArray(candidateNodes, currentIndex + 1)\n : candidateNodes.slice(currentIndex + 1);\n }\n\n /**\n * Imperative focus during keydown is risky so we prevent React's batching updates\n * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n */\n setTimeout(() => focusFirst(candidateNodes));\n }\n })}\n >\n {typeof children === 'function'\n ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null })\n : children}\n </Primitive.span>\n </Collection.ItemSlot>\n );\n }\n);\n\nRovingFocusGroupItem.displayName = ITEM_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\n// prettier-ignore\nconst MAP_KEY_TO_FOCUS_INTENT: Record<string, FocusIntent> = {\n ArrowLeft: 'prev', ArrowUp: 'prev',\n ArrowRight: 'next', ArrowDown: 'next',\n PageUp: 'first', Home: 'first',\n PageDown: 'last', End: 'last',\n};\n\nfunction getDirectionAwareKey(key: string, dir?: Direction) {\n if (dir !== 'rtl') return key;\n return key === 'ArrowLeft' ? 'ArrowRight' : key === 'ArrowRight' ? 'ArrowLeft' : key;\n}\n\ntype FocusIntent = 'first' | 'last' | 'prev' | 'next';\n\nfunction getFocusIntent(event: React.KeyboardEvent, orientation?: Orientation, dir?: Direction) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === 'vertical' && ['ArrowLeft', 'ArrowRight'].includes(key)) return undefined;\n if (orientation === 'horizontal' && ['ArrowUp', 'ArrowDown'].includes(key)) return undefined;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\n\nfunction focusFirst(candidates: HTMLElement[], preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n // if focus is already where we want to go, we don't want to keep going through the candidates\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nfunction wrapArray<T>(array: T[], startIndex: number) {\n return array.map<T>((_, index) => array[(startIndex + index) % array.length]!);\n}\n\nconst Root = RovingFocusGroup;\nconst Item = RovingFocusGroupItem;\n\nexport {\n createRovingFocusGroupScope,\n //\n RovingFocusGroup,\n RovingFocusGroupItem,\n //\n Root,\n Item,\n};\nexport type { RovingFocusGroupProps, RovingFocusItemProps };\n","import * 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 { 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 } from '@radix-ui/react-primitive';\nimport { createSlot } from '@radix-ui/react-slot';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { hideOthers } from 'aria-hidden';\nimport { RemoveScroll } from 'react-remove-scroll';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n\nconst POPOVER_NAME = 'Popover';\n\ntype ScopedProps<P> = P & { __scopePopover?: Scope };\nconst [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NAME, [\n createPopperScope,\n]);\nconst usePopperScope = createPopperScope();\n\ntype PopoverContextValue = {\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n contentId: string;\n open: boolean;\n onOpenChange(open: boolean): void;\n onOpenToggle(): void;\n hasCustomAnchor: boolean;\n onCustomAnchorAdd(): void;\n onCustomAnchorRemove(): void;\n modal: boolean;\n};\n\nconst [PopoverProvider, usePopoverContext] =\n createPopoverContext<PopoverContextValue>(POPOVER_NAME);\n\ninterface PopoverProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n modal?: boolean;\n}\n\nconst Popover: React.FC<PopoverProps> = (props: ScopedProps<PopoverProps>) => {\n const {\n __scopePopover,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = false,\n } = props;\n const popperScope = usePopperScope(__scopePopover);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: POPOVER_NAME,\n });\n\n return (\n <PopperPrimitive.Root {...popperScope}>\n <PopoverProvider\n scope={__scopePopover}\n contentId={useId()}\n triggerRef={triggerRef}\n open={open}\n onOpenChange={setOpen}\n onOpenToggle={React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}\n hasCustomAnchor={hasCustomAnchor}\n onCustomAnchorAdd={React.useCallback(() => setHasCustomAnchor(true), [])}\n onCustomAnchorRemove={React.useCallback(() => setHasCustomAnchor(false), [])}\n modal={modal}\n >\n {children}\n </PopoverProvider>\n </PopperPrimitive.Root>\n );\n};\n\nPopover.displayName = POPOVER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverAnchor\n * -----------------------------------------------------------------------------------------------*/\n\nconst ANCHOR_NAME = 'PopoverAnchor';\n\ntype PopoverAnchorElement = React.ComponentRef<typeof PopperPrimitive.Anchor>;\ntype PopperAnchorProps = React.ComponentPropsWithoutRef<typeof PopperPrimitive.Anchor>;\ninterface PopoverAnchorProps extends PopperAnchorProps {}\n\nconst PopoverAnchor = React.forwardRef<PopoverAnchorElement, PopoverAnchorProps>(\n (props: ScopedProps<PopoverAnchorProps>, forwardedRef) => {\n const { __scopePopover, ...anchorProps } = props;\n const context = usePopoverContext(ANCHOR_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n const { onCustomAnchorAdd, onCustomAnchorRemove } = context;\n\n React.useEffect(() => {\n onCustomAnchorAdd();\n return () => onCustomAnchorRemove();\n }, [onCustomAnchorAdd, onCustomAnchorRemove]);\n\n return <PopperPrimitive.Anchor {...popperScope} {...anchorProps} ref={forwardedRef} />;\n }\n);\n\nPopoverAnchor.displayName = ANCHOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'PopoverTrigger';\n\ntype PopoverTriggerElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface PopoverTriggerProps extends PrimitiveButtonProps {}\n\nconst PopoverTrigger = React.forwardRef<PopoverTriggerElement, PopoverTriggerProps>(\n (props: ScopedProps<PopoverTriggerProps>, forwardedRef) => {\n const { __scopePopover, ...triggerProps } = props;\n const context = usePopoverContext(TRIGGER_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n\n const trigger = (\n <Primitive.button\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 return context.hasCustomAnchor ? (\n trigger\n ) : (\n <PopperPrimitive.Anchor asChild {...popperScope}>\n {trigger}\n </PopperPrimitive.Anchor>\n );\n }\n);\n\nPopoverTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'PopoverPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createPopoverContext<PortalContextValue>(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef<typeof PortalPrimitive>;\ninterface PopoverPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst PopoverPortal: React.FC<PopoverPortalProps> = (props: ScopedProps<PopoverPortalProps>) => {\n const { __scopePopover, forceMount, children, container } = props;\n const context = usePopoverContext(PORTAL_NAME, __scopePopover);\n return (\n <PortalProvider scope={__scopePopover} forceMount={forceMount}>\n <Presence present={forceMount || context.open}>\n <PortalPrimitive asChild container={container}>\n {children}\n </PortalPrimitive>\n </Presence>\n </PortalProvider>\n );\n};\n\nPopoverPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'PopoverContent';\n\ninterface PopoverContentProps extends PopoverContentTypeProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst PopoverContent = React.forwardRef<PopoverContentTypeElement, PopoverContentProps>(\n (props: ScopedProps<PopoverContentProps>, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopePopover);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n return (\n <Presence present={forceMount || context.open}>\n {context.modal ? (\n <PopoverContentModal {...contentProps} ref={forwardedRef} />\n ) : (\n <PopoverContentNonModal {...contentProps} ref={forwardedRef} />\n )}\n </Presence>\n );\n }\n);\n\nPopoverContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Slot = createSlot('PopoverContent.RemoveScroll');\n\ntype PopoverContentTypeElement = PopoverContentImplElement;\ninterface PopoverContentTypeProps\n extends Omit<PopoverContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {}\n\nconst PopoverContentModal = React.forwardRef<PopoverContentTypeElement, PopoverContentTypeProps>(\n (props: ScopedProps<PopoverContentTypeProps>, forwardedRef) => {\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n const contentRef = React.useRef<HTMLDivElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const isRightClickOutsideRef = React.useRef(false);\n\n // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n\n return (\n <RemoveScroll as={Slot} allowPinchZoom>\n <PopoverContentImpl\n {...props}\n ref={composedRefs}\n // we make sure we're not trapping once it's been closed\n // (closed !== unmounted when animating out)\n trapFocus={context.open}\n disableOutsidePointerEvents\n onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus();\n })}\n onPointerDownOutside={composeEventHandlers(\n props.onPointerDownOutside,\n (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n\n isRightClickOutsideRef.current = isRightClick;\n },\n { checkForDefaultPrevented: false }\n )}\n // When focus is trapped, a `focusout` event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n )}\n />\n </RemoveScroll>\n );\n }\n);\n\nconst PopoverContentNonModal = React.forwardRef<PopoverContentTypeElement, PopoverContentTypeProps>(\n (props: ScopedProps<PopoverContentTypeProps>, forwardedRef) => {\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n\n return (\n <PopoverContentImpl\n {...props}\n ref={forwardedRef}\n trapFocus={false}\n disableOutsidePointerEvents={false}\n onCloseAutoFocus={(event) => {\n props.onCloseAutoFocus?.(event);\n\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n }\n\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n }}\n onInteractOutside={(event) => {\n props.onInteractOutside?.(event);\n\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === 'pointerdown') {\n hasPointerDownOutsideRef.current = true;\n }\n }\n\n // Prevent dismissing when clicking the trigger.\n // As the trigger is already setup to close, without doing so would\n // cause it to close and immediately open.\n const target = event.target as HTMLElement;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n\n // On Safari if the trigger is inside a container with tabIndex={0}, when clicked\n // we will get the pointer down outside event on the trigger, but then a subsequent\n // focus outside event on the container, we ignore any focus outside event when we've\n // already had a pointer down outside event.\n if (event.detail.originalEvent.type === 'focusin' && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }}\n />\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PopoverContentImplElement = React.ComponentRef<typeof PopperPrimitive.Content>;\ntype FocusScopeProps = React.ComponentPropsWithoutRef<typeof FocusScope>;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef<typeof DismissableLayer>;\ntype PopperContentProps = React.ComponentPropsWithoutRef<typeof PopperPrimitive.Content>;\ninterface PopoverContentImplProps\n extends Omit<PopperContentProps, 'onPlaced'>,\n Omit<DismissableLayerProps, 'onDismiss'> {\n /**\n * Whether focus should be trapped within the `Popover`\n * (default: false)\n */\n trapFocus?: FocusScopeProps['trapped'];\n\n /**\n * Event handler called when auto-focusing on open.\n * Can be prevented.\n */\n onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];\n\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n}\n\nconst PopoverContentImpl = React.forwardRef<PopoverContentImplElement, PopoverContentImplProps>(\n (props: ScopedProps<PopoverContentImplProps>, forwardedRef) => {\n const {\n __scopePopover,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n ...contentProps\n } = props;\n const context = usePopoverContext(CONTENT_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n\n // Make sure the whole tree has focus guards as our `Popover` may be\n // the last element in the DOM (because of the `Portal`)\n useFocusGuards();\n\n return (\n <FocusScope\n asChild\n loop\n trapped={trapFocus}\n onMountAutoFocus={onOpenAutoFocus}\n onUnmountAutoFocus={onCloseAutoFocus}\n >\n <DismissableLayer\n asChild\n disableOutsidePointerEvents={disableOutsidePointerEvents}\n onInteractOutside={onInteractOutside}\n onEscapeKeyDown={onEscapeKeyDown}\n onPointerDownOutside={onPointerDownOutside}\n onFocusOutside={onFocusOutside}\n onDismiss={() => context.onOpenChange(false)}\n >\n <PopperPrimitive.Content\n data-state={getState(context.open)}\n role=\"dialog\"\n id={context.contentId}\n {...popperScope}\n {...contentProps}\n ref={forwardedRef}\n style={{\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n '--radix-popover-content-transform-origin': 'var(--radix-popper-transform-origin)',\n '--radix-popover-content-available-width': 'var(--radix-popper-available-width)',\n '--radix-popover-content-available-height': 'var(--radix-popper-available-height)',\n '--radix-popover-trigger-width': 'var(--radix-popper-anchor-width)',\n '--radix-popover-trigger-height': 'var(--radix-popper-anchor-height)',\n },\n }}\n />\n </DismissableLayer>\n </FocusScope>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'PopoverClose';\n\ntype PopoverCloseElement = React.ComponentRef<typeof Primitive.button>;\ninterface PopoverCloseProps extends PrimitiveButtonProps {}\n\nconst PopoverClose = React.forwardRef<PopoverCloseElement, PopoverCloseProps>(\n (props: ScopedProps<PopoverCloseProps>, forwardedRef) => {\n const { __scopePopover, ...closeProps } = props;\n const context = usePopoverContext(CLOSE_NAME, __scopePopover);\n return (\n <Primitive.button\n type=\"button\"\n {...closeProps}\n ref={forwardedRef}\n onClick={composeEventHandlers(props.onClick, () => context.onOpenChange(false))}\n />\n );\n }\n);\n\nPopoverClose.displayName = CLOSE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'PopoverArrow';\n\ntype PopoverArrowElement = React.ComponentRef<typeof PopperPrimitive.Arrow>;\ntype PopperArrowProps = React.ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;\ninterface PopoverArrowProps extends PopperArrowProps {}\n\nconst PopoverArrow = React.forwardRef<PopoverArrowElement, PopoverArrowProps>(\n (props: ScopedProps<PopoverArrowProps>, forwardedRef) => {\n const { __scopePopover, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopePopover);\n return <PopperPrimitive.Arrow {...popperScope} {...arrowProps} ref={forwardedRef} />;\n }\n);\n\nPopoverArrow.displayName = ARROW_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open: boolean) {\n return open ? 'open' : 'closed';\n}\n\nconst Root = Popover;\nconst Anchor = PopoverAnchor;\nconst Trigger = PopoverTrigger;\nconst Portal = PopoverPortal;\nconst Content = PopoverContent;\nconst Close = PopoverClose;\nconst Arrow = PopoverArrow;\n\nexport {\n createPopoverScope,\n //\n Popover,\n PopoverAnchor,\n PopoverTrigger,\n PopoverPortal,\n PopoverContent,\n PopoverClose,\n PopoverArrow,\n //\n Root,\n Anchor,\n Trigger,\n Portal,\n Content,\n Close,\n Arrow,\n};\nexport type {\n PopoverProps,\n PopoverAnchorProps,\n PopoverTriggerProps,\n PopoverPortalProps,\n PopoverContentProps,\n PopoverCloseProps,\n PopoverArrowProps,\n};\n","import { useRef } from \"react\";\n\n// Saves incoming handler to the ref in order to avoid \"useCallback hell\"\nexport function useEventCallback<T>(handler?: (value: T) => void): (value: T) => void {\n const callbackRef = useRef(handler);\n const fn = useRef((value: T) => {\n callbackRef.current && callbackRef.current(value);\n });\n callbackRef.current = handler;\n\n return fn.current;\n}\n","// Clamps a value between an upper and lower bound.\n// We use ternary operators because it makes the minified code\n// 2 times shorter then `Math.min(Math.max(a,b),c)`\nexport const clamp = (number: number, min = 0, max = 1): number => {\n return number > max ? max : number < min ? min : number;\n};\n","import React, { useRef, useMemo, useEffect } from \"react\";\n\nimport { useEventCallback } from \"../../hooks/useEventCallback\";\nimport { clamp } from \"../../utils/clamp\";\n\nexport interface Interaction {\n left: number;\n top: number;\n}\n\n// Check if an event was triggered by touch\nconst isTouch = (event: MouseEvent | TouchEvent): event is TouchEvent => \"touches\" in event;\n\n// Finds a proper touch point by its identifier\nconst getTouchPoint = (touches: TouchList, touchId: null | number): Touch => {\n for (let i = 0; i < touches.length; i++) {\n if (touches[i].identifier === touchId) return touches[i];\n }\n return touches[0];\n};\n\n// Finds the proper window object to fix iframe embedding issues\nconst getParentWindow = (node?: HTMLDivElement | null): Window => {\n return (node && node.ownerDocument.defaultView) || self;\n};\n\n// Returns a relative position of the pointer inside the node's bounding box\nconst getRelativePosition = (\n node: HTMLDivElement,\n event: MouseEvent | TouchEvent,\n touchId: null | number\n): Interaction => {\n const rect = node.getBoundingClientRect();\n\n // Get user's pointer position from `touches` array if it's a `TouchEvent`\n const pointer = isTouch(event) ? getTouchPoint(event.touches, touchId) : (event as MouseEvent);\n\n return {\n left: clamp((pointer.pageX - (rect.left + getParentWindow(node).pageXOffset)) / rect.width),\n top: clamp((pointer.pageY - (rect.top + getParentWindow(node).pageYOffset)) / rect.height),\n };\n};\n\n// Browsers introduced an intervention, making touch events passive by default.\n// This workaround removes `preventDefault` call from the touch handlers.\n// https://github.com/facebook/react/issues/19651\nconst preventDefaultMove = (event: MouseEvent | TouchEvent): void => {\n !isTouch(event) && event.preventDefault();\n};\n\n// Prevent mobile browsers from handling mouse events (conflicting with touch ones).\n// If we detected a touch interaction before, we prefer reacting to touch events only.\nconst isInvalid = (event: MouseEvent | TouchEvent, hasTouch: boolean): boolean => {\n return hasTouch && !isTouch(event);\n};\n\ninterface Props {\n onMove: (interaction: Interaction) => void;\n onKey: (offset: Interaction) => void;\n children: React.ReactNode;\n}\n\nconst InteractiveBase = ({ onMove, onKey, ...rest }: Props) => {\n const container = useRef<HTMLDivElement>(null);\n const onMoveCallback = useEventCallback<Interaction>(onMove);\n const onKeyCallback = useEventCallback<Interaction>(onKey);\n const touchId = useRef<null | number>(null);\n const hasTouch = useRef(false);\n\n const [handleMoveStart, handleKeyDown, toggleDocumentEvents] = useMemo(() => {\n const handleMoveStart = ({ nativeEvent }: React.MouseEvent | React.TouchEvent) => {\n const el = container.current;\n if (!el) return;\n\n // Prevent text selection\n preventDefaultMove(nativeEvent);\n\n if (isInvalid(nativeEvent, hasTouch.current) || !el) return;\n\n if (isTouch(nativeEvent)) {\n hasTouch.current = true;\n const changedTouches = nativeEvent.changedTouches || [];\n if (changedTouches.length) touchId.current = changedTouches[0].identifier;\n }\n\n el.focus();\n onMoveCallback(getRelativePosition(el, nativeEvent, touchId.current));\n toggleDocumentEvents(true);\n };\n\n const handleMove = (event: MouseEvent | TouchEvent) => {\n // Prevent text selection\n preventDefaultMove(event);\n\n // If user moves the pointer outside of the window or iframe bounds and release it there,\n // `mouseup`/`touchend` won't be fired. In order to stop the picker from following the cursor\n // after the user has moved the mouse/finger back to the document, we check `event.buttons`\n // and `event.touches`. It allows us to detect that the user is just moving his pointer\n // without pressing it down\n const isDown = isTouch(event) ? event.touches.length > 0 : event.buttons > 0;\n\n if (isDown && container.current) {\n onMoveCallback(getRelativePosition(container.current, event, touchId.current));\n } else {\n toggleDocumentEvents(false);\n }\n };\n\n const handleMoveEnd = () => toggleDocumentEvents(false);\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n const keyCode = event.which || event.keyCode;\n\n // Ignore all keys except arrow ones\n if (keyCode < 37 || keyCode > 40) return;\n // Do not scroll page by arrow keys when document is focused on the element\n event.preventDefault();\n // Send relative offset to the parent component.\n // We use codes (37←, 38↑, 39→, 40↓) instead of keys ('ArrowRight', 'ArrowDown', etc)\n // to reduce the size of the library\n onKeyCallback({\n left: keyCode === 39 ? 0.05 : keyCode === 37 ? -0.05 : 0,\n top: keyCode === 40 ? 0.05 : keyCode === 38 ? -0.05 : 0,\n });\n };\n\n function toggleDocumentEvents(state?: boolean) {\n const touch = hasTouch.current;\n const el = container.current;\n const parentWindow = getParentWindow(el);\n\n // Add or remove additional pointer event listeners\n const toggleEvent = state ? parentWindow.addEventListener : parentWindow.removeEventListener;\n toggleEvent(touch ? \"touchmove\" : \"mousemove\", handleMove);\n toggleEvent(touch ? \"touchend\" : \"mouseup\", handleMoveEnd);\n }\n\n return [handleMoveStart, handleKeyDown, toggleDocumentEvents];\n }, [onKeyCallback, onMoveCallback]);\n\n // Remove window event listeners before unmounting\n useEffect(() => toggleDocumentEvents, [toggleDocumentEvents]);\n\n return (\n <div\n {...rest}\n onTouchStart={handleMoveStart}\n onMouseDown={handleMoveStart}\n className=\"react-colorful__interactive\"\n ref={container}\n onKeyDown={handleKeyDown}\n tabIndex={0}\n role=\"slider\"\n />\n );\n};\n\nexport const Interactive = React.memo(InteractiveBase);\n","export const formatClassName = (names: unknown[]): string => names.filter(Boolean).join(\" \");\n","import React from \"react\";\nimport { formatClassName } from \"../../utils/format\";\n\ninterface Props {\n className?: string;\n top?: number;\n left: number;\n color: string;\n}\n\nexport const Pointer = ({ className, color, left, top = 0.5 }: Props): JSX.Element => {\n const nodeClassName = formatClassName([\"react-colorful__pointer\", className]);\n\n const style = {\n top: `${top * 100}%`,\n left: `${left * 100}%`,\n };\n\n return (\n <div className={nodeClassName} style={style}>\n <div className=\"react-colorful__pointer-fill\" style={{ backgroundColor: color }} />\n </div>\n );\n};\n","export const round = (number: number, digits = 0, base = Math.pow(10, digits)): number => {\n return Math.round(base * number) / base;\n};\n","import { round } from \"./round\";\nimport { RgbaColor, RgbColor, HslaColor, HslColor, HsvaColor, HsvColor } from \"../types\";\n\n/**\n * Valid CSS <angle> units.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/angle\n */\nconst angleUnits: Record<string, number> = {\n grad: 360 / 400,\n turn: 360,\n rad: 360 / (Math.PI * 2),\n};\n\nexport const hexToHsva = (hex: string): HsvaColor => rgbaToHsva(hexToRgba(hex));\n\nexport const hexToRgba = (hex: string): RgbaColor => {\n if (hex[0] === \"#\") hex = hex.substring(1);\n\n if (hex.length < 6) {\n return {\n r: parseInt(hex[0] + hex[0], 16),\n g: parseInt(hex[1] + hex[1], 16),\n b: parseInt(hex[2] + hex[2], 16),\n a: hex.length === 4 ? round(parseInt(hex[3] + hex[3], 16) / 255, 2) : 1,\n };\n }\n\n return {\n r: parseInt(hex.substring(0, 2), 16),\n g: parseInt(hex.substring(2, 4), 16),\n b: parseInt(hex.substring(4, 6), 16),\n a: hex.length === 8 ? round(parseInt(hex.substring(6, 8), 16) / 255, 2) : 1,\n };\n};\n\nexport const parseHue = (value: string, unit = \"deg\"): number => {\n return Number(value) * (angleUnits[unit] || 1);\n};\n\nexport const hslaStringToHsva = (hslString: string): HsvaColor => {\n const matcher = /hsla?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n const match = matcher.exec(hslString);\n\n if (!match) return { h: 0, s: 0, v: 0, a: 1 };\n\n return hslaToHsva({\n h: parseHue(match[1], match[2]),\n s: Number(match[3]),\n l: Number(match[4]),\n a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1),\n });\n};\n\nexport const hslStringToHsva = hslaStringToHsva;\n\nexport const hslaToHsva = ({ h, s, l, a }: HslaColor): HsvaColor => {\n s *= (l < 50 ? l : 100 - l) / 100;\n\n return {\n h: h,\n s: s > 0 ? ((2 * s) / (l + s)) * 100 : 0,\n v: l + s,\n a,\n };\n};\n\nexport const hsvaToHex = (hsva: HsvaColor): string => rgbaToHex(hsvaToRgba(hsva));\n\nexport const hsvaToHsla = ({ h, s, v, a }: HsvaColor): HslaColor => {\n const hh = ((200 - s) * v) / 100;\n\n return {\n h: round(h),\n s: round(hh > 0 && hh < 200 ? ((s * v) / 100 / (hh <= 100 ? hh : 200 - hh)) * 100 : 0),\n l: round(hh / 2),\n a: round(a, 2),\n };\n};\n\nexport const hsvaToHslString = (hsva: HsvaColor): string => {\n const { h, s, l } = hsvaToHsla(hsva);\n return `hsl(${h}, ${s}%, ${l}%)`;\n};\n\nexport const hsvaToHsvString = (hsva: HsvaColor): string => {\n const { h, s, v } = roundHsva(hsva);\n return `hsv(${h}, ${s}%, ${v}%)`;\n};\n\nexport const hsvaToHsvaString = (hsva: HsvaColor): string => {\n const { h, s, v, a } = roundHsva(hsva);\n return `hsva(${h}, ${s}%, ${v}%, ${a})`;\n};\n\nexport const hsvaToHslaString = (hsva: HsvaColor): string => {\n const { h, s, l, a } = hsvaToHsla(hsva);\n return `hsla(${h}, ${s}%, ${l}%, ${a})`;\n};\n\nexport const hsvaToRgba = ({ h, s, v, a }: HsvaColor): RgbaColor => {\n h = (h / 360) * 6;\n s = s / 100;\n v = v / 100;\n\n const hh = Math.floor(h),\n b = v * (1 - s),\n c = v * (1 - (h - hh) * s),\n d = v * (1 - (1 - h + hh) * s),\n module = hh % 6;\n\n return {\n r: round([v, c, b, b, d, v][module] * 255),\n g: round([d, v, v, c, b, b][module] * 255),\n b: round([b, b, d, v, v, c][module] * 255),\n a: round(a, 2),\n };\n};\n\nexport const hsvaToRgbString = (hsva: HsvaColor): string => {\n const { r, g, b } = hsvaToRgba(hsva);\n return `rgb(${r}, ${g}, ${b})`;\n};\n\nexport const hsvaToRgbaString = (hsva: HsvaColor): string => {\n const { r, g, b, a } = hsvaToRgba(hsva);\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n};\n\nexport const hsvaStringToHsva = (hsvString: string): HsvaColor => {\n const matcher = /hsva?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n const match = matcher.exec(hsvString);\n\n if (!match) return { h: 0, s: 0, v: 0, a: 1 };\n\n return roundHsva({\n h: parseHue(match[1], match[2]),\n s: Number(match[3]),\n v: Number(match[4]),\n a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1),\n });\n};\n\nexport const hsvStringToHsva = hsvaStringToHsva;\n\nexport const rgbaStringToHsva = (rgbaString: string): HsvaColor => {\n const matcher = /rgba?\\(?\\s*(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n const match = matcher.exec(rgbaString);\n\n if (!match) return { h: 0, s: 0, v: 0, a: 1 };\n\n return rgbaToHsva({\n r: Number(match[1]) / (match[2] ? 100 / 255 : 1),\n g: Number(match[3]) / (match[4] ? 100 / 255 : 1),\n b: Number(match[5]) / (match[6] ? 100 / 255 : 1),\n a: match[7] === undefined ? 1 : Number(match[7]) / (match[8] ? 100 : 1),\n });\n};\n\nexport const rgbStringToHsva = rgbaStringToHsva;\n\nconst format = (number: number) => {\n const hex = number.toString(16);\n return hex.length < 2 ? \"0\" + hex : hex;\n};\n\nexport const rgbaToHex = ({ r, g, b, a }: RgbaColor): string => {\n const alphaHex = a < 1 ? format(round(a * 255)) : \"\";\n return \"#\" + format(r) + format(g) + format(b) + alphaHex;\n};\n\nexport const rgbaToHsva = ({ r, g, b, a }: RgbaColor): HsvaColor => {\n const max = Math.max(r, g, b);\n const delta = max - Math.min(r, g, b);\n\n // prettier-ignore\n const hh = delta\n ? max === r\n ? (g - b) / delta\n : max === g\n ? 2 + (b - r) / delta\n : 4 + (r - g) / delta\n : 0;\n\n return {\n h: round(60 * (hh < 0 ? hh + 6 : hh)),\n s: round(max ? (delta / max) * 100 : 0),\n v: round((max / 255) * 100),\n a,\n };\n};\n\nexport const roundHsva = (hsva: HsvaColor): HsvaColor => ({\n h: round(hsva.h),\n s: round(hsva.s),\n v: round(hsva.v),\n a: round(hsva.a, 2),\n});\n\nexport const rgbaToRgb = ({ r, g, b }: RgbaColor): RgbColor => ({ r, g, b });\n\nexport const hslaToHsl = ({ h, s, l }: HslaColor): HslColor => ({ h, s, l });\n\nexport const hsvaToHsv = (hsva: HsvaColor): HsvColor => {\n const { h, s, v } = roundHsva(hsva);\n return { h, s, v };\n};\n","import React from \"react\";\n\nimport { Interactive, Interaction } from \"./Interactive\";\nimport { Pointer } from \"./Pointer\";\n\nimport { hsvaToHslString } from \"../../utils/convert\";\nimport { formatClassName } from \"../../utils/format\";\nimport { clamp } from \"../../utils/clamp\";\nimport { round } from \"../../utils/round\";\n\ninterface Props {\n className?: string;\n hue: number;\n onChange: (newHue: { h: number }) => void;\n}\n\nconst HueBase = ({ className, hue, onChange }: Props) => {\n const handleMove = (interaction: Interaction) => {\n onChange({ h: 360 * interaction.left });\n };\n\n const handleKey = (offset: Interaction) => {\n // Hue measured in degrees of the color circle ranging from 0 to 360\n onChange({\n h: clamp(hue + offset.left * 360, 0, 360),\n });\n };\n\n const nodeClassName = formatClassName([\"react-colorful__hue\", className]);\n\n return (\n <div className={nodeClassName}>\n <Interactive\n onMove={handleMove}\n onKey={handleKey}\n aria-label=\"Hue\"\n aria-valuenow={round(hue)}\n aria-valuemax=\"360\"\n aria-valuemin=\"0\"\n >\n <Pointer\n className=\"react-colorful__hue-pointer\"\n left={hue / 360}\n color={hsvaToHslString({ h: hue, s: 100, v: 100, a: 1 })}\n />\n </Interactive>\n </div>\n );\n};\n\nexport const Hue = React.memo(HueBase);\n","import React from \"react\";\nimport { Interactive, Interaction } from \"./Interactive\";\nimport { Pointer } from \"./Pointer\";\nimport { HsvaColor } from \"../../types\";\nimport { hsvaToHslString } from \"../../utils/convert\";\nimport { clamp } from \"../../utils/clamp\";\nimport { round } from \"../../utils/round\";\n\ninterface Props {\n hsva: HsvaColor;\n onChange: (newColor: { s: number; v: number }) => void;\n}\n\nconst SaturationBase = ({ hsva, onChange }: Props) => {\n const handleMove = (interaction: Interaction) => {\n onChange({\n s: interaction.left * 100,\n v: 100 - interaction.top * 100,\n });\n };\n\n const handleKey = (offset: Interaction) => {\n // Saturation and brightness always fit into [0, 100] range\n onChange({\n s: clamp(hsva.s + offset.left * 100, 0, 100),\n v: clamp(hsva.v - offset.top * 100, 0, 100),\n });\n };\n\n const containerStyle = {\n backgroundColor: hsvaToHslString({ h: hsva.h, s: 100, v: 100, a: 1 }),\n };\n\n return (\n <div className=\"react-colorful__saturation\" style={containerStyle}>\n <Interactive\n onMove={handleMove}\n onKey={handleKey}\n aria-label=\"Color\"\n aria-valuetext={`Saturation ${round(hsva.s)}%, Brightness ${round(hsva.v)}%`}\n >\n <Pointer\n className=\"react-colorful__saturation-pointer\"\n top={1 - hsva.v / 100}\n left={hsva.s / 100}\n color={hsvaToHslString(hsva)}\n />\n </Interactive>\n </div>\n );\n};\n\nexport const Saturation = React.memo(SaturationBase);\n","import { hexToRgba } from \"./convert\";\nimport { ObjectColor } from \"../types\";\n\nexport const equalColorObjects = (first: ObjectColor, second: ObjectColor): boolean => {\n if (first === second) return true;\n\n for (const prop in first) {\n // The following allows for a type-safe calling of this function (first & second have to be HSL, HSV, or RGB)\n // with type-unsafe iterating over object keys. TS does not allow this without an index (`[key: string]: number`)\n // on an object to define how iteration is normally done. To ensure extra keys are not allowed on our types,\n // we must cast our object to unknown (as RGB demands `r` be a key, while `Record<string, x>` does not care if\n // there is or not), and then as a type TS can iterate over.\n if (\n ((first as unknown) as Record<string, number>)[prop] !==\n ((second as unknown) as Record<string, number>)[prop]\n )\n return false;\n }\n\n return true;\n};\n\nexport const equalColorString = (first: string, second: string): boolean => {\n return first.replace(/\\s/g, \"\") === second.replace(/\\s/g, \"\");\n};\n\nexport const equalHex = (first: string, second: string): boolean => {\n if (first.toLowerCase() === second.toLowerCase()) return true;\n\n // To compare colors like `#FFF` and `ffffff` we convert them into RGB objects\n return equalColorObjects(hexToRgba(first), hexToRgba(second));\n};\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { ColorModel, AnyColor, HsvaColor } from \"../types\";\nimport { equalColorObjects } from \"../utils/compare\";\nimport { useEventCallback } from \"./useEventCallback\";\n\nexport function useColorManipulation<T extends AnyColor>(\n colorModel: ColorModel<T>,\n color: T,\n onChange?: (color: T) => void\n): [HsvaColor, (color: Partial<HsvaColor>) => void] {\n // Save onChange callback in the ref for avoiding \"useCallback hell\"\n const onChangeCallback = useEventCallback<T>(onChange);\n\n // No matter which color model is used (HEX, RGB(A) or HSL(A)),\n // all internal calculations are based on HSVA model\n const [hsva, updateHsva] = useState<HsvaColor>(() => colorModel.toHsva(color));\n\n // By using this ref we're able to prevent extra updates\n // and the effects recursion during the color conversion\n const cache = useRef({ color, hsva });\n\n // Update local HSVA-value if `color` property value is changed,\n // but only if that's not the same color that we just sent to the parent\n useEffect(() => {\n if (!colorModel.equal(color, cache.current.color)) {\n const newHsva = colorModel.toHsva(color);\n cache.current = { hsva: newHsva, color };\n updateHsva(newHsva);\n }\n }, [color, colorModel]);\n\n // Trigger `onChange` callback only if an updated color is different from cached one;\n // save the new color to the ref to prevent unnecessary updates\n useEffect(() => {\n let newColor;\n if (\n !equalColorObjects(hsva, cache.current.hsva) &&\n !colorModel.equal((newColor = colorModel.fromHsva(hsva)), cache.current.color)\n ) {\n cache.current = { hsva, color: newColor };\n onChangeCallback(newColor);\n }\n }, [hsva, colorModel, onChangeCallback]);\n\n // Merge the current HSVA color object with updated params.\n // For example, when a child component sends `h` or `s` only\n const handleChange = useCallback((params: Partial<HsvaColor>) => {\n updateHsva((current) => Object.assign({}, current, params));\n }, []);\n\n return [hsva, handleChange];\n}\n","declare const __webpack_nonce__: string | undefined;\nlet nonce: string | undefined;\n\n/**\n * Returns a nonce hash included by Webpack or the one defined manually by developer.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/nonce\n * https://webpack.js.org/guides/csp/\n */\nexport const getNonce = (): string | undefined => {\n if (nonce) return nonce;\n if (typeof __webpack_nonce__ !== \"undefined\") return __webpack_nonce__;\n return undefined;\n};\n\n/**\n * Signs the style tag with a base64-encoded string (nonce) to conforms to Content Security Policies.\n * This function has to be invoked before any picker is rendered if you aren't using Webpack for CSP.\n */\nexport const setNonce = (hash: string): void => {\n nonce = hash;\n};\n","import { useLayoutEffect, useEffect } from \"react\";\n\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nexport const useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n","import { RefObject } from \"react\";\n\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { getNonce } from \"../utils/nonce\";\n\n// Bundler is configured to load this as a processed minified CSS-string\nimport styles from \"../css/styles.css\";\n\nconst styleElementMap: Map<Document, HTMLStyleElement> = new Map();\n\n/**\n * Injects CSS code into the document's <head>\n */\nexport const useStyleSheet = (nodeRef: RefObject<HTMLDivElement>): void => {\n useIsomorphicLayoutEffect(() => {\n const parentDocument = nodeRef.current ? nodeRef.current.ownerDocument : document;\n\n if (typeof parentDocument !== \"undefined\" && !styleElementMap.has(parentDocument)) {\n const styleElement = parentDocument.createElement(\"style\");\n styleElement.innerHTML = styles;\n styleElementMap.set(parentDocument, styleElement);\n\n // Conform to CSP rules by setting `nonce` attribute to the inline styles\n const nonce = getNonce();\n if (nonce) styleElement.setAttribute(\"nonce\", nonce);\n\n parentDocument.head.appendChild(styleElement);\n }\n }, []);\n};\n","import React, { useRef } from \"react\";\n\nimport { Hue } from \"./Hue\";\nimport { Saturation } from \"./Saturation\";\n\nimport { ColorModel, ColorPickerBaseProps, AnyColor } from \"../../types\";\nimport { useColorManipulation } from \"../../hooks/useColorManipulation\";\nimport { useStyleSheet } from \"../../hooks/useStyleSheet\";\nimport { formatClassName } from \"../../utils/format\";\n\ninterface Props<T extends AnyColor> extends Partial<ColorPickerBaseProps<T>> {\n colorModel: ColorModel<T>;\n}\n\nexport const ColorPicker = <T extends AnyColor>({\n className,\n colorModel,\n color = colorModel.defaultColor,\n onChange,\n ...rest\n}: Props<T>): JSX.Element => {\n const nodeRef = useRef<HTMLDivElement>(null);\n useStyleSheet(nodeRef);\n\n const [hsva, updateHsva] = useColorManipulation<T>(colorModel, color, onChange);\n\n const nodeClassName = formatClassName([\"react-colorful\", className]);\n\n return (\n <div {...rest} ref={nodeRef} className={nodeClassName}>\n <Saturation hsva={hsva} onChange={updateHsva} />\n <Hue hue={hsva.h} onChange={updateHsva} className=\"react-colorful__last-control\" />\n </div>\n );\n};\n","import React from \"react\";\n\nimport { ColorPicker } from \"./common/ColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalHex } from \"../utils/compare\";\nimport { hexToHsva, hsvaToHex } from \"../utils/convert\";\n\nconst colorModel: ColorModel<string> = {\n defaultColor: \"000\",\n toHsva: hexToHsva,\n fromHsva: ({ h, s, v }) => hsvaToHex({ h, s, v, a: 1 }),\n equal: equalHex,\n};\n\nexport const HexColorPicker = (props: Partial<ColorPickerBaseProps<string>>): JSX.Element => (\n <ColorPicker {...props} colorModel={colorModel} />\n);\n","import React from \"react\";\n\nimport { Interactive, Interaction } from \"./Interactive\";\nimport { Pointer } from \"./Pointer\";\n\nimport { hsvaToHslaString } from \"../../utils/convert\";\nimport { formatClassName } from \"../../utils/format\";\nimport { clamp } from \"../../utils/clamp\";\nimport { round } from \"../../utils/round\";\nimport { HsvaColor } from \"../../types\";\n\ninterface Props {\n className?: string;\n hsva: HsvaColor;\n onChange: (newAlpha: { a: number }) => void;\n}\n\nexport const Alpha = ({ className, hsva, onChange }: Props): JSX.Element => {\n const handleMove = (interaction: Interaction) => {\n onChange({ a: interaction.left });\n };\n\n const handleKey = (offset: Interaction) => {\n // Alpha always fit into [0, 1] range\n onChange({ a: clamp(hsva.a + offset.left) });\n };\n\n // We use `Object.assign` instead of the spread operator\n // to prevent adding the polyfill (about 150 bytes gzipped)\n const colorFrom = hsvaToHslaString(Object.assign({}, hsva, { a: 0 }));\n const colorTo = hsvaToHslaString(Object.assign({}, hsva, { a: 1 }));\n\n const gradientStyle = {\n backgroundImage: `linear-gradient(90deg, ${colorFrom}, ${colorTo})`,\n };\n\n const nodeClassName = formatClassName([\"react-colorful__alpha\", className]);\n const ariaValue = round(hsva.a * 100);\n\n return (\n <div className={nodeClassName}>\n <div className=\"react-colorful__alpha-gradient\" style={gradientStyle} />\n <Interactive\n onMove={handleMove}\n onKey={handleKey}\n aria-label=\"Alpha\"\n aria-valuetext={`${ariaValue}%`}\n aria-valuenow={ariaValue}\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n >\n <Pointer\n className=\"react-colorful__alpha-pointer\"\n left={hsva.a}\n color={hsvaToHslaString(hsva)}\n />\n </Interactive>\n </div>\n );\n};\n","import React, { useRef } from \"react\";\n\nimport { Hue } from \"./Hue\";\nimport { Saturation } from \"./Saturation\";\nimport { Alpha } from \"./Alpha\";\n\nimport { ColorModel, ColorPickerBaseProps, AnyColor } from \"../../types\";\nimport { useColorManipulation } from \"../../hooks/useColorManipulation\";\nimport { useStyleSheet } from \"../../hooks/useStyleSheet\";\nimport { formatClassName } from \"../../utils/format\";\n\ninterface Props<T extends AnyColor> extends Partial<ColorPickerBaseProps<T>> {\n colorModel: ColorModel<T>;\n}\n\nexport const AlphaColorPicker = <T extends AnyColor>({\n className,\n colorModel,\n color = colorModel.defaultColor,\n onChange,\n ...rest\n}: Props<T>): JSX.Element => {\n const nodeRef = useRef<HTMLDivElement>(null);\n useStyleSheet(nodeRef);\n\n const [hsva, updateHsva] = useColorManipulation<T>(colorModel, color, onChange);\n\n const nodeClassName = formatClassName([\"react-colorful\", className]);\n\n return (\n <div {...rest} ref={nodeRef} className={nodeClassName}>\n <Saturation hsva={hsva} onChange={updateHsva} />\n <Hue hue={hsva.h} onChange={updateHsva} />\n <Alpha hsva={hsva} onChange={updateHsva} className=\"react-colorful__last-control\" />\n </div>\n );\n};\n","import React from \"react\";\n\nimport { AlphaColorPicker } from \"./common/AlphaColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalHex } from \"../utils/compare\";\nimport { hexToHsva, hsvaToHex } from \"../utils/convert\";\n\nconst colorModel: ColorModel<string> = {\n defaultColor: \"0001\",\n toHsva: hexToHsva,\n fromHsva: hsvaToHex,\n equal: equalHex,\n};\n\nexport const HexAlphaColorPicker = (props: Partial<ColorPickerBaseProps<string>>): JSX.Element => (\n <AlphaColorPicker {...props} colorModel={colorModel} />\n);\n","import React from \"react\";\n\nimport { AlphaColorPicker } from \"./common/AlphaColorPicker\";\nimport { ColorModel, ColorPickerBaseProps, HslaColor } from \"../types\";\nimport { equalColorObjects } from \"../utils/compare\";\nimport { hslaToHsva, hsvaToHsla } from \"../utils/convert\";\n\nconst colorModel: ColorModel<HslaColor> = {\n defaultColor: { h: 0, s: 0, l: 0, a: 1 },\n toHsva: hslaToHsva,\n fromHsva: hsvaToHsla,\n equal: equalColorObjects,\n};\n\nexport const HslaColorPicker = (props: Partial<ColorPickerBaseProps<HslaColor>>): JSX.Element => (\n <AlphaColorPicker {...props} colorModel={colorModel} />\n);\n","import React from \"react\";\n\nimport { AlphaColorPicker } from \"./common/AlphaColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalColorString } from \"../utils/compare\";\nimport { hslaStringToHsva, hsvaToHslaString } from \"../utils/convert\";\n\nconst colorModel: ColorModel<string> = {\n defaultColor: \"hsla(0, 0%, 0%, 1)\",\n toHsva: hslaStringToHsva,\n fromHsva: hsvaToHslaString,\n equal: equalColorString,\n};\n\nexport const HslaStringColorPicker = (\n props: Partial<ColorPickerBaseProps<string>>\n): JSX.Element => <AlphaColorPicker {...props} colorModel={colorModel} />;\n","import React from \"react\";\n\nimport { ColorPicker } from \"./common/ColorPicker\";\nimport { ColorModel, ColorPickerBaseProps, HslColor } from \"../types\";\nimport { equalColorObjects } from \"../utils/compare\";\nimport { hslaToHsva, hsvaToHsla, hslaToHsl } from \"../utils/convert\";\n\nconst colorModel: ColorModel<HslColor> = {\n defaultColor: { h: 0, s: 0, l: 0 },\n toHsva: ({ h, s, l }) => hslaToHsva({ h, s, l, a: 1 }),\n fromHsva: (hsva) => hslaToHsl(hsvaToHsla(hsva)),\n equal: equalColorObjects,\n};\n\nexport const HslColorPicker = (props: Partial<ColorPickerBaseProps<HslColor>>): JSX.Element => (\n <ColorPicker {...props} colorModel={colorModel} />\n);\n","import React from \"react\";\n\nimport { ColorPicker } from \"./common/ColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalColorString } from \"../utils/compare\";\nimport { hslStringToHsva, hsvaToHslString } from \"../utils/convert\";\n\nconst colorModel: ColorModel<string> = {\n defaultColor: \"hsl(0, 0%, 0%)\",\n toHsva: hslStringToHsva,\n fromHsva: hsvaToHslString,\n equal: equalColorString,\n};\n\nexport const HslStringColorPicker = (props: Partial<ColorPickerBaseProps<string>>): JSX.Element => (\n <ColorPicker {...props} colorModel={colorModel} />\n);\n","import React from \"react\";\n\nimport { AlphaColorPicker } from \"./common/AlphaColorPicker\";\nimport { ColorModel, ColorPickerBaseProps, HsvaColor } from \"../types\";\nimport { equalColorObjects } from \"../utils/compare\";\nimport { roundHsva } from \"../utils/convert\";\n\nconst colorModel: ColorModel<HsvaColor> = {\n defaultColor: { h: 0, s: 0, v: 0, a: 1 },\n toHsva: (hsva) => hsva,\n fromHsva: roundHsva,\n equal: equalColorObjects,\n};\n\nexport const HsvaColorPicker = (props: Partial<ColorPickerBaseProps<HsvaColor>>): JSX.Element => (\n <AlphaColorPicker {...props} colorModel={colorModel} />\n);\n","import React from \"react\";\n\nimport { AlphaColorPicker } from \"./common/AlphaColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalColorString } from \"../utils/compare\";\nimport { hsvaStringToHsva, hsvaToHsvaString } from \"../utils/convert\";\n\nconst colorModel: ColorModel<string> = {\n defaultColor: \"hsva(0, 0%, 0%, 1)\",\n toHsva: hsvaStringToHsva,\n fromHsva: hsvaToHsvaString,\n equal: equalColorString,\n};\n\nexport const HsvaStringColorPicker = (\n props: Partial<ColorPickerBaseProps<string>>\n): JSX.Element => <AlphaColorPicker {...props} colorModel={colorModel} />;\n","import React from \"react\";\n\nimport { ColorPicker } from \"./common/ColorPicker\";\nimport { ColorModel, ColorPickerBaseProps, HsvColor } from \"../types\";\nimport { equalColorObjects } from \"../utils/compare\";\nimport { hsvaToHsv } from \"../utils/convert\";\n\nconst colorModel: ColorModel<HsvColor> = {\n defaultColor: { h: 0, s: 0, v: 0 },\n toHsva: ({ h, s, v }) => ({ h, s, v, a: 1 }),\n fromHsva: hsvaToHsv,\n equal: equalColorObjects,\n};\n\nexport const HsvColorPicker = (props: Partial<ColorPickerBaseProps<HsvColor>>): JSX.Element => (\n <ColorPicker {...props} colorModel={colorModel} />\n);\n","import React from \"react\";\n\nimport { ColorPicker } from \"./common/ColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalColorString } from \"../utils/compare\";\nimport { hsvStringToHsva, hsvaToHsvString } from \"../utils/convert\";\n\nconst colorModel: ColorModel<string> = {\n defaultColor: \"hsv(0, 0%, 0%)\",\n toHsva: hsvStringToHsva,\n fromHsva: hsvaToHsvString,\n equal: equalColorString,\n};\n\nexport const HsvStringColorPicker = (props: Partial<ColorPickerBaseProps<string>>): JSX.Element => (\n <ColorPicker {...props} colorModel={colorModel} />\n);\n","import React from \"react\";\n\nimport { AlphaColorPicker } from \"./common/AlphaColorPicker\";\nimport { ColorModel, ColorPickerBaseProps, RgbaColor } from \"../types\";\nimport { equalColorObjects } from \"../utils/compare\";\nimport { rgbaToHsva, hsvaToRgba } from \"../utils/convert\";\n\nconst colorModel: ColorModel<RgbaColor> = {\n defaultColor: { r: 0, g: 0, b: 0, a: 1 },\n toHsva: rgbaToHsva,\n fromHsva: hsvaToRgba,\n equal: equalColorObjects,\n};\n\nexport const RgbaColorPicker = (props: Partial<ColorPickerBaseProps<RgbaColor>>): JSX.Element => (\n <AlphaColorPicker {...props} colorModel={colorModel} />\n);\n","import React from \"react\";\n\nimport { AlphaColorPicker } from \"./common/AlphaColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalColorString } from \"../utils/compare\";\nimport { rgbaStringToHsva, hsvaToRgbaString } from \"../utils/convert\";\n\nconst colorModel: ColorModel<string> = {\n defaultColor: \"rgba(0, 0, 0, 1)\",\n toHsva: rgbaStringToHsva,\n fromHsva: hsvaToRgbaString,\n equal: equalColorString,\n};\n\nexport const RgbaStringColorPicker = (\n props: Partial<ColorPickerBaseProps<string>>\n): JSX.Element => <AlphaColorPicker {...props} colorModel={colorModel} />;\n","import React from \"react\";\n\nimport { ColorPicker } from \"./common/ColorPicker\";\nimport { ColorModel, ColorPickerBaseProps, RgbColor } from \"../types\";\nimport { equalColorObjects } from \"../utils/compare\";\nimport { rgbaToHsva, hsvaToRgba, rgbaToRgb } from \"../utils/convert\";\n\nconst colorModel: ColorModel<RgbColor> = {\n defaultColor: { r: 0, g: 0, b: 0 },\n toHsva: ({ r, g, b }) => rgbaToHsva({ r, g, b, a: 1 }),\n fromHsva: (hsva) => rgbaToRgb(hsvaToRgba(hsva)),\n equal: equalColorObjects,\n};\n\nexport const RgbColorPicker = (props: Partial<ColorPickerBaseProps<RgbColor>>): JSX.Element => (\n <ColorPicker {...props} colorModel={colorModel} />\n);\n","import React from \"react\";\n\nimport { ColorPicker } from \"./common/ColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalColorString } from \"../utils/compare\";\nimport { rgbStringToHsva, hsvaToRgbString } from \"../utils/convert\";\n\nconst colorModel: ColorModel<string> = {\n defaultColor: \"rgb(0, 0, 0)\",\n toHsva: rgbStringToHsva,\n fromHsva: hsvaToRgbString,\n equal: equalColorString,\n};\n\nexport const RgbStringColorPicker = (props: Partial<ColorPickerBaseProps<string>>): JSX.Element => (\n <ColorPicker {...props} colorModel={colorModel} />\n);\n","const matcher = /^#?([0-9A-F]{3,8})$/i;\n\nexport const validHex = (value: string, alpha?: boolean): boolean => {\n const match = matcher.exec(value);\n const length = match ? match[1].length : 0;\n\n return (\n length === 3 || // '#rgb' format\n length === 6 || // '#rrggbb' format\n (!!alpha && length === 4) || // '#rgba' format\n (!!alpha && length === 8) // '#rrggbbaa' format\n );\n};\n","import React, { useState, useEffect, useCallback } from \"react\";\n\nimport { useEventCallback } from \"../../hooks/useEventCallback\";\nimport { ColorInputBaseProps } from \"../../types\";\n\ninterface Props extends ColorInputBaseProps {\n /** Blocks typing invalid characters and limits string length */\n escape: (value: string) => string;\n /** Checks that value is valid color string */\n validate: (value: string) => boolean;\n /** Processes value before displaying it in the input */\n format?: (value: string) => string;\n /** Processes value before sending it in `onChange` */\n process?: (value: string) => string;\n}\n\nexport const ColorInput = (props: Props): JSX.Element => {\n const { color = \"\", onChange, onBlur, escape, validate, format, process, ...rest } = props;\n const [value, setValue] = useState(() => escape(color));\n const onChangeCallback = useEventCallback<string>(onChange);\n const onBlurCallback = useEventCallback<React.FocusEvent<HTMLInputElement>>(onBlur);\n\n // Trigger `onChange` handler only if the input value is a valid color\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = escape(e.target.value);\n setValue(inputValue);\n if (validate(inputValue)) onChangeCallback(process ? process(inputValue) : inputValue);\n },\n [escape, process, validate, onChangeCallback]\n );\n\n // Take the color from props if the last typed color (in local state) is not valid\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n if (!validate(e.target.value)) setValue(escape(color));\n onBlurCallback(e);\n },\n [color, escape, validate, onBlurCallback]\n );\n\n // Update the local state when `color` property value is changed\n useEffect(() => {\n setValue(escape(color));\n }, [color, escape]);\n\n return (\n <input\n {...rest}\n value={format ? format(value) : value}\n spellCheck=\"false\" // the element should not be checked for spelling errors\n onChange={handleChange}\n onBlur={handleBlur}\n />\n );\n};\n","import React, { useCallback } from \"react\";\nimport { ColorInputBaseProps } from \"../types\";\n\nimport { validHex } from \"../utils/validate\";\nimport { ColorInput } from \"./common/ColorInput\";\n\ninterface HexColorInputProps extends ColorInputBaseProps {\n /** Enables `#` prefix displaying */\n prefixed?: boolean;\n /** Allows `#rgba` and `#rrggbbaa` color formats */\n alpha?: boolean;\n}\n\n/** Adds \"#\" symbol to the beginning of the string */\nconst prefix = (value: string) => \"#\" + value;\n\nexport const HexColorInput = (props: HexColorInputProps): JSX.Element => {\n const { prefixed, alpha, ...rest } = props;\n\n /** Escapes all non-hexadecimal characters including \"#\" */\n const escape = useCallback(\n (value: string) => value.replace(/([^0-9A-F]+)/gi, \"\").substring(0, alpha ? 8 : 6),\n [alpha]\n );\n\n /** Validates hexadecimal strings */\n const validate = useCallback((value: string) => validHex(value, alpha), [alpha]);\n\n return (\n <ColorInput\n {...rest}\n escape={escape}\n format={prefixed ? prefix : undefined}\n process={prefix}\n validate={validate}\n />\n );\n};\n","import { EmblaPluginType } from 'embla-carousel'\n\nexport function isObject(subject: unknown): subject is Record<string, unknown> {\n return Object.prototype.toString.call(subject) === '[object Object]'\n}\n\nexport function isRecord(\n subject: unknown\n): subject is Record<string | number, unknown> {\n return isObject(subject) || Array.isArray(subject)\n}\n\nexport function canUseDOM(): boolean {\n return !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n )\n}\n\nexport function areOptionsEqual(\n optionsA: Record<string, unknown>,\n optionsB: Record<string, unknown>\n): boolean {\n const optionsAKeys = Object.keys(optionsA)\n const optionsBKeys = Object.keys(optionsB)\n\n if (optionsAKeys.length !== optionsBKeys.length) return false\n\n const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {}))\n const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {}))\n\n if (breakpointsA !== breakpointsB) return false\n\n return optionsAKeys.every((key) => {\n const valueA = optionsA[key]\n const valueB = optionsB[key]\n if (typeof valueA === 'function') return `${valueA}` === `${valueB}`\n if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB\n return areOptionsEqual(valueA, valueB)\n })\n}\n\nexport function sortAndMapPluginToOptions(\n plugins: EmblaPluginType[]\n): EmblaPluginType['options'][] {\n return plugins\n .concat()\n .sort((a, b) => (a.name > b.name ? 1 : -1))\n .map((plugin) => plugin.options)\n}\n\nexport function arePluginsEqual(\n pluginsA: EmblaPluginType[],\n pluginsB: EmblaPluginType[]\n): boolean {\n if (pluginsA.length !== pluginsB.length) return false\n\n const optionsA = sortAndMapPluginToOptions(pluginsA)\n const optionsB = sortAndMapPluginToOptions(pluginsB)\n\n return optionsA.every((optionA, index) => {\n const optionB = optionsB[index]\n return areOptionsEqual(optionA, optionB)\n })\n}\n","import { PointerEventType } from './DragTracker'\n\nexport type WindowType = Window & typeof globalThis\n\nexport function isNumber(subject: unknown): subject is number {\n return typeof subject === 'number'\n}\n\nexport function isString(subject: unknown): subject is string {\n return typeof subject === 'string'\n}\n\nexport function isBoolean(subject: unknown): subject is boolean {\n return typeof subject === 'boolean'\n}\n\nexport function isObject(subject: unknown): subject is Record<string, unknown> {\n return Object.prototype.toString.call(subject) === '[object Object]'\n}\n\nexport function mathAbs(n: number): number {\n return Math.abs(n)\n}\n\nexport function mathSign(n: number): number {\n return Math.sign(n)\n}\n\nexport function deltaAbs(valueB: number, valueA: number): number {\n return mathAbs(valueB - valueA)\n}\n\nexport function factorAbs(valueB: number, valueA: number): number {\n if (valueB === 0 || valueA === 0) return 0\n if (mathAbs(valueB) <= mathAbs(valueA)) return 0\n const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA))\n return mathAbs(diff / valueB)\n}\n\nexport function roundToTwoDecimals(num: number): number {\n return Math.round(num * 100) / 100\n}\n\nexport function arrayKeys<Type>(array: Type[]): number[] {\n return objectKeys(array).map(Number)\n}\n\nexport function arrayLast<Type>(array: Type[]): Type {\n return array[arrayLastIndex(array)]\n}\n\nexport function arrayLastIndex<Type>(array: Type[]): number {\n return Math.max(0, array.length - 1)\n}\n\nexport function arrayIsLastIndex<Type>(array: Type[], index: number): boolean {\n return index === arrayLastIndex(array)\n}\n\nexport function arrayFromNumber(n: number, startAt: number = 0): number[] {\n return Array.from(Array(n), (_, i) => startAt + i)\n}\n\nexport function objectKeys<Type extends object>(object: Type): string[] {\n return Object.keys(object)\n}\n\nexport function objectsMergeDeep(\n objectA: Record<string, unknown>,\n objectB: Record<string, unknown>\n): Record<string, unknown> {\n return [objectA, objectB].reduce((mergedObjects, currentObject) => {\n objectKeys(currentObject).forEach((key) => {\n const valueA = mergedObjects[key]\n const valueB = currentObject[key]\n const areObjects = isObject(valueA) && isObject(valueB)\n\n mergedObjects[key] = areObjects\n ? objectsMergeDeep(valueA, valueB)\n : valueB\n })\n return mergedObjects\n }, {})\n}\n\nexport function isMouseEvent(\n evt: PointerEventType,\n ownerWindow: WindowType\n): evt is MouseEvent {\n return (\n typeof ownerWindow.MouseEvent !== 'undefined' &&\n evt instanceof ownerWindow.MouseEvent\n )\n}\n","import { isString } from './utils'\n\nexport type AlignmentOptionType =\n | 'start'\n | 'center'\n | 'end'\n | ((viewSize: number, snapSize: number, index: number) => number)\n\nexport type AlignmentType = {\n measure: (n: number, index: number) => number\n}\n\nexport function Alignment(\n align: AlignmentOptionType,\n viewSize: number\n): AlignmentType {\n const predefined = { start, center, end }\n\n function start(): number {\n return 0\n }\n\n function center(n: number): number {\n return end(n) / 2\n }\n\n function end(n: number): number {\n return viewSize - n\n }\n\n function measure(n: number, index: number): number {\n if (isString(align)) return predefined[align](n)\n return align(viewSize, n, index)\n }\n\n const self: AlignmentType = {\n measure\n }\n return self\n}\n","type EventNameType = keyof DocumentEventMap | keyof WindowEventMap\ntype EventHandlerType = (evt: any) => void\ntype EventOptionsType = boolean | AddEventListenerOptions | undefined\ntype EventRemoverType = () => void\n\nexport type EventStoreType = {\n add: (\n node: EventTarget,\n type: EventNameType,\n handler: EventHandlerType,\n options?: EventOptionsType\n ) => EventStoreType\n clear: () => void\n}\n\nexport function EventStore(): EventStoreType {\n let listeners: EventRemoverType[] = []\n\n function add(\n node: EventTarget,\n type: EventNameType,\n handler: EventHandlerType,\n options: EventOptionsType = { passive: true }\n ): EventStoreType {\n let removeListener: EventRemoverType\n\n if ('addEventListener' in node) {\n node.addEventListener(type, handler, options)\n removeListener = () => node.removeEventListener(type, handler, options)\n } else {\n const legacyMediaQueryList = <MediaQueryList>node\n legacyMediaQueryList.addListener(handler)\n removeListener = () => legacyMediaQueryList.removeListener(handler)\n }\n\n listeners.push(removeListener)\n return self\n }\n\n function clear(): void {\n listeners = listeners.filter((remove) => remove())\n }\n\n const self: EventStoreType = {\n add,\n clear\n }\n return self\n}\n","import { EngineType } from './Engine'\nimport { EventStore } from './EventStore'\nimport { WindowType } from './utils'\n\nexport type AnimationsUpdateType = (engine: EngineType) => void\nexport type AnimationsRenderType = (engine: EngineType, alpha: number) => void\n\nexport type AnimationsType = {\n init: () => void\n destroy: () => void\n start: () => void\n stop: () => void\n update: () => void\n render: (alpha: number) => void\n}\n\nexport function Animations(\n ownerDocument: Document,\n ownerWindow: WindowType,\n update: () => void,\n render: (alpha: number) => void\n): AnimationsType {\n const documentVisibleHandler = EventStore()\n const fixedTimeStep = 1000 / 60\n\n let lastTimeStamp: number | null = null\n let accumulatedTime = 0\n let animationId = 0\n\n function init(): void {\n documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => {\n if (ownerDocument.hidden) reset()\n })\n }\n\n function destroy(): void {\n stop()\n documentVisibleHandler.clear()\n }\n\n function animate(timeStamp: DOMHighResTimeStamp): void {\n if (!animationId) return\n if (!lastTimeStamp) {\n lastTimeStamp = timeStamp\n update()\n update()\n }\n\n const timeElapsed = timeStamp - lastTimeStamp\n lastTimeStamp = timeStamp\n accumulatedTime += timeElapsed\n\n while (accumulatedTime >= fixedTimeStep) {\n update()\n accumulatedTime -= fixedTimeStep\n }\n\n const alpha = accumulatedTime / fixedTimeStep\n render(alpha)\n\n if (animationId) {\n animationId = ownerWindow.requestAnimationFrame(animate)\n }\n }\n\n function start(): void {\n if (animationId) return\n animationId = ownerWindow.requestAnimationFrame(animate)\n }\n\n function stop(): void {\n ownerWindow.cancelAnimationFrame(animationId)\n lastTimeStamp = null\n accumulatedTime = 0\n animationId = 0\n }\n\n function reset(): void {\n lastTimeStamp = null\n accumulatedTime = 0\n }\n\n const self: AnimationsType = {\n init,\n destroy,\n start,\n stop,\n update,\n render\n }\n return self\n}\n","import { NodeRectType } from './NodeRects'\n\nexport type AxisOptionType = 'x' | 'y'\nexport type AxisDirectionOptionType = 'ltr' | 'rtl'\ntype AxisEdgeType = 'top' | 'right' | 'bottom' | 'left'\n\nexport type AxisType = {\n scroll: AxisOptionType\n cross: AxisOptionType\n startEdge: AxisEdgeType\n endEdge: AxisEdgeType\n measureSize: (nodeRect: NodeRectType) => number\n direction: (n: number) => number\n}\n\nexport function Axis(\n axis: AxisOptionType,\n contentDirection: AxisDirectionOptionType\n): AxisType {\n const isRightToLeft = contentDirection === 'rtl'\n const isVertical = axis === 'y'\n const scroll = isVertical ? 'y' : 'x'\n const cross = isVertical ? 'x' : 'y'\n const sign = !isVertical && isRightToLeft ? -1 : 1\n const startEdge = getStartEdge()\n const endEdge = getEndEdge()\n\n function measureSize(nodeRect: NodeRectType): number {\n const { height, width } = nodeRect\n return isVertical ? height : width\n }\n\n function getStartEdge(): AxisEdgeType {\n if (isVertical) return 'top'\n return isRightToLeft ? 'right' : 'left'\n }\n\n function getEndEdge(): AxisEdgeType {\n if (isVertical) return 'bottom'\n return isRightToLeft ? 'left' : 'right'\n }\n\n function direction(n: number): number {\n return n * sign\n }\n\n const self: AxisType = {\n scroll,\n cross,\n startEdge,\n endEdge,\n measureSize,\n direction\n }\n return self\n}\n","import { mathAbs } from './utils'\n\nexport type LimitType = {\n min: number\n max: number\n length: number\n constrain: (n: number) => number\n reachedAny: (n: number) => boolean\n reachedMax: (n: number) => boolean\n reachedMin: (n: number) => boolean\n removeOffset: (n: number) => number\n}\n\nexport function Limit(min: number = 0, max: number = 0): LimitType {\n const length = mathAbs(min - max)\n\n function reachedMin(n: number): boolean {\n return n < min\n }\n\n function reachedMax(n: number): boolean {\n return n > max\n }\n\n function reachedAny(n: number): boolean {\n return reachedMin(n) || reachedMax(n)\n }\n\n function constrain(n: number): number {\n if (!reachedAny(n)) return n\n return reachedMin(n) ? min : max\n }\n\n function removeOffset(n: number): number {\n if (!length) return n\n return n - length * Math.ceil((n - max) / length)\n }\n\n const self: LimitType = {\n length,\n max,\n min,\n constrain,\n reachedAny,\n reachedMax,\n reachedMin,\n removeOffset\n }\n return self\n}\n","import { Limit } from './Limit'\nimport { mathAbs } from './utils'\n\nexport type CounterType = {\n get: () => number\n set: (n: number) => CounterType\n add: (n: number) => CounterType\n clone: () => CounterType\n}\n\nexport function Counter(\n max: number,\n start: number,\n loop: boolean\n): CounterType {\n const { constrain } = Limit(0, max)\n const loopEnd = max + 1\n let counter = withinLimit(start)\n\n function withinLimit(n: number): number {\n return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd)\n }\n\n function get(): number {\n return counter\n }\n\n function set(n: number): CounterType {\n counter = withinLimit(n)\n return self\n }\n\n function add(n: number): CounterType {\n return clone().set(get() + n)\n }\n\n function clone(): CounterType {\n return Counter(max, get(), loop)\n }\n\n const self: CounterType = {\n get,\n set,\n add,\n clone\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { AnimationsType } from './Animations'\nimport { CounterType } from './Counter'\nimport { DragTrackerType, PointerEventType } from './DragTracker'\nimport { EventHandlerType } from './EventHandler'\nimport { AxisType } from './Axis'\nimport { EventStore } from './EventStore'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollTargetType } from './ScrollTarget'\nimport { ScrollToType } from './ScrollTo'\nimport { Vector1DType } from './Vector1d'\nimport { PercentOfViewType } from './PercentOfView'\nimport { Limit } from './Limit'\nimport {\n deltaAbs,\n factorAbs,\n isBoolean,\n isMouseEvent,\n mathAbs,\n mathSign,\n WindowType\n} from './utils'\n\ntype DragHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n evt: PointerEventType\n) => boolean | void\n\nexport type DragHandlerOptionType = boolean | DragHandlerCallbackType\n\nexport type DragHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n pointerDown: () => boolean\n}\n\nexport function DragHandler(\n axis: AxisType,\n rootNode: HTMLElement,\n ownerDocument: Document,\n ownerWindow: WindowType,\n target: Vector1DType,\n dragTracker: DragTrackerType,\n location: Vector1DType,\n animation: AnimationsType,\n scrollTo: ScrollToType,\n scrollBody: ScrollBodyType,\n scrollTarget: ScrollTargetType,\n index: CounterType,\n eventHandler: EventHandlerType,\n percentOfView: PercentOfViewType,\n dragFree: boolean,\n dragThreshold: number,\n skipSnaps: boolean,\n baseFriction: number,\n watchDrag: DragHandlerOptionType\n): DragHandlerType {\n const { cross: crossAxis, direction } = axis\n const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA']\n const nonPassiveEvent = { passive: false }\n const initEvents = EventStore()\n const dragEvents = EventStore()\n const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20))\n const snapForceBoost = { mouse: 300, touch: 400 }\n const freeForceBoost = { mouse: 500, touch: 600 }\n const baseSpeed = dragFree ? 43 : 25\n\n let isMoving = false\n let startScroll = 0\n let startCross = 0\n let pointerIsDown = false\n let preventScroll = false\n let preventClick = false\n let isMouse = false\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchDrag) return\n\n function downIfAllowed(evt: PointerEventType): void {\n if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt)\n }\n\n const node = rootNode\n initEvents\n .add(node, 'dragstart', (evt) => evt.preventDefault(), nonPassiveEvent)\n .add(node, 'touchmove', () => undefined, nonPassiveEvent)\n .add(node, 'touchend', () => undefined)\n .add(node, 'touchstart', downIfAllowed)\n .add(node, 'mousedown', downIfAllowed)\n .add(node, 'touchcancel', up)\n .add(node, 'contextmenu', up)\n .add(node, 'click', click, true)\n }\n\n function destroy(): void {\n initEvents.clear()\n dragEvents.clear()\n }\n\n function addDragEvents(): void {\n const node = isMouse ? ownerDocument : rootNode\n dragEvents\n .add(node, 'touchmove', move, nonPassiveEvent)\n .add(node, 'touchend', up)\n .add(node, 'mousemove', move, nonPassiveEvent)\n .add(node, 'mouseup', up)\n }\n\n function isFocusNode(node: Element): boolean {\n const nodeName = node.nodeName || ''\n return focusNodes.includes(nodeName)\n }\n\n function forceBoost(): number {\n const boost = dragFree ? freeForceBoost : snapForceBoost\n const type = isMouse ? 'mouse' : 'touch'\n return boost[type]\n }\n\n function allowedForce(force: number, targetChanged: boolean): number {\n const next = index.add(mathSign(force) * -1)\n const baseForce = scrollTarget.byDistance(force, !dragFree).distance\n\n if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce\n if (skipSnaps && targetChanged) return baseForce * 0.5\n\n return scrollTarget.byIndex(next.get(), 0).distance\n }\n\n function down(evt: PointerEventType): void {\n const isMouseEvt = isMouseEvent(evt, ownerWindow)\n isMouse = isMouseEvt\n preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving\n isMoving = deltaAbs(target.get(), location.get()) >= 2\n\n if (isMouseEvt && evt.button !== 0) return\n if (isFocusNode(evt.target as Element)) return\n\n pointerIsDown = true\n dragTracker.pointerDown(evt)\n scrollBody.useFriction(0).useDuration(0)\n target.set(location)\n addDragEvents()\n startScroll = dragTracker.readPoint(evt)\n startCross = dragTracker.readPoint(evt, crossAxis)\n eventHandler.emit('pointerDown')\n }\n\n function move(evt: PointerEventType): void {\n const isTouchEvt = !isMouseEvent(evt, ownerWindow)\n if (isTouchEvt && evt.touches.length >= 2) return up(evt)\n\n const lastScroll = dragTracker.readPoint(evt)\n const lastCross = dragTracker.readPoint(evt, crossAxis)\n const diffScroll = deltaAbs(lastScroll, startScroll)\n const diffCross = deltaAbs(lastCross, startCross)\n\n if (!preventScroll && !isMouse) {\n if (!evt.cancelable) return up(evt)\n preventScroll = diffScroll > diffCross\n if (!preventScroll) return up(evt)\n }\n const diff = dragTracker.pointerMove(evt)\n if (diffScroll > dragThreshold) preventClick = true\n\n scrollBody.useFriction(0.3).useDuration(0.75)\n animation.start()\n target.add(direction(diff))\n evt.preventDefault()\n }\n\n function up(evt: PointerEventType): void {\n const currentLocation = scrollTarget.byDistance(0, false)\n const targetChanged = currentLocation.index !== index.get()\n const rawForce = dragTracker.pointerUp(evt) * forceBoost()\n const force = allowedForce(direction(rawForce), targetChanged)\n const forceFactor = factorAbs(rawForce, force)\n const speed = baseSpeed - 10 * forceFactor\n const friction = baseFriction + forceFactor / 50\n\n preventScroll = false\n pointerIsDown = false\n dragEvents.clear()\n scrollBody.useDuration(speed).useFriction(friction)\n scrollTo.distance(force, !dragFree)\n isMouse = false\n eventHandler.emit('pointerUp')\n }\n\n function click(evt: MouseEvent): void {\n if (preventClick) {\n evt.stopPropagation()\n evt.preventDefault()\n preventClick = false\n }\n }\n\n function pointerDown(): boolean {\n return pointerIsDown\n }\n\n const self: DragHandlerType = {\n init,\n destroy,\n pointerDown\n }\n return self\n}\n","import { AxisOptionType, AxisType } from './Axis'\nimport { isMouseEvent, mathAbs, WindowType } from './utils'\n\ntype PointerCoordType = keyof Touch | keyof MouseEvent\nexport type PointerEventType = TouchEvent | MouseEvent\n\nexport type DragTrackerType = {\n pointerDown: (evt: PointerEventType) => number\n pointerMove: (evt: PointerEventType) => number\n pointerUp: (evt: PointerEventType) => number\n readPoint: (evt: PointerEventType, evtAxis?: AxisOptionType) => number\n}\n\nexport function DragTracker(\n axis: AxisType,\n ownerWindow: WindowType\n): DragTrackerType {\n const logInterval = 170\n\n let startEvent: PointerEventType\n let lastEvent: PointerEventType\n\n function readTime(evt: PointerEventType): number {\n return evt.timeStamp\n }\n\n function readPoint(evt: PointerEventType, evtAxis?: AxisOptionType): number {\n const property = evtAxis || axis.scroll\n const coord: PointerCoordType = `client${property === 'x' ? 'X' : 'Y'}`\n return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord]\n }\n\n function pointerDown(evt: PointerEventType): number {\n startEvent = evt\n lastEvent = evt\n return readPoint(evt)\n }\n\n function pointerMove(evt: PointerEventType): number {\n const diff = readPoint(evt) - readPoint(lastEvent)\n const expired = readTime(evt) - readTime(startEvent) > logInterval\n\n lastEvent = evt\n if (expired) startEvent = evt\n return diff\n }\n\n function pointerUp(evt: PointerEventType): number {\n if (!startEvent || !lastEvent) return 0\n const diffDrag = readPoint(lastEvent) - readPoint(startEvent)\n const diffTime = readTime(evt) - readTime(startEvent)\n const expired = readTime(evt) - readTime(lastEvent) > logInterval\n const force = diffDrag / diffTime\n const isFlick = diffTime && !expired && mathAbs(force) > 0.1\n\n return isFlick ? force : 0\n }\n\n const self: DragTrackerType = {\n pointerDown,\n pointerMove,\n pointerUp,\n readPoint\n }\n return self\n}\n","export type NodeRectType = {\n top: number\n right: number\n bottom: number\n left: number\n width: number\n height: number\n}\n\nexport type NodeRectsType = {\n measure: (node: HTMLElement) => NodeRectType\n}\n\nexport function NodeRects(): NodeRectsType {\n function measure(node: HTMLElement): NodeRectType {\n const { offsetTop, offsetLeft, offsetWidth, offsetHeight } = node\n const offset: NodeRectType = {\n top: offsetTop,\n right: offsetLeft + offsetWidth,\n bottom: offsetTop + offsetHeight,\n left: offsetLeft,\n width: offsetWidth,\n height: offsetHeight\n }\n\n return offset\n }\n\n const self: NodeRectsType = {\n measure\n }\n return self\n}\n","export type PercentOfViewType = {\n measure: (n: number) => number\n}\n\nexport function PercentOfView(viewSize: number): PercentOfViewType {\n function measure(n: number): number {\n return viewSize * (n / 100)\n }\n\n const self: PercentOfViewType = {\n measure\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { NodeRectsType } from './NodeRects'\nimport { isBoolean, mathAbs, WindowType } from './utils'\n\ntype ResizeHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n entries: ResizeObserverEntry[]\n) => boolean | void\n\nexport type ResizeHandlerOptionType = boolean | ResizeHandlerCallbackType\n\nexport type ResizeHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n}\n\nexport function ResizeHandler(\n container: HTMLElement,\n eventHandler: EventHandlerType,\n ownerWindow: WindowType,\n slides: HTMLElement[],\n axis: AxisType,\n watchResize: ResizeHandlerOptionType,\n nodeRects: NodeRectsType\n): ResizeHandlerType {\n const observeNodes = [container].concat(slides)\n let resizeObserver: ResizeObserver\n let containerSize: number\n let slideSizes: number[] = []\n let destroyed = false\n\n function readSize(node: HTMLElement): number {\n return axis.measureSize(nodeRects.measure(node))\n }\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchResize) return\n\n containerSize = readSize(container)\n slideSizes = slides.map(readSize)\n\n function defaultCallback(entries: ResizeObserverEntry[]): void {\n for (const entry of entries) {\n if (destroyed) return\n\n const isContainer = entry.target === container\n const slideIndex = slides.indexOf(<HTMLElement>entry.target)\n const lastSize = isContainer ? containerSize : slideSizes[slideIndex]\n const newSize = readSize(isContainer ? container : slides[slideIndex])\n const diffSize = mathAbs(newSize - lastSize)\n\n if (diffSize >= 0.5) {\n emblaApi.reInit()\n eventHandler.emit('resize')\n\n break\n }\n }\n }\n\n resizeObserver = new ResizeObserver((entries) => {\n if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n defaultCallback(entries)\n }\n })\n\n ownerWindow.requestAnimationFrame(() => {\n observeNodes.forEach((node) => resizeObserver.observe(node))\n })\n }\n\n function destroy(): void {\n destroyed = true\n if (resizeObserver) resizeObserver.disconnect()\n }\n\n const self: ResizeHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { mathSign, mathAbs } from './utils'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollBodyType = {\n direction: () => number\n duration: () => number\n velocity: () => number\n seek: () => ScrollBodyType\n settled: () => boolean\n useBaseFriction: () => ScrollBodyType\n useBaseDuration: () => ScrollBodyType\n useFriction: (n: number) => ScrollBodyType\n useDuration: (n: number) => ScrollBodyType\n}\n\nexport function ScrollBody(\n location: Vector1DType,\n offsetLocation: Vector1DType,\n previousLocation: Vector1DType,\n target: Vector1DType,\n baseDuration: number,\n baseFriction: number\n): ScrollBodyType {\n let scrollVelocity = 0\n let scrollDirection = 0\n let scrollDuration = baseDuration\n let scrollFriction = baseFriction\n let rawLocation = location.get()\n let rawLocationPrevious = 0\n\n function seek(): ScrollBodyType {\n const displacement = target.get() - location.get()\n const isInstant = !scrollDuration\n let scrollDistance = 0\n\n if (isInstant) {\n scrollVelocity = 0\n previousLocation.set(target)\n location.set(target)\n\n scrollDistance = displacement\n } else {\n previousLocation.set(location)\n\n scrollVelocity += displacement / scrollDuration\n scrollVelocity *= scrollFriction\n rawLocation += scrollVelocity\n location.add(scrollVelocity)\n\n scrollDistance = rawLocation - rawLocationPrevious\n }\n\n scrollDirection = mathSign(scrollDistance)\n rawLocationPrevious = rawLocation\n return self\n }\n\n function settled(): boolean {\n const diff = target.get() - offsetLocation.get()\n return mathAbs(diff) < 0.001\n }\n\n function duration(): number {\n return scrollDuration\n }\n\n function direction(): number {\n return scrollDirection\n }\n\n function velocity(): number {\n return scrollVelocity\n }\n\n function useBaseDuration(): ScrollBodyType {\n return useDuration(baseDuration)\n }\n\n function useBaseFriction(): ScrollBodyType {\n return useFriction(baseFriction)\n }\n\n function useDuration(n: number): ScrollBodyType {\n scrollDuration = n\n return self\n }\n\n function useFriction(n: number): ScrollBodyType {\n scrollFriction = n\n return self\n }\n\n const self: ScrollBodyType = {\n direction,\n duration,\n velocity,\n seek,\n settled,\n useBaseFriction,\n useBaseDuration,\n useFriction,\n useDuration\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { ScrollBodyType } from './ScrollBody'\nimport { Vector1DType } from './Vector1d'\nimport { mathAbs } from './utils'\nimport { PercentOfViewType } from './PercentOfView'\n\nexport type ScrollBoundsType = {\n shouldConstrain: () => boolean\n constrain: (pointerDown: boolean) => void\n toggleActive: (active: boolean) => void\n}\n\nexport function ScrollBounds(\n limit: LimitType,\n location: Vector1DType,\n target: Vector1DType,\n scrollBody: ScrollBodyType,\n percentOfView: PercentOfViewType\n): ScrollBoundsType {\n const pullBackThreshold = percentOfView.measure(10)\n const edgeOffsetTolerance = percentOfView.measure(50)\n const frictionLimit = Limit(0.1, 0.99)\n let disabled = false\n\n function shouldConstrain(): boolean {\n if (disabled) return false\n if (!limit.reachedAny(target.get())) return false\n if (!limit.reachedAny(location.get())) return false\n return true\n }\n\n function constrain(pointerDown: boolean): void {\n if (!shouldConstrain()) return\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max'\n const diffToEdge = mathAbs(limit[edge] - location.get())\n const diffToTarget = target.get() - location.get()\n const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance)\n\n target.subtract(diffToTarget * friction)\n\n if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n target.set(limit.constrain(target.get()))\n scrollBody.useDuration(25).useBaseFriction()\n }\n }\n\n function toggleActive(active: boolean): void {\n disabled = !active\n }\n\n const self: ScrollBoundsType = {\n shouldConstrain,\n constrain,\n toggleActive\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { arrayIsLastIndex, arrayLast, deltaAbs } from './utils'\n\nexport type ScrollContainOptionType = false | 'trimSnaps' | 'keepSnaps'\n\nexport type ScrollContainType = {\n snapsContained: number[]\n scrollContainLimit: LimitType\n}\n\nexport function ScrollContain(\n viewSize: number,\n contentSize: number,\n snapsAligned: number[],\n containScroll: ScrollContainOptionType,\n pixelTolerance: number\n): ScrollContainType {\n const scrollBounds = Limit(-contentSize + viewSize, 0)\n const snapsBounded = measureBounded()\n const scrollContainLimit = findScrollContainLimit()\n const snapsContained = measureContained()\n\n function usePixelTolerance(bound: number, snap: number): boolean {\n return deltaAbs(bound, snap) <= 1\n }\n\n function findScrollContainLimit(): LimitType {\n const startSnap = snapsBounded[0]\n const endSnap = arrayLast(snapsBounded)\n const min = snapsBounded.lastIndexOf(startSnap)\n const max = snapsBounded.indexOf(endSnap) + 1\n return Limit(min, max)\n }\n\n function measureBounded(): number[] {\n return snapsAligned\n .map((snapAligned, index) => {\n const { min, max } = scrollBounds\n const snap = scrollBounds.constrain(snapAligned)\n const isFirst = !index\n const isLast = arrayIsLastIndex(snapsAligned, index)\n if (isFirst) return max\n if (isLast) return min\n if (usePixelTolerance(min, snap)) return min\n if (usePixelTolerance(max, snap)) return max\n return snap\n })\n .map((scrollBound) => parseFloat(scrollBound.toFixed(3)))\n }\n\n function measureContained(): number[] {\n if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max]\n if (containScroll === 'keepSnaps') return snapsBounded\n const { min, max } = scrollContainLimit\n return snapsBounded.slice(min, max)\n }\n\n const self: ScrollContainType = {\n snapsContained,\n scrollContainLimit\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { arrayLast } from './utils'\n\nexport type ScrollLimitType = {\n limit: LimitType\n}\n\nexport function ScrollLimit(\n contentSize: number,\n scrollSnaps: number[],\n loop: boolean\n): ScrollLimitType {\n const max = scrollSnaps[0]\n const min = loop ? max - contentSize : arrayLast(scrollSnaps)\n const limit = Limit(min, max)\n\n const self: ScrollLimitType = {\n limit\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollLooperType = {\n loop: (direction: number) => void\n}\n\nexport function ScrollLooper(\n contentSize: number,\n limit: LimitType,\n location: Vector1DType,\n vectors: Vector1DType[]\n): ScrollLooperType {\n const jointSafety = 0.1\n const min = limit.min + jointSafety\n const max = limit.max + jointSafety\n const { reachedMin, reachedMax } = Limit(min, max)\n\n function shouldLoop(direction: number): boolean {\n if (direction === 1) return reachedMax(location.get())\n if (direction === -1) return reachedMin(location.get())\n return false\n }\n\n function loop(direction: number): void {\n if (!shouldLoop(direction)) return\n\n const loopDistance = contentSize * (direction * -1)\n vectors.forEach((v) => v.add(loopDistance))\n }\n\n const self: ScrollLooperType = {\n loop\n }\n return self\n}\n","import { LimitType } from './Limit'\n\nexport type ScrollProgressType = {\n get: (n: number) => number\n}\n\nexport function ScrollProgress(limit: LimitType): ScrollProgressType {\n const { max, length } = limit\n\n function get(n: number): number {\n const currentLocation = n - max\n return length ? currentLocation / -length : 0\n }\n\n const self: ScrollProgressType = {\n get\n }\n return self\n}\n","import { AlignmentType } from './Alignment'\nimport { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport { SlidesToScrollType } from './SlidesToScroll'\nimport { arrayLast, mathAbs } from './utils'\n\nexport type ScrollSnapsType = {\n snaps: number[]\n snapsAligned: number[]\n}\n\nexport function ScrollSnaps(\n axis: AxisType,\n alignment: AlignmentType,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n slidesToScroll: SlidesToScrollType\n): ScrollSnapsType {\n const { startEdge, endEdge } = axis\n const { groupSlides } = slidesToScroll\n const alignments = measureSizes().map(alignment.measure)\n const snaps = measureUnaligned()\n const snapsAligned = measureAligned()\n\n function measureSizes(): number[] {\n return groupSlides(slideRects)\n .map((rects) => arrayLast(rects)[endEdge] - rects[0][startEdge])\n .map(mathAbs)\n }\n\n function measureUnaligned(): number[] {\n return slideRects\n .map((rect) => containerRect[startEdge] - rect[startEdge])\n .map((snap) => -mathAbs(snap))\n }\n\n function measureAligned(): number[] {\n return groupSlides(snaps)\n .map((g) => g[0])\n .map((snap, index) => snap + alignments[index])\n }\n\n const self: ScrollSnapsType = {\n snaps,\n snapsAligned\n }\n return self\n}\n","import { LimitType } from './Limit'\nimport { ScrollContainOptionType } from './ScrollContain'\nimport { SlidesToScrollType } from './SlidesToScroll'\nimport {\n arrayFromNumber,\n arrayIsLastIndex,\n arrayLast,\n arrayLastIndex\n} from './utils'\n\nexport type SlideRegistryType = {\n slideRegistry: number[][]\n}\n\nexport function SlideRegistry(\n containSnaps: boolean,\n containScroll: ScrollContainOptionType,\n scrollSnaps: number[],\n scrollContainLimit: LimitType,\n slidesToScroll: SlidesToScrollType,\n slideIndexes: number[]\n): SlideRegistryType {\n const { groupSlides } = slidesToScroll\n const { min, max } = scrollContainLimit\n const slideRegistry = createSlideRegistry()\n\n function createSlideRegistry(): number[][] {\n const groupedSlideIndexes = groupSlides(slideIndexes)\n const doNotContain = !containSnaps || containScroll === 'keepSnaps'\n\n if (scrollSnaps.length === 1) return [slideIndexes]\n if (doNotContain) return groupedSlideIndexes\n\n return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {\n const isFirst = !index\n const isLast = arrayIsLastIndex(groups, index)\n\n if (isFirst) {\n const range = arrayLast(groups[0]) + 1\n return arrayFromNumber(range)\n }\n if (isLast) {\n const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1\n return arrayFromNumber(range, arrayLast(groups)[0])\n }\n return group\n })\n }\n\n const self: SlideRegistryType = {\n slideRegistry\n }\n return self\n}\n","import { LimitType } from './Limit'\nimport { Vector1DType } from './Vector1d'\nimport { arrayLast, mathAbs, mathSign } from './utils'\n\nexport type TargetType = {\n distance: number\n index: number\n}\n\nexport type ScrollTargetType = {\n byIndex: (target: number, direction: number) => TargetType\n byDistance: (force: number, snap: boolean) => TargetType\n shortcut: (target: number, direction: number) => number\n}\n\nexport function ScrollTarget(\n loop: boolean,\n scrollSnaps: number[],\n contentSize: number,\n limit: LimitType,\n targetVector: Vector1DType\n): ScrollTargetType {\n const { reachedAny, removeOffset, constrain } = limit\n\n function minDistance(distances: number[]): number {\n return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0]\n }\n\n function findTargetSnap(target: number): TargetType {\n const distance = loop ? removeOffset(target) : constrain(target)\n const ascDiffsToSnaps = scrollSnaps\n .map((snap, index) => ({ diff: shortcut(snap - distance, 0), index }))\n .sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff))\n\n const { index } = ascDiffsToSnaps[0]\n return { index, distance }\n }\n\n function shortcut(target: number, direction: number): number {\n const targets = [target, target + contentSize, target - contentSize]\n\n if (!loop) return target\n if (!direction) return minDistance(targets)\n\n const matchingTargets = targets.filter((t) => mathSign(t) === direction)\n if (matchingTargets.length) return minDistance(matchingTargets)\n return arrayLast(targets) - contentSize\n }\n\n function byIndex(index: number, direction: number): TargetType {\n const diffToSnap = scrollSnaps[index] - targetVector.get()\n const distance = shortcut(diffToSnap, direction)\n return { index, distance }\n }\n\n function byDistance(distance: number, snap: boolean): TargetType {\n const target = targetVector.get() + distance\n const { index, distance: targetSnapDistance } = findTargetSnap(target)\n const reachedBound = !loop && reachedAny(target)\n\n if (!snap || reachedBound) return { index, distance }\n\n const diffToSnap = scrollSnaps[index] - targetSnapDistance\n const snapDistance = distance + shortcut(diffToSnap, 0)\n\n return { index, distance: snapDistance }\n }\n\n const self: ScrollTargetType = {\n byDistance,\n byIndex,\n shortcut\n }\n return self\n}\n","import { AnimationsType } from './Animations'\nimport { CounterType } from './Counter'\nimport { EventHandlerType } from './EventHandler'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollTargetType, TargetType } from './ScrollTarget'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollToType = {\n distance: (n: number, snap: boolean) => void\n index: (n: number, direction: number) => void\n}\n\nexport function ScrollTo(\n animation: AnimationsType,\n indexCurrent: CounterType,\n indexPrevious: CounterType,\n scrollBody: ScrollBodyType,\n scrollTarget: ScrollTargetType,\n targetVector: Vector1DType,\n eventHandler: EventHandlerType\n): ScrollToType {\n function scrollTo(target: TargetType): void {\n const distanceDiff = target.distance\n const indexDiff = target.index !== indexCurrent.get()\n\n targetVector.add(distanceDiff)\n\n if (distanceDiff) {\n if (scrollBody.duration()) {\n animation.start()\n } else {\n animation.update()\n animation.render(1)\n animation.update()\n }\n }\n\n if (indexDiff) {\n indexPrevious.set(indexCurrent.get())\n indexCurrent.set(target.index)\n eventHandler.emit('select')\n }\n }\n\n function distance(n: number, snap: boolean): void {\n const target = scrollTarget.byDistance(n, snap)\n scrollTo(target)\n }\n\n function index(n: number, direction: number): void {\n const targetIndex = indexCurrent.clone().set(n)\n const target = scrollTarget.byIndex(targetIndex.get(), direction)\n scrollTo(target)\n }\n\n const self: ScrollToType = {\n distance,\n index\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { EventStoreType } from './EventStore'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollToType } from './ScrollTo'\nimport { SlideRegistryType } from './SlideRegistry'\nimport { isBoolean, isNumber } from './utils'\n\ntype FocusHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n evt: FocusEvent\n) => boolean | void\n\nexport type FocusHandlerOptionType = boolean | FocusHandlerCallbackType\n\nexport type SlideFocusType = {\n init: (emblaApi: EmblaCarouselType) => void\n}\n\nexport function SlideFocus(\n root: HTMLElement,\n slides: HTMLElement[],\n slideRegistry: SlideRegistryType['slideRegistry'],\n scrollTo: ScrollToType,\n scrollBody: ScrollBodyType,\n eventStore: EventStoreType,\n eventHandler: EventHandlerType,\n watchFocus: FocusHandlerOptionType\n): SlideFocusType {\n const focusListenerOptions = { passive: true, capture: true }\n let lastTabPressTime = 0\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchFocus) return\n\n function defaultCallback(index: number): void {\n const nowTime = new Date().getTime()\n const diffTime = nowTime - lastTabPressTime\n\n if (diffTime > 10) return\n\n eventHandler.emit('slideFocusStart')\n root.scrollLeft = 0\n\n const group = slideRegistry.findIndex((group) => group.includes(index))\n\n if (!isNumber(group)) return\n\n scrollBody.useDuration(0)\n scrollTo.index(group, 0)\n\n eventHandler.emit('slideFocus')\n }\n\n eventStore.add(document, 'keydown', registerTabPress, false)\n\n slides.forEach((slide, slideIndex) => {\n eventStore.add(\n slide,\n 'focus',\n (evt: FocusEvent) => {\n if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) {\n defaultCallback(slideIndex)\n }\n },\n focusListenerOptions\n )\n })\n }\n\n function registerTabPress(event: KeyboardEvent): void {\n if (event.code === 'Tab') lastTabPressTime = new Date().getTime()\n }\n\n const self: SlideFocusType = {\n init\n }\n return self\n}\n","import { isNumber } from './utils'\n\nexport type Vector1DType = {\n get: () => number\n set: (n: Vector1DType | number) => void\n add: (n: Vector1DType | number) => void\n subtract: (n: Vector1DType | number) => void\n}\n\nexport function Vector1D(initialValue: number): Vector1DType {\n let value = initialValue\n\n function get(): number {\n return value\n }\n\n function set(n: Vector1DType | number): void {\n value = normalizeInput(n)\n }\n\n function add(n: Vector1DType | number): void {\n value += normalizeInput(n)\n }\n\n function subtract(n: Vector1DType | number): void {\n value -= normalizeInput(n)\n }\n\n function normalizeInput(n: Vector1DType | number): number {\n return isNumber(n) ? n : n.get()\n }\n\n const self: Vector1DType = {\n get,\n set,\n add,\n subtract\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { roundToTwoDecimals } from './utils'\n\nexport type TranslateType = {\n clear: () => void\n to: (target: number) => void\n toggleActive: (active: boolean) => void\n}\n\nexport function Translate(\n axis: AxisType,\n container: HTMLElement\n): TranslateType {\n const translate = axis.scroll === 'x' ? x : y\n const containerStyle = container.style\n let previousTarget: number | null = null\n let disabled = false\n\n function x(n: number): string {\n return `translate3d(${n}px,0px,0px)`\n }\n\n function y(n: number): string {\n return `translate3d(0px,${n}px,0px)`\n }\n\n function to(target: number): void {\n if (disabled) return\n\n const newTarget = roundToTwoDecimals(axis.direction(target))\n if (newTarget === previousTarget) return\n\n containerStyle.transform = translate(newTarget)\n previousTarget = newTarget\n }\n\n function toggleActive(active: boolean): void {\n disabled = !active\n }\n\n function clear(): void {\n if (disabled) return\n containerStyle.transform = ''\n if (!container.getAttribute('style')) container.removeAttribute('style')\n }\n\n const self: TranslateType = {\n clear,\n to,\n toggleActive\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { arrayKeys } from './utils'\nimport { Vector1D, Vector1DType } from './Vector1d'\nimport { Translate, TranslateType } from './Translate'\n\ntype SlideBoundType = {\n start: number\n end: number\n}\n\ntype LoopPointType = {\n loopPoint: number\n index: number\n translate: TranslateType\n slideLocation: Vector1DType\n target: () => number\n}\n\nexport type SlideLooperType = {\n canLoop: () => boolean\n clear: () => void\n loop: () => void\n loopPoints: LoopPointType[]\n}\n\nexport function SlideLooper(\n axis: AxisType,\n viewSize: number,\n contentSize: number,\n slideSizes: number[],\n slideSizesWithGaps: number[],\n snaps: number[],\n scrollSnaps: number[],\n location: Vector1DType,\n slides: HTMLElement[]\n): SlideLooperType {\n const roundingSafety = 0.5\n const ascItems = arrayKeys(slideSizesWithGaps)\n const descItems = arrayKeys(slideSizesWithGaps).reverse()\n const loopPoints = startPoints().concat(endPoints())\n\n function removeSlideSizes(indexes: number[], from: number): number {\n return indexes.reduce((a: number, i) => {\n return a - slideSizesWithGaps[i]\n }, from)\n }\n\n function slidesInGap(indexes: number[], gap: number): number[] {\n return indexes.reduce((a: number[], i) => {\n const remainingGap = removeSlideSizes(a, gap)\n return remainingGap > 0 ? a.concat([i]) : a\n }, [])\n }\n\n function findSlideBounds(offset: number): SlideBoundType[] {\n return snaps.map((snap, index) => ({\n start: snap - slideSizes[index] + roundingSafety + offset,\n end: snap + viewSize - roundingSafety + offset\n }))\n }\n\n function findLoopPoints(\n indexes: number[],\n offset: number,\n isEndEdge: boolean\n ): LoopPointType[] {\n const slideBounds = findSlideBounds(offset)\n\n return indexes.map((index) => {\n const initial = isEndEdge ? 0 : -contentSize\n const altered = isEndEdge ? contentSize : 0\n const boundEdge = isEndEdge ? 'end' : 'start'\n const loopPoint = slideBounds[index][boundEdge]\n\n return {\n index,\n loopPoint,\n slideLocation: Vector1D(-1),\n translate: Translate(axis, slides[index]),\n target: () => (location.get() > loopPoint ? initial : altered)\n }\n })\n }\n\n function startPoints(): LoopPointType[] {\n const gap = scrollSnaps[0]\n const indexes = slidesInGap(descItems, gap)\n return findLoopPoints(indexes, contentSize, false)\n }\n\n function endPoints(): LoopPointType[] {\n const gap = viewSize - scrollSnaps[0] - 1\n const indexes = slidesInGap(ascItems, gap)\n return findLoopPoints(indexes, -contentSize, true)\n }\n\n function canLoop(): boolean {\n return loopPoints.every(({ index }) => {\n const otherIndexes = ascItems.filter((i) => i !== index)\n return removeSlideSizes(otherIndexes, viewSize) <= 0.1\n })\n }\n\n function loop(): void {\n loopPoints.forEach((loopPoint) => {\n const { target, translate, slideLocation } = loopPoint\n const shiftLocation = target()\n if (shiftLocation === slideLocation.get()) return\n translate.to(shiftLocation)\n slideLocation.set(shiftLocation)\n })\n }\n\n function clear(): void {\n loopPoints.forEach((loopPoint) => loopPoint.translate.clear())\n }\n\n const self: SlideLooperType = {\n canLoop,\n clear,\n loop,\n loopPoints\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { isBoolean } from './utils'\n\ntype SlidesHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n mutations: MutationRecord[]\n) => boolean | void\n\nexport type SlidesHandlerOptionType = boolean | SlidesHandlerCallbackType\n\nexport type SlidesHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n}\n\nexport function SlidesHandler(\n container: HTMLElement,\n eventHandler: EventHandlerType,\n watchSlides: SlidesHandlerOptionType\n): SlidesHandlerType {\n let mutationObserver: MutationObserver\n let destroyed = false\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchSlides) return\n\n function defaultCallback(mutations: MutationRecord[]): void {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n emblaApi.reInit()\n eventHandler.emit('slidesChanged')\n break\n }\n }\n }\n\n mutationObserver = new MutationObserver((mutations) => {\n if (destroyed) return\n if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n defaultCallback(mutations)\n }\n })\n\n mutationObserver.observe(container, { childList: true })\n }\n\n function destroy(): void {\n if (mutationObserver) mutationObserver.disconnect()\n destroyed = true\n }\n\n const self: SlidesHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { EventHandlerType } from './EventHandler'\nimport { objectKeys } from './utils'\n\ntype IntersectionEntryMapType = {\n [key: number]: IntersectionObserverEntry\n}\n\nexport type SlidesInViewOptionsType = IntersectionObserverInit['threshold']\n\nexport type SlidesInViewType = {\n init: () => void\n destroy: () => void\n get: (inView?: boolean) => number[]\n}\n\nexport function SlidesInView(\n container: HTMLElement,\n slides: HTMLElement[],\n eventHandler: EventHandlerType,\n threshold: SlidesInViewOptionsType\n): SlidesInViewType {\n const intersectionEntryMap: IntersectionEntryMapType = {}\n let inViewCache: number[] | null = null\n let notInViewCache: number[] | null = null\n let intersectionObserver: IntersectionObserver\n let destroyed = false\n\n function init(): void {\n intersectionObserver = new IntersectionObserver(\n (entries) => {\n if (destroyed) return\n\n entries.forEach((entry) => {\n const index = slides.indexOf(<HTMLElement>entry.target)\n intersectionEntryMap[index] = entry\n })\n\n inViewCache = null\n notInViewCache = null\n eventHandler.emit('slidesInView')\n },\n {\n root: container.parentElement,\n threshold\n }\n )\n\n slides.forEach((slide) => intersectionObserver.observe(slide))\n }\n\n function destroy(): void {\n if (intersectionObserver) intersectionObserver.disconnect()\n destroyed = true\n }\n\n function createInViewList(inView: boolean): number[] {\n return objectKeys(intersectionEntryMap).reduce(\n (list: number[], slideIndex) => {\n const index = parseInt(slideIndex)\n const { isIntersecting } = intersectionEntryMap[index]\n const inViewMatch = inView && isIntersecting\n const notInViewMatch = !inView && !isIntersecting\n\n if (inViewMatch || notInViewMatch) list.push(index)\n return list\n },\n []\n )\n }\n\n function get(inView: boolean = true): number[] {\n if (inView && inViewCache) return inViewCache\n if (!inView && notInViewCache) return notInViewCache\n\n const slideIndexes = createInViewList(inView)\n\n if (inView) inViewCache = slideIndexes\n if (!inView) notInViewCache = slideIndexes\n\n return slideIndexes\n }\n\n const self: SlidesInViewType = {\n init,\n destroy,\n get\n }\n\n return self\n}\n","import { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport { arrayIsLastIndex, arrayLast, mathAbs, WindowType } from './utils'\n\nexport type SlideSizesType = {\n slideSizes: number[]\n slideSizesWithGaps: number[]\n startGap: number\n endGap: number\n}\n\nexport function SlideSizes(\n axis: AxisType,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n slides: HTMLElement[],\n readEdgeGap: boolean,\n ownerWindow: WindowType\n): SlideSizesType {\n const { measureSize, startEdge, endEdge } = axis\n const withEdgeGap = slideRects[0] && readEdgeGap\n const startGap = measureStartGap()\n const endGap = measureEndGap()\n const slideSizes = slideRects.map(measureSize)\n const slideSizesWithGaps = measureWithGaps()\n\n function measureStartGap(): number {\n if (!withEdgeGap) return 0\n const slideRect = slideRects[0]\n return mathAbs(containerRect[startEdge] - slideRect[startEdge])\n }\n\n function measureEndGap(): number {\n if (!withEdgeGap) return 0\n const style = ownerWindow.getComputedStyle(arrayLast(slides))\n return parseFloat(style.getPropertyValue(`margin-${endEdge}`))\n }\n\n function measureWithGaps(): number[] {\n return slideRects\n .map((rect, index, rects) => {\n const isFirst = !index\n const isLast = arrayIsLastIndex(rects, index)\n if (isFirst) return slideSizes[index] + startGap\n if (isLast) return slideSizes[index] + endGap\n return rects[index + 1][startEdge] - rect[startEdge]\n })\n .map(mathAbs)\n }\n\n const self: SlideSizesType = {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport {\n arrayKeys,\n arrayLast,\n arrayLastIndex,\n isNumber,\n mathAbs\n} from './utils'\n\nexport type SlidesToScrollOptionType = 'auto' | number\n\nexport type SlidesToScrollType = {\n groupSlides: <Type>(array: Type[]) => Type[][]\n}\n\nexport function SlidesToScroll(\n axis: AxisType,\n viewSize: number,\n slidesToScroll: SlidesToScrollOptionType,\n loop: boolean,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n startGap: number,\n endGap: number,\n pixelTolerance: number\n): SlidesToScrollType {\n const { startEdge, endEdge, direction } = axis\n const groupByNumber = isNumber(slidesToScroll)\n\n function byNumber<Type>(array: Type[], groupSize: number): Type[][] {\n return arrayKeys(array)\n .filter((i) => i % groupSize === 0)\n .map((i) => array.slice(i, i + groupSize))\n }\n\n function bySize<Type>(array: Type[]): Type[][] {\n if (!array.length) return []\n\n return arrayKeys(array)\n .reduce((groups: number[], rectB, index) => {\n const rectA = arrayLast(groups) || 0\n const isFirst = rectA === 0\n const isLast = rectB === arrayLastIndex(array)\n\n const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge]\n const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge]\n const gapA = !loop && isFirst ? direction(startGap) : 0\n const gapB = !loop && isLast ? direction(endGap) : 0\n const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA))\n\n if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB)\n if (isLast) groups.push(array.length)\n return groups\n }, [])\n .map((currentSize, index, groups) => {\n const previousSize = Math.max(groups[index - 1] || 0)\n return array.slice(previousSize, currentSize)\n })\n }\n\n function groupSlides<Type>(array: Type[]): Type[][] {\n return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array)\n }\n\n const self: SlidesToScrollType = {\n groupSlides\n }\n return self\n}\n","import { Alignment } from './Alignment'\nimport {\n Animations,\n AnimationsType,\n AnimationsUpdateType,\n AnimationsRenderType\n} from './Animations'\nimport { Axis, AxisType } from './Axis'\nimport { Counter, CounterType } from './Counter'\nimport { DragHandler, DragHandlerType } from './DragHandler'\nimport { DragTracker } from './DragTracker'\nimport { EventHandlerType } from './EventHandler'\nimport { EventStore, EventStoreType } from './EventStore'\nimport { LimitType } from './Limit'\nimport { NodeRectType, NodeRects } from './NodeRects'\nimport { OptionsType } from './Options'\nimport { PercentOfView, PercentOfViewType } from './PercentOfView'\nimport { ResizeHandler, ResizeHandlerType } from './ResizeHandler'\nimport { ScrollBody, ScrollBodyType } from './ScrollBody'\nimport { ScrollBounds, ScrollBoundsType } from './ScrollBounds'\nimport { ScrollContain } from './ScrollContain'\nimport { ScrollLimit } from './ScrollLimit'\nimport { ScrollLooper, ScrollLooperType } from './ScrollLooper'\nimport { ScrollProgress, ScrollProgressType } from './ScrollProgress'\nimport { ScrollSnaps } from './ScrollSnaps'\nimport { SlideRegistry, SlideRegistryType } from './SlideRegistry'\nimport { ScrollTarget, ScrollTargetType } from './ScrollTarget'\nimport { ScrollTo, ScrollToType } from './ScrollTo'\nimport { SlideFocus, SlideFocusType } from './SlideFocus'\nimport { SlideLooper, SlideLooperType } from './SlideLooper'\nimport { SlidesHandler, SlidesHandlerType } from './SlidesHandler'\nimport { SlidesInView, SlidesInViewType } from './SlidesInView'\nimport { SlideSizes } from './SlideSizes'\nimport { SlidesToScroll, SlidesToScrollType } from './SlidesToScroll'\nimport { Translate, TranslateType } from './Translate'\nimport { arrayKeys, arrayLast, arrayLastIndex, WindowType } from './utils'\nimport { Vector1D, Vector1DType } from './Vector1d'\n\nexport type EngineType = {\n ownerDocument: Document\n ownerWindow: WindowType\n eventHandler: EventHandlerType\n axis: AxisType\n animation: AnimationsType\n scrollBounds: ScrollBoundsType\n scrollLooper: ScrollLooperType\n scrollProgress: ScrollProgressType\n index: CounterType\n indexPrevious: CounterType\n limit: LimitType\n location: Vector1DType\n offsetLocation: Vector1DType\n previousLocation: Vector1DType\n options: OptionsType\n percentOfView: PercentOfViewType\n scrollBody: ScrollBodyType\n dragHandler: DragHandlerType\n eventStore: EventStoreType\n slideLooper: SlideLooperType\n slidesInView: SlidesInViewType\n slidesToScroll: SlidesToScrollType\n target: Vector1DType\n translate: TranslateType\n resizeHandler: ResizeHandlerType\n slidesHandler: SlidesHandlerType\n scrollTo: ScrollToType\n scrollTarget: ScrollTargetType\n scrollSnapList: number[]\n scrollSnaps: number[]\n slideIndexes: number[]\n slideFocus: SlideFocusType\n slideRegistry: SlideRegistryType['slideRegistry']\n containerRect: NodeRectType\n slideRects: NodeRectType[]\n}\n\nexport function Engine(\n root: HTMLElement,\n container: HTMLElement,\n slides: HTMLElement[],\n ownerDocument: Document,\n ownerWindow: WindowType,\n options: OptionsType,\n eventHandler: EventHandlerType\n): EngineType {\n // Options\n const {\n align,\n axis: scrollAxis,\n direction,\n startIndex,\n loop,\n duration,\n dragFree,\n dragThreshold,\n inViewThreshold,\n slidesToScroll: groupSlides,\n skipSnaps,\n containScroll,\n watchResize,\n watchSlides,\n watchDrag,\n watchFocus\n } = options\n\n // Measurements\n const pixelTolerance = 2\n const nodeRects = NodeRects()\n const containerRect = nodeRects.measure(container)\n const slideRects = slides.map(nodeRects.measure)\n const axis = Axis(scrollAxis, direction)\n const viewSize = axis.measureSize(containerRect)\n const percentOfView = PercentOfView(viewSize)\n const alignment = Alignment(align, viewSize)\n const containSnaps = !loop && !!containScroll\n const readEdgeGap = loop || !!containScroll\n const { slideSizes, slideSizesWithGaps, startGap, endGap } = SlideSizes(\n axis,\n containerRect,\n slideRects,\n slides,\n readEdgeGap,\n ownerWindow\n )\n const slidesToScroll = SlidesToScroll(\n axis,\n viewSize,\n groupSlides,\n loop,\n containerRect,\n slideRects,\n startGap,\n endGap,\n pixelTolerance\n )\n const { snaps, snapsAligned } = ScrollSnaps(\n axis,\n alignment,\n containerRect,\n slideRects,\n slidesToScroll\n )\n const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps)\n const { snapsContained, scrollContainLimit } = ScrollContain(\n viewSize,\n contentSize,\n snapsAligned,\n containScroll,\n pixelTolerance\n )\n const scrollSnaps = containSnaps ? snapsContained : snapsAligned\n const { limit } = ScrollLimit(contentSize, scrollSnaps, loop)\n\n // Indexes\n const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop)\n const indexPrevious = index.clone()\n const slideIndexes = arrayKeys(slides)\n\n // Animation\n const update: AnimationsUpdateType = ({\n dragHandler,\n scrollBody,\n scrollBounds,\n options: { loop }\n }) => {\n if (!loop) scrollBounds.constrain(dragHandler.pointerDown())\n scrollBody.seek()\n }\n\n const render: AnimationsRenderType = (\n {\n scrollBody,\n translate,\n location,\n offsetLocation,\n previousLocation,\n scrollLooper,\n slideLooper,\n dragHandler,\n animation,\n eventHandler,\n scrollBounds,\n options: { loop }\n },\n alpha\n ) => {\n const shouldSettle = scrollBody.settled()\n const withinBounds = !scrollBounds.shouldConstrain()\n const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds\n const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown()\n\n if (hasSettledAndIdle) animation.stop()\n\n const interpolatedLocation =\n location.get() * alpha + previousLocation.get() * (1 - alpha)\n\n offsetLocation.set(interpolatedLocation)\n\n if (loop) {\n scrollLooper.loop(scrollBody.direction())\n slideLooper.loop()\n }\n\n translate.to(offsetLocation.get())\n\n if (hasSettledAndIdle) eventHandler.emit('settle')\n if (!hasSettled) eventHandler.emit('scroll')\n }\n\n const animation = Animations(\n ownerDocument,\n ownerWindow,\n () => update(engine),\n (alpha: number) => render(engine, alpha)\n )\n\n // Shared\n const friction = 0.68\n const startLocation = scrollSnaps[index.get()]\n const location = Vector1D(startLocation)\n const previousLocation = Vector1D(startLocation)\n const offsetLocation = Vector1D(startLocation)\n const target = Vector1D(startLocation)\n const scrollBody = ScrollBody(\n location,\n offsetLocation,\n previousLocation,\n target,\n duration,\n friction\n )\n const scrollTarget = ScrollTarget(\n loop,\n scrollSnaps,\n contentSize,\n limit,\n target\n )\n const scrollTo = ScrollTo(\n animation,\n index,\n indexPrevious,\n scrollBody,\n scrollTarget,\n target,\n eventHandler\n )\n const scrollProgress = ScrollProgress(limit)\n const eventStore = EventStore()\n const slidesInView = SlidesInView(\n container,\n slides,\n eventHandler,\n inViewThreshold\n )\n const { slideRegistry } = SlideRegistry(\n containSnaps,\n containScroll,\n scrollSnaps,\n scrollContainLimit,\n slidesToScroll,\n slideIndexes\n )\n const slideFocus = SlideFocus(\n root,\n slides,\n slideRegistry,\n scrollTo,\n scrollBody,\n eventStore,\n eventHandler,\n watchFocus\n )\n\n // Engine\n const engine: EngineType = {\n ownerDocument,\n ownerWindow,\n eventHandler,\n containerRect,\n slideRects,\n animation,\n axis,\n dragHandler: DragHandler(\n axis,\n root,\n ownerDocument,\n ownerWindow,\n target,\n DragTracker(axis, ownerWindow),\n location,\n animation,\n scrollTo,\n scrollBody,\n scrollTarget,\n index,\n eventHandler,\n percentOfView,\n dragFree,\n dragThreshold,\n skipSnaps,\n friction,\n watchDrag\n ),\n eventStore,\n percentOfView,\n index,\n indexPrevious,\n limit,\n location,\n offsetLocation,\n previousLocation,\n options,\n resizeHandler: ResizeHandler(\n container,\n eventHandler,\n ownerWindow,\n slides,\n axis,\n watchResize,\n nodeRects\n ),\n scrollBody,\n scrollBounds: ScrollBounds(\n limit,\n offsetLocation,\n target,\n scrollBody,\n percentOfView\n ),\n scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [\n location,\n offsetLocation,\n previousLocation,\n target\n ]),\n scrollProgress,\n scrollSnapList: scrollSnaps.map(scrollProgress.get),\n scrollSnaps,\n scrollTarget,\n scrollTo,\n slideLooper: SlideLooper(\n axis,\n viewSize,\n contentSize,\n slideSizes,\n slideSizesWithGaps,\n snaps,\n scrollSnaps,\n offsetLocation,\n slides\n ),\n slideFocus,\n slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n slidesInView,\n slideIndexes,\n slideRegistry,\n slidesToScroll,\n target,\n translate: Translate(axis, container)\n }\n\n return engine\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\n\ntype CallbackType = (emblaApi: EmblaCarouselType, evt: EmblaEventType) => void\ntype ListenersType = Partial<{ [key in EmblaEventType]: CallbackType[] }>\n\nexport type EmblaEventType = EmblaEventListType[keyof EmblaEventListType]\n\nexport interface EmblaEventListType {\n init: 'init'\n pointerDown: 'pointerDown'\n pointerUp: 'pointerUp'\n slidesChanged: 'slidesChanged'\n slidesInView: 'slidesInView'\n scroll: 'scroll'\n select: 'select'\n settle: 'settle'\n destroy: 'destroy'\n reInit: 'reInit'\n resize: 'resize'\n slideFocusStart: 'slideFocusStart'\n slideFocus: 'slideFocus'\n}\n\nexport type EventHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n emit: (evt: EmblaEventType) => EventHandlerType\n on: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType\n off: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType\n clear: () => void\n}\n\nexport function EventHandler(): EventHandlerType {\n let listeners: ListenersType = {}\n let api: EmblaCarouselType\n\n function init(emblaApi: EmblaCarouselType): void {\n api = emblaApi\n }\n\n function getListeners(evt: EmblaEventType): CallbackType[] {\n return listeners[evt] || []\n }\n\n function emit(evt: EmblaEventType): EventHandlerType {\n getListeners(evt).forEach((e) => e(api, evt))\n return self\n }\n\n function on(evt: EmblaEventType, cb: CallbackType): EventHandlerType {\n listeners[evt] = getListeners(evt).concat([cb])\n return self\n }\n\n function off(evt: EmblaEventType, cb: CallbackType): EventHandlerType {\n listeners[evt] = getListeners(evt).filter((e) => e !== cb)\n return self\n }\n\n function clear(): void {\n listeners = {}\n }\n\n const self: EventHandlerType = {\n init,\n emit,\n off,\n on,\n clear\n }\n return self\n}\n","import { AlignmentOptionType } from './Alignment'\nimport { AxisDirectionOptionType, AxisOptionType } from './Axis'\nimport { SlidesToScrollOptionType } from './SlidesToScroll'\nimport { ScrollContainOptionType } from './ScrollContain'\nimport { DragHandlerOptionType } from './DragHandler'\nimport { ResizeHandlerOptionType } from './ResizeHandler'\nimport { SlidesHandlerOptionType } from './SlidesHandler'\nimport { SlidesInViewOptionsType } from './SlidesInView'\nimport { FocusHandlerOptionType } from './SlideFocus'\n\nexport type LooseOptionsType = {\n [key: string]: unknown\n}\n\nexport type CreateOptionsType<Type extends LooseOptionsType> = Type & {\n active: boolean\n breakpoints: {\n [key: string]: Omit<Partial<CreateOptionsType<Type>>, 'breakpoints'>\n }\n}\n\nexport type OptionsType = CreateOptionsType<{\n align: AlignmentOptionType\n axis: AxisOptionType\n container: string | HTMLElement | null\n slides: string | HTMLElement[] | NodeListOf<HTMLElement> | null\n containScroll: ScrollContainOptionType\n direction: AxisDirectionOptionType\n slidesToScroll: SlidesToScrollOptionType\n dragFree: boolean\n dragThreshold: number\n inViewThreshold: SlidesInViewOptionsType\n loop: boolean\n skipSnaps: boolean\n duration: number\n startIndex: number\n watchDrag: DragHandlerOptionType\n watchResize: ResizeHandlerOptionType\n watchSlides: SlidesHandlerOptionType\n watchFocus: FocusHandlerOptionType\n}>\n\nexport const defaultOptions: OptionsType = {\n align: 'center',\n axis: 'x',\n container: null,\n slides: null,\n containScroll: 'trimSnaps',\n direction: 'ltr',\n slidesToScroll: 1,\n inViewThreshold: 0,\n breakpoints: {},\n dragFree: false,\n dragThreshold: 10,\n loop: false,\n skipSnaps: false,\n duration: 25,\n startIndex: 0,\n active: true,\n watchDrag: true,\n watchResize: true,\n watchSlides: true,\n watchFocus: true\n}\n\nexport type EmblaOptionsType = Partial<OptionsType>\n","import { LooseOptionsType, CreateOptionsType } from './Options'\nimport { objectKeys, objectsMergeDeep, WindowType } from './utils'\n\ntype OptionsType = Partial<CreateOptionsType<LooseOptionsType>>\n\nexport type OptionsHandlerType = {\n mergeOptions: <TypeA extends OptionsType, TypeB extends OptionsType>(\n optionsA: TypeA,\n optionsB?: TypeB\n ) => TypeA\n optionsAtMedia: <Type extends OptionsType>(options: Type) => Type\n optionsMediaQueries: (optionsList: OptionsType[]) => MediaQueryList[]\n}\n\nexport function OptionsHandler(ownerWindow: WindowType): OptionsHandlerType {\n function mergeOptions<TypeA extends OptionsType, TypeB extends OptionsType>(\n optionsA: TypeA,\n optionsB?: TypeB\n ): TypeA {\n return <TypeA>objectsMergeDeep(optionsA, optionsB || {})\n }\n\n function optionsAtMedia<Type extends OptionsType>(options: Type): Type {\n const optionsAtMedia = options.breakpoints || {}\n const matchedMediaOptions = objectKeys(optionsAtMedia)\n .filter((media) => ownerWindow.matchMedia(media).matches)\n .map((media) => optionsAtMedia[media])\n .reduce((a, mediaOption) => mergeOptions(a, mediaOption), {})\n\n return mergeOptions(options, matchedMediaOptions)\n }\n\n function optionsMediaQueries(optionsList: OptionsType[]): MediaQueryList[] {\n return optionsList\n .map((options) => objectKeys(options.breakpoints || {}))\n .reduce((acc, mediaQueries) => acc.concat(mediaQueries), [])\n .map(ownerWindow.matchMedia)\n }\n\n const self: OptionsHandlerType = {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { OptionsHandlerType } from './OptionsHandler'\nimport { EmblaPluginsType, EmblaPluginType } from './Plugins'\n\nexport type PluginsHandlerType = {\n init: (\n emblaApi: EmblaCarouselType,\n plugins: EmblaPluginType[]\n ) => EmblaPluginsType\n destroy: () => void\n}\n\nexport function PluginsHandler(\n optionsHandler: OptionsHandlerType\n): PluginsHandlerType {\n let activePlugins: EmblaPluginType[] = []\n\n function init(\n emblaApi: EmblaCarouselType,\n plugins: EmblaPluginType[]\n ): EmblaPluginsType {\n activePlugins = plugins.filter(\n ({ options }) => optionsHandler.optionsAtMedia(options).active !== false\n )\n activePlugins.forEach((plugin) => plugin.init(emblaApi, optionsHandler))\n\n return plugins.reduce(\n (map, plugin) => Object.assign(map, { [plugin.name]: plugin }),\n {}\n )\n }\n\n function destroy(): void {\n activePlugins = activePlugins.filter((plugin) => plugin.destroy())\n }\n\n const self: PluginsHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { Engine, EngineType } from './Engine'\nimport { EventStore } from './EventStore'\nimport { EventHandler, EventHandlerType } from './EventHandler'\nimport { defaultOptions, EmblaOptionsType, OptionsType } from './Options'\nimport { OptionsHandler } from './OptionsHandler'\nimport { PluginsHandler } from './PluginsHandler'\nimport { EmblaPluginsType, EmblaPluginType } from './Plugins'\nimport { isString, WindowType } from './utils'\n\nexport type EmblaCarouselType = {\n canScrollNext: () => boolean\n canScrollPrev: () => boolean\n containerNode: () => HTMLElement\n internalEngine: () => EngineType\n destroy: () => void\n off: EventHandlerType['off']\n on: EventHandlerType['on']\n emit: EventHandlerType['emit']\n plugins: () => EmblaPluginsType\n previousScrollSnap: () => number\n reInit: (options?: EmblaOptionsType, plugins?: EmblaPluginType[]) => void\n rootNode: () => HTMLElement\n scrollNext: (jump?: boolean) => void\n scrollPrev: (jump?: boolean) => void\n scrollProgress: () => number\n scrollSnapList: () => number[]\n scrollTo: (index: number, jump?: boolean) => void\n selectedScrollSnap: () => number\n slideNodes: () => HTMLElement[]\n slidesInView: () => number[]\n slidesNotInView: () => number[]\n}\n\nfunction EmblaCarousel(\n root: HTMLElement,\n userOptions?: EmblaOptionsType,\n userPlugins?: EmblaPluginType[]\n): EmblaCarouselType {\n const ownerDocument = root.ownerDocument\n const ownerWindow = <WindowType>ownerDocument.defaultView\n const optionsHandler = OptionsHandler(ownerWindow)\n const pluginsHandler = PluginsHandler(optionsHandler)\n const mediaHandlers = EventStore()\n const eventHandler = EventHandler()\n const { mergeOptions, optionsAtMedia, optionsMediaQueries } = optionsHandler\n const { on, off, emit } = eventHandler\n const reInit = reActivate\n\n let destroyed = false\n let engine: EngineType\n let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions)\n let options = mergeOptions(optionsBase)\n let pluginList: EmblaPluginType[] = []\n let pluginApis: EmblaPluginsType\n\n let container: HTMLElement\n let slides: HTMLElement[]\n\n function storeElements(): void {\n const { container: userContainer, slides: userSlides } = options\n\n const customContainer = isString(userContainer)\n ? root.querySelector(userContainer)\n : userContainer\n container = <HTMLElement>(customContainer || root.children[0])\n\n const customSlides = isString(userSlides)\n ? container.querySelectorAll(userSlides)\n : userSlides\n slides = <HTMLElement[]>[].slice.call(customSlides || container.children)\n }\n\n function createEngine(options: OptionsType): EngineType {\n const engine = Engine(\n root,\n container,\n slides,\n ownerDocument,\n ownerWindow,\n options,\n eventHandler\n )\n\n if (options.loop && !engine.slideLooper.canLoop()) {\n const optionsWithoutLoop = Object.assign({}, options, { loop: false })\n return createEngine(optionsWithoutLoop)\n }\n return engine\n }\n\n function activate(\n withOptions?: EmblaOptionsType,\n withPlugins?: EmblaPluginType[]\n ): void {\n if (destroyed) return\n\n optionsBase = mergeOptions(optionsBase, withOptions)\n options = optionsAtMedia(optionsBase)\n pluginList = withPlugins || pluginList\n\n storeElements()\n\n engine = createEngine(options)\n\n optionsMediaQueries([\n optionsBase,\n ...pluginList.map(({ options }) => options)\n ]).forEach((query) => mediaHandlers.add(query, 'change', reActivate))\n\n if (!options.active) return\n\n engine.translate.to(engine.location.get())\n engine.animation.init()\n engine.slidesInView.init()\n engine.slideFocus.init(self)\n engine.eventHandler.init(self)\n engine.resizeHandler.init(self)\n engine.slidesHandler.init(self)\n\n if (engine.options.loop) engine.slideLooper.loop()\n if (container.offsetParent && slides.length) engine.dragHandler.init(self)\n\n pluginApis = pluginsHandler.init(self, pluginList)\n }\n\n function reActivate(\n withOptions?: EmblaOptionsType,\n withPlugins?: EmblaPluginType[]\n ): void {\n const startIndex = selectedScrollSnap()\n deActivate()\n activate(mergeOptions({ startIndex }, withOptions), withPlugins)\n eventHandler.emit('reInit')\n }\n\n function deActivate(): void {\n engine.dragHandler.destroy()\n engine.eventStore.clear()\n engine.translate.clear()\n engine.slideLooper.clear()\n engine.resizeHandler.destroy()\n engine.slidesHandler.destroy()\n engine.slidesInView.destroy()\n engine.animation.destroy()\n pluginsHandler.destroy()\n mediaHandlers.clear()\n }\n\n function destroy(): void {\n if (destroyed) return\n destroyed = true\n mediaHandlers.clear()\n deActivate()\n eventHandler.emit('destroy')\n eventHandler.clear()\n }\n\n function scrollTo(index: number, jump?: boolean, direction?: number): void {\n if (!options.active || destroyed) return\n engine.scrollBody\n .useBaseFriction()\n .useDuration(jump === true ? 0 : options.duration)\n engine.scrollTo.index(index, direction || 0)\n }\n\n function scrollNext(jump?: boolean): void {\n const next = engine.index.add(1).get()\n scrollTo(next, jump, -1)\n }\n\n function scrollPrev(jump?: boolean): void {\n const prev = engine.index.add(-1).get()\n scrollTo(prev, jump, 1)\n }\n\n function canScrollNext(): boolean {\n const next = engine.index.add(1).get()\n return next !== selectedScrollSnap()\n }\n\n function canScrollPrev(): boolean {\n const prev = engine.index.add(-1).get()\n return prev !== selectedScrollSnap()\n }\n\n function scrollSnapList(): number[] {\n return engine.scrollSnapList\n }\n\n function scrollProgress(): number {\n return engine.scrollProgress.get(engine.offsetLocation.get())\n }\n\n function selectedScrollSnap(): number {\n return engine.index.get()\n }\n\n function previousScrollSnap(): number {\n return engine.indexPrevious.get()\n }\n\n function slidesInView(): number[] {\n return engine.slidesInView.get()\n }\n\n function slidesNotInView(): number[] {\n return engine.slidesInView.get(false)\n }\n\n function plugins(): EmblaPluginsType {\n return pluginApis\n }\n\n function internalEngine(): EngineType {\n return engine\n }\n\n function rootNode(): HTMLElement {\n return root\n }\n\n function containerNode(): HTMLElement {\n return container\n }\n\n function slideNodes(): HTMLElement[] {\n return slides\n }\n\n const self: EmblaCarouselType = {\n canScrollNext,\n canScrollPrev,\n containerNode,\n internalEngine,\n destroy,\n off,\n on,\n emit,\n plugins,\n previousScrollSnap,\n reInit,\n rootNode,\n scrollNext,\n scrollPrev,\n scrollProgress,\n scrollSnapList,\n scrollTo,\n selectedScrollSnap,\n slideNodes,\n slidesInView,\n slidesNotInView\n }\n\n activate(userOptions, userPlugins)\n setTimeout(() => eventHandler.emit('init'), 0)\n return self\n}\n\ndeclare namespace EmblaCarousel {\n let globalOptions: EmblaOptionsType | undefined\n}\n\nEmblaCarousel.globalOptions = undefined\n\nexport default EmblaCarousel\n","import { useRef, useEffect, useState, useCallback } from 'react'\nimport {\n areOptionsEqual,\n arePluginsEqual,\n canUseDOM\n} from 'embla-carousel-reactive-utils'\nimport EmblaCarousel, {\n EmblaCarouselType,\n EmblaOptionsType,\n EmblaPluginType\n} from 'embla-carousel'\n\nexport type EmblaViewportRefType = <ViewportElement extends HTMLElement>(\n instance: ViewportElement | null\n) => void\n\nexport type UseEmblaCarouselType = [\n EmblaViewportRefType,\n EmblaCarouselType | undefined\n]\n\nfunction useEmblaCarousel(\n options: EmblaOptionsType = {},\n plugins: EmblaPluginType[] = []\n): UseEmblaCarouselType {\n const storedOptions = useRef(options)\n const storedPlugins = useRef(plugins)\n const [emblaApi, setEmblaApi] = useState<EmblaCarouselType>()\n const [viewport, setViewport] = useState<HTMLElement>()\n\n const reInit = useCallback(() => {\n if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current)\n }, [emblaApi])\n\n useEffect(() => {\n if (areOptionsEqual(storedOptions.current, options)) return\n storedOptions.current = options\n reInit()\n }, [options, reInit])\n\n useEffect(() => {\n if (arePluginsEqual(storedPlugins.current, plugins)) return\n storedPlugins.current = plugins\n reInit()\n }, [plugins, reInit])\n\n useEffect(() => {\n if (canUseDOM() && viewport) {\n EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions\n const newEmblaApi = EmblaCarousel(\n viewport,\n storedOptions.current,\n storedPlugins.current\n )\n setEmblaApi(newEmblaApi)\n return () => newEmblaApi.destroy()\n } else {\n setEmblaApi(undefined)\n }\n }, [viewport, setEmblaApi])\n\n return [<EmblaViewportRefType>setViewport, emblaApi]\n}\n\ndeclare namespace useEmblaCarousel {\n let globalOptions: EmblaOptionsType | undefined\n}\n\nuseEmblaCarousel.globalOptions = undefined\n\nexport default useEmblaCarousel\n","import * as React from 'react';\n\nfunction usePrevious<T>(value: T) {\n const ref = React.useRef({ value, previous: value });\n\n // We compare values before making an update to ensure that\n // a change has been made. This ensures the previous value is\n // persisted correctly between renders.\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}\n\nexport { usePrevious };\n","import * 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 { 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 { Primitive } from '@radix-ui/react-primitive';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Switch\n * -----------------------------------------------------------------------------------------------*/\n\nconst SWITCH_NAME = 'Switch';\n\ntype ScopedProps<P> = P & { __scopeSwitch?: Scope };\nconst [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\n\ntype SwitchContextValue = { checked: boolean; disabled?: boolean };\nconst [SwitchProvider, useSwitchContext] = createSwitchContext<SwitchContextValue>(SWITCH_NAME);\n\ntype SwitchElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface SwitchProps extends PrimitiveButtonProps {\n checked?: boolean;\n defaultChecked?: boolean;\n required?: boolean;\n onCheckedChange?(checked: boolean): void;\n}\n\nconst Switch = React.forwardRef<SwitchElement, SwitchProps>(\n (props: ScopedProps<SwitchProps>, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = 'on',\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState<HTMLButtonElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n // We set this to true by default so that events bubble to forms without JS (SSR)\n const isFormControl = button ? form || !!button.closest('form') : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME,\n });\n\n return (\n <SwitchProvider scope={__scopeSwitch} checked={checked} disabled={disabled}>\n <Primitive.button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-required={required}\n data-state={getState(checked)}\n data-disabled={disabled ? '' : undefined}\n disabled={disabled}\n value={value}\n {...switchProps}\n ref={composedRefs}\n onClick={composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n // if switch is in a form, stop propagation from the button so that we only propagate\n // one click event (from the input). We propagate changes from an input so that native\n // form validation works and form events reflect switch updates.\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })}\n />\n {isFormControl && (\n <SwitchBubbleInput\n control={button}\n bubbles={!hasConsumerStoppedPropagationRef.current}\n name={name}\n value={value}\n checked={checked}\n required={required}\n disabled={disabled}\n form={form}\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 style={{ transform: 'translateX(-100%)' }}\n />\n )}\n </SwitchProvider>\n );\n }\n);\n\nSwitch.displayName = SWITCH_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SwitchThumb\n * -----------------------------------------------------------------------------------------------*/\n\nconst THUMB_NAME = 'SwitchThumb';\n\ntype SwitchThumbElement = React.ComponentRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface SwitchThumbProps extends PrimitiveSpanProps {}\n\nconst SwitchThumb = React.forwardRef<SwitchThumbElement, SwitchThumbProps>(\n (props: ScopedProps<SwitchThumbProps>, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return (\n <Primitive.span\n data-state={getState(context.checked)}\n data-disabled={context.disabled ? '' : undefined}\n {...thumbProps}\n ref={forwardedRef}\n />\n );\n }\n);\n\nSwitchThumb.displayName = THUMB_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SwitchBubbleInput\n * -----------------------------------------------------------------------------------------------*/\n\nconst BUBBLE_INPUT_NAME = 'SwitchBubbleInput';\n\ntype InputProps = React.ComponentPropsWithoutRef<typeof Primitive.input>;\ninterface SwitchBubbleInputProps extends Omit<InputProps, 'checked'> {\n checked: boolean;\n control: HTMLElement | null;\n bubbles: boolean;\n}\n\nconst SwitchBubbleInput = React.forwardRef<HTMLInputElement, SwitchBubbleInputProps>(\n (\n {\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }: ScopedProps<SwitchBubbleInputProps>,\n forwardedRef\n ) => {\n const ref = React.useRef<HTMLInputElement>(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n\n // Bubble checked change to parents (e.g form change event)\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n 'checked'\n ) as PropertyDescriptor;\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event('click', { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n\n return (\n <input\n type=\"checkbox\"\n aria-hidden\n defaultChecked={checked}\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 }}\n />\n );\n }\n);\n\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(checked: boolean) {\n return checked ? 'checked' : 'unchecked';\n}\n\nconst Root = Switch;\nconst Thumb = SwitchThumb;\n\nexport {\n createSwitchScope,\n //\n Switch,\n SwitchThumb,\n //\n Root,\n Thumb,\n};\nexport type { SwitchProps, SwitchThumbProps };\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { Primitive } from '@radix-ui/react-primitive';\n\n/* -------------------------------------------------------------------------------------------------\n * Toggle\n * -----------------------------------------------------------------------------------------------*/\n\nconst NAME = 'Toggle';\n\ntype ToggleElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface ToggleProps extends PrimitiveButtonProps {\n /**\n * The controlled state of the toggle.\n */\n pressed?: boolean;\n /**\n * The state of the toggle when initially rendered. Use `defaultPressed`\n * if you do not need to control the state of the toggle.\n * @defaultValue false\n */\n defaultPressed?: boolean;\n /**\n * The callback that fires when the state of the toggle changes.\n */\n onPressedChange?(pressed: boolean): void;\n}\n\nconst Toggle = React.forwardRef<ToggleElement, ToggleProps>((props, forwardedRef) => {\n const { pressed: pressedProp, defaultPressed, onPressedChange, ...buttonProps } = props;\n\n const [pressed, setPressed] = useControllableState({\n prop: pressedProp,\n onChange: onPressedChange,\n defaultProp: defaultPressed ?? false,\n caller: NAME,\n });\n\n return (\n <Primitive.button\n type=\"button\"\n aria-pressed={pressed}\n data-state={pressed ? 'on' : 'off'}\n data-disabled={props.disabled ? '' : undefined}\n {...buttonProps}\n ref={forwardedRef}\n onClick={composeEventHandlers(props.onClick, () => {\n if (!props.disabled) {\n setPressed(!pressed);\n }\n })}\n />\n );\n});\n\nToggle.displayName = NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\nconst Root = Toggle;\n\nexport {\n Toggle,\n //\n Root,\n};\nexport type { ToggleProps };\n","import React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { createCollection } from '@radix-ui/react-collection';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport * as CollapsiblePrimitive from '@radix-ui/react-collapsible';\nimport { createCollapsibleScope } from '@radix-ui/react-collapsible';\nimport { useId } from '@radix-ui/react-id';\n\nimport type { Scope } from '@radix-ui/react-context';\nimport { useDirection } from '@radix-ui/react-direction';\n\ntype Direction = 'ltr' | 'rtl';\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion\n * -----------------------------------------------------------------------------------------------*/\n\nconst ACCORDION_NAME = 'Accordion';\nconst ACCORDION_KEYS = ['Home', 'End', 'ArrowDown', 'ArrowUp', 'ArrowLeft', 'ArrowRight'];\n\nconst [Collection, useCollection, createCollectionScope] =\n createCollection<AccordionTriggerElement>(ACCORDION_NAME);\n\ntype ScopedProps<P> = P & { __scopeAccordion?: Scope };\nconst [createAccordionContext, createAccordionScope] = createContextScope(ACCORDION_NAME, [\n createCollectionScope,\n createCollapsibleScope,\n]);\nconst useCollapsibleScope = createCollapsibleScope();\n\ntype AccordionElement = AccordionImplMultipleElement | AccordionImplSingleElement;\ninterface AccordionSingleProps extends AccordionImplSingleProps {\n type: 'single';\n}\ninterface AccordionMultipleProps extends AccordionImplMultipleProps {\n type: 'multiple';\n}\n\nconst Accordion = React.forwardRef<AccordionElement, AccordionSingleProps | AccordionMultipleProps>(\n (props: ScopedProps<AccordionSingleProps | AccordionMultipleProps>, forwardedRef) => {\n const { type, ...accordionProps } = props;\n const singleProps = accordionProps as AccordionImplSingleProps;\n const multipleProps = accordionProps as AccordionImplMultipleProps;\n return (\n <Collection.Provider scope={props.__scopeAccordion}>\n {type === 'multiple' ? (\n <AccordionImplMultiple {...multipleProps} ref={forwardedRef} />\n ) : (\n <AccordionImplSingle {...singleProps} ref={forwardedRef} />\n )}\n </Collection.Provider>\n );\n }\n);\n\nAccordion.displayName = ACCORDION_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype AccordionValueContextValue = {\n value: string[];\n onItemOpen(value: string): void;\n onItemClose(value: string): void;\n};\n\nconst [AccordionValueProvider, useAccordionValueContext] =\n createAccordionContext<AccordionValueContextValue>(ACCORDION_NAME);\n\nconst [AccordionCollapsibleProvider, useAccordionCollapsibleContext] = createAccordionContext(\n ACCORDION_NAME,\n { collapsible: false }\n);\n\ntype AccordionImplSingleElement = AccordionImplElement;\ninterface AccordionImplSingleProps extends AccordionImplProps {\n /**\n * The controlled stateful value of the accordion item whose content is expanded.\n */\n value?: string;\n /**\n * The value of the item whose content is expanded when the accordion is initially rendered. Use\n * `defaultValue` if you do not need to control the state of an accordion.\n */\n defaultValue?: string;\n /**\n * The callback that fires when the state of the accordion changes.\n */\n onValueChange?(value: string): void;\n /**\n * Whether an accordion item can be collapsed after it has been opened.\n * @default false\n */\n collapsible?: boolean;\n}\n\nconst AccordionImplSingle = React.forwardRef<AccordionImplSingleElement, AccordionImplSingleProps>(\n (props: ScopedProps<AccordionImplSingleProps>, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {},\n collapsible = false,\n ...accordionSingleProps\n } = props;\n\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? '',\n onChange: onValueChange,\n caller: ACCORDION_NAME,\n });\n\n return (\n <AccordionValueProvider\n scope={props.__scopeAccordion}\n value={React.useMemo(() => (value ? [value] : []), [value])}\n onItemOpen={setValue}\n onItemClose={React.useCallback(() => collapsible && setValue(''), [collapsible, setValue])}\n >\n <AccordionCollapsibleProvider scope={props.__scopeAccordion} collapsible={collapsible}>\n <AccordionImpl {...accordionSingleProps} ref={forwardedRef} />\n </AccordionCollapsibleProvider>\n </AccordionValueProvider>\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype AccordionImplMultipleElement = AccordionImplElement;\ninterface AccordionImplMultipleProps extends AccordionImplProps {\n /**\n * The controlled stateful value of the accordion items whose contents are expanded.\n */\n value?: string[];\n /**\n * The value of the items whose contents are expanded when the accordion is initially rendered. Use\n * `defaultValue` if you do not need to control the state of an accordion.\n */\n defaultValue?: string[];\n /**\n * The callback that fires when the state of the accordion changes.\n */\n onValueChange?(value: string[]): void;\n}\n\nconst AccordionImplMultiple = React.forwardRef<\n AccordionImplMultipleElement,\n AccordionImplMultipleProps\n>((props: ScopedProps<AccordionImplMultipleProps>, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {},\n ...accordionMultipleProps\n } = props;\n\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? [],\n onChange: onValueChange,\n caller: ACCORDION_NAME,\n });\n\n const handleItemOpen = React.useCallback(\n (itemValue: string) => setValue((prevValue = []) => [...prevValue, itemValue]),\n [setValue]\n );\n\n const handleItemClose = React.useCallback(\n (itemValue: string) =>\n setValue((prevValue = []) => prevValue.filter((value) => value !== itemValue)),\n [setValue]\n );\n\n return (\n <AccordionValueProvider\n scope={props.__scopeAccordion}\n value={value}\n onItemOpen={handleItemOpen}\n onItemClose={handleItemClose}\n >\n <AccordionCollapsibleProvider scope={props.__scopeAccordion} collapsible={true}>\n <AccordionImpl {...accordionMultipleProps} ref={forwardedRef} />\n </AccordionCollapsibleProvider>\n </AccordionValueProvider>\n );\n});\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype AccordionImplContextValue = {\n disabled?: boolean;\n direction: AccordionImplProps['dir'];\n orientation: AccordionImplProps['orientation'];\n};\n\nconst [AccordionImplProvider, useAccordionContext] =\n createAccordionContext<AccordionImplContextValue>(ACCORDION_NAME);\n\ntype AccordionImplElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface AccordionImplProps extends PrimitiveDivProps {\n /**\n * Whether or not an accordion is disabled from user interaction.\n *\n * @defaultValue false\n */\n disabled?: boolean;\n /**\n * The layout in which the Accordion operates.\n * @default vertical\n */\n orientation?: React.AriaAttributes['aria-orientation'];\n /**\n * The language read direction.\n */\n dir?: Direction;\n}\n\nconst AccordionImpl = React.forwardRef<AccordionImplElement, AccordionImplProps>(\n (props: ScopedProps<AccordionImplProps>, forwardedRef) => {\n const { __scopeAccordion, disabled, dir, orientation = 'vertical', ...accordionProps } = props;\n const accordionRef = React.useRef<AccordionImplElement>(null);\n const composedRefs = useComposedRefs(accordionRef, forwardedRef);\n const getItems = useCollection(__scopeAccordion);\n const direction = useDirection(dir);\n const isDirectionLTR = direction === 'ltr';\n\n const handleKeyDown = composeEventHandlers(props.onKeyDown, (event) => {\n if (!ACCORDION_KEYS.includes(event.key)) return;\n const target = event.target as HTMLElement;\n const triggerCollection = getItems().filter((item) => !item.ref.current?.disabled);\n const triggerIndex = triggerCollection.findIndex((item) => item.ref.current === target);\n const triggerCount = triggerCollection.length;\n\n if (triggerIndex === -1) return;\n\n // Prevents page scroll while user is navigating\n event.preventDefault();\n\n let nextIndex = triggerIndex;\n const homeIndex = 0;\n const endIndex = triggerCount - 1;\n\n const moveNext = () => {\n nextIndex = triggerIndex + 1;\n if (nextIndex > endIndex) {\n nextIndex = homeIndex;\n }\n };\n\n const movePrev = () => {\n nextIndex = triggerIndex - 1;\n if (nextIndex < homeIndex) {\n nextIndex = endIndex;\n }\n };\n\n switch (event.key) {\n case 'Home':\n nextIndex = homeIndex;\n break;\n case 'End':\n nextIndex = endIndex;\n break;\n case 'ArrowRight':\n if (orientation === 'horizontal') {\n if (isDirectionLTR) {\n moveNext();\n } else {\n movePrev();\n }\n }\n break;\n case 'ArrowDown':\n if (orientation === 'vertical') {\n moveNext();\n }\n break;\n case 'ArrowLeft':\n if (orientation === 'horizontal') {\n if (isDirectionLTR) {\n movePrev();\n } else {\n moveNext();\n }\n }\n break;\n case 'ArrowUp':\n if (orientation === 'vertical') {\n movePrev();\n }\n break;\n }\n\n const clampedIndex = nextIndex % triggerCount;\n triggerCollection[clampedIndex]!.ref.current?.focus();\n });\n\n return (\n <AccordionImplProvider\n scope={__scopeAccordion}\n disabled={disabled}\n direction={dir}\n orientation={orientation}\n >\n <Collection.Slot scope={__scopeAccordion}>\n <Primitive.div\n {...accordionProps}\n data-orientation={orientation}\n ref={composedRefs}\n onKeyDown={disabled ? undefined : handleKeyDown}\n />\n </Collection.Slot>\n </AccordionImplProvider>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * AccordionItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'AccordionItem';\n\ntype AccordionItemContextValue = { open?: boolean; disabled?: boolean; triggerId: string };\nconst [AccordionItemProvider, useAccordionItemContext] =\n createAccordionContext<AccordionItemContextValue>(ITEM_NAME);\n\ntype AccordionItemElement = React.ComponentRef<typeof CollapsiblePrimitive.Root>;\ntype CollapsibleProps = React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Root>;\ninterface AccordionItemProps\n extends Omit<CollapsibleProps, 'open' | 'defaultOpen' | 'onOpenChange'> {\n /**\n * Whether or not an accordion item is disabled from user interaction.\n *\n * @defaultValue false\n */\n disabled?: boolean;\n /**\n * A string value for the accordion item. All items within an accordion should use a unique value.\n */\n value: string;\n}\n\n/**\n * `AccordionItem` contains all of the parts of a collapsible section inside of an `Accordion`.\n */\nconst AccordionItem = React.forwardRef<AccordionItemElement, AccordionItemProps>(\n (props: ScopedProps<AccordionItemProps>, forwardedRef) => {\n const { __scopeAccordion, value, ...accordionItemProps } = props;\n const accordionContext = useAccordionContext(ITEM_NAME, __scopeAccordion);\n const valueContext = useAccordionValueContext(ITEM_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n const triggerId = useId();\n const open = (value && valueContext.value.includes(value)) || false;\n const disabled = accordionContext.disabled || props.disabled;\n\n return (\n <AccordionItemProvider\n scope={__scopeAccordion}\n open={open}\n disabled={disabled}\n triggerId={triggerId}\n >\n <CollapsiblePrimitive.Root\n data-orientation={accordionContext.orientation}\n data-state={getState(open)}\n {...collapsibleScope}\n {...accordionItemProps}\n ref={forwardedRef}\n disabled={disabled}\n open={open}\n onOpenChange={(open) => {\n if (open) {\n valueContext.onItemOpen(value);\n } else {\n valueContext.onItemClose(value);\n }\n }}\n />\n </AccordionItemProvider>\n );\n }\n);\n\nAccordionItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AccordionHeader\n * -----------------------------------------------------------------------------------------------*/\n\nconst HEADER_NAME = 'AccordionHeader';\n\ntype AccordionHeaderElement = React.ComponentRef<typeof Primitive.h3>;\ntype PrimitiveHeading3Props = React.ComponentPropsWithoutRef<typeof Primitive.h3>;\ninterface AccordionHeaderProps extends PrimitiveHeading3Props {}\n\n/**\n * `AccordionHeader` contains the content for the parts of an `AccordionItem` that will be visible\n * whether or not its content is collapsed.\n */\nconst AccordionHeader = React.forwardRef<AccordionHeaderElement, AccordionHeaderProps>(\n (props: ScopedProps<AccordionHeaderProps>, forwardedRef) => {\n const { __scopeAccordion, ...headerProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(HEADER_NAME, __scopeAccordion);\n return (\n <Primitive.h3\n data-orientation={accordionContext.orientation}\n data-state={getState(itemContext.open)}\n data-disabled={itemContext.disabled ? '' : undefined}\n {...headerProps}\n ref={forwardedRef}\n />\n );\n }\n);\n\nAccordionHeader.displayName = HEADER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AccordionTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'AccordionTrigger';\n\ntype AccordionTriggerElement = React.ComponentRef<typeof CollapsiblePrimitive.Trigger>;\ntype CollapsibleTriggerProps = React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Trigger>;\ninterface AccordionTriggerProps extends CollapsibleTriggerProps {}\n\n/**\n * `AccordionTrigger` is the trigger that toggles the collapsed state of an `AccordionItem`. It\n * should always be nested inside of an `AccordionHeader`.\n */\nconst AccordionTrigger = React.forwardRef<AccordionTriggerElement, AccordionTriggerProps>(\n (props: ScopedProps<AccordionTriggerProps>, forwardedRef) => {\n const { __scopeAccordion, ...triggerProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(TRIGGER_NAME, __scopeAccordion);\n const collapsibleContext = useAccordionCollapsibleContext(TRIGGER_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n return (\n <Collection.ItemSlot scope={__scopeAccordion}>\n <CollapsiblePrimitive.Trigger\n aria-disabled={(itemContext.open && !collapsibleContext.collapsible) || undefined}\n data-orientation={accordionContext.orientation}\n id={itemContext.triggerId}\n {...collapsibleScope}\n {...triggerProps}\n ref={forwardedRef}\n />\n </Collection.ItemSlot>\n );\n }\n);\n\nAccordionTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AccordionContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'AccordionContent';\n\ntype AccordionContentElement = React.ComponentRef<typeof CollapsiblePrimitive.Content>;\ntype CollapsibleContentProps = React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Content>;\ninterface AccordionContentProps extends CollapsibleContentProps {}\n\n/**\n * `AccordionContent` contains the collapsible content for an `AccordionItem`.\n */\nconst AccordionContent = React.forwardRef<AccordionContentElement, AccordionContentProps>(\n (props: ScopedProps<AccordionContentProps>, forwardedRef) => {\n const { __scopeAccordion, ...contentProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(CONTENT_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n return (\n <CollapsiblePrimitive.Content\n role=\"region\"\n aria-labelledby={itemContext.triggerId}\n data-orientation={accordionContext.orientation}\n {...collapsibleScope}\n {...contentProps}\n ref={forwardedRef}\n style={{\n ['--radix-accordion-content-height' as any]: 'var(--radix-collapsible-content-height)',\n ['--radix-accordion-content-width' as any]: 'var(--radix-collapsible-content-width)',\n ...props.style,\n }}\n />\n );\n }\n);\n\nAccordionContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open?: boolean) {\n return open ? 'open' : 'closed';\n}\n\nconst Root = Accordion;\nconst Item = AccordionItem;\nconst Header = AccordionHeader;\nconst Trigger = AccordionTrigger;\nconst Content = AccordionContent;\n\nexport {\n createAccordionScope,\n //\n Accordion,\n AccordionItem,\n AccordionHeader,\n AccordionTrigger,\n AccordionContent,\n //\n Root,\n Item,\n Header,\n Trigger,\n Content,\n};\nexport type {\n AccordionSingleProps,\n AccordionMultipleProps,\n AccordionItemProps,\n AccordionHeaderProps,\n AccordionTriggerProps,\n AccordionContentProps,\n};\n","import * 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';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Tabs\n * -----------------------------------------------------------------------------------------------*/\n\nconst TABS_NAME = 'Tabs';\n\ntype ScopedProps<P> = P & { __scopeTabs?: Scope };\nconst [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope,\n]);\nconst useRovingFocusGroupScope = createRovingFocusGroupScope();\n\ntype TabsContextValue = {\n baseId: string;\n value: string;\n onValueChange: (value: string) => void;\n orientation?: TabsProps['orientation'];\n dir?: TabsProps['dir'];\n activationMode?: TabsProps['activationMode'];\n};\n\nconst [TabsProvider, useTabsContext] = createTabsContext<TabsContextValue>(TABS_NAME);\n\ntype TabsElement = React.ComponentRef<typeof Primitive.div>;\ntype RovingFocusGroupProps = React.ComponentPropsWithoutRef<typeof RovingFocusGroup.Root>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface TabsProps extends PrimitiveDivProps {\n /** The value for the selected tab, if controlled */\n value?: string;\n /** The value of the tab to select by default, if uncontrolled */\n defaultValue?: string;\n /** A function called when a new tab is selected */\n onValueChange?: (value: string) => void;\n /**\n * The orientation the tabs are layed out.\n * Mainly so arrow navigation is done accordingly (left & right vs. up & down)\n * @defaultValue horizontal\n */\n orientation?: RovingFocusGroupProps['orientation'];\n /**\n * The direction of navigation between toolbar items.\n */\n dir?: RovingFocusGroupProps['dir'];\n /**\n * Whether a tab is activated automatically or manually.\n * @defaultValue automatic\n * */\n activationMode?: 'automatic' | 'manual';\n}\n\nconst Tabs = React.forwardRef<TabsElement, TabsProps>(\n (props: ScopedProps<TabsProps>, 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\n return (\n <TabsProvider\n scope={__scopeTabs}\n baseId={useId()}\n value={value}\n onValueChange={setValue}\n orientation={orientation}\n dir={direction}\n activationMode={activationMode}\n >\n <Primitive.div\n dir={direction}\n data-orientation={orientation}\n {...tabsProps}\n ref={forwardedRef}\n />\n </TabsProvider>\n );\n }\n);\n\nTabs.displayName = TABS_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TabsList\n * -----------------------------------------------------------------------------------------------*/\n\nconst TAB_LIST_NAME = 'TabsList';\n\ntype TabsListElement = React.ComponentRef<typeof Primitive.div>;\ninterface TabsListProps extends PrimitiveDivProps {\n loop?: RovingFocusGroupProps['loop'];\n}\n\nconst TabsList = React.forwardRef<TabsListElement, TabsListProps>(\n (props: ScopedProps<TabsListProps>, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return (\n <RovingFocusGroup.Root\n asChild\n {...rovingFocusGroupScope}\n orientation={context.orientation}\n dir={context.dir}\n loop={loop}\n >\n <Primitive.div\n role=\"tablist\"\n aria-orientation={context.orientation}\n {...listProps}\n ref={forwardedRef}\n />\n </RovingFocusGroup.Root>\n );\n }\n);\n\nTabsList.displayName = TAB_LIST_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TabsTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'TabsTrigger';\n\ntype TabsTriggerElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface TabsTriggerProps extends PrimitiveButtonProps {\n value: string;\n}\n\nconst TabsTrigger = React.forwardRef<TabsTriggerElement, TabsTriggerProps>(\n (props: ScopedProps<TabsTriggerProps>, 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 (\n <RovingFocusGroup.Item\n asChild\n {...rovingFocusGroupScope}\n focusable={!disabled}\n active={isSelected}\n >\n <Primitive.button\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n aria-controls={contentId}\n data-state={isSelected ? 'active' : 'inactive'}\n data-disabled={disabled ? '' : undefined}\n disabled={disabled}\n id={triggerId}\n {...triggerProps}\n ref={forwardedRef}\n onMouseDown={composeEventHandlers(props.onMouseDown, (event) => {\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n // prevent focus to avoid accidental activation\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 // handle \"automatic\" activation if necessary\n // ie. activate tab following focus\n const isAutomaticActivation = context.activationMode !== 'manual';\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })}\n />\n </RovingFocusGroup.Item>\n );\n }\n);\n\nTabsTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TabsContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'TabsContent';\n\ntype TabsContentElement = React.ComponentRef<typeof Primitive.div>;\ninterface TabsContentProps extends PrimitiveDivProps {\n value: string;\n\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst TabsContent = React.forwardRef<TabsContentElement, TabsContentProps>(\n (props: ScopedProps<TabsContentProps>, 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\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => (isMountAnimationPreventedRef.current = false));\n return () => cancelAnimationFrame(rAF);\n }, []);\n\n return (\n <Presence present={forceMount || isSelected}>\n {({ present }) => (\n <Primitive.div\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' : undefined,\n }}\n >\n {present && children}\n </Primitive.div>\n )}\n </Presence>\n );\n }\n);\n\nTabsContent.displayName = CONTENT_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\nfunction makeTriggerId(baseId: string, value: string) {\n return `${baseId}-trigger-${value}`;\n}\n\nfunction makeContentId(baseId: string, value: string) {\n return `${baseId}-content-${value}`;\n}\n\nconst Root = Tabs;\nconst List = TabsList;\nconst Trigger = TabsTrigger;\nconst Content = TabsContent;\n\nexport {\n createTabsScope,\n //\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n //\n Root,\n List,\n Trigger,\n Content,\n};\nexport type { TabsProps, TabsListProps, TabsTriggerProps, TabsContentProps };\n","'use client';\n\nimport {\n Accordion as UIAccordion,\n AccordionContent as UIAccordionContent,\n AccordionItem as UIAccordionItem,\n AccordionTrigger as UIAccordionTrigger,\n} from '@riverbankcms/ui';\nimport clsx from 'clsx';\nimport {\n Plus,\n Minus,\n ChevronDown,\n ArrowDown,\n CirclePlus,\n CircleMinus,\n} from 'lucide-react';\nimport React from 'react';\nimport RichTextPrimitive from '../../../primitives/content/components/RichText';\nimport TextPrimitive from '../../../primitives/content/components/Text';\nimport { ICON_CONFIG, type AccordionIcon, type AccordionLucideIcon } from '../../../theme/accordions/types';\n\n/**\n * Lookup map for accordion icons - only these 6 icons are bundled\n */\nconst ACCORDION_ICONS: Record<AccordionLucideIcon, React.ComponentType<{ className?: string }>> = {\n Plus,\n Minus,\n ChevronDown,\n ArrowDown,\n CirclePlus,\n CircleMinus,\n};\n\ntype AccordionNodeBaseProps = {\n children?: React.ReactNode;\n className?: string;\n blockId?: string | null;\n blockKind?: string | null;\n blockContent?: unknown;\n fragmentRegistry?: unknown;\n pathBase?: string;\n};\n\ntype AccordionSingleProps = AccordionNodeBaseProps & {\n type?: 'single';\n collapsible?: boolean;\n defaultValue?: string;\n value?: string;\n};\n\ntype AccordionMultipleProps = AccordionNodeBaseProps & {\n type: 'multiple';\n collapsible?: never;\n defaultValue?: string[];\n value?: string[];\n};\n\nexport type AccordionNodeProps = AccordionSingleProps | AccordionMultipleProps;\n\nexport const AccordionNode: React.FC<AccordionNodeProps> = (props) => {\n const {\n children,\n className,\n blockId: _blockId,\n blockKind: _blockKind,\n blockContent: _blockContent,\n fragmentRegistry: _fragmentRegistry,\n pathBase: _pathBase,\n ...rest\n } = props;\n\n if (rest.type === 'multiple') {\n const { type: _type, defaultValue, value } = rest;\n return (\n <UIAccordion\n type=\"multiple\"\n className={clsx('w-full', className)}\n defaultValue={defaultValue}\n value={value}\n >\n {children}\n </UIAccordion>\n );\n }\n\n const {\n type = 'single',\n collapsible = true,\n defaultValue,\n value\n } = rest as AccordionSingleProps;\n\n return (\n <UIAccordion\n type={type}\n collapsible={collapsible}\n className={clsx('w-full', className)}\n defaultValue={defaultValue}\n value={value}\n >\n {children}\n </UIAccordion>\n );\n};\n\nexport type AccordionItemNodeProps = {\n className?: string;\n value?: string | number | null;\n trigger?: unknown;\n content?: unknown;\n question?: unknown;\n answer?: unknown;\n iconStyle?: AccordionIcon | null;\n blockId?: string | null;\n blockKind?: string | null;\n blockContent?: unknown;\n fragmentRegistry?: unknown;\n pathBase?: string;\n};\n\nexport const AccordionItemNode: React.FC<AccordionItemNodeProps> = ({\n className,\n value,\n trigger,\n content,\n question,\n answer,\n iconStyle,\n blockId: _blockId,\n blockKind: _blockKind,\n blockContent: _blockContent,\n fragmentRegistry: _fragmentRegistry,\n pathBase: _pathBase,\n ...rest\n}) => {\n const generatedId = React.useId();\n const resolvedValue =\n value !== undefined && value !== null ? String(value) : generatedId;\n const triggerSource = trigger ?? question;\n const contentSource = content ?? answer;\n\n const resolvedTrigger: React.ReactNode =\n typeof triggerSource === 'string' || typeof triggerSource === 'number'\n ? String(triggerSource)\n : (triggerSource as React.ReactNode);\n\n // Use icon style from theme (via prop binding), fallback to chevron\n const resolvedIconStyle = iconStyle && iconStyle in ICON_CONFIG ? iconStyle : 'chevron';\n const iconConfig = ICON_CONFIG[resolvedIconStyle];\n const ClosedIconComponent = ACCORDION_ICONS[iconConfig.closedIcon];\n const OpenIconComponent = iconConfig.openIcon ? ACCORDION_ICONS[iconConfig.openIcon] : null;\n\n return (\n <UIAccordionItem\n value={resolvedValue}\n className={clsx(\n 'border-b',\n className\n )}\n {...rest}\n >\n <UIAccordionTrigger className=\"accordion-trigger\">\n <TextPrimitive as=\"span\" className=\"flex-1\">\n {resolvedTrigger}\n </TextPrimitive>\n <span className=\"accordion-icon\" aria-hidden=\"true\">\n {ClosedIconComponent && <ClosedIconComponent className=\"accordion-icon-closed\" />}\n {OpenIconComponent && <OpenIconComponent className=\"accordion-icon-open\" />}\n </span>\n </UIAccordionTrigger>\n <UIAccordionContent className=\"accordion-content\">\n {typeof contentSource === 'string' || typeof contentSource === 'number' ? (\n <p className=\"mt-0\">{String(contentSource)}</p>\n ) : contentSource ? (\n <RichTextPrimitive doc={contentSource as any} className=\"max-w-none\" />\n ) : null}\n </UIAccordionContent>\n </UIAccordionItem>\n );\n};\n","import { z } from 'zod';\n\n/**\n * Accordion icon styles for expand/collapse indicators\n */\nexport const accordionIconSchema = z.enum([\n 'plus-minus', // + becomes - (swap or rotate 90°)\n 'chevron', // › becomes ⌄ (rotate 90° or 180°)\n 'caret', // ▸ becomes ▾ (rotate 90° or 180°)\n 'arrow', // → becomes ↓ (rotate 90° or 180°)\n 'circle-plus-minus', // ⊕ becomes ⊖ (swap with fade)\n]);\n\nexport type AccordionIcon = z.infer<typeof accordionIconSchema>;\n\n/**\n * Accordion icon names used in ICON_CONFIG\n * These are the only Lucide icons bundled for accordions\n */\nexport type AccordionLucideIcon = 'Plus' | 'Minus' | 'ChevronDown' | 'ArrowDown' | 'CirclePlus' | 'CircleMinus';\n\n/**\n * Accordion configuration for a theme\n * Single style per theme (no variants needed)\n */\nexport const accordionSystemSchema = z.object({\n // Visual styling (solid color only - gradients can be added later if needed)\n background: z.object({\n type: z.literal('solid'),\n colorToken: z.string(),\n }),\n\n // Spacing (padding inside items)\n spacing: z.enum(['none', 'compact', 'cozy', 'medium', 'comfortable', 'spacious']),\n\n // Border radius (null = inherit from theme.corners)\n corners: z.enum(['square', 'soft', 'rounded', 'pill']).nullable(),\n\n // Border styling (null = inherit from theme.border)\n border: z.object({\n widthClass: z.string(), // e.g., 'border', 'border-2', 'border-0'\n colorToken: z.string(),\n }).nullable(),\n\n // Shadow (null = inherit from theme.shadow)\n shadow: z.object({\n elevation: z.enum(['none', 'low', 'medium', 'high']),\n softness: z.enum(['soft', 'crisp', 'hard']).nullable(),\n position: z.enum(['bottom', 'bottom-right']),\n }).nullable(),\n\n // Icon style and animation\n icon: z.object({\n style: accordionIconSchema,\n position: z.enum(['left', 'right']),\n size: z.enum(['sm', 'md', 'lg']),\n }),\n\n // Trigger (question) styling\n trigger: z.object({\n textColorToken: z.string(),\n fontWeight: z.enum(['regular', 'medium', 'semibold', 'bold']).nullable(), // null = inherit from theme\n }),\n\n // Hover state styling\n hover: z.object({\n backgroundColorToken: z.string().optional(),\n textColorToken: z.string().optional(),\n borderColorToken: z.string().optional(),\n scale: z.number().min(1.0).max(1.1).optional(), // e.g., 1.02 for subtle lift\n shadowElevation: z.enum(['low', 'medium', 'high']).optional(),\n }),\n\n // Content (answer) styling\n content: z.object({\n textColorToken: z.string(),\n }),\n});\n\nexport type AccordionSystem = z.infer<typeof accordionSystemSchema>;\n\n/**\n * Icon configuration mapping icon styles to Lucide icons and behavior\n * Used by both CSS generation (for rotation) and component rendering (for icon selection)\n */\nexport const ICON_CONFIG: Record<AccordionIcon, {\n closedIcon: AccordionLucideIcon;\n openIcon?: AccordionLucideIcon;\n rotation: 0 | 90 | 180; // Degrees to rotate icon on open (0 = swap instead of rotate)\n}> = {\n 'plus-minus': { closedIcon: 'Plus', openIcon: 'Minus', rotation: 0 },\n 'chevron': { closedIcon: 'ChevronDown', rotation: 180 },\n 'caret': { closedIcon: 'ChevronDown', rotation: 180 }, // Using ChevronDown as caret equivalent\n 'arrow': { closedIcon: 'ArrowDown', rotation: 180 },\n 'circle-plus-minus': { closedIcon: 'CirclePlus', openIcon: 'CircleMinus', rotation: 0 },\n};\n\n/**\n * Icon size mapping (px values for CSS and Lucide React)\n */\nexport const ICON_SIZE_PX: Record<AccordionSystem['icon']['size'], string> = {\n sm: '16px',\n md: '20px',\n lg: '24px',\n};\n\n/**\n * Spacing map for accordion content padding\n */\nexport const ACCORDION_SPACING_MAP: Record<AccordionSystem['spacing'], string> = {\n none: '0',\n compact: '0.75rem', // 12px\n cozy: '1rem', // 16px\n medium: '1.25rem', // 20px\n comfortable: '1.5rem', // 24px\n spacious: '2rem', // 32px\n};\n","'use client'\n\nimport React, { useEffect, useState } from 'react'\nimport Section from '../../../primitives/layout/Section'\n\ntype HeaderSectionNodeProps = React.PropsWithChildren<{\n className?: string\n blockId?: string\n blockKind?: string\n blockContent?: unknown\n fragmentRegistry?: unknown\n pathBase?: string\n [key: string]: unknown\n}>\n\n/**\n * Client-side enhanced section component for site headers.\n *\n * Adds scroll-aware behavior by listening to window scroll events and\n * toggling the 'header-scrolled' class when the user scrolls past a threshold.\n *\n * This enables CSS-based animations and transitions for headers that shrink,\n * change opacity, or adjust styling based on scroll position.\n *\n * Only activates scroll listener when shrink classes are present in className.\n */\nconst HeaderSectionNode: React.FC<HeaderSectionNodeProps> = ({\n blockId: _blockId,\n blockKind: _blockKind,\n blockContent: _blockContent,\n fragmentRegistry: _fragmentRegistry,\n pathBase: _pathBase,\n children,\n className: originalClassName,\n ...restProps\n}) => {\n const [scrolled, setScrolled] = useState(false)\n\n // Check if shrink-on-scroll is enabled by checking for shrink classes\n // Memoize to prevent useEffect re-runs when parent re-renders\n const hasShrinkClasses = React.useMemo(\n () => Boolean(originalClassName?.includes('[&.header-scrolled]:')),\n [originalClassName]\n )\n\n useEffect(() => {\n // Only add scroll listener if shrink classes are present\n if (!hasShrinkClasses) return\n\n let ticking = false\n const threshold = 10 // Lower threshold to 10px to avoid feedback loop at 50px\n\n function handleScroll() {\n if (ticking) return\n ticking = true\n\n requestAnimationFrame(() => {\n const scrollY = window.scrollY || window.pageYOffset\n const shouldBeScrolled = scrollY > threshold\n\n // Only update state if it actually changed to prevent re-renders\n setScrolled((prev) => (prev === shouldBeScrolled ? prev : shouldBeScrolled))\n ticking = false\n })\n }\n\n // Add listener with passive flag for better scroll performance\n window.addEventListener('scroll', handleScroll, { passive: true })\n\n // Check initial state\n handleScroll()\n\n return () => {\n window.removeEventListener('scroll', handleScroll)\n }\n }, [hasShrinkClasses])\n\n // Merge scrolled class with existing classes\n const className = [originalClassName, scrolled && 'header-scrolled']\n .filter(Boolean)\n .join(' ')\n\n return (\n <Section {...(restProps as any)} className={className}>\n {children}\n </Section>\n )\n}\n\nexport default HeaderSectionNode\n","\"use client\"\n\nimport type { ComponentRegistry } from '../resolver'\nimport { serverComponentRegistry } from './registry.server'\nimport { FormNodeClient } from '../nodes/form.client'\nimport { BookingFormClient } from '../nodes/booking-form.client'\nimport { EventListClient } from '../nodes/event-list.client'\nimport { EventRegistrationClient } from '../nodes/event-registration.client'\nimport { CarouselNode } from '../nodes/carousel'\nimport { AccordionNode, AccordionItemNode } from '../nodes/accordion'\nimport HeaderSectionNode from '../nodes/header-section.client'\nimport { EventListingClient, EventCalendarClient } from '../nodes/events'\n\n// Extend server registry with client-only overrides\nexport const clientComponentRegistry: ComponentRegistry = {\n ...serverComponentRegistry,\n form: FormNodeClient,\n 'booking-form': BookingFormClient,\n 'event-list': EventListClient,\n 'event-registration': EventRegistrationClient,\n carousel: CarouselNode,\n accordion: AccordionNode,\n accordionItem: AccordionItemNode,\n headerSection: HeaderSectionNode,\n // New event blocks with client-side interactivity\n 'event-listing': EventListingClient,\n 'event-calendar': EventCalendarClient,\n}\n"],"mappings":"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","names":["e","t","f","n","o","jsx","jsx","jsx","jsx","React","jsx","index","jsx","jsx","jsx","x","y","v","min","max","jsx","React","jsx","jsxs","React","index","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","DEFAULT_EVENT_BASE_PATH","COLUMN_CLASSES","formatDateForUrl","buildEventUrl","formatDate","formatTime","jsx","jsxs","DEFAULT_EVENT_BASE_PATH","formatDate","formatTime","buildEventUrl","jsx","jsx","jsx","getCmsApiUrl","getCmsApiUrl","e","jsx","jsxs","useMemo","useState","useCallback","useRef","useState","useRef","e","useCallback","m","getCmsApiUrl","events","v","i","a","b","jsx","jsxs","i","isCurrentMonth","buildEventUrl","formatTime","useMemo","DEFAULT_EVENT_BASE_PATH","useState","useEffect","useRef","s","v","useState","useState","getCmsApiUrl","jsx","jsxs","useState","e","React","useState","useState","useCallback","useMemo","useEffect","s","jsx","jsxs","index","jsx","React","useMemo","useState","useEffect","useCallback","jsx","jsxs","useState","useCallback","getCmsApiUrl","useEffect","jsx","useEffect","useMemo","formatDate","formatTime","jsx","jsxs","e","formatDate","jsx","jsxs","e","formatTime","useState","useEffect","useState","useEffect","getCmsApiUrl","useState","useEffect","useCallback","useRef","useState","useRef","useCallback","getCmsApiUrl","d","useEffect","jsx","jsxs","useEffect","useMemo","useState","useCallback","jsx","jsxs","useState","useCallback","e","v","useMemo","React","useState","useState","getCmsApiUrl","jsx","useState","React","s","useState","useMemo","jsx","jsxs","DAY_NAMES","MONTH_NAMES","getMonthCalendarDays","i","getWeekCalendarDays","groupEventsByDate","formatDateKey","buildEventUrl","formatTime","isToday","CalendarDayCell","isCurrentMonth","jsx","jsxs","formatDateForUrl","buildEventUrl","EventCard","DEFAULT_EVENT_BASE_PATH","COLUMN_CLASSES","useState","formatDate","formatTime","getCmsApiUrl","jsx","jsxs","formatDate","formatTime","jsx","jsxs","formatDate","formatTime","jsx","jsxs","e","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","e","useState","React","CLASS_PART_SEPARATOR","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","getClassGroupId","className","classParts","split","length","shift","getGroupRecursive","getGroupIdForArbitraryProperty","getConflictingClassGroupIds","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","nextPart","get","classGroupFromNextClassPart","slice","undefined","validators","classRest","join","find","validator","arbitraryPropertyRegex","test","arbitraryPropertyClassName","exec","property","substring","indexOf","theme","classGroups","Map","processClassesRecursively","classGroup","forEach","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","push","Object","entries","key","path","currentClassPartObject","pathPart","has","set","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","value","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","MODIFIER_SEPARATOR_LENGTH","createParseClassName","prefix","experimentalParseClassName","parseClassName","modifiers","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","baseClassName","stripImportantModifier","hasImportantModifier","maybePostfixModifierPosition","fullPrefix","parseClassNameOriginal","startsWith","isExternal","endsWith","createSortModifiers","orderSensitiveModifiers","fromEntries","map","modifier","sortModifiers","sortedModifiers","unsortedModifiers","isPositionSensitive","sort","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","classGroupsInConflict","classNames","trim","result","originalClassName","variantModifier","modifierId","classId","includes","conflictGroups","i","group","twJoin","argument","resolvedValue","string","arguments","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","reduce","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","callTailwindMerge","apply","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","Number","isNaN","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isLabelFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","testLabel","testValue","shouldMatchNoLabel","label","getDefaultConfig","themeColor","fromTheme","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","isArbitraryVariable","isArbitraryValue","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","isFraction","scaleGridTemplateColsRows","isInteger","scaleGridColRowStartAndEnd","span","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleColor","scaleBgPosition","isArbitraryVariablePosition","isArbitraryPosition","position","scaleBgRepeat","repeat","scaleBgSize","isArbitraryVariableSize","isArbitrarySize","size","scaleGradientStopPosition","isPercent","isArbitraryVariableLength","isArbitraryLength","scaleRadius","scaleBorderWidth","isNumber","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","cacheSize","theme","animate","aspect","blur","isTshirtSize","breakpoint","color","isAny","container","ease","font","isAnyNonArbitrary","leading","perspective","radius","shadow","spacing","text","tracking","classGroups","columns","box","display","sr","float","clear","isolation","object","overflow","overscroll","inset","start","end","top","right","bottom","left","visibility","z","basis","flex","grow","shrink","order","col","row","gap","justify","content","items","baseline","self","p","px","py","ps","pe","pt","pr","pb","pl","m","mx","my","ms","me","mt","mr","mb","ml","w","screen","h","isArbitraryNumber","isArbitraryVariableFamilyName","list","placeholder","decoration","indent","align","whitespace","break","wrap","hyphens","bg","linear","to","radial","conic","isArbitraryVariableImage","isArbitraryImage","from","via","rounded","border","divide","outline","isArbitraryVariableShadow","isArbitraryShadow","ring","opacity","mask","closest","farthest","filter","brightness","contrast","grayscale","invert","saturate","sepia","table","caption","transition","duration","delay","backface","rotate","scale","skew","transform","origin","translate","accent","appearance","caret","scheme","cursor","resize","scroll","snap","touch","select","fill","stroke","conflictingClassGroups","conflictingClassGroupModifiers","orderSensitiveModifiers","twMerge","createTailwindMerge","getDefaultConfig","React","React","i","Fragment","jsx","Slot","props","param","React","jsx","jsx2","React","React","jsx","createContext","useContext","index","createScope","nextScopes","React","React","useLayoutEffect","React","React","value","React","jsx","Slot","Node","React","React","getElementRef","node","React","React","jsx","React2","jsx","jsx3","React","React","React","React","jsx","node","index","handleAndDispatchPointerDownOutsideEvent","React","jsx","handleFocusIn","handleFocusOut","handleMutations","container","index","React","ReactDOM","jsx","ReactDOM","React","count","count","__assign","t","s","i","n","p","e","i","l","React","React","useState","useCallbackRef","React","useCallbackRef","a","x","cbs","React","SideCar","React","React","React","x","x","y","Style","e","x","e","Fragment","jsx","jsxs","TRIGGER_NAME","getState","PORTAL_NAME","Slot","CONTENT_NAME","createContext2","Portal","Content","index","forwardRef","size","createElement","forwardRef","createElement","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","jsx4","jsxs","React3","React","React","React","jsx","React","jsx","createCollectionScope","React","jsx","useCollection","a","b","React","jsx","React","v","clamp","x","y","platform","x","y","i","max","offset","clamp","platform","placements","sides","side","d","a","b","placement","overflow","platform","x","y","min","max","clamp","offset","getComputedStyle","getComputedStyle","$","x","y","a","b","offset","shift","flip","size","hide","arrow","limitShift","computePosition","React","useLayoutEffect","ReactDOM","noop","a","b","i","platform","computePosition","data","x","y","arrow","offset","shift","limitShift","flip","size","hide","arrow","React","jsx","Root","React","size","jsx","jsx","CONTENT_NAME","arrow","offset","shift","limitShift","flip","size","hide","PopperArrow","Root","x","y","Content","Arrow","React","jsx","EVENT_OPTIONS","focusFirst","_","index","Root","jsx","Collection","useCollection","createCollectionScope","Root2","ANCHOR_NAME","PORTAL_NAME","PortalProvider","usePortalContext","CONTENT_NAME","Slot","Root","Content","focusFirst","GROUP_NAME","ITEM_NAME","ARROW_NAME","Arrow","wrapArray","_","index","v","x","y","i","Anchor","Portal","Item","jsx","Root3","TRIGGER_NAME","PORTAL_NAME","Portal","CONTENT_NAME","Content2","GROUP_NAME","LABEL_NAME","ITEM_NAME","CHECKBOX_ITEM_NAME","RADIO_GROUP_NAME","RADIO_ITEM_NAME","SEPARATOR_NAME","ARROW_NAME","Arrow2","SUB_TRIGGER_NAME","jsx","SUB_CONTENT_NAME","Portal","Content","Label","Item","CheckboxItem","RadioItem","ItemIndicator","Separator","SubTrigger","SubContent","jsx5","jsxs2","React4","Slot","Label","jsx6","jsx7","jsx8","React5","React","jsx","usePopperScope","Root2","ANCHOR_NAME","TRIGGER_NAME","getState","PORTAL_NAME","PortalProvider","usePortalContext","CONTENT_NAME","Slot","Content","CLOSE_NAME","ARROW_NAME","Arrow","Root","Trigger","Portal","Content","jsx9","forwardRef5","useEffect","useMemo","useRef","useState","useEventCallback","handler","callbackRef","useRef","fn","value","current","clamp","number","min","max","isTouch","event","getParentWindow","node","ownerDocument","defaultView","self","getRelativePosition","touchId","rect","getBoundingClientRect","pointer","touches","i","length","identifier","left","pageX","pageXOffset","width","top","pageY","pageYOffset","height","preventDefaultMove","preventDefault","Interactive","React","memo","o","onMove","onKey","rest","container","onMoveCallback","onKeyCallback","hasTouch","x","useMemo","handleMove","buttons","toggleDocumentEvents","handleMoveEnd","state","touch","parentWindow","toggleEvent","addEventListener","removeEventListener","e","nativeEvent","el","changedTouches","focus","keyCode","which","handleMoveStart","handleKeyDown","useEffect","onTouchStart","onMouseDown","className","ref","onKeyDown","tabIndex","role","formatClassName","names","filter","Boolean","join","Pointer","r","color","nodeClassName","style","backgroundColor","round","digits","base","Math","pow","angleUnits","grad","turn","rad","PI","hexToHsva","hex","rgbaToHsva","hexToRgba","substring","parseInt","g","b","a","current","hsvaToHex","hsva","rgbaToHex","hsvaToRgba","hsvaToHsla","e","s","v","a","hh","h","round","l","hsvaToHslString","r","current","hsvaToRgba","e","h","s","v","a","hh","Math","floor","b","c","d","module","r","round","g","current","format","number","hex","toString","length","rgbaToHex","e","r","g","b","a","alphaHex","round","rgbaToHsva","max","Math","delta","min","hh","h","s","v","current","Hue","React","memo","r","hue","onChange","nodeClassName","formatClassName","className","Interactive","onMove","interaction","h","left","onKey","offset","clamp","aria-label","aria-valuenow","round","aria-valuemax","aria-valuemin","Pointer","color","hsvaToHslString","s","v","a","Saturation","hsva","containerStyle","backgroundColor","style","top","aria-valuetext","equalColorObjects","first","second","prop","current","equalHex","first","second","toLowerCase","equalColorObjects","hexToRgba","useColorManipulation","colorModel","color","onChange","onChangeCallback","useEventCallback","useState","toHsva","hsva","updateHsva","cache","useRef","useEffect","equal","newHsva","newColor","fromHsva","handleChange","useCallback","params","Object","assign","nonce","useIsomorphicLayoutEffect","window","useLayoutEffect","getNonce","__webpack_nonce__","handleChange","styleElementMap","Map","useStyleSheet","nodeRef","useIsomorphicLayoutEffect","parentDocument","current","ownerDocument","document","has","styleElement","createElement","innerHTML","set","nonce","getNonce","setAttribute","head","appendChild","ColorPicker","t","className","colorModel","color","defaultColor","onChange","rest","useRef","useColorManipulation","hsva","updateHsva","nodeClassName","formatClassName","React","ref","Saturation","Hue","hue","h","toHsva","hexToHsva","fromHsva","e","hsvaToHex","s","v","a","equal","equalHex","HexColorPicker","props","jsx10","jsxs3","React6","isObject","subject","Object","prototype","toString","call","isRecord","Array","isArray","canUseDOM","window","document","createElement","areOptionsEqual","optionsA","optionsB","optionsAKeys","keys","optionsBKeys","length","breakpointsA","JSON","stringify","breakpoints","breakpointsB","every","key","valueA","valueB","sortAndMapPluginToOptions","plugins","concat","sort","a","b","name","map","plugin","options","arePluginsEqual","pluginsA","pluginsB","optionA","index","optionB","isNumber","subject","isString","isBoolean","isObject","Object","prototype","toString","call","mathAbs","n","Math","abs","mathSign","sign","deltaAbs","valueB","valueA","factorAbs","diff","roundToTwoDecimals","num","round","arrayKeys","array","objectKeys","map","Number","arrayLast","arrayLastIndex","max","length","arrayIsLastIndex","index","arrayFromNumber","startAt","Array","from","_","i","object","keys","objectsMergeDeep","objectA","objectB","reduce","mergedObjects","currentObject","forEach","key","areObjects","isMouseEvent","evt","ownerWindow","MouseEvent","Alignment","align","viewSize","predefined","start","center","end","measure","self","EventStore","listeners","add","node","type","handler","options","passive","removeListener","addEventListener","removeEventListener","legacyMediaQueryList","addListener","push","clear","filter","remove","Animations","ownerDocument","update","render","documentVisibleHandler","fixedTimeStep","lastTimeStamp","accumulatedTime","animationId","init","hidden","reset","destroy","stop","animate","timeStamp","timeElapsed","alpha","requestAnimationFrame","cancelAnimationFrame","Axis","axis","contentDirection","isRightToLeft","isVertical","scroll","cross","startEdge","getStartEdge","endEdge","getEndEdge","measureSize","nodeRect","height","width","direction","Limit","min","reachedMin","reachedMax","reachedAny","constrain","removeOffset","ceil","Counter","loop","loopEnd","counter","withinLimit","get","set","clone","DragHandler","rootNode","target","dragTracker","location","animation","scrollTo","scrollBody","scrollTarget","eventHandler","percentOfView","dragFree","dragThreshold","skipSnaps","baseFriction","watchDrag","crossAxis","focusNodes","nonPassiveEvent","initEvents","dragEvents","goToNextThreshold","snapForceBoost","mouse","touch","freeForceBoost","baseSpeed","isMoving","startScroll","startCross","pointerIsDown","preventScroll","preventClick","isMouse","emblaApi","downIfAllowed","down","preventDefault","undefined","up","click","addDragEvents","move","isFocusNode","nodeName","includes","forceBoost","boost","allowedForce","force","targetChanged","next","baseForce","byDistance","distance","byIndex","isMouseEvt","buttons","button","pointerDown","useFriction","useDuration","readPoint","emit","isTouchEvt","touches","lastScroll","lastCross","diffScroll","diffCross","cancelable","pointerMove","currentLocation","rawForce","pointerUp","forceFactor","speed","friction","stopPropagation","DragTracker","logInterval","startEvent","lastEvent","readTime","evtAxis","property","coord","expired","diffDrag","diffTime","isFlick","NodeRects","offsetTop","offsetLeft","offsetWidth","offsetHeight","offset","top","right","bottom","left","PercentOfView","ResizeHandler","container","slides","watchResize","nodeRects","observeNodes","concat","resizeObserver","containerSize","slideSizes","destroyed","readSize","defaultCallback","entries","entry","isContainer","slideIndex","indexOf","lastSize","newSize","diffSize","reInit","ResizeObserver","observe","disconnect","ScrollBody","offsetLocation","previousLocation","baseDuration","scrollVelocity","scrollDirection","scrollDuration","scrollFriction","rawLocation","rawLocationPrevious","seek","displacement","isInstant","scrollDistance","settled","duration","velocity","useBaseDuration","useBaseFriction","ScrollBounds","limit","pullBackThreshold","edgeOffsetTolerance","frictionLimit","disabled","shouldConstrain","edge","diffToEdge","diffToTarget","subtract","toggleActive","active","ScrollContain","contentSize","snapsAligned","containScroll","pixelTolerance","scrollBounds","snapsBounded","measureBounded","scrollContainLimit","findScrollContainLimit","snapsContained","measureContained","usePixelTolerance","bound","snap","startSnap","endSnap","lastIndexOf","snapAligned","isFirst","isLast","scrollBound","parseFloat","toFixed","slice","ScrollLimit","scrollSnaps","ScrollLooper","vectors","jointSafety","shouldLoop","loopDistance","v","ScrollProgress","ScrollSnaps","alignment","containerRect","slideRects","slidesToScroll","groupSlides","alignments","measureSizes","snaps","measureUnaligned","measureAligned","rects","rect","g","SlideRegistry","containSnaps","slideIndexes","slideRegistry","createSlideRegistry","groupedSlideIndexes","doNotContain","group","groups","range","ScrollTarget","targetVector","minDistance","distances","sort","a","b","findTargetSnap","ascDiffsToSnaps","shortcut","d1","d2","targets","matchingTargets","t","diffToSnap","targetSnapDistance","reachedBound","snapDistance","ScrollTo","indexCurrent","indexPrevious","distanceDiff","indexDiff","targetIndex","SlideFocus","root","eventStore","watchFocus","focusListenerOptions","capture","lastTabPressTime","nowTime","Date","getTime","scrollLeft","findIndex","document","registerTabPress","slide","event","code","Vector1D","initialValue","value","normalizeInput","Translate","translate","x","y","containerStyle","style","previousTarget","to","newTarget","transform","getAttribute","removeAttribute","SlideLooper","slideSizesWithGaps","roundingSafety","ascItems","descItems","reverse","loopPoints","startPoints","endPoints","removeSlideSizes","indexes","slidesInGap","gap","remainingGap","findSlideBounds","findLoopPoints","isEndEdge","slideBounds","initial","altered","boundEdge","loopPoint","slideLocation","canLoop","every","otherIndexes","shiftLocation","SlidesHandler","watchSlides","mutationObserver","mutations","mutation","MutationObserver","childList","SlidesInView","threshold","intersectionEntryMap","inViewCache","notInViewCache","intersectionObserver","IntersectionObserver","parentElement","createInViewList","inView","list","parseInt","isIntersecting","inViewMatch","notInViewMatch","SlideSizes","readEdgeGap","withEdgeGap","startGap","measureStartGap","endGap","measureEndGap","measureWithGaps","slideRect","getComputedStyle","getPropertyValue","SlidesToScroll","groupByNumber","byNumber","groupSize","bySize","rectB","rectA","edgeA","edgeB","gapA","gapB","chunkSize","currentSize","previousSize","Engine","scrollAxis","startIndex","inViewThreshold","dragHandler","scrollLooper","slideLooper","shouldSettle","withinBounds","hasSettled","hasSettledAndIdle","interpolatedLocation","engine","startLocation","scrollProgress","slidesInView","slideFocus","resizeHandler","scrollSnapList","slidesHandler","EventHandler","api","getListeners","e","on","cb","off","defaultOptions","breakpoints","OptionsHandler","mergeOptions","optionsA","optionsB","optionsAtMedia","matchedMediaOptions","media","matchMedia","matches","mediaOption","optionsMediaQueries","optionsList","acc","mediaQueries","PluginsHandler","optionsHandler","activePlugins","plugins","plugin","assign","name","EmblaCarousel","userOptions","userPlugins","defaultView","pluginsHandler","mediaHandlers","reActivate","optionsBase","globalOptions","pluginList","pluginApis","storeElements","userContainer","userSlides","customContainer","querySelector","children","customSlides","querySelectorAll","createEngine","optionsWithoutLoop","activate","withOptions","withPlugins","query","offsetParent","selectedScrollSnap","deActivate","jump","scrollNext","scrollPrev","prev","canScrollNext","canScrollPrev","previousScrollSnap","slidesNotInView","internalEngine","containerNode","slideNodes","setTimeout","useEmblaCarousel","options","plugins","storedOptions","useRef","storedPlugins","emblaApi","setEmblaApi","useState","viewport","setViewport","reInit","useCallback","current","useEffect","areOptionsEqual","arePluginsEqual","canUseDOM","EmblaCarousel","globalOptions","newEmblaApi","destroy","undefined","jsx11","jsxs4","React","jsx12","jsxs5","Separator","DialogPrimitive","jsx14","jsxs6","jsx","jsx15","jsx16","jsxs7","jsx","useState2","jsx17","forwardRef9","jsxs","jsx18","forwardRef","jsx19","jsxs9","React8","React","jsx","jsxs","getState","Root","jsx20","React9","jsx","jsx21","React10","React","jsx","NAME","Root","jsx22","cva","jsx23","jsxs10","jsx24","cva","React","jsx","Collection","useCollection","createCollectionScope","React","value","ITEM_NAME","getState","open","TRIGGER_NAME","CONTENT_NAME","Root","Item","Trigger","Content","React11","jsx","jsx25","React12","jsx26","jsxs11","React13","jsx27","jsx28","jsxs12","jsx","useRef3","jsx29","useCallback","useMemo","useRef","useRef4","useState3","jsx30","jsxs13","useState4","useRef5","useCallback2","useEffect5","React15","React","jsx","useRovingFocusGroupScope","Root","TRIGGER_NAME","CONTENT_NAME","Trigger","Content","jsx31","jsx32","jsxs14","useState5","jsx33","jsxs15","useEffect6","jsxs","useState6","Fragment","jsx34","jsxs16","size","jsx","CollapsibleTrigger","jsx3","CollapsibleContent","DropdownMenuSubTrigger","jsxs2","jsx5","DropdownMenuSubContent","DropdownMenuContent","Portal2","Content2","DropdownMenuItem","Item2","DropdownMenuCheckboxItem","DropdownMenuRadioItem","DropdownMenuLabel","DropdownMenuSeparator","jsx","jsx8","Popover","Root2","PopoverTrigger","Trigger","PopoverContent","jsx9","Portal","Content2","useRef","useEffect","forwardRef5","size","useState","useMemo","jsxs","jsxs3","jsx10","e","jsx11","jsxs4","jsx14","Portal","jsx14","jsxs","jsx","jsxs6","Content","forwardRef8","jsx","jsx15","forwardRef","size","jsxs","jsxs7","jsx16","useEffect","useState2","useEffect2","jsx17","PendingButton","jsx18","jsxs8","Switch","jsx20","Root","jsx","jsx21","Toggle","size","jsx22","Accordion","Root2","AccordionItem","jsx25","Item","AccordionTrigger","Trigger2","AccordionContent","Content2","jsx26","Item","jsxs11","Trigger2","jsxs","Content2","TabsList","jsx31","TabsTrigger","Trigger","TabsContent","Content","Fragment","jsx","jsxs","React","index","React","jsx","jsxs","defaultValue","value","Accordion","React","AccordionItem","AccordionTrigger","AccordionContent","React","useEffect","useState","jsx","HeaderSectionNode","useState","React","useEffect","handleScroll"]}