@gen-epix/ui-core-form 4.0.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 (117) hide show
  1. package/LICENSE +287 -0
  2. package/dist/@types/ui-form.d.ts +2 -0
  3. package/dist/@types/vite-env.d.ts +2 -0
  4. package/dist/@types/yup.d.ts +30 -0
  5. package/dist/_chunks/Autocomplete.js +229 -0
  6. package/dist/_chunks/Autocomplete.js.map +1 -0
  7. package/dist/_chunks/DatePicker.js +126 -0
  8. package/dist/_chunks/DatePicker.js.map +1 -0
  9. package/dist/_chunks/FormUtil.js +1350 -0
  10. package/dist/_chunks/FormUtil.js.map +1 -0
  11. package/dist/_chunks/RichTextEditor.js +22721 -0
  12. package/dist/_chunks/RichTextEditor.js.map +1 -0
  13. package/dist/_chunks/TransferList.js +453 -0
  14. package/dist/_chunks/TransferList.js.map +1 -0
  15. package/dist/_chunks/UploadButton.js +91 -0
  16. package/dist/_chunks/UploadButton.js.map +1 -0
  17. package/dist/_chunks/classnames.js +33 -0
  18. package/dist/_chunks/classnames.js.map +1 -0
  19. package/dist/_chunks/index.esm.js +348 -0
  20. package/dist/_chunks/index.esm.js.map +1 -0
  21. package/dist/_chunks/isEqual.js +348 -0
  22. package/dist/_chunks/isEqual.js.map +1 -0
  23. package/dist/_chunks/isObjectLike.js +304 -0
  24. package/dist/_chunks/isObjectLike.js.map +1 -0
  25. package/dist/_chunks/isValid.js +28 -0
  26. package/dist/_chunks/isValid.js.map +1 -0
  27. package/dist/_chunks/rolldown-runtime.js +13 -0
  28. package/dist/_chunks/sv.js +434 -0
  29. package/dist/_chunks/sv.js.map +1 -0
  30. package/dist/components/fields/Autocomplete/Autocomplete.d.ts +19 -0
  31. package/dist/components/fields/Autocomplete/AutocompleteSelectAllContext.d.ts +2 -0
  32. package/dist/components/fields/Autocomplete/AutocompleteSelectAllPaper.d.ts +2 -0
  33. package/dist/components/fields/Autocomplete/index.d.ts +1 -0
  34. package/dist/components/fields/Autocomplete/index.js +2 -0
  35. package/dist/components/fields/CheckboxGroup/CheckboxGroup.d.ts +18 -0
  36. package/dist/components/fields/CheckboxGroup/index.d.ts +1 -0
  37. package/dist/components/fields/CheckboxGroup/index.js +114 -0
  38. package/dist/components/fields/CheckboxGroup/index.js.map +1 -0
  39. package/dist/components/fields/DatePicker/DatePicker.d.ts +15 -0
  40. package/dist/components/fields/DatePicker/DatePickerInputAdornment.d.ts +8 -0
  41. package/dist/components/fields/DatePicker/index.d.ts +1 -0
  42. package/dist/components/fields/DatePicker/index.js +2 -0
  43. package/dist/components/fields/DateRangePicker/DateRangePicker.d.ts +17 -0
  44. package/dist/components/fields/DateRangePicker/index.d.ts +1 -0
  45. package/dist/components/fields/DateRangePicker/index.js +1648 -0
  46. package/dist/components/fields/DateRangePicker/index.js.map +1 -0
  47. package/dist/components/fields/NumberField/NumberField.d.ts +19 -0
  48. package/dist/components/fields/NumberField/index.d.ts +1 -0
  49. package/dist/components/fields/NumberField/index.js +180 -0
  50. package/dist/components/fields/NumberField/index.js.map +1 -0
  51. package/dist/components/fields/NumberRangeInput/NumberRangeInput.d.ts +15 -0
  52. package/dist/components/fields/NumberRangeInput/index.d.ts +1 -0
  53. package/dist/components/fields/NumberRangeInput/index.js +192 -0
  54. package/dist/components/fields/NumberRangeInput/index.js.map +1 -0
  55. package/dist/components/fields/RadioGroup/RadioGroup.d.ts +16 -0
  56. package/dist/components/fields/RadioGroup/index.d.ts +1 -0
  57. package/dist/components/fields/RadioGroup/index.js +72 -0
  58. package/dist/components/fields/RadioGroup/index.js.map +1 -0
  59. package/dist/components/fields/RichTextEditor/RichTextEditor.d.ts +13 -0
  60. package/dist/components/fields/RichTextEditor/RichTextEditorContent.d.ts +4 -0
  61. package/dist/components/fields/RichTextEditor/index.d.ts +2 -0
  62. package/dist/components/fields/RichTextEditor/index.js +2 -0
  63. package/dist/components/fields/RichTextEditor/useRichTextEditorExtensions.d.ts +10 -0
  64. package/dist/components/fields/Select/Select.d.ts +16 -0
  65. package/dist/components/fields/Select/index.d.ts +1 -0
  66. package/dist/components/fields/Select/index.js +129 -0
  67. package/dist/components/fields/Select/index.js.map +1 -0
  68. package/dist/components/fields/Switch/Switch.d.ts +13 -0
  69. package/dist/components/fields/Switch/index.d.ts +1 -0
  70. package/dist/components/fields/Switch/index.js +68 -0
  71. package/dist/components/fields/Switch/index.js.map +1 -0
  72. package/dist/components/fields/TextField/TextField.d.ts +18 -0
  73. package/dist/components/fields/TextField/index.d.ts +1 -0
  74. package/dist/components/fields/TextField/index.js +108 -0
  75. package/dist/components/fields/TextField/index.js.map +1 -0
  76. package/dist/components/fields/ToggleButtonGroup/ToggleButtonGroup.d.ts +14 -0
  77. package/dist/components/fields/ToggleButtonGroup/index.d.ts +1 -0
  78. package/dist/components/fields/ToggleButtonGroup/index.js +57 -0
  79. package/dist/components/fields/ToggleButtonGroup/index.js.map +1 -0
  80. package/dist/components/fields/TransferList/TransferList.d.ts +16 -0
  81. package/dist/components/fields/TransferList/index.d.ts +1 -0
  82. package/dist/components/fields/TransferList/index.js +2 -0
  83. package/dist/components/fields/UploadButton/UploadButton.d.ts +15 -0
  84. package/dist/components/fields/UploadButton/index.d.ts +1 -0
  85. package/dist/components/fields/UploadButton/index.js +2 -0
  86. package/dist/components/helpers/FormFieldHelperText/FormFieldHelperText.d.ts +8 -0
  87. package/dist/components/helpers/FormFieldHelperText/index.d.ts +1 -0
  88. package/dist/components/helpers/FormFieldHelperText/index.js +50 -0
  89. package/dist/components/helpers/FormFieldHelperText/index.js.map +1 -0
  90. package/dist/components/helpers/FormFieldLoadingIndicator/FormFieldLoadingIndicator.d.ts +4 -0
  91. package/dist/components/helpers/FormFieldLoadingIndicator/index.d.ts +1 -0
  92. package/dist/components/helpers/FormFieldLoadingIndicator/index.js +16 -0
  93. package/dist/components/helpers/FormFieldLoadingIndicator/index.js.map +1 -0
  94. package/dist/components/helpers/GenericForm/GenericForm.d.ts +18 -0
  95. package/dist/components/helpers/GenericForm/index.d.ts +1 -0
  96. package/dist/components/helpers/GenericForm/index.js +156 -0
  97. package/dist/components/helpers/GenericForm/index.js.map +1 -0
  98. package/dist/hooks/useIsFormFieldRequiredFromSchema/index.d.ts +1 -0
  99. package/dist/hooks/useIsFormFieldRequiredFromSchema/index.js +18 -0
  100. package/dist/hooks/useIsFormFieldRequiredFromSchema/index.js.map +1 -0
  101. package/dist/hooks/useIsFormFieldRequiredFromSchema/useIsFormFieldRequiredFromSchema.d.ts +4 -0
  102. package/dist/locale/en.json +97 -0
  103. package/dist/locale/nl.json +97 -0
  104. package/dist/models/form.d.ts +112 -0
  105. package/dist/models/form.js +8 -0
  106. package/dist/models/form.js.map +1 -0
  107. package/dist/setup/setup.d.ts +1 -0
  108. package/dist/setup/setup.js +166 -0
  109. package/dist/setup/setup.js.map +1 -0
  110. package/dist/utils/FormUtil/FormUtil.d.ts +19 -0
  111. package/dist/utils/FormUtil/index.d.ts +1 -0
  112. package/dist/utils/FormUtil/index.js +2 -0
  113. package/dist/utils/SchemaUtil/SchemaUtil.d.ts +9 -0
  114. package/dist/utils/SchemaUtil/index.d.ts +1 -0
  115. package/dist/utils/SchemaUtil/index.js +30 -0
  116. package/dist/utils/SchemaUtil/index.js.map +1 -0
  117. package/package.json +207 -0
