@planningcenter/tapestry 4.9.1-rc.2 → 4.9.1-rc.3

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 (33) hide show
  1. package/dist/components/DataTable/collectionFilter.d.ts +2 -2
  2. package/dist/components/DataTable/collectionFilter.d.ts.map +1 -1
  3. package/dist/components/DataTable/collectionFilter.js +7 -2
  4. package/dist/components/DataTable/collectionFilter.js.map +1 -1
  5. package/dist/components/DataTable/dateFilter.d.ts +42 -16
  6. package/dist/components/DataTable/dateFilter.d.ts.map +1 -1
  7. package/dist/components/DataTable/dateFilter.js +26 -11
  8. package/dist/components/DataTable/dateFilter.js.map +1 -1
  9. package/dist/components/DataTable/dayFilter.d.ts +34 -0
  10. package/dist/components/DataTable/dayFilter.d.ts.map +1 -0
  11. package/dist/components/DataTable/dayFilter.js +108 -0
  12. package/dist/components/DataTable/dayFilter.js.map +1 -0
  13. package/dist/components/DataTable/filters.d.ts +1 -0
  14. package/dist/components/DataTable/filters.d.ts.map +1 -1
  15. package/dist/components/DataTable/numberFilter.d.ts +43 -4
  16. package/dist/components/DataTable/numberFilter.d.ts.map +1 -1
  17. package/dist/components/DataTable/numberFilter.js +24 -4
  18. package/dist/components/DataTable/numberFilter.js.map +1 -1
  19. package/dist/components/DataTable/resolveOperators.d.ts +2 -1
  20. package/dist/components/DataTable/resolveOperators.d.ts.map +1 -1
  21. package/dist/components/DataTable/resolveOperators.js +3 -3
  22. package/dist/components/DataTable/resolveOperators.js.map +1 -1
  23. package/dist/components/DataTable/textFilter.d.ts +2 -2
  24. package/dist/components/DataTable/textFilter.d.ts.map +1 -1
  25. package/dist/components/DataTable/textFilter.js +7 -2
  26. package/dist/components/DataTable/textFilter.js.map +1 -1
  27. package/dist/reactRender.css +1541 -1541
  28. package/dist/reactRender.css.map +1 -1
  29. package/dist/reactRenderLegacy.css +1541 -1541
  30. package/dist/reactRenderLegacy.css.map +1 -1
  31. package/dist/unstable.js +1 -0
  32. package/dist/unstable.js.map +1 -1
  33. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"numberFilter.js","sources":["../../../src/components/DataTable/numberFilter.tsx"],"sourcesContent":["import { Flex } from \"@components/flex\"\nimport { NumberStepper } from \"@components/number-stepper\"\nimport React, { useRef } from \"react\"\n\nimport { ActiveFilterInstance } from \"./ActiveFilterInstance\"\nimport type {\n FilterChange,\n FilterItemConfig,\n FilterNodeItem,\n Operator,\n} from \"./FilterTypes\"\nimport { resolveOperators } from \"./resolveOperators\"\n\nexport type NumberFilterValue = number | [number, number]\n\nexport const GTE = {\n inputType: { type: \"number\" },\n label: \">=\",\n name: \"gte\",\n} as const satisfies Operator\nexport const LTE = {\n inputType: { type: \"number\" },\n label: \"<=\",\n name: \"lte\",\n} as const satisfies Operator\nexport const NUMBER_RANGE = {\n inputType: { type: \"number-range\" },\n label: \"between\",\n name: \"number_range\",\n} as const satisfies Operator\n\nconst NUMBER_OPERATORS = [GTE, LTE, NUMBER_RANGE]\n\nexport type NumberOperatorName = (typeof NUMBER_OPERATORS)[number][\"name\"]\n\nexport function numberFilter({\n excludes,\n includes,\n ...config\n}: FilterItemConfig<NumberOperatorName>): FilterNodeItem {\n const filter: FilterNodeItem = {\n ...config,\n createActiveFilterInstance: (activeFilter, operator) =>\n new NumberActiveFilter(\n filter,\n operator,\n activeFilter.value as NumberFilterValue\n ),\n operators: resolveOperators(NUMBER_OPERATORS, { excludes, includes }),\n }\n return filter\n}\n\nclass NumberActiveFilter extends ActiveFilterInstance<NumberFilterValue> {\n formatValue() {\n return [this.value]\n .flat()\n .filter((value) => value !== undefined)\n .join(\" and \")\n }\n\n renderEditor(onChange: FilterChange) {\n const { inputType, label, name } = this.operator\n const [start, end] = [this.value].flat()\n const { initialValues, labels, toValue } =\n inputType.type === \"number-range\"\n ? {\n initialValues: [start, end],\n labels: [`${label} from`, `${label} to`],\n toValue: (committed: NumberInputValue[]) => committed,\n }\n : {\n initialValues: [start],\n labels: [label],\n toValue: (committed: NumberInputValue[]) => committed[0],\n }\n return (\n <NumberEditor\n key={name}\n labels={labels}\n values={initialValues}\n onCommit={(committed) =>\n onChange(\n { value: toValue(committed) },\n { complete: committed.every((value) => value !== undefined) }\n )\n }\n />\n )\n }\n}\n\ntype NumberInputValue = number | undefined\n\n// React Aria parses typed text in its own blur and Enter handlers, after ours,\n// so parsed values go in a ref and commit from the wrapper's blur (which\n// bubbles after parsing) or Enter's keyup.\nfunction NumberEditor({\n labels,\n onCommit,\n values: initialValues,\n}: {\n labels: string[]\n onCommit: (values: NumberInputValue[]) => void\n values: NumberInputValue[]\n}) {\n const values = useRef(initialValues)\n const lastCommitted = useRef(initialValues)\n const shouldCommitOnKeyUp = useRef(false)\n const commit = () => {\n lastCommitted.current = values.current\n onCommit(values.current)\n }\n const changed = () =>\n values.current.some(\n (value, index) => value !== lastCommitted.current[index]\n )\n return (\n <Flex\n gap={1}\n onBlur={() => {\n if (changed()) commit()\n }}\n >\n {labels.map((label, index) => (\n <React.Fragment key={label}>\n {index > 0 && <span>and</span>}\n <NumberStepper\n // eslint-disable-next-line jsx-a11y/no-autofocus -- the editor only ever renders inside a chip popover that just opened, per ARIA dialog practices\n autoFocus={index === 0}\n defaultValue={initialValues[index]}\n hideLabel\n label={label}\n onChange={(value) => {\n const next = [...values.current]\n next[index] = Number.isNaN(value) ? undefined : value\n values.current = next\n }}\n onKeyDown={(e) => {\n shouldCommitOnKeyUp.current =\n e.key === \"Enter\" && !e.nativeEvent.isComposing\n }}\n onKeyUp={(e) => {\n if (e.key !== \"Enter\" || !shouldCommitOnKeyUp.current) return\n shouldCommitOnKeyUp.current = false\n commit()\n }}\n />\n </React.Fragment>\n ))}\n </Flex>\n )\n}\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"numberFilter.js","sources":["../../../src/components/DataTable/numberFilter.tsx"],"sourcesContent":["import { Flex } from \"@components/flex\"\nimport { NumberStepper } from \"@components/number-stepper\"\nimport React, { useRef } from \"react\"\n\nimport { ActiveFilterInstance } from \"./ActiveFilterInstance\"\nimport type {\n FilterChange,\n FilterItemConfig,\n FilterNodeItem,\n Operator,\n} from \"./FilterTypes\"\nimport { resolveOperators } from \"./resolveOperators\"\n\nexport type NumberFilterValue = number | [number, number]\n\nexport const GTE = {\n inputType: { type: \"number\" },\n label: \">=\",\n name: \"gte\",\n} as const satisfies Operator\nexport const GT = {\n inputType: { type: \"number\" },\n label: \">\",\n name: \"gt\",\n} as const satisfies Operator\nexport const LT = {\n inputType: { type: \"number\" },\n label: \"<\",\n name: \"lt\",\n} as const satisfies Operator\nexport const EQ = {\n inputType: { type: \"number\" },\n label: \"is\",\n name: \"eq\",\n} as const satisfies Operator\nexport const LTE = {\n inputType: { type: \"number\" },\n label: \"<=\",\n name: \"lte\",\n} as const satisfies Operator\nexport const NUMBER_RANGE = {\n inputType: { type: \"number-range\" },\n label: \"between\",\n name: \"between\",\n} as const satisfies Operator\n\nconst ALL_NUMBER_OPERATORS = [EQ, GT, GTE, LT, LTE, NUMBER_RANGE]\nconst DEFAULT_NUMBER_OPERATORS = [GTE, LTE, NUMBER_RANGE]\n\nexport type NumberOperatorName = (typeof ALL_NUMBER_OPERATORS)[number][\"name\"]\n\nexport function numberFilter({\n excludes,\n includes,\n ...config\n}: FilterItemConfig<NumberOperatorName>): FilterNodeItem {\n const filter: FilterNodeItem = {\n ...config,\n createActiveFilterInstance: (activeFilter, operator) =>\n new NumberActiveFilter(\n filter,\n operator,\n activeFilter.value as NumberFilterValue\n ),\n operators: resolveOperators(ALL_NUMBER_OPERATORS, {\n default: DEFAULT_NUMBER_OPERATORS,\n excludes,\n includes,\n }),\n }\n return filter\n}\n\nclass NumberActiveFilter extends ActiveFilterInstance<NumberFilterValue> {\n formatValue() {\n return [this.value]\n .flat()\n .filter((value) => value !== undefined)\n .join(\" and \")\n }\n\n renderEditor(onChange: FilterChange) {\n const { inputType, label, name } = this.operator\n const [start, end] = [this.value].flat()\n const { initialValues, labels, toValue } =\n inputType.type === \"number-range\"\n ? {\n initialValues: [start, end],\n labels: [`${label} from`, `${label} to`],\n toValue: (committed: NumberInputValue[]) => committed,\n }\n : {\n initialValues: [start],\n labels: [label],\n toValue: (committed: NumberInputValue[]) => committed[0],\n }\n return (\n <NumberEditor\n key={name}\n labels={labels}\n values={initialValues}\n onCommit={(committed) =>\n onChange(\n { value: toValue(committed) },\n { complete: committed.every((value) => value !== undefined) }\n )\n }\n />\n )\n }\n}\n\ntype NumberInputValue = number | undefined\n\n// React Aria parses typed text in its own blur and Enter handlers, after ours,\n// so parsed values go in a ref and commit from the wrapper's blur (which\n// bubbles after parsing) or Enter's keyup.\nfunction NumberEditor({\n labels,\n onCommit,\n values: initialValues,\n}: {\n labels: string[]\n onCommit: (values: NumberInputValue[]) => void\n values: NumberInputValue[]\n}) {\n const values = useRef(initialValues)\n const lastCommitted = useRef(initialValues)\n const shouldCommitOnKeyUp = useRef(false)\n const commit = () => {\n lastCommitted.current = values.current\n onCommit(values.current)\n }\n const changed = () =>\n values.current.some(\n (value, index) => value !== lastCommitted.current[index]\n )\n return (\n <Flex\n gap={1}\n onBlur={() => {\n if (changed()) commit()\n }}\n >\n {labels.map((label, index) => (\n <React.Fragment key={label}>\n {index > 0 && <span>and</span>}\n <NumberStepper\n // eslint-disable-next-line jsx-a11y/no-autofocus -- the editor only ever renders inside a chip popover that just opened, per ARIA dialog practices\n autoFocus={index === 0}\n defaultValue={initialValues[index]}\n hideLabel\n label={label}\n onChange={(value) => {\n const next = [...values.current]\n next[index] = Number.isNaN(value) ? undefined : value\n values.current = next\n }}\n onKeyDown={(e) => {\n shouldCommitOnKeyUp.current =\n e.key === \"Enter\" && !e.nativeEvent.isComposing\n }}\n onKeyUp={(e) => {\n if (e.key !== \"Enter\" || !shouldCommitOnKeyUp.current) return\n shouldCommitOnKeyUp.current = false\n commit()\n }}\n />\n </React.Fragment>\n ))}\n </Flex>\n )\n}\n"],"names":["React"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { Operator } from "./FilterTypes";
2
2
  /** `includes` keeps only the named operators, in the order given; `excludes` drops them. */
3
- export declare function resolveOperators<T extends Operator>(operators: readonly T[], { excludes, includes, }: {
3
+ export declare function resolveOperators<T extends Operator>(operators: readonly T[], { default: defaultOperators, excludes, includes, }: {
4
+ default: readonly T[];
4
5
  excludes?: readonly T["name"][];
5
6
  includes?: readonly T["name"][];
6
7
  }): Operator[];
@@ -1 +1 @@
1
- {"version":3,"file":"resolveOperators.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/resolveOperators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,QAAQ,EACjD,SAAS,EAAE,SAAS,CAAC,EAAE,EACvB,EACE,QAAQ,EACR,QAAQ,GACT,EAAE;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,CAAA;CAAE,GACtE,QAAQ,EAAE,CAOZ"}
1
+ {"version":3,"file":"resolveOperators.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/resolveOperators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,QAAQ,EACjD,SAAS,EAAE,SAAS,CAAC,EAAE,EACvB,EACE,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,SAAS,CAAC,EAAE,CAAA;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,CAAA;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,CAAA;CAChC,GACA,QAAQ,EAAE,CAQZ"}
@@ -1,10 +1,10 @@
1
1
  /** `includes` keeps only the named operators, in the order given; `excludes` drops them. */
2
- function resolveOperators(operators, { excludes, includes, }) {
2
+ function resolveOperators(operators, { default: defaultOperators, excludes, includes, }) {
3
3
  if (includes)
4
4
  return includes.flatMap((name) => operators.find((op) => op.name === name) ?? []);
5
5
  if (excludes)
6
- return operators.filter((op) => !excludes.includes(op.name));
7
- return [...operators];
6
+ return defaultOperators.filter((op) => !excludes.includes(op.name));
7
+ return [...defaultOperators];
8
8
  }
9
9
 
10
10
  export { resolveOperators };
@@ -1 +1 @@
1
- {"version":3,"file":"resolveOperators.js","sources":["../../../src/components/DataTable/resolveOperators.ts"],"sourcesContent":["import type { Operator } from \"./FilterTypes\"\n\n/** `includes` keeps only the named operators, in the order given; `excludes` drops them. */\nexport function resolveOperators<T extends Operator>(\n operators: readonly T[],\n {\n excludes,\n includes,\n }: { excludes?: readonly T[\"name\"][]; includes?: readonly T[\"name\"][] }\n): Operator[] {\n if (includes)\n return includes.flatMap(\n (name) => operators.find((op) => op.name === name) ?? []\n )\n if (excludes) return operators.filter((op) => !excludes.includes(op.name))\n return [...operators]\n}\n"],"names":[],"mappings":"AAEA;AACM,SAAU,gBAAgB,CAC9B,SAAuB,EACvB,EACE,QAAQ,EACR,QAAQ,GAC6D,EAAA;AAEvE,IAAA,IAAI,QAAQ;QACV,OAAO,QAAQ,CAAC,OAAO,CACrB,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CACzD;AACH,IAAA,IAAI,QAAQ;AAAE,QAAA,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAC1E,IAAA,OAAO,CAAC,GAAG,SAAS,CAAC;AACvB;;;;"}
1
+ {"version":3,"file":"resolveOperators.js","sources":["../../../src/components/DataTable/resolveOperators.ts"],"sourcesContent":["import type { Operator } from \"./FilterTypes\"\n\n/** `includes` keeps only the named operators, in the order given; `excludes` drops them. */\nexport function resolveOperators<T extends Operator>(\n operators: readonly T[],\n {\n default: defaultOperators,\n excludes,\n includes,\n }: {\n default: readonly T[]\n excludes?: readonly T[\"name\"][]\n includes?: readonly T[\"name\"][]\n }\n): Operator[] {\n if (includes)\n return includes.flatMap(\n (name) => operators.find((op) => op.name === name) ?? []\n )\n if (excludes)\n return defaultOperators.filter((op) => !excludes.includes(op.name))\n return [...defaultOperators]\n}\n"],"names":[],"mappings":"AAEA;AACM,SAAU,gBAAgB,CAC9B,SAAuB,EACvB,EACE,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EACR,QAAQ,GAKT,EAAA;AAED,IAAA,IAAI,QAAQ;QACV,OAAO,QAAQ,CAAC,OAAO,CACrB,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CACzD;AACH,IAAA,IAAI,QAAQ;AACV,QAAA,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACrE,IAAA,OAAO,CAAC,GAAG,gBAAgB,CAAC;AAC9B;;;;"}
@@ -27,7 +27,7 @@ export declare const STARTS_WITH: {
27
27
  readonly label: "starts with";
28
28
  readonly name: "starts_with";
29
29
  };
30
- declare const TEXT_OPERATORS: ({
30
+ declare const ALL_TEXT_OPERATORS: ({
31
31
  readonly inputType: {
32
32
  readonly type: "text";
33
33
  };
@@ -52,7 +52,7 @@ declare const TEXT_OPERATORS: ({
52
52
  readonly label: "starts with";
53
53
  readonly name: "starts_with";
54
54
  })[];
55
- export type TextOperatorName = (typeof TEXT_OPERATORS)[number]["name"];
55
+ export type TextOperatorName = (typeof ALL_TEXT_OPERATORS)[number]["name"];
56
56
  export declare function textFilter({ excludes, includes, ...config }: FilterItemConfig<TextOperatorName>): FilterNodeItem;
57
57
  export {};
58
58
  //# sourceMappingURL=textFilter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"textFilter.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/textFilter.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,gBAAgB,EAChB,cAAc,EAEf,MAAM,eAAe,CAAA;AAItB,eAAO,MAAM,EAAE;;;;;;CAIc,CAAA;AAC7B,eAAO,MAAM,QAAQ;;;;;;CAIQ,CAAA;AAC7B,eAAO,MAAM,GAAG;;;;;;CAIa,CAAA;AAC7B,eAAO,MAAM,WAAW;;;;;;CAIK,CAAA;AAE7B,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;IAAmC,CAAA;AAEvD,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA;AAEtE,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,QAAQ,EACR,GAAG,MAAM,EACV,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAQrD"}
1
+ {"version":3,"file":"textFilter.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/textFilter.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,gBAAgB,EAChB,cAAc,EAEf,MAAM,eAAe,CAAA;AAItB,eAAO,MAAM,EAAE;;;;;;CAIc,CAAA;AAC7B,eAAO,MAAM,QAAQ;;;;;;CAIQ,CAAA;AAC7B,eAAO,MAAM,GAAG;;;;;;CAIa,CAAA;AAC7B,eAAO,MAAM,WAAW;;;;;;CAIK,CAAA;AAE7B,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;IAAmC,CAAA;AAG3D,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA;AAE1E,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,QAAQ,EACR,GAAG,MAAM,EACV,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAYrD"}
@@ -24,12 +24,17 @@ const STARTS_WITH = {
24
24
  label: "starts with",
25
25
  name: "starts_with",
26
26
  };
27
- const TEXT_OPERATORS = [EQ, CONTAINS, NOT, STARTS_WITH];
27
+ const ALL_TEXT_OPERATORS = [EQ, CONTAINS, NOT, STARTS_WITH];
28
+ const DEFAULT_TEXT_OPERATORS = [CONTAINS];
28
29
  function textFilter({ excludes, includes, ...config }) {
29
30
  const filter = {
30
31
  ...config,
31
32
  createActiveFilterInstance: (activeFilter, operator) => new TextActiveFilter(filter, operator, activeFilter.value),
32
- operators: resolveOperators(TEXT_OPERATORS, { excludes, includes }),
33
+ operators: resolveOperators(ALL_TEXT_OPERATORS, {
34
+ default: DEFAULT_TEXT_OPERATORS,
35
+ excludes,
36
+ includes,
37
+ }),
33
38
  };
34
39
  return filter;
35
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"textFilter.js","sources":["../../../src/components/DataTable/textFilter.tsx"],"sourcesContent":["import { Input } from \"@components/input\"\nimport React, { useRef, useState } from \"react\"\n\nimport { ActiveFilterInstance } from \"./ActiveFilterInstance\"\nimport type {\n FilterChange,\n FilterItemConfig,\n FilterNodeItem,\n Operator,\n} from \"./FilterTypes\"\nimport { resolveOperators } from \"./resolveOperators\"\nimport { isEmptyValue } from \"./utils\"\n\nexport const EQ = {\n inputType: { type: \"text\" },\n label: \"is\",\n name: \"eq\",\n} as const satisfies Operator\nexport const CONTAINS = {\n inputType: { type: \"text\" },\n label: \"contains\",\n name: \"contains\",\n} as const satisfies Operator\nexport const NOT = {\n inputType: { type: \"text\" },\n label: \"is not\",\n name: \"not\",\n} as const satisfies Operator\nexport const STARTS_WITH = {\n inputType: { type: \"text\" },\n label: \"starts with\",\n name: \"starts_with\",\n} as const satisfies Operator\n\nconst TEXT_OPERATORS = [EQ, CONTAINS, NOT, STARTS_WITH]\n\nexport type TextOperatorName = (typeof TEXT_OPERATORS)[number][\"name\"]\n\nexport function textFilter({\n excludes,\n includes,\n ...config\n}: FilterItemConfig<TextOperatorName>): FilterNodeItem {\n const filter: FilterNodeItem = {\n ...config,\n createActiveFilterInstance: (activeFilter, operator) =>\n new TextActiveFilter(filter, operator, activeFilter.value as string),\n operators: resolveOperators(TEXT_OPERATORS, { excludes, includes }),\n }\n return filter\n}\n\nclass TextActiveFilter extends ActiveFilterInstance<string> {\n formatValue() {\n return this.value\n }\n\n renderEditor(onChange: FilterChange) {\n return (\n <TextEditor\n label={this.operator.label}\n value={this.value}\n onCommit={(value) =>\n onChange({ value }, { complete: !isEmptyValue(value) })\n }\n />\n )\n }\n}\n\nfunction TextEditor({\n label,\n onCommit,\n value: initialValue,\n}: {\n label: string\n onCommit: (value: string) => void\n value: string\n}) {\n const [value, setValue] = useState(initialValue)\n const lastCommitted = useRef(initialValue)\n const commit = () => {\n lastCommitted.current = value\n onCommit(value)\n }\n return (\n <Input\n // eslint-disable-next-line jsx-a11y/no-autofocus -- the editor only ever renders inside a chip popover that just opened, per ARIA dialog practices\n autoFocus\n hideLabel\n label={label}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onBlur={() => {\n if (value !== lastCommitted.current) commit()\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && !e.repeat && !e.nativeEvent.isComposing) {\n commit()\n }\n }}\n />\n )\n}\n"],"names":["React"],"mappings":";;;;;;AAaO,MAAM,EAAE,GAAG;AAChB,IAAA,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;AAC3B,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,IAAI,EAAE,IAAI;;AAEL,MAAM,QAAQ,GAAG;AACtB,IAAA,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;AAC3B,IAAA,KAAK,EAAE,UAAU;AACjB,IAAA,IAAI,EAAE,UAAU;;AAEX,MAAM,GAAG,GAAG;AACjB,IAAA,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;AAC3B,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,IAAI,EAAE,KAAK;;AAEN,MAAM,WAAW,GAAG;AACzB,IAAA,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;AAC3B,IAAA,KAAK,EAAE,aAAa;AACpB,IAAA,IAAI,EAAE,aAAa;;AAGrB,MAAM,cAAc,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,CAAC;AAIjD,SAAU,UAAU,CAAC,EACzB,QAAQ,EACR,QAAQ,EACR,GAAG,MAAM,EAC0B,EAAA;AACnC,IAAA,MAAM,MAAM,GAAmB;AAC7B,QAAA,GAAG,MAAM;AACT,QAAA,0BAA0B,EAAE,CAAC,YAAY,EAAE,QAAQ,KACjD,IAAI,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,KAAe,CAAC;QACtE,SAAS,EAAE,gBAAgB,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;KACpE;AACD,IAAA,OAAO,MAAM;AACf;AAEA,MAAM,gBAAiB,SAAQ,oBAA4B,CAAA;IACzD,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,YAAY,CAAC,QAAsB,EAAA;AACjC,QAAA,QACEA,cAAA,CAAA,aAAA,CAAC,UAAU,IACT,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,QAAQ,EAAE,CAAC,KAAK,KACd,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,EAAA,CAEzD;IAEN;AACD;AAED,SAAS,UAAU,CAAC,EAClB,KAAK,EACL,QAAQ,EACR,KAAK,EAAE,YAAY,GAKpB,EAAA;IACC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC;AAChD,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAK;AAClB,QAAA,aAAa,CAAC,OAAO,GAAG,KAAK;QAC7B,QAAQ,CAAC,KAAK,CAAC;AACjB,IAAA,CAAC;IACD,QACEA,6BAAC;;;;AAEC,QAAA,SAAS,EAAA,IAAA,EACT,SAAS,EAAA,IAAA,EACT,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,MAAM,EAAE,MAAK;AACX,YAAA,IAAI,KAAK,KAAK,aAAa,CAAC,OAAO;AAAE,gBAAA,MAAM,EAAE;AAC/C,QAAA,CAAC,EACD,SAAS,EAAE,CAAC,CAAC,KAAI;AACf,YAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE;AAChE,gBAAA,MAAM,EAAE;YACV;QACF,CAAC,EAAA,CACD;AAEN;;;;"}
1
+ {"version":3,"file":"textFilter.js","sources":["../../../src/components/DataTable/textFilter.tsx"],"sourcesContent":["import { Input } from \"@components/input\"\nimport React, { useRef, useState } from \"react\"\n\nimport { ActiveFilterInstance } from \"./ActiveFilterInstance\"\nimport type {\n FilterChange,\n FilterItemConfig,\n FilterNodeItem,\n Operator,\n} from \"./FilterTypes\"\nimport { resolveOperators } from \"./resolveOperators\"\nimport { isEmptyValue } from \"./utils\"\n\nexport const EQ = {\n inputType: { type: \"text\" },\n label: \"is\",\n name: \"eq\",\n} as const satisfies Operator\nexport const CONTAINS = {\n inputType: { type: \"text\" },\n label: \"contains\",\n name: \"contains\",\n} as const satisfies Operator\nexport const NOT = {\n inputType: { type: \"text\" },\n label: \"is not\",\n name: \"not\",\n} as const satisfies Operator\nexport const STARTS_WITH = {\n inputType: { type: \"text\" },\n label: \"starts with\",\n name: \"starts_with\",\n} as const satisfies Operator\n\nconst ALL_TEXT_OPERATORS = [EQ, CONTAINS, NOT, STARTS_WITH]\nconst DEFAULT_TEXT_OPERATORS = [CONTAINS]\n\nexport type TextOperatorName = (typeof ALL_TEXT_OPERATORS)[number][\"name\"]\n\nexport function textFilter({\n excludes,\n includes,\n ...config\n}: FilterItemConfig<TextOperatorName>): FilterNodeItem {\n const filter: FilterNodeItem = {\n ...config,\n createActiveFilterInstance: (activeFilter, operator) =>\n new TextActiveFilter(filter, operator, activeFilter.value as string),\n operators: resolveOperators(ALL_TEXT_OPERATORS, {\n default: DEFAULT_TEXT_OPERATORS,\n excludes,\n includes,\n }),\n }\n return filter\n}\n\nclass TextActiveFilter extends ActiveFilterInstance<string> {\n formatValue() {\n return this.value\n }\n\n renderEditor(onChange: FilterChange) {\n return (\n <TextEditor\n label={this.operator.label}\n value={this.value}\n onCommit={(value) =>\n onChange({ value }, { complete: !isEmptyValue(value) })\n }\n />\n )\n }\n}\n\nfunction TextEditor({\n label,\n onCommit,\n value: initialValue,\n}: {\n label: string\n onCommit: (value: string) => void\n value: string\n}) {\n const [value, setValue] = useState(initialValue)\n const lastCommitted = useRef(initialValue)\n const commit = () => {\n lastCommitted.current = value\n onCommit(value)\n }\n return (\n <Input\n // eslint-disable-next-line jsx-a11y/no-autofocus -- the editor only ever renders inside a chip popover that just opened, per ARIA dialog practices\n autoFocus\n hideLabel\n label={label}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onBlur={() => {\n if (value !== lastCommitted.current) commit()\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && !e.repeat && !e.nativeEvent.isComposing) {\n commit()\n }\n }}\n />\n )\n}\n"],"names":["React"],"mappings":"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"}