@cratis/components 4.26.4 → 4.28.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 (162) hide show
  1. package/compat-manifest.json +11 -11
  2. package/dist/esm/Common/CratisComponentsProvider.d.ts +4 -0
  3. package/dist/esm/Common/CratisComponentsProvider.d.ts.map +1 -1
  4. package/dist/esm/Common/CratisComponentsProvider.js +1 -0
  5. package/dist/esm/Common/CratisComponentsProvider.js.map +1 -1
  6. package/dist/esm/DataPage/DataPage.d.ts +2 -0
  7. package/dist/esm/DataPage/DataPage.d.ts.map +1 -1
  8. package/dist/esm/DataPage/DataPage.js.map +1 -1
  9. package/dist/esm/DataTables/DataTableForObservableQuery.d.ts +2 -0
  10. package/dist/esm/DataTables/DataTableForObservableQuery.d.ts.map +1 -1
  11. package/dist/esm/DataTables/DataTableForObservableQuery.js +1 -1
  12. package/dist/esm/DataTables/DataTableForObservableQuery.js.map +1 -1
  13. package/dist/esm/DataTables/DataTableForQuery.d.ts +2 -0
  14. package/dist/esm/DataTables/DataTableForQuery.d.ts.map +1 -1
  15. package/dist/esm/DataTables/DataTableForQuery.js +1 -1
  16. package/dist/esm/DataTables/DataTableForQuery.js.map +1 -1
  17. package/dist/esm/DataTables/PaginatorPageItem.d.ts +13 -0
  18. package/dist/esm/DataTables/PaginatorPageItem.d.ts.map +1 -0
  19. package/dist/esm/DataTables/PaginatorPageItem.js +4 -0
  20. package/dist/esm/DataTables/PaginatorPageItem.js.map +1 -0
  21. package/dist/esm/DataTables/TablePaginator.d.ts +22 -2
  22. package/dist/esm/DataTables/TablePaginator.d.ts.map +1 -1
  23. package/dist/esm/DataTables/TablePaginator.js.map +1 -1
  24. package/dist/esm/DataTables/TablePaginatorImplementation.d.ts +1 -1
  25. package/dist/esm/DataTables/TablePaginatorImplementation.d.ts.map +1 -1
  26. package/dist/esm/DataTables/TablePaginatorImplementation.js +8 -3
  27. package/dist/esm/DataTables/TablePaginatorImplementation.js.map +1 -1
  28. package/dist/esm/DataTables/TablePaginatorPages.d.ts +9 -0
  29. package/dist/esm/DataTables/TablePaginatorPages.d.ts.map +1 -0
  30. package/dist/esm/DataTables/TablePaginatorPages.js +20 -0
  31. package/dist/esm/DataTables/TablePaginatorPages.js.map +1 -0
  32. package/dist/esm/DataTables/index.d.ts +2 -0
  33. package/dist/esm/DataTables/index.d.ts.map +1 -1
  34. package/dist/esm/DataTables/index.js +1 -0
  35. package/dist/esm/DataTables/index.js.map +1 -1
  36. package/dist/esm/DataTables/paginatorPages.d.ts +15 -0
  37. package/dist/esm/DataTables/paginatorPages.d.ts.map +1 -0
  38. package/dist/esm/DataTables/paginatorPages.js +40 -0
  39. package/dist/esm/DataTables/paginatorPages.js.map +1 -0
  40. package/dist/esm/Filter/FilterGroup.d.ts +23 -0
  41. package/dist/esm/Filter/FilterGroup.d.ts.map +1 -0
  42. package/dist/esm/Filter/FilterGroup.js +51 -0
  43. package/dist/esm/Filter/FilterGroup.js.map +1 -0
  44. package/dist/esm/Filter/FilterPanel.d.ts.map +1 -1
  45. package/dist/esm/Filter/FilterPanel.js +24 -257
  46. package/dist/esm/Filter/FilterPanel.js.map +1 -1
  47. package/dist/esm/Filter/FilterSearchBox.d.ts +10 -0
  48. package/dist/esm/Filter/FilterSearchBox.d.ts.map +1 -0
  49. package/dist/esm/Filter/FilterSearchBox.js +10 -0
  50. package/dist/esm/Filter/FilterSearchBox.js.map +1 -0
  51. package/dist/esm/Filter/measurePanelPlacement.d.ts +31 -0
  52. package/dist/esm/Filter/measurePanelPlacement.d.ts.map +1 -0
  53. package/dist/esm/Filter/measurePanelPlacement.js +132 -0
  54. package/dist/esm/Filter/measurePanelPlacement.js.map +1 -0
  55. package/dist/esm/Filter/usePanelDismissal.d.ts +32 -0
  56. package/dist/esm/Filter/usePanelDismissal.d.ts.map +1 -0
  57. package/dist/esm/Filter/usePanelDismissal.js +63 -0
  58. package/dist/esm/Filter/usePanelDismissal.js.map +1 -0
  59. package/dist/esm/Filter/usePanelPosition.d.ts +24 -0
  60. package/dist/esm/Filter/usePanelPosition.d.ts.map +1 -0
  61. package/dist/esm/Filter/usePanelPosition.js +85 -0
  62. package/dist/esm/Filter/usePanelPosition.js.map +1 -0
  63. package/dist/esm/Filter/useResolvedAnchor.d.ts +17 -0
  64. package/dist/esm/Filter/useResolvedAnchor.d.ts.map +1 -0
  65. package/dist/esm/Filter/useResolvedAnchor.js +16 -0
  66. package/dist/esm/Filter/useResolvedAnchor.js.map +1 -0
  67. package/dist/esm/PivotViewer/PivotViewer.d.ts.map +1 -1
  68. package/dist/esm/PivotViewer/PivotViewer.js +47 -207
  69. package/dist/esm/PivotViewer/PivotViewer.js.map +1 -1
  70. package/dist/esm/PivotViewer/components/pivot/visibility.d.ts +1 -1
  71. package/dist/esm/PivotViewer/components/pivot/visibility.d.ts.map +1 -1
  72. package/dist/esm/PivotViewer/components/pivot/visibility.js +24 -222
  73. package/dist/esm/PivotViewer/components/pivot/visibility.js.map +1 -1
  74. package/dist/esm/PivotViewer/components/pivot/visibilityHelpers.d.ts +114 -0
  75. package/dist/esm/PivotViewer/components/pivot/visibilityHelpers.d.ts.map +1 -0
  76. package/dist/esm/PivotViewer/components/pivot/visibilityHelpers.js +306 -0
  77. package/dist/esm/PivotViewer/components/pivot/visibilityHelpers.js.map +1 -0
  78. package/dist/esm/PivotViewer/hooks/useColorCssVariables.d.ts +9 -0
  79. package/dist/esm/PivotViewer/hooks/useColorCssVariables.d.ts.map +1 -0
  80. package/dist/esm/PivotViewer/hooks/useColorCssVariables.js +32 -0
  81. package/dist/esm/PivotViewer/hooks/useColorCssVariables.js.map +1 -0
  82. package/dist/esm/PivotViewer/hooks/usePivotViewerGrouping.d.ts +27 -0
  83. package/dist/esm/PivotViewer/hooks/usePivotViewerGrouping.d.ts.map +1 -0
  84. package/dist/esm/PivotViewer/hooks/usePivotViewerGrouping.js +40 -0
  85. package/dist/esm/PivotViewer/hooks/usePivotViewerGrouping.js.map +1 -0
  86. package/dist/esm/PivotViewer/hooks/usePivotViewerInteractions.d.ts +27 -0
  87. package/dist/esm/PivotViewer/hooks/usePivotViewerInteractions.d.ts.map +1 -0
  88. package/dist/esm/PivotViewer/hooks/usePivotViewerInteractions.js +46 -0
  89. package/dist/esm/PivotViewer/hooks/usePivotViewerInteractions.js.map +1 -0
  90. package/dist/esm/PivotViewer/hooks/useRawGrouping.d.ts +22 -0
  91. package/dist/esm/PivotViewer/hooks/useRawGrouping.d.ts.map +1 -0
  92. package/dist/esm/PivotViewer/hooks/useRawGrouping.js +56 -0
  93. package/dist/esm/PivotViewer/hooks/useRawGrouping.js.map +1 -0
  94. package/dist/esm/PivotViewer/hooks/useScrollPositionTracking.d.ts +12 -0
  95. package/dist/esm/PivotViewer/hooks/useScrollPositionTracking.d.ts.map +1 -0
  96. package/dist/esm/PivotViewer/hooks/useScrollPositionTracking.js +20 -0
  97. package/dist/esm/PivotViewer/hooks/useScrollPositionTracking.js.map +1 -0
  98. package/dist/esm/PivotViewer/hooks/useViewerLayout.d.ts +16 -0
  99. package/dist/esm/PivotViewer/hooks/useViewerLayout.d.ts.map +1 -0
  100. package/dist/esm/PivotViewer/hooks/useViewerLayout.js +29 -0
  101. package/dist/esm/PivotViewer/hooks/useViewerLayout.js.map +1 -0
  102. package/dist/esm/PivotViewer/hooks/useVisibleIds.d.ts +21 -0
  103. package/dist/esm/PivotViewer/hooks/useVisibleIds.d.ts.map +1 -0
  104. package/dist/esm/PivotViewer/hooks/useVisibleIds.js +34 -0
  105. package/dist/esm/PivotViewer/hooks/useVisibleIds.js.map +1 -0
  106. package/dist/esm/SchemaEditor/SchemaEditor.d.ts +4 -1
  107. package/dist/esm/SchemaEditor/SchemaEditor.d.ts.map +1 -1
  108. package/dist/esm/SchemaEditor/SchemaEditor.js.map +1 -1
  109. package/dist/esm/SchemaEditor/SchemaEditorLabels.d.ts +6 -0
  110. package/dist/esm/SchemaEditor/SchemaEditorLabels.d.ts.map +1 -1
  111. package/dist/esm/SchemaEditor/SchemaEditorLabels.js.map +1 -1
  112. package/dist/esm/SchemaEditor/Tree/GeneratedToggle.d.ts +11 -0
  113. package/dist/esm/SchemaEditor/Tree/GeneratedToggle.d.ts.map +1 -0
  114. package/dist/esm/SchemaEditor/Tree/GeneratedToggle.js +24 -0
  115. package/dist/esm/SchemaEditor/Tree/GeneratedToggle.js.map +1 -0
  116. package/dist/esm/SchemaEditor/Tree/Property.d.ts +6 -0
  117. package/dist/esm/SchemaEditor/Tree/Property.d.ts.map +1 -1
  118. package/dist/esm/SchemaEditor/Tree/Property.js.map +1 -1
  119. package/dist/esm/SchemaEditor/Tree/SchemaEditorContext.d.ts +2 -0
  120. package/dist/esm/SchemaEditor/Tree/SchemaEditorContext.d.ts.map +1 -1
  121. package/dist/esm/SchemaEditor/Tree/SchemaEditorContext.js.map +1 -1
  122. package/dist/esm/SchemaEditor/Tree/SchemaEditorParts.d.ts +2 -0
  123. package/dist/esm/SchemaEditor/Tree/SchemaEditorParts.d.ts.map +1 -1
  124. package/dist/esm/SchemaEditor/Tree/SchemaEditorParts.js.map +1 -1
  125. package/dist/esm/SchemaEditor/Tree/SchemaOrderedProperty.d.ts +12 -0
  126. package/dist/esm/SchemaEditor/Tree/SchemaOrderedProperty.d.ts.map +1 -0
  127. package/dist/esm/SchemaEditor/Tree/SchemaOrderedProperty.js +13 -0
  128. package/dist/esm/SchemaEditor/Tree/SchemaOrderedProperty.js.map +1 -0
  129. package/dist/esm/SchemaEditor/Tree/SchemaPropertyRow.d.ts.map +1 -1
  130. package/dist/esm/SchemaEditor/Tree/SchemaPropertyRow.js +2 -2
  131. package/dist/esm/SchemaEditor/Tree/SchemaPropertyRow.js.map +1 -1
  132. package/dist/esm/SchemaEditor/Tree/TreeSchemaEditor.d.ts +8 -1
  133. package/dist/esm/SchemaEditor/Tree/TreeSchemaEditor.d.ts.map +1 -1
  134. package/dist/esm/SchemaEditor/Tree/TreeSchemaEditor.js +15 -11
  135. package/dist/esm/SchemaEditor/Tree/TreeSchemaEditor.js.map +1 -1
  136. package/dist/esm/SchemaEditor/Tree/schemaConversion.d.ts +15 -3
  137. package/dist/esm/SchemaEditor/Tree/schemaConversion.d.ts.map +1 -1
  138. package/dist/esm/SchemaEditor/Tree/schemaConversion.js +83 -27
  139. package/dist/esm/SchemaEditor/Tree/schemaConversion.js.map +1 -1
  140. package/dist/esm/SchemaEditor/Tree/schemaInOriginalOrder.d.ts +3 -0
  141. package/dist/esm/SchemaEditor/Tree/schemaInOriginalOrder.d.ts.map +1 -0
  142. package/dist/esm/SchemaEditor/Tree/schemaInOriginalOrder.js +7 -0
  143. package/dist/esm/SchemaEditor/Tree/schemaInOriginalOrder.js.map +1 -0
  144. package/dist/esm/SchemaEditor/defaultSchemaEditorLabels.d.ts.map +1 -1
  145. package/dist/esm/SchemaEditor/defaultSchemaEditorLabels.js +3 -0
  146. package/dist/esm/SchemaEditor/defaultSchemaEditorLabels.js.map +1 -1
  147. package/dist/esm/SchemaEditor/index.d.ts +1 -1
  148. package/dist/esm/SchemaEditor/index.d.ts.map +1 -1
  149. package/dist/esm/SchemaEditor/index.js +1 -1
  150. package/dist/esm/configuration/CratisComponentsDefaults.d.ts.map +1 -1
  151. package/dist/esm/configuration/CratisComponentsDefaults.js +2 -0
  152. package/dist/esm/configuration/CratisComponentsDefaults.js.map +1 -1
  153. package/dist/esm/styles.DataPage.css +51 -6
  154. package/dist/esm/styles.DataTables.css +51 -6
  155. package/dist/esm/styles.SchemaEditor.css +58 -16
  156. package/dist/esm/styles.css +58 -16
  157. package/dist/esm/styles.renderer.builtin.css +51 -6
  158. package/dist/esm/types/parts.d.ts +6 -2
  159. package/dist/esm/types/parts.d.ts.map +1 -1
  160. package/dist/esm/types/parts.js +6 -2
  161. package/dist/esm/types/parts.js.map +1 -1
  162. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DataTableForQuery.js","sources":["../../../DataTables/DataTableForQuery.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 { DataTableParts } from './DataTableCore';\nimport type { Constructor } from '@cratis/fundamentals';\nimport { type IQueryFor, Paging } from '@cratis/arc/queries';\nimport { useQueryWithPaging } from '@cratis/arc.react/queries';\nimport type { ReactNode } from 'react';\nimport { DataTableCore } from './DataTableCore';\nimport {\n TablePaginator,\n type TablePaginatorParts,\n type TablePaginatorProps,\n} from './TablePaginator';\nimport type { DataTableFilterMeta } from './DataTableFilterMeta';\nimport type { DataTableSelectionChangeEvent } from './DataTableSelectionChangeEvent';\nimport { resolveDataTableStatus } from './resolveDataTableStatus';\n\n/**\n * Props for {@link DataTableForQuery}.\n *\n * @typeParam TQuery - The query class implementing `IQueryFor`.\n * @typeParam TDataType - The row type returned by the query.\n * @typeParam TArguments - The query's argument object type, or `object` if it takes none.\n */\nexport interface DataTableForQueryProps<\n TQuery extends IQueryFor<TDataType, TArguments> | IQueryFor<TDataType[], TArguments>,\n TDataType extends object,\n TArguments extends object,\n> {\n /**\n * Children to render — `<Column>` elements describing the visible columns.\n */\n children?: ReactNode;\n\n /**\n * The type of query to use\n */\n query: Constructor<TQuery>;\n\n /**\n * Optional Arguments to pass to the query\n */\n queryArguments?: TArguments;\n\n /**\n * The message to show when there is no data\n */\n emptyMessage: string;\n\n /** Message shown while loading without rows. */\n loadingMessage?: ReactNode;\n /** Message shown when the query fails. */\n failureMessage?: ReactNode;\n /** Message shown when access is denied. */\n unauthorizedMessage?: ReactNode;\n\n /**\n * The key to use for the data\n */\n dataKey?: string | undefined;\n\n /**\n * The current selection.\n */\n selection?: TDataType | undefined | null;\n\n /**\n * Callback for when the selection changes\n */\n onSelectionChange?(event: DataTableSelectionChangeEvent<TDataType>): void;\n\n /**\n * The row selection mode. Defaults to `'single'`.\n */\n selectionMode?: 'single' | 'multiple';\n\n /**\n * The currently selected rows, for `selectionMode='multiple'`.\n */\n selectedItems?: TDataType[];\n\n /**\n * Callback for when a multiple selection changes, with the full selected set.\n */\n onSelectedItemsChange?(items: TDataType[]): void;\n\n /**\n * Fields to use for global filtering\n */\n globalFilterFields?: string[] | undefined;\n\n /** Placeholder for the loaded-page search input. */\n globalSearchPlaceholder?: string;\n\n /** Accessible name for the loaded-page search input. */\n globalSearchAriaLabel?: string;\n\n /**\n * Default filters to use\n */\n defaultFilters?: DataTableFilterMeta;\n\n /**\n * @deprecated Filtering is always applied to the currently loaded page.\n * This compatibility prop no longer toggles behavior and does not change\n * server-reported pagination totals. Retained for source compatibility only.\n */\n clientFiltering?: boolean;\n\n /**\n * Extra CSS class name forwarded to the underlying DataTable root.\n */\n className?: string;\n\n /** Cratis-owned per-part attributes applied to the underlying table. */\n pt?: DataTableParts;\n\n /**\n * @deprecated Cratis parts always merge. Remove this renderer-era option.\n */\n ptOptions?: object;\n\n /**\n * @deprecated Components always uses consumer-owned CSS. Customize through `pt` and CSS instead.\n */\n unstyled?: boolean;\n\n /** Extra CSS class name forwarded to the paginator. */\n paginatorClassName?: string;\n\n /** Cratis-owned attributes for paginator parts. */\n paginatorPt?: TablePaginatorParts;\n\n /**\n * @deprecated Cratis paginator parts always merge. Remove this renderer-era option.\n */\n paginatorPtOptions?: object;\n\n /** Accessible names for the paginator controls. Override any to localize. */\n paginatorAriaLabels?: TablePaginatorProps['ariaLabels'];\n}\n\nconst paging = new Paging(0, 20);\n\n/**\n * A paged data table bound to a snapshot Cratis Arc query\n * (`IQueryFor<TDataType, TArguments>`). Subscribes via\n * `useQueryWithPaging` from `@cratis/arc.react/queries`, renders the result\n * page through the semantic Cratis-owned {@link DataTableCore}, and shows a\n * {@link TablePaginator} when the result set exceeds one page.\n *\n * ## What `TQuery` is\n *\n * `TQuery` is the auto-generated TypeScript class produced by the Arc proxy\n * generator from a C# read model's static query method. `dotnet build`\n * writes a `.ts` file per query with the right return type and a `use()`\n * hook; importing the class is all the connection-to-the-backend you need.\n *\n * ## Children\n *\n * Children are Cratis `<Column>` elements describing the visible columns —\n * `field`, `header`, custom `body` templates, and `sortable`.\n *\n * ```tsx\n * import { DataTableForQuery, Column } from '@cratis/components/DataTables';\n * import { AllAuthors } from './AllAuthors'; // proxy from C#\n *\n * <DataTableForQuery query={AllAuthors} emptyMessage=\"No authors\">\n * <Column field=\"name\" header=\"Name\" sortable />\n * <Column field=\"email\" header=\"Email\" />\n * </DataTableForQuery>\n * ```\n *\n * Use {@link DataTableForObservableQuery} for queries that should update in\n * real time as the underlying read model changes server-side. Use\n * {@link DataPage} for a higher-level layout that combines this table with\n * an action menubar, selection, and a details pane.\n *\n * ## Styling\n *\n * Forward `pt` / `ptOptions` / `unstyled` / `className` to the underlying\n * DataTable. See [pass-through cheat sheet](../../Documentation/Styling/pass-through.md).\n *\n * @typeParam TQuery - The query class (proxy generated from C# `IQueryFor`).\n * @typeParam TDataType - The row type returned by the query.\n * @typeParam TArguments - The query's argument object type.\n * @param props - {@link DataTableForQueryProps}.\n */\nexport const DataTableForQuery = <\n TQuery extends IQueryFor<TDataType, TArguments> | IQueryFor<TDataType[], TArguments>,\n TDataType extends object,\n TArguments extends object,\n>(\n props: DataTableForQueryProps<TQuery, TDataType, TArguments>,\n) => {\n const [result, , , setPage] = useQueryWithPaging(\n props.query,\n paging,\n props.queryArguments,\n );\n const totalItems = result.paging.totalItems;\n const pageCount = result.paging.totalPages;\n\n // SAFETY: Arc collection queries are row-typed while their runtime data is the current row array.\n const rows = result.data as unknown as TDataType[];\n const status = resolveDataTableStatus(result);\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n border: '1px solid var(--cratis-surface-border)',\n borderRadius: 'var(--cratis-border-radius)',\n overflow: 'hidden',\n }}\n >\n {/* The scroll container must be `DataTableCore`'s own bounded container rather than\n this wrapper. `.cratis-datatable__container` sets `overflow-x: auto`, and CSS\n computes the matching `overflow-y: visible` to `auto`, so that element is always\n the nearest scrolling ancestor for the `position: sticky` header cells. Scrolling\n out here would leave the header sticking to a container that never scrolls, so the\n header would not freeze. */}\n <div style={{ flex: 1, minHeight: 0, overflow: 'hidden' }}>\n <DataTableCore<TDataType>\n data={rows}\n dataKey={props.dataKey}\n emptyMessage={props.emptyMessage}\n status={status}\n loadingMessage={props.loadingMessage}\n failureMessage={props.failureMessage}\n unauthorizedMessage={props.unauthorizedMessage}\n selectionMode={props.selectionMode ?? 'single'}\n selection={props.selection}\n onSelectionChange={props.onSelectionChange}\n selectedItems={props.selectedItems}\n onSelectedItemsChange={props.onSelectedItemsChange}\n globalFilterFields={props.globalFilterFields}\n globalSearchPlaceholder={props.globalSearchPlaceholder}\n globalSearchAriaLabel={props.globalSearchAriaLabel}\n defaultFilters={props.defaultFilters}\n scrollable\n scrollHeight='100%'\n className={props.className}\n style={{ minWidth: '100%' }}\n pt={props.pt}\n ptOptions={props.ptOptions}\n unstyled={props.unstyled}\n >\n {props.children}\n </DataTableCore>\n </div>\n\n {totalItems > 0 && pageCount > 1 && (\n <div\n style={{\n borderTop: '1px solid var(--cratis-surface-border)',\n flexShrink: 0,\n }}\n >\n <TablePaginator\n page={result.paging.page}\n pageCount={pageCount}\n onPageChange={setPage}\n totalItems={totalItems}\n pageSize={paging.pageSize}\n className={props.paginatorClassName}\n ariaLabels={props.paginatorAriaLabels}\n pt={props.paginatorPt}\n ptOptions={props.paginatorPtOptions}\n />\n </div>\n )}\n </div>\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;AA+IA,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;AA8CzB,MAAM,iBAAiB,GAAG,CAK7B,KAA4D,KAC5D;IACA,MAAM,CAAC,MAAM,MAAM,OAAO,CAAC,GAAG,kBAAkB,CAC5C,KAAK,CAAC,KAAK,EACX,MAAM,EACN,KAAK,CAAC,cAAc,CACvB;AACD,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU;AAC3C,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU;AAG1C,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAA8B;AAClD,IAAA,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC;IAE7C,QACIA,IAAA,CAAA,KAAA,EAAA,EACI,KAAK,EAAE;AACH,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,aAAa,EAAE,QAAQ;AACvB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,MAAM,EAAE,wCAAwC;AAChD,YAAA,YAAY,EAAE,6BAA6B;AAC3C,YAAA,QAAQ,EAAE,QAAQ;AACrB,SAAA,EAAA,QAAA,EAAA,CAQDC,aAAK,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,YACrDA,GAAA,CAAC,aAAa,EAAA,EACV,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAC9C,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,QAAQ,EAC9C,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAC1C,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,EAClD,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,EAC5C,uBAAuB,EAAE,KAAK,CAAC,uBAAuB,EACtD,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,EAClD,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,UAAU,EAAA,IAAA,EACV,YAAY,EAAC,MAAM,EACnB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAC3B,EAAE,EAAE,KAAK,CAAC,EAAE,EACZ,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,YAEvB,KAAK,CAAC,QAAQ,EAAA,CACH,EAAA,CACd,EAEL,UAAU,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,KAC5BA,GAAA,CAAA,KAAA,EAAA,EACI,KAAK,EAAE;AACH,oBAAA,SAAS,EAAE,wCAAwC;AACnD,oBAAA,UAAU,EAAE,CAAC;iBAChB,EAAA,QAAA,EAEDA,GAAA,CAAC,cAAc,EAAA,EACX,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EACxB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,OAAO,EACrB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,SAAS,EAAE,KAAK,CAAC,kBAAkB,EACnC,UAAU,EAAE,KAAK,CAAC,mBAAmB,EACrC,EAAE,EAAE,KAAK,CAAC,WAAW,EACrB,SAAS,EAAE,KAAK,CAAC,kBAAkB,EAAA,CACrC,EAAA,CACA,CACT,CAAA,EAAA,CACC;AAEd;;"}
1
+ {"version":3,"file":"DataTableForQuery.js","sources":["../../../DataTables/DataTableForQuery.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 { DataTableParts } from './DataTableCore';\nimport type { Constructor } from '@cratis/fundamentals';\nimport { type IQueryFor, Paging } from '@cratis/arc/queries';\nimport { useQueryWithPaging } from '@cratis/arc.react/queries';\nimport type { ReactNode } from 'react';\nimport { DataTableCore } from './DataTableCore';\nimport {\n TablePaginator,\n type TablePaginatorParts,\n type TablePaginatorProps,\n} from './TablePaginator';\nimport type { DataTableFilterMeta } from './DataTableFilterMeta';\nimport type { DataTableSelectionChangeEvent } from './DataTableSelectionChangeEvent';\nimport { resolveDataTableStatus } from './resolveDataTableStatus';\n\n/**\n * Props for {@link DataTableForQuery}.\n *\n * @typeParam TQuery - The query class implementing `IQueryFor`.\n * @typeParam TDataType - The row type returned by the query.\n * @typeParam TArguments - The query's argument object type, or `object` if it takes none.\n */\nexport interface DataTableForQueryProps<\n TQuery extends IQueryFor<TDataType, TArguments> | IQueryFor<TDataType[], TArguments>,\n TDataType extends object,\n TArguments extends object,\n> {\n /**\n * Children to render — `<Column>` elements describing the visible columns.\n */\n children?: ReactNode;\n\n /**\n * The type of query to use\n */\n query: Constructor<TQuery>;\n\n /**\n * Optional Arguments to pass to the query\n */\n queryArguments?: TArguments;\n\n /**\n * The message to show when there is no data\n */\n emptyMessage: string;\n\n /** Message shown while loading without rows. */\n loadingMessage?: ReactNode;\n /** Message shown when the query fails. */\n failureMessage?: ReactNode;\n /** Message shown when access is denied. */\n unauthorizedMessage?: ReactNode;\n\n /**\n * The key to use for the data\n */\n dataKey?: string | undefined;\n\n /**\n * The current selection.\n */\n selection?: TDataType | undefined | null;\n\n /**\n * Callback for when the selection changes\n */\n onSelectionChange?(event: DataTableSelectionChangeEvent<TDataType>): void;\n\n /**\n * The row selection mode. Defaults to `'single'`.\n */\n selectionMode?: 'single' | 'multiple';\n\n /**\n * The currently selected rows, for `selectionMode='multiple'`.\n */\n selectedItems?: TDataType[];\n\n /**\n * Callback for when a multiple selection changes, with the full selected set.\n */\n onSelectedItemsChange?(items: TDataType[]): void;\n\n /**\n * Fields to use for global filtering\n */\n globalFilterFields?: string[] | undefined;\n\n /** Placeholder for the loaded-page search input. */\n globalSearchPlaceholder?: string;\n\n /** Accessible name for the loaded-page search input. */\n globalSearchAriaLabel?: string;\n\n /**\n * Default filters to use\n */\n defaultFilters?: DataTableFilterMeta;\n\n /**\n * @deprecated Filtering is always applied to the currently loaded page.\n * This compatibility prop no longer toggles behavior and does not change\n * server-reported pagination totals. Retained for source compatibility only.\n */\n clientFiltering?: boolean;\n\n /**\n * Extra CSS class name forwarded to the underlying DataTable root.\n */\n className?: string;\n\n /** Cratis-owned per-part attributes applied to the underlying table. */\n pt?: DataTableParts;\n\n /**\n * @deprecated Cratis parts always merge. Remove this renderer-era option.\n */\n ptOptions?: object;\n\n /**\n * @deprecated Components always uses consumer-owned CSS. Customize through `pt` and CSS instead.\n */\n unstyled?: boolean;\n\n /** Shows numbered page buttons in the paginator. Defaults to false. */\n pageLinks?: TablePaginatorProps['pageLinks'];\n\n /** Extra CSS class name forwarded to the paginator. */\n paginatorClassName?: string;\n\n /** Cratis-owned attributes for paginator parts. */\n paginatorPt?: TablePaginatorParts;\n\n /**\n * @deprecated Cratis paginator parts always merge. Remove this renderer-era option.\n */\n paginatorPtOptions?: object;\n\n /** Accessible names for the paginator controls. Override any to localize. */\n paginatorAriaLabels?: TablePaginatorProps['ariaLabels'];\n}\n\nconst paging = new Paging(0, 20);\n\n/**\n * A paged data table bound to a snapshot Cratis Arc query\n * (`IQueryFor<TDataType, TArguments>`). Subscribes via\n * `useQueryWithPaging` from `@cratis/arc.react/queries`, renders the result\n * page through the semantic Cratis-owned {@link DataTableCore}, and shows a\n * {@link TablePaginator} when the result set exceeds one page.\n *\n * ## What `TQuery` is\n *\n * `TQuery` is the auto-generated TypeScript class produced by the Arc proxy\n * generator from a C# read model's static query method. `dotnet build`\n * writes a `.ts` file per query with the right return type and a `use()`\n * hook; importing the class is all the connection-to-the-backend you need.\n *\n * ## Children\n *\n * Children are Cratis `<Column>` elements describing the visible columns —\n * `field`, `header`, custom `body` templates, and `sortable`.\n *\n * ```tsx\n * import { DataTableForQuery, Column } from '@cratis/components/DataTables';\n * import { AllAuthors } from './AllAuthors'; // proxy from C#\n *\n * <DataTableForQuery query={AllAuthors} emptyMessage=\"No authors\">\n * <Column field=\"name\" header=\"Name\" sortable />\n * <Column field=\"email\" header=\"Email\" />\n * </DataTableForQuery>\n * ```\n *\n * Use {@link DataTableForObservableQuery} for queries that should update in\n * real time as the underlying read model changes server-side. Use\n * {@link DataPage} for a higher-level layout that combines this table with\n * an action menubar, selection, and a details pane.\n *\n * ## Styling\n *\n * Forward `pt` / `ptOptions` / `unstyled` / `className` to the underlying\n * DataTable. See [pass-through cheat sheet](../../Documentation/Styling/pass-through.md).\n *\n * @typeParam TQuery - The query class (proxy generated from C# `IQueryFor`).\n * @typeParam TDataType - The row type returned by the query.\n * @typeParam TArguments - The query's argument object type.\n * @param props - {@link DataTableForQueryProps}.\n */\nexport const DataTableForQuery = <\n TQuery extends IQueryFor<TDataType, TArguments> | IQueryFor<TDataType[], TArguments>,\n TDataType extends object,\n TArguments extends object,\n>(\n props: DataTableForQueryProps<TQuery, TDataType, TArguments>,\n) => {\n const [result, , , setPage] = useQueryWithPaging(\n props.query,\n paging,\n props.queryArguments,\n );\n const totalItems = result.paging.totalItems;\n const pageCount = result.paging.totalPages;\n\n // SAFETY: Arc collection queries are row-typed while their runtime data is the current row array.\n const rows = result.data as unknown as TDataType[];\n const status = resolveDataTableStatus(result);\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n border: '1px solid var(--cratis-surface-border)',\n borderRadius: 'var(--cratis-border-radius)',\n overflow: 'hidden',\n }}\n >\n {/* The scroll container must be `DataTableCore`'s own bounded container rather than\n this wrapper. `.cratis-datatable__container` sets `overflow-x: auto`, and CSS\n computes the matching `overflow-y: visible` to `auto`, so that element is always\n the nearest scrolling ancestor for the `position: sticky` header cells. Scrolling\n out here would leave the header sticking to a container that never scrolls, so the\n header would not freeze. */}\n <div style={{ flex: 1, minHeight: 0, overflow: 'hidden' }}>\n <DataTableCore<TDataType>\n data={rows}\n dataKey={props.dataKey}\n emptyMessage={props.emptyMessage}\n status={status}\n loadingMessage={props.loadingMessage}\n failureMessage={props.failureMessage}\n unauthorizedMessage={props.unauthorizedMessage}\n selectionMode={props.selectionMode ?? 'single'}\n selection={props.selection}\n onSelectionChange={props.onSelectionChange}\n selectedItems={props.selectedItems}\n onSelectedItemsChange={props.onSelectedItemsChange}\n globalFilterFields={props.globalFilterFields}\n globalSearchPlaceholder={props.globalSearchPlaceholder}\n globalSearchAriaLabel={props.globalSearchAriaLabel}\n defaultFilters={props.defaultFilters}\n scrollable\n scrollHeight='100%'\n className={props.className}\n style={{ minWidth: '100%' }}\n pt={props.pt}\n ptOptions={props.ptOptions}\n unstyled={props.unstyled}\n >\n {props.children}\n </DataTableCore>\n </div>\n\n {totalItems > 0 && pageCount > 1 && (\n <div\n style={{\n borderTop: '1px solid var(--cratis-surface-border)',\n flexShrink: 0,\n }}\n >\n <TablePaginator\n page={result.paging.page}\n pageCount={pageCount}\n onPageChange={setPage}\n totalItems={totalItems}\n pageSize={paging.pageSize}\n pageLinks={props.pageLinks}\n className={props.paginatorClassName}\n ariaLabels={props.paginatorAriaLabels}\n pt={props.paginatorPt}\n ptOptions={props.paginatorPtOptions}\n />\n </div>\n )}\n </div>\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /** A numbered page or a non-interactive gap in {@link paginatorPages}. */
2
+ export type PaginatorPageItem = {
3
+ /** Identifies a numbered page. */
4
+ kind: 'page';
5
+ /** The zero-based page index. */
6
+ page: number;
7
+ } | {
8
+ /** Identifies a gap of at least two pages. */
9
+ kind: 'ellipsis';
10
+ /** Stable identity for the gap before or after the current page window. */
11
+ key: 'start' | 'end';
12
+ };
13
+ //# sourceMappingURL=PaginatorPageItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaginatorPageItem.d.ts","sourceRoot":"","sources":["../../../DataTables/PaginatorPageItem.ts"],"names":[],"mappings":"AAGA,0EAA0E;AAC1E,MAAM,MAAM,iBAAiB,GACvB;IACI,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;CAChB,GACD;IACI,8CAA8C;IAC9C,IAAI,EAAE,UAAU,CAAC;IACjB,2EAA2E;IAC3E,GAAG,EAAE,OAAO,GAAG,KAAK,CAAC;CACxB,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ export {};
4
+ //# sourceMappingURL=PaginatorPageItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaginatorPageItem.js","sourceRoot":"","sources":["../../../DataTables/PaginatorPageItem.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG","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\n/** A numbered page or a non-interactive gap in {@link paginatorPages}. */\nexport type PaginatorPageItem =\n | {\n /** Identifies a numbered page. */\n kind: 'page';\n /** The zero-based page index. */\n page: number;\n }\n | {\n /** Identifies a gap of at least two pages. */\n kind: 'ellipsis';\n /** Stable identity for the gap before or after the current page window. */\n key: 'start' | 'end';\n };\n"]}
@@ -1,4 +1,4 @@
1
- import type { HTMLAttributes } from 'react';
1
+ import type { ButtonHTMLAttributes, HTMLAttributes } from 'react';
2
2
  import type { ButtonParts } from '../Common/Button.js';
3
3
  /** Stable Cratis-owned paginator parts. */
4
4
  export interface TablePaginatorParts {
@@ -8,6 +8,12 @@ export interface TablePaginatorParts {
8
8
  range?: HTMLAttributes<HTMLSpanElement>;
9
9
  /** Current page / page-count report. */
10
10
  info?: HTMLAttributes<HTMLSpanElement>;
11
+ /** Numbered-page group container. */
12
+ pages?: HTMLAttributes<HTMLDivElement>;
13
+ /** Each numbered-page native button. */
14
+ page?: ButtonHTMLAttributes<HTMLButtonElement>;
15
+ /** Non-interactive gap between numbered pages. */
16
+ ellipsis?: HTMLAttributes<HTMLSpanElement>;
11
17
  /** First-page Button parts. */
12
18
  first?: ButtonParts;
13
19
  /** Previous-page Button parts. */
@@ -29,6 +35,16 @@ export interface TablePaginatorProps {
29
35
  totalItems?: number;
30
36
  /** Rows per page — enables the "X–Y of Z" range report. */
31
37
  pageSize?: number;
38
+ /**
39
+ * Shows numbered page buttons instead of the page-count report. Defaults to false.
40
+ * Pass true for one sibling and one boundary page, or customize the window sizes.
41
+ */
42
+ pageLinks?: boolean | {
43
+ /** Number of pages on each side of the current page. Defaults to 1. */
44
+ siblings?: number;
45
+ /** Number of pages at each end of the range. Defaults to 1. */
46
+ boundaries?: number;
47
+ };
32
48
  /** Accessible names for the paginator and its controls. Override any to localize. */
33
49
  ariaLabels?: {
34
50
  navigation?: string;
@@ -36,6 +52,10 @@ export interface TablePaginatorProps {
36
52
  previous?: string;
37
53
  next?: string;
38
54
  last?: string;
55
+ /** Builds a numbered button's accessible name from its one-based page number. */
56
+ page?: (page: number) => string;
57
+ /** Accessible name for the numbered-page group. */
58
+ pages?: string;
39
59
  };
40
60
  /** Extra class name for the paginator container. */
41
61
  className?: string;
@@ -47,7 +67,7 @@ export interface TablePaginatorProps {
47
67
  ptOptions?: object;
48
68
  }
49
69
  /**
50
- * A minimal first/previous/next/last paginator. The Cratis data tables drive paging through Arc's
70
+ * A first/previous/next/last paginator with optional numbered page links. The Cratis data tables drive paging through Arc's
51
71
  * paging hook and receive requested zero-based pages through `onPageChange`.
52
72
  */
53
73
  export declare const TablePaginator: (props: TablePaginatorProps) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
@@ -1 +1 @@
1
- {"version":3,"file":"TablePaginator.d.ts","sourceRoot":"","sources":["../../../DataTables/TablePaginator.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAkB,CAAC;AAMpD,2CAA2C;AAC3C,MAAM,WAAW,mBAAmB;IAChC,kCAAkC;IAClC,IAAI,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;IACtC,gCAAgC;IAChC,KAAK,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IACxC,wCAAwC;IACxC,IAAI,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IACvC,+BAA+B;IAC/B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAChC,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,UAAU,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,EAAE,CAAC,EAAE,mBAAmB,CAAC;IACzB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAQD;;;GAGG;AACH,eAAO,MAAM,cAAc,UAAW,mBAAmB,+FAMxD,CAAC"}
1
+ {"version":3,"file":"TablePaginator.d.ts","sourceRoot":"","sources":["../../../DataTables/TablePaginator.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAkB,CAAC;AAMpD,2CAA2C;AAC3C,MAAM,WAAW,mBAAmB;IAChC,kCAAkC;IAClC,IAAI,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;IACtC,gCAAgC;IAChC,KAAK,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IACxC,wCAAwC;IACxC,IAAI,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IACvC,qCAAqC;IACrC,KAAK,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;IACvC,wCAAwC;IACxC,IAAI,CAAC,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IAC/C,kDAAkD;IAClD,QAAQ,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAC3C,+BAA+B;IAC/B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAChC,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,SAAS,CAAC,EACJ,OAAO,GACP;QACI,uEAAuE;QACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,+DAA+D;QAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACR,qFAAqF;IACrF,UAAU,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,iFAAiF;QACjF,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;QAChC,mDAAmD;QACnD,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,EAAE,CAAC,EAAE,mBAAmB,CAAC;IACzB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAQD;;;GAGG;AACH,eAAO,MAAM,cAAc,UAAW,mBAAmB,+FAMxD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TablePaginator.js","sources":["../../../DataTables/TablePaginator.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { HTMLAttributes } from 'react';\nimport type { ButtonParts } from '../Common/Button';\nimport { unstable_useSlot } from '../renderer/RendererContext';\nimport { renderSlot } from '../renderer/renderSlot';\nimport type { unstable_SlotDeclaration } from '../renderer/slots';\nimport { TablePaginatorImplementation } from './TablePaginatorImplementation';\n\n/** Stable Cratis-owned paginator parts. */\nexport interface TablePaginatorParts {\n /** Pagination navigation root. */\n root?: HTMLAttributes<HTMLDivElement>;\n /** Loaded item-range report. */\n range?: HTMLAttributes<HTMLSpanElement>;\n /** Current page / page-count report. */\n info?: HTMLAttributes<HTMLSpanElement>;\n /** First-page Button parts. */\n first?: ButtonParts;\n /** Previous-page Button parts. */\n previous?: ButtonParts;\n /** Next-page Button parts. */\n next?: ButtonParts;\n /** Last-page Button parts. */\n last?: ButtonParts;\n}\n\n/** Props for {@link TablePaginator}. */\nexport interface TablePaginatorProps {\n /** The current page, zero-based. */\n page: number;\n /** The total number of pages. */\n pageCount: number;\n /** Invoked with the requested zero-based page. */\n onPageChange: (page: number) => void;\n /** Total number of records across all pages — enables the \"X–Y of Z\" range report. */\n totalItems?: number;\n /** Rows per page — enables the \"X–Y of Z\" range report. */\n pageSize?: number;\n /** Accessible names for the paginator and its controls. Override any to localize. */\n ariaLabels?: {\n navigation?: string;\n first?: string;\n previous?: string;\n next?: string;\n last?: string;\n };\n /** Extra class name for the paginator container. */\n className?: string;\n /** Cratis-owned paginator part attributes. */\n pt?: TablePaginatorParts;\n /**\n * @deprecated Cratis parts always merge. Remove this renderer-era option.\n */\n ptOptions?: object;\n}\n\nconst coreTablePaginatorDeclaration = Object.freeze({\n mode: 'atomic',\n fidelity: 'native',\n render: TablePaginatorImplementation,\n}) satisfies unstable_SlotDeclaration<'datatables.paginator'>;\n\n/**\n * A minimal first/previous/next/last paginator. The Cratis data tables drive paging through Arc's\n * paging hook and receive requested zero-based pages through `onPageChange`.\n */\nexport const TablePaginator = (props: TablePaginatorProps) => {\n const declaration = unstable_useSlot(\n 'datatables.paginator',\n coreTablePaginatorDeclaration,\n );\n return renderSlot(declaration, props);\n};\n"],"names":[],"mappings":";;;;AA0DA,MAAM,6BAA6B,GAAG,MAAM,CAAC,MAAM,CAAC;AAChD,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,MAAM,EAAE,4BAA4B;AACvC,CAAA,CAA4D;AAMtD,MAAM,cAAc,GAAG,CAAC,KAA0B,KAAI;IACzD,MAAM,WAAW,GAAG,gBAAgB,CAChC,sBAAsB,EACtB,6BAA6B,CAChC;AACD,IAAA,OAAO,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC;AACzC;;"}
1
+ {"version":3,"file":"TablePaginator.js","sources":["../../../DataTables/TablePaginator.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 { ButtonHTMLAttributes, HTMLAttributes } from 'react';\nimport type { ButtonParts } from '../Common/Button';\nimport { unstable_useSlot } from '../renderer/RendererContext';\nimport { renderSlot } from '../renderer/renderSlot';\nimport type { unstable_SlotDeclaration } from '../renderer/slots';\nimport { TablePaginatorImplementation } from './TablePaginatorImplementation';\n\n/** Stable Cratis-owned paginator parts. */\nexport interface TablePaginatorParts {\n /** Pagination navigation root. */\n root?: HTMLAttributes<HTMLDivElement>;\n /** Loaded item-range report. */\n range?: HTMLAttributes<HTMLSpanElement>;\n /** Current page / page-count report. */\n info?: HTMLAttributes<HTMLSpanElement>;\n /** Numbered-page group container. */\n pages?: HTMLAttributes<HTMLDivElement>;\n /** Each numbered-page native button. */\n page?: ButtonHTMLAttributes<HTMLButtonElement>;\n /** Non-interactive gap between numbered pages. */\n ellipsis?: HTMLAttributes<HTMLSpanElement>;\n /** First-page Button parts. */\n first?: ButtonParts;\n /** Previous-page Button parts. */\n previous?: ButtonParts;\n /** Next-page Button parts. */\n next?: ButtonParts;\n /** Last-page Button parts. */\n last?: ButtonParts;\n}\n\n/** Props for {@link TablePaginator}. */\nexport interface TablePaginatorProps {\n /** The current page, zero-based. */\n page: number;\n /** The total number of pages. */\n pageCount: number;\n /** Invoked with the requested zero-based page. */\n onPageChange: (page: number) => void;\n /** Total number of records across all pages — enables the \"X–Y of Z\" range report. */\n totalItems?: number;\n /** Rows per page — enables the \"X–Y of Z\" range report. */\n pageSize?: number;\n /**\n * Shows numbered page buttons instead of the page-count report. Defaults to false.\n * Pass true for one sibling and one boundary page, or customize the window sizes.\n */\n pageLinks?:\n | boolean\n | {\n /** Number of pages on each side of the current page. Defaults to 1. */\n siblings?: number;\n /** Number of pages at each end of the range. Defaults to 1. */\n boundaries?: number;\n };\n /** Accessible names for the paginator and its controls. Override any to localize. */\n ariaLabels?: {\n navigation?: string;\n first?: string;\n previous?: string;\n next?: string;\n last?: string;\n /** Builds a numbered button's accessible name from its one-based page number. */\n page?: (page: number) => string;\n /** Accessible name for the numbered-page group. */\n pages?: string;\n };\n /** Extra class name for the paginator container. */\n className?: string;\n /** Cratis-owned paginator part attributes. */\n pt?: TablePaginatorParts;\n /**\n * @deprecated Cratis parts always merge. Remove this renderer-era option.\n */\n ptOptions?: object;\n}\n\nconst coreTablePaginatorDeclaration = Object.freeze({\n mode: 'atomic',\n fidelity: 'native',\n render: TablePaginatorImplementation,\n}) satisfies unstable_SlotDeclaration<'datatables.paginator'>;\n\n/**\n * A first/previous/next/last paginator with optional numbered page links. The Cratis data tables drive paging through Arc's\n * paging hook and receive requested zero-based pages through `onPageChange`.\n */\nexport const TablePaginator = (props: TablePaginatorProps) => {\n const declaration = unstable_useSlot(\n 'datatables.paginator',\n coreTablePaginatorDeclaration,\n );\n return renderSlot(declaration, props);\n};\n"],"names":[],"mappings":";;;;AAgFA,MAAM,6BAA6B,GAAG,MAAM,CAAC,MAAM,CAAC;AAChD,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,MAAM,EAAE,4BAA4B;AACvC,CAAA,CAA4D;AAMtD,MAAM,cAAc,GAAG,CAAC,KAA0B,KAAI;IACzD,MAAM,WAAW,GAAG,gBAAgB,CAChC,sBAAsB,EACtB,6BAA6B,CAChC;AACD,IAAA,OAAO,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC;AACzC;;"}
@@ -5,5 +5,5 @@ import type { TablePaginatorProps } from './TablePaginator.js';
5
5
  * table's internal pagination — so this renders the page controls wired to a
6
6
  * simple `onPageChange(pageIndex)` callback.
7
7
  */
8
- export declare const TablePaginatorImplementation: ({ page, pageCount, onPageChange, totalItems, pageSize, ariaLabels, className, pt, }: TablePaginatorProps) => import("react").JSX.Element;
8
+ export declare const TablePaginatorImplementation: ({ page, pageCount, onPageChange, totalItems, pageSize, pageLinks, ariaLabels, className, pt, }: TablePaginatorProps) => import("react").JSX.Element;
9
9
  //# sourceMappingURL=TablePaginatorImplementation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TablePaginatorImplementation.d.ts","sourceRoot":"","sources":["../../../DataTables/TablePaginatorImplementation.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAkB,CAAC;AAG5D;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,wFAStC,mBAAmB,gCAoFrB,CAAC"}
1
+ {"version":3,"file":"TablePaginatorImplementation.d.ts","sourceRoot":"","sources":["../../../DataTables/TablePaginatorImplementation.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAkB,CAAC;AAI5D;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,mGAUtC,mBAAmB,gCAqGrB,CAAC"}
@@ -9,8 +9,9 @@ import { useCratisIcon } from '../configuration/useCratisIcon.js';
9
9
  import '../Notifications/toast.js';
10
10
  import '../renderer/RendererContext.js';
11
11
  import { paginatorRange } from './paginatorRange.js';
12
+ import { TablePaginatorPages } from './TablePaginatorPages.js';
12
13
 
13
- const TablePaginatorImplementation = ({ page, pageCount, onPageChange, totalItems, pageSize, ariaLabels, className, pt, }) => {
14
+ const TablePaginatorImplementation = ({ page, pageCount, onPageChange, totalItems, pageSize, pageLinks = false, ariaLabels, className, pt, }) => {
14
15
  const { messages } = useCratisComponentsConfig();
15
16
  const paginatorMessages = messages?.paginator;
16
17
  const icon = useCratisIcon();
@@ -23,14 +24,18 @@ const TablePaginatorImplementation = ({ page, pageCount, onPageChange, totalItem
23
24
  previous: ariaLabels?.previous ?? paginatorMessages?.previous ?? 'Previous page',
24
25
  next: ariaLabels?.next ?? paginatorMessages?.next ?? 'Next page',
25
26
  last: ariaLabels?.last ?? paginatorMessages?.last ?? 'Last page',
27
+ page: ariaLabels?.page ??
28
+ paginatorMessages?.page ??
29
+ ((number) => `Page ${number}`),
30
+ pages: ariaLabels?.pages ?? paginatorMessages?.pages ?? 'Pages',
26
31
  };
27
32
  return (jsxs("div", { ...pt?.root, role: 'navigation', "aria-label": labels.navigation, "data-cratis-part": 'root', className: ['cratis-table-paginator', pt?.root?.className, className]
28
33
  .filter(Boolean)
29
34
  .join(' '), children: [rangeReport && (jsx("span", { ...pt?.range, className: ['cratis-table-paginator-range', pt?.range?.className]
30
35
  .filter(Boolean)
31
- .join(' '), "data-cratis-part": 'range', children: rangeReport })), jsx(Button, { variant: 'ghost', disabled: isFirst, onClick: () => onPageChange(0), "aria-label": labels.first, pt: pt?.first, children: jsx("span", { "aria-hidden": 'true', children: "\u00AB" }) }), jsx(Button, { variant: 'ghost', disabled: isFirst, onClick: () => onPageChange(page - 1), "aria-label": labels.previous, pt: pt?.previous, children: jsx("span", { "aria-hidden": 'true', children: icon('previous', '‹') }) }), jsxs("span", { ...pt?.info, className: ['cratis-table-paginator-info', pt?.info?.className]
36
+ .join(' '), "data-cratis-part": 'range', children: rangeReport })), jsx(Button, { variant: 'ghost', disabled: isFirst, onClick: () => onPageChange(0), "aria-label": labels.first, pt: pt?.first, children: jsx("span", { "aria-hidden": 'true', children: "\u00AB" }) }), jsx(Button, { variant: 'ghost', disabled: isFirst, onClick: () => onPageChange(page - 1), "aria-label": labels.previous, pt: pt?.previous, children: jsx("span", { "aria-hidden": 'true', children: icon('previous', '‹') }) }), pageLinks ? (jsx(TablePaginatorPages, { page: page, pageCount: pageCount, pageLinks: pageLinks, onPageChange: onPageChange, pt: pt, pageLabel: labels.page, pagesLabel: labels.pages })) : (jsxs("span", { ...pt?.info, className: ['cratis-table-paginator-info', pt?.info?.className]
32
37
  .filter(Boolean)
33
- .join(' '), "data-cratis-part": 'info', children: [page + 1, " / ", Math.max(pageCount, 1)] }), jsx(Button, { variant: 'ghost', disabled: isLast, onClick: () => onPageChange(page + 1), "aria-label": labels.next, pt: pt?.next, children: jsx("span", { "aria-hidden": 'true', children: icon('next', '›') }) }), jsx(Button, { variant: 'ghost', disabled: isLast, onClick: () => onPageChange(pageCount - 1), "aria-label": labels.last, pt: pt?.last, children: jsx("span", { "aria-hidden": 'true', children: "\u00BB" }) })] }));
38
+ .join(' '), "data-cratis-part": 'info', children: [page + 1, " / ", Math.max(pageCount, 1)] })), jsx(Button, { variant: 'ghost', disabled: isLast, onClick: () => onPageChange(page + 1), "aria-label": labels.next, pt: pt?.next, children: jsx("span", { "aria-hidden": 'true', children: icon('next', '›') }) }), jsx(Button, { variant: 'ghost', disabled: isLast, onClick: () => onPageChange(pageCount - 1), "aria-label": labels.last, pt: pt?.last, children: jsx("span", { "aria-hidden": 'true', children: "\u00BB" }) })] }));
34
39
  };
35
40
 
36
41
  export { TablePaginatorImplementation };
@@ -1 +1 @@
1
- {"version":3,"file":"TablePaginatorImplementation.js","sources":["../../../DataTables/TablePaginatorImplementation.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 { Button } from '../Common/Button';\nimport { useCratisComponentsConfig } from '../Common/CratisComponentsProvider';\nimport { useCratisIcon } from '../configuration/useCratisIcon';\nimport type { TablePaginatorProps } from './TablePaginator';\nimport { paginatorRange } from './paginatorRange';\n\n/**\n * A minimal first/previous/next/last paginator. The\n * Cratis data tables drive paging through Arc's paging hook rather than the\n * table's internal pagination — so this renders the page controls wired to a\n * simple `onPageChange(pageIndex)` callback.\n */\nexport const TablePaginatorImplementation = ({\n page,\n pageCount,\n onPageChange,\n totalItems,\n pageSize,\n ariaLabels,\n className,\n pt,\n}: TablePaginatorProps) => {\n const { messages } = useCratisComponentsConfig();\n const paginatorMessages = messages?.paginator;\n const icon = useCratisIcon();\n const isFirst = page <= 0;\n const isLast = page >= pageCount - 1;\n const rangeReport = paginatorRange(page, pageSize, totalItems);\n const labels = {\n navigation:\n ariaLabels?.navigation ?? paginatorMessages?.navigation ?? 'Pagination',\n first: ariaLabels?.first ?? paginatorMessages?.first ?? 'First page',\n previous: ariaLabels?.previous ?? paginatorMessages?.previous ?? 'Previous page',\n next: ariaLabels?.next ?? paginatorMessages?.next ?? 'Next page',\n last: ariaLabels?.last ?? paginatorMessages?.last ?? 'Last page',\n };\n\n return (\n <div\n {...pt?.root}\n role='navigation'\n aria-label={labels.navigation}\n data-cratis-part='root'\n className={['cratis-table-paginator', pt?.root?.className, className]\n .filter(Boolean)\n .join(' ')}\n >\n {rangeReport && (\n <span\n {...pt?.range}\n className={['cratis-table-paginator-range', pt?.range?.className]\n .filter(Boolean)\n .join(' ')}\n data-cratis-part='range'\n >\n {rangeReport}\n </span>\n )}\n <Button\n variant='ghost'\n disabled={isFirst}\n onClick={() => onPageChange(0)}\n aria-label={labels.first}\n pt={pt?.first}\n >\n <span aria-hidden='true'>«</span>\n </Button>\n <Button\n variant='ghost'\n disabled={isFirst}\n onClick={() => onPageChange(page - 1)}\n aria-label={labels.previous}\n pt={pt?.previous}\n >\n <span aria-hidden='true'>{icon('previous', '‹')}</span>\n </Button>\n <span\n {...pt?.info}\n className={['cratis-table-paginator-info', pt?.info?.className]\n .filter(Boolean)\n .join(' ')}\n data-cratis-part='info'\n >\n {page + 1} / {Math.max(pageCount, 1)}\n </span>\n <Button\n variant='ghost'\n disabled={isLast}\n onClick={() => onPageChange(page + 1)}\n aria-label={labels.next}\n pt={pt?.next}\n >\n <span aria-hidden='true'>{icon('next', '›')}</span>\n </Button>\n <Button\n variant='ghost'\n disabled={isLast}\n onClick={() => onPageChange(pageCount - 1)}\n aria-label={labels.last}\n pt={pt?.last}\n >\n <span aria-hidden='true'>»</span>\n </Button>\n </div>\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"TablePaginatorImplementation.js","sources":["../../../DataTables/TablePaginatorImplementation.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 { Button } from '../Common/Button';\nimport { useCratisComponentsConfig } from '../Common/CratisComponentsProvider';\nimport { useCratisIcon } from '../configuration/useCratisIcon';\nimport type { TablePaginatorProps } from './TablePaginator';\nimport { paginatorRange } from './paginatorRange';\nimport { TablePaginatorPages } from './TablePaginatorPages';\n\n/**\n * A minimal first/previous/next/last paginator. The\n * Cratis data tables drive paging through Arc's paging hook rather than the\n * table's internal pagination — so this renders the page controls wired to a\n * simple `onPageChange(pageIndex)` callback.\n */\nexport const TablePaginatorImplementation = ({\n page,\n pageCount,\n onPageChange,\n totalItems,\n pageSize,\n pageLinks = false,\n ariaLabels,\n className,\n pt,\n}: TablePaginatorProps) => {\n const { messages } = useCratisComponentsConfig();\n const paginatorMessages = messages?.paginator;\n const icon = useCratisIcon();\n const isFirst = page <= 0;\n const isLast = page >= pageCount - 1;\n const rangeReport = paginatorRange(page, pageSize, totalItems);\n const labels = {\n navigation:\n ariaLabels?.navigation ?? paginatorMessages?.navigation ?? 'Pagination',\n first: ariaLabels?.first ?? paginatorMessages?.first ?? 'First page',\n previous: ariaLabels?.previous ?? paginatorMessages?.previous ?? 'Previous page',\n next: ariaLabels?.next ?? paginatorMessages?.next ?? 'Next page',\n last: ariaLabels?.last ?? paginatorMessages?.last ?? 'Last page',\n page:\n ariaLabels?.page ??\n paginatorMessages?.page ??\n ((number: number) => `Page ${number}`),\n pages: ariaLabels?.pages ?? paginatorMessages?.pages ?? 'Pages',\n };\n\n return (\n <div\n {...pt?.root}\n role='navigation'\n aria-label={labels.navigation}\n data-cratis-part='root'\n className={['cratis-table-paginator', pt?.root?.className, className]\n .filter(Boolean)\n .join(' ')}\n >\n {rangeReport && (\n <span\n {...pt?.range}\n className={['cratis-table-paginator-range', pt?.range?.className]\n .filter(Boolean)\n .join(' ')}\n data-cratis-part='range'\n >\n {rangeReport}\n </span>\n )}\n <Button\n variant='ghost'\n disabled={isFirst}\n onClick={() => onPageChange(0)}\n aria-label={labels.first}\n pt={pt?.first}\n >\n <span aria-hidden='true'>«</span>\n </Button>\n <Button\n variant='ghost'\n disabled={isFirst}\n onClick={() => onPageChange(page - 1)}\n aria-label={labels.previous}\n pt={pt?.previous}\n >\n <span aria-hidden='true'>{icon('previous', '‹')}</span>\n </Button>\n {pageLinks ? (\n <TablePaginatorPages\n page={page}\n pageCount={pageCount}\n pageLinks={pageLinks}\n onPageChange={onPageChange}\n pt={pt}\n pageLabel={labels.page}\n pagesLabel={labels.pages}\n />\n ) : (\n <span\n {...pt?.info}\n className={['cratis-table-paginator-info', pt?.info?.className]\n .filter(Boolean)\n .join(' ')}\n data-cratis-part='info'\n >\n {page + 1} / {Math.max(pageCount, 1)}\n </span>\n )}\n <Button\n variant='ghost'\n disabled={isLast}\n onClick={() => onPageChange(page + 1)}\n aria-label={labels.next}\n pt={pt?.next}\n >\n <span aria-hidden='true'>{icon('next', '›')}</span>\n </Button>\n <Button\n variant='ghost'\n disabled={isLast}\n onClick={() => onPageChange(pageCount - 1)}\n aria-label={labels.last}\n pt={pt?.last}\n >\n <span aria-hidden='true'>»</span>\n </Button>\n </div>\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { TablePaginatorProps } from './TablePaginator.js';
2
+ interface TablePaginatorPagesProps extends Pick<TablePaginatorProps, 'page' | 'pageCount' | 'pageLinks' | 'onPageChange' | 'pt'> {
3
+ pageLabel: (page: number) => string;
4
+ pagesLabel: string;
5
+ }
6
+ /** Core numbered-page group, with paginator-owned native buttons and inert gaps. */
7
+ export declare const TablePaginatorPages: ({ page, pageCount, pageLinks, onPageChange, pt, pageLabel, pagesLabel, }: TablePaginatorPagesProps) => import("react").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=TablePaginatorPages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TablePaginatorPages.d.ts","sourceRoot":"","sources":["../../../DataTables/TablePaginatorPages.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAkB,CAAC;AAG5D,UAAU,wBAAyB,SAAQ,IAAI,CAC3C,mBAAmB,EACnB,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,cAAc,GAAG,IAAI,CAC7D;IACG,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,oFAAoF;AACpF,eAAO,MAAM,mBAAmB,6EAQ7B,wBAAwB,gCAkD1B,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { paginatorPages } from './paginatorPages.js';
3
+
4
+ const TablePaginatorPages = ({ page, pageCount, pageLinks, onPageChange, pt, pageLabel, pagesLabel, }) => {
5
+ const options = typeof pageLinks === 'object' ? pageLinks : undefined;
6
+ const items = paginatorPages(page, pageCount, options?.siblings, options?.boundaries);
7
+ return (jsx("div", { ...pt?.pages, role: 'group', "aria-label": pagesLabel, className: ['cratis-table-paginator-pages', pt?.pages?.className]
8
+ .filter(Boolean)
9
+ .join(' '), "data-cratis-part": 'pages', children: items.map((item) => item.kind === 'ellipsis' ? (jsx("span", { ...pt?.ellipsis, "aria-hidden": 'true', className: [
10
+ 'cratis-table-paginator-ellipsis',
11
+ pt?.ellipsis?.className,
12
+ ]
13
+ .filter(Boolean)
14
+ .join(' '), "data-cratis-part": 'ellipsis', children: "\u2026" }, item.key)) : (jsx("button", { ...pt?.page, type: 'button', "aria-label": pageLabel(item.page + 1), "aria-current": item.page === page ? 'page' : undefined, "data-selected": item.page === page || undefined, "data-cratis-part": 'page', className: ['cratis-table-paginator-page', pt?.page?.className]
15
+ .filter(Boolean)
16
+ .join(' '), onClick: () => onPageChange(item.page), children: item.page + 1 }, item.page))) }));
17
+ };
18
+
19
+ export { TablePaginatorPages };
20
+ //# sourceMappingURL=TablePaginatorPages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TablePaginatorPages.js","sources":["../../../DataTables/TablePaginatorPages.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 { TablePaginatorProps } from './TablePaginator';\nimport { paginatorPages } from './paginatorPages';\n\ninterface TablePaginatorPagesProps extends Pick<\n TablePaginatorProps,\n 'page' | 'pageCount' | 'pageLinks' | 'onPageChange' | 'pt'\n> {\n pageLabel: (page: number) => string;\n pagesLabel: string;\n}\n\n/** Core numbered-page group, with paginator-owned native buttons and inert gaps. */\nexport const TablePaginatorPages = ({\n page,\n pageCount,\n pageLinks,\n onPageChange,\n pt,\n pageLabel,\n pagesLabel,\n}: TablePaginatorPagesProps) => {\n const options = typeof pageLinks === 'object' ? pageLinks : undefined;\n const items = paginatorPages(page, pageCount, options?.siblings, options?.boundaries);\n\n return (\n <div\n {...pt?.pages}\n role='group'\n aria-label={pagesLabel}\n className={['cratis-table-paginator-pages', pt?.pages?.className]\n .filter(Boolean)\n .join(' ')}\n data-cratis-part='pages'\n >\n {items.map((item) =>\n item.kind === 'ellipsis' ? (\n <span\n key={item.key}\n {...pt?.ellipsis}\n aria-hidden='true'\n className={[\n 'cratis-table-paginator-ellipsis',\n pt?.ellipsis?.className,\n ]\n .filter(Boolean)\n .join(' ')}\n data-cratis-part='ellipsis'\n >\n …\n </span>\n ) : (\n <button\n key={item.page}\n {...pt?.page}\n type='button'\n aria-label={pageLabel(item.page + 1)}\n aria-current={item.page === page ? 'page' : undefined}\n data-selected={item.page === page || undefined}\n data-cratis-part='page'\n className={['cratis-table-paginator-page', pt?.page?.className]\n .filter(Boolean)\n .join(' ')}\n onClick={() => onPageChange(item.page)}\n >\n {item.page + 1}\n </button>\n ),\n )}\n </div>\n );\n};\n"],"names":["_jsx"],"mappings":";;;MAea,mBAAmB,GAAG,CAAC,EAChC,IAAI,EACJ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,EAAE,EACF,SAAS,EACT,UAAU,GACa,KAAI;AAC3B,IAAA,MAAM,OAAO,GAAG,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,SAAS;AACrE,IAAA,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;IAErF,QACIA,gBACQ,EAAE,EAAE,KAAK,EACb,IAAI,EAAC,OAAO,EAAA,YAAA,EACA,UAAU,EACtB,SAAS,EAAE,CAAC,8BAA8B,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS;aAC3D,MAAM,CAAC,OAAO;AACd,aAAA,IAAI,CAAC,GAAG,CAAC,EAAA,kBAAA,EACG,OAAO,EAAA,QAAA,EAEvB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KACZ,IAAI,CAAC,IAAI,KAAK,UAAU,IACpBA,GAAA,CAAA,MAAA,EAAA,EAAA,GAEQ,EAAE,EAAE,QAAQ,EAAA,aAAA,EACJ,MAAM,EAClB,SAAS,EAAE;gBACP,iCAAiC;gBACjC,EAAE,EAAE,QAAQ,EAAE,SAAS;AAC1B;iBACI,MAAM,CAAC,OAAO;AACd,iBAAA,IAAI,CAAC,GAAG,CAAC,EAAA,kBAAA,EACG,UAAU,EAAA,QAAA,EAAA,QAAA,EAAA,EATtB,IAAI,CAAC,GAAG,CAYV,KAEPA,GAAA,CAAA,QAAA,EAAA,EAAA,GAEQ,EAAE,EAAE,IAAI,EACZ,IAAI,EAAC,QAAQ,EAAA,YAAA,EACD,SAAS,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAA,cAAA,EACtB,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,MAAM,GAAG,SAAS,EAAA,eAAA,EACtC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,SAAS,EAAA,kBAAA,EAC7B,MAAM,EACvB,SAAS,EAAE,CAAC,6BAA6B,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS;iBACzD,MAAM,CAAC,OAAO;AACd,iBAAA,IAAI,CAAC,GAAG,CAAC,EACd,OAAO,EAAE,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA,QAAA,EAErC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAA,EAZT,IAAI,CAAC,IAAI,CAaT,CACZ,CACJ,EAAA,CACC;AAEd;;"}
@@ -5,6 +5,8 @@ export * from './DataTableForObservableQuery.js';
5
5
  export * from './Column.js';
6
6
  export * from './ColumnFilterMenu.js';
7
7
  export * from './TablePaginator.js';
8
+ export { paginatorPages } from './paginatorPages.js';
9
+ export type { PaginatorPageItem } from './PaginatorPageItem.js';
8
10
  export * from './DataTableSelectionChangeEvent.js';
9
11
  export * from './DataTableFilterMeta.js';
10
12
  export type { DataTableSort } from './DataTableSort.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../DataTables/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAiB,CAAC;AAChC,cAAc,sBAAmB,CAAC;AAClC,cAAc,wBAAqB,CAAC;AACpC,cAAc,kCAA+B,CAAC;AAC9C,cAAc,aAAU,CAAC;AACzB,cAAc,uBAAoB,CAAC;AACnC,cAAc,qBAAkB,CAAC;AACjC,cAAc,oCAAiC,CAAC;AAChD,cAAc,0BAAuB,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAiB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA0B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA0B,CAAC;AAClE,OAAO,EACH,8BAA8B,EAC9B,6BAA6B,EAC7B,gCAAgC,EAChC,KAAK,kCAAkC,GAC1C,MAAM,qCAAkC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../DataTables/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAiB,CAAC;AAChC,cAAc,sBAAmB,CAAC;AAClC,cAAc,wBAAqB,CAAC;AACpC,cAAc,kCAA+B,CAAC;AAC9C,cAAc,aAAU,CAAC;AACzB,cAAc,uBAAoB,CAAC;AACnC,cAAc,qBAAkB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAkB,CAAC;AAClD,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAqB,CAAC;AAC7D,cAAc,oCAAiC,CAAC;AAChD,cAAc,0BAAuB,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAiB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA0B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA0B,CAAC;AAClE,OAAO,EACH,8BAA8B,EAC9B,6BAA6B,EAC7B,gCAAgC,EAChC,KAAK,kCAAkC,GAC1C,MAAM,qCAAkC,CAAC"}
@@ -5,6 +5,7 @@ export { DataTableForObservableQuery } from './DataTableForObservableQuery.js';
5
5
  export { Column } from './Column.js';
6
6
  export { ColumnFilterMenu, defaultColumnFilterMenuLabels } from './ColumnFilterMenu.js';
7
7
  export { TablePaginator } from './TablePaginator.js';
8
+ export { paginatorPages } from './paginatorPages.js';
8
9
  export { DataTableFilterMatchMode } from './DataTableFilterMeta.js';
9
10
  export { DataTableSortDirection } from './DataTableSortDirection.js';
10
11
  export { DataTableRowProcessing } from './DataTableRowProcessing.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
@@ -0,0 +1,15 @@
1
+ import type { PaginatorPageItem } from './PaginatorPageItem.js';
2
+ /**
3
+ * Selects zero-based numbered pages, preserving boundary pages and the current page's siblings.
4
+ * Single-page gaps render as a page; larger gaps render as a stable start/end ellipsis.
5
+ * Short ranges (at most `2 * boundaries + 2 * siblings + 3` pages) render every page.
6
+ *
7
+ * @param page - Current zero-based page; clamped to the available pages.
8
+ * @param pageCount - Total page count; non-finite or negative counts produce no items.
9
+ * @param siblings - Pages on each side of the current page. Defaults to 1.
10
+ * @param boundaries - Pages at each end of the range. Defaults to 1.
11
+ * @returns The ordered numbered pages and gaps. Numeric inputs are truncated to integers;
12
+ * negative window sizes become zero and non-finite window sizes use their defaults.
13
+ */
14
+ export declare const paginatorPages: (page: number, pageCount: number, siblings?: number, boundaries?: number) => PaginatorPageItem[];
15
+ //# sourceMappingURL=paginatorPages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paginatorPages.d.ts","sourceRoot":"","sources":["../../../DataTables/paginatorPages.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAqB,CAAC;AAiB7D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,cAAc,SACjB,MAAM,aACD,MAAM,6CAGlB,iBAAiB,EAwCnB,CAAC"}
@@ -0,0 +1,40 @@
1
+ const nonNegativeInteger = (value, fallback = 0) => Number.isFinite(value) ? Math.max(0, Math.trunc(value)) : fallback;
2
+ const appendGap = (items, first, last, key) => {
3
+ if (last < first)
4
+ return;
5
+ items.push(first === last ? { kind: 'page', page: first } : { kind: 'ellipsis', key });
6
+ };
7
+ const paginatorPages = (page, pageCount, siblings = 1, boundaries = 1) => {
8
+ const count = nonNegativeInteger(pageCount);
9
+ if (count === 0)
10
+ return [];
11
+ const current = Math.min(nonNegativeInteger(page), count - 1);
12
+ const siblingCount = Math.min(nonNegativeInteger(siblings, 1), count);
13
+ const boundaryCount = Math.min(nonNegativeInteger(boundaries, 1), count);
14
+ if (count <= 2 * boundaryCount + 2 * siblingCount + 3) {
15
+ return Array.from({ length: count }, (_, index) => ({
16
+ kind: 'page',
17
+ page: index,
18
+ }));
19
+ }
20
+ const selected = new Set();
21
+ for (let index = 0; index < boundaryCount; index++) {
22
+ selected.add(index);
23
+ selected.add(count - index - 1);
24
+ }
25
+ for (let index = Math.max(0, current - siblingCount); index <= Math.min(count - 1, current + siblingCount); index++) {
26
+ selected.add(index);
27
+ }
28
+ const items = [];
29
+ let previous = -1;
30
+ for (const selectedPage of [...selected].sort((left, right) => left - right)) {
31
+ appendGap(items, previous + 1, selectedPage - 1, selectedPage <= current ? 'start' : 'end');
32
+ items.push({ kind: 'page', page: selectedPage });
33
+ previous = selectedPage;
34
+ }
35
+ appendGap(items, previous + 1, count - 1, 'end');
36
+ return items;
37
+ };
38
+
39
+ export { paginatorPages };
40
+ //# sourceMappingURL=paginatorPages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paginatorPages.js","sources":["../../../DataTables/paginatorPages.ts"],"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 { PaginatorPageItem } from './PaginatorPageItem';\n\nconst nonNegativeInteger = (value: number, fallback = 0) =>\n Number.isFinite(value) ? Math.max(0, Math.trunc(value)) : fallback;\n\nconst appendGap = (\n items: PaginatorPageItem[],\n first: number,\n last: number,\n key: 'start' | 'end',\n) => {\n if (last < first) return;\n items.push(\n first === last ? { kind: 'page', page: first } : { kind: 'ellipsis', key },\n );\n};\n\n/**\n * Selects zero-based numbered pages, preserving boundary pages and the current page's siblings.\n * Single-page gaps render as a page; larger gaps render as a stable start/end ellipsis.\n * Short ranges (at most `2 * boundaries + 2 * siblings + 3` pages) render every page.\n *\n * @param page - Current zero-based page; clamped to the available pages.\n * @param pageCount - Total page count; non-finite or negative counts produce no items.\n * @param siblings - Pages on each side of the current page. Defaults to 1.\n * @param boundaries - Pages at each end of the range. Defaults to 1.\n * @returns The ordered numbered pages and gaps. Numeric inputs are truncated to integers;\n * negative window sizes become zero and non-finite window sizes use their defaults.\n */\nexport const paginatorPages = (\n page: number,\n pageCount: number,\n siblings = 1,\n boundaries = 1,\n): PaginatorPageItem[] => {\n const count = nonNegativeInteger(pageCount);\n if (count === 0) return [];\n const current = Math.min(nonNegativeInteger(page), count - 1);\n const siblingCount = Math.min(nonNegativeInteger(siblings, 1), count);\n const boundaryCount = Math.min(nonNegativeInteger(boundaries, 1), count);\n if (count <= 2 * boundaryCount + 2 * siblingCount + 3) {\n return Array.from({ length: count }, (_, index) => ({\n kind: 'page',\n page: index,\n }));\n }\n\n const selected = new Set<number>();\n for (let index = 0; index < boundaryCount; index++) {\n selected.add(index);\n selected.add(count - index - 1);\n }\n for (\n let index = Math.max(0, current - siblingCount);\n index <= Math.min(count - 1, current + siblingCount);\n index++\n ) {\n selected.add(index);\n }\n\n const items: PaginatorPageItem[] = [];\n let previous = -1;\n for (const selectedPage of [...selected].sort((left, right) => left - right)) {\n appendGap(\n items,\n previous + 1,\n selectedPage - 1,\n selectedPage <= current ? 'start' : 'end',\n );\n items.push({ kind: 'page', page: selectedPage });\n previous = selectedPage;\n }\n appendGap(items, previous + 1, count - 1, 'end');\n return items;\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { FilterDefinition } from './types.js';
3
+ import type { FilterEditorProps } from './FilterEditorProps.js';
4
+ /** Props for {@link FilterGroup}. */
5
+ export interface FilterGroupProps {
6
+ filter: FilterDefinition;
7
+ selections: Set<string>;
8
+ rangeSelection: [number, number] | null | undefined;
9
+ customValue: unknown;
10
+ isExpanded: boolean;
11
+ editorRender: ((props: FilterEditorProps) => ReactNode) | undefined;
12
+ searchPlaceholder: string;
13
+ clearFilterAriaLabel: string;
14
+ clearRangeAriaLabel: string;
15
+ onFilterToggle: (filterKey: string, optionKey: string, multi: boolean) => void;
16
+ onFilterClear: (filterKey: string) => void;
17
+ onRangeChange: (filterKey: string, range: [number, number] | null) => void;
18
+ onExpandedFilterChange: (key: string | null) => void;
19
+ onCustomValueChange?: (filterKey: string, value: unknown) => void;
20
+ }
21
+ /** One collapsible filter group: its trigger/clear header and the editor for its filter type. */
22
+ export declare function FilterGroup({ filter, selections, rangeSelection, customValue, isExpanded, editorRender, searchPlaceholder, clearFilterAriaLabel, clearRangeAriaLabel, onFilterToggle, onFilterClear, onRangeChange, onExpandedFilterChange, onCustomValueChange, }: FilterGroupProps): import("react").JSX.Element;
23
+ //# sourceMappingURL=FilterGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterGroup.d.ts","sourceRoot":"","sources":["../../../Filter/FilterGroup.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAS,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAqB,CAAC;AA6H7D,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,iBAAiB,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IACpE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/E,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,sBAAsB,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACrE;AA+DD,iGAAiG;AACjG,wBAAgB,WAAW,CAAC,EACxB,MAAM,EACN,UAAU,EACV,cAAc,EACd,WAAW,EACX,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,mBAAmB,GACtB,EAAE,gBAAgB,+BA4DlB"}
@@ -0,0 +1,51 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useCratisIcon } from '../configuration/useCratisIcon.js';
3
+ import { RangeHistogramFilter } from './RangeHistogramFilter.js';
4
+ import { CheckboxListFilter } from './CheckboxListFilter.js';
5
+
6
+ function OptionList({ filter, selections, onFilterToggle, searchPlaceholder, isExpanded, }) {
7
+ return (jsx(CheckboxListFilter, { options: filter.options ?? [], selected: selections, multi: filter.multi, searchable: filter.searchable, searchPlaceholder: filter.searchPlaceholder ?? searchPlaceholder, searchAriaLabel: filter.searchAriaLabel, autoFocusSearch: filter.autoFocus === true && isExpanded, name: `filter-${filter.key}`, onToggle: (optionKey) => onFilterToggle(filter.key, optionKey, filter.multi ?? false) }));
8
+ }
9
+ function FilterGroupTrigger({ filter, isExpanded, canClear, clearLabel, isNumeric, isCustom, selections, hasRange, hasCustomValue, onToggleExpanded, onClear, }) {
10
+ const icon = useCratisIcon();
11
+ return (jsxs("div", { className: 'pv-filter-trigger', "data-selected": canClear || undefined, "data-open": isExpanded || undefined, children: [jsxs("button", { type: 'button', className: 'pv-filter-toggle', "aria-expanded": isExpanded, "data-selected": canClear || undefined, "data-open": isExpanded || undefined, "data-pressed": isExpanded || undefined, onClick: onToggleExpanded, children: [jsx("span", { className: 'pv-filter-label', children: filter.label }), jsxs("span", { className: 'pv-filter-trigger-meta', children: [!isNumeric &&
12
+ !isCustom &&
13
+ selections.size > 0 && (jsx("span", { className: 'pv-filter-count', children: selections.size })), isNumeric && hasRange && (jsx("span", { className: 'pv-filter-count', children: "Range" })), isCustom && hasCustomValue && (jsx("span", { className: 'pv-filter-count', children: "\u2022" })), jsx("span", { className: 'pv-filter-chevron' })] })] }), canClear && (jsx("button", { type: 'button', className: 'pv-filter-clear-header', title: clearLabel, "aria-label": clearLabel, onClick: onClear, children: icon('clear', '×') }))] }));
14
+ }
15
+ function FilterGroupEditor({ filter, selections, rangeSelection, customValue, isExpanded, editorRender, searchPlaceholder, isDate, isNumeric, isCustom, onFilterToggle, onRangeChange, onCustomValueChange, }) {
16
+ if (isCustom && editorRender) {
17
+ return editorRender({
18
+ value: customValue,
19
+ onChange: (value) => onCustomValueChange?.(filter.key, value),
20
+ });
21
+ }
22
+ if (isNumeric && filter.numericRange) {
23
+ return (jsx(RangeHistogramFilter, { values: filter.numericRange.values, histogram: filter.numericRange.histogram, min: filter.numericRange.min, max: filter.numericRange.max, buckets: filter.buckets ?? 20, selectedRange: rangeSelection ?? null, onChange: (range) => onRangeChange(filter.key, range), formatValue: isDate ? (value) => new Date(value).toLocaleString() : undefined }));
24
+ }
25
+ return (jsx(OptionList, { filter: filter, selections: selections, onFilterToggle: onFilterToggle, searchPlaceholder: searchPlaceholder, isExpanded: isExpanded }));
26
+ }
27
+ function FilterGroup({ filter, selections, rangeSelection, customValue, isExpanded, editorRender, searchPlaceholder, clearFilterAriaLabel, clearRangeAriaLabel, onFilterToggle, onFilterClear, onRangeChange, onExpandedFilterChange, onCustomValueChange, }) {
28
+ const isDate = filter.type === 'date';
29
+ const isNumeric = filter.type === 'number' || isDate;
30
+ const isCustom = filter.type === 'custom' || editorRender !== undefined;
31
+ const hasCustomValue = customValue !== undefined && customValue !== null;
32
+ const canClear = isNumeric
33
+ ? Boolean(rangeSelection)
34
+ : isCustom
35
+ ? hasCustomValue
36
+ : selections.size > 0;
37
+ const clearLabel = isNumeric ? clearRangeAriaLabel : clearFilterAriaLabel;
38
+ const clearValue = () => {
39
+ if (isNumeric)
40
+ onRangeChange(filter.key, null);
41
+ else if (isCustom) {
42
+ onCustomValueChange?.(filter.key, undefined);
43
+ }
44
+ else
45
+ onFilterClear(filter.key);
46
+ };
47
+ return (jsxs("div", { className: `pv-filter ${isExpanded ? 'expanded' : ''}`, "data-selected": canClear || undefined, "data-open": isExpanded || undefined, children: [jsx(FilterGroupTrigger, { filter: filter, isExpanded: isExpanded, canClear: canClear, clearLabel: clearLabel, isDate: isDate, isNumeric: isNumeric, isCustom: isCustom, selections: selections, hasRange: Boolean(rangeSelection), hasCustomValue: hasCustomValue, onToggleExpanded: () => onExpandedFilterChange(isExpanded ? null : filter.key), onClear: clearValue }), jsx("div", { className: `pv-filter-content ${isExpanded ? 'expanded' : ''}`, "data-open": isExpanded || undefined, children: jsx(FilterGroupEditor, { filter: filter, selections: selections, rangeSelection: rangeSelection, customValue: customValue, isExpanded: isExpanded, editorRender: editorRender, searchPlaceholder: searchPlaceholder, isDate: isDate, isNumeric: isNumeric, isCustom: isCustom, onFilterToggle: onFilterToggle, onRangeChange: onRangeChange, onCustomValueChange: onCustomValueChange }) })] }));
48
+ }
49
+
50
+ export { FilterGroup };
51
+ //# sourceMappingURL=FilterGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterGroup.js","sources":["../../../Filter/FilterGroup.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { ReactNode } from 'react';\nimport { useCratisIcon } from '../configuration/useCratisIcon';\nimport type { FilterDefinition } from './types';\nimport type { FilterEditorProps } from './FilterEditorProps';\nimport { RangeHistogramFilter } from './RangeHistogramFilter';\nimport { CheckboxListFilter } from './CheckboxListFilter';\n\ninterface OptionListProps {\n filter: FilterDefinition;\n selections: Set<string>;\n onFilterToggle: (filterKey: string, optionKey: string, multi: boolean) => void;\n /** Falls back to the panel-level search placeholder when the filter group has none of its own. */\n searchPlaceholder?: string;\n isExpanded: boolean;\n}\n\n/** Adapts a `FilterDefinition`'s string/option shape onto the reusable {@link CheckboxListFilter}. */\nfunction OptionList({\n filter,\n selections,\n onFilterToggle,\n searchPlaceholder,\n isExpanded,\n}: OptionListProps) {\n return (\n <CheckboxListFilter\n options={filter.options ?? []}\n selected={selections}\n multi={filter.multi}\n searchable={filter.searchable}\n searchPlaceholder={filter.searchPlaceholder ?? searchPlaceholder}\n searchAriaLabel={filter.searchAriaLabel}\n autoFocusSearch={filter.autoFocus === true && isExpanded}\n name={`filter-${filter.key}`}\n onToggle={(optionKey) =>\n onFilterToggle(filter.key, optionKey, filter.multi ?? false)\n }\n />\n );\n}\n\ninterface GroupKind {\n isDate: boolean;\n isNumeric: boolean;\n isCustom: boolean;\n}\n\ninterface TriggerProps extends GroupKind {\n filter: FilterDefinition;\n isExpanded: boolean;\n canClear: boolean;\n clearLabel: string;\n selections: Set<string>;\n hasRange: boolean;\n hasCustomValue: boolean;\n onToggleExpanded: () => void;\n onClear: () => void;\n}\n\nfunction FilterGroupTrigger({\n filter,\n isExpanded,\n canClear,\n clearLabel,\n isNumeric,\n isCustom,\n selections,\n hasRange,\n hasCustomValue,\n onToggleExpanded,\n onClear,\n}: TriggerProps) {\n const icon = useCratisIcon();\n\n return (\n <div\n className='pv-filter-trigger'\n data-selected={canClear || undefined}\n data-open={isExpanded || undefined}\n >\n <button\n type='button'\n className='pv-filter-toggle'\n aria-expanded={isExpanded}\n data-selected={canClear || undefined}\n data-open={isExpanded || undefined}\n data-pressed={isExpanded || undefined}\n onClick={onToggleExpanded}\n >\n <span className='pv-filter-label'>\n {filter.label}\n </span>\n <span className='pv-filter-trigger-meta'>\n {!isNumeric &&\n !isCustom &&\n selections.size > 0 && (\n <span className='pv-filter-count'>\n {selections.size}\n </span>\n )}\n {isNumeric && hasRange && (\n <span className='pv-filter-count'>\n Range\n </span>\n )}\n {isCustom && hasCustomValue && (\n <span className='pv-filter-count'>\n •\n </span>\n )}\n <span className='pv-filter-chevron' />\n </span>\n </button>\n {canClear && (\n <button\n type='button'\n className='pv-filter-clear-header'\n title={clearLabel}\n aria-label={clearLabel}\n onClick={onClear}\n >\n {icon('clear', '×')}\n </button>\n )}\n </div>\n );\n}\n\n/** Props for {@link FilterGroup}. */\nexport interface FilterGroupProps {\n filter: FilterDefinition;\n selections: Set<string>;\n rangeSelection: [number, number] | null | undefined;\n customValue: unknown;\n isExpanded: boolean;\n editorRender: ((props: FilterEditorProps) => ReactNode) | undefined;\n searchPlaceholder: string;\n clearFilterAriaLabel: string;\n clearRangeAriaLabel: string;\n onFilterToggle: (filterKey: string, optionKey: string, multi: boolean) => void;\n onFilterClear: (filterKey: string) => void;\n onRangeChange: (filterKey: string, range: [number, number] | null) => void;\n onExpandedFilterChange: (key: string | null) => void;\n onCustomValueChange?: (filterKey: string, value: unknown) => void;\n}\n\ninterface ContentProps extends GroupKind {\n filter: FilterDefinition;\n selections: Set<string>;\n rangeSelection: [number, number] | null | undefined;\n customValue: unknown;\n isExpanded: boolean;\n editorRender: ((props: FilterEditorProps) => ReactNode) | undefined;\n searchPlaceholder: string;\n onFilterToggle: FilterGroupProps['onFilterToggle'];\n onRangeChange: FilterGroupProps['onRangeChange'];\n onCustomValueChange?: FilterGroupProps['onCustomValueChange'];\n}\n\nfunction FilterGroupEditor({\n filter,\n selections,\n rangeSelection,\n customValue,\n isExpanded,\n editorRender,\n searchPlaceholder,\n isDate,\n isNumeric,\n isCustom,\n onFilterToggle,\n onRangeChange,\n onCustomValueChange,\n}: ContentProps) {\n if (isCustom && editorRender) {\n return editorRender({\n value: customValue,\n onChange: (value) => onCustomValueChange?.(filter.key, value),\n });\n }\n\n if (isNumeric && filter.numericRange) {\n return (\n <RangeHistogramFilter\n values={filter.numericRange.values}\n histogram={filter.numericRange.histogram}\n min={filter.numericRange.min}\n max={filter.numericRange.max}\n buckets={filter.buckets ?? 20}\n selectedRange={rangeSelection ?? null}\n onChange={(range) => onRangeChange(filter.key, range)}\n formatValue={isDate ? (value: number) => new Date(value).toLocaleString() : undefined}\n />\n );\n }\n\n return (\n <OptionList\n filter={filter}\n selections={selections}\n onFilterToggle={onFilterToggle}\n searchPlaceholder={searchPlaceholder}\n isExpanded={isExpanded}\n />\n );\n}\n\n/** One collapsible filter group: its trigger/clear header and the editor for its filter type. */\nexport function FilterGroup({\n filter,\n selections,\n rangeSelection,\n customValue,\n isExpanded,\n editorRender,\n searchPlaceholder,\n clearFilterAriaLabel,\n clearRangeAriaLabel,\n onFilterToggle,\n onFilterClear,\n onRangeChange,\n onExpandedFilterChange,\n onCustomValueChange,\n}: FilterGroupProps) {\n const isDate = filter.type === 'date';\n const isNumeric = filter.type === 'number' || isDate;\n const isCustom = filter.type === 'custom' || editorRender !== undefined;\n const hasCustomValue = customValue !== undefined && customValue !== null;\n const canClear = isNumeric\n ? Boolean(rangeSelection)\n : isCustom\n ? hasCustomValue\n : selections.size > 0;\n const clearLabel = isNumeric ? clearRangeAriaLabel : clearFilterAriaLabel;\n const clearValue = () => {\n if (isNumeric) onRangeChange(filter.key, null);\n else if (isCustom) {\n onCustomValueChange?.(filter.key, undefined);\n } else onFilterClear(filter.key);\n };\n\n return (\n <div\n className={`pv-filter ${isExpanded ? 'expanded' : ''}`}\n data-selected={canClear || undefined}\n data-open={isExpanded || undefined}\n >\n <FilterGroupTrigger\n filter={filter}\n isExpanded={isExpanded}\n canClear={canClear}\n clearLabel={clearLabel}\n isDate={isDate}\n isNumeric={isNumeric}\n isCustom={isCustom}\n selections={selections}\n hasRange={Boolean(rangeSelection)}\n hasCustomValue={hasCustomValue}\n onToggleExpanded={() => onExpandedFilterChange(isExpanded ? null : filter.key)}\n onClear={clearValue}\n />\n <div\n className={`pv-filter-content ${isExpanded ? 'expanded' : ''}`}\n data-open={isExpanded || undefined}\n >\n <FilterGroupEditor\n filter={filter}\n selections={selections}\n rangeSelection={rangeSelection}\n customValue={customValue}\n isExpanded={isExpanded}\n editorRender={editorRender}\n searchPlaceholder={searchPlaceholder}\n isDate={isDate}\n isNumeric={isNumeric}\n isCustom={isCustom}\n onFilterToggle={onFilterToggle}\n onRangeChange={onRangeChange}\n onCustomValueChange={onCustomValueChange}\n />\n </div>\n </div>\n );\n}\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FilterPanel.d.ts","sourceRoot":"","sources":["../../../Filter/FilterPanel.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,OAAO,KAAK,EACR,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,kBAAkB,EACrB,MAAM,YAAS,CAAC;AAOjB;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC7B,oCAAoC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,4DAA4D;IAC5D,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,uEAAuE;IACvE,YAAY,EAAE,YAAY,CAAC;IAC3B,uEAAuE;IACvE,WAAW,EAAE,WAAW,CAAC;IACzB,uGAAuG;IACvG,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mGAAmG;IACnG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6HAA6H;IAC7H,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mGAAmG;IACnG,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iGAAiG;IACjG,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gDAAgD;IAChD,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,kDAAkD;IAClD,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACrD,+DAA+D;IAC/D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,iFAAiF;IACjF,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,8CAA8C;IAC9C,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/E,2DAA2D;IAC3D,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,2CAA2C;IAC3C,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,qDAAqD;IACrD,sBAAsB,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAClE;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AAgID;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,EACxB,MAAM,EACN,OAAO,EACP,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,MAAM,EACN,iBAA6B,EAC7B,YAAY,EAAE,SAAS,EACvB,eAAe,EACf,oBAAqC,EACrC,mBAAmC,EACnC,iBAAiB,EACjB,SAAS,EACT,OAAO,EACP,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,QAAQ,GACX,EAAE,gBAAgB,sCA4clB"}
1
+ {"version":3,"file":"FilterPanel.d.ts","sourceRoot":"","sources":["../../../Filter/FilterPanel.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,OAAO,KAAK,EACR,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,kBAAkB,EACrB,MAAM,YAAS,CAAC;AASjB;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC7B,oCAAoC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,4DAA4D;IAC5D,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,uEAAuE;IACvE,YAAY,EAAE,YAAY,CAAC;IAC3B,uEAAuE;IACvE,WAAW,EAAE,WAAW,CAAC;IACzB,uGAAuG;IACvG,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mGAAmG;IACnG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6HAA6H;IAC7H,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mGAAmG;IACnG,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iGAAiG;IACjG,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gDAAgD;IAChD,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,kDAAkD;IAClD,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACrD,+DAA+D;IAC/D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,iFAAiF;IACjF,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,8CAA8C;IAC9C,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/E,2DAA2D;IAC3D,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,2CAA2C;IAC3C,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,qDAAqD;IACrD,sBAAsB,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAClE;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AA4GD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,EACxB,MAAM,EACN,OAAO,EACP,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,MAAM,EACN,iBAA6B,EAC7B,YAAY,EAAE,SAAS,EACvB,eAAe,EACf,oBAAqC,EACrC,mBAAmC,EACnC,iBAAiB,EACjB,SAAS,EACT,OAAO,EACP,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,QAAQ,GACX,EAAE,gBAAgB,sCA8FlB"}