@alfadocs/ui-kit-debug 0.17.1 → 0.17.3

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 (202) hide show
  1. package/dist/_chunks/{accordion-DOmxGEWU.js → accordion-CNcodXuO.js} +6 -6
  2. package/dist/_chunks/{accordion-DOmxGEWU.js.map → accordion-CNcodXuO.js.map} +1 -1
  3. package/dist/_chunks/{ai-prompt-input-DEiQwIMn.js → ai-prompt-input-B-w5Rx3V.js} +184 -181
  4. package/dist/_chunks/ai-prompt-input-B-w5Rx3V.js.map +1 -0
  5. package/dist/_chunks/{alert-pgdXrEO5.js → alert-DBnawbmf.js} +64 -59
  6. package/dist/_chunks/alert-DBnawbmf.js.map +1 -0
  7. package/dist/_chunks/{audio-recorder-CRh4uyFL.js → audio-recorder-DNkQLW1G.js} +3 -3
  8. package/dist/_chunks/{audio-recorder-CRh4uyFL.js.map → audio-recorder-DNkQLW1G.js.map} +1 -1
  9. package/dist/_chunks/{autocomplete-mOg7WLOh.js → autocomplete-BxfabhZ8.js} +167 -164
  10. package/dist/_chunks/autocomplete-BxfabhZ8.js.map +1 -0
  11. package/dist/_chunks/{balance-cell-renderer-DWWtX-VM.js → balance-cell-renderer-DJB6WDPe.js} +2 -2
  12. package/dist/_chunks/{balance-cell-renderer-DWWtX-VM.js.map → balance-cell-renderer-DJB6WDPe.js.map} +1 -1
  13. package/dist/_chunks/{chat-input-UK-bXU7u.js → chat-input-B3XmFGDw.js} +123 -122
  14. package/dist/_chunks/chat-input-B3XmFGDw.js.map +1 -0
  15. package/dist/_chunks/checkbox-group-Bwmt1ovQ.js +213 -0
  16. package/dist/_chunks/checkbox-group-Bwmt1ovQ.js.map +1 -0
  17. package/dist/_chunks/{checkbox-D5EHnB14.js → checkbox-mwbrPZDY.js} +75 -70
  18. package/dist/_chunks/checkbox-mwbrPZDY.js.map +1 -0
  19. package/dist/_chunks/{collapsible-CuxUBoHJ.js → collapsible-hHiyZp0b.js} +61 -63
  20. package/dist/_chunks/collapsible-hHiyZp0b.js.map +1 -0
  21. package/dist/_chunks/{color-picker-BPfcByHH.js → color-picker-Bm-gzpsh.js} +2 -2
  22. package/dist/_chunks/{color-picker-BPfcByHH.js.map → color-picker-Bm-gzpsh.js.map} +1 -1
  23. package/dist/_chunks/{combobox-D5tWe0t_.js → combobox-Da9eq00i.js} +214 -211
  24. package/dist/_chunks/combobox-Da9eq00i.js.map +1 -0
  25. package/dist/_chunks/{copy-field-BCHAZ8QV.js → copy-field-BAF4mt9h.js} +95 -132
  26. package/dist/_chunks/copy-field-BAF4mt9h.js.map +1 -0
  27. package/dist/_chunks/{date-picker-BlhtBhPo.js → date-picker-BIoSLRly.js} +222 -219
  28. package/dist/_chunks/{date-picker-BlhtBhPo.js.map → date-picker-BIoSLRly.js.map} +1 -1
  29. package/dist/_chunks/{date-range-picker-C2hRu_Ke.js → date-range-picker-9gANFNG9.js} +81 -78
  30. package/dist/_chunks/date-range-picker-9gANFNG9.js.map +1 -0
  31. package/dist/_chunks/{date-time-picker-B67mPZmP.js → date-time-picker-DG7BiGdb.js} +98 -95
  32. package/dist/_chunks/date-time-picker-DG7BiGdb.js.map +1 -0
  33. package/dist/_chunks/{dialog-DRp6Dejy.js → dialog-DUomPCRS.js} +69 -71
  34. package/dist/_chunks/dialog-DUomPCRS.js.map +1 -0
  35. package/dist/_chunks/{dropdown-menu-dyV7gHh_.js → dropdown-menu-DZxwF23X.js} +108 -110
  36. package/dist/_chunks/dropdown-menu-DZxwF23X.js.map +1 -0
  37. package/dist/_chunks/{freemium-paywall-BTEiVkes.js → freemium-paywall-DXc7XlGE.js} +98 -97
  38. package/dist/_chunks/freemium-paywall-DXc7XlGE.js.map +1 -0
  39. package/dist/_chunks/{leo-sidebar-D3TuyH5_.js → leo-sidebar-DIsiTju3.js} +2 -2
  40. package/dist/_chunks/{leo-sidebar-D3TuyH5_.js.map → leo-sidebar-DIsiTju3.js.map} +1 -1
  41. package/dist/_chunks/{list-DcjV0m5B.js → list-BdvDctBz.js} +184 -180
  42. package/dist/_chunks/list-BdvDctBz.js.map +1 -0
  43. package/dist/_chunks/{message-tray-Fsend-du.js → message-tray-BNAS8al4.js} +111 -111
  44. package/dist/_chunks/message-tray-BNAS8al4.js.map +1 -0
  45. package/dist/_chunks/{multi-select-DooDzQIp.js → multi-select-CyspR5ZF.js} +157 -154
  46. package/dist/_chunks/multi-select-CyspR5ZF.js.map +1 -0
  47. package/dist/_chunks/{navigation-menu-DdufF-_4.js → navigation-menu-CyS1fBJ7.js} +85 -87
  48. package/dist/_chunks/navigation-menu-CyS1fBJ7.js.map +1 -0
  49. package/dist/_chunks/{notification-tray-C3dYdLAF.js → notification-tray-D_69dXFY.js} +114 -114
  50. package/dist/_chunks/notification-tray-D_69dXFY.js.map +1 -0
  51. package/dist/_chunks/{number-input-DH00o0DN.js → number-input-BZXu6bPY.js} +92 -89
  52. package/dist/_chunks/number-input-BZXu6bPY.js.map +1 -0
  53. package/dist/_chunks/{otp-input-BBXYvLx5.js → otp-input-BDF_iNpa.js} +92 -93
  54. package/dist/_chunks/otp-input-BDF_iNpa.js.map +1 -0
  55. package/dist/_chunks/{pagination-F1ei4khE.js → pagination-BWaXF7W0.js} +194 -211
  56. package/dist/_chunks/pagination-BWaXF7W0.js.map +1 -0
  57. package/dist/_chunks/{patient-shell-BE0CdPOJ.js → patient-shell-BOOaWZA9.js} +3 -3
  58. package/dist/_chunks/{patient-shell-BE0CdPOJ.js.map → patient-shell-BOOaWZA9.js.map} +1 -1
  59. package/dist/_chunks/{payment-form-CI77oIx1.js → payment-form-BjkuQeqR.js} +2 -2
  60. package/dist/_chunks/{payment-form-CI77oIx1.js.map → payment-form-BjkuQeqR.js.map} +1 -1
  61. package/dist/_chunks/{pdf-viewer-CnEJvmXC.js → pdf-viewer-BG_nsFT5.js} +2 -2
  62. package/dist/_chunks/{pdf-viewer-CnEJvmXC.js.map → pdf-viewer-BG_nsFT5.js.map} +1 -1
  63. package/dist/_chunks/{radio-group-Cz1a4QCA.js → radio-group-BHZOxrIK.js} +4 -4
  64. package/dist/_chunks/{radio-group-Cz1a4QCA.js.map → radio-group-BHZOxrIK.js.map} +1 -1
  65. package/dist/_chunks/{select-Ca6ibiDL.js → select-C92AT_OZ.js} +7 -7
  66. package/dist/_chunks/{select-Ca6ibiDL.js.map → select-C92AT_OZ.js.map} +1 -1
  67. package/dist/_chunks/{sidebar-D8Lq065m.js → sidebar-BqzlRBvC.js} +271 -291
  68. package/dist/_chunks/sidebar-BqzlRBvC.js.map +1 -0
  69. package/dist/_chunks/{slider-CkR6CLun.js → slider-CfEzeseL.js} +4 -4
  70. package/dist/_chunks/{slider-CkR6CLun.js.map → slider-CfEzeseL.js.map} +1 -1
  71. package/dist/_chunks/{tabs-CRCyPpJo.js → tabs-aEQfQV3x.js} +8 -8
  72. package/dist/_chunks/{tabs-CRCyPpJo.js.map → tabs-aEQfQV3x.js.map} +1 -1
  73. package/dist/_chunks/{theme-toggle-B3meAb3y.js → theme-toggle-BswYl0Yp.js} +2 -2
  74. package/dist/_chunks/{theme-toggle-B3meAb3y.js.map → theme-toggle-BswYl0Yp.js.map} +1 -1
  75. package/dist/_chunks/use-controllable-state-BiY4xTzM.js +23 -0
  76. package/dist/_chunks/use-controllable-state-BiY4xTzM.js.map +1 -0
  77. package/dist/_chunks/use-copy-to-clipboard-Cyfc_dlv.js +43 -0
  78. package/dist/_chunks/use-copy-to-clipboard-Cyfc_dlv.js.map +1 -0
  79. package/dist/_chunks/use-debounced-callback-BisrB-Fq.js.map +1 -1
  80. package/dist/_chunks/use-direction-D6rvvG9G.js.map +1 -1
  81. package/dist/_chunks/use-persistent-state-i23OWy6G.js +24 -0
  82. package/dist/_chunks/use-persistent-state-i23OWy6G.js.map +1 -0
  83. package/dist/_chunks/{warning-stack-CeRihME9.js → warning-stack-CDH9TudY.js} +2 -2
  84. package/dist/_chunks/{warning-stack-CeRihME9.js.map → warning-stack-CDH9TudY.js.map} +1 -1
  85. package/dist/_chunks/{workflow-map-D3MvrsZV.js → workflow-map-BeKe23uw.js} +3 -3
  86. package/dist/_chunks/{workflow-map-D3MvrsZV.js.map → workflow-map-BeKe23uw.js.map} +1 -1
  87. package/dist/agent-catalog.json +1 -1
  88. package/dist/components/_shared/use-debounced-callback.d.ts +1 -5
  89. package/dist/components/_shared/use-debounced-callback.d.ts.map +1 -1
  90. package/dist/components/_shared/use-direction.d.ts +1 -18
  91. package/dist/components/_shared/use-direction.d.ts.map +1 -1
  92. package/dist/components/_shared/use-focus-trap.d.ts +1 -31
  93. package/dist/components/_shared/use-focus-trap.d.ts.map +1 -1
  94. package/dist/components/accordion/index.js +1 -1
  95. package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -1
  96. package/dist/components/ai-prompt-input/index.js +1 -1
  97. package/dist/components/alert/alert.d.ts.map +1 -1
  98. package/dist/components/alert/index.js +1 -1
  99. package/dist/components/audio-recorder/index.js +1 -1
  100. package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
  101. package/dist/components/autocomplete/index.js +1 -1
  102. package/dist/components/chat-input/chat-input.d.ts.map +1 -1
  103. package/dist/components/chat-input/index.js +1 -1
  104. package/dist/components/checkbox/checkbox.d.ts.map +1 -1
  105. package/dist/components/checkbox/index.js +1 -1
  106. package/dist/components/checkbox-group/checkbox-group.d.ts.map +1 -1
  107. package/dist/components/checkbox-group/index.js +1 -1
  108. package/dist/components/collapsible/collapsible.d.ts.map +1 -1
  109. package/dist/components/collapsible/index.js +1 -1
  110. package/dist/components/color-picker/index.js +1 -1
  111. package/dist/components/combobox/combobox.d.ts.map +1 -1
  112. package/dist/components/combobox/index.js +1 -1
  113. package/dist/components/command-palette/command-palette.d.ts +1 -1
  114. package/dist/components/copy-field/index.js +1 -1
  115. package/dist/components/data-table/index.js +1 -1
  116. package/dist/components/date-picker/date-picker.d.ts.map +1 -1
  117. package/dist/components/date-picker/index.js +1 -1
  118. package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
  119. package/dist/components/date-range-picker/index.js +1 -1
  120. package/dist/components/date-time-picker/date-time-picker.d.ts.map +1 -1
  121. package/dist/components/date-time-picker/index.js +1 -1
  122. package/dist/components/dialog/dialog.d.ts.map +1 -1
  123. package/dist/components/dialog/index.js +1 -1
  124. package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -1
  125. package/dist/components/dropdown-menu/index.js +1 -1
  126. package/dist/components/freemium-paywall/freemium-paywall.d.ts.map +1 -1
  127. package/dist/components/freemium-paywall/index.js +1 -1
  128. package/dist/components/icon-button-group/icon-button-group.d.ts +14 -14
  129. package/dist/components/list/index.js +1 -1
  130. package/dist/components/list/list.d.ts.map +1 -1
  131. package/dist/components/message-tray/index.js +1 -1
  132. package/dist/components/message-tray/message-tray.d.ts.map +1 -1
  133. package/dist/components/multi-select/index.js +1 -1
  134. package/dist/components/multi-select/multi-select.d.ts.map +1 -1
  135. package/dist/components/navigation-menu/index.js +1 -1
  136. package/dist/components/navigation-menu/navigation-menu.d.ts.map +1 -1
  137. package/dist/components/notification-tray/index.js +1 -1
  138. package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
  139. package/dist/components/number-input/index.js +1 -1
  140. package/dist/components/number-input/number-input.d.ts.map +1 -1
  141. package/dist/components/otp-input/index.js +1 -1
  142. package/dist/components/otp-input/otp-input.d.ts.map +1 -1
  143. package/dist/components/pagination/index.js +1 -1
  144. package/dist/components/payment-form/index.js +1 -1
  145. package/dist/components/pdf-viewer/index.js +1 -1
  146. package/dist/components/radio-group/index.js +1 -1
  147. package/dist/components/select/index.js +1 -1
  148. package/dist/components/sidebar/index.js +8 -7
  149. package/dist/components/sidebar/index.js.map +1 -1
  150. package/dist/components/sidebar/sidebar.d.ts +1 -1
  151. package/dist/components/sidebar/sidebar.d.ts.map +1 -1
  152. package/dist/components/slider/index.js +1 -1
  153. package/dist/components/tabs/index.js +1 -1
  154. package/dist/components/theme-toggle/index.js +1 -1
  155. package/dist/components/warning-stack/index.js +1 -1
  156. package/dist/components/workflow/index.js +1 -1
  157. package/dist/hooks/index.d.ts +8 -0
  158. package/dist/hooks/index.d.ts.map +1 -1
  159. package/dist/hooks/index.js +98 -15
  160. package/dist/hooks/index.js.map +1 -1
  161. package/dist/hooks/use-debounced-callback.d.ts +19 -0
  162. package/dist/hooks/use-debounced-callback.d.ts.map +1 -0
  163. package/dist/hooks/use-debounced-value.d.ts +16 -0
  164. package/dist/hooks/use-debounced-value.d.ts.map +1 -0
  165. package/dist/hooks/use-direction.d.ts +19 -0
  166. package/dist/hooks/use-direction.d.ts.map +1 -0
  167. package/dist/hooks/use-focus-trap.d.ts +32 -0
  168. package/dist/hooks/use-focus-trap.d.ts.map +1 -0
  169. package/dist/hooks/use-isomorphic-layout-effect.d.ts +13 -0
  170. package/dist/hooks/use-isomorphic-layout-effect.d.ts.map +1 -0
  171. package/dist/hooks/use-persistent-state.d.ts +16 -0
  172. package/dist/hooks/use-persistent-state.d.ts.map +1 -0
  173. package/dist/index.js +493 -492
  174. package/dist/index.js.map +1 -1
  175. package/dist/patterns/leo-assistant/index.js +1 -1
  176. package/dist/patterns/patient-shell/index.js +1 -1
  177. package/dist/tokens.css +1 -1
  178. package/package.json +4 -2
  179. package/dist/_chunks/ai-prompt-input-DEiQwIMn.js.map +0 -1
  180. package/dist/_chunks/alert-pgdXrEO5.js.map +0 -1
  181. package/dist/_chunks/autocomplete-mOg7WLOh.js.map +0 -1
  182. package/dist/_chunks/chat-input-UK-bXU7u.js.map +0 -1
  183. package/dist/_chunks/checkbox-D5EHnB14.js.map +0 -1
  184. package/dist/_chunks/checkbox-group-Qkm3Rg1S.js +0 -208
  185. package/dist/_chunks/checkbox-group-Qkm3Rg1S.js.map +0 -1
  186. package/dist/_chunks/collapsible-CuxUBoHJ.js.map +0 -1
  187. package/dist/_chunks/combobox-D5tWe0t_.js.map +0 -1
  188. package/dist/_chunks/copy-field-BCHAZ8QV.js.map +0 -1
  189. package/dist/_chunks/date-range-picker-C2hRu_Ke.js.map +0 -1
  190. package/dist/_chunks/date-time-picker-B67mPZmP.js.map +0 -1
  191. package/dist/_chunks/dialog-DRp6Dejy.js.map +0 -1
  192. package/dist/_chunks/dropdown-menu-dyV7gHh_.js.map +0 -1
  193. package/dist/_chunks/freemium-paywall-BTEiVkes.js.map +0 -1
  194. package/dist/_chunks/list-DcjV0m5B.js.map +0 -1
  195. package/dist/_chunks/message-tray-Fsend-du.js.map +0 -1
  196. package/dist/_chunks/multi-select-DooDzQIp.js.map +0 -1
  197. package/dist/_chunks/navigation-menu-DdufF-_4.js.map +0 -1
  198. package/dist/_chunks/notification-tray-C3dYdLAF.js.map +0 -1
  199. package/dist/_chunks/number-input-DH00o0DN.js.map +0 -1
  200. package/dist/_chunks/otp-input-BBXYvLx5.js.map +0 -1
  201. package/dist/_chunks/pagination-F1ei4khE.js.map +0 -1
  202. package/dist/_chunks/sidebar-D8Lq065m.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-menu-DZxwF23X.js","sources":["../../src/components/dropdown-menu/dropdown-menu.agent.ts","../../src/components/dropdown-menu/dropdown-menu.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { DropdownMenuHandle } from './dropdown-menu';\n\nexport const dropdownMenuAgent: AgentAdapter<DropdownMenuHandle> = {\n id: 'dropdown-menu',\n capabilities: ['open', 'close', 'pick'],\n state: {\n isOpen: {\n type: 'boolean',\n description: 'True when the menu is currently open.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n open: {\n safety: 'read',\n description: 'Open the menu.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n description: 'Close the menu.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'dropdown-menu' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop on DropdownMenu.Root.',\n },\n item: {\n attr: 'data-item-id',\n description: 'Each menu item emits its value as data-item-id.',\n },\n },\n};\n","import {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useMemo,\n useRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport * as RadixDropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Check, ChevronRight } from 'lucide-react';\nimport { Separator as DsSeparator } from '../separator/separator';\nimport { Kbd, type KbdNamedKey } from '../kbd/kbd';\nimport { useDocumentDirection } from '../_shared/use-direction';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useAgentRegistration } from '../../agent';\nimport { dropdownMenuAgent } from './dropdown-menu.agent';\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst contentVariants = cva(\n [\n 'ds:z-[var(--z-dropdown)]',\n 'ds:min-w-[8rem]',\n 'ds:rounded-[var(--radius-md)]',\n // Border kept (transparent) so the forced-colors override below can\n // repaint a visible edge in HCM. In normal modes the soft drop-shadow\n // carries the edge cue; the heavy `--border` (grey-800 since WCAG\n // 1.4.11 bump in 67fef8c) made the menu read as a charcoal box.\n 'ds:border ds:border-transparent',\n 'ds:bg-[var(--popover)] ds:text-[color:var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:p-[var(--spacing-xs)]',\n // Motion — gated on --animation-duration via Tailwind's animate-in\n // preset. motion-reduce disables via the no-preference query.\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:fade-in ds:data-[state=closed]:fade-out',\n 'ds:data-[state=open]:zoom-in-95 ds:data-[state=closed]:zoom-out-95',\n 'ds:motion-reduce:animate-none',\n 'ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n);\n\nconst itemClasses = cva(\n [\n 'ds:relative ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:text-[length:var(--font-size-sm)] ds:text-[color:var(--foreground)]',\n 'ds:cursor-pointer ds:select-none ds:outline-none',\n // Highlighted + hover state\n 'ds:data-[highlighted]:bg-[color:var(--muted)]/40',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n // Disabled\n 'ds:data-[disabled]:opacity-50 ds:data-[disabled]:cursor-not-allowed',\n 'ds:data-[disabled]:pointer-events-none',\n ].join(' '),\n);\n\nconst labelClasses = cva(\n [\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'type-eyebrow ds:text-[color:var(--muted-foreground)]',\n 'ds:select-none',\n ].join(' '),\n);\n\nconst indicatorSlotClasses =\n 'ds:inline-flex ds:items-center ds:justify-center ds:size-4 ds:shrink-0';\n\n/* ------------------------------------------------------------------ */\n/* Root / Trigger / Portal */\n/* ------------------------------------------------------------------ */\n\n// Curated agent-readiness handle — see dropdown-menu.agent.ts.\nexport interface DropdownMenuHandle {\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n}\n\nexport interface DropdownMenuRootProps extends ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.Root\n> {\n /** Opaque instance id — forwarded to DropdownMenu.Content as `data-component-id`. */\n id?: string;\n}\n\nconst DropdownMenuIdContext = createContext<string | undefined>(undefined);\n\nconst Root = ({\n dir,\n id,\n open: openProp,\n defaultOpen,\n onOpenChange,\n ...props\n}: DropdownMenuRootProps) => {\n const autoDir = useDocumentDirection();\n const [openRaw, setOpen] = useControllableState<boolean>({\n value: openProp,\n defaultValue: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n const open = openRaw ?? false;\n\n const openRef = useRef(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n\n const handle = useMemo<DropdownMenuHandle>(\n () => ({\n getIsOpen: () => openRef.current,\n open: () => setOpen(true),\n close: () => setOpen(false),\n }),\n [setOpen],\n );\n useAgentRegistration(dropdownMenuAgent, handle, id);\n\n return (\n <DropdownMenuIdContext.Provider value={id}>\n <RadixDropdownMenu.Root\n dir={dir ?? autoDir}\n open={open}\n onOpenChange={setOpen}\n {...props}\n />\n </DropdownMenuIdContext.Provider>\n );\n};\nRoot.displayName = 'DropdownMenu.Root';\n\nconst Trigger = RadixDropdownMenu.Trigger;\nconst Portal = RadixDropdownMenu.Portal;\nconst RadixGroup = RadixDropdownMenu.Group;\nconst RadixRadioGroup = RadixDropdownMenu.RadioGroup;\n\n/* ------------------------------------------------------------------ */\n/* Content */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuContentProps\n extends\n ComponentPropsWithoutRef<typeof RadixDropdownMenu.Content>,\n VariantProps<typeof contentVariants> {}\n\nconst Content = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Content>,\n DropdownMenuContentProps\n>(({ className, sideOffset = 8, ...props }, ref) => {\n const instanceId = useContext(DropdownMenuIdContext);\n return (\n <RadixDropdownMenu.Portal>\n <RadixDropdownMenu.Content\n ref={ref}\n sideOffset={sideOffset}\n className={contentVariants({ className })}\n data-component=\"dropdown-menu\"\n data-component-id={instanceId}\n {...props}\n />\n </RadixDropdownMenu.Portal>\n );\n});\nContent.displayName = 'DropdownMenu.Content';\n\n/* ------------------------------------------------------------------ */\n/* Item */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuItemProps extends ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.Item\n> {\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n description?: ReactNode;\n /** Convenience — renders a DS <Kbd keys={…}> on the inline-end. */\n shortcut?: Array<KbdNamedKey | string>;\n}\n\nconst Item = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Item>,\n DropdownMenuItemProps\n>(\n (\n {\n className,\n startIcon,\n endIcon,\n description,\n shortcut,\n children,\n ...props\n },\n ref,\n ) => (\n <RadixDropdownMenu.Item\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n {startIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {startIcon}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:flex ds:flex-col ds:min-w-0\">\n <span className=\"ds:truncate\">{children}</span>\n {description ? (\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)] ds:truncate\">\n {description}\n </span>\n ) : null}\n </span>\n {shortcut ? (\n <span className=\"ds:ms-auto\">\n <Kbd keys={shortcut} size=\"sm\" />\n </span>\n ) : endIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:ms-auto ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {endIcon}\n </span>\n ) : null}\n </RadixDropdownMenu.Item>\n ),\n);\nItem.displayName = 'DropdownMenu.Item';\n\n/* ------------------------------------------------------------------ */\n/* CheckboxItem */\n/* ------------------------------------------------------------------ */\n\nexport type DropdownMenuCheckboxItemProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.CheckboxItem\n>;\n\nconst CheckboxItem = forwardRef<\n ElementRef<typeof RadixDropdownMenu.CheckboxItem>,\n DropdownMenuCheckboxItemProps\n>(({ className, children, ...props }, ref) => (\n <RadixDropdownMenu.CheckboxItem\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n <span className={indicatorSlotClasses}>\n <RadixDropdownMenu.ItemIndicator>\n <Check aria-hidden className=\"ds:size-4\" />\n </RadixDropdownMenu.ItemIndicator>\n </span>\n <span className=\"ds:flex-1 ds:truncate\">{children}</span>\n </RadixDropdownMenu.CheckboxItem>\n));\nCheckboxItem.displayName = 'DropdownMenu.CheckboxItem';\n\n/* ------------------------------------------------------------------ */\n/* RadioGroup / RadioItem */\n/* ------------------------------------------------------------------ */\n\nconst RadioGroup = RadixRadioGroup;\n\nexport type DropdownMenuRadioItemProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.RadioItem\n>;\n\nconst RadioItem = forwardRef<\n ElementRef<typeof RadixDropdownMenu.RadioItem>,\n DropdownMenuRadioItemProps\n>(({ className, children, ...props }, ref) => (\n <RadixDropdownMenu.RadioItem\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n <span className={indicatorSlotClasses}>\n <RadixDropdownMenu.ItemIndicator>\n <Check\n aria-hidden\n className=\"ds:size-4 ds:text-[color:var(--accent)]\"\n />\n </RadixDropdownMenu.ItemIndicator>\n </span>\n <span className=\"ds:flex-1 ds:truncate\">{children}</span>\n </RadixDropdownMenu.RadioItem>\n));\nRadioItem.displayName = 'DropdownMenu.RadioItem';\n\n/* ------------------------------------------------------------------ */\n/* Label */\n/* ------------------------------------------------------------------ */\n\nexport type DropdownMenuLabelProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.Label\n>;\n\nconst Label = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Label>,\n DropdownMenuLabelProps\n>(({ className, ...props }, ref) => (\n <RadixDropdownMenu.Label\n ref={ref}\n className={labelClasses({ className })}\n {...props}\n />\n));\nLabel.displayName = 'DropdownMenu.Label';\n\n/* ------------------------------------------------------------------ */\n/* Separator */\n/* ------------------------------------------------------------------ */\n\nexport type DropdownMenuSeparatorProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.Separator\n>;\n\nconst MenuSeparator = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Separator>,\n DropdownMenuSeparatorProps\n>(({ className, ...props }, ref) => (\n <RadixDropdownMenu.Separator ref={ref} asChild {...props}>\n <DsSeparator\n className={['ds:my-[calc(var(--spacing-xs)/2)]', className ?? '']\n .filter(Boolean)\n .join(' ')}\n />\n </RadixDropdownMenu.Separator>\n));\nMenuSeparator.displayName = 'DropdownMenu.Separator';\n\n/* ------------------------------------------------------------------ */\n/* Shortcut — thin wrapper over DS Kbd for the right side of an Item */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuShortcutProps {\n keys: Array<KbdNamedKey | string>;\n separator?: 'none' | 'plus' | 'then';\n}\n\nconst Shortcut = forwardRef<HTMLSpanElement, DropdownMenuShortcutProps>(\n ({ keys, separator = 'none' }, ref) => (\n <span ref={ref} className=\"ds:ms-auto ds:ps-[var(--spacing-sm)]\">\n <Kbd keys={keys} separator={separator} size=\"sm\" />\n </span>\n ),\n);\nShortcut.displayName = 'DropdownMenu.Shortcut';\n\n/* ------------------------------------------------------------------ */\n/* Sub-menu */\n/* ------------------------------------------------------------------ */\n\nconst Sub = RadixDropdownMenu.Sub;\n\nexport interface DropdownMenuSubTriggerProps extends ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.SubTrigger\n> {\n startIcon?: ReactNode;\n}\n\nconst SubTrigger = forwardRef<\n ElementRef<typeof RadixDropdownMenu.SubTrigger>,\n DropdownMenuSubTriggerProps\n>(({ className, startIcon, children, ...props }, ref) => (\n <RadixDropdownMenu.SubTrigger\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n {startIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {startIcon}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:truncate\">{children}</span>\n <ChevronRight\n aria-hidden\n className=\"ds:ms-auto ds:size-4 ds:shrink-0 ds:rtl:-scale-x-100\"\n />\n </RadixDropdownMenu.SubTrigger>\n));\nSubTrigger.displayName = 'DropdownMenu.SubTrigger';\n\nexport type DropdownMenuSubContentProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.SubContent\n>;\n\nconst SubContent = forwardRef<\n ElementRef<typeof RadixDropdownMenu.SubContent>,\n DropdownMenuSubContentProps\n>(({ className, ...props }, ref) => (\n <RadixDropdownMenu.Portal>\n <RadixDropdownMenu.SubContent\n ref={ref}\n sideOffset={8}\n data-component=\"dropdown-menu-sub-content\"\n className={contentVariants({ className })}\n {...props}\n />\n </RadixDropdownMenu.Portal>\n));\nSubContent.displayName = 'DropdownMenu.SubContent';\n\n/* ------------------------------------------------------------------ */\n/* Assembled namespace export */\n/* ------------------------------------------------------------------ */\n\nexport const DropdownMenu = {\n Root,\n Trigger,\n Portal,\n Content,\n Group: RadixGroup,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n Label,\n Separator: MenuSeparator,\n Shortcut,\n Sub,\n SubTrigger,\n SubContent,\n};\n"],"names":["dropdownMenuAgent","handle","contentVariants","cva","itemClasses","labelClasses","indicatorSlotClasses","DropdownMenuIdContext","createContext","Root","dir","id","openProp","defaultOpen","onOpenChange","props","autoDir","useDocumentDirection","openRaw","setOpen","useControllableState","open","openRef","useRef","useEffect","useMemo","useAgentRegistration","jsx","RadixDropdownMenu","Trigger","Portal","RadixGroup","RadixRadioGroup","Content","forwardRef","className","sideOffset","ref","instanceId","useContext","Item","startIcon","endIcon","description","shortcut","children","jsxs","Kbd","CheckboxItem","Check","RadioGroup","RadioItem","Label","MenuSeparator","DsSeparator","Shortcut","keys","separator","Sub","SubTrigger","ChevronRight","SubContent","DropdownMenu"],"mappings":"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"}
@@ -1,16 +1,17 @@
1
1
  import { jsx as e, jsxs as d } from "react/jsx-runtime";
2
- import { forwardRef as J, useId as R, useState as Q, useRef as m, useImperativeHandle as W, useMemo as X } from "react";
2
+ import { forwardRef as G, useId as P, useRef as c, useImperativeHandle as E, useMemo as J } from "react";
3
3
  import * as i from "@radix-ui/react-alert-dialog";
4
- import * as K from "@radix-ui/react-radio-group";
5
- import { c as Y } from "./index-D2ZczOXr.js";
6
- import { useTranslation as Z } from "react-i18next";
7
- import { u as $ } from "./registry-C9nwlNyL.js";
8
- import { B as j } from "./button-DD_0Xdmr.js";
9
- import { P as ee } from "./progress-B-PSO5OS.js";
10
- import { f as se } from "./payment-form-CI77oIx1.js";
11
- import { T as ae } from "./triangle-alert-CBPUIzQo.js";
12
- import { C as re } from "./check-DPdL_Sm7.js";
13
- const te = {
4
+ import * as I from "@radix-ui/react-radio-group";
5
+ import { c as Q } from "./index-D2ZczOXr.js";
6
+ import { useTranslation as W } from "react-i18next";
7
+ import { u as X } from "./use-controllable-state-BiY4xTzM.js";
8
+ import { u as Y } from "./registry-C9nwlNyL.js";
9
+ import { B as R } from "./button-DD_0Xdmr.js";
10
+ import { P as Z } from "./progress-B-PSO5OS.js";
11
+ import { f as $ } from "./payment-form-BjkuQeqR.js";
12
+ import { T as ee } from "./triangle-alert-CBPUIzQo.js";
13
+ import { C as se } from "./check-DPdL_Sm7.js";
14
+ const ae = {
14
15
  id: "freemium-paywall",
15
16
  capabilities: ["submit", "dismiss"],
16
17
  state: {
@@ -18,13 +19,13 @@ const te = {
18
19
  type: "boolean",
19
20
  descriptionKey: "ui.agent.freemiumPaywall.state.isOpen",
20
21
  description: "True when the paywall dialog is open.",
21
- read: (r) => r.isOpen()
22
+ read: (a) => a.isOpen()
22
23
  },
23
24
  selectedPlanId: {
24
25
  type: "string | null",
25
26
  descriptionKey: "ui.agent.freemiumPaywall.state.selectedPlanId",
26
27
  description: "Opaque id of the currently-selected plan.",
27
- read: (r) => r.getSelectedPlanId()
28
+ read: (a) => a.getSelectedPlanId()
28
29
  }
29
30
  },
30
31
  actions: {
@@ -32,16 +33,16 @@ const te = {
32
33
  safety: "write",
33
34
  descriptionKey: "ui.agent.freemiumPaywall.actions.upgrade",
34
35
  description: "Fire onUpgrade with the currently-selected plan id.",
35
- invoke: (r) => {
36
- r.upgrade();
36
+ invoke: (a) => {
37
+ a.upgrade();
37
38
  }
38
39
  },
39
40
  dismiss: {
40
41
  safety: "destructive",
41
42
  descriptionKey: "ui.agent.freemiumPaywall.actions.dismiss",
42
43
  description: "Dismiss the paywall via the Not Now action. Irreversible from the same UI.",
43
- invoke: (r) => {
44
- r.dismiss();
44
+ invoke: (a) => {
45
+ a.dismiss();
45
46
  }
46
47
  }
47
48
  },
@@ -57,7 +58,7 @@ const te = {
57
58
  description: "Sourced from the id prop."
58
59
  }
59
60
  }
60
- }, de = Y(
61
+ }, re = Q(
61
62
  [
62
63
  "ds:fixed ds:z-[var(--z-modal)] ds:overflow-auto",
63
64
  "ds:bg-[color:var(--popover)] ds:text-[color:var(--popover-foreground)]",
@@ -80,54 +81,54 @@ const te = {
80
81
  },
81
82
  defaultVariants: { layout: "centered", density: "full" }
82
83
  }
83
- ), ie = J(
84
+ ), te = G(
84
85
  ({
85
- open: r,
86
- onOpenChange: p,
87
- plans: u,
88
- selectedPlanId: f,
89
- defaultSelectedPlanId: A,
90
- onSelectedPlanChange: n,
91
- usage: t,
92
- onUpgrade: F,
93
- onCancel: c,
94
- title: z,
95
- description: C,
96
- layout: T = "centered",
97
- density: M = "full",
98
- className: O
99
- }, L) => {
100
- var P;
101
- const { t: s, i18n: S } = Z(), v = R(), g = R(), h = f !== void 0, [D, H] = Q(
102
- A ?? ((P = u[0]) == null ? void 0 : P.id) ?? ""
103
- ), l = h ? f ?? "" : D, U = (a) => {
104
- h || H(a), n == null || n(a);
105
- }, y = () => {
106
- c == null || c(), p(!1);
107
- }, b = () => {
108
- l && F(l);
109
- }, x = m(r);
110
- x.current = r;
111
- const w = m(l);
112
- w.current = l;
113
- const N = m(null);
114
- W(L, () => N.current, []);
115
- const V = X(
86
+ open: a,
87
+ onOpenChange: m,
88
+ plans: p,
89
+ selectedPlanId: k,
90
+ defaultSelectedPlanId: C,
91
+ onSelectedPlanChange: K,
92
+ usage: r,
93
+ onUpgrade: j,
94
+ onCancel: n,
95
+ title: A,
96
+ description: F,
97
+ layout: S = "centered",
98
+ density: z = "full",
99
+ className: T
100
+ }, M) => {
101
+ var x;
102
+ const { t: s, i18n: O } = W(), u = P(), f = P(), [L, V] = X({
103
+ value: k,
104
+ defaultValue: C ?? ((x = p[0]) == null ? void 0 : x.id) ?? "",
105
+ onChange: K
106
+ }), l = L ?? "", v = () => {
107
+ n == null || n(), m(!1);
108
+ }, g = () => {
109
+ l && j(l);
110
+ }, h = c(a);
111
+ h.current = a;
112
+ const y = c(l);
113
+ y.current = l;
114
+ const b = c(null);
115
+ E(M, () => b.current, []);
116
+ const D = J(
116
117
  () => ({
117
- isOpen: () => x.current,
118
- getSelectedPlanId: () => w.current || null,
119
- upgrade: () => b(),
120
- dismiss: () => y()
118
+ isOpen: () => h.current,
119
+ getSelectedPlanId: () => y.current || null,
120
+ upgrade: () => g(),
121
+ dismiss: () => v()
121
122
  }),
122
123
  // eslint-disable-next-line react-hooks/exhaustive-deps
123
124
  []
124
125
  );
125
- $(te, V, void 0);
126
- const B = t ? Math.min(
126
+ Y(ae, D, void 0);
127
+ const H = r ? Math.min(
127
128
  100,
128
- Math.max(0, t.used / Math.max(1, t.limit) * 100)
129
- ) : 0, o = t ? t.used >= t.limit : !1;
130
- return /* @__PURE__ */ e(i.Root, { open: r, onOpenChange: p, children: /* @__PURE__ */ d(i.Portal, { children: [
129
+ Math.max(0, r.used / Math.max(1, r.limit) * 100)
130
+ ) : 0, o = r ? r.used >= r.limit : !1;
131
+ return /* @__PURE__ */ e(i.Root, { open: a, onOpenChange: m, children: /* @__PURE__ */ d(i.Portal, { children: [
131
132
  /* @__PURE__ */ e(
132
133
  i.Overlay,
133
134
  {
@@ -142,18 +143,18 @@ const te = {
142
143
  /* @__PURE__ */ d(
143
144
  i.Content,
144
145
  {
145
- ref: N,
146
- "aria-labelledby": v,
147
- "aria-describedby": g,
148
- className: de({ layout: T, density: M, className: O }),
146
+ ref: b,
147
+ "aria-labelledby": u,
148
+ "aria-describedby": f,
149
+ className: re({ layout: S, density: z, className: T }),
149
150
  "data-component": "freemium-paywall",
150
151
  children: [
151
- /* @__PURE__ */ e(i.Title, { id: v, asChild: !0, children: /* @__PURE__ */ e("h2", { className: "type-title-card", children: z ?? s("paywall.title") }) }),
152
- /* @__PURE__ */ e(i.Description, { id: g, asChild: !0, children: /* @__PURE__ */ e("p", { className: "ds:mt-[var(--spacing-xs)] ds:text-[color:var(--muted-foreground)]", children: C ?? s("paywall.description") }) }),
153
- t ? /* @__PURE__ */ d("div", { className: "ds:mt-[var(--spacing-md)]", children: [
152
+ /* @__PURE__ */ e(i.Title, { id: u, asChild: !0, children: /* @__PURE__ */ e("h2", { className: "type-title-card", children: A ?? s("paywall.title") }) }),
153
+ /* @__PURE__ */ e(i.Description, { id: f, asChild: !0, children: /* @__PURE__ */ e("p", { className: "ds:mt-[var(--spacing-xs)] ds:text-[color:var(--muted-foreground)]", children: F ?? s("paywall.description") }) }),
154
+ r ? /* @__PURE__ */ d("div", { className: "ds:mt-[var(--spacing-md)]", children: [
154
155
  /* @__PURE__ */ d("div", { className: "ds:flex ds:items-center ds:gap-[var(--spacing-xs)] ds:mb-[var(--spacing-xs)]", children: [
155
156
  o ? /* @__PURE__ */ e(
156
- ae,
157
+ ee,
157
158
  {
158
159
  "aria-hidden": "true",
159
160
  className: "ds:size-4 ds:text-[color:var(--destructive)]"
@@ -167,42 +168,42 @@ const te = {
167
168
  o ? "ds:text-[color:var(--destructive)]" : "ds:text-[color:var(--muted-foreground)]"
168
169
  ].join(" "),
169
170
  children: o ? s("paywall.usageFull") : s("paywall.usageLabel", {
170
- used: t.used,
171
- limit: t.limit
171
+ used: r.used,
172
+ limit: r.limit
172
173
  })
173
174
  }
174
175
  )
175
176
  ] }),
176
177
  /* @__PURE__ */ e(
177
- ee,
178
+ Z,
178
179
  {
179
- value: B,
180
+ value: H,
180
181
  max: 100,
181
182
  ariaLabel: s("paywall.usageLabel", {
182
- used: t.used,
183
- limit: t.limit
183
+ used: r.used,
184
+ limit: r.limit
184
185
  }),
185
186
  className: o ? "ds:[&_[role=progressbar]>*]:bg-[color:var(--destructive)]" : ""
186
187
  }
187
188
  )
188
189
  ] }) : null,
189
190
  /* @__PURE__ */ e(
190
- K.Root,
191
+ I.Root,
191
192
  {
192
193
  value: l,
193
- onValueChange: U,
194
+ onValueChange: V,
194
195
  "aria-label": s("paywall.title"),
195
196
  className: "ds:mt-[var(--spacing-md)] ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]",
196
- children: u.map((a) => {
197
- const I = se(
198
- a.priceAmount,
199
- a.currency,
200
- S.language
201
- ), k = a.perKey ? s(a.perKey) : void 0, _ = k ? s("paywall.pricePer", { price: I, period: k }) : I, q = s(a.nameKey);
197
+ children: p.map((t) => {
198
+ const w = $(
199
+ t.priceAmount,
200
+ t.currency,
201
+ O.language
202
+ ), N = t.perKey ? s(t.perKey) : void 0, U = N ? s("paywall.pricePer", { price: w, period: N }) : w, B = s(t.nameKey);
202
203
  return /* @__PURE__ */ d(
203
- K.Item,
204
+ I.Item,
204
205
  {
205
- value: a.id,
206
+ value: t.id,
206
207
  className: [
207
208
  "ds:group ds:relative ds:flex ds:flex-col ds:items-stretch",
208
209
  "ds:rounded-[var(--radius-md)] ds:border ds:border-border",
@@ -215,43 +216,43 @@ const te = {
215
216
  ].join(" "),
216
217
  children: [
217
218
  /* @__PURE__ */ d("span", { className: "ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]", children: [
218
- /* @__PURE__ */ e("span", { className: "ds:font-semibold", children: q }),
219
- /* @__PURE__ */ e("span", { className: "ds:tabular-nums", children: _ })
219
+ /* @__PURE__ */ e("span", { className: "ds:font-semibold", children: B }),
220
+ /* @__PURE__ */ e("span", { className: "ds:tabular-nums", children: U })
220
221
  ] }),
221
- a.featuresKeys && a.featuresKeys.length > 0 ? /* @__PURE__ */ e(
222
+ t.featuresKeys && t.featuresKeys.length > 0 ? /* @__PURE__ */ e(
222
223
  "ul",
223
224
  {
224
225
  "aria-label": s("paywall.features"),
225
226
  className: "ds:mt-[var(--spacing-xs)] ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]",
226
- children: a.featuresKeys.map((G, E) => /* @__PURE__ */ d(
227
+ children: t.featuresKeys.map((_, q) => /* @__PURE__ */ d(
227
228
  "li",
228
229
  {
229
230
  className: "ds:flex ds:items-start ds:gap-[var(--spacing-xs)] type-body-sm",
230
231
  children: [
231
232
  /* @__PURE__ */ e(
232
- re,
233
+ se,
233
234
  {
234
235
  "aria-hidden": "true",
235
236
  className: "ds:size-4 ds:shrink-0 ds:text-[color:var(--primary)] ds:mt-[1px]"
236
237
  }
237
238
  ),
238
- /* @__PURE__ */ e("span", { children: s(G) })
239
+ /* @__PURE__ */ e("span", { children: s(_) })
239
240
  ]
240
241
  },
241
- E
242
+ q
242
243
  ))
243
244
  }
244
245
  ) : null
245
246
  ]
246
247
  },
247
- a.id
248
+ t.id
248
249
  );
249
250
  })
250
251
  }
251
252
  ),
252
253
  /* @__PURE__ */ d("div", { className: "ds:mt-[var(--spacing-lg)] ds:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:justify-end", children: [
253
- /* @__PURE__ */ e(i.Cancel, { asChild: !0, children: /* @__PURE__ */ e(j, { intent: "outline", onClick: y, children: s("paywall.notNow") }) }),
254
- /* @__PURE__ */ e(i.Action, { asChild: !0, children: /* @__PURE__ */ e(j, { intent: "primary", onClick: b, children: s("paywall.upgrade") }) })
254
+ /* @__PURE__ */ e(i.Cancel, { asChild: !0, children: /* @__PURE__ */ e(R, { intent: "outline", onClick: v, children: s("paywall.notNow") }) }),
255
+ /* @__PURE__ */ e(i.Action, { asChild: !0, children: /* @__PURE__ */ e(R, { intent: "primary", onClick: g, children: s("paywall.upgrade") }) })
255
256
  ] })
256
257
  ]
257
258
  }
@@ -259,9 +260,9 @@ const te = {
259
260
  ] }) });
260
261
  }
261
262
  );
262
- ie.displayName = "FreemiumPaywall";
263
+ te.displayName = "FreemiumPaywall";
263
264
  export {
264
- ie as F,
265
- te as f
265
+ te as F,
266
+ ae as f
266
267
  };
267
- //# sourceMappingURL=freemium-paywall-BTEiVkes.js.map
268
+ //# sourceMappingURL=freemium-paywall-DXc7XlGE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freemium-paywall-DXc7XlGE.js","sources":["../../src/components/freemium-paywall/freemium-paywall.agent.ts","../../src/components/freemium-paywall/freemium-paywall.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — FreemiumPaywall. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { FreemiumPaywallHandle } from './freemium-paywall';\n\nexport const freemiumPaywallAgent: AgentAdapter<FreemiumPaywallHandle> = {\n id: 'freemium-paywall',\n capabilities: ['submit', 'dismiss'],\n state: {\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.freemiumPaywall.state.isOpen',\n description: 'True when the paywall dialog is open.',\n read: (handle) => handle.isOpen(),\n },\n selectedPlanId: {\n type: 'string | null',\n descriptionKey: 'ui.agent.freemiumPaywall.state.selectedPlanId',\n description: 'Opaque id of the currently-selected plan.',\n read: (handle) => handle.getSelectedPlanId(),\n },\n },\n actions: {\n upgrade: {\n safety: 'write',\n descriptionKey: 'ui.agent.freemiumPaywall.actions.upgrade',\n description: 'Fire onUpgrade with the currently-selected plan id.',\n invoke: (handle) => {\n handle.upgrade();\n },\n },\n dismiss: {\n safety: 'destructive',\n descriptionKey: 'ui.agent.freemiumPaywall.actions.dismiss',\n description:\n 'Dismiss the paywall via the Not Now action. Irreversible from the same UI.',\n invoke: (handle) => {\n handle.dismiss();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'freemium-paywall',\n description: 'Marks the FreemiumPaywall dialog content.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n type ReactNode,\n} from 'react';\nimport * as RadixAlertDialog from '@radix-ui/react-alert-dialog';\nimport * as RadixRadioGroup from '@radix-ui/react-radio-group';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { freemiumPaywallAgent } from './freemium-paywall.agent';\nimport { AlertTriangle, Check } from 'lucide-react';\nimport { Button } from '../button';\nimport { Progress } from '../progress';\nimport { formatPaymentAmount } from '../payment-form';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface FreemiumPlan {\n id: string;\n /** Translation key for the plan name (e.g. `app.paywall.plans.pro`). */\n nameKey: string;\n /** Amount in minor units (cents, centesimi). */\n priceAmount: number;\n /** ISO 4217 currency code. */\n currency: string;\n /** Translation key for the cadence suffix (e.g. `app.paywall.period.month`). */\n perKey?: string;\n /** Per-line feature translation keys. */\n featuresKeys?: string[];\n}\n\nconst contentVariants = cva(\n [\n 'ds:fixed ds:z-[var(--z-modal)] ds:overflow-auto',\n 'ds:bg-[color:var(--popover)] ds:text-[color:var(--popover-foreground)]',\n 'ds:border ds:border-border ds:shadow-[var(--shadow-lg)]',\n // forced-colors: keep the dialog boundary visible under Windows High\n // Contrast, where `var(--border)` may collapse to system colours.\n 'ds:forced-colors:border-[CanvasText]',\n 'ds:focus:outline-none',\n ].join(' '),\n {\n variants: {\n layout: {\n centered:\n 'ds:start-1/2 ds:top-1/2 ds:-translate-x-1/2 ds:-translate-y-1/2 ds:rtl:translate-x-1/2 ds:rounded-[var(--radius-md)] ds:max-w-[var(--dialog-width-xl)] ds:w-[calc(100vw-2rem)] ds:max-h-[90vh]',\n sheet:\n 'ds:inset-inline-0 ds:bottom-0 ds:w-full ds:max-h-[90vh] ds:rounded-t-[var(--radius-md)]',\n },\n density: {\n compact:\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-md)] ds:pb-[var(--spacing-md)]',\n full: 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:pt-[var(--spacing-lg)] ds:pb-[var(--spacing-lg)]',\n },\n },\n defaultVariants: { layout: 'centered', density: 'full' },\n },\n);\n\n/** Curated imperative handle for agent / external automation. */\nexport interface FreemiumPaywallHandle {\n isOpen: () => boolean;\n getSelectedPlanId: () => string | null;\n upgrade: () => void;\n dismiss: () => void;\n}\n\nexport interface FreemiumPaywallProps extends VariantProps<\n typeof contentVariants\n> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n plans: FreemiumPlan[];\n /** Currently-selected plan id (controlled) or default. */\n selectedPlanId?: string;\n defaultSelectedPlanId?: string;\n onSelectedPlanChange?: (id: string) => void;\n /** Usage indicator values — omit the object to hide the bar. */\n usage?: { used: number; limit: number };\n /** Fires on upgrade. */\n onUpgrade: (planId: string) => void;\n /** Fires when the user dismisses via Not Now. */\n onCancel?: () => void;\n /** Title override; defaults to t('paywall.title'). */\n title?: ReactNode;\n /** Description override; defaults to t('paywall.description'). */\n description?: ReactNode;\n className?: string;\n}\n\nexport const FreemiumPaywall = forwardRef<HTMLDivElement, FreemiumPaywallProps>(\n (\n {\n open,\n onOpenChange,\n plans,\n selectedPlanId,\n defaultSelectedPlanId,\n onSelectedPlanChange,\n usage,\n onUpgrade,\n onCancel,\n title,\n description,\n layout = 'centered',\n density = 'full',\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const titleId = useId();\n const descId = useId();\n\n const [currentSelectedRaw, handleSelectedChange] = useControllableState<\n string\n >({\n value: selectedPlanId,\n defaultValue: defaultSelectedPlanId ?? plans[0]?.id ?? '',\n onChange: onSelectedPlanChange,\n });\n const currentSelected = currentSelectedRaw ?? '';\n\n const handleCancel = () => {\n onCancel?.();\n onOpenChange(false);\n };\n\n const handleUpgrade = () => {\n if (!currentSelected) return;\n onUpgrade(currentSelected);\n };\n\n const openRef = useRef(open);\n openRef.current = open;\n const selectedRef = useRef<string>(currentSelected);\n selectedRef.current = currentSelected;\n\n const contentRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(ref, () => contentRef.current as HTMLDivElement, []);\n\n const agentHandle = useMemo<FreemiumPaywallHandle>(\n () => ({\n isOpen: () => openRef.current,\n getSelectedPlanId: () => selectedRef.current || null,\n upgrade: () => handleUpgrade(),\n dismiss: () => handleCancel(),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n useAgentRegistration(freemiumPaywallAgent, agentHandle, undefined);\n\n const usagePercent = usage\n ? Math.min(\n 100,\n Math.max(0, (usage.used / Math.max(1, usage.limit)) * 100),\n )\n : 0;\n const usageFull = usage ? usage.used >= usage.limit : false;\n\n return (\n <RadixAlertDialog.Root open={open} onOpenChange={onOpenChange}>\n <RadixAlertDialog.Portal>\n <RadixAlertDialog.Overlay\n className={[\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[color:var(--foreground)]/40',\n 'ds:motion-safe:data-[state=open]:animate-in ds:motion-safe:data-[state=closed]:animate-out',\n 'ds:[.theme-accessible_&]:animate-none',\n ].join(' ')}\n />\n <RadixAlertDialog.Content\n ref={contentRef}\n aria-labelledby={titleId}\n aria-describedby={descId}\n className={contentVariants({ layout, density, className })}\n data-component=\"freemium-paywall\"\n >\n <RadixAlertDialog.Title id={titleId} asChild>\n <h2 className=\"type-title-card\">{title ?? t('paywall.title')}</h2>\n </RadixAlertDialog.Title>\n <RadixAlertDialog.Description id={descId} asChild>\n <p className=\"ds:mt-[var(--spacing-xs)] ds:text-[color:var(--muted-foreground)]\">\n {description ?? t('paywall.description')}\n </p>\n </RadixAlertDialog.Description>\n\n {usage ? (\n <div className=\"ds:mt-[var(--spacing-md)]\">\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)] ds:mb-[var(--spacing-xs)]\">\n {usageFull ? (\n <AlertTriangle\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:text-[color:var(--destructive)]\"\n />\n ) : null}\n <span\n className={[\n 'type-body-sm',\n usageFull\n ? 'ds:text-[color:var(--destructive)]'\n : 'ds:text-[color:var(--muted-foreground)]',\n ].join(' ')}\n >\n {usageFull\n ? t('paywall.usageFull')\n : t('paywall.usageLabel', {\n used: usage.used,\n limit: usage.limit,\n })}\n </span>\n </div>\n <Progress\n value={usagePercent}\n max={100}\n ariaLabel={t('paywall.usageLabel', {\n used: usage.used,\n limit: usage.limit,\n })}\n className={\n usageFull\n ? 'ds:[&_[role=progressbar]>*]:bg-[color:var(--destructive)]'\n : ''\n }\n />\n </div>\n ) : null}\n\n <RadixRadioGroup.Root\n value={currentSelected}\n onValueChange={handleSelectedChange}\n aria-label={t('paywall.title')}\n className=\"ds:mt-[var(--spacing-md)] ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n >\n {plans.map((plan) => {\n // Reuse the payment-form helper — it knows about\n // zero-decimal currencies (JPY, KRW, VND …) and applies\n // the right divisor. Raw `/ 100` would 100× the price in\n // those currencies.\n const formattedPrice = formatPaymentAmount(\n plan.priceAmount,\n plan.currency,\n i18n.language,\n );\n const period = plan.perKey ? t(plan.perKey) : undefined;\n const priceLine = period\n ? t('paywall.pricePer', { price: formattedPrice, period })\n : formattedPrice;\n const planName = t(plan.nameKey);\n return (\n <RadixRadioGroup.Item\n key={plan.id}\n value={plan.id}\n className={[\n 'ds:group ds:relative ds:flex ds:flex-col ds:items-stretch',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]',\n 'ds:text-start ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]',\n 'ds:data-[state=checked]:border-[color:var(--primary)]',\n 'ds:data-[state=checked]:bg-[color:var(--primary)]/5',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n ].join(' ')}\n >\n <span className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <span className=\"ds:font-semibold\">{planName}</span>\n <span className=\"ds:tabular-nums\">{priceLine}</span>\n </span>\n {plan.featuresKeys && plan.featuresKeys.length > 0 ? (\n <ul\n aria-label={t('paywall.features')}\n className=\"ds:mt-[var(--spacing-xs)] ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\"\n >\n {plan.featuresKeys.map((key, i) => (\n <li\n key={i}\n className=\"ds:flex ds:items-start ds:gap-[var(--spacing-xs)] type-body-sm\"\n >\n <Check\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:shrink-0 ds:text-[color:var(--primary)] ds:mt-[1px]\"\n />\n <span>{t(key)}</span>\n </li>\n ))}\n </ul>\n ) : null}\n </RadixRadioGroup.Item>\n );\n })}\n </RadixRadioGroup.Root>\n\n <div className=\"ds:mt-[var(--spacing-lg)] ds:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:justify-end\">\n <RadixAlertDialog.Cancel asChild>\n <Button intent=\"outline\" onClick={handleCancel}>\n {t('paywall.notNow')}\n </Button>\n </RadixAlertDialog.Cancel>\n <RadixAlertDialog.Action asChild>\n <Button intent=\"primary\" onClick={handleUpgrade}>\n {t('paywall.upgrade')}\n </Button>\n </RadixAlertDialog.Action>\n </div>\n </RadixAlertDialog.Content>\n </RadixAlertDialog.Portal>\n </RadixAlertDialog.Root>\n );\n },\n);\n\nFreemiumPaywall.displayName = 'FreemiumPaywall';\n"],"names":["freemiumPaywallAgent","handle","contentVariants","cva","FreemiumPaywall","forwardRef","open","onOpenChange","plans","selectedPlanId","defaultSelectedPlanId","onSelectedPlanChange","usage","onUpgrade","onCancel","title","description","layout","density","className","ref","t","i18n","useTranslation","titleId","useId","descId","currentSelectedRaw","handleSelectedChange","useControllableState","_a","currentSelected","handleCancel","handleUpgrade","openRef","useRef","selectedRef","contentRef","useImperativeHandle","agentHandle","useMemo","useAgentRegistration","usagePercent","usageFull","jsx","RadixAlertDialog","jsxs","AlertTriangle","Progress","RadixRadioGroup","plan","formattedPrice","formatPaymentAmount","period","priceLine","planName","key","i","Check","Button"],"mappings":"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"}
@@ -10,7 +10,7 @@ import { A as L } from "./avatar-I10iCDs8.js";
10
10
  import { B as D } from "./button-DD_0Xdmr.js";
11
11
  import { C as ae } from "./chat-container-izziXViv.js";
12
12
  import { C as re } from "./chat-message-g3lxpXM_.js";
13
- import { C as le } from "./chat-input-UK-bXU7u.js";
13
+ import { C as le } from "./chat-input-B3XmFGDw.js";
14
14
  import { S as ie } from "./streaming-text-BgjCTVOw.js";
15
15
  import { a as q, S as O } from "./suggestion-chip-C4Jz0LrM.js";
16
16
  import { T as oe } from "./typing-indicator-DHeVN4ob.js";
@@ -756,4 +756,4 @@ export {
756
756
  we as b,
757
757
  Ce as c
758
758
  };
759
- //# sourceMappingURL=leo-sidebar-D3TuyH5_.js.map
759
+ //# sourceMappingURL=leo-sidebar-DIsiTju3.js.map