@servicetitan/form-state 22.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.d.ts +12 -0
  3. package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.d.ts.map +1 -0
  4. package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.js +89 -0
  5. package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.js.map +1 -0
  6. package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.stories.d.ts +11 -0
  7. package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.stories.d.ts.map +1 -0
  8. package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.stories.js +55 -0
  9. package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.stories.js.map +1 -0
  10. package/dist/async-lazy-dropdown-state/index.d.ts +3 -0
  11. package/dist/async-lazy-dropdown-state/index.d.ts.map +1 -0
  12. package/dist/async-lazy-dropdown-state/index.js +3 -0
  13. package/dist/async-lazy-dropdown-state/index.js.map +1 -0
  14. package/dist/async-lazy-dropdown-state/use-async-lazy-dropdown-state.d.ts +5 -0
  15. package/dist/async-lazy-dropdown-state/use-async-lazy-dropdown-state.d.ts.map +1 -0
  16. package/dist/async-lazy-dropdown-state/use-async-lazy-dropdown-state.js +26 -0
  17. package/dist/async-lazy-dropdown-state/use-async-lazy-dropdown-state.js.map +1 -0
  18. package/dist/date-range.d.ts +5 -0
  19. package/dist/date-range.d.ts.map +1 -0
  20. package/dist/date-range.js +2 -0
  21. package/dist/date-range.js.map +1 -0
  22. package/dist/demo/dropdown-state.d.ts +3 -0
  23. package/dist/demo/dropdown-state.d.ts.map +1 -0
  24. package/dist/demo/dropdown-state.js +133 -0
  25. package/dist/demo/dropdown-state.js.map +1 -0
  26. package/dist/demo/index.d.ts +2 -0
  27. package/dist/demo/index.d.ts.map +1 -0
  28. package/dist/demo/index.js +2 -0
  29. package/dist/demo/index.js.map +1 -0
  30. package/dist/dropdown-state.d.ts +42 -0
  31. package/dist/dropdown-state.d.ts.map +1 -0
  32. package/dist/dropdown-state.js +314 -0
  33. package/dist/dropdown-state.js.map +1 -0
  34. package/dist/form-helpers.d.ts +70 -0
  35. package/dist/form-helpers.d.ts.map +1 -0
  36. package/dist/form-helpers.js +232 -0
  37. package/dist/form-helpers.js.map +1 -0
  38. package/dist/form-validators.d.ts +30 -0
  39. package/dist/form-validators.d.ts.map +1 -0
  40. package/dist/form-validators.js +56 -0
  41. package/dist/form-validators.js.map +1 -0
  42. package/dist/index.d.ts +6 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +6 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/persistent-form-state/domain-storage.d.ts +14 -0
  47. package/dist/persistent-form-state/domain-storage.d.ts.map +1 -0
  48. package/dist/persistent-form-state/domain-storage.js +42 -0
  49. package/dist/persistent-form-state/domain-storage.js.map +1 -0
  50. package/dist/persistent-form-state/in-memory-storage.d.ts +13 -0
  51. package/dist/persistent-form-state/in-memory-storage.d.ts.map +1 -0
  52. package/dist/persistent-form-state/in-memory-storage.js +30 -0
  53. package/dist/persistent-form-state/in-memory-storage.js.map +1 -0
  54. package/dist/persistent-form-state/index.d.ts +2 -0
  55. package/dist/persistent-form-state/index.d.ts.map +1 -0
  56. package/dist/persistent-form-state/index.js +2 -0
  57. package/dist/persistent-form-state/index.js.map +1 -0
  58. package/dist/persistent-form-state/persistent-form-state.d.ts +18 -0
  59. package/dist/persistent-form-state/persistent-form-state.d.ts.map +1 -0
  60. package/dist/persistent-form-state/persistent-form-state.js +93 -0
  61. package/dist/persistent-form-state/persistent-form-state.js.map +1 -0
  62. package/package.json +45 -0
  63. package/src/__tests__/__snapshots__/form-helpers.test.ts.snap +37 -0
  64. package/src/__tests__/form-helpers.test.ts +229 -0
  65. package/src/__tests__/form-validators.test.ts +55 -0
  66. package/src/async-lazy-dropdown-state/async-lazy-dropdown-state.stories.tsx +66 -0
  67. package/src/async-lazy-dropdown-state/async-lazy-dropdown-state.ts +77 -0
  68. package/src/async-lazy-dropdown-state/index.ts +2 -0
  69. package/src/async-lazy-dropdown-state/use-async-lazy-dropdown-state.ts +38 -0
  70. package/src/date-range.ts +4 -0
  71. package/src/demo/dropdown-state.tsx +233 -0
  72. package/src/demo/index.ts +1 -0
  73. package/src/dropdown-state.ts +205 -0
  74. package/src/form-helpers.ts +259 -0
  75. package/src/form-validators.ts +106 -0
  76. package/src/index.ts +5 -0
  77. package/src/persistent-form-state/__tests__/domain-storage.test.ts +81 -0
  78. package/src/persistent-form-state/domain-storage.ts +43 -0
  79. package/src/persistent-form-state/in-memory-storage.ts +32 -0
  80. package/src/persistent-form-state/index.ts +1 -0
  81. package/src/persistent-form-state/persistent-form-state.ts +68 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,12 @@
