@plumile/ui 0.1.55 → 0.1.56

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 (218) hide show
  1. package/lib/atomic/atoms/button/Button.d.ts.map +1 -1
  2. package/lib/atomic/atoms/button/Button.js +5 -2
  3. package/lib/atomic/atoms/formatted-date/FormattedDate.d.ts +14 -0
  4. package/lib/atomic/atoms/formatted-date/FormattedDate.d.ts.map +1 -0
  5. package/lib/atomic/atoms/formatted-date/FormattedDate.js +29 -0
  6. package/lib/atomic/atoms/icon-button/IconMenuButton.d.ts +8 -0
  7. package/lib/atomic/atoms/icon-button/IconMenuButton.d.ts.map +1 -0
  8. package/lib/atomic/atoms/icon-button/IconMenuButton.js +10 -0
  9. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.d.ts +14 -0
  10. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.d.ts.map +1 -0
  11. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.js +16 -0
  12. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.d.ts +13 -0
  13. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.d.ts.map +1 -0
  14. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.js +42 -0
  15. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.d.ts +13 -0
  16. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.d.ts.map +1 -0
  17. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.js +37 -0
  18. package/lib/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.d.ts +25 -0
  19. package/lib/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.d.ts.map +1 -0
  20. package/lib/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.js +221 -0
  21. package/lib/atomic/molecules/breadcrumb_navigation/types.d.ts +15 -0
  22. package/lib/atomic/molecules/breadcrumb_navigation/types.d.ts.map +1 -0
  23. package/lib/atomic/molecules/breadcrumb_navigation/types.js +2 -0
  24. package/lib/atomic/molecules/dropdown/Dropdown.d.ts +26 -0
  25. package/lib/atomic/molecules/dropdown/Dropdown.d.ts.map +1 -0
  26. package/lib/atomic/molecules/dropdown/Dropdown.js +271 -0
  27. package/lib/atomic/molecules/dropdown/dropdown.css.d.ts +8 -0
  28. package/lib/atomic/molecules/dropdown/dropdown.css.d.ts.map +1 -0
  29. package/lib/atomic/molecules/dropdown/dropdown.css.js +30 -0
  30. package/lib/atomic/molecules/form-actions/FormActions.d.ts +16 -0
  31. package/lib/atomic/molecules/form-actions/FormActions.d.ts.map +1 -0
  32. package/lib/atomic/molecules/form-actions/FormActions.js +27 -0
  33. package/lib/atomic/molecules/toast/ToastProvider.d.ts +19 -0
  34. package/lib/atomic/molecules/toast/ToastProvider.d.ts.map +1 -0
  35. package/lib/atomic/molecules/toast/ToastProvider.js +113 -0
  36. package/lib/atomic/molecules/toast/ToastViewport.d.ts +24 -0
  37. package/lib/atomic/molecules/toast/ToastViewport.d.ts.map +1 -0
  38. package/lib/atomic/molecules/toast/ToastViewport.js +40 -0
  39. package/lib/atomic/molecules/toast/constants.d.ts +2 -0
  40. package/lib/atomic/molecules/toast/constants.d.ts.map +1 -0
  41. package/lib/atomic/molecules/toast/constants.js +2 -0
  42. package/lib/atomic/molecules/toast/toast.css.d.ts +25 -0
  43. package/lib/atomic/molecules/toast/toast.css.d.ts.map +1 -0
  44. package/lib/atomic/molecules/toast/toast.css.js +106 -0
  45. package/lib/components/data-table/DataTable.css.d.ts +61 -0
  46. package/lib/components/data-table/DataTable.css.d.ts.map +1 -0
  47. package/lib/components/data-table/DataTable.css.js +285 -0
  48. package/lib/components/data-table/DataTable.d.ts +32 -0
  49. package/lib/components/data-table/DataTable.d.ts.map +1 -0
  50. package/lib/components/data-table/DataTable.js +95 -0
  51. package/lib/components/data-table/TableCell.css.d.ts +26 -0
  52. package/lib/components/data-table/TableCell.css.d.ts.map +1 -0
  53. package/lib/components/data-table/TableCell.css.js +45 -0
  54. package/lib/components/data-table/TableCell.d.ts +46 -0
  55. package/lib/components/data-table/TableCell.d.ts.map +1 -0
  56. package/lib/components/data-table/TableCell.js +72 -0
  57. package/lib/components/data-table/TableCellBase.d.ts +13 -0
  58. package/lib/components/data-table/TableCellBase.d.ts.map +1 -0
  59. package/lib/components/data-table/TableCellBase.js +11 -0
  60. package/lib/components/data-table/VirtualizedConnectionTable.css.d.ts +5 -0
  61. package/lib/components/data-table/VirtualizedConnectionTable.css.d.ts.map +1 -0
  62. package/lib/components/data-table/VirtualizedConnectionTable.css.js +18 -0
  63. package/lib/components/data-table/VirtualizedConnectionTable.d.ts +32 -0
  64. package/lib/components/data-table/VirtualizedConnectionTable.d.ts.map +1 -0
  65. package/lib/components/data-table/VirtualizedConnectionTable.js +304 -0
  66. package/lib/components/data-table/tableBreakpoints.d.ts +9 -0
  67. package/lib/components/data-table/tableBreakpoints.d.ts.map +1 -0
  68. package/lib/components/data-table/tableBreakpoints.js +34 -0
  69. package/lib/components/select/SimpleSelect.css.d.ts +23 -0
  70. package/lib/components/select/SimpleSelect.css.d.ts.map +1 -0
  71. package/lib/components/select/SimpleSelect.css.js +175 -0
  72. package/lib/components/select/SimpleSelect.d.ts +22 -0
  73. package/lib/components/select/SimpleSelect.d.ts.map +1 -0
  74. package/lib/components/select/SimpleSelect.js +218 -0
  75. package/lib/components/subscriptions/RefetchNeededBanner.css.d.ts +5 -0
  76. package/lib/components/subscriptions/RefetchNeededBanner.css.d.ts.map +1 -0
  77. package/lib/components/subscriptions/RefetchNeededBanner.css.js +32 -0
  78. package/lib/components/subscriptions/RefetchNeededBanner.d.ts +9 -0
  79. package/lib/components/subscriptions/RefetchNeededBanner.d.ts.map +1 -0
  80. package/lib/components/subscriptions/RefetchNeededBanner.js +17 -0
  81. package/lib/esm/atomic/atoms/button/Button.js +35 -33
  82. package/lib/esm/atomic/atoms/button/Button.js.map +1 -1
  83. package/lib/esm/atomic/atoms/formatted-date/FormattedDate.js +32 -0
  84. package/lib/esm/atomic/atoms/formatted-date/FormattedDate.js.map +1 -0
  85. package/lib/esm/atomic/atoms/icon-button/IconMenuButton.js +26 -0
  86. package/lib/esm/atomic/atoms/icon-button/IconMenuButton.js.map +1 -0
  87. package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.js +55 -0
  88. package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.js.map +1 -0
  89. package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.js +61 -0
  90. package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.js.map +1 -0
  91. package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.js +64 -0
  92. package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.js.map +1 -0
  93. package/lib/esm/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.js +30 -0
  94. package/lib/esm/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.js.map +1 -0
  95. package/lib/esm/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.ts.vanilla-Bhz61Foa.css +1 -0
  96. package/lib/esm/atomic/molecules/breadcrumb_navigation/types.js +2 -0
  97. package/lib/esm/atomic/molecules/breadcrumb_navigation/types.js.map +1 -0
  98. package/lib/esm/atomic/molecules/dropdown/Dropdown.js +178 -0
  99. package/lib/esm/atomic/molecules/dropdown/Dropdown.js.map +1 -0
  100. package/lib/esm/atomic/molecules/dropdown/dropdown.css.js +13 -0
  101. package/lib/esm/atomic/molecules/dropdown/dropdown.css.js.map +1 -0
  102. package/lib/esm/atomic/molecules/form-actions/FormActions.js +57 -0
  103. package/lib/esm/atomic/molecules/form-actions/FormActions.js.map +1 -0
  104. package/lib/esm/atomic/molecules/toast/ToastProvider.js +78 -0
  105. package/lib/esm/atomic/molecules/toast/ToastProvider.js.map +1 -0
  106. package/lib/esm/atomic/molecules/toast/ToastViewport.js +71 -0
  107. package/lib/esm/atomic/molecules/toast/ToastViewport.js.map +1 -0
  108. package/lib/esm/atomic/molecules/toast/constants.js +5 -0
  109. package/lib/esm/atomic/molecules/toast/constants.js.map +1 -0
  110. package/lib/esm/atomic/molecules/toast/toast.css.js +17 -0
  111. package/lib/esm/atomic/molecules/toast/toast.css.js.map +1 -0
  112. package/lib/esm/atomic/molecules/toast/toast.css.ts.vanilla-2GtcGJsi.css +1 -0
  113. package/lib/esm/components/data-table/DataTable.css.js +24 -0
  114. package/lib/esm/components/data-table/DataTable.css.js.map +1 -0
  115. package/lib/esm/components/data-table/DataTable.css.ts.vanilla-BLE98fwj.css +1 -0
  116. package/lib/esm/components/data-table/DataTable.js +141 -0
  117. package/lib/esm/components/data-table/DataTable.js.map +1 -0
  118. package/lib/esm/components/data-table/TableCell.css.js +15 -0
  119. package/lib/esm/components/data-table/TableCell.css.js.map +1 -0
  120. package/lib/esm/components/data-table/TableCell.css.ts.vanilla-i5QJvdbl.css +1 -0
  121. package/lib/esm/components/data-table/TableCell.js +74 -0
  122. package/lib/esm/components/data-table/TableCell.js.map +1 -0
  123. package/lib/esm/components/data-table/TableCellBase.js +16 -0
  124. package/lib/esm/components/data-table/TableCellBase.js.map +1 -0
  125. package/lib/esm/components/data-table/VirtualizedConnectionTable.css.js +10 -0
  126. package/lib/esm/components/data-table/VirtualizedConnectionTable.css.js.map +1 -0
  127. package/lib/esm/components/data-table/VirtualizedConnectionTable.js +249 -0
  128. package/lib/esm/components/data-table/VirtualizedConnectionTable.js.map +1 -0
  129. package/lib/esm/components/data-table/tableBreakpoints.js +37 -0
  130. package/lib/esm/components/data-table/tableBreakpoints.js.map +1 -0
  131. package/lib/esm/components/select/SimpleSelect.css.js +22 -0
  132. package/lib/esm/components/select/SimpleSelect.css.js.map +1 -0
  133. package/lib/esm/components/select/SimpleSelect.css.ts.vanilla-Bil1v8q6.css +1 -0
  134. package/lib/esm/components/select/SimpleSelect.js +185 -0
  135. package/lib/esm/components/select/SimpleSelect.js.map +1 -0
  136. package/lib/esm/components/subscriptions/RefetchNeededBanner.css.js +10 -0
  137. package/lib/esm/components/subscriptions/RefetchNeededBanner.css.js.map +1 -0
  138. package/lib/esm/components/subscriptions/RefetchNeededBanner.js +24 -0
  139. package/lib/esm/components/subscriptions/RefetchNeededBanner.js.map +1 -0
  140. package/lib/esm/i18n/useUiTranslation.js +8 -0
  141. package/lib/esm/i18n/useUiTranslation.js.map +1 -0
  142. package/lib/esm/index.js +68 -47
  143. package/lib/esm/index.js.map +1 -1
  144. package/lib/esm/styles/slots.js +2 -0
  145. package/lib/esm/styles/slots.js.map +1 -0
  146. package/lib/i18n/useUiTranslation.d.ts +3 -0
  147. package/lib/i18n/useUiTranslation.d.ts.map +1 -0
  148. package/lib/i18n/useUiTranslation.js +5 -0
  149. package/lib/index.d.ts +10 -0
  150. package/lib/index.d.ts.map +1 -1
  151. package/lib/index.js +11 -1
  152. package/lib/styles/slots.d.ts +2 -0
  153. package/lib/styles/slots.d.ts.map +1 -0
  154. package/lib/styles/slots.js +2 -0
  155. package/lib/types/atomic/atoms/button/Button.d.ts.map +1 -1
  156. package/lib/types/atomic/atoms/formatted-date/FormattedDate.d.ts +14 -0
  157. package/lib/types/atomic/atoms/formatted-date/FormattedDate.d.ts.map +1 -0
  158. package/lib/types/atomic/atoms/icon-button/IconMenuButton.d.ts +8 -0
  159. package/lib/types/atomic/atoms/icon-button/IconMenuButton.d.ts.map +1 -0
  160. package/lib/types/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.d.ts +14 -0
  161. package/lib/types/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.d.ts.map +1 -0
  162. package/lib/types/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.d.ts +13 -0
  163. package/lib/types/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.d.ts.map +1 -0
  164. package/lib/types/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.d.ts +13 -0
  165. package/lib/types/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.d.ts.map +1 -0
  166. package/lib/types/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.d.ts +25 -0
  167. package/lib/types/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.d.ts.map +1 -0
  168. package/lib/types/atomic/molecules/breadcrumb_navigation/types.d.ts +15 -0
  169. package/lib/types/atomic/molecules/breadcrumb_navigation/types.d.ts.map +1 -0
  170. package/lib/types/atomic/molecules/dropdown/Dropdown.d.ts +26 -0
  171. package/lib/types/atomic/molecules/dropdown/Dropdown.d.ts.map +1 -0
  172. package/lib/types/atomic/molecules/dropdown/dropdown.css.d.ts +8 -0
  173. package/lib/types/atomic/molecules/dropdown/dropdown.css.d.ts.map +1 -0
  174. package/lib/types/atomic/molecules/form-actions/FormActions.d.ts +16 -0
  175. package/lib/types/atomic/molecules/form-actions/FormActions.d.ts.map +1 -0
  176. package/lib/types/atomic/molecules/toast/ToastProvider.d.ts +19 -0
  177. package/lib/types/atomic/molecules/toast/ToastProvider.d.ts.map +1 -0
  178. package/lib/types/atomic/molecules/toast/ToastViewport.d.ts +24 -0
  179. package/lib/types/atomic/molecules/toast/ToastViewport.d.ts.map +1 -0
  180. package/lib/types/atomic/molecules/toast/constants.d.ts +2 -0
  181. package/lib/types/atomic/molecules/toast/constants.d.ts.map +1 -0
  182. package/lib/types/atomic/molecules/toast/toast.css.d.ts +25 -0
  183. package/lib/types/atomic/molecules/toast/toast.css.d.ts.map +1 -0
  184. package/lib/types/components/data-table/DataTable.css.d.ts +61 -0
  185. package/lib/types/components/data-table/DataTable.css.d.ts.map +1 -0
  186. package/lib/types/components/data-table/DataTable.d.ts +32 -0
  187. package/lib/types/components/data-table/DataTable.d.ts.map +1 -0
  188. package/lib/types/components/data-table/TableCell.css.d.ts +26 -0
  189. package/lib/types/components/data-table/TableCell.css.d.ts.map +1 -0
  190. package/lib/types/components/data-table/TableCell.d.ts +46 -0
  191. package/lib/types/components/data-table/TableCell.d.ts.map +1 -0
  192. package/lib/types/components/data-table/TableCellBase.d.ts +13 -0
  193. package/lib/types/components/data-table/TableCellBase.d.ts.map +1 -0
  194. package/lib/types/components/data-table/VirtualizedConnectionTable.css.d.ts +5 -0
  195. package/lib/types/components/data-table/VirtualizedConnectionTable.css.d.ts.map +1 -0
  196. package/lib/types/components/data-table/VirtualizedConnectionTable.d.ts +32 -0
  197. package/lib/types/components/data-table/VirtualizedConnectionTable.d.ts.map +1 -0
  198. package/lib/types/components/data-table/tableBreakpoints.d.ts +9 -0
  199. package/lib/types/components/data-table/tableBreakpoints.d.ts.map +1 -0
  200. package/lib/types/components/select/SimpleSelect.css.d.ts +23 -0
  201. package/lib/types/components/select/SimpleSelect.css.d.ts.map +1 -0
  202. package/lib/types/components/select/SimpleSelect.d.ts +22 -0
  203. package/lib/types/components/select/SimpleSelect.d.ts.map +1 -0
  204. package/lib/types/components/subscriptions/RefetchNeededBanner.css.d.ts +5 -0
  205. package/lib/types/components/subscriptions/RefetchNeededBanner.css.d.ts.map +1 -0
  206. package/lib/types/components/subscriptions/RefetchNeededBanner.d.ts +9 -0
  207. package/lib/types/components/subscriptions/RefetchNeededBanner.d.ts.map +1 -0
  208. package/lib/types/i18n/useUiTranslation.d.ts +3 -0
  209. package/lib/types/i18n/useUiTranslation.d.ts.map +1 -0
  210. package/lib/types/index.d.ts +10 -0
  211. package/lib/types/index.d.ts.map +1 -1
  212. package/lib/types/styles/slots.d.ts +2 -0
  213. package/lib/types/styles/slots.d.ts.map +1 -0
  214. package/package.json +10 -3
  215. package/src/i18n/locales/en/ui.json +53 -0
  216. package/src/i18n/locales/fr/ui.json +53 -0
  217. package/src/i18n/useUiTranslation.ts +6 -0
  218. /package/lib/esm/components/layout/{TabsContentLayout.css.ts.vanilla-tn0RQdqM.css → ContentLayout.css.ts.vanilla-tn0RQdqM.css} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.js","sources":["../../../../../src/atomic/molecules/dropdown/Dropdown.tsx"],"sourcesContent":["import {\n useState,\n useRef,\n useEffect,\n useLayoutEffect,\n useCallback,\n type ReactNode,\n type ReactElement,\n type JSX,\n type Ref,\n type MutableRefObject,\n type HTMLAttributes,\n type MouseEvent as ReactMouseEvent,\n type KeyboardEvent as ReactKeyboardEvent,\n createContext,\n useContext,\n isValidElement,\n cloneElement,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport * as classes from './dropdown.css.js';\nimport { cx } from '../../../theme/tools.js';\n\n// Types\nexport type DropdownPlacement =\n | 'bottom-start'\n | 'bottom-end'\n | 'top-start'\n | 'top-end';\n\ninterface DropdownContextValue {\n close: () => void;\n open: () => void;\n isOpen: boolean;\n}\n\nconst DropdownContext = createContext<DropdownContextValue | null>(null);\n/**\n * Access the nearest Dropdown context. Throws if used outside a <Dropdown />.\n */\nexport const useDropdown = (): DropdownContextValue => {\n const ctx = useContext(DropdownContext);\n if (ctx == null) {\n throw new Error('useDropdown must be used within a <Dropdown />');\n }\n return ctx;\n};\n\nexport interface DropdownProps {\n trigger: ReactElement | ((isOpen: boolean) => ReactElement);\n children: ReactNode;\n className?: string;\n contentClassName?: string;\n placement?: DropdownPlacement;\n offset?: number;\n matchTriggerWidth?: boolean;\n open?: boolean; // controlled\n defaultOpen?: boolean; // uncontrolled\n onOpenChange?: (open: boolean) => void;\n closeOnItemClick?: boolean;\n portalContainer?: HTMLElement | null;\n // Accessible label if trigger is an icon only\n ariaLabel?: string;\n}\n\ninterface PositionState {\n top: number;\n left: number;\n width?: number;\n}\n\nconst isForwardRefComponent = (type: unknown): boolean => {\n if (type == null || typeof type !== 'object') {\n return false;\n }\n return (\n (type as { $$typeof?: symbol }).$$typeof === Symbol.for('react.forward_ref')\n );\n};\n\n/**\n * A scalable, portal-based dropdown component with basic collision handling,\n * controlled/uncontrolled modes, accessibility attributes, and optional\n * trigger width matching. Content is rendered in a React portal (default: document.body).\n */\nexport const Dropdown = ({\n trigger,\n children,\n className,\n contentClassName,\n placement = 'bottom-start',\n offset = 4,\n matchTriggerWidth = true,\n open,\n defaultOpen = false,\n onOpenChange,\n closeOnItemClick = false,\n portalContainer,\n ariaLabel,\n}: DropdownProps): JSX.Element => {\n const isControlled = open != null;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n let isOpen = uncontrolledOpen;\n if (isControlled) {\n isOpen = Boolean(open);\n }\n\n const containerRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState<PositionState | null>(null);\n // Accumulate manual cleanups for effects where returning a function violates lint rules.\n const cleanupRef = useRef<(() => void)[]>([]);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const toggle = useCallback(() => {\n setOpen(!isOpen);\n }, [isOpen, setOpen]);\n const close = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n const openFn = useCallback(() => {\n setOpen(true);\n }, [setOpen]);\n\n // Positioning logic\n const computePosition = useCallback(() => {\n const triggerEl = triggerRef.current;\n const contentEl = contentRef.current;\n if (triggerEl == null) {\n return;\n }\n if (contentEl == null) {\n return;\n }\n\n const rect = triggerEl.getBoundingClientRect();\n let top = 0;\n let left = 0;\n\n switch (placement) {\n case 'bottom-start':\n top = rect.bottom + offset;\n left = rect.left;\n break;\n case 'bottom-end':\n top = rect.bottom + offset;\n left = rect.right - contentEl.offsetWidth;\n break;\n case 'top-start':\n top = rect.top - contentEl.offsetHeight - offset;\n left = rect.left;\n break;\n case 'top-end':\n top = rect.top - contentEl.offsetHeight - offset;\n left = rect.right - contentEl.offsetWidth;\n break;\n default:\n top = rect.bottom + offset;\n left = rect.left;\n }\n\n // Keep within viewport (basic collision handling)\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n let width: number | undefined;\n if (matchTriggerWidth) {\n width = rect.width;\n }\n const contentWidth = width ?? contentEl.offsetWidth;\n\n if (left + contentWidth > vw - 4) {\n left = Math.max(4, vw - contentWidth - 4);\n }\n if (left < 4) left = 4;\n const contentHeight = contentEl.offsetHeight;\n if (top + contentHeight > vh - 4) {\n // Try flip to top if bottom overflows and initial was bottom\n if (placement.startsWith('bottom')) {\n const flippedTop = rect.top - contentHeight - offset;\n if (flippedTop >= 4) {\n top = flippedTop;\n } else {\n top = Math.max(4, vh - contentHeight - 4);\n }\n } else {\n top = Math.max(4, vh - contentHeight - 4);\n }\n }\n if (top < 4) top = 4;\n\n setPosition({ top, left, width });\n }, [placement, offset, matchTriggerWidth]);\n\n useLayoutEffect(() => {\n if (isOpen) computePosition();\n }, [isOpen, computePosition, children]);\n\n useEffect(() => {\n if (!isOpen) return;\n const handle = () => {\n computePosition();\n };\n window.addEventListener('resize', handle);\n window.addEventListener('scroll', handle, true);\n const cleanup = () => {\n window.removeEventListener('resize', handle);\n window.removeEventListener('scroll', handle, true);\n };\n cleanupRef.current.push(cleanup);\n }, [isOpen, computePosition]);\n\n // Outside click & Escape\n useEffect(() => {\n if (!isOpen) return;\n const onDocMouseDown = (e: globalThis.MouseEvent) => {\n const target = e.target as Node;\n if (\n containerRef.current != null &&\n contentRef.current != null &&\n !containerRef.current.contains(target) &&\n !contentRef.current.contains(target)\n ) {\n close();\n }\n };\n const onKey = (e: globalThis.KeyboardEvent) => {\n if (e.key === 'Escape') {\n close();\n triggerRef.current?.focus();\n }\n };\n document.addEventListener('mousedown', onDocMouseDown);\n document.addEventListener('keydown', onKey);\n const cleanup = () => {\n document.removeEventListener('mousedown', onDocMouseDown);\n document.removeEventListener('keydown', onKey);\n };\n cleanupRef.current.push(cleanup);\n }, [isOpen, close]);\n\n // Keyboard navigation basic (ArrowDown focuses first focusable)\n useEffect(() => {\n if (!isOpen) return;\n const firstFocusable = contentRef.current?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n firstFocusable?.focus();\n }, [isOpen]);\n\n // Close on item click if enabled\n useEffect(() => {\n if (!isOpen || !closeOnItemClick) return;\n const handler = (e: globalThis.MouseEvent) => {\n if (contentRef.current?.contains(e.target as Node)) {\n close();\n }\n };\n document.addEventListener('click', handler, { capture: true });\n // Explicit cleanup without returning (lint rule forbids returning arrow fn)\n const cleanup = () => {\n document.removeEventListener('click', handler, { capture: true });\n };\n // Store in ref to run on unmount / dependency change\n cleanupRef.current.push(cleanup);\n }, [isOpen, closeOnItemClick, close]);\n // Run accumulated cleanups on unmount\n useEffect(() => {\n return () => {\n cleanupRef.current.forEach((fn) => {\n fn();\n });\n cleanupRef.current = [];\n };\n }, []);\n\n let triggerElement = trigger;\n if (typeof trigger === 'function') {\n triggerElement = trigger(isOpen);\n }\n\n if (!isValidElement(triggerElement)) {\n throw new Error('Dropdown trigger must be a React element.');\n }\n\n const isHostElement = typeof triggerElement.type === 'string';\n const isButtonElement = isHostElement && triggerElement.type === 'button';\n const canAttachRef =\n isHostElement ||\n typeof triggerElement.type === 'function' ||\n isForwardRefComponent(triggerElement.type);\n\n if (!canAttachRef) {\n throw new Error(\n 'Dropdown trigger must be a DOM element or component that accepts a ref.',\n );\n }\n\n const triggerElementRef =\n (triggerElement.props as { ref?: Ref<HTMLElement> }).ref ??\n (triggerElement as ReactElement & { ref?: Ref<HTMLElement> }).ref;\n const setTriggerRef = (node: HTMLElement | null) => {\n triggerRef.current = node;\n if (typeof triggerElementRef === 'function') {\n triggerElementRef(node);\n } else if (triggerElementRef != null) {\n (triggerElementRef as MutableRefObject<HTMLElement | null>).current =\n node;\n }\n };\n\n const triggerProps = triggerElement.props as HTMLAttributes<HTMLElement> & {\n type?: string;\n };\n\n const handleTriggerClick = (event: ReactMouseEvent<HTMLElement>) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented) {\n return;\n }\n toggle();\n };\n\n const handleTriggerKeyDown = (event: ReactKeyboardEvent<HTMLElement>) => {\n triggerProps.onKeyDown?.(event);\n if (event.defaultPrevented) {\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n toggle();\n }\n };\n\n const mergedTriggerProps: Record<string, unknown> = {\n onClick: handleTriggerClick,\n 'aria-haspopup': 'menu',\n 'aria-expanded': isOpen,\n };\n\n if (ariaLabel != null && ariaLabel !== '') {\n mergedTriggerProps['aria-label'] = ariaLabel;\n }\n\n if (isButtonElement) {\n if (triggerProps.type == null) {\n mergedTriggerProps.type = 'button';\n }\n } else {\n mergedTriggerProps.onKeyDown = handleTriggerKeyDown;\n if (triggerProps.role == null) {\n mergedTriggerProps.role = 'button';\n }\n if (triggerProps.tabIndex == null) {\n mergedTriggerProps.tabIndex = 0;\n }\n }\n\n mergedTriggerProps.ref = setTriggerRef;\n\n let contentStyles: React.CSSProperties = {};\n if (position != null) {\n contentStyles = {\n top: position.top,\n left: position.left,\n width: position.width,\n };\n }\n\n const portalTarget = portalContainer ?? document.body;\n\n const contextValue: DropdownContextValue = {\n close,\n open: openFn,\n isOpen,\n };\n\n let dropdownContent: JSX.Element | null = null;\n if (isOpen) {\n dropdownContent = createPortal(\n <div\n ref={contentRef}\n role=\"menu\"\n className={cx(\n classes.content,\n classes.contentPositioned,\n contentClassName,\n )}\n style={contentStyles}\n >\n {children}\n </div>,\n portalTarget,\n );\n }\n\n return (\n <DropdownContext.Provider value={contextValue}>\n <div className={cx(classes.container, className)} ref={containerRef}>\n {cloneElement(triggerElement, mergedTriggerProps)}\n </div>\n {dropdownContent}\n </DropdownContext.Provider>\n );\n};\n"],"names":["DropdownContext","createContext","useDropdown","ctx","useContext","isForwardRefComponent","type","Dropdown","trigger","children","className","contentClassName","placement","offset","matchTriggerWidth","open","defaultOpen","onOpenChange","closeOnItemClick","portalContainer","ariaLabel","isControlled","uncontrolledOpen","setUncontrolledOpen","useState","isOpen","containerRef","useRef","triggerRef","contentRef","position","setPosition","cleanupRef","setOpen","useCallback","next","toggle","close","openFn","computePosition","triggerEl","contentEl","rect","top","left","vw","vh","width","contentWidth","contentHeight","flippedTop","useLayoutEffect","useEffect","handle","cleanup","onDocMouseDown","e","target","onKey","handler","fn","triggerElement","isValidElement","isHostElement","isButtonElement","triggerElementRef","setTriggerRef","node","triggerProps","handleTriggerClick","event","handleTriggerKeyDown","mergedTriggerProps","contentStyles","portalTarget","contextValue","dropdownContent","createPortal","jsx","cx","classes.content","classes.contentPositioned","jsxs","classes.container","cloneElement"],"mappings":";;;;;AAqCA,MAAMA,IAAkBC,GAA2C,IAAI,GAI1DC,KAAc,MAA4B;AACrD,QAAMC,IAAMC,GAAWJ,CAAe;AACtC,MAAIG,KAAO;AACT,UAAM,IAAI,MAAM,gDAAgD;AAElE,SAAOA;AACT,GAyBME,KAAwB,CAACC,MACzBA,KAAQ,QAAQ,OAAOA,KAAS,WAC3B,KAGNA,EAA+B,aAAa,OAAO,IAAI,mBAAmB,GASlEC,KAAW,CAAC;AAAA,EACvB,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,QAAAC,IAAS;AAAA,EACT,mBAAAC,IAAoB;AAAA,EACpB,MAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,cAAAC;AAAA,EACA,kBAAAC,IAAmB;AAAA,EACnB,iBAAAC;AAAA,EACA,WAAAC;AACF,MAAkC;AAChC,QAAMC,IAAeN,KAAQ,MACvB,CAACO,GAAkBC,CAAmB,IAAIC,EAASR,CAAW;AACpE,MAAIS,IAASH;AACb,EAAID,MACFI,IAAS,EAAQV;AAGnB,QAAMW,IAAeC,EAAuB,IAAI,GAC1CC,IAAaD,EAAoB,IAAI,GACrCE,IAAaF,EAAuB,IAAI,GACxC,CAACG,GAAUC,CAAW,IAAIP,EAA+B,IAAI,GAE7DQ,IAAaL,EAAuB,EAAE,GAEtCM,IAAUC;AAAA,IACd,CAACC,MAAkB;AACjB,MAAKd,KACHE,EAAoBY,CAAI,GAE1BlB,IAAekB,CAAI;AAAA,IACrB;AAAA,IACA,CAACd,GAAcJ,CAAY;AAAA,EAAA,GAGvBmB,IAASF,EAAY,MAAM;AAC/B,IAAAD,EAAQ,CAACR,CAAM;AAAA,EACjB,GAAG,CAACA,GAAQQ,CAAO,CAAC,GACdI,IAAQH,EAAY,MAAM;AAC9B,IAAAD,EAAQ,EAAK;AAAA,EACf,GAAG,CAACA,CAAO,CAAC,GACNK,IAASJ,EAAY,MAAM;AAC/B,IAAAD,EAAQ,EAAI;AAAA,EACd,GAAG,CAACA,CAAO,CAAC,GAGNM,IAAkBL,EAAY,MAAM;AACxC,UAAMM,IAAYZ,EAAW,SACvBa,IAAYZ,EAAW;AAI7B,QAHIW,KAAa,QAGbC,KAAa;AACf;AAGF,UAAMC,IAAOF,EAAU,sBAAA;AACvB,QAAIG,IAAM,GACNC,IAAO;AAEX,YAAQhC,GAAA;AAAA,MACN,KAAK;AACH,QAAA+B,IAAMD,EAAK,SAAS7B,GACpB+B,IAAOF,EAAK;AACZ;AAAA,MACF,KAAK;AACH,QAAAC,IAAMD,EAAK,SAAS7B,GACpB+B,IAAOF,EAAK,QAAQD,EAAU;AAC9B;AAAA,MACF,KAAK;AACH,QAAAE,IAAMD,EAAK,MAAMD,EAAU,eAAe5B,GAC1C+B,IAAOF,EAAK;AACZ;AAAA,MACF,KAAK;AACH,QAAAC,IAAMD,EAAK,MAAMD,EAAU,eAAe5B,GAC1C+B,IAAOF,EAAK,QAAQD,EAAU;AAC9B;AAAA,MACF;AACE,QAAAE,IAAMD,EAAK,SAAS7B,GACpB+B,IAAOF,EAAK;AAAA,IAAA;AAIhB,UAAMG,IAAK,OAAO,YACZC,IAAK,OAAO;AAClB,QAAIC;AACJ,IAAIjC,MACFiC,IAAQL,EAAK;AAEf,UAAMM,IAAeD,KAASN,EAAU;AAExC,IAAIG,IAAOI,IAAeH,IAAK,MAC7BD,IAAO,KAAK,IAAI,GAAGC,IAAKG,IAAe,CAAC,IAEtCJ,IAAO,MAAGA,IAAO;AACrB,UAAMK,IAAgBR,EAAU;AAChC,QAAIE,IAAMM,IAAgBH,IAAK;AAE7B,UAAIlC,EAAU,WAAW,QAAQ,GAAG;AAClC,cAAMsC,IAAaR,EAAK,MAAMO,IAAgBpC;AAC9C,QAAIqC,KAAc,IAChBP,IAAMO,IAENP,IAAM,KAAK,IAAI,GAAGG,IAAKG,IAAgB,CAAC;AAAA,MAE5C;AACE,QAAAN,IAAM,KAAK,IAAI,GAAGG,IAAKG,IAAgB,CAAC;AAG5C,IAAIN,IAAM,MAAGA,IAAM,IAEnBZ,EAAY,EAAE,KAAAY,GAAK,MAAAC,GAAM,OAAAG,EAAA,CAAO;AAAA,EAClC,GAAG,CAACnC,GAAWC,GAAQC,CAAiB,CAAC;AAEzC,EAAAqC,GAAgB,MAAM;AACpB,IAAI1B,KAAQc,EAAA;AAAA,EACd,GAAG,CAACd,GAAQc,GAAiB9B,CAAQ,CAAC,GAEtC2C,EAAU,MAAM;AACd,QAAI,CAAC3B,EAAQ;AACb,UAAM4B,IAAS,MAAM;AACnB,MAAAd,EAAA;AAAA,IACF;AACA,WAAO,iBAAiB,UAAUc,CAAM,GACxC,OAAO,iBAAiB,UAAUA,GAAQ,EAAI;AAC9C,UAAMC,IAAU,MAAM;AACpB,aAAO,oBAAoB,UAAUD,CAAM,GAC3C,OAAO,oBAAoB,UAAUA,GAAQ,EAAI;AAAA,IACnD;AACA,IAAArB,EAAW,QAAQ,KAAKsB,CAAO;AAAA,EACjC,GAAG,CAAC7B,GAAQc,CAAe,CAAC,GAG5Ba,EAAU,MAAM;AACd,QAAI,CAAC3B,EAAQ;AACb,UAAM8B,IAAiB,CAACC,MAA6B;AACnD,YAAMC,IAASD,EAAE;AACjB,MACE9B,EAAa,WAAW,QACxBG,EAAW,WAAW,QACtB,CAACH,EAAa,QAAQ,SAAS+B,CAAM,KACrC,CAAC5B,EAAW,QAAQ,SAAS4B,CAAM,KAEnCpB,EAAA;AAAA,IAEJ,GACMqB,IAAQ,CAACF,MAAgC;AAC7C,MAAIA,EAAE,QAAQ,aACZnB,EAAA,GACAT,EAAW,SAAS,MAAA;AAAA,IAExB;AACA,aAAS,iBAAiB,aAAa2B,CAAc,GACrD,SAAS,iBAAiB,WAAWG,CAAK;AAC1C,UAAMJ,IAAU,MAAM;AACpB,eAAS,oBAAoB,aAAaC,CAAc,GACxD,SAAS,oBAAoB,WAAWG,CAAK;AAAA,IAC/C;AACA,IAAA1B,EAAW,QAAQ,KAAKsB,CAAO;AAAA,EACjC,GAAG,CAAC7B,GAAQY,CAAK,CAAC,GAGlBe,EAAU,MAAM;AACd,QAAI,CAAC3B,EAAQ;AAIb,IAHuBI,EAAW,SAAS;AAAA,MACzC;AAAA,IAAA,GAEc,MAAA;AAAA,EAClB,GAAG,CAACJ,CAAM,CAAC,GAGX2B,EAAU,MAAM;AACd,QAAI,CAAC3B,KAAU,CAACP,EAAkB;AAClC,UAAMyC,IAAU,CAACH,MAA6B;AAC5C,MAAI3B,EAAW,SAAS,SAAS2B,EAAE,MAAc,KAC/CnB,EAAA;AAAA,IAEJ;AACA,aAAS,iBAAiB,SAASsB,GAAS,EAAE,SAAS,IAAM;AAE7D,UAAML,IAAU,MAAM;AACpB,eAAS,oBAAoB,SAASK,GAAS,EAAE,SAAS,IAAM;AAAA,IAClE;AAEA,IAAA3B,EAAW,QAAQ,KAAKsB,CAAO;AAAA,EACjC,GAAG,CAAC7B,GAAQP,GAAkBmB,CAAK,CAAC,GAEpCe,EAAU,MACD,MAAM;AACX,IAAApB,EAAW,QAAQ,QAAQ,CAAC4B,MAAO;AACjC,MAAAA,EAAA;AAAA,IACF,CAAC,GACD5B,EAAW,UAAU,CAAA;AAAA,EACvB,GACC,CAAA,CAAE;AAEL,MAAI6B,IAAiBrD;AAKrB,MAJI,OAAOA,KAAY,eACrBqD,IAAiBrD,EAAQiB,CAAM,IAG7B,CAACqC,GAAeD,CAAc;AAChC,UAAM,IAAI,MAAM,2CAA2C;AAG7D,QAAME,IAAgB,OAAOF,EAAe,QAAS,UAC/CG,IAAkBD,KAAiBF,EAAe,SAAS;AAMjE,MAAI,EAJFE,KACA,OAAOF,EAAe,QAAS,cAC/BxD,GAAsBwD,EAAe,IAAI;AAGzC,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,QAAMI,IACHJ,EAAe,MAAqC,OACpDA,EAA6D,KAC1DK,KAAgB,CAACC,MAA6B;AAClD,IAAAvC,EAAW,UAAUuC,GACjB,OAAOF,KAAsB,aAC/BA,EAAkBE,CAAI,IACbF,KAAqB,SAC7BA,EAA2D,UAC1DE;AAAA,EAEN,GAEMC,IAAeP,EAAe,OAI9BQ,KAAqB,CAACC,MAAwC;AAElE,IADAF,EAAa,UAAUE,CAAK,GACxB,CAAAA,EAAM,oBAGVlC,EAAA;AAAA,EACF,GAEMmC,KAAuB,CAACD,MAA2C;AAEvE,IADAF,EAAa,YAAYE,CAAK,GAC1B,CAAAA,EAAM,qBAGNA,EAAM,QAAQ,WAAWA,EAAM,QAAQ,SACzCA,EAAM,eAAA,GACNlC,EAAA;AAAA,EAEJ,GAEMoC,IAA8C;AAAA,IAClD,SAASH;AAAA,IACT,iBAAiB;AAAA,IACjB,iBAAiB5C;AAAA,EAAA;AAGnB,EAAIL,KAAa,QAAQA,MAAc,OACrCoD,EAAmB,YAAY,IAAIpD,IAGjC4C,IACEI,EAAa,QAAQ,SACvBI,EAAmB,OAAO,aAG5BA,EAAmB,YAAYD,IAC3BH,EAAa,QAAQ,SACvBI,EAAmB,OAAO,WAExBJ,EAAa,YAAY,SAC3BI,EAAmB,WAAW,KAIlCA,EAAmB,MAAMN;AAEzB,MAAIO,IAAqC,CAAA;AACzC,EAAI3C,KAAY,SACd2C,IAAgB;AAAA,IACd,KAAK3C,EAAS;AAAA,IACd,MAAMA,EAAS;AAAA,IACf,OAAOA,EAAS;AAAA,EAAA;AAIpB,QAAM4C,KAAevD,KAAmB,SAAS,MAE3CwD,KAAqC;AAAA,IACzC,OAAAtC;AAAA,IACA,MAAMC;AAAA,IACN,QAAAb;AAAA,EAAA;AAGF,MAAImD,IAAsC;AAC1C,SAAInD,MACFmD,IAAkBC;AAAA,IAChB,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKjD;AAAA,QACL,MAAK;AAAA,QACL,WAAWkD;AAAA,UACTC;AAAAA,UACAC;AAAAA,UACAtE;AAAA,QAAA;AAAA,QAEF,OAAO8D;AAAA,QAEN,UAAAhE;AAAA,MAAA;AAAA,IAAA;AAAA,IAEHiE;AAAA,EAAA,IAKF,gBAAAQ,GAAClF,EAAgB,UAAhB,EAAyB,OAAO2E,IAC/B,UAAA;AAAA,IAAA,gBAAAG,EAAC,OAAA,EAAI,WAAWC,EAAGI,IAAmBzE,CAAS,GAAG,KAAKgB,GACpD,UAAA0D,GAAavB,GAAgBW,CAAkB,EAAA,CAClD;AAAA,IACCI;AAAA,EAAA,GACH;AAEJ;"}
@@ -0,0 +1,13 @@
1
+ /* empty css */
2
+ /* empty css */
3
+ var r = "mr2gir0 txvbqbpsf", v = "mr2gir1 txvbqbuzn txvbqb1rx txvbqbuvx txvbqbl6f", x = "mr2gir2 txvbqbpso txvbqbt6x txvbqbdpf", i = "mr2gir3 txvbqb9hx", q = "mr2gir4 txvbqbl3f", e = "mr2gir5 txvbqbfax txvbqbfbo txvbqbl9f", m = "mr2gir6 txvbqbv";
4
+ export {
5
+ r as container,
6
+ v as content,
7
+ x as contentPositioned,
8
+ q as focusOutlineReset,
9
+ i as hidden,
10
+ e as menu,
11
+ m as menuItem
12
+ };
13
+ //# sourceMappingURL=dropdown.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -0,0 +1,57 @@
1
+ import { jsxs as k, jsx as t } from "react/jsx-runtime";
2
+ import { Button as l } from "../../atoms/button/Button.js";
3
+ import { useUiTranslation as A } from "../../../i18n/useUiTranslation.js";
4
+ const T = ({
5
+ onCancel: n,
6
+ cancelLabel: c,
7
+ submitLabel: i,
8
+ submitLoadingLabel: r,
9
+ isSubmitting: e = !1,
10
+ submitDisabled: m = !1,
11
+ className: d,
12
+ renderSubmitContent: o,
13
+ submitButtonProps: b,
14
+ cancelButtonProps: u
15
+ }) => {
16
+ const { t: a } = A(), p = c ?? a("common.actions.cancel"), v = i ?? a("common.actions.save"), f = r ?? a("common.actions.saving"), C = u ?? {}, {
17
+ className: N,
18
+ disabled: B,
19
+ ...x
20
+ } = C, D = b ?? {}, {
21
+ className: L,
22
+ disabled: P,
23
+ ...h
24
+ } = D;
25
+ let s;
26
+ o != null ? s = o(e) : e ? s = f : s = v;
27
+ const y = !!B, j = !!m || e || P === !0;
28
+ return /* @__PURE__ */ k("div", { className: d, children: [
29
+ /* @__PURE__ */ t(
30
+ l,
31
+ {
32
+ type: "button",
33
+ variant: "text",
34
+ onClick: n,
35
+ disabled: y,
36
+ className: N,
37
+ ...x,
38
+ children: p
39
+ }
40
+ ),
41
+ /* @__PURE__ */ t(
42
+ l,
43
+ {
44
+ type: "submit",
45
+ variant: "primary",
46
+ disabled: j,
47
+ className: L,
48
+ ...h,
49
+ children: s
50
+ }
51
+ )
52
+ ] });
53
+ };
54
+ export {
55
+ T as FormActions
56
+ };
57
+ //# sourceMappingURL=FormActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormActions.js","sources":["../../../../../src/atomic/molecules/form-actions/FormActions.tsx"],"sourcesContent":["import { type ComponentProps, type JSX, type ReactNode } from 'react';\n\nimport { Button } from '../../atoms/button/Button.js';\nimport { useUiTranslation } from '../../../i18n/useUiTranslation.js';\n\nexport type FormActionsProps = {\n onCancel: () => void;\n cancelLabel?: string;\n submitLabel?: string;\n submitLoadingLabel?: string;\n isSubmitting?: boolean;\n submitDisabled?: boolean;\n className?: string;\n renderSubmitContent?: (isSubmitting: boolean) => ReactNode;\n submitButtonProps?: Omit<ComponentProps<typeof Button>, 'children' | 'type'>;\n cancelButtonProps?: Omit<\n ComponentProps<typeof Button>,\n 'children' | 'type' | 'variant'\n >;\n};\n\nexport const FormActions = ({\n onCancel,\n cancelLabel,\n submitLabel,\n submitLoadingLabel,\n isSubmitting = false,\n submitDisabled = false,\n className,\n renderSubmitContent,\n submitButtonProps,\n cancelButtonProps,\n}: FormActionsProps): JSX.Element => {\n const { t } = useUiTranslation();\n const resolvedCancelLabel = cancelLabel ?? t('common.actions.cancel');\n const resolvedSubmitLabel = submitLabel ?? t('common.actions.save');\n const resolvedSubmitLoadingLabel =\n submitLoadingLabel ?? t('common.actions.saving');\n const cancelProps = cancelButtonProps ?? {};\n const {\n className: cancelClassName,\n disabled: cancelDisabled,\n ...restCancelButtonProps\n } = cancelProps;\n\n const submitProps = submitButtonProps ?? {};\n const {\n className: submitClassName,\n disabled: submitDisabledOverride,\n ...restSubmitButtonProps\n } = submitProps;\n\n let submitContent: ReactNode;\n\n if (renderSubmitContent != null) {\n submitContent = renderSubmitContent(isSubmitting);\n } else if (isSubmitting) {\n submitContent = resolvedSubmitLoadingLabel;\n } else {\n submitContent = resolvedSubmitLabel;\n }\n\n const isCancelDisabled = Boolean(cancelDisabled);\n const isSubmitDisabled =\n Boolean(submitDisabled) || isSubmitting || submitDisabledOverride === true;\n\n return (\n <div className={className}>\n <Button\n type=\"button\"\n variant=\"text\"\n onClick={onCancel}\n disabled={isCancelDisabled}\n className={cancelClassName}\n {...restCancelButtonProps}\n >\n {resolvedCancelLabel}\n </Button>\n <Button\n type=\"submit\"\n variant=\"primary\"\n disabled={isSubmitDisabled}\n className={submitClassName}\n {...restSubmitButtonProps}\n >\n {submitContent}\n </Button>\n </div>\n );\n};\n"],"names":["FormActions","onCancel","cancelLabel","submitLabel","submitLoadingLabel","isSubmitting","submitDisabled","className","renderSubmitContent","submitButtonProps","cancelButtonProps","t","useUiTranslation","resolvedCancelLabel","resolvedSubmitLabel","resolvedSubmitLoadingLabel","cancelProps","cancelClassName","cancelDisabled","restCancelButtonProps","submitProps","submitClassName","submitDisabledOverride","restSubmitButtonProps","submitContent","isCancelDisabled","isSubmitDisabled","jsxs","jsx","Button"],"mappings":";;;AAqBO,MAAMA,IAAc,CAAC;AAAA,EAC1B,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,gBAAAC,IAAiB;AAAA,EACjB,WAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,mBAAAC;AACF,MAAqC;AACnC,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACRC,IAAsBX,KAAeS,EAAE,uBAAuB,GAC9DG,IAAsBX,KAAeQ,EAAE,qBAAqB,GAC5DI,IACJX,KAAsBO,EAAE,uBAAuB,GAC3CK,IAAcN,KAAqB,CAAA,GACnC;AAAA,IACJ,WAAWO;AAAA,IACX,UAAUC;AAAA,IACV,GAAGC;AAAA,EAAA,IACDH,GAEEI,IAAcX,KAAqB,CAAA,GACnC;AAAA,IACJ,WAAWY;AAAA,IACX,UAAUC;AAAA,IACV,GAAGC;AAAA,EAAA,IACDH;AAEJ,MAAII;AAEJ,EAAIhB,KAAuB,OACzBgB,IAAgBhB,EAAoBH,CAAY,IACvCA,IACTmB,IAAgBT,IAEhBS,IAAgBV;AAGlB,QAAMW,IAAmB,EAAQP,GAC3BQ,IACJ,EAAQpB,KAAmBD,KAAgBiB,MAA2B;AAExE,SACE,gBAAAK,EAAC,SAAI,WAAApB,GACH,UAAA;AAAA,IAAA,gBAAAqB;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,SAAS5B;AAAA,QACT,UAAUwB;AAAA,QACV,WAAWR;AAAA,QACV,GAAGE;AAAA,QAEH,UAAAN;AAAA,MAAA;AAAA,IAAA;AAAA,IAEH,gBAAAe;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,UAAUH;AAAA,QACV,WAAWL;AAAA,QACV,GAAGE;AAAA,QAEH,UAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAEJ;"}
@@ -0,0 +1,78 @@
1
+ import { jsxs as E, jsx as x } from "react/jsx-runtime";
2
+ import { createContext as k, useState as C, useRef as T, useCallback as l, useEffect as h, useMemo as S, useContext as b } from "react";
3
+ import { ToastViewport as M } from "./ToastViewport.js";
4
+ import { INFO_TOAST_DURATION_MS as O } from "./constants.js";
5
+ const p = k(null), a = (o, s) => (c, u) => o.push({ kind: s, title: c, message: u }), D = ({
6
+ children: o,
7
+ maxToasts: s = 4
8
+ }) => {
9
+ const [c, u] = C([]), w = T(0), t = T(
10
+ /* @__PURE__ */ new Map()
11
+ ), f = l((r) => {
12
+ const e = t.current.get(r);
13
+ e != null && (clearTimeout(e), t.current.delete(r)), u((n) => n.filter((i) => i.id !== r));
14
+ }, []), d = l(() => {
15
+ t.current.forEach((r) => {
16
+ clearTimeout(r);
17
+ }), t.current.clear(), u([]);
18
+ }, []), m = l(
19
+ (r) => {
20
+ const e = r.id ?? `toast-${w.current++}`;
21
+ return u((n) => {
22
+ const i = [...n, { ...r, kind: r.kind ?? "info", id: e }];
23
+ return i.length > s ? i.slice(i.length - s) : i;
24
+ }), e;
25
+ },
26
+ [s]
27
+ );
28
+ h(() => {
29
+ const r = /* @__PURE__ */ new Set();
30
+ c.forEach((e) => {
31
+ if (e.kind !== "info" || (r.add(e.id), t.current.has(e.id)))
32
+ return;
33
+ const n = setTimeout(() => {
34
+ t.current.delete(e.id), u((i) => i.filter((v) => v.id !== e.id));
35
+ }, O);
36
+ t.current.set(e.id, n);
37
+ }), t.current.forEach((e, n) => {
38
+ r.has(n) || (clearTimeout(e), t.current.delete(n));
39
+ });
40
+ }, [c]), h(() => {
41
+ const r = t.current;
42
+ return () => {
43
+ r.forEach((e) => {
44
+ clearTimeout(e);
45
+ }), r.clear();
46
+ };
47
+ }, []);
48
+ const g = S(() => {
49
+ const r = {
50
+ push: m,
51
+ dismiss: f,
52
+ clear: d,
53
+ info: () => "",
54
+ warning: () => "",
55
+ error: () => ""
56
+ };
57
+ return {
58
+ ...r,
59
+ info: a(r, "info"),
60
+ warning: a(r, "warning"),
61
+ error: a(r, "error")
62
+ };
63
+ }, [d, f, m]);
64
+ return /* @__PURE__ */ E(p.Provider, { value: g, children: [
65
+ o,
66
+ /* @__PURE__ */ x(M, { toasts: c, onDismiss: f })
67
+ ] });
68
+ }, N = () => {
69
+ const o = b(p);
70
+ if (o == null)
71
+ throw new Error("useToast must be used within a ToastProvider");
72
+ return o;
73
+ };
74
+ export {
75
+ D as ToastProvider,
76
+ N as useToast
77
+ };
78
+ //# sourceMappingURL=ToastProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToastProvider.js","sources":["../../../../../src/atomic/molecules/toast/ToastProvider.tsx"],"sourcesContent":["import {\n createContext,\n useEffect,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n type JSX,\n type ReactNode,\n} from 'react';\n\nimport {\n ToastViewport,\n type ToastItem,\n type ToastKind,\n} from './ToastViewport.js';\nimport { INFO_TOAST_DURATION_MS } from './constants.js';\n\nexport type ToastApi = {\n push: (toast: Omit<ToastItem, 'id'> & { id?: string }) => string;\n dismiss: (toastId: string) => void;\n clear: () => void;\n info: (title: ReactNode, message?: ReactNode) => string;\n warning: (title: ReactNode, message?: ReactNode) => string;\n error: (title: ReactNode, message?: ReactNode) => string;\n};\n\nexport type ToastProviderProps = {\n children: ReactNode;\n maxToasts?: number;\n};\n\nconst ToastContext = createContext<ToastApi | null>(null);\n\nconst pushWithKind = (api: ToastApi, kind: ToastKind) => {\n return (title: ReactNode, message?: ReactNode): string => {\n return api.push({ kind, title, message });\n };\n};\n\nexport const ToastProvider = ({\n children,\n maxToasts = 4,\n}: ToastProviderProps): JSX.Element => {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n const counter = useRef(0);\n const infoToastTimers = useRef<Map<string, ReturnType<typeof setTimeout>>>(\n new Map(),\n );\n\n const dismiss = useCallback((toastId: string) => {\n const timer = infoToastTimers.current.get(toastId);\n if (timer != null) {\n clearTimeout(timer);\n infoToastTimers.current.delete(toastId);\n }\n setToasts((prev) => {\n return prev.filter((t) => {\n return t.id !== toastId;\n });\n });\n }, []);\n\n const clear = useCallback(() => {\n infoToastTimers.current.forEach((timer) => {\n clearTimeout(timer);\n });\n infoToastTimers.current.clear();\n setToasts([]);\n }, []);\n\n const push = useCallback(\n (toast: Omit<ToastItem, 'id'> & { id?: string }): string => {\n const id = toast.id ?? `toast-${counter.current++}`;\n setToasts((prev) => {\n const next = [...prev, { ...toast, kind: toast.kind ?? 'info', id }];\n if (next.length > maxToasts) {\n return next.slice(next.length - maxToasts);\n }\n return next;\n });\n return id;\n },\n [maxToasts],\n );\n\n useEffect(() => {\n const activeInfoToastIds = new Set<string>();\n toasts.forEach((toast) => {\n if (toast.kind !== 'info') {\n return;\n }\n activeInfoToastIds.add(toast.id);\n if (infoToastTimers.current.has(toast.id)) {\n return;\n }\n const timer = setTimeout(() => {\n infoToastTimers.current.delete(toast.id);\n setToasts((prev) => {\n return prev.filter((item) => {\n return item.id !== toast.id;\n });\n });\n }, INFO_TOAST_DURATION_MS);\n infoToastTimers.current.set(toast.id, timer);\n });\n\n infoToastTimers.current.forEach((timer, toastId) => {\n if (activeInfoToastIds.has(toastId)) {\n return;\n }\n clearTimeout(timer);\n infoToastTimers.current.delete(toastId);\n });\n }, [toasts]);\n\n useEffect(() => {\n const timers = infoToastTimers.current;\n return () => {\n timers.forEach((timer) => {\n clearTimeout(timer);\n });\n timers.clear();\n };\n }, []);\n\n const api = useMemo<ToastApi>(() => {\n const base: ToastApi = {\n push,\n dismiss,\n clear,\n info: () => {\n return '';\n },\n warning: () => {\n return '';\n },\n error: () => {\n return '';\n },\n };\n return {\n ...base,\n info: pushWithKind(base, 'info'),\n warning: pushWithKind(base, 'warning'),\n error: pushWithKind(base, 'error'),\n };\n }, [clear, dismiss, push]);\n\n return (\n <ToastContext.Provider value={api}>\n {children}\n <ToastViewport toasts={toasts} onDismiss={dismiss} />\n </ToastContext.Provider>\n );\n};\n\nexport const useToast = (): ToastApi => {\n const value = useContext(ToastContext);\n if (value == null) {\n throw new Error('useToast must be used within a ToastProvider');\n }\n return value;\n};\n"],"names":["ToastContext","createContext","pushWithKind","api","kind","title","message","ToastProvider","children","maxToasts","toasts","setToasts","useState","counter","useRef","infoToastTimers","dismiss","useCallback","toastId","timer","prev","t","clear","push","toast","id","next","useEffect","activeInfoToastIds","item","INFO_TOAST_DURATION_MS","timers","useMemo","base","jsxs","jsx","ToastViewport","useToast","value","useContext"],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { jsx as e, jsxs as c } from "react/jsx-runtime";
2
+ import { useMemo as v } from "react";
3
+ import { ModalCloseSvg as g } from "../../../icons/ModalCloseSvg.js";
4
+ import { Button as b } from "../../atoms/button/Button.js";
5
+ import { useUiTranslation as k } from "../../../i18n/useUiTranslation.js";
6
+ import { message as T, actions as x, header as y, title as C, closeButton as w, kindRecipe as A, toast as B, progressTrack as M, progressBar as O, viewport as S } from "./toast.css.js";
7
+ import { cx as u } from "../../../theme/tools.js";
8
+ import { INFO_TOAST_DURATION_MS as _ } from "./constants.js";
9
+ const V = ({
10
+ toasts: r,
11
+ onDismiss: l,
12
+ dismissLabel: p,
13
+ className: h
14
+ }) => {
15
+ const { t: f } = k(), n = p ?? f("toast.dismissAriaLabel"), N = v(() => r.map((i) => {
16
+ const o = i.kind ?? "info", a = i.actions ?? [];
17
+ let t = null;
18
+ i.message != null && (t = /* @__PURE__ */ e("div", { className: T, children: i.message }));
19
+ let m = null;
20
+ a.length > 0 && (m = /* @__PURE__ */ e("div", { className: x, children: a.map((s) => /* @__PURE__ */ e(
21
+ b,
22
+ {
23
+ type: "button",
24
+ size: "small",
25
+ variant: "secondary",
26
+ onClick: s.onClick,
27
+ children: s.label
28
+ },
29
+ s.id
30
+ )) }));
31
+ let d = null;
32
+ return o === "info" && (d = /* @__PURE__ */ e("div", { className: M, "aria-hidden": "true", children: /* @__PURE__ */ e(
33
+ "div",
34
+ {
35
+ className: O,
36
+ style: { animationDuration: `${_}ms` }
37
+ }
38
+ ) })), /* @__PURE__ */ c(
39
+ "div",
40
+ {
41
+ className: u(B, A({ kind: o })),
42
+ children: [
43
+ /* @__PURE__ */ c("div", { className: y, children: [
44
+ /* @__PURE__ */ e("div", { className: C, children: i.title }),
45
+ /* @__PURE__ */ e(
46
+ "button",
47
+ {
48
+ type: "button",
49
+ className: w,
50
+ "aria-label": n,
51
+ onClick: () => {
52
+ l(i.id);
53
+ },
54
+ children: /* @__PURE__ */ e(g, { width: 18, height: 18, "aria-hidden": "true" })
55
+ }
56
+ )
57
+ ] }),
58
+ t,
59
+ m,
60
+ d
61
+ ]
62
+ },
63
+ i.id
64
+ );
65
+ }), [l, n, r]);
66
+ return r.length === 0 ? null : /* @__PURE__ */ e("div", { className: u(S, h), children: N });
67
+ };
68
+ export {
69
+ V as ToastViewport
70
+ };
71
+ //# sourceMappingURL=ToastViewport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToastViewport.js","sources":["../../../../../src/atomic/molecules/toast/ToastViewport.tsx"],"sourcesContent":["import { type JSX, type ReactNode, useMemo } from 'react';\nimport type { RecipeVariants } from '@vanilla-extract/recipes';\n\nimport { ModalCloseSvg } from '../../../icons/ModalCloseSvg.js';\nimport { Button } from '../../atoms/button/Button.js';\nimport { useUiTranslation } from '../../../i18n/useUiTranslation.js';\n\nimport * as styles from './toast.css.js';\nimport { cx } from '../../../theme/tools.js';\nimport { INFO_TOAST_DURATION_MS } from './constants.js';\n\nexport type ToastKind = NonNullable<\n NonNullable<RecipeVariants<typeof styles.kindRecipe>>['kind']\n>;\n\nexport type ToastAction = {\n id: string;\n label: string;\n onClick: () => void;\n};\n\nexport type ToastItem = {\n id: string;\n kind?: ToastKind;\n title: ReactNode;\n message?: ReactNode;\n actions?: readonly ToastAction[];\n};\n\nexport type ToastViewportProps = {\n toasts: readonly ToastItem[];\n onDismiss: (toastId: string) => void;\n dismissLabel?: string;\n className?: string;\n};\n\nexport const ToastViewport = ({\n toasts,\n onDismiss,\n dismissLabel,\n className,\n}: ToastViewportProps): JSX.Element | null => {\n const { t } = useUiTranslation();\n const resolvedDismissLabel = dismissLabel ?? t('toast.dismissAriaLabel');\n\n const items = useMemo(() => {\n return toasts.map((toast) => {\n const kind = toast.kind ?? 'info';\n const actions = toast.actions ?? [];\n\n let messageNode: JSX.Element | null = null;\n if (toast.message != null) {\n messageNode = <div className={styles.message}>{toast.message}</div>;\n }\n\n let actionsNode: JSX.Element | null = null;\n if (actions.length > 0) {\n actionsNode = (\n <div className={styles.actions}>\n {actions.map((action) => {\n return (\n <Button\n key={action.id}\n type=\"button\"\n size=\"small\"\n variant=\"secondary\"\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n );\n })}\n </div>\n );\n }\n\n let progressNode: JSX.Element | null = null;\n if (kind === 'info') {\n progressNode = (\n <div className={styles.progressTrack} aria-hidden=\"true\">\n <div\n className={styles.progressBar}\n style={{ animationDuration: `${INFO_TOAST_DURATION_MS}ms` }}\n />\n </div>\n );\n }\n\n return (\n <div\n key={toast.id}\n className={cx(styles.toast, styles.kindRecipe({ kind }))}\n >\n <div className={styles.header}>\n <div className={styles.title}>{toast.title}</div>\n <button\n type=\"button\"\n className={styles.closeButton}\n aria-label={resolvedDismissLabel}\n onClick={() => {\n onDismiss(toast.id);\n }}\n >\n <ModalCloseSvg width={18} height={18} aria-hidden=\"true\" />\n </button>\n </div>\n {messageNode}\n {actionsNode}\n {progressNode}\n </div>\n );\n });\n }, [onDismiss, resolvedDismissLabel, toasts]);\n\n if (toasts.length === 0) {\n return null;\n }\n\n return <div className={cx(styles.viewport, className)}>{items}</div>;\n};\n"],"names":["ToastViewport","toasts","onDismiss","dismissLabel","className","t","useUiTranslation","resolvedDismissLabel","items","useMemo","toast","kind","actions","messageNode","styles.message","actionsNode","jsx","styles.actions","action","Button","progressNode","styles.progressTrack","styles.progressBar","INFO_TOAST_DURATION_MS","jsxs","cx","styles.toast","styles.kindRecipe","styles.header","styles.title","styles.closeButton","ModalCloseSvg","styles.viewport"],"mappings":";;;;;;;;AAoCO,MAAMA,IAAgB,CAAC;AAAA,EAC5B,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC;AACF,MAA8C;AAC5C,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACRC,IAAuBJ,KAAgBE,EAAE,wBAAwB,GAEjEG,IAAQC,EAAQ,MACbR,EAAO,IAAI,CAACS,MAAU;AAC3B,UAAMC,IAAOD,EAAM,QAAQ,QACrBE,IAAUF,EAAM,WAAW,CAAA;AAEjC,QAAIG,IAAkC;AACtC,IAAIH,EAAM,WAAW,SACnBG,sBAAe,OAAA,EAAI,WAAWC,GAAiB,YAAM,SAAQ;AAG/D,QAAIC,IAAkC;AACtC,IAAIH,EAAQ,SAAS,MACnBG,IACE,gBAAAC,EAAC,SAAI,WAAWC,GACb,UAAAL,EAAQ,IAAI,CAACM,MAEV,gBAAAF;AAAA,MAACG;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,SAASD,EAAO;AAAA,QAEf,UAAAA,EAAO;AAAA,MAAA;AAAA,MANHA,EAAO;AAAA,IAAA,CASjB,EAAA,CACH;AAIJ,QAAIE,IAAmC;AACvC,WAAIT,MAAS,WACXS,sBACG,OAAA,EAAI,WAAWC,GAAsB,eAAY,QAChD,UAAA,gBAAAL;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWM;AAAAA,QACX,OAAO,EAAE,mBAAmB,GAAGC,CAAsB,KAAA;AAAA,MAAK;AAAA,IAAA,GAE9D,IAKF,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAWC,EAAGC,GAAcC,EAAkB,EAAE,MAAAhB,EAAA,CAAM,CAAC;AAAA,QAEvD,UAAA;AAAA,UAAA,gBAAAa,EAAC,OAAA,EAAI,WAAWI,GACd,UAAA;AAAA,YAAA,gBAAAZ,EAAC,OAAA,EAAI,WAAWa,GAAe,YAAM,OAAM;AAAA,YAC3C,gBAAAb;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAWc;AAAAA,gBACX,cAAYvB;AAAA,gBACZ,SAAS,MAAM;AACb,kBAAAL,EAAUQ,EAAM,EAAE;AAAA,gBACpB;AAAA,gBAEA,4BAACqB,GAAA,EAAc,OAAO,IAAI,QAAQ,IAAI,eAAY,OAAA,CAAO;AAAA,cAAA;AAAA,YAAA;AAAA,UAC3D,GACF;AAAA,UACClB;AAAA,UACAE;AAAA,UACAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAlBIV,EAAM;AAAA,IAAA;AAAA,EAqBjB,CAAC,GACA,CAACR,GAAWK,GAAsBN,CAAM,CAAC;AAE5C,SAAIA,EAAO,WAAW,IACb,OAGF,gBAAAe,EAAC,SAAI,WAAWS,EAAGO,GAAiB5B,CAAS,GAAI,UAAAI,GAAM;AAChE;"}
@@ -0,0 +1,5 @@
1
+ const O = 15e3;
2
+ export {
3
+ O as INFO_TOAST_DURATION_MS
4
+ };
5
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../../../../src/atomic/molecules/toast/constants.ts"],"sourcesContent":["export const INFO_TOAST_DURATION_MS = 15_000;\n"],"names":["INFO_TOAST_DURATION_MS"],"mappings":"AAAO,MAAMA,IAAyB;"}
@@ -0,0 +1,17 @@
1
+ /* empty css */
2
+ /* empty css */
3
+ import { createRuntimeFn as b } from "@vanilla-extract/recipes/createRuntimeFn";
4
+ var q = "_19cwz1i0 txvbqbpso txvbqbpuf txvbqb836 txvbqbuvx txvbqb9io txvbqbai6 txvbqbao6", i = "_19cwz1i3 _19cwz1i2 txvbqbnvf txvbqboio txvbqbp5o txvbqblxf txvbqbuzn txvbqbwf txvbqb1qf txvbqb1co txvbqb9io txvbqbai6 txvbqbanx txvbqb1ro txvbqb8q6", a = b({ defaultClassName: "_19cwz1i4", variantClassNames: { kind: { info: "_19cwz1i5", warning: "_19cwz1i6", error: "_19cwz1i7" } }, defaultVariants: { kind: "info" }, compoundVariants: [] }), o = "_19cwz1i8 txvbqb9io txvbqbcf txvbqbdoo txvbqbao6", r = "_19cwz1i9 txvbqbamo", c = "_19cwz1ia txvbqb8x", e = "_19cwz1ib txvbqb9jf txvbqbco txvbqbao6 txvbqbhwx", w = "_19cwz1id _19cwz1ic txvbqb9jf txvbqbco txvbqbdnx txvbqbtx6 txvbqbc6o txvbqb1rf txvbqb1px txvbqb12f txvbqbuzj txvbqbv", n = "_19cwz1if _19cwz1ie txvbqbhwx txvbqb1t6", z = "_19cwz1ih";
5
+ export {
6
+ e as actions,
7
+ w as closeButton,
8
+ o as header,
9
+ a as kindRecipe,
10
+ c as message,
11
+ z as progressBar,
12
+ n as progressTrack,
13
+ r as title,
14
+ i as toast,
15
+ q as viewport
16
+ };
17
+ //# sourceMappingURL=toast.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1 @@
1
+ @keyframes _19cwz1i1{0%{transform:translateY(10px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes _19cwz1ig{0%{width:0%}to{width:100%}}._19cwz1i3{width:min(28rem,calc(100vw - 2rem));animation:_19cwz1i1 .14s ease-out}._19cwz1i5{border-color:var(--kronex-colors-blue-200)}._19cwz1i6{border-color:var(--kronex-colors-amber-200)}._19cwz1i7{border-color:var(--kronex-colors-red-200)}._19cwz1if{height:4px;background-color:var(--kronex-colors-blue-50);overflow:hidden}._19cwz1ih{height:100%;width:0%;background-color:var(--kronex-colors-blue-400);animation-name:_19cwz1ig;animation-timing-function:linear;animation-fill-mode:forwards}
@@ -0,0 +1,24 @@
1
+ /* empty css */
2
+ /* empty css */
3
+ import { createRuntimeFn as b } from "@vanilla-extract/recipes/createRuntimeFn";
4
+ var s = b({ defaultClassName: "ysn8463 ysn8460 txvbqb9io txvbqbai6 txvbqbu6f txvbqb1k", variantClassNames: { kind: { default: "ysn8464 ysn8461 txvbqbuzn txvbqbwf txvbqb1ro txvbqb1qf txvbqb1co txvbqbl6f", brandTable: "ysn8465 ysn8462 txvbqbuzj txvbqb1qo txvbqb1px txvbqb12f txvbqbl6x" } }, defaultVariants: { kind: "default" }, compoundVariants: [] }), v = b({ defaultClassName: "ysn8468", variantClassNames: { kind: { default: "ysn8469 ysn8466 txvbqb12f txvbqb1qf txvbqb62o txvbqb3no txvbqbv2t", brandTable: "ysn846a ysn8467 txvbqbuzj txvbqb12f txvbqb1qf txvbqb62o txvbqb3s6" } }, defaultVariants: { kind: "default" }, compoundVariants: [] }), x = "ysn846b txvbqb9ix txvbqbu6f txvbqbc6", e = "var(--ysn846c)", q = "var(--ysn846d)", l = "var(--ysn846e)", d = b({ defaultClassName: "ysn846j ysn846f txvbqbco txvbqb9io txvbqbaj6 txvbqbao6 txvbqbl6f txvbqbt6f txvbqbuw6", variantClassNames: { kind: { default: "ysn846k ysn846h ysn846g txvbqbv8p txvbqbamo", brandTable: "ysn846l ysn846i txvbqbnuf txvbqboho txvbqbp5x txvbqblxo txvbqbv7p txvbqbamx txvbqb8o txvbqbeef txvbqb66 txvbqb54x" } }, defaultVariants: { kind: "default" }, compoundVariants: [] }), r = b({ defaultClassName: "ysn846o ysn846m txvbqb9io txvbqbai6", variantClassNames: { kind: { default: "ysn846p", brandTable: "ysn846q ysn846n txvbqbuzj" } }, defaultVariants: { kind: "default" }, compoundVariants: [] }), y = b({ defaultClassName: "ysn846w ysn846r txvbqbc6 txvbqb1qf txvbqb12f txvbqb9ix txvbqb78 txvbqb6x txvbqb7k", variantClassNames: { kind: { default: "ysn846x ysn846t ysn846s txvbqbv2r txvbqb3of txvbqb62o", brandTable: "ysn846y ysn846v ysn846u txvbqbuzj txvbqb3s6 txvbqb62o" } }, defaultVariants: { kind: "default" }, compoundVariants: [] }), i = b({ defaultClassName: "ysn84611", variantClassNames: { kind: { default: "ysn84612 ysn846z txvbqbv2v", brandTable: "ysn84613 ysn84610 txvbqbuzj" } }, defaultVariants: { kind: "default" }, compoundVariants: [] }), o = b({ defaultClassName: "ysn84616", variantClassNames: { kind: { default: "ysn84617 ysn84614 txvbqbv2r", brandTable: "ysn84618 ysn84615 txvbqbuzj" } }, defaultVariants: { kind: "default" }, compoundVariants: [] }), u = b({ defaultClassName: "ysn8461d ysn84619 txvbqbco txvbqb9io txvbqbao6 txvbqbk4x txvbqbl6f", variantClassNames: { kind: { default: "ysn8461e ysn8461b ysn8461a txvbqbv8r", brandTable: "ysn8461f ysn8461c txvbqbnuf txvbqboho txvbqbp5x txvbqblxo txvbqbv8p txvbqbamo txvbqb8x txvbqb54x" } }, defaultVariants: { kind: "default" }, compoundVariants: [] }), f = "ysn8461g txvbqbamo txvbqbv8p", m = "ysn8461h txvbqbv8p", p = "ysn8461i", C = "ysn8461j txvbqb96 txvbqbv8r txvbqbt5x", V = b({ defaultClassName: "ysn8461k", variantClassNames: { minVisibleAt: { sm: "ysn8461l", md: "ysn8461m", lg: "ysn8461n", xl: "ysn8461o", xxl: "ysn8461p" } }, defaultVariants: {}, compoundVariants: [] });
5
+ export {
6
+ r as body,
7
+ u as cell,
8
+ s as container,
9
+ C as emptyCell,
10
+ p as emptyRow,
11
+ v as header,
12
+ d as headerCell,
13
+ x as headerRow,
14
+ V as hideBelowRecipe,
15
+ f as primaryCell,
16
+ m as primaryHeaderCell,
17
+ y as row,
18
+ i as rowEven,
19
+ o as rowOdd,
20
+ q as tableCellFontSizeVar,
21
+ e as tableCellPaddingVar,
22
+ l as tableEmptyRowPaddingVar
23
+ };
24
+ //# sourceMappingURL=DataTable.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTable.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1 @@
1
+ .ysn846h{padding:var(--ysn846c, var(--kronex-spacing-3) var(--kronex-spacing-4));font-size:var(--ysn846d, var(--kronex-fontSize-sm));border-right:1px solid var(--kronex-colors-border)}.ysn846h:last-child{border-right:none}.ysn846t:last-child{border-bottom-width:0}.ysn846t:hover{background-color:var(--kronex-colors-surfaceSecondary)}.ysn846v:last-child{border-bottom-width:0}.ysn846v:hover{background-color:transparent}.ysn8461b{padding:var(--ysn846c, var(--kronex-spacing-3) var(--kronex-spacing-4));font-size:var(--ysn846d, var(--kronex-fontSize-sm));border-right:1px solid var(--kronex-colors-borderLight)}.ysn8461b:last-child{border-right:none}.ysn8461i{padding:var(--ysn846e, var(--kronex-spacing-6) var(--kronex-spacing-4))}@container (max-width: 767.5px){.ysn8461l{visibility:hidden;opacity:0;pointer-events:none;padding-inline:0;padding-block:0;border-right:none;overflow:hidden}}@container (max-width: 1023.5px){.ysn8461m{visibility:hidden;opacity:0;pointer-events:none;padding-inline:0;padding-block:0;border-right:none;overflow:hidden}}@container (max-width: 1279.5px){.ysn8461n{visibility:hidden;opacity:0;pointer-events:none;padding-inline:0;padding-block:0;border-right:none;overflow:hidden}}@container (max-width: 1439.5px){.ysn8461o{visibility:hidden;opacity:0;pointer-events:none;padding-inline:0;padding-block:0;border-right:none;overflow:hidden}}@container (max-width: 1679.5px){.ysn8461p{visibility:hidden;opacity:0;pointer-events:none;padding-inline:0;padding-block:0;border-right:none;overflow:hidden}}
@@ -0,0 +1,141 @@
1
+ import { jsx as i, Fragment as S, jsxs as j } from "react/jsx-runtime";
2
+ import { emptyCell as D, emptyRow as F, row as H, rowEven as I, rowOdd as O, cell as U, primaryCell as V, headerCell as _, primaryHeaderCell as B, headerRow as K, header as M, body as q, container as z, hideBelowRecipe as G } from "./DataTable.css.js";
3
+ import { cx as t } from "../../theme/tools.js";
4
+ import { useUiTranslation as J } from "../../i18n/useUiTranslation.js";
5
+ const Q = "minmax(0, 1fr)", v = (n) => n == null ? null : G({ minVisibleAt: n }), W = (n, a) => typeof a == "string" && a !== "" ? { gridTemplateColumns: a } : {
6
+ gridTemplateColumns: `repeat(${n}, ${Q})`
7
+ }, ee = ({
8
+ columns: n,
9
+ rows: a,
10
+ getRowId: C,
11
+ emptyState: b,
12
+ className: N,
13
+ headerClassName: E,
14
+ bodyClassName: k,
15
+ rowClassName: y,
16
+ gridTemplateClassName: c,
17
+ gridTemplateColumns: R,
18
+ kind: g,
19
+ classes: e
20
+ }) => {
21
+ const { t: L } = J(), o = g ?? "default", T = /* @__PURE__ */ i("div", { className: t(D, e?.emptyCell), children: L("common.table.empty") }), x = b ?? T, A = a.length === 0;
22
+ let m;
23
+ c == null && (m = W(
24
+ n.length,
25
+ R
26
+ ));
27
+ const f = [];
28
+ c != null && f.push(c);
29
+ let u;
30
+ return A ? u = /* @__PURE__ */ i("div", { className: t(F, e?.emptyRow), role: "row", children: /* @__PURE__ */ i("div", { role: "cell", children: x }) }) : u = /* @__PURE__ */ i(S, { children: a.map((l, s) => {
31
+ const h = C(l, s), d = [H({ kind: o }), e?.row];
32
+ s % 2 === 0 ? d.push(
33
+ I({ kind: o }),
34
+ e?.rowEven
35
+ ) : d.push(
36
+ O({ kind: o }),
37
+ e?.rowOdd
38
+ );
39
+ for (const r of f)
40
+ d.push(r);
41
+ if (y != null) {
42
+ const r = y(l, s);
43
+ r != null && d.push(r);
44
+ }
45
+ return /* @__PURE__ */ i(
46
+ "div",
47
+ {
48
+ role: "row",
49
+ className: t(...d),
50
+ style: m,
51
+ children: n.map((r) => {
52
+ const p = [
53
+ U({ kind: o }),
54
+ e?.cell
55
+ ], w = v(r.minVisibleAt);
56
+ w != null && p.push(w), r.className != null && p.push(r.className), r.isPrimary && p.push(V, e?.primaryCell);
57
+ const P = r.cell(l);
58
+ return /* @__PURE__ */ i(
59
+ "div",
60
+ {
61
+ role: "cell",
62
+ className: t(...p),
63
+ children: P
64
+ },
65
+ r.id
66
+ );
67
+ })
68
+ },
69
+ h
70
+ );
71
+ }) }), /* @__PURE__ */ j(
72
+ "div",
73
+ {
74
+ className: t(
75
+ z({ kind: o }),
76
+ e?.container,
77
+ N
78
+ ),
79
+ role: "table",
80
+ children: [
81
+ /* @__PURE__ */ i(
82
+ "div",
83
+ {
84
+ className: t(
85
+ M({ kind: o }),
86
+ e?.header,
87
+ E
88
+ ),
89
+ role: "rowgroup",
90
+ children: /* @__PURE__ */ i(
91
+ "div",
92
+ {
93
+ className: t(
94
+ K,
95
+ e?.headerRow,
96
+ ...f
97
+ ),
98
+ role: "row",
99
+ style: m,
100
+ children: n.map((l) => {
101
+ const s = [
102
+ _({ kind: o }),
103
+ e?.headerCell
104
+ ], h = v(l.minVisibleAt);
105
+ return h != null && s.push(h), l.className != null && s.push(l.className), l.isPrimary && s.push(
106
+ B,
107
+ e?.primaryHeaderCell
108
+ ), /* @__PURE__ */ i(
109
+ "div",
110
+ {
111
+ role: "columnheader",
112
+ className: t(...s),
113
+ children: l.header
114
+ },
115
+ l.id
116
+ );
117
+ })
118
+ }
119
+ )
120
+ }
121
+ ),
122
+ /* @__PURE__ */ i(
123
+ "div",
124
+ {
125
+ className: t(
126
+ q({ kind: o }),
127
+ e?.body,
128
+ k
129
+ ),
130
+ role: "rowgroup",
131
+ children: u
132
+ }
133
+ )
134
+ ]
135
+ }
136
+ );
137
+ };
138
+ export {
139
+ ee as DataTable
140
+ };
141
+ //# sourceMappingURL=DataTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTable.js","sources":["../../../../src/components/data-table/DataTable.tsx"],"sourcesContent":["import { type CSSProperties, type JSX } from 'react';\n\nimport * as styles from './DataTable.css.js';\nimport type { DataTableBreakpoint } from './tableBreakpoints.js';\nimport { cx } from '../../theme/tools.js';\nimport { useUiTranslation } from '../../i18n/useUiTranslation.js';\nimport type { SlotClasses } from '../../styles/slots.js';\n\nexport type DataTableColumn<Row> = {\n id: string;\n header: JSX.Element | string;\n cell: (row: Row) => JSX.Element | string | null;\n minVisibleAt?: DataTableBreakpoint;\n className?: string;\n isPrimary?: boolean;\n};\n\nexport type GetRowId<Row> = (row: Row, index: number) => string;\n\nexport type DataTableKind = NonNullable<\n Parameters<typeof styles.container>[0]\n>['kind'];\n\ntype DataTableSlot =\n | 'container'\n | 'header'\n | 'headerRow'\n | 'headerCell'\n | 'primaryHeaderCell'\n | 'body'\n | 'row'\n | 'rowEven'\n | 'rowOdd'\n | 'cell'\n | 'primaryCell'\n | 'emptyRow'\n | 'emptyCell';\n\nexport type DataTableProps<Row> = {\n columns: readonly DataTableColumn<Row>[];\n rows: readonly Row[];\n getRowId: GetRowId<Row>;\n emptyState?: JSX.Element;\n className?: string;\n headerClassName?: string;\n bodyClassName?: string;\n rowClassName?: (row: Row, index: number) => string | null | undefined;\n gridTemplateClassName?: string;\n gridTemplateColumns?: string;\n kind?: DataTableKind;\n classes?: SlotClasses<DataTableSlot>;\n};\n\nconst DEFAULT_TEMPLATE_CELL = 'minmax(0, 1fr)';\n\nconst getVisibilityClass = (minVisibleAt?: DataTableBreakpoint) => {\n if (minVisibleAt == null) {\n return null;\n }\n\n return styles.hideBelowRecipe({ minVisibleAt });\n};\n\nconst buildInlineTemplate = (\n columnCount: number,\n gridTemplateColumns?: string,\n): CSSProperties => {\n if (typeof gridTemplateColumns === 'string' && gridTemplateColumns !== '') {\n return { gridTemplateColumns };\n }\n return {\n gridTemplateColumns: `repeat(${columnCount}, ${DEFAULT_TEMPLATE_CELL})`,\n };\n};\n\n/**\n * Generic responsive data table component.\n */\nexport const DataTable = <Row,>({\n columns,\n rows,\n getRowId,\n emptyState,\n className,\n headerClassName,\n bodyClassName,\n rowClassName,\n gridTemplateClassName,\n gridTemplateColumns,\n kind,\n classes,\n}: DataTableProps<Row>): JSX.Element => {\n const { t } = useUiTranslation();\n const resolvedKind: DataTableKind = kind ?? 'default';\n const defaultEmptyState = (\n <div className={cx(styles.emptyCell, classes?.emptyCell)}>\n {t('common.table.empty')}\n </div>\n ) as JSX.Element;\n const resolvedEmptyState = emptyState ?? defaultEmptyState;\n const showEmpty = rows.length === 0;\n\n let inlineTemplateStyle: CSSProperties | undefined;\n if (gridTemplateClassName == null) {\n inlineTemplateStyle = buildInlineTemplate(\n columns.length,\n gridTemplateColumns,\n );\n }\n\n const sharedRowClasses: string[] = [];\n if (gridTemplateClassName != null) {\n sharedRowClasses.push(gridTemplateClassName);\n }\n\n let rowsContent: JSX.Element;\n if (showEmpty) {\n rowsContent = (\n <div className={cx(styles.emptyRow, classes?.emptyRow)} role=\"row\">\n <div role=\"cell\">{resolvedEmptyState}</div>\n </div>\n );\n } else {\n rowsContent = (\n <>\n {rows.map((row, index) => {\n const rowId = getRowId(row, index);\n const rowClasses = [styles.row({ kind: resolvedKind }), classes?.row];\n if (index % 2 === 0) {\n rowClasses.push(\n styles.rowEven({ kind: resolvedKind }),\n classes?.rowEven,\n );\n } else {\n rowClasses.push(\n styles.rowOdd({ kind: resolvedKind }),\n classes?.rowOdd,\n );\n }\n for (const sharedClass of sharedRowClasses) {\n rowClasses.push(sharedClass);\n }\n\n if (rowClassName != null) {\n const customClass = rowClassName(row, index);\n if (customClass != null) {\n rowClasses.push(customClass);\n }\n }\n\n return (\n <div\n key={rowId}\n role=\"row\"\n className={cx(...rowClasses)}\n style={inlineTemplateStyle}\n >\n {columns.map((column) => {\n const cellClasses = [\n styles.cell({ kind: resolvedKind }),\n classes?.cell,\n ];\n const visibilityClass = getVisibilityClass(column.minVisibleAt);\n\n if (visibilityClass != null) {\n cellClasses.push(visibilityClass);\n }\n\n if (column.className != null) {\n cellClasses.push(column.className);\n }\n if (column.isPrimary) {\n cellClasses.push(styles.primaryCell, classes?.primaryCell);\n }\n\n const content = column.cell(row);\n\n return (\n <div\n key={column.id}\n role=\"cell\"\n className={cx(...cellClasses)}\n >\n {content}\n </div>\n );\n })}\n </div>\n );\n })}\n </>\n );\n }\n\n return (\n <div\n className={cx(\n styles.container({ kind: resolvedKind }),\n classes?.container,\n className,\n )}\n role=\"table\"\n >\n <div\n className={cx(\n styles.header({ kind: resolvedKind }),\n classes?.header,\n headerClassName,\n )}\n role=\"rowgroup\"\n >\n <div\n className={cx(\n styles.headerRow,\n classes?.headerRow,\n ...sharedRowClasses,\n )}\n role=\"row\"\n style={inlineTemplateStyle}\n >\n {columns.map((column) => {\n const headerClasses = [\n styles.headerCell({ kind: resolvedKind }),\n classes?.headerCell,\n ];\n const visibilityClass = getVisibilityClass(column.minVisibleAt);\n if (visibilityClass != null) {\n headerClasses.push(visibilityClass);\n }\n\n if (column.className != null) {\n headerClasses.push(column.className);\n }\n if (column.isPrimary) {\n headerClasses.push(\n styles.primaryHeaderCell,\n classes?.primaryHeaderCell,\n );\n }\n\n return (\n <div\n key={column.id}\n role=\"columnheader\"\n className={cx(...headerClasses)}\n >\n {column.header}\n </div>\n );\n })}\n </div>\n </div>\n\n <div\n className={cx(\n styles.body({ kind: resolvedKind }),\n classes?.body,\n bodyClassName,\n )}\n role=\"rowgroup\"\n >\n {rowsContent}\n </div>\n </div>\n );\n};\n"],"names":["DEFAULT_TEMPLATE_CELL","getVisibilityClass","minVisibleAt","styles.hideBelowRecipe","buildInlineTemplate","columnCount","gridTemplateColumns","DataTable","columns","rows","getRowId","emptyState","className","headerClassName","bodyClassName","rowClassName","gridTemplateClassName","kind","classes","t","useUiTranslation","resolvedKind","defaultEmptyState","jsx","cx","styles.emptyCell","resolvedEmptyState","showEmpty","inlineTemplateStyle","sharedRowClasses","rowsContent","styles.emptyRow","Fragment","row","index","rowId","rowClasses","styles.row","styles.rowEven","styles.rowOdd","sharedClass","customClass","column","cellClasses","styles.cell","visibilityClass","styles.primaryCell","content","jsxs","styles.container","styles.header","styles.headerRow","headerClasses","styles.headerCell","styles.primaryHeaderCell","styles.body"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /* empty css */
2
+ /* empty css */
3
+ import { createRuntimeFn as t } from "@vanilla-extract/recipes/createRuntimeFn";
4
+ var v = "x6ceqz0 txvbqbu6f txvbqb9io txvbqbco txvbqbao6 txvbqbv8p", x = t({ defaultClassName: "x6ceqz1", variantClassNames: { align: { start: "x6ceqz2", center: "x6ceqz3", end: "x6ceqz4" } }, defaultVariants: { align: "start" }, compoundVariants: [] }), q = "x6ceqz5 txvbqbv8p", r = "x6ceqz6 txvbqbv8p txvbqbuw6", c = "x6ceqz7 txvbqbv8p txvbqbuw6", i = "x6ceqz8 txvbqbv8r txvbqb8o", s = "x6ceqz9 txvbqbl6f txvbqbt6f txvbqbuw6", m = "x6ceqza txvbqbuwx";
5
+ export {
6
+ x as alignRecipe,
7
+ v as base,
8
+ c as date,
9
+ s as ellipsis,
10
+ i as muted,
11
+ r as number,
12
+ m as summary,
13
+ q as text
14
+ };
15
+ //# sourceMappingURL=TableCell.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableCell.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1 @@
1
+ .x6ceqz2{justify-content:flex-start;text-align:left}.x6ceqz3{justify-content:center;text-align:center}.x6ceqz4{justify-content:flex-end;text-align:right}