@cratis/components 4.21.0 → 4.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/MIGRATION.md +3 -3
  2. package/compat-manifest.json +16 -16
  3. package/dist/esm/Canvas/Canvas.d.ts +12 -81
  4. package/dist/esm/Canvas/Canvas.d.ts.map +1 -1
  5. package/dist/esm/Canvas/Canvas.js +83 -676
  6. package/dist/esm/Canvas/Canvas.js.map +1 -1
  7. package/dist/esm/Canvas/CanvasCaptureAttributes.d.ts +10 -0
  8. package/dist/esm/Canvas/CanvasCaptureAttributes.d.ts.map +1 -0
  9. package/dist/esm/Canvas/CanvasCaptureAttributes.js +4 -0
  10. package/dist/esm/Canvas/CanvasCaptureAttributes.js.map +1 -0
  11. package/dist/esm/Canvas/CanvasContext.d.ts +9 -0
  12. package/dist/esm/Canvas/CanvasContext.d.ts.map +1 -0
  13. package/dist/esm/Canvas/CanvasContext.js +4 -0
  14. package/dist/esm/Canvas/CanvasContext.js.map +1 -0
  15. package/dist/esm/Canvas/CanvasHandle.d.ts +13 -0
  16. package/dist/esm/Canvas/CanvasHandle.d.ts.map +1 -0
  17. package/dist/esm/Canvas/CanvasHandle.js +4 -0
  18. package/dist/esm/Canvas/CanvasHandle.js.map +1 -0
  19. package/dist/esm/Canvas/CanvasItem.js +4 -1
  20. package/dist/esm/Canvas/CanvasItem.js.map +1 -1
  21. package/dist/esm/Canvas/CanvasItemData.d.ts +10 -0
  22. package/dist/esm/Canvas/CanvasItemData.d.ts.map +1 -0
  23. package/dist/esm/Canvas/CanvasItemData.js +4 -0
  24. package/dist/esm/Canvas/CanvasItemData.js.map +1 -0
  25. package/dist/esm/Canvas/CanvasItemRegistryContext.d.ts +5 -0
  26. package/dist/esm/Canvas/CanvasItemRegistryContext.d.ts.map +1 -0
  27. package/dist/esm/Canvas/CanvasItemRegistryContext.js +6 -0
  28. package/dist/esm/Canvas/CanvasItemRegistryContext.js.map +1 -0
  29. package/dist/esm/Canvas/CanvasItemRegistryContextValue.d.ts +26 -0
  30. package/dist/esm/Canvas/CanvasItemRegistryContextValue.d.ts.map +1 -0
  31. package/dist/esm/Canvas/CanvasItemRegistryContextValue.js +4 -0
  32. package/dist/esm/Canvas/CanvasItemRegistryContextValue.js.map +1 -0
  33. package/dist/esm/Canvas/CanvasItemRegistryEntry.d.ts +19 -0
  34. package/dist/esm/Canvas/CanvasItemRegistryEntry.d.ts.map +1 -0
  35. package/dist/esm/Canvas/CanvasItemRegistryEntry.js +4 -0
  36. package/dist/esm/Canvas/CanvasItemRegistryEntry.js.map +1 -0
  37. package/dist/esm/Canvas/WebKitGestureEvent.d.ts +13 -0
  38. package/dist/esm/Canvas/WebKitGestureEvent.d.ts.map +1 -0
  39. package/dist/esm/Canvas/WebKitGestureEvent.js +4 -0
  40. package/dist/esm/Canvas/WebKitGestureEvent.js.map +1 -0
  41. package/dist/esm/Canvas/canvasEasing.d.ts +8 -0
  42. package/dist/esm/Canvas/canvasEasing.d.ts.map +1 -0
  43. package/dist/esm/Canvas/canvasEasing.js +8 -0
  44. package/dist/esm/Canvas/canvasEasing.js.map +1 -0
  45. package/dist/esm/Canvas/canvasGestureTuning.d.ts +6 -0
  46. package/dist/esm/Canvas/canvasGestureTuning.d.ts.map +1 -0
  47. package/dist/esm/Canvas/canvasGestureTuning.js +7 -0
  48. package/dist/esm/Canvas/canvasGestureTuning.js.map +1 -0
  49. package/dist/esm/Canvas/index.js +2 -1
  50. package/dist/esm/Canvas/index.js.map +1 -1
  51. package/dist/esm/Canvas/shapes/Region/Region.js +4 -1
  52. package/dist/esm/Canvas/shapes/Region/Region.js.map +1 -1
  53. package/dist/esm/Canvas/useCanvasCamera.d.ts +37 -0
  54. package/dist/esm/Canvas/useCanvasCamera.d.ts.map +1 -0
  55. package/dist/esm/Canvas/useCanvasCamera.js +79 -0
  56. package/dist/esm/Canvas/useCanvasCamera.js.map +1 -0
  57. package/dist/esm/Canvas/useCanvasItemRegistry.d.ts +14 -0
  58. package/dist/esm/Canvas/useCanvasItemRegistry.d.ts.map +1 -0
  59. package/dist/esm/Canvas/useCanvasItemRegistry.js +59 -0
  60. package/dist/esm/Canvas/useCanvasItemRegistry.js.map +1 -0
  61. package/dist/esm/Canvas/useCanvasNavigation.d.ts +36 -0
  62. package/dist/esm/Canvas/useCanvasNavigation.d.ts.map +1 -0
  63. package/dist/esm/Canvas/useCanvasNavigation.js +186 -0
  64. package/dist/esm/Canvas/useCanvasNavigation.js.map +1 -0
  65. package/dist/esm/Canvas/useCanvasPointerGestures.d.ts +34 -0
  66. package/dist/esm/Canvas/useCanvasPointerGestures.d.ts.map +1 -0
  67. package/dist/esm/Canvas/useCanvasPointerGestures.js +178 -0
  68. package/dist/esm/Canvas/useCanvasPointerGestures.js.map +1 -0
  69. package/dist/esm/Canvas/useCanvasWheelZoom.d.ts +23 -0
  70. package/dist/esm/Canvas/useCanvasWheelZoom.d.ts.map +1 -0
  71. package/dist/esm/Canvas/useCanvasWheelZoom.js +146 -0
  72. package/dist/esm/Canvas/useCanvasWheelZoom.js.map +1 -0
  73. package/dist/esm/Canvas/useLatestRef.d.ts +8 -0
  74. package/dist/esm/Canvas/useLatestRef.d.ts.map +1 -0
  75. package/dist/esm/Canvas/useLatestRef.js +12 -0
  76. package/dist/esm/Canvas/useLatestRef.js.map +1 -0
  77. package/dist/esm/Canvas/usePixiApplication.d.ts +32 -0
  78. package/dist/esm/Canvas/usePixiApplication.d.ts.map +1 -0
  79. package/dist/esm/Canvas/usePixiApplication.js +92 -0
  80. package/dist/esm/Canvas/usePixiApplication.js.map +1 -0
  81. package/dist/esm/Canvas/usePixiItems.d.ts +19 -0
  82. package/dist/esm/Canvas/usePixiItems.d.ts.map +1 -0
  83. package/dist/esm/Canvas/usePixiItems.js +49 -0
  84. package/dist/esm/Canvas/usePixiItems.js.map +1 -0
  85. package/dist/esm/Chat/ChatSidebar.d.ts.map +1 -1
  86. package/dist/esm/Chat/ChatSidebar.js +1 -1
  87. package/dist/esm/Chat/ChatSidebar.js.map +1 -1
  88. package/dist/esm/ClassNames/classNames.d.ts +7 -0
  89. package/dist/esm/ClassNames/classNames.d.ts.map +1 -0
  90. package/dist/esm/ClassNames/classNames.js +4 -0
  91. package/dist/esm/ClassNames/classNames.js.map +1 -0
  92. package/dist/esm/Common/Breadcrumbs.d.ts.map +1 -1
  93. package/dist/esm/Common/Breadcrumbs.js +1 -1
  94. package/dist/esm/Common/Breadcrumbs.js.map +1 -1
  95. package/dist/esm/Common/ComboBox.d.ts.map +1 -1
  96. package/dist/esm/Common/ComboBox.js +1 -1
  97. package/dist/esm/Common/ComboBox.js.map +1 -1
  98. package/dist/esm/Common/DatePickerInputImplementation.d.ts.map +1 -1
  99. package/dist/esm/Common/DatePickerInputImplementation.js +1 -1
  100. package/dist/esm/Common/DatePickerInputImplementation.js.map +1 -1
  101. package/dist/esm/Common/NumberInput.d.ts.map +1 -1
  102. package/dist/esm/Common/NumberInput.js +1 -1
  103. package/dist/esm/Common/NumberInput.js.map +1 -1
  104. package/dist/esm/Common/Tabs.d.ts.map +1 -1
  105. package/dist/esm/Common/Tabs.js +1 -1
  106. package/dist/esm/Common/Tabs.js.map +1 -1
  107. package/dist/esm/Common/TagGroup.d.ts.map +1 -1
  108. package/dist/esm/Common/TagGroup.js +1 -1
  109. package/dist/esm/Common/TagGroup.js.map +1 -1
  110. package/dist/esm/Common/ToggleGroup.d.ts.map +1 -1
  111. package/dist/esm/Common/ToggleGroup.js +1 -1
  112. package/dist/esm/Common/ToggleGroup.js.map +1 -1
  113. package/dist/esm/DataTables/ColumnFilterMenu.d.ts.map +1 -1
  114. package/dist/esm/DataTables/ColumnFilterMenu.js +1 -1
  115. package/dist/esm/DataTables/ColumnFilterMenu.js.map +1 -1
  116. package/dist/esm/DataTables/DataTableBody.d.ts +22 -0
  117. package/dist/esm/DataTables/DataTableBody.d.ts.map +1 -0
  118. package/dist/esm/DataTables/DataTableBody.js +10 -0
  119. package/dist/esm/DataTables/DataTableBody.js.map +1 -0
  120. package/dist/esm/DataTables/DataTableCore.d.ts +8 -48
  121. package/dist/esm/DataTables/DataTableCore.d.ts.map +1 -1
  122. package/dist/esm/DataTables/DataTableCore.js +50 -278
  123. package/dist/esm/DataTables/DataTableCore.js.map +1 -1
  124. package/dist/esm/DataTables/DataTableHeaderCell.d.ts +25 -0
  125. package/dist/esm/DataTables/DataTableHeaderCell.d.ts.map +1 -0
  126. package/dist/esm/DataTables/DataTableHeaderCell.js +26 -0
  127. package/dist/esm/DataTables/DataTableHeaderCell.js.map +1 -0
  128. package/dist/esm/DataTables/DataTableMessageOverrides.d.ts +12 -0
  129. package/dist/esm/DataTables/DataTableMessageOverrides.d.ts.map +1 -0
  130. package/dist/esm/DataTables/DataTableMessageOverrides.js +4 -0
  131. package/dist/esm/DataTables/DataTableMessageOverrides.js.map +1 -0
  132. package/dist/esm/DataTables/DataTableMessages.d.ts +12 -0
  133. package/dist/esm/DataTables/DataTableMessages.d.ts.map +1 -0
  134. package/dist/esm/DataTables/DataTableMessages.js +4 -0
  135. package/dist/esm/DataTables/DataTableMessages.js.map +1 -0
  136. package/dist/esm/DataTables/DataTableParts.d.ts +40 -0
  137. package/dist/esm/DataTables/DataTableParts.d.ts.map +1 -0
  138. package/dist/esm/DataTables/DataTableParts.js +4 -0
  139. package/dist/esm/DataTables/DataTableParts.js.map +1 -0
  140. package/dist/esm/DataTables/DataTableRow.d.ts +22 -0
  141. package/dist/esm/DataTables/DataTableRow.d.ts.map +1 -0
  142. package/dist/esm/DataTables/DataTableRow.js +25 -0
  143. package/dist/esm/DataTables/DataTableRow.js.map +1 -0
  144. package/dist/esm/DataTables/DataTableRowClickEvent.d.ts +8 -0
  145. package/dist/esm/DataTables/DataTableRowClickEvent.d.ts.map +1 -0
  146. package/dist/esm/DataTables/DataTableRowClickEvent.js +4 -0
  147. package/dist/esm/DataTables/DataTableRowClickEvent.js.map +1 -0
  148. package/dist/esm/DataTables/DataTableSearch.d.ts +13 -0
  149. package/dist/esm/DataTables/DataTableSearch.d.ts.map +1 -0
  150. package/dist/esm/DataTables/DataTableSearch.js +7 -0
  151. package/dist/esm/DataTables/DataTableSearch.js.map +1 -0
  152. package/dist/esm/DataTables/DataTableState.d.ts +18 -0
  153. package/dist/esm/DataTables/DataTableState.d.ts.map +1 -0
  154. package/dist/esm/DataTables/DataTableState.js +4 -0
  155. package/dist/esm/DataTables/DataTableState.js.map +1 -0
  156. package/dist/esm/DataTables/DataTableStateProps.d.ts +20 -0
  157. package/dist/esm/DataTables/DataTableStateProps.d.ts.map +1 -0
  158. package/dist/esm/DataTables/DataTableStateProps.js +4 -0
  159. package/dist/esm/DataTables/DataTableStateProps.js.map +1 -0
  160. package/dist/esm/DataTables/ProcessedRow.d.ts +8 -0
  161. package/dist/esm/DataTables/ProcessedRow.d.ts.map +1 -0
  162. package/dist/esm/DataTables/ProcessedRow.js +4 -0
  163. package/dist/esm/DataTables/ProcessedRow.js.map +1 -0
  164. package/dist/esm/DataTables/RowProcessingState.d.ts +17 -0
  165. package/dist/esm/DataTables/RowProcessingState.d.ts.map +1 -0
  166. package/dist/esm/DataTables/RowProcessingState.js +4 -0
  167. package/dist/esm/DataTables/RowProcessingState.js.map +1 -0
  168. package/dist/esm/DataTables/RowSelection.d.ts +19 -0
  169. package/dist/esm/DataTables/RowSelection.d.ts.map +1 -0
  170. package/dist/esm/DataTables/RowSelection.js +4 -0
  171. package/dist/esm/DataTables/RowSelection.js.map +1 -0
  172. package/dist/esm/DataTables/RowSelectionSource.d.ts +16 -0
  173. package/dist/esm/DataTables/RowSelectionSource.d.ts.map +1 -0
  174. package/dist/esm/DataTables/RowSelectionSource.js +4 -0
  175. package/dist/esm/DataTables/RowSelectionSource.js.map +1 -0
  176. package/dist/esm/DataTables/matchesFilterEntry.d.ts +15 -0
  177. package/dist/esm/DataTables/matchesFilterEntry.d.ts.map +1 -0
  178. package/dist/esm/DataTables/matchesFilterEntry.js +70 -0
  179. package/dist/esm/DataTables/matchesFilterEntry.js.map +1 -0
  180. package/dist/esm/DataTables/processRows.d.ts +10 -0
  181. package/dist/esm/DataTables/processRows.d.ts.map +1 -0
  182. package/dist/esm/DataTables/processRows.js +42 -0
  183. package/dist/esm/DataTables/processRows.js.map +1 -0
  184. package/dist/esm/DataTables/useDataTableMessages.d.ts +9 -0
  185. package/dist/esm/DataTables/useDataTableMessages.d.ts.map +1 -0
  186. package/dist/esm/DataTables/useDataTableMessages.js +33 -0
  187. package/dist/esm/DataTables/useDataTableMessages.js.map +1 -0
  188. package/dist/esm/DataTables/useDataTableState.d.ts +10 -0
  189. package/dist/esm/DataTables/useDataTableState.d.ts.map +1 -0
  190. package/dist/esm/DataTables/useDataTableState.js +19 -0
  191. package/dist/esm/DataTables/useDataTableState.js.map +1 -0
  192. package/dist/esm/DataTables/useRowSelection.d.ts +9 -0
  193. package/dist/esm/DataTables/useRowSelection.d.ts.map +1 -0
  194. package/dist/esm/DataTables/useRowSelection.js +87 -0
  195. package/dist/esm/DataTables/useRowSelection.js.map +1 -0
  196. package/dist/esm/DataTables/valueAtPath.d.ts +10 -0
  197. package/dist/esm/DataTables/valueAtPath.d.ts.map +1 -0
  198. package/dist/esm/DataTables/valueAtPath.js +18 -0
  199. package/dist/esm/DataTables/valueAtPath.js.map +1 -0
  200. package/dist/esm/Dialogs/DialogImplementation.d.ts.map +1 -1
  201. package/dist/esm/Dialogs/DialogImplementation.js +1 -1
  202. package/dist/esm/Dialogs/DialogImplementation.js.map +1 -1
  203. package/dist/esm/Display/Message.d.ts +8 -1
  204. package/dist/esm/Display/Message.d.ts.map +1 -1
  205. package/dist/esm/Display/Message.js +1 -1
  206. package/dist/esm/Display/Message.js.map +1 -1
  207. package/dist/esm/Dropdown/DropdownImplementation.d.ts.map +1 -1
  208. package/dist/esm/Dropdown/DropdownImplementation.js +1 -1
  209. package/dist/esm/Dropdown/DropdownImplementation.js.map +1 -1
  210. package/dist/esm/Notifications/Toaster.d.ts.map +1 -1
  211. package/dist/esm/Notifications/Toaster.js +1 -1
  212. package/dist/esm/Notifications/Toaster.js.map +1 -1
  213. package/dist/esm/PivotViewer/components/PivotCanvas.d.ts +7 -50
  214. package/dist/esm/PivotViewer/components/PivotCanvas.d.ts.map +1 -1
  215. package/dist/esm/PivotViewer/components/PivotCanvas.js +34 -433
  216. package/dist/esm/PivotViewer/components/PivotCanvas.js.map +1 -1
  217. package/dist/esm/PivotViewer/components/PivotCanvasProps.d.ts +51 -0
  218. package/dist/esm/PivotViewer/components/PivotCanvasProps.d.ts.map +1 -0
  219. package/dist/esm/PivotViewer/components/PivotCanvasProps.js +4 -0
  220. package/dist/esm/PivotViewer/components/PivotCanvasProps.js.map +1 -0
  221. package/dist/esm/PivotViewer/components/pivot/PivotRenderContext.d.ts +16 -0
  222. package/dist/esm/PivotViewer/components/pivot/PivotRenderContext.d.ts.map +1 -0
  223. package/dist/esm/PivotViewer/components/pivot/PivotRenderContext.js +4 -0
  224. package/dist/esm/PivotViewer/components/pivot/PivotRenderContext.js.map +1 -0
  225. package/dist/esm/PivotViewer/components/pivot/PivotStage.d.ts +19 -0
  226. package/dist/esm/PivotViewer/components/pivot/PivotStage.d.ts.map +1 -0
  227. package/dist/esm/PivotViewer/components/pivot/PivotStage.js +4 -0
  228. package/dist/esm/PivotViewer/components/pivot/PivotStage.js.map +1 -0
  229. package/dist/esm/PivotViewer/components/pivot/PivotTransitionState.d.ts +21 -0
  230. package/dist/esm/PivotViewer/components/pivot/PivotTransitionState.d.ts.map +1 -0
  231. package/dist/esm/PivotViewer/components/pivot/PivotTransitionState.js +4 -0
  232. package/dist/esm/PivotViewer/components/pivot/PivotTransitionState.js.map +1 -0
  233. package/dist/esm/PivotViewer/components/pivot/asReactMouseEvent.d.ts +8 -0
  234. package/dist/esm/PivotViewer/components/pivot/asReactMouseEvent.d.ts.map +1 -0
  235. package/dist/esm/PivotViewer/components/pivot/asReactMouseEvent.js +6 -0
  236. package/dist/esm/PivotViewer/components/pivot/asReactMouseEvent.js.map +1 -0
  237. package/dist/esm/PivotViewer/components/pivot/sprites.js +1 -1
  238. package/dist/esm/PivotViewer/components/pivot/usePivotCardColors.d.ts +22 -0
  239. package/dist/esm/PivotViewer/components/pivot/usePivotCardColors.d.ts.map +1 -0
  240. package/dist/esm/PivotViewer/components/pivot/usePivotCardColors.js +25 -0
  241. package/dist/esm/PivotViewer/components/pivot/usePivotCardColors.js.map +1 -0
  242. package/dist/esm/PivotViewer/components/pivot/usePivotGroupBackgrounds.d.ts +8 -0
  243. package/dist/esm/PivotViewer/components/pivot/usePivotGroupBackgrounds.d.ts.map +1 -0
  244. package/dist/esm/PivotViewer/components/pivot/usePivotGroupBackgrounds.js +53 -0
  245. package/dist/esm/PivotViewer/components/pivot/usePivotGroupBackgrounds.js.map +1 -0
  246. package/dist/esm/PivotViewer/components/pivot/usePivotScrollSync.d.ts +8 -0
  247. package/dist/esm/PivotViewer/components/pivot/usePivotScrollSync.d.ts.map +1 -0
  248. package/dist/esm/PivotViewer/components/pivot/usePivotScrollSync.js +100 -0
  249. package/dist/esm/PivotViewer/components/pivot/usePivotScrollSync.js.map +1 -0
  250. package/dist/esm/PivotViewer/components/pivot/usePivotSelectionHighlight.d.ts +7 -0
  251. package/dist/esm/PivotViewer/components/pivot/usePivotSelectionHighlight.d.ts.map +1 -0
  252. package/dist/esm/PivotViewer/components/pivot/usePivotSelectionHighlight.js +35 -0
  253. package/dist/esm/PivotViewer/components/pivot/usePivotSelectionHighlight.js.map +1 -0
  254. package/dist/esm/PivotViewer/components/pivot/usePivotSpriteSync.d.ts +8 -0
  255. package/dist/esm/PivotViewer/components/pivot/usePivotSpriteSync.d.ts.map +1 -0
  256. package/dist/esm/PivotViewer/components/pivot/usePivotSpriteSync.js +123 -0
  257. package/dist/esm/PivotViewer/components/pivot/usePivotSpriteSync.js.map +1 -0
  258. package/dist/esm/PivotViewer/components/pivot/usePivotStage.d.ts +21 -0
  259. package/dist/esm/PivotViewer/components/pivot/usePivotStage.d.ts.map +1 -0
  260. package/dist/esm/PivotViewer/components/pivot/usePivotStage.js +171 -0
  261. package/dist/esm/PivotViewer/components/pivot/usePivotStage.js.map +1 -0
  262. package/dist/esm/PivotViewer/components/pivot/usePivotTransitionState.d.ts +13 -0
  263. package/dist/esm/PivotViewer/components/pivot/usePivotTransitionState.d.ts.map +1 -0
  264. package/dist/esm/PivotViewer/components/pivot/usePivotTransitionState.js +31 -0
  265. package/dist/esm/PivotViewer/components/pivot/usePivotTransitionState.js.map +1 -0
  266. package/dist/esm/TimeMachine/EventsView.d.ts.map +1 -1
  267. package/dist/esm/TimeMachine/EventsView.js +1 -1
  268. package/dist/esm/TimeMachine/EventsView.js.map +1 -1
  269. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.js","sources":["../../../Common/Tabs.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { type HTMLAttributes, type Key, type ReactNode } from 'react';\nimport {\n Tab as AriaTab,\n TabList as AriaTabList,\n TabPanel as AriaTabPanel,\n Tabs as AriaTabs,\n} from 'react-aria-components/Tabs';\nimport type { ExactPartKeys } from '../types/ExactPartKeys';\nimport type { PartsOf } from '../types/parts';\n\n/** Attributes a consumer may hand to one {@link Tabs} part: class, style, title and data attributes. */\nexport type TabsPartAttributes = Pick<\n HTMLAttributes<HTMLElement>,\n 'className' | 'style' | 'title'\n> & {\n [dataAttribute: `data-${string}`]: string | number | boolean | undefined;\n};\n\n/** One tab in a {@link Tabs} set. */\nexport interface TabItem {\n /** Value identifying this tab. */\n id: string;\n /** Visible label. */\n label: ReactNode;\n /** Content revealed when this tab is selected. */\n content: ReactNode;\n /** Whether the tab cannot be selected. */\n disabled?: boolean;\n}\n\n/** Stable Cratis-owned parts for styling a {@link Tabs} set. */\nexport interface TabsParts {\n /** The element wrapping list and panels. */\n root?: TabsPartAttributes;\n /** The tab list. */\n list?: TabsPartAttributes;\n /** One tab. */\n tab?: TabsPartAttributes;\n /** One panel. */\n panel?: TabsPartAttributes;\n}\n\nconst tabsPartsMatchManifest: ExactPartKeys<TabsParts, PartsOf<'Tabs'>> = true;\nvoid tabsPartsMatchManifest;\n\n/** Props for {@link Tabs}. */\nexport interface TabsProps {\n /** The tabs, in display order. */\n tabs: TabItem[];\n /** Id of the selected tab. */\n value: string;\n /** Called with the newly selected tab's id. */\n onChange: (value: string) => void;\n /** Whether every tab is disabled. */\n disabled?: boolean;\n /** Accessible name for the tab list, when no visible heading names it. */\n 'aria-label'?: string;\n /** Id of the element naming the tab list. */\n 'aria-labelledby'?: string;\n /** Extra class name for the root element. */\n className?: string;\n /** Cratis-owned per-part attributes. */\n pt?: TabsParts;\n}\n\nconst classNames = (...values: Array<string | undefined>) =>\n values.filter(Boolean).join(' ');\n\n/**\n * A tab set: a list of tabs, each optionally revealing a panel.\n *\n * Arrow keys move between tabs and Home/End jump to the ends, with one tab stop for the whole list,\n * which is what the `tablist` role promises and a row of ordinary buttons does not keep. Each tab is\n * wired to its panel through `aria-controls`.\n *\n * Every tab owns a panel: the selected tab points at one, so a tab set without panels would name an\n * element that is not there. When the choice drives a view rendered elsewhere it is a *value* rather\n * than a panel — reach for `ToggleGroup`, which says so to assistive technology.\n */\nexport const Tabs = ({\n tabs,\n value,\n onChange,\n disabled = false,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n className,\n pt,\n}: TabsProps) => (\n <AriaTabs\n {...pt?.root}\n selectedKey={value}\n onSelectionChange={(key: Key) => onChange(String(key))}\n isDisabled={disabled}\n className={classNames('cratis-tabs', pt?.root?.className, className)}\n data-cratis-part='root'\n data-disabled={disabled || undefined}\n >\n <AriaTabList\n {...pt?.list}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={classNames('cratis-tabs__list', pt?.list?.className)}\n data-cratis-part='list'\n >\n {tabs.map((tab) => (\n <AriaTab\n key={tab.id}\n {...pt?.tab}\n id={tab.id}\n isDisabled={tab.disabled}\n className={classNames('cratis-tabs__tab', pt?.tab?.className)}\n data-cratis-part='tab'\n data-selected={tab.id === value || undefined}\n data-disabled={disabled || tab.disabled || undefined}\n >\n {tab.label}\n </AriaTab>\n ))}\n </AriaTabList>\n {tabs.map((tab) => (\n <AriaTabPanel\n key={tab.id}\n {...pt?.panel}\n id={tab.id}\n className={classNames('cratis-tabs__panel', pt?.panel?.className)}\n data-cratis-part='panel'\n data-selected={tab.id === value || undefined}\n >\n {tab.content}\n </AriaTabPanel>\n ))}\n </AriaTabs>\n);\n"],"names":["_jsxs","AriaTabs","_jsx","AriaTabList","AriaTab","AriaTabPanel"],"mappings":";;;AAoEA,MAAM,UAAU,GAAG,CAAC,GAAG,MAAiC,KACpD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAa7B,MAAM,IAAI,GAAG,CAAC,EACjB,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,SAAS,EACT,EAAE,GACM,MACRA,IAAA,CAACC,MAAQ,EAAA,EAAA,GACD,EAAE,EAAE,IAAI,EACZ,WAAW,EAAE,KAAK,EAClB,iBAAiB,EAAE,CAAC,GAAQ,KAAK,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EACtD,UAAU,EAAE,QAAQ,EACpB,SAAS,EAAE,UAAU,CAAC,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,EAAA,kBAAA,EACnD,MAAM,EAAA,eAAA,EACR,QAAQ,IAAI,SAAS,EAAA,QAAA,EAAA,CAEpCC,GAAA,CAACC,OAAW,EAAA,EAAA,GACJ,EAAE,EAAE,IAAI,EAAA,YAAA,EACA,SAAS,EAAA,iBAAA,EACJ,cAAc,EAC/B,SAAS,EAAE,UAAU,CAAC,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,EAAA,kBAAA,EAC9C,MAAM,EAAA,QAAA,EAEtB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MACVD,IAACE,GAAO,EAAA,EAAA,GAEA,EAAE,EAAE,GAAG,EACX,EAAE,EAAE,GAAG,CAAC,EAAE,EACV,UAAU,EAAE,GAAG,CAAC,QAAQ,EACxB,SAAS,EAAE,UAAU,CAAC,kBAAkB,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,EAAA,kBAAA,EAC5C,KAAK,EAAA,eAAA,EACP,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,SAAS,EAAA,eAAA,EAC7B,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,SAAS,EAAA,QAAA,EAEnD,GAAG,CAAC,KAAK,EAAA,EATL,GAAG,CAAC,EAAE,CAUL,CACb,CAAC,EAAA,CACQ,EACb,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MACVF,GAAA,CAACG,QAAY,EAAA,EAAA,GAEL,EAAE,EAAE,KAAK,EACb,EAAE,EAAE,GAAG,CAAC,EAAE,EACV,SAAS,EAAE,UAAU,CAAC,oBAAoB,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,EAAA,kBAAA,EAChD,OAAO,EAAA,eAAA,EACT,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,SAAS,EAAA,QAAA,EAE3C,GAAG,CAAC,OAAO,EAAA,EAPP,GAAG,CAAC,EAAE,CAQA,CAClB,CAAC,CAAA,EAAA,CACK;;"}
