@tcn/ui-table 2.3.6 → 2.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/components/cells/header_cell.d.ts.map +1 -1
  2. package/dist/components/cells/header_cell.js +6 -6
  3. package/dist/components/cells/header_cell.js.map +1 -1
  4. package/dist/components/table_filter_panel/field_filters/clear_button.d.ts +5 -0
  5. package/dist/components/table_filter_panel/field_filters/clear_button.d.ts.map +1 -0
  6. package/dist/components/table_filter_panel/field_filters/clear_button.js +15 -0
  7. package/dist/components/table_filter_panel/field_filters/clear_button.js.map +1 -0
  8. package/dist/components/table_filter_panel/field_filters/clearable_field.d.ts +9 -0
  9. package/dist/components/table_filter_panel/field_filters/clearable_field.d.ts.map +1 -0
  10. package/dist/components/table_filter_panel/field_filters/clearable_field.js +28 -0
  11. package/dist/components/table_filter_panel/field_filters/clearable_field.js.map +1 -0
  12. package/dist/components/table_filter_panel/field_filters/date_field_filter.d.ts.map +1 -1
  13. package/dist/components/table_filter_panel/field_filters/date_field_filter.js +45 -54
  14. package/dist/components/table_filter_panel/field_filters/date_field_filter.js.map +1 -1
  15. package/dist/components/table_filter_panel/field_filters/mulit_select_field_filter.d.ts.map +1 -1
  16. package/dist/components/table_filter_panel/field_filters/mulit_select_field_filter.js +25 -28
  17. package/dist/components/table_filter_panel/field_filters/mulit_select_field_filter.js.map +1 -1
  18. package/dist/components/table_filter_panel/field_filters/number_field_filter.d.ts.map +1 -1
  19. package/dist/components/table_filter_panel/field_filters/number_field_filter.js +37 -44
  20. package/dist/components/table_filter_panel/field_filters/number_field_filter.js.map +1 -1
  21. package/dist/components/table_filter_panel/field_filters/number_range_field_filter.d.ts.map +1 -1
  22. package/dist/components/table_filter_panel/field_filters/number_range_field_filter.js +46 -55
  23. package/dist/components/table_filter_panel/field_filters/number_range_field_filter.js.map +1 -1
  24. package/dist/components/table_filter_panel/field_filters/select_field_filter.d.ts.map +1 -1
  25. package/dist/components/table_filter_panel/field_filters/select_field_filter.js +19 -22
  26. package/dist/components/table_filter_panel/field_filters/select_field_filter.js.map +1 -1
  27. package/dist/components/table_filter_panel/field_filters/string_field_filter.d.ts.map +1 -1
  28. package/dist/components/table_filter_panel/field_filters/string_field_filter.js +45 -53
  29. package/dist/components/table_filter_panel/field_filters/string_field_filter.js.map +1 -1
  30. package/dist/components/table_filter_panel/table_filter_panel.d.ts +4 -3
  31. package/dist/components/table_filter_panel/table_filter_panel.d.ts.map +1 -1
  32. package/dist/components/table_filter_panel/table_filter_panel.js +38 -10
  33. package/dist/components/table_filter_panel/table_filter_panel.js.map +1 -1
  34. package/dist/table_filter_panel.css +1 -0
  35. package/package.json +4 -4
  36. package/src/__stories__/aip_table.stories.tsx +3 -3
  37. package/src/__stories__/demo.stories.tsx +4 -4
  38. package/src/__stories__/table.stories.tsx +14 -11
  39. package/src/components/cells/header_cell.tsx +1 -1
  40. package/src/components/table_filter_panel/field_filters/clear_button.tsx +17 -0
  41. package/src/components/table_filter_panel/field_filters/clearable_field.tsx +33 -0
  42. package/src/components/table_filter_panel/field_filters/date_field_filter.tsx +26 -50
  43. package/src/components/table_filter_panel/field_filters/mulit_select_field_filter.tsx +3 -9
  44. package/src/components/table_filter_panel/field_filters/number_field_filter.tsx +10 -20
  45. package/src/components/table_filter_panel/field_filters/number_range_field_filter.tsx +29 -48
  46. package/src/components/table_filter_panel/field_filters/select_field_filter.tsx +3 -9
  47. package/src/components/table_filter_panel/field_filters/string_field_filter.tsx +10 -21
  48. package/src/components/table_filter_panel/table_filter_panel.module.css +11 -0
  49. package/src/components/table_filter_panel/table_filter_panel.tsx +33 -4
@@ -1,62 +1,53 @@
1
- import { jsxs as t, jsx as e } from "react/jsx-runtime";
2
- import { CrossCircleIcon as o } from "@tcn/icons/cross_circle_icon.js";
3
- import { useSignalValue as d } from "@tcn/state";
4
- import { Button as m } from "@tcn/ui/actions";
5
- import { Input as u } from "@tcn/ui/inputs";
6
- import { VStack as x, Box as i, HStack as c } from "@tcn/ui/stacks";
7
- import { Title as f, BodyText as s } from "@tcn/ui/typography";
8
- import { useFieldFilterStrategy as g } from "./use_field_filter_strategy.js";
1
+ import { jsxs as s, jsx as l } from "react/jsx-runtime";
2
+ import { useSignalValue as t } from "@tcn/state";
3
+ import { Input as i } from "@tcn/ui/inputs";
4
+ import { useFieldFilterStrategy as p } from "./use_field_filter_strategy.js";
9
5
  import { NumberRangeFieldFilterPresenter as b } from "./number_range_field_filter_presenter.js";