@@ -0,0 +1,126 @@
1
+ import { n as e } from "./rolldown-runtime.js";
2
+ import { p as t, t as n } from "./FormUtil.js";
3
+ import { i as r, t as i } from "./index.esm.js";
4
+ import { FormFieldHelperText as a } from "../components/helpers/FormFieldHelperText/index.js";
5
+ import { FormFieldLoadingIndicator as o } from "../components/helpers/FormFieldLoadingIndicator/index.js";
6
+ import { t as s } from "./classnames.js";
7
+ import { t as c } from "./sv.js";
8
+ import { DATE_FORMAT as l } from "@gen-epix/ui-core/constants/date";
9
+ import { useCallback as u, useMemo as d, useRef as f } from "react";
10
+ import { useTranslation as p } from "react-i18next";
11
+ import { FormControl as m, FormHelperText as h, IconButton as g, InputAdornment as _ } from "@mui/material";
12
+ import v from "@mui/icons-material/Clear";
13
+ import { jsx as y, jsxs as b } from "react/jsx-runtime";
14
+ import { TestIdUtil as x } from "@gen-epix/ui-core/utils/TestIdUtil";
15
+ import { DatePicker as S, DateTimePicker as C, LocalizationProvider as w } from "@mui/x-date-pickers";
16
+ import { AdapterDateFns as T } from "@mui/x-date-pickers/AdapterDateFns";
17
+ //#region src/components/fields/DatePicker/DatePickerInputAdornment.tsx
18
+ var E = /* @__PURE__ */ e(s(), 1), D = ({ children: e, disabled: t, loading: n, onResetButtonClickRef: r, ...i }) => {
19
+ let { t: a } = p();
20
+ return /* @__PURE__ */ b(_, {
21
+ ...i,
22
+ children: [!t && !n && /* @__PURE__ */ y(g, {
23
+ ...x.createAttributes("DatePicker-reset"),
24
+ "aria-label": a`Clear date field`,
25
+ className: "DatePicker-resetButton",
26
+ onClick: () => r.current(),
27
+ sx: { "& svg": { fontSize: "16px" } },
28
+ tabIndex: -1,
29
+ children: /* @__PURE__ */ y(v, {})
30
+ }), e]
31
+ });
32
+ }, O = ({ dateFormat: e = l.DATE, disabled: s = !1, infoMessage: p, label: g, loading: _ = !1, name: v, onChange: O, required: k = !1, warningMessage: A }) => {
33
+ let { control: j, formState: { errors: M } } = r(), N = n.getFieldErrorMessage(M, v), P = !!N, F = !!A && !P, I = f(null), L = f(() => void 0), R = u((e) => (t) => {
34
+ O && O(t), e(t);
35
+ }, [O]), z = d(() => ({
36
+ ...t,
37
+ formatLong: c.formatLong
38
+ }), []), B = d(() => {
39
+ switch (e) {
40
+ case l.DATE:
41
+ case l.DATE_TIME: return;
42
+ case l.YEAR: return ["year"];
43
+ case l.YEAR_MONTH: return ["year", "month"];
44
+ default: throw Error(`Unsupported date format: ${e}`);
45
+ }
46
+ }, [e]), V = e === l.DATE_TIME ? C : S;
47
+ return /* @__PURE__ */ y(i, {
48
+ control: j,
49
+ defaultValue: "",
50
+ name: v,
51
+ render: u(({ field: { onBlur: t, onChange: n, ref: r, value: i } }) => (r({ focus: () => {
52
+ I?.current?.focus();
53
+ } }), L.current = () => {
54
+ n(null);
55
+ }, /* @__PURE__ */ b(m, {
56
+ ...x.createAttributes("DatePicker", {
57
+ label: g,
58
+ name: v
59
+ }),
60
+ fullWidth: !0,
61
+ sx: {
62
+ "&:hover .DatePicker-resetButton, &:focus-within .DatePicker-resetButton": { display: "initial" },
63
+ "& .DatePicker-resetButton": { display: "none" }
64
+ },
65
+ children: [
66
+ /* @__PURE__ */ y(w, {
67
+ adapterLocale: z,
68
+ dateAdapter: T,
69
+ children: /* @__PURE__ */ y(V, {
70
+ disabled: s || _,
71
+ inputRef: I,
72
+ label: g,
73
+ loading: _,
74
+ onChange: R(n),
75
+ openTo: e === l.DATE_TIME ? void 0 : "year",
76
+ slotProps: { textField: {
77
+ className: (0, E.default)({ "Mui-warning": F }),
78
+ error: P,
79
+ onBlur: t,
80
+ slotProps: { inputLabel: { required: k } },
81
+ variant: "outlined"
82
+ } },
83
+ slots: { inputAdornment: (e) => /* @__PURE__ */ y(D, {
84
+ ...e,
85
+ disabled: s,
86
+ loading: _,
87
+ onResetButtonClickRef: L
88
+ }) },
89
+ value: i,
90
+ views: B
91
+ })
92
+ }),
93
+ !!_ && /* @__PURE__ */ y(o, {}),
94
+ /* @__PURE__ */ y(h, {
95
+ sx: { ml: 0 },
96
+ children: /* @__PURE__ */ y(a, {
97
+ errorMessage: N,
98
+ infoMessage: p,
99
+ noIndent: !0,
100
+ warningMessage: A
101
+ })
102
+ })
103
+ ]
104
+ })), [
105
+ V,
106
+ z,
107
+ e,
108
+ s,
109
+ N,
110
+ P,
111
+ F,
112
+ p,
113
+ g,
114
+ _,
115
+ v,
116
+ R,
117
+ k,
118
+ B,
119
+ A
120
+ ])
121
+ });
122
+ };
123
+ //#endregion
124
+ export { O as t };
125
+
126
+ //# sourceMappingURL=DatePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.js","names":[],"sources":["../../src/components/fields/DatePicker/DatePickerInputAdornment.tsx","../../src/components/fields/DatePicker/DatePicker.tsx"],"sourcesContent":["import type { RefObject } from 'react';\nimport type { InputAdornmentProps } from '@mui/material';\nimport {\n IconButton,\n InputAdornment,\n} from '@mui/material';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport { useTranslation } from 'react-i18next';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\n\nexport type DatePickerInputAdornmentProps = {\n readonly disabled: boolean;\n readonly loading: boolean;\n readonly onResetButtonClickRef: RefObject<() => void>;\n} & InputAdornmentProps;\n\nexport const DatePickerInputAdornment = ({\n children,\n disabled,\n loading,\n onResetButtonClickRef,\n ...props\n}: DatePickerInputAdornmentProps) => {\n const { t } = useTranslation();\n return (\n <InputAdornment {...props}>\n {!disabled && !loading && (\n <IconButton\n {...TestIdUtil.createAttributes('DatePicker-reset')}\n aria-label={t`Clear date field`}\n className={'DatePicker-resetButton'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => onResetButtonClickRef.current()}\n sx={{\n '& svg': {\n fontSize: '16px',\n },\n }}\n tabIndex={-1}\n >\n <ClearIcon />\n </IconButton>\n )}\n {children}\n </InputAdornment>\n );\n};\n","import type { ReactElement } from 'react';\nimport {\n useCallback,\n useMemo,\n useRef,\n} from 'react';\nimport {\n FormControl,\n FormHelperText,\n} from '@mui/material';\nimport type {\n ControllerRenderProps,\n FieldValues,\n Path,\n PathValue,\n UseControllerReturn,\n} from 'react-hook-form';\nimport {\n Controller,\n useFormContext,\n} from 'react-hook-form';\nimport type {\n DatePickerProps as MuiDatePickerProps,\n DateTimePickerProps as MuiDateTimePickerProps,\n} from '@mui/x-date-pickers';\nimport {\n LocalizationProvider,\n DatePicker as MuiDatePicker,\n DateTimePicker as MuiDateTimePicker,\n} from '@mui/x-date-pickers';\nimport classNames from 'classnames';\nimport type { Locale } from 'date-fns';\nimport {\n enUS,\n sv,\n} from 'date-fns/locale';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { DATE_FORMAT } from '@gen-epix/ui-core/constants/date';\n\nimport { FormUtil } from '../../../utils/FormUtil';\nimport { FormFieldHelperText } from '../../helpers/FormFieldHelperText';\nimport { FormFieldLoadingIndicator } from '../../helpers/FormFieldLoadingIndicator';\n\nimport { DatePickerInputAdornment } from './DatePickerInputAdornment';\n\n\nexport type DatePickerProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>> = {\n readonly dateFormat?: typeof DATE_FORMAT[keyof typeof DATE_FORMAT];\n readonly disabled?: boolean;\n readonly infoMessage?: string;\n readonly label: string;\n readonly loading?: boolean;\n readonly name: TName;\n readonly onChange?: (value: Date) => void;\n readonly required?: boolean;\n readonly warningMessage?: string;\n};\n\nexport const DatePicker = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({\n dateFormat = DATE_FORMAT.DATE,\n disabled = false,\n infoMessage,\n label,\n loading = false,\n name,\n onChange: onChangeProp,\n required = false,\n warningMessage,\n}: DatePickerProps<TFieldValues, TName>): ReactElement => {\n const { control, formState: { errors } } = useFormContext<TFieldValues>();\n const errorMessage = FormUtil.getFieldErrorMessage(errors, name);\n const hasError = !!errorMessage;\n const hasWarning = !!warningMessage && !hasError;\n const inputRef = useRef<HTMLInputElement>(null);\n const onResetButtonClickRef = useRef<() => void>(() => undefined);\n\n const onMuiDatePickerChange = useCallback((onChange: ControllerRenderProps<TFieldValues, TName>['onChange']) =>\n (newValue: Date) => {\n if (onChangeProp) {\n onChangeProp(newValue);\n }\n onChange(newValue);\n }\n , [onChangeProp]);\n\n const customLocale = useMemo<Locale>(() => {\n /**\n * Use everything from enUS, but format dates the Swedish way (ISO 8601)\n */\n return {\n ...enUS,\n formatLong: sv.formatLong,\n };\n }, []);\n\n const views = useMemo<MuiDateTimePickerProps['views']>(() => {\n switch (dateFormat) {\n case DATE_FORMAT.DATE:\n case DATE_FORMAT.DATE_TIME:\n return undefined;\n case DATE_FORMAT.YEAR:\n return ['year'];\n case DATE_FORMAT.YEAR_MONTH:\n return ['year', 'month'];\n default:\n throw new Error(`Unsupported date format: ${dateFormat}`);\n }\n }, [dateFormat]);\n\n const MuiComponent = dateFormat === DATE_FORMAT.DATE_TIME ? MuiDateTimePicker : MuiDatePicker;\n\n const renderController = useCallback(({ field: { onBlur, onChange, ref, value } }: UseControllerReturn<TFieldValues, TName>) => {\n ref({\n focus: () => {\n inputRef?.current?.focus();\n },\n });\n\n onResetButtonClickRef.current = () => {\n onChange(null);\n };\n\n return (\n <FormControl\n {...TestIdUtil.createAttributes('DatePicker', { label, name })}\n fullWidth\n sx={{\n '&:hover .DatePicker-resetButton, &:focus-within .DatePicker-resetButton': {\n display: 'initial',\n },\n '& .DatePicker-resetButton': {\n display: 'none',\n },\n }}\n >\n <LocalizationProvider\n adapterLocale={customLocale}\n dateAdapter={AdapterDateFns}\n >\n <MuiComponent\n disabled={disabled || loading}\n inputRef={inputRef}\n label={label}\n loading={loading}\n onChange={onMuiDatePickerChange(onChange)}\n openTo={dateFormat === DATE_FORMAT.DATE_TIME ? undefined : 'year'}\n slotProps={{\n textField: {\n className: classNames({ 'Mui-warning': hasWarning }),\n error: hasError,\n onBlur,\n slotProps: {\n inputLabel: {\n required,\n },\n },\n variant: 'outlined',\n },\n }}\n slots={{\n inputAdornment: (props) => (\n <DatePickerInputAdornment\n {...props}\n disabled={disabled}\n loading={loading}\n onResetButtonClickRef={onResetButtonClickRef}\n />\n ),\n }}\n value={value}\n views={views as MuiDatePickerProps['views']}\n />\n </LocalizationProvider>\n {!!loading && <FormFieldLoadingIndicator />}\n <FormHelperText sx={{ ml: 0 }}>\n <FormFieldHelperText\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n noIndent\n warningMessage={warningMessage}\n />\n </FormHelperText>\n </FormControl>\n );\n }, [MuiComponent, customLocale, dateFormat, disabled, errorMessage, hasError, hasWarning, infoMessage, label, loading, name, onMuiDatePickerChange, required, views, warningMessage]);\n\n return (\n <Controller\n control={control}\n defaultValue={'' as PathValue<TFieldValues, TName>}\n name={name}\n render={renderController}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;mCAgBA,KAAA,EAAA,aAAA,aAAA,YAAA,0BAAA,GAAA,QAAA;;;;;;;;;;;;;;AA8BA,GCaa,KAAuG,EAClH,gBAAa,EAAY,MACzB,cAAW,IACX,gBACA,UACA,aAAU,IACV,SACA,UAAU,GACV,cAAW,IACX,wBACwD;CACxD,IAAM,EAAE,YAAS,WAAW,EAAE,gBAAa,EAA6B,GAClE,IAAe,EAAS,qBAAqB,GAAQ,CAAI,GACzD,IAAW,CAAC,CAAC,GACb,IAAa,CAAC,CAAC,KAAkB,CAAC,GAClC,IAAW,EAAyB,IAAI,GACxC,IAAwB,QAAyB,KAAA,CAAS,GAE1D,IAAwB,GAAa,OACxC,MAAmB;EAIlB,AAHI,KACF,EAAa,CAAQ,GAEvB,EAAS,CAAQ;CACnB,GACA,CAAC,CAAY,CAAC,GAEV,IAAe,SAIZ;EACL,GAAG;EACH,YAAY,EAAG;CACjB,IACC,CAAC,CAAC,GAEC,IAAQ,QAA+C;EAC3D,QAAQ,GAAR;GACE,KAAK,EAAY;GACjB,KAAK,EAAY,WACf;GACF,KAAK,EAAY,MACf,OAAO,CAAC,MAAM;GAChB,KAAK,EAAY,YACf,OAAO,CAAC,QAAQ,OAAO;GACzB,SACE,MAAU,MAAM,4BAA4B,GAAY;EAC5D;CACF,GAAG,CAAC,CAAU,CAAC,GAET,IAAe,MAAe,EAAY,YAAY,IAAoB;CA6EhF,OACE,kBAAC,GAAD;EACW;EACT,cAAc;EACR;EACN,QAhFqB,GAAa,EAAE,OAAO,EAAE,WAAQ,aAAU,QAAK,kBACtE,EAAI,EACF,aAAa;GACX,GAAU,SAAS,MAAM;EAC3B,EACF,CAAC,GAED,EAAsB,gBAAgB;GACpC,EAAS,IAAI;EACf,GAGE,kBAAC,GAAD;GACE,GAAI,EAAW,iBAAiB,cAAc;IAAE;IAAO;GAAK,CAAC;GAC7D,WAAA;GACA,IAAI;IACF,2EAA2E,EACzE,SAAS,UACX;IACA,6BAA6B,EAC3B,SAAS,OACX;GACF;aAVF;IAYE,kBAAC,GAAD;KACE,eAAe;KACf,aAAa;eAEb,kBAAC,GAAD;MACE,UAAU,KAAY;MACZ;MACH;MACE;MACT,UAAU,EAAsB,CAAQ;MACxC,QAAQ,MAAe,EAAY,YAAY,KAAA,IAAY;MAC3D,WAAW,EACT,WAAW;OACT,YAAA,GAAA,EAAA,QAAA,CAAsB,EAAE,eAAe,EAAW,CAAC;OACnD,OAAO;OACP;OACA,WAAW,EACT,YAAY,EACV,YACF,EACF;OACA,SAAS;MACX,EACF;MACA,OAAO,EACL,iBAAiB,MACf,kBAAC,GAAD;OACE,GAAI;OACM;OACD;OACc;MACxB,CAAA,EAEL;MACO;MACA;KACR,CAAA;IACmB,CAAA;IACrB,CAAC,CAAC,KAAW,kBAAC,GAAD,CAA4B,CAAA;IAC1C,kBAAC,GAAD;KAAgB,IAAI,EAAE,IAAI,EAAE;eAC1B,kBAAC,GAAD;MACgB;MACD;MACb,UAAA;MACgB;KACjB,CAAA;IACa,CAAA;GACL;OAEd;GAAC;GAAc;GAAc;GAAY;GAAU;GAAc;GAAU;GAAY;GAAa;GAAO;GAAS;GAAM;GAAuB;GAAU;GAAO;EAAc,CAOvK;CACT,CAAA;AAEL"}