@sylwellsoftware/fray 0.2.0 → 0.3.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 (46) hide show
  1. package/README.md +79 -11
  2. package/dist/Components/Placeholder.d.ts +1 -1
  3. package/dist/Components/Placeholder.d.ts.map +1 -1
  4. package/dist/Components/controlUtils.d.ts.map +1 -1
  5. package/dist/Components/data/filterState.d.ts +38 -0
  6. package/dist/Components/data/filterState.d.ts.map +1 -0
  7. package/dist/Components/data/listview/listview.d.ts +16 -5
  8. package/dist/Components/data/listview/listview.d.ts.map +1 -1
  9. package/dist/Components/data/selectionhandler.d.ts +24 -5
  10. package/dist/Components/data/selectionhandler.d.ts.map +1 -1
  11. package/dist/Components/data/table/DataTable.d.ts +36 -30
  12. package/dist/Components/data/table/DataTable.d.ts.map +1 -1
  13. package/dist/Components/data/table/FilterPanel.d.ts +8 -1
  14. package/dist/Components/data/table/FilterPanel.d.ts.map +1 -1
  15. package/dist/Components/data/table/TableHeaderCell.d.ts.map +1 -1
  16. package/dist/Components/data/table/tableDataSource.d.ts +49 -0
  17. package/dist/Components/data/table/tableDataSource.d.ts.map +1 -0
  18. package/dist/Components/data/table/tableQuery.d.ts +6 -2
  19. package/dist/Components/data/table/tableQuery.d.ts.map +1 -1
  20. package/dist/Components/data/treeview/treeModel.d.ts +23 -0
  21. package/dist/Components/data/treeview/treeModel.d.ts.map +1 -0
  22. package/dist/Components/data/treeview/treeview.d.ts +1 -1
  23. package/dist/Components/data/treeview/treeview.d.ts.map +1 -1
  24. package/dist/Components/dialog/dialog.d.ts +1 -1
  25. package/dist/Components/dialog/dialog.d.ts.map +1 -1
  26. package/dist/Components/lineinputs/checkbox/Checkbox.d.ts +1 -1
  27. package/dist/Components/lineinputs/checkbox/Checkbox.d.ts.map +1 -1
  28. package/dist/Components/lineinputs/checkbox/QuadCheckbox.d.ts +2 -2
  29. package/dist/Components/lineinputs/checkbox/QuadCheckbox.d.ts.map +1 -1
  30. package/dist/Components/lineinputs/checkbox/TriCheckbox.d.ts +2 -2
  31. package/dist/Components/lineinputs/checkbox/TriCheckbox.d.ts.map +1 -1
  32. package/dist/index.d.ts +14 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +2676 -726
  35. package/dist/index.js.map +1 -1
  36. package/dist/util/filterMode.d.ts +6 -4
  37. package/dist/util/filterMode.d.ts.map +1 -1
  38. package/package.json +4 -9
  39. package/styles/structural.css +9 -3
  40. package/EXPERIMENTAL.md +0 -75
  41. package/dist/button-CqDGmkBt.js +0 -212
  42. package/dist/button-CqDGmkBt.js.map +0 -1
  43. package/dist/experimental.d.ts +0 -16
  44. package/dist/experimental.d.ts.map +0 -1
  45. package/dist/experimental.js +0 -1399
  46. package/dist/experimental.js.map +0 -1
package/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # Fray
2
2
 
3
- Fray is an experimental, browser-only component and DOM runtime built around
3
+ Fray is a browser-only component and DOM runtime built around
4
4
  Glue emitters. It targets modern evergreen browsers. Its `0.x` API may change
5
5
  with documented migration notes.
6
6
 
7
- Install the published alpha together with its Glue peer:
7
+ Install it together with its Glue peer:
8
8
 
