@sylwellsoftware/fray 0.2.0 → 0.4.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.
- package/README.md +139 -13
- package/dist/Components/Placeholder.d.ts +1 -1
- package/dist/Components/Placeholder.d.ts.map +1 -1
- package/dist/Components/component.d.ts +5 -0
- package/dist/Components/component.d.ts.map +1 -1
- package/dist/Components/controlUtils.d.ts.map +1 -1
- package/dist/Components/data/filterState.d.ts +38 -0
- package/dist/Components/data/filterState.d.ts.map +1 -0
- package/dist/Components/data/listview/listview.d.ts +16 -5
- package/dist/Components/data/listview/listview.d.ts.map +1 -1
- package/dist/Components/data/selectionhandler.d.ts +24 -5
- package/dist/Components/data/selectionhandler.d.ts.map +1 -1
- package/dist/Components/data/table/DataTable.d.ts +36 -30
- package/dist/Components/data/table/DataTable.d.ts.map +1 -1
- package/dist/Components/data/table/FilterPanel.d.ts +8 -1
- package/dist/Components/data/table/FilterPanel.d.ts.map +1 -1
- package/dist/Components/data/table/TableHeaderCell.d.ts.map +1 -1
- package/dist/Components/data/table/tableDataSource.d.ts +49 -0
- package/dist/Components/data/table/tableDataSource.d.ts.map +1 -0
- package/dist/Components/data/table/tableQuery.d.ts +6 -2
- package/dist/Components/data/table/tableQuery.d.ts.map +1 -1
- package/dist/Components/data/treeview/treeModel.d.ts +23 -0
- package/dist/Components/data/treeview/treeModel.d.ts.map +1 -0
- package/dist/Components/data/treeview/treeview.d.ts +1 -1
- package/dist/Components/data/treeview/treeview.d.ts.map +1 -1
- package/dist/Components/dialog/dialog.d.ts +1 -1
- package/dist/Components/dialog/dialog.d.ts.map +1 -1
- package/dist/Components/lineinputs/checkbox/Checkbox.d.ts +1 -1
- package/dist/Components/lineinputs/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/Components/lineinputs/checkbox/QuadCheckbox.d.ts +2 -2
- package/dist/Components/lineinputs/checkbox/QuadCheckbox.d.ts.map +1 -1
- package/dist/Components/lineinputs/checkbox/TriCheckbox.d.ts +2 -2
- package/dist/Components/lineinputs/checkbox/TriCheckbox.d.ts.map +1 -1
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2680 -726
- package/dist/index.js.map +1 -1
- package/dist/{jsx-dev-runtime-DukiDpV9.js → jsx-dev-runtime-pzseD2Sz.js} +527 -414
- package/dist/jsx-dev-runtime-pzseD2Sz.js.map +1 -0
- package/dist/jsx-dev-runtime.js +3 -3
- package/dist/jsx-runtime.js +2 -2
- package/dist/runtime.d.ts +4 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/services.d.ts +45 -0
- package/dist/services.d.ts.map +1 -0
- package/dist/util/filterMode.d.ts +6 -4
- package/dist/util/filterMode.d.ts.map +1 -1
- package/package.json +4 -9
- package/styles/structural.css +9 -3
- package/themes/README.md +1 -1
- package/themes/minimal/theme.css +1 -1
- package/EXPERIMENTAL.md +0 -75
- package/dist/button-CqDGmkBt.js +0 -212
- package/dist/button-CqDGmkBt.js.map +0 -1
- package/dist/experimental.d.ts +0 -16
- package/dist/experimental.d.ts.map +0 -1
- package/dist/experimental.js +0 -1399
- package/dist/experimental.js.map +0 -1
- package/dist/jsx-dev-runtime-DukiDpV9.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Fray
|
|
2
2
|
|
|
3
|
-
Fray is
|
|
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
|
|
7
|
+
Install it together with its Glue peer:
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
pnpm add @sylwellsoftware/glue @sylwellsoftware/fray
|
|
@@ -65,8 +65,8 @@ Responsibility stays at the narrowest layer that understands it:
|
|
|
65
65
|
|
|
66
66
|
| Concern | Owner |
|
|
67
67
|
| --- | --- |
|
|
68
|
-
| Domain state, endpoint configuration, page composition, theme availability and selection policy | Application |
|
|
69
|
-
| DOM structure, native events, accessibility, component lifetime, visual async states | Fray components |
|
|
68
|
+
| Domain state, service implementations/providers, endpoint configuration, page composition, theme availability and selection policy | Application |
|
|
69
|
+
| DOM structure, native events, accessibility, component lifetime, service-scope propagation, visual async states | Fray components/runtime |
|
|
70
70
|
| Mutable/computed values, query timing/results, fetch state, optional causality | Glue |
|
|
71
71
|
| URL/wire serialization and retrieval mechanism | Injected Glue query handler/application adapter |
|
|
72
72
|
| Layout/flow CSS and stable component/part hooks | Fray structural styling |
|
|
@@ -139,6 +139,64 @@ class App extends Component {
|
|
|
139
139
|
}
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
+
## Application services without prop-drilling
|
|
143
|
+
|
|
144
|
+
Service classes remain ordinary application TypeScript. They commonly group
|
|
145
|
+
immutable Glue endpoint declarations, while every `open()` call still creates
|
|
146
|
+
a caller-owned live result:
|
|
147
|
+
|
|
148
|
+
```ts
|
|
149
|
+
class ProjectService {
|
|
150
|
+
readonly label = 'Projects'
|
|
151
|
+
readonly projects = new RestEndpoint<
|
|
152
|
+
{search: string},
|
|
153
|
+
readonly Project[]
|
|
154
|
+
>({url: '/api/projects', parseResult: parseProjects})
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const projectService = defineService<ProjectService>('projects')
|
|
158
|
+
const services = createServiceScope([
|
|
159
|
+
provideService(projectService, () => new ProjectService()),
|
|
160
|
+
])
|
|
161
|
+
const runtime = createFrayRuntime({services})
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
The composition root chooses the implementation once. Every nested class
|
|
165
|
+
component created through that runtime inherits the scope:
|
|
166
|
+
|
|
167
|
+
```ts
|
|
168
|
+
class ProjectList extends Component {
|
|
169
|
+
static requiredServices = [projectService]
|
|
170
|
+
private service!: ProjectService
|
|
171
|
+
|
|
172
|
+
initialize() {
|
|
173
|
+
this.service = this.requireService(projectService)
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
render() {
|
|
177
|
+
return h('output', null, this.service.label)
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Dependencies must be declared in `static requiredServices`. Resolution is
|
|
183
|
+
available during `initialize()` and later, after Fray has assigned the runtime;
|
|
184
|
+
constructors cannot resolve services. A missing service fails before component
|
|
185
|
+
initialization, and an undeclared lookup also fails clearly.
|
|
186
|
+
|
|
187
|
+
Providers are fixed when `ServiceScope` is created. Factories run lazily once
|
|
188
|
+
per scope, can explicitly require another registered service, and are checked
|
|
189
|
+
for circular resolution. `scope.dispose()` disposes initialized services in
|
|
190
|
+
reverse creation order. Components dispose the queries/results they open, not
|
|
191
|
+
the shared service. Create one scope per browser application or test. Because
|
|
192
|
+
the scope is explicit rather than global, a future non-browser adapter can
|
|
193
|
+
preserve request/session isolation without changing service definitions.
|
|
194
|
+
|
|
195
|
+
There is intentionally no transient resolve-on-every-call lifetime. Independent
|
|
196
|
+
query state comes from caller-owned endpoint results. Function components stay
|
|
197
|
+
presentation-oriented and receive rendered values or emitters from a nearby
|
|
198
|
+
lifecycle-owning class component.
|
|
199
|
+
|
|
142
200
|
## Component host elements
|
|
143
201
|
|
|
144
202
|
Fray components with a wrapper render a standards-valid custom host element,
|
|
@@ -207,7 +265,7 @@ TypeScript TSX is Fray's supported template syntax. Classic JSX and direct
|
|
|
207
265
|
use the same renderer. A future template-file syntax can target this vnode
|
|
208
266
|
contract without changing Glue binding semantics.
|
|
209
267
|
|
|
210
|
-
Fray's
|
|
268
|
+
Fray's built-ins are authored in TSX. Direct
|
|
211
269
|
`h()` remains supported for consumers that do not use JSX and as the renderer's
|
|
212
270
|
canonical vnode operation, but it is not the built-in component authoring
|
|
213
271
|
format. The workspace lint gate rejects new `h()` templates under
|
|
@@ -738,19 +796,87 @@ operation, labelled roles, reduced motion, 200% configured text sizing, and
|
|
|
738
796
|
forced-colors focus visibility. A formal manual screen-reader pass is still a
|
|
739
797
|
release-candidate requirement; automated checks are not a substitute for it.
|
|
740
798
|
|
|
741
|
-
##
|
|
799
|
+
## Data workflows
|
|
800
|
+
|
|
801
|
+
`ListView`, `DataTable`, `TreeView`, `TreeItem`, `Dialog`, `FilterPanel`, and
|
|
802
|
+
their model helpers are part of the package entry point. All accept
|
|
803
|
+
ordinary Glue emitters; they do not introduce a second state store.
|
|
804
|
+
|
|
805
|
+
List and table selection is discriminated by cardinality. Single selection is
|
|
806
|
+
an item or `null`; array state is reserved for explicit multi-selection:
|
|
807
|
+
|
|
808
|
+
```tsx
|
|
809
|
+
const selected = new Emitter<Project | null>(null)
|
|
810
|
+
const selectedRows = new Emitter<Project[]>([])
|
|
811
|
+
|
|
812
|
+
<ListView items={projects} selectedItemEmitter={selected} itemKey="id" />
|
|
813
|
+
<DataTable
|
|
814
|
+
data={projects}
|
|
815
|
+
columns={columns}
|
|
816
|
+
multiSelect
|
|
817
|
+
selectedItemsEmitter={selectedRows}
|
|
818
|
+
/>
|
|
819
|
+
```
|
|
820
|
+
|
|
821
|
+
Both modes reconcile selected keys to fresh objects when data is replaced.
|
|
822
|
+
Multi-selection retains Control/Command toggles, Shift and pointer-drag ranges,
|
|
823
|
+
and keyboard operation.
|
|
824
|
+
|
|
825
|
+
DataTable accepts exactly one data boundary:
|
|
826
|
+
|
|
827
|
+
```tsx
|
|
828
|
+
// Direct local data; Fray derives sorted/filtered rows.
|
|
829
|
+
<DataTable data={projects} columns={columns} />
|
|
830
|
+
|
|
831
|
+
// Convenient REST adapter; the table creates and disposes this source.
|
|
832
|
+
<DataTable
|
|
833
|
+
rest={{url: '/api/projects', baseUrl: location.href}}
|
|
834
|
+
columns={columns}
|
|
835
|
+
/>
|
|
836
|
+
|
|
837
|
+
// Explicit source; the caller owns and eventually disposes it.
|
|
838
|
+
const source = createQueryTableDataSource({query, sortEmitter, filtersEmitter})
|
|
839
|
+
<DataTable dataSource={source} columns={columns} />
|
|
840
|
+
```
|
|
841
|
+
|
|
842
|
+
`createLocalTableDataSource`, `createQueryTableDataSource`,
|
|
843
|
+
`createHandlerTableDataSource`, and `createRestTableDataSource` make ownership
|
|
844
|
+
visible. Sources package the row query with sort/filter emitters, retry, and
|
|
845
|
+
disposal. The default REST serializer retains the compact existing endpoint
|
|
846
|
+
tokens; inject `serializeQuery` when an endpoint uses another wire contract.
|
|
847
|
+
|
|
848
|
+
Tree node state is projected from complete immutable snapshots:
|
|
849
|
+
|
|
850
|
+
```ts
|
|
851
|
+
const selectedNode = deriveTreeNode(treeNodes, selectedKey)
|
|
852
|
+
|
|
853
|
+
// Only for an authoritative writable root:
|
|
854
|
+
updateWritableTreeNode(treeNodes, 'project-1', (node) => ({...node, label: 'Updated'}))
|
|
855
|
+
```
|
|
742
856
|
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
857
|
+
For a tree derived from domain state, a callback updates that real source; the
|
|
858
|
+
tree derivation then rebuilds and `deriveTreeNode` resolves the fresh node.
|
|
859
|
+
`updateTreeNode` is the equivalent pure path-copy operation.
|
|
860
|
+
|
|
861
|
+
Generic `FilterState` keeps `neutral`, `prefer`, `require`, and `deny` semantic
|
|
862
|
+
values separate from glyphs and transport. `filterByState`,
|
|
863
|
+
`deriveFilterPredicate`, and `deriveFilteredItems` consume caller-supplied
|
|
864
|
+
dimension matchers. `serializeFilterState`/`parseFilterState` round-trip
|
|
865
|
+
validated version-1 plain data without owning URL or storage access. Unknown
|
|
866
|
+
valid keys are preserved and ignored until a matching definition exists.
|
|
867
|
+
Dimensions combine with AND. Within each dimension, a denied match always
|
|
868
|
+
rejects, every required option must match, and at least one preferred option
|
|
869
|
+
must match when preferences are active. Neutral options do not constrain the
|
|
870
|
+
result.
|
|
871
|
+
|
|
872
|
+
The stable non-virtualized performance boundary and detailed state behavior are
|
|
873
|
+
documented in this guide. See the migration notes in the changelog before
|
|
874
|
+
upgrading from 0.2.x.
|
|
749
875
|
|
|
750
876
|
Fray is not a replacement for an SSR/hydration framework, Web Components,
|
|
751
877
|
React/Vue adapters, a broad design system, a virtualized production data grid,
|
|
752
878
|
legacy-browser support, or a stable `1.0` API. See the [workspace
|
|
753
|
-
overview](../../README.md), [
|
|
879
|
+
overview](../../README.md), [API surface](../../docs/API_SURFACE.md),
|
|
754
880
|
[architecture overview](../../docs/architecture.md),
|
|
755
881
|
[changelog](../../CHANGELOG.md), [contribution guide](../../CONTRIBUTING.md),
|
|
756
882
|
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
|
|
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,
|
|
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,5 +1,6 @@
|
|
|
1
1
|
import type { EventBubble, FetchStateValue, ReadableEmitter } from '@sylwellsoftware/glue';
|
|
2
2
|
import { FrayRuntime } from '../runtime.js';
|
|
3
|
+
import type { ServiceKey } from '../services.js';
|
|
3
4
|
export declare const Fragment: unique symbol;
|
|
4
5
|
export type Key = string | number;
|
|
5
6
|
export interface ComponentProps {
|
|
@@ -131,6 +132,7 @@ export declare namespace h {
|
|
|
131
132
|
export declare function css(strings: TemplateStringsArray, ...values: unknown[]): string;
|
|
132
133
|
export declare class Component<TProps extends ComponentProps = ComponentProps> {
|
|
133
134
|
static dependencies: ComponentDependency[];
|
|
135
|
+
static requiredServices: readonly ServiceKey<unknown>[];
|
|
134
136
|
static css: string;
|
|
135
137
|
static hostName: string | null;
|
|
136
138
|
static standaloneHostName: string | null;
|
|
@@ -175,9 +177,12 @@ export declare class Component<TProps extends ComponentProps = ComponentProps> {
|
|
|
175
177
|
/** Read a Glue value, fetch state, and error as one tracked render dependency. */
|
|
176
178
|
snapshot<TValue, TError>(emitter: ReadableEmitter<TValue, TError>): EmitterSnapshot<TValue, TError>;
|
|
177
179
|
onCleanup(cleanup: () => void): () => void;
|
|
180
|
+
/** Resolve one explicitly declared application service from this component's runtime. */
|
|
181
|
+
protected requireService<TService>(key: ServiceKey<TService>): TService;
|
|
178
182
|
listen<TEvent extends Event = Event>(target: EventTarget, type: string, listener: (event: TEvent) => void, options?: boolean | AddEventListenerOptions): this;
|
|
179
183
|
registerChild<TComponent extends Component>(component: TComponent): TComponent;
|
|
180
184
|
destroy(): void;
|
|
185
|
+
private validateRequiredServices;
|
|
181
186
|
onDestroy(): void;
|
|
182
187
|
private trackRenderRead;
|
|
183
188
|
private reconcileRenderReads;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/Components/component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,WAAW,EACX,eAAe,EACf,eAAe,EAClB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAC,WAAW,EAAqB,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/Components/component.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
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
|
-
|
|
3
|
+
interface SelectionHandlerCommonConfig<TItem> {
|
|
4
4
|
getItems: () => readonly TItem[];
|
|
5
5
|
getKey?: ItemKeyGetter<TItem>;
|
|
6
|
-
selectedItemsEmitter?: ValueEmitter<TItem[]>;
|
|
7
6
|
owner?: unknown;
|
|
8
|
-
|
|
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, }:
|
|
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:
|
|
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":"
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
46
|
-
readonly filtersEmitter:
|
|
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
|
|
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":"
|
|
1
|
+
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../src/Components/data/table/DataTable.tsx"],"names":[],"mappings":"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"}
|