1
+ {"version":3,"file":"Tabs.js","sources":["../../../Common/Tabs.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { type HTMLAttributes, type Key, type ReactNode } from 'react';\nimport {\n Tab as AriaTab,\n TabList as AriaTabList,\n TabPanel as AriaTabPanel,\n Tabs as AriaTabs,\n} from 'react-aria-components/Tabs';\nimport type { ExactPartKeys } from '../types/ExactPartKeys';\nimport type { PartsOf } from '../types/parts';\nimport { classNames } from '../ClassNames/classNames';\n\n/** Attributes a consumer may hand to one {@link Tabs} part: class, style, title and data attributes. */\nexport type TabsPartAttributes = Pick<\n HTMLAttributes<HTMLElement>,\n 'className' | 'style' | 'title'\n> & {\n [dataAttribute: `data-${string}`]: string | number | boolean | undefined;\n};\n\n/** One tab in a {@link Tabs} set. */\nexport interface TabItem {\n /** Value identifying this tab. */\n id: string;\n /** Visible label. */\n label: ReactNode;\n /** Content revealed when this tab is selected. */\n content: ReactNode;\n /** Whether the tab cannot be selected. */\n disabled?: boolean;\n}\n\n/** Stable Cratis-owned parts for styling a {@link Tabs} set. */\nexport interface TabsParts {\n /** The element wrapping list and panels. */\n root?: TabsPartAttributes;\n /** The tab list. */\n list?: TabsPartAttributes;\n /** One tab. */\n tab?: TabsPartAttributes;\n /** One panel. */\n panel?: TabsPartAttributes;\n}\n\nconst tabsPartsMatchManifest: ExactPartKeys<TabsParts, PartsOf<'Tabs'>> = true;\nvoid tabsPartsMatchManifest;\n\n/** Props for {@link Tabs}. */\nexport interface TabsProps {\n /** The tabs, in display order. */\n tabs: TabItem[];\n /** Id of the selected tab. */\n value: string;\n /** Called with the newly selected tab's id. */\n onChange: (value: string) => void;\n /** Whether every tab is disabled. */\n disabled?: boolean;\n /** Accessible name for the tab list, when no visible heading names it. */\n 'aria-label'?: string;\n /** Id of the element naming the tab list. */\n 'aria-labelledby'?: string;\n /** Extra class name for the root element. */\n className?: string;\n /** Cratis-owned per-part attributes. */\n pt?: TabsParts;\n}\n\n/**\n * A tab set: a list of tabs, each optionally revealing a panel.\n *\n * Arrow keys move between tabs and Home/End jump to the ends, with one tab stop for the whole list,\n * which is what the `tablist` role promises and a row of ordinary buttons does not keep. Each tab is\n * wired to its panel through `aria-controls`.\n *\n * Every tab owns a panel: the selected tab points at one, so a tab set without panels would name an\n * element that is not there. When the choice drives a view rendered elsewhere it is a *value* rather\n * than a panel — reach for `ToggleGroup`, which says so to assistive technology.\n */\nexport const Tabs = ({\n tabs,\n value,\n onChange,\n disabled = false,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n className,\n pt,\n}: TabsProps) => (\n <AriaTabs\n {...pt?.root}\n selectedKey={value}\n onSelectionChange={(key: Key) => onChange(String(key))}\n isDisabled={disabled}\n className={classNames('cratis-tabs', pt?.root?.className, className)}\n data-cratis-part='root'\n data-disabled={disabled || undefined}\n >\n <AriaTabList\n {...pt?.list}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={classNames('cratis-tabs__list', pt?.list?.className)}\n data-cratis-part='list'\n >\n {tabs.map((tab) => (\n <AriaTab\n key={tab.id}\n {...pt?.tab}\n id={tab.id}\n isDisabled={tab.disabled}\n className={classNames('cratis-tabs__tab', pt?.tab?.className)}\n data-cratis-part='tab'\n data-selected={tab.id === value || undefined}\n data-disabled={disabled || tab.disabled || undefined}\n >\n {tab.label}\n </AriaTab>\n ))}\n </AriaTabList>\n {tabs.map((tab) => (\n <AriaTabPanel\n key={tab.id}\n {...pt?.panel}\n id={tab.id}\n className={classNames('cratis-tabs__panel', pt?.panel?.className)}\n data-cratis-part='panel'\n data-selected={tab.id === value || undefined}\n >\n {tab.content}\n </AriaTabPanel>\n ))}\n </AriaTabs>\n);\n"],"names":["_jsxs","AriaTabs","_jsx","AriaTabList","AriaTab","AriaTabPanel"],"mappings":";;;;AAgFO,MAAM,IAAI,GAAG,CAAC,EACjB,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,SAAS,EACT,EAAE,GACM,MACRA,IAAA,CAACC,MAAQ,EAAA,EAAA,GACD,EAAE,EAAE,IAAI,EACZ,WAAW,EAAE,KAAK,EAClB,iBAAiB,EAAE,CAAC,GAAQ,KAAK,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EACtD,UAAU,EAAE,QAAQ,EACpB,SAAS,EAAE,UAAU,CAAC,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,EAAA,kBAAA,EACnD,MAAM,EAAA,eAAA,EACR,QAAQ,IAAI,SAAS,EAAA,QAAA,EAAA,CAEpCC,GAAA,CAACC,OAAW,EAAA,EAAA,GACJ,EAAE,EAAE,IAAI,EAAA,YAAA,EACA,SAAS,EAAA,iBAAA,EACJ,cAAc,EAC/B,SAAS,EAAE,UAAU,CAAC,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,EAAA,kBAAA,EAC9C,MAAM,EAAA,QAAA,EAEtB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MACVD,IAACE,GAAO,EAAA,EAAA,GAEA,EAAE,EAAE,GAAG,EACX,EAAE,EAAE,GAAG,CAAC,EAAE,EACV,UAAU,EAAE,GAAG,CAAC,QAAQ,EACxB,SAAS,EAAE,UAAU,CAAC,kBAAkB,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,EAAA,kBAAA,EAC5C,KAAK,EAAA,eAAA,EACP,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,SAAS,EAAA,eAAA,EAC7B,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,SAAS,EAAA,QAAA,EAEnD,GAAG,CAAC,KAAK,EAAA,EATL,GAAG,CAAC,EAAE,CAUL,CACb,CAAC,EAAA,CACQ,EACb,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MACVF,GAAA,CAACG,QAAY,EAAA,EAAA,GAEL,EAAE,EAAE,KAAK,EACb,EAAE,EAAE,GAAG,CAAC,EAAE,EACV,SAAS,EAAE,UAAU,CAAC,oBAAoB,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,EAAA,kBAAA,EAChD,OAAO,EAAA,eAAA,EACT,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,SAAS,EAAA,QAAA,EAE3C,GAAG,CAAC,OAAO,EAAA,EAPP,GAAG,CAAC,EAAE,CAQA,CAClB,CAAC,CAAA,EAAA,CACK;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TagGroup.d.ts","sourceRoot":"","sources":["../../../Common/TagGroup.tsx"],"names":[],"mappings":"AAGA,OAAO,EAGH,KAAK,cAAc,EACnB,KAAK,mBAAmB,EAExB,KAAK,SAAS,EACjB,MAAM,OAAO,CAAC;AAWf,4GAA4G;AAC5G,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACrC,cAAc,CAAC,WAAW,CAAC,EAC3B,WAAW,GAAG,OAAO,GAAG,OAAO,CAClC,GAAG;IACA,CAAC,aAAa,EAAE,QAAQ,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CAC5E,CAAC;AAEF,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC1B,mDAAmD;IACnD,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,oBAAoB;IACpB,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,eAAe;IACf,GAAG,CAAC,EAAE,sBAAsB,CAAC;IAC7B,6BAA6B;IAC7B,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,wCAAwC;IACxC,KAAK,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;CACjD;AAKD,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC1B,wCAAwC;IACxC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,sEAAsE;IACtE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,iFAAiF;IACjF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yFAAyF;IACzF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0FAA0F;IAC1F,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC;;;;OAIG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,EAAE,CAAC,EAAE,aAAa,CAAC;CACtB;AAKD;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,6OAiBlB,aAAa,gCA0Hf,CAAC"}
1
+ {"version":3,"file":"TagGroup.d.ts","sourceRoot":"","sources":["../../../Common/TagGroup.tsx"],"names":[],"mappings":"AAGA,OAAO,EAGH,KAAK,cAAc,EACnB,KAAK,mBAAmB,EAExB,KAAK,SAAS,EACjB,MAAM,OAAO,CAAC;AAYf,4GAA4G;AAC5G,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACrC,cAAc,CAAC,WAAW,CAAC,EAC3B,WAAW,GAAG,OAAO,GAAG,OAAO,CAClC,GAAG;IACA,CAAC,aAAa,EAAE,QAAQ,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CAC5E,CAAC;AAEF,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC1B,mDAAmD;IACnD,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,oBAAoB;IACpB,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,eAAe;IACf,GAAG,CAAC,EAAE,sBAAsB,CAAC;IAC7B,6BAA6B;IAC7B,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,wCAAwC;IACxC,KAAK,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;CACjD;AAKD,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC1B,wCAAwC;IACxC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,sEAAsE;IACtE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,iFAAiF;IACjF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yFAAyF;IACzF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0FAA0F;IAC1F,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC;;;;OAIG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,EAAE,CAAC,EAAE,aAAa,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,6OAiBlB,aAAa,gCA0Hf,CAAC"}
@@ -3,8 +3,8 @@ import { useId, useState } from 'react';
3
3
  import { TagGroup as TagGroup$1, TagList, Tag } from 'react-aria-components/TagGroup';