10
- function z({
11
- fieldName: h,
12
- label: p
6
+ import { FieldSet as d } from "@tcn/ui/form";
7
+ import { ClearableField as u } from "./clearable_field.js";
8
+ function M({
9
+ fieldName: o,
10
+ label: m
13
11
  }) {
14
- const r = g(b, h), n = d(r.broadcasts.minValue), a = d(r.broadcasts.maxValue);
15
- return /* @__PURE__ */ t(x, { gap: "4px", children: [
16
- /* @__PURE__ */ e(i, { width: "flex", children: /* @__PURE__ */ e(f, { size: "md", children: p }) }),
17
- /* @__PURE__ */ t(c, { gap: "4px", children: [
18
- /* @__PURE__ */ e(i, { width: "auto", children: /* @__PURE__ */ e(s, { size: "lg", children: "Min" }) }),
19
- /* @__PURE__ */ e(i, { width: "flex", children: /* @__PURE__ */ e(
20
- u,
21
- {
22
- type: "number",
23
- value: String(n ?? ""),
24
- onChange: (l) => r.setMinValue(Number(l))
25
- }
26
- ) }),
27
- /* @__PURE__ */ e(
28
- m,
29
- {
30
- onClick: () => r.setMinValue(null),
31
- hierarchy: "tertiary",
32
- disabled: n == null,
33
- children: /* @__PURE__ */ e(o, {})
34
- }
35
- )
36
- ] }),
37
- /* @__PURE__ */ t(c, { gap: "4px", children: [
38
- /* @__PURE__ */ e(i, { width: "auto", children: /* @__PURE__ */ e(s, { size: "lg", children: "Max" }) }),
39
- /* @__PURE__ */ e(i, { width: "flex", children: /* @__PURE__ */ e(
40
- u,
41
- {
42
- type: "number",
43
- value: String(a ?? ""),
44
- onChange: (l) => r.setMaxValue(Number(l))
45
- }
46
- ) }),
47
- /* @__PURE__ */ e(
48
- m,
49
- {
50
- onClick: () => r.setMaxValue(null),
51
- hierarchy: "tertiary",
52
- disabled: a == null,
53
- children: /* @__PURE__ */ e(o, {})
54
- }
55
- )
56
- ] })
12
+ const e = p(b, o), n = t(e.broadcasts.minValue), a = t(e.broadcasts.maxValue);
13
+ return /* @__PURE__ */ s(d, { legend: m, gap: "4px", children: [
14
+ /* @__PURE__ */ l(
15
+ u,
16
+ {
17
+ label: "Min",
18
+ onClear: () => e.setMinValue(null),
19
+ isClearable: n == null,
20
+ inline: !0,
21
+ children: /* @__PURE__ */ l(
22
+ i,
23
+ {
24
+ type: "number",
25
+ value: String(n ?? ""),
26
+ onChange: (r) => e.setMinValue(Number(r))
27
+ }
28
+ )
29
+ }
30
+ ),
31
+ /* @__PURE__ */ l(
32
+ u,
33
+ {
34
+ label: "Max",
35
+ onClear: () => e.setMaxValue(null),
36
+ isClearable: a == null,
37
+ inline: !0,
38
+ children: /* @__PURE__ */ l(
39
+ i,
40
+ {
41
+ type: "number",
42
+ value: String(a ?? ""),
43
+ onChange: (r) => e.setMaxValue(Number(r))
44
+ }
45
+ )
46
+ }
47
+ )
57
48
  ] });
58
49
  }
59
50
  export {
60
- z as NumberRangeFieldFilter
51
+ M as NumberRangeFieldFilter
61
52
  };
62
53
  //# sourceMappingURL=number_range_field_filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"number_range_field_filter.js","sources":["../../../../src/components/table_filter_panel/field_filters/number_range_field_filter.tsx"],"sourcesContent":["import { CrossCircleIcon } from '@tcn/icons/cross_circle_icon.js';\nimport { useSignalValue } from '@tcn/state';\nimport { Button } from '@tcn/ui/actions';\nimport { Input } from '@tcn/ui/inputs';\nimport { Box, HStack, VStack } from '@tcn/ui/stacks';\nimport { BodyText, Title } from '@tcn/ui/typography';\nimport React from 'react';\nimport { useFieldFilterStrategy } from './use_field_filter_strategy.js';\nimport { NumberRangeFieldFilterPresenter } from './number_range_field_filter_presenter.js';\n\nexport function NumberRangeFieldFilter({\n fieldName,\n label,\n}: {\n fieldName: string;\n label: string;\n}) {\n const presenter = useFieldFilterStrategy(NumberRangeFieldFilterPresenter, fieldName);\n\n const minValue = useSignalValue(presenter.broadcasts.minValue);\n const maxValue = useSignalValue(presenter.broadcasts.maxValue);\n\n return (\n <VStack gap=\"4px\">\n <Box width=\"flex\">\n <Title size=\"md\">{label}</Title>\n </Box>\n <HStack gap=\"4px\">\n <Box width=\"auto\">\n <BodyText size=\"lg\">Min</BodyText>\n </Box>\n <Box width=\"flex\">\n <Input\n type=\"number\"\n value={String(minValue ?? '')}\n onChange={value => presenter.setMinValue(Number(value))}\n />\n </Box>\n <Button\n onClick={() => presenter.setMinValue(null)}\n hierarchy=\"tertiary\"\n disabled={minValue == null}\n >\n <CrossCircleIcon />\n </Button>\n </HStack>\n <HStack gap=\"4px\">\n <Box width=\"auto\">\n <BodyText size=\"lg\">Max</BodyText>\n </Box>\n <Box width=\"flex\">\n <Input\n type=\"number\"\n value={String(maxValue ?? '')}\n onChange={value => presenter.setMaxValue(Number(value))}\n />\n </Box>\n <Button\n onClick={() => presenter.setMaxValue(null)}\n hierarchy=\"tertiary\"\n disabled={maxValue == null}\n >\n <CrossCircleIcon />\n </Button>\n </HStack>\n </VStack>\n );\n}\n"],"names":["NumberRangeFieldFilter","fieldName","label","presenter","useFieldFilterStrategy","NumberRangeFieldFilterPresenter","minValue","useSignalValue","maxValue","jsxs","VStack","jsx","Box","Title","HStack","BodyText","Input","value","Button","CrossCircleIcon"],"mappings":";;;;;;;;;AAUO,SAASA,EAAuB;AAAA,EACrC,WAAAC;AAAA,EACA,OAAAC;AACF,GAGG;AACD,QAAMC,IAAYC,EAAuBC,GAAiCJ,CAAS,GAE7EK,IAAWC,EAAeJ,EAAU,WAAW,QAAQ,GACvDK,IAAWD,EAAeJ,EAAU,WAAW,QAAQ;AAE7D,SACE,gBAAAM,EAACC,GAAA,EAAO,KAAI,OACV,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAI,OAAM,QACT,UAAA,gBAAAD,EAACE,KAAM,MAAK,MAAM,aAAM,EAAA,CAC1B;AAAA,IACA,gBAAAJ,EAACK,GAAA,EAAO,KAAI,OACV,UAAA;AAAA,MAAA,gBAAAH,EAACC,GAAA,EAAI,OAAM,QACT,UAAA,gBAAAD,EAACI,KAAS,MAAK,MAAK,iBAAG,EAAA,CACzB;AAAA,MACA,gBAAAJ,EAACC,GAAA,EAAI,OAAM,QACT,UAAA,gBAAAD;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,OAAO,OAAOV,KAAY,EAAE;AAAA,UAC5B,UAAU,CAAAW,MAASd,EAAU,YAAY,OAAOc,CAAK,CAAC;AAAA,QAAA;AAAA,MAAA,GAE1D;AAAA,MACA,gBAAAN;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,SAAS,MAAMf,EAAU,YAAY,IAAI;AAAA,UACzC,WAAU;AAAA,UACV,UAAUG,KAAY;AAAA,UAEtB,4BAACa,GAAA,CAAA,CAAgB;AAAA,QAAA;AAAA,MAAA;AAAA,IACnB,GACF;AAAA,IACA,gBAAAV,EAACK,GAAA,EAAO,KAAI,OACV,UAAA;AAAA,MAAA,gBAAAH,EAACC,GAAA,EAAI,OAAM,QACT,UAAA,gBAAAD,EAACI,KAAS,MAAK,MAAK,iBAAG,EAAA,CACzB;AAAA,MACA,gBAAAJ,EAACC,GAAA,EAAI,OAAM,QACT,UAAA,gBAAAD;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,OAAO,OAAOR,KAAY,EAAE;AAAA,UAC5B,UAAU,CAAAS,MAASd,EAAU,YAAY,OAAOc,CAAK,CAAC;AAAA,QAAA;AAAA,MAAA,GAE1D;AAAA,MACA,gBAAAN;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,SAAS,MAAMf,EAAU,YAAY,IAAI;AAAA,UACzC,WAAU;AAAA,UACV,UAAUK,KAAY;AAAA,UAEtB,4BAACW,GAAA,CAAA,CAAgB;AAAA,QAAA;AAAA,MAAA;AAAA,IACnB,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
1
+ {"version":3,"file":"number_range_field_filter.js","sources":["../../../../src/components/table_filter_panel/field_filters/number_range_field_filter.tsx"],"sourcesContent":["import { useSignalValue } from '@tcn/state';\nimport { Input } from '@tcn/ui/inputs';\nimport { useFieldFilterStrategy } from './use_field_filter_strategy.js';\nimport { NumberRangeFieldFilterPresenter } from './number_range_field_filter_presenter.js';\nimport { FieldSet } from '@tcn/ui/form';\nimport { ClearableField } from './clearable_field.js';\n\nexport function NumberRangeFieldFilter({\n fieldName,\n label,\n}: {\n fieldName: string;\n label: string;\n}) {\n const presenter = useFieldFilterStrategy(NumberRangeFieldFilterPresenter, fieldName);\n\n const minValue = useSignalValue(presenter.broadcasts.minValue);\n const maxValue = useSignalValue(presenter.broadcasts.maxValue);\n\n return (\n <FieldSet legend={label} gap=\"4px\">\n <ClearableField\n label=\"Min\"\n onClear={() => presenter.setMinValue(null)}\n isClearable={minValue == null}\n inline\n >\n <Input\n type=\"number\"\n value={String(minValue ?? '')}\n onChange={value => presenter.setMinValue(Number(value))}\n />\n </ClearableField>\n\n <ClearableField\n label=\"Max\"\n onClear={() => presenter.setMaxValue(null)}\n isClearable={maxValue == null}\n inline\n >\n <Input\n type=\"number\"\n value={String(maxValue ?? '')}\n onChange={value => presenter.setMaxValue(Number(value))}\n />\n </ClearableField>\n </FieldSet>\n );\n}\n"],"names":["NumberRangeFieldFilter","fieldName","label","presenter","useFieldFilterStrategy","NumberRangeFieldFilterPresenter","minValue","useSignalValue","maxValue","jsxs","FieldSet","jsx","ClearableField","Input","value"],"mappings":";;;;;;;AAOO,SAASA,EAAuB;AAAA,EACrC,WAAAC;AAAA,EACA,OAAAC;AACF,GAGG;AACD,QAAMC,IAAYC,EAAuBC,GAAiCJ,CAAS,GAE7EK,IAAWC,EAAeJ,EAAU,WAAW,QAAQ,GACvDK,IAAWD,EAAeJ,EAAU,WAAW,QAAQ;AAE7D,SACE,gBAAAM,EAACC,GAAA,EAAS,QAAQR,GAAO,KAAI,OAC3B,UAAA;AAAA,IAAA,gBAAAS;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,SAAS,MAAMT,EAAU,YAAY,IAAI;AAAA,QACzC,aAAaG,KAAY;AAAA,QACzB,QAAM;AAAA,QAEN,UAAA,gBAAAK;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,OAAO,OAAOP,KAAY,EAAE;AAAA,YAC5B,UAAU,CAAAQ,MAASX,EAAU,YAAY,OAAOW,CAAK,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MACxD;AAAA,IAAA;AAAA,IAGF,gBAAAH;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,SAAS,MAAMT,EAAU,YAAY,IAAI;AAAA,QACzC,aAAaK,KAAY;AAAA,QACzB,QAAM;AAAA,QAEN,UAAA,gBAAAG;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,OAAO,OAAOL,KAAY,EAAE;AAAA,YAC5B,UAAU,CAAAM,MAASX,EAAU,YAAY,OAAOW,CAAK,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MACxD;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;"}
@@ -1 +1 @@
1
- {"version":3,"file":"select_field_filter.d.ts","sourceRoot":"","sources":["../../../../src/components/table_filter_panel/field_filters/select_field_filter.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAI3D,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG;IACtD,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;KAAE,EAAE,CAAC;CAChE,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,sBAAsB,2CAwCtF"}
1
+ {"version":3,"file":"select_field_filter.d.ts","sourceRoot":"","sources":["../../../../src/components/table_filter_panel/field_filters/select_field_filter.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAK3D,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG;IACtD,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;KAAE,EAAE,CAAC;CAChE,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,sBAAsB,2CAqCtF"}
@@ -1,28 +1,27 @@
1
1
  import { jsxs as i, jsx as l } from "react/jsx-runtime";
2
- import { CrossCircleIcon as d } from "@tcn/icons/cross_circle_icon.js";
3
- import { useSignalValue as s } from "@tcn/state";
4
- import { Button as f } from "@tcn/ui/actions";
5
- import { Select as h, Option as p } from "@tcn/ui/inputs";
6
- import { VStack as b, Box as v, HStack as S } from "@tcn/ui/stacks";
7
- import { Title as x } from "@tcn/ui/typography";
8
- import { SelectFieldFilterPresenter as F } from "./select_field_filter_presenter.js";
9
- import { useFieldFilterStrategy as g } from "./use_field_filter_strategy.js";
10
- function I({ fieldName: n, label: o, options: r }) {
11
- const t = g(F, n), a = s(t.broadcasts.value), c = r.find((e) => e.value === a)?.label ?? "";
2
+ import { useSignalValue as d } from "@tcn/state";
3
+ import { Select as s, Option as f } from "@tcn/ui/inputs";
4
+ import { VStack as b, Box as h, HStack as p } from "@tcn/ui/stacks";
5
+ import { Title as v } from "@tcn/ui/typography";
6
+ import { SelectFieldFilterPresenter as S } from "./select_field_filter_presenter.js";
7
+ import { useFieldFilterStrategy as x } from "./use_field_filter_strategy.js";
8
+ import { ClearFilterButton as F } from "./clear_button.js";
9
+ function z({ fieldName: n, label: u, options: r }) {
10
+ const t = x(S, n), a = d(t.broadcasts.value), o = r.find((e) => e.value === a)?.label ?? "";
12
11
  return /* @__PURE__ */ i(b, { gap: "4px", children: [
13
- /* @__PURE__ */ l(v, { width: "flex", children: /* @__PURE__ */ l(x, { size: "md", children: o }) }),
14
- /* @__PURE__ */ i(S, { children: [
12
+ /* @__PURE__ */ l(h, { width: "flex", children: /* @__PURE__ */ l(v, { size: "md", children: u }) }),
13
+ /* @__PURE__ */ i(p, { children: [
15
14
  /* @__PURE__ */ l(
16
- h,
15
+ s,
17
16
  {
18
- value: c,
17
+ value: o,
19
18
  onChange: (e) => {
20
- const m = r.find((u) => u.label === e)?.value;
21
- t.setValue(m ?? null);
19
+ const c = r.find((m) => m.label === e)?.value;
20
+ t.setValue(c ?? null);
22
21
  },
23
22
  width: "flex",
24
23
  children: r.map((e) => /* @__PURE__ */ l(
25
- p,
24
+ f,
26
25
  {
27
26
  value: e.label,
28
27
  label: e.label,
@@ -33,18 +32,16 @@ function I({ fieldName: n, label: o, options: r }) {
33
32
  }
34
33
  ),
35
34
  /* @__PURE__ */ l(
36
- f,
35
+ F,
37
36
  {
38
37
  onClick: () => t.setValue(null),
39
- hierarchy: "tertiary",
40
- disabled: a == null,
41
- children: /* @__PURE__ */ l(d, {})
38
+ disabled: a == null
42
39
  }
43
40
  )
44
41
  ] })
45
42
  ] });
46
43
  }
47
44
  export {
48
- I as SelectFieldFilter
45
+ z as SelectFieldFilter
49
46
  };
50
47
  //# sourceMappingURL=select_field_filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"select_field_filter.js","sources":["../../../../src/components/table_filter_panel/field_filters/select_field_filter.tsx"],"sourcesContent":["import React from 'react';\n\nimport { CrossCircleIcon } from '@tcn/icons/cross_circle_icon.js';\nimport { useSignalValue } from '@tcn/state';\nimport { Button } from '@tcn/ui/actions';\nimport { Option, Select } from '@tcn/ui/inputs';\nimport { Box, HStack, VStack } from '@tcn/ui/stacks';\nimport { Title } from '@tcn/ui/typography';\nimport { FieldFilterProps } from './field_filter_props.js';\nimport { SelectFieldFilterPresenter } from './select_field_filter_presenter.js';\nimport { useFieldFilterStrategy } from './use_field_filter_strategy.js';\n\nexport type SelectFieldFilterProps = FieldFilterProps & {\n options: { label: string; value: string | boolean | number }[];\n};\n\nexport function SelectFieldFilter({ fieldName, label, options }: SelectFieldFilterProps) {\n const presenter = useFieldFilterStrategy(SelectFieldFilterPresenter, fieldName);\n\n const value = useSignalValue(presenter.broadcasts.value);\n const valueLabel = options.find(option => option.value === value)?.label ?? '';\n\n return (\n <VStack gap=\"4px\">\n <Box width=\"flex\">\n <Title size=\"md\">{label}</Title>\n </Box>\n <HStack>\n <Select\n value={valueLabel}\n onChange={value => {\n const realValue = options.find(option => option.label === value)?.value;\n presenter.setValue(realValue ?? null);\n }}\n width=\"flex\"\n >\n {options.map(option => (\n <Option\n key={option.value.toString()}\n value={option.label}\n label={option.label}\n >\n {option.label}\n </Option>\n ))}\n </Select>\n <Button\n onClick={() => presenter.setValue(null)}\n hierarchy=\"tertiary\"\n disabled={value == null}\n >\n <CrossCircleIcon />\n </Button>\n </HStack>\n </VStack>\n );\n}\n"],"names":["SelectFieldFilter","fieldName","label","options","presenter","useFieldFilterStrategy","SelectFieldFilterPresenter","value","useSignalValue","valueLabel","option","jsxs","VStack","jsx","Box","Title","HStack","Select","realValue","Option","Button","CrossCircleIcon"],"mappings":";;;;;;;;;AAgBO,SAASA,EAAkB,EAAE,WAAAC,GAAW,OAAAC,GAAO,SAAAC,KAAmC;AACvF,QAAMC,IAAYC,EAAuBC,GAA4BL,CAAS,GAExEM,IAAQC,EAAeJ,EAAU,WAAW,KAAK,GACjDK,IAAaN,EAAQ,KAAK,CAAAO,MAAUA,EAAO,UAAUH,CAAK,GAAG,SAAS;AAE5E,SACE,gBAAAI,EAACC,GAAA,EAAO,KAAI,OACV,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAI,OAAM,QACT,UAAA,gBAAAD,EAACE,KAAM,MAAK,MAAM,aAAM,EAAA,CAC1B;AAAA,sBACCC,GAAA,EACC,UAAA;AAAA,MAAA,gBAAAH;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,OAAOR;AAAA,UACP,UAAU,CAAAF,MAAS;AACjB,kBAAMW,IAAYf,EAAQ,KAAK,OAAUO,EAAO,UAAUH,CAAK,GAAG;AAClE,YAAAH,EAAU,SAASc,KAAa,IAAI;AAAA,UACtC;AAAA,UACA,OAAM;AAAA,UAEL,UAAAf,EAAQ,IAAI,CAAAO,MACX,gBAAAG;AAAA,YAACM;AAAA,YAAA;AAAA,cAEC,OAAOT,EAAO;AAAA,cACd,OAAOA,EAAO;AAAA,cAEb,UAAAA,EAAO;AAAA,YAAA;AAAA,YAJHA,EAAO,MAAM,SAAA;AAAA,UAAS,CAM9B;AAAA,QAAA;AAAA,MAAA;AAAA,MAEH,gBAAAG;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,SAAS,MAAMhB,EAAU,SAAS,IAAI;AAAA,UACtC,WAAU;AAAA,UACV,UAAUG,KAAS;AAAA,UAEnB,4BAACc,GAAA,CAAA,CAAgB;AAAA,QAAA;AAAA,MAAA;AAAA,IACnB,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
1
+ {"version":3,"file":"select_field_filter.js","sources":["../../../../src/components/table_filter_panel/field_filters/select_field_filter.tsx"],"sourcesContent":["import { useSignalValue } from '@tcn/state';\nimport { Option, Select } from '@tcn/ui/inputs';\nimport { Box, HStack, VStack } from '@tcn/ui/stacks';\nimport { Title } from '@tcn/ui/typography';\nimport { FieldFilterProps } from './field_filter_props.js';\nimport { SelectFieldFilterPresenter } from './select_field_filter_presenter.js';\nimport { useFieldFilterStrategy } from './use_field_filter_strategy.js';\nimport { ClearFilterButton } from './clear_button.js';\n\nexport type SelectFieldFilterProps = FieldFilterProps & {\n options: { label: string; value: string | boolean | number }[];\n};\n\nexport function SelectFieldFilter({ fieldName, label, options }: SelectFieldFilterProps) {\n const presenter = useFieldFilterStrategy(SelectFieldFilterPresenter, fieldName);\n\n const value = useSignalValue(presenter.broadcasts.value);\n const valueLabel = options.find(option => option.value === value)?.label ?? '';\n\n return (\n <VStack gap=\"4px\">\n <Box width=\"flex\">\n <Title size=\"md\">{label}</Title>\n </Box>\n <HStack>\n <Select\n value={valueLabel}\n onChange={value => {\n const realValue = options.find(option => option.label === value)?.value;\n presenter.setValue(realValue ?? null);\n }}\n width=\"flex\"\n >\n {options.map(option => (\n <Option\n key={option.value.toString()}\n value={option.label}\n label={option.label}\n >\n {option.label}\n </Option>\n ))}\n </Select>\n <ClearFilterButton\n onClick={() => presenter.setValue(null)}\n disabled={value == null}\n />\n </HStack>\n </VStack>\n );\n}\n"],"names":["SelectFieldFilter","fieldName","label","options","presenter","useFieldFilterStrategy","SelectFieldFilterPresenter","value","useSignalValue","valueLabel","option","jsxs","VStack","jsx","Box","Title","HStack","Select","realValue","Option","ClearFilterButton"],"mappings":";;;;;;;;AAaO,SAASA,EAAkB,EAAE,WAAAC,GAAW,OAAAC,GAAO,SAAAC,KAAmC;AACvF,QAAMC,IAAYC,EAAuBC,GAA4BL,CAAS,GAExEM,IAAQC,EAAeJ,EAAU,WAAW,KAAK,GACjDK,IAAaN,EAAQ,KAAK,CAAAO,MAAUA,EAAO,UAAUH,CAAK,GAAG,SAAS;AAE5E,SACE,gBAAAI,EAACC,GAAA,EAAO,KAAI,OACV,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAI,OAAM,QACT,UAAA,gBAAAD,EAACE,KAAM,MAAK,MAAM,aAAM,EAAA,CAC1B;AAAA,sBACCC,GAAA,EACC,UAAA;AAAA,MAAA,gBAAAH;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,OAAOR;AAAA,UACP,UAAU,CAAAF,MAAS;AACjB,kBAAMW,IAAYf,EAAQ,KAAK,OAAUO,EAAO,UAAUH,CAAK,GAAG;AAClE,YAAAH,EAAU,SAASc,KAAa,IAAI;AAAA,UACtC;AAAA,UACA,OAAM;AAAA,UAEL,UAAAf,EAAQ,IAAI,CAAAO,MACX,gBAAAG;AAAA,YAACM;AAAA,YAAA;AAAA,cAEC,OAAOT,EAAO;AAAA,cACd,OAAOA,EAAO;AAAA,cAEb,UAAAA,EAAO;AAAA,YAAA;AAAA,YAJHA,EAAO,MAAM,SAAA;AAAA,UAAS,CAM9B;AAAA,QAAA;AAAA,MAAA;AAAA,MAEH,gBAAAG;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,SAAS,MAAMhB,EAAU,SAAS,IAAI;AAAA,UACtC,UAAUG,KAAS;AAAA,QAAA;AAAA,MAAA;AAAA,IACrB,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
@@ -1 +1 @@
1
- {"version":3,"file":"string_field_filter.d.ts","sourceRoot":"","sources":["../../../../src/components/table_filter_panel/field_filters/string_field_filter.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAkB3D,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,gBAAgB,2CA6ClF"}
1
+ {"version":3,"file":"string_field_filter.d.ts","sourceRoot":"","sources":["../../../../src/components/table_filter_panel/field_filters/string_field_filter.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAmB3D,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,gBAAgB,2CAsClF"}
@@ -1,13 +1,10 @@
1
- import { jsxs as o, jsx as e } from "react/jsx-runtime";
2
- import { CrossCircleIcon as m } from "@tcn/icons/cross_circle_icon.js";
3
- import { useSignalValue as l } from "@tcn/state";
4
- import { Button as d } from "@tcn/ui/actions";
5
- import { Select as h, Option as u, Input as f } from "@tcn/ui/inputs";
6
- import { VStack as x, Box as b, HStack as S } from "@tcn/ui/stacks";
7
- import { Title as g } from "@tcn/ui/typography";
8
- import { StringFieldFilterPresenter as v } from "./string_field_filter_presenter.js";
9
- import { useFieldFilterStrategy as y } from "./use_field_filter_strategy.js";
10
- const F = ["is", "isNot", "has"], C = {
1
+ import { jsx as r, jsxs as c } from "react/jsx-runtime";
2
+ import { useSignalValue as o } from "@tcn/state";
3
+ import { InputGroup as m, Select as d, Option as h, Input as b } from "@tcn/ui/inputs";
4
+ import { StringFieldFilterPresenter as f } from "./string_field_filter_presenter.js";
5
+ import { useFieldFilterStrategy as F } from "./use_field_filter_strategy.js";
6
+ import { ClearableField as g } from "./clearable_field.js";
7
+ const v = ["is", "isNot", "has"], S = {
11
8
  is: "=",
12
9
  isNot: "!=",
13
10
  has: ":"
@@ -16,50 +13,45 @@ const F = ["is", "isNot", "has"], C = {
16
13
  isNot: "is not",
17
14
  has: "has"
18
15
  };
19
- function L({ fieldName: a, label: n, operators: c }) {
20
- const r = y(v, a), i = l(r.broadcasts.value), p = l(r.broadcasts.operator);
21
- return /* @__PURE__ */ o(x, { gap: "4px", children: [
22
- /* @__PURE__ */ e(b, { width: "flex", children: /* @__PURE__ */ e(g, { size: "md", children: n }) }),
23
- /* @__PURE__ */ o(S, { width: "flex", children: [
24
- /* @__PURE__ */ e(
25
- h,
26
- {
27
- value: p,
28
- onChange: (t) => r.setOperator(t),
29
- width: "65px",
30
- children: (c || F).map((t) => /* @__PURE__ */ e(
31
- u,
32
- {
33
- value: C[t],
34
- label: s[t],
35
- children: s[t]
36
- },
37
- t
38
- ))
39
- }
40
- ),
41
- /* @__PURE__ */ e(
42
- f,
43
- {
44
- type: "text",
45
- value: i ?? "",
46
- onChange: (t) => r.setValue(t)
47
- }
48
- ),
49
- /* @__PURE__ */ e(
50
- d,
51
- {
52
- onClick: () => r.setValue(null),
53
- hierarchy: "tertiary",
54
- utility: !0,
55
- disabled: i == null,
56
- children: /* @__PURE__ */ e(m, {})
57
- }
58
- )
59
- ] })
60
- ] });
16
+ function j({ fieldName: a, label: i, operators: n }) {
17
+ const t = F(f, a), l = o(t.broadcasts.value), p = o(t.broadcasts.operator), u = n || v;
18
+ return /* @__PURE__ */ r(
19
+ g,
20
+ {
21
+ label: i,
22
+ onClear: () => t.setValue(null),
23
+ isClearable: l == null,
24
+ children: /* @__PURE__ */ c(m, { children: [
25
+ /* @__PURE__ */ r(
26
+ d,
27
+ {
28
+ value: p,
29
+ onChange: (e) => t.setOperator(e),
30
+ width: "65px",
31
+ children: u.map((e) => /* @__PURE__ */ r(
32
+ h,
33
+ {
34
+ value: S[e],
35
+ label: s[e],
36
+ children: s[e]
37
+ },
38
+ e
39
+ ))
40
+ }
41
+ ),
42
+ /* @__PURE__ */ r(
43
+ b,
44
+ {
45
+ type: "text",
46
+ value: l ?? "",
47
+ onChange: (e) => t.setValue(e)
48
+ }
49
+ )
50
+ ] })
51
+ }
52
+ );
61
53
  }
62
54
  export {
63
- L as StringFieldFilter
55
+ j as StringFieldFilter
64
56
  };
65
57
  //# sourceMappingURL=string_field_filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"string_field_filter.js","sources":["../../../../src/components/table_filter_panel/field_filters/string_field_filter.tsx"],"sourcesContent":["import { CrossCircleIcon } from '@tcn/icons/cross_circle_icon.js';\nimport { useSignalValue } from '@tcn/state';\nimport { Button } from '@tcn/ui/actions';\nimport { Input, Option, Select } from '@tcn/ui/inputs';\nimport { Box, HStack, VStack } from '@tcn/ui/stacks';\nimport { Title } from '@tcn/ui/typography';\nimport React from 'react';\nimport { FieldFilterProps } from './field_filter_props.js';\nimport { StringFieldFilterPresenter } from './string_field_filter_presenter.js';\nimport { ComparisonOperator } from '../types.js';\n\nimport { useFieldFilterStrategy } from './use_field_filter_strategy.js';\n\nconst allOperators: ('is' | 'isNot' | 'has')[] = ['is', 'isNot', 'has'];\nconst operatorSymbols: Record<'is' | 'isNot' | 'has', string> = {\n is: '=',\n isNot: '!=',\n has: ':',\n};\nconst operatorLabels: Record<'is' | 'isNot' | 'has', string> = {\n is: 'is',\n isNot: 'is not',\n has: 'has',\n};\n\nexport function StringFieldFilter({ fieldName, label, operators }: FieldFilterProps) {\n const presenter = useFieldFilterStrategy(StringFieldFilterPresenter, fieldName);\n\n const value = useSignalValue(presenter.broadcasts.value);\n const operator = useSignalValue(presenter.broadcasts.operator);\n\n const availableOperators = operators || allOperators;\n\n return (\n <VStack gap=\"4px\">\n <Box width=\"flex\">\n <Title size=\"md\">{label}</Title>\n </Box>\n <HStack width=\"flex\">\n <Select\n value={operator}\n onChange={value => presenter.setOperator(value as ComparisonOperator)}\n width=\"65px\"\n >\n {availableOperators.map(operator => (\n <Option\n key={operator}\n value={operatorSymbols[operator]}\n label={operatorLabels[operator]}\n >\n {operatorLabels[operator]}\n </Option>\n ))}\n </Select>\n <Input\n type=\"text\"\n value={value ?? ''}\n onChange={value => presenter.setValue(value)}\n />\n <Button\n onClick={() => presenter.setValue(null)}\n hierarchy=\"tertiary\"\n utility\n disabled={value == null}\n >\n <CrossCircleIcon />\n </Button>\n </HStack>\n </VStack>\n );\n}\n"],"names":["allOperators","operatorSymbols","operatorLabels","StringFieldFilter","fieldName","label","operators","presenter","useFieldFilterStrategy","StringFieldFilterPresenter","value","useSignalValue","operator","jsxs","VStack","jsx","Box","Title","HStack","Select","Option","Input","Button","CrossCircleIcon"],"mappings":";;;;;;;;;AAaA,MAAMA,IAA2C,CAAC,MAAM,SAAS,KAAK,GAChEC,IAA0D;AAAA,EAC9D,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,KAAK;AACP,GACMC,IAAyD;AAAA,EAC7D,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,KAAK;AACP;AAEO,SAASC,EAAkB,EAAE,WAAAC,GAAW,OAAAC,GAAO,WAAAC,KAA+B;AACnF,QAAMC,IAAYC,EAAuBC,GAA4BL,CAAS,GAExEM,IAAQC,EAAeJ,EAAU,WAAW,KAAK,GACjDK,IAAWD,EAAeJ,EAAU,WAAW,QAAQ;AAI7D,SACE,gBAAAM,EAACC,GAAA,EAAO,KAAI,OACV,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAI,OAAM,QACT,UAAA,gBAAAD,EAACE,KAAM,MAAK,MAAM,aAAM,EAAA,CAC1B;AAAA,IACA,gBAAAJ,EAACK,GAAA,EAAO,OAAM,QACZ,UAAA;AAAA,MAAA,gBAAAH;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,OAAOP;AAAA,UACP,UAAU,CAAAF,MAASH,EAAU,YAAYG,CAA2B;AAAA,UACpE,OAAM;AAAA,UAEL,WAbkBJ,KAAaN,GAaZ,IAAI,CAAAY,MACtB,gBAAAG;AAAA,YAACK;AAAA,YAAA;AAAA,cAEC,OAAOnB,EAAgBW,CAAQ;AAAA,cAC/B,OAAOV,EAAeU,CAAQ;AAAA,cAE7B,YAAeA,CAAQ;AAAA,YAAA;AAAA,YAJnBA;AAAAA,UAAA,CAMR;AAAA,QAAA;AAAA,MAAA;AAAA,MAEH,gBAAAG;AAAA,QAACM;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,OAAOX,KAAS;AAAA,UAChB,UAAU,CAAAA,MAASH,EAAU,SAASG,CAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAE7C,gBAAAK;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,SAAS,MAAMf,EAAU,SAAS,IAAI;AAAA,UACtC,WAAU;AAAA,UACV,SAAO;AAAA,UACP,UAAUG,KAAS;AAAA,UAEnB,4BAACa,GAAA,CAAA,CAAgB;AAAA,QAAA;AAAA,MAAA;AAAA,IACnB,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
1
+ {"version":3,"file":"string_field_filter.js","sources":["../../../../src/components/table_filter_panel/field_filters/string_field_filter.tsx"],"sourcesContent":["import { useSignalValue } from '@tcn/state';\nimport { Input, Option, Select, InputGroup } from '@tcn/ui/inputs';\nimport { FieldFilterProps } from './field_filter_props.js';\nimport { StringFieldFilterPresenter } from './string_field_filter_presenter.js';\nimport { ComparisonOperator } from '../types.js';\n\nimport { useFieldFilterStrategy } from './use_field_filter_strategy.js';\nimport { ClearableField } from './clearable_field.js';\n\nconst allOperators: ('is' | 'isNot' | 'has')[] = ['is', 'isNot', 'has'];\nconst operatorSymbols: Record<'is' | 'isNot' | 'has', string> = {\n is: '=',\n isNot: '!=',\n has: ':',\n};\nconst operatorLabels: Record<'is' | 'isNot' | 'has', string> = {\n is: 'is',\n isNot: 'is not',\n has: 'has',\n};\n\nexport function StringFieldFilter({ fieldName, label, operators }: FieldFilterProps) {\n const presenter = useFieldFilterStrategy(StringFieldFilterPresenter, fieldName);\n\n const value = useSignalValue(presenter.broadcasts.value);\n const operator = useSignalValue(presenter.broadcasts.operator);\n\n const availableOperators = operators || allOperators;\n\n return (\n <ClearableField\n label={label}\n onClear={() => presenter.setValue(null)}\n isClearable={value == null}\n >\n <InputGroup>\n <Select\n value={operator}\n onChange={value => presenter.setOperator(value as ComparisonOperator)}\n width=\"65px\"\n >\n {availableOperators.map(operator => (\n <Option\n key={operator}\n value={operatorSymbols[operator]}\n label={operatorLabels[operator]}\n >\n {operatorLabels[operator]}\n </Option>\n ))}\n </Select>\n <Input\n type=\"text\"\n value={value ?? ''}\n onChange={value => presenter.setValue(value)}\n />\n </InputGroup>\n </ClearableField>\n );\n}\n"],"names":["allOperators","operatorSymbols","operatorLabels","StringFieldFilter","fieldName","label","operators","presenter","useFieldFilterStrategy","StringFieldFilterPresenter","value","useSignalValue","operator","availableOperators","jsx","ClearableField","InputGroup","Select","Option","Input"],"mappings":";;;;;;AASA,MAAMA,IAA2C,CAAC,MAAM,SAAS,KAAK,GAChEC,IAA0D;AAAA,EAC9D,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,KAAK;AACP,GACMC,IAAyD;AAAA,EAC7D,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,KAAK;AACP;AAEO,SAASC,EAAkB,EAAE,WAAAC,GAAW,OAAAC,GAAO,WAAAC,KAA+B;AACnF,QAAMC,IAAYC,EAAuBC,GAA4BL,CAAS,GAExEM,IAAQC,EAAeJ,EAAU,WAAW,KAAK,GACjDK,IAAWD,EAAeJ,EAAU,WAAW,QAAQ,GAEvDM,IAAqBP,KAAaN;AAExC,SACE,gBAAAc;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAAV;AAAA,MACA,SAAS,MAAME,EAAU,SAAS,IAAI;AAAA,MACtC,aAAaG,KAAS;AAAA,MAEtB,4BAACM,GAAA,EACC,UAAA;AAAA,QAAA,gBAAAF;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,OAAOL;AAAA,YACP,UAAU,CAAAF,MAASH,EAAU,YAAYG,CAA2B;AAAA,YACpE,OAAM;AAAA,YAEL,UAAAG,EAAmB,IAAI,CAAAD,MACtB,gBAAAE;AAAA,cAACI;AAAA,cAAA;AAAA,gBAEC,OAAOjB,EAAgBW,CAAQ;AAAA,gBAC/B,OAAOV,EAAeU,CAAQ;AAAA,gBAE7B,YAAeA,CAAQ;AAAA,cAAA;AAAA,cAJnBA;AAAAA,YAAA,CAMR;AAAA,UAAA;AAAA,QAAA;AAAA,QAEH,gBAAAE;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,OAAOT,KAAS;AAAA,YAChB,UAAU,CAAAA,MAASH,EAAU,SAASG,CAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MAC7C,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -1,11 +1,12 @@
1
1
  import { DataSource } from '@tcn/resource-store';
2
- import { default as React, ReactElement } from 'react';
2
+ import { ReactElement } from 'react';
3
3
  import { FieldFilterProps } from './field_filters/field_filter_props.js';
4
4
  import { TableFilterPanelPresenter } from './table_filter_panel_presenter.js';
5
5
  export type TableFilterPanelProps = {
6
6
  children: ReactElement<FieldFilterProps>[] | ReactElement<FieldFilterProps>;
7
7
  dataSource: DataSource<any>;
8
+ onClose?: () => void;
8
9
  };
9
- export declare function TableFilterPanel({ children, dataSource }: TableFilterPanelProps): import("react/jsx-runtime").JSX.Element;
10
- export declare const TableFilterPanelContext: React.Context<TableFilterPanelPresenter<unknown> | null>;
10
+ export declare function TableFilterPanel({ children, dataSource, onClose, }: TableFilterPanelProps): import("react/jsx-runtime").JSX.Element;
11
+ export declare const TableFilterPanelContext: import('react').Context<TableFilterPanelPresenter<unknown> | null>;
11
12
  //# sourceMappingURL=table_filter_panel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"table_filter_panel.d.ts","sourceRoot":"","sources":["../../../src/components/table_filter_panel/table_filter_panel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,KAAK,EAAE,EAAE,YAAY,EAA2B,MAAM,OAAO,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAC5E,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;CAC7B,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,qBAAqB,2CAU/E;AAED,eAAO,MAAM,uBAAuB,0DAEnC,CAAC"}
1
+ {"version":3,"file":"table_filter_panel.d.ts","sourceRoot":"","sources":["../../../src/components/table_filter_panel/table_filter_panel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,YAAY,EAA2B,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAQ9E,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAC5E,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,UAAU,EACV,OAAO,GACR,EAAE,qBAAqB,2CA6BvB;AAED,eAAO,MAAM,uBAAuB,oEAEnC,CAAC"}
@@ -1,16 +1,44 @@
1
- import { jsx as e } from "react/jsx-runtime";
2
- import { VStack as o } from "@tcn/ui/stacks";
3
- import { createContext as l, useState as a } from "react";
4
- import { TableFilterPanelPresenter as i } from "./table_filter_panel_presenter.js";
5
- function f({ children: r, dataSource: t }) {
6
- const [n] = a(() => new i(t));
7
- return /* @__PURE__ */ e(m.Provider, { value: n, children: /* @__PURE__ */ e(o, { gap: "16px", children: r }) });
1
+ import { jsx as e, jsxs as r } from "react/jsx-runtime";
2
+ import { createContext as o, useState as c } from "react";
3
+ import { TableFilterPanelPresenter as s } from "./table_filter_panel_presenter.js";
4
+ import { Panel as b } from "@tcn/ui/surfaces";
5
+ import { Header as p, VBody as f, Section as m } from "@tcn/ui/layouts";
6
+ import { Spacer as d } from "@tcn/ui/stacks";
7
+ import { Button as y } from "@tcn/ui/actions";
8
+ import { CrossIcon as u } from "@tcn/icons/cross_icon.js";
9
+ import '../../table_filter_panel.css';const P = "_table-filter-panel_124e30e", h = "_table-filter-panel-body_c016eb0", F = "_table-filter-panel-section_cfd2eb9", t = { "table-filter-panel": P, "table-filter-panel-body": h, "table-filter-panel-section": F };
10
+ function v({
11
+ children: a,
12
+ dataSource: n,
13
+ onClose: l
14
+ }) {
15
+ const [i] = c(() => new s(n));
16
+ return /* @__PURE__ */ e(_.Provider, { value: i, children: /* @__PURE__ */ r(b, { className: `${t["table-filter-panel"]} tcn-table-filter-panel`, children: [
17
+ /* @__PURE__ */ r(p, { children: [
18
+ "Table Filters",
19
+ /* @__PURE__ */ e(d, {}),
20
+ l && /* @__PURE__ */ e(y, { utility: !0, hierarchy: "tertiary", onClick: l, children: /* @__PURE__ */ e(u, {}) })
21
+ ] }),
22
+ /* @__PURE__ */ e(
23
+ f,
24
+ {
25
+ className: `${t["table-filter-panel-body"]} tcn-table-filter-panel-body`,
26
+ children: /* @__PURE__ */ e(
27
+ m,
28
+ {
29
+ className: `${t["table-filter-panel-section"]} tcn-table-filter-panel-section`,
30
+ children: a
31
+ }
32
+ )
33
+ }
34
+ )
35
+ ] }) });
8
36
  }
9
- const m = l(
37
+ const _ = o(
10
38
  null
11
39
  );
12
40
  export {
13
- f as TableFilterPanel,
14
- m as TableFilterPanelContext
41
+ v as TableFilterPanel,
42
+ _ as TableFilterPanelContext
15
43
  };
16
44
  //# sourceMappingURL=table_filter_panel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table_filter_panel.js","sources":["../../../src/components/table_filter_panel/table_filter_panel.tsx"],"sourcesContent":["import { DataSource } from '@tcn/resource-store';\nimport { VStack } from '@tcn/ui/stacks';\nimport React, { ReactElement, useState, createContext } from 'react';\nimport { FieldFilterProps } from './field_filters/field_filter_props.js';\nimport { TableFilterPanelPresenter } from './table_filter_panel_presenter.js';\n\nexport type TableFilterPanelProps = {\n children: ReactElement<FieldFilterProps>[] | ReactElement<FieldFilterProps>;\n dataSource: DataSource<any>;\n};\n\nexport function TableFilterPanel({ children, dataSource }: TableFilterPanelProps) {\n const [presenter] = useState(() => {\n return new TableFilterPanelPresenter(dataSource);\n });\n\n return (\n <TableFilterPanelContext.Provider value={presenter}>\n <VStack gap=\"16px\">{children}</VStack>\n </TableFilterPanelContext.Provider>\n );\n}\n\nexport const TableFilterPanelContext = createContext<TableFilterPanelPresenter | null>(\n null\n);\n"],"names":["TableFilterPanel","children","dataSource","presenter","useState","TableFilterPanelPresenter","jsx","TableFilterPanelContext","VStack","createContext"],"mappings":";;;;AAWO,SAASA,EAAiB,EAAE,UAAAC,GAAU,YAAAC,KAAqC;AAChF,QAAM,CAACC,CAAS,IAAIC,EAAS,MACpB,IAAIC,EAA0BH,CAAU,CAChD;AAED,SACE,gBAAAI,EAACC,EAAwB,UAAxB,EAAiC,OAAOJ,GACvC,UAAA,gBAAAG,EAACE,GAAA,EAAO,KAAI,QAAQ,UAAAP,EAAA,CAAS,EAAA,CAC/B;AAEJ;AAEO,MAAMM,IAA0BE;AAAA,EACrC;AACF;"}
1
+ {"version":3,"file":"table_filter_panel.js","sources":["../../../src/components/table_filter_panel/table_filter_panel.tsx"],"sourcesContent":["import { DataSource } from '@tcn/resource-store';\nimport { ReactElement, useState, createContext } from 'react';\nimport { FieldFilterProps } from './field_filters/field_filter_props.js';\nimport { TableFilterPanelPresenter } from './table_filter_panel_presenter.js';\nimport { Panel } from '@tcn/ui/surfaces';\nimport { Header, Section, VBody } from '@tcn/ui/layouts';\nimport styles from './table_filter_panel.module.css';\nimport { Spacer } from '@tcn/ui/stacks';\nimport { Button } from '@tcn/ui/actions';\nimport { CrossIcon } from '@tcn/icons/cross_icon.js';\n\nexport type TableFilterPanelProps = {\n children: ReactElement<FieldFilterProps>[] | ReactElement<FieldFilterProps>;\n dataSource: DataSource<any>;\n onClose?: () => void;\n};\n\nexport function TableFilterPanel({\n children,\n dataSource,\n onClose,\n}: TableFilterPanelProps) {\n const [presenter] = useState(() => {\n return new TableFilterPanelPresenter(dataSource);\n });\n\n return (\n <TableFilterPanelContext.Provider value={presenter}>\n <Panel className={`${styles['table-filter-panel']} tcn-table-filter-panel`}>\n <Header>\n Table Filters\n <Spacer />\n {onClose && (\n <Button utility hierarchy=\"tertiary\" onClick={onClose}>\n <CrossIcon />\n </Button>\n )}\n </Header>\n <VBody\n className={`${styles['table-filter-panel-body']} tcn-table-filter-panel-body`}\n >\n <Section\n className={`${styles['table-filter-panel-section']} tcn-table-filter-panel-section`}\n >\n {children}\n </Section>\n </VBody>\n </Panel>\n </TableFilterPanelContext.Provider>\n );\n}\n\nexport const TableFilterPanelContext = createContext<TableFilterPanelPresenter | null>(\n null\n);\n"],"names":["TableFilterPanel","children","dataSource","onClose","presenter","useState","TableFilterPanelPresenter","jsx","TableFilterPanelContext","jsxs","Panel","styles","Header","Spacer","Button","CrossIcon","VBody","Section","createContext"],"mappings":";;;;;;;;;AAiBO,SAASA,EAAiB;AAAA,EAC/B,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC;AACF,GAA0B;AACxB,QAAM,CAACC,CAAS,IAAIC,EAAS,MACpB,IAAIC,EAA0BJ,CAAU,CAChD;AAED,SACE,gBAAAK,EAACC,EAAwB,UAAxB,EAAiC,OAAOJ,GACvC,UAAA,gBAAAK,EAACC,GAAA,EAAM,WAAW,GAAGC,EAAO,oBAAoB,CAAC,2BAC/C,UAAA;AAAA,IAAA,gBAAAF,EAACG,GAAA,EAAO,UAAA;AAAA,MAAA;AAAA,wBAELC,GAAA,EAAO;AAAA,MACPV,KACC,gBAAAI,EAACO,GAAA,EAAO,SAAO,IAAC,WAAU,YAAW,SAASX,GAC5C,UAAA,gBAAAI,EAACQ,GAAA,CAAA,CAAU,EAAA,CACb;AAAA,IAAA,GAEJ;AAAA,IACA,gBAAAR;AAAA,MAACS;AAAA,MAAA;AAAA,QACC,WAAW,GAAGL,EAAO,yBAAyB,CAAC;AAAA,QAE/C,UAAA,gBAAAJ;AAAA,UAACU;AAAA,UAAA;AAAA,YACC,WAAW,GAAGN,EAAO,4BAA4B,CAAC;AAAA,YAEjD,UAAAV;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EACF,EAAA,CACF,EAAA,CACF;AAEJ;AAEO,MAAMO,IAA0BU;AAAA,EACrC;AACF;"}
@@ -0,0 +1 @@
1
+ ._table-filter-panel_124e30e{--material: #fafafa;background:var(--material)}._table-filter-panel-body_c016eb0{padding-block:8px}._table-filter-panel-body_c016eb0 ._table-filter-panel-section_cfd2eb9{gap:8px}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tcn/ui-table",
3
- "version": "2.3.6",
3
+ "version": "2.3.8",
4
4
  "type": "module",
5
5
  "description": "React table component library",
6
6
  "author": "TCN",
@@ -40,10 +40,10 @@
40
40
  "dependencies": {
41
41
  "clarity-pattern-parser": "^11.5.4",
42
42
  "@tcn/aip-160": "1.2.5",
43
+ "@tcn/icons": "2.3.0",
44
+ "@tcn/state": "1.2.0",
43
45
  "@tcn/resource-store": "2.5.1",
44
- "@tcn/icons": "2.2.1",
45
- "@tcn/ui": "0.9.0",
46
- "@tcn/state": "1.2.0"
46
+ "@tcn/ui": "0.11.0"
47
47
  },
48
48
  "peerDependencies": {
49
49
  "react": "^18.2.0",
@@ -15,7 +15,7 @@ import { Title } from '@tcn/ui/typography';
15
15
 
16
16
  import styles from './table.module.css';
17
17
 
18
- import { VPanel } from '@tcn/ui/surfaces';
18
+ import { Panel } from '@tcn/ui/surfaces';
19
19
  import { AuthContext, useToken } from './auth_provider.js';
20
20
 
21
21
  const meta: Meta = {
@@ -94,7 +94,7 @@ function BasicContent() {
94
94
  return (
95
95
  <VStack>
96
96
  <HStack height="auto">{tokenValue === '' ? 'Sign in to load data' : ''}</HStack>
97
- <VPanel>
97
+ <Panel>
98
98
  <HStack className={styles.header} padding="8px" vAlign="center">
99
99
  <Title>Organizations</Title>
100
100
  <Spacer />
@@ -172,7 +172,7 @@ function BasicContent() {
172
172
  <HStack padding="8px">
173
173
  <TablePager dataSource={source} />
174
174
  </HStack>
175
- </VPanel>
175
+ </Panel>
176
176
  </VStack>
177
177
  );
178
178
  }
@@ -8,9 +8,9 @@ import {
8
8
  import { useSignalValue } from '@tcn/state';
9
9
  import { Button } from '@tcn/ui/actions';
10
10
  import { Box, HStack, Spacer } from '@tcn/ui/stacks';
11
- import { VPanel } from '@tcn/ui/surfaces';
11
+ import { Panel } from '@tcn/ui/surfaces';
12
12
  import { Title } from '@tcn/ui/typography';
13
- import React, { useState } from 'react';
13
+ import { useState } from 'react';
14
14
  import { GlobalSearch } from '../components/global_search.js';
15
15
  import { Table } from '../components/table/table.js';
16
16
  import { TableColumn } from '../components/table/table_column.js';
@@ -59,7 +59,7 @@ export function Demo() {
59
59
  const isFiltered = filterString !== '';
60
60
 
61
61
  return (
62
- <VPanel height="100%">
62
+ <Panel height="100%">
63
63
  <HStack padding="8px" vAlign="center">
64
64
  <Title>Cosmerinas</Title>
65
65
  <Spacer />
@@ -132,6 +132,6 @@ export function Demo() {
132
132
  </Box>
133
133
  <TablePager dataSource={source} />
134
134
  </HStack>
135
- </VPanel>
135
+ </Panel>
136
136
  );
137
137
  }