1
+ # v22.4.0 (Tue Jul 12 2022)
2
+
3
+ #### 🚀 Enhancement
4
+
5
+ - [FAR-975] move form state helpers to separate package [#123](https://github.com/servicetitan/anvil-uikit-contrib/pull/123) ([@karpoff-titan](https://github.com/karpoff-titan))
6
+
7
+ #### Authors: 1
8
+
9
+ - Anton Karpov ([@karpoff-titan](https://github.com/karpoff-titan))
10
+
11
+ ---
12
+
@@ -0,0 +1,12 @@
1
+ import { AnvilSelectOptionsProps, AnvilSelectPropsStrict } from '@servicetitan/design-system';
2
+ import { DropdownOption, DropdownState } from '../dropdown-state';
3
+ export declare type DataFetcher = (searchQuery: string) => Promise<DropdownOption<any>[]>;
4
+ export declare class AsyncLazyDropdownState<T extends DropdownOption<any>> extends DropdownState<T> {
5
+ private arrayValue;
6
+ constructor(dataFetcher: DataFetcher);
7
+ get optionsWithValue(): AnvilSelectOptionsProps[];
8
+ onChange: (value: AnvilSelectPropsStrict['value']) => void;
9
+ setDataFetcher(dataFetcher: DataFetcher): void;
10
+ private getOptionsWithValue;
11
+ }
12
+ //# sourceMappingURL=async-lazy-dropdown-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-lazy-dropdown-state.d.ts","sourceRoot":"","sources":["../../src/async-lazy-dropdown-state/async-lazy-dropdown-state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElE,oBAAY,WAAW,GAAG,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAElF,qBAAa,sBAAsB,CAAC,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACvF,OAAO,CAAC,UAAU,CAAiC;gBAEvC,WAAW,EAAE,WAAW;IAkBpC,IACI,gBAAgB,8BAEnB;IAED,QAAQ,UAAW,sBAAsB,CAAC,OAAO,CAAC,UAIhD;IAEF,cAAc,CAAC,WAAW,EAAE,WAAW;IAevC,OAAO,CAAC,mBAAmB,CAqBzB;CACL"}
@@ -0,0 +1,89 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
11
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
12
+ return new (P || (P = Promise))(function (resolve, reject) {
13
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
15
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
16
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
17
+ });
18
+ };
19
+ import { computed, makeObservable } from 'mobx';
20
+ import { AsyncDataSource } from '@servicetitan/data-query';
21
+ import { DropdownState } from '../dropdown-state';
22
+ export class AsyncLazyDropdownState extends DropdownState {
23
+ constructor(dataFetcher) {
24
+ super({
25
+ dataSource: new AsyncDataSource({
26
+ get: () => __awaiter(this, void 0, void 0, function* () {
27
+ const result = yield dataFetcher(this.search);
28
+ return {
29
+ data: result,
30
+ total: result.length,
31
+ };
32
+ }),
33
+ }),
34
+ lazy: true,
35
+ });
36
+ Object.defineProperty(this, "arrayValue", {
37
+ enumerable: true,
38
+ configurable: true,
39
+ writable: true,
40
+ value: []
41
+ });
42
+ Object.defineProperty(this, "onChange", {
43
+ enumerable: true,
44
+ configurable: true,
45
+ writable: true,
46
+ value: (value) => {
47
+ const isEmptyValue = value === undefined || (Array.isArray(value) && value.length === 0);
48
+ this.arrayValue = isEmptyValue ? [] : !Array.isArray(value) ? [value] : value;
49
+ }
50
+ });
51
+ Object.defineProperty(this, "getOptionsWithValue", {
52
+ enumerable: true,
53
+ configurable: true,
54
+ writable: true,
55
+ value: () => {
56
+ const options = [...this.options];
57
+ if (!this.search) {
58
+ const values = this.arrayValue;
59
+ const selectedOptions = options.filter(option => !!values.find(value => value.value === option.value));
60
+ const unselectedOptions = options.filter(option => !values.find(value => value.value === option.value));
61
+ const missingSelectedOptions = values.filter(value => !options.some(option => option.value === value.value));
62
+ return [...missingSelectedOptions, ...selectedOptions, ...unselectedOptions];
63
+ }
64
+ return options;
65
+ }
66
+ });
67
+ makeObservable(this);
68
+ }
69
+ get optionsWithValue() {
70
+ return this.getOptionsWithValue();
71
+ }
72
+ setDataFetcher(dataFetcher) {
73
+ this.setDataSource(new AsyncDataSource({
74
+ get: () => __awaiter(this, void 0, void 0, function* () {
75
+ const result = yield dataFetcher(this.search);
76
+ return {
77
+ data: result,
78
+ total: result.length,
79
+ };
80
+ }),
81
+ }));
82
+ }
83
+ }
84
+ __decorate([
85
+ computed,
86
+ __metadata("design:type", Object),
87
+ __metadata("design:paramtypes", [])
88
+ ], AsyncLazyDropdownState.prototype, "optionsWithValue", null);
89
+ //# sourceMappingURL=async-lazy-dropdown-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-lazy-dropdown-state.js","sourceRoot":"","sources":["../../src/async-lazy-dropdown-state/async-lazy-dropdown-state.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAkB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIlE,MAAM,OAAO,sBAAsD,SAAQ,aAAgB;IAGvF,YAAY,WAAwB;QAChC,KAAK,CAAC;YACF,UAAU,EAAE,IAAI,eAAe,CAAC;gBAC5B,GAAG,EAAE,GAAS,EAAE;oBACZ,MAAM,MAAM,GAAU,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAErD,OAAO;wBACH,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,MAAM,CAAC,MAAM;qBACvB,CAAC;gBACN,CAAC,CAAA;aACJ,CAAC;YACF,IAAI,EAAE,IAAI;SACb,CAAC,CAAC;QAfP;;;;mBAAgD,EAAE;WAAC;QAyBnD;;;;mBAAW,CAAC,KAAsC,EAAE,EAAE;gBAClD,MAAM,YAAY,GAAG,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;gBAEzF,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACnF,CAAC;WAAC;QAiBF;;;;mBAA8B,GAAG,EAAE;gBAC/B,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;gBAElC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBACd,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;oBAE/B,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAClC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CACjE,CAAC;oBAEF,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CACpC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAChE,CAAC;oBAEF,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CACxC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CACjE,CAAC;oBACF,OAAO,CAAC,GAAG,sBAAsB,EAAE,GAAG,eAAe,EAAE,GAAG,iBAAiB,CAAC,CAAC;iBAChF;gBAED,OAAO,OAAO,CAAC;YACnB,CAAC;WAAC;QAlDE,cAAc,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAGD,IAAI,gBAAgB;QAChB,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;IACtC,CAAC;IAQD,cAAc,CAAC,WAAwB;QACnC,IAAI,CAAC,aAAa,CACd,IAAI,eAAe,CAAC;YAChB,GAAG,EAAE,GAAS,EAAE;gBACZ,MAAM,MAAM,GAAU,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAErD,OAAO;oBACH,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,MAAM,CAAC,MAAM;iBACvB,CAAC;YACN,CAAC,CAAA;SACJ,CAAC,CACL,CAAC;IACN,CAAC;CAwBJ;AA/CG;IADC,QAAQ;;;8DAGR"}
@@ -0,0 +1,11 @@
1
+ /// <reference types="react" />
2
+ import { AnvilSelectOptionsProps } from '@servicetitan/design-system';
3
+ import { DropdownOption } from '../dropdown-state';
4
+ declare const _default: {
5
+ title: string;
6
+ component: (value: AnvilSelectOptionsProps | AnvilSelectOptionsProps[] | undefined, dataFetcher: import("./async-lazy-dropdown-state").DataFetcher) => [import("./async-lazy-dropdown-state").AsyncLazyDropdownState<DropdownOption<any>>, (open: boolean) => void];
7
+ parameters: {};
8
+ };
9
+ export default _default;
10
+ export declare const basic: () => JSX.Element;
11
+ //# sourceMappingURL=async-lazy-dropdown-state.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-lazy-dropdown-state.stories.d.ts","sourceRoot":"","sources":["../../src/async-lazy-dropdown-state/async-lazy-dropdown-state.stories.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,uBAAuB,EAAQ,MAAM,6BAA6B,CAAC;AAE5E,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;;;;;;AAEnD,wBAIE;AAuDF,eAAO,MAAM,KAAK,mBAAyB,CAAC"}
@@ -0,0 +1,55 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ import { useState } from 'react';
12
+ import { useAsyncLazyDropdownState } from './use-async-lazy-dropdown-state';
13
+ import { Form } from '@servicetitan/design-system';
14
+ import { observer } from 'mobx-react';
15
+ export default {
16
+ title: 'Marketing Form/Async Select Helper',
17
+ component: useAsyncLazyDropdownState,
18
+ parameters: {},
19
+ };
20
+ const dataFetcher = (searchString) => __awaiter(void 0, void 0, void 0, function* () {
21
+ const options = [
22
+ { value: 1, text: 'Australia' },
23
+ { value: 2, text: 'America' },
24
+ { value: 3, text: 'New Zealand' },
25
+ { value: 4, text: 'Spain' },
26
+ { value: 5, text: 'Turkey' },
27
+ { value: 6, text: 'India' },
28
+ { value: 7, text: 'Russia' },
29
+ { value: 8, text: 'Poland' },
30
+ { value: 9, text: 'Canada' },
31
+ ];
32
+ // simulating remote api call
33
+ const res = yield new Promise(resolve => {
34
+ setTimeout(() => {
35
+ const resultNumber = 3;
36
+ const filteredOptions = options.filter(o => o.text.toLowerCase().includes(searchString.toLowerCase()));
37
+ if (filteredOptions.length > resultNumber) {
38
+ filteredOptions.length = resultNumber;
39
+ }
40
+ resolve(filteredOptions);
41
+ }, 1000);
42
+ });
43
+ return res;
44
+ });
45
+ const BasicExample = observer(() => {
46
+ const [value, setValue] = useState();
47
+ const [state, onOpenChange] = useAsyncLazyDropdownState(value, dataFetcher);
48
+ return (_jsx(Form.AnvilSelect, { label: "Async Select (For Selects that have to fetch options from a remote server)", onChange: setValue, small: true, scrollHeight: "250px", trigger: {}, search: {
49
+ value: state.search,
50
+ placeholder: 'type something',
51
+ onChange: state.onSearchChange,
52
+ }, value: value, onOpenChange: onOpenChange, loading: state.loading, options: state.optionsWithValue, multiple: true }));
53
+ });
54
+ export const basic = () => _jsx(BasicExample, {});
55
+ //# sourceMappingURL=async-lazy-dropdown-state.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-lazy-dropdown-state.stories.js","sourceRoot":"","sources":["../../src/async-lazy-dropdown-state/async-lazy-dropdown-state.stories.tsx"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,EAAM,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAA2B,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,eAAe;IACX,KAAK,EAAE,oCAAoC;IAC3C,SAAS,EAAE,yBAAyB;IACpC,UAAU,EAAE,EAAE;CACjB,CAAC;AAEF,MAAM,WAAW,GAAG,CAAO,YAAoB,EAAE,EAAE;IAC/C,MAAM,OAAO,GAAG;QACZ,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;QAC/B,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;QAC7B,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE;QACjC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;QAC3B,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC5B,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;QAC3B,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC5B,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC5B,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC/B,CAAC;IACF,6BAA6B;IAC7B,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAwB,OAAO,CAAC,EAAE;QAC3D,UAAU,CAAC,GAAG,EAAE;YACZ,MAAM,YAAY,GAAG,CAAC,CAAC;YACvB,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACvC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAC5D,CAAC;YACF,IAAI,eAAe,CAAC,MAAM,GAAG,YAAY,EAAE;gBACvC,eAAe,CAAC,MAAM,GAAG,YAAY,CAAC;aACzC;YACD,OAAO,CAAC,eAAe,CAAC,CAAC;QAC7B,CAAC,EAAE,IAAI,CAAC,CAAC;IACb,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACf,CAAC,CAAA,CAAC;AAEF,MAAM,YAAY,GAAO,QAAQ,CAAC,GAAG,EAAE;IACnC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAA2B,CAAC;IAC9D,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,yBAAyB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAE5E,OAAO,CACH,KAAC,IAAI,CAAC,WAAW,IACb,KAAK,EAAC,4EAA4E,EAClF,QAAQ,EAAE,QAAQ,EAClB,KAAK,QACL,YAAY,EAAC,OAAO,EACpB,OAAO,EAAE,EAAE,EACX,MAAM,EAAE;YACJ,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,WAAW,EAAE,gBAAgB;YAC7B,QAAQ,EAAE,KAAK,CAAC,cAAc;SACjC,EACD,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,OAAO,EAAE,KAAK,CAAC,gBAAgB,EAC/B,QAAQ,SACV,CACL,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,KAAC,YAAY,KAAG,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './async-lazy-dropdown-state';
2
+ export * from './use-async-lazy-dropdown-state';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/async-lazy-dropdown-state/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './async-lazy-dropdown-state';
2
+ export * from './use-async-lazy-dropdown-state';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/async-lazy-dropdown-state/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { AnvilSelectPropsStrict } from '@servicetitan/design-system';
2
+ import { AsyncLazyDropdownState, DataFetcher } from './async-lazy-dropdown-state';
3
+ import { DropdownOption } from '../dropdown-state';
4
+ export declare const useAsyncLazyDropdownState: (value: AnvilSelectPropsStrict['value'], dataFetcher: DataFetcher) => [AsyncLazyDropdownState<DropdownOption<any>>, (open: boolean) => void];
5
+ //# sourceMappingURL=use-async-lazy-dropdown-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-async-lazy-dropdown-state.d.ts","sourceRoot":"","sources":["../../src/async-lazy-dropdown-state/use-async-lazy-dropdown-state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,eAAO,MAAM,yBAAyB,UAC3B,sBAAsB,CAAC,OAAO,CAAC,eAEzB,WAAW,0DA2Bb,OAAO,KAAK,IAAI,CAE9B,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
+ import { AsyncLazyDropdownState } from './async-lazy-dropdown-state';
3
+ export const useAsyncLazyDropdownState = (value,
4
+ // try memoising dataFetcher
5
+ dataFetcher) => {
6
+ const [state] = useState(() => new AsyncLazyDropdownState(dataFetcher));
7
+ useEffect(() => {
8
+ state.onChange(value);
9
+ }, [state, value]);
10
+ const isInitialMount = useRef(true);
11
+ useEffect(() => {
12
+ if (isInitialMount.current) {
13
+ isInitialMount.current = false;
14
+ }
15
+ else {
16
+ state.setDataFetcher(dataFetcher);
17
+ }
18
+ }, [state, dataFetcher]);
19
+ const onOpenChange = useCallback((open) => {
20
+ if (open) {
21
+ state.setSearch('');
22
+ }
23
+ }, [state]);
24
+ return [state, onOpenChange];
25
+ };
26
+ //# sourceMappingURL=use-async-lazy-dropdown-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-async-lazy-dropdown-state.js","sourceRoot":"","sources":["../../src/async-lazy-dropdown-state/use-async-lazy-dropdown-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjE,OAAO,EAAE,sBAAsB,EAAe,MAAM,6BAA6B,CAAC;AAGlF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACrC,KAAsC;AACtC,4BAA4B;AAC5B,WAAwB,EAC1B,EAAE;IACA,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC;IACxE,SAAS,CAAC,GAAG,EAAE;QACX,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEnB,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,cAAc,CAAC,OAAO,EAAE;YACxB,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC;SAClC;aAAM;YACH,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;SACrC;IACL,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IAEzB,MAAM,YAAY,GAAG,WAAW,CAC5B,CAAC,IAAa,EAAE,EAAE;QACd,IAAI,IAAI,EAAE;YACN,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;SACvB;IACL,CAAC,EACD,CAAC,KAAK,CAAC,CACV,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,YAAY,CAG1B,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface DateRange {
2
+ from?: Date;
3
+ to?: Date;
4
+ }
5
+ //# sourceMappingURL=date-range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range.d.ts","sourceRoot":"","sources":["../src/date-range.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACtB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,EAAE,CAAC,EAAE,IAAI,CAAC;CACb"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=date-range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range.js","sourceRoot":"","sources":["../src/date-range.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { FC } from 'react';
2
+ export declare const DropdownStateExample: FC;
3
+ //# sourceMappingURL=dropdown-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-state.d.ts","sourceRoot":"","sources":["../../src/demo/dropdown-state.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,EAAE,EAAE,MAAM,OAAO,CAAC;AA0N7C,eAAO,MAAM,oBAAoB,EAAE,EAclC,CAAC"}
@@ -0,0 +1,133 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ import { useRef, Fragment } from 'react';
12
+ import { InMemoryDataSource, AsyncDataSource } from '@servicetitan/data-query';
13
+ import { AnvilSelect, Text, ButtonGroup, Button, } from '@servicetitan/design-system';
14
+ import { FieldState } from 'formstate';
15
+ import { observer } from 'mobx-react';
16
+ import { DropdownState } from '..';
17
+ function useDropdownField(initial) {
18
+ return useRef(new FieldState(initial)).current;
19
+ }
20
+ function useDropdownState(state) {
21
+ return useRef(state).current;
22
+ }
23
+ const options = [
24
+ { value: 1, text: 'Alderaan', diameter: 12500, moons: 0 },
25
+ { value: 2, text: 'Bespin', diameter: 118000, moons: 2 },
26
+ { value: 3, text: 'Coruscant', diameter: 12240, moons: 4 },
27
+ { value: 4, text: 'Dagobah', diameter: 14410, moons: 0 },
28
+ { value: 5, text: 'Hoth', diameter: 7200, moons: 3 },
29
+ { value: 6, text: 'Kashyyyk', diameter: 12765, moons: 3 },
30
+ { value: 7, text: 'Naboo', diameter: 12120, moons: 3 },
31
+ { value: 8, text: 'Tatooine', diameter: 10465, moons: 3 },
32
+ { value: 9, text: 'Yavin', diameter: 200000, moons: 26 },
33
+ ];
34
+ const optionsWithGroups = [
35
+ { value: 1, text: 'Hem Dazon', group: 'Arcona' },
36
+ { value: 2, text: 'El-Les', group: 'Arcona' },
37
+ { value: 3, text: 'Jheeg', group: 'Arcona' },
38
+ { value: 4, text: 'Paploo', group: 'Ewok' },
39
+ { value: 5, text: 'Gallo', group: 'Gungan' },
40
+ { value: 6, text: 'Lyonie', group: 'Gungan' },
41
+ { value: 7, text: 'Tobler Ceel', group: 'Gungan' },
42
+ { value: 8, text: 'Ganne', group: 'Gungan' },
43
+ { value: 9, text: 'Augara Jowil', group: 'Gungan' },
44
+ { value: 10, text: 'Reegesk', group: 'Ranat' },
45
+ { value: 11, text: 'Rik-tak', group: 'Ranat' },
46
+ { value: 12, text: 'Bahb', group: 'Zeltron' },
47
+ { value: 13, text: 'Chantique', group: 'Zeltron' },
48
+ { value: 14, text: 'Luxa', group: 'Zeltron' },
49
+ { value: 15, text: 'Rahuhl', group: 'Zeltron' },
50
+ ];
51
+ const InMemoryDropdownStateExample = observer(() => {
52
+ const field = useDropdownField([]);
53
+ const state = useDropdownState(new DropdownState({
54
+ dataSource: new InMemoryDataSource(options),
55
+ }));
56
+ const handleChange = (data) => {
57
+ field.onChange(Array.isArray(data) ? data : [data]);
58
+ };
59
+ const withReset = (handler) => {
60
+ return () => __awaiter(void 0, void 0, void 0, function* () {
61
+ handleChange([]);
62
+ state.setSearch('');
63
+ state.setDataSource(null);
64
+ state.setSearchByGroup(false);
65
+ state.setSort([{ field: 'text' }]);
66
+ state.setFilter(null);
67
+ state.setGroup([{ field: 'group' }]);
68
+ yield Promise.resolve();
69
+ handler();
70
+ });
71
+ };
72
+ const withoutGroups = withReset(() => {
73
+ state.setDataSource(new InMemoryDataSource(options));
74
+ });
75
+ const withGroups = withReset(() => {
76
+ state.setDataSource(new InMemoryDataSource(optionsWithGroups));
77
+ });
78
+ const withGroupsAndSearch = withReset(() => {
79
+ state.setDataSource(new InMemoryDataSource(optionsWithGroups));
80
+ state.setSearchByGroup(true);
81
+ });
82
+ const customSort = withReset(() => {
83
+ state.setDataSource(new InMemoryDataSource(options));
84
+ state.setSort([{ field: 'diameter', dir: 'desc' }]);
85
+ });
86
+ const customFilter = withReset(() => {
87
+ state.setDataSource(new InMemoryDataSource(options));
88
+ state.setFilter({
89
+ logic: 'and',
90
+ filters: [{ field: 'diameter', value: 12250, operator: 'gte' }],
91
+ });
92
+ });
93
+ const customGroup = withReset(() => {
94
+ state.setDataSource(new InMemoryDataSource(options));
95
+ state.setGroup([{ field: 'moons', dir: 'desc' }]);
96
+ });
97
+ return (_jsxs(Fragment, { children: [_jsx(AnvilSelect, { value: field.value, onChange: handleChange, options: state.options, search: { value: state.search, onChange: state.onSearchChange }, multiple: true }), _jsx(Text, Object.assign({ size: 4, className: "m-t-4 m-b-half" }, { children: "Without groups" })), _jsx(Button, Object.assign({ onClick: withoutGroups }, { children: "Apply" })), _jsx(Text, Object.assign({ size: 4, className: "m-t-4 m-b-half" }, { children: "With groups" })), _jsxs(ButtonGroup, { children: [_jsx(Button, Object.assign({ onClick: withGroups }, { children: "Search in options" })), _jsx(Button, Object.assign({ onClick: withGroupsAndSearch }, { children: "Search in options & groups" }))] }), _jsx(Text, Object.assign({ size: 4, className: "m-t-4 m-b-half" }, { children: "Custom sort" })), _jsx(Button, Object.assign({ onClick: customSort }, { children: "Apply" })), _jsx(Text, Object.assign({ size: 4, className: "m-t-4 m-b-half" }, { children: "Custom filter" })), _jsx(Button, Object.assign({ onClick: customFilter }, { children: "Apply" })), _jsx(Text, Object.assign({ size: 4, className: "m-t-4 m-b-half" }, { children: "Custom group" })), _jsx(Button, Object.assign({ onClick: customGroup }, { children: "Apply" }))] }));
98
+ });
99
+ const AsyncDropdownStateExample = observer(() => {
100
+ const field = useDropdownField([]);
101
+ const state = useDropdownState(new DropdownState({
102
+ dataSource: new AsyncDataSource({
103
+ get({ filter }) {
104
+ var _a, _b;
105
+ return __awaiter(this, void 0, void 0, function* () {
106
+ const search = (_b = (_a = filter === null || filter === void 0 ? void 0 : filter.filters) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.value;
107
+ const result = search
108
+ ? options.filter(({ text }) => text.toLowerCase().includes(search.toLowerCase()))
109
+ : options;
110
+ yield new Promise(resolver => setTimeout(resolver, 1000));
111
+ return {
112
+ data: result,
113
+ total: result.length,
114
+ };
115
+ });
116
+ },
117
+ }, undefined, true),
118
+ lazy: true,
119
+ }));
120
+ const handleChange = (data) => {
121
+ field.onChange(Array.isArray(data) ? data : [data]);
122
+ };
123
+ const handleOpenChange = (open) => {
124
+ if (open) {
125
+ state.fetch();
126
+ }
127
+ };
128
+ return (_jsx(AnvilSelect, { value: field.value, onChange: handleChange, options: state.options, search: { value: state.search, onChange: state.onSearchChange }, onOpenChange: handleOpenChange, loading: state.loading, multiple: true }));
129
+ });
130
+ export const DropdownStateExample = () => {
131
+ return (_jsxs(Fragment, { children: [_jsx(Text, Object.assign({ size: 5, className: "m-b-half" }, { children: "InMemoryDataSource" })), _jsx(InMemoryDropdownStateExample, {}), _jsx(Text, Object.assign({ size: 5, className: "m-t-5 m-b-half" }, { children: "AsyncDataSource" })), _jsx(AsyncDropdownStateExample, {})] }));
132
+ };
133
+ //# sourceMappingURL=dropdown-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-state.js","sourceRoot":"","sources":["../../src/demo/dropdown-state.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './dropdown-state';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/demo/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './dropdown-state';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/demo/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { ChangeEvent } from 'react';
2
+ import { State, SortDescriptor, CompositeFilterDescriptor, GroupDescriptor, DataSource } from '@servicetitan/data-query';
3
+ import { InputOnChangeData, AnvilSelectOptionsProps } from '@servicetitan/design-system';
4
+ export interface DropdownOption<T> {
5
+ value: T;
6
+ text: string;
7
+ }
8
+ interface DropdownStateConstructorParams<T> {
9
+ dataSource?: DataSource<T>;
10
+ searchByGroup?: boolean;
11
+ state?: {
12
+ sort?: SortDescriptor[];
13
+ filter?: CompositeFilterDescriptor;
14
+ group?: [GroupDescriptor];
15
+ };
16
+ lazy?: boolean;
17
+ }
18
+ export declare class DropdownState<T extends DropdownOption<any>> {
19
+ loading: boolean;
20
+ search: string;
21
+ get options(): AnvilSelectOptionsProps[];
22
+ get state(): State;
23
+ private get searchFilter();
24
+ private dataSource;
25
+ private searchByGroup;
26
+ private sort;
27
+ private filter;
28
+ private group;
29
+ private data;
30
+ constructor({ dataSource, searchByGroup, state, lazy, }?: DropdownStateConstructorParams<T>);
31
+ onSearchChange: (_0: ChangeEvent<HTMLInputElement>, data: InputOnChangeData) => void;
32
+ setSearch: (search: string) => Promise<void>;
33
+ setDataSource: (dataSource: DataSource<T> | null) => Promise<void>;
34
+ setSearchByGroup: (searchByGroup: boolean) => Promise<void>;
35
+ setSort: (sort: SortDescriptor[]) => Promise<void>;
36
+ setFilter: (filter: CompositeFilterDescriptor | null) => Promise<void>;
37
+ setGroup: (group: [GroupDescriptor]) => Promise<void>;
38
+ fetch: () => Promise<void>;
39
+ private traverse;
40
+ }
41
+ export {};
42
+ //# sourceMappingURL=dropdown-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-state.d.ts","sourceRoot":"","sources":["../src/dropdown-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EACH,KAAK,EACL,cAAc,EACd,yBAAyB,EACzB,eAAe,EAEf,UAAU,EACb,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAWzF,MAAM,WAAW,cAAc,CAAC,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,8BAA8B,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE;QACJ,IAAI,CAAC,EAAE,cAAc,EAAE,CAAC;QACxB,MAAM,CAAC,EAAE,yBAAyB,CAAC;QACnC,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;KAC7B,CAAC;IACF,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,aAAa,CAAC,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC;IACxC,OAAO,UAAS;IAChB,MAAM,SAAM;IAExB,IAAc,OAAO,8BA6BpB;IAED,IAAc,KAAK,UAWlB;IAES,OAAO,KAAK,YAAY,GAcjC;IAEW,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,KAAK,CAAoB;IAEjC,OAAO,CAAC,IAAI,CAA8B;gBAE1C,EACR,UAAU,EACV,aAAa,EACb,KAAK,EACL,IAAI,GACP,GAAE,8BAA8B,CAAC,CAAC,CAAM;IAezC,cAAc,OAEE,YAAY,gBAAgB,CAAC,QAAQ,iBAAiB,UAMjE;IAGL,SAAS,WAAkB,MAAM,mBAG/B;IAGF,aAAa,eAAsB,WAAW,CAAC,CAAC,GAAG,IAAI,mBAGrD;IAGF,gBAAgB,kBAAyB,OAAO,mBAG9C;IAGF,OAAO,SAAgB,cAAc,EAAE,mBAGrC;IAGF,SAAS,WAAkB,yBAAyB,GAAG,IAAI,mBAGzD;IAGF,QAAQ,UAAiB,CAAC,eAAe,CAAC,mBAGxC;IAGF,KAAK,sBASH;IAEF,OAAO,CAAC,QAAQ,CAgBd;CACL"}