4
4
  import { Button } from 'react-aria-components/Button';
5
5
  import { useCratisIcon } from '../configuration/useCratisIcon.js';
6
+ import { classNames } from '../ClassNames/classNames.js';
6
7
 
7
- const classNames = (...values) => values.filter(Boolean).join(' ');
8
8
  const TagGroup = ({ value, onChange, editable = true, placeholder, separators = [','], allowDuplicates = false, disabled = false, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy, invalid = false, id, removeLabel, removeIcon, className, pt, }) => {
9
9
  const icon = useCratisIcon();
10
10
  const resolvedRemoveIcon = icon('remove', '×', removeIcon);
@@ -1 +1 @@
1
- {"version":3,"file":"TagGroup.js","sources":["../../../Common/TagGroup.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport {\n useId,\n useState,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type Key,\n type ReactNode,\n} from 'react';\nimport {\n Tag as AriaTag,\n TagGroup as AriaTagGroup,\n TagList as AriaTagList,\n} from 'react-aria-components/TagGroup';\nimport { Button as AriaButton } from 'react-aria-components/Button';\nimport { useCratisIcon } from '../configuration/useCratisIcon';\nimport type { ExactPartKeys } from '../types/ExactPartKeys';\nimport type { PartsOf } from '../types/parts';\n\n/** Attributes a consumer may hand to one {@link TagGroup} part: class, style, title and data attributes. */\nexport type TagGroupPartAttributes = Pick<\n HTMLAttributes<HTMLElement>,\n 'className' | 'style' | 'title'\n> & {\n [dataAttribute: `data-${string}`]: string | number | boolean | undefined;\n};\n\n/** Stable Cratis-owned parts for styling a {@link TagGroup}. */\nexport interface TagGroupParts {\n /** The element wrapping the tags and the entry. */\n root?: TagGroupPartAttributes;\n /** The tag list. */\n list?: TagGroupPartAttributes;\n /** One tag. */\n tag?: TagGroupPartAttributes;\n /** A tag's remove button. */\n remove?: TagGroupPartAttributes;\n /** The text entry that adds a value. */\n input?: InputHTMLAttributes<HTMLInputElement>;\n}\n\nconst tagGroupPartsMatchManifest: ExactPartKeys<TagGroupParts, PartsOf<'TagGroup'>> = true;\nvoid tagGroupPartsMatchManifest;\n\n/** Props for {@link TagGroup}. */\nexport interface TagGroupProps {\n /** Current values, in display order. */\n value: string[];\n /** Called with the next list whenever a value is added or removed. */\n onChange: (value: string[]) => void;\n /**\n * Whether a text entry is offered for adding values. A group without one is a read-only display\n * of removable tags.\n */\n editable?: boolean;\n /** Placeholder for the text entry. */\n placeholder?: string;\n /**\n * Characters that commit the typed value in addition to Enter. Defaults to a comma. A pasted\n * string is split on the same separators, so pasting a comma-separated list adds each value.\n */\n separators?: string[];\n /** Whether a duplicate of an existing value is accepted. Defaults to `false`. */\n allowDuplicates?: boolean;\n /** Whether the whole control is disabled. */\n disabled?: boolean;\n /** Accessible name for the group. */\n 'aria-label'?: string;\n /** Id of the element naming the group. */\n 'aria-labelledby'?: string;\n /** Id of the element describing the control — typically a field's error or hint text. */\n 'aria-describedby'?: string;\n /** Marks the text entry invalid for assistive technology. */\n invalid?: boolean;\n /** Id forwarded to the text entry so an external `<label htmlFor>` associates with it. */\n id?: string;\n /** Accessible label for a tag's remove button. Receives the tag's value. */\n removeLabel?: (value: string) => string;\n /**\n * Glyph inside a tag's remove button. Names this one tag group and wins over the provider's\n * `icons.remove`; defaults to a multiplication sign when neither is set. The button, its\n * accessible name and its keyboard behaviour are unaffected.\n */\n removeIcon?: ReactNode;\n /** Extra class name for the root element. */\n className?: string;\n /** Cratis-owned per-part attributes. */\n pt?: TagGroupParts;\n}\n\nconst classNames = (...values: Array<string | undefined>) =>\n values.filter(Boolean).join(' ');\n\n/**\n * A group of removable values with an optional text entry — the control behind a tag or chips field.\n *\n * Every tag is reachable with the arrow keys and removable with Backspace or Delete, which is what\n * the `grid`/`row` semantics React Aria gives a tag group promise; a row of `<span>`s with a close\n * button cannot be operated from the keyboard at all. In the entry, Enter and each configured\n * separator commit the typed value, Backspace on an empty entry removes the last tag, and a pasted\n * string is split on the separators.\n */\nexport const TagGroup = ({\n value,\n onChange,\n editable = true,\n placeholder,\n separators = [','],\n allowDuplicates = false,\n disabled = false,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n invalid = false,\n id,\n removeLabel,\n removeIcon,\n className,\n pt,\n}: TagGroupProps) => {\n const icon = useCratisIcon();\n const resolvedRemoveIcon = icon('remove', '×', removeIcon);\n const generatedId = useId();\n const inputId = id ?? `cratis-tag-group-${generatedId}`;\n const [draft, setDraft] = useState('');\n\n const add = (candidates: string[]) => {\n const next = [...value];\n for (const candidate of candidates) {\n const trimmed = candidate.trim();\n if (!trimmed) continue;\n if (!allowDuplicates && next.includes(trimmed)) continue;\n next.push(trimmed);\n }\n if (next.length !== value.length) onChange(next);\n setDraft('');\n };\n\n const remove = (keys: Set<Key>) =>\n onChange(value.filter((entry) => !keys.has(entry)));\n\n const splitOn = (text: string) =>\n separators.length === 0\n ? [text]\n : text.split(new RegExp(`[${separators.map(escapeForClass).join('')}]`));\n\n return (\n <div\n {...pt?.root}\n className={classNames('cratis-tag-group', pt?.root?.className, className)}\n data-cratis-part='root'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n >\n <AriaTagGroup\n // React Aria renders a wrapper here. It generates a block box, which would trap the\n // tags in their own formatting context — the root's flex layout, and therefore the\n // gap between tags, would never reach them. It has no part on purpose: it is not a\n // styling surface, it just has to disappear from layout.\n className='cratis-tag-group__group'\n selectionMode='none'\n onRemove={remove}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n >\n <AriaTagList\n {...pt?.list}\n items={value.map((entry) => ({ id: entry }))}\n className={classNames('cratis-tag-group__list', pt?.list?.className)}\n data-cratis-part='list'\n >\n {(item: { id: string }) => (\n <AriaTag\n {...pt?.tag}\n id={item.id}\n textValue={item.id}\n isDisabled={disabled}\n className={classNames('cratis-tag-group__tag', pt?.tag?.className)}\n data-cratis-part='tag'\n data-disabled={disabled || undefined}\n >\n <span className='cratis-tag-group__tag-label'>{item.id}</span>\n {!disabled && (\n <AriaButton\n {...pt?.remove}\n slot='remove'\n aria-label={removeLabel?.(item.id)}\n className={classNames(\n 'cratis-tag-group__remove',\n pt?.remove?.className,\n )}\n data-cratis-part='remove'\n >\n <span aria-hidden='true'>{resolvedRemoveIcon}</span>\n </AriaButton>\n )}\n </AriaTag>\n )}\n </AriaTagList>\n </AriaTagGroup>\n {editable && (\n <input\n {...pt?.input}\n id={inputId}\n type='text'\n value={draft}\n disabled={disabled}\n placeholder={placeholder}\n aria-label={ariaLabelledBy ? undefined : ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n aria-invalid={invalid || undefined}\n className={classNames('cratis-tag-group__input', pt?.input?.className)}\n data-cratis-part='input'\n data-invalid={invalid || undefined}\n onChange={(event) => setDraft(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || separators.includes(event.key)) {\n event.preventDefault();\n add([draft]);\n } else if (\n event.key === 'Backspace' &&\n draft === '' &&\n value.length > 0\n ) {\n onChange(value.slice(0, -1));\n }\n }}\n onPaste={(event) => {\n const text = event.clipboardData.getData('text');\n if (!separators.some((separator) => text.includes(separator))) return;\n event.preventDefault();\n add(splitOn(text));\n }}\n onBlur={() => {\n if (draft.trim()) add([draft]);\n }}\n />\n )}\n </div>\n );\n};\n\n/** Escapes a separator for use inside a character class, so a `-` or `]` cannot reshape it. */\nconst escapeForClass = (separator: string) => separator.replace(/[\\\\\\]^-]/gu, '\\\\$&');\n"],"names":["_jsxs","_jsx","AriaTagGroup","AriaTagList","AriaTag","AriaButton"],"mappings":"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"}
1
+ {"version":3,"file":"TagGroup.js","sources":["../../../Common/TagGroup.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport {\n useId,\n useState,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type Key,\n type ReactNode,\n} from 'react';\nimport {\n Tag as AriaTag,\n TagGroup as AriaTagGroup,\n TagList as AriaTagList,\n} from 'react-aria-components/TagGroup';\nimport { Button as AriaButton } from 'react-aria-components/Button';\nimport { useCratisIcon } from '../configuration/useCratisIcon';\nimport type { ExactPartKeys } from '../types/ExactPartKeys';\nimport type { PartsOf } from '../types/parts';\nimport { classNames } from '../ClassNames/classNames';\n\n/** Attributes a consumer may hand to one {@link TagGroup} part: class, style, title and data attributes. */\nexport type TagGroupPartAttributes = Pick<\n HTMLAttributes<HTMLElement>,\n 'className' | 'style' | 'title'\n> & {\n [dataAttribute: `data-${string}`]: string | number | boolean | undefined;\n};\n\n/** Stable Cratis-owned parts for styling a {@link TagGroup}. */\nexport interface TagGroupParts {\n /** The element wrapping the tags and the entry. */\n root?: TagGroupPartAttributes;\n /** The tag list. */\n list?: TagGroupPartAttributes;\n /** One tag. */\n tag?: TagGroupPartAttributes;\n /** A tag's remove button. */\n remove?: TagGroupPartAttributes;\n /** The text entry that adds a value. */\n input?: InputHTMLAttributes<HTMLInputElement>;\n}\n\nconst tagGroupPartsMatchManifest: ExactPartKeys<TagGroupParts, PartsOf<'TagGroup'>> = true;\nvoid tagGroupPartsMatchManifest;\n\n/** Props for {@link TagGroup}. */\nexport interface TagGroupProps {\n /** Current values, in display order. */\n value: string[];\n /** Called with the next list whenever a value is added or removed. */\n onChange: (value: string[]) => void;\n /**\n * Whether a text entry is offered for adding values. A group without one is a read-only display\n * of removable tags.\n */\n editable?: boolean;\n /** Placeholder for the text entry. */\n placeholder?: string;\n /**\n * Characters that commit the typed value in addition to Enter. Defaults to a comma. A pasted\n * string is split on the same separators, so pasting a comma-separated list adds each value.\n */\n separators?: string[];\n /** Whether a duplicate of an existing value is accepted. Defaults to `false`. */\n allowDuplicates?: boolean;\n /** Whether the whole control is disabled. */\n disabled?: boolean;\n /** Accessible name for the group. */\n 'aria-label'?: string;\n /** Id of the element naming the group. */\n 'aria-labelledby'?: string;\n /** Id of the element describing the control — typically a field's error or hint text. */\n 'aria-describedby'?: string;\n /** Marks the text entry invalid for assistive technology. */\n invalid?: boolean;\n /** Id forwarded to the text entry so an external `<label htmlFor>` associates with it. */\n id?: string;\n /** Accessible label for a tag's remove button. Receives the tag's value. */\n removeLabel?: (value: string) => string;\n /**\n * Glyph inside a tag's remove button. Names this one tag group and wins over the provider's\n * `icons.remove`; defaults to a multiplication sign when neither is set. The button, its\n * accessible name and its keyboard behaviour are unaffected.\n */\n removeIcon?: ReactNode;\n /** Extra class name for the root element. */\n className?: string;\n /** Cratis-owned per-part attributes. */\n pt?: TagGroupParts;\n}\n\n/**\n * A group of removable values with an optional text entry — the control behind a tag or chips field.\n *\n * Every tag is reachable with the arrow keys and removable with Backspace or Delete, which is what\n * the `grid`/`row` semantics React Aria gives a tag group promise; a row of `<span>`s with a close\n * button cannot be operated from the keyboard at all. In the entry, Enter and each configured\n * separator commit the typed value, Backspace on an empty entry removes the last tag, and a pasted\n * string is split on the separators.\n */\nexport const TagGroup = ({\n value,\n onChange,\n editable = true,\n placeholder,\n separators = [','],\n allowDuplicates = false,\n disabled = false,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n invalid = false,\n id,\n removeLabel,\n removeIcon,\n className,\n pt,\n}: TagGroupProps) => {\n const icon = useCratisIcon();\n const resolvedRemoveIcon = icon('remove', '×', removeIcon);\n const generatedId = useId();\n const inputId = id ?? `cratis-tag-group-${generatedId}`;\n const [draft, setDraft] = useState('');\n\n const add = (candidates: string[]) => {\n const next = [...value];\n for (const candidate of candidates) {\n const trimmed = candidate.trim();\n if (!trimmed) continue;\n if (!allowDuplicates && next.includes(trimmed)) continue;\n next.push(trimmed);\n }\n if (next.length !== value.length) onChange(next);\n setDraft('');\n };\n\n const remove = (keys: Set<Key>) =>\n onChange(value.filter((entry) => !keys.has(entry)));\n\n const splitOn = (text: string) =>\n separators.length === 0\n ? [text]\n : text.split(new RegExp(`[${separators.map(escapeForClass).join('')}]`));\n\n return (\n <div\n {...pt?.root}\n className={classNames('cratis-tag-group', pt?.root?.className, className)}\n data-cratis-part='root'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n >\n <AriaTagGroup\n // React Aria renders a wrapper here. It generates a block box, which would trap the\n // tags in their own formatting context — the root's flex layout, and therefore the\n // gap between tags, would never reach them. It has no part on purpose: it is not a\n // styling surface, it just has to disappear from layout.\n className='cratis-tag-group__group'\n selectionMode='none'\n onRemove={remove}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n >\n <AriaTagList\n {...pt?.list}\n items={value.map((entry) => ({ id: entry }))}\n className={classNames('cratis-tag-group__list', pt?.list?.className)}\n data-cratis-part='list'\n >\n {(item: { id: string }) => (\n <AriaTag\n {...pt?.tag}\n id={item.id}\n textValue={item.id}\n isDisabled={disabled}\n className={classNames('cratis-tag-group__tag', pt?.tag?.className)}\n data-cratis-part='tag'\n data-disabled={disabled || undefined}\n >\n <span className='cratis-tag-group__tag-label'>{item.id}</span>\n {!disabled && (\n <AriaButton\n {...pt?.remove}\n slot='remove'\n aria-label={removeLabel?.(item.id)}\n className={classNames(\n 'cratis-tag-group__remove',\n pt?.remove?.className,\n )}\n data-cratis-part='remove'\n >\n <span aria-hidden='true'>{resolvedRemoveIcon}</span>\n </AriaButton>\n )}\n </AriaTag>\n )}\n </AriaTagList>\n </AriaTagGroup>\n {editable && (\n <input\n {...pt?.input}\n id={inputId}\n type='text'\n value={draft}\n disabled={disabled}\n placeholder={placeholder}\n aria-label={ariaLabelledBy ? undefined : ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n aria-invalid={invalid || undefined}\n className={classNames('cratis-tag-group__input', pt?.input?.className)}\n data-cratis-part='input'\n data-invalid={invalid || undefined}\n onChange={(event) => setDraft(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || separators.includes(event.key)) {\n event.preventDefault();\n add([draft]);\n } else if (\n event.key === 'Backspace' &&\n draft === '' &&\n value.length > 0\n ) {\n onChange(value.slice(0, -1));\n }\n }}\n onPaste={(event) => {\n const text = event.clipboardData.getData('text');\n if (!separators.some((separator) => text.includes(separator))) return;\n event.preventDefault();\n add(splitOn(text));\n }}\n onBlur={() => {\n if (draft.trim()) add([draft]);\n }}\n />\n )}\n </div>\n );\n};\n\n/** Escapes a separator for use inside a character class, so a `-` or `]` cannot reshape it. */\nconst escapeForClass = (separator: string) => separator.replace(/[\\\\\\]^-]/gu, '\\\\$&');\n"],"names":["_jsxs","_jsx","AriaTagGroup","AriaTagList","AriaTag","AriaButton"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ToggleGroup.d.ts","sourceRoot":"","sources":["../../../Common/ToggleGroup.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,cAAc,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAQtE,+GAA+G;AAC/G,MAAM,MAAM,yBAAyB,GAAG,IAAI,CACxC,cAAc,CAAC,WAAW,CAAC,EAC3B,WAAW,GAAG,OAAO,GAAG,OAAO,CAClC,GAAG;IACA,CAAC,aAAa,EAAE,QAAQ,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CAC5E,CAAC;AAEF,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IAC9B,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,yEAAyE;IACzE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,mEAAmE;AACnE,MAAM,WAAW,gBAAgB;IAC7B,yBAAyB;IACzB,IAAI,CAAC,EAAE,yBAAyB,CAAC;IACjC,6BAA6B;IAC7B,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,kFAAkF;IAClF,IAAI,CAAC,EAAE,yBAAyB,CAAC;IACjC,yBAAyB;IACzB,KAAK,CAAC,EAAE,yBAAyB,CAAC;CACrC;AAQD,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC7B,mFAAmF;IACnF,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,EAAE,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAKD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,qKAWrB,gBAAgB,gCA0ElB,CAAC"}
1
+ {"version":3,"file":"ToggleGroup.d.ts","sourceRoot":"","sources":["../../../Common/ToggleGroup.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,cAAc,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAStE,+GAA+G;AAC/G,MAAM,MAAM,yBAAyB,GAAG,IAAI,CACxC,cAAc,CAAC,WAAW,CAAC,EAC3B,WAAW,GAAG,OAAO,GAAG,OAAO,CAClC,GAAG;IACA,CAAC,aAAa,EAAE,QAAQ,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CAC5E,CAAC;AAEF,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IAC9B,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,yEAAyE;IACzE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,mEAAmE;AACnE,MAAM,WAAW,gBAAgB;IAC7B,yBAAyB;IACzB,IAAI,CAAC,EAAE,yBAAyB,CAAC;IACjC,6BAA6B;IAC7B,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,kFAAkF;IAClF,IAAI,CAAC,EAAE,yBAAyB,CAAC;IACjC,yBAAyB;IACzB,KAAK,CAAC,EAAE,yBAAyB,CAAC;CACrC;AAQD,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC7B,mFAAmF;IACnF,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,EAAE,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,qKAWrB,gBAAgB,gCA0ElB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { ToggleButtonGroup, ToggleButton } from 'react-aria-components/ToggleButtonGroup';
3
+ import { classNames } from '../ClassNames/classNames.js';
3
4
 
4
- const classNames = (...values) => values.filter(Boolean).join(' ');
5
5
  const ToggleGroup = ({ options, value, onChange, disabled = false, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy, invalid = false, className, pt, }) => {
6
6
  const enabled = options.filter((option) => !option.disabled);
7
7
  const tabStop = enabled.some((option) => option.value === value)
@@ -1 +1 @@
1
- {"version":3,"file":"ToggleGroup.js","sources":["../../../Common/ToggleGroup.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { type HTMLAttributes, type Key, type ReactNode } from 'react';\nimport {\n ToggleButton as AriaToggleButton,\n ToggleButtonGroup as AriaToggleButtonGroup,\n} from 'react-aria-components/ToggleButtonGroup';\nimport type { ExactPartKeys } from '../types/ExactPartKeys';\nimport type { PartsOf } from '../types/parts';\n\n/** Attributes a consumer may hand to one {@link ToggleGroup} part: class, style, title and data attributes. */\nexport type ToggleGroupPartAttributes = Pick<\n HTMLAttributes<HTMLElement>,\n 'className' | 'style' | 'title'\n> & {\n [dataAttribute: `data-${string}`]: string | number | boolean | undefined;\n};\n\n/** One choice in a {@link ToggleGroup}. */\nexport interface ToggleGroupOption {\n /** Value this option selects. */\n value: string;\n /** Visible label. */\n label: ReactNode;\n /** Content rendered before the label — an icon, a swatch. Decorative. */\n icon?: ReactNode;\n /** Whether this option cannot be chosen. */\n disabled?: boolean;\n}\n\n/** Stable Cratis-owned parts for styling a {@link ToggleGroup}. */\nexport interface ToggleGroupParts {\n /** The group element. */\n root?: ToggleGroupPartAttributes;\n /** One selectable option. */\n option?: ToggleGroupPartAttributes;\n /** An option's leading icon wrapper, rendered only for an option that has one. */\n icon?: ToggleGroupPartAttributes;\n /** An option's label. */\n label?: ToggleGroupPartAttributes;\n}\n\nconst toggleGroupPartsMatchManifest: ExactPartKeys<\n ToggleGroupParts,\n PartsOf<'ToggleGroup'>\n> = true;\nvoid toggleGroupPartsMatchManifest;\n\n/** Props for {@link ToggleGroup}. */\nexport interface ToggleGroupProps {\n /** The choices, in display order. Two to four is the shape this control is for. */\n options: ToggleGroupOption[];\n /** Currently selected value. */\n value: string;\n /** Called with the newly selected value. A click on the selected option is ignored. */\n onChange: (value: string) => void;\n /** Whether every option is disabled. */\n disabled?: boolean;\n /**\n * Id of the element naming this control. A group has no single labelable element, so an external\n * `<label>` associates by id rather than `htmlFor`.\n */\n 'aria-labelledby'?: string;\n /** Accessible name, when no visible label names the control. */\n 'aria-label'?: string;\n /** Id of the element describing the control — typically a field's error or hint text. */\n 'aria-describedby'?: string;\n /** Marks the control invalid for assistive technology. */\n invalid?: boolean;\n /** Extra class name for the group element. */\n className?: string;\n /** Cratis-owned per-part attributes. */\n pt?: ToggleGroupParts;\n}\n\nconst classNames = (...values: Array<string | undefined>) =>\n values.filter(Boolean).join(' ');\n\n/**\n * A single-selection group of exclusive choices — a segmented control.\n *\n * This is a *value* choice, not a panel switcher: it carries `radiogroup`/`radio` semantics from\n * React Aria's `ToggleButtonGroup`, not `tablist`/`tab`, and the arrow keys those semantics promise\n * move the selection. Reach for `Tabs` when the choice reveals a panel of content instead.\n *\n * The group is a single tab stop, as a radio group is: `Tab` moves into and out of it, and the arrow\n * keys move within it. The selected option carries the stop, or the first enabled option when the\n * value matches none.\n */\nexport const ToggleGroup = ({\n options,\n value,\n onChange,\n disabled = false,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n invalid = false,\n className,\n pt,\n}: ToggleGroupProps) => {\n // A radio group is one tab stop: Tab reaches the group, the arrows move inside it. React Aria's\n // ToggleButtonGroup keeps every button tabbable, which is toolbar behaviour and would make a\n // four-option group cost four stops, so the stop is placed here instead.\n const enabled = options.filter((option) => !option.disabled);\n const tabStop = enabled.some((option) => option.value === value)\n ? value\n : enabled[0]?.value;\n\n return (\n <AriaToggleButtonGroup\n {...pt?.root}\n selectionMode='single'\n disallowEmptySelection\n selectedKeys={[value]}\n isDisabled={disabled}\n onSelectionChange={(keys: Set<Key>) => {\n // React Aria reports the whole selection; single selection with an empty set disallowed\n // means exactly one key, and re-selecting the current one reports it unchanged.\n const [selected] = [...keys];\n if (selected !== undefined && selected !== value)\n onChange(String(selected));\n }}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n className={classNames('cratis-toggle-group', pt?.root?.className, className)}\n data-cratis-part='root'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n >\n {options.map((option) => (\n <AriaToggleButton\n key={option.value}\n {...pt?.option}\n id={option.value}\n isDisabled={disabled || option.disabled}\n excludeFromTabOrder={option.value !== tabStop}\n className={classNames(\n 'cratis-toggle-group__option',\n pt?.option?.className,\n )}\n data-cratis-part='option'\n data-selected={option.value === value || undefined}\n data-disabled={disabled || option.disabled || undefined}\n data-invalid={invalid || undefined}\n >\n {option.icon !== undefined && (\n <span\n {...pt?.icon}\n aria-hidden='true'\n className={classNames(\n 'cratis-toggle-group__icon',\n pt?.icon?.className,\n )}\n data-cratis-part='icon'\n >\n {option.icon}\n </span>\n )}\n <span\n {...pt?.label}\n className={classNames(\n 'cratis-toggle-group__label',\n pt?.label?.className,\n )}\n data-cratis-part='label'\n >\n {option.label}\n </span>\n </AriaToggleButton>\n ))}\n </AriaToggleButtonGroup>\n );\n};\n"],"names":["_jsx","AriaToggleButtonGroup","_jsxs","AriaToggleButton"],"mappings":"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"}
1
+ {"version":3,"file":"ToggleGroup.js","sources":["../../../Common/ToggleGroup.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { type HTMLAttributes, type Key, type ReactNode } from 'react';\nimport {\n ToggleButton as AriaToggleButton,\n ToggleButtonGroup as AriaToggleButtonGroup,\n} from 'react-aria-components/ToggleButtonGroup';\nimport type { ExactPartKeys } from '../types/ExactPartKeys';\nimport type { PartsOf } from '../types/parts';\nimport { classNames } from '../ClassNames/classNames';\n\n/** Attributes a consumer may hand to one {@link ToggleGroup} part: class, style, title and data attributes. */\nexport type ToggleGroupPartAttributes = Pick<\n HTMLAttributes<HTMLElement>,\n 'className' | 'style' | 'title'\n> & {\n [dataAttribute: `data-${string}`]: string | number | boolean | undefined;\n};\n\n/** One choice in a {@link ToggleGroup}. */\nexport interface ToggleGroupOption {\n /** Value this option selects. */\n value: string;\n /** Visible label. */\n label: ReactNode;\n /** Content rendered before the label — an icon, a swatch. Decorative. */\n icon?: ReactNode;\n /** Whether this option cannot be chosen. */\n disabled?: boolean;\n}\n\n/** Stable Cratis-owned parts for styling a {@link ToggleGroup}. */\nexport interface ToggleGroupParts {\n /** The group element. */\n root?: ToggleGroupPartAttributes;\n /** One selectable option. */\n option?: ToggleGroupPartAttributes;\n /** An option's leading icon wrapper, rendered only for an option that has one. */\n icon?: ToggleGroupPartAttributes;\n /** An option's label. */\n label?: ToggleGroupPartAttributes;\n}\n\nconst toggleGroupPartsMatchManifest: ExactPartKeys<\n ToggleGroupParts,\n PartsOf<'ToggleGroup'>\n> = true;\nvoid toggleGroupPartsMatchManifest;\n\n/** Props for {@link ToggleGroup}. */\nexport interface ToggleGroupProps {\n /** The choices, in display order. Two to four is the shape this control is for. */\n options: ToggleGroupOption[];\n /** Currently selected value. */\n value: string;\n /** Called with the newly selected value. A click on the selected option is ignored. */\n onChange: (value: string) => void;\n /** Whether every option is disabled. */\n disabled?: boolean;\n /**\n * Id of the element naming this control. A group has no single labelable element, so an external\n * `<label>` associates by id rather than `htmlFor`.\n */\n 'aria-labelledby'?: string;\n /** Accessible name, when no visible label names the control. */\n 'aria-label'?: string;\n /** Id of the element describing the control — typically a field's error or hint text. */\n 'aria-describedby'?: string;\n /** Marks the control invalid for assistive technology. */\n invalid?: boolean;\n /** Extra class name for the group element. */\n className?: string;\n /** Cratis-owned per-part attributes. */\n pt?: ToggleGroupParts;\n}\n\n/**\n * A single-selection group of exclusive choices — a segmented control.\n *\n * This is a *value* choice, not a panel switcher: it carries `radiogroup`/`radio` semantics from\n * React Aria's `ToggleButtonGroup`, not `tablist`/`tab`, and the arrow keys those semantics promise\n * move the selection. Reach for `Tabs` when the choice reveals a panel of content instead.\n *\n * The group is a single tab stop, as a radio group is: `Tab` moves into and out of it, and the arrow\n * keys move within it. The selected option carries the stop, or the first enabled option when the\n * value matches none.\n */\nexport const ToggleGroup = ({\n options,\n value,\n onChange,\n disabled = false,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n invalid = false,\n className,\n pt,\n}: ToggleGroupProps) => {\n // A radio group is one tab stop: Tab reaches the group, the arrows move inside it. React Aria's\n // ToggleButtonGroup keeps every button tabbable, which is toolbar behaviour and would make a\n // four-option group cost four stops, so the stop is placed here instead.\n const enabled = options.filter((option) => !option.disabled);\n const tabStop = enabled.some((option) => option.value === value)\n ? value\n : enabled[0]?.value;\n\n return (\n <AriaToggleButtonGroup\n {...pt?.root}\n selectionMode='single'\n disallowEmptySelection\n selectedKeys={[value]}\n isDisabled={disabled}\n onSelectionChange={(keys: Set<Key>) => {\n // React Aria reports the whole selection; single selection with an empty set disallowed\n // means exactly one key, and re-selecting the current one reports it unchanged.\n const [selected] = [...keys];\n if (selected !== undefined && selected !== value)\n onChange(String(selected));\n }}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n className={classNames('cratis-toggle-group', pt?.root?.className, className)}\n data-cratis-part='root'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n >\n {options.map((option) => (\n <AriaToggleButton\n key={option.value}\n {...pt?.option}\n id={option.value}\n isDisabled={disabled || option.disabled}\n excludeFromTabOrder={option.value !== tabStop}\n className={classNames(\n 'cratis-toggle-group__option',\n pt?.option?.className,\n )}\n data-cratis-part='option'\n data-selected={option.value === value || undefined}\n data-disabled={disabled || option.disabled || undefined}\n data-invalid={invalid || undefined}\n >\n {option.icon !== undefined && (\n <span\n {...pt?.icon}\n aria-hidden='true'\n className={classNames(\n 'cratis-toggle-group__icon',\n pt?.icon?.className,\n )}\n data-cratis-part='icon'\n >\n {option.icon}\n </span>\n )}\n <span\n {...pt?.label}\n className={classNames(\n 'cratis-toggle-group__label',\n pt?.label?.className,\n )}\n data-cratis-part='label'\n >\n {option.label}\n </span>\n </AriaToggleButton>\n ))}\n </AriaToggleButtonGroup>\n );\n};\n"],"names":["_jsx","AriaToggleButtonGroup","_jsxs","AriaToggleButton"],"mappings":";;;;AAwFO,MAAM,WAAW,GAAG,CAAC,EACxB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,kBAAkB,EAAE,eAAe,EACnC,OAAO,GAAG,KAAK,EACf,SAAS,EACT,EAAE,GACa,KAAI;AAInB,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC5D,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,KAAK;AAC3D,UAAE;AACF,UAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK;AAEvB,IAAA,QACIA,GAAA,CAACC,iBAAqB,EAAA,EAAA,GACd,EAAE,EAAE,IAAI,EACZ,aAAa,EAAC,QAAQ,EACtB,sBAAsB,EAAA,IAAA,EACtB,YAAY,EAAE,CAAC,KAAK,CAAC,EACrB,UAAU,EAAE,QAAQ,EACpB,iBAAiB,EAAE,CAAC,IAAc,KAAI;YAGlC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAC5B,YAAA,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,KAAK;AAC5C,gBAAA,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAClC,QAAA,CAAC,gBACW,SAAS,EAAA,iBAAA,EACJ,cAAc,EAAA,kBAAA,EACb,eAAe,EACjC,SAAS,EAAE,UAAU,CAAC,qBAAqB,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,EAAA,kBAAA,EAC3D,MAAM,EAAA,eAAA,EACR,QAAQ,IAAI,SAAS,EAAA,cAAA,EACtB,OAAO,IAAI,SAAS,EAAA,QAAA,EAEjC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MAChBC,IAAA,CAACC,YAAgB,OAET,EAAE,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,CAAC,KAAK,EAChB,UAAU,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,EACvC,mBAAmB,EAAE,MAAM,CAAC,KAAK,KAAK,OAAO,EAC7C,SAAS,EAAE,UAAU,CACjB,6BAA6B,EAC7B,EAAE,EAAE,MAAM,EAAE,SAAS,CACxB,EAAA,kBAAA,EACgB,QAAQ,EAAA,eAAA,EACV,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,SAAS,EAAA,eAAA,EACnC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,SAAS,EAAA,cAAA,EACzC,OAAO,IAAI,SAAS,EAAA,QAAA,EAAA,CAEjC,MAAM,CAAC,IAAI,KAAK,SAAS,KACtBH,GAAA,CAAA,MAAA,EAAA,EAAA,GACQ,EAAE,EAAE,IAAI,iBACA,MAAM,EAClB,SAAS,EAAE,UAAU,CACjB,2BAA2B,EAC3B,EAAE,EAAE,IAAI,EAAE,SAAS,CACtB,EAAA,kBAAA,EACgB,MAAM,EAAA,QAAA,EAEtB,MAAM,CAAC,IAAI,EAAA,CACT,CACV,EACDA,GAAA,CAAA,MAAA,EAAA,EAAA,GACQ,EAAE,EAAE,KAAK,EACb,SAAS,EAAE,UAAU,CACjB,4BAA4B,EAC5B,EAAE,EAAE,KAAK,EAAE,SAAS,CACvB,sBACgB,OAAO,EAAA,QAAA,EAEvB,MAAM,CAAC,KAAK,GACV,CAAA,EAAA,EApCF,MAAM,CAAC,KAAK,CAqCF,CACtB,CAAC,EAAA,CACkB;AAEhC;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnFilterMenu.d.ts","sourceRoot":"","sources":["../../../DataTables/ColumnFilterMenu.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ColumnFilterMenu.d.ts","sourceRoot":"","sources":["../../../DataTables/ColumnFilterMenu.tsx"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import 'ts-deepmerge';
10
10
  import 'react-dom';
11
11
  import { useCratisComponentsConfig } from '../configuration/CratisComponentsContext.js';
12
12
  import '../Notifications/toast.js';
13
+ import { classNames } from '../ClassNames/classNames.js';
13
14
  import '../renderer/RendererContext.js';
14
15
  import { asReactAriaButtonProps } from '../Common/reactAriaProps.js';
15
16
  import { Dropdown } from '../Dropdown/Dropdown.js';
@@ -60,7 +61,6 @@ const optionsFor = (dataType) => {
60
61
  ].map(([label, value]) => ({ label, value }));
61
62
  }
62
63
  };
63
- const classNames = (...values) => values.filter(Boolean).join(' ');
64
64
  const defaultModeFor = (dataType) => {
65
65
  if (dataType === 'text')
66
66
  return DataTableFilterMatchMode.Contains;
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnFilterMenu.js","sources":["../../../DataTables/ColumnFilterMenu.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport {\n useCallback,\n useEffect,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type ReactNode,\n type SyntheticEvent,\n} from 'react';\nimport { Button as AriaButton } from 'react-aria-components/Button';\nimport { Dialog as AriaDialog, DialogTrigger } from 'react-aria-components/Dialog';\nimport { Popover } from 'react-aria-components/Popover';\nimport { Button, type ButtonParts } from '../Common/Button';\nimport { DatePickerInput } from '../Common/DatePickerInput';\nimport { useCratisComponentsConfig } from '../Common/CratisComponentsProvider';\nimport { asReactAriaButtonProps } from '../Common/reactAriaProps';\nimport { Dropdown, type DropdownParts } from '../Dropdown/Dropdown';\nimport type { ChangeHandler } from '../types/ChangeHandler';\nimport {\n DataTableFilterMatchMode,\n type DataTableFilterConstraint,\n type DataTableFilterMatchMode as FilterMatchMode,\n} from './DataTableFilterMeta';\n\n/** Value editor used by a built-in column filter. */\nexport type ColumnFilterDataType = 'text' | 'numeric' | 'date' | 'boolean';\n\n/** One selectable value offered by a column filter that filters over a known set. */\nexport interface ColumnFilterOption {\n /** The text shown for this value in the filter menu. */\n label: string;\n /** The value written into the filter constraint when this option is picked. */\n value: unknown;\n}\n\n/** Localizable labels owned by the column filter popup. */\nexport interface ColumnFilterMenuLabels {\n /** Builds the filter-trigger accessible name from the effective field. */\n filterTriggerAriaLabel: (field: string) => string;\n /** Builds the value-control accessible name from the effective field. */\n valueAriaLabel: (field: string) => string;\n /** Accessible name for the match-mode selector. */\n matchModeAriaLabel: string;\n /** Localizes a match mode while retaining its default label as fallback input. */\n matchModeLabel: (mode: FilterMatchMode, defaultLabel: string) => string;\n /** Clear action label. */\n clear: string;\n /** Apply action label. */\n apply: string;\n /** Boolean true option label. */\n true: string;\n /** Boolean false option label. */\n false: string;\n}\n\ninterface ColumnFilterOverlayAttributes {\n id?: string;\n className?: string;\n style?: CSSProperties;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n [attribute: `data-${string}`]: string | number | boolean | undefined;\n}\n\n/** Stable Cratis-owned parts for a column filter popup. */\nexport interface ColumnFilterMenuParts {\n /** Header-cell filter trigger. */\n trigger?: Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value'>;\n /** Portaled filter popover. */\n popover?: ColumnFilterOverlayAttributes;\n /** Semantic filter dialog/menu. */\n menu?: ColumnFilterOverlayAttributes;\n /** Match-mode Dropdown parts. */\n matchMode?: DropdownParts;\n /** Built-in value input, or root class/style for date/boolean controls. */\n input?: InputHTMLAttributes<HTMLInputElement>;\n /** Clear/apply action row. */\n actions?: HTMLAttributes<HTMLDivElement>;\n /** Clear Button parts. */\n clear?: ButtonParts;\n /** Apply Button parts. */\n apply?: ButtonParts;\n}\n\n/** Default English labels for the column filter popup. */\nexport const defaultColumnFilterMenuLabels: ColumnFilterMenuLabels = {\n filterTriggerAriaLabel: (field) => `Filter by ${field}`,\n valueAriaLabel: (field) => `Filter value for ${field}`,\n matchModeAriaLabel: 'Match mode',\n matchModeLabel: (_mode, defaultLabel) => defaultLabel,\n clear: 'Clear',\n apply: 'Apply',\n true: 'True',\n false: 'False',\n};\n\n/** State and actions supplied to a custom column filter value editor. */\nexport interface ColumnFilterElementOptions {\n /** Effective filtered field. */\n field: string;\n /** Current draft value. */\n value: unknown;\n /** Current draft match mode. */\n matchMode: FilterMatchMode;\n /** Updates the draft value and may describe how the custom editor produced it. */\n onChange: ChangeHandler<unknown>;\n /** Updates the draft match mode independently of the value. */\n onMatchModeChange: (matchMode: FilterMatchMode) => void;\n /** Applies the draft filter. */\n onApply: (event: SyntheticEvent) => void;\n /** Clears the field filter. */\n onClear: (event: SyntheticEvent) => void;\n}\n\n/** Custom renderer for a column filter's value editor. */\nexport type ColumnFilterElement = (options: ColumnFilterElementOptions) => ReactNode;\n\n/** Props for the Cratis-owned draft/apply column filter popup. */\nexport interface ColumnFilterMenuProps {\n /** Effective row field being filtered. */\n field: string;\n /** Built-in value editor and match-mode family. */\n dataType?: ColumnFilterDataType;\n /** Placeholder for the value editor. */\n placeholder?: string;\n /** Whether the match-mode selector is shown. */\n showMatchModes?: boolean;\n /** Custom value editor replacing the built-in control. */\n filterElement?: ColumnFilterElement;\n /** The values this column can be filtered by, offered as a list instead of a free-form input. */\n filterOptions?: ColumnFilterOption[];\n /** Partial localization overrides. */\n labels?: Partial<ColumnFilterMenuLabels>;\n /** Stable part attributes. */\n pt?: ColumnFilterMenuParts;\n /** Currently applied constraint. */\n constraint?: DataTableFilterConstraint;\n /** Applies one draft constraint. */\n onApply: (constraint: DataTableFilterConstraint) => void;\n /** Removes the field constraint. */\n onClear: () => void;\n}\n\ninterface MatchModeOption {\n label: string;\n value: FilterMatchMode;\n}\n\n// A column that filters over a known set of values has only two questions worth asking of it - is it\n// this one, or is it not - so the free-text and numeric comparisons are not offered for it.\nconst valueMatchModeOptions: MatchModeOption[] = [\n { label: 'Equals', value: DataTableFilterMatchMode.Equals },\n { label: 'Not equals', value: DataTableFilterMatchMode.NotEquals },\n];\n\nconst optionsFor = (dataType: ColumnFilterDataType): MatchModeOption[] => {\n switch (dataType) {\n case 'numeric':\n return [\n ['Equals', DataTableFilterMatchMode.Equals],\n ['Not equals', DataTableFilterMatchMode.NotEquals],\n ['Less than', DataTableFilterMatchMode.LessThan],\n ['Less than or equal', DataTableFilterMatchMode.LessThanOrEqual],\n ['Greater than', DataTableFilterMatchMode.GreaterThan],\n ['Greater than or equal', DataTableFilterMatchMode.GreaterThanOrEqual],\n ].map(([label, value]) => ({ label, value }) as MatchModeOption);\n case 'date':\n return [\n ['Date is', DataTableFilterMatchMode.DateIs],\n ['Date is not', DataTableFilterMatchMode.DateIsNot],\n ['Before', DataTableFilterMatchMode.DateBefore],\n ['After', DataTableFilterMatchMode.DateAfter],\n ].map(([label, value]) => ({ label, value }) as MatchModeOption);\n case 'boolean':\n return [{ label: 'Equals', value: DataTableFilterMatchMode.Equals }];\n default:\n return [\n ['Contains', DataTableFilterMatchMode.Contains],\n ['Starts with', DataTableFilterMatchMode.StartsWith],\n ['Ends with', DataTableFilterMatchMode.EndsWith],\n ['Equals', DataTableFilterMatchMode.Equals],\n ['Not contains', DataTableFilterMatchMode.NotContains],\n ['Not equals', DataTableFilterMatchMode.NotEquals],\n ].map(([label, value]) => ({ label, value }) as MatchModeOption);\n }\n};\n\nconst classNames = (...values: Array<string | undefined>) =>\n values.filter(Boolean).join(' ');\n\nconst defaultModeFor = (dataType: ColumnFilterDataType): FilterMatchMode => {\n if (dataType === 'text') return DataTableFilterMatchMode.Contains;\n if (dataType === 'date') return DataTableFilterMatchMode.DateIs;\n return DataTableFilterMatchMode.Equals;\n};\n\n/** Cratis-owned column filter popup with draft/apply behavior. */\nexport const ColumnFilterMenu = ({\n field,\n dataType = 'text',\n placeholder,\n showMatchModes = true,\n filterElement,\n filterOptions,\n labels,\n pt,\n constraint,\n onApply,\n onClear,\n}: ColumnFilterMenuProps) => {\n const [draftValue, setDraftValue] = useState<unknown>(constraint?.value ?? null);\n const [draftMode, setDraftMode] = useState<FilterMatchMode>(\n constraint?.matchMode ?? defaultModeFor(dataType),\n );\n const [isOpen, setIsOpen] = useState(false);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const popoverRef = useRef<HTMLElement | null>(null);\n // Sticky on purpose: React detaches the popover's ref during the same commit that closes the\n // menu, before the effect cleanup below runs, so the last element we saw is the only handle we\n // still have on the popover that is going away.\n const capturePopover = useCallback((element: HTMLElement | null) => {\n if (element) popoverRef.current = element;\n }, []);\n\n useEffect(() => {\n setDraftValue(constraint?.value ?? null);\n setDraftMode(constraint?.matchMode ?? defaultModeFor(dataType));\n }, [constraint, dataType]);\n\n // Restore focus to the trigger on close, but only when the close actually dropped focus.\n //\n // React Aria's FocusScope already draws that distinction - at teardown it asks whether the\n // active element is still inside the dying scope or has already fallen to `document.body`, and\n // it leaves focus alone otherwise. Its weakness is only the timing: it defers the real restore\n // to a `requestAnimationFrame` that re-tests `activeElement === body`, which lands a frame after\n // focus has visibly left the trigger's neighborhood and silently does nothing if anything else\n // claims focus first. We keep its question and drop its delay: the same predicate is evaluated\n // synchronously in this cleanup, so the restore happens in the commit that closed the menu.\n //\n // \"Dropped\" has to be read at the moment this cleanup runs, while the popover is still exiting.\n // Focus is typically still on the popover's own content (its value input), which is about to be\n // removed - that is a drop in progress, not a destination. So a drop is: nothing focused, the\n // body, a node already detached from the document, or anything inside this menu's own popover.\n // Focus anywhere else is somewhere the user deliberately went, such as another column's filter\n // trigger, and must be left alone.\n useEffect(() => {\n if (!isOpen) return;\n return () => {\n const trigger = triggerRef.current;\n if (!trigger) return;\n const ownerDocument = trigger.ownerDocument;\n const focusedElement = ownerDocument.activeElement;\n const focusWasDropped =\n !focusedElement ||\n focusedElement === ownerDocument.body ||\n !focusedElement.isConnected ||\n popoverRef.current?.contains(focusedElement) === true;\n if (focusWasDropped) trigger.focus();\n };\n }, [isOpen]);\n\n const { messages } = useCratisComponentsConfig();\n const columnFilterMessages = messages?.columnFilter;\n const resolvedLabels: ColumnFilterMenuLabels = {\n filterTriggerAriaLabel:\n labels?.filterTriggerAriaLabel ??\n columnFilterMessages?.filterTriggerAriaLabel ??\n defaultColumnFilterMenuLabels.filterTriggerAriaLabel,\n valueAriaLabel:\n labels?.valueAriaLabel ??\n columnFilterMessages?.valueAriaLabel ??\n defaultColumnFilterMenuLabels.valueAriaLabel,\n matchModeAriaLabel:\n labels?.matchModeAriaLabel ??\n columnFilterMessages?.matchModeAriaLabel ??\n defaultColumnFilterMenuLabels.matchModeAriaLabel,\n matchModeLabel:\n labels?.matchModeLabel ??\n columnFilterMessages?.matchModeLabel ??\n defaultColumnFilterMenuLabels.matchModeLabel,\n clear: labels?.clear ?? columnFilterMessages?.clear ?? defaultColumnFilterMenuLabels.clear,\n apply: labels?.apply ?? columnFilterMessages?.apply ?? defaultColumnFilterMenuLabels.apply,\n true: labels?.true ?? columnFilterMessages?.true ?? defaultColumnFilterMenuLabels.true,\n false: labels?.false ?? columnFilterMessages?.false ?? defaultColumnFilterMenuLabels.false,\n };\n const modeOptions = (filterOptions ? valueMatchModeOptions : optionsFor(dataType)).map(\n (option) => ({\n ...option,\n label: resolvedLabels.matchModeLabel(option.value, option.label),\n }),\n );\n if (!modeOptions.some((option) => option.value === draftMode)) {\n modeOptions.push({\n label: resolvedLabels.matchModeLabel(draftMode, String(draftMode)),\n value: draftMode,\n });\n }\n\n const hasConstraint =\n constraint?.value !== null &&\n constraint?.value !== undefined &&\n constraint?.value !== '';\n\n const clear = (event?: SyntheticEvent) => {\n setDraftValue(null);\n onClear();\n event?.preventDefault();\n };\n const apply = (event?: SyntheticEvent) => {\n onApply({ value: draftValue, matchMode: draftMode });\n event?.preventDefault();\n };\n\n const valueInput = filterOptions\n ? (\n <Dropdown\n value={draftValue}\n options={filterOptions}\n optionLabel='label'\n optionValue='value'\n placeholder={placeholder}\n showClear\n onChange={(value) => setDraftValue(() => value)}\n aria-label={resolvedLabels.valueAriaLabel(field)}\n className={pt?.input?.className}\n style={pt?.input?.style}\n />\n )\n : filterElement\n ? filterElement({\n field,\n value: draftValue,\n matchMode: draftMode,\n onChange: (value) => setDraftValue(() => value),\n onMatchModeChange: (matchMode) => setDraftMode(matchMode),\n onApply: apply,\n onClear: clear,\n })\n : (() => {\n switch (dataType) {\n case 'numeric':\n return (\n <input\n {...pt?.input}\n type='number'\n aria-label={resolvedLabels.valueAriaLabel(field)}\n value={typeof draftValue === 'number' ? draftValue : ''}\n placeholder={placeholder}\n className={classNames(\n 'cratis-filter-menu__input',\n pt?.input?.className,\n )}\n onChange={(event) =>\n setDraftValue(\n event.target.value === ''\n ? null\n : event.target.valueAsNumber,\n )\n }\n />\n );\n case 'date':\n return (\n <DatePickerInput\n value={draftValue instanceof Date ? draftValue : null}\n onChange={(value) => setDraftValue(value)}\n showIcon\n aria-label={resolvedLabels.valueAriaLabel(field)}\n className={pt?.input?.className}\n style={pt?.input?.style}\n />\n );\n case 'boolean':\n return (\n <Dropdown\n value={draftValue}\n options={[\n { label: resolvedLabels.true, value: true },\n { label: resolvedLabels.false, value: false },\n ]}\n placeholder={placeholder}\n showClear\n onChange={(value) => setDraftValue(value)}\n aria-label={resolvedLabels.valueAriaLabel(field)}\n className={pt?.input?.className}\n style={pt?.input?.style}\n />\n );\n default:\n return (\n <input\n {...pt?.input}\n value={typeof draftValue === 'string' ? draftValue : ''}\n aria-label={resolvedLabels.valueAriaLabel(field)}\n placeholder={placeholder}\n className={classNames(\n 'cratis-filter-menu__input',\n pt?.input?.className,\n )}\n onChange={(event) => setDraftValue(event.target.value)}\n />\n );\n }\n })();\n\n return (\n <DialogTrigger isOpen={isOpen} onOpenChange={setIsOpen}>\n <AriaButton\n {...asReactAriaButtonProps(pt?.trigger)}\n ref={triggerRef}\n aria-label={resolvedLabels.filterTriggerAriaLabel(field)}\n className={classNames(\n 'cratis-filter-trigger',\n pt?.trigger?.className,\n )}\n data-active={hasConstraint || undefined}\n data-selected={hasConstraint || undefined}\n data-open={isOpen || undefined}\n data-cratis-part='filter-trigger'\n >\n <svg\n className='cratis-filter-trigger__icon'\n viewBox='0 0 16 16'\n fill='currentColor'\n aria-hidden='true'\n focusable='false'\n >\n <path d='M1.5 2.5A.5.5 0 0 1 2 2h12a.5.5 0 0 1 .38.82L10 8.1v4.52a.5.5 0 0 1-.24.43l-3 1.8A.5.5 0 0 1 6 14.42V8.1L1.62 2.82a.5.5 0 0 1-.12-.32Z' />\n </svg>\n </AriaButton>\n <Popover\n {...pt?.popover}\n ref={capturePopover}\n className={classNames(\n 'cratis-filter-popover',\n pt?.popover?.className,\n )}\n data-cratis-part='filter-popover'\n data-open={isOpen || undefined}\n placement='bottom end'\n >\n <AriaDialog\n {...pt?.menu}\n className={classNames('cratis-filter-menu', pt?.menu?.className)}\n data-cratis-part='filter-menu'\n data-open={isOpen || undefined}\n aria-label={resolvedLabels.filterTriggerAriaLabel(field)}\n >\n {showMatchModes && (\n <Dropdown\n value={draftMode}\n options={modeOptions}\n optionLabel='label'\n optionValue='value'\n onChange={(value) => setDraftMode(value)}\n aria-label={resolvedLabels.matchModeAriaLabel}\n pt={pt?.matchMode}\n />\n )}\n {valueInput}\n <div\n {...pt?.actions}\n className={classNames(\n 'cratis-filter-menu-actions',\n pt?.actions?.className,\n )}\n data-cratis-part='filter-actions'\n >\n <Button\n variant='outline'\n onClick={clear}\n label={resolvedLabels.clear}\n pt={pt?.clear}\n />\n <Button\n onClick={apply}\n label={resolvedLabels.apply}\n pt={pt?.apply}\n />\n </div>\n </AriaDialog>\n </Popover>\n </DialogTrigger>\n );\n};\n"],"names":["_jsx","_jsxs","AriaButton","AriaDialog","Button"],"mappings":"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"}
1
+ {"version":3,"file":"ColumnFilterMenu.js","sources":["../../../DataTables/ColumnFilterMenu.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport {\n useCallback,\n useEffect,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type ReactNode,\n type SyntheticEvent,\n} from 'react';\nimport { Button as AriaButton } from 'react-aria-components/Button';\nimport { Dialog as AriaDialog, DialogTrigger } from 'react-aria-components/Dialog';\nimport { Popover } from 'react-aria-components/Popover';\nimport { Button, type ButtonParts } from '../Common/Button';\nimport { DatePickerInput } from '../Common/DatePickerInput';\nimport { useCratisComponentsConfig } from '../Common/CratisComponentsProvider';\nimport { asReactAriaButtonProps } from '../Common/reactAriaProps';\nimport { Dropdown, type DropdownParts } from '../Dropdown/Dropdown';\nimport type { ChangeHandler } from '../types/ChangeHandler';\nimport {\n DataTableFilterMatchMode,\n type DataTableFilterConstraint,\n type DataTableFilterMatchMode as FilterMatchMode,\n} from './DataTableFilterMeta';\nimport { classNames } from '../ClassNames/classNames';\n\n/** Value editor used by a built-in column filter. */\nexport type ColumnFilterDataType = 'text' | 'numeric' | 'date' | 'boolean';\n\n/** One selectable value offered by a column filter that filters over a known set. */\nexport interface ColumnFilterOption {\n /** The text shown for this value in the filter menu. */\n label: string;\n /** The value written into the filter constraint when this option is picked. */\n value: unknown;\n}\n\n/** Localizable labels owned by the column filter popup. */\nexport interface ColumnFilterMenuLabels {\n /** Builds the filter-trigger accessible name from the effective field. */\n filterTriggerAriaLabel: (field: string) => string;\n /** Builds the value-control accessible name from the effective field. */\n valueAriaLabel: (field: string) => string;\n /** Accessible name for the match-mode selector. */\n matchModeAriaLabel: string;\n /** Localizes a match mode while retaining its default label as fallback input. */\n matchModeLabel: (mode: FilterMatchMode, defaultLabel: string) => string;\n /** Clear action label. */\n clear: string;\n /** Apply action label. */\n apply: string;\n /** Boolean true option label. */\n true: string;\n /** Boolean false option label. */\n false: string;\n}\n\ninterface ColumnFilterOverlayAttributes {\n id?: string;\n className?: string;\n style?: CSSProperties;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n [attribute: `data-${string}`]: string | number | boolean | undefined;\n}\n\n/** Stable Cratis-owned parts for a column filter popup. */\nexport interface ColumnFilterMenuParts {\n /** Header-cell filter trigger. */\n trigger?: Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value'>;\n /** Portaled filter popover. */\n popover?: ColumnFilterOverlayAttributes;\n /** Semantic filter dialog/menu. */\n menu?: ColumnFilterOverlayAttributes;\n /** Match-mode Dropdown parts. */\n matchMode?: DropdownParts;\n /** Built-in value input, or root class/style for date/boolean controls. */\n input?: InputHTMLAttributes<HTMLInputElement>;\n /** Clear/apply action row. */\n actions?: HTMLAttributes<HTMLDivElement>;\n /** Clear Button parts. */\n clear?: ButtonParts;\n /** Apply Button parts. */\n apply?: ButtonParts;\n}\n\n/** Default English labels for the column filter popup. */\nexport const defaultColumnFilterMenuLabels: ColumnFilterMenuLabels = {\n filterTriggerAriaLabel: (field) => `Filter by ${field}`,\n valueAriaLabel: (field) => `Filter value for ${field}`,\n matchModeAriaLabel: 'Match mode',\n matchModeLabel: (_mode, defaultLabel) => defaultLabel,\n clear: 'Clear',\n apply: 'Apply',\n true: 'True',\n false: 'False',\n};\n\n/** State and actions supplied to a custom column filter value editor. */\nexport interface ColumnFilterElementOptions {\n /** Effective filtered field. */\n field: string;\n /** Current draft value. */\n value: unknown;\n /** Current draft match mode. */\n matchMode: FilterMatchMode;\n /** Updates the draft value and may describe how the custom editor produced it. */\n onChange: ChangeHandler<unknown>;\n /** Updates the draft match mode independently of the value. */\n onMatchModeChange: (matchMode: FilterMatchMode) => void;\n /** Applies the draft filter. */\n onApply: (event: SyntheticEvent) => void;\n /** Clears the field filter. */\n onClear: (event: SyntheticEvent) => void;\n}\n\n/** Custom renderer for a column filter's value editor. */\nexport type ColumnFilterElement = (options: ColumnFilterElementOptions) => ReactNode;\n\n/** Props for the Cratis-owned draft/apply column filter popup. */\nexport interface ColumnFilterMenuProps {\n /** Effective row field being filtered. */\n field: string;\n /** Built-in value editor and match-mode family. */\n dataType?: ColumnFilterDataType;\n /** Placeholder for the value editor. */\n placeholder?: string;\n /** Whether the match-mode selector is shown. */\n showMatchModes?: boolean;\n /** Custom value editor replacing the built-in control. */\n filterElement?: ColumnFilterElement;\n /** The values this column can be filtered by, offered as a list instead of a free-form input. */\n filterOptions?: ColumnFilterOption[];\n /** Partial localization overrides. */\n labels?: Partial<ColumnFilterMenuLabels>;\n /** Stable part attributes. */\n pt?: ColumnFilterMenuParts;\n /** Currently applied constraint. */\n constraint?: DataTableFilterConstraint;\n /** Applies one draft constraint. */\n onApply: (constraint: DataTableFilterConstraint) => void;\n /** Removes the field constraint. */\n onClear: () => void;\n}\n\ninterface MatchModeOption {\n label: string;\n value: FilterMatchMode;\n}\n\n// A column that filters over a known set of values has only two questions worth asking of it - is it\n// this one, or is it not - so the free-text and numeric comparisons are not offered for it.\nconst valueMatchModeOptions: MatchModeOption[] = [\n { label: 'Equals', value: DataTableFilterMatchMode.Equals },\n { label: 'Not equals', value: DataTableFilterMatchMode.NotEquals },\n];\n\nconst optionsFor = (dataType: ColumnFilterDataType): MatchModeOption[] => {\n switch (dataType) {\n case 'numeric':\n return [\n ['Equals', DataTableFilterMatchMode.Equals],\n ['Not equals', DataTableFilterMatchMode.NotEquals],\n ['Less than', DataTableFilterMatchMode.LessThan],\n ['Less than or equal', DataTableFilterMatchMode.LessThanOrEqual],\n ['Greater than', DataTableFilterMatchMode.GreaterThan],\n ['Greater than or equal', DataTableFilterMatchMode.GreaterThanOrEqual],\n ].map(([label, value]) => ({ label, value }) as MatchModeOption);\n case 'date':\n return [\n ['Date is', DataTableFilterMatchMode.DateIs],\n ['Date is not', DataTableFilterMatchMode.DateIsNot],\n ['Before', DataTableFilterMatchMode.DateBefore],\n ['After', DataTableFilterMatchMode.DateAfter],\n ].map(([label, value]) => ({ label, value }) as MatchModeOption);\n case 'boolean':\n return [{ label: 'Equals', value: DataTableFilterMatchMode.Equals }];\n default:\n return [\n ['Contains', DataTableFilterMatchMode.Contains],\n ['Starts with', DataTableFilterMatchMode.StartsWith],\n ['Ends with', DataTableFilterMatchMode.EndsWith],\n ['Equals', DataTableFilterMatchMode.Equals],\n ['Not contains', DataTableFilterMatchMode.NotContains],\n ['Not equals', DataTableFilterMatchMode.NotEquals],\n ].map(([label, value]) => ({ label, value }) as MatchModeOption);\n }\n};\n\nconst defaultModeFor = (dataType: ColumnFilterDataType): FilterMatchMode => {\n if (dataType === 'text') return DataTableFilterMatchMode.Contains;\n if (dataType === 'date') return DataTableFilterMatchMode.DateIs;\n return DataTableFilterMatchMode.Equals;\n};\n\n/** Cratis-owned column filter popup with draft/apply behavior. */\nexport const ColumnFilterMenu = ({\n field,\n dataType = 'text',\n placeholder,\n showMatchModes = true,\n filterElement,\n filterOptions,\n labels,\n pt,\n constraint,\n onApply,\n onClear,\n}: ColumnFilterMenuProps) => {\n const [draftValue, setDraftValue] = useState<unknown>(constraint?.value ?? null);\n const [draftMode, setDraftMode] = useState<FilterMatchMode>(\n constraint?.matchMode ?? defaultModeFor(dataType),\n );\n const [isOpen, setIsOpen] = useState(false);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const popoverRef = useRef<HTMLElement | null>(null);\n // Sticky on purpose: React detaches the popover's ref during the same commit that closes the\n // menu, before the effect cleanup below runs, so the last element we saw is the only handle we\n // still have on the popover that is going away.\n const capturePopover = useCallback((element: HTMLElement | null) => {\n if (element) popoverRef.current = element;\n }, []);\n\n useEffect(() => {\n setDraftValue(constraint?.value ?? null);\n setDraftMode(constraint?.matchMode ?? defaultModeFor(dataType));\n }, [constraint, dataType]);\n\n // Restore focus to the trigger on close, but only when the close actually dropped focus.\n //\n // React Aria's FocusScope already draws that distinction - at teardown it asks whether the\n // active element is still inside the dying scope or has already fallen to `document.body`, and\n // it leaves focus alone otherwise. Its weakness is only the timing: it defers the real restore\n // to a `requestAnimationFrame` that re-tests `activeElement === body`, which lands a frame after\n // focus has visibly left the trigger's neighborhood and silently does nothing if anything else\n // claims focus first. We keep its question and drop its delay: the same predicate is evaluated\n // synchronously in this cleanup, so the restore happens in the commit that closed the menu.\n //\n // \"Dropped\" has to be read at the moment this cleanup runs, while the popover is still exiting.\n // Focus is typically still on the popover's own content (its value input), which is about to be\n // removed - that is a drop in progress, not a destination. So a drop is: nothing focused, the\n // body, a node already detached from the document, or anything inside this menu's own popover.\n // Focus anywhere else is somewhere the user deliberately went, such as another column's filter\n // trigger, and must be left alone.\n useEffect(() => {\n if (!isOpen) return;\n return () => {\n const trigger = triggerRef.current;\n if (!trigger) return;\n const ownerDocument = trigger.ownerDocument;\n const focusedElement = ownerDocument.activeElement;\n const focusWasDropped =\n !focusedElement ||\n focusedElement === ownerDocument.body ||\n !focusedElement.isConnected ||\n popoverRef.current?.contains(focusedElement) === true;\n if (focusWasDropped) trigger.focus();\n };\n }, [isOpen]);\n\n const { messages } = useCratisComponentsConfig();\n const columnFilterMessages = messages?.columnFilter;\n const resolvedLabels: ColumnFilterMenuLabels = {\n filterTriggerAriaLabel:\n labels?.filterTriggerAriaLabel ??\n columnFilterMessages?.filterTriggerAriaLabel ??\n defaultColumnFilterMenuLabels.filterTriggerAriaLabel,\n valueAriaLabel:\n labels?.valueAriaLabel ??\n columnFilterMessages?.valueAriaLabel ??\n defaultColumnFilterMenuLabels.valueAriaLabel,\n matchModeAriaLabel:\n labels?.matchModeAriaLabel ??\n columnFilterMessages?.matchModeAriaLabel ??\n defaultColumnFilterMenuLabels.matchModeAriaLabel,\n matchModeLabel:\n labels?.matchModeLabel ??\n columnFilterMessages?.matchModeLabel ??\n defaultColumnFilterMenuLabels.matchModeLabel,\n clear: labels?.clear ?? columnFilterMessages?.clear ?? defaultColumnFilterMenuLabels.clear,\n apply: labels?.apply ?? columnFilterMessages?.apply ?? defaultColumnFilterMenuLabels.apply,\n true: labels?.true ?? columnFilterMessages?.true ?? defaultColumnFilterMenuLabels.true,\n false: labels?.false ?? columnFilterMessages?.false ?? defaultColumnFilterMenuLabels.false,\n };\n const modeOptions = (filterOptions ? valueMatchModeOptions : optionsFor(dataType)).map(\n (option) => ({\n ...option,\n label: resolvedLabels.matchModeLabel(option.value, option.label),\n }),\n );\n if (!modeOptions.some((option) => option.value === draftMode)) {\n modeOptions.push({\n label: resolvedLabels.matchModeLabel(draftMode, String(draftMode)),\n value: draftMode,\n });\n }\n\n const hasConstraint =\n constraint?.value !== null &&\n constraint?.value !== undefined &&\n constraint?.value !== '';\n\n const clear = (event?: SyntheticEvent) => {\n setDraftValue(null);\n onClear();\n event?.preventDefault();\n };\n const apply = (event?: SyntheticEvent) => {\n onApply({ value: draftValue, matchMode: draftMode });\n event?.preventDefault();\n };\n\n const valueInput = filterOptions\n ? (\n <Dropdown\n value={draftValue}\n options={filterOptions}\n optionLabel='label'\n optionValue='value'\n placeholder={placeholder}\n showClear\n onChange={(value) => setDraftValue(() => value)}\n aria-label={resolvedLabels.valueAriaLabel(field)}\n className={pt?.input?.className}\n style={pt?.input?.style}\n />\n )\n : filterElement\n ? filterElement({\n field,\n value: draftValue,\n matchMode: draftMode,\n onChange: (value) => setDraftValue(() => value),\n onMatchModeChange: (matchMode) => setDraftMode(matchMode),\n onApply: apply,\n onClear: clear,\n })\n : (() => {\n switch (dataType) {\n case 'numeric':\n return (\n <input\n {...pt?.input}\n type='number'\n aria-label={resolvedLabels.valueAriaLabel(field)}\n value={typeof draftValue === 'number' ? draftValue : ''}\n placeholder={placeholder}\n className={classNames(\n 'cratis-filter-menu__input',\n pt?.input?.className,\n )}\n onChange={(event) =>\n setDraftValue(\n event.target.value === ''\n ? null\n : event.target.valueAsNumber,\n )\n }\n />\n );\n case 'date':\n return (\n <DatePickerInput\n value={draftValue instanceof Date ? draftValue : null}\n onChange={(value) => setDraftValue(value)}\n showIcon\n aria-label={resolvedLabels.valueAriaLabel(field)}\n className={pt?.input?.className}\n style={pt?.input?.style}\n />\n );\n case 'boolean':\n return (\n <Dropdown\n value={draftValue}\n options={[\n { label: resolvedLabels.true, value: true },\n { label: resolvedLabels.false, value: false },\n ]}\n placeholder={placeholder}\n showClear\n onChange={(value) => setDraftValue(value)}\n aria-label={resolvedLabels.valueAriaLabel(field)}\n className={pt?.input?.className}\n style={pt?.input?.style}\n />\n );\n default:\n return (\n <input\n {...pt?.input}\n value={typeof draftValue === 'string' ? draftValue : ''}\n aria-label={resolvedLabels.valueAriaLabel(field)}\n placeholder={placeholder}\n className={classNames(\n 'cratis-filter-menu__input',\n pt?.input?.className,\n )}\n onChange={(event) => setDraftValue(event.target.value)}\n />\n );\n }\n })();\n\n return (\n <DialogTrigger isOpen={isOpen} onOpenChange={setIsOpen}>\n <AriaButton\n {...asReactAriaButtonProps(pt?.trigger)}\n ref={triggerRef}\n aria-label={resolvedLabels.filterTriggerAriaLabel(field)}\n className={classNames(\n 'cratis-filter-trigger',\n pt?.trigger?.className,\n )}\n data-active={hasConstraint || undefined}\n data-selected={hasConstraint || undefined}\n data-open={isOpen || undefined}\n data-cratis-part='filter-trigger'\n >\n <svg\n className='cratis-filter-trigger__icon'\n viewBox='0 0 16 16'\n fill='currentColor'\n aria-hidden='true'\n focusable='false'\n >\n <path d='M1.5 2.5A.5.5 0 0 1 2 2h12a.5.5 0 0 1 .38.82L10 8.1v4.52a.5.5 0 0 1-.24.43l-3 1.8A.5.5 0 0 1 6 14.42V8.1L1.62 2.82a.5.5 0 0 1-.12-.32Z' />\n </svg>\n </AriaButton>\n <Popover\n {...pt?.popover}\n ref={capturePopover}\n className={classNames(\n 'cratis-filter-popover',\n pt?.popover?.className,\n )}\n data-cratis-part='filter-popover'\n data-open={isOpen || undefined}\n placement='bottom end'\n >\n <AriaDialog\n {...pt?.menu}\n className={classNames('cratis-filter-menu', pt?.menu?.className)}\n data-cratis-part='filter-menu'\n data-open={isOpen || undefined}\n aria-label={resolvedLabels.filterTriggerAriaLabel(field)}\n >\n {showMatchModes && (\n <Dropdown\n value={draftMode}\n options={modeOptions}\n optionLabel='label'\n optionValue='value'\n onChange={(value) => setDraftMode(value)}\n aria-label={resolvedLabels.matchModeAriaLabel}\n pt={pt?.matchMode}\n />\n )}\n {valueInput}\n <div\n {...pt?.actions}\n className={classNames(\n 'cratis-filter-menu-actions',\n pt?.actions?.className,\n )}\n data-cratis-part='filter-actions'\n >\n <Button\n variant='outline'\n onClick={clear}\n label={resolvedLabels.clear}\n pt={pt?.clear}\n />\n <Button\n onClick={apply}\n label={resolvedLabels.apply}\n pt={pt?.apply}\n />\n </div>\n </AriaDialog>\n </Popover>\n </DialogTrigger>\n );\n};\n"],"names":["_jsx","_jsxs","AriaButton","AriaDialog","Button"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { DataTableMessages } from './DataTableMessages.js';
3
+ import type { DataTableParts } from './DataTableParts.js';
4
+ import { DataTableStatus } from './DataTableStatus.js';
5
+ /** Props for {@link DataTableBody}. */
6
+ export interface DataTableBodyProps {
7
+ status: DataTableStatus;
8
+ /** Whether the table was given any rows, before filtering. */
9
+ hasLoadedRows: boolean;
10
+ /** How many rows are left to render after filtering. */
11
+ rowCount: number;
12
+ columnCount: number;
13
+ /** The table's part attributes. */
14
+ parts?: DataTableParts;
15
+ messages: DataTableMessages;
16
+ emptyMessage: ReactNode;
17
+ /** Renders the data rows; called only when there are rows to show. */
18
+ renderRows: () => ReactNode;
19
+ }
20
+ /** The table body: a failure, loading or empty message row, or the data rows. */
21
+ export declare const DataTableBody: ({ status, hasLoadedRows, rowCount, columnCount, parts: pt, messages, emptyMessage, renderRows, }: DataTableBodyProps) => import("react").JSX.Element;
22
+ //# sourceMappingURL=DataTableBody.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTableBody.d.ts","sourceRoot":"","sources":["../../../DataTables/DataTableBody.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAkB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAmB,CAAC;AAEpD,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,eAAe,CAAC;IACxB,8DAA8D;IAC9D,aAAa,EAAE,OAAO,CAAC;IACvB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,YAAY,EAAE,SAAS,CAAC;IACxB,sEAAsE;IACtE,UAAU,EAAE,MAAM,SAAS,CAAC;CAC/B;AAED,iFAAiF;AACjF,eAAO,MAAM,aAAa,qGASvB,kBAAkB,gCAgFpB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { classNames } from '../ClassNames/classNames.js';
3
+ import { DataTableStatus } from './DataTableStatus.js';
4
+
5
+ const DataTableBody = ({ status, hasLoadedRows, rowCount, columnCount, parts: pt, messages, emptyMessage, renderRows, }) => (jsx("tbody", { ...pt?.body, className: classNames('cratis-datatable__body', pt?.body?.className), "data-cratis-part": 'body', children: status === DataTableStatus.Failed || status === DataTableStatus.Unauthorized ? (jsx("tr", { ...pt?.failureRow, className: classNames('cratis-datatable__failure-row', pt?.failureRow?.className), "data-cratis-part": 'failure-row', "data-reason": status, children: jsx("td", { ...pt?.failureCell, colSpan: Math.max(columnCount, 1), className: classNames('cratis-datatable__failure-cell', pt?.failureCell?.className), "data-cratis-part": 'failure-cell', children: jsx("div", { role: 'alert', children: status === DataTableStatus.Failed
6
+ ? messages.resolvedFailureMessage
7
+ : messages.resolvedUnauthorizedMessage }) }) }, status)) : status === DataTableStatus.Loading && !hasLoadedRows ? (jsx("tr", { ...pt?.loadingRow, className: classNames('cratis-datatable__loading-row', pt?.loadingRow?.className), "data-cratis-part": 'loading-row', children: jsx("td", { ...pt?.loadingCell, colSpan: Math.max(columnCount, 1), className: classNames('cratis-datatable__loading-cell', pt?.loadingCell?.className), "data-cratis-part": 'loading-cell', children: jsx("div", { role: 'status', children: messages.resolvedLoadingMessage }) }) }, status)) : rowCount === 0 ? (jsx("tr", { ...pt?.emptyRow, className: classNames('cratis-datatable__empty-row', pt?.emptyRow?.className), "data-cratis-part": 'empty-row', children: jsx("td", { ...pt?.emptyCell, colSpan: Math.max(columnCount, 1), className: classNames('cratis-datatable__empty-cell', pt?.emptyCell?.className), "data-cratis-part": 'empty-cell', children: emptyMessage }) })) : (renderRows()) }));
8
+
9
+ export { DataTableBody };
10
+ //# sourceMappingURL=DataTableBody.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTableBody.js","sources":["../../../DataTables/DataTableBody.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { ReactNode } from 'react';\nimport { classNames } from '../ClassNames/classNames';\nimport type { DataTableMessages } from './DataTableMessages';\nimport type { DataTableParts } from './DataTableParts';\nimport { DataTableStatus } from './DataTableStatus';\n\n/** Props for {@link DataTableBody}. */\nexport interface DataTableBodyProps {\n status: DataTableStatus;\n /** Whether the table was given any rows, before filtering. */\n hasLoadedRows: boolean;\n /** How many rows are left to render after filtering. */\n rowCount: number;\n columnCount: number;\n /** The table's part attributes. */\n parts?: DataTableParts;\n messages: DataTableMessages;\n emptyMessage: ReactNode;\n /** Renders the data rows; called only when there are rows to show. */\n renderRows: () => ReactNode;\n}\n\n/** The table body: a failure, loading or empty message row, or the data rows. */\nexport const DataTableBody = ({\n status,\n hasLoadedRows,\n rowCount,\n columnCount,\n parts: pt,\n messages,\n emptyMessage,\n renderRows,\n}: DataTableBodyProps) => (\n <tbody\n {...pt?.body}\n className={classNames('cratis-datatable__body', pt?.body?.className)}\n data-cratis-part='body'\n >\n {status === DataTableStatus.Failed || status === DataTableStatus.Unauthorized ? (\n <tr\n key={status}\n {...pt?.failureRow}\n className={classNames(\n 'cratis-datatable__failure-row',\n pt?.failureRow?.className,\n )}\n data-cratis-part='failure-row'\n data-reason={status}\n >\n <td\n {...pt?.failureCell}\n colSpan={Math.max(columnCount, 1)}\n className={classNames(\n 'cratis-datatable__failure-cell',\n pt?.failureCell?.className,\n )}\n data-cratis-part='failure-cell'\n >\n <div role='alert'>\n {status === DataTableStatus.Failed\n ? messages.resolvedFailureMessage\n : messages.resolvedUnauthorizedMessage}\n </div>\n </td>\n </tr>\n ) : status === DataTableStatus.Loading && !hasLoadedRows ? (\n <tr\n key={status}\n {...pt?.loadingRow}\n className={classNames(\n 'cratis-datatable__loading-row',\n pt?.loadingRow?.className,\n )}\n data-cratis-part='loading-row'\n >\n <td\n {...pt?.loadingCell}\n colSpan={Math.max(columnCount, 1)}\n className={classNames(\n 'cratis-datatable__loading-cell',\n pt?.loadingCell?.className,\n )}\n data-cratis-part='loading-cell'\n >\n <div role='status'>{messages.resolvedLoadingMessage}</div>\n </td>\n </tr>\n ) : rowCount === 0 ? (\n <tr\n {...pt?.emptyRow}\n className={classNames(\n 'cratis-datatable__empty-row',\n pt?.emptyRow?.className,\n )}\n data-cratis-part='empty-row'\n >\n <td\n {...pt?.emptyCell}\n colSpan={Math.max(columnCount, 1)}\n className={classNames(\n 'cratis-datatable__empty-cell',\n pt?.emptyCell?.className,\n )}\n data-cratis-part='empty-cell'\n >\n {emptyMessage}\n </td>\n </tr>\n ) : (\n renderRows()\n )}\n </tbody>\n);\n"],"names":["_jsx"],"mappings":";;;;AA0BO,MAAM,aAAa,GAAG,CAAC,EAC1B,MAAM,EACN,aAAa,EACb,QAAQ,EACR,WAAW,EACX,KAAK,EAAE,EAAE,EACT,QAAQ,EACR,YAAY,EACZ,UAAU,GACO,MACjBA,GAAA,CAAA,OAAA,EAAA,EAAA,GACQ,EAAE,EAAE,IAAI,EACZ,SAAS,EAAE,UAAU,CAAC,wBAAwB,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,EAAA,kBAAA,EACnD,MAAM,EAAA,QAAA,EAEtB,MAAM,KAAK,eAAe,CAAC,MAAM,IAAI,MAAM,KAAK,eAAe,CAAC,YAAY,IACzEA,GAAA,CAAA,IAAA,EAAA,EAAA,GAEQ,EAAE,EAAE,UAAU,EAClB,SAAS,EAAE,UAAU,CACjB,+BAA+B,EAC/B,EAAE,EAAE,UAAU,EAAE,SAAS,CAC5B,EAAA,kBAAA,EACgB,aAAa,EAAA,aAAA,EACjB,MAAM,EAAA,QAAA,EAEnBA,GAAA,CAAA,IAAA,EAAA,EAAA,GACQ,EAAE,EAAE,WAAW,EACnB,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EACjC,SAAS,EAAE,UAAU,CACjB,gCAAgC,EAChC,EAAE,EAAE,WAAW,EAAE,SAAS,CAC7B,EAAA,kBAAA,EACgB,cAAc,EAAA,QAAA,EAE/BA,GAAA,CAAA,KAAA,EAAA,EAAK,IAAI,EAAC,OAAO,EAAA,QAAA,EACZ,MAAM,KAAK,eAAe,CAAC;sBACtB,QAAQ,CAAC;AACX,sBAAE,QAAQ,CAAC,2BAA2B,EAAA,CACxC,GACL,EAAA,EAvBA,MAAM,CAwBV,IACL,MAAM,KAAK,eAAe,CAAC,OAAO,IAAI,CAAC,aAAa,IACpDA,GAAA,CAAA,IAAA,EAAA,EAAA,GAEQ,EAAE,EAAE,UAAU,EAClB,SAAS,EAAE,UAAU,CACjB,+BAA+B,EAC/B,EAAE,EAAE,UAAU,EAAE,SAAS,CAC5B,sBACgB,aAAa,EAAA,QAAA,EAE9BA,GAAA,CAAA,IAAA,EAAA,EAAA,GACQ,EAAE,EAAE,WAAW,EACnB,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EACjC,SAAS,EAAE,UAAU,CACjB,gCAAgC,EAChC,EAAE,EAAE,WAAW,EAAE,SAAS,CAC7B,sBACgB,cAAc,EAAA,QAAA,EAE/BA,aAAK,IAAI,EAAC,QAAQ,EAAA,QAAA,EAAE,QAAQ,CAAC,sBAAsB,GAAO,EAAA,CACzD,EAAA,EAlBA,MAAM,CAmBV,IACL,QAAQ,KAAK,CAAC,IACdA,eACQ,EAAE,EAAE,QAAQ,EAChB,SAAS,EAAE,UAAU,CACjB,6BAA6B,EAC7B,EAAE,EAAE,QAAQ,EAAE,SAAS,CAC1B,EAAA,kBAAA,EACgB,WAAW,EAAA,QAAA,EAE5BA,GAAA,CAAA,IAAA,EAAA,EAAA,GACQ,EAAE,EAAE,SAAS,EACjB,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EACjC,SAAS,EAAE,UAAU,CACjB,8BAA8B,EAC9B,EAAE,EAAE,SAAS,EAAE,SAAS,CAC3B,EAAA,kBAAA,EACgB,YAAY,EAAA,QAAA,EAE5B,YAAY,GACZ,EAAA,CACJ,KAEL,UAAU,EAAE,CACf,EAAA,CACG;;"}
@@ -1,53 +1,13 @@
1
- import React, { type CSSProperties, type HTMLAttributes, type ReactNode, type TableHTMLAttributes, type TdHTMLAttributes, type ThHTMLAttributes } from 'react';
1
+ import React, { type CSSProperties, type ReactNode } from 'react';
2
+ import type { DataTableFilterMeta } from './DataTableFilterMeta.js';
3
+ import type { DataTableParts } from './DataTableParts.js';
4
+ import type { DataTableRowClickEvent } from './DataTableRowClickEvent.js';
5
+ import { DataTableRowProcessing } from './DataTableRowProcessing.js';
2
6
  import type { DataTableSelectionChangeEvent } from './DataTableSelectionChangeEvent.js';
3
- import { type DataTableFilterMeta } from './DataTableFilterMeta.js';
4
- import { DataTableStatus } from './DataTableStatus.js';
5
7
  import type { DataTableSort } from './DataTableSort.js';
6
- import { DataTableRowProcessing } from './DataTableRowProcessing.js';
7
- /** Event emitted when a DataTable row is activated. */
8
- export interface DataTableRowClickEvent<TData> {
9
- /** Activated row data. */
10
- data: TData;
11
- /** Loaded-page row index. */
12
- index: number;
13
- }
14
- /** Stable Cratis-owned parts for styling a {@link DataTableCore}. */
15
- export interface DataTableParts {
16
- /** Outer table composition. */
17
- root?: HTMLAttributes<HTMLDivElement>;
18
- /** Loaded-page search wrapper. */
19
- search?: HTMLAttributes<HTMLDivElement>;
20
- /** Loaded-page search input. */
21
- searchInput?: React.InputHTMLAttributes<HTMLInputElement>;
22
- /** Scroll container. */
23
- tableContainer?: HTMLAttributes<HTMLDivElement>;
24
- /** Semantic table element. */
25
- table?: TableHTMLAttributes<HTMLTableElement>;
26
- /** Table head. */
27
- head?: HTMLAttributes<HTMLTableSectionElement>;
28
- /** Header row. */
29
- headerRow?: HTMLAttributes<HTMLTableRowElement>;
30
- /** Header cell. */
31
- headerCell?: ThHTMLAttributes<HTMLTableCellElement>;
32
- /** Table body. */
33
- body?: HTMLAttributes<HTMLTableSectionElement>;
34
- /** Data row. */
35
- row?: HTMLAttributes<HTMLTableRowElement>;
36
- /** Data cell. */
37
- cell?: TdHTMLAttributes<HTMLTableCellElement>;
38
- /** Empty-state row. */
39
- emptyRow?: HTMLAttributes<HTMLTableRowElement>;
40
- /** Empty-state cell. */
41
- emptyCell?: TdHTMLAttributes<HTMLTableCellElement>;
42
- /** Loading-state row. */
43
- loadingRow?: HTMLAttributes<HTMLTableRowElement>;
44
- /** Loading-state cell. */
45
- loadingCell?: TdHTMLAttributes<HTMLTableCellElement>;
46
- /** Failed or unauthorized row. */
47
- failureRow?: HTMLAttributes<HTMLTableRowElement>;
48
- /** Failed or unauthorized cell. */
49
- failureCell?: TdHTMLAttributes<HTMLTableCellElement>;
50
- }
8
+ import { DataTableStatus } from './DataTableStatus.js';
9
+ export type { DataTableParts } from './DataTableParts.js';
10
+ export type { DataTableRowClickEvent } from './DataTableRowClickEvent.js';
51
11
  /** Props for the semantic loaded-page DataTable renderer. */
52
12
  export interface DataTableCoreProps<TData extends object> {
53
13
  /** Loaded page rows. */
@@ -1 +1 @@
1
- {"version":3,"file":"DataTableCore.d.ts","sourceRoot":"","sources":["../../../DataTables/DataTableCore.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataTableCore.d.ts","sourceRoot":"","sources":["../../../DataTables/DataTableCore.tsx"],"names":[],"mappings":"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"}