@coveord/plasma-mantine 55.4.0 → 55.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +3 -3
- package/.turbo/turbo-test.log +51 -46
- package/dist/.tsbuildinfo +1 -1
- package/dist/cjs/components/table/index.d.ts +1 -0
- package/dist/cjs/components/table/index.d.ts.map +1 -1
- package/dist/cjs/components/table/index.js +4 -0
- package/dist/cjs/components/table/index.js.map +1 -1
- package/dist/cjs/components/table/table-predicate/TablePredicate.d.ts.map +1 -1
- package/dist/cjs/components/table/table-predicate/TablePredicate.js +4 -1
- package/dist/cjs/components/table/table-predicate/TablePredicate.js.map +1 -1
- package/dist/cjs/components/table/use-table.d.ts.map +1 -1
- package/dist/cjs/components/table/use-table.js +11 -7
- package/dist/cjs/components/table/use-table.js.map +1 -1
- package/dist/cjs/components/table/use-url-synced-state.d.ts +18 -7
- package/dist/cjs/components/table/use-url-synced-state.d.ts.map +1 -1
- package/dist/cjs/components/table/use-url-synced-state.js +81 -30
- package/dist/cjs/components/table/use-url-synced-state.js.map +1 -1
- package/dist/esm/components/table/index.d.ts +1 -0
- package/dist/esm/components/table/index.d.ts.map +1 -1
- package/dist/esm/components/table/index.js +1 -0
- package/dist/esm/components/table/index.js.map +1 -1
- package/dist/esm/components/table/table-predicate/TablePredicate.d.ts.map +1 -1
- package/dist/esm/components/table/table-predicate/TablePredicate.js +3 -0
- package/dist/esm/components/table/table-predicate/TablePredicate.js.map +1 -1
- package/dist/esm/components/table/use-table.d.ts.map +1 -1
- package/dist/esm/components/table/use-table.js +11 -7
- package/dist/esm/components/table/use-table.js.map +1 -1
- package/dist/esm/components/table/use-url-synced-state.d.ts +18 -7
- package/dist/esm/components/table/use-url-synced-state.d.ts.map +1 -1
- package/dist/esm/components/table/use-url-synced-state.js +57 -27
- package/dist/esm/components/table/use-url-synced-state.js.map +1 -1
- package/package.json +2 -2
- package/src/components/table/__tests__/use-url-synced-state.unit.spec.ts +74 -21
- package/src/components/table/index.ts +1 -0
- package/src/components/table/table-predicate/TablePredicate.tsx +1 -0
- package/src/components/table/use-table.ts +12 -7
- package/src/components/table/use-url-synced-state.ts +89 -39
|
@@ -4,4 +4,5 @@ export { type TablePredicateProps } from './table-predicate/TablePredicate';
|
|
|
4
4
|
export { type TableAction, type TableLayout, type TableLayoutProps, type TableProps } from './Table.types';
|
|
5
5
|
export { useTableContext } from './TableContext';
|
|
6
6
|
export { useTable, type TableState, type TableStore, type UseTableOptions } from './use-table';
|
|
7
|
+
export { useUrlSyncedState } from './use-url-synced-state';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,IAAI,eAAe,EAAC,MAAM,uBAAuB,CAAC;AACpE,cAAc,SAAS,CAAC;AACxB,OAAO,EAAC,KAAK,mBAAmB,EAAC,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAC,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAC,MAAM,eAAe,CAAC;AACzG,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAC,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,IAAI,eAAe,EAAC,MAAM,uBAAuB,CAAC;AACpE,cAAc,SAAS,CAAC;AACxB,OAAO,EAAC,KAAK,mBAAmB,EAAC,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAC,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAC,MAAM,eAAe,CAAC;AACzG,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAC,MAAM,aAAa,CAAC;AAC7F,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC"}
|
|
@@ -17,6 +17,9 @@ _export(exports, {
|
|
|
17
17
|
},
|
|
18
18
|
useTableContext: function() {
|
|
19
19
|
return _TableContext.useTableContext;
|
|
20
|
+
},
|
|
21
|
+
useUrlSyncedState: function() {
|
|
22
|
+
return _useurlsyncedstate.useUrlSyncedState;
|
|
20
23
|
}
|
|
21
24
|
});
|
|
22
25
|
var _export_star = require("@swc/helpers/_/_export_star");
|
|
@@ -24,5 +27,6 @@ var _reacttable = require("@tanstack/react-table");
|
|
|
24
27
|
_export_star._(require("./Table"), exports);
|
|
25
28
|
var _TableContext = require("./TableContext");
|
|
26
29
|
var _usetable = require("./use-table");
|
|
30
|
+
var _useurlsyncedstate = require("./use-url-synced-state");
|
|
27
31
|
|
|
28
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/table/index.ts"],"sourcesContent":["export {flexRender as renderTableCell} from '@tanstack/react-table';\nexport * from './Table';\nexport {type TablePredicateProps} from './table-predicate/TablePredicate';\nexport {type TableAction, type TableLayout, type TableLayoutProps, type TableProps} from './Table.types';\nexport {useTableContext} from './TableContext';\nexport {useTable, type TableState, type TableStore, type UseTableOptions} from './use-table';\n"],"names":["renderTableCell","flexRender","useTable","useTableContext"],"mappings":";;;;;;;;;;;IAAsBA,eAAe;eAA7BC,sBAAU;;IAKVC,QAAQ;eAARA,kBAAQ;;IADRC,eAAe;eAAfA,6BAAe;;;;
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/table/index.ts"],"sourcesContent":["export {flexRender as renderTableCell} from '@tanstack/react-table';\nexport * from './Table';\nexport {type TablePredicateProps} from './table-predicate/TablePredicate';\nexport {type TableAction, type TableLayout, type TableLayoutProps, type TableProps} from './Table.types';\nexport {useTableContext} from './TableContext';\nexport {useTable, type TableState, type TableStore, type UseTableOptions} from './use-table';\nexport {useUrlSyncedState} from './use-url-synced-state';\n"],"names":["renderTableCell","flexRender","useTable","useTableContext","useUrlSyncedState"],"mappings":";;;;;;;;;;;IAAsBA,eAAe;eAA7BC,sBAAU;;IAKVC,QAAQ;eAARA,kBAAQ;;IADRC,eAAe;eAAfA,6BAAe;;IAEfC,iBAAiB;eAAjBA,oCAAiB;;;;0BANmB;uBAC9B;4BAGgB;wBACiD;iCAC/C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TablePredicate.d.ts","sourceRoot":"","sources":["../../../../../src/components/table/table-predicate/TablePredicate.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EACR,YAAY,EACZ,sBAAsB,EAEtB,OAAO,EAIP,WAAW,EAGd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAKxC,MAAM,MAAM,yBAAyB,GAAG,WAAW,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAEhH,MAAM,WAAW,mBACb,SAAQ,QAAQ,EACZ,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,eAAe,CAAC,EACnD,sBAAsB,CAAC,qBAAqB,CAAC;IACjD;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,IAAI,EAAE,YAAY,CAAC;IACnB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC;IACxC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,GAAG,EAAE,cAAc,CAAC;IACpB,WAAW,EAAE,yBAAyB,CAAC;IACvC,QAAQ,EAAE,IAAI,CAAC;CAClB,CAAC,CAAC;AAIH,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"TablePredicate.d.ts","sourceRoot":"","sources":["../../../../../src/components/table/table-predicate/TablePredicate.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EACR,YAAY,EACZ,sBAAsB,EAEtB,OAAO,EAIP,WAAW,EAGd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAKxC,MAAM,MAAM,yBAAyB,GAAG,WAAW,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAEhH,MAAM,WAAW,mBACb,SAAQ,QAAQ,EACZ,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,eAAe,CAAC,EACnD,sBAAsB,CAAC,qBAAqB,CAAC;IACjD;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,IAAI,EAAE,YAAY,CAAC;IACnB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC;IACxC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,GAAG,EAAE,cAAc,CAAC;IACpB,WAAW,EAAE,yBAAyB,CAAC;IACvC,QAAQ,EAAE,IAAI,CAAC;CAClB,CAAC,CAAC;AAIH,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,mBAAmB,CAoChE,CAAC"}
|
|
@@ -73,7 +73,10 @@ var TablePredicate = (0, _core.factory)(function(props, ref) {
|
|
|
73
73
|
data: data,
|
|
74
74
|
"aria-label": label !== null && label !== void 0 ? label : id,
|
|
75
75
|
searchable: data.length > 7,
|
|
76
|
-
renderOption: renderOption
|
|
76
|
+
renderOption: renderOption,
|
|
77
|
+
scrollAreaProps: {
|
|
78
|
+
type: 'always'
|
|
79
|
+
}
|
|
77
80
|
}, getStyles('predicateSelect', stylesApiProps)))
|
|
78
81
|
]
|
|
79
82
|
}))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/table/table-predicate/TablePredicate.tsx"],"sourcesContent":["import {\n BoxProps,\n ComboboxData,\n CompoundStylesApiProps,\n factory,\n Factory,\n Grid,\n Group,\n Select,\n SelectProps,\n Text,\n useProps,\n} from '@mantine/core';\nimport {FunctionComponent} from 'react';\n\nimport {TableComponentsOrder} from '../Table';\nimport {useTableContext} from '../TableContext';\n\nexport type TablePredicateStylesNames = 'predicate' | 'predicateWrapper' | 'predicateLabel' | 'predicateSelect';\n\nexport interface TablePredicateProps\n extends BoxProps,\n Pick<SelectProps, 'renderOption' | 'comboboxProps'>,\n CompoundStylesApiProps<TablePredicateFactory> {\n /**\n * Unique identifier for this predicate. Will be used to access the selected value in the table state\n */\n id: string;\n /**\n * The values to display in the predicate\n */\n data: ComboboxData;\n /**\n * The label to display next to the Select\n *\n */\n label: string;\n}\n\nexport type TablePredicateFactory = Factory<{\n props: TablePredicateProps;\n ref: HTMLDivElement;\n stylesNames: TablePredicateStylesNames;\n compound: true;\n}>;\n\nconst defaultProps: Partial<TablePredicateProps> = {};\n\nexport const TablePredicate: FunctionComponent<TablePredicateProps> = factory<TablePredicateFactory>((props, ref) => {\n const {store, getStyles} = useTableContext();\n const {id, data, label, classNames, className, styles, style, renderOption, comboboxProps, vars, ...others} =\n useProps('PlasmaTablePredicate', defaultProps, props);\n\n const handleChange = (newValue: string) => {\n store.setPredicates((prev) => ({...prev, [id]: newValue}));\n store.setPagination((prev) => ({...prev, pageIndex: 0}));\n };\n\n const stylesApiProps = {classNames, styles};\n\n return (\n <Grid.Col\n span=\"content\"\n order={TableComponentsOrder.Predicate}\n ref={ref}\n {...getStyles('predicate', {className, style, ...stylesApiProps})}\n {...others}\n >\n <Group gap=\"xs\" wrap=\"nowrap\" {...getStyles('predicateWrapper', stylesApiProps)}>\n {label ? <Text {...getStyles('predicateLabel', stylesApiProps)}>{label}:</Text> : null}\n <Select\n comboboxProps={{withinPortal: true, ...comboboxProps}}\n value={store.state.predicates[id]}\n onChange={handleChange}\n data={data}\n aria-label={label ?? id}\n searchable={data.length > 7}\n renderOption={renderOption}\n {...getStyles('predicateSelect', stylesApiProps)}\n />\n </Group>\n </Grid.Col>\n );\n});\n"],"names":["TablePredicate","defaultProps","factory","props","ref","useTableContext","store","getStyles","useProps","id","data","label","classNames","className","styles","style","renderOption","comboboxProps","vars","others","handleChange","newValue","setPredicates","prev","setPagination","pageIndex","stylesApiProps","Grid","Col","span","order","TableComponentsOrder","Predicate","Group","gap","wrap","Text","Select","withinPortal","value","state","predicates","onChange","aria-label","searchable","length"],"mappings":";;;;+BAgDaA;;;eAAAA;;;;;;;;oBApCN;qBAG4B;4BACL;AA8B9B,IAAMC,eAA6C,CAAC;AAE7C,IAAMD,iBAAyDE,IAAAA,aAAO,EAAwB,SAACC,OAAOC;IACzG,IAA2BC,mBAAAA,IAAAA,6BAAe,KAAnCC,QAAoBD,iBAApBC,OAAOC,YAAaF,iBAAbE;IACd,IACIC,YAAAA,IAAAA,cAAQ,EAAC,wBAAwBP,cAAcE,QAD5CM,KACHD,UADGC,IAAIC,OACPF,UADOE,MAAMC,QACbH,UADaG,OAAOC,aACpBJ,UADoBI,YAAYC,YAChCL,UADgCK,WAAWC,SAC3CN,UAD2CM,QAAQC,QACnDP,UADmDO,OAAOC,eAC1DR,UAD0DQ,cAAcC,gBACxET,UADwES,eAAeC,OACvFV,UADuFU,MAASC,sCAChGX;QADGC;QAAIC;QAAMC;QAAOC;QAAYC;QAAWC;QAAQC;QAAOC;QAAcC;QAAeC;;IAG3F,IAAME,eAAe,SAACC;QAClBf,MAAMgB,aAAa,CAAC,SAACC;mBAAU,4CAAIA,OAAM,uBAACd,IAAKY;;QAC/Cf,MAAMkB,aAAa,CAAC,SAACD;mBAAU,4CAAIA;gBAAME,WAAW;;;IACxD;IAEA,IAAMC,iBAAiB;QAACd,YAAAA;QAAYE,QAAAA;IAAM;IAE1C,qBACI,qBAACa,UAAI,CAACC,GAAG;QACLC,MAAK;QACLC,OAAOC,2BAAoB,CAACC,SAAS;QACrC5B,KAAKA;OACDG,UAAU,aAAa;QAACM,WAAAA;QAAWE,OAAAA;OAAUW,kBAC7CP;kBAEJ,cAAA,sBAACc,WAAK;YAACC,KAAI;YAAKC,MAAK;WAAa5B,UAAU,oBAAoBmB;;gBAC3Df,sBAAQ,sBAACyB,UAAI,8CAAK7B,UAAU,kBAAkBmB;;wBAAkBf;wBAAM;;sBAAW;8BAClF,qBAAC0B,YAAM;oBACHpB,eAAe;wBAACqB,cAAc;uBAASrB;oBACvCsB,OAAOjC,MAAMkC,KAAK,CAACC,UAAU,CAAChC,GAAG;oBACjCiC,UAAUtB;oBACVV,MAAMA;oBACNiC,cAAYhC,kBAAAA,mBAAAA,QAASF;oBACrBmC,YAAYlC,KAAKmC,MAAM,GAAG;oBAC1B7B,cAAcA;
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/table/table-predicate/TablePredicate.tsx"],"sourcesContent":["import {\n BoxProps,\n ComboboxData,\n CompoundStylesApiProps,\n factory,\n Factory,\n Grid,\n Group,\n Select,\n SelectProps,\n Text,\n useProps,\n} from '@mantine/core';\nimport {FunctionComponent} from 'react';\n\nimport {TableComponentsOrder} from '../Table';\nimport {useTableContext} from '../TableContext';\n\nexport type TablePredicateStylesNames = 'predicate' | 'predicateWrapper' | 'predicateLabel' | 'predicateSelect';\n\nexport interface TablePredicateProps\n extends BoxProps,\n Pick<SelectProps, 'renderOption' | 'comboboxProps'>,\n CompoundStylesApiProps<TablePredicateFactory> {\n /**\n * Unique identifier for this predicate. Will be used to access the selected value in the table state\n */\n id: string;\n /**\n * The values to display in the predicate\n */\n data: ComboboxData;\n /**\n * The label to display next to the Select\n *\n */\n label: string;\n}\n\nexport type TablePredicateFactory = Factory<{\n props: TablePredicateProps;\n ref: HTMLDivElement;\n stylesNames: TablePredicateStylesNames;\n compound: true;\n}>;\n\nconst defaultProps: Partial<TablePredicateProps> = {};\n\nexport const TablePredicate: FunctionComponent<TablePredicateProps> = factory<TablePredicateFactory>((props, ref) => {\n const {store, getStyles} = useTableContext();\n const {id, data, label, classNames, className, styles, style, renderOption, comboboxProps, vars, ...others} =\n useProps('PlasmaTablePredicate', defaultProps, props);\n\n const handleChange = (newValue: string) => {\n store.setPredicates((prev) => ({...prev, [id]: newValue}));\n store.setPagination((prev) => ({...prev, pageIndex: 0}));\n };\n\n const stylesApiProps = {classNames, styles};\n\n return (\n <Grid.Col\n span=\"content\"\n order={TableComponentsOrder.Predicate}\n ref={ref}\n {...getStyles('predicate', {className, style, ...stylesApiProps})}\n {...others}\n >\n <Group gap=\"xs\" wrap=\"nowrap\" {...getStyles('predicateWrapper', stylesApiProps)}>\n {label ? <Text {...getStyles('predicateLabel', stylesApiProps)}>{label}:</Text> : null}\n <Select\n comboboxProps={{withinPortal: true, ...comboboxProps}}\n value={store.state.predicates[id]}\n onChange={handleChange}\n data={data}\n aria-label={label ?? id}\n searchable={data.length > 7}\n renderOption={renderOption}\n scrollAreaProps={{type: 'always'}}\n {...getStyles('predicateSelect', stylesApiProps)}\n />\n </Group>\n </Grid.Col>\n );\n});\n"],"names":["TablePredicate","defaultProps","factory","props","ref","useTableContext","store","getStyles","useProps","id","data","label","classNames","className","styles","style","renderOption","comboboxProps","vars","others","handleChange","newValue","setPredicates","prev","setPagination","pageIndex","stylesApiProps","Grid","Col","span","order","TableComponentsOrder","Predicate","Group","gap","wrap","Text","Select","withinPortal","value","state","predicates","onChange","aria-label","searchable","length","scrollAreaProps","type"],"mappings":";;;;+BAgDaA;;;eAAAA;;;;;;;;oBApCN;qBAG4B;4BACL;AA8B9B,IAAMC,eAA6C,CAAC;AAE7C,IAAMD,iBAAyDE,IAAAA,aAAO,EAAwB,SAACC,OAAOC;IACzG,IAA2BC,mBAAAA,IAAAA,6BAAe,KAAnCC,QAAoBD,iBAApBC,OAAOC,YAAaF,iBAAbE;IACd,IACIC,YAAAA,IAAAA,cAAQ,EAAC,wBAAwBP,cAAcE,QAD5CM,KACHD,UADGC,IAAIC,OACPF,UADOE,MAAMC,QACbH,UADaG,OAAOC,aACpBJ,UADoBI,YAAYC,YAChCL,UADgCK,WAAWC,SAC3CN,UAD2CM,QAAQC,QACnDP,UADmDO,OAAOC,eAC1DR,UAD0DQ,cAAcC,gBACxET,UADwES,eAAeC,OACvFV,UADuFU,MAASC,sCAChGX;QADGC;QAAIC;QAAMC;QAAOC;QAAYC;QAAWC;QAAQC;QAAOC;QAAcC;QAAeC;;IAG3F,IAAME,eAAe,SAACC;QAClBf,MAAMgB,aAAa,CAAC,SAACC;mBAAU,4CAAIA,OAAM,uBAACd,IAAKY;;QAC/Cf,MAAMkB,aAAa,CAAC,SAACD;mBAAU,4CAAIA;gBAAME,WAAW;;;IACxD;IAEA,IAAMC,iBAAiB;QAACd,YAAAA;QAAYE,QAAAA;IAAM;IAE1C,qBACI,qBAACa,UAAI,CAACC,GAAG;QACLC,MAAK;QACLC,OAAOC,2BAAoB,CAACC,SAAS;QACrC5B,KAAKA;OACDG,UAAU,aAAa;QAACM,WAAAA;QAAWE,OAAAA;OAAUW,kBAC7CP;kBAEJ,cAAA,sBAACc,WAAK;YAACC,KAAI;YAAKC,MAAK;WAAa5B,UAAU,oBAAoBmB;;gBAC3Df,sBAAQ,sBAACyB,UAAI,8CAAK7B,UAAU,kBAAkBmB;;wBAAkBf;wBAAM;;sBAAW;8BAClF,qBAAC0B,YAAM;oBACHpB,eAAe;wBAACqB,cAAc;uBAASrB;oBACvCsB,OAAOjC,MAAMkC,KAAK,CAACC,UAAU,CAAChC,GAAG;oBACjCiC,UAAUtB;oBACVV,MAAMA;oBACNiC,cAAYhC,kBAAAA,mBAAAA,QAASF;oBACrBmC,YAAYlC,KAAKmC,MAAM,GAAG;oBAC1B7B,cAAcA;oBACd8B,iBAAiB;wBAACC,MAAM;oBAAQ;mBAC5BxC,UAAU,mBAAmBmB;;;;AAKrD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-table.d.ts","sourceRoot":"","sources":["../../../../src/components/table/use-table.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"use-table.d.ts","sourceRoot":"","sources":["../../../../src/components/table/use-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,10 @@ var useTable = function() {
|
|
|
42
42
|
var userOptions = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
43
43
|
var options = (0, _lodashdefaultsdeep.default)({}, userOptions, defaultOptions);
|
|
44
44
|
var initialState = (0, _lodashdefaultsdeep.default)({}, options.initialState, defaultState);
|
|
45
|
+
/**
|
|
46
|
+
* The `useUrlSyncedState` hook defaults to synchronize, but the table wants to default to not synchronize,
|
|
47
|
+
* so always pass the sync option as a resolved boolean value.
|
|
48
|
+
*/ var sync = !!options.syncWithUrl;
|
|
45
49
|
// synced with url
|
|
46
50
|
var _useUrlSyncedState = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)({
|
|
47
51
|
initialState: initialState.pagination,
|
|
@@ -64,7 +68,7 @@ var useTable = function() {
|
|
|
64
68
|
pageSize: params.get('pageSize') ? parseInt(params.get('pageSize'), 10) : undefined
|
|
65
69
|
}, initialState.pagination);
|
|
66
70
|
},
|
|
67
|
-
sync:
|
|
71
|
+
sync: sync
|
|
68
72
|
}), 2), pagination = _useUrlSyncedState[0], setPagination = _useUrlSyncedState[1];
|
|
69
73
|
var _useUrlSyncedState1 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)({
|
|
70
74
|
initialState: initialState.sorting,
|
|
@@ -94,7 +98,7 @@ var useTable = function() {
|
|
|
94
98
|
};
|
|
95
99
|
});
|
|
96
100
|
},
|
|
97
|
-
sync:
|
|
101
|
+
sync: sync
|
|
98
102
|
}), 2), sorting = _useUrlSyncedState1[0], setSorting = _useUrlSyncedState1[1];
|
|
99
103
|
var _useUrlSyncedState2 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)({
|
|
100
104
|
initialState: initialState.globalFilter,
|
|
@@ -110,7 +114,7 @@ var useTable = function() {
|
|
|
110
114
|
var _params_get;
|
|
111
115
|
return (_params_get = params.get('filter')) !== null && _params_get !== void 0 ? _params_get : initialState.globalFilter;
|
|
112
116
|
},
|
|
113
|
-
sync:
|
|
117
|
+
sync: sync
|
|
114
118
|
}), 2), globalFilter = _useUrlSyncedState2[0], setGlobalFilter = _useUrlSyncedState2[1];
|
|
115
119
|
var _useUrlSyncedState3 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)({
|
|
116
120
|
initialState: initialState.predicates,
|
|
@@ -130,7 +134,7 @@ var useTable = function() {
|
|
|
130
134
|
return acc;
|
|
131
135
|
}, {});
|
|
132
136
|
},
|
|
133
|
-
sync:
|
|
137
|
+
sync: sync
|
|
134
138
|
}), 2), predicates = _useUrlSyncedState3[0], setPredicates = _useUrlSyncedState3[1];
|
|
135
139
|
var _useUrlSyncedState4 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)({
|
|
136
140
|
initialState: initialState.layout,
|
|
@@ -146,7 +150,7 @@ var useTable = function() {
|
|
|
146
150
|
var _params_get;
|
|
147
151
|
return (_params_get = params.get('layout')) !== null && _params_get !== void 0 ? _params_get : initialState.layout;
|
|
148
152
|
},
|
|
149
|
-
sync:
|
|
153
|
+
sync: sync
|
|
150
154
|
}), 2), layout = _useUrlSyncedState4[0], setLayout = _useUrlSyncedState4[1];
|
|
151
155
|
var _useUrlSyncedState5 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)({
|
|
152
156
|
initialState: initialState.dateRange,
|
|
@@ -170,7 +174,7 @@ var useTable = function() {
|
|
|
170
174
|
params.get('to') ? new Date(params.get('to')) : initialState.dateRange[1]
|
|
171
175
|
];
|
|
172
176
|
},
|
|
173
|
-
sync:
|
|
177
|
+
sync: sync
|
|
174
178
|
}), 2), dateRange = _useUrlSyncedState5[0], setDateRange = _useUrlSyncedState5[1];
|
|
175
179
|
var _useUrlSyncedState6 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)({
|
|
176
180
|
initialState: initialState.columnVisibility,
|
|
@@ -216,7 +220,7 @@ var useTable = function() {
|
|
|
216
220
|
});
|
|
217
221
|
return columns;
|
|
218
222
|
},
|
|
219
|
-
sync:
|
|
223
|
+
sync: sync
|
|
220
224
|
}), 2), columnVisibility = _useUrlSyncedState6[0], setColumnVisibility = _useUrlSyncedState6[1];
|
|
221
225
|
// unsynced
|
|
222
226
|
var _useState = _sliced_to_array._((0, _react.useState)(initialState.totalEntries), 2), totalEntries = _useState[0], _setTotalEntries = _useState[1];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/table/use-table.ts"],"sourcesContent":["import {useDidUpdate} from '@mantine/hooks';\nimport {type ExpandedState, type PaginationState, type SortingState} from '@tanstack/table-core';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport {Dispatch, SetStateAction, useCallback, useMemo, useState} from 'react';\nimport {type DateRangePickerValue} from '../date-range-picker';\nimport {useUrlSyncedState} from './use-url-synced-state';\n\n// Create a deeply optional version of another type\ntype DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\nexport interface TableState<TData = unknown> {\n /**\n * Current pagination state\n *\n * @default { pageIndex: 0, pageSize: 50 }\n */\n pagination: PaginationState;\n /**\n * Total number of entries in the table.\n * This number is used to calculate the number of pages in the pagination.\n * When null, the number of pages is calculated using the current data length.\n *\n * @default null\n */\n totalEntries: number | null;\n /**\n * Current sorting state\n *\n * @default []\n */\n sorting: SortingState;\n /**\n * Current global filter value\n *\n * @default ''\n */\n globalFilter: string;\n\n /**\n * Current expanded state\n *\n * @default {}\n */\n expanded: ExpandedState;\n /**\n * Predicates and their current value\n *\n * @default {}\n */\n predicates: Record<string, string>;\n /**\n * Layout currently selected. When null, the first layout is used.\n *\n * @default null\n */\n layout: string | null;\n /**\n * Currently selected date range\n *\n * @default [null, null]\n */\n dateRange: DateRangePickerValue;\n /**\n * Currently selected rows\n *\n * @default {}\n */\n rowSelection: Record<string, TData>;\n /**\n * Columns that are currently visible\n *\n * @default {}\n */\n columnVisibility: Record<string, boolean>;\n}\n\nexport interface TableStore<TData = unknown> {\n /**\n * Current state of the table.\n */\n state: TableState<TData>;\n /**\n * Allows to change the pagination state.\n */\n setPagination: Dispatch<SetStateAction<TableState<TData>['pagination']>>;\n /**\n * Allows to change the total number of entries.\n */\n setTotalEntries: Dispatch<SetStateAction<TableState<TData>['totalEntries']>>;\n /**\n * Allows to change the sorting state.\n */\n setSorting: Dispatch<SetStateAction<TableState<TData>['sorting']>>;\n /**\n * Allows to change the global filter value.\n */\n setGlobalFilter: Dispatch<SetStateAction<TableState<TData>['globalFilter']>>;\n /**\n * Allows to change the rows expanded state.\n */\n setExpanded: Dispatch<SetStateAction<TableState<TData>['expanded']>>;\n /**\n * Allows to change the predicates values.\n */\n setPredicates: Dispatch<SetStateAction<TableState<TData>['predicates']>>;\n /**\n * Allows to change the selected layout.\n */\n setLayout: Dispatch<SetStateAction<TableState<TData>['layout']>>;\n /**\n * Allows to change the selected date range.\n */\n setDateRange: Dispatch<SetStateAction<TableState<TData>['dateRange']>>;\n /**\n * Allows to change the current row selection.\n */\n setRowSelection: Dispatch<SetStateAction<TableState<TData>['rowSelection']>>;\n /**\n * Allows to change the visible columns.\n */\n setColumnVisibility: Dispatch<SetStateAction<TableState<TData>['columnVisibility']>>;\n /**\n * Whether the table is currently filtered.\n */\n isFiltered: boolean;\n /**\n * Whether the table has data when unfiltered.\n *\n * This is derived from the totalEntries so make sure you set that number correctly, even if you're using a client side table.\n */\n isVacant: boolean;\n /**\n * Clear currently applied filters.\n */\n clearFilters: () => void;\n /**\n * Deselects all currently selected rows.\n */\n clearRowSelection: () => void;\n /**\n * Get currently selected rows.\n */\n getSelectedRows: () => TData[];\n /**\n * Get currently selected row\n */\n getSelectedRow: () => TData | null;\n /**\n * Whether the user can select multiple rows at the same time.\n */\n multiRowSelectionEnabled: boolean;\n /**\n * Whether rows can be selected.\n */\n rowSelectionEnabled: boolean;\n /**\n * Whether row selection is forced.\n */\n rowSelectionForced: boolean;\n}\n\nexport interface UseTableOptions<TData = unknown> {\n /**\n * Initial state of the table.\n */\n initialState?: DeepPartial<TableState<TData>>;\n /**\n * Whether rows can be selected.\n *\n * @default true\n */\n enableRowSelection?: boolean;\n /**\n * Whether multiple rows can be selected at the same time.\n *\n * @default false\n */\n enableMultiRowSelection?: boolean;\n /**\n * Forces the user to always have one row selected.\n * When activating that setting, a good practice is to have a row already selected in the initial state.\n *\n * @default false\n */\n forceSelection?: boolean;\n /**\n * Whether to sync the table state with the URL.\n *\n * @default false\n */\n syncWithUrl?: boolean;\n}\n\nconst defaultOptions: UseTableOptions = {\n enableRowSelection: true,\n enableMultiRowSelection: false,\n forceSelection: false,\n syncWithUrl: false,\n};\n\nconst defaultState: Partial<TableState> = {\n pagination: {\n pageIndex: 0,\n pageSize: 50,\n },\n totalEntries: null,\n sorting: [],\n globalFilter: '',\n predicates: {},\n layout: null,\n dateRange: [null, null],\n rowSelection: {},\n columnVisibility: {},\n};\n\nexport const useTable = <TData>(userOptions: UseTableOptions<TData> = {}): TableStore<TData> => {\n const options = defaultsDeep({}, userOptions, defaultOptions) as UseTableOptions<TData>;\n const initialState = defaultsDeep({}, options.initialState, defaultState) as TableState<TData>;\n\n // synced with url\n const [pagination, setPagination] = useUrlSyncedState<TableState<TData>['pagination']>({\n initialState: initialState.pagination,\n serializer: ({pageIndex, pageSize}) => [\n ['page', (pageIndex + 1).toString()],\n ['pageSize', pageSize.toString()],\n ],\n deserializer: (params) =>\n defaultsDeep(\n {\n pageIndex: params.get('page') ? parseInt(params.get('page'), 10) - 1 : undefined,\n pageSize: params.get('pageSize') ? parseInt(params.get('pageSize'), 10) : undefined,\n },\n initialState.pagination,\n ),\n sync: options.syncWithUrl,\n });\n const [sorting, setSorting] = useUrlSyncedState<TableState<TData>['sorting']>({\n initialState: initialState.sorting,\n serializer: (_sorting) => [\n ['sortBy', _sorting.map(({id, desc}) => `${id}.${desc ? 'desc' : 'asc'}`).join(',')],\n ],\n deserializer: (params) => {\n if (!params.has('sortBy')) {\n return initialState.sorting;\n }\n const sorts = params.get('sortBy')?.split(',') ?? [];\n return sorts.map((sort) => {\n const [id, order] = sort.split('.');\n return {id, desc: order === 'desc'};\n });\n },\n sync: options.syncWithUrl,\n });\n const [globalFilter, setGlobalFilter] = useUrlSyncedState<TableState<TData>['globalFilter']>({\n initialState: initialState.globalFilter,\n serializer: (filter) => [['filter', filter]],\n deserializer: (params) => params.get('filter') ?? initialState.globalFilter,\n sync: options.syncWithUrl,\n });\n const [predicates, setPredicates] = useUrlSyncedState<TableState<TData>['predicates']>({\n initialState: initialState.predicates,\n serializer: (_predicates) => Object.entries(_predicates).map(([key, value]) => [key, value]),\n deserializer: (params) =>\n Object.keys(initialState.predicates).reduce(\n (acc, predicateKey) => {\n acc[predicateKey] = params.get(predicateKey) ?? initialState.predicates[predicateKey];\n return acc;\n },\n {} as TableState<TData>['predicates'],\n ),\n sync: options.syncWithUrl,\n });\n const [layout, setLayout] = useUrlSyncedState<TableState<TData>['layout']>({\n initialState: initialState.layout,\n serializer: (_layout) => [['layout', _layout]],\n deserializer: (params) => params.get('layout') ?? initialState.layout,\n sync: options.syncWithUrl,\n });\n const [dateRange, setDateRange] = useUrlSyncedState<TableState<TData>['dateRange']>({\n initialState: initialState.dateRange,\n serializer: ([from, to]) => [\n ['from', from?.toISOString() ?? ''],\n ['to', to?.toISOString() ?? ''],\n ],\n deserializer: (params) => [\n params.get('from') ? new Date(params.get('from') as string) : initialState.dateRange[0],\n params.get('to') ? new Date(params.get('to') as string) : initialState.dateRange[1],\n ],\n sync: options.syncWithUrl,\n });\n const [columnVisibility, setColumnVisibility] = useUrlSyncedState<TableState<TData>['columnVisibility']>({\n initialState: initialState.columnVisibility,\n serializer: (columns) => [\n [\n 'show',\n Object.entries(columns)\n .filter(([, visible]) => visible === true)\n .map(([columnName]) => columnName)\n .join(','),\n ],\n [\n 'hide',\n Object.entries(columns)\n .filter(([, visible]) => visible === false)\n .map(([columnName]) => columnName)\n .join(','),\n ],\n ],\n deserializer: (params) => {\n if (!params.has('show') && !params.has('hide')) {\n return initialState.columnVisibility;\n }\n const visible = params.get('show')?.split(',') ?? [];\n const invisible = params.get('hide')?.split(',') ?? [];\n const columns = {} as TableState<TData>['columnVisibility'];\n visible.forEach((column) => {\n columns[column] = true;\n });\n invisible.forEach((column) => {\n columns[column] = false;\n });\n return columns;\n },\n sync: options.syncWithUrl,\n });\n\n // unsynced\n const [totalEntries, _setTotalEntries] = useState<TableState<TData>['totalEntries']>(initialState.totalEntries);\n const [unfilteredTotalEntries, setUnfilteredTotalEntries] = useState<TableState<TData>['totalEntries']>(\n initialState.totalEntries,\n );\n const [expanded, setExpanded] = useState<TableState<TData>['expanded']>(initialState.expanded);\n const [rowSelection, setRowSelection] = useState<TableState<TData>['rowSelection']>(initialState.rowSelection);\n\n const isFiltered =\n !!globalFilter ||\n Object.keys(predicates).some((predicate) => !!predicates[predicate]) ||\n !!dateRange?.[0] ||\n !!dateRange?.[1];\n\n const isVacant = unfilteredTotalEntries === 0;\n\n const setTotalEntries: typeof _setTotalEntries = useCallback(\n (updater) => {\n _setTotalEntries((old) => {\n const newTotalEntries = updater instanceof Function ? updater(old) : updater;\n if (!isFiltered) {\n setUnfilteredTotalEntries(newTotalEntries);\n }\n return newTotalEntries;\n });\n },\n [isFiltered],\n );\n\n const clearFilters = useCallback(() => {\n setPredicates(initialState.predicates);\n setGlobalFilter('');\n }, []);\n\n const clearRowSelection = useCallback(() => {\n setRowSelection({});\n }, []);\n\n const getSelectedRows = useCallback(() => Object.values(rowSelection), [rowSelection]);\n\n const getSelectedRow = () => getSelectedRows()[0] ?? null;\n\n useDidUpdate(() => {\n if (!options.enableMultiRowSelection) {\n clearRowSelection();\n }\n }, [globalFilter, pagination, sorting, dateRange, predicates]);\n\n const state = useMemo(\n () => ({\n pagination,\n totalEntries,\n sorting,\n globalFilter,\n expanded,\n predicates,\n layout,\n dateRange,\n rowSelection,\n columnVisibility,\n }),\n [\n pagination,\n totalEntries,\n sorting,\n globalFilter,\n expanded,\n predicates,\n layout,\n dateRange,\n rowSelection,\n columnVisibility,\n ],\n );\n\n return {\n state,\n setPagination,\n setTotalEntries,\n setSorting,\n setGlobalFilter,\n setExpanded,\n setPredicates,\n setLayout,\n setDateRange,\n setRowSelection,\n setColumnVisibility,\n isFiltered,\n isVacant,\n clearFilters,\n clearRowSelection,\n getSelectedRows,\n getSelectedRow,\n rowSelectionEnabled: options.enableRowSelection,\n rowSelectionForced: options.forceSelection,\n multiRowSelectionEnabled: options.enableMultiRowSelection,\n };\n};\n"],"names":["useTable","defaultOptions","enableRowSelection","enableMultiRowSelection","forceSelection","syncWithUrl","defaultState","pagination","pageIndex","pageSize","totalEntries","sorting","globalFilter","predicates","layout","dateRange","rowSelection","columnVisibility","userOptions","options","defaultsDeep","initialState","useUrlSyncedState","serializer","toString","deserializer","params","get","parseInt","undefined","sync","setPagination","_sorting","map","id","desc","join","has","sorts","split","sort","order","setSorting","filter","setGlobalFilter","_predicates","Object","entries","key","value","keys","reduce","acc","predicateKey","setPredicates","_layout","setLayout","from","to","toISOString","Date","setDateRange","columns","visible","columnName","invisible","forEach","column","setColumnVisibility","useState","_setTotalEntries","unfilteredTotalEntries","setUnfilteredTotalEntries","expanded","setExpanded","setRowSelection","isFiltered","some","predicate","isVacant","setTotalEntries","useCallback","updater","old","newTotalEntries","Function","clearFilters","clearRowSelection","getSelectedRows","values","getSelectedRow","useDidUpdate","state","useMemo","rowSelectionEnabled","rowSelectionForced","multiRowSelectionEnabled"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/table/use-table.ts"],"sourcesContent":["import {useDidUpdate} from '@mantine/hooks';\nimport {type ExpandedState, type PaginationState, type SortingState} from '@tanstack/table-core';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport {Dispatch, SetStateAction, useCallback, useMemo, useState} from 'react';\nimport {type DateRangePickerValue} from '../date-range-picker';\nimport {useUrlSyncedState} from './use-url-synced-state';\n\n// Create a deeply optional version of another type\ntype DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\nexport interface TableState<TData = unknown> {\n /**\n * Current pagination state\n *\n * @default { pageIndex: 0, pageSize: 50 }\n */\n pagination: PaginationState;\n /**\n * Total number of entries in the table.\n * This number is used to calculate the number of pages in the pagination.\n * When null, the number of pages is calculated using the current data length.\n *\n * @default null\n */\n totalEntries: number | null;\n /**\n * Current sorting state\n *\n * @default []\n */\n sorting: SortingState;\n /**\n * Current global filter value\n *\n * @default ''\n */\n globalFilter: string;\n\n /**\n * Current expanded state\n *\n * @default {}\n */\n expanded: ExpandedState;\n /**\n * Predicates and their current value\n *\n * @default {}\n */\n predicates: Record<string, string>;\n /**\n * Layout currently selected. When null, the first layout is used.\n *\n * @default null\n */\n layout: string | null;\n /**\n * Currently selected date range\n *\n * @default [null, null]\n */\n dateRange: DateRangePickerValue;\n /**\n * Currently selected rows\n *\n * @default {}\n */\n rowSelection: Record<string, TData>;\n /**\n * Columns that are currently visible\n *\n * @default {}\n */\n columnVisibility: Record<string, boolean>;\n}\n\nexport interface TableStore<TData = unknown> {\n /**\n * Current state of the table.\n */\n state: TableState<TData>;\n /**\n * Allows to change the pagination state.\n */\n setPagination: Dispatch<SetStateAction<TableState<TData>['pagination']>>;\n /**\n * Allows to change the total number of entries.\n */\n setTotalEntries: Dispatch<SetStateAction<TableState<TData>['totalEntries']>>;\n /**\n * Allows to change the sorting state.\n */\n setSorting: Dispatch<SetStateAction<TableState<TData>['sorting']>>;\n /**\n * Allows to change the global filter value.\n */\n setGlobalFilter: Dispatch<SetStateAction<TableState<TData>['globalFilter']>>;\n /**\n * Allows to change the rows expanded state.\n */\n setExpanded: Dispatch<SetStateAction<TableState<TData>['expanded']>>;\n /**\n * Allows to change the predicates values.\n */\n setPredicates: Dispatch<SetStateAction<TableState<TData>['predicates']>>;\n /**\n * Allows to change the selected layout.\n */\n setLayout: Dispatch<SetStateAction<TableState<TData>['layout']>>;\n /**\n * Allows to change the selected date range.\n */\n setDateRange: Dispatch<SetStateAction<TableState<TData>['dateRange']>>;\n /**\n * Allows to change the current row selection.\n */\n setRowSelection: Dispatch<SetStateAction<TableState<TData>['rowSelection']>>;\n /**\n * Allows to change the visible columns.\n */\n setColumnVisibility: Dispatch<SetStateAction<TableState<TData>['columnVisibility']>>;\n /**\n * Whether the table is currently filtered.\n */\n isFiltered: boolean;\n /**\n * Whether the table has data when unfiltered.\n *\n * This is derived from the totalEntries so make sure you set that number correctly, even if you're using a client side table.\n */\n isVacant: boolean;\n /**\n * Clear currently applied filters.\n */\n clearFilters: () => void;\n /**\n * Deselects all currently selected rows.\n */\n clearRowSelection: () => void;\n /**\n * Get currently selected rows.\n */\n getSelectedRows: () => TData[];\n /**\n * Get currently selected row\n */\n getSelectedRow: () => TData | null;\n /**\n * Whether the user can select multiple rows at the same time.\n */\n multiRowSelectionEnabled: boolean;\n /**\n * Whether rows can be selected.\n */\n rowSelectionEnabled: boolean;\n /**\n * Whether row selection is forced.\n */\n rowSelectionForced: boolean;\n}\n\nexport interface UseTableOptions<TData = unknown> {\n /**\n * Initial state of the table.\n */\n initialState?: DeepPartial<TableState<TData>>;\n /**\n * Whether rows can be selected.\n *\n * @default true\n */\n enableRowSelection?: boolean;\n /**\n * Whether multiple rows can be selected at the same time.\n *\n * @default false\n */\n enableMultiRowSelection?: boolean;\n /**\n * Forces the user to always have one row selected.\n * When activating that setting, a good practice is to have a row already selected in the initial state.\n *\n * @default false\n */\n forceSelection?: boolean;\n /**\n * Whether to sync the table state with the URL.\n *\n * @default false\n */\n syncWithUrl?: boolean;\n}\n\nconst defaultOptions: UseTableOptions = {\n enableRowSelection: true,\n enableMultiRowSelection: false,\n forceSelection: false,\n syncWithUrl: false,\n};\n\nconst defaultState: Partial<TableState> = {\n pagination: {\n pageIndex: 0,\n pageSize: 50,\n },\n totalEntries: null,\n sorting: [],\n globalFilter: '',\n predicates: {},\n layout: null,\n dateRange: [null, null],\n rowSelection: {},\n columnVisibility: {},\n};\n\nexport const useTable = <TData>(userOptions: UseTableOptions<TData> = {}): TableStore<TData> => {\n const options = defaultsDeep({}, userOptions, defaultOptions) as UseTableOptions<TData>;\n const initialState = defaultsDeep({}, options.initialState, defaultState) as TableState<TData>;\n /**\n * The `useUrlSyncedState` hook defaults to synchronize, but the table wants to default to not synchronize,\n * so always pass the sync option as a resolved boolean value.\n */\n const sync = !!options.syncWithUrl;\n\n // synced with url\n const [pagination, setPagination] = useUrlSyncedState<TableState<TData>['pagination']>({\n initialState: initialState.pagination,\n serializer: ({pageIndex, pageSize}) => [\n ['page', (pageIndex + 1).toString()],\n ['pageSize', pageSize.toString()],\n ],\n deserializer: (params) =>\n defaultsDeep(\n {\n pageIndex: params.get('page') ? parseInt(params.get('page'), 10) - 1 : undefined,\n pageSize: params.get('pageSize') ? parseInt(params.get('pageSize'), 10) : undefined,\n },\n initialState.pagination,\n ),\n sync,\n });\n const [sorting, setSorting] = useUrlSyncedState<TableState<TData>['sorting']>({\n initialState: initialState.sorting,\n serializer: (_sorting) => [\n ['sortBy', _sorting.map(({id, desc}) => `${id}.${desc ? 'desc' : 'asc'}`).join(',')],\n ],\n deserializer: (params) => {\n if (!params.has('sortBy')) {\n return initialState.sorting;\n }\n const sorts = params.get('sortBy')?.split(',') ?? [];\n return sorts.map((sort) => {\n const [id, order] = sort.split('.');\n return {id, desc: order === 'desc'};\n });\n },\n sync,\n });\n const [globalFilter, setGlobalFilter] = useUrlSyncedState<TableState<TData>['globalFilter']>({\n initialState: initialState.globalFilter,\n serializer: (filter) => [['filter', filter]],\n deserializer: (params) => params.get('filter') ?? initialState.globalFilter,\n sync,\n });\n const [predicates, setPredicates] = useUrlSyncedState<TableState<TData>['predicates']>({\n initialState: initialState.predicates,\n serializer: (_predicates) => Object.entries(_predicates).map(([key, value]) => [key, value]),\n deserializer: (params) =>\n Object.keys(initialState.predicates).reduce(\n (acc, predicateKey) => {\n acc[predicateKey] = params.get(predicateKey) ?? initialState.predicates[predicateKey];\n return acc;\n },\n {} as TableState<TData>['predicates'],\n ),\n sync,\n });\n const [layout, setLayout] = useUrlSyncedState<TableState<TData>['layout']>({\n initialState: initialState.layout,\n serializer: (_layout) => [['layout', _layout]],\n deserializer: (params) => params.get('layout') ?? initialState.layout,\n sync,\n });\n const [dateRange, setDateRange] = useUrlSyncedState<TableState<TData>['dateRange']>({\n initialState: initialState.dateRange,\n serializer: ([from, to]) => [\n ['from', from?.toISOString() ?? ''],\n ['to', to?.toISOString() ?? ''],\n ],\n deserializer: (params) => [\n params.get('from') ? new Date(params.get('from') as string) : initialState.dateRange[0],\n params.get('to') ? new Date(params.get('to') as string) : initialState.dateRange[1],\n ],\n sync,\n });\n const [columnVisibility, setColumnVisibility] = useUrlSyncedState<TableState<TData>['columnVisibility']>({\n initialState: initialState.columnVisibility,\n serializer: (columns) => [\n [\n 'show',\n Object.entries(columns)\n .filter(([, visible]) => visible === true)\n .map(([columnName]) => columnName)\n .join(','),\n ],\n [\n 'hide',\n Object.entries(columns)\n .filter(([, visible]) => visible === false)\n .map(([columnName]) => columnName)\n .join(','),\n ],\n ],\n deserializer: (params) => {\n if (!params.has('show') && !params.has('hide')) {\n return initialState.columnVisibility;\n }\n const visible = params.get('show')?.split(',') ?? [];\n const invisible = params.get('hide')?.split(',') ?? [];\n const columns = {} as TableState<TData>['columnVisibility'];\n visible.forEach((column) => {\n columns[column] = true;\n });\n invisible.forEach((column) => {\n columns[column] = false;\n });\n return columns;\n },\n sync,\n });\n\n // unsynced\n const [totalEntries, _setTotalEntries] = useState<TableState<TData>['totalEntries']>(initialState.totalEntries);\n const [unfilteredTotalEntries, setUnfilteredTotalEntries] = useState<TableState<TData>['totalEntries']>(\n initialState.totalEntries,\n );\n const [expanded, setExpanded] = useState<TableState<TData>['expanded']>(initialState.expanded);\n const [rowSelection, setRowSelection] = useState<TableState<TData>['rowSelection']>(initialState.rowSelection);\n\n const isFiltered =\n !!globalFilter ||\n Object.keys(predicates).some((predicate) => !!predicates[predicate]) ||\n !!dateRange?.[0] ||\n !!dateRange?.[1];\n\n const isVacant = unfilteredTotalEntries === 0;\n\n const setTotalEntries: typeof _setTotalEntries = useCallback(\n (updater) => {\n _setTotalEntries((old) => {\n const newTotalEntries = updater instanceof Function ? updater(old) : updater;\n if (!isFiltered) {\n setUnfilteredTotalEntries(newTotalEntries);\n }\n return newTotalEntries;\n });\n },\n [isFiltered],\n );\n\n const clearFilters = useCallback(() => {\n setPredicates(initialState.predicates);\n setGlobalFilter('');\n }, []);\n\n const clearRowSelection = useCallback(() => {\n setRowSelection({});\n }, []);\n\n const getSelectedRows = useCallback(() => Object.values(rowSelection), [rowSelection]);\n\n const getSelectedRow = () => getSelectedRows()[0] ?? null;\n\n useDidUpdate(() => {\n if (!options.enableMultiRowSelection) {\n clearRowSelection();\n }\n }, [globalFilter, pagination, sorting, dateRange, predicates]);\n\n const state = useMemo(\n () => ({\n pagination,\n totalEntries,\n sorting,\n globalFilter,\n expanded,\n predicates,\n layout,\n dateRange,\n rowSelection,\n columnVisibility,\n }),\n [\n pagination,\n totalEntries,\n sorting,\n globalFilter,\n expanded,\n predicates,\n layout,\n dateRange,\n rowSelection,\n columnVisibility,\n ],\n );\n\n return {\n state,\n setPagination,\n setTotalEntries,\n setSorting,\n setGlobalFilter,\n setExpanded,\n setPredicates,\n setLayout,\n setDateRange,\n setRowSelection,\n setColumnVisibility,\n isFiltered,\n isVacant,\n clearFilters,\n clearRowSelection,\n getSelectedRows,\n getSelectedRow,\n rowSelectionEnabled: options.enableRowSelection,\n rowSelectionForced: options.forceSelection,\n multiRowSelectionEnabled: options.enableMultiRowSelection,\n };\n};\n"],"names":["useTable","defaultOptions","enableRowSelection","enableMultiRowSelection","forceSelection","syncWithUrl","defaultState","pagination","pageIndex","pageSize","totalEntries","sorting","globalFilter","predicates","layout","dateRange","rowSelection","columnVisibility","userOptions","options","defaultsDeep","initialState","sync","useUrlSyncedState","serializer","toString","deserializer","params","get","parseInt","undefined","setPagination","_sorting","map","id","desc","join","has","sorts","split","sort","order","setSorting","filter","setGlobalFilter","_predicates","Object","entries","key","value","keys","reduce","acc","predicateKey","setPredicates","_layout","setLayout","from","to","toISOString","Date","setDateRange","columns","visible","columnName","invisible","forEach","column","setColumnVisibility","useState","_setTotalEntries","unfilteredTotalEntries","setUnfilteredTotalEntries","expanded","setExpanded","setRowSelection","isFiltered","some","predicate","isVacant","setTotalEntries","useCallback","updater","old","newTotalEntries","Function","clearFilters","clearRowSelection","getSelectedRows","values","getSelectedRow","useDidUpdate","state","useMemo","rowSelectionEnabled","rowSelectionForced","multiRowSelectionEnabled"],"mappings":"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"}
|
|
@@ -1,18 +1,29 @@
|
|
|
1
|
+
import { Dispatch, SetStateAction } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* A search param entry defines the key (index 0) and value (index 1) of a search parameter.
|
|
4
|
+
*/
|
|
5
|
+
export type SearchParamEntry = [string, string | null | undefined];
|
|
1
6
|
export interface UseUrlSyncedStateOptions<T> {
|
|
2
7
|
/**
|
|
3
|
-
* The initial state
|
|
8
|
+
* The initial state to use, if there would be no search params to deserialize from.
|
|
9
|
+
* These values are also treated as defaults, and if the current state matches the initialState,
|
|
10
|
+
* no value will be written to the search params.
|
|
4
11
|
*/
|
|
5
|
-
initialState: T;
|
|
12
|
+
initialState: T extends object ? Readonly<T> : T;
|
|
6
13
|
/**
|
|
7
14
|
* The serializer function is used to determine how the state is translated to url search parameters.
|
|
8
15
|
* Called each time the state changes.
|
|
16
|
+
* Note that the serializer should always return entries for keys it controls, also if the current value is "unset" (`null` or empty).
|
|
17
|
+
* This ensures params get removed from the search when they are being unset.
|
|
18
|
+
*
|
|
9
19
|
* @param stateValue The new state value to serialize.
|
|
10
|
-
* @returns
|
|
20
|
+
* @returns An iterable of `[key, value]` to set as url search parameters.
|
|
11
21
|
* @example (filterValue) => [['filter', filterValue]] // ?filter=filterValue
|
|
12
22
|
*/
|
|
13
|
-
serializer: (stateValue: T) =>
|
|
23
|
+
serializer: (stateValue: T) => Iterable<SearchParamEntry>;
|
|
14
24
|
/**
|
|
15
25
|
* The deserializer function is used to determine how the url parameters influence the initial state.
|
|
26
|
+
* May return a partial state, values that are not deserialed are taken from the `initialState`.
|
|
16
27
|
* Called only once when initializing the state.
|
|
17
28
|
* @param params All the search parameters of the current url.
|
|
18
29
|
* @returns The initial state based on the current url.
|
|
@@ -20,10 +31,10 @@ export interface UseUrlSyncedStateOptions<T> {
|
|
|
20
31
|
*/
|
|
21
32
|
deserializer: (params: URLSearchParams) => T;
|
|
22
33
|
/**
|
|
23
|
-
* Whether the state should be synced with the url
|
|
24
|
-
* When set to false
|
|
34
|
+
* Whether the state should be synced with the url, defaults to `true`.
|
|
35
|
+
* When set to `false`, the hook behaves just like a regular `useState` hook from react.
|
|
25
36
|
*/
|
|
26
37
|
sync?: boolean;
|
|
27
38
|
}
|
|
28
|
-
export declare const useUrlSyncedState: <T>(
|
|
39
|
+
export declare const useUrlSyncedState: <T>(options: UseUrlSyncedStateOptions<T>) => readonly [T, Dispatch<SetStateAction<T>>];
|
|
29
40
|
//# sourceMappingURL=use-url-synced-state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-url-synced-state.d.ts","sourceRoot":"","sources":["../../../../src/components/table/use-url-synced-state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-url-synced-state.d.ts","sourceRoot":"","sources":["../../../../src/components/table/use-url-synced-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,cAAc,EAAoB,MAAM,OAAO,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AA8CnE,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACvC;;;;OAIG;IACH,YAAY,EAAE,CAAC,SAAS,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjD;;;;;;;;;OASG;IACH,UAAU,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC1D;;;;;;;OAOG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,CAAC,CAAC;IAC7C;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,iBAAiB,GAAI,CAAC,WAAW,wBAAwB,CAAC,CAAC,CAAC,8CAkCxE,CAAC"}
|
|
@@ -11,41 +11,92 @@ Object.defineProperty(exports, "useUrlSyncedState", {
|
|
|
11
11
|
var _instanceof = require("@swc/helpers/_/_instanceof");
|
|
12
12
|
var _sliced_to_array = require("@swc/helpers/_/_sliced_to_array");
|
|
13
13
|
var _react = require("react");
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Iterates over the `SearchParamEntry` values, and applies them to `target`, optionally filtering values.
|
|
16
|
+
*
|
|
17
|
+
* @param target The target to write values to, can be a Map (for the initial values) or `URLSearchParams`.
|
|
18
|
+
* @param entries The entries to apply (as returned by the serializer).
|
|
19
|
+
* @param filter Optional filter that allows to treat non-empty values as empty (e.g. to not set default values).
|
|
20
|
+
*/ var applyValues = function(target, entries, filter) {
|
|
21
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
22
|
+
try {
|
|
23
|
+
for(var _iterator = entries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
24
|
+
var entry = _step.value;
|
|
25
|
+
if (entry[1] && filter(entry)) {
|
|
26
|
+
target.set(entry[0], entry[1]);
|
|
27
|
+
} else {
|
|
28
|
+
target.delete(entry[0]);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
} catch (err) {
|
|
32
|
+
_didIteratorError = true;
|
|
33
|
+
_iteratorError = err;
|
|
34
|
+
} finally{
|
|
35
|
+
try {
|
|
36
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
37
|
+
_iterator.return();
|
|
38
|
+
}
|
|
39
|
+
} finally{
|
|
40
|
+
if (_didIteratorError) {
|
|
41
|
+
throw _iteratorError;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
20
44
|
}
|
|
21
|
-
window.history.replaceState(null, '', url.toString());
|
|
22
45
|
};
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Read the **current** search params from `window.location`, with support for detecting React's HashRouter.
|
|
48
|
+
* Also returns a method that will yield the href (string) value, after any changes made on the params object.
|
|
49
|
+
*
|
|
50
|
+
* @returns The `URLSearchParams` instance, and a function that can be used to get an updated href.
|
|
51
|
+
*/ var getSearchParams = function() {
|
|
52
|
+
var href = window.location.href;
|
|
53
|
+
// Search for '#/' to detect hash router urls
|
|
54
|
+
var searchStart = href.indexOf('?', href.indexOf('#/') + 1);
|
|
55
|
+
var params = new URLSearchParams(searchStart < 0 ? '' : href.substring(searchStart));
|
|
56
|
+
return [
|
|
57
|
+
params,
|
|
58
|
+
function() {
|
|
59
|
+
var result = searchStart < 0 ? href : href.substring(0, searchStart);
|
|
60
|
+
if (params.size > 0) {
|
|
61
|
+
result = result.concat('?', params.toString());
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
];
|
|
26
66
|
};
|
|
27
|
-
var useUrlSyncedState = function(
|
|
28
|
-
var
|
|
29
|
-
var
|
|
67
|
+
var useUrlSyncedState = function(options) {
|
|
68
|
+
var sync = options.sync !== false;
|
|
69
|
+
var initialState = (0, _react.useMemo)(function() {
|
|
70
|
+
return sync ? options.deserializer(getSearchParams()[0]) : options.initialState;
|
|
71
|
+
}, [
|
|
72
|
+
options.initialState,
|
|
73
|
+
options.sync
|
|
74
|
+
]);
|
|
75
|
+
var _useState = _sliced_to_array._((0, _react.useState)(initialState), 2), state = _useState[0], setState = _useState[1];
|
|
76
|
+
// Capture the initial state as a map, to compare values and not set them if they match.
|
|
77
|
+
var initialStateSerialized = (0, _react.useMemo)(function() {
|
|
78
|
+
var v = new Map();
|
|
79
|
+
applyValues(v, options.serializer(options.initialState), function(_) {
|
|
80
|
+
return true;
|
|
81
|
+
});
|
|
82
|
+
return v;
|
|
83
|
+
}, [
|
|
84
|
+
initialState,
|
|
85
|
+
options.serializer
|
|
86
|
+
]);
|
|
30
87
|
var enhancedSetState = (0, _react.useMemo)(function() {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
var
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
setState(function(old) {
|
|
39
|
-
var newValue = _instanceof._(updater, Function) ? updater(old) : updater;
|
|
40
|
-
serializer(newValue).forEach(function(param) {
|
|
41
|
-
var _param = _sliced_to_array._(param, 2), key = _param[0], value = _param[1];
|
|
42
|
-
return setSearchParam(key, value, initialSerialized[key]);
|
|
43
|
-
});
|
|
44
|
-
return newValue;
|
|
88
|
+
return sync ? function(updater) {
|
|
89
|
+
setState(function(old) {
|
|
90
|
+
var _getSearchParams = _sliced_to_array._(getSearchParams(), 2), search = _getSearchParams[0], getUrl = _getSearchParams[1];
|
|
91
|
+
var newValue = _instanceof._(updater, Function) ? updater(old) : updater;
|
|
92
|
+
applyValues(search, options.serializer(newValue), function(param) {
|
|
93
|
+
var _param = _sliced_to_array._(param, 2), key = _param[0], value = _param[1];
|
|
94
|
+
return initialStateSerialized.get(key) !== value;
|
|
45
95
|
});
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
96
|
+
window.history.replaceState(null, '', getUrl());
|
|
97
|
+
return newValue;
|
|
98
|
+
});
|
|
99
|
+
} : setState;
|
|
49
100
|
}, [
|
|
50
101
|
sync
|
|
51
102
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/table/use-url-synced-state.ts"],"sourcesContent":["import {useMemo, useState} from 'react';\n\
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/table/use-url-synced-state.ts"],"sourcesContent":["import {Dispatch, SetStateAction, useMemo, useState} from 'react';\n\n/**\n * A search param entry defines the key (index 0) and value (index 1) of a search parameter.\n */\nexport type SearchParamEntry = [string, string | null | undefined];\n\n/**\n * Iterates over the `SearchParamEntry` values, and applies them to `target`, optionally filtering values.\n *\n * @param target The target to write values to, can be a Map (for the initial values) or `URLSearchParams`.\n * @param entries The entries to apply (as returned by the serializer).\n * @param filter Optional filter that allows to treat non-empty values as empty (e.g. to not set default values).\n */\nconst applyValues = (\n target: Map<string, string> | URLSearchParams,\n entries: Iterable<SearchParamEntry>,\n filter: (entry: Readonly<SearchParamEntry>) => boolean,\n): void => {\n for (const entry of entries) {\n if (entry[1] && filter(entry)) {\n target.set(entry[0], entry[1]);\n } else {\n target.delete(entry[0]);\n }\n }\n};\n\n/**\n * Read the **current** search params from `window.location`, with support for detecting React's HashRouter.\n * Also returns a method that will yield the href (string) value, after any changes made on the params object.\n *\n * @returns The `URLSearchParams` instance, and a function that can be used to get an updated href.\n */\nconst getSearchParams = (): [URLSearchParams, () => string] => {\n const href = window.location.href;\n // Search for '#/' to detect hash router urls\n const searchStart = href.indexOf('?', href.indexOf('#/') + 1);\n const params = new URLSearchParams(searchStart < 0 ? '' : href.substring(searchStart));\n return [\n params,\n () => {\n let result = searchStart < 0 ? href : href.substring(0, searchStart);\n if (params.size > 0) {\n result = result.concat('?', params.toString());\n }\n return result;\n },\n ];\n};\n\nexport interface UseUrlSyncedStateOptions<T> {\n /**\n * The initial state to use, if there would be no search params to deserialize from.\n * These values are also treated as defaults, and if the current state matches the initialState,\n * no value will be written to the search params.\n */\n initialState: T extends object ? Readonly<T> : T;\n /**\n * The serializer function is used to determine how the state is translated to url search parameters.\n * Called each time the state changes.\n * Note that the serializer should always return entries for keys it controls, also if the current value is \"unset\" (`null` or empty).\n * This ensures params get removed from the search when they are being unset.\n *\n * @param stateValue The new state value to serialize.\n * @returns An iterable of `[key, value]` to set as url search parameters.\n * @example (filterValue) => [['filter', filterValue]] // ?filter=filterValue\n */\n serializer: (stateValue: T) => Iterable<SearchParamEntry>;\n /**\n * The deserializer function is used to determine how the url parameters influence the initial state.\n * May return a partial state, values that are not deserialed are taken from the `initialState`.\n * Called only once when initializing the state.\n * @param params All the search parameters of the current url.\n * @returns The initial state based on the current url.\n * @example (params) => params.get('filter') ?? '',\n */\n deserializer: (params: URLSearchParams) => T;\n /**\n * Whether the state should be synced with the url, defaults to `true`.\n * When set to `false`, the hook behaves just like a regular `useState` hook from react.\n */\n sync?: boolean;\n}\n\nexport const useUrlSyncedState = <T>(options: UseUrlSyncedStateOptions<T>) => {\n const sync = options.sync !== false;\n const initialState = useMemo(\n () => (sync ? options.deserializer(getSearchParams()[0]) : options.initialState),\n [options.initialState, options.sync],\n );\n const [state, setState] = useState<T>(initialState);\n // Capture the initial state as a map, to compare values and not set them if they match.\n const initialStateSerialized = useMemo(() => {\n const v = new Map<string, string>();\n applyValues(v, options.serializer(options.initialState), (_) => true);\n return v;\n }, [initialState, options.serializer]);\n const enhancedSetState = useMemo<Dispatch<SetStateAction<T>>>(\n () =>\n sync\n ? (updater: SetStateAction<T>) => {\n setState((old) => {\n const [search, getUrl] = getSearchParams();\n const newValue = updater instanceof Function ? updater(old) : updater;\n applyValues(\n search,\n options.serializer(newValue),\n ([key, value]) => initialStateSerialized.get(key) !== value,\n );\n window.history.replaceState(null, '', getUrl());\n return newValue;\n });\n }\n : setState,\n [sync],\n );\n\n return [state, enhancedSetState] as const;\n};\n"],"names":["useUrlSyncedState","applyValues","target","entries","filter","entry","set","delete","getSearchParams","href","window","location","searchStart","indexOf","params","URLSearchParams","substring","result","size","concat","toString","options","sync","initialState","useMemo","deserializer","useState","state","setState","initialStateSerialized","v","Map","serializer","_","enhancedSetState","updater","old","search","getUrl","newValue","Function","key","value","get","history","replaceState"],"mappings":";;;;+BAqFaA;;;eAAAA;;;;;qBArF6C;AAO1D;;;;;;CAMC,GACD,IAAMC,cAAc,SAChBC,QACAC,SACAC;QAEK,kCAAA,2BAAA;;QAAL,QAAK,YAAeD,4BAAf,SAAA,6BAAA,QAAA,yBAAA,iCAAwB;YAAxB,IAAME,QAAN;YACD,IAAIA,KAAK,CAAC,EAAE,IAAID,OAAOC,QAAQ;gBAC3BH,OAAOI,GAAG,CAACD,KAAK,CAAC,EAAE,EAAEA,KAAK,CAAC,EAAE;YACjC,OAAO;gBACHH,OAAOK,MAAM,CAACF,KAAK,CAAC,EAAE;YAC1B;QACJ;;QANK;QAAA;;;iBAAA,6BAAA;gBAAA;;;gBAAA;sBAAA;;;;AAOT;AAEA;;;;;CAKC,GACD,IAAMG,kBAAkB;IACpB,IAAMC,OAAOC,OAAOC,QAAQ,CAACF,IAAI;IACjC,6CAA6C;IAC7C,IAAMG,cAAcH,KAAKI,OAAO,CAAC,KAAKJ,KAAKI,OAAO,CAAC,QAAQ;IAC3D,IAAMC,SAAS,IAAIC,gBAAgBH,cAAc,IAAI,KAAKH,KAAKO,SAAS,CAACJ;IACzE,OAAO;QACHE;QACA;YACI,IAAIG,SAASL,cAAc,IAAIH,OAAOA,KAAKO,SAAS,CAAC,GAAGJ;YACxD,IAAIE,OAAOI,IAAI,GAAG,GAAG;gBACjBD,SAASA,OAAOE,MAAM,CAAC,KAAKL,OAAOM,QAAQ;YAC/C;YACA,OAAOH;QACX;KACH;AACL;AAoCO,IAAMjB,oBAAoB,SAAIqB;IACjC,IAAMC,OAAOD,QAAQC,IAAI,KAAK;IAC9B,IAAMC,eAAeC,IAAAA,cAAO,EACxB;eAAOF,OAAOD,QAAQI,YAAY,CAACjB,iBAAiB,CAAC,EAAE,IAAIa,QAAQE,YAAY;OAC/E;QAACF,QAAQE,YAAY;QAAEF,QAAQC,IAAI;KAAC;IAExC,IAA0BI,+BAAAA,IAAAA,eAAQ,EAAIH,mBAA/BI,QAAmBD,cAAZE,WAAYF;IAC1B,wFAAwF;IACxF,IAAMG,yBAAyBL,IAAAA,cAAO,EAAC;QACnC,IAAMM,IAAI,IAAIC;QACd9B,YAAY6B,GAAGT,QAAQW,UAAU,CAACX,QAAQE,YAAY,GAAG,SAACU;mBAAM;;QAChE,OAAOH;IACX,GAAG;QAACP;QAAcF,QAAQW,UAAU;KAAC;IACrC,IAAME,mBAAmBV,IAAAA,cAAO,EAC5B;eACIF,OACM,SAACa;YACGP,SAAS,SAACQ;gBACN,IAAyB5B,sCAAAA,uBAAlB6B,SAAkB7B,qBAAV8B,SAAU9B;gBACzB,IAAM+B,WAAWJ,AAAO,aAAYK,CAAnBL,SAAmBK,YAAWL,QAAQC,OAAOD;gBAC9DlC,YACIoC,QACAhB,QAAQW,UAAU,CAACO,WACnB;+DAAEE,iBAAKC;2BAAWb,uBAAuBc,GAAG,CAACF,SAASC;;gBAE1DhC,OAAOkC,OAAO,CAACC,YAAY,CAAC,MAAM,IAAIP;gBACtC,OAAOC;YACX;QACJ,IACAX;OACV;QAACN;KAAK;IAGV,OAAO;QAACK;QAAOO;KAAiB;AACpC"}
|
|
@@ -4,4 +4,5 @@ export { type TablePredicateProps } from './table-predicate/TablePredicate';
|
|
|
4
4
|
export { type TableAction, type TableLayout, type TableLayoutProps, type TableProps } from './Table.types';
|
|
5
5
|
export { useTableContext } from './TableContext';
|
|
6
6
|
export { useTable, type TableState, type TableStore, type UseTableOptions } from './use-table';
|
|
7
|
+
export { useUrlSyncedState } from './use-url-synced-state';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,IAAI,eAAe,EAAC,MAAM,uBAAuB,CAAC;AACpE,cAAc,SAAS,CAAC;AACxB,OAAO,EAAC,KAAK,mBAAmB,EAAC,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAC,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAC,MAAM,eAAe,CAAC;AACzG,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAC,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,IAAI,eAAe,EAAC,MAAM,uBAAuB,CAAC;AACpE,cAAc,SAAS,CAAC;AACxB,OAAO,EAAC,KAAK,mBAAmB,EAAC,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAC,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAC,MAAM,eAAe,CAAC;AACzG,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAC,MAAM,aAAa,CAAC;AAC7F,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC"}
|
|
@@ -2,5 +2,6 @@ export { flexRender as renderTableCell } from '@tanstack/react-table';
|
|
|
2
2
|
export * from './Table';
|
|
3
3
|
export { useTableContext } from './TableContext';
|
|
4
4
|
export { useTable } from './use-table';
|
|
5
|
+
export { useUrlSyncedState } from './use-url-synced-state';
|
|
5
6
|
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/table/index.ts"],"sourcesContent":["export {flexRender as renderTableCell} from '@tanstack/react-table';\nexport * from './Table';\nexport {type TablePredicateProps} from './table-predicate/TablePredicate';\nexport {type TableAction, type TableLayout, type TableLayoutProps, type TableProps} from './Table.types';\nexport {useTableContext} from './TableContext';\nexport {useTable, type TableState, type TableStore, type UseTableOptions} from './use-table';\n"],"names":["flexRender","renderTableCell","useTableContext","useTable"],"mappings":"AAAA,SAAQA,cAAcC,eAAe,QAAO,wBAAwB;AACpE,cAAc,UAAU;AAGxB,SAAQC,eAAe,QAAO,iBAAiB;AAC/C,SAAQC,QAAQ,QAA+D,cAAc"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/table/index.ts"],"sourcesContent":["export {flexRender as renderTableCell} from '@tanstack/react-table';\nexport * from './Table';\nexport {type TablePredicateProps} from './table-predicate/TablePredicate';\nexport {type TableAction, type TableLayout, type TableLayoutProps, type TableProps} from './Table.types';\nexport {useTableContext} from './TableContext';\nexport {useTable, type TableState, type TableStore, type UseTableOptions} from './use-table';\nexport {useUrlSyncedState} from './use-url-synced-state';\n"],"names":["flexRender","renderTableCell","useTableContext","useTable","useUrlSyncedState"],"mappings":"AAAA,SAAQA,cAAcC,eAAe,QAAO,wBAAwB;AACpE,cAAc,UAAU;AAGxB,SAAQC,eAAe,QAAO,iBAAiB;AAC/C,SAAQC,QAAQ,QAA+D,cAAc;AAC7F,SAAQC,iBAAiB,QAAO,yBAAyB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TablePredicate.d.ts","sourceRoot":"","sources":["../../../../../src/components/table/table-predicate/TablePredicate.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EACR,YAAY,EACZ,sBAAsB,EAEtB,OAAO,EAIP,WAAW,EAGd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAKxC,MAAM,MAAM,yBAAyB,GAAG,WAAW,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAEhH,MAAM,WAAW,mBACb,SAAQ,QAAQ,EACZ,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,eAAe,CAAC,EACnD,sBAAsB,CAAC,qBAAqB,CAAC;IACjD;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,IAAI,EAAE,YAAY,CAAC;IACnB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC;IACxC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,GAAG,EAAE,cAAc,CAAC;IACpB,WAAW,EAAE,yBAAyB,CAAC;IACvC,QAAQ,EAAE,IAAI,CAAC;CAClB,CAAC,CAAC;AAIH,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"TablePredicate.d.ts","sourceRoot":"","sources":["../../../../../src/components/table/table-predicate/TablePredicate.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EACR,YAAY,EACZ,sBAAsB,EAEtB,OAAO,EAIP,WAAW,EAGd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAKxC,MAAM,MAAM,yBAAyB,GAAG,WAAW,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAEhH,MAAM,WAAW,mBACb,SAAQ,QAAQ,EACZ,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,eAAe,CAAC,EACnD,sBAAsB,CAAC,qBAAqB,CAAC;IACjD;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,IAAI,EAAE,YAAY,CAAC;IACnB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC;IACxC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,GAAG,EAAE,cAAc,CAAC;IACpB,WAAW,EAAE,yBAAyB,CAAC;IACvC,QAAQ,EAAE,IAAI,CAAC;CAClB,CAAC,CAAC;AAIH,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,mBAAmB,CAoChE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/table/table-predicate/TablePredicate.tsx"],"sourcesContent":["import {\n BoxProps,\n ComboboxData,\n CompoundStylesApiProps,\n factory,\n Factory,\n Grid,\n Group,\n Select,\n SelectProps,\n Text,\n useProps,\n} from '@mantine/core';\nimport {FunctionComponent} from 'react';\n\nimport {TableComponentsOrder} from '../Table';\nimport {useTableContext} from '../TableContext';\n\nexport type TablePredicateStylesNames = 'predicate' | 'predicateWrapper' | 'predicateLabel' | 'predicateSelect';\n\nexport interface TablePredicateProps\n extends BoxProps,\n Pick<SelectProps, 'renderOption' | 'comboboxProps'>,\n CompoundStylesApiProps<TablePredicateFactory> {\n /**\n * Unique identifier for this predicate. Will be used to access the selected value in the table state\n */\n id: string;\n /**\n * The values to display in the predicate\n */\n data: ComboboxData;\n /**\n * The label to display next to the Select\n *\n */\n label: string;\n}\n\nexport type TablePredicateFactory = Factory<{\n props: TablePredicateProps;\n ref: HTMLDivElement;\n stylesNames: TablePredicateStylesNames;\n compound: true;\n}>;\n\nconst defaultProps: Partial<TablePredicateProps> = {};\n\nexport const TablePredicate: FunctionComponent<TablePredicateProps> = factory<TablePredicateFactory>((props, ref) => {\n const {store, getStyles} = useTableContext();\n const {id, data, label, classNames, className, styles, style, renderOption, comboboxProps, vars, ...others} =\n useProps('PlasmaTablePredicate', defaultProps, props);\n\n const handleChange = (newValue: string) => {\n store.setPredicates((prev) => ({...prev, [id]: newValue}));\n store.setPagination((prev) => ({...prev, pageIndex: 0}));\n };\n\n const stylesApiProps = {classNames, styles};\n\n return (\n <Grid.Col\n span=\"content\"\n order={TableComponentsOrder.Predicate}\n ref={ref}\n {...getStyles('predicate', {className, style, ...stylesApiProps})}\n {...others}\n >\n <Group gap=\"xs\" wrap=\"nowrap\" {...getStyles('predicateWrapper', stylesApiProps)}>\n {label ? <Text {...getStyles('predicateLabel', stylesApiProps)}>{label}:</Text> : null}\n <Select\n comboboxProps={{withinPortal: true, ...comboboxProps}}\n value={store.state.predicates[id]}\n onChange={handleChange}\n data={data}\n aria-label={label ?? id}\n searchable={data.length > 7}\n renderOption={renderOption}\n {...getStyles('predicateSelect', stylesApiProps)}\n />\n </Group>\n </Grid.Col>\n );\n});\n"],"names":["factory","Grid","Group","Select","Text","useProps","TableComponentsOrder","useTableContext","defaultProps","TablePredicate","props","ref","store","getStyles","id","data","label","classNames","className","styles","style","renderOption","comboboxProps","vars","others","handleChange","newValue","setPredicates","prev","setPagination","pageIndex","stylesApiProps","Col","span","order","Predicate","gap","wrap","withinPortal","value","state","predicates","onChange","aria-label","searchable","length"],"mappings":";AAAA,SAIIA,OAAO,EAEPC,IAAI,EACJC,KAAK,EACLC,MAAM,EAENC,IAAI,EACJC,QAAQ,QACL,gBAAgB;AAGvB,SAAQC,oBAAoB,QAAO,WAAW;AAC9C,SAAQC,eAAe,QAAO,kBAAkB;AA8BhD,MAAMC,eAA6C,CAAC;AAEpD,OAAO,MAAMC,iBAAyDT,QAA+B,CAACU,OAAOC;IACzG,MAAM,EAACC,KAAK,EAAEC,SAAS,EAAC,GAAGN;IAC3B,MAAM,EAACO,EAAE,EAAEC,IAAI,EAAEC,KAAK,EAAEC,UAAU,EAAEC,SAAS,EAAEC,MAAM,EAAEC,KAAK,EAAEC,YAAY,EAAEC,aAAa,EAAEC,IAAI,EAAE,GAAGC,QAAO,GACvGnB,SAAS,wBAAwBG,cAAcE;IAEnD,MAAMe,eAAe,CAACC;QAClBd,MAAMe,aAAa,CAAC,CAACC,OAAU,CAAA;gBAAC,GAAGA,IAAI;gBAAE,CAACd,GAAG,EAAEY;YAAQ,CAAA;QACvDd,MAAMiB,aAAa,CAAC,CAACD,OAAU,CAAA;gBAAC,GAAGA,IAAI;gBAAEE,WAAW;YAAC,CAAA;IACzD;IAEA,MAAMC,iBAAiB;QAACd;QAAYE;IAAM;IAE1C,qBACI,KAAClB,KAAK+B,GAAG;QACLC,MAAK;QACLC,OAAO5B,qBAAqB6B,SAAS;QACrCxB,KAAKA;QACJ,GAAGE,UAAU,aAAa;YAACK;YAAWE;YAAO,GAAGW,cAAc;QAAA,EAAE;QAChE,GAAGP,MAAM;kBAEV,cAAA,MAACtB;YAAMkC,KAAI;YAAKC,MAAK;YAAU,GAAGxB,UAAU,oBAAoBkB,eAAe;;gBAC1Ef,sBAAQ,MAACZ;oBAAM,GAAGS,UAAU,kBAAkBkB,eAAe;;wBAAGf;wBAAM;;qBAAW;8BAClF,KAACb;oBACGmB,eAAe;wBAACgB,cAAc;wBAAM,GAAGhB,aAAa;oBAAA;oBACpDiB,OAAO3B,MAAM4B,KAAK,CAACC,UAAU,CAAC3B,GAAG;oBACjC4B,UAAUjB;oBACVV,MAAMA;oBACN4B,cAAY3B,SAASF;oBACrB8B,YAAY7B,KAAK8B,MAAM,GAAG;oBAC1BxB,cAAcA;
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/table/table-predicate/TablePredicate.tsx"],"sourcesContent":["import {\n BoxProps,\n ComboboxData,\n CompoundStylesApiProps,\n factory,\n Factory,\n Grid,\n Group,\n Select,\n SelectProps,\n Text,\n useProps,\n} from '@mantine/core';\nimport {FunctionComponent} from 'react';\n\nimport {TableComponentsOrder} from '../Table';\nimport {useTableContext} from '../TableContext';\n\nexport type TablePredicateStylesNames = 'predicate' | 'predicateWrapper' | 'predicateLabel' | 'predicateSelect';\n\nexport interface TablePredicateProps\n extends BoxProps,\n Pick<SelectProps, 'renderOption' | 'comboboxProps'>,\n CompoundStylesApiProps<TablePredicateFactory> {\n /**\n * Unique identifier for this predicate. Will be used to access the selected value in the table state\n */\n id: string;\n /**\n * The values to display in the predicate\n */\n data: ComboboxData;\n /**\n * The label to display next to the Select\n *\n */\n label: string;\n}\n\nexport type TablePredicateFactory = Factory<{\n props: TablePredicateProps;\n ref: HTMLDivElement;\n stylesNames: TablePredicateStylesNames;\n compound: true;\n}>;\n\nconst defaultProps: Partial<TablePredicateProps> = {};\n\nexport const TablePredicate: FunctionComponent<TablePredicateProps> = factory<TablePredicateFactory>((props, ref) => {\n const {store, getStyles} = useTableContext();\n const {id, data, label, classNames, className, styles, style, renderOption, comboboxProps, vars, ...others} =\n useProps('PlasmaTablePredicate', defaultProps, props);\n\n const handleChange = (newValue: string) => {\n store.setPredicates((prev) => ({...prev, [id]: newValue}));\n store.setPagination((prev) => ({...prev, pageIndex: 0}));\n };\n\n const stylesApiProps = {classNames, styles};\n\n return (\n <Grid.Col\n span=\"content\"\n order={TableComponentsOrder.Predicate}\n ref={ref}\n {...getStyles('predicate', {className, style, ...stylesApiProps})}\n {...others}\n >\n <Group gap=\"xs\" wrap=\"nowrap\" {...getStyles('predicateWrapper', stylesApiProps)}>\n {label ? <Text {...getStyles('predicateLabel', stylesApiProps)}>{label}:</Text> : null}\n <Select\n comboboxProps={{withinPortal: true, ...comboboxProps}}\n value={store.state.predicates[id]}\n onChange={handleChange}\n data={data}\n aria-label={label ?? id}\n searchable={data.length > 7}\n renderOption={renderOption}\n scrollAreaProps={{type: 'always'}}\n {...getStyles('predicateSelect', stylesApiProps)}\n />\n </Group>\n </Grid.Col>\n );\n});\n"],"names":["factory","Grid","Group","Select","Text","useProps","TableComponentsOrder","useTableContext","defaultProps","TablePredicate","props","ref","store","getStyles","id","data","label","classNames","className","styles","style","renderOption","comboboxProps","vars","others","handleChange","newValue","setPredicates","prev","setPagination","pageIndex","stylesApiProps","Col","span","order","Predicate","gap","wrap","withinPortal","value","state","predicates","onChange","aria-label","searchable","length","scrollAreaProps","type"],"mappings":";AAAA,SAIIA,OAAO,EAEPC,IAAI,EACJC,KAAK,EACLC,MAAM,EAENC,IAAI,EACJC,QAAQ,QACL,gBAAgB;AAGvB,SAAQC,oBAAoB,QAAO,WAAW;AAC9C,SAAQC,eAAe,QAAO,kBAAkB;AA8BhD,MAAMC,eAA6C,CAAC;AAEpD,OAAO,MAAMC,iBAAyDT,QAA+B,CAACU,OAAOC;IACzG,MAAM,EAACC,KAAK,EAAEC,SAAS,EAAC,GAAGN;IAC3B,MAAM,EAACO,EAAE,EAAEC,IAAI,EAAEC,KAAK,EAAEC,UAAU,EAAEC,SAAS,EAAEC,MAAM,EAAEC,KAAK,EAAEC,YAAY,EAAEC,aAAa,EAAEC,IAAI,EAAE,GAAGC,QAAO,GACvGnB,SAAS,wBAAwBG,cAAcE;IAEnD,MAAMe,eAAe,CAACC;QAClBd,MAAMe,aAAa,CAAC,CAACC,OAAU,CAAA;gBAAC,GAAGA,IAAI;gBAAE,CAACd,GAAG,EAAEY;YAAQ,CAAA;QACvDd,MAAMiB,aAAa,CAAC,CAACD,OAAU,CAAA;gBAAC,GAAGA,IAAI;gBAAEE,WAAW;YAAC,CAAA;IACzD;IAEA,MAAMC,iBAAiB;QAACd;QAAYE;IAAM;IAE1C,qBACI,KAAClB,KAAK+B,GAAG;QACLC,MAAK;QACLC,OAAO5B,qBAAqB6B,SAAS;QACrCxB,KAAKA;QACJ,GAAGE,UAAU,aAAa;YAACK;YAAWE;YAAO,GAAGW,cAAc;QAAA,EAAE;QAChE,GAAGP,MAAM;kBAEV,cAAA,MAACtB;YAAMkC,KAAI;YAAKC,MAAK;YAAU,GAAGxB,UAAU,oBAAoBkB,eAAe;;gBAC1Ef,sBAAQ,MAACZ;oBAAM,GAAGS,UAAU,kBAAkBkB,eAAe;;wBAAGf;wBAAM;;qBAAW;8BAClF,KAACb;oBACGmB,eAAe;wBAACgB,cAAc;wBAAM,GAAGhB,aAAa;oBAAA;oBACpDiB,OAAO3B,MAAM4B,KAAK,CAACC,UAAU,CAAC3B,GAAG;oBACjC4B,UAAUjB;oBACVV,MAAMA;oBACN4B,cAAY3B,SAASF;oBACrB8B,YAAY7B,KAAK8B,MAAM,GAAG;oBAC1BxB,cAAcA;oBACdyB,iBAAiB;wBAACC,MAAM;oBAAQ;oBAC/B,GAAGlC,UAAU,mBAAmBkB,eAAe;;;;;AAKpE,GAAG"}
|