9
9
  ```bash
10
10
  pnpm add @sylwellsoftware/glue @sylwellsoftware/fray
@@ -207,7 +207,7 @@ TypeScript TSX is Fray's supported template syntax. Classic JSX and direct
207
207
  use the same renderer. A future template-file syntax can target this vnode
208
208
  contract without changing Glue binding semantics.
209
209
 
210
- Fray's own stable and experimental built-ins are authored in TSX. Direct
210
+ Fray's built-ins are authored in TSX. Direct
211
211
  `h()` remains supported for consumers that do not use JSX and as the renderer's
212
212
  canonical vnode operation, but it is not the built-in component authoring
213
213
  format. The workspace lint gate rejects new `h()` templates under
@@ -738,19 +738,87 @@ operation, labelled roles, reduced motion, 200% configured text sizing, and
738
738
  forced-colors focus visibility. A formal manual screen-reader pass is still a
739
739
  release-candidate requirement; automated checks are not a substitute for it.
740
740
 
741
- ## Experimental data components
741
+ ## Data workflows
742
742
 
743
- `ListView`, `DataTable`, `TreeView`, `TreeItem`, `Dialog`, filters, selection
744
- handlers, and `Placeholder` are available only from
745
- `@sylwellsoftware/fray/experimental`. They are outside the stable alpha
746
- compatibility surface and may change without a migration bridge. Their state
747
- model, keyboard behavior, measured data boundary, and current limitations are
748
- documented in [EXPERIMENTAL.md](EXPERIMENTAL.md).
743
+ `ListView`, `DataTable`, `TreeView`, `TreeItem`, `Dialog`, `FilterPanel`, and
744
+ their model helpers are part of the package entry point. All accept
745
+ ordinary Glue emitters; they do not introduce a second state store.
746
+
747
+ List and table selection is discriminated by cardinality. Single selection is
748
+ an item or `null`; array state is reserved for explicit multi-selection:
749
+
750
+ ```tsx
751
+ const selected = new Emitter<Project | null>(null)
752
+ const selectedRows = new Emitter<Project[]>([])
753
+
754
+ <ListView items={projects} selectedItemEmitter={selected} itemKey="id" />
755
+ <DataTable
756
+ data={projects}
757
+ columns={columns}
758
+ multiSelect
759
+ selectedItemsEmitter={selectedRows}
760
+ />
761
+ ```
762
+
763
+ Both modes reconcile selected keys to fresh objects when data is replaced.
764
+ Multi-selection retains Control/Command toggles, Shift and pointer-drag ranges,
765
+ and keyboard operation.
766
+
767
+ DataTable accepts exactly one data boundary:
768
+
769
+ ```tsx
770
+ // Direct local data; Fray derives sorted/filtered rows.
771
+ <DataTable data={projects} columns={columns} />
772
+
773
+ // Convenient REST adapter; the table creates and disposes this source.
774
+ <DataTable
775
+ rest={{url: '/api/projects', baseUrl: location.href}}
776
+ columns={columns}
777
+ />
778
+
779
+ // Explicit source; the caller owns and eventually disposes it.
780
+ const source = createQueryTableDataSource({query, sortEmitter, filtersEmitter})
781
+ <DataTable dataSource={source} columns={columns} />
782
+ ```
783
+
784
+ `createLocalTableDataSource`, `createQueryTableDataSource`,
785
+ `createHandlerTableDataSource`, and `createRestTableDataSource` make ownership
786
+ visible. Sources package the row query with sort/filter emitters, retry, and
787
+ disposal. The default REST serializer retains the compact existing endpoint
788
+ tokens; inject `serializeQuery` when an endpoint uses another wire contract.
789
+
790
+ Tree node state is projected from complete immutable snapshots:
791
+
792
+ ```ts
793
+ const selectedNode = deriveTreeNode(treeNodes, selectedKey)
794
+
795
+ // Only for an authoritative writable root:
796
+ updateWritableTreeNode(treeNodes, 'project-1', (node) => ({...node, label: 'Updated'}))
797
+ ```
798
+
799
+ For a tree derived from domain state, a callback updates that real source; the
800
+ tree derivation then rebuilds and `deriveTreeNode` resolves the fresh node.
801
+ `updateTreeNode` is the equivalent pure path-copy operation.
802
+
803
+ Generic `FilterState` keeps `neutral`, `prefer`, `require`, and `deny` semantic
804
+ values separate from glyphs and transport. `filterByState`,
805
+ `deriveFilterPredicate`, and `deriveFilteredItems` consume caller-supplied
806
+ dimension matchers. `serializeFilterState`/`parseFilterState` round-trip
807
+ validated version-1 plain data without owning URL or storage access. Unknown
808
+ valid keys are preserved and ignored until a matching definition exists.
809
+ Dimensions combine with AND. Within each dimension, a denied match always
810
+ rejects, every required option must match, and at least one preferred option
811
+ must match when preferences are active. Neutral options do not constrain the
812
+ result.
813
+
814
+ The stable non-virtualized performance boundary and detailed state behavior are
815
+ documented in this guide. See the migration notes in the changelog before
816
+ upgrading from 0.2.x.
749
817
 
750
818
  Fray is not a replacement for an SSR/hydration framework, Web Components,
751
819
  React/Vue adapters, a broad design system, a virtualized production data grid,
752
820
  legacy-browser support, or a stable `1.0` API. See the [workspace
753
- overview](../../README.md), [alpha API surface](../../docs/API_SURFACE.md),
821
+ overview](../../README.md), [API surface](../../docs/API_SURFACE.md),
754
822
  [architecture overview](../../docs/architecture.md),
755
823
  [changelog](../../CHANGELOG.md), [contribution guide](../../CONTRIBUTING.md),
756
824
  and [security policy](../../SECURITY.md).
@@ -3,7 +3,7 @@ import type { ComponentProps } from './component.js';
3
3
  export interface PlaceholderProps extends ComponentProps {
4
4
  width?: number | string;
5
5
  }
6
- /** Deterministic loading placeholder for experimental data components. */
6
+ /** Deterministic loading placeholder for data components. */
7
7
  export declare class Placeholder extends Component<PlaceholderProps> {
8
8
  render(): import("@sylwellsoftware/fray/jsx-runtime").JSX.Element;
9
9
  static hostName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Placeholder.d.ts","sourceRoot":"","sources":["../../src/Components/Placeholder.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAM,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,gBAAgB,CAAA;AAElD,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAC1B;AAED,0EAA0E;AAC1E,qBAAa,WAAY,SAAQ,SAAS,CAAC,gBAAgB,CAAC;IACxD,MAAM;IAMN,OAAgB,QAAQ,SAAgB;IACxC,OAAgB,kBAAkB,SAAwB;IAE1D,MAAM,CAAC,UAAU,0BAEhB;IAED,MAAM,CAAC,GAAG,SAgBT;CACJ"}
1
+ {"version":3,"file":"Placeholder.d.ts","sourceRoot":"","sources":["../../src/Components/Placeholder.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAM,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,gBAAgB,CAAA;AAElD,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAC1B;AAED,6DAA6D;AAC7D,qBAAa,WAAY,SAAQ,SAAS,CAAC,gBAAgB,CAAC;IACxD,MAAM;IAMN,OAAgB,QAAQ,SAAgB;IACxC,OAAgB,kBAAkB,SAAwB;IAE1D,MAAM,CAAC,UAAU,0BAEhB;IAED,MAAM,CAAC,GAAG,SAgBT;CACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"controlUtils.d.ts","sourceRoot":"","sources":["../../src/Components/controlUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,eAAe,EAAC,MAAM,uBAAuB,CAAA;AAE1E,OAAO,KAAK,EAAC,SAAS,EAAE,cAAc,EAAC,MAAM,gBAAgB,CAAA;AAE7D,MAAM,WAAW,YAAY,CAAC,MAAM,CAAE,SAAQ,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1E,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;CACtD;AAED,MAAM,WAAW,iBAAiB,CAAC,MAAM,CAAE,SAAQ,cAAc;IAC7D,YAAY,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAA;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB;AAID,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAGnF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EACrC,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAChB,YAAY,CAAC,MAAM,CAAC,CAWtB;AAED,wBAAgB,aAAa,CAAC,MAAM,GAAG,OAAO,EAC1C,KAAK,EAAE,OAAO,EACd,IAAI,SAAY,GACjB,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC,MAAM,CAAC,CAQvC;AAED,wBAAgB,UAAU,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAKvD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,WAAW,CAAC,GAAG,MAAM,CAEzF;AAED,wBAAgB,MAAM,CAAC,UAAU,SAAS,OAAO,EAAE,EAC/C,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,EAC5D,GAAG,IAAI,EAAE,UAAU,GACpB,IAAI,CAIN;AAED,wBAAgB,aAAa,CAAC,OAAO,EACjC,OAAO,EAAE,OAAO,EAChB,IAAI,SAAY,GACjB,OAAO,CAAC,OAAO,IAAI,OAAO,EAAE,CAE9B;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMpD"}
1
+ {"version":3,"file":"controlUtils.d.ts","sourceRoot":"","sources":["../../src/Components/controlUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,eAAe,EAAC,MAAM,uBAAuB,CAAA;AAE1E,OAAO,KAAK,EAAC,SAAS,EAAE,cAAc,EAAC,MAAM,gBAAgB,CAAA;AAG7D,MAAM,WAAW,YAAY,CAAC,MAAM,CAAE,SAAQ,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1E,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;CACtD;AAED,MAAM,WAAW,iBAAiB,CAAC,MAAM,CAAE,SAAQ,cAAc;IAC7D,YAAY,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAA;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB;AAID,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAGnF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EACrC,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAChB,YAAY,CAAC,MAAM,CAAC,CAWtB;AAED,wBAAgB,aAAa,CAAC,MAAM,GAAG,OAAO,EAC1C,KAAK,EAAE,OAAO,EACd,IAAI,SAAY,GACjB,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC,MAAM,CAAC,CAQvC;AAED,wBAAgB,UAAU,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAKvD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,WAAW,CAAC,GAAG,MAAM,CAEzF;AAED,wBAAgB,MAAM,CAAC,UAAU,SAAS,OAAO,EAAE,EAC/C,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,EAC5D,GAAG,IAAI,EAAE,UAAU,GACpB,IAAI,CAIN;AAED,wBAAgB,aAAa,CAAC,OAAO,EACjC,OAAO,EAAE,OAAO,EAChB,IAAI,SAAY,GACjB,OAAO,CAAC,OAAO,IAAI,OAAO,EAAE,CAE9B;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGpD"}
@@ -0,0 +1,38 @@
1
+ import { DerivedEmitter } from '@sylwellsoftware/glue';
2
+ import type { ReadableEmitter } from '@sylwellsoftware/glue';
3
+ import type { FilterModeValue } from '../../util/filterMode.js';
4
+ export type FilterOptionState = Readonly<Record<string, FilterModeValue>>;
5
+ export type FilterState = Readonly<Record<string, FilterOptionState>>;
6
+ export interface SerializedFilterState {
7
+ readonly version: 1;
8
+ readonly dimensions: Record<string, Record<string, FilterModeValue>>;
9
+ }
10
+ export interface FilterOptionDefinition<TItem> {
11
+ /** Stable persisted identity within its dimension. */
12
+ key: string;
13
+ matches: (item: TItem) => boolean;
14
+ }
15
+ export interface FilterDimensionDefinition<TItem> {
16
+ /** Stable persisted identity for the dimension. */
17
+ key: string;
18
+ options: readonly FilterOptionDefinition<TItem>[];
19
+ }
20
+ /**
21
+ * Test an item against semantic filter state.
22
+ *
23
+ * Dimensions combine with AND. Within one dimension, deny wins, every required
24
+ * option must match, and at least one preferred option must match when any are
25
+ * active. Unknown persisted dimensions and options are retained by
26
+ * serialization but do not constrain matching.
27
+ */
28
+ export declare function matchesFilterState<TItem>(item: TItem, state: FilterState, dimensions: readonly FilterDimensionDefinition<TItem>[]): boolean;
29
+ export declare function filterByState<TItem>(items: readonly TItem[], state: FilterState, dimensions: readonly FilterDimensionDefinition<TItem>[]): TItem[];
30
+ /** Derive a reusable predicate without giving Fray ownership of persistence. */
31
+ export declare function deriveFilterPredicate<TItem>(state: ReadableEmitter<FilterState, unknown>, dimensions: readonly FilterDimensionDefinition<TItem>[], owner?: unknown): DerivedEmitter<(item: TItem) => boolean, readonly [ReadableEmitter<FilterState, unknown>]>;
32
+ /** Derive a filtered collection from application-owned items and filter state. */
33
+ export declare function deriveFilteredItems<TItem>(items: ReadableEmitter<readonly TItem[], unknown>, state: ReadableEmitter<FilterState, unknown>, dimensions: readonly FilterDimensionDefinition<TItem>[], owner?: unknown): DerivedEmitter<TItem[], readonly [ReadableEmitter<readonly TItem[], unknown>, ReadableEmitter<FilterState, unknown>]>;
34
+ /** Convert state to deterministic, versioned, plain JSON-compatible data. */
35
+ export declare function serializeFilterState(state: FilterState): SerializedFilterState;
36
+ /** Validate and restore versioned filter data. Unknown keys are preserved. */
37
+ export declare function parseFilterState(value: unknown): FilterState;
38
+ //# sourceMappingURL=filterState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filterState.d.ts","sourceRoot":"","sources":["../../../src/Components/data/filterState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAA;AACpD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAA;AAG1D,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAA;AAE7D,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAA;AACzE,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAA;AAErE,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IACnB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAA;CACvE;AAED,MAAM,WAAW,sBAAsB,CAAC,KAAK;IACzC,sDAAsD;IACtD,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAA;CACpC;AAED,MAAM,WAAW,yBAAyB,CAAC,KAAK;IAC5C,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,SAAS,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAA;CACpD;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EACpC,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,WAAW,EAClB,UAAU,EAAE,SAAS,yBAAyB,CAAC,KAAK,CAAC,EAAE,GACxD,OAAO,CAsBT;AAED,wBAAgB,aAAa,CAAC,KAAK,EAC/B,KAAK,EAAE,SAAS,KAAK,EAAE,EACvB,KAAK,EAAE,WAAW,EAClB,UAAU,EAAE,SAAS,yBAAyB,CAAC,KAAK,CAAC,EAAE,GACxD,KAAK,EAAE,CAGT;AAED,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,KAAK,EACvC,KAAK,EAAE,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,EAC5C,UAAU,EAAE,SAAS,yBAAyB,CAAC,KAAK,CAAC,EAAE,EACvD,KAAK,GAAE,OAAc,GACtB,cAAc,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAO5F;AAED,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,KAAK,EACrC,KAAK,EAAE,eAAe,CAAC,SAAS,KAAK,EAAE,EAAE,OAAO,CAAC,EACjD,KAAK,EAAE,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,EAC5C,UAAU,EAAE,SAAS,yBAAyB,CAAC,KAAK,CAAC,EAAE,EACvD,KAAK,GAAE,OAAc,GACtB,cAAc,CACb,KAAK,EAAE,EACP,SAAS,CAAC,eAAe,CAAC,SAAS,KAAK,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAC/F,CAOA;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,qBAAqB,CAY9E;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAuB5D"}
@@ -4,31 +4,41 @@ import { Component } from '../../component.js';
4
4
  import type { ComponentProps, FrayChild } from '../../component.js';
5
5
  import type { ValueEmitter } from '../../controlUtils.js';
6
6
  import type { BaseSelectionHandler, ItemKeyGetter } from '../selectionhandler.js';
7
- export interface ListViewProps<TItem = unknown> extends ComponentProps {
7
+ interface ListViewCommonProps<TItem> extends ComponentProps {
8
8
  items?: readonly TItem[] | ReadableEmitter<readonly TItem[], unknown>;
9
- selectedItemsEmitter?: ValueEmitter<TItem[]>;
10
9
  itemKey?: string | ItemKeyGetter<TItem>;
11
- multiSelect?: boolean;
12
10
  label?: string;
13
11
  placeholderCount?: number;
14
12
  renderItem?: (item: TItem, index: number) => FrayChild;
15
13
  }
16
- /** Experimental accessible listbox with stable-key selection. */
14
+ export type ListViewProps<TItem = unknown> = ListViewCommonProps<TItem> & ({
15
+ multiSelect?: false;
16
+ selectedItemEmitter?: ValueEmitter<TItem | null>;
17
+ selectedItemsEmitter?: never;
18
+ } | {
19
+ multiSelect: true;
20
+ selectedItemsEmitter?: ValueEmitter<TItem[]>;
21
+ selectedItemEmitter?: never;
22
+ });
23
+ /** Accessible listbox with stable-key selection. */
17
24
  export declare class ListView<TItem = unknown> extends Component<ListViewProps<TItem>> {
18
25
  readonly itemsEmitter: ReadableEmitter<readonly TItem[], unknown>;
19
26
  readonly items$: ReadableEmitter<readonly TItem[], unknown>;
20
27
  readonly selectedItemsEmitter: ValueEmitter<TItem[]>;
21
28
  readonly selectedItems$: ValueEmitter<TItem[]>;
29
+ readonly selectedItemEmitter: ValueEmitter<TItem | null> | null;
30
+ readonly selectedItem$: ValueEmitter<TItem | null> | null;
22
31
  readonly getItemKey: ItemKeyGetter<TItem>;
23
32
  readonly selectionHandler: BaseSelectionHandler<TItem>;
24
33
  private readonly ownedItemsEmitter;
25
- private readonly ownedSelectedItemsEmitter;
26
34
  constructor(props?: ListViewProps<TItem>);
27
35
  initialize(): void;
28
36
  render(): FrayChild;
29
37
  afterUpdate(dom: ChildNode | null): void;
30
38
  getSelectedItems(): TItem[];
31
39
  getSelectedItemsEmitter(): ValueEmitter<TItem[]>;
40
+ getSelectedItem(): TItem | null;
41
+ getSelectedItemEmitter(): ValueEmitter<TItem | null> | null;
32
42
  onDestroy(): void;
33
43
  static dependencies: (typeof Placeholder)[];
34
44
  static hostName: string;
@@ -36,4 +46,5 @@ export declare class ListView<TItem = unknown> extends Component<ListViewProps<T
36
46
  static baseStyles: string[][];
37
47
  static css: string;
38
48
  }
49
+ export {};
39
50
  //# sourceMappingURL=listview.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"listview.d.ts","sourceRoot":"","sources":["../../../../src/Components/data/listview/listview.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAA;AAE1D,OAAO,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAC,SAAS,EAAM,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAC,cAAc,EAAE,SAAS,EAAC,MAAM,oBAAoB,CAAA;AAEjE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAA;AAKvD,OAAO,KAAK,EACR,oBAAoB,EACpB,aAAa,EAChB,MAAM,wBAAwB,CAAA;AAE/B,MAAM,WAAW,aAAa,CAAC,KAAK,GAAG,OAAO,CAAE,SAAQ,cAAc;IAClE,KAAK,CAAC,EAAE,SAAS,KAAK,EAAE,GAAG,eAAe,CAAC,SAAS,KAAK,EAAE,EAAE,OAAO,CAAC,CAAA;IACrE,oBAAoB,CAAC,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC,CAAA;IAC5C,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;IACvC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAA;CACzD;AAED,iEAAiE;AACjE,qBAAa,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAE,SAAQ,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1E,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC,SAAS,KAAK,EAAE,EAAE,OAAO,CAAC,CAAA;IACjE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,SAAS,KAAK,EAAE,EAAE,OAAO,CAAC,CAAA;IAC3D,QAAQ,CAAC,oBAAoB,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC,CAAA;IACpD,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC,CAAA;IAC9C,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,KAAK,CAAC,CAAA;IACzC,QAAQ,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAA;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAyB;gBAEvD,KAAK,GAAE,aAAa,CAAC,KAAK,CAAM;IA6B5C,UAAU,IAAI,IAAI;IAIlB,MAAM,IAAI,SAAS;IAyDnB,WAAW,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAOxC,gBAAgB,IAAI,KAAK,EAAE;IAI3B,uBAAuB,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;IAIhD,SAAS,IAAI,IAAI;IAMjB,MAAM,CAAC,YAAY,yBAAgB;IAEnC,OAAgB,QAAQ,SAAc;IACtC,OAAgB,kBAAkB,SAAc;IAEhD,MAAM,CAAC,UAAU,aAGhB;IAED,MAAM,CAAC,GAAG,SAwCT;CACJ"}
1
+ {"version":3,"file":"listview.d.ts","sourceRoot":"","sources":["../../../../src/Components/data/listview/listview.tsx"],"names":[],"mappings":"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"}
@@ -1,11 +1,23 @@
1
1
  import type { ValueEmitter } from '../controlUtils.js';
2
2
  export type ItemKeyGetter<TItem> = (item: TItem, index: number) => unknown;
3
- export interface SelectionHandlerConfig<TItem> {
3
+ interface SelectionHandlerCommonConfig<TItem> {
4
4
  getItems: () => readonly TItem[];
5
5
  getKey?: ItemKeyGetter<TItem>;
6
- selectedItemsEmitter?: ValueEmitter<TItem[]>;
7
6
  owner?: unknown;
8
- multiSelect?: boolean;
7
+ }
8
+ export interface SingleSelectionHandlerConfig<TItem> extends SelectionHandlerCommonConfig<TItem> {
9
+ multiSelect?: false;
10
+ selectedItemEmitter?: ValueEmitter<TItem | null>;
11
+ selectedItemsEmitter?: never;
12
+ }
13
+ export interface MultiSelectionHandlerConfig<TItem> extends SelectionHandlerCommonConfig<TItem> {
14
+ multiSelect: true;
15
+ selectedItemsEmitter?: ValueEmitter<TItem[]>;
16
+ selectedItemEmitter?: never;
17
+ }
18
+ export type SelectionHandlerConfig<TItem> = SingleSelectionHandlerConfig<TItem> | MultiSelectionHandlerConfig<TItem>;
19
+ interface BaseSelectionHandlerConfig<TItem> extends SelectionHandlerCommonConfig<TItem> {
20
+ selectedItemsEmitter?: ValueEmitter<TItem[]>;
9
21
  }
10
22
  type SelectionEvent = MouseEvent | KeyboardEvent;
11
23
  /**
@@ -32,7 +44,7 @@ export declare class BaseSelectionHandler<TItem = unknown> {
32
44
  private suppressClickTimer;
33
45
  private destroyed;
34
46
  private readonly ownedSelectedItemsEmitter;
35
- constructor({ getItems, getKey, selectedItemsEmitter, owner, }: SelectionHandlerConfig<TItem>);
47
+ constructor({ getItems, getKey, selectedItemsEmitter, owner, }: BaseSelectionHandlerConfig<TItem>);
36
48
  rowsUpdated(rows: Iterable<HTMLElement> | ArrayLike<HTMLElement> | null): void;
37
49
  private wireRow;
38
50
  private handleClick;
@@ -54,7 +66,13 @@ export declare class BaseSelectionHandler<TItem = unknown> {
54
66
  destroy(): void;
55
67
  }
56
68
  export declare class SingleSelectionHandler<TItem = unknown> extends BaseSelectionHandler<TItem> {
69
+ readonly selectedItemEmitter: ValueEmitter<TItem | null>;
70
+ readonly selectedItem$: ValueEmitter<TItem | null>;
71
+ private readonly ownedSelectedItemEmitter;
72
+ constructor(config: SingleSelectionHandlerConfig<TItem>);
57
73
  protected selectIndex(index: number): void;
74
+ getSelectedItem(): TItem | null;
75
+ destroy(): void;
58
76
  }
59
77
  export declare class MultiSelectionHandler<TItem = unknown> extends BaseSelectionHandler<TItem> {
60
78
  protected selectIndex(index: number, event: SelectionEvent): void;
@@ -62,7 +80,8 @@ export declare class MultiSelectionHandler<TItem = unknown> extends BaseSelectio
62
80
  protected supportsDragSelection(): boolean;
63
81
  protected selectDragRange(startIndex: number, endIndex: number, event: MouseEvent): void;
64
82
  }
65
- export declare function createSelectionHandler<TItem>(config: SelectionHandlerConfig<TItem>): BaseSelectionHandler<TItem>;
83
+ export declare function createSelectionHandler<TItem>(config: MultiSelectionHandlerConfig<TItem>): MultiSelectionHandler<TItem>;
84
+ export declare function createSelectionHandler<TItem>(config: SingleSelectionHandlerConfig<TItem>): SingleSelectionHandler<TItem>;
66
85
  export declare function defaultItemKey<TItem>(item: TItem, index: number): unknown;
67
86
  export {};
68
87
  //# sourceMappingURL=selectionhandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"selectionhandler.d.ts","sourceRoot":"","sources":["../../../src/Components/data/selectionhandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"selectionhandler.d.ts","sourceRoot":"","sources":["../../../src/Components/data/selectionhandler.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import { Emitter } from '@sylwellsoftware/glue';
2
- import type { FetchLike, QueryHandlerLike, QuerySerializer, ReadableEmitter } from '@sylwellsoftware/glue';
1
+ import type { ReadableEmitter } from '@sylwellsoftware/glue';
3
2
  import { Placeholder } from '../../Placeholder.js';
4
3
  import { Component } from '../../component.js';
5
4
  import type { ComponentProps, FrayChild } from '../../component.js';
@@ -9,28 +8,11 @@ import type { FilterModeValue } from '../../../util/filterMode.js';
9
8
  import type { BaseSelectionHandler, ItemKeyGetter } from '../selectionhandler.js';
10
9
  import { TableHeader } from './TableHeader.js';
11
10
  import type { TableColumn, TableRow } from './TableHeaderCell.js';
11
+ import type { RestTableDataSourceOptions, TableDataSource, TableQueryInput } from './tableDataSource.js';
12
12
  import type { TableFilters, TableSort } from './tableQuery.js';
13
- export type TableQueryArguments = {
14
- sort: TableSort | null;
15
- filters: TableFilters;
16
- };
17
- export type TableQueryInput<TRow extends TableRow = TableRow> = ReadableEmitter<readonly TRow[] | undefined, unknown> & {
18
- retry?: (cause?: unknown) => unknown;
19
- dispose?: () => void;
20
- };
21
- export interface DataTableProps<TRow extends TableRow = TableRow> extends ComponentProps {
22
- mode: 'local' | 'remote';
13
+ interface DataTableCommonProps<TRow extends TableRow> extends ComponentProps {
23
14
  columns: readonly TableColumn<TRow>[];
24
- data?: readonly TRow[] | ReadableEmitter<readonly TRow[], unknown>;
25
- query?: TableQueryInput<TRow>;
26
- queryHandler?: QueryHandlerLike<TableQueryArguments, readonly TRow[]>;
27
- queryUrl?: string;
28
- baseUrl?: string;
29
- fetch?: FetchLike<readonly TRow[]>;
30
- serializeQuery?: QuerySerializer<TableQueryArguments>;
31
- selectedItemsEmitter?: ValueEmitter<TRow[]>;
32
15
  rowKey?: Extract<keyof TRow, string> | ItemKeyGetter<TRow>;
33
- multiSelect?: boolean;
34
16
  caption?: FrayChild;
35
17
  emptyMessage?: FrayChild;
36
18
  placeholderCount?: number;
@@ -38,35 +20,59 @@ export interface DataTableProps<TRow extends TableRow = TableRow> extends Compon
38
20
  defaultSemanticState?: FilterModeValue;
39
21
  onFilterChange?: (filters: TableFilters, event: Event | null) => void;
40
22
  }
41
- /** Experimental table with explicit local and remote data modes. */
23
+ type DataTableInputProps<TRow extends TableRow> = {
24
+ data?: readonly TRow[] | ReadableEmitter<readonly TRow[], unknown>;
25
+ dataSource?: never;
26
+ rest?: never;
27
+ } | {
28
+ data?: never;
29
+ dataSource: TableDataSource<TRow>;
30
+ rest?: never;
31
+ } | {
32
+ data?: never;
33
+ dataSource?: never;
34
+ rest: Omit<RestTableDataSourceOptions<TRow>, 'owner' | 'sortEmitter' | 'filtersEmitter'>;
35
+ };
36
+ type DataTableSelectionProps<TRow extends TableRow> = {
37
+ multiSelect?: false;
38
+ selectedItemEmitter?: ValueEmitter<TRow | null>;
39
+ selectedItemsEmitter?: never;
40
+ } | {
41
+ multiSelect: true;
42
+ selectedItemsEmitter?: ValueEmitter<TRow[]>;
43
+ selectedItemEmitter?: never;
44
+ };
45
+ export type DataTableProps<TRow extends TableRow = TableRow> = DataTableCommonProps<TRow> & DataTableInputProps<TRow> & DataTableSelectionProps<TRow>;
46
+ /** Accessible table over an explicit local, caller-query, or REST data source. */
42
47
  export declare class DataTable<TRow extends TableRow = TableRow> extends Component<DataTableProps<TRow>> {
43
48
  readonly columns: readonly TableColumn<TRow>[];
44
49
  readonly rowKey: ItemKeyGetter<TRow>;
45
- readonly sortEmitter: Emitter<TableSort | null>;
46
- readonly filtersEmitter: Emitter<TableFilters>;
50
+ readonly sortEmitter: ValueEmitter<TableSort | null>;
51
+ readonly filtersEmitter: ValueEmitter<TableFilters>;
47
52
  readonly selectedItemsEmitter: ValueEmitter<TRow[]>;
53
+ readonly selectedItemEmitter: ValueEmitter<TRow | null> | null;
48
54
  readonly selectionHandler: BaseSelectionHandler<TRow>;
49
55
  query: TableQueryInput<TRow> | null;
50
56
  private dataSource;
51
- private readonly ownedSelectedItemsEmitter;
57
+ private readonly suppliedDataSource;
58
+ private readonly ownedSortEmitter;
59
+ private readonly ownedFiltersEmitter;
52
60
  private ownedDataSource;
53
- private ownsQuery;
54
- private readonly queryArgs;
55
61
  constructor(props: DataTableProps<TRow>);
56
62
  initialize(): void;
57
- private createLocalQuery;
58
- private createRemoteQuery;
59
- private createRestHandler;
60
63
  render(): FrayChild;
61
64
  private renderRow;
62
65
  private renderPlaceholders;
63
66
  afterUpdate(dom: ChildNode | null): void;
64
67
  getSelectedRows(): TRow[];
65
68
  getSelectedRowsEmitter(): ValueEmitter<TRow[]>;
69
+ getSelectedRow(): TRow | null;
70
+ getSelectedRowEmitter(): ValueEmitter<TRow | null> | null;
66
71
  onDestroy(): void;
67
72
  static dependencies: (typeof Placeholder | typeof TableHeader)[];
68
73
  static hostName: string;
69
74
  static standaloneHostName: string;
70
75
  static css: string;
71
76
  }
77
+ export {};
72
78
  //# sourceMappingURL=DataTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../src/Components/data/table/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEH,OAAO,EAKV,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EACR,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,eAAe,EAClB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAC,SAAS,EAAM,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAC,cAAc,EAAE,SAAS,EAAC,MAAM,oBAAoB,CAAA;AAEjE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAA;AACvD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,uCAAuC,CAAA;AACzE,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAA;AAKhE,OAAO,KAAK,EACR,oBAAoB,EACpB,aAAa,EAChB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAC5C,OAAO,KAAK,EAAC,WAAW,EAAE,QAAQ,EAAC,MAAM,sBAAsB,CAAA;AAE/D,OAAO,KAAK,EAAC,YAAY,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAA;AAE5D,MAAM,MAAM,mBAAmB,GAAG;IAC9B,IAAI,EAAE,SAAS,GAAG,IAAI,CAAA;IACtB,OAAO,EAAE,YAAY,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,eAAe,CAAC,IAAI,SAAS,QAAQ,GAAG,QAAQ,IAAI,eAAe,CAC3E,SAAS,IAAI,EAAE,GAAG,SAAS,EAC3B,OAAO,CACV,GAAG;IACA,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;IACpC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB,CAAA;AAED,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,QAAQ,GAAG,QAAQ,CAAE,SAAQ,cAAc;IACpF,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAA;IACxB,OAAO,EAAE,SAAS,WAAW,CAAC,IAAI,CAAC,EAAE,CAAA;IACrC,IAAI,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,eAAe,CAAC,SAAS,IAAI,EAAE,EAAE,OAAO,CAAC,CAAA;IAClE,KAAK,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,CAAA;IAC7B,YAAY,CAAC,EAAE,gBAAgB,CAAC,mBAAmB,EAAE,SAAS,IAAI,EAAE,CAAC,CAAA;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;IAClC,cAAc,CAAC,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAA;IACrD,oBAAoB,CAAC,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,YAAY,CAAC,EAAE,SAAS,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,SAAS,cAAc,CAAC,eAAe,CAAC,EAAE,CAAA;IACxD,oBAAoB,CAAC,EAAE,eAAe,CAAA;IACtC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAA;CACxE;AAED,oEAAoE;AACpE,qBAAa,SAAS,CAAC,IAAI,SAAS,QAAQ,GAAG,QAAQ,CACnD,SAAQ,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,CAAC,IAAI,CAAC,EAAE,CAAA;IAC9C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;IACpC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;IAC/C,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;IAC9C,QAAQ,CAAC,oBAAoB,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,CAAA;IACnD,QAAQ,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAA;IACrD,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAO;IAC1C,OAAO,CAAC,UAAU,CAAyD;IAC3E,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAwB;IAClE,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiE;gBAE/E,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC;IA6BvC,UAAU,IAAI,IAAI;IAOlB,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,iBAAiB;IA8BzB,OAAO,CAAC,iBAAiB;IAmBzB,MAAM,IAAI,SAAS;IA4DnB,OAAO,CAAC,SAAS;IAsBjB,OAAO,CAAC,kBAAkB;IAa1B,WAAW,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAOxC,eAAe,IAAI,IAAI,EAAE;IAIzB,sBAAsB,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;IAI9C,SAAS,IAAI,IAAI;IAUjB,MAAM,CAAC,YAAY,8CAA6B;IAEhD,OAAgB,QAAQ,SAAe;IACvC,OAAgB,kBAAkB,SAAe;IAEjD,MAAM,CAAC,GAAG,SA+CT;CACJ"}
1
+ {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../src/Components/data/table/DataTable.tsx"],"names":[],"mappings":"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"}
@@ -21,12 +21,19 @@ export interface FilterPanelProps extends ComponentProps {
21
21
  label?: string;
22
22
  onChange?: (filters: Map<FilterValue, FilterModeValue>, event: Event | null) => void;
23
23
  }
24
- /** Experimental filter choices. Option data is always supplied by the caller. */
24
+ /** Filter choices whose option data is always supplied by the caller. */
25
25
  export declare class FilterPanel extends Component<FilterPanelProps> {
26
26
  readonly optionsEmitter: ReadableEmitter<FilterOptions, unknown> | null;
27
+ private readonly optionStateEmitters;
28
+ private staleOptionValues;
29
+ private placementTimer;
27
30
  constructor(props?: FilterPanelProps);
28
31
  initialize(): void;
29
32
  render(): FrayChild;
33
+ afterUpdate(dom: ChildNode | null): void;
34
+ onDestroy(): void;
35
+ private optionEmitter;
36
+ private placeInsideViewport;
30
37
  static dependencies: (typeof Checkbox)[];
31
38
  static hostName: string;
32
39
  static standaloneHostName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"FilterPanel.d.ts","sourceRoot":"","sources":["../../../../src/Components/data/table/FilterPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAA;AAE1D,OAAO,EAAC,SAAS,EAAM,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAuB,cAAc,EAAE,SAAS,EAAC,MAAM,oBAAoB,CAAA;AAEvF,OAAO,EAAC,QAAQ,EAAC,MAAM,uCAAuC,CAAA;AAC9D,OAAO,KAAK,EAER,cAAc,EACjB,MAAM,uCAAuC,CAAA;AAE9C,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAA;AAEhE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAA;AAEzC,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,WAAW,CAAA;IAClB,KAAK,CAAC,EAAE,SAAS,CAAA;CACpB;AAED,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,YAAY,CAAA;AAC1D,MAAM,MAAM,aAAa,GAAG,SAAS,iBAAiB,EAAE,CAAA;AACxD,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,eAAe,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;AACzF,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,WAAW,EAAE,eAAe,CAAC,CAAA;AAEvE,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACpD,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAC7B,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,CAAA;IAChF,WAAW,CAAC,EAAE,SAAS,cAAc,CAAC,eAAe,CAAC,EAAE,CAAA;IACxD,oBAAoB,CAAC,EAAE,eAAe,CAAA;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAA;CACvF;AAED,iFAAiF;AACjF,qBAAa,WAAY,SAAQ,SAAS,CAAC,gBAAgB,CAAC;IACxD,QAAQ,CAAC,cAAc,EAAE,eAAe,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;gBAE3D,KAAK,GAAE,gBAAqB;IAKxC,UAAU,IAAI,IAAI;IAIlB,MAAM,IAAI,SAAS;IAyDnB,MAAM,CAAC,YAAY,sBAAa;IAEhC,OAAgB,QAAQ,SAAiB;IACzC,OAAgB,kBAAkB,SAAiB;IAEnD,MAAM,CAAC,GAAG,SAiBT;CACJ"}
1
+ {"version":3,"file":"FilterPanel.d.ts","sourceRoot":"","sources":["../../../../src/Components/data/table/FilterPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAA;AAE1D,OAAO,EAAC,SAAS,EAAM,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAuB,cAAc,EAAE,SAAS,EAAC,MAAM,oBAAoB,CAAA;AAEvF,OAAO,EAAC,QAAQ,EAAC,MAAM,uCAAuC,CAAA;AAC9D,OAAO,KAAK,EAER,cAAc,EACjB,MAAM,uCAAuC,CAAA;AAE9C,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAA;AAEhE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAA;AAEzC,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,WAAW,CAAA;IAClB,KAAK,CAAC,EAAE,SAAS,CAAA;CACpB;AAED,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,YAAY,CAAA;AAC1D,MAAM,MAAM,aAAa,GAAG,SAAS,iBAAiB,EAAE,CAAA;AACxD,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,eAAe,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;AACzF,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,WAAW,EAAE,eAAe,CAAC,CAAA;AAEvE,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACpD,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAC7B,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,CAAA;IAChF,WAAW,CAAC,EAAE,SAAS,cAAc,CAAC,eAAe,CAAC,EAAE,CAAA;IACxD,oBAAoB,CAAC,EAAE,eAAe,CAAA;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAA;CACvF;AAED,yEAAyE;AACzE,qBAAa,WAAY,SAAQ,SAAS,CAAC,gBAAgB,CAAC;IACxD,QAAQ,CAAC,cAAc,EAAE,eAAe,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACvE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAmD;IACvF,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,cAAc,CAA6C;gBAEvD,KAAK,GAAE,gBAAqB;IAKxC,UAAU,IAAI,IAAI;IAIlB,MAAM,IAAI,SAAS;IA8DnB,WAAW,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAaxC,SAAS,IAAI,IAAI;IAOjB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,mBAAmB;IAsB3B,MAAM,CAAC,YAAY,sBAAa;IAEhC,OAAgB,QAAQ,SAAiB;IACzC,OAAgB,kBAAkB,SAAiB;IAEnD,MAAM,CAAC,GAAG,SAmBT;CACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"TableHeaderCell.d.ts","sourceRoot":"","sources":["../../../../src/Components/data/table/TableHeaderCell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAM,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAC,cAAc,EAAE,SAAS,EAAC,MAAM,oBAAoB,CAAA;AACjE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAA;AACvD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,uCAAuC,CAAA;AACzE,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAC5C,OAAO,KAAK,EACR,mBAAmB,EACnB,eAAe,EAElB,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAC,YAAY,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAA;AAE5D,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE9C,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,CAAC,EAAE,mBAAmB,CAAA;CACtC;AAED,MAAM,WAAW,WAAW,CAAC,IAAI,SAAS,QAAQ,GAAG,QAAQ,CAAE,SAAQ,eAAe;IAClF,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,MAAM,CAAC,CAAA;IAClC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAA;CACnD;AAED,MAAM,WAAW,oBAAqB,SAAQ,cAAc,EAAE,eAAe;IACzE,WAAW,EAAE,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;IAC3C,cAAc,EAAE,YAAY,CAAC,YAAY,CAAC,CAAA;IAC1C,WAAW,CAAC,EAAE,SAAS,cAAc,CAAC,eAAe,CAAC,EAAE,CAAA;IACxD,oBAAoB,CAAC,EAAE,eAAe,CAAA;IACtC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAA;CACxE;AAED,qBAAa,eAAgB,SAAQ,SAAS,CAAC,oBAAoB,CAAC;IAChE,OAAO,CAAC,aAAa,CAAQ;IAE7B,UAAU,IAAI,IAAI;IAOlB,UAAU,IAAI,IAAI;IAYlB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAM1C,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI;IAQ/D,MAAM,IAAI,SAAS;IA2DnB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAQ7B;IAED,MAAM,CAAC,YAAY,yBAAgB;IAEnC,MAAM,CAAC,UAAU,0BAIhB;IAED,MAAM,CAAC,GAAG,SA+BT;CACJ"}
1
+ {"version":3,"file":"TableHeaderCell.d.ts","sourceRoot":"","sources":["../../../../src/Components/data/table/TableHeaderCell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAM,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAC,cAAc,EAAE,SAAS,EAAC,MAAM,oBAAoB,CAAA;AACjE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAA;AACvD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,uCAAuC,CAAA;AACzE,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAC5C,OAAO,KAAK,EACR,mBAAmB,EACnB,eAAe,EAElB,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAC,YAAY,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAA;AAE5D,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE9C,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,CAAC,EAAE,mBAAmB,CAAA;CACtC;AAED,MAAM,WAAW,WAAW,CAAC,IAAI,SAAS,QAAQ,GAAG,QAAQ,CAAE,SAAQ,eAAe;IAClF,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,MAAM,CAAC,CAAA;IAClC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAA;CACnD;AAED,MAAM,WAAW,oBAAqB,SAAQ,cAAc,EAAE,eAAe;IACzE,WAAW,EAAE,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;IAC3C,cAAc,EAAE,YAAY,CAAC,YAAY,CAAC,CAAA;IAC1C,WAAW,CAAC,EAAE,SAAS,cAAc,CAAC,eAAe,CAAC,EAAE,CAAA;IACxD,oBAAoB,CAAC,EAAE,eAAe,CAAA;IACtC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAA;CACxE;AAED,qBAAa,eAAgB,SAAQ,SAAS,CAAC,oBAAoB,CAAC;IAChE,OAAO,CAAC,aAAa,CAAQ;IAE7B,UAAU,IAAI,IAAI;IAOlB,UAAU,IAAI,IAAI;IAYlB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAM1C,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI;IAQ/D,MAAM,IAAI,SAAS;IA4DnB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAQ7B;IAED,MAAM,CAAC,YAAY,yBAAgB;IAEnC,MAAM,CAAC,UAAU,0BAIhB;IAED,MAAM,CAAC,GAAG,SA+BT;CACJ"}
@@ -0,0 +1,49 @@
1
+ import type { FetchLike, QueryHandlerLike, QuerySerializer, ReadableEmitter } from '@sylwellsoftware/glue';
2
+ import type { ValueEmitter } from '../../controlUtils.js';
3
+ import type { TableRow } from './TableHeaderCell.js';
4
+ import type { TableFilters, TableSort } from './tableQuery.js';
5
+ export type TableQueryArguments = {
6
+ sort: TableSort | null;
7
+ filters: TableFilters;
8
+ };
9
+ export type TableQueryInput<TRow extends TableRow = TableRow> = ReadableEmitter<readonly TRow[] | undefined, unknown> & {
10
+ retry?: (cause?: unknown) => unknown;
11
+ dispose?: () => void;
12
+ };
13
+ export interface TableDataSource<TRow extends TableRow = TableRow> {
14
+ readonly query: TableQueryInput<TRow>;
15
+ readonly sortEmitter: ValueEmitter<TableSort | null>;
16
+ readonly filtersEmitter: ValueEmitter<TableFilters>;
17
+ readonly retry?: (cause?: unknown) => unknown;
18
+ dispose(): void;
19
+ }
20
+ interface TableStateOptions {
21
+ sortEmitter?: ValueEmitter<TableSort | null>;
22
+ filtersEmitter?: ValueEmitter<TableFilters>;
23
+ owner?: unknown;
24
+ }
25
+ export interface LocalTableDataSourceOptions<TRow extends TableRow> extends TableStateOptions {
26
+ data: readonly TRow[] | ReadableEmitter<readonly TRow[], unknown>;
27
+ }
28
+ export interface QueryTableDataSourceOptions<TRow extends TableRow> extends TableStateOptions {
29
+ query: TableQueryInput<TRow>;
30
+ }
31
+ export interface HandlerTableDataSourceOptions<TRow extends TableRow> extends TableStateOptions {
32
+ handler: QueryHandlerLike<TableQueryArguments, readonly TRow[]>;
33
+ }
34
+ export interface RestTableDataSourceOptions<TRow extends TableRow> extends TableStateOptions {
35
+ url: string;
36
+ baseUrl?: string;
37
+ fetch?: FetchLike<readonly TRow[]>;
38
+ serializeQuery?: QuerySerializer<TableQueryArguments>;
39
+ }
40
+ /** Create a source that applies table state to local data. The caller owns it. */
41
+ export declare function createLocalTableDataSource<TRow extends TableRow>(options: LocalTableDataSourceOptions<TRow>): TableDataSource<TRow>;
42
+ /** Package a caller-owned query with the sort/filter emitters that drive it. */
43
+ export declare function createQueryTableDataSource<TRow extends TableRow>(options: QueryTableDataSourceOptions<TRow>): TableDataSource<TRow>;
44
+ /** Create a LiveQuery-backed source from an application-supplied handler. */
45
+ export declare function createHandlerTableDataSource<TRow extends TableRow>(options: HandlerTableDataSourceOptions<TRow>): TableDataSource<TRow>;
46
+ /** Create the convenient REST-backed source. The caller owns the result. */
47
+ export declare function createRestTableDataSource<TRow extends TableRow>(options: RestTableDataSourceOptions<TRow>): TableDataSource<TRow>;
48
+ export {};
49
+ //# sourceMappingURL=tableDataSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableDataSource.d.ts","sourceRoot":"","sources":["../../../../src/Components/data/table/tableDataSource.ts"],"names":[],"mappings":"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"}
@@ -13,11 +13,15 @@ export interface TableQueryState {
13
13
  sort?: TableSort | null;
14
14
  filters?: TableFilters;
15
15
  }
16
+ export declare const DefaultTableFilterEncoding: Readonly<Record<FilterModeValue, string>>;
16
17
  /**
17
- * Serialize Fray's experimental remote-table wire format.
18
+ * Serialize Fray's compact remote-table wire format.
18
19
  *
19
20
  * - `sort=field:asc|desc`
20
- * - repeated `filter=field:mode:JSON(value)` entries
21
+ * - repeated `filter=field:token:JSON(value)` entries
22
+ *
23
+ * Semantic modes deliberately remain separate from this compatibility wire
24
+ * encoding. Endpoints with another contract should inject their own serializer.
21
25
  */
22
26
  export declare function serializeTableQuery<TUrl extends UrlLike>(url: TUrl, { sort, filters }?: TableQueryState): TUrl;
23
27
  export declare function applyLocalTableState<TRow>(rows: readonly TRow[], sort: TableSort | null, filters: TableFilters): TRow[];
@@ -1 +1 @@
1
- {"version":3,"file":"tableQuery.d.ts","sourceRoot":"","sources":["../../../../src/Components/data/table/tableQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,uBAAuB,CAAA;AAGlD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAA;AAEhE,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;CAC5B;AAED,MAAM,MAAM,gBAAgB,CAAC,MAAM,GAAG,OAAO,IAAI,SAAS;IACtD,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,eAAe;CACxB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC,CAAA;AAEtE,MAAM,WAAW,eAAe;IAC5B,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB,OAAO,CAAC,EAAE,YAAY,CAAA;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,SAAS,OAAO,EACpD,GAAG,EAAE,IAAI,EACT,EAAC,IAAW,EAAE,OAAY,EAAC,GAAE,eAAoB,GAClD,IAAI,CAkBN;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EACrC,IAAI,EAAE,SAAS,IAAI,EAAE,EACrB,IAAI,EAAE,SAAS,GAAG,IAAI,EACtB,OAAO,EAAE,YAAY,GACtB,IAAI,EAAE,CAQR;AAmBD,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS,CAOnE"}
1
+ {"version":3,"file":"tableQuery.d.ts","sourceRoot":"","sources":["../../../../src/Components/data/table/tableQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,uBAAuB,CAAA;AAGlD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAA;AAEhE,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;CAC5B;AAED,MAAM,MAAM,gBAAgB,CAAC,MAAM,GAAG,OAAO,IAAI,SAAS;IACtD,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,eAAe;CACxB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC,CAAA;AAEtE,MAAM,WAAW,eAAe;IAC5B,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB,OAAO,CAAC,EAAE,YAAY,CAAA;CACzB;AAED,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAKhF,CAAA;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,SAAS,OAAO,EACpD,GAAG,EAAE,IAAI,EACT,EAAC,IAAW,EAAE,OAAY,EAAC,GAAE,eAAoB,GAClD,IAAI,CAkBN;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EACrC,IAAI,EAAE,SAAS,IAAI,EAAE,EACrB,IAAI,EAAE,SAAS,GAAG,IAAI,EACtB,OAAO,EAAE,YAAY,GACtB,IAAI,EAAE,CAQR;AAmBD,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS,CAOnE"}
@@ -0,0 +1,23 @@
1
+ import { DerivedEmitter } from '@sylwellsoftware/glue';
2
+ import type { ReadableEmitter } from '@sylwellsoftware/glue';
3
+ import type { Key } from '../../component.js';
4
+ import type { ValueEmitter } from '../../controlUtils.js';
5
+ import type { TreeNode } from './treeitem.js';
6
+ /** Validate a tree snapshot and reject keys that are not globally unique. */
7
+ export declare function assertTreeNodes<TValue>(value: unknown): asserts value is readonly TreeNode<TValue>[];
8
+ export declare function findTreeNode<TValue>(nodes: readonly TreeNode<TValue>[], key: Key): TreeNode<TValue> | null;
9
+ /**
10
+ * Project the current node for a key from complete root snapshots.
11
+ *
12
+ * The projection is read-only: application commands update the authoritative
13
+ * source, which causes the full tree and then this projection to recompute.
14
+ */
15
+ export declare function deriveTreeNode<TValue>(nodes: ReadableEmitter<readonly TreeNode<TValue>[], unknown>, key: ReadableEmitter<Key | null, unknown>, owner?: unknown): DerivedEmitter<TreeNode<TValue> | null, readonly [
16
+ ReadableEmitter<readonly TreeNode<TValue>[], unknown>,
17
+ ReadableEmitter<Key | null, unknown>
18
+ ]>;
19
+ /** Return a path-copied root snapshot, or the original array when no key exists. */
20
+ export declare function updateTreeNode<TValue>(nodes: readonly TreeNode<TValue>[], key: Key, update: (node: TreeNode<TValue>) => TreeNode<TValue>): readonly TreeNode<TValue>[];
21
+ /** Apply a path-copy update to an authoritative writable root emitter. */
22
+ export declare function updateWritableTreeNode<TValue>(nodes: ValueEmitter<readonly TreeNode<TValue>[]>, key: Key, update: (node: TreeNode<TValue>) => TreeNode<TValue>, cause?: unknown): boolean;
23
+ //# sourceMappingURL=treeModel.d.ts.map