@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
@@ -7,13 +7,13 @@ import { zIndexAboveDialog, OVERLAY_OFFSET } from '../renderer/dialogStack.js';
7
7
  import { useNearestDialogZIndex } from '../renderer/DialogStackContext.js';
8
8
  import { useCratisIcon } from '../configuration/useCratisIcon.js';
9
9
  import { asReactAriaButtonProps, asReactAriaListBoxItemProps, asReactAriaListBoxProps } from './reactAriaProps.js';
10
+ import { classNames } from '../ClassNames/classNames.js';
10
11
 
11
12
  const ACTION_KEY = '\u0000cratis-combobox-action';
12
13
  const partAttributes = (part) => ({
13
14
  ...part,
14
15
  style: part?.style,
15
16
  });
16
- const classNames = (...values) => values.filter(Boolean).join(' ');
17
17
  const matches = (option, text, filter) => {
18
18
  if (filter === 'none' || text === '')
19
19
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"ComboBox.js","sources":["../../../Common/ComboBox.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 useEffect,\n useId,\n useMemo,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport type { Key } from 'react';\nimport {\n Button as AriaButton,\n ComboBox as AriaComboBox,\n Input as AriaInput,\n ListBox as AriaListBox,\n ListBoxItem as AriaListBoxItem,\n Popover as AriaPopover,\n} from 'react-aria-components/ComboBox';\nimport { UNSAFE_PortalProvider } from 'react-aria';\nimport { unstable_useOverlayEnvironment } from '../renderer/RendererContext';\nimport { OVERLAY_OFFSET, zIndexAboveDialog } from '../renderer/dialogStack';\nimport { useNearestDialogZIndex } from '../renderer/DialogStackContext';\nimport { useCratisIcon } from '../configuration/useCratisIcon';\nimport type { ExactPartKeys } from '../types/ExactPartKeys';\nimport type { PartsOf } from '../types/parts';\nimport {\n asReactAriaButtonProps,\n asReactAriaListBoxItemProps,\n asReactAriaListBoxProps,\n} from './reactAriaProps';\n\n/** Attributes a consumer may hand to one {@link ComboBox} part: class, style, title and data attributes. */\nexport type ComboBoxPartAttributes = Pick<\n HTMLAttributes<HTMLElement>,\n 'className' | 'style' | 'title'\n> & {\n [dataAttribute: `data-${string}`]: string | number | boolean | undefined;\n};\n\n/** One selectable entry of a {@link ComboBox}. */\nexport interface ComboBoxOption {\n /** Stable identity, reported through `onChange`. */\n key: string;\n /** Primary text; also what typing filters against. */\n label: string;\n /** Secondary text rendered beside or under the label. */\n description?: ReactNode;\n /** Prevents selection while keeping the option visible. */\n disabled?: boolean;\n}\n\n/** Stable Cratis-owned parts for styling a {@link ComboBox}. */\nexport interface ComboBoxParts {\n /** Complete combobox wrapper. */\n root?: ComboBoxPartAttributes;\n /** The text input that owns the `combobox` role. */\n input?: ComboBoxPartAttributes;\n /** The button that opens the list. */\n trigger?: ComboBoxPartAttributes;\n /** Portaled options popover. */\n popover?: ComboBoxPartAttributes;\n /** Options listbox. */\n listbox?: ComboBoxPartAttributes;\n /** One option. */\n option?: ComboBoxPartAttributes;\n /** The label text inside an option. */\n optionLabel?: ComboBoxPartAttributes;\n /** The description text inside an option, when supplied. */\n optionDescription?: ComboBoxPartAttributes;\n /** The message shown while `loading`. */\n loading?: ComboBoxPartAttributes;\n /** The message shown when nothing matches. */\n empty?: ComboBoxPartAttributes;\n /** The inline failure content replacing the list. */\n failure?: ComboBoxPartAttributes;\n /** The footer action row. */\n action?: ComboBoxPartAttributes;\n /** Supporting description, when supplied. */\n description?: ComboBoxPartAttributes;\n /** Validation message, when supplied while invalid. */\n error?: ComboBoxPartAttributes;\n}\n\nconst comboBoxPartsMatchManifest: ExactPartKeys<\n ComboBoxParts,\n PartsOf<'ComboBox'>\n> = true;\nvoid comboBoxPartsMatchManifest;\n\n/** How typed text narrows the options. `none` shows `options` as given, for a consumer that filters itself. */\nexport type ComboBoxFilter = 'contains' | 'startsWith' | 'none';\n\n/** The footer action of a {@link ComboBox}, offered after the options and reachable by keyboard. */\nexport interface ComboBoxAction {\n /** The row's text; it is also the row's accessible name. */\n label: string;\n /** Called with the current input text when the row is chosen. */\n onAction: (inputValue: string) => void | Promise<void>;\n}\n\n/** Props for {@link ComboBox}. */\nexport interface ComboBoxProps {\n /** The options to offer, before filtering. */\n options: ComboBoxOption[];\n /** The selected option key, or `null` for none. */\n value: string | null;\n /** Receives the selected key, or `null` when the selection is cleared. */\n onChange: (key: string | null) => void;\n /** Controlled input text; omit for internal text state. */\n inputValue?: string;\n /** Receives the input text as it is typed. */\n onInputChange?: (inputValue: string) => void;\n /** How typed text narrows `options`. Defaults to `contains`. */\n filter?: ComboBoxFilter;\n /** Opens the list when the input receives focus, not only when typing. */\n openOnFocus?: boolean;\n /** Shows `loadingMessage` instead of options while the consumer fetches them. */\n loading?: boolean;\n /** Content shown while `loading`. */\n loadingMessage?: ReactNode;\n /** Content shown when no option matches the input. */\n emptyMessage?: ReactNode;\n /** Inline failure content replacing the options, for a query that could not answer. */\n failure?: ReactNode;\n /** A footer row after the options, receiving the input text. */\n action?: ComboBoxAction;\n /** Lays the description beside (`inline`) or under (`stacked`) the label. Defaults to `inline`. */\n optionLayout?: 'inline' | 'stacked';\n /** Empty edit hint. */\n placeholder?: string;\n /** Disables the control. */\n disabled?: boolean;\n /** Prevents editing while keeping the value readable. */\n readOnly?: boolean;\n /** Marks the control invalid. */\n invalid?: boolean;\n /** Requires a selection using native form and accessibility semantics. */\n required?: boolean;\n /** DOM identity of the input, for an external `<label htmlFor>`. */\n id?: string;\n /** Native form field name carrying the selected key. */\n name?: string;\n /** Accessible name when no visible label names the input. */\n 'aria-label'?: string;\n /** Id(s) of external labeling elements. */\n 'aria-labelledby'?: string;\n /** Id(s) of external descriptions, merged with the built-in description and error. */\n 'aria-describedby'?: string;\n /** Supporting description rendered under the control. */\n description?: ReactNode;\n /** Validation message rendered while `invalid`. */\n errorMessage?: ReactNode;\n /** Extra class name for the root. */\n className?: string;\n /** Renderer-independent part classes, styles, titles and data attributes. */\n pt?: ComboBoxParts;\n}\n\nconst ACTION_KEY = '\\u0000cratis-combobox-action';\n\nconst partAttributes = (part: ComboBoxPartAttributes | undefined) => ({\n ...part,\n style: part?.style as CSSProperties | undefined,\n});\n\nconst classNames = (...values: Array<string | undefined | false>) =>\n values.filter(Boolean).join(' ');\n\nconst matches = (option: ComboBoxOption, text: string, filter: ComboBoxFilter) => {\n if (filter === 'none' || text === '') return true;\n const haystack = option.label.toLocaleLowerCase();\n const needle = text.toLocaleLowerCase();\n return filter === 'startsWith'\n ? haystack.startsWith(needle)\n : haystack.includes(needle);\n};\n\n/**\n * A single-selection, text-searching combobox for picking an entity from options that may still be\n * loading, may have failed to load, and may need an \"add new\" escape hatch. The input owns the\n * `combobox` role; the list is a `listbox` of `option`s; arrow keys move, Enter selects, Escape\n * closes. Components owns the markup, parts and tokens; React Aria supplies the interaction internally.\n */\nexport const ComboBox = ({\n options,\n value,\n onChange,\n inputValue: controlledInputValue,\n onInputChange,\n filter = 'contains',\n openOnFocus = false,\n loading = false,\n loadingMessage,\n emptyMessage,\n failure,\n action,\n optionLayout = 'inline',\n placeholder,\n disabled = false,\n readOnly = false,\n invalid = false,\n required = false,\n id,\n name,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n description,\n errorMessage,\n className,\n pt,\n}: ComboBoxProps) => {\n const icon = useCratisIcon();\n const expandIcon = icon('expand', '▾');\n const generatedId = useId();\n const inputId = id ?? `cratis-combobox-${generatedId}`;\n const descriptionId = description ? `${inputId}-description` : undefined;\n const errorId = invalid && errorMessage ? `${inputId}-error` : undefined;\n const describedBy =\n [ariaDescribedBy, descriptionId, errorId].filter(Boolean).join(' ') || undefined;\n\n const selectedLabel = options.find((option) => option.key === value)?.label ?? '';\n const [uncontrolledInputValue, setUncontrolledInputValue] = useState(selectedLabel);\n const [editing, setEditing] = useState(false);\n // A list opened by the trigger, by ArrowDown or by focus is not a search: the text in the input is\n // the selected option's label, and filtering by it would offer only the option already chosen.\n // React Aria draws the same distinction internally with `showAllItems`; because the options are\n // filtered here, before `react-aria-components` sees them, that state is mirrored here too.\n const [showAllOptions, setShowAllOptions] = useState(false);\n // A value set from outside — a form reset, options that arrive after mount with a preselected key —\n // must show its label; while the user is editing, the text is theirs.\n useEffect(() => {\n if (!editing && controlledInputValue === undefined)\n setUncontrolledInputValue(selectedLabel);\n }, [selectedLabel, editing, controlledInputValue]);\n const inputValue = controlledInputValue ?? uncontrolledInputValue;\n const setInputValue = (text: string) => {\n // Text that changes is a search again, whatever opened the list.\n if (text !== inputValue) setShowAllOptions(false);\n if (controlledInputValue === undefined) setUncontrolledInputValue(text);\n onInputChange?.(text);\n };\n const openChanged = (isOpen: boolean, trigger?: 'focus' | 'input' | 'manual') => {\n setEditing(isOpen);\n setShowAllOptions(\n isOpen && (trigger === 'manual' || (trigger === 'focus' && openOnFocus)),\n );\n };\n\n const overlayEnvironment = unstable_useOverlayEnvironment();\n const nearestDialogZIndex = useNearestDialogZIndex();\n const popoverZIndex =\n nearestDialogZIndex === null\n ? 'var(--cratis-z-index-overlay)'\n : zIndexAboveDialog(nearestDialogZIndex, OVERLAY_OFFSET);\n\n const showsMessage = loading || failure !== undefined;\n const visibleOptions = useMemo(\n () =>\n showsMessage\n ? []\n : showAllOptions\n ? options\n : options.filter((option) => matches(option, inputValue, filter)),\n [options, inputValue, filter, showsMessage, showAllOptions],\n );\n const items = useMemo(\n () =>\n action && !showsMessage\n ? [\n ...visibleOptions,\n {\n key: ACTION_KEY,\n label: '',\n description: undefined,\n disabled: false,\n },\n ]\n : visibleOptions,\n [visibleOptions, action, showsMessage],\n );\n\n const select = (key: Key | null) => {\n if (key === ACTION_KEY) {\n void action?.onAction(inputValue);\n return;\n }\n const next = key === null ? null : String(key);\n onChange(next);\n setInputValue(\n next === null\n ? ''\n : (options.find((option) => option.key === next)?.label ?? ''),\n );\n };\n\n const renderMessage = () =>\n loading ? (\n <div\n {...partAttributes(pt?.loading)}\n role='status'\n aria-busy='true'\n className={classNames(\n 'cratis-combobox__message',\n 'cratis-combobox__loading',\n pt?.loading?.className,\n )}\n data-cratis-part='loading'\n >\n {loadingMessage}\n </div>\n ) : failure !== undefined ? (\n <div\n {...partAttributes(pt?.failure)}\n role='alert'\n className={classNames(\n 'cratis-combobox__message',\n 'cratis-combobox__failure',\n pt?.failure?.className,\n )}\n data-cratis-part='failure'\n >\n {failure}\n </div>\n ) : (\n <div\n {...partAttributes(pt?.empty)}\n role='status'\n className={classNames(\n 'cratis-combobox__message',\n 'cratis-combobox__empty',\n pt?.empty?.className,\n )}\n data-cratis-part='empty'\n >\n {emptyMessage}\n </div>\n );\n\n return (\n <AriaComboBox\n {...partAttributes(pt?.root)}\n selectedKey={value}\n onSelectionChange={select}\n inputValue={inputValue}\n onInputChange={setInputValue}\n items={items}\n isDisabled={disabled}\n isReadOnly={readOnly}\n isInvalid={invalid}\n isRequired={required}\n name={name}\n onOpenChange={openChanged}\n onFocusChange={setEditing}\n menuTrigger={openOnFocus ? 'focus' : 'input'}\n allowsEmptyCollection\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={describedBy}\n className={classNames('cratis-combobox', pt?.root?.className, className)}\n data-cratis-part='root'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n data-loading={loading || undefined}\n >\n {({ isOpen }) => (\n <>\n <div className='cratis-combobox__control'>\n <AriaInput\n {...partAttributes(pt?.input)}\n id={inputId}\n placeholder={placeholder}\n aria-errormessage={errorId}\n className={classNames(\n 'cratis-combobox__input',\n pt?.input?.className,\n )}\n data-cratis-part='input'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n data-open={isOpen || undefined}\n />\n <AriaButton\n {...asReactAriaButtonProps(partAttributes(pt?.trigger))}\n className={classNames(\n 'cratis-combobox__trigger',\n pt?.trigger?.className,\n )}\n data-cratis-part='trigger'\n data-disabled={disabled || undefined}\n data-open={isOpen || undefined}\n >\n <span aria-hidden='true'>{expandIcon}</span>\n </AriaButton>\n </div>\n <UNSAFE_PortalProvider getContainer={overlayEnvironment.getContainer}>\n <AriaPopover\n {...partAttributes(pt?.popover)}\n className={classNames(\n 'cratis-combobox__popover',\n pt?.popover?.className,\n )}\n style={{\n zIndex: popoverZIndex,\n ...(pt?.popover?.style as CSSProperties | undefined),\n }}\n data-cratis-part='popover'\n data-open\n >\n <AriaListBox<ComboBoxOption>\n {...asReactAriaListBoxProps<ComboBoxOption>(\n partAttributes(pt?.listbox),\n )}\n items={items}\n className={classNames(\n 'cratis-combobox__listbox',\n pt?.listbox?.className,\n )}\n data-cratis-part='listbox'\n data-option-layout={optionLayout}\n renderEmptyState={renderMessage}\n >\n {(option) =>\n option.key === ACTION_KEY ? (\n <AriaListBoxItem\n {...asReactAriaListBoxItemProps<ComboBoxOption>(\n partAttributes(pt?.action),\n )}\n id={ACTION_KEY}\n textValue={action?.label ?? ''}\n className={classNames(\n 'cratis-combobox__action',\n pt?.action?.className,\n )}\n data-cratis-part='action'\n >\n {action?.label}\n </AriaListBoxItem>\n ) : (\n <AriaListBoxItem\n {...asReactAriaListBoxItemProps<ComboBoxOption>(\n partAttributes(pt?.option),\n )}\n id={option.key}\n textValue={option.label}\n isDisabled={option.disabled}\n className={classNames(\n 'cratis-combobox__option',\n pt?.option?.className,\n )}\n data-cratis-part='option'\n data-disabled={option.disabled || undefined}\n data-selected={\n option.key === value || undefined\n }\n >\n <span\n {...partAttributes(pt?.optionLabel)}\n className={classNames(\n 'cratis-combobox__option-label',\n pt?.optionLabel?.className,\n )}\n data-cratis-part='optionLabel'\n >\n {option.label}\n </span>\n {option.description !== undefined && (\n <span\n {...partAttributes(\n pt?.optionDescription,\n )}\n className={classNames(\n 'cratis-combobox__option-description',\n pt?.optionDescription?.className,\n )}\n data-cratis-part='optionDescription'\n >\n {option.description}\n </span>\n )}\n </AriaListBoxItem>\n )\n }\n </AriaListBox>\n </AriaPopover>\n </UNSAFE_PortalProvider>\n {descriptionId && (\n <span\n {...partAttributes(pt?.description)}\n id={descriptionId}\n className={classNames(\n 'cratis-combobox__description',\n pt?.description?.className,\n )}\n data-cratis-part='description'\n >\n {description}\n </span>\n )}\n {errorId && (\n <span\n {...partAttributes(pt?.error)}\n id={errorId}\n className={classNames(\n 'cratis-combobox__error',\n pt?.error?.className,\n )}\n data-cratis-part='error'\n data-invalid='true'\n >\n {errorMessage}\n </span>\n )}\n </>\n )}\n </AriaComboBox>\n );\n};\n\nComboBox.displayName = 'ComboBox';\n"],"names":["_jsx","AriaComboBox","_jsxs","_Fragment","AriaInput","AriaButton","AriaPopover","AriaListBox","AriaListBoxItem"],"mappings":"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"}
1
+ {"version":3,"file":"ComboBox.js","sources":["../../../Common/ComboBox.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 useEffect,\n useId,\n useMemo,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport type { Key } from 'react';\nimport {\n Button as AriaButton,\n ComboBox as AriaComboBox,\n Input as AriaInput,\n ListBox as AriaListBox,\n ListBoxItem as AriaListBoxItem,\n Popover as AriaPopover,\n} from 'react-aria-components/ComboBox';\nimport { UNSAFE_PortalProvider } from 'react-aria';\nimport { unstable_useOverlayEnvironment } from '../renderer/RendererContext';\nimport { OVERLAY_OFFSET, zIndexAboveDialog } from '../renderer/dialogStack';\nimport { useNearestDialogZIndex } from '../renderer/DialogStackContext';\nimport { useCratisIcon } from '../configuration/useCratisIcon';\nimport type { ExactPartKeys } from '../types/ExactPartKeys';\nimport type { PartsOf } from '../types/parts';\nimport {\n asReactAriaButtonProps,\n asReactAriaListBoxItemProps,\n asReactAriaListBoxProps,\n} from './reactAriaProps';\nimport { classNames } from '../ClassNames/classNames';\n\n/** Attributes a consumer may hand to one {@link ComboBox} part: class, style, title and data attributes. */\nexport type ComboBoxPartAttributes = Pick<\n HTMLAttributes<HTMLElement>,\n 'className' | 'style' | 'title'\n> & {\n [dataAttribute: `data-${string}`]: string | number | boolean | undefined;\n};\n\n/** One selectable entry of a {@link ComboBox}. */\nexport interface ComboBoxOption {\n /** Stable identity, reported through `onChange`. */\n key: string;\n /** Primary text; also what typing filters against. */\n label: string;\n /** Secondary text rendered beside or under the label. */\n description?: ReactNode;\n /** Prevents selection while keeping the option visible. */\n disabled?: boolean;\n}\n\n/** Stable Cratis-owned parts for styling a {@link ComboBox}. */\nexport interface ComboBoxParts {\n /** Complete combobox wrapper. */\n root?: ComboBoxPartAttributes;\n /** The text input that owns the `combobox` role. */\n input?: ComboBoxPartAttributes;\n /** The button that opens the list. */\n trigger?: ComboBoxPartAttributes;\n /** Portaled options popover. */\n popover?: ComboBoxPartAttributes;\n /** Options listbox. */\n listbox?: ComboBoxPartAttributes;\n /** One option. */\n option?: ComboBoxPartAttributes;\n /** The label text inside an option. */\n optionLabel?: ComboBoxPartAttributes;\n /** The description text inside an option, when supplied. */\n optionDescription?: ComboBoxPartAttributes;\n /** The message shown while `loading`. */\n loading?: ComboBoxPartAttributes;\n /** The message shown when nothing matches. */\n empty?: ComboBoxPartAttributes;\n /** The inline failure content replacing the list. */\n failure?: ComboBoxPartAttributes;\n /** The footer action row. */\n action?: ComboBoxPartAttributes;\n /** Supporting description, when supplied. */\n description?: ComboBoxPartAttributes;\n /** Validation message, when supplied while invalid. */\n error?: ComboBoxPartAttributes;\n}\n\nconst comboBoxPartsMatchManifest: ExactPartKeys<\n ComboBoxParts,\n PartsOf<'ComboBox'>\n> = true;\nvoid comboBoxPartsMatchManifest;\n\n/** How typed text narrows the options. `none` shows `options` as given, for a consumer that filters itself. */\nexport type ComboBoxFilter = 'contains' | 'startsWith' | 'none';\n\n/** The footer action of a {@link ComboBox}, offered after the options and reachable by keyboard. */\nexport interface ComboBoxAction {\n /** The row's text; it is also the row's accessible name. */\n label: string;\n /** Called with the current input text when the row is chosen. */\n onAction: (inputValue: string) => void | Promise<void>;\n}\n\n/** Props for {@link ComboBox}. */\nexport interface ComboBoxProps {\n /** The options to offer, before filtering. */\n options: ComboBoxOption[];\n /** The selected option key, or `null` for none. */\n value: string | null;\n /** Receives the selected key, or `null` when the selection is cleared. */\n onChange: (key: string | null) => void;\n /** Controlled input text; omit for internal text state. */\n inputValue?: string;\n /** Receives the input text as it is typed. */\n onInputChange?: (inputValue: string) => void;\n /** How typed text narrows `options`. Defaults to `contains`. */\n filter?: ComboBoxFilter;\n /** Opens the list when the input receives focus, not only when typing. */\n openOnFocus?: boolean;\n /** Shows `loadingMessage` instead of options while the consumer fetches them. */\n loading?: boolean;\n /** Content shown while `loading`. */\n loadingMessage?: ReactNode;\n /** Content shown when no option matches the input. */\n emptyMessage?: ReactNode;\n /** Inline failure content replacing the options, for a query that could not answer. */\n failure?: ReactNode;\n /** A footer row after the options, receiving the input text. */\n action?: ComboBoxAction;\n /** Lays the description beside (`inline`) or under (`stacked`) the label. Defaults to `inline`. */\n optionLayout?: 'inline' | 'stacked';\n /** Empty edit hint. */\n placeholder?: string;\n /** Disables the control. */\n disabled?: boolean;\n /** Prevents editing while keeping the value readable. */\n readOnly?: boolean;\n /** Marks the control invalid. */\n invalid?: boolean;\n /** Requires a selection using native form and accessibility semantics. */\n required?: boolean;\n /** DOM identity of the input, for an external `<label htmlFor>`. */\n id?: string;\n /** Native form field name carrying the selected key. */\n name?: string;\n /** Accessible name when no visible label names the input. */\n 'aria-label'?: string;\n /** Id(s) of external labeling elements. */\n 'aria-labelledby'?: string;\n /** Id(s) of external descriptions, merged with the built-in description and error. */\n 'aria-describedby'?: string;\n /** Supporting description rendered under the control. */\n description?: ReactNode;\n /** Validation message rendered while `invalid`. */\n errorMessage?: ReactNode;\n /** Extra class name for the root. */\n className?: string;\n /** Renderer-independent part classes, styles, titles and data attributes. */\n pt?: ComboBoxParts;\n}\n\nconst ACTION_KEY = '\\u0000cratis-combobox-action';\n\nconst partAttributes = (part: ComboBoxPartAttributes | undefined) => ({\n ...part,\n style: part?.style as CSSProperties | undefined,\n});\n\nconst matches = (option: ComboBoxOption, text: string, filter: ComboBoxFilter) => {\n if (filter === 'none' || text === '') return true;\n const haystack = option.label.toLocaleLowerCase();\n const needle = text.toLocaleLowerCase();\n return filter === 'startsWith'\n ? haystack.startsWith(needle)\n : haystack.includes(needle);\n};\n\n/**\n * A single-selection, text-searching combobox for picking an entity from options that may still be\n * loading, may have failed to load, and may need an \"add new\" escape hatch. The input owns the\n * `combobox` role; the list is a `listbox` of `option`s; arrow keys move, Enter selects, Escape\n * closes. Components owns the markup, parts and tokens; React Aria supplies the interaction internally.\n */\nexport const ComboBox = ({\n options,\n value,\n onChange,\n inputValue: controlledInputValue,\n onInputChange,\n filter = 'contains',\n openOnFocus = false,\n loading = false,\n loadingMessage,\n emptyMessage,\n failure,\n action,\n optionLayout = 'inline',\n placeholder,\n disabled = false,\n readOnly = false,\n invalid = false,\n required = false,\n id,\n name,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n description,\n errorMessage,\n className,\n pt,\n}: ComboBoxProps) => {\n const icon = useCratisIcon();\n const expandIcon = icon('expand', '▾');\n const generatedId = useId();\n const inputId = id ?? `cratis-combobox-${generatedId}`;\n const descriptionId = description ? `${inputId}-description` : undefined;\n const errorId = invalid && errorMessage ? `${inputId}-error` : undefined;\n const describedBy =\n [ariaDescribedBy, descriptionId, errorId].filter(Boolean).join(' ') || undefined;\n\n const selectedLabel = options.find((option) => option.key === value)?.label ?? '';\n const [uncontrolledInputValue, setUncontrolledInputValue] = useState(selectedLabel);\n const [editing, setEditing] = useState(false);\n // A list opened by the trigger, by ArrowDown or by focus is not a search: the text in the input is\n // the selected option's label, and filtering by it would offer only the option already chosen.\n // React Aria draws the same distinction internally with `showAllItems`; because the options are\n // filtered here, before `react-aria-components` sees them, that state is mirrored here too.\n const [showAllOptions, setShowAllOptions] = useState(false);\n // A value set from outside — a form reset, options that arrive after mount with a preselected key —\n // must show its label; while the user is editing, the text is theirs.\n useEffect(() => {\n if (!editing && controlledInputValue === undefined)\n setUncontrolledInputValue(selectedLabel);\n }, [selectedLabel, editing, controlledInputValue]);\n const inputValue = controlledInputValue ?? uncontrolledInputValue;\n const setInputValue = (text: string) => {\n // Text that changes is a search again, whatever opened the list.\n if (text !== inputValue) setShowAllOptions(false);\n if (controlledInputValue === undefined) setUncontrolledInputValue(text);\n onInputChange?.(text);\n };\n const openChanged = (isOpen: boolean, trigger?: 'focus' | 'input' | 'manual') => {\n setEditing(isOpen);\n setShowAllOptions(\n isOpen && (trigger === 'manual' || (trigger === 'focus' && openOnFocus)),\n );\n };\n\n const overlayEnvironment = unstable_useOverlayEnvironment();\n const nearestDialogZIndex = useNearestDialogZIndex();\n const popoverZIndex =\n nearestDialogZIndex === null\n ? 'var(--cratis-z-index-overlay)'\n : zIndexAboveDialog(nearestDialogZIndex, OVERLAY_OFFSET);\n\n const showsMessage = loading || failure !== undefined;\n const visibleOptions = useMemo(\n () =>\n showsMessage\n ? []\n : showAllOptions\n ? options\n : options.filter((option) => matches(option, inputValue, filter)),\n [options, inputValue, filter, showsMessage, showAllOptions],\n );\n const items = useMemo(\n () =>\n action && !showsMessage\n ? [\n ...visibleOptions,\n {\n key: ACTION_KEY,\n label: '',\n description: undefined,\n disabled: false,\n },\n ]\n : visibleOptions,\n [visibleOptions, action, showsMessage],\n );\n\n const select = (key: Key | null) => {\n if (key === ACTION_KEY) {\n void action?.onAction(inputValue);\n return;\n }\n const next = key === null ? null : String(key);\n onChange(next);\n setInputValue(\n next === null\n ? ''\n : (options.find((option) => option.key === next)?.label ?? ''),\n );\n };\n\n const renderMessage = () =>\n loading ? (\n <div\n {...partAttributes(pt?.loading)}\n role='status'\n aria-busy='true'\n className={classNames(\n 'cratis-combobox__message',\n 'cratis-combobox__loading',\n pt?.loading?.className,\n )}\n data-cratis-part='loading'\n >\n {loadingMessage}\n </div>\n ) : failure !== undefined ? (\n <div\n {...partAttributes(pt?.failure)}\n role='alert'\n className={classNames(\n 'cratis-combobox__message',\n 'cratis-combobox__failure',\n pt?.failure?.className,\n )}\n data-cratis-part='failure'\n >\n {failure}\n </div>\n ) : (\n <div\n {...partAttributes(pt?.empty)}\n role='status'\n className={classNames(\n 'cratis-combobox__message',\n 'cratis-combobox__empty',\n pt?.empty?.className,\n )}\n data-cratis-part='empty'\n >\n {emptyMessage}\n </div>\n );\n\n return (\n <AriaComboBox\n {...partAttributes(pt?.root)}\n selectedKey={value}\n onSelectionChange={select}\n inputValue={inputValue}\n onInputChange={setInputValue}\n items={items}\n isDisabled={disabled}\n isReadOnly={readOnly}\n isInvalid={invalid}\n isRequired={required}\n name={name}\n onOpenChange={openChanged}\n onFocusChange={setEditing}\n menuTrigger={openOnFocus ? 'focus' : 'input'}\n allowsEmptyCollection\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={describedBy}\n className={classNames('cratis-combobox', pt?.root?.className, className)}\n data-cratis-part='root'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n data-loading={loading || undefined}\n >\n {({ isOpen }) => (\n <>\n <div className='cratis-combobox__control'>\n <AriaInput\n {...partAttributes(pt?.input)}\n id={inputId}\n placeholder={placeholder}\n aria-errormessage={errorId}\n className={classNames(\n 'cratis-combobox__input',\n pt?.input?.className,\n )}\n data-cratis-part='input'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n data-open={isOpen || undefined}\n />\n <AriaButton\n {...asReactAriaButtonProps(partAttributes(pt?.trigger))}\n className={classNames(\n 'cratis-combobox__trigger',\n pt?.trigger?.className,\n )}\n data-cratis-part='trigger'\n data-disabled={disabled || undefined}\n data-open={isOpen || undefined}\n >\n <span aria-hidden='true'>{expandIcon}</span>\n </AriaButton>\n </div>\n <UNSAFE_PortalProvider getContainer={overlayEnvironment.getContainer}>\n <AriaPopover\n {...partAttributes(pt?.popover)}\n className={classNames(\n 'cratis-combobox__popover',\n pt?.popover?.className,\n )}\n style={{\n zIndex: popoverZIndex,\n ...(pt?.popover?.style as CSSProperties | undefined),\n }}\n data-cratis-part='popover'\n data-open\n >\n <AriaListBox<ComboBoxOption>\n {...asReactAriaListBoxProps<ComboBoxOption>(\n partAttributes(pt?.listbox),\n )}\n items={items}\n className={classNames(\n 'cratis-combobox__listbox',\n pt?.listbox?.className,\n )}\n data-cratis-part='listbox'\n data-option-layout={optionLayout}\n renderEmptyState={renderMessage}\n >\n {(option) =>\n option.key === ACTION_KEY ? (\n <AriaListBoxItem\n {...asReactAriaListBoxItemProps<ComboBoxOption>(\n partAttributes(pt?.action),\n )}\n id={ACTION_KEY}\n textValue={action?.label ?? ''}\n className={classNames(\n 'cratis-combobox__action',\n pt?.action?.className,\n )}\n data-cratis-part='action'\n >\n {action?.label}\n </AriaListBoxItem>\n ) : (\n <AriaListBoxItem\n {...asReactAriaListBoxItemProps<ComboBoxOption>(\n partAttributes(pt?.option),\n )}\n id={option.key}\n textValue={option.label}\n isDisabled={option.disabled}\n className={classNames(\n 'cratis-combobox__option',\n pt?.option?.className,\n )}\n data-cratis-part='option'\n data-disabled={option.disabled || undefined}\n data-selected={\n option.key === value || undefined\n }\n >\n <span\n {...partAttributes(pt?.optionLabel)}\n className={classNames(\n 'cratis-combobox__option-label',\n pt?.optionLabel?.className,\n )}\n data-cratis-part='optionLabel'\n >\n {option.label}\n </span>\n {option.description !== undefined && (\n <span\n {...partAttributes(\n pt?.optionDescription,\n )}\n className={classNames(\n 'cratis-combobox__option-description',\n pt?.optionDescription?.className,\n )}\n data-cratis-part='optionDescription'\n >\n {option.description}\n </span>\n )}\n </AriaListBoxItem>\n )\n }\n </AriaListBox>\n </AriaPopover>\n </UNSAFE_PortalProvider>\n {descriptionId && (\n <span\n {...partAttributes(pt?.description)}\n id={descriptionId}\n className={classNames(\n 'cratis-combobox__description',\n pt?.description?.className,\n )}\n data-cratis-part='description'\n >\n {description}\n </span>\n )}\n {errorId && (\n <span\n {...partAttributes(pt?.error)}\n id={errorId}\n className={classNames(\n 'cratis-combobox__error',\n pt?.error?.className,\n )}\n data-cratis-part='error'\n data-invalid='true'\n >\n {errorMessage}\n </span>\n )}\n </>\n )}\n </AriaComboBox>\n );\n};\n\nComboBox.displayName = 'ComboBox';\n"],"names":["_jsx","AriaComboBox","_jsxs","_Fragment","AriaInput","AriaButton","AriaPopover","AriaListBox","AriaListBoxItem"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DatePickerInputImplementation.d.ts","sourceRoot":"","sources":["../../../Common/DatePickerInputImplementation.tsx"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAmB,CAAC;AAiB9D;;;GAGG;AACH,eAAO,MAAM,6BAA6B,+RAuBvC,oBAAoB,gCA4YtB,CAAC"}
1
+ {"version":3,"file":"DatePickerInputImplementation.d.ts","sourceRoot":"","sources":["../../../Common/DatePickerInputImplementation.tsx"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAmB,CAAC;AAe9D;;;GAGG;AACH,eAAO,MAAM,6BAA6B,+RAuBvC,oBAAoB,gCA4YtB,CAAC"}
@@ -11,12 +11,12 @@ import 'react-dom';
11
11
  import { useCratisComponentsConfig } from '../configuration/CratisComponentsContext.js';
12
12
  import { useCratisIcon } from '../configuration/useCratisIcon.js';
13
13
  import '../Notifications/toast.js';
14
+ import { classNames } from '../ClassNames/classNames.js';
14
15
  import { zIndexAboveDialog, OVERLAY_OFFSET } from '../renderer/dialogStack.js';
15
16
  import { useNearestDialogZIndex } from '../renderer/DialogStackContext.js';
16
17
  import { asReactAriaButtonProps } from './reactAriaProps.js';
17
18
  import { getLocalTimeZone, today, fromDate, toCalendarDate } from '@internationalized/date';
18
19
 
19
- const classNames = (...values) => values.filter(Boolean).join(' ');
20
20
  const asDateValue = (value, showTime) => {
21
21
  if (!value)
22
22
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"DatePickerInputImplementation.js","sources":["../../../Common/DatePickerInputImplementation.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 { useState } from 'react';\nimport {\n Button,\n Calendar,\n CalendarCell,\n CalendarGrid,\n CalendarGridBody,\n CalendarGridHeader,\n CalendarHeaderCell,\n DateInput,\n DatePicker as AriaDatePicker,\n DateSegment,\n Group,\n Popover,\n type DateValue,\n} from 'react-aria-components/DatePicker';\nimport { Dialog } from 'react-aria-components/Dialog';\nimport { Heading } from 'react-aria-components/Heading';\nimport { UNSAFE_PortalProvider } from 'react-aria';\nimport { unstable_useOverlayEnvironment } from '../renderer/RendererContext';\nimport { useCratisComponentsConfig } from './CratisComponentsProvider';\nimport { useCratisIcon } from '../configuration/useCratisIcon';\nimport { OVERLAY_OFFSET, zIndexAboveDialog } from '../renderer/dialogStack';\nimport { useNearestDialogZIndex } from '../renderer/DialogStackContext';\nimport { asReactAriaButtonProps } from './reactAriaProps';\nimport {\n fromDate,\n getLocalTimeZone,\n today,\n toCalendarDate,\n} from '@internationalized/date';\nimport type { DatePickerInputProps } from './DatePickerInput';\n\nconst classNames = (...values: Array<string | undefined>) =>\n values.filter(Boolean).join(' ');\n\nconst asDateValue = (\n value: Date | null,\n showTime: boolean | undefined,\n): DateValue | null => {\n if (!value) return null;\n const zoned = fromDate(value, getLocalTimeZone());\n return showTime ? zoned : toCalendarDate(zoned);\n};\n\nconst asDate = (value: DateValue | null): Date | null =>\n value ? value.toDate(getLocalTimeZone()) : null;\n\n/**\n * An internationalized date or date-time picker with Cratis-owned markup parts.\n * The public boundary remains `Date | null`; React Aria's calendar values stay internal.\n */\nexport const DatePickerInputImplementation = ({\n value,\n onChange,\n onBlur,\n invalid,\n disabled,\n readOnly,\n id,\n showButtonBar,\n placeholder,\n showIcon = true,\n showTime,\n hourFormat,\n minDate,\n maxDate,\n className,\n style,\n pt,\n todayLabel,\n clearLabel,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n}: DatePickerInputProps) => {\n const [isPickerOpen, setIsPickerOpen] = useState(false);\n const overlayEnvironment = unstable_useOverlayEnvironment();\n const nearestDialogZIndex = useNearestDialogZIndex();\n const resolvedPopoverZIndex =\n nearestDialogZIndex === null\n ? 'var(--cratis-z-index-overlay)'\n : zIndexAboveDialog(nearestDialogZIndex, OVERLAY_OFFSET);\n const { messages } = useCratisComponentsConfig();\n const datePickerMessages = messages?.datePicker;\n const icon = useCratisIcon();\n const resolvedTodayLabel = todayLabel ?? datePickerMessages?.today ?? 'Today';\n const resolvedClearLabel = clearLabel ?? datePickerMessages?.clear ?? 'Clear';\n const timeZone = getLocalTimeZone();\n const minValue = asDateValue(minDate ?? null, showTime) ?? undefined;\n const maxValue = asDateValue(maxDate ?? null, showTime) ?? undefined;\n const todayDate = today(timeZone).toDate(timeZone);\n // Compare the same granularity that the action emits. In date-time mode the Today action\n // retains its existing local-midnight value, which can legitimately fall before a same-day\n // minDate carrying a later time.\n const todayValue = asDateValue(todayDate, showTime)!;\n const isTodayOutOfBounds =\n (minValue !== undefined && todayValue.compare(minValue) < 0) ||\n (maxValue !== undefined && todayValue.compare(maxValue) > 0);\n const rootClassName = classNames(\n 'cratis-date-picker',\n pt?.root?.className,\n className,\n );\n const inputId = id ?? pt?.input?.id;\n const effectiveDisabled = disabled ?? pt?.input?.disabled ?? false;\n const effectiveReadOnly = readOnly ?? pt?.input?.readOnly ?? false;\n const effectiveInvalid = invalid ?? pt?.input?.['aria-invalid'] ?? false;\n const actionsDisabled = effectiveDisabled || effectiveReadOnly;\n const clearDisabled = actionsDisabled || pt?.clear?.disabled || false;\n const effectivePlaceholder = placeholder ?? pt?.input?.placeholder;\n const effectiveAriaLabel =\n ariaLabel ??\n pt?.input?.['aria-label'] ??\n effectivePlaceholder ??\n datePickerMessages?.label ??\n 'Date';\n const effectiveAriaLabelledby = ariaLabelledby ?? pt?.input?.['aria-labelledby'];\n const effectiveAriaDescribedby = ariaDescribedby ?? pt?.input?.['aria-describedby'];\n const inputPartAttributes = {\n ...pt?.input,\n id: undefined,\n className: undefined,\n style: undefined,\n disabled: undefined,\n readOnly: undefined,\n placeholder: undefined,\n 'aria-label': undefined,\n 'aria-labelledby': undefined,\n 'aria-describedby': undefined,\n 'aria-invalid': undefined,\n };\n\n return (\n <div\n {...pt?.root}\n className={rootClassName}\n style={{ ...pt?.root?.style, ...style }}\n data-cratis-part='root'\n data-invalid={effectiveInvalid || undefined}\n data-disabled={effectiveDisabled || undefined}\n data-readonly={effectiveReadOnly || undefined}\n data-open={isPickerOpen || undefined}\n data-selected={value !== null || undefined}\n onBlur={onBlur}\n >\n <UNSAFE_PortalProvider getContainer={overlayEnvironment.getContainer}>\n <AriaDatePicker\n value={asDateValue(value, showTime)}\n onChange={(next) => onChange(asDate(next), { source: 'user' })}\n isDisabled={effectiveDisabled}\n isReadOnly={effectiveReadOnly}\n isInvalid={effectiveInvalid}\n isOpen={isPickerOpen}\n onOpenChange={(nextIsOpen) => {\n if (!nextIsOpen || !effectiveReadOnly) setIsPickerOpen(nextIsOpen);\n }}\n minValue={minValue}\n maxValue={maxValue}\n granularity={showTime ? 'minute' : 'day'}\n hourCycle={\n hourFormat === '12' ? 12 : hourFormat === '24' ? 24 : undefined\n }\n aria-label={effectiveAriaLabel}\n aria-labelledby={effectiveAriaLabelledby}\n aria-describedby={effectiveAriaDescribedby}\n className='cratis-date-picker__picker'\n >\n {({ isOpen }) => (\n <>\n <Group\n {...pt?.group}\n id={inputId}\n aria-invalid={effectiveInvalid || undefined}\n className={classNames(\n 'cratis-date-picker__group',\n pt?.group?.className,\n )}\n data-cratis-part='group'\n data-empty={value === null || undefined}\n render={(groupProps) => (\n <div\n {...groupProps}\n data-open={isOpen || undefined}\n data-invalid={effectiveInvalid || undefined}\n data-disabled={effectiveDisabled || undefined}\n data-readonly={effectiveReadOnly || undefined}\n data-selected={value !== null || undefined}\n />\n )}\n >\n <DateInput\n {...inputPartAttributes}\n className={classNames(\n 'cratis-date-picker__input',\n pt?.input?.className,\n )}\n style={pt?.input?.style}\n data-cratis-part='input'\n data-placeholder={effectivePlaceholder}\n render={(inputProps) => (\n <div\n {...inputProps}\n data-open={isOpen || undefined}\n data-invalid={effectiveInvalid || undefined}\n data-disabled={effectiveDisabled || undefined}\n data-readonly={effectiveReadOnly || undefined}\n data-selected={value !== null || undefined}\n />\n )}\n >\n {(segment) => (\n <DateSegment\n {...pt?.segment}\n segment={segment}\n className={classNames(\n 'cratis-date-picker__segment',\n pt?.segment?.className,\n )}\n data-cratis-part='segment'\n render={(segmentProps) => (\n <span\n {...segmentProps}\n data-invalid={\n effectiveInvalid || undefined\n }\n data-disabled={\n effectiveDisabled || undefined\n }\n data-readonly={\n effectiveReadOnly || undefined\n }\n />\n )}\n />\n )}\n </DateInput>\n {value === null && effectivePlaceholder && (\n <span\n {...pt?.placeholder}\n className={classNames(\n 'cratis-date-picker__placeholder',\n pt?.placeholder?.className,\n )}\n data-cratis-part='placeholder'\n aria-hidden='true'\n >\n {effectivePlaceholder}\n </span>\n )}\n {showIcon && (\n <Button\n {...asReactAriaButtonProps(pt?.trigger)}\n isDisabled={\n effectiveDisabled || effectiveReadOnly\n }\n className={classNames(\n 'cratis-date-picker__trigger',\n pt?.trigger?.className,\n )}\n data-cratis-part='trigger'\n render={(triggerProps) => (\n <button\n {...triggerProps}\n data-open={isOpen || undefined}\n data-invalid={\n effectiveInvalid || undefined\n }\n data-disabled={\n effectiveDisabled ||\n effectiveReadOnly ||\n undefined\n }\n data-readonly={\n effectiveReadOnly || undefined\n }\n data-selected={\n value !== null || undefined\n }\n />\n )}\n aria-label={\n pt?.trigger?.['aria-label'] ??\n datePickerMessages?.openCalendar ??\n 'Open calendar'\n }\n >\n <span aria-hidden='true'>▦</span>\n </Button>\n )}\n </Group>\n <Popover\n {...pt?.popover}\n className={classNames(\n 'cratis-date-picker__popover',\n pt?.popover?.className,\n )}\n style={{\n zIndex: resolvedPopoverZIndex,\n ...pt?.popover?.style,\n }}\n data-cratis-part='popover'\n data-open\n placement='bottom start'\n >\n <Dialog\n {...pt?.dialog}\n className={classNames(\n 'cratis-date-picker__dialog',\n pt?.dialog?.className,\n )}\n data-cratis-part='dialog'\n data-open\n >\n <Calendar\n {...pt?.calendar}\n className={classNames(\n 'cratis-date-picker__calendar',\n pt?.calendar?.className,\n )}\n data-cratis-part='calendar'\n data-open\n >\n <header\n {...pt?.header}\n className={classNames(\n 'cratis-date-picker__header',\n pt?.header?.className,\n )}\n data-cratis-part='header'\n >\n <Button\n {...asReactAriaButtonProps(pt?.previous)}\n slot='previous'\n className={classNames(\n 'cratis-date-picker__nav',\n pt?.previous?.className,\n )}\n data-cratis-part='previous'\n aria-label={\n pt?.previous?.['aria-label'] ??\n datePickerMessages?.previousMonth ??\n 'Previous month'\n }\n >\n <span aria-hidden='true'>\n {icon('previous', '‹')}\n </span>\n </Button>\n <Heading\n {...pt?.heading}\n className={classNames(\n 'cratis-date-picker__heading',\n pt?.heading?.className,\n )}\n data-cratis-part='heading'\n />\n <Button\n {...asReactAriaButtonProps(pt?.next)}\n slot='next'\n className={classNames(\n 'cratis-date-picker__nav',\n pt?.next?.className,\n )}\n data-cratis-part='next'\n aria-label={\n pt?.next?.['aria-label'] ??\n datePickerMessages?.nextMonth ??\n 'Next month'\n }\n >\n <span aria-hidden='true'>\n {icon('next', '›')}\n </span>\n </Button>\n </header>\n <CalendarGrid\n {...pt?.grid}\n className={classNames(\n 'cratis-date-picker__grid',\n pt?.grid?.className,\n )}\n data-cratis-part='grid'\n >\n <CalendarGridHeader>\n {(day) => (\n <CalendarHeaderCell>\n {day}\n </CalendarHeaderCell>\n )}\n </CalendarGridHeader>\n <CalendarGridBody>\n {(date) => (\n <CalendarCell\n {...pt?.cell}\n date={date}\n className={classNames(\n 'cratis-date-picker__cell',\n pt?.cell?.className,\n )}\n data-cratis-part='cell'\n />\n )}\n </CalendarGridBody>\n </CalendarGrid>\n </Calendar>\n {showButtonBar && (\n <div\n {...pt?.buttonBar}\n className={classNames(\n 'cratis-date-picker__button-bar',\n pt?.buttonBar?.className,\n )}\n data-cratis-part='button-bar'\n >\n <button\n {...pt?.today}\n type='button'\n className={classNames(\n 'cratis-date-picker__action',\n pt?.today?.className,\n )}\n data-cratis-part='today'\n data-disabled={\n actionsDisabled || isTodayOutOfBounds || undefined\n }\n disabled={actionsDisabled || isTodayOutOfBounds}\n aria-disabled={\n actionsDisabled || isTodayOutOfBounds || undefined\n }\n onClick={(event) => {\n if (actionsDisabled || isTodayOutOfBounds) return;\n onChange(todayDate, {\n source: 'user',\n nativeEvent: event.nativeEvent,\n });\n }}\n >\n {resolvedTodayLabel}\n </button>\n <button\n {...pt?.clear}\n type='button'\n className={classNames(\n 'cratis-date-picker__action',\n pt?.clear?.className,\n )}\n data-cratis-part='clear'\n data-disabled={clearDisabled || undefined}\n disabled={clearDisabled}\n aria-disabled={clearDisabled || pt?.clear?.['aria-disabled'] || undefined}\n onClick={(event) => {\n if (clearDisabled) return;\n onChange(null, {\n source: 'user',\n nativeEvent: event.nativeEvent,\n });\n }}\n >\n {resolvedClearLabel}\n </button>\n </div>\n )}\n </Dialog>\n </Popover>\n </>\n )}\n </AriaDatePicker>\n </UNSAFE_PortalProvider>\n </div>\n );\n};\n"],"names":["_jsx","AriaDatePicker","_jsxs","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"DatePickerInputImplementation.js","sources":["../../../Common/DatePickerInputImplementation.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 { useState } from 'react';\nimport {\n Button,\n Calendar,\n CalendarCell,\n CalendarGrid,\n CalendarGridBody,\n CalendarGridHeader,\n CalendarHeaderCell,\n DateInput,\n DatePicker as AriaDatePicker,\n DateSegment,\n Group,\n Popover,\n type DateValue,\n} from 'react-aria-components/DatePicker';\nimport { Dialog } from 'react-aria-components/Dialog';\nimport { Heading } from 'react-aria-components/Heading';\nimport { UNSAFE_PortalProvider } from 'react-aria';\nimport { unstable_useOverlayEnvironment } from '../renderer/RendererContext';\nimport { useCratisComponentsConfig } from './CratisComponentsProvider';\nimport { useCratisIcon } from '../configuration/useCratisIcon';\nimport { OVERLAY_OFFSET, zIndexAboveDialog } from '../renderer/dialogStack';\nimport { useNearestDialogZIndex } from '../renderer/DialogStackContext';\nimport { asReactAriaButtonProps } from './reactAriaProps';\nimport {\n fromDate,\n getLocalTimeZone,\n today,\n toCalendarDate,\n} from '@internationalized/date';\nimport type { DatePickerInputProps } from './DatePickerInput';\nimport { classNames } from '../ClassNames/classNames';\n\nconst asDateValue = (\n value: Date | null,\n showTime: boolean | undefined,\n): DateValue | null => {\n if (!value) return null;\n const zoned = fromDate(value, getLocalTimeZone());\n return showTime ? zoned : toCalendarDate(zoned);\n};\n\nconst asDate = (value: DateValue | null): Date | null =>\n value ? value.toDate(getLocalTimeZone()) : null;\n\n/**\n * An internationalized date or date-time picker with Cratis-owned markup parts.\n * The public boundary remains `Date | null`; React Aria's calendar values stay internal.\n */\nexport const DatePickerInputImplementation = ({\n value,\n onChange,\n onBlur,\n invalid,\n disabled,\n readOnly,\n id,\n showButtonBar,\n placeholder,\n showIcon = true,\n showTime,\n hourFormat,\n minDate,\n maxDate,\n className,\n style,\n pt,\n todayLabel,\n clearLabel,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n}: DatePickerInputProps) => {\n const [isPickerOpen, setIsPickerOpen] = useState(false);\n const overlayEnvironment = unstable_useOverlayEnvironment();\n const nearestDialogZIndex = useNearestDialogZIndex();\n const resolvedPopoverZIndex =\n nearestDialogZIndex === null\n ? 'var(--cratis-z-index-overlay)'\n : zIndexAboveDialog(nearestDialogZIndex, OVERLAY_OFFSET);\n const { messages } = useCratisComponentsConfig();\n const datePickerMessages = messages?.datePicker;\n const icon = useCratisIcon();\n const resolvedTodayLabel = todayLabel ?? datePickerMessages?.today ?? 'Today';\n const resolvedClearLabel = clearLabel ?? datePickerMessages?.clear ?? 'Clear';\n const timeZone = getLocalTimeZone();\n const minValue = asDateValue(minDate ?? null, showTime) ?? undefined;\n const maxValue = asDateValue(maxDate ?? null, showTime) ?? undefined;\n const todayDate = today(timeZone).toDate(timeZone);\n // Compare the same granularity that the action emits. In date-time mode the Today action\n // retains its existing local-midnight value, which can legitimately fall before a same-day\n // minDate carrying a later time.\n const todayValue = asDateValue(todayDate, showTime)!;\n const isTodayOutOfBounds =\n (minValue !== undefined && todayValue.compare(minValue) < 0) ||\n (maxValue !== undefined && todayValue.compare(maxValue) > 0);\n const rootClassName = classNames(\n 'cratis-date-picker',\n pt?.root?.className,\n className,\n );\n const inputId = id ?? pt?.input?.id;\n const effectiveDisabled = disabled ?? pt?.input?.disabled ?? false;\n const effectiveReadOnly = readOnly ?? pt?.input?.readOnly ?? false;\n const effectiveInvalid = invalid ?? pt?.input?.['aria-invalid'] ?? false;\n const actionsDisabled = effectiveDisabled || effectiveReadOnly;\n const clearDisabled = actionsDisabled || pt?.clear?.disabled || false;\n const effectivePlaceholder = placeholder ?? pt?.input?.placeholder;\n const effectiveAriaLabel =\n ariaLabel ??\n pt?.input?.['aria-label'] ??\n effectivePlaceholder ??\n datePickerMessages?.label ??\n 'Date';\n const effectiveAriaLabelledby = ariaLabelledby ?? pt?.input?.['aria-labelledby'];\n const effectiveAriaDescribedby = ariaDescribedby ?? pt?.input?.['aria-describedby'];\n const inputPartAttributes = {\n ...pt?.input,\n id: undefined,\n className: undefined,\n style: undefined,\n disabled: undefined,\n readOnly: undefined,\n placeholder: undefined,\n 'aria-label': undefined,\n 'aria-labelledby': undefined,\n 'aria-describedby': undefined,\n 'aria-invalid': undefined,\n };\n\n return (\n <div\n {...pt?.root}\n className={rootClassName}\n style={{ ...pt?.root?.style, ...style }}\n data-cratis-part='root'\n data-invalid={effectiveInvalid || undefined}\n data-disabled={effectiveDisabled || undefined}\n data-readonly={effectiveReadOnly || undefined}\n data-open={isPickerOpen || undefined}\n data-selected={value !== null || undefined}\n onBlur={onBlur}\n >\n <UNSAFE_PortalProvider getContainer={overlayEnvironment.getContainer}>\n <AriaDatePicker\n value={asDateValue(value, showTime)}\n onChange={(next) => onChange(asDate(next), { source: 'user' })}\n isDisabled={effectiveDisabled}\n isReadOnly={effectiveReadOnly}\n isInvalid={effectiveInvalid}\n isOpen={isPickerOpen}\n onOpenChange={(nextIsOpen) => {\n if (!nextIsOpen || !effectiveReadOnly) setIsPickerOpen(nextIsOpen);\n }}\n minValue={minValue}\n maxValue={maxValue}\n granularity={showTime ? 'minute' : 'day'}\n hourCycle={\n hourFormat === '12' ? 12 : hourFormat === '24' ? 24 : undefined\n }\n aria-label={effectiveAriaLabel}\n aria-labelledby={effectiveAriaLabelledby}\n aria-describedby={effectiveAriaDescribedby}\n className='cratis-date-picker__picker'\n >\n {({ isOpen }) => (\n <>\n <Group\n {...pt?.group}\n id={inputId}\n aria-invalid={effectiveInvalid || undefined}\n className={classNames(\n 'cratis-date-picker__group',\n pt?.group?.className,\n )}\n data-cratis-part='group'\n data-empty={value === null || undefined}\n render={(groupProps) => (\n <div\n {...groupProps}\n data-open={isOpen || undefined}\n data-invalid={effectiveInvalid || undefined}\n data-disabled={effectiveDisabled || undefined}\n data-readonly={effectiveReadOnly || undefined}\n data-selected={value !== null || undefined}\n />\n )}\n >\n <DateInput\n {...inputPartAttributes}\n className={classNames(\n 'cratis-date-picker__input',\n pt?.input?.className,\n )}\n style={pt?.input?.style}\n data-cratis-part='input'\n data-placeholder={effectivePlaceholder}\n render={(inputProps) => (\n <div\n {...inputProps}\n data-open={isOpen || undefined}\n data-invalid={effectiveInvalid || undefined}\n data-disabled={effectiveDisabled || undefined}\n data-readonly={effectiveReadOnly || undefined}\n data-selected={value !== null || undefined}\n />\n )}\n >\n {(segment) => (\n <DateSegment\n {...pt?.segment}\n segment={segment}\n className={classNames(\n 'cratis-date-picker__segment',\n pt?.segment?.className,\n )}\n data-cratis-part='segment'\n render={(segmentProps) => (\n <span\n {...segmentProps}\n data-invalid={\n effectiveInvalid || undefined\n }\n data-disabled={\n effectiveDisabled || undefined\n }\n data-readonly={\n effectiveReadOnly || undefined\n }\n />\n )}\n />\n )}\n </DateInput>\n {value === null && effectivePlaceholder && (\n <span\n {...pt?.placeholder}\n className={classNames(\n 'cratis-date-picker__placeholder',\n pt?.placeholder?.className,\n )}\n data-cratis-part='placeholder'\n aria-hidden='true'\n >\n {effectivePlaceholder}\n </span>\n )}\n {showIcon && (\n <Button\n {...asReactAriaButtonProps(pt?.trigger)}\n isDisabled={\n effectiveDisabled || effectiveReadOnly\n }\n className={classNames(\n 'cratis-date-picker__trigger',\n pt?.trigger?.className,\n )}\n data-cratis-part='trigger'\n render={(triggerProps) => (\n <button\n {...triggerProps}\n data-open={isOpen || undefined}\n data-invalid={\n effectiveInvalid || undefined\n }\n data-disabled={\n effectiveDisabled ||\n effectiveReadOnly ||\n undefined\n }\n data-readonly={\n effectiveReadOnly || undefined\n }\n data-selected={\n value !== null || undefined\n }\n />\n )}\n aria-label={\n pt?.trigger?.['aria-label'] ??\n datePickerMessages?.openCalendar ??\n 'Open calendar'\n }\n >\n <span aria-hidden='true'>▦</span>\n </Button>\n )}\n </Group>\n <Popover\n {...pt?.popover}\n className={classNames(\n 'cratis-date-picker__popover',\n pt?.popover?.className,\n )}\n style={{\n zIndex: resolvedPopoverZIndex,\n ...pt?.popover?.style,\n }}\n data-cratis-part='popover'\n data-open\n placement='bottom start'\n >\n <Dialog\n {...pt?.dialog}\n className={classNames(\n 'cratis-date-picker__dialog',\n pt?.dialog?.className,\n )}\n data-cratis-part='dialog'\n data-open\n >\n <Calendar\n {...pt?.calendar}\n className={classNames(\n 'cratis-date-picker__calendar',\n pt?.calendar?.className,\n )}\n data-cratis-part='calendar'\n data-open\n >\n <header\n {...pt?.header}\n className={classNames(\n 'cratis-date-picker__header',\n pt?.header?.className,\n )}\n data-cratis-part='header'\n >\n <Button\n {...asReactAriaButtonProps(pt?.previous)}\n slot='previous'\n className={classNames(\n 'cratis-date-picker__nav',\n pt?.previous?.className,\n )}\n data-cratis-part='previous'\n aria-label={\n pt?.previous?.['aria-label'] ??\n datePickerMessages?.previousMonth ??\n 'Previous month'\n }\n >\n <span aria-hidden='true'>\n {icon('previous', '‹')}\n </span>\n </Button>\n <Heading\n {...pt?.heading}\n className={classNames(\n 'cratis-date-picker__heading',\n pt?.heading?.className,\n )}\n data-cratis-part='heading'\n />\n <Button\n {...asReactAriaButtonProps(pt?.next)}\n slot='next'\n className={classNames(\n 'cratis-date-picker__nav',\n pt?.next?.className,\n )}\n data-cratis-part='next'\n aria-label={\n pt?.next?.['aria-label'] ??\n datePickerMessages?.nextMonth ??\n 'Next month'\n }\n >\n <span aria-hidden='true'>\n {icon('next', '›')}\n </span>\n </Button>\n </header>\n <CalendarGrid\n {...pt?.grid}\n className={classNames(\n 'cratis-date-picker__grid',\n pt?.grid?.className,\n )}\n data-cratis-part='grid'\n >\n <CalendarGridHeader>\n {(day) => (\n <CalendarHeaderCell>\n {day}\n </CalendarHeaderCell>\n )}\n </CalendarGridHeader>\n <CalendarGridBody>\n {(date) => (\n <CalendarCell\n {...pt?.cell}\n date={date}\n className={classNames(\n 'cratis-date-picker__cell',\n pt?.cell?.className,\n )}\n data-cratis-part='cell'\n />\n )}\n </CalendarGridBody>\n </CalendarGrid>\n </Calendar>\n {showButtonBar && (\n <div\n {...pt?.buttonBar}\n className={classNames(\n 'cratis-date-picker__button-bar',\n pt?.buttonBar?.className,\n )}\n data-cratis-part='button-bar'\n >\n <button\n {...pt?.today}\n type='button'\n className={classNames(\n 'cratis-date-picker__action',\n pt?.today?.className,\n )}\n data-cratis-part='today'\n data-disabled={\n actionsDisabled || isTodayOutOfBounds || undefined\n }\n disabled={actionsDisabled || isTodayOutOfBounds}\n aria-disabled={\n actionsDisabled || isTodayOutOfBounds || undefined\n }\n onClick={(event) => {\n if (actionsDisabled || isTodayOutOfBounds) return;\n onChange(todayDate, {\n source: 'user',\n nativeEvent: event.nativeEvent,\n });\n }}\n >\n {resolvedTodayLabel}\n </button>\n <button\n {...pt?.clear}\n type='button'\n className={classNames(\n 'cratis-date-picker__action',\n pt?.clear?.className,\n )}\n data-cratis-part='clear'\n data-disabled={clearDisabled || undefined}\n disabled={clearDisabled}\n aria-disabled={clearDisabled || pt?.clear?.['aria-disabled'] || undefined}\n onClick={(event) => {\n if (clearDisabled) return;\n onChange(null, {\n source: 'user',\n nativeEvent: event.nativeEvent,\n });\n }}\n >\n {resolvedClearLabel}\n </button>\n </div>\n )}\n </Dialog>\n </Popover>\n </>\n )}\n </AriaDatePicker>\n </UNSAFE_PortalProvider>\n </div>\n );\n};\n"],"names":["_jsx","AriaDatePicker","_jsxs","_Fragment"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"NumberInput.d.ts","sourceRoot":"","sources":["../../../Common/NumberInput.tsx"],"names":[],"mappings":"AAGA,OAAO,EAMH,KAAK,SAAS,EACjB,MAAM,OAAO,CAAC;AAUf,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAA6B,CAAC;AAE7E,mEAAmE;AACnE,MAAM,WAAW,gBAAgB;IAC7B,qCAAqC;IACrC,IAAI,CAAC,EAAE,yBAAyB,CAAC;IACjC,2EAA2E;IAC3E,KAAK,CAAC,EAAE,yBAAyB,CAAC;IAClC,gCAAgC;IAChC,KAAK,CAAC,EAAE,yBAAyB,CAAC;IAClC,uCAAuC;IACvC,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,uCAAuC;IACvC,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,0EAA0E;IAC1E,IAAI,CAAC,EAAE,yBAAyB,CAAC;IACjC,6CAA6C;IAC7C,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,uDAAuD;IACvD,KAAK,CAAC,EAAE,yBAAyB,CAAC;CACrC;AAQD,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC7B,8DAA8D;IAC9D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,mFAAmF;IACnF,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAC3E,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yCAAyC;IACzC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mFAAmF;IACnF,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,wEAAwE;IACxE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uGAAuG;IACvG,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iCAAiC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uEAAuE;IACvE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2CAA2C;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iEAAiE;IACjE,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,qEAAqE;IACrE,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,EAAE,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAkED;;;;GAIG;AACH,eAAO,MAAM,WAAW,6VA4BrB,gBAAgB,gCAwVlB,CAAC"}
1
+ {"version":3,"file":"NumberInput.d.ts","sourceRoot":"","sources":["../../../Common/NumberInput.tsx"],"names":[],"mappings":"AAGA,OAAO,EAMH,KAAK,SAAS,EACjB,MAAM,OAAO,CAAC;AAUf,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAA6B,CAAC;AAG7E,mEAAmE;AACnE,MAAM,WAAW,gBAAgB;IAC7B,qCAAqC;IACrC,IAAI,CAAC,EAAE,yBAAyB,CAAC;IACjC,2EAA2E;IAC3E,KAAK,CAAC,EAAE,yBAAyB,CAAC;IAClC,gCAAgC;IAChC,KAAK,CAAC,EAAE,yBAAyB,CAAC;IAClC,uCAAuC;IACvC,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,uCAAuC;IACvC,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,0EAA0E;IAC1E,IAAI,CAAC,EAAE,yBAAyB,CAAC;IACjC,6CAA6C;IAC7C,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,uDAAuD;IACvD,KAAK,CAAC,EAAE,yBAAyB,CAAC;CACrC;AAQD,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC7B,8DAA8D;IAC9D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,mFAAmF;IACnF,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAC3E,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yCAAyC;IACzC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mFAAmF;IACnF,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,wEAAwE;IACxE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uGAAuG;IACvG,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iCAAiC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uEAAuE;IACvE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2CAA2C;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iEAAiE;IACjE,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,qEAAqE;IACrE,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,EAAE,CAAC,EAAE,gBAAgB,CAAC;CACzB;AA+DD;;;;GAIG;AACH,eAAO,MAAM,WAAW,6VA4BrB,gBAAgB,gCAwVlB,CAAC"}
@@ -3,8 +3,8 @@ import { useId, useRef, useMemo, useLayoutEffect } from 'react';
3
3
  import { NumberField, Group, Input, Button } from 'react-aria-components/NumberField';
4
4
  import { useLocale, I18nProvider } from 'react-aria-components/I18nProvider';
5
5
  import { NumberInputCommitReason } from './NumberInputCommitReason.js';
6
+ import { classNames } from '../ClassNames/classNames.js';
6
7
 
7
- const classNames = (...values) => values.filter(Boolean).join(' ');
8
8
  const semanticValue = (value) => value !== null && Number.isFinite(value) ? value : null;
9
9
  const finiteBound = (value) => value !== undefined && Number.isFinite(value) ? value : undefined;
10
10
  const stepPrecision = (step) => {
@@ -1 +1 @@
1
- {"version":3,"file":"NumberInput.js","sources":["../../../Common/NumberInput.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 useLayoutEffect,\n useMemo,\n useRef,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport {\n Button,\n Group,\n Input,\n NumberField as AriaNumberField,\n} from 'react-aria-components/NumberField';\nimport { I18nProvider, useLocale } from 'react-aria-components/I18nProvider';\nimport type { ExactPartKeys } from '../types/ExactPartKeys';\nimport type { PartsOf } from '../types/parts';\nimport { NumberInputCommitReason } from './NumberInputCommitReason';\nimport type { NumberInputPartAttributes } from './NumberInputPartAttributes';\n\n/** Stable Cratis-owned parts for styling a {@link NumberInput}. */\nexport interface NumberInputParts {\n /** Complete number-field wrapper. */\n root?: NumberInputPartAttributes;\n /** The bordered box holding the adornments, the input and the steppers. */\n group?: NumberInputPartAttributes;\n /** Editable localized input. */\n input?: NumberInputPartAttributes;\n /** Prefix adornment, when supplied. */\n prefix?: NumberInputPartAttributes;\n /** Suffix adornment, when supplied. */\n suffix?: NumberInputPartAttributes;\n /** Both decrement and increment buttons, distinguished by `data-step`. */\n step?: NumberInputPartAttributes;\n /** Supporting description, when supplied. */\n description?: NumberInputPartAttributes;\n /** Validation message, when supplied while invalid. */\n error?: NumberInputPartAttributes;\n}\n\nconst numberInputPartsMatchManifest: ExactPartKeys<\n NumberInputParts,\n PartsOf<'NumberInput'>\n> = true;\nvoid numberInputPartsMatchManifest;\n\n/** Props for {@link NumberInput}. */\nexport interface NumberInputProps {\n /** Controlled finite number, or `null` for an empty input. */\n value: number | null;\n /** Receives accepted semantic values. Incomplete text never emits `0` or `NaN`. */\n onChange: (value: number | null) => void;\n /**\n * Runs after a blur, Enter, full-field paste, arrow key, or step-button commit.\n * When the semantic value changes, `onChange` runs before `onCommit`.\n */\n onCommit?: (value: number | null, reason: NumberInputCommitReason) => void;\n /** BCP 47 locale override. Defaults to the nearest {@link CratisComponentsProvider}. */\n locale?: string;\n /** Enables locale grouping separators. Defaults to `true`. */\n useGrouping?: boolean;\n /** Minimum displayed fraction digits. */\n minimumFractionDigits?: number;\n /** Maximum fraction digits retained on commit and shown in the formatted value. */\n maximumFractionDigits?: number;\n /** Requires a non-empty value and exposes native required-field semantics. */\n required?: boolean;\n /** Minimum value; committed edits below it snap to this boundary. */\n min?: number;\n /** Maximum value; committed edits above it snap to this boundary. */\n max?: number;\n /** Increment, decrement, and commit snapping interval. Defaults to `1`. */\n step?: number;\n /** Visible content before the editable number; excluded from parsing. */\n prefix?: ReactNode;\n /** Visible content after the editable number; excluded from parsing. */\n suffix?: ReactNode;\n /** Placeholder shown while empty. */\n placeholder?: string;\n /** Disables editing, focus, step controls, and form submission. */\n disabled?: boolean;\n /** Prevents editing while retaining the value and focus semantics. */\n readOnly?: boolean;\n /** Renders the decrement/increment buttons. Keyboard stepping stays available when they are hidden. */\n showSteppers?: boolean;\n /** Marks the control invalid. */\n invalid?: boolean;\n /** Stable id for the editable input and external label association. */\n id?: string;\n /** Native form field name; an associated hidden input submits the semantic value. */\n name?: string;\n /** Accessible name when no external label identifies the input. */\n 'aria-label'?: string;\n /** Id of an external element that labels the input and its step actions. */\n 'aria-labelledby'?: string;\n /** Additional external description ids. */\n 'aria-describedby'?: string;\n /** Supporting description associated with the editable input. */\n description?: ReactNode;\n /** Error message rendered and associated while `invalid` is true. */\n errorMessage?: ReactNode;\n /** Additional CSS class for the root part. */\n className?: string;\n /** Cratis-owned per-part attributes. */\n pt?: NumberInputParts;\n}\n\nconst classNames = (...values: Array<string | undefined>) =>\n values.filter(Boolean).join(' ');\n\nconst semanticValue = (value: number | null): number | null =>\n value !== null && Number.isFinite(value) ? value : null;\n\nconst finiteBound = (value: number | undefined): number | undefined =>\n value !== undefined && Number.isFinite(value) ? value : undefined;\n\nconst stepPrecision = (step: number): number => {\n const text = String(step).toLowerCase();\n const [coefficient, exponentText] = text.split('e');\n const decimals = coefficient.split('.')[1]?.length ?? 0;\n const exponent = Number(exponentText ?? 0);\n return Math.max(0, Math.min(20, decimals - exponent));\n};\n\nconst normalizeValue = (\n value: number | null,\n min: number | undefined,\n max: number | undefined,\n step: number | undefined,\n maximumFractionDigits: number,\n): number | null => {\n if (value === null) return null;\n const minimum = finiteBound(min);\n const maximum = finiteBound(max);\n let normalized = Math.min(\n maximum ?? Number.POSITIVE_INFINITY,\n Math.max(minimum ?? Number.NEGATIVE_INFINITY, value),\n );\n if (step !== undefined && Number.isFinite(step) && step > 0) {\n const base = minimum ?? 0;\n normalized = base + Math.round((normalized - base) / step) * step;\n if (maximum !== undefined && normalized > maximum)\n normalized = base + Math.floor((maximum - base) / step) * step;\n normalized = Math.min(\n maximum ?? Number.POSITIVE_INFINITY,\n Math.max(minimum ?? Number.NEGATIVE_INFINITY, normalized),\n );\n normalized = Number(normalized.toFixed(stepPrecision(step)));\n }\n return Number(\n new Intl.NumberFormat('en-US-u-nu-latn', {\n useGrouping: false,\n maximumFractionDigits,\n }).format(normalized),\n );\n};\n\nconst validLocale = (candidate: string | undefined, fallback: string): string => {\n if (!candidate) return fallback;\n try {\n return new Intl.Locale(candidate).toString();\n } catch {\n return fallback;\n }\n};\n\nconst partAttributes = (part: NumberInputPartAttributes | undefined) => ({\n ...part,\n style: part?.style as CSSProperties | undefined,\n});\n\n/**\n * A controlled, locale-aware number input with a Components-owned public contract.\n * Parsing, incomplete edit text, range and step normalization, keyboard behavior, mobile input\n * mode, and localized formatting remain internal to this boundary.\n */\nexport const NumberInput = ({\n value,\n onChange,\n onCommit,\n locale,\n useGrouping = true,\n minimumFractionDigits,\n maximumFractionDigits,\n required = false,\n min,\n max,\n step,\n prefix,\n suffix,\n placeholder,\n disabled = false,\n readOnly = false,\n showSteppers = true,\n invalid = false,\n id,\n name,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n description,\n errorMessage,\n className,\n pt,\n}: NumberInputProps) => {\n const generatedId = useId();\n const { locale: providerLocale } = useLocale();\n const resolvedLocale = validLocale(locale, providerLocale);\n const inputId = id ?? `cratis-number-input-${generatedId}`;\n const prefixId =\n prefix !== null && prefix !== undefined ? `${inputId}-prefix` : undefined;\n const suffixId =\n suffix !== null && suffix !== undefined ? `${inputId}-suffix` : undefined;\n const descriptionId =\n description !== null && description !== undefined\n ? `${inputId}-description`\n : undefined;\n const errorId =\n invalid && errorMessage !== null && errorMessage !== undefined\n ? `${inputId}-error`\n : undefined;\n const describedBy =\n [ariaDescribedBy, prefixId, suffixId, descriptionId, errorId]\n .filter(Boolean)\n .join(' ') || undefined;\n const controlledValue = semanticValue(value);\n const latestValue = useRef<number | null>(controlledValue);\n latestValue.current = controlledValue;\n const formatOptions = useMemo(\n () => ({\n useGrouping,\n minimumFractionDigits,\n maximumFractionDigits,\n }),\n [useGrouping, minimumFractionDigits, maximumFractionDigits],\n );\n const resolvedMaximumFractionDigits = useMemo(\n () =>\n new Intl.NumberFormat(resolvedLocale, formatOptions).resolvedOptions()\n .maximumFractionDigits ?? 3,\n [resolvedLocale, formatOptions],\n );\n const normalizedControlledValue = normalizeValue(\n controlledValue,\n min,\n max,\n step,\n resolvedMaximumFractionDigits,\n );\n const normalizationPending =\n controlledValue !== null && normalizedControlledValue !== controlledValue;\n const normalizationRequest = useRef<{\n value: number;\n normalized: number;\n } | null>(null);\n useLayoutEffect(() => {\n if (\n controlledValue === null ||\n normalizedControlledValue === null ||\n normalizedControlledValue === controlledValue\n ) {\n normalizationRequest.current = null;\n return;\n }\n const previous = normalizationRequest.current;\n if (\n previous?.value === controlledValue &&\n previous.normalized === normalizedControlledValue\n )\n return;\n normalizationRequest.current = {\n value: controlledValue,\n normalized: normalizedControlledValue,\n };\n latestValue.current = normalizedControlledValue;\n onChange(normalizedControlledValue);\n }, [controlledValue, normalizedControlledValue, onChange]);\n const displayedFormatOptions = normalizationPending\n ? {\n useGrouping,\n minimumFractionDigits: 0,\n maximumFractionDigits: 20,\n }\n : formatOptions;\n\n const emitChange = (nextValue: number) => {\n const nextSemanticValue = normalizeValue(\n semanticValue(nextValue),\n min,\n max,\n step,\n resolvedMaximumFractionDigits,\n );\n latestValue.current = nextSemanticValue;\n onChange(nextSemanticValue);\n };\n const scheduleCommit = (reason: NumberInputCommitReason) => {\n queueMicrotask(() => onCommit?.(latestValue.current, reason));\n };\n\n const field = (\n <AriaNumberField\n {...partAttributes(pt?.root)}\n id={inputId}\n name={normalizationPending ? undefined : name}\n value={controlledValue ?? Number.NaN}\n onChange={emitChange}\n minValue={min}\n maxValue={max}\n step={step}\n formatOptions={displayedFormatOptions}\n commitBehavior='validate'\n validationBehavior='aria'\n isDisabled={disabled}\n isReadOnly={readOnly}\n isRequired={required}\n isInvalid={invalid}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={describedBy}\n onBlur={() => scheduleCommit(NumberInputCommitReason.Blur)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') scheduleCommit(NumberInputCommitReason.Enter);\n else if (event.key === 'ArrowUp' || event.key === 'ArrowDown')\n scheduleCommit(NumberInputCommitReason.Step);\n }}\n className={classNames('cratis-number-input', pt?.root?.className, className)}\n style={pt?.root?.style as CSSProperties | undefined}\n data-cratis-part='root'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n data-empty={controlledValue === null || undefined}\n >\n {({ state }) => {\n const parsedValue = semanticValue(state.numberValue);\n latestValue.current = parsedValue;\n return (\n <>\n <Group\n {...partAttributes(pt?.group)}\n className={classNames(\n 'cratis-number-input__group',\n pt?.group?.className,\n )}\n style={pt?.group?.style as CSSProperties | undefined}\n data-cratis-part='group'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n >\n <div className='cratis-number-input__control'>\n {prefixId && (\n <span\n {...partAttributes(pt?.prefix)}\n id={prefixId}\n className={classNames(\n 'cratis-number-input__adornment',\n 'cratis-number-input__prefix',\n pt?.prefix?.className,\n )}\n style={\n pt?.prefix?.style as CSSProperties | undefined\n }\n data-cratis-part='prefix'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n >\n {prefix}\n </span>\n )}\n <Input\n {...partAttributes(pt?.input)}\n placeholder={placeholder}\n aria-errormessage={errorId}\n className={classNames(\n 'cratis-number-input__input',\n pt?.input?.className,\n )}\n style={pt?.input?.style as CSSProperties | undefined}\n render={(inputProps) => (\n <input\n {...inputProps}\n required={required}\n onPaste={(event) => {\n const input = event.currentTarget;\n const isFullFieldPaste =\n (input.selectionStart ?? -1) === 0 &&\n input.selectionEnd ===\n input.value.length;\n inputProps.onPaste?.(event);\n // React Aria commits full-field paste text in its input handler. Emit\n // after that handler so change and commit remain one browser event\n // transaction instead of depending on queued controlled-render timing.\n if (isFullFieldPaste)\n onCommit?.(\n latestValue.current,\n NumberInputCommitReason.Paste,\n );\n }}\n aria-describedby={describedBy}\n aria-errormessage={errorId}\n data-cratis-part='input'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n />\n )}\n />\n {suffixId && (\n <span\n {...partAttributes(pt?.suffix)}\n id={suffixId}\n className={classNames(\n 'cratis-number-input__adornment',\n 'cratis-number-input__suffix',\n pt?.suffix?.className,\n )}\n style={\n pt?.suffix?.style as CSSProperties | undefined\n }\n data-cratis-part='suffix'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n >\n {suffix}\n </span>\n )}\n </div>\n {showSteppers && (\n <div className='cratis-number-input__steps'>\n <Button\n {...partAttributes(pt?.step)}\n slot='decrement'\n className={classNames(\n 'cratis-number-input__step',\n pt?.step?.className,\n )}\n style={\n pt?.step?.style as CSSProperties | undefined\n }\n onPress={() =>\n scheduleCommit(NumberInputCommitReason.Step)\n }\n render={(buttonProps) => (\n <button\n {...buttonProps}\n aria-labelledby={\n ariaLabelledBy\n ? [buttonProps.id, ariaLabelledBy]\n .filter(Boolean)\n .join(' ')\n : buttonProps['aria-labelledby']\n }\n data-cratis-part='step'\n data-step='decrement'\n data-disabled={\n buttonProps.disabled || undefined\n }\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n />\n )}\n >\n <span aria-hidden='true'>−</span>\n </Button>\n <Button\n {...partAttributes(pt?.step)}\n slot='increment'\n className={classNames(\n 'cratis-number-input__step',\n pt?.step?.className,\n )}\n style={\n pt?.step?.style as CSSProperties | undefined\n }\n onPress={() =>\n scheduleCommit(NumberInputCommitReason.Step)\n }\n render={(buttonProps) => (\n <button\n {...buttonProps}\n aria-labelledby={\n ariaLabelledBy\n ? [buttonProps.id, ariaLabelledBy]\n .filter(Boolean)\n .join(' ')\n : buttonProps['aria-labelledby']\n }\n data-cratis-part='step'\n data-step='increment'\n data-disabled={\n buttonProps.disabled || undefined\n }\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n />\n )}\n >\n <span aria-hidden='true'>+</span>\n </Button>\n </div>\n )}\n </Group>\n {descriptionId && (\n <span\n {...partAttributes(pt?.description)}\n id={descriptionId}\n className={classNames(\n 'cratis-number-input__description',\n pt?.description?.className,\n )}\n style={\n pt?.description?.style as CSSProperties | undefined\n }\n data-cratis-part='description'\n >\n {description}\n </span>\n )}\n {errorId && (\n <span\n {...partAttributes(pt?.error)}\n id={errorId}\n className={classNames(\n 'cratis-number-input__error',\n pt?.error?.className,\n )}\n style={pt?.error?.style as CSSProperties | undefined}\n data-cratis-part='error'\n data-invalid\n >\n {errorMessage}\n </span>\n )}\n </>\n );\n }}\n </AriaNumberField>\n );\n\n return resolvedLocale === providerLocale ? (\n field\n ) : (\n <I18nProvider locale={resolvedLocale}>{field}</I18nProvider>\n );\n};\n"],"names":["_jsx","AriaNumberField","_jsxs","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"NumberInput.js","sources":["../../../Common/NumberInput.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 useLayoutEffect,\n useMemo,\n useRef,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport {\n Button,\n Group,\n Input,\n NumberField as AriaNumberField,\n} from 'react-aria-components/NumberField';\nimport { I18nProvider, useLocale } from 'react-aria-components/I18nProvider';\nimport type { ExactPartKeys } from '../types/ExactPartKeys';\nimport type { PartsOf } from '../types/parts';\nimport { NumberInputCommitReason } from './NumberInputCommitReason';\nimport type { NumberInputPartAttributes } from './NumberInputPartAttributes';\nimport { classNames } from '../ClassNames/classNames';\n\n/** Stable Cratis-owned parts for styling a {@link NumberInput}. */\nexport interface NumberInputParts {\n /** Complete number-field wrapper. */\n root?: NumberInputPartAttributes;\n /** The bordered box holding the adornments, the input and the steppers. */\n group?: NumberInputPartAttributes;\n /** Editable localized input. */\n input?: NumberInputPartAttributes;\n /** Prefix adornment, when supplied. */\n prefix?: NumberInputPartAttributes;\n /** Suffix adornment, when supplied. */\n suffix?: NumberInputPartAttributes;\n /** Both decrement and increment buttons, distinguished by `data-step`. */\n step?: NumberInputPartAttributes;\n /** Supporting description, when supplied. */\n description?: NumberInputPartAttributes;\n /** Validation message, when supplied while invalid. */\n error?: NumberInputPartAttributes;\n}\n\nconst numberInputPartsMatchManifest: ExactPartKeys<\n NumberInputParts,\n PartsOf<'NumberInput'>\n> = true;\nvoid numberInputPartsMatchManifest;\n\n/** Props for {@link NumberInput}. */\nexport interface NumberInputProps {\n /** Controlled finite number, or `null` for an empty input. */\n value: number | null;\n /** Receives accepted semantic values. Incomplete text never emits `0` or `NaN`. */\n onChange: (value: number | null) => void;\n /**\n * Runs after a blur, Enter, full-field paste, arrow key, or step-button commit.\n * When the semantic value changes, `onChange` runs before `onCommit`.\n */\n onCommit?: (value: number | null, reason: NumberInputCommitReason) => void;\n /** BCP 47 locale override. Defaults to the nearest {@link CratisComponentsProvider}. */\n locale?: string;\n /** Enables locale grouping separators. Defaults to `true`. */\n useGrouping?: boolean;\n /** Minimum displayed fraction digits. */\n minimumFractionDigits?: number;\n /** Maximum fraction digits retained on commit and shown in the formatted value. */\n maximumFractionDigits?: number;\n /** Requires a non-empty value and exposes native required-field semantics. */\n required?: boolean;\n /** Minimum value; committed edits below it snap to this boundary. */\n min?: number;\n /** Maximum value; committed edits above it snap to this boundary. */\n max?: number;\n /** Increment, decrement, and commit snapping interval. Defaults to `1`. */\n step?: number;\n /** Visible content before the editable number; excluded from parsing. */\n prefix?: ReactNode;\n /** Visible content after the editable number; excluded from parsing. */\n suffix?: ReactNode;\n /** Placeholder shown while empty. */\n placeholder?: string;\n /** Disables editing, focus, step controls, and form submission. */\n disabled?: boolean;\n /** Prevents editing while retaining the value and focus semantics. */\n readOnly?: boolean;\n /** Renders the decrement/increment buttons. Keyboard stepping stays available when they are hidden. */\n showSteppers?: boolean;\n /** Marks the control invalid. */\n invalid?: boolean;\n /** Stable id for the editable input and external label association. */\n id?: string;\n /** Native form field name; an associated hidden input submits the semantic value. */\n name?: string;\n /** Accessible name when no external label identifies the input. */\n 'aria-label'?: string;\n /** Id of an external element that labels the input and its step actions. */\n 'aria-labelledby'?: string;\n /** Additional external description ids. */\n 'aria-describedby'?: string;\n /** Supporting description associated with the editable input. */\n description?: ReactNode;\n /** Error message rendered and associated while `invalid` is true. */\n errorMessage?: ReactNode;\n /** Additional CSS class for the root part. */\n className?: string;\n /** Cratis-owned per-part attributes. */\n pt?: NumberInputParts;\n}\n\nconst semanticValue = (value: number | null): number | null =>\n value !== null && Number.isFinite(value) ? value : null;\n\nconst finiteBound = (value: number | undefined): number | undefined =>\n value !== undefined && Number.isFinite(value) ? value : undefined;\n\nconst stepPrecision = (step: number): number => {\n const text = String(step).toLowerCase();\n const [coefficient, exponentText] = text.split('e');\n const decimals = coefficient.split('.')[1]?.length ?? 0;\n const exponent = Number(exponentText ?? 0);\n return Math.max(0, Math.min(20, decimals - exponent));\n};\n\nconst normalizeValue = (\n value: number | null,\n min: number | undefined,\n max: number | undefined,\n step: number | undefined,\n maximumFractionDigits: number,\n): number | null => {\n if (value === null) return null;\n const minimum = finiteBound(min);\n const maximum = finiteBound(max);\n let normalized = Math.min(\n maximum ?? Number.POSITIVE_INFINITY,\n Math.max(minimum ?? Number.NEGATIVE_INFINITY, value),\n );\n if (step !== undefined && Number.isFinite(step) && step > 0) {\n const base = minimum ?? 0;\n normalized = base + Math.round((normalized - base) / step) * step;\n if (maximum !== undefined && normalized > maximum)\n normalized = base + Math.floor((maximum - base) / step) * step;\n normalized = Math.min(\n maximum ?? Number.POSITIVE_INFINITY,\n Math.max(minimum ?? Number.NEGATIVE_INFINITY, normalized),\n );\n normalized = Number(normalized.toFixed(stepPrecision(step)));\n }\n return Number(\n new Intl.NumberFormat('en-US-u-nu-latn', {\n useGrouping: false,\n maximumFractionDigits,\n }).format(normalized),\n );\n};\n\nconst validLocale = (candidate: string | undefined, fallback: string): string => {\n if (!candidate) return fallback;\n try {\n return new Intl.Locale(candidate).toString();\n } catch {\n return fallback;\n }\n};\n\nconst partAttributes = (part: NumberInputPartAttributes | undefined) => ({\n ...part,\n style: part?.style as CSSProperties | undefined,\n});\n\n/**\n * A controlled, locale-aware number input with a Components-owned public contract.\n * Parsing, incomplete edit text, range and step normalization, keyboard behavior, mobile input\n * mode, and localized formatting remain internal to this boundary.\n */\nexport const NumberInput = ({\n value,\n onChange,\n onCommit,\n locale,\n useGrouping = true,\n minimumFractionDigits,\n maximumFractionDigits,\n required = false,\n min,\n max,\n step,\n prefix,\n suffix,\n placeholder,\n disabled = false,\n readOnly = false,\n showSteppers = true,\n invalid = false,\n id,\n name,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n description,\n errorMessage,\n className,\n pt,\n}: NumberInputProps) => {\n const generatedId = useId();\n const { locale: providerLocale } = useLocale();\n const resolvedLocale = validLocale(locale, providerLocale);\n const inputId = id ?? `cratis-number-input-${generatedId}`;\n const prefixId =\n prefix !== null && prefix !== undefined ? `${inputId}-prefix` : undefined;\n const suffixId =\n suffix !== null && suffix !== undefined ? `${inputId}-suffix` : undefined;\n const descriptionId =\n description !== null && description !== undefined\n ? `${inputId}-description`\n : undefined;\n const errorId =\n invalid && errorMessage !== null && errorMessage !== undefined\n ? `${inputId}-error`\n : undefined;\n const describedBy =\n [ariaDescribedBy, prefixId, suffixId, descriptionId, errorId]\n .filter(Boolean)\n .join(' ') || undefined;\n const controlledValue = semanticValue(value);\n const latestValue = useRef<number | null>(controlledValue);\n latestValue.current = controlledValue;\n const formatOptions = useMemo(\n () => ({\n useGrouping,\n minimumFractionDigits,\n maximumFractionDigits,\n }),\n [useGrouping, minimumFractionDigits, maximumFractionDigits],\n );\n const resolvedMaximumFractionDigits = useMemo(\n () =>\n new Intl.NumberFormat(resolvedLocale, formatOptions).resolvedOptions()\n .maximumFractionDigits ?? 3,\n [resolvedLocale, formatOptions],\n );\n const normalizedControlledValue = normalizeValue(\n controlledValue,\n min,\n max,\n step,\n resolvedMaximumFractionDigits,\n );\n const normalizationPending =\n controlledValue !== null && normalizedControlledValue !== controlledValue;\n const normalizationRequest = useRef<{\n value: number;\n normalized: number;\n } | null>(null);\n useLayoutEffect(() => {\n if (\n controlledValue === null ||\n normalizedControlledValue === null ||\n normalizedControlledValue === controlledValue\n ) {\n normalizationRequest.current = null;\n return;\n }\n const previous = normalizationRequest.current;\n if (\n previous?.value === controlledValue &&\n previous.normalized === normalizedControlledValue\n )\n return;\n normalizationRequest.current = {\n value: controlledValue,\n normalized: normalizedControlledValue,\n };\n latestValue.current = normalizedControlledValue;\n onChange(normalizedControlledValue);\n }, [controlledValue, normalizedControlledValue, onChange]);\n const displayedFormatOptions = normalizationPending\n ? {\n useGrouping,\n minimumFractionDigits: 0,\n maximumFractionDigits: 20,\n }\n : formatOptions;\n\n const emitChange = (nextValue: number) => {\n const nextSemanticValue = normalizeValue(\n semanticValue(nextValue),\n min,\n max,\n step,\n resolvedMaximumFractionDigits,\n );\n latestValue.current = nextSemanticValue;\n onChange(nextSemanticValue);\n };\n const scheduleCommit = (reason: NumberInputCommitReason) => {\n queueMicrotask(() => onCommit?.(latestValue.current, reason));\n };\n\n const field = (\n <AriaNumberField\n {...partAttributes(pt?.root)}\n id={inputId}\n name={normalizationPending ? undefined : name}\n value={controlledValue ?? Number.NaN}\n onChange={emitChange}\n minValue={min}\n maxValue={max}\n step={step}\n formatOptions={displayedFormatOptions}\n commitBehavior='validate'\n validationBehavior='aria'\n isDisabled={disabled}\n isReadOnly={readOnly}\n isRequired={required}\n isInvalid={invalid}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={describedBy}\n onBlur={() => scheduleCommit(NumberInputCommitReason.Blur)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') scheduleCommit(NumberInputCommitReason.Enter);\n else if (event.key === 'ArrowUp' || event.key === 'ArrowDown')\n scheduleCommit(NumberInputCommitReason.Step);\n }}\n className={classNames('cratis-number-input', pt?.root?.className, className)}\n style={pt?.root?.style as CSSProperties | undefined}\n data-cratis-part='root'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n data-empty={controlledValue === null || undefined}\n >\n {({ state }) => {\n const parsedValue = semanticValue(state.numberValue);\n latestValue.current = parsedValue;\n return (\n <>\n <Group\n {...partAttributes(pt?.group)}\n className={classNames(\n 'cratis-number-input__group',\n pt?.group?.className,\n )}\n style={pt?.group?.style as CSSProperties | undefined}\n data-cratis-part='group'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n >\n <div className='cratis-number-input__control'>\n {prefixId && (\n <span\n {...partAttributes(pt?.prefix)}\n id={prefixId}\n className={classNames(\n 'cratis-number-input__adornment',\n 'cratis-number-input__prefix',\n pt?.prefix?.className,\n )}\n style={\n pt?.prefix?.style as CSSProperties | undefined\n }\n data-cratis-part='prefix'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n >\n {prefix}\n </span>\n )}\n <Input\n {...partAttributes(pt?.input)}\n placeholder={placeholder}\n aria-errormessage={errorId}\n className={classNames(\n 'cratis-number-input__input',\n pt?.input?.className,\n )}\n style={pt?.input?.style as CSSProperties | undefined}\n render={(inputProps) => (\n <input\n {...inputProps}\n required={required}\n onPaste={(event) => {\n const input = event.currentTarget;\n const isFullFieldPaste =\n (input.selectionStart ?? -1) === 0 &&\n input.selectionEnd ===\n input.value.length;\n inputProps.onPaste?.(event);\n // React Aria commits full-field paste text in its input handler. Emit\n // after that handler so change and commit remain one browser event\n // transaction instead of depending on queued controlled-render timing.\n if (isFullFieldPaste)\n onCommit?.(\n latestValue.current,\n NumberInputCommitReason.Paste,\n );\n }}\n aria-describedby={describedBy}\n aria-errormessage={errorId}\n data-cratis-part='input'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n />\n )}\n />\n {suffixId && (\n <span\n {...partAttributes(pt?.suffix)}\n id={suffixId}\n className={classNames(\n 'cratis-number-input__adornment',\n 'cratis-number-input__suffix',\n pt?.suffix?.className,\n )}\n style={\n pt?.suffix?.style as CSSProperties | undefined\n }\n data-cratis-part='suffix'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n >\n {suffix}\n </span>\n )}\n </div>\n {showSteppers && (\n <div className='cratis-number-input__steps'>\n <Button\n {...partAttributes(pt?.step)}\n slot='decrement'\n className={classNames(\n 'cratis-number-input__step',\n pt?.step?.className,\n )}\n style={\n pt?.step?.style as CSSProperties | undefined\n }\n onPress={() =>\n scheduleCommit(NumberInputCommitReason.Step)\n }\n render={(buttonProps) => (\n <button\n {...buttonProps}\n aria-labelledby={\n ariaLabelledBy\n ? [buttonProps.id, ariaLabelledBy]\n .filter(Boolean)\n .join(' ')\n : buttonProps['aria-labelledby']\n }\n data-cratis-part='step'\n data-step='decrement'\n data-disabled={\n buttonProps.disabled || undefined\n }\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n />\n )}\n >\n <span aria-hidden='true'>−</span>\n </Button>\n <Button\n {...partAttributes(pt?.step)}\n slot='increment'\n className={classNames(\n 'cratis-number-input__step',\n pt?.step?.className,\n )}\n style={\n pt?.step?.style as CSSProperties | undefined\n }\n onPress={() =>\n scheduleCommit(NumberInputCommitReason.Step)\n }\n render={(buttonProps) => (\n <button\n {...buttonProps}\n aria-labelledby={\n ariaLabelledBy\n ? [buttonProps.id, ariaLabelledBy]\n .filter(Boolean)\n .join(' ')\n : buttonProps['aria-labelledby']\n }\n data-cratis-part='step'\n data-step='increment'\n data-disabled={\n buttonProps.disabled || undefined\n }\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n />\n )}\n >\n <span aria-hidden='true'>+</span>\n </Button>\n </div>\n )}\n </Group>\n {descriptionId && (\n <span\n {...partAttributes(pt?.description)}\n id={descriptionId}\n className={classNames(\n 'cratis-number-input__description',\n pt?.description?.className,\n )}\n style={\n pt?.description?.style as CSSProperties | undefined\n }\n data-cratis-part='description'\n >\n {description}\n </span>\n )}\n {errorId && (\n <span\n {...partAttributes(pt?.error)}\n id={errorId}\n className={classNames(\n 'cratis-number-input__error',\n pt?.error?.className,\n )}\n style={pt?.error?.style as CSSProperties | undefined}\n data-cratis-part='error'\n data-invalid\n >\n {errorMessage}\n </span>\n )}\n </>\n );\n }}\n </AriaNumberField>\n );\n\n return resolvedLocale === providerLocale ? (\n field\n ) : (\n <I18nProvider locale={resolvedLocale}>{field}</I18nProvider>\n );\n};\n"],"names":["_jsx","AriaNumberField","_jsxs","_Fragment"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../Common/Tabs.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,cAAc,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAUtE,wGAAwG;AACxG,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACjC,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,qCAAqC;AACrC,MAAM,WAAW,OAAO;IACpB,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,qBAAqB;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,kDAAkD;IAClD,OAAO,EAAE,SAAS,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,gEAAgE;AAChE,MAAM,WAAW,SAAS;IACtB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,oBAAoB;IACpB,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,eAAe;IACf,GAAG,CAAC,EAAE,kBAAkB,CAAC;IACzB,iBAAiB;IACjB,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAKD,8BAA8B;AAC9B,MAAM,WAAW,SAAS;IACtB,kCAAkC;IAClC,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,EAAE,CAAC,EAAE,SAAS,CAAC;CAClB;AAKD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,IAAI,oHASd,SAAS,gCA6CX,CAAC"}
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../Common/Tabs.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,cAAc,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAWtE,wGAAwG;AACxG,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACjC,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,qCAAqC;AACrC,MAAM,WAAW,OAAO;IACpB,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,qBAAqB;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,kDAAkD;IAClD,OAAO,EAAE,SAAS,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,gEAAgE;AAChE,MAAM,WAAW,SAAS;IACtB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,oBAAoB;IACpB,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,eAAe;IACf,GAAG,CAAC,EAAE,kBAAkB,CAAC;IACzB,iBAAiB;IACjB,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAKD,8BAA8B;AAC9B,MAAM,WAAW,SAAS;IACtB,kCAAkC;IAClC,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,EAAE,CAAC,EAAE,SAAS,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,IAAI,oHASd,SAAS,gCA6CX,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { Tabs as Tabs$1, TabList, Tab, TabPanel } from 'react-aria-components/Tabs';
3
+ import { classNames } from '../ClassNames/classNames.js';
3
4
 
4
- const classNames = (...values) => values.filter(Boolean).join(' ');
5
5
  const Tabs = ({ tabs, value, onChange, disabled = false, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, className, pt, }) => (jsxs(Tabs$1, { ...pt?.root, selectedKey: value, onSelectionChange: (key) => onChange(String(key)), isDisabled: disabled, className: classNames('cratis-tabs', pt?.root?.className, className), "data-cratis-part": 'root', "data-disabled": disabled || undefined, children: [jsx(TabList, { ...pt?.list, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, className: classNames('cratis-tabs__list', pt?.list?.className), "data-cratis-part": 'list', children: tabs.map((tab) => (jsx(Tab, { ...pt?.tab, id: tab.id, isDisabled: tab.disabled, className: classNames('cratis-tabs__tab', pt?.tab?.className), "data-cratis-part": 'tab', "data-selected": tab.id === value || undefined, "data-disabled": disabled || tab.disabled || undefined, children: tab.label }, tab.id))) }), tabs.map((tab) => (jsx(TabPanel, { ...pt?.panel, id: tab.id, className: classNames('cratis-tabs__panel', pt?.panel?.className), "data-cratis-part": 'panel', "data-selected": tab.id === value || undefined, children: tab.content }, tab.id)))] }));
6
6
 
7
7
  export { Tabs };