@cratis/components 4.21.1 → 4.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/README.md +19 -9
  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.map +1 -0
  91. package/dist/esm/Common/Breadcrumbs.d.ts.map +1 -1
  92. package/dist/esm/Common/Breadcrumbs.js +1 -1
  93. package/dist/esm/Common/Breadcrumbs.js.map +1 -1
  94. package/dist/esm/Common/ComboBox.d.ts.map +1 -1
  95. package/dist/esm/Common/ComboBox.js +1 -1
  96. package/dist/esm/Common/ComboBox.js.map +1 -1
  97. package/dist/esm/Common/DatePickerInputImplementation.d.ts.map +1 -1
  98. package/dist/esm/Common/DatePickerInputImplementation.js +1 -1
  99. package/dist/esm/Common/DatePickerInputImplementation.js.map +1 -1
  100. package/dist/esm/Common/NumberInput.d.ts.map +1 -1
  101. package/dist/esm/Common/NumberInput.js +1 -1
  102. package/dist/esm/Common/NumberInput.js.map +1 -1
  103. package/dist/esm/Common/Tabs.d.ts.map +1 -1
  104. package/dist/esm/Common/Tabs.js +1 -1
  105. package/dist/esm/Common/Tabs.js.map +1 -1
  106. package/dist/esm/Common/TagGroup.d.ts.map +1 -1
  107. package/dist/esm/Common/TagGroup.js +1 -1
  108. package/dist/esm/Common/TagGroup.js.map +1 -1
  109. package/dist/esm/Common/ToggleGroup.d.ts.map +1 -1
  110. package/dist/esm/Common/ToggleGroup.js +1 -1
  111. package/dist/esm/Common/ToggleGroup.js.map +1 -1
  112. package/dist/esm/DataTables/ColumnFilterMenu.d.ts.map +1 -1
  113. package/dist/esm/DataTables/ColumnFilterMenu.js +1 -1
  114. package/dist/esm/DataTables/ColumnFilterMenu.js.map +1 -1
  115. package/dist/esm/DataTables/DataTableBody.js +1 -1
  116. package/dist/esm/DataTables/DataTableBody.js.map +1 -1
  117. package/dist/esm/DataTables/DataTableCore.js +1 -1
  118. package/dist/esm/DataTables/DataTableCore.js.map +1 -1
  119. package/dist/esm/DataTables/DataTableHeaderCell.js +1 -1
  120. package/dist/esm/DataTables/DataTableHeaderCell.js.map +1 -1
  121. package/dist/esm/DataTables/DataTableRow.js +1 -1
  122. package/dist/esm/DataTables/DataTableRow.js.map +1 -1
  123. package/dist/esm/DataTables/DataTableSearch.js +1 -1
  124. package/dist/esm/DataTables/DataTableSearch.js.map +1 -1
  125. package/dist/esm/Dialogs/DialogImplementation.d.ts.map +1 -1
  126. package/dist/esm/Dialogs/DialogImplementation.js +1 -1
  127. package/dist/esm/Dialogs/DialogImplementation.js.map +1 -1
  128. package/dist/esm/Display/Message.d.ts +8 -1
  129. package/dist/esm/Display/Message.d.ts.map +1 -1
  130. package/dist/esm/Display/Message.js +1 -1
  131. package/dist/esm/Display/Message.js.map +1 -1
  132. package/dist/esm/Dropdown/DropdownImplementation.d.ts.map +1 -1
  133. package/dist/esm/Dropdown/DropdownImplementation.js +1 -1
  134. package/dist/esm/Dropdown/DropdownImplementation.js.map +1 -1
  135. package/dist/esm/Notifications/Toaster.d.ts.map +1 -1
  136. package/dist/esm/Notifications/Toaster.js +1 -1
  137. package/dist/esm/Notifications/Toaster.js.map +1 -1
  138. package/dist/esm/PivotViewer/components/PivotCanvas.d.ts +7 -50
  139. package/dist/esm/PivotViewer/components/PivotCanvas.d.ts.map +1 -1
  140. package/dist/esm/PivotViewer/components/PivotCanvas.js +34 -433
  141. package/dist/esm/PivotViewer/components/PivotCanvas.js.map +1 -1
  142. package/dist/esm/PivotViewer/components/PivotCanvasProps.d.ts +51 -0
  143. package/dist/esm/PivotViewer/components/PivotCanvasProps.d.ts.map +1 -0
  144. package/dist/esm/PivotViewer/components/PivotCanvasProps.js +4 -0
  145. package/dist/esm/PivotViewer/components/PivotCanvasProps.js.map +1 -0
  146. package/dist/esm/PivotViewer/components/pivot/PivotRenderContext.d.ts +16 -0
  147. package/dist/esm/PivotViewer/components/pivot/PivotRenderContext.d.ts.map +1 -0
  148. package/dist/esm/PivotViewer/components/pivot/PivotRenderContext.js +4 -0
  149. package/dist/esm/PivotViewer/components/pivot/PivotRenderContext.js.map +1 -0
  150. package/dist/esm/PivotViewer/components/pivot/PivotStage.d.ts +19 -0
  151. package/dist/esm/PivotViewer/components/pivot/PivotStage.d.ts.map +1 -0
  152. package/dist/esm/PivotViewer/components/pivot/PivotStage.js +4 -0
  153. package/dist/esm/PivotViewer/components/pivot/PivotStage.js.map +1 -0
  154. package/dist/esm/PivotViewer/components/pivot/PivotTransitionState.d.ts +21 -0
  155. package/dist/esm/PivotViewer/components/pivot/PivotTransitionState.d.ts.map +1 -0
  156. package/dist/esm/PivotViewer/components/pivot/PivotTransitionState.js +4 -0
  157. package/dist/esm/PivotViewer/components/pivot/PivotTransitionState.js.map +1 -0
  158. package/dist/esm/PivotViewer/components/pivot/asReactMouseEvent.d.ts +8 -0
  159. package/dist/esm/PivotViewer/components/pivot/asReactMouseEvent.d.ts.map +1 -0
  160. package/dist/esm/PivotViewer/components/pivot/asReactMouseEvent.js +6 -0
  161. package/dist/esm/PivotViewer/components/pivot/asReactMouseEvent.js.map +1 -0
  162. package/dist/esm/PivotViewer/components/pivot/sprites.js +1 -1
  163. package/dist/esm/PivotViewer/components/pivot/usePivotCardColors.d.ts +22 -0
  164. package/dist/esm/PivotViewer/components/pivot/usePivotCardColors.d.ts.map +1 -0
  165. package/dist/esm/PivotViewer/components/pivot/usePivotCardColors.js +25 -0
  166. package/dist/esm/PivotViewer/components/pivot/usePivotCardColors.js.map +1 -0
  167. package/dist/esm/PivotViewer/components/pivot/usePivotGroupBackgrounds.d.ts +8 -0
  168. package/dist/esm/PivotViewer/components/pivot/usePivotGroupBackgrounds.d.ts.map +1 -0
  169. package/dist/esm/PivotViewer/components/pivot/usePivotGroupBackgrounds.js +53 -0
  170. package/dist/esm/PivotViewer/components/pivot/usePivotGroupBackgrounds.js.map +1 -0
  171. package/dist/esm/PivotViewer/components/pivot/usePivotScrollSync.d.ts +8 -0
  172. package/dist/esm/PivotViewer/components/pivot/usePivotScrollSync.d.ts.map +1 -0
  173. package/dist/esm/PivotViewer/components/pivot/usePivotScrollSync.js +100 -0
  174. package/dist/esm/PivotViewer/components/pivot/usePivotScrollSync.js.map +1 -0
  175. package/dist/esm/PivotViewer/components/pivot/usePivotSelectionHighlight.d.ts +7 -0
  176. package/dist/esm/PivotViewer/components/pivot/usePivotSelectionHighlight.d.ts.map +1 -0
  177. package/dist/esm/PivotViewer/components/pivot/usePivotSelectionHighlight.js +35 -0
  178. package/dist/esm/PivotViewer/components/pivot/usePivotSelectionHighlight.js.map +1 -0
  179. package/dist/esm/PivotViewer/components/pivot/usePivotSpriteSync.d.ts +8 -0
  180. package/dist/esm/PivotViewer/components/pivot/usePivotSpriteSync.d.ts.map +1 -0
  181. package/dist/esm/PivotViewer/components/pivot/usePivotSpriteSync.js +123 -0
  182. package/dist/esm/PivotViewer/components/pivot/usePivotSpriteSync.js.map +1 -0
  183. package/dist/esm/PivotViewer/components/pivot/usePivotStage.d.ts +21 -0
  184. package/dist/esm/PivotViewer/components/pivot/usePivotStage.d.ts.map +1 -0
  185. package/dist/esm/PivotViewer/components/pivot/usePivotStage.js +171 -0
  186. package/dist/esm/PivotViewer/components/pivot/usePivotStage.js.map +1 -0
  187. package/dist/esm/PivotViewer/components/pivot/usePivotTransitionState.d.ts +13 -0
  188. package/dist/esm/PivotViewer/components/pivot/usePivotTransitionState.d.ts.map +1 -0
  189. package/dist/esm/PivotViewer/components/pivot/usePivotTransitionState.js +31 -0
  190. package/dist/esm/PivotViewer/components/pivot/usePivotTransitionState.js.map +1 -0
  191. package/dist/esm/TimeMachine/EventsView.d.ts.map +1 -1
  192. package/dist/esm/TimeMachine/EventsView.js +1 -1
  193. package/dist/esm/TimeMachine/EventsView.js.map +1 -1
  194. package/dist/esm/theme.css +11 -0
  195. package/package.json +1 -1
  196. package/dist/esm/DataTables/classNames.d.ts +0 -7
  197. package/dist/esm/DataTables/classNames.d.ts.map +0 -1
  198. package/dist/esm/DataTables/classNames.js.map +0 -1
  199. /package/dist/esm/{DataTables → ClassNames}/classNames.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"DataTableHeaderCell.js","sources":["../../../DataTables/DataTableHeaderCell.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { ReactElement, ReactNode, RefObject } from 'react';\nimport type { ColumnProps } from './Column';\nimport { ColumnFilterMenu } from './ColumnFilterMenu';\nimport { classNames } from './classNames';\nimport type {\n DataTableFilterConstraint,\n DataTableFilterMeta,\n} from './DataTableFilterMeta';\nimport type { DataTableParts } from './DataTableParts';\nimport type { DataTableSort } from './DataTableSort';\nimport { DataTableSortDirection } from './DataTableSortDirection';\nimport { firstConstraint } from './matchesFilterEntry';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/** Props for {@link DataTableHeaderCell}. */\nexport interface DataTableHeaderCellProps {\n column: ReactElement<ColumnProps<any>>;\n /** The table's part attributes. */\n parts?: DataTableParts;\n sort: DataTableSort | null;\n onSort: (sort: DataTableSort) => void;\n filters: DataTableFilterMeta;\n updateFilter: (\n field: string,\n constraint: DataTableFilterConstraint | undefined,\n ) => void;\n resolvedSelectionAriaLabel: string;\n resolvedSelectAllAriaLabel: string;\n allFilteredRowsSelected: boolean;\n selectAllRef: RefObject<HTMLInputElement | null>;\n toggleSelectAll: () => void;\n sortAscendingIcon: ReactNode;\n sortDescendingIcon: ReactNode;\n}\n\n/** One column header: its label, sort control, filter menu, and select-all or selection label. */\nexport const DataTableHeaderCell = ({\n column,\n parts: pt,\n sort,\n onSort,\n filters,\n updateFilter,\n resolvedSelectionAriaLabel,\n resolvedSelectAllAriaLabel,\n allFilteredRowsSelected,\n selectAllRef,\n toggleSelectAll,\n sortAscendingIcon,\n sortDescendingIcon,\n}: DataTableHeaderCellProps) => {\n const field = column.props.filterField ?? column.props.field;\n const ariaSort =\n sort && sort.field === column.props.field ? sort.direction : undefined;\n return (\n <th\n {...pt?.headerCell}\n scope='col'\n aria-label={\n column.props.selectionMode ? resolvedSelectionAriaLabel : undefined\n }\n aria-sort={ariaSort}\n style={{\n ...pt?.headerCell?.style,\n ...column.props.style,\n ...column.props.headerStyle,\n }}\n className={classNames(\n 'cratis-datatable__header-cell',\n pt?.headerCell?.className,\n column.props.headerClassName,\n )}\n data-cratis-part='header-cell'\n data-selected={Boolean(ariaSort) || undefined}\n >\n <div\n className='cratis-datatable-header-cell'\n data-cratis-part='header-content'\n data-selected={Boolean(ariaSort) || undefined}\n >\n {column.props.selectionMode === 'multiple' ? (\n <input\n type='checkbox'\n aria-label={resolvedSelectAllAriaLabel}\n data-cratis-part='select-all'\n checked={allFilteredRowsSelected}\n ref={selectAllRef}\n onChange={toggleSelectAll}\n />\n ) : (\n column.props.selectionMode && (\n <span className='cratis-datatable__sr-only'>\n {resolvedSelectionAriaLabel}\n </span>\n )\n )}\n {column.props.sortable && column.props.field ? (\n <button\n type='button'\n className='cratis-datatable__sort'\n data-cratis-part='sort'\n data-pressed={Boolean(ariaSort) || undefined}\n onClick={() =>\n onSort({\n field: column.props.field as string,\n direction:\n sort?.field === column.props.field &&\n sort?.direction === DataTableSortDirection.Ascending\n ? DataTableSortDirection.Descending\n : DataTableSortDirection.Ascending,\n })\n }\n >\n <span>{column.props.header}</span>\n {ariaSort && (\n <span aria-hidden='true'>\n {ariaSort === 'ascending'\n ? sortAscendingIcon\n : sortDescendingIcon}\n </span>\n )}\n </button>\n ) : (\n column.props.header\n )}\n {column.props.filter && field && (\n <ColumnFilterMenu\n field={field}\n dataType={column.props.dataType}\n placeholder={column.props.filterPlaceholder}\n showMatchModes={column.props.showFilterMatchModes}\n filterElement={column.props.filterElement}\n filterOptions={column.props.filterOptions}\n labels={column.props.filterLabels}\n pt={column.props.filterPt}\n constraint={firstConstraint(filters[field])}\n onApply={(constraint) => updateFilter(field, constraint)}\n onClear={() => updateFilter(field, undefined)}\n />\n )}\n </div>\n </th>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"DataTableHeaderCell.js","sources":["../../../DataTables/DataTableHeaderCell.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { ReactElement, ReactNode, RefObject } from 'react';\nimport type { ColumnProps } from './Column';\nimport { ColumnFilterMenu } from './ColumnFilterMenu';\nimport { classNames } from '../ClassNames/classNames';\nimport type {\n DataTableFilterConstraint,\n DataTableFilterMeta,\n} from './DataTableFilterMeta';\nimport type { DataTableParts } from './DataTableParts';\nimport type { DataTableSort } from './DataTableSort';\nimport { DataTableSortDirection } from './DataTableSortDirection';\nimport { firstConstraint } from './matchesFilterEntry';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/** Props for {@link DataTableHeaderCell}. */\nexport interface DataTableHeaderCellProps {\n column: ReactElement<ColumnProps<any>>;\n /** The table's part attributes. */\n parts?: DataTableParts;\n sort: DataTableSort | null;\n onSort: (sort: DataTableSort) => void;\n filters: DataTableFilterMeta;\n updateFilter: (\n field: string,\n constraint: DataTableFilterConstraint | undefined,\n ) => void;\n resolvedSelectionAriaLabel: string;\n resolvedSelectAllAriaLabel: string;\n allFilteredRowsSelected: boolean;\n selectAllRef: RefObject<HTMLInputElement | null>;\n toggleSelectAll: () => void;\n sortAscendingIcon: ReactNode;\n sortDescendingIcon: ReactNode;\n}\n\n/** One column header: its label, sort control, filter menu, and select-all or selection label. */\nexport const DataTableHeaderCell = ({\n column,\n parts: pt,\n sort,\n onSort,\n filters,\n updateFilter,\n resolvedSelectionAriaLabel,\n resolvedSelectAllAriaLabel,\n allFilteredRowsSelected,\n selectAllRef,\n toggleSelectAll,\n sortAscendingIcon,\n sortDescendingIcon,\n}: DataTableHeaderCellProps) => {\n const field = column.props.filterField ?? column.props.field;\n const ariaSort =\n sort && sort.field === column.props.field ? sort.direction : undefined;\n return (\n <th\n {...pt?.headerCell}\n scope='col'\n aria-label={\n column.props.selectionMode ? resolvedSelectionAriaLabel : undefined\n }\n aria-sort={ariaSort}\n style={{\n ...pt?.headerCell?.style,\n ...column.props.style,\n ...column.props.headerStyle,\n }}\n className={classNames(\n 'cratis-datatable__header-cell',\n pt?.headerCell?.className,\n column.props.headerClassName,\n )}\n data-cratis-part='header-cell'\n data-selected={Boolean(ariaSort) || undefined}\n >\n <div\n className='cratis-datatable-header-cell'\n data-cratis-part='header-content'\n data-selected={Boolean(ariaSort) || undefined}\n >\n {column.props.selectionMode === 'multiple' ? (\n <input\n type='checkbox'\n aria-label={resolvedSelectAllAriaLabel}\n data-cratis-part='select-all'\n checked={allFilteredRowsSelected}\n ref={selectAllRef}\n onChange={toggleSelectAll}\n />\n ) : (\n column.props.selectionMode && (\n <span className='cratis-datatable__sr-only'>\n {resolvedSelectionAriaLabel}\n </span>\n )\n )}\n {column.props.sortable && column.props.field ? (\n <button\n type='button'\n className='cratis-datatable__sort'\n data-cratis-part='sort'\n data-pressed={Boolean(ariaSort) || undefined}\n onClick={() =>\n onSort({\n field: column.props.field as string,\n direction:\n sort?.field === column.props.field &&\n sort?.direction === DataTableSortDirection.Ascending\n ? DataTableSortDirection.Descending\n : DataTableSortDirection.Ascending,\n })\n }\n >\n <span>{column.props.header}</span>\n {ariaSort && (\n <span aria-hidden='true'>\n {ariaSort === 'ascending'\n ? sortAscendingIcon\n : sortDescendingIcon}\n </span>\n )}\n </button>\n ) : (\n column.props.header\n )}\n {column.props.filter && field && (\n <ColumnFilterMenu\n field={field}\n dataType={column.props.dataType}\n placeholder={column.props.filterPlaceholder}\n showMatchModes={column.props.showFilterMatchModes}\n filterElement={column.props.filterElement}\n filterOptions={column.props.filterOptions}\n labels={column.props.filterLabels}\n pt={column.props.filterPt}\n constraint={firstConstraint(filters[field])}\n onApply={(constraint) => updateFilter(field, constraint)}\n onClear={() => updateFilter(field, undefined)}\n />\n )}\n </div>\n </th>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { classNames } from './classNames.js';
2
+ import { classNames } from '../ClassNames/classNames.js';
3
3
  import { valueAtPath } from './valueAtPath.js';
4
4
 
5
5
  const renderCellContent = (column, row) => {
@@ -1 +1 @@
1
- {"version":3,"file":"DataTableRow.js","sources":["../../../DataTables/DataTableRow.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { ReactElement, ReactNode, SyntheticEvent } from 'react';\nimport type { ColumnProps } from './Column';\nimport { classNames } from './classNames';\nimport type { DataTableParts } from './DataTableParts';\nimport { valueAtPath } from './valueAtPath';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nconst renderCellContent = (\n column: ColumnProps<any>,\n row: Record<string, unknown>,\n): ReactNode => {\n if (column.body) return column.body(row);\n const value = valueAtPath(row, column.field);\n return value == null ? '' : String(value);\n};\n\n/** Props for {@link DataTableRow}. */\nexport interface DataTableRowProps<TData> {\n row: TData;\n columns: ReactElement<ColumnProps<any>>[];\n /** The table's part attributes. */\n parts?: DataTableParts;\n selectionMode?: 'single' | 'multiple';\n isSelected: boolean;\n isInteractive: boolean;\n isRowSelected: boolean;\n rowClassName?: (rowData: TData) => string;\n resolvedSelectionAriaLabel: string;\n selectionGroupName: string;\n onActivate: (event: SyntheticEvent) => void;\n onToggleSelection: () => void;\n}\n\n/** One data row, activated by click, Enter or Space. */\nexport const DataTableRow = <TData extends object>({\n row,\n columns,\n parts: pt,\n selectionMode,\n isSelected,\n isInteractive,\n isRowSelected,\n rowClassName,\n resolvedSelectionAriaLabel,\n selectionGroupName,\n onActivate,\n onToggleSelection,\n}: DataTableRowProps<TData>) => (\n <tr\n {...pt?.row}\n tabIndex={isInteractive ? 0 : pt?.row?.tabIndex}\n aria-selected={selectionMode === 'single' ? isSelected : undefined}\n className={classNames(\n 'cratis-datatable__row',\n pt?.row?.className,\n rowClassName?.(row),\n )}\n data-cratis-part='row'\n data-selected={isSelected || undefined}\n data-interactive={isInteractive || undefined}\n onClick={(event) => onActivate(event)}\n onKeyDown={(event) => {\n if (\n event.target !== event.currentTarget ||\n (event.key !== 'Enter' && event.key !== ' ')\n ) {\n return;\n }\n event.preventDefault();\n onActivate(event);\n }}\n >\n {columns.map((column, columnIndex) => (\n <td\n key={columnIndex}\n {...pt?.cell}\n style={{\n ...pt?.cell?.style,\n ...column.props.style,\n ...column.props.bodyStyle,\n }}\n className={classNames(\n 'cratis-datatable__cell',\n pt?.cell?.className,\n column.props.bodyClassName ?? column.props.className,\n )}\n data-cratis-part='cell'\n data-selected={isSelected || undefined}\n >\n {column.props.selectionMode === 'multiple' ? (\n <input\n type='checkbox'\n aria-label={resolvedSelectionAriaLabel}\n checked={isRowSelected}\n onClick={(event) => event.stopPropagation()}\n onChange={() => onToggleSelection()}\n />\n ) : column.props.selectionMode ? (\n <input\n type='radio'\n name={selectionGroupName}\n readOnly\n tabIndex={-1}\n aria-label={resolvedSelectionAriaLabel}\n checked={isSelected}\n />\n ) : (\n renderCellContent(column.props, row as Record<string, unknown>)\n )}\n </td>\n ))}\n </tr>\n);\n"],"names":["_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"DataTableRow.js","sources":["../../../DataTables/DataTableRow.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { ReactElement, ReactNode, SyntheticEvent } from 'react';\nimport type { ColumnProps } from './Column';\nimport { classNames } from '../ClassNames/classNames';\nimport type { DataTableParts } from './DataTableParts';\nimport { valueAtPath } from './valueAtPath';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nconst renderCellContent = (\n column: ColumnProps<any>,\n row: Record<string, unknown>,\n): ReactNode => {\n if (column.body) return column.body(row);\n const value = valueAtPath(row, column.field);\n return value == null ? '' : String(value);\n};\n\n/** Props for {@link DataTableRow}. */\nexport interface DataTableRowProps<TData> {\n row: TData;\n columns: ReactElement<ColumnProps<any>>[];\n /** The table's part attributes. */\n parts?: DataTableParts;\n selectionMode?: 'single' | 'multiple';\n isSelected: boolean;\n isInteractive: boolean;\n isRowSelected: boolean;\n rowClassName?: (rowData: TData) => string;\n resolvedSelectionAriaLabel: string;\n selectionGroupName: string;\n onActivate: (event: SyntheticEvent) => void;\n onToggleSelection: () => void;\n}\n\n/** One data row, activated by click, Enter or Space. */\nexport const DataTableRow = <TData extends object>({\n row,\n columns,\n parts: pt,\n selectionMode,\n isSelected,\n isInteractive,\n isRowSelected,\n rowClassName,\n resolvedSelectionAriaLabel,\n selectionGroupName,\n onActivate,\n onToggleSelection,\n}: DataTableRowProps<TData>) => (\n <tr\n {...pt?.row}\n tabIndex={isInteractive ? 0 : pt?.row?.tabIndex}\n aria-selected={selectionMode === 'single' ? isSelected : undefined}\n className={classNames(\n 'cratis-datatable__row',\n pt?.row?.className,\n rowClassName?.(row),\n )}\n data-cratis-part='row'\n data-selected={isSelected || undefined}\n data-interactive={isInteractive || undefined}\n onClick={(event) => onActivate(event)}\n onKeyDown={(event) => {\n if (\n event.target !== event.currentTarget ||\n (event.key !== 'Enter' && event.key !== ' ')\n ) {\n return;\n }\n event.preventDefault();\n onActivate(event);\n }}\n >\n {columns.map((column, columnIndex) => (\n <td\n key={columnIndex}\n {...pt?.cell}\n style={{\n ...pt?.cell?.style,\n ...column.props.style,\n ...column.props.bodyStyle,\n }}\n className={classNames(\n 'cratis-datatable__cell',\n pt?.cell?.className,\n column.props.bodyClassName ?? column.props.className,\n )}\n data-cratis-part='cell'\n data-selected={isSelected || undefined}\n >\n {column.props.selectionMode === 'multiple' ? (\n <input\n type='checkbox'\n aria-label={resolvedSelectionAriaLabel}\n checked={isRowSelected}\n onClick={(event) => event.stopPropagation()}\n onChange={() => onToggleSelection()}\n />\n ) : column.props.selectionMode ? (\n <input\n type='radio'\n name={selectionGroupName}\n readOnly\n tabIndex={-1}\n aria-label={resolvedSelectionAriaLabel}\n checked={isSelected}\n />\n ) : (\n renderCellContent(column.props, row as Record<string, unknown>)\n )}\n </td>\n ))}\n </tr>\n);\n"],"names":["_jsx"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { classNames } from './classNames.js';
2
+ import { classNames } from '../ClassNames/classNames.js';
3
3
 
4
4
  const DataTableSearch = ({ parts: pt, value, placeholder, ariaLabel, onChange, }) => (jsx("div", { ...pt?.search, className: classNames('cratis-datatable-search', pt?.search?.className), "data-cratis-part": 'search', children: jsx("input", { ...pt?.searchInput, value: value, placeholder: placeholder, "aria-label": ariaLabel, className: classNames('cratis-datatable-search__input', pt?.searchInput?.className), "data-cratis-part": 'search-input', onChange: (event) => onChange(event.target.value) }) }));
5
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"DataTableSearch.js","sources":["../../../DataTables/DataTableSearch.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 { classNames } from './classNames';\nimport type { DataTableParts } from './DataTableParts';\n\n/** Props for {@link DataTableSearch}. */\nexport interface DataTableSearchProps {\n /** The table's part attributes. */\n parts?: DataTableParts;\n value: string;\n placeholder: string;\n ariaLabel: string;\n onChange: (value: string) => void;\n}\n\n/** The search box above a table that has search fields. */\nexport const DataTableSearch = ({\n parts: pt,\n value,\n placeholder,\n ariaLabel,\n onChange,\n}: DataTableSearchProps) => (\n <div\n {...pt?.search}\n className={classNames('cratis-datatable-search', pt?.search?.className)}\n data-cratis-part='search'\n >\n <input\n {...pt?.searchInput}\n value={value}\n placeholder={placeholder}\n aria-label={ariaLabel}\n className={classNames(\n 'cratis-datatable-search__input',\n pt?.searchInput?.className,\n )}\n data-cratis-part='search-input'\n onChange={(event) => onChange(event.target.value)}\n />\n </div>\n);\n"],"names":["_jsx"],"mappings":";;;AAiBO,MAAM,eAAe,GAAG,CAAC,EAC5B,KAAK,EAAE,EAAE,EACT,KAAK,EACL,WAAW,EACX,SAAS,EACT,QAAQ,GACW,MACnBA,GAAA,CAAA,KAAA,EAAA,EAAA,GACQ,EAAE,EAAE,MAAM,EACd,SAAS,EAAE,UAAU,CAAC,yBAAyB,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,sBACtD,QAAQ,EAAA,QAAA,EAEzBA,kBACQ,EAAE,EAAE,WAAW,EACnB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EAAA,YAAA,EACZ,SAAS,EACrB,SAAS,EAAE,UAAU,CACjB,gCAAgC,EAChC,EAAE,EAAE,WAAW,EAAE,SAAS,CAC7B,EAAA,kBAAA,EACgB,cAAc,EAC/B,QAAQ,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAA,CACnD,EAAA,CACA;;"}
1
+ {"version":3,"file":"DataTableSearch.js","sources":["../../../DataTables/DataTableSearch.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 { classNames } from '../ClassNames/classNames';\nimport type { DataTableParts } from './DataTableParts';\n\n/** Props for {@link DataTableSearch}. */\nexport interface DataTableSearchProps {\n /** The table's part attributes. */\n parts?: DataTableParts;\n value: string;\n placeholder: string;\n ariaLabel: string;\n onChange: (value: string) => void;\n}\n\n/** The search box above a table that has search fields. */\nexport const DataTableSearch = ({\n parts: pt,\n value,\n placeholder,\n ariaLabel,\n onChange,\n}: DataTableSearchProps) => (\n <div\n {...pt?.search}\n className={classNames('cratis-datatable-search', pt?.search?.className)}\n data-cratis-part='search'\n >\n <input\n {...pt?.searchInput}\n value={value}\n placeholder={placeholder}\n aria-label={ariaLabel}\n className={classNames(\n 'cratis-datatable-search__input',\n pt?.searchInput?.className,\n )}\n data-cratis-part='search-input'\n onChange={(event) => onChange(event.target.value)}\n />\n </div>\n);\n"],"names":["_jsx"],"mappings":";;;AAiBO,MAAM,eAAe,GAAG,CAAC,EAC5B,KAAK,EAAE,EAAE,EACT,KAAK,EACL,WAAW,EACX,SAAS,EACT,QAAQ,GACW,MACnBA,GAAA,CAAA,KAAA,EAAA,EAAA,GACQ,EAAE,EAAE,MAAM,EACd,SAAS,EAAE,UAAU,CAAC,yBAAyB,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,sBACtD,QAAQ,EAAA,QAAA,EAEzBA,kBACQ,EAAE,EAAE,WAAW,EACnB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EAAA,YAAA,EACZ,SAAS,EACrB,SAAS,EAAE,UAAU,CACjB,gCAAgC,EAChC,EAAE,EAAE,WAAW,EAAE,SAAS,CAC7B,EAAA,kBAAA,EACgB,cAAc,EAC/B,QAAQ,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAA,CACnD,EAAA,CACA;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DialogImplementation.d.ts","sourceRoot":"","sources":["../../../Dialogs/DialogImplementation.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAU,CAAC;AAsB5C;;;GAGG;AACH,eAAO,MAAM,oBAAoB,yPAyB9B,WAAW,uCAgZb,CAAC"}
1
+ {"version":3,"file":"DialogImplementation.d.ts","sourceRoot":"","sources":["../../../Dialogs/DialogImplementation.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAU,CAAC;AAoB5C;;;GAGG;AACH,eAAO,MAAM,oBAAoB,yPAyB9B,WAAW,uCAgZb,CAAC"}
@@ -12,10 +12,10 @@ import 'react-dom';
12
12
  import { useCratisComponentsConfig } from '../configuration/CratisComponentsContext.js';
13
13
  import { useCratisIcon } from '../configuration/useCratisIcon.js';
14
14
  import '../Notifications/toast.js';
15
+ import { classNames } from '../ClassNames/classNames.js';
15
16
  import { openDialogTier, closeDialogTier, DIALOG_ZINDEX_TOKEN, dialogZIndexForTier } from '../renderer/dialogStack.js';
16
17
  import { DialogStackContext } from '../renderer/DialogStackContext.js';
17
18
 
18
- const classNames = (...values) => values.filter(Boolean).join(' ');
19
19
  const subscribeToBrowserEnvironment = () => () => undefined;
20
20
  const useIsBrowser = () => useSyncExternalStore(subscribeToBrowserEnvironment, () => true, () => false);
21
21
  const DialogImplementation = ({ title, subtitle, placement = 'center', closeIcon, visible = true, onClose, onConfirm, onCancel, buttons = DialogButtons.OkCancel, initialFocus = DialogInitialFocus.Confirm, children, width = '450px', style, contentStyle, isValid, isBusy = false, okLabel, cancelLabel, yesLabel, noLabel, closeAriaLabel, dismissable, className, pt, }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"DialogImplementation.js","sources":["../../../Dialogs/DialogImplementation.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 { DialogResult, DialogButtons, useDialogContext } from '@cratis/arc.react/dialogs';\nimport { Dialog as AriaDialog, Heading } from 'react-aria-components/Dialog';\nimport { Modal, ModalOverlay } from 'react-aria-components/Modal';\nimport { UNSAFE_PortalProvider } from 'react-aria';\nimport { useEffect, useId, useLayoutEffect, useRef, useState, useSyncExternalStore } from 'react';\nimport { unstable_useOverlayEnvironment } from '../renderer/RendererContext';\nimport { DialogInitialFocus } from './DialogInitialFocus';\nimport type { DialogProps } from './Dialog';\nimport { useCratisComponentsConfig } from '../Common/CratisComponentsProvider';\nimport { useCratisIcon } from '../configuration/useCratisIcon';\nimport {\n DIALOG_ZINDEX_TOKEN,\n closeDialogTier,\n dialogZIndexForTier,\n openDialogTier,\n} from '../renderer/dialogStack';\nimport { DialogStackContext } from '../renderer/DialogStackContext';\n\nconst classNames = (...values: Array<string | undefined>) =>\n values.filter(Boolean).join(' ');\n\nconst subscribeToBrowserEnvironment = () => () => undefined;\nconst useIsBrowser = () =>\n useSyncExternalStore(\n subscribeToBrowserEnvironment,\n () => true,\n () => false,\n );\n\n/**\n * A modal dialog with Arc host integration, typed footer actions, busy/validity\n * state, controlled dismissal, and stable Cratis-owned styling parts.\n */\nexport const DialogImplementation = ({\n title,\n subtitle,\n placement = 'center',\n closeIcon,\n visible = true,\n onClose,\n onConfirm,\n onCancel,\n buttons = DialogButtons.OkCancel,\n initialFocus = DialogInitialFocus.Confirm,\n children,\n width = '450px',\n style,\n contentStyle,\n isValid,\n isBusy = false,\n okLabel,\n cancelLabel,\n yesLabel,\n noLabel,\n closeAriaLabel,\n dismissable,\n className,\n pt,\n}: DialogProps) => {\n const overlayEnvironment = unstable_useOverlayEnvironment();\n const { messages } = useCratisComponentsConfig();\n const dialogMessages = messages?.dialog;\n const resolvedOkLabel = okLabel ?? dialogMessages?.ok ?? 'Ok';\n const resolvedCancelLabel = cancelLabel ?? dialogMessages?.cancel ?? 'Cancel';\n const resolvedYesLabel = yesLabel ?? dialogMessages?.yes ?? 'Yes';\n const resolvedNoLabel = noLabel ?? dialogMessages?.no ?? 'No';\n const resolvedCloseAriaLabel = closeAriaLabel ?? dialogMessages?.close ?? 'Close';\n const icon = useCratisIcon();\n const resolvedCloseIcon = icon('close', '×', closeIcon);\n let contextCloseDialog: ((result: DialogResult) => void) | undefined;\n try {\n const context = useDialogContext();\n contextCloseDialog = context?.closeDialog;\n } catch {\n contextCloseDialog = undefined;\n }\n\n const isBrowser = useIsBrowser();\n const subtitleId = useId();\n const hasSubtitle = subtitle !== undefined && subtitle !== null && subtitle !== false;\n const titleRef = useRef<HTMLHeadingElement>(null);\n const confirmRef = useRef<HTMLButtonElement>(null);\n const cancelRef = useRef<HTMLButtonElement>(null);\n\n const isDialogValid = isValid !== false;\n const hasDismissingButton =\n typeof buttons === 'number' && buttons !== DialogButtons.Ok;\n const resolvedInitialFocus =\n initialFocus === DialogInitialFocus.Cancel && !hasDismissingButton\n ? DialogInitialFocus.Content\n : initialFocus;\n const focusesConfirmButton = resolvedInitialFocus === DialogInitialFocus.Confirm;\n const focusesDismissingButton = resolvedInitialFocus === DialogInitialFocus.Cancel;\n const focusesTitle = resolvedInitialFocus === DialogInitialFocus.Content;\n const allowsDismissal = dismissable ?? typeof buttons === 'number';\n const isDismissable = allowsDismissal && !isBusy;\n\n // Assigns this dialog a strictly increasing tier for as long as it is visible, so a second\n // dialog opened while this one is still open - from anywhere, not necessarily as a React\n // child of this one - stacks above it rather than colliding on the same static z-index.\n const [dialogTier, setDialogTier] = useState<number | null>(null);\n useLayoutEffect(() => {\n if (!visible) {\n setDialogTier(null);\n return;\n }\n const tier = openDialogTier();\n setDialogTier(tier);\n return () => closeDialogTier(tier);\n }, [visible]);\n const resolvedZIndex = dialogTier === null ? undefined : dialogZIndexForTier(dialogTier);\n\n useEffect(() => {\n if (!visible) return;\n const target = focusesConfirmButton\n ? confirmRef.current\n : focusesDismissingButton\n ? cancelRef.current\n : titleRef.current;\n const frame = requestAnimationFrame(() => target?.focus());\n return () => cancelAnimationFrame(frame);\n }, [focusesConfirmButton, focusesDismissingButton, visible]);\n\n const handleClose = async (result: DialogResult) => {\n let shouldCloseThroughContext = true;\n\n if (result === DialogResult.Ok || result === DialogResult.Yes) {\n if (onConfirm) {\n const closeResult = await onConfirm();\n shouldCloseThroughContext = closeResult === true;\n } else if (onClose) {\n const closeResult = await onClose(result);\n shouldCloseThroughContext = closeResult !== false;\n }\n } else if (onCancel) {\n const closeResult = await onCancel();\n shouldCloseThroughContext = closeResult === true;\n } else if (onClose) {\n const closeResult = await onClose(result);\n shouldCloseThroughContext = closeResult !== false;\n }\n\n if (shouldCloseThroughContext) contextCloseDialog?.(result);\n };\n\n const footerButton = (\n result: DialogResult,\n label: string,\n primary: boolean,\n focused: boolean,\n ) => (\n <button\n key={`${result}-${label}`}\n {...(primary ? pt?.confirm : pt?.cancel)}\n type='button'\n className={classNames(\n 'cratis-dialog__button',\n primary\n ? 'cratis-dialog__button--primary'\n : 'cratis-dialog__button--secondary',\n primary ? pt?.confirm?.className : pt?.cancel?.className,\n )}\n data-cratis-part={primary ? 'confirm' : 'cancel'}\n data-disabled={(primary ? !isDialogValid || isBusy : isBusy) || undefined}\n data-busy={isBusy || undefined}\n ref={primary ? confirmRef : focused ? cancelRef : undefined}\n onClick={() => void handleClose(result)}\n disabled={primary ? !isDialogValid || isBusy : isBusy}\n autoFocus={focused}\n aria-busy={primary && isBusy ? true : undefined}\n >\n {primary && isBusy && (\n <span className='cratis-dialog__spinner' aria-hidden='true' />\n )}\n <span>{label}</span>\n </button>\n );\n\n const predefinedFooter = () => {\n if (typeof buttons !== 'number') return buttons;\n\n switch (buttons) {\n case DialogButtons.Ok:\n return footerButton(\n DialogResult.Ok,\n resolvedOkLabel,\n true,\n focusesConfirmButton,\n );\n case DialogButtons.OkCancel:\n return (\n <>\n {footerButton(\n DialogResult.Ok,\n resolvedOkLabel,\n true,\n focusesConfirmButton,\n )}\n {footerButton(\n DialogResult.Cancelled,\n resolvedCancelLabel,\n false,\n focusesDismissingButton,\n )}\n </>\n );\n case DialogButtons.YesNo:\n return (\n <>\n {footerButton(\n DialogResult.Yes,\n resolvedYesLabel,\n true,\n focusesConfirmButton,\n )}\n {footerButton(\n DialogResult.No,\n resolvedNoLabel,\n false,\n focusesDismissingButton,\n )}\n </>\n );\n case DialogButtons.YesNoCancel:\n return (\n <>\n {footerButton(\n DialogResult.Yes,\n resolvedYesLabel,\n true,\n focusesConfirmButton,\n )}\n {footerButton(DialogResult.No, resolvedNoLabel, false, false)}\n {footerButton(\n DialogResult.Cancelled,\n resolvedCancelLabel,\n false,\n focusesDismissingButton,\n )}\n </>\n );\n default:\n return null;\n }\n };\n\n const dialogDocument = (\n <DialogStackContext.Provider value={resolvedZIndex ?? DIALOG_ZINDEX_TOKEN}>\n <AriaDialog\n className='cratis-dialog__document'\n aria-describedby={hasSubtitle ? subtitleId : undefined}\n >\n <>\n <header\n {...pt?.header}\n className={classNames('cratis-dialog__header', pt?.header?.className)}\n style={pt?.header?.style}\n data-cratis-part='header'\n >\n <Heading\n {...pt?.title}\n slot='title'\n tabIndex={focusesTitle ? -1 : undefined}\n ref={titleRef}\n className={classNames(\n 'cratis-dialog__title',\n pt?.title?.className,\n )}\n style={pt?.title?.style}\n data-cratis-part='title'\n >\n {title}\n </Heading>\n {hasSubtitle && (\n <p\n {...pt?.subtitle}\n id={subtitleId}\n className={classNames(\n 'cratis-dialog__subtitle',\n pt?.subtitle?.className,\n )}\n style={pt?.subtitle?.style}\n data-cratis-part='subtitle'\n >\n {subtitle}\n </p>\n )}\n {allowsDismissal && (\n <button\n {...pt?.close}\n type='button'\n disabled={isBusy}\n className={classNames(\n 'cratis-dialog__close',\n pt?.close?.className,\n )}\n data-cratis-part='close'\n data-disabled={isBusy || undefined}\n data-busy={isBusy || undefined}\n aria-label={resolvedCloseAriaLabel}\n onClick={() => void handleClose(DialogResult.Cancelled)}\n >\n <span aria-hidden='true'>{resolvedCloseIcon}</span>\n </button>\n )}\n </header>\n <div\n {...pt?.content}\n className={classNames(\n 'cratis-dialog__content',\n pt?.content?.className,\n )}\n style={{ ...pt?.content?.style, ...contentStyle }}\n data-cratis-part='content'\n data-open={visible || undefined}\n data-busy={isBusy || undefined}\n >\n <fieldset\n className='cratis-dialog__busy-scope'\n data-cratis-part='busy-scope'\n data-busy={isBusy || undefined}\n disabled={isBusy}\n inert={isBusy}\n aria-busy={isBusy || undefined}\n >\n {children}\n </fieldset>\n </div>\n {buttons !== null && (\n <footer\n {...pt?.footer}\n className={classNames(\n 'cratis-dialog__footer',\n pt?.footer?.className,\n )}\n style={pt?.footer?.style}\n data-cratis-part='footer'\n >\n <fieldset\n className='cratis-dialog__busy-scope cratis-dialog__busy-scope--footer'\n data-cratis-part='busy-scope'\n data-busy={isBusy || undefined}\n disabled={isBusy}\n inert={isBusy}\n aria-busy={isBusy || undefined}\n >\n {predefinedFooter()}\n </fieldset>\n </footer>\n )}\n </>\n </AriaDialog>\n </DialogStackContext.Provider>\n );\n\n const dialogStyle = { width, ...pt?.root?.style, ...style };\n\n // useSyncExternalStore supplies the server snapshot during hydration, so this\n // fallback is identical on the server and on the client's first render. React\n // switches to the portaled React Aria modal only after hydration completes.\n if (!isBrowser) {\n if (!visible) return null;\n return (\n <div\n {...pt?.backdrop}\n className={classNames('cratis-dialog__backdrop', pt?.backdrop?.className)}\n style={{\n zIndex: resolvedZIndex ?? DIALOG_ZINDEX_TOKEN,\n ...pt?.backdrop?.style,\n }}\n data-cratis-part='backdrop'\n data-placement={placement}\n data-open={visible || undefined}\n data-busy={isBusy || undefined}\n >\n <div\n {...pt?.positioner}\n className={classNames(\n 'cratis-dialog__positioner',\n pt?.positioner?.className,\n )}\n style={pt?.positioner?.style}\n data-cratis-part='positioner'\n data-placement={placement}\n data-open={visible || undefined}\n data-busy={isBusy || undefined}\n >\n <section\n {...pt?.root}\n className={classNames(\n 'cratis-dialog',\n pt?.root?.className,\n className,\n )}\n style={dialogStyle}\n data-cratis-part='root'\n data-placement={placement}\n data-open={visible || undefined}\n data-busy={isBusy || undefined}\n >\n {dialogDocument}\n </section>\n </div>\n </div>\n );\n }\n\n return (\n <UNSAFE_PortalProvider getContainer={overlayEnvironment.getContainer}>\n <ModalOverlay\n {...pt?.backdrop}\n isOpen={visible}\n onOpenChange={(open) => {\n if (!open && !isBusy) void handleClose(DialogResult.Cancelled);\n }}\n isDismissable={isDismissable}\n isKeyboardDismissDisabled={!isDismissable}\n className={classNames('cratis-dialog__backdrop', pt?.backdrop?.className)}\n style={{\n zIndex: resolvedZIndex ?? DIALOG_ZINDEX_TOKEN,\n ...pt?.backdrop?.style,\n }}\n data-cratis-part='backdrop'\n data-placement={placement}\n data-open={visible || undefined}\n data-busy={isBusy || undefined}\n >\n <div\n {...pt?.positioner}\n className={classNames(\n 'cratis-dialog__positioner',\n pt?.positioner?.className,\n )}\n style={pt?.positioner?.style}\n data-cratis-part='positioner'\n data-placement={placement}\n data-open={visible || undefined}\n data-busy={isBusy || undefined}\n >\n <Modal\n {...pt?.root}\n className={classNames(\n 'cratis-dialog',\n pt?.root?.className,\n className,\n )}\n style={dialogStyle}\n data-cratis-part='root'\n data-placement={placement}\n data-open={visible || undefined}\n data-busy={isBusy || undefined}\n >\n {dialogDocument}\n </Modal>\n </div>\n </ModalOverlay>\n </UNSAFE_PortalProvider>\n );\n};\n"],"names":["_jsxs","_jsx","_Fragment","AriaDialog"],"mappings":"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"}
1
+ {"version":3,"file":"DialogImplementation.js","sources":["../../../Dialogs/DialogImplementation.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 { DialogResult, DialogButtons, useDialogContext } from '@cratis/arc.react/dialogs';\nimport { Dialog as AriaDialog, Heading } from 'react-aria-components/Dialog';\nimport { Modal, ModalOverlay } from 'react-aria-components/Modal';\nimport { UNSAFE_PortalProvider } from 'react-aria';\nimport { useEffect, useId, useLayoutEffect, useRef, useState, useSyncExternalStore } from 'react';\nimport { unstable_useOverlayEnvironment } from '../renderer/RendererContext';\nimport { DialogInitialFocus } from './DialogInitialFocus';\nimport type { DialogProps } from './Dialog';\nimport { useCratisComponentsConfig } from '../Common/CratisComponentsProvider';\nimport { useCratisIcon } from '../configuration/useCratisIcon';\nimport {\n DIALOG_ZINDEX_TOKEN,\n closeDialogTier,\n dialogZIndexForTier,\n openDialogTier,\n} from '../renderer/dialogStack';\nimport { DialogStackContext } from '../renderer/DialogStackContext';\nimport { classNames } from '../ClassNames/classNames';\n\nconst subscribeToBrowserEnvironment = () => () => undefined;\nconst useIsBrowser = () =>\n useSyncExternalStore(\n subscribeToBrowserEnvironment,\n () => true,\n () => false,\n );\n\n/**\n * A modal dialog with Arc host integration, typed footer actions, busy/validity\n * state, controlled dismissal, and stable Cratis-owned styling parts.\n */\nexport const DialogImplementation = ({\n title,\n subtitle,\n placement = 'center',\n closeIcon,\n visible = true,\n onClose,\n onConfirm,\n onCancel,\n buttons = DialogButtons.OkCancel,\n initialFocus = DialogInitialFocus.Confirm,\n children,\n width = '450px',\n style,\n contentStyle,\n isValid,\n isBusy = false,\n okLabel,\n cancelLabel,\n yesLabel,\n noLabel,\n closeAriaLabel,\n dismissable,\n className,\n pt,\n}: DialogProps) => {\n const overlayEnvironment = unstable_useOverlayEnvironment();\n const { messages } = useCratisComponentsConfig();\n const dialogMessages = messages?.dialog;\n const resolvedOkLabel = okLabel ?? dialogMessages?.ok ?? 'Ok';\n const resolvedCancelLabel = cancelLabel ?? dialogMessages?.cancel ?? 'Cancel';\n const resolvedYesLabel = yesLabel ?? dialogMessages?.yes ?? 'Yes';\n const resolvedNoLabel = noLabel ?? dialogMessages?.no ?? 'No';\n const resolvedCloseAriaLabel = closeAriaLabel ?? dialogMessages?.close ?? 'Close';\n const icon = useCratisIcon();\n const resolvedCloseIcon = icon('close', '×', closeIcon);\n let contextCloseDialog: ((result: DialogResult) => void) | undefined;\n try {\n const context = useDialogContext();\n contextCloseDialog = context?.closeDialog;\n } catch {\n contextCloseDialog = undefined;\n }\n\n const isBrowser = useIsBrowser();\n const subtitleId = useId();\n const hasSubtitle = subtitle !== undefined && subtitle !== null && subtitle !== false;\n const titleRef = useRef<HTMLHeadingElement>(null);\n const confirmRef = useRef<HTMLButtonElement>(null);\n const cancelRef = useRef<HTMLButtonElement>(null);\n\n const isDialogValid = isValid !== false;\n const hasDismissingButton =\n typeof buttons === 'number' && buttons !== DialogButtons.Ok;\n const resolvedInitialFocus =\n initialFocus === DialogInitialFocus.Cancel && !hasDismissingButton\n ? DialogInitialFocus.Content\n : initialFocus;\n const focusesConfirmButton = resolvedInitialFocus === DialogInitialFocus.Confirm;\n const focusesDismissingButton = resolvedInitialFocus === DialogInitialFocus.Cancel;\n const focusesTitle = resolvedInitialFocus === DialogInitialFocus.Content;\n const allowsDismissal = dismissable ?? typeof buttons === 'number';\n const isDismissable = allowsDismissal && !isBusy;\n\n // Assigns this dialog a strictly increasing tier for as long as it is visible, so a second\n // dialog opened while this one is still open - from anywhere, not necessarily as a React\n // child of this one - stacks above it rather than colliding on the same static z-index.\n const [dialogTier, setDialogTier] = useState<number | null>(null);\n useLayoutEffect(() => {\n if (!visible) {\n setDialogTier(null);\n return;\n }\n const tier = openDialogTier();\n setDialogTier(tier);\n return () => closeDialogTier(tier);\n }, [visible]);\n const resolvedZIndex = dialogTier === null ? undefined : dialogZIndexForTier(dialogTier);\n\n useEffect(() => {\n if (!visible) return;\n const target = focusesConfirmButton\n ? confirmRef.current\n : focusesDismissingButton\n ? cancelRef.current\n : titleRef.current;\n const frame = requestAnimationFrame(() => target?.focus());\n return () => cancelAnimationFrame(frame);\n }, [focusesConfirmButton, focusesDismissingButton, visible]);\n\n const handleClose = async (result: DialogResult) => {\n let shouldCloseThroughContext = true;\n\n if (result === DialogResult.Ok || result === DialogResult.Yes) {\n if (onConfirm) {\n const closeResult = await onConfirm();\n shouldCloseThroughContext = closeResult === true;\n } else if (onClose) {\n const closeResult = await onClose(result);\n shouldCloseThroughContext = closeResult !== false;\n }\n } else if (onCancel) {\n const closeResult = await onCancel();\n shouldCloseThroughContext = closeResult === true;\n } else if (onClose) {\n const closeResult = await onClose(result);\n shouldCloseThroughContext = closeResult !== false;\n }\n\n if (shouldCloseThroughContext) contextCloseDialog?.(result);\n };\n\n const footerButton = (\n result: DialogResult,\n label: string,\n primary: boolean,\n focused: boolean,\n ) => (\n <button\n key={`${result}-${label}`}\n {...(primary ? pt?.confirm : pt?.cancel)}\n type='button'\n className={classNames(\n 'cratis-dialog__button',\n primary\n ? 'cratis-dialog__button--primary'\n : 'cratis-dialog__button--secondary',\n primary ? pt?.confirm?.className : pt?.cancel?.className,\n )}\n data-cratis-part={primary ? 'confirm' : 'cancel'}\n data-disabled={(primary ? !isDialogValid || isBusy : isBusy) || undefined}\n data-busy={isBusy || undefined}\n ref={primary ? confirmRef : focused ? cancelRef : undefined}\n onClick={() => void handleClose(result)}\n disabled={primary ? !isDialogValid || isBusy : isBusy}\n autoFocus={focused}\n aria-busy={primary && isBusy ? true : undefined}\n >\n {primary && isBusy && (\n <span className='cratis-dialog__spinner' aria-hidden='true' />\n )}\n <span>{label}</span>\n </button>\n );\n\n const predefinedFooter = () => {\n if (typeof buttons !== 'number') return buttons;\n\n switch (buttons) {\n case DialogButtons.Ok:\n return footerButton(\n DialogResult.Ok,\n resolvedOkLabel,\n true,\n focusesConfirmButton,\n );\n case DialogButtons.OkCancel:\n return (\n <>\n {footerButton(\n DialogResult.Ok,\n resolvedOkLabel,\n true,\n focusesConfirmButton,\n )}\n {footerButton(\n DialogResult.Cancelled,\n resolvedCancelLabel,\n false,\n focusesDismissingButton,\n )}\n </>\n );\n case DialogButtons.YesNo:\n return (\n <>\n {footerButton(\n DialogResult.Yes,\n resolvedYesLabel,\n true,\n focusesConfirmButton,\n )}\n {footerButton(\n DialogResult.No,\n resolvedNoLabel,\n false,\n focusesDismissingButton,\n )}\n </>\n );\n case DialogButtons.YesNoCancel:\n return (\n <>\n {footerButton(\n DialogResult.Yes,\n resolvedYesLabel,\n true,\n focusesConfirmButton,\n )}\n {footerButton(DialogResult.No, resolvedNoLabel, false, false)}\n {footerButton(\n DialogResult.Cancelled,\n resolvedCancelLabel,\n false,\n focusesDismissingButton,\n )}\n </>\n );\n default:\n return null;\n }\n };\n\n const dialogDocument = (\n <DialogStackContext.Provider value={resolvedZIndex ?? DIALOG_ZINDEX_TOKEN}>\n <AriaDialog\n className='cratis-dialog__document'\n aria-describedby={hasSubtitle ? subtitleId : undefined}\n >\n <>\n <header\n {...pt?.header}\n className={classNames('cratis-dialog__header', pt?.header?.className)}\n style={pt?.header?.style}\n data-cratis-part='header'\n >\n <Heading\n {...pt?.title}\n slot='title'\n tabIndex={focusesTitle ? -1 : undefined}\n ref={titleRef}\n className={classNames(\n 'cratis-dialog__title',\n pt?.title?.className,\n )}\n style={pt?.title?.style}\n data-cratis-part='title'\n >\n {title}\n </Heading>\n {hasSubtitle && (\n <p\n {...pt?.subtitle}\n id={subtitleId}\n className={classNames(\n 'cratis-dialog__subtitle',\n pt?.subtitle?.className,\n )}\n style={pt?.subtitle?.style}\n data-cratis-part='subtitle'\n >\n {subtitle}\n </p>\n )}\n {allowsDismissal && (\n <button\n {...pt?.close}\n type='button'\n disabled={isBusy}\n className={classNames(\n 'cratis-dialog__close',\n pt?.close?.className,\n )}\n data-cratis-part='close'\n data-disabled={isBusy || undefined}\n data-busy={isBusy || undefined}\n aria-label={resolvedCloseAriaLabel}\n onClick={() => void handleClose(DialogResult.Cancelled)}\n >\n <span aria-hidden='true'>{resolvedCloseIcon}</span>\n </button>\n )}\n </header>\n <div\n {...pt?.content}\n className={classNames(\n 'cratis-dialog__content',\n pt?.content?.className,\n )}\n style={{ ...pt?.content?.style, ...contentStyle }}\n data-cratis-part='content'\n data-open={visible || undefined}\n data-busy={isBusy || undefined}\n >\n <fieldset\n className='cratis-dialog__busy-scope'\n data-cratis-part='busy-scope'\n data-busy={isBusy || undefined}\n disabled={isBusy}\n inert={isBusy}\n aria-busy={isBusy || undefined}\n >\n {children}\n </fieldset>\n </div>\n {buttons !== null && (\n <footer\n {...pt?.footer}\n className={classNames(\n 'cratis-dialog__footer',\n pt?.footer?.className,\n )}\n style={pt?.footer?.style}\n data-cratis-part='footer'\n >\n <fieldset\n className='cratis-dialog__busy-scope cratis-dialog__busy-scope--footer'\n data-cratis-part='busy-scope'\n data-busy={isBusy || undefined}\n disabled={isBusy}\n inert={isBusy}\n aria-busy={isBusy || undefined}\n >\n {predefinedFooter()}\n </fieldset>\n </footer>\n )}\n </>\n </AriaDialog>\n </DialogStackContext.Provider>\n );\n\n const dialogStyle = { width, ...pt?.root?.style, ...style };\n\n // useSyncExternalStore supplies the server snapshot during hydration, so this\n // fallback is identical on the server and on the client's first render. React\n // switches to the portaled React Aria modal only after hydration completes.\n if (!isBrowser) {\n if (!visible) return null;\n return (\n <div\n {...pt?.backdrop}\n className={classNames('cratis-dialog__backdrop', pt?.backdrop?.className)}\n style={{\n zIndex: resolvedZIndex ?? DIALOG_ZINDEX_TOKEN,\n ...pt?.backdrop?.style,\n }}\n data-cratis-part='backdrop'\n data-placement={placement}\n data-open={visible || undefined}\n data-busy={isBusy || undefined}\n >\n <div\n {...pt?.positioner}\n className={classNames(\n 'cratis-dialog__positioner',\n pt?.positioner?.className,\n )}\n style={pt?.positioner?.style}\n data-cratis-part='positioner'\n data-placement={placement}\n data-open={visible || undefined}\n data-busy={isBusy || undefined}\n >\n <section\n {...pt?.root}\n className={classNames(\n 'cratis-dialog',\n pt?.root?.className,\n className,\n )}\n style={dialogStyle}\n data-cratis-part='root'\n data-placement={placement}\n data-open={visible || undefined}\n data-busy={isBusy || undefined}\n >\n {dialogDocument}\n </section>\n </div>\n </div>\n );\n }\n\n return (\n <UNSAFE_PortalProvider getContainer={overlayEnvironment.getContainer}>\n <ModalOverlay\n {...pt?.backdrop}\n isOpen={visible}\n onOpenChange={(open) => {\n if (!open && !isBusy) void handleClose(DialogResult.Cancelled);\n }}\n isDismissable={isDismissable}\n isKeyboardDismissDisabled={!isDismissable}\n className={classNames('cratis-dialog__backdrop', pt?.backdrop?.className)}\n style={{\n zIndex: resolvedZIndex ?? DIALOG_ZINDEX_TOKEN,\n ...pt?.backdrop?.style,\n }}\n data-cratis-part='backdrop'\n data-placement={placement}\n data-open={visible || undefined}\n data-busy={isBusy || undefined}\n >\n <div\n {...pt?.positioner}\n className={classNames(\n 'cratis-dialog__positioner',\n pt?.positioner?.className,\n )}\n style={pt?.positioner?.style}\n data-cratis-part='positioner'\n data-placement={placement}\n data-open={visible || undefined}\n data-busy={isBusy || undefined}\n >\n <Modal\n {...pt?.root}\n className={classNames(\n 'cratis-dialog',\n pt?.root?.className,\n className,\n )}\n style={dialogStyle}\n data-cratis-part='root'\n data-placement={placement}\n data-open={visible || undefined}\n data-busy={isBusy || undefined}\n >\n {dialogDocument}\n </Modal>\n </div>\n </ModalOverlay>\n </UNSAFE_PortalProvider>\n );\n};\n"],"names":["_jsxs","_jsx","_Fragment","AriaDialog"],"mappings":"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"}
@@ -13,7 +13,14 @@ export interface MessageProps {
13
13
  className?: string;
14
14
  /** The icon shown ahead of the text. Pass `false` for no icon. */
15
15
  icon?: ReactNode | false;
16
+ /**
17
+ * Whether the message is its own live region, announced by assistive technology when it
18
+ * appears. Defaults to `true`: `severity="error"` renders `role="alert"`, every other severity
19
+ * `role="status"`. Pass `false` to render a plain element with no role when the message sits
20
+ * inside a live region that already announces it, so it is not announced twice.
21
+ */
22
+ live?: boolean;
16
23
  }
17
24
  /** A declarative inline status message. */
18
- export declare const Message: ({ severity, text, children, className, icon, }: MessageProps) => import("react").JSX.Element;
25
+ export declare const Message: ({ severity, text, children, className, icon, live, }: MessageProps) => import("react").JSX.Element;
19
26
  //# sourceMappingURL=Message.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../../Display/Message.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,0CAA0C;AAC1C,MAAM,MAAM,eAAe,GACvB,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,CAAC;AAErE,iCAAiC;AACjC,MAAM,WAAW,YAAY;IACzB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,wBAAwB;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;CAC5B;AAWD,2CAA2C;AAC3C,eAAO,MAAM,OAAO,mDAMjB,YAAY,gCAoBd,CAAC"}
1
+ {"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../../Display/Message.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,0CAA0C;AAC1C,MAAM,MAAM,eAAe,GACvB,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,CAAC;AAErE,iCAAiC;AACjC,MAAM,WAAW,YAAY;IACzB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,wBAAwB;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IACzB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAWD,2CAA2C;AAC3C,eAAO,MAAM,OAAO,yDAOjB,YAAY,gCAoBd,CAAC"}
@@ -8,7 +8,7 @@ const severitySymbols = {
8
8
  secondary: 'ⓘ',
9
9
  contrast: 'ⓘ',
10
10
  };
11
- const Message = ({ severity = 'info', text, children, className, icon, }) => (jsxs("div", { className: ['cratis-message', className].filter(Boolean).join(' '), "data-cratis-part": 'root', "data-severity": severity, role: severity === 'error' ? 'alert' : 'status', children: [icon !== false && (jsx("span", { className: 'cratis-message__icon', "data-cratis-part": 'icon', "aria-hidden": 'true', children: icon ?? severitySymbols[severity] })), jsx("span", { className: 'cratis-message__text', "data-cratis-part": 'text', children: children ?? text })] }));
11
+ const Message = ({ severity = 'info', text, children, className, icon, live = true, }) => (jsxs("div", { className: ['cratis-message', className].filter(Boolean).join(' '), "data-cratis-part": 'root', "data-severity": severity, role: live ? (severity === 'error' ? 'alert' : 'status') : undefined, children: [icon !== false && (jsx("span", { className: 'cratis-message__icon', "data-cratis-part": 'icon', "aria-hidden": 'true', children: icon ?? severitySymbols[severity] })), jsx("span", { className: 'cratis-message__text', "data-cratis-part": 'text', children: children ?? text })] }));
12
12
 
13
13
  export { Message };
14
14
  //# sourceMappingURL=Message.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Message.js","sources":["../../../Display/Message.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { ReactNode } from 'react';\n\n/** Severity tone of a {@link Message}. */\nexport type MessageSeverity =\n 'info' | 'success' | 'warn' | 'error' | 'secondary' | 'contrast';\n\n/** Props for {@link Message}. */\nexport interface MessageProps {\n /** Severity tone (drives the color). */\n severity?: MessageSeverity;\n /** The message text. */\n text?: ReactNode;\n /** Message content (alternative to {@link text}). */\n children?: ReactNode;\n /** Extra class name applied to the message root. */\n className?: string;\n /** The icon shown ahead of the text. Pass `false` for no icon. */\n icon?: ReactNode | false;\n}\n\nconst severitySymbols: Record<MessageSeverity, string> = {\n info: 'ⓘ',\n success: '✓',\n warn: '⚠',\n error: '⨯',\n secondary: 'ⓘ',\n contrast: 'ⓘ',\n};\n\n/** A declarative inline status message. */\nexport const Message = ({\n severity = 'info',\n text,\n children,\n className,\n icon,\n}: MessageProps) => (\n <div\n className={['cratis-message', className].filter(Boolean).join(' ')}\n data-cratis-part='root'\n data-severity={severity}\n role={severity === 'error' ? 'alert' : 'status'}\n >\n {icon !== false && (\n <span\n className='cratis-message__icon'\n data-cratis-part='icon'\n aria-hidden='true'\n >\n {icon ?? severitySymbols[severity]}\n </span>\n )}\n <span className='cratis-message__text' data-cratis-part='text'>\n {children ?? text}\n </span>\n </div>\n);\n"],"names":["_jsxs","_jsx"],"mappings":";;AAuBA,MAAM,eAAe,GAAoC;AACrD,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,OAAO,EAAE,GAAG;AACZ,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,QAAQ,EAAE,GAAG;CAChB;MAGY,OAAO,GAAG,CAAC,EACpB,QAAQ,GAAG,MAAM,EACjB,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,IAAI,GACO,MACXA,cACI,SAAS,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,sBACjD,MAAM,EAAA,eAAA,EACR,QAAQ,EACvB,IAAI,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,GAAG,QAAQ,EAAA,QAAA,EAAA,CAE9C,IAAI,KAAK,KAAK,KACXC,GAAA,CAAA,MAAA,EAAA,EACI,SAAS,EAAC,sBAAsB,EAAA,kBAAA,EACf,MAAM,EAAA,aAAA,EACX,MAAM,YAEjB,IAAI,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAA,CAC/B,CACV,EACDA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,sBAAsB,EAAA,kBAAA,EAAkB,MAAM,EAAA,QAAA,EACzD,QAAQ,IAAI,IAAI,EAAA,CACd,CAAA,EAAA,CACL;;"}
1
+ {"version":3,"file":"Message.js","sources":["../../../Display/Message.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { ReactNode } from 'react';\n\n/** Severity tone of a {@link Message}. */\nexport type MessageSeverity =\n 'info' | 'success' | 'warn' | 'error' | 'secondary' | 'contrast';\n\n/** Props for {@link Message}. */\nexport interface MessageProps {\n /** Severity tone (drives the color). */\n severity?: MessageSeverity;\n /** The message text. */\n text?: ReactNode;\n /** Message content (alternative to {@link text}). */\n children?: ReactNode;\n /** Extra class name applied to the message root. */\n className?: string;\n /** The icon shown ahead of the text. Pass `false` for no icon. */\n icon?: ReactNode | false;\n /**\n * Whether the message is its own live region, announced by assistive technology when it\n * appears. Defaults to `true`: `severity=\"error\"` renders `role=\"alert\"`, every other severity\n * `role=\"status\"`. Pass `false` to render a plain element with no role when the message sits\n * inside a live region that already announces it, so it is not announced twice.\n */\n live?: boolean;\n}\n\nconst severitySymbols: Record<MessageSeverity, string> = {\n info: 'ⓘ',\n success: '✓',\n warn: '⚠',\n error: '⨯',\n secondary: 'ⓘ',\n contrast: 'ⓘ',\n};\n\n/** A declarative inline status message. */\nexport const Message = ({\n severity = 'info',\n text,\n children,\n className,\n icon,\n live = true,\n}: MessageProps) => (\n <div\n className={['cratis-message', className].filter(Boolean).join(' ')}\n data-cratis-part='root'\n data-severity={severity}\n role={live ? (severity === 'error' ? 'alert' : 'status') : undefined}\n >\n {icon !== false && (\n <span\n className='cratis-message__icon'\n data-cratis-part='icon'\n aria-hidden='true'\n >\n {icon ?? severitySymbols[severity]}\n </span>\n )}\n <span className='cratis-message__text' data-cratis-part='text'>\n {children ?? text}\n </span>\n </div>\n);\n"],"names":["_jsxs","_jsx"],"mappings":";;AA8BA,MAAM,eAAe,GAAoC;AACrD,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,OAAO,EAAE,GAAG;AACZ,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,QAAQ,EAAE,GAAG;CAChB;AAGM,MAAM,OAAO,GAAG,CAAC,EACpB,QAAQ,GAAG,MAAM,EACjB,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,IAAI,GAAG,IAAI,GACA,MACXA,cACI,SAAS,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAA,kBAAA,EACjD,MAAM,EAAA,eAAA,EACR,QAAQ,EACvB,IAAI,EAAE,IAAI,IAAI,QAAQ,KAAK,OAAO,GAAG,OAAO,GAAG,QAAQ,IAAI,SAAS,EAAA,QAAA,EAAA,CAEnE,IAAI,KAAK,KAAK,KACXC,GAAA,CAAA,MAAA,EAAA,EACI,SAAS,EAAC,sBAAsB,sBACf,MAAM,EAAA,aAAA,EACX,MAAM,EAAA,QAAA,EAEjB,IAAI,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAA,CAC/B,CACV,EACDA,cAAM,SAAS,EAAC,sBAAsB,EAAA,kBAAA,EAAkB,MAAM,EAAA,QAAA,EACzD,QAAQ,IAAI,IAAI,EAAA,CACd,CAAA,EAAA,CACL;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownImplementation.d.ts","sourceRoot":"","sources":["../../../Dropdown/DropdownImplementation.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAA8B,MAAM,OAAO,CAAC;AAyB7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAY,CAAC;+CAsGT,CAAC,GAAG,OAAO,EAAG,EACjD,KAAK,EACL,OAAO,EACP,WAAiD,EACjD,WAAiD,EACjD,WAAW,EACX,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,OAAO,EACP,QAAQ,EACR,SAAS,EACT,KAAK,EACL,EAAE,EACF,OAAO,EACP,cAAc,EACd,IAAI,EACJ,QAAQ,EACR,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,kBAAkB,EAAE,eAAe,EACnC,SAAS,EAAE,cAAc,EACzB,cAAc,EACd,eAAe,EACf,WAAW,EACX,QAAQ,EACR,MAAM,EACN,EAAE,GACL,EAAE,aAAa,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"DropdownImplementation.d.ts","sourceRoot":"","sources":["../../../Dropdown/DropdownImplementation.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAA8B,MAAM,OAAO,CAAC;AAyB7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAY,CAAC;+CAoGT,CAAC,GAAG,OAAO,EAAG,EACjD,KAAK,EACL,OAAO,EACP,WAAiD,EACjD,WAAiD,EACjD,WAAW,EACX,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,OAAO,EACP,QAAQ,EACR,SAAS,EACT,KAAK,EACL,EAAE,EACF,OAAO,EACP,cAAc,EACd,IAAI,EACJ,QAAQ,EACR,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,kBAAkB,EAAE,eAAe,EACnC,SAAS,EAAE,cAAc,EACzB,cAAc,EACd,eAAe,EACf,WAAW,EACX,QAAQ,EACR,MAAM,EACN,EAAE,GACL,EAAE,aAAa,CAAC,CAAC,CAAC"}
@@ -10,6 +10,7 @@ import 'react-dom';
10
10
  import { useCratisComponentsConfig } from '../configuration/CratisComponentsContext.js';
11
11
  import { useCratisIcon } from '../configuration/useCratisIcon.js';
12
12
  import '../Notifications/toast.js';
13
+ import { classNames } from '../ClassNames/classNames.js';
13
14
  import { zIndexAboveDialog, OVERLAY_OFFSET } from '../renderer/dialogStack.js';
14
15
  import { useNearestDialogZIndex } from '../renderer/DialogStackContext.js';
15
16
  import { useExternalLabel } from './useExternalLabel.js';
@@ -47,7 +48,6 @@ const resolveOptions = (options, optionLabel, optionValue) => (options ?? []).ma
47
48
  disabled,
48
49
  };
49
50
  });
50
- const classNames = (...values) => values.filter(Boolean).join(' ');
51
51
  const ComboBoxCommitBridge = ({ handle, }) => {
52
52
  const state = useContext(ComboBoxStateContext);
53
53
  useEffect(() => {