@notmrabhi/flowforge 0.1.47 → 0.1.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{SchemaBuilderDrawer-DwpDhvfw.js → SchemaBuilderDrawer-BlL83YY1.js} +2 -2
- package/dist/{SchemaBuilderDrawer-DwpDhvfw.js.map → SchemaBuilderDrawer-BlL83YY1.js.map} +1 -1
- package/dist/{SchemaBuilderDrawer-ZvBnHvoK.js → SchemaBuilderDrawer-CcsuQXAA.js} +2 -2
- package/dist/{SchemaBuilderDrawer-ZvBnHvoK.js.map → SchemaBuilderDrawer-CcsuQXAA.js.map} +1 -1
- package/dist/canvas.cjs +1 -1
- package/dist/canvas.js +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +2 -2
- package/dist/{index-BD74UunS.js → index-Bf1-wgQA.js} +2 -2
- package/dist/{index-BD74UunS.js.map → index-Bf1-wgQA.js.map} +1 -1
- package/dist/{index-B8W6oBhy.js → index-Cp4CA6tn.js} +2 -2
- package/dist/{index-B8W6oBhy.js.map → index-Cp4CA6tn.js.map} +1 -1
- package/dist/{index-DDo516bn.js → index-CvMXmKr6.js} +771 -770
- package/dist/index-CvMXmKr6.js.map +1 -0
- package/dist/{index-3DvBym9i.js → index-le3_BkKg.js} +2 -2
- package/dist/{index-3DvBym9i.js.map → index-le3_BkKg.js.map} +1 -1
- package/dist/{index-Da1aQdfo.js → index-rIRhggmY.js} +2 -2
- package/dist/{index-Da1aQdfo.js.map → index-rIRhggmY.js.map} +1 -1
- package/dist/index-yOtdNWwA.js +10 -0
- package/dist/index-yOtdNWwA.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +44 -0
- package/dist/index.js +132 -96
- package/dist/index.js.map +1 -1
- package/dist/{templateSkeletons-BG1SF0vl.js → templateSkeletons-BSE8YZ80.js} +2 -2
- package/dist/{templateSkeletons-BG1SF0vl.js.map → templateSkeletons-BSE8YZ80.js.map} +1 -1
- package/dist/{templateSkeletons-Bgq5hGIM.js → templateSkeletons-Ct26LDFe.js} +2 -2
- package/dist/{templateSkeletons-Bgq5hGIM.js.map → templateSkeletons-Ct26LDFe.js.map} +1 -1
- package/package.json +1 -1
- package/dist/index-CL2SnGNk.js +0 -10
- package/dist/index-CL2SnGNk.js.map +0 -1
- package/dist/index-DDo516bn.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CvMXmKr6.js","sources":["../src/FlowForm/DynamicFormRenderer/fieldRegistry.ts","../src/FlowForm/fieldTokens.ts","../src/FlowForm/DynamicFormRenderer/formulaUtils.ts","../src/FlowForm/fields/FieldLabel.tsx","../src/FlowForm/VariablePicker/chipSpan.ts","../src/FlowForm/VariablePicker/VariablePickerContext.tsx","../src/FlowForm/VariablePicker/VariablePicker.tsx","../src/FlowForm/fields/FormulaInput.tsx","../src/FlowForm/fields/TextField.tsx","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js","../node_modules/react-select/dist/index-641ee5b8.esm.js","../node_modules/memoize-one/dist/memoize-one.esm.js","../node_modules/react-select/dist/Select-ef7c0426.esm.js","../node_modules/react-select/dist/useStateManager-7e1e8489.esm.js","../node_modules/react-select/dist/useAsync-c64f5536.esm.js","../node_modules/react-select/async/dist/react-select-async.esm.js","../node_modules/react-select/dist/useCreatable-09aaeb9a.esm.js","../node_modules/react-select/creatable/dist/react-select-creatable.esm.js","../node_modules/react-select/async-creatable/dist/react-select-async-creatable.esm.js","../src/FlowForm/fields/FormulaOverlay.tsx","../src/FlowForm/options/OptionsResolversContext.tsx","../src/FlowForm/fields/SelectField.tsx","../src/FlowForm/fields/DescriptiveSelectField.tsx","../src/FlowForm/fields/ArrayField.tsx","../src/FlowForm/fields/FieldWrapper.tsx","../src/FlowForm/fields/SchemaField.tsx","../src/FlowForm/fields/NumberField.tsx","../src/FlowForm/fields/ToggleField.tsx","../src/FlowForm/fields/RadioGroupField.tsx","../src/FlowForm/fields/DateField.tsx","../src/FlowForm/fields/TagsField.tsx","../src/FlowForm/fields/SliderField.tsx","../src/FlowForm/fields/ColorField.tsx","../src/FlowForm/fields/FileField.tsx","../src/FlowForm/fields/LazyCodeMirror.tsx","../src/FlowForm/fields/JsonEditorField.tsx","../src/FlowForm/fields/CodeField.tsx","../src/FlowForm/fields/RichTextField.tsx","../src/FlowForm/fields/InfiniteSelectField.tsx","../src/FlowForm/DynamicFormRenderer/registerFieldTypes.ts","../node_modules/property-expr/index.js","../node_modules/tiny-case/index.js","../node_modules/toposort/index.js","../node_modules/yup/index.esm.js","../src/FlowForm/types/index.ts","../src/dataSourceRegistry/index.ts","../src/FlowForm/fields/TablePickerField.tsx","../src/FlowForm/registry.ts","../src/FlowForm/SchemaBuilder/buildValidationSchema.ts","../src/FlowForm/validation/buildFieldValidator.ts","../src/FlowForm/fields/ObjectField.tsx","../src/FlowForm/SchemaBuilder/TabsEditContext.tsx","../src/FlowForm/fields/TabsField.tsx","../src/FlowForm/DynamicFormRenderer/ConditionRow.tsx","../src/FlowForm/DynamicFormRenderer/FieldConfigContext.tsx","../src/FlowForm/DynamicFormRenderer/index.tsx"],"sourcesContent":["import type { ComponentType } from 'react';\nimport type { FieldDescriptor } from '../types';\nimport type { FormulaConfig } from '../types/formula';\n\nexport interface FieldComponentProps {\n field: FieldDescriptor;\n value: unknown;\n values: Record<string, unknown>;\n onChange: (value: unknown) => void;\n onBlur: () => void;\n error?: string;\n touched?: boolean;\n /** Current formula config map (host-owned). Passed down to formula-enabled fields. */\n formulaConfig?: FormulaConfig;\n /** Called by a field when its formula AST changes. Host app updates its state. */\n onFormulaConfigChange?: (config: FormulaConfig) => void;\n /**\n * When true: field renders label + input in a single horizontal row.\n * Used inside ObjectField groups for compact two-column mapping layout.\n */\n inlineLabel?: boolean;\n}\n\ntype FieldComponent = ComponentType<FieldComponentProps>;\n\nconst registry = new Map<string, FieldComponent>();\n\nexport const fieldRegistry = {\n register(type: string, component: FieldComponent): void {\n registry.set(type, component);\n },\n\n get(type: string): FieldComponent | undefined {\n return registry.get(type);\n },\n\n has(type: string): boolean {\n return registry.has(type);\n },\n\n /** List every registered field type. Used by the DEV-mode \"did you mean…\"\n * suggestion when a schema specifies an unknown `type`. */\n keys(): string[] {\n return Array.from(registry.keys());\n },\n};\n","// Single source of truth for all FlowForm field visual values.\n// Every field reads from here — change once, updates everywhere.\n\nexport const FF = {\n // Input dimensions\n INPUT_HEIGHT: 38,\n INPUT_PADDING: '0 12px',\n INPUT_FONT_SIZE: 14,\n\n // Border\n BORDER_RADIUS: 6,\n BORDER_COLOR: '#ced4da',\n BORDER_COLOR_HOVER: '#adb5bd',\n BORDER_COLOR_FOCUS: '#86b7fe',\n BORDER_COLOR_ERROR: '#dc3545',\n BORDER: '1px solid #ced4da',\n BORDER_ERROR: '1px solid #dc3545',\n\n // Focus ring — same as Bootstrap's form-control\n FOCUS_SHADOW: '0 0 0 3px rgba(13,110,253,0.18)',\n FOCUS_SHADOW_ERROR: '0 0 0 3px rgba(220,53,69,0.18)',\n\n // Colors\n COLOR_LABEL: '#212529',\n COLOR_PLACEHOLDER: 'rgba(0,0,0,0.38)',\n COLOR_HELPER: '#6c757d',\n COLOR_ERROR: '#dc3545',\n COLOR_DISABLED_BG: '#f8f9fa',\n COLOR_DISABLED_TEXT: 'rgba(0,0,0,0.38)',\n\n // Typography\n FONT_SIZE_LABEL: 13,\n FONT_SIZE_INPUT: 14,\n FONT_SIZE_HELPER: 12,\n FONT_WEIGHT_LABEL: 500,\n\n // Spacing\n LABEL_MB: 5,\n HELPER_MT: 4,\n FIELD_MB: 20,\n} as const;\n\n// Reusable style builders\n\nexport function inputStyle(opts: {\n hasError?: boolean;\n isDisabled?: boolean;\n extraStyle?: React.CSSProperties;\n}): React.CSSProperties {\n return {\n height: FF.INPUT_HEIGHT,\n width: '100%',\n padding: FF.INPUT_PADDING,\n fontSize: FF.INPUT_FONT_SIZE,\n fontFamily: 'inherit',\n color: opts.isDisabled ? FF.COLOR_DISABLED_TEXT : FF.COLOR_LABEL,\n background: opts.isDisabled ? FF.COLOR_DISABLED_BG : '#fff',\n border: opts.hasError ? FF.BORDER_ERROR : FF.BORDER,\n borderRadius: FF.BORDER_RADIUS,\n outline: 'none',\n boxSizing: 'border-box',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n cursor: opts.isDisabled ? 'not-allowed' : undefined,\n ...opts.extraStyle,\n };\n}\n\nexport function inputFocusHandlers(opts: { hasError?: boolean } = {}) {\n return {\n onFocus: (e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n e.currentTarget.style.borderColor = opts.hasError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR_FOCUS;\n e.currentTarget.style.boxShadow = opts.hasError ? FF.FOCUS_SHADOW_ERROR : FF.FOCUS_SHADOW;\n },\n onBlur: (e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n e.currentTarget.style.borderColor = opts.hasError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR;\n e.currentTarget.style.boxShadow = 'none';\n },\n };\n}\n\nexport function wrapperFocusHandlers(opts: { hasError?: boolean } = {}) {\n return {\n onFocus: (e: React.FocusEvent<HTMLDivElement>) => {\n e.currentTarget.style.borderColor = opts.hasError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR_FOCUS;\n e.currentTarget.style.boxShadow = opts.hasError ? FF.FOCUS_SHADOW_ERROR : FF.FOCUS_SHADOW;\n },\n onBlur: (e: React.FocusEvent<HTMLDivElement>) => {\n if (e.currentTarget.contains(e.relatedTarget as Node)) return;\n e.currentTarget.style.borderColor = opts.hasError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR;\n e.currentTarget.style.boxShadow = 'none';\n },\n };\n}\n\n// react-select styles aligned to FF tokens\nimport type { StylesConfig, GroupBase } from 'react-select';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyBase = any;\n\nexport function buildSelectStyles(\n hasError: boolean,\n isMulti?: boolean,\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n): StylesConfig<any, boolean, GroupBase<any>> {\n return {\n control: (base: AnyBase, state: { isFocused: boolean }) => ({\n ...base,\n minHeight: FF.INPUT_HEIGHT,\n height: isMulti ? undefined : FF.INPUT_HEIGHT,\n fontSize: FF.INPUT_FONT_SIZE,\n fontFamily: 'inherit',\n borderRadius: FF.BORDER_RADIUS,\n borderColor: hasError\n ? FF.BORDER_COLOR_ERROR\n : state.isFocused\n ? FF.BORDER_COLOR_FOCUS\n : FF.BORDER_COLOR,\n boxShadow: state.isFocused\n ? hasError ? FF.FOCUS_SHADOW_ERROR : FF.FOCUS_SHADOW\n : 'none',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n '&:hover': {\n borderColor: hasError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR_HOVER,\n },\n }),\n valueContainer: (base: AnyBase) => ({ ...base, padding: isMulti ? '1px 8px' : '0 8px', fontSize: FF.INPUT_FONT_SIZE }),\n input: (base: AnyBase) => ({ ...base, margin: 0, padding: 0, fontSize: FF.INPUT_FONT_SIZE }),\n placeholder: (base: AnyBase) => ({ ...base, color: FF.COLOR_PLACEHOLDER, fontSize: FF.INPUT_FONT_SIZE }),\n singleValue: (base: AnyBase) => ({ ...base, fontSize: FF.INPUT_FONT_SIZE, color: FF.COLOR_LABEL }),\n dropdownIndicator: (base: AnyBase) => ({ ...base, padding: '0 8px' }),\n clearIndicator: (base: AnyBase) => ({ ...base, padding: '0 4px' }),\n indicatorSeparator: (base: AnyBase) => ({ ...base, marginTop: 6, marginBottom: 6 }),\n option: (base: AnyBase, { isDisabled }: { isDisabled: boolean }) => ({\n ...base,\n fontSize: FF.INPUT_FONT_SIZE,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n }),\n menu: (base: AnyBase) => ({ ...base, borderRadius: FF.BORDER_RADIUS, zIndex: 9999 }),\n menuPortal: (base: AnyBase) => ({ ...base, zIndex: 9999 }),\n };\n}\n\n// Shared error text style\nexport const errorTextStyle: React.CSSProperties = {\n display: 'flex',\n color: FF.COLOR_ERROR,\n fontSize: FF.FONT_SIZE_HELPER,\n marginTop: FF.HELPER_MT,\n lineHeight: 1.4,\n};\n\n// Shared helper text style\nexport const helperTextStyle: React.CSSProperties = {\n color: FF.COLOR_HELPER,\n fontSize: FF.FONT_SIZE_HELPER,\n marginTop: FF.HELPER_MT,\n lineHeight: 1.4,\n};\n","/**\r\n * formulaUtils — AST-first formula utilities\r\n *\r\n * Source of truth: FormulaASTNode[]\r\n * Derived output:\r\n * serializeAST(nodes) — _DE_{_P(...)} string (config disabled)\r\n * serializeASTAsConfig(nodes) — _P(...) string (config enabled, DE wrapper stripped)\r\n *\r\n * Public API:\r\n * parseToAST(raw) — string → AST (for loading saved strings)\r\n * serializeAST(nodes) — AST → _DE_{_P(...)} string\r\n * serializeASTAsConfig(nodes) — AST → _P(...) string (no DE wrapper)\r\n * buildFieldConfig() — returns {} (presence marker for formulaConfig map)\r\n * buildFormulaPath() — builds bracket-safe paths from dynamic keys\r\n * extractLabel(path) — path string → chip display label\r\n * hasFormulaTokens(v) — quick check: does string contain any formula tokens?\r\n *\r\n * Legacy re-exports kept for backward compat (wrapFormula / unwrapFormula / isFormula).\r\n */\r\n\r\nimport type {\r\n FormulaASTNode,\r\n TextNode,\r\n PathRefNode,\r\n FieldFormulaConfig,\r\n ConditionConfig,\r\n ConditionNode,\r\n ConditionEntry,\r\n ConditionGroup,\r\n} from '../types/formula';\r\n\r\nexport type { FormulaASTNode, TextNode, PathRefNode, FieldFormulaConfig };\r\n\r\n// ─── Token types (kept for FormulaInput DOM layer) ────────────────────────────\r\n\r\nexport interface TextToken { type: 'text'; value: string }\r\nexport interface ChipToken {\r\n type: 'chip';\r\n expr: string;\r\n label: string;\r\n path: string;\r\n kind: 'de-expr' | 'path-ref';\r\n}\r\nexport type FormulaToken = TextToken | ChipToken;\r\n\r\n// ─── Regex ────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Full match — both _DE_{_P(...)} and standalone _P(...).\r\n * Used when formula config is ENABLED — both formats tokenize to chips.\r\n * Group 1 — path inside _DE_{_P('...')}\r\n * Group 2 — path inside standalone _P('...')\r\n */\r\nconst EXPR_RE = /_DE_\\{_P\\('([^']*)'\\)\\}|_P\\('([^']*)'\\)/g;\r\n\r\n/**\r\n * Restricted match — only _DE_{_P(...)}.\r\n * Used when formula config is DISABLED — plain _P('...') stays as text.\r\n * Group 1 — path inside _DE_{_P('...')}\r\n */\r\nconst DE_ONLY_RE = /_DE_\\{_P\\('([^']*)'\\)\\}/g;\r\n\r\n// ─── Label extraction ─────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Extract the display label from a path expression.\r\n * Prefers the last [\\\"key\\\"] bracket segment; falls back to the last dot-segment.\r\n *\r\n * 'data.user.[\\\"email\\\"]' → \"email\"\r\n * 'data.input.[\\\"groupAssignPolicy\\\"].[\\\"dmnKey\\\"]' → \"dmnKey\"\r\n * 'data.trigger.[\\\"assignee\\\"].[\\\"email\\\"]' → \"email\"\r\n */\r\nexport function extractLabel(path: string): string {\r\n // Match both [\"key\"] and [\\\"key\\\"] (backslash-escaped quotes in stored strings)\r\n const matches = [...path.matchAll(/\\[\\\\?\"([^\"\\\\]+)\\\\?\"\\]/g)];\r\n if (matches.length > 0) return matches[matches.length - 1][1];\r\n const parts = path.split('.');\r\n return parts[parts.length - 1] ?? path;\r\n}\r\n\r\nfunction escapeFormulaPathSegment(segment: string): string {\r\n return segment.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\r\n}\r\n\r\n/**\r\n * Build a bracket-notation path from a root and optional extra segments.\r\n * Each segment is wrapped in [\\\"...\\\"] so the path evaluator can handle\r\n * any key (camelCase, spaces, hyphens, etc.) uniformly.\r\n *\r\n * Examples:\r\n * buildFormulaPath('data.user', 'email')\r\n * → 'data.user.[\\\"email\\\"]'\r\n * buildFormulaPath('data.input', 'groupAssignPolicy', 'dmnKey')\r\n * → 'data.input.[\\\"groupAssignPolicy\\\"].[\\\"dmnKey\\\"]'\r\n * buildFormulaPath('data.trigger', 'assignee', 'email')\r\n * → 'data.trigger.[\\\"assignee\\\"].[\\\"email\\\"]'\r\n */\r\nexport function buildFormulaPath(root: string, ...segments: string[]): string {\r\n if (segments.length === 0) return root;\r\n return `${root}.${segments.map(s => `[\"${escapeFormulaPathSegment(s)}\"]`).join('.')}`;\r\n}\r\n\r\n// ─── Core: string → AST ───────────────────────────────────────────────────────\r\n\r\n/**\r\n * Parse a raw backend string into an AST node array.\r\n *\r\n * \"Hello _DE_{_P('data.input.[\\\"dmnKey\\\"]')} world\"\r\n * →\r\n * [\r\n * { type: 'text', value: 'Hello ' },\r\n * { type: 'path-ref', path: 'data.input.[\"dmnKey\"]', label: 'dmnKey' },\r\n * { type: 'text', value: ' world' },\r\n * ]\r\n */\r\n/**\r\n * Parse a raw backend string into an AST node array.\r\n *\r\n * configEnabled = false (default): only _DE_{_P(...)} tokens become chips.\r\n * _P('...') without the DE wrapper stays as plain text.\r\n * configEnabled = true: both _DE_{_P(...)} and _P('...') become chips.\r\n */\r\nexport function parseToAST(raw: string, configEnabled = false): FormulaASTNode[] {\r\n const re = new RegExp(\r\n configEnabled ? EXPR_RE.source : DE_ONLY_RE.source,\r\n 'g',\r\n );\r\n const nodes: FormulaASTNode[] = [];\r\n let last = 0;\r\n\r\n for (const m of (raw ?? '').matchAll(re)) {\r\n if (m.index! > last) {\r\n nodes.push({ type: 'text', value: raw.slice(last, m.index) });\r\n }\r\n // group 1 = _DE_{_P(...)}, group 2 = _P(...) (only present when configEnabled)\r\n const path = m[1] ?? m[2];\r\n nodes.push({ type: 'path-ref', path, label: extractLabel(path) });\r\n last = m.index! + m[0].length;\r\n }\r\n\r\n if (last < (raw ?? '').length) {\r\n nodes.push({ type: 'text', value: raw.slice(last) });\r\n }\r\n\r\n return nodes;\r\n}\r\n\r\n// ─── Core: AST → string ───────────────────────────────────────────────────────\r\n\r\n/**\r\n * Serialize an AST back to the backend expression string.\r\n * path-ref nodes always serialize as _DE_{_P('...')} (the evaluated form).\r\n *\r\n * [\r\n * { type: 'text', value: 'Hello ' },\r\n * { type: 'path-ref', path: 'data.input.[\"dmnKey\"]', label: 'dmnKey' },\r\n * ]\r\n * → \"Hello _DE_{_P('data.input.[\\\"dmnKey\\\"]')}\"\r\n */\r\nexport function serializeAST(nodes: FormulaASTNode[]): string {\r\n return nodes.map(serializeNode).join('');\r\n}\r\n\r\nfunction serializeNode(node: FormulaASTNode): string {\r\n switch (node.type) {\r\n case 'text': return node.value;\r\n case 'path-ref': return `_DE_{_P('${node.path}')}`;\r\n case 'concat': return node.values.map(serializeNode).join('');\r\n case 'function': return `_DE_{_FN_('${node.name}', ${node.args.map(serializeNode).join(', ')})}`;\r\n case 'condition':\r\n return `_DE_{_IF_(${serializeNode(node.if)}, ${serializeNode(node.then)}, ${serializeNode(node.else)})}`;\r\n }\r\n}\r\n\r\n// ─── serializeASTAsConfig ─────────────────────────────────────────────────────\r\n\r\n/**\r\n * Serialize AST to the formula-config-enabled format.\r\n * path-ref nodes → _P('...') (no _DE_ wrapper).\r\n * Used when formulaConfig toggle is ON.\r\n */\r\nexport function serializeASTAsConfig(nodes: FormulaASTNode[]): string {\r\n return nodes.map(serializeNodeAsConfig).join('');\r\n}\r\n\r\nfunction serializeNodeAsConfig(node: FormulaASTNode): string {\r\n switch (node.type) {\r\n case 'text': return node.value;\r\n case 'path-ref': return `_P('${node.path}')`;\r\n case 'concat': return node.values.map(serializeNodeAsConfig).join('');\r\n case 'function': return `_DE_{_FN_('${node.name}', ${node.args.map(serializeNodeAsConfig).join(', ')})}`;\r\n case 'condition':\r\n return `_DE_{_IF_(${serializeNodeAsConfig(node.if)}, ${serializeNodeAsConfig(node.then)}, ${serializeNodeAsConfig(node.else)})}`;\r\n }\r\n}\r\n\r\n// ─── Build a FieldFormulaConfig marker ────────────────────────────────────────\r\n\r\n/**\r\n * Returns an empty presence-marker object {}.\r\n * The backend uses the key's existence in FormulaConfig to know\r\n * the field value was serialized as _P('...') rather than _DE_{_P('...')}.\r\n */\r\nexport function buildFieldConfig(): FieldFormulaConfig {\r\n return {} as FieldFormulaConfig;\r\n}\r\n\r\n// ─── Quick predicates ─────────────────────────────────────────────────────────\r\n\r\nconst VALUELESS_CONDITION_OPERATORS = new Set([\r\n 'isPresent',\r\n 'isNotPresent',\r\n 'isEmpty',\r\n 'isNotEmpty',\r\n]);\r\n\r\nexport interface EvaluationConditionEntry {\r\n field: string;\r\n operator: string;\r\n value?: string;\r\n connector?: 'and' | 'or';\r\n}\r\n\r\nexport interface EvaluationConditionGroup {\r\n type: 'group';\r\n entries: EvaluationConditionNode[];\r\n connector?: 'and' | 'or';\r\n}\r\n\r\nexport type EvaluationConditionNode = EvaluationConditionEntry | EvaluationConditionGroup;\r\n\r\nexport interface EvaluationPayload {\r\n values: Record<string, unknown>;\r\n conditions?: Record<string, EvaluationConditionNode[]>;\r\n}\r\n\r\nfunction isConditionGroup(node: ConditionNode): node is ConditionGroup {\r\n return (node as ConditionGroup).type === 'group';\r\n}\r\n\r\nfunction conditionOperatorNeedsValue(operator: string): boolean {\r\n return !VALUELESS_CONDITION_OPERATORS.has(operator);\r\n}\r\n\r\nfunction toPathReference(value: string): string {\r\n const trimmed = value.trim();\r\n const deMatch = trimmed.match(/^_DE_\\{_P\\('([^']*)'\\)\\}$/);\r\n if (deMatch) return `_P('${deMatch[1]}')`;\r\n if (/^_P\\('[^']*'\\)$/.test(trimmed)) return trimmed;\r\n return value;\r\n}\r\n\r\nfunction serializeConditionEntry(entry: ConditionEntry): EvaluationConditionEntry {\r\n const result: EvaluationConditionEntry = {\r\n field: toPathReference(entry.field),\r\n operator: entry.operator,\r\n ...(entry.connector && { connector: entry.connector }),\r\n };\r\n\r\n if (conditionOperatorNeedsValue(entry.operator)) {\r\n result.value = entry.value ?? '';\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction serializeConditionNode(node: ConditionNode): EvaluationConditionNode {\r\n if (isConditionGroup(node)) {\r\n return {\r\n type: 'group',\r\n entries: node.entries.map(serializeConditionNode),\r\n ...(node.connector && { connector: node.connector }),\r\n };\r\n }\r\n\r\n return serializeConditionEntry(node);\r\n}\r\n\r\nexport function buildEvaluationPayload({\r\n values,\r\n conditionConfig,\r\n}: {\r\n values: Record<string, unknown>;\r\n conditionConfig?: ConditionConfig;\r\n}): EvaluationPayload {\r\n const conditions = conditionConfig\r\n ? Object.fromEntries(\r\n Object.entries(conditionConfig)\r\n .filter(([, nodes]) => nodes.length > 0)\r\n .map(([fieldId, nodes]) => [fieldId, nodes.map(serializeConditionNode)])\r\n )\r\n : {};\r\n\r\n return {\r\n values,\r\n ...(Object.keys(conditions).length > 0 && { conditions }),\r\n };\r\n}\r\n\r\n// ─── Condition expression serializer ─────────────────────────────────────────\r\n\r\n/** Numeric-looking values should not be quoted so the backend evaluates them as numbers. */\r\nfunction lit(v: string): string {\r\n return v !== '' && !isNaN(Number(v)) ? v : `'${v}'`;\r\n}\r\n\r\nconst OPERATOR_EXPR: Record<string, (ref: string, val: string) => string> = {\r\n equals: (r, v) => `${r} == ${lit(v)}`,\r\n notEquals: (r, v) => `${r} != ${lit(v)}`,\r\n contains: (r, v) => `contains(${r}, ${lit(v)})`,\r\n notContains: (r, v) => `!contains(${r}, ${lit(v)})`,\r\n startsWith: (r, v) => `startsWith(${r}, ${lit(v)})`,\r\n endsWith: (r, v) => `endsWith(${r}, ${lit(v)})`,\r\n isPresent: (r) => `isPresent(${r})`,\r\n isNotPresent: (r) => `isNotPresent(${r})`,\r\n greaterThan: (r, v) => `${r} > ${lit(v)}`,\r\n lessThan: (r, v) => `${r} < ${lit(v)}`,\r\n greaterOrEquals: (r, v) => `${r} >= ${lit(v)}`,\r\n lessOrEquals: (r, v) => `${r} <= ${lit(v)}`,\r\n};\r\n\r\nfunction nodeToExpression(node: ConditionNode): string {\r\n if (isConditionGroup(node)) {\r\n const inner = nodesToExpression(node.entries);\r\n return `(${inner})`;\r\n }\r\n\r\n const ref = toPathReference(node.field) || `_P('${node.field}')`;\r\n const fn = OPERATOR_EXPR[node.operator];\r\n if (!fn) return `${ref} ${node.operator} '${node.value ?? ''}'`;\r\n return fn(ref, node.value ?? '');\r\n}\r\n\r\nfunction nodesToExpression(nodes: ConditionNode[]): string {\r\n return nodes\r\n .map((node, i) => {\r\n const expr = nodeToExpression(node);\r\n if (i === 0) return expr;\r\n const connector = node.connector === 'or' ? ' || ' : ' && ';\r\n return connector + expr;\r\n })\r\n .join('');\r\n}\r\n\r\n/**\r\n * Serialize a ConditionConfig into a map of field → expression string.\r\n *\r\n * Example output:\r\n * {\r\n * email: \"isNotPresent(_P('data.input.[\\\"email\\\"]'))\",\r\n * firstName: \"_P('data.input.[\\\"firstName\\\"]') == 'abhi'\"\r\n * }\r\n */\r\nexport function serializeConditionExpressions(\r\n conditionConfig: ConditionConfig,\r\n): Record<string, string> {\r\n return Object.fromEntries(\r\n Object.entries(conditionConfig)\r\n .filter(([, nodes]) => nodes.length > 0)\r\n .map(([fieldId, nodes]) => [fieldId, nodesToExpression(nodes)]),\r\n );\r\n}\r\n\r\n/** True if the string contains at least one formula token. */\r\nexport function hasFormulaTokens(value: unknown): boolean {\r\n return typeof value === 'string' && /_DE_\\{_P\\('[^']*'\\)\\}|_P\\('[^']*'\\)/.test(value);\r\n}\r\n\r\n/** True if the AST contains at least one non-text node. */\r\nexport function astHasRefs(nodes: FormulaASTNode[]): boolean {\r\n return nodes.some((n) => n.type !== 'text');\r\n}\r\n\r\n// ─── DOM token layer (used by FormulaInput) ───────────────────────────────────\r\n\r\n/**\r\n * Convert AST nodes to the flat FormulaToken[] the DOM layer uses.\r\n * This keeps FormulaInput decoupled from the AST type directly.\r\n */\r\nexport function astToTokens(nodes: FormulaASTNode[], configEnabled = false): FormulaToken[] {\r\n const tokens: FormulaToken[] = [];\r\n for (const node of nodes) {\r\n if (node.type === 'text') {\r\n if (node.value) tokens.push({ type: 'text', value: node.value });\r\n } else if (node.type === 'path-ref') {\r\n tokens.push({\r\n type: 'chip',\r\n expr: configEnabled ? `_P('${node.path}')` : `_DE_{_P('${node.path}')}`,\r\n label: node.label,\r\n path: node.path,\r\n kind: configEnabled ? 'path-ref' : 'de-expr',\r\n });\r\n } else {\r\n // concat / function / condition — serialize to a single chip for now\r\n const expr = serializeNode(node);\r\n tokens.push({ type: 'chip', expr, label: expr.slice(0, 20) + '…', path: '', kind: 'de-expr' });\r\n }\r\n }\r\n return tokens;\r\n}\r\n\r\n/** Parse a raw string to the flat token list (used for paste/input).\r\n * configEnabled mirrors the formula config toggle state. */\r\nexport function tokenize(raw: string, configEnabled = false): FormulaToken[] {\r\n return astToTokens(parseToAST(raw, configEnabled), configEnabled);\r\n}\r\n\r\n// ─── Legacy helpers (backward compat) ────────────────────────────────────────\r\n\r\nconst FORMULA_PREFIX = '_DE_{_P(';\r\nconst FORMULA_SUFFIX = ')}';\r\n\r\nexport function isFormula(value: unknown): value is string {\r\n return typeof value === 'string' && value.startsWith(FORMULA_PREFIX) && value.endsWith(FORMULA_SUFFIX);\r\n}\r\n\r\nexport function wrapFormula(expression: string): string {\r\n return `${FORMULA_PREFIX}'${expression}'${FORMULA_SUFFIX}`;\r\n}\r\n\r\nexport function unwrapFormula(value: string): string {\r\n const inner = value.slice(FORMULA_PREFIX.length, -FORMULA_SUFFIX.length);\r\n return inner.replace(/^['\"]|['\"]$/g, '');\r\n}\r\n\r\nexport function stripFormulaTokens(value: string): string {\r\n return value.replace(/_DE_\\{_P\\('[^']*'\\)\\}/g, '');\r\n}\r\n","import { IconButton, Tooltip } from '@mui/material';\r\nimport { MdInfoOutline } from 'react-icons/md';\r\n\r\ninterface FieldLabelProps {\r\n label?: string;\r\n required?: boolean;\r\n showOptional?: boolean;\r\n info?: string;\r\n htmlFor?: string;\r\n dataTestId?: string;\r\n}\r\n\r\nexport function FieldLabel({ label, required, showOptional, info, htmlFor, dataTestId }: FieldLabelProps) {\r\n if (!label) return null;\r\n\r\n return (\r\n <label\r\n htmlFor={htmlFor}\r\n data-testid={dataTestId ? `${dataTestId}-label` : undefined}\r\n className=\"ff-form-text-14 ff-form-text-dark ff-form-fw-medium ff-form-mb-1 ff-form-d-flex ff-form-align-start ff-form-flex-wrap ff-form-gap-1\"\r\n style={{ fontSize: 14, lineHeight: 1.4 }}\r\n >\r\n <span style={{ overflowWrap: 'anywhere' }}>{label}</span>\r\n {required && <span className=\"ff-form-text-danger\" aria-hidden=\"true\"> *</span>}\r\n {showOptional && !required && (\r\n <span className=\"ff-form-text-12 ff-form-ps-1 ff-form-text-body-tertiary\"> (Optional)</span>\r\n )}\r\n {info && (\r\n <Tooltip title={info} arrow placement=\"top\">\r\n <IconButton\r\n size=\"small\"\r\n color=\"inherit\"\r\n className=\"ff-form-p-0\"\r\n tabIndex={-1}\r\n sx={{ mt: '1px', flexShrink: 0 }}\r\n >\r\n <MdInfoOutline size={14} />\r\n </IconButton>\r\n </Tooltip>\r\n )}\r\n </label>\r\n );\r\n}\r\n","/**\n * Single source of truth for the variable-chip DOM element.\n *\n * Used by FormulaInput (inserting from drag/paste/sync) and\n * VariablePickerContext (inserting from picker click). Any style change here\n * applies everywhere — preventing the visual drift that occurred when three\n * copies of this function existed in parallel.\n */\n\nconst CHIP_STYLE: Partial<CSSStyleDeclaration> = {\n display: 'inline-flex',\n alignItems: 'center',\n background: '#ede9fe',\n color: '#5b21b6',\n border: '1px solid #ddd6fe',\n borderRadius: '4px',\n padding: '0px 6px',\n fontSize: 'inherit',\n fontWeight: '500',\n lineHeight: '1.6',\n margin: '0 2px',\n verticalAlign: 'middle',\n cursor: 'default',\n whiteSpace: 'nowrap',\n fontFamily: 'inherit',\n};\n\nconst PREFIX_CSS = 'font-family:monospace;font-size:inherit;opacity:0.5;margin-right:2px;';\n\nexport function buildChipSpan(args: { expr: string; label: string; path: string }): HTMLSpanElement {\n const { expr, label, path } = args;\n const span = document.createElement('span');\n span.contentEditable = 'false';\n span.dataset.expr = expr;\n span.dataset.label = label;\n span.dataset.path = path;\n\n const prefix = document.createElement('span');\n prefix.textContent = '{ } ';\n prefix.style.cssText = PREFIX_CSS;\n span.appendChild(prefix);\n span.appendChild(document.createTextNode(label));\n\n Object.assign(span.style, CHIP_STYLE);\n return span;\n}\n\n/** Build the canonical formula expression for a given variable path. */\nexport function buildPathExpr(path: string): string {\n return `_DE_{_P('${path}')}`;\n}\n","/**\r\n * VariablePickerContext\r\n *\r\n * Connects the VariablePicker panel to any FormulaInput on the page.\r\n *\r\n * Flow:\r\n * 1. FormulaInput onFocus → registers itself via registerField()\r\n * 2. FormulaInput {} btn → calls openPicker()\r\n * 3. VariablePicker item click / drop → insertVariable(path, label)\r\n * 4. Context finds active editor ref → injects chip at saved caret position\r\n */\r\n\r\nimport React, { createContext, useCallback, useContext, useRef, useState } from 'react';\r\nimport { buildChipSpan as buildSharedChipSpan, buildPathExpr } from './chipSpan';\r\n\r\n// ─── Variable tree types ──────────────────────────────────────────────────────\r\n\r\nexport interface VariableItem {\r\n /** Display label shown in the picker */\r\n label: string;\r\n /** Formula path used to build _DE_{_P('...')} / _P('...') */\r\n path: string;\r\n /** Optional description shown below the label */\r\n description?: string;\r\n /** Nested sub-items — renders as an expandable group in the picker */\r\n children?: VariableItem[];\r\n}\r\n\r\nexport interface VariableGroup {\r\n label: string;\r\n icon?: React.ReactNode;\r\n items: VariableItem[];\r\n}\r\n\r\n// ─── Active field registration ────────────────────────────────────────────────\r\n\r\nexport interface ActiveField {\r\n /** The contenteditable div inside FormulaInput */\r\n editorRef: React.RefObject<HTMLDivElement | null>;\r\n /** Saved Range from the last selection — restored before inserting */\r\n savedRange: Range | null;\r\n fieldId: string;\r\n /** Optionally, the field can provide a direct way to insert a variable into its state */\r\n onInsert?: (path: string, label: string) => void;\r\n}\r\n\r\n// ─── Context shape ────────────────────────────────────────────────────────────\r\n\r\ninterface VariablePickerContextValue {\r\n groups: VariableGroup[];\r\n isOpen: boolean;\r\n openPicker: () => void;\r\n closePicker: () => void;\r\n /**\r\n * Called by FormulaOverlay when formula mode is toggled ON or OFF.\r\n * Pass the anchor HTMLElement (the toggle button) when turning ON so the\r\n * picker can position itself next to it.\r\n */\r\n notifyFormulaToggle: (on: boolean, anchor?: HTMLElement | null) => void;\r\n /** FormulaInput calls this on focus to register as the active target */\r\n registerField: (field: ActiveField) => void;\r\n /** FormulaInput calls this on selection change to save cursor position */\r\n saveRange: (range: Range | null) => void;\r\n /** Picker calls this on item click or drop — inserts chip into active field */\r\n insertVariable: (path: string, label: string) => void;\r\n /** Currently active field id — used by FormulaInput to show drop-valid state */\r\n activeFieldId: string | null;\r\n /** Signal that a field has been focused/clicked — used to auto-open picker panel */\r\n notifyFieldFocus: (fieldId: string, anchor?: HTMLElement | null) => void;\r\n /** DOM element the popover should anchor to */\r\n anchorEl: HTMLElement | null;\r\n}\r\n\r\nconst VariablePickerContext = createContext<VariablePickerContextValue | null>(null);\r\n\r\n// ─── Provider ─────────────────────────────────────────────────────────────────\r\n\r\nexport interface VariablePickerProviderProps {\r\n groups: VariableGroup[];\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function VariablePickerProvider({ groups, children }: VariablePickerProviderProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [activeFieldId, setActiveFieldId] = useState<string | null>(null);\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\r\n const activeFieldRef = useRef<ActiveField | null>(null);\r\n /** Counts how many fields are currently in formula mode. */\r\n const formulaActiveCountRef = useRef(0);\r\n\r\n const openPicker = useCallback(() => setIsOpen(true), []);\r\n const closePicker = useCallback(() => { setIsOpen(false); setAnchorEl(null); }, []);\r\n\r\n const notifyFormulaToggle = useCallback((on: boolean, anchor?: HTMLElement | null) => {\r\n if (on) {\r\n formulaActiveCountRef.current += 1;\r\n // Always update anchor to help positioning if needed, but do NOT auto-open the panel\r\n if (anchor) setAnchorEl(anchor);\r\n } else {\r\n formulaActiveCountRef.current = Math.max(0, formulaActiveCountRef.current - 1);\r\n if (formulaActiveCountRef.current === 0) { setIsOpen(false); setAnchorEl(null); }\r\n }\r\n }, []);\r\n\r\n const registerField = useCallback((field: ActiveField) => {\r\n activeFieldRef.current = field;\r\n setActiveFieldId(field.fieldId);\r\n }, []);\r\n\r\n const saveRange = useCallback((range: Range | null) => {\r\n if (activeFieldRef.current) {\r\n activeFieldRef.current.savedRange = range;\r\n }\r\n }, []);\r\n\r\n const insertVariable = useCallback((path: string, label: string) => {\r\n const active = activeFieldRef.current;\r\n if (!active) return;\r\n\r\n if (active.onInsert) {\r\n active.onInsert(path, label);\r\n return;\r\n }\r\n\r\n const editor = active.editorRef.current;\r\n if (!editor) return;\r\n editor.focus();\r\n\r\n // Build the chip span\r\n const chip = buildChipSpan(path, label);\r\n\r\n // Restore saved range or use current selection or append\r\n let range: Range | null = active.savedRange;\r\n\r\n if (!range) {\r\n const sel = window.getSelection();\r\n if (sel && sel.rangeCount > 0) {\r\n range = sel.getRangeAt(0);\r\n // Ensure the range is inside our editor\r\n if (!editor.contains(range.commonAncestorContainer)) {\r\n range = null;\r\n }\r\n }\r\n }\r\n\r\n if (!range) {\r\n // Fallback: append at end\r\n range = document.createRange();\r\n range.selectNodeContents(editor);\r\n range.collapse(false);\r\n }\r\n\r\n range.deleteContents();\r\n range.insertNode(chip);\r\n range.setStartAfter(chip);\r\n range.collapse(true);\r\n\r\n const sel = window.getSelection();\r\n sel?.removeAllRanges();\r\n sel?.addRange(range);\r\n\r\n // Save the new range\r\n if (activeFieldRef.current) {\r\n activeFieldRef.current.savedRange = range.cloneRange();\r\n }\r\n\r\n // Trigger input event so FormulaInput re-parses and emits the new AST\r\n editor.dispatchEvent(new Event('input', { bubbles: true }));\r\n }, []);\r\n\r\n return (\r\n <VariablePickerContext.Provider value={{\r\n groups,\r\n isOpen,\r\n openPicker,\r\n closePicker,\r\n notifyFormulaToggle,\r\n registerField,\r\n saveRange,\r\n insertVariable,\r\n activeFieldId,\r\n notifyFieldFocus: (fid, anchor) => {\r\n setActiveFieldId(fid);\r\n if (anchor) setAnchorEl(anchor);\r\n // Workato style: Opening the field focus automatically shows the data panel\r\n setIsOpen(true);\r\n },\r\n anchorEl,\r\n }}>\r\n {children}\r\n </VariablePickerContext.Provider>\r\n );\r\n}\r\n\r\n// ─── Hook ─────────────────────────────────────────────────────────────────────\r\n\r\nexport function useVariablePickerContext(): VariablePickerContextValue | null {\r\n return useContext(VariablePickerContext);\r\n}\r\n\r\n// Local helper — uses the shared chipSpan factory plus canonical expr.\r\nfunction buildChipSpan(path: string, label: string): HTMLSpanElement {\r\n return buildSharedChipSpan({ expr: buildPathExpr(path), label, path });\r\n}\r\n","/**\n * VariablePicker — floating panel for browsing and inserting variables.\n *\n * Items are both clickable (insert at saved cursor) and draggable (drop onto FormulaInput).\n * Drag data: { path, label } serialized as JSON in 'application/x-flowforge-variable'.\n */\n\nimport React, { useState, useMemo, useEffect, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n Box, Typography, InputBase, Tooltip,\n Collapse, Divider,\n} from '@mui/material';\nimport {\n MdSearch, MdClose, MdKeyboardArrowRight,\n MdDataObject,\n} from 'react-icons/md';\nimport { useVariablePickerContext } from './VariablePickerContext';\nimport type { VariableGroup, VariableItem } from './VariablePickerContext';\n\n// ─── Drag data key ────────────────────────────────────────────────────────────\n\nexport const DRAG_DATA_KEY = 'application/x-flowforge-variable';\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nexport interface VariablePickerProps {\n /** Panel width in px. Default: 300 */\n width?: number;\n /** Title shown in panel header. Default: 'Smart Values' */\n title?: string;\n /**\n * 'drawer' — always visible as a sidebar panel (default).\n * 'popover' — absolutely positioned, shown/hidden via isOpen.\n */\n mode?: 'drawer' | 'popover';\n /**\n * Render the panel via a body-level Portal and fix-position it next to\n * the nearest MUI Drawer (`.MuiDrawer-paper`) so it escapes clipping\n * parents. Only meaningful for `mode='drawer'`; popover mode already\n * portals itself. Default: false.\n */\n floating?: boolean;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction flattenItems(items: VariableItem[]): VariableItem[] {\n return items.flatMap((item) =>\n item.children ? [item, ...flattenItems(item.children)] : [item],\n );\n}\n\nfunction matchesSearch(item: VariableItem, query: string): boolean {\n const q = query.toLowerCase();\n return (\n item.label.toLowerCase().includes(q) ||\n item.path.toLowerCase().includes(q) ||\n (item.description?.toLowerCase().includes(q) ?? false)\n );\n}\n\n// ─── Single draggable variable row ───────────────────────────────────────────\n\nfunction VariableRow({ item }: { item: VariableItem }) {\n const ctx = useVariablePickerContext();\n const [dragging, setDragging] = useState(false);\n\n const handleDragStart = (e: React.DragEvent) => {\n e.dataTransfer.effectAllowed = 'copy';\n e.dataTransfer.setData(DRAG_DATA_KEY, JSON.stringify({ path: item.path, label: item.label }));\n\n // Custom drag ghost — looks like the chip that will be inserted\n const ghost = document.createElement('span');\n ghost.textContent = `{ } ${item.label}`;\n Object.assign(ghost.style, {\n position: 'fixed',\n top: '-200px',\n left: '-200px',\n display: 'inline-flex',\n alignItems: 'center',\n background: '#ede9fe',\n color: '#5b21b6',\n border: '1px solid #ddd6fe',\n borderRadius: '4px',\n padding: '2px 8px',\n fontSize: '13px',\n fontWeight: '500',\n fontFamily: 'inherit',\n whiteSpace: 'nowrap',\n boxShadow: '0 2px 8px rgba(99,102,241,0.25)',\n });\n document.body.appendChild(ghost);\n e.dataTransfer.setDragImage(ghost, ghost.offsetWidth / 2, ghost.offsetHeight / 2);\n // Remove after drag starts\n requestAnimationFrame(() => document.body.removeChild(ghost));\n\n setDragging(true);\n };\n\n return (\n <Tooltip title={item.path} placement=\"left\" enterDelay={600}>\n <Box\n draggable\n onDragStart={handleDragStart}\n onDragEnd={() => setDragging(false)}\n onClick={() => ctx?.insertVariable(item.path, item.label)}\n sx={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: 1,\n px: 1.5,\n py: 0.75,\n borderRadius: '6px',\n cursor: 'grab',\n opacity: dragging ? 0.4 : 1,\n transition: 'background 0.12s, opacity 0.12s',\n '&:hover': { bgcolor: 'rgba(99,102,241,0.07)' },\n '&:active': { cursor: 'grabbing' },\n }}\n >\n {/* Variable icon */}\n <Box sx={{\n mt: '2px', flexShrink: 0,\n color: '#6366f1',\n display: 'flex', alignItems: 'center',\n }}>\n <MdDataObject size={14} />\n </Box>\n\n <Box sx={{ minWidth: 0 }}>\n <Typography sx={{\n fontSize: 13, fontWeight: 500,\n color: '#0f172a', lineHeight: 1.35,\n overflowWrap: 'anywhere',\n }}>\n {item.label}\n </Typography>\n {item.description && (\n <Typography sx={{\n fontSize: 11, color: '#64748b',\n lineHeight: 1.4, mt: 0.2,\n overflowWrap: 'anywhere',\n }}>\n {item.description}\n </Typography>\n )}\n </Box>\n </Box>\n </Tooltip>\n );\n}\n\n// ─── Collapsible group ────────────────────────────────────────────────────────\n\nfunction VariableGroupSection({\n group,\n searchQuery,\n}: {\n group: VariableGroup;\n searchQuery: string;\n}) {\n const [open, setOpen] = useState(true);\n\n const visibleItems = useMemo(() => {\n const leaves = flattenItems(group.items).filter((i) => !i.children);\n return searchQuery ? leaves.filter((i) => matchesSearch(i, searchQuery)) : group.items;\n }, [group.items, searchQuery]);\n\n if (searchQuery && visibleItems.length === 0) return null;\n\n return (\n <Box>\n {/* Group header */}\n {!searchQuery && (\n <Box\n onClick={() => setOpen((v) => !v)}\n sx={{\n display: 'flex', alignItems: 'center', gap: 0.5,\n px: 1.5, py: 0.75,\n cursor: 'pointer',\n '&:hover': { bgcolor: 'rgba(0,0,0,0.03)' },\n }}\n >\n <Box sx={{\n color: '#94a3b8',\n transform: open ? 'rotate(90deg)' : 'rotate(0deg)',\n transition: 'transform 0.15s',\n display: 'flex',\n }}>\n <MdKeyboardArrowRight size={14} />\n </Box>\n {group.icon && (\n <Box sx={{ color: '#64748b', display: 'flex', mr: 0.25 }}>\n {group.icon}\n </Box>\n )}\n <Typography sx={{\n fontSize: 11, fontWeight: 700,\n color: '#64748b', textTransform: 'uppercase',\n letterSpacing: 0.6, flex: 1,\n }}>\n {group.label}\n </Typography>\n </Box>\n )}\n\n <Collapse in={open || !!searchQuery}>\n <Box sx={{ pb: 0.5 }}>\n {visibleItems.map((item, i) =>\n item.children ? (\n // Nested group — recurse\n <VariableGroupSection\n key={i}\n group={{ label: item.label, items: item.children }}\n searchQuery={searchQuery}\n />\n ) : (\n <VariableRow key={i} item={item} />\n ),\n )}\n </Box>\n </Collapse>\n </Box>\n );\n}\n\n// ─── Main panel ───────────────────────────────────────────────────────────────\n\nexport function VariablePicker({\n width = 300,\n title = 'Values',\n mode = 'drawer',\n floating = false,\n}: VariablePickerProps) {\n const ctx = useVariablePickerContext();\n const [search, setSearch] = useState('');\n const [pos, setPos] = useState<{ top: number; left: number } | null>(null);\n const panelRef = useRef<HTMLDivElement | null>(null);\n\n // Close on click-outside — popover always, drawer only when `floating`\n // (a floating drawer-panel has no obvious \"inside the layout\" boundary,\n // so blur-to-dismiss matches user expectations).\n useEffect(() => {\n const wantsDismiss = mode === 'popover' || (mode === 'drawer' && floating);\n if (!wantsDismiss || !ctx?.isOpen) return;\n function handleMouseDown(e: MouseEvent) {\n const target = e.target as Node;\n const insidePanel = panelRef.current?.contains(target);\n const insideAnchor = ctx?.anchorEl?.contains(target);\n if (!insidePanel && !insideAnchor) ctx?.closePicker();\n }\n document.addEventListener('mousedown', handleMouseDown);\n return () => document.removeEventListener('mousedown', handleMouseDown);\n }, [mode, floating, ctx?.isOpen, ctx?.anchorEl, ctx]);\n\n // Recalculate position whenever anchorEl or isOpen changes — popover always\n // computes its own; floating drawer mode also needs a position so it can be\n // fix-anchored to the left of the host MUI Drawer.\n useEffect(() => {\n const wantsPos = mode === 'popover' || (mode === 'drawer' && floating);\n if (!wantsPos || !ctx?.anchorEl || !ctx.isOpen) { setPos(null); return; }\n const buttonRect = ctx.anchorEl.getBoundingClientRect();\n const panelWidth = width;\n const panelHeight = 440;\n\n // Walk up the DOM to find the best container to anchor left-of:\n // Priority: MuiDrawer-paper → MuiPaper-root → MuiDialog-paper → nearest block ancestor\n const container = (\n ctx.anchorEl.closest('.MuiDrawer-paper') ||\n ctx.anchorEl.closest('.MuiDialog-paper') ||\n ctx.anchorEl.closest('.MuiPaper-root')\n ) as HTMLElement | null;\n\n const anchorRect = container ? container.getBoundingClientRect() : buttonRect;\n\n const spaceLeft = anchorRect.left - 8;\n const spaceRight = window.innerWidth - anchorRect.right - 8;\n const left = spaceLeft >= panelWidth\n ? anchorRect.left - panelWidth - 8 // preferred: left of container\n : spaceRight >= panelWidth\n ? anchorRect.right + 8 // flip: right of container\n : Math.max(8, anchorRect.left - panelWidth - 8); // best effort\n\n // Vertically: top-align with the clicked button, clamp to viewport\n const rawTop = buttonRect.top;\n const top = Math.min(rawTop, window.innerHeight - panelHeight - 8);\n setPos({ top, left });\n }, [mode, ctx?.anchorEl, ctx?.isOpen, width]);\n\n if (!ctx) return null;\n if (mode === 'popover' && !ctx.isOpen) return null;\n if (mode === 'drawer' && floating && !ctx.isOpen) return null;\n\n const hasResults = ctx.groups.some((g) => {\n if (!search) return true;\n return flattenItems(g.items).some((i) => !i.children && matchesSearch(i, search));\n });\n\n const panel = (\n <Box\n ref={panelRef}\n sx={{\n width,\n flexShrink: 0,\n display: 'flex',\n flexDirection: 'column',\n bgcolor: '#1e2130',\n borderRadius: '10px',\n border: '1px solid rgba(255,255,255,0.08)',\n boxShadow: '0 8px 32px rgba(0,0,0,0.28)',\n overflow: 'hidden',\n color: '#e2e8f0',\n maxHeight: 440,\n ...(mode === 'popover' && pos\n ? { position: 'fixed', top: pos.top, left: pos.left, zIndex: 1400 }\n : mode === 'popover'\n ? { display: 'none' }\n : mode === 'drawer' && floating && pos\n ? { position: 'fixed', top: pos.top, left: pos.left, zIndex: 1400 }\n : mode === 'drawer' && floating\n ? { display: 'none' }\n : {}),\n }}\n >\n {/* ── Header ── */}\n <Box sx={{\n display: 'flex', alignItems: 'center', gap: 1,\n px: 2, pt: 1.75, pb: 1.25,\n borderBottom: '1px solid rgba(255,255,255,0.07)',\n flexShrink: 0,\n }}>\n <MdDataObject size={16} color=\"#6366f1\" />\n <Typography sx={{ fontSize: 13, fontWeight: 700, flex: 1, color: '#e2e8f0' }}>\n {title}\n </Typography>\n {(mode === 'popover' || (mode === 'drawer' && floating)) && (\n <Box\n component=\"button\"\n type=\"button\"\n onClick={ctx.closePicker}\n sx={{\n background: 'none', border: 'none', cursor: 'pointer',\n color: '#94a3b8', display: 'flex', p: 0.25, borderRadius: '4px',\n '&:hover': { color: '#e2e8f0', bgcolor: 'rgba(255,255,255,0.08)' },\n }}\n >\n <MdClose size={15} />\n </Box>\n )}\n </Box>\n\n {/* ── Search ── */}\n <Box sx={{ px: 1.5, py: 1, flexShrink: 0 }}>\n <Box sx={{\n display: 'flex', alignItems: 'center', gap: 0.75,\n bgcolor: 'rgba(255,255,255,0.07)', borderRadius: '7px',\n px: 1.25, py: 0.6,\n border: '1px solid rgba(255,255,255,0.08)',\n '&:focus-within': { border: '1px solid rgba(99,102,241,0.5)' },\n }}>\n <MdSearch size={15} color=\"#64748b\" />\n <InputBase\n placeholder=\"Search variables...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n sx={{\n fontSize: 12, flex: 1,\n color: '#e2e8f0',\n '& input::placeholder': { color: '#64748b', opacity: 1 },\n }}\n />\n {search && (\n <Box\n component=\"button\"\n type=\"button\"\n onClick={() => setSearch('')}\n sx={{\n background: 'none', border: 'none', cursor: 'pointer',\n color: '#64748b', display: 'flex', p: 0,\n '&:hover': { color: '#94a3b8' },\n }}\n >\n <MdClose size={12} />\n </Box>\n )}\n </Box>\n </Box>\n\n <Divider sx={{ borderColor: 'rgba(255,255,255,0.06)' }} />\n\n {/* ── Variable list ── */}\n <Box sx={{\n flex: 1, overflowY: 'auto', py: 0.5,\n // Dark scrollbar\n '&::-webkit-scrollbar': { width: 4 },\n '&::-webkit-scrollbar-track': { background: 'transparent' },\n '&::-webkit-scrollbar-thumb': { background: 'rgba(255,255,255,0.12)', borderRadius: 4 },\n }}>\n {/* Restyle child components for dark bg */}\n <Box sx={{\n '& .MuiTypography-root': { color: '#cbd5e1' },\n }}>\n {hasResults ? (\n ctx.groups.map((group, i) => (\n <VariableGroupSection key={i} group={group} searchQuery={search} />\n ))\n ) : (\n <Box sx={{ px: 2, py: 3, textAlign: 'center' }}>\n <Typography sx={{ fontSize: 12, color: '#475569' }}>\n No variables match \"{search}\"\n </Typography>\n </Box>\n )}\n </Box>\n </Box>\n\n {/* ── Footer hint ── */}\n <Box sx={{\n px: 2, py: 1,\n borderTop: '1px solid rgba(255,255,255,0.06)',\n flexShrink: 0,\n }}>\n <Typography sx={{ fontSize: 10, color: '#475569', lineHeight: 1.4 }}>\n Click to insert · Drag onto any field\n </Typography>\n </Box>\n </Box>\n );\n\n if (mode === 'popover' || (mode === 'drawer' && floating)) {\n return ReactDOM.createPortal(panel, document.body);\n }\n\n return panel;\n}\n","/**\r\n * FormulaInput — AST-driven inline token editor.\r\n *\r\n * Props:\r\n * expression — FormulaASTNode[] (source of truth, host-owned)\r\n * onExpressionChange — called with new AST whenever user edits\r\n * onFormulaConfigToggle — called when user clicks the { } icon to exit formula mode\r\n * onPickerOpen — future: open variable picker drawer\r\n *\r\n * DOM layer:\r\n * AST → astToTokens() → DOM chips + text nodes\r\n * DOM edits → serializeDOM() → raw string → parseToAST() → new AST → onExpressionChange\r\n *\r\n * Copy: serializes selected DOM nodes back to raw expression string → clipboard\r\n * Paste: raw string → tokenize() → chips inserted at cursor\r\n */\r\n\r\nimport { useCallback, useEffect, useRef, useState } from 'react';\r\nimport { Box, Snackbar, Alert, Tooltip, Typography } from '@mui/material';\r\nimport { MdDataObject } from 'react-icons/md';\r\nimport {\r\n astToTokens,\r\n tokenize,\r\n parseToAST,\r\n serializeAST,\r\n} from '../DynamicFormRenderer/formulaUtils';\r\nimport type { FormulaASTNode, FormulaToken, ChipToken } from '../DynamicFormRenderer/formulaUtils';\r\nimport { useVariablePickerContext } from '../VariablePicker/VariablePickerContext';\r\nimport { DRAG_DATA_KEY } from '../VariablePicker/VariablePicker';\r\nimport { buildChipSpan, buildPathExpr } from '../VariablePicker/chipSpan';\r\n\r\n// ─── Chip DOM factory ─────────────────────────────────────────────────────────\r\n\r\nfunction createChipSpan(token: ChipToken): HTMLSpanElement {\r\n return buildChipSpan({ expr: token.expr, label: token.label, path: token.path });\r\n}\r\n\r\n// ─── DOM serialization ────────────────────────────────────────────────────────\r\n\r\nfunction serializeNode(node: Node): string {\r\n if (node.nodeType === Node.TEXT_NODE) return node.textContent ?? '';\r\n const el = node as HTMLElement;\r\n if (el.dataset?.expr) return el.dataset.expr;\r\n if (el.tagName === 'BR') return '';\r\n let result = '';\r\n el.childNodes.forEach((c) => { result += serializeNode(c); });\r\n return result;\r\n}\r\n\r\nfunction serializeDOM(el: HTMLElement): string {\r\n let result = '';\r\n el.childNodes.forEach((n) => { result += serializeNode(n); });\r\n return result;\r\n}\r\n\r\n\r\nfunction applyTokensToDOM(container: HTMLElement, tokens: FormulaToken[]): void {\r\n container.innerHTML = '';\r\n for (const token of tokens) {\r\n if (token.type === 'text') {\r\n if (token.value) container.appendChild(document.createTextNode(token.value));\r\n } else {\r\n container.appendChild(createChipSpan(token));\r\n }\r\n }\r\n}\r\n\r\nfunction buildFragment(tokens: FormulaToken[]): DocumentFragment {\r\n const frag = document.createDocumentFragment();\r\n for (const token of tokens) {\r\n if (token.type === 'text') {\r\n if (token.value) frag.appendChild(document.createTextNode(token.value));\r\n } else {\r\n frag.appendChild(createChipSpan(token));\r\n }\r\n }\r\n return frag;\r\n}\r\n\r\nfunction serializeFragment(frag: DocumentFragment): string {\r\n let result = '';\r\n frag.childNodes.forEach((n) => { result += serializeNode(n); });\r\n return result;\r\n}\r\n\r\n// ─── Props ────────────────────────────────────────────────────────────────────\r\n\r\nexport interface FormulaInputProps {\r\n /** AST — source of truth. Host app owns this. */\r\n expression: FormulaASTNode[];\r\n /** Called with the new AST on every edit. */\r\n onExpressionChange: (nodes: FormulaASTNode[]) => void;\r\n onBlur?: () => void;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n error?: boolean;\r\n id?: string;\r\n /** Whether formulaConfig emission is active (controls the { } toggle highlight). */\r\n formulaConfigEnabled?: boolean;\r\n /** Called when user clicks the { } toggle button. */\r\n onFormulaConfigToggle?: () => void;\r\n /** Future: open variable picker drawer. */\r\n onPickerOpen?: () => void;\r\n /** Compact mode — reduces height/padding to match native form controls in tight rows. */\r\n compact?: boolean;\r\n}\r\n\r\n// ─── Component ────────────────────────────────────────────────────────────────\r\n\r\nexport function FormulaInput({\r\n expression,\r\n onExpressionChange,\r\n onBlur,\r\n placeholder,\r\n disabled,\r\n error,\r\n id,\r\n formulaConfigEnabled,\r\n onFormulaConfigToggle,\r\n onPickerOpen,\r\n compact,\r\n}: FormulaInputProps) {\r\n const editorRef = useRef<HTMLDivElement>(null);\r\n const formulaToggleBtnRef = useRef<HTMLButtonElement | null>(null);\r\n const lastSerialized = useRef<string>(''); // '' ensures applyTokensToDOM runs on mount\r\n const isComposing = useRef(false);\r\n const isEmpty = expression.length === 0 || (expression.length === 1 && expression[0].type === 'text' && !expression[0].value);\r\n\r\n // ── Variable picker context (optional — only active when provider is present) ──\r\n const pickerCtx = useVariablePickerContext();\r\n\r\n // ── Drag-over state: 'valid' | 'invalid' | null ───────────────────────────\r\n const [dropState, setDropState] = useState<'valid' | 'invalid' | null>(null);\r\n const [errorToast, setErrorToast] = useState(false);\r\n\r\n // ── Sync AST → DOM when expression changes from outside ──────────────────\r\n //\r\n // Edit-mode bug fix: the cache key used to be just the serialized AST. When\r\n // the form hydrated before `pickerCtx.groups` finished loading (groups are\r\n // typically populated by an async API call in the host app), the chips\r\n // painted with whatever label was baked into the saved path (e.g. the raw\r\n // attribute key \"FIRSTNAME\"). When groups arrived a tick later, the effect\r\n // re-ran — but the key matched, so we early-returned and never repainted\r\n // with the human label (\"First Name\"). We now fold a groups-identity hash\r\n // into the cache key, so the first paint with empty groups doesn't block\r\n // the re-paint once groups become available.\r\n useEffect(() => {\r\n const el = editorRef.current;\r\n if (!el) return;\r\n\r\n // Priority 1: labels from picker context groups (survives page load / edit mode)\r\n const groupLabelMap = new Map<string, string>();\r\n if (pickerCtx?.groups) {\r\n const flattenItems = (items: { path: string; label: string; children?: any[] }[]) => {\r\n for (const item of items) {\r\n if (item.path) groupLabelMap.set(item.path, item.label);\r\n if (item.children) flattenItems(item.children);\r\n }\r\n };\r\n for (const group of pickerCtx.groups) flattenItems(group.items);\r\n }\r\n\r\n const incoming = serializeAST(expression);\r\n const groupsKey = `${groupLabelMap.size}|${pickerCtx?.groups?.length ?? 0}`;\r\n const key = `${formulaConfigEnabled ? '1' : '0'}:${incoming}:${groupsKey}`;\r\n if (key === lastSerialized.current) return; // identical state — skip\r\n\r\n // Priority 2: labels already rendered in DOM chips (for config-toggle within same session)\r\n const domLabelMap = new Map<string, string>();\r\n el.querySelectorAll<HTMLElement>('[data-path]').forEach((s) => {\r\n if (s.dataset.path && s.dataset.label) domLabelMap.set(s.dataset.path, s.dataset.label);\r\n });\r\n\r\n const tokens = astToTokens(expression, formulaConfigEnabled).map((t) => {\r\n if (t.type !== 'chip' || !t.path) return t;\r\n // Picker-group labels OUTRANK whatever was previously rendered in DOM —\r\n // otherwise chips painted before groups loaded would lock in the\r\n // fallback label forever (caused the \"FIRSTNAME\" instead of\r\n // \"First Name\" bug on edit).\r\n const label = groupLabelMap.get(t.path) ?? domLabelMap.get(t.path) ?? t.label;\r\n return { ...t, label };\r\n });\r\n\r\n applyTokensToDOM(el, tokens);\r\n lastSerialized.current = key;\r\n }, [expression, formulaConfigEnabled, pickerCtx?.groups]);\r\n\r\n // ── Emit: DOM → raw string → AST → onExpressionChange ───────────────────\r\n const emit = useCallback(() => {\r\n const el = editorRef.current;\r\n if (!el) return;\r\n const raw = serializeDOM(el);\r\n const ast = parseToAST(raw, formulaConfigEnabled);\r\n const key = `${formulaConfigEnabled ? '1' : '0'}:${serializeAST(ast)}`;\r\n if (import.meta.env.DEV) console.log('[FormulaInput] emit key:', key, 'lastSerialized:', lastSerialized.current);\r\n if (key === lastSerialized.current) return;\r\n lastSerialized.current = key;\r\n onExpressionChange(ast);\r\n }, [onExpressionChange, formulaConfigEnabled]);\r\n\r\n const handleInput = useCallback(() => {\r\n if (!isComposing.current) emit();\r\n }, [emit]);\r\n\r\n // ── Paste — tokenize raw text, convert formula tokens to chips ───────────\r\n const handlePaste = useCallback((e: React.ClipboardEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n const text = e.clipboardData.getData('text/plain');\r\n const sel = window.getSelection();\r\n if (!sel?.rangeCount) return;\r\n const range = sel.getRangeAt(0);\r\n range.deleteContents();\r\n // _P('...') only chips when formula config is enabled\r\n range.insertNode(buildFragment(tokenize(text, formulaConfigEnabled)));\r\n range.collapse(false);\r\n sel.removeAllRanges();\r\n sel.addRange(range);\r\n emit();\r\n }, [emit, formulaConfigEnabled]);\r\n\r\n // ── Copy — write raw expression to clipboard, not chip label ─────────────\r\n const handleCopy = useCallback((e: React.ClipboardEvent<HTMLDivElement>) => {\r\n const sel = window.getSelection();\r\n if (!sel?.rangeCount) return;\r\n const raw = serializeFragment(sel.getRangeAt(0).cloneContents());\r\n if (!raw) return;\r\n e.clipboardData.setData('text/plain', raw);\r\n e.preventDefault();\r\n }, []);\r\n\r\n const handleCut = useCallback((e: React.ClipboardEvent<HTMLDivElement>) => {\r\n const sel = window.getSelection();\r\n if (!sel?.rangeCount) return;\r\n const range = sel.getRangeAt(0);\r\n const raw = serializeFragment(range.cloneContents());\r\n if (!raw) return;\r\n e.clipboardData.setData('text/plain', raw);\r\n e.preventDefault();\r\n range.deleteContents();\r\n emit();\r\n }, [emit]);\r\n\r\n const handleKeyDown = useCallback((e: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (e.key === 'Enter') e.preventDefault();\r\n }, []);\r\n\r\n const handleInsert = useCallback((path: string, label: string) => {\r\n const editor = editorRef.current;\r\n if (import.meta.env.DEV) console.log('[FormulaInput] handleInsert called:', path, label, 'editor?', !!editor);\r\n if (!editor) return;\r\n editor.focus();\r\n\r\n const sel = window.getSelection();\r\n let range: Range | null = null;\r\n\r\n if (sel && sel.rangeCount > 0 && editor.contains(sel.getRangeAt(0).commonAncestorContainer)) {\r\n range = sel.getRangeAt(0);\r\n } else {\r\n range = document.createRange();\r\n range.selectNodeContents(editor);\r\n range.collapse(false);\r\n }\r\n\r\n const chip = buildDropChipSpan(path, label);\r\n range.deleteContents();\r\n range.insertNode(chip);\r\n range.setStartAfter(chip);\r\n range.collapse(true);\r\n\r\n sel?.removeAllRanges();\r\n sel?.addRange(range);\r\n\r\n if (import.meta.env.DEV) console.log('[FormulaInput] chip inserted, editorHTML:', editor.innerHTML);\r\n emit();\r\n }, [emit]);\r\n\r\n // ── Register with picker context on focus ────────────────────────────────\r\n // Focusing a formula-enabled input also opens the picker (Workato/Logic\r\n // Builder UX): the panel auto-anchors to this input, blur on the input\r\n // alone does NOT close it — only when focus leaves all formula fields AND\r\n // the picker itself.\r\n const handleFocus = useCallback(() => {\r\n if (!pickerCtx || !id) return;\r\n pickerCtx.registerField({ editorRef, savedRange: null, fieldId: id, onInsert: handleInsert });\r\n pickerCtx.notifyFieldFocus(id, editorRef.current);\r\n pickerCtx.openPicker();\r\n }, [pickerCtx, id, handleInsert]);\r\n\r\n // ── Save selection range so picker can restore it after panel interaction ─\r\n const handleSelectionChange = useCallback(() => {\r\n if (!pickerCtx) return;\r\n const sel = window.getSelection();\r\n if (sel && sel.rangeCount > 0 && editorRef.current?.contains(sel.anchorNode)) {\r\n pickerCtx.saveRange(sel.getRangeAt(0).cloneRange());\r\n }\r\n }, [pickerCtx]);\r\n\r\n // ── Track selection changes globally while this input is mounted ───────────\r\n useEffect(() => {\r\n document.addEventListener('selectionchange', handleSelectionChange);\r\n \r\n // Also listen for native 'input' events to catch manual dispatch from VariablePicker\r\n const el = editorRef.current;\r\n if (el) {\r\n el.addEventListener('input', handleInput);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener('selectionchange', handleSelectionChange);\r\n if (el) {\r\n el.removeEventListener('input', handleInput);\r\n }\r\n };\r\n }, [handleSelectionChange, handleInput]);\r\n\r\n // ── Drag over — show valid (green) ring since we accept all types ─────────\r\n const handleDragOver = useCallback((e: React.DragEvent<HTMLDivElement>) => {\r\n if (disabled) return;\r\n const hasVar = e.dataTransfer.types.includes(DRAG_DATA_KEY);\r\n if (!hasVar) return;\r\n e.preventDefault();\r\n e.dataTransfer.dropEffect = 'copy';\r\n setDropState('valid');\r\n }, [disabled]);\r\n\r\n const handleDragLeave = useCallback(() => {\r\n setDropState(null);\r\n }, []);\r\n\r\n // ── Drop — insert chip at pointer position ────────────────────────────────\r\n const handleDrop = useCallback((e: React.DragEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n setDropState(null);\r\n\r\n if (disabled) {\r\n setErrorToast(true);\r\n return;\r\n }\r\n\r\n const raw = e.dataTransfer.getData(DRAG_DATA_KEY);\r\n if (!raw) return;\r\n\r\n let variable: { path: string; label: string };\r\n try {\r\n variable = JSON.parse(raw);\r\n } catch {\r\n return;\r\n }\r\n\r\n // Get insertion point from drop coordinates\r\n const range = getCaretRangeAtPoint(e.clientX, e.clientY);\r\n if (!range) return;\r\n\r\n const editor = editorRef.current;\r\n if (!editor) return;\r\n\r\n // Ensure drop target is inside this editor\r\n if (!editor.contains(range.commonAncestorContainer)) return;\r\n\r\n // Build and insert chip\r\n const chip = buildDropChipSpan(variable.path, variable.label);\r\n range.deleteContents();\r\n range.insertNode(chip);\r\n range.setStartAfter(chip);\r\n range.collapse(true);\r\n\r\n const sel = window.getSelection();\r\n sel?.removeAllRanges();\r\n sel?.addRange(range);\r\n\r\n editor.dispatchEvent(new Event('input', { bubbles: true }));\r\n }, [disabled]);\r\n\r\n // pickerCtx in drawer mode doesn't need a per-field button — focus tracking handles it\r\n const actionCount = (onFormulaConfigToggle ? 1 : 0) + (onPickerOpen ? 1 : 0);\r\n const prRight = actionCount > 0 ? `${actionCount * 30 + 8}px` : '12px';\r\n\r\n // Border color: drop-valid=green, drop-invalid=red, error=red, normal\r\n const borderColor = dropState === 'valid'\r\n ? '#16a34a'\r\n : dropState === 'invalid'\r\n ? '#d32f2f'\r\n : error ? '#d32f2f' : 'rgba(0,0,0,0.23)';\r\n\r\n const boxShadow = dropState === 'valid'\r\n ? '0 0 0 2px rgba(22,163,74,0.2)'\r\n : dropState === 'invalid'\r\n ? '0 0 0 2px rgba(211,47,47,0.2)'\r\n : undefined;\r\n\r\n return (\r\n <Box sx={{ position: 'relative' }}>\r\n <Box\r\n sx={{\r\n border: `1px solid ${borderColor}`,\r\n borderRadius: '4px',\r\n ...(compact\r\n ? {\r\n display: 'flex',\r\n alignItems: 'center',\r\n pl: 1,\r\n py: '6px',\r\n pr: prRight,\r\n overflow: 'hidden',\r\n }\r\n : {\r\n display: 'flex',\r\n alignItems: 'center',\r\n pl: 1.5,\r\n py: '6px',\r\n pr: prRight,\r\n overflow: 'hidden',\r\n }),\r\n fontSize: compact ? 13 : 14,\r\n lineHeight: 1.5,\r\n cursor: disabled ? 'not-allowed' : 'text',\r\n bgcolor: dropState === 'valid'\r\n ? 'rgba(22,163,74,0.04)'\r\n : disabled ? 'rgba(0,0,0,0.04)' : '#fff',\r\n transition: 'border-color 0.15s, box-shadow 0.15s, background 0.15s',\r\n boxShadow,\r\n '&:focus-within': {\r\n borderColor: error ? '#d32f2f' : '#1976d2',\r\n boxShadow: error\r\n ? '0 0 0 2px rgba(211,47,47,0.2)'\r\n : '0 0 0 2px rgba(25,118,210,0.2)',\r\n },\r\n }}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n onClick={() => { if (!disabled) editorRef.current?.focus(); }}\r\n >\r\n {/* Placeholder */}\r\n {isEmpty && placeholder && (\r\n <Typography\r\n component=\"span\"\r\n sx={{\r\n position: 'absolute',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n left: compact ? 8 : 14,\r\n right: prRight, // prevent overflow into action buttons\r\n fontSize: compact ? 13 : 14,\r\n color: 'rgba(0,0,0,0.38)',\r\n pointerEvents: 'none',\r\n userSelect: 'none',\r\n lineHeight: 1.5,\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n }}\r\n >\r\n {placeholder}\r\n </Typography>\r\n )}\r\n\r\n <div\r\n ref={editorRef}\r\n id={id}\r\n contentEditable={disabled ? 'false' : 'true'}\r\n suppressContentEditableWarning\r\n onPaste={handlePaste}\r\n onCopy={handleCopy}\r\n onCut={handleCut}\r\n onKeyDown={handleKeyDown}\r\n onFocus={handleFocus}\r\n onBlur={onBlur}\r\n onCompositionStart={() => { isComposing.current = true; }}\r\n onCompositionEnd={() => { isComposing.current = false; emit(); }}\r\n style={{\r\n outline: 'none',\r\n flex: 1,\r\n minWidth: 0,\r\n overflow: 'hidden',\r\n minHeight: '21px',\r\n lineHeight: 1.5,\r\n whiteSpace: 'nowrap',\r\n }}\r\n />\r\n </Box>\r\n\r\n {/* Right-side action buttons */}\r\n {actionCount > 0 && !disabled && (\r\n <Box sx={{\r\n position: 'absolute', right: 4, top: '50%', transform: 'translateY(-50%)',\r\n display: 'flex', alignItems: 'center', gap: 0.25,\r\n }}>\r\n {onFormulaConfigToggle && (\r\n <Tooltip\r\n title={formulaConfigEnabled ? 'Disable formula config' : 'Enable formula config'}\r\n placement=\"top\"\r\n >\r\n <Box\r\n component=\"button\"\r\n type=\"button\"\r\n ref={formulaToggleBtnRef}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n const next = !formulaConfigEnabled;\r\n pickerCtx?.notifyFormulaToggle(next, next ? formulaToggleBtnRef.current : null);\r\n onFormulaConfigToggle();\r\n }}\r\n sx={{\r\n border: 'none', cursor: 'pointer',\r\n display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n width: 26, height: 26, borderRadius: '4px', p: 0,\r\n color: formulaConfigEnabled ? '#7c4dff' : '#94a3b8',\r\n bgcolor: formulaConfigEnabled ? '#ede9fe' : 'transparent',\r\n '&:hover': { bgcolor: '#ede9fe', color: '#7c4dff' },\r\n }}\r\n >\r\n <MdDataObject size={17} />\r\n </Box>\r\n </Tooltip>\r\n )}\r\n {onPickerOpen && (\r\n <Tooltip title=\"Insert variable\" placement=\"top\">\r\n <Box\r\n component=\"button\"\r\n type=\"button\"\r\n onClick={(e) => { e.stopPropagation(); onPickerOpen(); }}\r\n sx={{\r\n background: 'none', border: 'none', cursor: 'pointer',\r\n display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n width: 26, height: 26, borderRadius: '4px',\r\n color: '#64748b', p: 0,\r\n '&:hover': { bgcolor: '#f1f5f9' },\r\n }}\r\n >\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width={14} height={14}>\r\n <path d=\"M4.06 13a8 8 0 0 0 5.18 6.51A18.5 18.5 0 0 1 8.02 17c0-1.49.18-2.95.52-4.32L4.06 13zm0-2h4.48A18.5 18.5 0 0 0 8.02 7c0-1.02.06-2 .2-2.94A8 8 0 0 0 4.06 11zm11.88 0h4.48a8 8 0 0 0-4.16-6.94c.14.94.2 1.92.2 2.94 0 1.38-.15 2.71-.52 4zm0 2c-.37 1.29-.52 2.62-.52 4 0 1.02.06 2 .2 2.94A8 8 0 0 0 19.94 13h-4.18zM9.03 13c-.4 1.32-.57 2.7-.57 4 0 1.12.13 2.2.38 3.22A8 8 0 0 0 12 21a8 8 0 0 0 3.16-.78c.25-1.02.38-2.1.38-3.22 0-1.3-.17-2.68-.57-4H9.03zm.52-2h4.9C14.13 9.71 14 8.37 14 7c0-1.12-.13-2.2-.38-3.22A8 8 0 0 0 12 3a8 8 0 0 0-3.16.78C8.59 4.8 8.46 5.88 8.46 7c0 1.37.2 2.7.52 4h.57z\"/>\r\n </svg>\r\n </Box>\r\n </Tooltip>\r\n )}\r\n\r\n </Box>\r\n )}\r\n\r\n {/* ── Drop-rejected error toast ── */}\r\n <Snackbar\r\n open={errorToast}\r\n autoHideDuration={3000}\r\n onClose={() => setErrorToast(false)}\r\n anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}\r\n >\r\n <Alert severity=\"error\" onClose={() => setErrorToast(false)} sx={{ fontSize: 13 }}>\r\n This field is disabled — cannot insert variable\r\n </Alert>\r\n </Snackbar>\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Cross-browser caret position from pointer coordinates ───────────────────\r\n\r\nfunction getCaretRangeAtPoint(x: number, y: number): Range | null {\r\n // Modern browsers\r\n if (document.caretRangeFromPoint) {\r\n return document.caretRangeFromPoint(x, y);\r\n }\r\n // Firefox\r\n const pos = (document as Document & {\r\n caretPositionFromPoint?: (x: number, y: number) => { offsetNode: Node; offset: number } | null\r\n }).caretPositionFromPoint?.(x, y);\r\n if (pos) {\r\n const range = document.createRange();\r\n range.setStart(pos.offsetNode, pos.offset);\r\n range.collapse(true);\r\n return range;\r\n }\r\n return null;\r\n}\r\n\r\n// Local helper — uses the shared chipSpan factory plus canonical expr.\r\nfunction buildDropChipSpan(path: string, label: string): HTMLSpanElement {\r\n return buildChipSpan({ expr: buildPathExpr(path), label, path });\r\n}\r\n","/**\n * TextField — FlowForge field (CIS-5569)\n *\n * type: 'text'\n *\n * When formula: true —\n * - ALWAYS renders FormulaInput (chip editor). Chip display is independent of any toggle.\n * - _DE_{_P(...)} / _P(...) tokens in the value always appear as chips (on load or paste).\n * - The formula toggle only controls whether formulaConfig is emitted to the host app.\n *\n * When formula: false/undefined — renders a plain MUI TextField.\n */\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { FF, errorTextStyle, helperTextStyle } from '../fieldTokens';\nimport {\n Tooltip,\n} from '@mui/material';\nimport { MdContentCopy } from 'react-icons/md';\n\nimport type { FieldDescriptor } from '../types';\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\nimport {\n parseToAST,\n serializeAST,\n serializeASTAsConfig,\n buildFieldConfig,\n} from '../DynamicFormRenderer/formulaUtils';\nimport type { FormulaASTNode } from '../DynamicFormRenderer/formulaUtils';\nimport { FieldLabel } from './FieldLabel';\nimport { FormulaInput } from './FormulaInput';\nimport { useVariablePickerContext } from '../VariablePicker/VariablePickerContext';\n\n// ─── Extended descriptor ──────────────────────────────────────────────────────\n\ninterface TextFieldDescriptor extends FieldDescriptor {\n id?: string;\n helperText?: string;\n readOnly?: boolean;\n inputType?: string;\n prefix?: string;\n suffix?: string;\n copyable?: boolean;\n multiline?: boolean;\n rows?: number;\n formula?: boolean;\n formulaPlaceholder?: string;\n compact?: boolean;\n autocomplete?: string;\n autoFocus?: boolean;\n dataTestId?: string;\n ariaLabel?: string;\n ariaDescribedBy?: string;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function TextField({\n field: rawField,\n value,\n onChange,\n onBlur,\n error,\n touched,\n formulaConfig,\n onFormulaConfigChange,\n inlineLabel,\n}: FieldComponentProps) {\n const field = { ...rawField, multiline: rawField.multiline || rawField.type === 'textarea' } as TextFieldDescriptor;\n const fieldId = field.id ?? field.name ?? '';\n const isFormulaEnabled = field.formula === true;\n const pickerCtx = useVariablePickerContext();\n\n // Whether formulaConfig is being emitted (the toggle — separate from chip display).\n // A field has formula config enabled when its key is present in the formulaConfig map.\n const [formulaConfigEnabled, setFormulaConfigEnabled] = useState(\n () => isFormulaEnabled && (fieldId in (formulaConfig ?? {}))\n );\n\n // Cleanup: close picker if this field unmounts while formula config is active.\n // Read state via ref so the cleanup sees the LATEST value (was using\n // closed-over initial state, leaking the formulaActiveCountRef counter).\n const formulaConfigEnabledRef = useRef(formulaConfigEnabled);\n formulaConfigEnabledRef.current = formulaConfigEnabled;\n useEffect(() => {\n return () => {\n if (formulaConfigEnabledRef.current) pickerCtx?.notifyFormulaToggle(false);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // AST — parsed from the stored value string. FormulaInput uses this to render chips.\n // Pass configEnabled so _P('...') is only chipped when the toggle is on.\n const [expression, setExpression] = useState<FormulaASTNode[]>(() =>\n isFormulaEnabled ? parseToAST(String(value ?? ''), fieldId in (formulaConfig ?? {})) : []\n );\n\n // Plain-text value for non-formula fields only.\n const [inputValue, setInputValue] = useState<string>(() => String(value ?? ''));\n\n const lastEmittedRef = useRef<unknown>(value);\n\n // ── Sync when value changes from outside (compute / form reset) ───────────\n useEffect(() => {\n if (value === lastEmittedRef.current) return;\n lastEmittedRef.current = value;\n const str = String(value ?? '');\n setInputValue(str);\n if (isFormulaEnabled) {\n setExpression(parseToAST(str, formulaConfigEnabled));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n // ── AST change from FormulaInput (user typed or pasted) ──────────────────\n const handleExpressionChange = (nodes: FormulaASTNode[]) => {\n setExpression(nodes);\n // Serialize in the format matching current toggle state\n const serialized = formulaConfigEnabled\n ? serializeASTAsConfig(nodes) // _P('...')\n : serializeAST(nodes); // _DE_{_P('...')}\n lastEmittedRef.current = serialized;\n onChange(serialized);\n // formulaConfig map is unchanged — only the serialized Formik value changes\n };\n\n // ── formulaConfig toggle ──────────────────────────────────────────────────\n // Note: notifyFormulaToggle is called by FormulaInput's {} button (with anchor).\n // Do NOT call it here — that would double the counter and break the picker.\n const toggleFormulaConfig = () => {\n const next = !formulaConfigEnabled;\n setFormulaConfigEnabled(next);\n\n if (next) {\n // Toggling ON — re-parse the current raw string with configEnabled=true so that\n // any _P('...') that was sitting as plain text now becomes a chip.\n const raw = serializeAST(expression); // get the plain string from current AST\n const reparsed = parseToAST(raw, true);\n setExpression(reparsed);\n const newSerialized = serializeASTAsConfig(reparsed); // _P('...')\n lastEmittedRef.current = newSerialized;\n onChange(newSerialized);\n onFormulaConfigChange?.({ ...formulaConfig, [fieldId]: buildFieldConfig() });\n } else {\n // Toggling OFF — chips stay chips; just re-serialize as _DE_{_P('...')} and remove key.\n const newSerialized = serializeAST(expression); // _DE_{_P('...')}\n lastEmittedRef.current = newSerialized;\n onChange(newSerialized);\n const updated = { ...formulaConfig };\n delete updated[fieldId];\n onFormulaConfigChange?.(updated);\n }\n };\n\n const showError = touched && !!error;\n const isDisabled = field.disabled === true;\n\n // ── Label node (shared) ───────────────────────────────────────────────────\n const labelNode = (\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={fieldId}\n dataTestId={field.dataTestId}\n />\n );\n\n // ── Formula-enabled: always render FormulaInput ───────────────────────────\n if (isFormulaEnabled) {\n const helperNode = field.helperText && !inlineLabel ? (\n <small style={helperTextStyle}>\n {field.helperText}\n </small>\n ) : null;\n\n const inputBlock = (\n <>\n {helperNode}\n <FormulaInput\n id={fieldId}\n expression={expression}\n onExpressionChange={handleExpressionChange}\n onBlur={onBlur}\n placeholder={field.formulaPlaceholder ?? 'Type or paste a variable expression...'}\n disabled={isDisabled}\n error={showError}\n formulaConfigEnabled={formulaConfigEnabled}\n onFormulaConfigToggle={toggleFormulaConfig}\n compact={field.compact}\n />\n {showError && (\n <small data-testid={`${fieldId}-error`} style={errorTextStyle}>\n {error}\n </small>\n )}\n </>\n );\n\n if (inlineLabel) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8, padding: '3px 0' }}>\n <div style={{ flex: '0 0 160px', minWidth: 0 }}>{labelNode}</div>\n <div style={{ flex: 1, minWidth: 0 }}>{inputBlock}</div>\n </div>\n );\n }\n\n return <div>{labelNode}{inputBlock}</div>;\n }\n\n // ── Plain field — native input (38px height, matches FormulaInput & react-select) ──\n const hasPrefix = !!field.prefix;\n const hasSuffix = !!field.suffix;\n const hasCopy = !!field.copyable;\n const hasEndAdornment = hasSuffix || hasCopy;\n\n const nativeInputStyle: React.CSSProperties = {\n width: '100%',\n fontSize: 14,\n color: '#374151',\n backgroundColor: isDisabled ? '#f9fafb' : '#fff',\n border: `1px solid ${showError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR}`,\n borderRadius: FF.BORDER_RADIUS,\n outline: 'none',\n paddingTop: field.multiline ? '8px' : '6px',\n paddingBottom: field.multiline ? '8px' : '6px',\n paddingLeft: hasPrefix ? 0 : '12px',\n paddingRight: hasEndAdornment ? 0 : '12px',\n boxSizing: 'border-box',\n lineHeight: 1.5,\n cursor: isDisabled ? 'not-allowed' : undefined,\n resize: field.multiline ? 'vertical' : 'none',\n };\n\n const wrapperStyle: React.CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'stretch',\n width: '100%',\n border: `1px solid ${showError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR}`,\n borderRadius: FF.BORDER_RADIUS,\n backgroundColor: isDisabled ? '#f9fafb' : '#fff',\n boxSizing: 'border-box',\n };\n\n const adornmentStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n padding: '0 10px',\n color: '#6b7280',\n fontSize: 13,\n whiteSpace: 'nowrap',\n flexShrink: 0,\n };\n\n const bareInputStyle: React.CSSProperties = {\n flex: 1,\n minHeight: 0,\n border: 'none',\n outline: 'none',\n backgroundColor: 'transparent',\n fontSize: 14,\n color: '#374151',\n padding: field.multiline ? '8px 12px' : '6px 12px',\n cursor: isDisabled ? 'not-allowed' : undefined,\n resize: field.multiline ? 'vertical' : 'none',\n boxSizing: 'border-box',\n lineHeight: 1.5,\n };\n\n const hasAdornment = hasPrefix || hasEndAdornment;\n\n const inputEl = hasAdornment ? (\n <div\n style={wrapperStyle}\n onFocus={e => { (e.currentTarget as HTMLDivElement).style.borderColor = showError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR_FOCUS; (e.currentTarget as HTMLDivElement).style.boxShadow = showError ? FF.FOCUS_SHADOW_ERROR : FF.FOCUS_SHADOW; }}\n onBlur={e => { if (!e.currentTarget.contains(e.relatedTarget as Node)) { (e.currentTarget as HTMLDivElement).style.borderColor = showError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR; (e.currentTarget as HTMLDivElement).style.boxShadow = 'none'; } }}\n >\n {hasPrefix && <span style={adornmentStyle}>{field.prefix}</span>}\n {field.multiline ? (\n <textarea\n id={fieldId}\n name={fieldId}\n style={{ ...bareInputStyle, minHeight: 72 }}\n placeholder={field.placeholder ?? ''}\n value={inputValue}\n disabled={isDisabled}\n readOnly={field.readOnly}\n rows={field.rows ?? 3}\n autoComplete={field.autocomplete ?? 'off'}\n autoFocus={field.autoFocus}\n data-testid={field.dataTestId ?? `${fieldId}-input`}\n aria-label={field.ariaLabel ?? field.label}\n aria-describedby={field.ariaDescribedBy}\n aria-required={field.required || undefined}\n aria-invalid={showError || undefined}\n onChange={e => { setInputValue(e.target.value); lastEmittedRef.current = e.target.value; onChange(e.target.value); }}\n onBlur={onBlur}\n />\n ) : (\n <input\n id={fieldId}\n name={fieldId}\n type={field.inputType ?? 'text'}\n style={bareInputStyle}\n placeholder={field.placeholder ?? ''}\n value={inputValue}\n disabled={isDisabled}\n readOnly={field.readOnly}\n autoComplete={field.autocomplete ?? 'off'}\n autoFocus={field.autoFocus}\n data-testid={field.dataTestId ?? `${fieldId}-input`}\n aria-label={field.ariaLabel ?? field.label}\n aria-describedby={field.ariaDescribedBy}\n aria-required={field.required || undefined}\n aria-invalid={showError || undefined}\n onChange={e => { setInputValue(e.target.value); lastEmittedRef.current = e.target.value; onChange(e.target.value); }}\n onBlur={onBlur}\n />\n )}\n {hasSuffix && <span style={adornmentStyle}>{field.suffix}</span>}\n {hasCopy && (\n <Tooltip title=\"Copy\" placement=\"top\">\n <button\n type=\"button\"\n onClick={() => navigator.clipboard.writeText(inputValue)}\n aria-label=\"copy\"\n tabIndex={-1}\n style={{ ...adornmentStyle, background: 'none', border: 'none', cursor: 'pointer', padding: '0 8px' }}\n >\n <MdContentCopy size={16} />\n </button>\n </Tooltip>\n )}\n </div>\n ) : field.multiline ? (\n <textarea\n id={fieldId}\n name={fieldId}\n style={{ ...nativeInputStyle, minHeight: 72, height: undefined, padding: '8px 12px' }}\n placeholder={field.placeholder ?? ''}\n value={inputValue}\n disabled={isDisabled}\n readOnly={field.readOnly}\n rows={field.rows ?? 3}\n autoComplete={field.autocomplete ?? 'off'}\n autoFocus={field.autoFocus}\n data-testid={field.dataTestId ?? `${fieldId}-input`}\n aria-label={field.ariaLabel ?? field.label}\n aria-describedby={field.ariaDescribedBy}\n aria-required={field.required || undefined}\n aria-invalid={showError || undefined}\n onChange={e => { setInputValue(e.target.value); lastEmittedRef.current = e.target.value; onChange(e.target.value); }}\n onBlur={onBlur}\n onFocus={e => { e.currentTarget.style.borderColor = showError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR_FOCUS; e.currentTarget.style.boxShadow = showError ? FF.FOCUS_SHADOW_ERROR : FF.FOCUS_SHADOW; }}\n onBlurCapture={e => { e.currentTarget.style.borderColor = showError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR; e.currentTarget.style.boxShadow = 'none'; }}\n />\n ) : (\n <input\n id={fieldId}\n name={fieldId}\n type={field.inputType ?? 'text'}\n style={nativeInputStyle}\n placeholder={field.placeholder ?? ''}\n value={inputValue}\n disabled={isDisabled}\n readOnly={field.readOnly}\n autoComplete={field.autocomplete ?? 'off'}\n autoFocus={field.autoFocus}\n data-testid={field.dataTestId ?? `${fieldId}-input`}\n aria-label={field.ariaLabel ?? field.label}\n aria-describedby={field.ariaDescribedBy}\n aria-required={field.required || undefined}\n aria-invalid={showError || undefined}\n onChange={e => { setInputValue(e.target.value); lastEmittedRef.current = e.target.value; onChange(e.target.value); }}\n onBlur={onBlur}\n onFocus={e => { e.currentTarget.style.borderColor = showError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR_FOCUS; e.currentTarget.style.boxShadow = showError ? FF.FOCUS_SHADOW_ERROR : FF.FOCUS_SHADOW; }}\n onBlurCapture={e => { e.currentTarget.style.borderColor = showError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR; e.currentTarget.style.boxShadow = 'none'; }}\n />\n );\n\n const plainInput = (\n <>\n {field.helperText && !showError && !inlineLabel && (\n <small style={helperTextStyle}>{field.helperText}</small>\n )}\n {inputEl}\n {showError && (\n <small data-testid={`${fieldId}-error`} style={errorTextStyle}>\n {error}\n </small>\n )}\n </>\n );\n\n if (inlineLabel) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8, padding: '3px 0' }}>\n <div style={{ flex: '0 0 160px', minWidth: 0 }}>{labelNode}</div>\n <div style={{ flex: 1, minWidth: 0 }}>{plainInput}</div>\n </div>\n );\n }\n\n return <div>{labelNode}{plainInput}</div>;\n}\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nexport { _objectSpread2 as default };","function _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), e;\n}\nexport { _createClass as default };","function _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inherits(t, e) {\n if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n t.prototype = Object.create(e && e.prototype, {\n constructor: {\n value: t,\n writable: !0,\n configurable: !0\n }\n }), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e && setPrototypeOf(t, e);\n}\nexport { _inherits as default };","function _getPrototypeOf(t) {\n return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n return t.__proto__ || Object.getPrototypeOf(t);\n }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf as default };","function _isNativeReflectConstruct() {\n try {\n var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n } catch (t) {}\n return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n return !!t;\n })();\n}\nexport { _isNativeReflectConstruct as default };","function _assertThisInitialized(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\nexport { _assertThisInitialized as default };","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nfunction _possibleConstructorReturn(t, e) {\n if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n return assertThisInitialized(t);\n}\nexport { _possibleConstructorReturn as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nfunction _createSuper(t) {\n var r = isNativeReflectConstruct();\n return function () {\n var e,\n o = getPrototypeOf(t);\n if (r) {\n var s = getPrototypeOf(this).constructor;\n e = Reflect.construct(o, arguments, s);\n } else e = o.apply(this, arguments);\n return possibleConstructorReturn(this, e);\n };\n}\nexport { _createSuper as default };","function _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nexport { _arrayLikeToArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _arrayWithoutHoles(r) {\n if (Array.isArray(r)) return arrayLikeToArray(r);\n}\nexport { _arrayWithoutHoles as default };","function _iterableToArray(r) {\n if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nexport { _iterableToArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n }\n}\nexport { _unsupportedIterableToArray as default };","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableSpread as default };","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nfunction _toConsumableArray(r) {\n return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();\n}\nexport { _toConsumableArray as default };","function _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nexport { _arrayWithHoles as default };","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nexport { _iterableToArrayLimit as default };","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableRest as default };","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _slicedToArray(r, e) {\n return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nexport { _slicedToArray as default };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nexport { _objectWithoutProperties as default };","function _taggedTemplateLiteral(e, t) {\n return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, {\n raw: {\n value: Object.freeze(t)\n }\n }));\n}\nexport { _taggedTemplateLiteral as default };","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n const firstChar = placement[0];\n return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n const side = getSide(placement);\n return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n try {\n if (element.matches(':popover-open')) {\n return true;\n }\n } catch (_e) {\n // no-op\n }\n try {\n return element.matches(':modal');\n } catch (_e) {\n return false;\n }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (isWebKitValue == null) {\n isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n }\n return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n } else {\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n }\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n let top = firstRect.top;\n let right = firstRect.right;\n let bottom = firstRect.bottom;\n let left = firstRect.left;\n for (let i = 1; i < clippingAncestors.length; i++) {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n top = max(rect.top, top);\n right = min(rect.right, right);\n bottom = min(rect.bottom, bottom);\n left = max(rect.left, left);\n }\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n if (floating) {\n resizeObserver.observe(floating);\n }\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { useLayoutEffect } from 'react';\n\nvar index = useLayoutEffect ;\n\nexport { index as default };\n","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport { jsx, keyframes, css as css$2 } from '@emotion/react';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport _typeof from '@babel/runtime/helpers/esm/typeof';\nimport _taggedTemplateLiteral from '@babel/runtime/helpers/esm/taggedTemplateLiteral';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport { useContext, useRef, useState, useMemo, useCallback, createContext } from 'react';\nimport { createPortal } from 'react-dom';\nimport { autoUpdate } from '@floating-ui/dom';\nimport useLayoutEffect from 'use-isomorphic-layout-effect';\n\nvar _excluded$4 = [\"className\", \"clearValue\", \"cx\", \"getStyles\", \"getClassNames\", \"getValue\", \"hasValue\", \"isMulti\", \"isRtl\", \"options\", \"selectOption\", \"selectProps\", \"setValue\", \"theme\"];\n// ==============================\n// NO OP\n// ==============================\n\nvar noop = function noop() {};\n\n// ==============================\n// Class Name Prefixer\n// ==============================\n\n/**\n String representation of component state for styling with class names.\n\n Expects an array of strings OR a string/object pair:\n - className(['comp', 'comp-arg', 'comp-arg-2'])\n @returns 'react-select__comp react-select__comp-arg react-select__comp-arg-2'\n - className('comp', { some: true, state: false })\n @returns 'react-select__comp react-select__comp--some'\n*/\nfunction applyPrefixToName(prefix, name) {\n if (!name) {\n return prefix;\n } else if (name[0] === '-') {\n return prefix + name;\n } else {\n return prefix + '__' + name;\n }\n}\nfunction classNames(prefix, state) {\n for (var _len = arguments.length, classNameList = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n classNameList[_key - 2] = arguments[_key];\n }\n var arr = [].concat(classNameList);\n if (state && prefix) {\n for (var key in state) {\n if (state.hasOwnProperty(key) && state[key]) {\n arr.push(\"\".concat(applyPrefixToName(prefix, key)));\n }\n }\n }\n return arr.filter(function (i) {\n return i;\n }).map(function (i) {\n return String(i).trim();\n }).join(' ');\n}\n// ==============================\n// Clean Value\n// ==============================\n\nvar cleanValue = function cleanValue(value) {\n if (isArray(value)) return value.filter(Boolean);\n if (_typeof(value) === 'object' && value !== null) return [value];\n return [];\n};\n\n// ==============================\n// Clean Common Props\n// ==============================\n\nvar cleanCommonProps = function cleanCommonProps(props) {\n //className\n props.className;\n props.clearValue;\n props.cx;\n props.getStyles;\n props.getClassNames;\n props.getValue;\n props.hasValue;\n props.isMulti;\n props.isRtl;\n props.options;\n props.selectOption;\n props.selectProps;\n props.setValue;\n props.theme;\n var innerProps = _objectWithoutProperties(props, _excluded$4);\n return _objectSpread({}, innerProps);\n};\n\n// ==============================\n// Get Style Props\n// ==============================\n\nvar getStyleProps = function getStyleProps(props, name, classNamesState) {\n var cx = props.cx,\n getStyles = props.getStyles,\n getClassNames = props.getClassNames,\n className = props.className;\n return {\n css: getStyles(name, props),\n className: cx(classNamesState !== null && classNamesState !== void 0 ? classNamesState : {}, getClassNames(name, props), className)\n };\n};\n\n// ==============================\n// Handle Input Change\n// ==============================\n\nfunction handleInputChange(inputValue, actionMeta, onInputChange) {\n if (onInputChange) {\n var _newValue = onInputChange(inputValue, actionMeta);\n if (typeof _newValue === 'string') return _newValue;\n }\n return inputValue;\n}\n\n// ==============================\n// Scroll Helpers\n// ==============================\n\nfunction isDocumentElement(el) {\n return [document.documentElement, document.body, window].indexOf(el) > -1;\n}\n\n// Normalized Scroll Top\n// ------------------------------\n\nfunction normalizedHeight(el) {\n if (isDocumentElement(el)) {\n return window.innerHeight;\n }\n return el.clientHeight;\n}\n\n// Normalized scrollTo & scrollTop\n// ------------------------------\n\nfunction getScrollTop(el) {\n if (isDocumentElement(el)) {\n return window.pageYOffset;\n }\n return el.scrollTop;\n}\nfunction scrollTo(el, top) {\n // with a scroll distance, we perform scroll on the element\n if (isDocumentElement(el)) {\n window.scrollTo(0, top);\n return;\n }\n el.scrollTop = top;\n}\n\n// Get Scroll Parent\n// ------------------------------\n\nfunction getScrollParent(element) {\n var style = getComputedStyle(element);\n var excludeStaticParent = style.position === 'absolute';\n var overflowRx = /(auto|scroll)/;\n if (style.position === 'fixed') return document.documentElement;\n for (var parent = element; parent = parent.parentElement;) {\n style = getComputedStyle(parent);\n if (excludeStaticParent && style.position === 'static') {\n continue;\n }\n if (overflowRx.test(style.overflow + style.overflowY + style.overflowX)) {\n return parent;\n }\n }\n return document.documentElement;\n}\n\n// Animated Scroll To\n// ------------------------------\n\n/**\n @param t: time (elapsed)\n @param b: initial value\n @param c: amount of change\n @param d: duration\n*/\nfunction easeOutCubic(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n}\nfunction animatedScrollTo(element, to) {\n var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 200;\n var callback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop;\n var start = getScrollTop(element);\n var change = to - start;\n var increment = 10;\n var currentTime = 0;\n function animateScroll() {\n currentTime += increment;\n var val = easeOutCubic(currentTime, start, change, duration);\n scrollTo(element, val);\n if (currentTime < duration) {\n window.requestAnimationFrame(animateScroll);\n } else {\n callback(element);\n }\n }\n animateScroll();\n}\n\n// Scroll Into View\n// ------------------------------\n\nfunction scrollIntoView(menuEl, focusedEl) {\n var menuRect = menuEl.getBoundingClientRect();\n var focusedRect = focusedEl.getBoundingClientRect();\n var overScroll = focusedEl.offsetHeight / 3;\n if (focusedRect.bottom + overScroll > menuRect.bottom) {\n scrollTo(menuEl, Math.min(focusedEl.offsetTop + focusedEl.clientHeight - menuEl.offsetHeight + overScroll, menuEl.scrollHeight));\n } else if (focusedRect.top - overScroll < menuRect.top) {\n scrollTo(menuEl, Math.max(focusedEl.offsetTop - overScroll, 0));\n }\n}\n\n// ==============================\n// Get bounding client object\n// ==============================\n\n// cannot get keys using array notation with DOMRect\nfunction getBoundingClientObj(element) {\n var rect = element.getBoundingClientRect();\n return {\n bottom: rect.bottom,\n height: rect.height,\n left: rect.left,\n right: rect.right,\n top: rect.top,\n width: rect.width\n };\n}\n\n// ==============================\n// Touch Capability Detector\n// ==============================\n\nfunction isTouchCapable() {\n try {\n document.createEvent('TouchEvent');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// ==============================\n// Mobile Device Detector\n// ==============================\n\nfunction isMobileDevice() {\n try {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n } catch (e) {\n return false;\n }\n}\n\n// ==============================\n// Passive Event Detector\n// ==============================\n\n// https://github.com/rafgraph/detect-it/blob/main/src/index.ts#L19-L36\nvar passiveOptionAccessed = false;\nvar options = {\n get passive() {\n return passiveOptionAccessed = true;\n }\n};\n// check for SSR\nvar w = typeof window !== 'undefined' ? window : {};\nif (w.addEventListener && w.removeEventListener) {\n w.addEventListener('p', noop, options);\n w.removeEventListener('p', noop, false);\n}\nvar supportsPassiveEvents = passiveOptionAccessed;\nfunction notNullish(item) {\n return item != null;\n}\nfunction isArray(arg) {\n return Array.isArray(arg);\n}\nfunction valueTernary(isMulti, multiValue, singleValue) {\n return isMulti ? multiValue : singleValue;\n}\nfunction singleValueAsValue(singleValue) {\n return singleValue;\n}\nfunction multiValueAsValue(multiValue) {\n return multiValue;\n}\nvar removeProps = function removeProps(propsObj) {\n for (var _len2 = arguments.length, properties = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n properties[_key2 - 1] = arguments[_key2];\n }\n var propsMap = Object.entries(propsObj).filter(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 1),\n key = _ref2[0];\n return !properties.includes(key);\n });\n return propsMap.reduce(function (newProps, _ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n key = _ref4[0],\n val = _ref4[1];\n newProps[key] = val;\n return newProps;\n }, {});\n};\n\nvar _excluded$3 = [\"children\", \"innerProps\"],\n _excluded2$1 = [\"children\", \"innerProps\"];\nfunction getMenuPlacement(_ref) {\n var preferredMaxHeight = _ref.maxHeight,\n menuEl = _ref.menuEl,\n minHeight = _ref.minHeight,\n preferredPlacement = _ref.placement,\n shouldScroll = _ref.shouldScroll,\n isFixedPosition = _ref.isFixedPosition,\n controlHeight = _ref.controlHeight;\n var scrollParent = getScrollParent(menuEl);\n var defaultState = {\n placement: 'bottom',\n maxHeight: preferredMaxHeight\n };\n\n // something went wrong, return default state\n if (!menuEl || !menuEl.offsetParent) return defaultState;\n\n // we can't trust `scrollParent.scrollHeight` --> it may increase when\n // the menu is rendered\n var _scrollParent$getBoun = scrollParent.getBoundingClientRect(),\n scrollHeight = _scrollParent$getBoun.height;\n var _menuEl$getBoundingCl = menuEl.getBoundingClientRect(),\n menuBottom = _menuEl$getBoundingCl.bottom,\n menuHeight = _menuEl$getBoundingCl.height,\n menuTop = _menuEl$getBoundingCl.top;\n var _menuEl$offsetParent$ = menuEl.offsetParent.getBoundingClientRect(),\n containerTop = _menuEl$offsetParent$.top;\n var viewHeight = isFixedPosition ? window.innerHeight : normalizedHeight(scrollParent);\n var scrollTop = getScrollTop(scrollParent);\n var marginBottom = parseInt(getComputedStyle(menuEl).marginBottom, 10);\n var marginTop = parseInt(getComputedStyle(menuEl).marginTop, 10);\n var viewSpaceAbove = containerTop - marginTop;\n var viewSpaceBelow = viewHeight - menuTop;\n var scrollSpaceAbove = viewSpaceAbove + scrollTop;\n var scrollSpaceBelow = scrollHeight - scrollTop - menuTop;\n var scrollDown = menuBottom - viewHeight + scrollTop + marginBottom;\n var scrollUp = scrollTop + menuTop - marginTop;\n var scrollDuration = 160;\n switch (preferredPlacement) {\n case 'auto':\n case 'bottom':\n // 1: the menu will fit, do nothing\n if (viewSpaceBelow >= menuHeight) {\n return {\n placement: 'bottom',\n maxHeight: preferredMaxHeight\n };\n }\n\n // 2: the menu will fit, if scrolled\n if (scrollSpaceBelow >= menuHeight && !isFixedPosition) {\n if (shouldScroll) {\n animatedScrollTo(scrollParent, scrollDown, scrollDuration);\n }\n return {\n placement: 'bottom',\n maxHeight: preferredMaxHeight\n };\n }\n\n // 3: the menu will fit, if constrained\n if (!isFixedPosition && scrollSpaceBelow >= minHeight || isFixedPosition && viewSpaceBelow >= minHeight) {\n if (shouldScroll) {\n animatedScrollTo(scrollParent, scrollDown, scrollDuration);\n }\n\n // we want to provide as much of the menu as possible to the user,\n // so give them whatever is available below rather than the minHeight.\n var constrainedHeight = isFixedPosition ? viewSpaceBelow - marginBottom : scrollSpaceBelow - marginBottom;\n return {\n placement: 'bottom',\n maxHeight: constrainedHeight\n };\n }\n\n // 4. Forked beviour when there isn't enough space below\n\n // AUTO: flip the menu, render above\n if (preferredPlacement === 'auto' || isFixedPosition) {\n // may need to be constrained after flipping\n var _constrainedHeight = preferredMaxHeight;\n var spaceAbove = isFixedPosition ? viewSpaceAbove : scrollSpaceAbove;\n if (spaceAbove >= minHeight) {\n _constrainedHeight = Math.min(spaceAbove - marginBottom - controlHeight, preferredMaxHeight);\n }\n return {\n placement: 'top',\n maxHeight: _constrainedHeight\n };\n }\n\n // BOTTOM: allow browser to increase scrollable area and immediately set scroll\n if (preferredPlacement === 'bottom') {\n if (shouldScroll) {\n scrollTo(scrollParent, scrollDown);\n }\n return {\n placement: 'bottom',\n maxHeight: preferredMaxHeight\n };\n }\n break;\n case 'top':\n // 1: the menu will fit, do nothing\n if (viewSpaceAbove >= menuHeight) {\n return {\n placement: 'top',\n maxHeight: preferredMaxHeight\n };\n }\n\n // 2: the menu will fit, if scrolled\n if (scrollSpaceAbove >= menuHeight && !isFixedPosition) {\n if (shouldScroll) {\n animatedScrollTo(scrollParent, scrollUp, scrollDuration);\n }\n return {\n placement: 'top',\n maxHeight: preferredMaxHeight\n };\n }\n\n // 3: the menu will fit, if constrained\n if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {\n var _constrainedHeight2 = preferredMaxHeight;\n\n // we want to provide as much of the menu as possible to the user,\n // so give them whatever is available below rather than the minHeight.\n if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {\n _constrainedHeight2 = isFixedPosition ? viewSpaceAbove - marginTop : scrollSpaceAbove - marginTop;\n }\n if (shouldScroll) {\n animatedScrollTo(scrollParent, scrollUp, scrollDuration);\n }\n return {\n placement: 'top',\n maxHeight: _constrainedHeight2\n };\n }\n\n // 4. not enough space, the browser WILL NOT increase scrollable area when\n // absolutely positioned element rendered above the viewport (only below).\n // Flip the menu, render below\n return {\n placement: 'bottom',\n maxHeight: preferredMaxHeight\n };\n default:\n throw new Error(\"Invalid placement provided \\\"\".concat(preferredPlacement, \"\\\".\"));\n }\n return defaultState;\n}\n\n// Menu Component\n// ------------------------------\n\nfunction alignToControl(placement) {\n var placementToCSSProp = {\n bottom: 'top',\n top: 'bottom'\n };\n return placement ? placementToCSSProp[placement] : 'bottom';\n}\nvar coercePlacement = function coercePlacement(p) {\n return p === 'auto' ? 'bottom' : p;\n};\nvar menuCSS = function menuCSS(_ref2, unstyled) {\n var _objectSpread2;\n var placement = _ref2.placement,\n _ref2$theme = _ref2.theme,\n borderRadius = _ref2$theme.borderRadius,\n spacing = _ref2$theme.spacing,\n colors = _ref2$theme.colors;\n return _objectSpread((_objectSpread2 = {\n label: 'menu'\n }, _defineProperty(_objectSpread2, alignToControl(placement), '100%'), _defineProperty(_objectSpread2, \"position\", 'absolute'), _defineProperty(_objectSpread2, \"width\", '100%'), _defineProperty(_objectSpread2, \"zIndex\", 1), _objectSpread2), unstyled ? {} : {\n backgroundColor: colors.neutral0,\n borderRadius: borderRadius,\n boxShadow: '0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)',\n marginBottom: spacing.menuGutter,\n marginTop: spacing.menuGutter\n });\n};\nvar PortalPlacementContext = /*#__PURE__*/createContext(null);\n\n// NOTE: internal only\nvar MenuPlacer = function MenuPlacer(props) {\n var children = props.children,\n minMenuHeight = props.minMenuHeight,\n maxMenuHeight = props.maxMenuHeight,\n menuPlacement = props.menuPlacement,\n menuPosition = props.menuPosition,\n menuShouldScrollIntoView = props.menuShouldScrollIntoView,\n theme = props.theme;\n var _ref3 = useContext(PortalPlacementContext) || {},\n setPortalPlacement = _ref3.setPortalPlacement;\n var ref = useRef(null);\n var _useState = useState(maxMenuHeight),\n _useState2 = _slicedToArray(_useState, 2),\n maxHeight = _useState2[0],\n setMaxHeight = _useState2[1];\n var _useState3 = useState(null),\n _useState4 = _slicedToArray(_useState3, 2),\n placement = _useState4[0],\n setPlacement = _useState4[1];\n var controlHeight = theme.spacing.controlHeight;\n useLayoutEffect(function () {\n var menuEl = ref.current;\n if (!menuEl) return;\n\n // DO NOT scroll if position is fixed\n var isFixedPosition = menuPosition === 'fixed';\n var shouldScroll = menuShouldScrollIntoView && !isFixedPosition;\n var state = getMenuPlacement({\n maxHeight: maxMenuHeight,\n menuEl: menuEl,\n minHeight: minMenuHeight,\n placement: menuPlacement,\n shouldScroll: shouldScroll,\n isFixedPosition: isFixedPosition,\n controlHeight: controlHeight\n });\n setMaxHeight(state.maxHeight);\n setPlacement(state.placement);\n setPortalPlacement === null || setPortalPlacement === void 0 ? void 0 : setPortalPlacement(state.placement);\n }, [maxMenuHeight, menuPlacement, menuPosition, menuShouldScrollIntoView, minMenuHeight, setPortalPlacement, controlHeight]);\n return children({\n ref: ref,\n placerProps: _objectSpread(_objectSpread({}, props), {}, {\n placement: placement || coercePlacement(menuPlacement),\n maxHeight: maxHeight\n })\n });\n};\nvar Menu = function Menu(props) {\n var children = props.children,\n innerRef = props.innerRef,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({}, getStyleProps(props, 'menu', {\n menu: true\n }), {\n ref: innerRef\n }, innerProps), children);\n};\nvar Menu$1 = Menu;\n\n// ==============================\n// Menu List\n// ==============================\n\nvar menuListCSS = function menuListCSS(_ref4, unstyled) {\n var maxHeight = _ref4.maxHeight,\n baseUnit = _ref4.theme.spacing.baseUnit;\n return _objectSpread({\n maxHeight: maxHeight,\n overflowY: 'auto',\n position: 'relative',\n // required for offset[Height, Top] > keyboard scroll\n WebkitOverflowScrolling: 'touch'\n }, unstyled ? {} : {\n paddingBottom: baseUnit,\n paddingTop: baseUnit\n });\n};\nvar MenuList = function MenuList(props) {\n var children = props.children,\n innerProps = props.innerProps,\n innerRef = props.innerRef,\n isMulti = props.isMulti;\n return jsx(\"div\", _extends({}, getStyleProps(props, 'menuList', {\n 'menu-list': true,\n 'menu-list--is-multi': isMulti\n }), {\n ref: innerRef\n }, innerProps), children);\n};\n\n// ==============================\n// Menu Notices\n// ==============================\n\nvar noticeCSS = function noticeCSS(_ref5, unstyled) {\n var _ref5$theme = _ref5.theme,\n baseUnit = _ref5$theme.spacing.baseUnit,\n colors = _ref5$theme.colors;\n return _objectSpread({\n textAlign: 'center'\n }, unstyled ? {} : {\n color: colors.neutral40,\n padding: \"\".concat(baseUnit * 2, \"px \").concat(baseUnit * 3, \"px\")\n });\n};\nvar noOptionsMessageCSS = noticeCSS;\nvar loadingMessageCSS = noticeCSS;\nvar NoOptionsMessage = function NoOptionsMessage(_ref6) {\n var _ref6$children = _ref6.children,\n children = _ref6$children === void 0 ? 'No options' : _ref6$children,\n innerProps = _ref6.innerProps,\n restProps = _objectWithoutProperties(_ref6, _excluded$3);\n return jsx(\"div\", _extends({}, getStyleProps(_objectSpread(_objectSpread({}, restProps), {}, {\n children: children,\n innerProps: innerProps\n }), 'noOptionsMessage', {\n 'menu-notice': true,\n 'menu-notice--no-options': true\n }), innerProps), children);\n};\nvar LoadingMessage = function LoadingMessage(_ref7) {\n var _ref7$children = _ref7.children,\n children = _ref7$children === void 0 ? 'Loading...' : _ref7$children,\n innerProps = _ref7.innerProps,\n restProps = _objectWithoutProperties(_ref7, _excluded2$1);\n return jsx(\"div\", _extends({}, getStyleProps(_objectSpread(_objectSpread({}, restProps), {}, {\n children: children,\n innerProps: innerProps\n }), 'loadingMessage', {\n 'menu-notice': true,\n 'menu-notice--loading': true\n }), innerProps), children);\n};\n\n// ==============================\n// Menu Portal\n// ==============================\n\nvar menuPortalCSS = function menuPortalCSS(_ref8) {\n var rect = _ref8.rect,\n offset = _ref8.offset,\n position = _ref8.position;\n return {\n left: rect.left,\n position: position,\n top: offset,\n width: rect.width,\n zIndex: 1\n };\n};\nvar MenuPortal = function MenuPortal(props) {\n var appendTo = props.appendTo,\n children = props.children,\n controlElement = props.controlElement,\n innerProps = props.innerProps,\n menuPlacement = props.menuPlacement,\n menuPosition = props.menuPosition;\n var menuPortalRef = useRef(null);\n var cleanupRef = useRef(null);\n var _useState5 = useState(coercePlacement(menuPlacement)),\n _useState6 = _slicedToArray(_useState5, 2),\n placement = _useState6[0],\n setPortalPlacement = _useState6[1];\n var portalPlacementContext = useMemo(function () {\n return {\n setPortalPlacement: setPortalPlacement\n };\n }, []);\n var _useState7 = useState(null),\n _useState8 = _slicedToArray(_useState7, 2),\n computedPosition = _useState8[0],\n setComputedPosition = _useState8[1];\n var updateComputedPosition = useCallback(function () {\n if (!controlElement) return;\n var rect = getBoundingClientObj(controlElement);\n var scrollDistance = menuPosition === 'fixed' ? 0 : window.pageYOffset;\n var offset = rect[placement] + scrollDistance;\n if (offset !== (computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.offset) || rect.left !== (computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.left) || rect.width !== (computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.width)) {\n setComputedPosition({\n offset: offset,\n rect: rect\n });\n }\n }, [controlElement, menuPosition, placement, computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.offset, computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.left, computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.width]);\n useLayoutEffect(function () {\n updateComputedPosition();\n }, [updateComputedPosition]);\n var runAutoUpdate = useCallback(function () {\n if (typeof cleanupRef.current === 'function') {\n cleanupRef.current();\n cleanupRef.current = null;\n }\n if (controlElement && menuPortalRef.current) {\n cleanupRef.current = autoUpdate(controlElement, menuPortalRef.current, updateComputedPosition, {\n elementResize: 'ResizeObserver' in window\n });\n }\n }, [controlElement, updateComputedPosition]);\n useLayoutEffect(function () {\n runAutoUpdate();\n }, [runAutoUpdate]);\n var setMenuPortalElement = useCallback(function (menuPortalElement) {\n menuPortalRef.current = menuPortalElement;\n runAutoUpdate();\n }, [runAutoUpdate]);\n\n // bail early if required elements aren't present\n if (!appendTo && menuPosition !== 'fixed' || !computedPosition) return null;\n\n // same wrapper element whether fixed or portalled\n var menuWrapper = jsx(\"div\", _extends({\n ref: setMenuPortalElement\n }, getStyleProps(_objectSpread(_objectSpread({}, props), {}, {\n offset: computedPosition.offset,\n position: menuPosition,\n rect: computedPosition.rect\n }), 'menuPortal', {\n 'menu-portal': true\n }), innerProps), children);\n return jsx(PortalPlacementContext.Provider, {\n value: portalPlacementContext\n }, appendTo ? /*#__PURE__*/createPortal(menuWrapper, appendTo) : menuWrapper);\n};\n\n// ==============================\n// Root Container\n// ==============================\n\nvar containerCSS = function containerCSS(_ref) {\n var isDisabled = _ref.isDisabled,\n isRtl = _ref.isRtl;\n return {\n label: 'container',\n direction: isRtl ? 'rtl' : undefined,\n pointerEvents: isDisabled ? 'none' : undefined,\n // cancel mouse events when disabled\n position: 'relative'\n };\n};\nvar SelectContainer = function SelectContainer(props) {\n var children = props.children,\n innerProps = props.innerProps,\n isDisabled = props.isDisabled,\n isRtl = props.isRtl;\n return jsx(\"div\", _extends({}, getStyleProps(props, 'container', {\n '--is-disabled': isDisabled,\n '--is-rtl': isRtl\n }), innerProps), children);\n};\n\n// ==============================\n// Value Container\n// ==============================\n\nvar valueContainerCSS = function valueContainerCSS(_ref2, unstyled) {\n var spacing = _ref2.theme.spacing,\n isMulti = _ref2.isMulti,\n hasValue = _ref2.hasValue,\n controlShouldRenderValue = _ref2.selectProps.controlShouldRenderValue;\n return _objectSpread({\n alignItems: 'center',\n display: isMulti && hasValue && controlShouldRenderValue ? 'flex' : 'grid',\n flex: 1,\n flexWrap: 'wrap',\n WebkitOverflowScrolling: 'touch',\n position: 'relative',\n overflow: 'hidden'\n }, unstyled ? {} : {\n padding: \"\".concat(spacing.baseUnit / 2, \"px \").concat(spacing.baseUnit * 2, \"px\")\n });\n};\nvar ValueContainer = function ValueContainer(props) {\n var children = props.children,\n innerProps = props.innerProps,\n isMulti = props.isMulti,\n hasValue = props.hasValue;\n return jsx(\"div\", _extends({}, getStyleProps(props, 'valueContainer', {\n 'value-container': true,\n 'value-container--is-multi': isMulti,\n 'value-container--has-value': hasValue\n }), innerProps), children);\n};\n\n// ==============================\n// Indicator Container\n// ==============================\n\nvar indicatorsContainerCSS = function indicatorsContainerCSS() {\n return {\n alignItems: 'center',\n alignSelf: 'stretch',\n display: 'flex',\n flexShrink: 0\n };\n};\nvar IndicatorsContainer = function IndicatorsContainer(props) {\n var children = props.children,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({}, getStyleProps(props, 'indicatorsContainer', {\n indicators: true\n }), innerProps), children);\n};\n\nvar _templateObject;\nvar _excluded$2 = [\"size\"],\n _excluded2 = [\"innerProps\", \"isRtl\", \"size\"];\nfunction _EMOTION_STRINGIFIED_CSS_ERROR__() { return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\"; }\n\n// ==============================\n// Dropdown & Clear Icons\n// ==============================\nvar _ref2 = process.env.NODE_ENV === \"production\" ? {\n name: \"8mmkcg\",\n styles: \"display:inline-block;fill:currentColor;line-height:1;stroke:currentColor;stroke-width:0\"\n} : {\n name: \"tj5bde-Svg\",\n styles: \"display:inline-block;fill:currentColor;line-height:1;stroke:currentColor;stroke-width:0;label:Svg;\",\n map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlCSSIsImZpbGUiOiJpbmRpY2F0b3JzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgSlNYLCBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcblxuaW1wb3J0IHtcbiAgQ29tbW9uUHJvcHNBbmRDbGFzc05hbWUsXG4gIENTU09iamVjdFdpdGhMYWJlbCxcbiAgR3JvdXBCYXNlLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRTdHlsZVByb3BzIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgSWNvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBTdmcgPSAoe1xuICBzaXplLFxuICAuLi5wcm9wc1xufTogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzdmcnXSAmIHsgc2l6ZTogbnVtYmVyIH0pID0+IChcbiAgPHN2Z1xuICAgIGhlaWdodD17c2l6ZX1cbiAgICB3aWR0aD17c2l6ZX1cbiAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICBjc3M9e3tcbiAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBsaW5lSGVpZ2h0OiAxLFxuICAgICAgc3Ryb2tlOiAnY3VycmVudENvbG9yJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAwLFxuICAgIH19XG4gICAgey4uLnByb3BzfVxuICAvPlxuKTtcblxuZXhwb3J0IHR5cGUgQ3Jvc3NJY29uUHJvcHMgPSBKU1guSW50cmluc2ljRWxlbWVudHNbJ3N2ZyddICYgeyBzaXplPzogbnVtYmVyIH07XG5leHBvcnQgY29uc3QgQ3Jvc3NJY29uID0gKHByb3BzOiBDcm9zc0ljb25Qcm9wcykgPT4gKFxuICA8U3ZnIHNpemU9ezIwfSB7Li4ucHJvcHN9PlxuICAgIDxwYXRoIGQ9XCJNMTQuMzQ4IDE0Ljg0OWMtMC40NjkgMC40NjktMS4yMjkgMC40NjktMS42OTcgMGwtMi42NTEtMy4wMzAtMi42NTEgMy4wMjljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDAtMC40NjktMC40NjktMC40NjktMS4yMjkgMC0xLjY5N2wyLjc1OC0zLjE1LTIuNzU5LTMuMTUyYy0wLjQ2OS0wLjQ2OS0wLjQ2OS0xLjIyOCAwLTEuNjk3czEuMjI4LTAuNDY5IDEuNjk3IDBsMi42NTIgMy4wMzEgMi42NTEtMy4wMzFjMC40NjktMC40NjkgMS4yMjgtMC40NjkgMS42OTcgMHMwLjQ2OSAxLjIyOSAwIDEuNjk3bC0yLjc1OCAzLjE1MiAyLjc1OCAzLjE1YzAuNDY5IDAuNDY5IDAuNDY5IDEuMjI5IDAgMS42OTh6XCIgLz5cbiAgPC9Tdmc+XG4pO1xuZXhwb3J0IHR5cGUgRG93bkNoZXZyb25Qcm9wcyA9IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3ZnJ10gJiB7IHNpemU/OiBudW1iZXIgfTtcbmV4cG9ydCBjb25zdCBEb3duQ2hldnJvbiA9IChwcm9wczogRG93bkNoZXZyb25Qcm9wcykgPT4gKFxuICA8U3ZnIHNpemU9ezIwfSB7Li4ucHJvcHN9PlxuICAgIDxwYXRoIGQ9XCJNNC41MTYgNy41NDhjMC40MzYtMC40NDYgMS4wNDMtMC40ODEgMS41NzYgMGwzLjkwOCAzLjc0NyAzLjkwOC0zLjc0N2MwLjUzMy0wLjQ4MSAxLjE0MS0wLjQ0NiAxLjU3NCAwIDAuNDM2IDAuNDQ1IDAuNDA4IDEuMTk3IDAgMS42MTUtMC40MDYgMC40MTgtNC42OTUgNC41MDItNC42OTUgNC41MDItMC4yMTcgMC4yMjMtMC41MDIgMC4zMzUtMC43ODcgMC4zMzVzLTAuNTctMC4xMTItMC43ODktMC4zMzVjMCAwLTQuMjg3LTQuMDg0LTQuNjk1LTQuNTAycy0wLjQzNi0xLjE3IDAtMS42MTV6XCIgLz5cbiAgPC9Tdmc+XG4pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgQnV0dG9uc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25JbmRpY2F0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIC8qKiBUaGUgY2hpbGRyZW4gdG8gYmUgcmVuZGVyZWQgaW5zaWRlIHRoZSBpbmRpY2F0b3IuICovXG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICAvKiogUHJvcHMgdGhhdCB3aWxsIGJlIHBhc3NlZCBvbiB0byB0aGUgY2hpbGRyZW4uICovXG4gIGlubmVyUHJvcHM6IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snZGl2J107XG4gIC8qKiBUaGUgZm9jdXNlZCBzdGF0ZSBvZiB0aGUgc2VsZWN0LiAqL1xuICBpc0ZvY3VzZWQ6IGJvb2xlYW47XG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG59XG5cbmNvbnN0IGJhc2VDU1MgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oXG4gIHtcbiAgICBpc0ZvY3VzZWQsXG4gICAgdGhlbWU6IHtcbiAgICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICAgIGNvbG9ycyxcbiAgICB9LFxuICB9OlxuICAgIHwgRHJvcGRvd25JbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPlxuICAgIHwgQ2xlYXJJbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPixcbiAgdW5zdHlsZWQ6IGJvb2xlYW5cbik6IENTU09iamVjdFdpdGhMYWJlbCA9PiAoe1xuICBsYWJlbDogJ2luZGljYXRvckNvbnRhaW5lcicsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgdHJhbnNpdGlvbjogJ2NvbG9yIDE1MG1zJyxcbiAgLi4uKHVuc3R5bGVkXG4gICAgPyB7fVxuICAgIDoge1xuICAgICAgICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw2MCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gICAgICAgIHBhZGRpbmc6IGJhc2VVbml0ICogMixcbiAgICAgICAgJzpob3Zlcic6IHtcbiAgICAgICAgICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw4MCA6IGNvbG9ycy5uZXV0cmFsNDAsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZHJvcGRvd25JbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xuZXhwb3J0IGNvbnN0IERyb3Bkb3duSW5kaWNhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogRHJvcGRvd25JbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPlxuKSA9PiB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5nZXRTdHlsZVByb3BzKHByb3BzLCAnZHJvcGRvd25JbmRpY2F0b3InLCB7XG4gICAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgJ2Ryb3Bkb3duLWluZGljYXRvcic6IHRydWUsXG4gICAgICB9KX1cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbiB8fCA8RG93bkNoZXZyb24gLz59XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENsZWFySW5kaWNhdG9yUHJvcHM8XG4gIE9wdGlvbiA9IHVua25vd24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuID0gYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPiA9IEdyb3VwQmFzZTxPcHRpb24+XG4+IGV4dGVuZHMgQ29tbW9uUHJvcHNBbmRDbGFzc05hbWU8T3B0aW9uLCBJc011bHRpLCBHcm91cD4ge1xuICAvKiogVGhlIGNoaWxkcmVuIHRvIGJlIHJlbmRlcmVkIGluc2lkZSB0aGUgaW5kaWNhdG9yLiAqL1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgLyoqIFByb3BzIHRoYXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGNoaWxkcmVuLiAqL1xuICBpbm5lclByb3BzOiBKU1guSW50cmluc2ljRWxlbWVudHNbJ2RpdiddO1xuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgY2xlYXJJbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xuZXhwb3J0IGNvbnN0IENsZWFySW5kaWNhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogQ2xlYXJJbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPlxuKSA9PiB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5nZXRTdHlsZVByb3BzKHByb3BzLCAnY2xlYXJJbmRpY2F0b3InLCB7XG4gICAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgJ2NsZWFyLWluZGljYXRvcic6IHRydWUsXG4gICAgICB9KX1cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbiB8fCA8Q3Jvc3NJY29uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZXBhcmF0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEluZGljYXRvclNlcGFyYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpbm5lclByb3BzPzogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzcGFuJ107XG59XG5cbmV4cG9ydCBjb25zdCBpbmRpY2F0b3JTZXBhcmF0b3JDU1MgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oXG4gIHtcbiAgICBpc0Rpc2FibGVkLFxuICAgIHRoZW1lOiB7XG4gICAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gICAgICBjb2xvcnMsXG4gICAgfSxcbiAgfTogSW5kaWNhdG9yU2VwYXJhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4sXG4gIHVuc3R5bGVkOiBib29sZWFuXG4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdpbmRpY2F0b3JTZXBhcmF0b3InLFxuICBhbGlnblNlbGY6ICdzdHJldGNoJyxcbiAgd2lkdGg6IDEsXG4gIC4uLih1bnN0eWxlZFxuICAgID8ge31cbiAgICA6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpc0Rpc2FibGVkID8gY29sb3JzLm5ldXRyYWwxMCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gICAgICAgIG1hcmdpbkJvdHRvbTogYmFzZVVuaXQgKiAyLFxuICAgICAgICBtYXJnaW5Ub3A6IGJhc2VVbml0ICogMixcbiAgICAgIH0pLFxufSk7XG5cbmV4cG9ydCBjb25zdCBJbmRpY2F0b3JTZXBhcmF0b3IgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oXG4gIHByb3BzOiBJbmRpY2F0b3JTZXBhcmF0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPlxuKSA9PiB7XG4gIGNvbnN0IHsgaW5uZXJQcm9wcyB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgey4uLmdldFN0eWxlUHJvcHMocHJvcHMsICdpbmRpY2F0b3JTZXBhcmF0b3InLCB7XG4gICAgICAgICdpbmRpY2F0b3Itc2VwYXJhdG9yJzogdHJ1ZSxcbiAgICAgIH0pfVxuICAgIC8+XG4gICk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIExvYWRpbmdcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBsb2FkaW5nRG90QW5pbWF0aW9ucyA9IGtleWZyYW1lc2BcbiAgMCUsIDgwJSwgMTAwJSB7IG9wYWNpdHk6IDA7IH1cbiAgNDAlIHsgb3BhY2l0eTogMTsgfVxuYDtcblxuZXhwb3J0IGNvbnN0IGxvYWRpbmdJbmRpY2F0b3JDU1MgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oXG4gIHtcbiAgICBpc0ZvY3VzZWQsXG4gICAgc2l6ZSxcbiAgICB0aGVtZToge1xuICAgICAgY29sb3JzLFxuICAgICAgc3BhY2luZzogeyBiYXNlVW5pdCB9LFxuICAgIH0sXG4gIH06IExvYWRpbmdJbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPixcbiAgdW5zdHlsZWQ6IGJvb2xlYW5cbik6IENTU09iamVjdFdpdGhMYWJlbCA9PiAoe1xuICBsYWJlbDogJ2xvYWRpbmdJbmRpY2F0b3InLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHRyYW5zaXRpb246ICdjb2xvciAxNTBtcycsXG4gIGFsaWduU2VsZjogJ2NlbnRlcicsXG4gIGZvbnRTaXplOiBzaXplLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBtYXJnaW5SaWdodDogc2l6ZSxcbiAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gIC4uLih1bnN0eWxlZFxuICAgID8ge31cbiAgICA6IHtcbiAgICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgICAgICBwYWRkaW5nOiBiYXNlVW5pdCAqIDIsXG4gICAgICB9KSxcbn0pO1xuXG5pbnRlcmZhY2UgTG9hZGluZ0RvdFByb3BzIHtcbiAgZGVsYXk6IG51bWJlcjtcbiAgb2Zmc2V0OiBib29sZWFuO1xufVxuY29uc3QgTG9hZGluZ0RvdCA9ICh7IGRlbGF5LCBvZmZzZXQgfTogTG9hZGluZ0RvdFByb3BzKSA9PiAoXG4gIDxzcGFuXG4gICAgY3NzPXt7XG4gICAgICBhbmltYXRpb246IGAke2xvYWRpbmdEb3RBbmltYXRpb25zfSAxcyBlYXNlLWluLW91dCAke2RlbGF5fW1zIGluZmluaXRlO2AsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdjdXJyZW50Q29sb3InLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMWVtJyxcbiAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgbWFyZ2luTGVmdDogb2Zmc2V0ID8gJzFlbScgOiB1bmRlZmluZWQsXG4gICAgICBoZWlnaHQ6ICcxZW0nLFxuICAgICAgdmVydGljYWxBbGlnbjogJ3RvcCcsXG4gICAgICB3aWR0aDogJzFlbScsXG4gICAgfX1cbiAgLz5cbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGluZ0luZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFByb3BzIHRoYXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGNoaWxkcmVuLiAqL1xuICBpbm5lclByb3BzOiBKU1guSW50cmluc2ljRWxlbWVudHNbJ2RpdiddO1xuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Rpc2FibGVkOiBib29sZWFuO1xuICAvKiogU2V0IHNpemUgb2YgdGhlIGNvbnRhaW5lci4gKi9cbiAgc2l6ZTogbnVtYmVyO1xufVxuZXhwb3J0IGNvbnN0IExvYWRpbmdJbmRpY2F0b3IgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oe1xuICBpbm5lclByb3BzLFxuICBpc1J0bCxcbiAgc2l6ZSA9IDQsXG4gIC4uLnJlc3RQcm9wc1xufTogTG9hZGluZ0luZGljYXRvclByb3BzPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgey4uLmdldFN0eWxlUHJvcHMoXG4gICAgICAgIHsgLi4ucmVzdFByb3BzLCBpbm5lclByb3BzLCBpc1J0bCwgc2l6ZSB9LFxuICAgICAgICAnbG9hZGluZ0luZGljYXRvcicsXG4gICAgICAgIHtcbiAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICAgJ2xvYWRpbmctaW5kaWNhdG9yJzogdHJ1ZSxcbiAgICAgICAgfVxuICAgICAgKX1cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgID5cbiAgICAgIDxMb2FkaW5nRG90IGRlbGF5PXswfSBvZmZzZXQ9e2lzUnRsfSAvPlxuICAgICAgPExvYWRpbmdEb3QgZGVsYXk9ezE2MH0gb2Zmc2V0IC8+XG4gICAgICA8TG9hZGluZ0RvdCBkZWxheT17MzIwfSBvZmZzZXQ9eyFpc1J0bH0gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iXX0= */\",\n toString: _EMOTION_STRINGIFIED_CSS_ERROR__\n};\nvar Svg = function Svg(_ref) {\n var size = _ref.size,\n props = _objectWithoutProperties(_ref, _excluded$2);\n return jsx(\"svg\", _extends({\n height: size,\n width: size,\n viewBox: \"0 0 20 20\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n css: _ref2\n }, props));\n};\nvar CrossIcon = function CrossIcon(props) {\n return jsx(Svg, _extends({\n size: 20\n }, props), jsx(\"path\", {\n d: \"M14.348 14.849c-0.469 0.469-1.229 0.469-1.697 0l-2.651-3.030-2.651 3.029c-0.469 0.469-1.229 0.469-1.697 0-0.469-0.469-0.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-0.469-0.469-0.469-1.228 0-1.697s1.228-0.469 1.697 0l2.652 3.031 2.651-3.031c0.469-0.469 1.228-0.469 1.697 0s0.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c0.469 0.469 0.469 1.229 0 1.698z\"\n }));\n};\nvar DownChevron = function DownChevron(props) {\n return jsx(Svg, _extends({\n size: 20\n }, props), jsx(\"path\", {\n d: \"M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z\"\n }));\n};\n\n// ==============================\n// Dropdown & Clear Buttons\n// ==============================\n\nvar baseCSS = function baseCSS(_ref3, unstyled) {\n var isFocused = _ref3.isFocused,\n _ref3$theme = _ref3.theme,\n baseUnit = _ref3$theme.spacing.baseUnit,\n colors = _ref3$theme.colors;\n return _objectSpread({\n label: 'indicatorContainer',\n display: 'flex',\n transition: 'color 150ms'\n }, unstyled ? {} : {\n color: isFocused ? colors.neutral60 : colors.neutral20,\n padding: baseUnit * 2,\n ':hover': {\n color: isFocused ? colors.neutral80 : colors.neutral40\n }\n });\n};\nvar dropdownIndicatorCSS = baseCSS;\nvar DropdownIndicator = function DropdownIndicator(props) {\n var children = props.children,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({}, getStyleProps(props, 'dropdownIndicator', {\n indicator: true,\n 'dropdown-indicator': true\n }), innerProps), children || jsx(DownChevron, null));\n};\nvar clearIndicatorCSS = baseCSS;\nvar ClearIndicator = function ClearIndicator(props) {\n var children = props.children,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({}, getStyleProps(props, 'clearIndicator', {\n indicator: true,\n 'clear-indicator': true\n }), innerProps), children || jsx(CrossIcon, null));\n};\n\n// ==============================\n// Separator\n// ==============================\n\nvar indicatorSeparatorCSS = function indicatorSeparatorCSS(_ref4, unstyled) {\n var isDisabled = _ref4.isDisabled,\n _ref4$theme = _ref4.theme,\n baseUnit = _ref4$theme.spacing.baseUnit,\n colors = _ref4$theme.colors;\n return _objectSpread({\n label: 'indicatorSeparator',\n alignSelf: 'stretch',\n width: 1\n }, unstyled ? {} : {\n backgroundColor: isDisabled ? colors.neutral10 : colors.neutral20,\n marginBottom: baseUnit * 2,\n marginTop: baseUnit * 2\n });\n};\nvar IndicatorSeparator = function IndicatorSeparator(props) {\n var innerProps = props.innerProps;\n return jsx(\"span\", _extends({}, innerProps, getStyleProps(props, 'indicatorSeparator', {\n 'indicator-separator': true\n })));\n};\n\n// ==============================\n// Loading\n// ==============================\n\nvar loadingDotAnimations = keyframes(_templateObject || (_templateObject = _taggedTemplateLiteral([\"\\n 0%, 80%, 100% { opacity: 0; }\\n 40% { opacity: 1; }\\n\"])));\nvar loadingIndicatorCSS = function loadingIndicatorCSS(_ref5, unstyled) {\n var isFocused = _ref5.isFocused,\n size = _ref5.size,\n _ref5$theme = _ref5.theme,\n colors = _ref5$theme.colors,\n baseUnit = _ref5$theme.spacing.baseUnit;\n return _objectSpread({\n label: 'loadingIndicator',\n display: 'flex',\n transition: 'color 150ms',\n alignSelf: 'center',\n fontSize: size,\n lineHeight: 1,\n marginRight: size,\n textAlign: 'center',\n verticalAlign: 'middle'\n }, unstyled ? {} : {\n color: isFocused ? colors.neutral60 : colors.neutral20,\n padding: baseUnit * 2\n });\n};\nvar LoadingDot = function LoadingDot(_ref6) {\n var delay = _ref6.delay,\n offset = _ref6.offset;\n return jsx(\"span\", {\n css: /*#__PURE__*/css$2({\n animation: \"\".concat(loadingDotAnimations, \" 1s ease-in-out \").concat(delay, \"ms infinite;\"),\n backgroundColor: 'currentColor',\n borderRadius: '1em',\n display: 'inline-block',\n marginLeft: offset ? '1em' : undefined,\n height: '1em',\n verticalAlign: 'top',\n width: '1em'\n }, process.env.NODE_ENV === \"production\" ? \"\" : \";label:LoadingDot;\", process.env.NODE_ENV === \"production\" ? \"\" : \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1RSSIsImZpbGUiOiJpbmRpY2F0b3JzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgSlNYLCBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcblxuaW1wb3J0IHtcbiAgQ29tbW9uUHJvcHNBbmRDbGFzc05hbWUsXG4gIENTU09iamVjdFdpdGhMYWJlbCxcbiAgR3JvdXBCYXNlLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRTdHlsZVByb3BzIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgSWNvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBTdmcgPSAoe1xuICBzaXplLFxuICAuLi5wcm9wc1xufTogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzdmcnXSAmIHsgc2l6ZTogbnVtYmVyIH0pID0+IChcbiAgPHN2Z1xuICAgIGhlaWdodD17c2l6ZX1cbiAgICB3aWR0aD17c2l6ZX1cbiAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICBjc3M9e3tcbiAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBsaW5lSGVpZ2h0OiAxLFxuICAgICAgc3Ryb2tlOiAnY3VycmVudENvbG9yJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAwLFxuICAgIH19XG4gICAgey4uLnByb3BzfVxuICAvPlxuKTtcblxuZXhwb3J0IHR5cGUgQ3Jvc3NJY29uUHJvcHMgPSBKU1guSW50cmluc2ljRWxlbWVudHNbJ3N2ZyddICYgeyBzaXplPzogbnVtYmVyIH07XG5leHBvcnQgY29uc3QgQ3Jvc3NJY29uID0gKHByb3BzOiBDcm9zc0ljb25Qcm9wcykgPT4gKFxuICA8U3ZnIHNpemU9ezIwfSB7Li4ucHJvcHN9PlxuICAgIDxwYXRoIGQ9XCJNMTQuMzQ4IDE0Ljg0OWMtMC40NjkgMC40NjktMS4yMjkgMC40NjktMS42OTcgMGwtMi42NTEtMy4wMzAtMi42NTEgMy4wMjljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDAtMC40NjktMC40NjktMC40NjktMS4yMjkgMC0xLjY5N2wyLjc1OC0zLjE1LTIuNzU5LTMuMTUyYy0wLjQ2OS0wLjQ2OS0wLjQ2OS0xLjIyOCAwLTEuNjk3czEuMjI4LTAuNDY5IDEuNjk3IDBsMi42NTIgMy4wMzEgMi42NTEtMy4wMzFjMC40NjktMC40NjkgMS4yMjgtMC40NjkgMS42OTcgMHMwLjQ2OSAxLjIyOSAwIDEuNjk3bC0yLjc1OCAzLjE1MiAyLjc1OCAzLjE1YzAuNDY5IDAuNDY5IDAuNDY5IDEuMjI5IDAgMS42OTh6XCIgLz5cbiAgPC9Tdmc+XG4pO1xuZXhwb3J0IHR5cGUgRG93bkNoZXZyb25Qcm9wcyA9IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3ZnJ10gJiB7IHNpemU/OiBudW1iZXIgfTtcbmV4cG9ydCBjb25zdCBEb3duQ2hldnJvbiA9IChwcm9wczogRG93bkNoZXZyb25Qcm9wcykgPT4gKFxuICA8U3ZnIHNpemU9ezIwfSB7Li4ucHJvcHN9PlxuICAgIDxwYXRoIGQ9XCJNNC41MTYgNy41NDhjMC40MzYtMC40NDYgMS4wNDMtMC40ODEgMS41NzYgMGwzLjkwOCAzLjc0NyAzLjkwOC0zLjc0N2MwLjUzMy0wLjQ4MSAxLjE0MS0wLjQ0NiAxLjU3NCAwIDAuNDM2IDAuNDQ1IDAuNDA4IDEuMTk3IDAgMS42MTUtMC40MDYgMC40MTgtNC42OTUgNC41MDItNC42OTUgNC41MDItMC4yMTcgMC4yMjMtMC41MDIgMC4zMzUtMC43ODcgMC4zMzVzLTAuNTctMC4xMTItMC43ODktMC4zMzVjMCAwLTQuMjg3LTQuMDg0LTQuNjk1LTQuNTAycy0wLjQzNi0xLjE3IDAtMS42MTV6XCIgLz5cbiAgPC9Tdmc+XG4pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgQnV0dG9uc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25JbmRpY2F0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIC8qKiBUaGUgY2hpbGRyZW4gdG8gYmUgcmVuZGVyZWQgaW5zaWRlIHRoZSBpbmRpY2F0b3IuICovXG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICAvKiogUHJvcHMgdGhhdCB3aWxsIGJlIHBhc3NlZCBvbiB0byB0aGUgY2hpbGRyZW4uICovXG4gIGlubmVyUHJvcHM6IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snZGl2J107XG4gIC8qKiBUaGUgZm9jdXNlZCBzdGF0ZSBvZiB0aGUgc2VsZWN0LiAqL1xuICBpc0ZvY3VzZWQ6IGJvb2xlYW47XG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG59XG5cbmNvbnN0IGJhc2VDU1MgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oXG4gIHtcbiAgICBpc0ZvY3VzZWQsXG4gICAgdGhlbWU6IHtcbiAgICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICAgIGNvbG9ycyxcbiAgICB9LFxuICB9OlxuICAgIHwgRHJvcGRvd25JbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPlxuICAgIHwgQ2xlYXJJbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPixcbiAgdW5zdHlsZWQ6IGJvb2xlYW5cbik6IENTU09iamVjdFdpdGhMYWJlbCA9PiAoe1xuICBsYWJlbDogJ2luZGljYXRvckNvbnRhaW5lcicsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgdHJhbnNpdGlvbjogJ2NvbG9yIDE1MG1zJyxcbiAgLi4uKHVuc3R5bGVkXG4gICAgPyB7fVxuICAgIDoge1xuICAgICAgICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw2MCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gICAgICAgIHBhZGRpbmc6IGJhc2VVbml0ICogMixcbiAgICAgICAgJzpob3Zlcic6IHtcbiAgICAgICAgICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw4MCA6IGNvbG9ycy5uZXV0cmFsNDAsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZHJvcGRvd25JbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xuZXhwb3J0IGNvbnN0IERyb3Bkb3duSW5kaWNhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogRHJvcGRvd25JbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPlxuKSA9PiB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5nZXRTdHlsZVByb3BzKHByb3BzLCAnZHJvcGRvd25JbmRpY2F0b3InLCB7XG4gICAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgJ2Ryb3Bkb3duLWluZGljYXRvcic6IHRydWUsXG4gICAgICB9KX1cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbiB8fCA8RG93bkNoZXZyb24gLz59XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENsZWFySW5kaWNhdG9yUHJvcHM8XG4gIE9wdGlvbiA9IHVua25vd24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuID0gYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPiA9IEdyb3VwQmFzZTxPcHRpb24+XG4+IGV4dGVuZHMgQ29tbW9uUHJvcHNBbmRDbGFzc05hbWU8T3B0aW9uLCBJc011bHRpLCBHcm91cD4ge1xuICAvKiogVGhlIGNoaWxkcmVuIHRvIGJlIHJlbmRlcmVkIGluc2lkZSB0aGUgaW5kaWNhdG9yLiAqL1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgLyoqIFByb3BzIHRoYXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGNoaWxkcmVuLiAqL1xuICBpbm5lclByb3BzOiBKU1guSW50cmluc2ljRWxlbWVudHNbJ2RpdiddO1xuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgY2xlYXJJbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xuZXhwb3J0IGNvbnN0IENsZWFySW5kaWNhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogQ2xlYXJJbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPlxuKSA9PiB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5nZXRTdHlsZVByb3BzKHByb3BzLCAnY2xlYXJJbmRpY2F0b3InLCB7XG4gICAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgJ2NsZWFyLWluZGljYXRvcic6IHRydWUsXG4gICAgICB9KX1cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbiB8fCA8Q3Jvc3NJY29uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZXBhcmF0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEluZGljYXRvclNlcGFyYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpbm5lclByb3BzPzogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzcGFuJ107XG59XG5cbmV4cG9ydCBjb25zdCBpbmRpY2F0b3JTZXBhcmF0b3JDU1MgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oXG4gIHtcbiAgICBpc0Rpc2FibGVkLFxuICAgIHRoZW1lOiB7XG4gICAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gICAgICBjb2xvcnMsXG4gICAgfSxcbiAgfTogSW5kaWNhdG9yU2VwYXJhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4sXG4gIHVuc3R5bGVkOiBib29sZWFuXG4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdpbmRpY2F0b3JTZXBhcmF0b3InLFxuICBhbGlnblNlbGY6ICdzdHJldGNoJyxcbiAgd2lkdGg6IDEsXG4gIC4uLih1bnN0eWxlZFxuICAgID8ge31cbiAgICA6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpc0Rpc2FibGVkID8gY29sb3JzLm5ldXRyYWwxMCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gICAgICAgIG1hcmdpbkJvdHRvbTogYmFzZVVuaXQgKiAyLFxuICAgICAgICBtYXJnaW5Ub3A6IGJhc2VVbml0ICogMixcbiAgICAgIH0pLFxufSk7XG5cbmV4cG9ydCBjb25zdCBJbmRpY2F0b3JTZXBhcmF0b3IgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oXG4gIHByb3BzOiBJbmRpY2F0b3JTZXBhcmF0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPlxuKSA9PiB7XG4gIGNvbnN0IHsgaW5uZXJQcm9wcyB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgey4uLmdldFN0eWxlUHJvcHMocHJvcHMsICdpbmRpY2F0b3JTZXBhcmF0b3InLCB7XG4gICAgICAgICdpbmRpY2F0b3Itc2VwYXJhdG9yJzogdHJ1ZSxcbiAgICAgIH0pfVxuICAgIC8+XG4gICk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIExvYWRpbmdcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBsb2FkaW5nRG90QW5pbWF0aW9ucyA9IGtleWZyYW1lc2BcbiAgMCUsIDgwJSwgMTAwJSB7IG9wYWNpdHk6IDA7IH1cbiAgNDAlIHsgb3BhY2l0eTogMTsgfVxuYDtcblxuZXhwb3J0IGNvbnN0IGxvYWRpbmdJbmRpY2F0b3JDU1MgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oXG4gIHtcbiAgICBpc0ZvY3VzZWQsXG4gICAgc2l6ZSxcbiAgICB0aGVtZToge1xuICAgICAgY29sb3JzLFxuICAgICAgc3BhY2luZzogeyBiYXNlVW5pdCB9LFxuICAgIH0sXG4gIH06IExvYWRpbmdJbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPixcbiAgdW5zdHlsZWQ6IGJvb2xlYW5cbik6IENTU09iamVjdFdpdGhMYWJlbCA9PiAoe1xuICBsYWJlbDogJ2xvYWRpbmdJbmRpY2F0b3InLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHRyYW5zaXRpb246ICdjb2xvciAxNTBtcycsXG4gIGFsaWduU2VsZjogJ2NlbnRlcicsXG4gIGZvbnRTaXplOiBzaXplLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBtYXJnaW5SaWdodDogc2l6ZSxcbiAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gIC4uLih1bnN0eWxlZFxuICAgID8ge31cbiAgICA6IHtcbiAgICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgICAgICBwYWRkaW5nOiBiYXNlVW5pdCAqIDIsXG4gICAgICB9KSxcbn0pO1xuXG5pbnRlcmZhY2UgTG9hZGluZ0RvdFByb3BzIHtcbiAgZGVsYXk6IG51bWJlcjtcbiAgb2Zmc2V0OiBib29sZWFuO1xufVxuY29uc3QgTG9hZGluZ0RvdCA9ICh7IGRlbGF5LCBvZmZzZXQgfTogTG9hZGluZ0RvdFByb3BzKSA9PiAoXG4gIDxzcGFuXG4gICAgY3NzPXt7XG4gICAgICBhbmltYXRpb246IGAke2xvYWRpbmdEb3RBbmltYXRpb25zfSAxcyBlYXNlLWluLW91dCAke2RlbGF5fW1zIGluZmluaXRlO2AsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdjdXJyZW50Q29sb3InLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMWVtJyxcbiAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgbWFyZ2luTGVmdDogb2Zmc2V0ID8gJzFlbScgOiB1bmRlZmluZWQsXG4gICAgICBoZWlnaHQ6ICcxZW0nLFxuICAgICAgdmVydGljYWxBbGlnbjogJ3RvcCcsXG4gICAgICB3aWR0aDogJzFlbScsXG4gICAgfX1cbiAgLz5cbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGluZ0luZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFByb3BzIHRoYXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGNoaWxkcmVuLiAqL1xuICBpbm5lclByb3BzOiBKU1guSW50cmluc2ljRWxlbWVudHNbJ2RpdiddO1xuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Rpc2FibGVkOiBib29sZWFuO1xuICAvKiogU2V0IHNpemUgb2YgdGhlIGNvbnRhaW5lci4gKi9cbiAgc2l6ZTogbnVtYmVyO1xufVxuZXhwb3J0IGNvbnN0IExvYWRpbmdJbmRpY2F0b3IgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oe1xuICBpbm5lclByb3BzLFxuICBpc1J0bCxcbiAgc2l6ZSA9IDQsXG4gIC4uLnJlc3RQcm9wc1xufTogTG9hZGluZ0luZGljYXRvclByb3BzPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgey4uLmdldFN0eWxlUHJvcHMoXG4gICAgICAgIHsgLi4ucmVzdFByb3BzLCBpbm5lclByb3BzLCBpc1J0bCwgc2l6ZSB9LFxuICAgICAgICAnbG9hZGluZ0luZGljYXRvcicsXG4gICAgICAgIHtcbiAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICAgJ2xvYWRpbmctaW5kaWNhdG9yJzogdHJ1ZSxcbiAgICAgICAgfVxuICAgICAgKX1cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgID5cbiAgICAgIDxMb2FkaW5nRG90IGRlbGF5PXswfSBvZmZzZXQ9e2lzUnRsfSAvPlxuICAgICAgPExvYWRpbmdEb3QgZGVsYXk9ezE2MH0gb2Zmc2V0IC8+XG4gICAgICA8TG9hZGluZ0RvdCBkZWxheT17MzIwfSBvZmZzZXQ9eyFpc1J0bH0gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iXX0= */\")\n });\n};\nvar LoadingIndicator = function LoadingIndicator(_ref7) {\n var innerProps = _ref7.innerProps,\n isRtl = _ref7.isRtl,\n _ref7$size = _ref7.size,\n size = _ref7$size === void 0 ? 4 : _ref7$size,\n restProps = _objectWithoutProperties(_ref7, _excluded2);\n return jsx(\"div\", _extends({}, getStyleProps(_objectSpread(_objectSpread({}, restProps), {}, {\n innerProps: innerProps,\n isRtl: isRtl,\n size: size\n }), 'loadingIndicator', {\n indicator: true,\n 'loading-indicator': true\n }), innerProps), jsx(LoadingDot, {\n delay: 0,\n offset: isRtl\n }), jsx(LoadingDot, {\n delay: 160,\n offset: true\n }), jsx(LoadingDot, {\n delay: 320,\n offset: !isRtl\n }));\n};\n\nvar css$1 = function css(_ref, unstyled) {\n var isDisabled = _ref.isDisabled,\n isFocused = _ref.isFocused,\n _ref$theme = _ref.theme,\n colors = _ref$theme.colors,\n borderRadius = _ref$theme.borderRadius,\n spacing = _ref$theme.spacing;\n return _objectSpread({\n label: 'control',\n alignItems: 'center',\n cursor: 'default',\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n minHeight: spacing.controlHeight,\n outline: '0 !important',\n position: 'relative',\n transition: 'all 100ms'\n }, unstyled ? {} : {\n backgroundColor: isDisabled ? colors.neutral5 : colors.neutral0,\n borderColor: isDisabled ? colors.neutral10 : isFocused ? colors.primary : colors.neutral20,\n borderRadius: borderRadius,\n borderStyle: 'solid',\n borderWidth: 1,\n boxShadow: isFocused ? \"0 0 0 1px \".concat(colors.primary) : undefined,\n '&:hover': {\n borderColor: isFocused ? colors.primary : colors.neutral30\n }\n });\n};\nvar Control = function Control(props) {\n var children = props.children,\n isDisabled = props.isDisabled,\n isFocused = props.isFocused,\n innerRef = props.innerRef,\n innerProps = props.innerProps,\n menuIsOpen = props.menuIsOpen;\n return jsx(\"div\", _extends({\n ref: innerRef\n }, getStyleProps(props, 'control', {\n control: true,\n 'control--is-disabled': isDisabled,\n 'control--is-focused': isFocused,\n 'control--menu-is-open': menuIsOpen\n }), innerProps, {\n \"aria-disabled\": isDisabled || undefined\n }), children);\n};\nvar Control$1 = Control;\n\nvar _excluded$1 = [\"data\"];\nvar groupCSS = function groupCSS(_ref, unstyled) {\n var spacing = _ref.theme.spacing;\n return unstyled ? {} : {\n paddingBottom: spacing.baseUnit * 2,\n paddingTop: spacing.baseUnit * 2\n };\n};\nvar Group = function Group(props) {\n var children = props.children,\n cx = props.cx,\n getStyles = props.getStyles,\n getClassNames = props.getClassNames,\n Heading = props.Heading,\n headingProps = props.headingProps,\n innerProps = props.innerProps,\n label = props.label,\n theme = props.theme,\n selectProps = props.selectProps;\n return jsx(\"div\", _extends({}, getStyleProps(props, 'group', {\n group: true\n }), innerProps), jsx(Heading, _extends({}, headingProps, {\n selectProps: selectProps,\n theme: theme,\n getStyles: getStyles,\n getClassNames: getClassNames,\n cx: cx\n }), label), jsx(\"div\", null, children));\n};\nvar groupHeadingCSS = function groupHeadingCSS(_ref2, unstyled) {\n var _ref2$theme = _ref2.theme,\n colors = _ref2$theme.colors,\n spacing = _ref2$theme.spacing;\n return _objectSpread({\n label: 'group',\n cursor: 'default',\n display: 'block'\n }, unstyled ? {} : {\n color: colors.neutral40,\n fontSize: '75%',\n fontWeight: 500,\n marginBottom: '0.25em',\n paddingLeft: spacing.baseUnit * 3,\n paddingRight: spacing.baseUnit * 3,\n textTransform: 'uppercase'\n });\n};\nvar GroupHeading = function GroupHeading(props) {\n var _cleanCommonProps = cleanCommonProps(props);\n _cleanCommonProps.data;\n var innerProps = _objectWithoutProperties(_cleanCommonProps, _excluded$1);\n return jsx(\"div\", _extends({}, getStyleProps(props, 'groupHeading', {\n 'group-heading': true\n }), innerProps));\n};\nvar Group$1 = Group;\n\nvar _excluded = [\"innerRef\", \"isDisabled\", \"isHidden\", \"inputClassName\"];\nvar inputCSS = function inputCSS(_ref, unstyled) {\n var isDisabled = _ref.isDisabled,\n value = _ref.value,\n _ref$theme = _ref.theme,\n spacing = _ref$theme.spacing,\n colors = _ref$theme.colors;\n return _objectSpread(_objectSpread({\n visibility: isDisabled ? 'hidden' : 'visible',\n // force css to recompute when value change due to @emotion bug.\n // We can remove it whenever the bug is fixed.\n transform: value ? 'translateZ(0)' : ''\n }, containerStyle), unstyled ? {} : {\n margin: spacing.baseUnit / 2,\n paddingBottom: spacing.baseUnit / 2,\n paddingTop: spacing.baseUnit / 2,\n color: colors.neutral80\n });\n};\nvar spacingStyle = {\n gridArea: '1 / 2',\n font: 'inherit',\n minWidth: '2px',\n border: 0,\n margin: 0,\n outline: 0,\n padding: 0\n};\nvar containerStyle = {\n flex: '1 1 auto',\n display: 'inline-grid',\n gridArea: '1 / 1 / 2 / 3',\n gridTemplateColumns: '0 min-content',\n '&:after': _objectSpread({\n content: 'attr(data-value) \" \"',\n visibility: 'hidden',\n whiteSpace: 'pre'\n }, spacingStyle)\n};\nvar inputStyle = function inputStyle(isHidden) {\n return _objectSpread({\n label: 'input',\n color: 'inherit',\n background: 0,\n opacity: isHidden ? 0 : 1,\n width: '100%'\n }, spacingStyle);\n};\nvar Input = function Input(props) {\n var cx = props.cx,\n value = props.value;\n var _cleanCommonProps = cleanCommonProps(props),\n innerRef = _cleanCommonProps.innerRef,\n isDisabled = _cleanCommonProps.isDisabled,\n isHidden = _cleanCommonProps.isHidden,\n inputClassName = _cleanCommonProps.inputClassName,\n innerProps = _objectWithoutProperties(_cleanCommonProps, _excluded);\n return jsx(\"div\", _extends({}, getStyleProps(props, 'input', {\n 'input-container': true\n }), {\n \"data-value\": value || ''\n }), jsx(\"input\", _extends({\n className: cx({\n input: true\n }, inputClassName),\n ref: innerRef,\n style: inputStyle(isHidden),\n disabled: isDisabled\n }, innerProps)));\n};\nvar Input$1 = Input;\n\nvar multiValueCSS = function multiValueCSS(_ref, unstyled) {\n var _ref$theme = _ref.theme,\n spacing = _ref$theme.spacing,\n borderRadius = _ref$theme.borderRadius,\n colors = _ref$theme.colors;\n return _objectSpread({\n label: 'multiValue',\n display: 'flex',\n minWidth: 0\n }, unstyled ? {} : {\n backgroundColor: colors.neutral10,\n borderRadius: borderRadius / 2,\n margin: spacing.baseUnit / 2\n });\n};\nvar multiValueLabelCSS = function multiValueLabelCSS(_ref2, unstyled) {\n var _ref2$theme = _ref2.theme,\n borderRadius = _ref2$theme.borderRadius,\n colors = _ref2$theme.colors,\n cropWithEllipsis = _ref2.cropWithEllipsis;\n return _objectSpread({\n overflow: 'hidden',\n textOverflow: cropWithEllipsis || cropWithEllipsis === undefined ? 'ellipsis' : undefined,\n whiteSpace: 'nowrap'\n }, unstyled ? {} : {\n borderRadius: borderRadius / 2,\n color: colors.neutral80,\n fontSize: '85%',\n padding: 3,\n paddingLeft: 6\n });\n};\nvar multiValueRemoveCSS = function multiValueRemoveCSS(_ref3, unstyled) {\n var _ref3$theme = _ref3.theme,\n spacing = _ref3$theme.spacing,\n borderRadius = _ref3$theme.borderRadius,\n colors = _ref3$theme.colors,\n isFocused = _ref3.isFocused;\n return _objectSpread({\n alignItems: 'center',\n display: 'flex'\n }, unstyled ? {} : {\n borderRadius: borderRadius / 2,\n backgroundColor: isFocused ? colors.dangerLight : undefined,\n paddingLeft: spacing.baseUnit,\n paddingRight: spacing.baseUnit,\n ':hover': {\n backgroundColor: colors.dangerLight,\n color: colors.danger\n }\n });\n};\nvar MultiValueGeneric = function MultiValueGeneric(_ref4) {\n var children = _ref4.children,\n innerProps = _ref4.innerProps;\n return jsx(\"div\", innerProps, children);\n};\nvar MultiValueContainer = MultiValueGeneric;\nvar MultiValueLabel = MultiValueGeneric;\nfunction MultiValueRemove(_ref5) {\n var children = _ref5.children,\n innerProps = _ref5.innerProps;\n return jsx(\"div\", _extends({\n role: \"button\"\n }, innerProps), children || jsx(CrossIcon, {\n size: 14\n }));\n}\nvar MultiValue = function MultiValue(props) {\n var children = props.children,\n components = props.components,\n data = props.data,\n innerProps = props.innerProps,\n isDisabled = props.isDisabled,\n removeProps = props.removeProps,\n selectProps = props.selectProps;\n var Container = components.Container,\n Label = components.Label,\n Remove = components.Remove;\n return jsx(Container, {\n data: data,\n innerProps: _objectSpread(_objectSpread({}, getStyleProps(props, 'multiValue', {\n 'multi-value': true,\n 'multi-value--is-disabled': isDisabled\n })), innerProps),\n selectProps: selectProps\n }, jsx(Label, {\n data: data,\n innerProps: _objectSpread({}, getStyleProps(props, 'multiValueLabel', {\n 'multi-value__label': true\n })),\n selectProps: selectProps\n }, children), jsx(Remove, {\n data: data,\n innerProps: _objectSpread(_objectSpread({}, getStyleProps(props, 'multiValueRemove', {\n 'multi-value__remove': true\n })), {}, {\n 'aria-label': \"Remove \".concat(children || 'option')\n }, removeProps),\n selectProps: selectProps\n }));\n};\nvar MultiValue$1 = MultiValue;\n\nvar optionCSS = function optionCSS(_ref, unstyled) {\n var isDisabled = _ref.isDisabled,\n isFocused = _ref.isFocused,\n isSelected = _ref.isSelected,\n _ref$theme = _ref.theme,\n spacing = _ref$theme.spacing,\n colors = _ref$theme.colors;\n return _objectSpread({\n label: 'option',\n cursor: 'default',\n display: 'block',\n fontSize: 'inherit',\n width: '100%',\n userSelect: 'none',\n WebkitTapHighlightColor: 'rgba(0, 0, 0, 0)'\n }, unstyled ? {} : {\n backgroundColor: isSelected ? colors.primary : isFocused ? colors.primary25 : 'transparent',\n color: isDisabled ? colors.neutral20 : isSelected ? colors.neutral0 : 'inherit',\n padding: \"\".concat(spacing.baseUnit * 2, \"px \").concat(spacing.baseUnit * 3, \"px\"),\n // provide some affordance on touch devices\n ':active': {\n backgroundColor: !isDisabled ? isSelected ? colors.primary : colors.primary50 : undefined\n }\n });\n};\nvar Option = function Option(props) {\n var children = props.children,\n isDisabled = props.isDisabled,\n isFocused = props.isFocused,\n isSelected = props.isSelected,\n innerRef = props.innerRef,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({}, getStyleProps(props, 'option', {\n option: true,\n 'option--is-disabled': isDisabled,\n 'option--is-focused': isFocused,\n 'option--is-selected': isSelected\n }), {\n ref: innerRef,\n \"aria-disabled\": isDisabled\n }, innerProps), children);\n};\nvar Option$1 = Option;\n\nvar placeholderCSS = function placeholderCSS(_ref, unstyled) {\n var _ref$theme = _ref.theme,\n spacing = _ref$theme.spacing,\n colors = _ref$theme.colors;\n return _objectSpread({\n label: 'placeholder',\n gridArea: '1 / 1 / 2 / 3'\n }, unstyled ? {} : {\n color: colors.neutral50,\n marginLeft: spacing.baseUnit / 2,\n marginRight: spacing.baseUnit / 2\n });\n};\nvar Placeholder = function Placeholder(props) {\n var children = props.children,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({}, getStyleProps(props, 'placeholder', {\n placeholder: true\n }), innerProps), children);\n};\nvar Placeholder$1 = Placeholder;\n\nvar css = function css(_ref, unstyled) {\n var isDisabled = _ref.isDisabled,\n _ref$theme = _ref.theme,\n spacing = _ref$theme.spacing,\n colors = _ref$theme.colors;\n return _objectSpread({\n label: 'singleValue',\n gridArea: '1 / 1 / 2 / 3',\n maxWidth: '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n }, unstyled ? {} : {\n color: isDisabled ? colors.neutral40 : colors.neutral80,\n marginLeft: spacing.baseUnit / 2,\n marginRight: spacing.baseUnit / 2\n });\n};\nvar SingleValue = function SingleValue(props) {\n var children = props.children,\n isDisabled = props.isDisabled,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({}, getStyleProps(props, 'singleValue', {\n 'single-value': true,\n 'single-value--is-disabled': isDisabled\n }), innerProps), children);\n};\nvar SingleValue$1 = SingleValue;\n\nvar components = {\n ClearIndicator: ClearIndicator,\n Control: Control$1,\n DropdownIndicator: DropdownIndicator,\n DownChevron: DownChevron,\n CrossIcon: CrossIcon,\n Group: Group$1,\n GroupHeading: GroupHeading,\n IndicatorsContainer: IndicatorsContainer,\n IndicatorSeparator: IndicatorSeparator,\n Input: Input$1,\n LoadingIndicator: LoadingIndicator,\n Menu: Menu$1,\n MenuList: MenuList,\n MenuPortal: MenuPortal,\n LoadingMessage: LoadingMessage,\n NoOptionsMessage: NoOptionsMessage,\n MultiValue: MultiValue$1,\n MultiValueContainer: MultiValueContainer,\n MultiValueLabel: MultiValueLabel,\n MultiValueRemove: MultiValueRemove,\n Option: Option$1,\n Placeholder: Placeholder$1,\n SelectContainer: SelectContainer,\n SingleValue: SingleValue$1,\n ValueContainer: ValueContainer\n};\nvar defaultComponents = function defaultComponents(props) {\n return _objectSpread(_objectSpread({}, components), props.components);\n};\n\nexport { isMobileDevice as A, multiValueAsValue as B, singleValueAsValue as C, valueTernary as D, classNames as E, defaultComponents as F, isDocumentElement as G, cleanValue as H, scrollIntoView as I, noop as J, notNullish as K, handleInputChange as L, MenuPlacer as M, clearIndicatorCSS as a, containerCSS as b, components as c, css$1 as d, dropdownIndicatorCSS as e, groupHeadingCSS as f, groupCSS as g, indicatorSeparatorCSS as h, indicatorsContainerCSS as i, inputCSS as j, loadingMessageCSS as k, loadingIndicatorCSS as l, menuCSS as m, menuListCSS as n, menuPortalCSS as o, multiValueCSS as p, multiValueLabelCSS as q, removeProps as r, supportsPassiveEvents as s, multiValueRemoveCSS as t, noOptionsMessageCSS as u, optionCSS as v, placeholderCSS as w, css as x, valueContainerCSS as y, isTouchCapable as z };\n","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var cache = null;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) {\n return cache.lastResult;\n }\n var lastResult = resultFn.apply(this, newArgs);\n cache = {\n lastResult: lastResult,\n lastArgs: newArgs,\n lastThis: this,\n };\n return lastResult;\n }\n memoized.clear = function clear() {\n cache = null;\n };\n return memoized;\n}\n\nexport { memoizeOne as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _createSuper from '@babel/runtime/helpers/esm/createSuper';\nimport _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';\nimport * as React from 'react';\nimport { useMemo, Fragment, useRef, useCallback, useEffect, Component } from 'react';\nimport { r as removeProps, s as supportsPassiveEvents, a as clearIndicatorCSS, b as containerCSS, d as css$1, e as dropdownIndicatorCSS, g as groupCSS, f as groupHeadingCSS, i as indicatorsContainerCSS, h as indicatorSeparatorCSS, j as inputCSS, l as loadingIndicatorCSS, k as loadingMessageCSS, m as menuCSS, n as menuListCSS, o as menuPortalCSS, p as multiValueCSS, q as multiValueLabelCSS, t as multiValueRemoveCSS, u as noOptionsMessageCSS, v as optionCSS, w as placeholderCSS, x as css$2, y as valueContainerCSS, z as isTouchCapable, A as isMobileDevice, B as multiValueAsValue, C as singleValueAsValue, D as valueTernary, E as classNames, F as defaultComponents, G as isDocumentElement, H as cleanValue, I as scrollIntoView, J as noop, M as MenuPlacer, K as notNullish } from './index-641ee5b8.esm.js';\nimport { jsx, css } from '@emotion/react';\nimport memoizeOne from 'memoize-one';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\n\nfunction _EMOTION_STRINGIFIED_CSS_ERROR__$2() { return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\"; }\n\n// Assistive text to describe visual elements. Hidden for sighted users.\nvar _ref = process.env.NODE_ENV === \"production\" ? {\n name: \"7pg0cj-a11yText\",\n styles: \"label:a11yText;z-index:9999;border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;width:1px;position:absolute;overflow:hidden;padding:0;white-space:nowrap\"\n} : {\n name: \"1f43avz-a11yText-A11yText\",\n styles: \"label:a11yText;z-index:9999;border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;width:1px;position:absolute;overflow:hidden;padding:0;white-space:nowrap;label:A11yText;\",\n map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkExMXlUZXh0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPSSIsImZpbGUiOiJBMTF5VGV4dC50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGpzeCBqc3ggKi9cbmltcG9ydCB7IEpTWCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcblxuLy8gQXNzaXN0aXZlIHRleHQgdG8gZGVzY3JpYmUgdmlzdWFsIGVsZW1lbnRzLiBIaWRkZW4gZm9yIHNpZ2h0ZWQgdXNlcnMuXG5jb25zdCBBMTF5VGV4dCA9IChwcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzcGFuJ10pID0+IChcbiAgPHNwYW5cbiAgICBjc3M9e3tcbiAgICAgIGxhYmVsOiAnYTExeVRleHQnLFxuICAgICAgekluZGV4OiA5OTk5LFxuICAgICAgYm9yZGVyOiAwLFxuICAgICAgY2xpcDogJ3JlY3QoMXB4LCAxcHgsIDFweCwgMXB4KScsXG4gICAgICBoZWlnaHQ6IDEsXG4gICAgICB3aWR0aDogMSxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgcGFkZGluZzogMCxcbiAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIH19XG4gICAgey4uLnByb3BzfVxuICAvPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQTExeVRleHQ7XG4iXX0= */\",\n toString: _EMOTION_STRINGIFIED_CSS_ERROR__$2\n};\nvar A11yText = function A11yText(props) {\n return jsx(\"span\", _extends({\n css: _ref\n }, props));\n};\nvar A11yText$1 = A11yText;\n\nvar defaultAriaLiveMessages = {\n guidance: function guidance(props) {\n var isSearchable = props.isSearchable,\n isMulti = props.isMulti,\n tabSelectsValue = props.tabSelectsValue,\n context = props.context,\n isInitialFocus = props.isInitialFocus;\n switch (context) {\n case 'menu':\n return \"Use Up and Down to choose options, press Enter to select the currently focused option, press Escape to exit the menu\".concat(tabSelectsValue ? ', press Tab to select the option and exit the menu' : '', \".\");\n case 'input':\n return isInitialFocus ? \"\".concat(props['aria-label'] || 'Select', \" is focused \").concat(isSearchable ? ',type to refine list' : '', \", press Down to open the menu, \").concat(isMulti ? ' press left to focus selected values' : '') : '';\n case 'value':\n return 'Use left and right to toggle between focused values, press Backspace to remove the currently focused value';\n default:\n return '';\n }\n },\n onChange: function onChange(props) {\n var action = props.action,\n _props$label = props.label,\n label = _props$label === void 0 ? '' : _props$label,\n labels = props.labels,\n isDisabled = props.isDisabled;\n switch (action) {\n case 'deselect-option':\n case 'pop-value':\n case 'remove-value':\n return \"option \".concat(label, \", deselected.\");\n case 'clear':\n return 'All selected options have been cleared.';\n case 'initial-input-focus':\n return \"option\".concat(labels.length > 1 ? 's' : '', \" \").concat(labels.join(','), \", selected.\");\n case 'select-option':\n return isDisabled ? \"option \".concat(label, \" is disabled. Select another option.\") : \"option \".concat(label, \", selected.\");\n default:\n return '';\n }\n },\n onFocus: function onFocus(props) {\n var context = props.context,\n focused = props.focused,\n options = props.options,\n _props$label2 = props.label,\n label = _props$label2 === void 0 ? '' : _props$label2,\n selectValue = props.selectValue,\n isDisabled = props.isDisabled,\n isSelected = props.isSelected,\n isAppleDevice = props.isAppleDevice;\n var getArrayIndex = function getArrayIndex(arr, item) {\n return arr && arr.length ? \"\".concat(arr.indexOf(item) + 1, \" of \").concat(arr.length) : '';\n };\n if (context === 'value' && selectValue) {\n return \"value \".concat(label, \" focused, \").concat(getArrayIndex(selectValue, focused), \".\");\n }\n if (context === 'menu' && isAppleDevice) {\n var disabled = isDisabled ? ' disabled' : '';\n var status = \"\".concat(isSelected ? ' selected' : '').concat(disabled);\n return \"\".concat(label).concat(status, \", \").concat(getArrayIndex(options, focused), \".\");\n }\n return '';\n },\n onFilter: function onFilter(props) {\n var inputValue = props.inputValue,\n resultsMessage = props.resultsMessage;\n return \"\".concat(resultsMessage).concat(inputValue ? ' for search term ' + inputValue : '', \".\");\n }\n};\n\nvar LiveRegion = function LiveRegion(props) {\n var ariaSelection = props.ariaSelection,\n focusedOption = props.focusedOption,\n focusedValue = props.focusedValue,\n focusableOptions = props.focusableOptions,\n isFocused = props.isFocused,\n selectValue = props.selectValue,\n selectProps = props.selectProps,\n id = props.id,\n isAppleDevice = props.isAppleDevice;\n var ariaLiveMessages = selectProps.ariaLiveMessages,\n getOptionLabel = selectProps.getOptionLabel,\n inputValue = selectProps.inputValue,\n isMulti = selectProps.isMulti,\n isOptionDisabled = selectProps.isOptionDisabled,\n isSearchable = selectProps.isSearchable,\n menuIsOpen = selectProps.menuIsOpen,\n options = selectProps.options,\n screenReaderStatus = selectProps.screenReaderStatus,\n tabSelectsValue = selectProps.tabSelectsValue,\n isLoading = selectProps.isLoading;\n var ariaLabel = selectProps['aria-label'];\n var ariaLive = selectProps['aria-live'];\n\n // Update aria live message configuration when prop changes\n var messages = useMemo(function () {\n return _objectSpread(_objectSpread({}, defaultAriaLiveMessages), ariaLiveMessages || {});\n }, [ariaLiveMessages]);\n\n // Update aria live selected option when prop changes\n var ariaSelected = useMemo(function () {\n var message = '';\n if (ariaSelection && messages.onChange) {\n var option = ariaSelection.option,\n selectedOptions = ariaSelection.options,\n removedValue = ariaSelection.removedValue,\n removedValues = ariaSelection.removedValues,\n value = ariaSelection.value;\n // select-option when !isMulti does not return option so we assume selected option is value\n var asOption = function asOption(val) {\n return !Array.isArray(val) ? val : null;\n };\n\n // If there is just one item from the action then get its label\n var selected = removedValue || option || asOption(value);\n var label = selected ? getOptionLabel(selected) : '';\n\n // If there are multiple items from the action then return an array of labels\n var multiSelected = selectedOptions || removedValues || undefined;\n var labels = multiSelected ? multiSelected.map(getOptionLabel) : [];\n var onChangeProps = _objectSpread({\n // multiSelected items are usually items that have already been selected\n // or set by the user as a default value so we assume they are not disabled\n isDisabled: selected && isOptionDisabled(selected, selectValue),\n label: label,\n labels: labels\n }, ariaSelection);\n message = messages.onChange(onChangeProps);\n }\n return message;\n }, [ariaSelection, messages, isOptionDisabled, selectValue, getOptionLabel]);\n var ariaFocused = useMemo(function () {\n var focusMsg = '';\n var focused = focusedOption || focusedValue;\n var isSelected = !!(focusedOption && selectValue && selectValue.includes(focusedOption));\n if (focused && messages.onFocus) {\n var onFocusProps = {\n focused: focused,\n label: getOptionLabel(focused),\n isDisabled: isOptionDisabled(focused, selectValue),\n isSelected: isSelected,\n options: focusableOptions,\n context: focused === focusedOption ? 'menu' : 'value',\n selectValue: selectValue,\n isAppleDevice: isAppleDevice\n };\n focusMsg = messages.onFocus(onFocusProps);\n }\n return focusMsg;\n }, [focusedOption, focusedValue, getOptionLabel, isOptionDisabled, messages, focusableOptions, selectValue, isAppleDevice]);\n var ariaResults = useMemo(function () {\n var resultsMsg = '';\n if (menuIsOpen && options.length && !isLoading && messages.onFilter) {\n var resultsMessage = screenReaderStatus({\n count: focusableOptions.length\n });\n resultsMsg = messages.onFilter({\n inputValue: inputValue,\n resultsMessage: resultsMessage\n });\n }\n return resultsMsg;\n }, [focusableOptions, inputValue, menuIsOpen, messages, options, screenReaderStatus, isLoading]);\n var isInitialFocus = (ariaSelection === null || ariaSelection === void 0 ? void 0 : ariaSelection.action) === 'initial-input-focus';\n var ariaGuidance = useMemo(function () {\n var guidanceMsg = '';\n if (messages.guidance) {\n var context = focusedValue ? 'value' : menuIsOpen ? 'menu' : 'input';\n guidanceMsg = messages.guidance({\n 'aria-label': ariaLabel,\n context: context,\n isDisabled: focusedOption && isOptionDisabled(focusedOption, selectValue),\n isMulti: isMulti,\n isSearchable: isSearchable,\n tabSelectsValue: tabSelectsValue,\n isInitialFocus: isInitialFocus\n });\n }\n return guidanceMsg;\n }, [ariaLabel, focusedOption, focusedValue, isMulti, isOptionDisabled, isSearchable, menuIsOpen, messages, selectValue, tabSelectsValue, isInitialFocus]);\n var ScreenReaderText = jsx(Fragment, null, jsx(\"span\", {\n id: \"aria-selection\"\n }, ariaSelected), jsx(\"span\", {\n id: \"aria-focused\"\n }, ariaFocused), jsx(\"span\", {\n id: \"aria-results\"\n }, ariaResults), jsx(\"span\", {\n id: \"aria-guidance\"\n }, ariaGuidance));\n return jsx(Fragment, null, jsx(A11yText$1, {\n id: id\n }, isInitialFocus && ScreenReaderText), jsx(A11yText$1, {\n \"aria-live\": ariaLive,\n \"aria-atomic\": \"false\",\n \"aria-relevant\": \"additions text\",\n role: \"log\"\n }, isFocused && !isInitialFocus && ScreenReaderText));\n};\nvar LiveRegion$1 = LiveRegion;\n\nvar diacritics = [{\n base: 'A',\n letters: \"A\\u24B6\\uFF21\\xC0\\xC1\\xC2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\xC3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\xC4\\u01DE\\u1EA2\\xC5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F\"\n}, {\n base: 'AA',\n letters: \"\\uA732\"\n}, {\n base: 'AE',\n letters: \"\\xC6\\u01FC\\u01E2\"\n}, {\n base: 'AO',\n letters: \"\\uA734\"\n}, {\n base: 'AU',\n letters: \"\\uA736\"\n}, {\n base: 'AV',\n letters: \"\\uA738\\uA73A\"\n}, {\n base: 'AY',\n letters: \"\\uA73C\"\n}, {\n base: 'B',\n letters: \"B\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181\"\n}, {\n base: 'C',\n letters: \"C\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\xC7\\u1E08\\u0187\\u023B\\uA73E\"\n}, {\n base: 'D',\n letters: \"D\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779\"\n}, {\n base: 'DZ',\n letters: \"\\u01F1\\u01C4\"\n}, {\n base: 'Dz',\n letters: \"\\u01F2\\u01C5\"\n}, {\n base: 'E',\n letters: \"E\\u24BA\\uFF25\\xC8\\xC9\\xCA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\xCB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E\"\n}, {\n base: 'F',\n letters: \"F\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B\"\n}, {\n base: 'G',\n letters: \"G\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E\"\n}, {\n base: 'H',\n letters: \"H\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D\"\n}, {\n base: 'I',\n letters: \"I\\u24BE\\uFF29\\xCC\\xCD\\xCE\\u0128\\u012A\\u012C\\u0130\\xCF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197\"\n}, {\n base: 'J',\n letters: \"J\\u24BF\\uFF2A\\u0134\\u0248\"\n}, {\n base: 'K',\n letters: \"K\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2\"\n}, {\n base: 'L',\n letters: \"L\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780\"\n}, {\n base: 'LJ',\n letters: \"\\u01C7\"\n}, {\n base: 'Lj',\n letters: \"\\u01C8\"\n}, {\n base: 'M',\n letters: \"M\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C\"\n}, {\n base: 'N',\n letters: \"N\\u24C3\\uFF2E\\u01F8\\u0143\\xD1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4\"\n}, {\n base: 'NJ',\n letters: \"\\u01CA\"\n}, {\n base: 'Nj',\n letters: \"\\u01CB\"\n}, {\n base: 'O',\n letters: \"O\\u24C4\\uFF2F\\xD2\\xD3\\xD4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\xD5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\xD6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\xD8\\u01FE\\u0186\\u019F\\uA74A\\uA74C\"\n}, {\n base: 'OI',\n letters: \"\\u01A2\"\n}, {\n base: 'OO',\n letters: \"\\uA74E\"\n}, {\n base: 'OU',\n letters: \"\\u0222\"\n}, {\n base: 'P',\n letters: \"P\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754\"\n}, {\n base: 'Q',\n letters: \"Q\\u24C6\\uFF31\\uA756\\uA758\\u024A\"\n}, {\n base: 'R',\n letters: \"R\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782\"\n}, {\n base: 'S',\n letters: \"S\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784\"\n}, {\n base: 'T',\n letters: \"T\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786\"\n}, {\n base: 'TZ',\n letters: \"\\uA728\"\n}, {\n base: 'U',\n letters: \"U\\u24CA\\uFF35\\xD9\\xDA\\xDB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\xDC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244\"\n}, {\n base: 'V',\n letters: \"V\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245\"\n}, {\n base: 'VY',\n letters: \"\\uA760\"\n}, {\n base: 'W',\n letters: \"W\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72\"\n}, {\n base: 'X',\n letters: \"X\\u24CD\\uFF38\\u1E8A\\u1E8C\"\n}, {\n base: 'Y',\n letters: \"Y\\u24CE\\uFF39\\u1EF2\\xDD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE\"\n}, {\n base: 'Z',\n letters: \"Z\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762\"\n}, {\n base: 'a',\n letters: \"a\\u24D0\\uFF41\\u1E9A\\xE0\\xE1\\xE2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\xE3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\xE4\\u01DF\\u1EA3\\xE5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250\"\n}, {\n base: 'aa',\n letters: \"\\uA733\"\n}, {\n base: 'ae',\n letters: \"\\xE6\\u01FD\\u01E3\"\n}, {\n base: 'ao',\n letters: \"\\uA735\"\n}, {\n base: 'au',\n letters: \"\\uA737\"\n}, {\n base: 'av',\n letters: \"\\uA739\\uA73B\"\n}, {\n base: 'ay',\n letters: \"\\uA73D\"\n}, {\n base: 'b',\n letters: \"b\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253\"\n}, {\n base: 'c',\n letters: \"c\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\xE7\\u1E09\\u0188\\u023C\\uA73F\\u2184\"\n}, {\n base: 'd',\n letters: \"d\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A\"\n}, {\n base: 'dz',\n letters: \"\\u01F3\\u01C6\"\n}, {\n base: 'e',\n letters: \"e\\u24D4\\uFF45\\xE8\\xE9\\xEA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\xEB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD\"\n}, {\n base: 'f',\n letters: \"f\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C\"\n}, {\n base: 'g',\n letters: \"g\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F\"\n}, {\n base: 'h',\n letters: \"h\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265\"\n}, {\n base: 'hv',\n letters: \"\\u0195\"\n}, {\n base: 'i',\n letters: \"i\\u24D8\\uFF49\\xEC\\xED\\xEE\\u0129\\u012B\\u012D\\xEF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131\"\n}, {\n base: 'j',\n letters: \"j\\u24D9\\uFF4A\\u0135\\u01F0\\u0249\"\n}, {\n base: 'k',\n letters: \"k\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3\"\n}, {\n base: 'l',\n letters: \"l\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747\"\n}, {\n base: 'lj',\n letters: \"\\u01C9\"\n}, {\n base: 'm',\n letters: \"m\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F\"\n}, {\n base: 'n',\n letters: \"n\\u24DD\\uFF4E\\u01F9\\u0144\\xF1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5\"\n}, {\n base: 'nj',\n letters: \"\\u01CC\"\n}, {\n base: 'o',\n letters: \"o\\u24DE\\uFF4F\\xF2\\xF3\\xF4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\xF5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\xF6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\xF8\\u01FF\\u0254\\uA74B\\uA74D\\u0275\"\n}, {\n base: 'oi',\n letters: \"\\u01A3\"\n}, {\n base: 'ou',\n letters: \"\\u0223\"\n}, {\n base: 'oo',\n letters: \"\\uA74F\"\n}, {\n base: 'p',\n letters: \"p\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755\"\n}, {\n base: 'q',\n letters: \"q\\u24E0\\uFF51\\u024B\\uA757\\uA759\"\n}, {\n base: 'r',\n letters: \"r\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783\"\n}, {\n base: 's',\n letters: \"s\\u24E2\\uFF53\\xDF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B\"\n}, {\n base: 't',\n letters: \"t\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787\"\n}, {\n base: 'tz',\n letters: \"\\uA729\"\n}, {\n base: 'u',\n letters: \"u\\u24E4\\uFF55\\xF9\\xFA\\xFB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\xFC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289\"\n}, {\n base: 'v',\n letters: \"v\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C\"\n}, {\n base: 'vy',\n letters: \"\\uA761\"\n}, {\n base: 'w',\n letters: \"w\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73\"\n}, {\n base: 'x',\n letters: \"x\\u24E7\\uFF58\\u1E8B\\u1E8D\"\n}, {\n base: 'y',\n letters: \"y\\u24E8\\uFF59\\u1EF3\\xFD\\u0177\\u1EF9\\u0233\\u1E8F\\xFF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF\"\n}, {\n base: 'z',\n letters: \"z\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763\"\n}];\nvar anyDiacritic = new RegExp('[' + diacritics.map(function (d) {\n return d.letters;\n}).join('') + ']', 'g');\nvar diacriticToBase = {};\nfor (var i = 0; i < diacritics.length; i++) {\n var diacritic = diacritics[i];\n for (var j = 0; j < diacritic.letters.length; j++) {\n diacriticToBase[diacritic.letters[j]] = diacritic.base;\n }\n}\nvar stripDiacritics = function stripDiacritics(str) {\n return str.replace(anyDiacritic, function (match) {\n return diacriticToBase[match];\n });\n};\n\nvar memoizedStripDiacriticsForInput = memoizeOne(stripDiacritics);\nvar trimString = function trimString(str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n};\nvar defaultStringify = function defaultStringify(option) {\n return \"\".concat(option.label, \" \").concat(option.value);\n};\nvar createFilter = function createFilter(config) {\n return function (option, rawInput) {\n // eslint-disable-next-line no-underscore-dangle\n if (option.data.__isNew__) return true;\n var _ignoreCase$ignoreAcc = _objectSpread({\n ignoreCase: true,\n ignoreAccents: true,\n stringify: defaultStringify,\n trim: true,\n matchFrom: 'any'\n }, config),\n ignoreCase = _ignoreCase$ignoreAcc.ignoreCase,\n ignoreAccents = _ignoreCase$ignoreAcc.ignoreAccents,\n stringify = _ignoreCase$ignoreAcc.stringify,\n trim = _ignoreCase$ignoreAcc.trim,\n matchFrom = _ignoreCase$ignoreAcc.matchFrom;\n var input = trim ? trimString(rawInput) : rawInput;\n var candidate = trim ? trimString(stringify(option)) : stringify(option);\n if (ignoreCase) {\n input = input.toLowerCase();\n candidate = candidate.toLowerCase();\n }\n if (ignoreAccents) {\n input = memoizedStripDiacriticsForInput(input);\n candidate = stripDiacritics(candidate);\n }\n return matchFrom === 'start' ? candidate.substr(0, input.length) === input : candidate.indexOf(input) > -1;\n };\n};\n\nvar _excluded = [\"innerRef\"];\nfunction DummyInput(_ref) {\n var innerRef = _ref.innerRef,\n props = _objectWithoutProperties(_ref, _excluded);\n // Remove animation props not meant for HTML elements\n var filteredProps = removeProps(props, 'onExited', 'in', 'enter', 'exit', 'appear');\n return jsx(\"input\", _extends({\n ref: innerRef\n }, filteredProps, {\n css: /*#__PURE__*/css({\n label: 'dummyInput',\n // get rid of any default styles\n background: 0,\n border: 0,\n // important! this hides the flashing cursor\n caretColor: 'transparent',\n fontSize: 'inherit',\n gridArea: '1 / 1 / 2 / 3',\n outline: 0,\n padding: 0,\n // important! without `width` browsers won't allow focus\n width: 1,\n // remove cursor on desktop\n color: 'transparent',\n // remove cursor on mobile whilst maintaining \"scroll into view\" behaviour\n left: -100,\n opacity: 0,\n position: 'relative',\n transform: 'scale(.01)'\n }, process.env.NODE_ENV === \"production\" ? \"\" : \";label:DummyInput;\", process.env.NODE_ENV === \"production\" ? \"\" : \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR1bW15SW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlCTSIsImZpbGUiOiJEdW1teUlucHV0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgSlNYLCBSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyByZW1vdmVQcm9wcyB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRHVtbXlJbnB1dCh7XG4gIGlubmVyUmVmLFxuICAuLi5wcm9wc1xufTogSlNYLkludHJpbnNpY0VsZW1lbnRzWydpbnB1dCddICYge1xuICByZWFkb25seSBpbm5lclJlZjogUmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xufSkge1xuICAvLyBSZW1vdmUgYW5pbWF0aW9uIHByb3BzIG5vdCBtZWFudCBmb3IgSFRNTCBlbGVtZW50c1xuICBjb25zdCBmaWx0ZXJlZFByb3BzID0gcmVtb3ZlUHJvcHMoXG4gICAgcHJvcHMsXG4gICAgJ29uRXhpdGVkJyxcbiAgICAnaW4nLFxuICAgICdlbnRlcicsXG4gICAgJ2V4aXQnLFxuICAgICdhcHBlYXInXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8aW5wdXRcbiAgICAgIHJlZj17aW5uZXJSZWZ9XG4gICAgICB7Li4uZmlsdGVyZWRQcm9wc31cbiAgICAgIGNzcz17e1xuICAgICAgICBsYWJlbDogJ2R1bW15SW5wdXQnLFxuICAgICAgICAvLyBnZXQgcmlkIG9mIGFueSBkZWZhdWx0IHN0eWxlc1xuICAgICAgICBiYWNrZ3JvdW5kOiAwLFxuICAgICAgICBib3JkZXI6IDAsXG4gICAgICAgIC8vIGltcG9ydGFudCEgdGhpcyBoaWRlcyB0aGUgZmxhc2hpbmcgY3Vyc29yXG4gICAgICAgIGNhcmV0Q29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIGZvbnRTaXplOiAnaW5oZXJpdCcsXG4gICAgICAgIGdyaWRBcmVhOiAnMSAvIDEgLyAyIC8gMycsXG4gICAgICAgIG91dGxpbmU6IDAsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIC8vIGltcG9ydGFudCEgd2l0aG91dCBgd2lkdGhgIGJyb3dzZXJzIHdvbid0IGFsbG93IGZvY3VzXG4gICAgICAgIHdpZHRoOiAxLFxuXG4gICAgICAgIC8vIHJlbW92ZSBjdXJzb3Igb24gZGVza3RvcFxuICAgICAgICBjb2xvcjogJ3RyYW5zcGFyZW50JyxcblxuICAgICAgICAvLyByZW1vdmUgY3Vyc29yIG9uIG1vYmlsZSB3aGlsc3QgbWFpbnRhaW5pbmcgXCJzY3JvbGwgaW50byB2aWV3XCIgYmVoYXZpb3VyXG4gICAgICAgIGxlZnQ6IC0xMDAsXG4gICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSguMDEpJyxcbiAgICAgIH19XG4gICAgLz5cbiAgKTtcbn1cbiJdfQ== */\")\n }));\n}\n\nvar cancelScroll = function cancelScroll(event) {\n if (event.cancelable) event.preventDefault();\n event.stopPropagation();\n};\nfunction useScrollCapture(_ref) {\n var isEnabled = _ref.isEnabled,\n onBottomArrive = _ref.onBottomArrive,\n onBottomLeave = _ref.onBottomLeave,\n onTopArrive = _ref.onTopArrive,\n onTopLeave = _ref.onTopLeave;\n var isBottom = useRef(false);\n var isTop = useRef(false);\n var touchStart = useRef(0);\n var scrollTarget = useRef(null);\n var handleEventDelta = useCallback(function (event, delta) {\n if (scrollTarget.current === null) return;\n var _scrollTarget$current = scrollTarget.current,\n scrollTop = _scrollTarget$current.scrollTop,\n scrollHeight = _scrollTarget$current.scrollHeight,\n clientHeight = _scrollTarget$current.clientHeight;\n var target = scrollTarget.current;\n var isDeltaPositive = delta > 0;\n var availableScroll = scrollHeight - clientHeight - scrollTop;\n var shouldCancelScroll = false;\n\n // reset bottom/top flags\n if (availableScroll > delta && isBottom.current) {\n if (onBottomLeave) onBottomLeave(event);\n isBottom.current = false;\n }\n if (isDeltaPositive && isTop.current) {\n if (onTopLeave) onTopLeave(event);\n isTop.current = false;\n }\n\n // bottom limit\n if (isDeltaPositive && delta > availableScroll) {\n if (onBottomArrive && !isBottom.current) {\n onBottomArrive(event);\n }\n target.scrollTop = scrollHeight;\n shouldCancelScroll = true;\n isBottom.current = true;\n\n // top limit\n } else if (!isDeltaPositive && -delta > scrollTop) {\n if (onTopArrive && !isTop.current) {\n onTopArrive(event);\n }\n target.scrollTop = 0;\n shouldCancelScroll = true;\n isTop.current = true;\n }\n\n // cancel scroll\n if (shouldCancelScroll) {\n cancelScroll(event);\n }\n }, [onBottomArrive, onBottomLeave, onTopArrive, onTopLeave]);\n var onWheel = useCallback(function (event) {\n handleEventDelta(event, event.deltaY);\n }, [handleEventDelta]);\n var onTouchStart = useCallback(function (event) {\n // set touch start so we can calculate touchmove delta\n touchStart.current = event.changedTouches[0].clientY;\n }, []);\n var onTouchMove = useCallback(function (event) {\n var deltaY = touchStart.current - event.changedTouches[0].clientY;\n handleEventDelta(event, deltaY);\n }, [handleEventDelta]);\n var startListening = useCallback(function (el) {\n // bail early if no element is available to attach to\n if (!el) return;\n var notPassive = supportsPassiveEvents ? {\n passive: false\n } : false;\n el.addEventListener('wheel', onWheel, notPassive);\n el.addEventListener('touchstart', onTouchStart, notPassive);\n el.addEventListener('touchmove', onTouchMove, notPassive);\n }, [onTouchMove, onTouchStart, onWheel]);\n var stopListening = useCallback(function (el) {\n // bail early if no element is available to detach from\n if (!el) return;\n el.removeEventListener('wheel', onWheel, false);\n el.removeEventListener('touchstart', onTouchStart, false);\n el.removeEventListener('touchmove', onTouchMove, false);\n }, [onTouchMove, onTouchStart, onWheel]);\n useEffect(function () {\n if (!isEnabled) return;\n var element = scrollTarget.current;\n startListening(element);\n return function () {\n stopListening(element);\n };\n }, [isEnabled, startListening, stopListening]);\n return function (element) {\n scrollTarget.current = element;\n };\n}\n\nvar STYLE_KEYS = ['boxSizing', 'height', 'overflow', 'paddingRight', 'position'];\nvar LOCK_STYLES = {\n boxSizing: 'border-box',\n // account for possible declaration `width: 100%;` on body\n overflow: 'hidden',\n position: 'relative',\n height: '100%'\n};\nfunction preventTouchMove(e) {\n if (e.cancelable) e.preventDefault();\n}\nfunction allowTouchMove(e) {\n e.stopPropagation();\n}\nfunction preventInertiaScroll() {\n var top = this.scrollTop;\n var totalScroll = this.scrollHeight;\n var currentScroll = top + this.offsetHeight;\n if (top === 0) {\n this.scrollTop = 1;\n } else if (currentScroll === totalScroll) {\n this.scrollTop = top - 1;\n }\n}\n\n// `ontouchstart` check works on most browsers\n// `maxTouchPoints` works on IE10/11 and Surface\nfunction isTouchDevice() {\n return 'ontouchstart' in window || navigator.maxTouchPoints;\n}\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nvar activeScrollLocks = 0;\nvar listenerOptions = {\n capture: false,\n passive: false\n};\nfunction useScrollLock(_ref) {\n var isEnabled = _ref.isEnabled,\n _ref$accountForScroll = _ref.accountForScrollbars,\n accountForScrollbars = _ref$accountForScroll === void 0 ? true : _ref$accountForScroll;\n var originalStyles = useRef({});\n var scrollTarget = useRef(null);\n var addScrollLock = useCallback(function (touchScrollTarget) {\n if (!canUseDOM) return;\n var target = document.body;\n var targetStyle = target && target.style;\n if (accountForScrollbars) {\n // store any styles already applied to the body\n STYLE_KEYS.forEach(function (key) {\n var val = targetStyle && targetStyle[key];\n originalStyles.current[key] = val;\n });\n }\n\n // apply the lock styles and padding if this is the first scroll lock\n if (accountForScrollbars && activeScrollLocks < 1) {\n var currentPadding = parseInt(originalStyles.current.paddingRight, 10) || 0;\n var clientWidth = document.body ? document.body.clientWidth : 0;\n var adjustedPadding = window.innerWidth - clientWidth + currentPadding || 0;\n Object.keys(LOCK_STYLES).forEach(function (key) {\n var val = LOCK_STYLES[key];\n if (targetStyle) {\n targetStyle[key] = val;\n }\n });\n if (targetStyle) {\n targetStyle.paddingRight = \"\".concat(adjustedPadding, \"px\");\n }\n }\n\n // account for touch devices\n if (target && isTouchDevice()) {\n // Mobile Safari ignores { overflow: hidden } declaration on the body.\n target.addEventListener('touchmove', preventTouchMove, listenerOptions);\n\n // Allow scroll on provided target\n if (touchScrollTarget) {\n touchScrollTarget.addEventListener('touchstart', preventInertiaScroll, listenerOptions);\n touchScrollTarget.addEventListener('touchmove', allowTouchMove, listenerOptions);\n }\n }\n\n // increment active scroll locks\n activeScrollLocks += 1;\n }, [accountForScrollbars]);\n var removeScrollLock = useCallback(function (touchScrollTarget) {\n if (!canUseDOM) return;\n var target = document.body;\n var targetStyle = target && target.style;\n\n // safely decrement active scroll locks\n activeScrollLocks = Math.max(activeScrollLocks - 1, 0);\n\n // reapply original body styles, if any\n if (accountForScrollbars && activeScrollLocks < 1) {\n STYLE_KEYS.forEach(function (key) {\n var val = originalStyles.current[key];\n if (targetStyle) {\n targetStyle[key] = val;\n }\n });\n }\n\n // remove touch listeners\n if (target && isTouchDevice()) {\n target.removeEventListener('touchmove', preventTouchMove, listenerOptions);\n if (touchScrollTarget) {\n touchScrollTarget.removeEventListener('touchstart', preventInertiaScroll, listenerOptions);\n touchScrollTarget.removeEventListener('touchmove', allowTouchMove, listenerOptions);\n }\n }\n }, [accountForScrollbars]);\n useEffect(function () {\n if (!isEnabled) return;\n var element = scrollTarget.current;\n addScrollLock(element);\n return function () {\n removeScrollLock(element);\n };\n }, [isEnabled, addScrollLock, removeScrollLock]);\n return function (element) {\n scrollTarget.current = element;\n };\n}\n\nfunction _EMOTION_STRINGIFIED_CSS_ERROR__$1() { return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\"; }\nvar blurSelectInput = function blurSelectInput(event) {\n var element = event.target;\n return element.ownerDocument.activeElement && element.ownerDocument.activeElement.blur();\n};\nvar _ref2$1 = process.env.NODE_ENV === \"production\" ? {\n name: \"1kfdb0e\",\n styles: \"position:fixed;left:0;bottom:0;right:0;top:0\"\n} : {\n name: \"bp8cua-ScrollManager\",\n styles: \"position:fixed;left:0;bottom:0;right:0;top:0;label:ScrollManager;\",\n map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNjcm9sbE1hbmFnZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9EVSIsImZpbGUiOiJTY3JvbGxNYW5hZ2VyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgRnJhZ21lbnQsIFJlYWN0RWxlbWVudCwgUmVmQ2FsbGJhY2ssIE1vdXNlRXZlbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlU2Nyb2xsQ2FwdHVyZSBmcm9tICcuL3VzZVNjcm9sbENhcHR1cmUnO1xuaW1wb3J0IHVzZVNjcm9sbExvY2sgZnJvbSAnLi91c2VTY3JvbGxMb2NrJztcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgcmVhZG9ubHkgY2hpbGRyZW46IChyZWY6IFJlZkNhbGxiYWNrPEhUTUxFbGVtZW50PikgPT4gUmVhY3RFbGVtZW50O1xuICByZWFkb25seSBsb2NrRW5hYmxlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2FwdHVyZUVuYWJsZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IG9uQm90dG9tQXJyaXZlPzogKGV2ZW50OiBXaGVlbEV2ZW50IHwgVG91Y2hFdmVudCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgb25Cb3R0b21MZWF2ZT86IChldmVudDogV2hlZWxFdmVudCB8IFRvdWNoRXZlbnQpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IG9uVG9wQXJyaXZlPzogKGV2ZW50OiBXaGVlbEV2ZW50IHwgVG91Y2hFdmVudCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgb25Ub3BMZWF2ZT86IChldmVudDogV2hlZWxFdmVudCB8IFRvdWNoRXZlbnQpID0+IHZvaWQ7XG59XG5cbmNvbnN0IGJsdXJTZWxlY3RJbnB1dCA9IChldmVudDogTW91c2VFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRGl2RWxlbWVudDtcbiAgcmV0dXJuIChcbiAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJlxuICAgIChlbGVtZW50Lm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuYmx1cigpXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTY3JvbGxNYW5hZ2VyKHtcbiAgY2hpbGRyZW4sXG4gIGxvY2tFbmFibGVkLFxuICBjYXB0dXJlRW5hYmxlZCA9IHRydWUsXG4gIG9uQm90dG9tQXJyaXZlLFxuICBvbkJvdHRvbUxlYXZlLFxuICBvblRvcEFycml2ZSxcbiAgb25Ub3BMZWF2ZSxcbn06IFByb3BzKSB7XG4gIGNvbnN0IHNldFNjcm9sbENhcHR1cmVUYXJnZXQgPSB1c2VTY3JvbGxDYXB0dXJlKHtcbiAgICBpc0VuYWJsZWQ6IGNhcHR1cmVFbmFibGVkLFxuICAgIG9uQm90dG9tQXJyaXZlLFxuICAgIG9uQm90dG9tTGVhdmUsXG4gICAgb25Ub3BBcnJpdmUsXG4gICAgb25Ub3BMZWF2ZSxcbiAgfSk7XG4gIGNvbnN0IHNldFNjcm9sbExvY2tUYXJnZXQgPSB1c2VTY3JvbGxMb2NrKHsgaXNFbmFibGVkOiBsb2NrRW5hYmxlZCB9KTtcblxuICBjb25zdCB0YXJnZXRSZWY6IFJlZkNhbGxiYWNrPEhUTUxFbGVtZW50PiA9IChlbGVtZW50KSA9PiB7XG4gICAgc2V0U2Nyb2xsQ2FwdHVyZVRhcmdldChlbGVtZW50KTtcbiAgICBzZXRTY3JvbGxMb2NrVGFyZ2V0KGVsZW1lbnQpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPEZyYWdtZW50PlxuICAgICAge2xvY2tFbmFibGVkICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIG9uQ2xpY2s9e2JsdXJTZWxlY3RJbnB1dH1cbiAgICAgICAgICBjc3M9e3sgcG9zaXRpb246ICdmaXhlZCcsIGxlZnQ6IDAsIGJvdHRvbTogMCwgcmlnaHQ6IDAsIHRvcDogMCB9fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtjaGlsZHJlbih0YXJnZXRSZWYpfVxuICAgIDwvRnJhZ21lbnQ+XG4gICk7XG59XG4iXX0= */\",\n toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1\n};\nfunction ScrollManager(_ref) {\n var children = _ref.children,\n lockEnabled = _ref.lockEnabled,\n _ref$captureEnabled = _ref.captureEnabled,\n captureEnabled = _ref$captureEnabled === void 0 ? true : _ref$captureEnabled,\n onBottomArrive = _ref.onBottomArrive,\n onBottomLeave = _ref.onBottomLeave,\n onTopArrive = _ref.onTopArrive,\n onTopLeave = _ref.onTopLeave;\n var setScrollCaptureTarget = useScrollCapture({\n isEnabled: captureEnabled,\n onBottomArrive: onBottomArrive,\n onBottomLeave: onBottomLeave,\n onTopArrive: onTopArrive,\n onTopLeave: onTopLeave\n });\n var setScrollLockTarget = useScrollLock({\n isEnabled: lockEnabled\n });\n var targetRef = function targetRef(element) {\n setScrollCaptureTarget(element);\n setScrollLockTarget(element);\n };\n return jsx(Fragment, null, lockEnabled && jsx(\"div\", {\n onClick: blurSelectInput,\n css: _ref2$1\n }), children(targetRef));\n}\n\nfunction _EMOTION_STRINGIFIED_CSS_ERROR__() { return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\"; }\nvar _ref2 = process.env.NODE_ENV === \"production\" ? {\n name: \"1a0ro4n-requiredInput\",\n styles: \"label:requiredInput;opacity:0;pointer-events:none;position:absolute;bottom:0;left:0;right:0;width:100%\"\n} : {\n name: \"5kkxb2-requiredInput-RequiredInput\",\n styles: \"label:requiredInput;opacity:0;pointer-events:none;position:absolute;bottom:0;left:0;right:0;width:100%;label:RequiredInput;\",\n map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlJlcXVpcmVkSW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWNJIiwiZmlsZSI6IlJlcXVpcmVkSW5wdXQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBqc3gganN4ICovXG5pbXBvcnQgeyBGb2N1c0V2ZW50SGFuZGxlciwgRnVuY3Rpb25Db21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmNvbnN0IFJlcXVpcmVkSW5wdXQ6IEZ1bmN0aW9uQ29tcG9uZW50PHtcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgb25Gb2N1czogRm9jdXNFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD47XG59PiA9ICh7IG5hbWUsIG9uRm9jdXMgfSkgPT4gKFxuICA8aW5wdXRcbiAgICByZXF1aXJlZFxuICAgIG5hbWU9e25hbWV9XG4gICAgdGFiSW5kZXg9ey0xfVxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICBjc3M9e3tcbiAgICAgIGxhYmVsOiAncmVxdWlyZWRJbnB1dCcsXG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBib3R0b206IDAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgIH19XG4gICAgLy8gUHJldmVudCBgU3dpdGNoaW5nIGZyb20gdW5jb250cm9sbGVkIHRvIGNvbnRyb2xsZWRgIGVycm9yXG4gICAgdmFsdWU9XCJcIlxuICAgIG9uQ2hhbmdlPXsoKSA9PiB7fX1cbiAgLz5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVpcmVkSW5wdXQ7XG4iXX0= */\",\n toString: _EMOTION_STRINGIFIED_CSS_ERROR__\n};\nvar RequiredInput = function RequiredInput(_ref) {\n var name = _ref.name,\n onFocus = _ref.onFocus;\n return jsx(\"input\", {\n required: true,\n name: name,\n tabIndex: -1,\n \"aria-hidden\": \"true\",\n onFocus: onFocus,\n css: _ref2\n // Prevent `Switching from uncontrolled to controlled` error\n ,\n value: \"\",\n onChange: function onChange() {}\n });\n};\nvar RequiredInput$1 = RequiredInput;\n\n/// <reference types=\"user-agent-data-types\" />\n\nfunction testPlatform(re) {\n var _window$navigator$use;\n return typeof window !== 'undefined' && window.navigator != null ? re.test(((_window$navigator$use = window.navigator['userAgentData']) === null || _window$navigator$use === void 0 ? void 0 : _window$navigator$use.platform) || window.navigator.platform) : false;\n}\nfunction isIPhone() {\n return testPlatform(/^iPhone/i);\n}\nfunction isMac() {\n return testPlatform(/^Mac/i);\n}\nfunction isIPad() {\n return testPlatform(/^iPad/i) ||\n // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support.\n isMac() && navigator.maxTouchPoints > 1;\n}\nfunction isIOS() {\n return isIPhone() || isIPad();\n}\nfunction isAppleDevice() {\n return isMac() || isIOS();\n}\n\nvar formatGroupLabel = function formatGroupLabel(group) {\n return group.label;\n};\nvar getOptionLabel$1 = function getOptionLabel(option) {\n return option.label;\n};\nvar getOptionValue$1 = function getOptionValue(option) {\n return option.value;\n};\nvar isOptionDisabled = function isOptionDisabled(option) {\n return !!option.isDisabled;\n};\n\nvar defaultStyles = {\n clearIndicator: clearIndicatorCSS,\n container: containerCSS,\n control: css$1,\n dropdownIndicator: dropdownIndicatorCSS,\n group: groupCSS,\n groupHeading: groupHeadingCSS,\n indicatorsContainer: indicatorsContainerCSS,\n indicatorSeparator: indicatorSeparatorCSS,\n input: inputCSS,\n loadingIndicator: loadingIndicatorCSS,\n loadingMessage: loadingMessageCSS,\n menu: menuCSS,\n menuList: menuListCSS,\n menuPortal: menuPortalCSS,\n multiValue: multiValueCSS,\n multiValueLabel: multiValueLabelCSS,\n multiValueRemove: multiValueRemoveCSS,\n noOptionsMessage: noOptionsMessageCSS,\n option: optionCSS,\n placeholder: placeholderCSS,\n singleValue: css$2,\n valueContainer: valueContainerCSS\n};\n// Merge Utility\n// Allows consumers to extend a base Select with additional styles\n\nfunction mergeStyles(source) {\n var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n // initialize with source styles\n var styles = _objectSpread({}, source);\n\n // massage in target styles\n Object.keys(target).forEach(function (keyAsString) {\n var key = keyAsString;\n if (source[key]) {\n styles[key] = function (rsCss, props) {\n return target[key](source[key](rsCss, props), props);\n };\n } else {\n styles[key] = target[key];\n }\n });\n return styles;\n}\n\nvar colors = {\n primary: '#2684FF',\n primary75: '#4C9AFF',\n primary50: '#B2D4FF',\n primary25: '#DEEBFF',\n danger: '#DE350B',\n dangerLight: '#FFBDAD',\n neutral0: 'hsl(0, 0%, 100%)',\n neutral5: 'hsl(0, 0%, 95%)',\n neutral10: 'hsl(0, 0%, 90%)',\n neutral20: 'hsl(0, 0%, 80%)',\n neutral30: 'hsl(0, 0%, 70%)',\n neutral40: 'hsl(0, 0%, 60%)',\n neutral50: 'hsl(0, 0%, 50%)',\n neutral60: 'hsl(0, 0%, 40%)',\n neutral70: 'hsl(0, 0%, 30%)',\n neutral80: 'hsl(0, 0%, 20%)',\n neutral90: 'hsl(0, 0%, 10%)'\n};\nvar borderRadius = 4;\n// Used to calculate consistent margin/padding on elements\nvar baseUnit = 4;\n// The minimum height of the control\nvar controlHeight = 38;\n// The amount of space between the control and menu */\nvar menuGutter = baseUnit * 2;\nvar spacing = {\n baseUnit: baseUnit,\n controlHeight: controlHeight,\n menuGutter: menuGutter\n};\nvar defaultTheme = {\n borderRadius: borderRadius,\n colors: colors,\n spacing: spacing\n};\n\nvar defaultProps = {\n 'aria-live': 'polite',\n backspaceRemovesValue: true,\n blurInputOnSelect: isTouchCapable(),\n captureMenuScroll: !isTouchCapable(),\n classNames: {},\n closeMenuOnSelect: true,\n closeMenuOnScroll: false,\n components: {},\n controlShouldRenderValue: true,\n escapeClearsValue: false,\n filterOption: createFilter(),\n formatGroupLabel: formatGroupLabel,\n getOptionLabel: getOptionLabel$1,\n getOptionValue: getOptionValue$1,\n isDisabled: false,\n isLoading: false,\n isMulti: false,\n isRtl: false,\n isSearchable: true,\n isOptionDisabled: isOptionDisabled,\n loadingMessage: function loadingMessage() {\n return 'Loading...';\n },\n maxMenuHeight: 300,\n minMenuHeight: 140,\n menuIsOpen: false,\n menuPlacement: 'bottom',\n menuPosition: 'absolute',\n menuShouldBlockScroll: false,\n menuShouldScrollIntoView: !isMobileDevice(),\n noOptionsMessage: function noOptionsMessage() {\n return 'No options';\n },\n openMenuOnFocus: false,\n openMenuOnClick: true,\n options: [],\n pageSize: 5,\n placeholder: 'Select...',\n screenReaderStatus: function screenReaderStatus(_ref) {\n var count = _ref.count;\n return \"\".concat(count, \" result\").concat(count !== 1 ? 's' : '', \" available\");\n },\n styles: {},\n tabIndex: 0,\n tabSelectsValue: true,\n unstyled: false\n};\nfunction toCategorizedOption(props, option, selectValue, index) {\n var isDisabled = _isOptionDisabled(props, option, selectValue);\n var isSelected = _isOptionSelected(props, option, selectValue);\n var label = getOptionLabel(props, option);\n var value = getOptionValue(props, option);\n return {\n type: 'option',\n data: option,\n isDisabled: isDisabled,\n isSelected: isSelected,\n label: label,\n value: value,\n index: index\n };\n}\nfunction buildCategorizedOptions(props, selectValue) {\n return props.options.map(function (groupOrOption, groupOrOptionIndex) {\n if ('options' in groupOrOption) {\n var categorizedOptions = groupOrOption.options.map(function (option, optionIndex) {\n return toCategorizedOption(props, option, selectValue, optionIndex);\n }).filter(function (categorizedOption) {\n return isFocusable(props, categorizedOption);\n });\n return categorizedOptions.length > 0 ? {\n type: 'group',\n data: groupOrOption,\n options: categorizedOptions,\n index: groupOrOptionIndex\n } : undefined;\n }\n var categorizedOption = toCategorizedOption(props, groupOrOption, selectValue, groupOrOptionIndex);\n return isFocusable(props, categorizedOption) ? categorizedOption : undefined;\n }).filter(notNullish);\n}\nfunction buildFocusableOptionsFromCategorizedOptions(categorizedOptions) {\n return categorizedOptions.reduce(function (optionsAccumulator, categorizedOption) {\n if (categorizedOption.type === 'group') {\n optionsAccumulator.push.apply(optionsAccumulator, _toConsumableArray(categorizedOption.options.map(function (option) {\n return option.data;\n })));\n } else {\n optionsAccumulator.push(categorizedOption.data);\n }\n return optionsAccumulator;\n }, []);\n}\nfunction buildFocusableOptionsWithIds(categorizedOptions, optionId) {\n return categorizedOptions.reduce(function (optionsAccumulator, categorizedOption) {\n if (categorizedOption.type === 'group') {\n optionsAccumulator.push.apply(optionsAccumulator, _toConsumableArray(categorizedOption.options.map(function (option) {\n return {\n data: option.data,\n id: \"\".concat(optionId, \"-\").concat(categorizedOption.index, \"-\").concat(option.index)\n };\n })));\n } else {\n optionsAccumulator.push({\n data: categorizedOption.data,\n id: \"\".concat(optionId, \"-\").concat(categorizedOption.index)\n });\n }\n return optionsAccumulator;\n }, []);\n}\nfunction buildFocusableOptions(props, selectValue) {\n return buildFocusableOptionsFromCategorizedOptions(buildCategorizedOptions(props, selectValue));\n}\nfunction isFocusable(props, categorizedOption) {\n var _props$inputValue = props.inputValue,\n inputValue = _props$inputValue === void 0 ? '' : _props$inputValue;\n var data = categorizedOption.data,\n isSelected = categorizedOption.isSelected,\n label = categorizedOption.label,\n value = categorizedOption.value;\n return (!shouldHideSelectedOptions(props) || !isSelected) && _filterOption(props, {\n label: label,\n value: value,\n data: data\n }, inputValue);\n}\nfunction getNextFocusedValue(state, nextSelectValue) {\n var focusedValue = state.focusedValue,\n lastSelectValue = state.selectValue;\n var lastFocusedIndex = lastSelectValue.indexOf(focusedValue);\n if (lastFocusedIndex > -1) {\n var nextFocusedIndex = nextSelectValue.indexOf(focusedValue);\n if (nextFocusedIndex > -1) {\n // the focused value is still in the selectValue, return it\n return focusedValue;\n } else if (lastFocusedIndex < nextSelectValue.length) {\n // the focusedValue is not present in the next selectValue array by\n // reference, so return the new value at the same index\n return nextSelectValue[lastFocusedIndex];\n }\n }\n return null;\n}\nfunction getNextFocusedOption(state, options) {\n var lastFocusedOption = state.focusedOption;\n return lastFocusedOption && options.indexOf(lastFocusedOption) > -1 ? lastFocusedOption : options[0];\n}\nvar getFocusedOptionId = function getFocusedOptionId(focusableOptionsWithIds, focusedOption) {\n var _focusableOptionsWith;\n var focusedOptionId = (_focusableOptionsWith = focusableOptionsWithIds.find(function (option) {\n return option.data === focusedOption;\n })) === null || _focusableOptionsWith === void 0 ? void 0 : _focusableOptionsWith.id;\n return focusedOptionId || null;\n};\nvar getOptionLabel = function getOptionLabel(props, data) {\n return props.getOptionLabel(data);\n};\nvar getOptionValue = function getOptionValue(props, data) {\n return props.getOptionValue(data);\n};\nfunction _isOptionDisabled(props, option, selectValue) {\n return typeof props.isOptionDisabled === 'function' ? props.isOptionDisabled(option, selectValue) : false;\n}\nfunction _isOptionSelected(props, option, selectValue) {\n if (selectValue.indexOf(option) > -1) return true;\n if (typeof props.isOptionSelected === 'function') {\n return props.isOptionSelected(option, selectValue);\n }\n var candidate = getOptionValue(props, option);\n return selectValue.some(function (i) {\n return getOptionValue(props, i) === candidate;\n });\n}\nfunction _filterOption(props, option, inputValue) {\n return props.filterOption ? props.filterOption(option, inputValue) : true;\n}\nvar shouldHideSelectedOptions = function shouldHideSelectedOptions(props) {\n var hideSelectedOptions = props.hideSelectedOptions,\n isMulti = props.isMulti;\n if (hideSelectedOptions === undefined) return isMulti;\n return hideSelectedOptions;\n};\nvar instanceId = 1;\nvar Select = /*#__PURE__*/function (_Component) {\n _inherits(Select, _Component);\n var _super = _createSuper(Select);\n // Misc. Instance Properties\n // ------------------------------\n\n // TODO\n\n // Refs\n // ------------------------------\n\n // Lifecycle\n // ------------------------------\n\n function Select(_props) {\n var _this;\n _classCallCheck(this, Select);\n _this = _super.call(this, _props);\n _this.state = {\n ariaSelection: null,\n focusedOption: null,\n focusedOptionId: null,\n focusableOptionsWithIds: [],\n focusedValue: null,\n inputIsHidden: false,\n isFocused: false,\n selectValue: [],\n clearFocusValueOnUpdate: false,\n prevWasFocused: false,\n inputIsHiddenAfterUpdate: undefined,\n prevProps: undefined,\n instancePrefix: '',\n isAppleDevice: false\n };\n _this.blockOptionHover = false;\n _this.isComposing = false;\n _this.commonProps = void 0;\n _this.initialTouchX = 0;\n _this.initialTouchY = 0;\n _this.openAfterFocus = false;\n _this.scrollToFocusedOptionOnUpdate = false;\n _this.userIsDragging = void 0;\n _this.controlRef = null;\n _this.getControlRef = function (ref) {\n _this.controlRef = ref;\n };\n _this.focusedOptionRef = null;\n _this.getFocusedOptionRef = function (ref) {\n _this.focusedOptionRef = ref;\n };\n _this.menuListRef = null;\n _this.getMenuListRef = function (ref) {\n _this.menuListRef = ref;\n };\n _this.inputRef = null;\n _this.getInputRef = function (ref) {\n _this.inputRef = ref;\n };\n _this.focus = _this.focusInput;\n _this.blur = _this.blurInput;\n _this.onChange = function (newValue, actionMeta) {\n var _this$props = _this.props,\n onChange = _this$props.onChange,\n name = _this$props.name;\n actionMeta.name = name;\n _this.ariaOnChange(newValue, actionMeta);\n onChange(newValue, actionMeta);\n };\n _this.setValue = function (newValue, action, option) {\n var _this$props2 = _this.props,\n closeMenuOnSelect = _this$props2.closeMenuOnSelect,\n isMulti = _this$props2.isMulti,\n inputValue = _this$props2.inputValue;\n _this.onInputChange('', {\n action: 'set-value',\n prevInputValue: inputValue\n });\n if (closeMenuOnSelect) {\n _this.setState({\n inputIsHiddenAfterUpdate: !isMulti\n });\n _this.onMenuClose();\n }\n // when the select value should change, we should reset focusedValue\n _this.setState({\n clearFocusValueOnUpdate: true\n });\n _this.onChange(newValue, {\n action: action,\n option: option\n });\n };\n _this.selectOption = function (newValue) {\n var _this$props3 = _this.props,\n blurInputOnSelect = _this$props3.blurInputOnSelect,\n isMulti = _this$props3.isMulti,\n name = _this$props3.name;\n var selectValue = _this.state.selectValue;\n var deselected = isMulti && _this.isOptionSelected(newValue, selectValue);\n var isDisabled = _this.isOptionDisabled(newValue, selectValue);\n if (deselected) {\n var candidate = _this.getOptionValue(newValue);\n _this.setValue(multiValueAsValue(selectValue.filter(function (i) {\n return _this.getOptionValue(i) !== candidate;\n })), 'deselect-option', newValue);\n } else if (!isDisabled) {\n // Select option if option is not disabled\n if (isMulti) {\n _this.setValue(multiValueAsValue([].concat(_toConsumableArray(selectValue), [newValue])), 'select-option', newValue);\n } else {\n _this.setValue(singleValueAsValue(newValue), 'select-option');\n }\n } else {\n _this.ariaOnChange(singleValueAsValue(newValue), {\n action: 'select-option',\n option: newValue,\n name: name\n });\n return;\n }\n if (blurInputOnSelect) {\n _this.blurInput();\n }\n };\n _this.removeValue = function (removedValue) {\n var isMulti = _this.props.isMulti;\n var selectValue = _this.state.selectValue;\n var candidate = _this.getOptionValue(removedValue);\n var newValueArray = selectValue.filter(function (i) {\n return _this.getOptionValue(i) !== candidate;\n });\n var newValue = valueTernary(isMulti, newValueArray, newValueArray[0] || null);\n _this.onChange(newValue, {\n action: 'remove-value',\n removedValue: removedValue\n });\n _this.focusInput();\n };\n _this.clearValue = function () {\n var selectValue = _this.state.selectValue;\n _this.onChange(valueTernary(_this.props.isMulti, [], null), {\n action: 'clear',\n removedValues: selectValue\n });\n };\n _this.popValue = function () {\n var isMulti = _this.props.isMulti;\n var selectValue = _this.state.selectValue;\n var lastSelectedValue = selectValue[selectValue.length - 1];\n var newValueArray = selectValue.slice(0, selectValue.length - 1);\n var newValue = valueTernary(isMulti, newValueArray, newValueArray[0] || null);\n if (lastSelectedValue) {\n _this.onChange(newValue, {\n action: 'pop-value',\n removedValue: lastSelectedValue\n });\n }\n };\n _this.getFocusedOptionId = function (focusedOption) {\n return getFocusedOptionId(_this.state.focusableOptionsWithIds, focusedOption);\n };\n _this.getFocusableOptionsWithIds = function () {\n return buildFocusableOptionsWithIds(buildCategorizedOptions(_this.props, _this.state.selectValue), _this.getElementId('option'));\n };\n _this.getValue = function () {\n return _this.state.selectValue;\n };\n _this.cx = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return classNames.apply(void 0, [_this.props.classNamePrefix].concat(args));\n };\n _this.getOptionLabel = function (data) {\n return getOptionLabel(_this.props, data);\n };\n _this.getOptionValue = function (data) {\n return getOptionValue(_this.props, data);\n };\n _this.getStyles = function (key, props) {\n var unstyled = _this.props.unstyled;\n var base = defaultStyles[key](props, unstyled);\n base.boxSizing = 'border-box';\n var custom = _this.props.styles[key];\n return custom ? custom(base, props) : base;\n };\n _this.getClassNames = function (key, props) {\n var _this$props$className, _this$props$className2;\n return (_this$props$className = (_this$props$className2 = _this.props.classNames)[key]) === null || _this$props$className === void 0 ? void 0 : _this$props$className.call(_this$props$className2, props);\n };\n _this.getElementId = function (element) {\n return \"\".concat(_this.state.instancePrefix, \"-\").concat(element);\n };\n _this.getComponents = function () {\n return defaultComponents(_this.props);\n };\n _this.buildCategorizedOptions = function () {\n return buildCategorizedOptions(_this.props, _this.state.selectValue);\n };\n _this.getCategorizedOptions = function () {\n return _this.props.menuIsOpen ? _this.buildCategorizedOptions() : [];\n };\n _this.buildFocusableOptions = function () {\n return buildFocusableOptionsFromCategorizedOptions(_this.buildCategorizedOptions());\n };\n _this.getFocusableOptions = function () {\n return _this.props.menuIsOpen ? _this.buildFocusableOptions() : [];\n };\n _this.ariaOnChange = function (value, actionMeta) {\n _this.setState({\n ariaSelection: _objectSpread({\n value: value\n }, actionMeta)\n });\n };\n _this.onMenuMouseDown = function (event) {\n if (event.button !== 0) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n _this.focusInput();\n };\n _this.onMenuMouseMove = function (event) {\n _this.blockOptionHover = false;\n };\n _this.onControlMouseDown = function (event) {\n // Event captured by dropdown indicator\n if (event.defaultPrevented) {\n return;\n }\n var openMenuOnClick = _this.props.openMenuOnClick;\n if (!_this.state.isFocused) {\n if (openMenuOnClick) {\n _this.openAfterFocus = true;\n }\n _this.focusInput();\n } else if (!_this.props.menuIsOpen) {\n if (openMenuOnClick) {\n _this.openMenu('first');\n }\n } else {\n if (event.target.tagName !== 'INPUT' && event.target.tagName !== 'TEXTAREA') {\n _this.onMenuClose();\n }\n }\n if (event.target.tagName !== 'INPUT' && event.target.tagName !== 'TEXTAREA') {\n event.preventDefault();\n }\n };\n _this.onDropdownIndicatorMouseDown = function (event) {\n // ignore mouse events that weren't triggered by the primary button\n if (event && event.type === 'mousedown' && event.button !== 0) {\n return;\n }\n if (_this.props.isDisabled) return;\n var _this$props4 = _this.props,\n isMulti = _this$props4.isMulti,\n menuIsOpen = _this$props4.menuIsOpen;\n _this.focusInput();\n if (menuIsOpen) {\n _this.setState({\n inputIsHiddenAfterUpdate: !isMulti\n });\n _this.onMenuClose();\n } else {\n _this.openMenu('first');\n }\n event.preventDefault();\n };\n _this.onClearIndicatorMouseDown = function (event) {\n // ignore mouse events that weren't triggered by the primary button\n if (event && event.type === 'mousedown' && event.button !== 0) {\n return;\n }\n _this.clearValue();\n event.preventDefault();\n _this.openAfterFocus = false;\n if (event.type === 'touchend') {\n _this.focusInput();\n } else {\n setTimeout(function () {\n return _this.focusInput();\n });\n }\n };\n _this.onScroll = function (event) {\n if (typeof _this.props.closeMenuOnScroll === 'boolean') {\n if (event.target instanceof HTMLElement && isDocumentElement(event.target)) {\n _this.props.onMenuClose();\n }\n } else if (typeof _this.props.closeMenuOnScroll === 'function') {\n if (_this.props.closeMenuOnScroll(event)) {\n _this.props.onMenuClose();\n }\n }\n };\n _this.onCompositionStart = function () {\n _this.isComposing = true;\n };\n _this.onCompositionEnd = function () {\n _this.isComposing = false;\n };\n _this.onTouchStart = function (_ref2) {\n var touches = _ref2.touches;\n var touch = touches && touches.item(0);\n if (!touch) {\n return;\n }\n _this.initialTouchX = touch.clientX;\n _this.initialTouchY = touch.clientY;\n _this.userIsDragging = false;\n };\n _this.onTouchMove = function (_ref3) {\n var touches = _ref3.touches;\n var touch = touches && touches.item(0);\n if (!touch) {\n return;\n }\n var deltaX = Math.abs(touch.clientX - _this.initialTouchX);\n var deltaY = Math.abs(touch.clientY - _this.initialTouchY);\n var moveThreshold = 5;\n _this.userIsDragging = deltaX > moveThreshold || deltaY > moveThreshold;\n };\n _this.onTouchEnd = function (event) {\n if (_this.userIsDragging) return;\n\n // close the menu if the user taps outside\n // we're checking on event.target here instead of event.currentTarget, because we want to assert information\n // on events on child elements, not the document (which we've attached this handler to).\n if (_this.controlRef && !_this.controlRef.contains(event.target) && _this.menuListRef && !_this.menuListRef.contains(event.target)) {\n _this.blurInput();\n }\n\n // reset move vars\n _this.initialTouchX = 0;\n _this.initialTouchY = 0;\n };\n _this.onControlTouchEnd = function (event) {\n if (_this.userIsDragging) return;\n _this.onControlMouseDown(event);\n };\n _this.onClearIndicatorTouchEnd = function (event) {\n if (_this.userIsDragging) return;\n _this.onClearIndicatorMouseDown(event);\n };\n _this.onDropdownIndicatorTouchEnd = function (event) {\n if (_this.userIsDragging) return;\n _this.onDropdownIndicatorMouseDown(event);\n };\n _this.handleInputChange = function (event) {\n var prevInputValue = _this.props.inputValue;\n var inputValue = event.currentTarget.value;\n _this.setState({\n inputIsHiddenAfterUpdate: false\n });\n _this.onInputChange(inputValue, {\n action: 'input-change',\n prevInputValue: prevInputValue\n });\n if (!_this.props.menuIsOpen) {\n _this.onMenuOpen();\n }\n };\n _this.onInputFocus = function (event) {\n if (_this.props.onFocus) {\n _this.props.onFocus(event);\n }\n _this.setState({\n inputIsHiddenAfterUpdate: false,\n isFocused: true\n });\n if (_this.openAfterFocus || _this.props.openMenuOnFocus) {\n _this.openMenu('first');\n }\n _this.openAfterFocus = false;\n };\n _this.onInputBlur = function (event) {\n var prevInputValue = _this.props.inputValue;\n if (_this.menuListRef && _this.menuListRef.contains(document.activeElement)) {\n _this.inputRef.focus();\n return;\n }\n if (_this.props.onBlur) {\n _this.props.onBlur(event);\n }\n _this.onInputChange('', {\n action: 'input-blur',\n prevInputValue: prevInputValue\n });\n _this.onMenuClose();\n _this.setState({\n focusedValue: null,\n isFocused: false\n });\n };\n _this.onOptionHover = function (focusedOption) {\n if (_this.blockOptionHover || _this.state.focusedOption === focusedOption) {\n return;\n }\n var options = _this.getFocusableOptions();\n var focusedOptionIndex = options.indexOf(focusedOption);\n _this.setState({\n focusedOption: focusedOption,\n focusedOptionId: focusedOptionIndex > -1 ? _this.getFocusedOptionId(focusedOption) : null\n });\n };\n _this.shouldHideSelectedOptions = function () {\n return shouldHideSelectedOptions(_this.props);\n };\n _this.onValueInputFocus = function (e) {\n e.preventDefault();\n e.stopPropagation();\n _this.focus();\n };\n _this.onKeyDown = function (event) {\n var _this$props5 = _this.props,\n isMulti = _this$props5.isMulti,\n backspaceRemovesValue = _this$props5.backspaceRemovesValue,\n escapeClearsValue = _this$props5.escapeClearsValue,\n inputValue = _this$props5.inputValue,\n isClearable = _this$props5.isClearable,\n isDisabled = _this$props5.isDisabled,\n menuIsOpen = _this$props5.menuIsOpen,\n onKeyDown = _this$props5.onKeyDown,\n tabSelectsValue = _this$props5.tabSelectsValue,\n openMenuOnFocus = _this$props5.openMenuOnFocus;\n var _this$state = _this.state,\n focusedOption = _this$state.focusedOption,\n focusedValue = _this$state.focusedValue,\n selectValue = _this$state.selectValue;\n if (isDisabled) return;\n if (typeof onKeyDown === 'function') {\n onKeyDown(event);\n if (event.defaultPrevented) {\n return;\n }\n }\n\n // Block option hover events when the user has just pressed a key\n _this.blockOptionHover = true;\n switch (event.key) {\n case 'ArrowLeft':\n if (!isMulti || inputValue) return;\n _this.focusValue('previous');\n break;\n case 'ArrowRight':\n if (!isMulti || inputValue) return;\n _this.focusValue('next');\n break;\n case 'Delete':\n case 'Backspace':\n if (inputValue) return;\n if (focusedValue) {\n _this.removeValue(focusedValue);\n } else {\n if (!backspaceRemovesValue) return;\n if (isMulti) {\n _this.popValue();\n } else if (isClearable) {\n _this.clearValue();\n }\n }\n break;\n case 'Tab':\n if (_this.isComposing) return;\n if (event.shiftKey || !menuIsOpen || !tabSelectsValue || !focusedOption ||\n // don't capture the event if the menu opens on focus and the focused\n // option is already selected; it breaks the flow of navigation\n openMenuOnFocus && _this.isOptionSelected(focusedOption, selectValue)) {\n return;\n }\n _this.selectOption(focusedOption);\n break;\n case 'Enter':\n if (event.keyCode === 229) {\n // ignore the keydown event from an Input Method Editor(IME)\n // ref. https://www.w3.org/TR/uievents/#determine-keydown-keyup-keyCode\n break;\n }\n if (menuIsOpen) {\n if (!focusedOption) return;\n if (_this.isComposing) return;\n _this.selectOption(focusedOption);\n break;\n }\n return;\n case 'Escape':\n if (menuIsOpen) {\n _this.setState({\n inputIsHiddenAfterUpdate: false\n });\n _this.onInputChange('', {\n action: 'menu-close',\n prevInputValue: inputValue\n });\n _this.onMenuClose();\n } else if (isClearable && escapeClearsValue) {\n _this.clearValue();\n }\n break;\n case ' ':\n // space\n if (inputValue) {\n return;\n }\n if (!menuIsOpen) {\n _this.openMenu('first');\n break;\n }\n if (!focusedOption) return;\n _this.selectOption(focusedOption);\n break;\n case 'ArrowUp':\n if (menuIsOpen) {\n _this.focusOption('up');\n } else {\n _this.openMenu('last');\n }\n break;\n case 'ArrowDown':\n if (menuIsOpen) {\n _this.focusOption('down');\n } else {\n _this.openMenu('first');\n }\n break;\n case 'PageUp':\n if (!menuIsOpen) return;\n _this.focusOption('pageup');\n break;\n case 'PageDown':\n if (!menuIsOpen) return;\n _this.focusOption('pagedown');\n break;\n case 'Home':\n if (!menuIsOpen) return;\n _this.focusOption('first');\n break;\n case 'End':\n if (!menuIsOpen) return;\n _this.focusOption('last');\n break;\n default:\n return;\n }\n event.preventDefault();\n };\n _this.state.instancePrefix = 'react-select-' + (_this.props.instanceId || ++instanceId);\n _this.state.selectValue = cleanValue(_props.value);\n // Set focusedOption if menuIsOpen is set on init (e.g. defaultMenuIsOpen)\n if (_props.menuIsOpen && _this.state.selectValue.length) {\n var focusableOptionsWithIds = _this.getFocusableOptionsWithIds();\n var focusableOptions = _this.buildFocusableOptions();\n var optionIndex = focusableOptions.indexOf(_this.state.selectValue[0]);\n _this.state.focusableOptionsWithIds = focusableOptionsWithIds;\n _this.state.focusedOption = focusableOptions[optionIndex];\n _this.state.focusedOptionId = getFocusedOptionId(focusableOptionsWithIds, focusableOptions[optionIndex]);\n }\n return _this;\n }\n _createClass(Select, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.startListeningComposition();\n this.startListeningToTouch();\n if (this.props.closeMenuOnScroll && document && document.addEventListener) {\n // Listen to all scroll events, and filter them out inside of 'onScroll'\n document.addEventListener('scroll', this.onScroll, true);\n }\n if (this.props.autoFocus) {\n this.focusInput();\n }\n\n // Scroll focusedOption into view if menuIsOpen is set on mount (e.g. defaultMenuIsOpen)\n if (this.props.menuIsOpen && this.state.focusedOption && this.menuListRef && this.focusedOptionRef) {\n scrollIntoView(this.menuListRef, this.focusedOptionRef);\n }\n if (isAppleDevice()) {\n // eslint-disable-next-line react/no-did-mount-set-state\n this.setState({\n isAppleDevice: true\n });\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var _this$props6 = this.props,\n isDisabled = _this$props6.isDisabled,\n menuIsOpen = _this$props6.menuIsOpen;\n var isFocused = this.state.isFocused;\n if (\n // ensure focus is restored correctly when the control becomes enabled\n isFocused && !isDisabled && prevProps.isDisabled ||\n // ensure focus is on the Input when the menu opens\n isFocused && menuIsOpen && !prevProps.menuIsOpen) {\n this.focusInput();\n }\n if (isFocused && isDisabled && !prevProps.isDisabled) {\n // ensure select state gets blurred in case Select is programmatically disabled while focused\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({\n isFocused: false\n }, this.onMenuClose);\n } else if (!isFocused && !isDisabled && prevProps.isDisabled && this.inputRef === document.activeElement) {\n // ensure select state gets focused in case Select is programatically re-enabled while focused (Firefox)\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({\n isFocused: true\n });\n }\n\n // scroll the focused option into view if necessary\n if (this.menuListRef && this.focusedOptionRef && this.scrollToFocusedOptionOnUpdate) {\n scrollIntoView(this.menuListRef, this.focusedOptionRef);\n this.scrollToFocusedOptionOnUpdate = false;\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.stopListeningComposition();\n this.stopListeningToTouch();\n document.removeEventListener('scroll', this.onScroll, true);\n }\n\n // ==============================\n // Consumer Handlers\n // ==============================\n }, {\n key: \"onMenuOpen\",\n value: function onMenuOpen() {\n this.props.onMenuOpen();\n }\n }, {\n key: \"onMenuClose\",\n value: function onMenuClose() {\n this.onInputChange('', {\n action: 'menu-close',\n prevInputValue: this.props.inputValue\n });\n this.props.onMenuClose();\n }\n }, {\n key: \"onInputChange\",\n value: function onInputChange(newValue, actionMeta) {\n this.props.onInputChange(newValue, actionMeta);\n }\n\n // ==============================\n // Methods\n // ==============================\n }, {\n key: \"focusInput\",\n value: function focusInput() {\n if (!this.inputRef) return;\n this.inputRef.focus();\n }\n }, {\n key: \"blurInput\",\n value: function blurInput() {\n if (!this.inputRef) return;\n this.inputRef.blur();\n }\n\n // aliased for consumers\n }, {\n key: \"openMenu\",\n value: function openMenu(focusOption) {\n var _this2 = this;\n var _this$state2 = this.state,\n selectValue = _this$state2.selectValue,\n isFocused = _this$state2.isFocused;\n var focusableOptions = this.buildFocusableOptions();\n var openAtIndex = focusOption === 'first' ? 0 : focusableOptions.length - 1;\n if (!this.props.isMulti) {\n var selectedIndex = focusableOptions.indexOf(selectValue[0]);\n if (selectedIndex > -1) {\n openAtIndex = selectedIndex;\n }\n }\n\n // only scroll if the menu isn't already open\n this.scrollToFocusedOptionOnUpdate = !(isFocused && this.menuListRef);\n this.setState({\n inputIsHiddenAfterUpdate: false,\n focusedValue: null,\n focusedOption: focusableOptions[openAtIndex],\n focusedOptionId: this.getFocusedOptionId(focusableOptions[openAtIndex])\n }, function () {\n return _this2.onMenuOpen();\n });\n }\n }, {\n key: \"focusValue\",\n value: function focusValue(direction) {\n var _this$state3 = this.state,\n selectValue = _this$state3.selectValue,\n focusedValue = _this$state3.focusedValue;\n\n // Only multiselects support value focusing\n if (!this.props.isMulti) return;\n this.setState({\n focusedOption: null\n });\n var focusedIndex = selectValue.indexOf(focusedValue);\n if (!focusedValue) {\n focusedIndex = -1;\n }\n var lastIndex = selectValue.length - 1;\n var nextFocus = -1;\n if (!selectValue.length) return;\n switch (direction) {\n case 'previous':\n if (focusedIndex === 0) {\n // don't cycle from the start to the end\n nextFocus = 0;\n } else if (focusedIndex === -1) {\n // if nothing is focused, focus the last value first\n nextFocus = lastIndex;\n } else {\n nextFocus = focusedIndex - 1;\n }\n break;\n case 'next':\n if (focusedIndex > -1 && focusedIndex < lastIndex) {\n nextFocus = focusedIndex + 1;\n }\n break;\n }\n this.setState({\n inputIsHidden: nextFocus !== -1,\n focusedValue: selectValue[nextFocus]\n });\n }\n }, {\n key: \"focusOption\",\n value: function focusOption() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'first';\n var pageSize = this.props.pageSize;\n var focusedOption = this.state.focusedOption;\n var options = this.getFocusableOptions();\n if (!options.length) return;\n var nextFocus = 0; // handles 'first'\n var focusedIndex = options.indexOf(focusedOption);\n if (!focusedOption) {\n focusedIndex = -1;\n }\n if (direction === 'up') {\n nextFocus = focusedIndex > 0 ? focusedIndex - 1 : options.length - 1;\n } else if (direction === 'down') {\n nextFocus = (focusedIndex + 1) % options.length;\n } else if (direction === 'pageup') {\n nextFocus = focusedIndex - pageSize;\n if (nextFocus < 0) nextFocus = 0;\n } else if (direction === 'pagedown') {\n nextFocus = focusedIndex + pageSize;\n if (nextFocus > options.length - 1) nextFocus = options.length - 1;\n } else if (direction === 'last') {\n nextFocus = options.length - 1;\n }\n this.scrollToFocusedOptionOnUpdate = true;\n this.setState({\n focusedOption: options[nextFocus],\n focusedValue: null,\n focusedOptionId: this.getFocusedOptionId(options[nextFocus])\n });\n }\n }, {\n key: \"getTheme\",\n value:\n // ==============================\n // Getters\n // ==============================\n\n function getTheme() {\n // Use the default theme if there are no customisations.\n if (!this.props.theme) {\n return defaultTheme;\n }\n // If the theme prop is a function, assume the function\n // knows how to merge the passed-in default theme with\n // its own modifications.\n if (typeof this.props.theme === 'function') {\n return this.props.theme(defaultTheme);\n }\n // Otherwise, if a plain theme object was passed in,\n // overlay it with the default theme.\n return _objectSpread(_objectSpread({}, defaultTheme), this.props.theme);\n }\n }, {\n key: \"getCommonProps\",\n value: function getCommonProps() {\n var clearValue = this.clearValue,\n cx = this.cx,\n getStyles = this.getStyles,\n getClassNames = this.getClassNames,\n getValue = this.getValue,\n selectOption = this.selectOption,\n setValue = this.setValue,\n props = this.props;\n var isMulti = props.isMulti,\n isRtl = props.isRtl,\n options = props.options;\n var hasValue = this.hasValue();\n return {\n clearValue: clearValue,\n cx: cx,\n getStyles: getStyles,\n getClassNames: getClassNames,\n getValue: getValue,\n hasValue: hasValue,\n isMulti: isMulti,\n isRtl: isRtl,\n options: options,\n selectOption: selectOption,\n selectProps: props,\n setValue: setValue,\n theme: this.getTheme()\n };\n }\n }, {\n key: \"hasValue\",\n value: function hasValue() {\n var selectValue = this.state.selectValue;\n return selectValue.length > 0;\n }\n }, {\n key: \"hasOptions\",\n value: function hasOptions() {\n return !!this.getFocusableOptions().length;\n }\n }, {\n key: \"isClearable\",\n value: function isClearable() {\n var _this$props7 = this.props,\n isClearable = _this$props7.isClearable,\n isMulti = _this$props7.isMulti;\n\n // single select, by default, IS NOT clearable\n // multi select, by default, IS clearable\n if (isClearable === undefined) return isMulti;\n return isClearable;\n }\n }, {\n key: \"isOptionDisabled\",\n value: function isOptionDisabled(option, selectValue) {\n return _isOptionDisabled(this.props, option, selectValue);\n }\n }, {\n key: \"isOptionSelected\",\n value: function isOptionSelected(option, selectValue) {\n return _isOptionSelected(this.props, option, selectValue);\n }\n }, {\n key: \"filterOption\",\n value: function filterOption(option, inputValue) {\n return _filterOption(this.props, option, inputValue);\n }\n }, {\n key: \"formatOptionLabel\",\n value: function formatOptionLabel(data, context) {\n if (typeof this.props.formatOptionLabel === 'function') {\n var _inputValue = this.props.inputValue;\n var _selectValue = this.state.selectValue;\n return this.props.formatOptionLabel(data, {\n context: context,\n inputValue: _inputValue,\n selectValue: _selectValue\n });\n } else {\n return this.getOptionLabel(data);\n }\n }\n }, {\n key: \"formatGroupLabel\",\n value: function formatGroupLabel(data) {\n return this.props.formatGroupLabel(data);\n }\n\n // ==============================\n // Mouse Handlers\n // ==============================\n }, {\n key: \"startListeningComposition\",\n value:\n // ==============================\n // Composition Handlers\n // ==============================\n\n function startListeningComposition() {\n if (document && document.addEventListener) {\n document.addEventListener('compositionstart', this.onCompositionStart, false);\n document.addEventListener('compositionend', this.onCompositionEnd, false);\n }\n }\n }, {\n key: \"stopListeningComposition\",\n value: function stopListeningComposition() {\n if (document && document.removeEventListener) {\n document.removeEventListener('compositionstart', this.onCompositionStart);\n document.removeEventListener('compositionend', this.onCompositionEnd);\n }\n }\n }, {\n key: \"startListeningToTouch\",\n value:\n // ==============================\n // Touch Handlers\n // ==============================\n\n function startListeningToTouch() {\n if (document && document.addEventListener) {\n document.addEventListener('touchstart', this.onTouchStart, false);\n document.addEventListener('touchmove', this.onTouchMove, false);\n document.addEventListener('touchend', this.onTouchEnd, false);\n }\n }\n }, {\n key: \"stopListeningToTouch\",\n value: function stopListeningToTouch() {\n if (document && document.removeEventListener) {\n document.removeEventListener('touchstart', this.onTouchStart);\n document.removeEventListener('touchmove', this.onTouchMove);\n document.removeEventListener('touchend', this.onTouchEnd);\n }\n }\n }, {\n key: \"renderInput\",\n value:\n // ==============================\n // Renderers\n // ==============================\n function renderInput() {\n var _this$props8 = this.props,\n isDisabled = _this$props8.isDisabled,\n isSearchable = _this$props8.isSearchable,\n inputId = _this$props8.inputId,\n inputValue = _this$props8.inputValue,\n tabIndex = _this$props8.tabIndex,\n form = _this$props8.form,\n menuIsOpen = _this$props8.menuIsOpen,\n required = _this$props8.required;\n var _this$getComponents = this.getComponents(),\n Input = _this$getComponents.Input;\n var _this$state4 = this.state,\n inputIsHidden = _this$state4.inputIsHidden,\n ariaSelection = _this$state4.ariaSelection;\n var commonProps = this.commonProps;\n var id = inputId || this.getElementId('input');\n\n // aria attributes makes the JSX \"noisy\", separated for clarity\n var ariaAttributes = _objectSpread(_objectSpread(_objectSpread({\n 'aria-autocomplete': 'list',\n 'aria-expanded': menuIsOpen,\n 'aria-haspopup': true,\n 'aria-errormessage': this.props['aria-errormessage'],\n 'aria-invalid': this.props['aria-invalid'],\n 'aria-label': this.props['aria-label'],\n 'aria-labelledby': this.props['aria-labelledby'],\n 'aria-required': required,\n role: 'combobox',\n 'aria-activedescendant': this.state.isAppleDevice ? undefined : this.state.focusedOptionId || ''\n }, menuIsOpen && {\n 'aria-controls': this.getElementId('listbox')\n }), !isSearchable && {\n 'aria-readonly': true\n }), this.hasValue() ? (ariaSelection === null || ariaSelection === void 0 ? void 0 : ariaSelection.action) === 'initial-input-focus' && {\n 'aria-describedby': this.getElementId('live-region')\n } : {\n 'aria-describedby': this.getElementId('placeholder')\n });\n if (!isSearchable) {\n // use a dummy input to maintain focus/blur functionality\n return /*#__PURE__*/React.createElement(DummyInput, _extends({\n id: id,\n innerRef: this.getInputRef,\n onBlur: this.onInputBlur,\n onChange: noop,\n onFocus: this.onInputFocus,\n disabled: isDisabled,\n tabIndex: tabIndex,\n inputMode: \"none\",\n form: form,\n value: \"\"\n }, ariaAttributes));\n }\n return /*#__PURE__*/React.createElement(Input, _extends({}, commonProps, {\n autoCapitalize: \"none\",\n autoComplete: \"off\",\n autoCorrect: \"off\",\n id: id,\n innerRef: this.getInputRef,\n isDisabled: isDisabled,\n isHidden: inputIsHidden,\n onBlur: this.onInputBlur,\n onChange: this.handleInputChange,\n onFocus: this.onInputFocus,\n spellCheck: \"false\",\n tabIndex: tabIndex,\n form: form,\n type: \"text\",\n value: inputValue\n }, ariaAttributes));\n }\n }, {\n key: \"renderPlaceholderOrValue\",\n value: function renderPlaceholderOrValue() {\n var _this3 = this;\n var _this$getComponents2 = this.getComponents(),\n MultiValue = _this$getComponents2.MultiValue,\n MultiValueContainer = _this$getComponents2.MultiValueContainer,\n MultiValueLabel = _this$getComponents2.MultiValueLabel,\n MultiValueRemove = _this$getComponents2.MultiValueRemove,\n SingleValue = _this$getComponents2.SingleValue,\n Placeholder = _this$getComponents2.Placeholder;\n var commonProps = this.commonProps;\n var _this$props9 = this.props,\n controlShouldRenderValue = _this$props9.controlShouldRenderValue,\n isDisabled = _this$props9.isDisabled,\n isMulti = _this$props9.isMulti,\n inputValue = _this$props9.inputValue,\n placeholder = _this$props9.placeholder;\n var _this$state5 = this.state,\n selectValue = _this$state5.selectValue,\n focusedValue = _this$state5.focusedValue,\n isFocused = _this$state5.isFocused;\n if (!this.hasValue() || !controlShouldRenderValue) {\n return inputValue ? null : /*#__PURE__*/React.createElement(Placeholder, _extends({}, commonProps, {\n key: \"placeholder\",\n isDisabled: isDisabled,\n isFocused: isFocused,\n innerProps: {\n id: this.getElementId('placeholder')\n }\n }), placeholder);\n }\n if (isMulti) {\n return selectValue.map(function (opt, index) {\n var isOptionFocused = opt === focusedValue;\n var key = \"\".concat(_this3.getOptionLabel(opt), \"-\").concat(_this3.getOptionValue(opt));\n return /*#__PURE__*/React.createElement(MultiValue, _extends({}, commonProps, {\n components: {\n Container: MultiValueContainer,\n Label: MultiValueLabel,\n Remove: MultiValueRemove\n },\n isFocused: isOptionFocused,\n isDisabled: isDisabled,\n key: key,\n index: index,\n removeProps: {\n onClick: function onClick() {\n return _this3.removeValue(opt);\n },\n onTouchEnd: function onTouchEnd() {\n return _this3.removeValue(opt);\n },\n onMouseDown: function onMouseDown(e) {\n e.preventDefault();\n }\n },\n data: opt\n }), _this3.formatOptionLabel(opt, 'value'));\n });\n }\n if (inputValue) {\n return null;\n }\n var singleValue = selectValue[0];\n return /*#__PURE__*/React.createElement(SingleValue, _extends({}, commonProps, {\n data: singleValue,\n isDisabled: isDisabled\n }), this.formatOptionLabel(singleValue, 'value'));\n }\n }, {\n key: \"renderClearIndicator\",\n value: function renderClearIndicator() {\n var _this$getComponents3 = this.getComponents(),\n ClearIndicator = _this$getComponents3.ClearIndicator;\n var commonProps = this.commonProps;\n var _this$props10 = this.props,\n isDisabled = _this$props10.isDisabled,\n isLoading = _this$props10.isLoading;\n var isFocused = this.state.isFocused;\n if (!this.isClearable() || !ClearIndicator || isDisabled || !this.hasValue() || isLoading) {\n return null;\n }\n var innerProps = {\n onMouseDown: this.onClearIndicatorMouseDown,\n onTouchEnd: this.onClearIndicatorTouchEnd,\n 'aria-hidden': 'true'\n };\n return /*#__PURE__*/React.createElement(ClearIndicator, _extends({}, commonProps, {\n innerProps: innerProps,\n isFocused: isFocused\n }));\n }\n }, {\n key: \"renderLoadingIndicator\",\n value: function renderLoadingIndicator() {\n var _this$getComponents4 = this.getComponents(),\n LoadingIndicator = _this$getComponents4.LoadingIndicator;\n var commonProps = this.commonProps;\n var _this$props11 = this.props,\n isDisabled = _this$props11.isDisabled,\n isLoading = _this$props11.isLoading;\n var isFocused = this.state.isFocused;\n if (!LoadingIndicator || !isLoading) return null;\n var innerProps = {\n 'aria-hidden': 'true'\n };\n return /*#__PURE__*/React.createElement(LoadingIndicator, _extends({}, commonProps, {\n innerProps: innerProps,\n isDisabled: isDisabled,\n isFocused: isFocused\n }));\n }\n }, {\n key: \"renderIndicatorSeparator\",\n value: function renderIndicatorSeparator() {\n var _this$getComponents5 = this.getComponents(),\n DropdownIndicator = _this$getComponents5.DropdownIndicator,\n IndicatorSeparator = _this$getComponents5.IndicatorSeparator;\n\n // separator doesn't make sense without the dropdown indicator\n if (!DropdownIndicator || !IndicatorSeparator) return null;\n var commonProps = this.commonProps;\n var isDisabled = this.props.isDisabled;\n var isFocused = this.state.isFocused;\n return /*#__PURE__*/React.createElement(IndicatorSeparator, _extends({}, commonProps, {\n isDisabled: isDisabled,\n isFocused: isFocused\n }));\n }\n }, {\n key: \"renderDropdownIndicator\",\n value: function renderDropdownIndicator() {\n var _this$getComponents6 = this.getComponents(),\n DropdownIndicator = _this$getComponents6.DropdownIndicator;\n if (!DropdownIndicator) return null;\n var commonProps = this.commonProps;\n var isDisabled = this.props.isDisabled;\n var isFocused = this.state.isFocused;\n var innerProps = {\n onMouseDown: this.onDropdownIndicatorMouseDown,\n onTouchEnd: this.onDropdownIndicatorTouchEnd,\n 'aria-hidden': 'true'\n };\n return /*#__PURE__*/React.createElement(DropdownIndicator, _extends({}, commonProps, {\n innerProps: innerProps,\n isDisabled: isDisabled,\n isFocused: isFocused\n }));\n }\n }, {\n key: \"renderMenu\",\n value: function renderMenu() {\n var _this4 = this;\n var _this$getComponents7 = this.getComponents(),\n Group = _this$getComponents7.Group,\n GroupHeading = _this$getComponents7.GroupHeading,\n Menu = _this$getComponents7.Menu,\n MenuList = _this$getComponents7.MenuList,\n MenuPortal = _this$getComponents7.MenuPortal,\n LoadingMessage = _this$getComponents7.LoadingMessage,\n NoOptionsMessage = _this$getComponents7.NoOptionsMessage,\n Option = _this$getComponents7.Option;\n var commonProps = this.commonProps;\n var focusedOption = this.state.focusedOption;\n var _this$props12 = this.props,\n captureMenuScroll = _this$props12.captureMenuScroll,\n inputValue = _this$props12.inputValue,\n isLoading = _this$props12.isLoading,\n loadingMessage = _this$props12.loadingMessage,\n minMenuHeight = _this$props12.minMenuHeight,\n maxMenuHeight = _this$props12.maxMenuHeight,\n menuIsOpen = _this$props12.menuIsOpen,\n menuPlacement = _this$props12.menuPlacement,\n menuPosition = _this$props12.menuPosition,\n menuPortalTarget = _this$props12.menuPortalTarget,\n menuShouldBlockScroll = _this$props12.menuShouldBlockScroll,\n menuShouldScrollIntoView = _this$props12.menuShouldScrollIntoView,\n noOptionsMessage = _this$props12.noOptionsMessage,\n onMenuScrollToTop = _this$props12.onMenuScrollToTop,\n onMenuScrollToBottom = _this$props12.onMenuScrollToBottom;\n if (!menuIsOpen) return null;\n\n // TODO: Internal Option Type here\n var render = function render(props, id) {\n var type = props.type,\n data = props.data,\n isDisabled = props.isDisabled,\n isSelected = props.isSelected,\n label = props.label,\n value = props.value;\n var isFocused = focusedOption === data;\n var onHover = isDisabled ? undefined : function () {\n return _this4.onOptionHover(data);\n };\n var onSelect = isDisabled ? undefined : function () {\n return _this4.selectOption(data);\n };\n var optionId = \"\".concat(_this4.getElementId('option'), \"-\").concat(id);\n var innerProps = {\n id: optionId,\n onClick: onSelect,\n onMouseMove: onHover,\n onMouseOver: onHover,\n tabIndex: -1,\n role: 'option',\n 'aria-selected': _this4.state.isAppleDevice ? undefined : isSelected // is not supported on Apple devices\n };\n\n return /*#__PURE__*/React.createElement(Option, _extends({}, commonProps, {\n innerProps: innerProps,\n data: data,\n isDisabled: isDisabled,\n isSelected: isSelected,\n key: optionId,\n label: label,\n type: type,\n value: value,\n isFocused: isFocused,\n innerRef: isFocused ? _this4.getFocusedOptionRef : undefined\n }), _this4.formatOptionLabel(props.data, 'menu'));\n };\n var menuUI;\n if (this.hasOptions()) {\n menuUI = this.getCategorizedOptions().map(function (item) {\n if (item.type === 'group') {\n var _data = item.data,\n options = item.options,\n groupIndex = item.index;\n var groupId = \"\".concat(_this4.getElementId('group'), \"-\").concat(groupIndex);\n var headingId = \"\".concat(groupId, \"-heading\");\n return /*#__PURE__*/React.createElement(Group, _extends({}, commonProps, {\n key: groupId,\n data: _data,\n options: options,\n Heading: GroupHeading,\n headingProps: {\n id: headingId,\n data: item.data\n },\n label: _this4.formatGroupLabel(item.data)\n }), item.options.map(function (option) {\n return render(option, \"\".concat(groupIndex, \"-\").concat(option.index));\n }));\n } else if (item.type === 'option') {\n return render(item, \"\".concat(item.index));\n }\n });\n } else if (isLoading) {\n var message = loadingMessage({\n inputValue: inputValue\n });\n if (message === null) return null;\n menuUI = /*#__PURE__*/React.createElement(LoadingMessage, commonProps, message);\n } else {\n var _message = noOptionsMessage({\n inputValue: inputValue\n });\n if (_message === null) return null;\n menuUI = /*#__PURE__*/React.createElement(NoOptionsMessage, commonProps, _message);\n }\n var menuPlacementProps = {\n minMenuHeight: minMenuHeight,\n maxMenuHeight: maxMenuHeight,\n menuPlacement: menuPlacement,\n menuPosition: menuPosition,\n menuShouldScrollIntoView: menuShouldScrollIntoView\n };\n var menuElement = /*#__PURE__*/React.createElement(MenuPlacer, _extends({}, commonProps, menuPlacementProps), function (_ref4) {\n var ref = _ref4.ref,\n _ref4$placerProps = _ref4.placerProps,\n placement = _ref4$placerProps.placement,\n maxHeight = _ref4$placerProps.maxHeight;\n return /*#__PURE__*/React.createElement(Menu, _extends({}, commonProps, menuPlacementProps, {\n innerRef: ref,\n innerProps: {\n onMouseDown: _this4.onMenuMouseDown,\n onMouseMove: _this4.onMenuMouseMove\n },\n isLoading: isLoading,\n placement: placement\n }), /*#__PURE__*/React.createElement(ScrollManager, {\n captureEnabled: captureMenuScroll,\n onTopArrive: onMenuScrollToTop,\n onBottomArrive: onMenuScrollToBottom,\n lockEnabled: menuShouldBlockScroll\n }, function (scrollTargetRef) {\n return /*#__PURE__*/React.createElement(MenuList, _extends({}, commonProps, {\n innerRef: function innerRef(instance) {\n _this4.getMenuListRef(instance);\n scrollTargetRef(instance);\n },\n innerProps: {\n role: 'listbox',\n 'aria-multiselectable': commonProps.isMulti,\n id: _this4.getElementId('listbox')\n },\n isLoading: isLoading,\n maxHeight: maxHeight,\n focusedOption: focusedOption\n }), menuUI);\n }));\n });\n\n // positioning behaviour is almost identical for portalled and fixed,\n // so we use the same component. the actual portalling logic is forked\n // within the component based on `menuPosition`\n return menuPortalTarget || menuPosition === 'fixed' ? /*#__PURE__*/React.createElement(MenuPortal, _extends({}, commonProps, {\n appendTo: menuPortalTarget,\n controlElement: this.controlRef,\n menuPlacement: menuPlacement,\n menuPosition: menuPosition\n }), menuElement) : menuElement;\n }\n }, {\n key: \"renderFormField\",\n value: function renderFormField() {\n var _this5 = this;\n var _this$props13 = this.props,\n delimiter = _this$props13.delimiter,\n isDisabled = _this$props13.isDisabled,\n isMulti = _this$props13.isMulti,\n name = _this$props13.name,\n required = _this$props13.required;\n var selectValue = this.state.selectValue;\n if (required && !this.hasValue() && !isDisabled) {\n return /*#__PURE__*/React.createElement(RequiredInput$1, {\n name: name,\n onFocus: this.onValueInputFocus\n });\n }\n if (!name || isDisabled) return;\n if (isMulti) {\n if (delimiter) {\n var value = selectValue.map(function (opt) {\n return _this5.getOptionValue(opt);\n }).join(delimiter);\n return /*#__PURE__*/React.createElement(\"input\", {\n name: name,\n type: \"hidden\",\n value: value\n });\n } else {\n var input = selectValue.length > 0 ? selectValue.map(function (opt, i) {\n return /*#__PURE__*/React.createElement(\"input\", {\n key: \"i-\".concat(i),\n name: name,\n type: \"hidden\",\n value: _this5.getOptionValue(opt)\n });\n }) : /*#__PURE__*/React.createElement(\"input\", {\n name: name,\n type: \"hidden\",\n value: \"\"\n });\n return /*#__PURE__*/React.createElement(\"div\", null, input);\n }\n } else {\n var _value = selectValue[0] ? this.getOptionValue(selectValue[0]) : '';\n return /*#__PURE__*/React.createElement(\"input\", {\n name: name,\n type: \"hidden\",\n value: _value\n });\n }\n }\n }, {\n key: \"renderLiveRegion\",\n value: function renderLiveRegion() {\n var commonProps = this.commonProps;\n var _this$state6 = this.state,\n ariaSelection = _this$state6.ariaSelection,\n focusedOption = _this$state6.focusedOption,\n focusedValue = _this$state6.focusedValue,\n isFocused = _this$state6.isFocused,\n selectValue = _this$state6.selectValue;\n var focusableOptions = this.getFocusableOptions();\n return /*#__PURE__*/React.createElement(LiveRegion$1, _extends({}, commonProps, {\n id: this.getElementId('live-region'),\n ariaSelection: ariaSelection,\n focusedOption: focusedOption,\n focusedValue: focusedValue,\n isFocused: isFocused,\n selectValue: selectValue,\n focusableOptions: focusableOptions,\n isAppleDevice: this.state.isAppleDevice\n }));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$getComponents8 = this.getComponents(),\n Control = _this$getComponents8.Control,\n IndicatorsContainer = _this$getComponents8.IndicatorsContainer,\n SelectContainer = _this$getComponents8.SelectContainer,\n ValueContainer = _this$getComponents8.ValueContainer;\n var _this$props14 = this.props,\n className = _this$props14.className,\n id = _this$props14.id,\n isDisabled = _this$props14.isDisabled,\n menuIsOpen = _this$props14.menuIsOpen;\n var isFocused = this.state.isFocused;\n var commonProps = this.commonProps = this.getCommonProps();\n return /*#__PURE__*/React.createElement(SelectContainer, _extends({}, commonProps, {\n className: className,\n innerProps: {\n id: id,\n onKeyDown: this.onKeyDown\n },\n isDisabled: isDisabled,\n isFocused: isFocused\n }), this.renderLiveRegion(), /*#__PURE__*/React.createElement(Control, _extends({}, commonProps, {\n innerRef: this.getControlRef,\n innerProps: {\n onMouseDown: this.onControlMouseDown,\n onTouchEnd: this.onControlTouchEnd\n },\n isDisabled: isDisabled,\n isFocused: isFocused,\n menuIsOpen: menuIsOpen\n }), /*#__PURE__*/React.createElement(ValueContainer, _extends({}, commonProps, {\n isDisabled: isDisabled\n }), this.renderPlaceholderOrValue(), this.renderInput()), /*#__PURE__*/React.createElement(IndicatorsContainer, _extends({}, commonProps, {\n isDisabled: isDisabled\n }), this.renderClearIndicator(), this.renderLoadingIndicator(), this.renderIndicatorSeparator(), this.renderDropdownIndicator())), this.renderMenu(), this.renderFormField());\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(props, state) {\n var prevProps = state.prevProps,\n clearFocusValueOnUpdate = state.clearFocusValueOnUpdate,\n inputIsHiddenAfterUpdate = state.inputIsHiddenAfterUpdate,\n ariaSelection = state.ariaSelection,\n isFocused = state.isFocused,\n prevWasFocused = state.prevWasFocused,\n instancePrefix = state.instancePrefix;\n var options = props.options,\n value = props.value,\n menuIsOpen = props.menuIsOpen,\n inputValue = props.inputValue,\n isMulti = props.isMulti;\n var selectValue = cleanValue(value);\n var newMenuOptionsState = {};\n if (prevProps && (value !== prevProps.value || options !== prevProps.options || menuIsOpen !== prevProps.menuIsOpen || inputValue !== prevProps.inputValue)) {\n var focusableOptions = menuIsOpen ? buildFocusableOptions(props, selectValue) : [];\n var focusableOptionsWithIds = menuIsOpen ? buildFocusableOptionsWithIds(buildCategorizedOptions(props, selectValue), \"\".concat(instancePrefix, \"-option\")) : [];\n var focusedValue = clearFocusValueOnUpdate ? getNextFocusedValue(state, selectValue) : null;\n var focusedOption = getNextFocusedOption(state, focusableOptions);\n var focusedOptionId = getFocusedOptionId(focusableOptionsWithIds, focusedOption);\n newMenuOptionsState = {\n selectValue: selectValue,\n focusedOption: focusedOption,\n focusedOptionId: focusedOptionId,\n focusableOptionsWithIds: focusableOptionsWithIds,\n focusedValue: focusedValue,\n clearFocusValueOnUpdate: false\n };\n }\n // some updates should toggle the state of the input visibility\n var newInputIsHiddenState = inputIsHiddenAfterUpdate != null && props !== prevProps ? {\n inputIsHidden: inputIsHiddenAfterUpdate,\n inputIsHiddenAfterUpdate: undefined\n } : {};\n var newAriaSelection = ariaSelection;\n var hasKeptFocus = isFocused && prevWasFocused;\n if (isFocused && !hasKeptFocus) {\n // If `value` or `defaultValue` props are not empty then announce them\n // when the Select is initially focused\n newAriaSelection = {\n value: valueTernary(isMulti, selectValue, selectValue[0] || null),\n options: selectValue,\n action: 'initial-input-focus'\n };\n hasKeptFocus = !prevWasFocused;\n }\n\n // If the 'initial-input-focus' action has been set already\n // then reset the ariaSelection to null\n if ((ariaSelection === null || ariaSelection === void 0 ? void 0 : ariaSelection.action) === 'initial-input-focus') {\n newAriaSelection = null;\n }\n return _objectSpread(_objectSpread(_objectSpread({}, newMenuOptionsState), newInputIsHiddenState), {}, {\n prevProps: props,\n ariaSelection: newAriaSelection,\n prevWasFocused: hasKeptFocus\n });\n }\n }]);\n return Select;\n}(Component);\nSelect.defaultProps = defaultProps;\n\nexport { Select as S, defaultProps as a, getOptionLabel$1 as b, createFilter as c, defaultTheme as d, getOptionValue$1 as g, mergeStyles as m };\n","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport { useState, useCallback } from 'react';\n\nvar _excluded = [\"defaultInputValue\", \"defaultMenuIsOpen\", \"defaultValue\", \"inputValue\", \"menuIsOpen\", \"onChange\", \"onInputChange\", \"onMenuClose\", \"onMenuOpen\", \"value\"];\nfunction useStateManager(_ref) {\n var _ref$defaultInputValu = _ref.defaultInputValue,\n defaultInputValue = _ref$defaultInputValu === void 0 ? '' : _ref$defaultInputValu,\n _ref$defaultMenuIsOpe = _ref.defaultMenuIsOpen,\n defaultMenuIsOpen = _ref$defaultMenuIsOpe === void 0 ? false : _ref$defaultMenuIsOpe,\n _ref$defaultValue = _ref.defaultValue,\n defaultValue = _ref$defaultValue === void 0 ? null : _ref$defaultValue,\n propsInputValue = _ref.inputValue,\n propsMenuIsOpen = _ref.menuIsOpen,\n propsOnChange = _ref.onChange,\n propsOnInputChange = _ref.onInputChange,\n propsOnMenuClose = _ref.onMenuClose,\n propsOnMenuOpen = _ref.onMenuOpen,\n propsValue = _ref.value,\n restSelectProps = _objectWithoutProperties(_ref, _excluded);\n var _useState = useState(propsInputValue !== undefined ? propsInputValue : defaultInputValue),\n _useState2 = _slicedToArray(_useState, 2),\n stateInputValue = _useState2[0],\n setStateInputValue = _useState2[1];\n var _useState3 = useState(propsMenuIsOpen !== undefined ? propsMenuIsOpen : defaultMenuIsOpen),\n _useState4 = _slicedToArray(_useState3, 2),\n stateMenuIsOpen = _useState4[0],\n setStateMenuIsOpen = _useState4[1];\n var _useState5 = useState(propsValue !== undefined ? propsValue : defaultValue),\n _useState6 = _slicedToArray(_useState5, 2),\n stateValue = _useState6[0],\n setStateValue = _useState6[1];\n var onChange = useCallback(function (value, actionMeta) {\n if (typeof propsOnChange === 'function') {\n propsOnChange(value, actionMeta);\n }\n setStateValue(value);\n }, [propsOnChange]);\n var onInputChange = useCallback(function (value, actionMeta) {\n var newValue;\n if (typeof propsOnInputChange === 'function') {\n newValue = propsOnInputChange(value, actionMeta);\n }\n setStateInputValue(newValue !== undefined ? newValue : value);\n }, [propsOnInputChange]);\n var onMenuOpen = useCallback(function () {\n if (typeof propsOnMenuOpen === 'function') {\n propsOnMenuOpen();\n }\n setStateMenuIsOpen(true);\n }, [propsOnMenuOpen]);\n var onMenuClose = useCallback(function () {\n if (typeof propsOnMenuClose === 'function') {\n propsOnMenuClose();\n }\n setStateMenuIsOpen(false);\n }, [propsOnMenuClose]);\n var inputValue = propsInputValue !== undefined ? propsInputValue : stateInputValue;\n var menuIsOpen = propsMenuIsOpen !== undefined ? propsMenuIsOpen : stateMenuIsOpen;\n var value = propsValue !== undefined ? propsValue : stateValue;\n return _objectSpread(_objectSpread({}, restSelectProps), {}, {\n inputValue: inputValue,\n menuIsOpen: menuIsOpen,\n onChange: onChange,\n onInputChange: onInputChange,\n onMenuClose: onMenuClose,\n onMenuOpen: onMenuOpen,\n value: value\n });\n}\n\nexport { useStateManager as u };\n","import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport { useRef, useState, useEffect, useCallback } from 'react';\nimport { L as handleInputChange } from './index-641ee5b8.esm.js';\n\nvar _excluded = [\"defaultOptions\", \"cacheOptions\", \"loadOptions\", \"options\", \"isLoading\", \"onInputChange\", \"filterOption\"];\nfunction useAsync(_ref) {\n var _ref$defaultOptions = _ref.defaultOptions,\n propsDefaultOptions = _ref$defaultOptions === void 0 ? false : _ref$defaultOptions,\n _ref$cacheOptions = _ref.cacheOptions,\n cacheOptions = _ref$cacheOptions === void 0 ? false : _ref$cacheOptions,\n propsLoadOptions = _ref.loadOptions;\n _ref.options;\n var _ref$isLoading = _ref.isLoading,\n propsIsLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,\n propsOnInputChange = _ref.onInputChange,\n _ref$filterOption = _ref.filterOption,\n filterOption = _ref$filterOption === void 0 ? null : _ref$filterOption,\n restSelectProps = _objectWithoutProperties(_ref, _excluded);\n var propsInputValue = restSelectProps.inputValue;\n var lastRequest = useRef(undefined);\n var mounted = useRef(false);\n var _useState = useState(Array.isArray(propsDefaultOptions) ? propsDefaultOptions : undefined),\n _useState2 = _slicedToArray(_useState, 2),\n defaultOptions = _useState2[0],\n setDefaultOptions = _useState2[1];\n var _useState3 = useState(typeof propsInputValue !== 'undefined' ? propsInputValue : ''),\n _useState4 = _slicedToArray(_useState3, 2),\n stateInputValue = _useState4[0],\n setStateInputValue = _useState4[1];\n var _useState5 = useState(propsDefaultOptions === true),\n _useState6 = _slicedToArray(_useState5, 2),\n isLoading = _useState6[0],\n setIsLoading = _useState6[1];\n var _useState7 = useState(undefined),\n _useState8 = _slicedToArray(_useState7, 2),\n loadedInputValue = _useState8[0],\n setLoadedInputValue = _useState8[1];\n var _useState9 = useState([]),\n _useState10 = _slicedToArray(_useState9, 2),\n loadedOptions = _useState10[0],\n setLoadedOptions = _useState10[1];\n var _useState11 = useState(false),\n _useState12 = _slicedToArray(_useState11, 2),\n passEmptyOptions = _useState12[0],\n setPassEmptyOptions = _useState12[1];\n var _useState13 = useState({}),\n _useState14 = _slicedToArray(_useState13, 2),\n optionsCache = _useState14[0],\n setOptionsCache = _useState14[1];\n var _useState15 = useState(undefined),\n _useState16 = _slicedToArray(_useState15, 2),\n prevDefaultOptions = _useState16[0],\n setPrevDefaultOptions = _useState16[1];\n var _useState17 = useState(undefined),\n _useState18 = _slicedToArray(_useState17, 2),\n prevCacheOptions = _useState18[0],\n setPrevCacheOptions = _useState18[1];\n if (cacheOptions !== prevCacheOptions) {\n setOptionsCache({});\n setPrevCacheOptions(cacheOptions);\n }\n if (propsDefaultOptions !== prevDefaultOptions) {\n setDefaultOptions(Array.isArray(propsDefaultOptions) ? propsDefaultOptions : undefined);\n setPrevDefaultOptions(propsDefaultOptions);\n }\n useEffect(function () {\n mounted.current = true;\n return function () {\n mounted.current = false;\n };\n }, []);\n var loadOptions = useCallback(function (inputValue, callback) {\n if (!propsLoadOptions) return callback();\n var loader = propsLoadOptions(inputValue, callback);\n if (loader && typeof loader.then === 'function') {\n loader.then(callback, function () {\n return callback();\n });\n }\n }, [propsLoadOptions]);\n useEffect(function () {\n if (propsDefaultOptions === true) {\n loadOptions(stateInputValue, function (options) {\n if (!mounted.current) return;\n setDefaultOptions(options || []);\n setIsLoading(!!lastRequest.current);\n });\n }\n // NOTE: this effect is designed to only run when the component mounts,\n // so we don't want to include any hook dependencies\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n var onInputChange = useCallback(function (newValue, actionMeta) {\n var inputValue = handleInputChange(newValue, actionMeta, propsOnInputChange);\n if (!inputValue) {\n lastRequest.current = undefined;\n setStateInputValue('');\n setLoadedInputValue('');\n setLoadedOptions([]);\n setIsLoading(false);\n setPassEmptyOptions(false);\n return;\n }\n if (cacheOptions && optionsCache[inputValue]) {\n setStateInputValue(inputValue);\n setLoadedInputValue(inputValue);\n setLoadedOptions(optionsCache[inputValue]);\n setIsLoading(false);\n setPassEmptyOptions(false);\n } else {\n var request = lastRequest.current = {};\n setStateInputValue(inputValue);\n setIsLoading(true);\n setPassEmptyOptions(!loadedInputValue);\n loadOptions(inputValue, function (options) {\n if (!mounted) return;\n if (request !== lastRequest.current) return;\n lastRequest.current = undefined;\n setIsLoading(false);\n setLoadedInputValue(inputValue);\n setLoadedOptions(options || []);\n setPassEmptyOptions(false);\n setOptionsCache(options ? _objectSpread(_objectSpread({}, optionsCache), {}, _defineProperty({}, inputValue, options)) : optionsCache);\n });\n }\n }, [cacheOptions, loadOptions, loadedInputValue, optionsCache, propsOnInputChange]);\n var options = passEmptyOptions ? [] : stateInputValue && loadedInputValue ? loadedOptions : defaultOptions || [];\n return _objectSpread(_objectSpread({}, restSelectProps), {}, {\n options: options,\n isLoading: isLoading || propsIsLoading,\n onInputChange: onInputChange,\n filterOption: filterOption\n });\n}\n\nexport { useAsync as u };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { forwardRef } from 'react';\nimport { S as Select } from '../../dist/Select-ef7c0426.esm.js';\nimport { u as useStateManager } from '../../dist/useStateManager-7e1e8489.esm.js';\nimport { u as useAsync } from '../../dist/useAsync-c64f5536.esm.js';\nexport { u as useAsync } from '../../dist/useAsync-c64f5536.esm.js';\nimport '@babel/runtime/helpers/objectSpread2';\nimport '@babel/runtime/helpers/classCallCheck';\nimport '@babel/runtime/helpers/createClass';\nimport '@babel/runtime/helpers/inherits';\nimport '@babel/runtime/helpers/createSuper';\nimport '@babel/runtime/helpers/toConsumableArray';\nimport '../../dist/index-641ee5b8.esm.js';\nimport '@emotion/react';\nimport '@babel/runtime/helpers/slicedToArray';\nimport '@babel/runtime/helpers/objectWithoutProperties';\nimport '@babel/runtime/helpers/typeof';\nimport '@babel/runtime/helpers/taggedTemplateLiteral';\nimport '@babel/runtime/helpers/defineProperty';\nimport 'react-dom';\nimport '@floating-ui/dom';\nimport 'use-isomorphic-layout-effect';\nimport 'memoize-one';\n\nvar AsyncSelect = /*#__PURE__*/forwardRef(function (props, ref) {\n var stateManagedProps = useAsync(props);\n var selectProps = useStateManager(stateManagedProps);\n return /*#__PURE__*/React.createElement(Select, _extends({\n ref: ref\n }, selectProps));\n});\nvar AsyncSelect$1 = AsyncSelect;\n\nexport { AsyncSelect$1 as default };\n","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\nimport _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport { useMemo, useCallback } from 'react';\nimport { H as cleanValue, D as valueTernary } from './index-641ee5b8.esm.js';\nimport { g as getOptionValue, b as getOptionLabel } from './Select-ef7c0426.esm.js';\n\nvar _excluded = [\"allowCreateWhileLoading\", \"createOptionPosition\", \"formatCreateLabel\", \"isValidNewOption\", \"getNewOptionData\", \"onCreateOption\", \"options\", \"onChange\"];\nvar compareOption = function compareOption() {\n var inputValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var option = arguments.length > 1 ? arguments[1] : undefined;\n var accessors = arguments.length > 2 ? arguments[2] : undefined;\n var candidate = String(inputValue).toLowerCase();\n var optionValue = String(accessors.getOptionValue(option)).toLowerCase();\n var optionLabel = String(accessors.getOptionLabel(option)).toLowerCase();\n return optionValue === candidate || optionLabel === candidate;\n};\nvar builtins = {\n formatCreateLabel: function formatCreateLabel(inputValue) {\n return \"Create \\\"\".concat(inputValue, \"\\\"\");\n },\n isValidNewOption: function isValidNewOption(inputValue, selectValue, selectOptions, accessors) {\n return !(!inputValue || selectValue.some(function (option) {\n return compareOption(inputValue, option, accessors);\n }) || selectOptions.some(function (option) {\n return compareOption(inputValue, option, accessors);\n }));\n },\n getNewOptionData: function getNewOptionData(inputValue, optionLabel) {\n return {\n label: optionLabel,\n value: inputValue,\n __isNew__: true\n };\n }\n};\nfunction useCreatable(_ref) {\n var _ref$allowCreateWhile = _ref.allowCreateWhileLoading,\n allowCreateWhileLoading = _ref$allowCreateWhile === void 0 ? false : _ref$allowCreateWhile,\n _ref$createOptionPosi = _ref.createOptionPosition,\n createOptionPosition = _ref$createOptionPosi === void 0 ? 'last' : _ref$createOptionPosi,\n _ref$formatCreateLabe = _ref.formatCreateLabel,\n formatCreateLabel = _ref$formatCreateLabe === void 0 ? builtins.formatCreateLabel : _ref$formatCreateLabe,\n _ref$isValidNewOption = _ref.isValidNewOption,\n isValidNewOption = _ref$isValidNewOption === void 0 ? builtins.isValidNewOption : _ref$isValidNewOption,\n _ref$getNewOptionData = _ref.getNewOptionData,\n getNewOptionData = _ref$getNewOptionData === void 0 ? builtins.getNewOptionData : _ref$getNewOptionData,\n onCreateOption = _ref.onCreateOption,\n _ref$options = _ref.options,\n propsOptions = _ref$options === void 0 ? [] : _ref$options,\n propsOnChange = _ref.onChange,\n restSelectProps = _objectWithoutProperties(_ref, _excluded);\n var _restSelectProps$getO = restSelectProps.getOptionValue,\n getOptionValue$1 = _restSelectProps$getO === void 0 ? getOptionValue : _restSelectProps$getO,\n _restSelectProps$getO2 = restSelectProps.getOptionLabel,\n getOptionLabel$1 = _restSelectProps$getO2 === void 0 ? getOptionLabel : _restSelectProps$getO2,\n inputValue = restSelectProps.inputValue,\n isLoading = restSelectProps.isLoading,\n isMulti = restSelectProps.isMulti,\n value = restSelectProps.value,\n name = restSelectProps.name;\n var newOption = useMemo(function () {\n return isValidNewOption(inputValue, cleanValue(value), propsOptions, {\n getOptionValue: getOptionValue$1,\n getOptionLabel: getOptionLabel$1\n }) ? getNewOptionData(inputValue, formatCreateLabel(inputValue)) : undefined;\n }, [formatCreateLabel, getNewOptionData, getOptionLabel$1, getOptionValue$1, inputValue, isValidNewOption, propsOptions, value]);\n var options = useMemo(function () {\n return (allowCreateWhileLoading || !isLoading) && newOption ? createOptionPosition === 'first' ? [newOption].concat(_toConsumableArray(propsOptions)) : [].concat(_toConsumableArray(propsOptions), [newOption]) : propsOptions;\n }, [allowCreateWhileLoading, createOptionPosition, isLoading, newOption, propsOptions]);\n var onChange = useCallback(function (newValue, actionMeta) {\n if (actionMeta.action !== 'select-option') {\n return propsOnChange(newValue, actionMeta);\n }\n var valueArray = Array.isArray(newValue) ? newValue : [newValue];\n if (valueArray[valueArray.length - 1] === newOption) {\n if (onCreateOption) onCreateOption(inputValue);else {\n var newOptionData = getNewOptionData(inputValue, inputValue);\n var newActionMeta = {\n action: 'create-option',\n name: name,\n option: newOptionData\n };\n propsOnChange(valueTernary(isMulti, [].concat(_toConsumableArray(cleanValue(value)), [newOptionData]), newOptionData), newActionMeta);\n }\n return;\n }\n propsOnChange(newValue, actionMeta);\n }, [getNewOptionData, inputValue, isMulti, name, newOption, onCreateOption, propsOnChange, value]);\n return _objectSpread(_objectSpread({}, restSelectProps), {}, {\n options: options,\n onChange: onChange\n });\n}\n\nexport { useCreatable as u };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { forwardRef } from 'react';\nimport { S as Select } from '../../dist/Select-ef7c0426.esm.js';\nimport { u as useStateManager } from '../../dist/useStateManager-7e1e8489.esm.js';\nimport { u as useCreatable } from '../../dist/useCreatable-09aaeb9a.esm.js';\nexport { u as useCreatable } from '../../dist/useCreatable-09aaeb9a.esm.js';\nimport '@babel/runtime/helpers/objectSpread2';\nimport '@babel/runtime/helpers/classCallCheck';\nimport '@babel/runtime/helpers/createClass';\nimport '@babel/runtime/helpers/inherits';\nimport '@babel/runtime/helpers/createSuper';\nimport '@babel/runtime/helpers/toConsumableArray';\nimport '../../dist/index-641ee5b8.esm.js';\nimport '@emotion/react';\nimport '@babel/runtime/helpers/slicedToArray';\nimport '@babel/runtime/helpers/objectWithoutProperties';\nimport '@babel/runtime/helpers/typeof';\nimport '@babel/runtime/helpers/taggedTemplateLiteral';\nimport '@babel/runtime/helpers/defineProperty';\nimport 'react-dom';\nimport '@floating-ui/dom';\nimport 'use-isomorphic-layout-effect';\nimport 'memoize-one';\n\nvar CreatableSelect = /*#__PURE__*/forwardRef(function (props, ref) {\n var creatableProps = useStateManager(props);\n var selectProps = useCreatable(creatableProps);\n return /*#__PURE__*/React.createElement(Select, _extends({\n ref: ref\n }, selectProps));\n});\nvar CreatableSelect$1 = CreatableSelect;\n\nexport { CreatableSelect$1 as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { forwardRef } from 'react';\nimport { S as Select } from '../../dist/Select-ef7c0426.esm.js';\nimport { u as useAsync } from '../../dist/useAsync-c64f5536.esm.js';\nimport { u as useStateManager } from '../../dist/useStateManager-7e1e8489.esm.js';\nimport { u as useCreatable } from '../../dist/useCreatable-09aaeb9a.esm.js';\nimport '@babel/runtime/helpers/objectSpread2';\nimport '@babel/runtime/helpers/classCallCheck';\nimport '@babel/runtime/helpers/createClass';\nimport '@babel/runtime/helpers/inherits';\nimport '@babel/runtime/helpers/createSuper';\nimport '@babel/runtime/helpers/toConsumableArray';\nimport '../../dist/index-641ee5b8.esm.js';\nimport '@emotion/react';\nimport '@babel/runtime/helpers/slicedToArray';\nimport '@babel/runtime/helpers/objectWithoutProperties';\nimport '@babel/runtime/helpers/typeof';\nimport '@babel/runtime/helpers/taggedTemplateLiteral';\nimport '@babel/runtime/helpers/defineProperty';\nimport 'react-dom';\nimport '@floating-ui/dom';\nimport 'use-isomorphic-layout-effect';\nimport 'memoize-one';\n\nvar AsyncCreatableSelect = /*#__PURE__*/forwardRef(function (props, ref) {\n var stateManagerProps = useAsync(props);\n var creatableProps = useStateManager(stateManagerProps);\n var selectProps = useCreatable(creatableProps);\n return /*#__PURE__*/React.createElement(Select, _extends({\n ref: ref\n }, selectProps));\n});\nvar AsyncCreatableSelect$1 = AsyncCreatableSelect;\n\nexport { AsyncCreatableSelect$1 as default };\n","/**\n * FormulaOverlay — wraps any field with an optional formula toggle.\n *\n * When formula: true on a field descriptor:\n * - A small { } toggle button appears top-right of the field label row\n * - Clicking it replaces the field's native input with FormulaInput\n * - Clicking again restores the native input (value round-trips correctly)\n * - formulaConfig is emitted/removed exactly like TextField does\n *\n * Usage:\n * <FormulaOverlay field={field} fieldId={fieldId} value={value}\n * onChange={onChange} onBlur={onBlur} error={showError}\n * formulaConfig={formulaConfig} onFormulaConfigChange={onFormulaConfigChange}\n * renderNative={() => <...the normal dropdown.../>}\n * />\n */\n\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { helperTextStyle } from '../fieldTokens';\nimport { Box, Tooltip } from '@mui/material';\nimport { MdDataObject } from 'react-icons/md';\nimport { FieldLabel } from './FieldLabel';\nimport { FormulaInput } from './FormulaInput';\nimport {\n parseToAST, serializeAST, serializeASTAsConfig, buildFieldConfig,\n} from '../DynamicFormRenderer/formulaUtils';\nimport type { FormulaASTNode } from '../DynamicFormRenderer/formulaUtils';\nimport type { FieldDescriptor } from '../types';\nimport type { FormulaConfig } from '../types/formula';\nimport { useVariablePickerContext } from '../VariablePicker/VariablePickerContext';\n\ninterface FormulaOverlayProps {\n field: FieldDescriptor & {\n formula?: boolean;\n formulaPlaceholder?: string;\n helperText?: string;\n dataTestId?: string;\n };\n fieldId: string;\n value: unknown;\n onChange: (value: unknown) => void;\n onBlur: () => void;\n error?: boolean;\n helperText?: string;\n formulaConfig?: FormulaConfig;\n onFormulaConfigChange?: (config: FormulaConfig) => void;\n /** Renders the native field input (dropdown etc.) when formula mode is OFF */\n renderNative: () => React.ReactNode;\n}\n\nexport function FormulaOverlay({\n field,\n fieldId,\n value,\n onChange,\n onBlur,\n error,\n helperText,\n formulaConfig,\n onFormulaConfigChange,\n renderNative,\n}: FormulaOverlayProps) {\n const isFormulaCapable = field.formula === true;\n const pickerCtx = useVariablePickerContext();\n const toggleBtnRef = useRef<HTMLButtonElement | null>(null);\n\n // Whether the { } toggle is active (formula mode — chip editor replaces the dropdown).\n // If the schema declares `formula: true`, default to formula-on so users can\n // click into the input and immediately get the Smart Values picker — they\n // don't need to toggle {} first. Otherwise we honor a saved formulaConfig\n // entry (edit-mode restore).\n const [formulaActive, setFormulaActive] = useState(\n () => isFormulaCapable && (field.formula === true || fieldId in (formulaConfig ?? {}))\n );\n\n // Notify picker context when this field mounts already in formula mode,\n // and clean up when it unmounts. Read latest state via ref so cleanup\n // doesn't fire with the stale initial value, leaking the counter.\n const formulaActiveRef = useRef(formulaActive);\n formulaActiveRef.current = formulaActive;\n useEffect(() => {\n if (!isFormulaCapable || !pickerCtx) return;\n if (formulaActiveRef.current) pickerCtx.notifyFormulaToggle(true);\n return () => {\n if (formulaActiveRef.current) pickerCtx.notifyFormulaToggle(false);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Whether formulaConfig key is emitted (same as formulaActive here — they're coupled)\n const formulaConfigEnabled = formulaActive;\n\n // AST for FormulaInput\n const [expression, setExpression] = useState<FormulaASTNode[]>(() =>\n isFormulaCapable && formulaActive\n ? parseToAST(String(value ?? ''), true)\n : []\n );\n\n const lastEmittedRef = useRef<unknown>(value);\n\n const handleExpressionChange = (nodes: FormulaASTNode[]) => {\n setExpression(nodes);\n const serialized = formulaConfigEnabled\n ? serializeASTAsConfig(nodes)\n : serializeAST(nodes);\n lastEmittedRef.current = serialized;\n onChange(serialized);\n };\n\n const toggleFormula = useCallback(() => {\n const next = !formulaActive;\n setFormulaActive(next);\n pickerCtx?.notifyFormulaToggle(next, next ? toggleBtnRef.current : null);\n\n if (next) {\n // Entering formula mode — parse current value (treat as plain text chip if valid)\n const raw = String(value ?? '');\n const reparsed = parseToAST(raw, true);\n setExpression(reparsed);\n const serialized = serializeASTAsConfig(reparsed);\n lastEmittedRef.current = serialized;\n onChange(serialized);\n onFormulaConfigChange?.({ ...formulaConfig, [fieldId]: buildFieldConfig() });\n } else {\n // Leaving formula mode — restore serialized value as _DE_{_P(...)}\n const serialized = serializeAST(expression);\n lastEmittedRef.current = serialized;\n onChange(serialized);\n const updated = { ...formulaConfig };\n delete updated[fieldId];\n onFormulaConfigChange?.(updated);\n setExpression([]);\n }\n }, [formulaActive, pickerCtx, value, expression, formulaConfig, fieldId, onFormulaConfigChange, onChange]);\n\n if (!isFormulaCapable) {\n // No formula support — render native field as-is (just label + input)\n return (\n <div>\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={fieldId}\n dataTestId={field.dataTestId}\n />\n {helperText && (\n <small style={helperTextStyle}>{helperText}</small>\n )}\n {renderNative()}\n </div>\n );\n }\n\n return (\n <div>\n {/* Label row with { } toggle */}\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', mb: 0 }}>\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={fieldId}\n dataTestId={field.dataTestId}\n />\n <Tooltip\n title={formulaActive ? 'Use static value (dropdown)' : 'Use dynamic formula expression'}\n placement=\"top\"\n >\n <Box\n component=\"button\"\n type=\"button\"\n ref={toggleBtnRef}\n onClick={toggleFormula}\n sx={{\n border: 'none', cursor: 'pointer', mb: '4px',\n display: 'inline-flex', alignItems: 'center', gap: 0.4,\n px: formulaActive ? 0.75 : 0.5, py: 0.25, borderRadius: '4px',\n fontSize: 11, fontWeight: 600, lineHeight: 1,\n color: formulaActive ? '#7c4dff' : '#94a3b8',\n bgcolor: formulaActive ? '#ede9fe' : 'transparent',\n transition: 'all 0.15s',\n '&:hover': { bgcolor: '#ede9fe', color: '#7c4dff' },\n flexShrink: 0,\n }}\n >\n <MdDataObject size={14} />\n {formulaActive && 'Formula'}\n </Box>\n </Tooltip>\n </Box>\n\n {/* helperText always sits between label row and input */}\n {helperText && (\n <small style={helperTextStyle}>{helperText}</small>\n )}\n\n {/* Input — swaps between native and FormulaInput */}\n {formulaActive ? (\n <FormulaInput\n id={fieldId}\n expression={expression}\n onExpressionChange={handleExpressionChange}\n onBlur={onBlur}\n placeholder={\n (field.formulaPlaceholder as string | undefined)\n ?? 'Type or paste a variable expression...'\n }\n disabled={field.disabled === true}\n error={error}\n formulaConfigEnabled={formulaConfigEnabled}\n />\n ) : (\n renderNative()\n )}\n </div>\n );\n}\n","/**\n * OptionsResolversContext — declarative dynamic-options bridge.\n *\n * The package never makes a network call itself; the host registers resolvers\n * (axios, fetch, GraphQL — anything) and the field renderer drives them via\n * `optionsSource` declarations on FieldDescriptor.\n *\n * Industry-standard contract (n8n / Zapier / Pipedream / Workato hybrid):\n * - resolvers registered by id at the canvas/form root\n * - fields name a resolver via `optionsSource.id`\n * - dependsOn supports both `string[]` and `Record<arg, fieldName>` shapes\n * - per-(resolverId, deps, cursor) session cache, in-flight dedup, abortable\n */\n\nimport React, { createContext, useCallback, useContext, useEffect, useMemo, useRef } from 'react';\nimport type {\n OptionsResolvers,\n OptionsResolver,\n OptionsResolverContext,\n OptionsResolverResult,\n OptionsSource,\n} from '../types';\n\ninterface OptionsResolversContextValue {\n resolvers: OptionsResolvers;\n /**\n * Bust a single resolver's cache. Useful for an explicit \"Refresh\" button.\n * Pass undefined to clear ALL cached pages for that resolver.\n */\n invalidate: (resolverId: string, depsKey?: string) => void;\n}\n\nconst OptionsResolversContext = createContext<OptionsResolversContextValue>({\n resolvers: {},\n invalidate: () => {},\n});\n\n// ─── Provider ───────────────────────────────────────────────────────────────\n\ninterface ProviderProps {\n resolvers?: OptionsResolvers;\n children: React.ReactNode;\n}\n\n/** Session-scoped cache: resolverId → depsKey → cursorKey → result */\ntype SessionCache = Map<string, Map<string, Map<string, OptionsResolverResult>>>;\ntype InFlightMap = Map<string, Map<string, Map<string, Promise<OptionsResolverResult>>>>;\n\nconst cacheRefSentinel = Symbol('options-cache');\n\nexport function OptionsResolversProvider({ resolvers, children }: ProviderProps) {\n const cacheRef = useRef<SessionCache>(new Map());\n const inFlightRef = useRef<InFlightMap>(new Map());\n\n const invalidate = useCallback((resolverId: string, depsKey?: string) => {\n const bucket = cacheRef.current.get(resolverId);\n if (!bucket) return;\n if (depsKey == null) bucket.clear();\n else bucket.delete(depsKey);\n }, []);\n\n const value = useMemo(\n () => ({\n resolvers: resolvers ?? {},\n invalidate,\n // expose cache to hook via a hidden symbol to avoid surfacing in TS API\n [cacheRefSentinel as unknown as string]: { cacheRef, inFlightRef },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [resolvers, invalidate]\n );\n\n return (\n <OptionsResolversContext.Provider value={value as OptionsResolversContextValue}>\n {children}\n </OptionsResolversContext.Provider>\n );\n}\n\n// ─── Helpers ────────────────────────────────────────────────────────────────\n\nfunction normalizeDeps(\n dependsOn: OptionsSource['dependsOn'],\n values: Record<string, unknown>,\n params?: Record<string, unknown>\n): Record<string, unknown> {\n const out: Record<string, unknown> = { ...(params ?? {}) };\n if (!dependsOn) return out;\n if (Array.isArray(dependsOn)) {\n for (const name of dependsOn) out[name] = values?.[name];\n } else {\n for (const [arg, fieldName] of Object.entries(dependsOn)) {\n out[arg] = values?.[fieldName];\n }\n }\n return out;\n}\n\nfunction stableKey(obj: unknown): string {\n if (obj == null) return '';\n if (typeof obj !== 'object') return String(obj);\n const keys = Object.keys(obj as Record<string, unknown>).sort();\n return JSON.stringify(\n keys.reduce<Record<string, unknown>>((acc, k) => {\n acc[k] = (obj as Record<string, unknown>)[k];\n return acc;\n }, {})\n );\n}\n\n// ─── Hook ───────────────────────────────────────────────────────────────────\n\ninterface UseDynamicOptionsArgs {\n source: OptionsSource | undefined;\n values: Record<string, unknown>;\n}\n\ninterface UseDynamicOptionsResult {\n /** True when the host configured a usable resolver for this field. */\n enabled: boolean;\n /** Drop-in `loadOptions(inputValue) => Promise<Option[]>` for react-select. */\n loadOptions: ((input: string) => Promise<OptionsResolverResult['options']>) | undefined;\n /** Drop-in `loadValue(ids) => Promise<Option[]>` for edit-mode hydration. */\n loadValue: ((ids: unknown[]) => Promise<OptionsResolverResult['options']>) | undefined;\n /** Stable key derived from deps — feed to react-select's `key` to refresh on change. */\n depsKey: string;\n /** Manually invalidate this field's cache (e.g. for a Refresh button). */\n refresh: () => void;\n}\n\n/**\n * Returns a drop-in `loadOptions` for react-select when a field's\n * `optionsSource` is set and the host has registered a matching resolver.\n * Otherwise returns `enabled: false` and the host falls back to the\n * descriptor's static `options` (or no options).\n */\nexport function useDynamicOptions({ source, values }: UseDynamicOptionsArgs): UseDynamicOptionsResult {\n const ctx = useContext(OptionsResolversContext);\n // Pull the hidden cache refs the provider stashed on the context value.\n const hidden = (ctx as unknown as Record<string, unknown>)[cacheRefSentinel as unknown as string] as\n | { cacheRef: React.MutableRefObject<SessionCache>; inFlightRef: React.MutableRefObject<InFlightMap> }\n | undefined;\n\n const resolverId = source?.id;\n const resolver: OptionsResolver | undefined = resolverId ? ctx.resolvers[resolverId] : undefined;\n\n const deps = useMemo(\n () => (source ? normalizeDeps(source.dependsOn, values, source.params) : {}),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [source, ...Object.values(values ?? {})]\n );\n const depsKey = useMemo(() => stableKey(deps), [deps]);\n\n const abortRef = useRef<AbortController | null>(null);\n\n // Abort any in-flight call when deps change.\n useEffect(() => {\n return () => abortRef.current?.abort();\n }, [depsKey]);\n\n const runResolver = useCallback(\n async (cursor: unknown, input?: string): Promise<OptionsResolverResult> => {\n if (!resolverId || !resolver || !hidden) {\n return { options: [] };\n }\n const cursorKey = `${stableKey(cursor)}|${input ?? ''}`;\n\n const pageBucket =\n hidden.cacheRef.current.get(resolverId) ?? new Map<string, Map<string, OptionsResolverResult>>();\n hidden.cacheRef.current.set(resolverId, pageBucket);\n const depsBucket = pageBucket.get(depsKey) ?? new Map<string, OptionsResolverResult>();\n pageBucket.set(depsKey, depsBucket);\n\n const cached = depsBucket.get(cursorKey);\n if (cached) return cached;\n\n const flightBucket =\n hidden.inFlightRef.current.get(resolverId) ?? new Map<string, Map<string, Promise<OptionsResolverResult>>>();\n hidden.inFlightRef.current.set(resolverId, flightBucket);\n const flightDeps = flightBucket.get(depsKey) ?? new Map<string, Promise<OptionsResolverResult>>();\n flightBucket.set(depsKey, flightDeps);\n\n const inFlight = flightDeps.get(cursorKey);\n if (inFlight) return inFlight;\n\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n\n const resolverCtx: OptionsResolverContext = {\n cursor,\n input,\n values,\n signal: controller.signal,\n };\n\n const p = Promise.resolve()\n .then(() => resolver(deps, resolverCtx))\n .then((result) => {\n depsBucket.set(cursorKey, result);\n flightDeps.delete(cursorKey);\n return result;\n })\n .catch((err) => {\n flightDeps.delete(cursorKey);\n throw err;\n });\n\n flightDeps.set(cursorKey, p);\n return p;\n },\n [resolver, resolverId, deps, depsKey, hidden, values]\n );\n\n const loadOptions = useCallback(\n async (input: string) => {\n if (!resolver) return [];\n // Single page on initial load — pagination is opt-in via the\n // resolver returning a `nextCursor`. react-select's AsyncSelect\n // calls this on each search input change; we forward `input` to\n // let the resolver implement server-side filter when it wants.\n const result = await runResolver(undefined, input);\n return result.options;\n },\n [resolver, runResolver]\n );\n\n const loadValue = useCallback(\n async (ids: unknown[]) => {\n if (!resolver) return [];\n // Two strategies:\n // 1. Host wired a separate `resolveValueId` — call that resolver with { ids }.\n // 2. No separate resolver — call the main resolver and client-filter.\n // The first strategy is the right one for large datasets; the second\n // is the convenient fallback for small option sets.\n if (source?.resolveValueId) {\n const idResolver = ctx.resolvers[source.resolveValueId];\n if (idResolver) {\n const res = await idResolver({ ...deps, ids }, { values });\n return res.options;\n }\n }\n const res = await runResolver(undefined);\n const idStrings = ids.map((x) => String(x));\n return res.options.filter((o) => idStrings.includes(String(o.value)));\n },\n [resolver, runResolver, source?.resolveValueId, ctx.resolvers, deps, values]\n );\n\n const refresh = useCallback(() => {\n if (resolverId) ctx.invalidate(resolverId, depsKey);\n }, [ctx, resolverId, depsKey]);\n\n return {\n enabled: !!resolver,\n loadOptions: resolver ? loadOptions : undefined,\n loadValue: resolver ? loadValue : undefined,\n depsKey,\n refresh,\n };\n}\n\nexport function useOptionsResolvers(): OptionsResolversContextValue {\n return useContext(OptionsResolversContext);\n}\n","/**\n * SelectField — FlowForge field (CIS-5570)\n *\n * type: 'select'\n * Descriptor extras:\n * options, isMulti, isSearchable, isCreatable, isClearable,\n * loadOptions, dependsOn, getOptionLabel, getOptionValue,\n * helperText, dataTestId, id\n *\n * options shape: [{ value, label, isDisabled? }]\n * If your options use id instead of value, pass getOptionValue: (o) => o.id\n */\n\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport ReactSelect from 'react-select';\nimport AsyncSelect from 'react-select/async';\nimport CreatableSelect from 'react-select/creatable';\nimport AsyncCreatableSelect from 'react-select/async-creatable';\nimport type { GroupBase } from 'react-select';\n\nimport type { FieldDescriptor, OptionsSource } from '../types';\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\nimport { FieldLabel } from './FieldLabel';\nimport { FormulaOverlay } from './FormulaOverlay';\nimport { buildSelectStyles, errorTextStyle, helperTextStyle } from '../fieldTokens';\nimport { useDynamicOptions } from '../options/OptionsResolversContext';\n\n// ─── Extended descriptor ──────────────────────────────────────────────────────\n\ninterface SelectOption {\n value: unknown;\n label: string;\n isDisabled?: boolean;\n [key: string]: unknown;\n}\n\ninterface SelectFieldDescriptor extends FieldDescriptor {\n id?: string;\n helperText?: string;\n options?: SelectOption[];\n isMulti?: boolean;\n isSearchable?: boolean;\n isCreatable?: boolean;\n isClearable?: boolean;\n loadOptions?: (inputValue: string) => Promise<SelectOption[]>;\n /**\n * Async value resolver — given current value(s), return matching option\n * object(s). Required for async selects to render a label in edit mode\n * (otherwise the dropdown appears empty until the user re-picks).\n */\n loadValue?: (values: unknown[]) => Promise<SelectOption[]>;\n dependsOn?: string[];\n /** Declarative dynamic-options spec — resolved via the host's resolver registry. */\n optionsSource?: OptionsSource;\n getOptionLabel?: (option: SelectOption) => string;\n getOptionValue?: (option: SelectOption) => unknown;\n dataTestId?: string;\n formula?: boolean;\n formulaPlaceholder?: string;\n}\n\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function SelectField({ field: rawField, value, values, onChange, onBlur, error, touched, formulaConfig, onFormulaConfigChange }: FieldComponentProps) {\n const field = rawField as SelectFieldDescriptor;\n const showError = !!(touched && error);\n const isDisabled = field.disabled === true;\n\n const getVal = (o: SelectOption): unknown =>\n field.getOptionValue ? field.getOptionValue(o) : (o.value ?? o['id']);\n\n // Normalise static options — ensure .value is set\n const staticOptions = useMemo(\n () =>\n (field.options ?? []).map((o) => ({\n ...o,\n value: getVal(o),\n })),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [field.options]\n );\n\n // Declarative dynamic options — resolved via the host's resolver registry.\n // When `optionsSource` is set AND the host has registered a matching\n // resolver, we synthesize loadOptions/loadValue from it. Static loadOptions\n // (set imperatively on the descriptor) still wins if both are present.\n const dyn = useDynamicOptions({ source: field.optionsSource, values });\n const effectiveLoadOptions = field.loadOptions ?? (dyn.enabled ? dyn.loadOptions : undefined);\n const effectiveLoadValue = field.loadValue ?? (dyn.enabled ? dyn.loadValue : undefined);\n\n // Re-trigger async load when dependsOn fields OR dynamic deps change.\n const [asyncKey, setAsyncKey] = useState(0);\n const dependsOnValues = field.dependsOn?.map((id) => values[id]) ?? [];\n useEffect(() => {\n if (field.dependsOn?.length) {\n setAsyncKey((k) => k + 1);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependsOnValues);\n // Bust react-select cache when the dynamic-options deps key flips.\n useEffect(() => {\n if (dyn.enabled) setAsyncKey((k) => k + 1);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dyn.depsKey]);\n\n const isAsync = !!effectiveLoadOptions;\n\n // For async selects, staticOptions is always [] so we track the last picked\n // option(s) in local state so the control stays controlled after selection.\n const [asyncSelected, setAsyncSelected] = useState<SelectOption | SelectOption[] | null>(null);\n\n // Edit-mode hydration: when value is set but asyncSelected is empty,\n // resolve labels via loadValue. Without this, async selects render empty\n // even though the underlying value is set.\n const hydratedRef = useRef(false);\n useEffect(() => {\n if (!isAsync || hydratedRef.current) return;\n if (value == null || value === '' || (Array.isArray(value) && value.length === 0)) return;\n\n const ids = Array.isArray(value) ? value : [value];\n hydratedRef.current = true;\n\n const resolve = effectiveLoadValue\n ? effectiveLoadValue(ids)\n // Fallback: hit loadOptions('') and filter — fine for small option sets.\n : effectiveLoadOptions!('').then((opts) =>\n opts.filter((o) => ids.some((id) => String(getVal(o)) === String(id))));\n\n resolve.then((opts) => {\n if (opts.length === 0) return;\n setAsyncSelected(field.isMulti ? opts : opts[0]);\n }).catch(() => { hydratedRef.current = false; });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isAsync, value]);\n\n // Derive controlled selected value from raw formik value\n const selectedValue = useMemo(() => {\n if (value == null || value === '') return field.isMulti ? [] : null;\n if (isAsync) return asyncSelected; // async: trust local state (now hydrated)\n if (field.isMulti) {\n const vals = Array.isArray(value) ? value : [value];\n return staticOptions.filter((o) => vals.includes(getVal(o)));\n }\n return staticOptions.find((o) => String(getVal(o)) === String(value)) ?? null;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, staticOptions, field.isMulti, isAsync, asyncSelected]);\n\n const handleChange = (selected: SelectOption | SelectOption[] | null) => {\n if (isAsync) setAsyncSelected(selected);\n if (!selected) return onChange(field.isMulti ? [] : null);\n if (field.isMulti) return onChange((selected as SelectOption[]).map(getVal));\n return onChange(getVal(selected as SelectOption));\n };\n\n const commonProps = {\n inputId: field.id ?? field.name,\n name: field.id ?? field.name,\n placeholder: field.placeholder ?? 'Select...',\n isDisabled,\n isMulti: (field.isMulti ?? false) as boolean,\n isSearchable: field.isSearchable ?? true,\n isClearable: field.isClearable ?? false,\n value: selectedValue,\n onChange: handleChange as (v: unknown) => void,\n onBlur,\n styles: buildSelectStyles(showError, field.isMulti),\n menuPortalTarget: typeof document !== 'undefined' ? document.body : undefined,\n menuPosition: 'fixed' as const,\n classNamePrefix: 'ff-select',\n 'data-testid': field.dataTestId ?? `${field.name}-select`,\n ...(field.getOptionLabel ? { getOptionLabel: field.getOptionLabel } : {}),\n };\n\n const renderSelect = () => {\n const isAsync = !!effectiveLoadOptions;\n const isCreatable = field.isCreatable ?? false;\n\n if (isAsync && isCreatable) {\n return (\n <AsyncCreatableSelect\n key={asyncKey}\n loadOptions={effectiveLoadOptions!}\n defaultOptions\n cacheOptions\n {...commonProps}\n />\n );\n }\n if (isAsync) {\n return (\n <AsyncSelect\n key={asyncKey}\n loadOptions={effectiveLoadOptions!}\n defaultOptions\n cacheOptions\n {...commonProps}\n />\n );\n }\n if (isCreatable) {\n return <CreatableSelect options={staticOptions} {...commonProps} />;\n }\n return <ReactSelect options={staticOptions} {...commonProps} />;\n };\n\n const fieldId = field.id ?? field.name ?? '';\n\n return (\n <FormulaOverlay\n field={field}\n fieldId={fieldId}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n error={showError}\n helperText={field.helperText}\n formulaConfig={formulaConfig}\n onFormulaConfigChange={onFormulaConfigChange}\n renderNative={() => (\n <>\n {renderSelect()}\n {showError && (\n <small data-testid={`${field.name}-error`} style={errorTextStyle}>{error}</small>\n )}\n </>\n )}\n />\n );\n}\n","/**\r\n * DescriptiveSelectField - FlowForge field\r\n * type: 'descriptive-select'\r\n *\r\n * Dropdown where each option shows icon + label + description.\r\n *\r\n * options shape:\r\n * { id, label, description?, icon?, isDisabled?, disabledReason? }\r\n */\r\n\r\nimport React, { useMemo } from 'react';\r\nimport Select, { components } from 'react-select';\r\nimport type { GroupBase, OptionProps, SingleValueProps, StylesConfig } from 'react-select';\r\nimport { MdCheckCircle } from 'react-icons/md';\r\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\r\nimport { FormulaOverlay } from './FormulaOverlay';\r\n\r\nexport interface DescriptiveOption {\r\n id: string;\r\n value: string;\r\n label: string;\r\n description?: string;\r\n icon?: React.ReactNode;\r\n isDisabled?: boolean;\r\n disabledReason?: string;\r\n}\r\n\r\nconst optionLabelStyles: React.CSSProperties = {\r\n fontSize: 14,\r\n fontWeight: 500,\r\n lineHeight: 1.35,\r\n overflowWrap: 'anywhere',\r\n};\r\n\r\nconst optionDescriptionStyles: React.CSSProperties = {\r\n fontSize: 12,\r\n lineHeight: 1.45,\r\n marginTop: 3,\r\n overflow: 'hidden',\r\n display: '-webkit-box',\r\n WebkitLineClamp: 2,\r\n WebkitBoxOrient: 'vertical',\r\n overflowWrap: 'anywhere',\r\n};\r\n\r\nexport const DescriptiveOptionComponent = (\r\n props: OptionProps<DescriptiveOption, boolean, GroupBase<DescriptiveOption>>\r\n) => {\r\n const { data, isSelected, isDisabled } = props;\r\n\r\n return (\r\n <components.Option {...props}>\r\n <div\r\n className=\"ff-form-d-flex ff-form-align-start ff-form-justify-between ff-form-w-100\"\r\n title={isDisabled ? (data.disabledReason ?? 'Coming soon') : undefined}\r\n >\r\n <div className=\"ff-form-d-flex ff-form-align-start ff-form-gap-2 ff-form-flex-grow-1\" style={{ minWidth: 0 }}>\r\n {data.icon && (\r\n <div\r\n className=\"ff-form-mt-1 ff-form-flex-shrink-0 ff-form-d-flex ff-form-align-center\"\r\n style={{\r\n fontSize: 18,\r\n opacity: isDisabled ? 0.65 : 1,\r\n filter: isDisabled ? 'grayscale(0.45)' : 'none',\r\n }}\r\n >\r\n {data.icon}\r\n </div>\r\n )}\r\n\r\n <div className=\"ff-form-flex-grow-1\" style={{ minWidth: 0 }}>\r\n <div\r\n className=\"ff-form-text-14\"\r\n style={{\r\n ...optionLabelStyles,\r\n color: isDisabled ? '#7f8790' : '#212529',\r\n }}\r\n title={data.label}\r\n >\r\n {data.label}\r\n </div>\r\n\r\n {data.description && (\r\n <div\r\n className=\"ff-form-text-12\"\r\n style={{\r\n ...optionDescriptionStyles,\r\n color: isDisabled ? '#9198a1' : '#6c757d',\r\n }}\r\n title={data.description}\r\n >\r\n {data.description}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {isSelected && (\r\n <MdCheckCircle size={16} className=\"ff-form-ms-2 ff-form-mt-1 ff-form-text-primary ff-form-flex-shrink-0\" />\r\n )}\r\n </div>\r\n </components.Option>\r\n );\r\n};\r\n\r\nexport const DescriptiveSingleValue = (\r\n props: SingleValueProps<DescriptiveOption, boolean, GroupBase<DescriptiveOption>>\r\n) => {\r\n const { data } = props;\r\n\r\n return (\r\n <components.SingleValue {...props}>\r\n <div className=\"ff-form-d-flex ff-form-align-center ff-form-gap-2 ff-form-text-dark ff-form-w-100\" title={data.label}>\r\n {data.icon && (\r\n <div className=\"ff-form-d-flex ff-form-align-center ff-form-flex-shrink-0\" style={{ fontSize: 16 }}>\r\n {data.icon}\r\n </div>\r\n )}\r\n <span\r\n className=\"ff-form-text-14 ff-form-fw-medium\"\r\n style={{\r\n lineHeight: 1.3,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n }}\r\n >\r\n {data.label}\r\n </span>\r\n </div>\r\n </components.SingleValue>\r\n );\r\n};\r\n\r\nexport const buildDescriptiveStyles = (\r\n hasError: boolean\r\n): StylesConfig<DescriptiveOption, boolean, GroupBase<DescriptiveOption>> => ({\r\n control: (base, state) => ({\r\n ...base,\r\n minHeight: 38,\r\n height: 38,\r\n fontSize: 14,\r\n borderRadius: 6,\r\n borderColor: hasError ? '#dc3545' : state.isFocused ? '#86b7fe' : '#ced4da',\r\n boxShadow: state.isFocused\r\n ? hasError ? '0 0 0 3px rgba(220,53,69,0.18)' : '0 0 0 3px rgba(13,110,253,0.18)'\r\n : 'none',\r\n transition: 'border-color 0.15s, box-shadow 0.15s',\r\n '&:hover': { borderColor: hasError ? '#dc3545' : '#adb5bd' },\r\n }),\r\n valueContainer: (base) => ({\r\n ...base,\r\n paddingTop: 1,\r\n paddingBottom: 1,\r\n gap: 4,\r\n }),\r\n option: (base, state) => ({\r\n ...base,\r\n backgroundColor: state.isDisabled\r\n ? '#f6f7f9'\r\n : state.isSelected\r\n ? '#e8f4fd'\r\n : state.isFocused\r\n ? '#f8f9fa'\r\n : '#fff',\r\n padding: '10px 12px',\r\n cursor: state.isDisabled ? 'not-allowed' : 'pointer',\r\n color: state.isDisabled ? '#8f98a3' : base.color,\r\n borderBottom: '1px solid #f1f1f1',\r\n '&:active': { backgroundColor: state.isDisabled ? '#f6f7f9' : '#e9ecef' },\r\n '&:last-child': { borderBottom: 'none' },\r\n }),\r\n singleValue: (base) => ({\r\n ...base,\r\n maxWidth: 'calc(100% - 8px)',\r\n color: '#111827',\r\n }),\r\n multiValue: (base) => ({\r\n ...base,\r\n maxWidth: '100%',\r\n backgroundColor: '#eef2ff',\r\n borderRadius: 6,\r\n }),\r\n multiValueLabel: (base) => ({\r\n ...base,\r\n fontSize: 12,\r\n lineHeight: 1.35,\r\n color: '#3730a3',\r\n paddingTop: 3,\r\n paddingBottom: 3,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n maxWidth: 180,\r\n }),\r\n multiValueRemove: (base) => ({\r\n ...base,\r\n color: '#6366f1',\r\n ':hover': {\r\n backgroundColor: '#c7d2fe',\r\n color: '#3730a3',\r\n },\r\n }),\r\n menu: (base) => ({ ...base, zIndex: 9999 }),\r\n menuPortal: (base) => ({ ...base, zIndex: 9999 }),\r\n placeholder: (base) => ({ ...base, color: '#9ca3af', fontSize: 14 }),\r\n noOptionsMessage: (base) => ({ ...base, fontSize: 12, color: '#6b7280' }),\r\n});\r\n\r\nexport function DescriptiveSelectField({\r\n field,\r\n value,\r\n onChange,\r\n onBlur,\r\n error,\r\n touched,\r\n formulaConfig,\r\n onFormulaConfigChange,\r\n}: FieldComponentProps) {\r\n const showError = !!(touched && error);\r\n const isMulti = (field.isMulti as boolean) ?? false;\r\n const inputId = (field.id as string | undefined) ?? (field.name as string | undefined) ?? '';\r\n\r\n const selectOptions = useMemo(\r\n () =>\r\n ((field.options as DescriptiveOption[]) ?? []).map((option) => ({\r\n ...option,\r\n value: option.id ?? option.value,\r\n })),\r\n [field.options]\r\n );\r\n\r\n const valueArray = Array.isArray(value) ? value : value != null ? [value] : [];\r\n const valueSet = useMemo(() => new Set(valueArray.map((item) => String(item))), [valueArray]);\r\n\r\n const selectedOption = useMemo(() => {\r\n if (isMulti) {\r\n return selectOptions.filter((option) => valueSet.has(String(option.value ?? '')));\r\n }\r\n\r\n return selectOptions.find((option) => String(option.value ?? '') === String(value ?? '')) ?? null;\r\n }, [isMulti, selectOptions, value, valueSet]);\r\n\r\n const handleChange = (option: unknown) => {\r\n if (isMulti) {\r\n const nextValues = option as DescriptiveOption[] | null;\r\n onChange(nextValues == null ? [] : nextValues.map((item) => item.value));\r\n return;\r\n }\r\n\r\n const nextValue = option as DescriptiveOption | null;\r\n onChange(nextValue == null ? null : nextValue.value);\r\n };\r\n\r\n const nativeSelect = (\r\n <>\r\n <Select\r\n inputId={inputId}\r\n value={selectedOption}\r\n onChange={handleChange}\r\n onBlur={onBlur}\r\n options={selectOptions}\r\n placeholder={(field.placeholder as string) ?? 'Select option...'}\r\n isMulti={isMulti}\r\n isDisabled={(field.disabled as boolean) ?? false}\r\n isOptionDisabled={(option) => Boolean(option.isDisabled)}\r\n isSearchable\r\n styles={buildDescriptiveStyles(showError)}\r\n components={{ Option: DescriptiveOptionComponent, SingleValue: DescriptiveSingleValue }}\r\n menuPortalTarget={typeof document !== 'undefined' ? document.body : undefined}\r\n menuPosition=\"fixed\"\r\n classNamePrefix=\"ff-select\"\r\n />\r\n {showError && (\r\n <small data-testid={`${inputId}-error`} style={{ display: 'flex', color: '#dc3545', fontSize: 12, marginTop: 4, lineHeight: 1.4 }}>\r\n {error}\r\n </small>\r\n )}\r\n </>\r\n );\r\n\r\n return (\r\n <div className={`${(field.customClass as string) ?? ''} ${field.hidden ? 'ff-form-hidden' : ''}`}>\r\n <FormulaOverlay\r\n field={field as Parameters<typeof FormulaOverlay>[0]['field']}\r\n fieldId={inputId}\r\n value={value}\r\n onChange={onChange}\r\n onBlur={onBlur}\r\n error={showError}\r\n helperText={field.helperText as string | undefined}\r\n formulaConfig={formulaConfig}\r\n onFormulaConfigChange={onFormulaConfigChange}\r\n renderNative={() => nativeSelect}\r\n />\r\n </div>\r\n );\r\n}\r\n","/**\n * ArrayField — type: 'array'\n *\n * Handles all three sub-cases controlled by `itemType` on the FieldDescriptor:\n *\n * itemType: 'text' | 'number' | 'email' | 'url' | 'password'\n * → array of primitives. Value: string[] | number[]\n *\n * itemType: 'select'\n * → array of primitives chosen from options[]. Value: string[]\n *\n * itemType: 'object' (requires itemFields: FieldDescriptor[])\n * → array of objects, each row renders the itemFields sub-schema.\n * Value: Record<string, unknown>[]\n *\n * itemType: 'array' (requires itemSchema: { itemType, ... })\n * → array of arrays. Each inner row is its own ArrayField.\n * Value: unknown[][]\n *\n * Additional descriptor props:\n * minItems? — minimum row count (blocks remove below this)\n * maxItems? — maximum row count (hides add above this)\n * addLabel? — custom \"+ Add\" button label\n * itemLabel? — label prefix for each row (\"Member\", \"Rule\", …)\n */\n\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport {\n Box, Typography, IconButton, Tooltip, Divider,\n MenuItem, Select, TextField as MuiTextField,\n} from '@mui/material';\nimport { MdAdd, MdClose } from 'react-icons/md';\nimport type { FieldDescriptor } from '../types';\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\nimport type { ChildRouterProps } from './ObjectField';\nimport { FieldLabel } from './FieldLabel';\n\n/**\n * ArrayField accepts the standard FieldComponentProps, plus an optional set of\n * \"parent renderer\" props. When the parent passes those, items render their\n * children through the real FieldRouter (full feature set — condition builder,\n * formula, react-select, …). Without them, ArrayField falls back to its legacy\n * inline renderers (primitives, itemType:'object' via simplified ObjectRow).\n */\nexport interface ArrayFieldComponentProps extends FieldComponentProps {\n /** Dot-path of this array in the parent form values, e.g. \"blocks\". */\n pathPrefix?: string;\n depth?: number;\n compact?: boolean;\n parentErrors?: Record<string, unknown>;\n parentTouched?: Record<string, unknown>;\n parentSetFieldValue?: (name: string, value: unknown) => void;\n parentSetFieldTouched?: (name: string, touched: boolean) => void;\n /** Hands a child field back to the parent renderer at the given path. */\n renderFieldRouter?: (props: ChildRouterProps) => React.ReactNode;\n}\n\n// ─── Descriptor extension ─────────────────────────────────────────────────────\n\ninterface ArrayFieldDescriptor extends FieldDescriptor {\n /** Type of each item — drives which sub-editor to render */\n itemType?: 'text' | 'number' | 'email' | 'url' | 'password' | 'select' | 'object' | 'array';\n /** For itemType:'select' — same format as SelectField options */\n itemOptions?: Array<{ value: string; label: string }>;\n /** For itemType:'object' — sub-fields for each row object */\n itemFields?: FieldDescriptor[];\n /** For itemType:'array' — descriptor shape for each inner array */\n itemSchema?: Omit<ArrayFieldDescriptor, 'id' | 'type' | 'label'>;\n /** Placeholder for primitive inputs */\n itemPlaceholder?: string;\n /** Label prefix for each row header, e.g. \"Member\" → \"Member 1\", \"Member 2\" */\n itemLabel?: string;\n /** Minimum number of items — blocks remove below this count */\n minItems?: number;\n /** Maximum number of items — hides Add above this count */\n maxItems?: number;\n /** Custom \"+ Add\" button text */\n addLabel?: string;\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\n/** Stable key attached to every array item so React can track identity across reorders/removes. */\nconst ITEM_KEY = '__id';\nlet _seq = 0;\nfunction uid(): string { return `af_${++_seq}_${Math.random().toString(36).slice(2, 7)}`; }\n\n/** Ensure every item in the array carries a stable __id. Mutates items that are missing one. */\nfunction ensureKeys(items: unknown[]): unknown[] {\n return items.map(item => {\n if (item !== null && typeof item === 'object' && !Array.isArray(item)) {\n const obj = item as Record<string, unknown>;\n if (!obj[ITEM_KEY]) return { ...obj, [ITEM_KEY]: uid() };\n return item;\n }\n // Primitives — box them into { __id, __value } so we always have a key\n if (item !== null && typeof item !== 'object') {\n return { [ITEM_KEY]: uid(), __value: item };\n }\n return item;\n });\n}\n\n/** Strip the __id (and __value box) before calling onChange so the stored value stays clean. */\nfunction stripKeys(items: unknown[]): unknown[] {\n return items.map(item => {\n if (item !== null && typeof item === 'object' && !Array.isArray(item)) {\n const { [ITEM_KEY]: _k, __value, ...rest } = item as Record<string, unknown>;\n // If the only real key was __value, unwrap to primitive\n if (__value !== undefined && Object.keys(rest).length === 0) return __value;\n return rest;\n }\n return item;\n });\n}\n\nfunction getKey(item: unknown): string {\n if (item !== null && typeof item === 'object' && !Array.isArray(item)) {\n return String((item as Record<string, unknown>)[ITEM_KEY] ?? uid());\n }\n return uid();\n}\n\nfunction emptyObjectFromFields(fields: FieldDescriptor[]): Record<string, unknown> {\n return Object.fromEntries(fields.map(f => {\n const key = f.id ?? f.name ?? '';\n if (f.type === 'object' && f.children) return [key, emptyObjectFromFields(f.children)];\n if (f.type === 'array') return [key, []];\n return [key, ''];\n }));\n}\n\nfunction emptyItem(itemType: ArrayFieldDescriptor['itemType'], itemFields?: FieldDescriptor[]): unknown {\n const base = (() => {\n if (itemType === 'object' && itemFields) return emptyObjectFromFields(itemFields);\n if (itemType === 'array') return [];\n return '';\n })();\n // For object items, attach a stable key immediately\n if (base !== null && typeof base === 'object' && !Array.isArray(base)) {\n return { ...(base as Record<string, unknown>), [ITEM_KEY]: uid() };\n }\n return base;\n}\n\nfunction toArray(value: unknown): unknown[] {\n if (Array.isArray(value)) return value;\n return [];\n}\n\n/** Read the real value from an item (unwraps primitive boxes). */\nfunction itemValue(item: unknown): unknown {\n if (item !== null && typeof item === 'object' && !Array.isArray(item)) {\n const obj = item as Record<string, unknown>;\n if ('__value' in obj) return obj.__value;\n const { [ITEM_KEY]: _k, ...rest } = obj;\n return rest;\n }\n return item;\n}\n\n// ─── Primitive row (text / number / email / url / password) ──────────────────\n\nfunction PrimitiveRow({\n value, onChange, inputType = 'text', placeholder, disabled,\n}: {\n value: unknown;\n onChange: (v: string) => void;\n inputType?: string;\n placeholder?: string;\n disabled?: boolean;\n}) {\n return (\n <MuiTextField\n size=\"small\"\n fullWidth\n type={inputType}\n value={String(value ?? '')}\n onChange={e => onChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n sx={{ '& .MuiInputBase-input': { fontSize: 13 } }}\n />\n );\n}\n\n// ─── Select-primitive row ─────────────────────────────────────────────────────\n\nfunction SelectRow({\n value, onChange, options, disabled,\n}: {\n value: unknown;\n onChange: (v: string) => void;\n options: Array<{ value: string; label: string }>;\n disabled?: boolean;\n}) {\n return (\n <Select\n size=\"small\"\n fullWidth\n value={String(value ?? '')}\n onChange={e => onChange(e.target.value as string)}\n disabled={disabled}\n displayEmpty\n sx={{ fontSize: 13, '.MuiSelect-select': { py: '8px' } }}\n >\n <MenuItem value=\"\" disabled sx={{ fontSize: 13 }}>Select…</MenuItem>\n {options.map(opt => (\n <MenuItem key={opt.value} value={opt.value} sx={{ fontSize: 13 }}>{opt.label}</MenuItem>\n ))}\n </Select>\n );\n}\n\n// ─── Object row ───────────────────────────────────────────────────────────────\n\nfunction ObjectRow({\n fields, value, onChange, disabled, depth = 0,\n}: {\n fields: FieldDescriptor[];\n value: Record<string, unknown>;\n onChange: (v: Record<string, unknown>) => void;\n disabled?: boolean;\n depth?: number;\n}) {\n return (\n <Box sx={{ display: 'flex', gap: 1, flexWrap: 'wrap' }}>\n {fields.map(f => {\n const key = f.id ?? f.name ?? '';\n const colSpan = f.colSpan ?? Math.max(2, Math.floor(12 / fields.length));\n const widthPct = `${Math.round((colSpan / 12) * 100)}%`;\n\n return (\n <Box key={key} sx={{ flex: `0 0 calc(${widthPct} - 8px)`, minWidth: 100 }}>\n {f.label && (\n <Typography sx={{ fontSize: 11, color: '#64748b', mb: 0.25, fontWeight: 500 }}>\n {f.label}{f.required && <span style={{ color: '#ef4444' }}> *</span>}\n </Typography>\n )}\n\n {/* Nested object — recurse */}\n {f.type === 'object' && f.children ? (\n <Box sx={{\n border: '1px solid #e2e8f0', borderRadius: '6px',\n p: 1, bgcolor: depth % 2 === 0 ? '#f8fafc' : '#fff',\n }}>\n <ObjectRow\n fields={f.children}\n value={(value[key] as Record<string, unknown>) ?? {}}\n onChange={v => onChange({ ...value, [key]: v })}\n disabled={disabled}\n depth={depth + 1}\n />\n </Box>\n\n ) : f.type === 'array' ? (\n /* Nested array inside object row — disabled threaded via field.disabled */\n <ArrayField\n field={{ ...f, id: key, disabled: disabled ?? f.disabled } as FieldDescriptor}\n value={value[key]}\n values={{}}\n onChange={v => onChange({ ...value, [key]: v })}\n onBlur={() => {}}\n />\n\n ) : f.type === 'select' ? (\n <Select\n size=\"small\"\n fullWidth\n value={String(value[key] ?? '')}\n onChange={e => onChange({ ...value, [key]: e.target.value })}\n disabled={disabled}\n displayEmpty\n sx={{ fontSize: 13, '.MuiSelect-select': { py: '8px' } }}\n >\n <MenuItem value=\"\" disabled sx={{ fontSize: 13 }}>Select…</MenuItem>\n {((f as ArrayFieldDescriptor).itemOptions ?? []).map((opt: { value: string; label: string }) => (\n <MenuItem key={opt.value} value={opt.value} sx={{ fontSize: 13 }}>{opt.label}</MenuItem>\n ))}\n </Select>\n\n ) : (\n <MuiTextField\n size=\"small\"\n fullWidth\n type={(f as ArrayFieldDescriptor).inputType as string ?? (f.type === 'number' ? 'number' : 'text')}\n value={String(value[key] ?? '')}\n onChange={e => onChange({ ...value, [key]: e.target.value })}\n placeholder={f.placeholder}\n disabled={disabled}\n sx={{ '& .MuiInputBase-input': { fontSize: 13 } }}\n />\n )}\n </Box>\n );\n })}\n </Box>\n );\n}\n\n// ─── Row shell — shared Add / Remove chrome ───────────────────────────────────\n\nfunction RowShell({\n index, itemLabel, canRemove, onRemove, children,\n}: {\n index: number;\n itemLabel?: string;\n canRemove: boolean;\n onRemove: () => void;\n children: React.ReactNode;\n}) {\n return (\n <Box sx={{\n position: 'relative',\n // Match the breathing room of the host's \"Conditional / Fallback\" blocks:\n // generous interior padding, comfortable inter-block gap.\n px: 2, pt: 1.75, pb: 1.5,\n bgcolor: '#fff', border: '1px solid #e2e8f0',\n borderRadius: '8px', mb: 1.5,\n // Children render with normal 32px bottom margin (ff-form-mb-4) so siblings\n // are well-separated. Kill the LAST child's trailing margin so the row hugs\n // its content with no extra gap below.\n '& .ff-form-mb-4:last-of-type': { marginBottom: '0 !important' },\n }}>\n {itemLabel && (\n // Pill chip — visually consistent with the host's \"Conditional\" /\n // \"Fallback\" tags. Sits above the first field with a 12px gap.\n <Box\n component=\"span\"\n sx={{\n display: 'inline-block',\n fontSize: 11, fontWeight: 600,\n color: '#475569', bgcolor: '#e2e8f0',\n px: 1, py: '2px', borderRadius: '6px',\n mb: 1.5, textTransform: 'uppercase', letterSpacing: 0.5,\n }}\n >\n {itemLabel} {index + 1}\n </Box>\n )}\n {children}\n\n <Tooltip title=\"Remove\">\n <span style={{ position: 'absolute', top: 10, right: 10 }}>\n <IconButton\n size=\"small\"\n disabled={!canRemove}\n onClick={onRemove}\n sx={{ cursor: canRemove ? 'pointer' : 'not-allowed', p: '4px' }}\n >\n <MdClose size={16} color={canRemove ? '#64748b' : '#e2e8f0'} />\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n );\n}\n\n// ─── Router-aware body — items render via the full FieldRouter ───────────────\n\nfunction emptyChildObject(children: FieldDescriptor[]): Record<string, unknown> {\n const base: Record<string, unknown> = {};\n for (const c of children) {\n const key = c.id ?? c.name ?? '';\n if (!key) continue;\n if (c.type === 'object' && Array.isArray(c.children)) {\n base[key] = emptyChildObject(c.children as FieldDescriptor[]);\n } else if (c.type === 'array') {\n base[key] = [];\n } else {\n base[key] = '';\n }\n }\n return base;\n}\n\nfunction RouterArrayBody({\n field, pathPrefix, childFields, items,\n values, errors, touched, setFieldValue, setFieldTouched,\n depth, compact, renderFieldRouter, disabled, minItems, maxItems,\n}: {\n field: FieldDescriptor;\n pathPrefix: string;\n childFields: FieldDescriptor[];\n items: unknown[];\n values: Record<string, unknown>;\n errors: Record<string, unknown>;\n touched: Record<string, unknown>;\n setFieldValue: (name: string, value: unknown) => void;\n setFieldTouched: (name: string, touched: boolean) => void;\n depth: number;\n compact?: boolean;\n renderFieldRouter: (props: ChildRouterProps) => React.ReactNode;\n disabled: boolean;\n minItems: number;\n maxItems: number;\n}) {\n // Stable React keys parallel to the items array — we keep these in local\n // state instead of polluting Formik values with __id markers.\n const [keys, setKeys] = useState<string[]>(() => items.map(() => uid()));\n\n useEffect(() => {\n // Sync key count if the value array length changed externally (reset, etc.)\n if (keys.length !== items.length) {\n setKeys(prev => {\n if (items.length > prev.length) {\n return [...prev, ...Array.from({ length: items.length - prev.length }, () => uid())];\n }\n return prev.slice(0, items.length);\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [items.length]);\n\n const add = useCallback(() => {\n if (items.length >= maxItems) return;\n setFieldValue(pathPrefix, [...items, emptyChildObject(childFields)]);\n setKeys(prev => [...prev, uid()]);\n }, [items, maxItems, setFieldValue, pathPrefix, childFields]);\n\n const removeAt = useCallback((i: number) => {\n if (items.length <= minItems) return;\n setFieldValue(pathPrefix, items.filter((_, j) => j !== i));\n setKeys(prev => prev.filter((_, j) => j !== i));\n }, [items, minItems, setFieldValue, pathPrefix]);\n\n const desc = field as ArrayFieldDescriptor;\n\n return (\n <Box>\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={field.id}\n />\n\n {field.helperText && (\n <Typography sx={{ fontSize: 12, color: '#6c757d', mb: 0.75 }}>\n {field.helperText}\n </Typography>\n )}\n\n {items.length === 0 && (\n <Box sx={{\n py: 2.5, textAlign: 'center',\n border: '1.5px dashed #e2e8f0', borderRadius: '8px', mb: 1,\n color: '#94a3b8', fontSize: 13,\n }}>\n No items yet — click Add to start\n </Box>\n )}\n\n {items.map((rowValue, i) => (\n <RowShell\n key={keys[i] ?? i}\n index={i}\n itemLabel={desc.itemLabel}\n canRemove={items.length > minItems && !disabled}\n onRemove={() => removeAt(i)}\n >\n <Box>\n {childFields.map(child => {\n const childKey = child.id ?? child.name ?? '';\n const childPath = `${pathPrefix}.${i}.${childKey}`;\n return renderFieldRouter({\n field: child,\n pathPrefix: childPath,\n depth: depth + 1,\n values,\n errors,\n touched,\n setFieldValue,\n setFieldTouched,\n // Item-scoped values for this row — lets the child's\n // shouldHide / shouldDisable / shouldRequire / compute see\n // its siblings via `ctx.item` without splicing the path.\n item: (rowValue && typeof rowValue === 'object')\n ? (rowValue as Record<string, unknown>)\n : undefined,\n // Keep normal sibling spacing inside the row (32px between\n // fields). The RowShell's CSS kills the LAST child's\n // trailing margin so the row hugs its content.\n compact: false,\n inlineLabel: false,\n });\n })}\n </Box>\n </RowShell>\n ))}\n\n {items.length > 0 && <Divider sx={{ mb: 1, borderColor: 'transparent' }} />}\n\n {items.length < maxItems && (\n <Box\n component=\"button\"\n type=\"button\"\n onClick={add}\n disabled={disabled}\n sx={{\n display: 'inline-flex', alignItems: 'center', gap: 0.5,\n border: '1px dashed #cbd5e1', borderRadius: '6px',\n background: 'none', cursor: disabled ? 'not-allowed' : 'pointer',\n px: 1.5, py: 0.6, fontSize: 12.5, color: '#6366f1',\n opacity: disabled ? 0.5 : 1,\n '&:hover:not(:disabled)': { borderColor: '#6366f1', bgcolor: '#f5f3ff' },\n }}\n >\n <MdAdd size={14} />\n {desc.addLabel ?? `Add ${desc.itemLabel ?? 'item'}`}\n </Box>\n )}\n </Box>\n );\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport function ArrayField(props: ArrayFieldComponentProps) {\n const {\n field, value, onChange,\n pathPrefix, values, parentErrors, parentTouched,\n parentSetFieldValue, parentSetFieldTouched,\n depth = 0, compact, renderFieldRouter,\n } = props;\n const desc = field as ArrayFieldDescriptor;\n const disabled = field.disabled === true;\n const itemType = desc.itemType ?? 'text';\n const minItems = desc.minItems ?? 0;\n const maxItems = desc.maxItems ?? Infinity;\n\n // Router-aware path: array items render via the real FieldRouter so children\n // get the full feature set (condition, formula, react-select, …). Activates\n // only when the parent supplied a renderFieldRouter callback and pathPrefix,\n // and the descriptor uses `children` (the recommended schema shape).\n const childFields: FieldDescriptor[] | undefined =\n (field.children as FieldDescriptor[] | undefined) ?? desc.itemFields;\n const canRouteChildren =\n !!renderFieldRouter\n && typeof pathPrefix === 'string'\n && Array.isArray(childFields)\n && childFields.length > 0;\n if (canRouteChildren) {\n return (\n <RouterArrayBody\n field={field}\n pathPrefix={pathPrefix!}\n childFields={childFields!}\n items={toArray(value)}\n values={values ?? {}}\n errors={parentErrors ?? {}}\n touched={parentTouched ?? {}}\n setFieldValue={parentSetFieldValue ?? (() => {})}\n setFieldTouched={parentSetFieldTouched ?? (() => {})}\n depth={depth}\n compact={compact}\n renderFieldRouter={renderFieldRouter!}\n disabled={disabled}\n minItems={minItems}\n maxItems={maxItems}\n />\n );\n }\n\n // Stable keyed items live in local state so React keys never change during typing.\n // Without this, every keystroke calls ensureKeys() which generates new random IDs,\n // causing React to unmount/remount the input and lose focus on every character.\n const [items, setItems] = useState<unknown[]>(() => ensureKeys(toArray(value)));\n\n // Track the last clean value we emitted so we can detect external changes\n // (form reset, compute fields) without reacting to our own onChange calls.\n const lastEmittedRef = useRef<string>(JSON.stringify(stripKeys(items)));\n\n useEffect(() => {\n const incoming = JSON.stringify(toArray(value));\n if (incoming !== lastEmittedRef.current) {\n // External change (reset, compute) — re-initialize with fresh stable keys\n const reKeyed = ensureKeys(toArray(value));\n setItems(reKeyed);\n lastEmittedRef.current = JSON.stringify(stripKeys(reKeyed));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n const emit = useCallback((next: unknown[]) => {\n const keyed = ensureKeys(next); // guarantee every item has a stable __id\n setItems(keyed);\n const clean = stripKeys(keyed);\n lastEmittedRef.current = JSON.stringify(clean);\n onChange(clean);\n }, [onChange]);\n\n const add = useCallback(() => {\n if (items.length >= maxItems) return;\n emit([...items, emptyItem(itemType, desc.itemFields)]);\n }, [items, itemType, desc.itemFields, maxItems, emit]);\n\n const remove = useCallback((key: string) => {\n if (items.length <= minItems) return;\n emit(items.filter(item => getKey(item) !== key));\n }, [items, minItems, emit]);\n\n const update = useCallback((key: string, v: unknown) => {\n emit(items.map(item => {\n if (getKey(item) !== key) return item;\n // Re-attach the stable key to the updated value\n if (v !== null && typeof v === 'object' && !Array.isArray(v)) {\n return { ...(v as Record<string, unknown>), [ITEM_KEY]: key };\n }\n return { [ITEM_KEY]: key, __value: v };\n }));\n }, [items, emit]);\n\n return (\n <Box>\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={field.id}\n />\n\n {field.helperText && (\n <Typography sx={{ fontSize: 12, color: '#6c757d', mb: 0.75 }}>\n {field.helperText}\n </Typography>\n )}\n\n {items.length === 0 && (\n <Box sx={{\n py: 2.5, textAlign: 'center',\n border: '1.5px dashed #e2e8f0', borderRadius: '8px', mb: 1,\n color: '#94a3b8', fontSize: 13,\n }}>\n No items yet — click Add to start\n </Box>\n )}\n\n {items.map((item, i) => {\n const key = getKey(item);\n const val = itemValue(item);\n return (\n <RowShell\n key={key}\n index={i}\n itemLabel={desc.itemLabel}\n canRemove={items.length > minItems && !disabled}\n onRemove={() => remove(key)}\n >\n {itemType === 'object' && desc.itemFields ? (\n <ObjectRow\n fields={desc.itemFields}\n value={(val as Record<string, unknown>) ?? {}}\n onChange={v => update(key, v)}\n disabled={disabled}\n />\n ) : itemType === 'select' ? (\n <SelectRow\n value={val}\n onChange={v => update(key, v)}\n options={desc.itemOptions ?? []}\n disabled={disabled}\n />\n ) : itemType === 'array' ? (\n <ArrayField\n field={{\n ...desc.itemSchema,\n id: `${field.id}-${key}`,\n type: 'array',\n label: undefined,\n } as FieldDescriptor}\n value={val}\n values={{}}\n onChange={v => update(key, v)}\n onBlur={() => {}}\n />\n ) : (\n <PrimitiveRow\n value={val}\n onChange={v => update(key, itemType === 'number' ? (v === '' ? '' : Number(v)) : v)}\n inputType={itemType}\n placeholder={desc.itemPlaceholder}\n disabled={disabled}\n />\n )}\n </RowShell>\n );\n })}\n\n {/* Divider only when rows exist */}\n {items.length > 0 && <Divider sx={{ mb: 1, borderColor: 'transparent' }} />}\n\n {items.length < maxItems && (\n <Box\n component=\"button\"\n type=\"button\"\n onClick={add}\n disabled={disabled}\n sx={{\n display: 'inline-flex', alignItems: 'center', gap: 0.5,\n border: '1px dashed #cbd5e1', borderRadius: '6px',\n background: 'none', cursor: disabled ? 'not-allowed' : 'pointer',\n px: 1.5, py: 0.6, fontSize: 12.5, color: '#6366f1',\n opacity: disabled ? 0.5 : 1,\n '&:hover:not(:disabled)': { borderColor: '#6366f1', bgcolor: '#f5f3ff' },\n }}\n >\n <MdAdd size={14} />\n {desc.addLabel ?? `Add ${desc.itemLabel ?? 'item'}`}\n </Box>\n )}\n </Box>\n );\n}\n","import React from 'react';\r\nimport type { FieldDescriptor } from '../types';\r\n\r\ninterface FieldWrapperProps {\r\n field: FieldDescriptor;\r\n children: React.ReactNode;\r\n compact?: boolean;\r\n}\r\n\r\n// colSpan (1–12) → Bootstrap col-N class\r\nfunction colClass(colSpan: number): string {\r\n return `ff-form-col-${colSpan}`;\r\n}\r\n\r\nexport function FieldWrapper({ field, children, compact }: FieldWrapperProps) {\r\n const colSpan = typeof field.colSpan === 'number' ? field.colSpan : 12;\r\n\r\n return (\r\n <>\r\n <div\r\n className={[\r\n colClass(colSpan),\r\n compact ? 'ff-form-mb-0' : 'ff-form-mb-4',\r\n field.hidden ? 'ff-form-hidden' : '',\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n >\r\n {children}\r\n </div>\r\n\r\n {field.dividerAfter && (\r\n <div className=\"ff-form-col-12\">\r\n <hr className=\"ff-form-divider\" />\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n","/**\r\n * SchemaField — type: 'schema'\r\n *\r\n * A composite field whose children are defined via SchemaBuilder.\r\n * Renders those children as a mini-form and collects their values\r\n * as a single Record<string, unknown> — the field's own value.\r\n *\r\n * This lets builders compose arbitrary sub-schemas into one field:\r\n * e.g. a \"Request\" field that contains method + url + body children.\r\n */\r\n\r\nimport React, { useRef } from 'react';\r\nimport { Box, Typography } from '@mui/material';\r\nimport type { FieldDescriptor } from '../types';\r\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\r\nimport { fieldRegistry } from '../DynamicFormRenderer/fieldRegistry';\r\nimport { FieldWrapper } from './FieldWrapper';\r\nimport { FieldLabel } from './FieldLabel';\r\n\r\n// ─── Helpers ──────────────────────────────────────────────────────────────────\r\n\r\nfunction buildInitialValues(fields: FieldDescriptor[], current: Record<string, unknown>): Record<string, unknown> {\r\n const result: Record<string, unknown> = {};\r\n for (const f of fields) {\r\n const key = f.id ?? f.name ?? '';\r\n if (!key) continue;\r\n if (key in current) {\r\n result[key] = current[key];\r\n } else if (f.type === 'array') {\r\n result[key] = [];\r\n } else if (f.type === 'object' || f.type === 'schema') {\r\n result[key] = {};\r\n } else {\r\n result[key] = '';\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n// ─── Child field renderer ─────────────────────────────────────────────────────\r\n\r\nfunction ChildField({\r\n field,\r\n value,\r\n allValues,\r\n onChange,\r\n onBlur,\r\n}: {\r\n field: FieldDescriptor;\r\n value: unknown;\r\n allValues: Record<string, unknown>;\r\n onChange: (v: unknown) => void;\r\n onBlur: () => void;\r\n}) {\r\n const Component = fieldRegistry.get(field.type);\r\n if (!Component) return null;\r\n\r\n return (\r\n <FieldWrapper field={field}>\r\n <Component\r\n field={field}\r\n value={value}\r\n values={allValues}\r\n onChange={onChange}\r\n onBlur={onBlur}\r\n />\r\n </FieldWrapper>\r\n );\r\n}\r\n\r\n// ─── Main component ───────────────────────────────────────────────────────────\r\n\r\nexport function SchemaField({ field, value, onChange, onBlur }: FieldComponentProps) {\r\n const children = (field.children ?? []) as FieldDescriptor[];\r\n const current = (value as Record<string, unknown>) ?? {};\r\n const allValues = buildInitialValues(children, current);\r\n\r\n // Latest-value ref so concurrent child edits in the same tick (React 18\r\n // automatic batching, programmatic setFieldValue cascades) don't lose\r\n // earlier edits — the second handler reads truly latest state, not a\r\n // closed-over snapshot.\r\n const valueRef = useRef<Record<string, unknown>>(current);\r\n valueRef.current = current;\r\n\r\n function handleChildChange(key: string, childValue: unknown) {\r\n const latest = buildInitialValues(children, valueRef.current);\r\n const next = { ...latest, [key]: childValue };\r\n valueRef.current = next;\r\n onChange(next);\r\n }\r\n\r\n return (\r\n <Box>\r\n <FieldLabel\r\n label={field.label}\r\n required={field.required}\r\n showOptional={field.showOptional}\r\n info={field.info}\r\n />\r\n\r\n {field.helperText && (\r\n <Typography sx={{ fontSize: 12, color: '#6c757d', mb: 0.75 }}>\r\n {field.helperText}\r\n </Typography>\r\n )}\r\n\r\n {children.length === 0 ? (\r\n <Box sx={{\r\n py: 2.5, textAlign: 'center',\r\n border: '1.5px dashed #e2e8f0', borderRadius: '8px',\r\n color: '#94a3b8', fontSize: 13,\r\n }}>\r\n No child fields defined — edit this field to add them\r\n </Box>\r\n ) : (\r\n <Box sx={{\r\n border: '1px solid #e2e8f0', borderRadius: '8px',\r\n p: 2, bgcolor: '#fafafa',\r\n }}>\r\n <div className=\"ff-form-row\">\r\n {children.map((child) => {\r\n const key = child.id ?? child.name ?? '';\r\n if (!key) return null;\r\n return (\r\n <ChildField\r\n key={key}\r\n field={child}\r\n value={allValues[key]}\r\n allValues={allValues}\r\n onChange={(v) => handleChildChange(key, v)}\r\n onBlur={onBlur}\r\n />\r\n );\r\n })}\r\n </div>\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n}\r\n","/**\n * NumberField — FlowForge field\n *\n * type: 'number'\n *\n * Extras: min, max, step, prefix, suffix, helperText\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { FF, errorTextStyle, helperTextStyle } from '../fieldTokens';\nimport type { FieldDescriptor } from '../types';\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\nimport { FieldLabel } from './FieldLabel';\n\ninterface NumberFieldDescriptor extends FieldDescriptor {\n min?: number;\n max?: number;\n step?: number;\n prefix?: string;\n suffix?: string;\n helperText?: string;\n readOnly?: boolean;\n dataTestId?: string;\n}\n\nexport function NumberField({\n field: rawField,\n value,\n onChange,\n onBlur,\n error,\n touched,\n}: FieldComponentProps) {\n const field = rawField as NumberFieldDescriptor;\n const fieldId = field.id ?? field.name ?? '';\n const showError = !!(touched && error);\n const isDisabled = field.disabled === true;\n\n const [inputValue, setInputValue] = useState<string>(() =>\n value == null || value === '' ? '' : String(value)\n );\n const lastEmitted = useRef<unknown>(value);\n\n useEffect(() => {\n if (value === lastEmitted.current) return;\n lastEmitted.current = value;\n setInputValue(value == null || value === '' ? '' : String(value));\n }, [value]);\n\n const hasPrefix = !!field.prefix;\n const hasSuffix = !!field.suffix;\n const hasAdornment = hasPrefix || hasSuffix;\n\n const baseInputStyle: React.CSSProperties = {\n flex: 1,\n border: 'none',\n outline: 'none',\n backgroundColor: 'transparent',\n fontSize: 14,\n color: '#374151',\n padding: '6px 12px',\n cursor: isDisabled ? 'not-allowed' : undefined,\n boxSizing: 'border-box',\n lineHeight: 1.5,\n width: '100%',\n appearance: 'none' as React.CSSProperties['appearance'],\n MozAppearance: 'textfield',\n };\n\n const wrapperStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'stretch',\n width: '100%',\n border: showError ? FF.BORDER_ERROR : FF.BORDER,\n borderRadius: FF.BORDER_RADIUS,\n backgroundColor: isDisabled ? FF.COLOR_DISABLED_BG : '#fff',\n boxSizing: 'border-box',\n transition: 'border-color .15s, box-shadow .15s',\n };\n\n const adornStyle: React.CSSProperties = {\n display: 'flex', alignItems: 'center', padding: '0 10px',\n color: '#6b7280', fontSize: 13, whiteSpace: 'nowrap', flexShrink: 0,\n borderLeft: hasSuffix ? '1px solid rgba(0,0,0,0.1)' : undefined,\n borderRight: hasPrefix ? '1px solid rgba(0,0,0,0.1)' : undefined,\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLDivElement>) => {\n e.currentTarget.style.borderColor = showError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR_FOCUS;\n e.currentTarget.style.boxShadow = showError ? FF.FOCUS_SHADOW_ERROR : FF.FOCUS_SHADOW;\n };\n const handleBlur = (e: React.FocusEvent<HTMLDivElement>) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n e.currentTarget.style.borderColor = showError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR;\n e.currentTarget.style.boxShadow = 'none';\n onBlur();\n }\n };\n\n return (\n <div>\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={fieldId}\n dataTestId={field.dataTestId}\n />\n {field.helperText && !showError && (\n <small style={helperTextStyle}>\n {field.helperText}\n </small>\n )}\n <div style={hasAdornment ? wrapperStyle : undefined}\n onFocus={hasAdornment ? handleFocus : undefined}\n onBlur={hasAdornment ? handleBlur : undefined}\n >\n {hasPrefix && <span style={adornStyle}>{field.prefix}</span>}\n <input\n id={fieldId}\n name={fieldId}\n type=\"number\"\n min={field.min}\n max={field.max}\n step={field.step ?? 1}\n disabled={isDisabled}\n readOnly={field.readOnly}\n placeholder={field.placeholder ?? ''}\n value={inputValue}\n data-testid={field.dataTestId ?? `${fieldId}-input`}\n style={hasAdornment ? baseInputStyle : {\n ...baseInputStyle,\n border: showError ? FF.BORDER_ERROR : FF.BORDER,\n borderRadius: FF.BORDER_RADIUS,\n backgroundColor: isDisabled ? FF.COLOR_DISABLED_BG : '#fff',\n }}\n onChange={e => {\n const raw = e.target.value;\n setInputValue(raw);\n const num = raw === '' ? null : Number(raw);\n lastEmitted.current = num;\n onChange(num);\n }}\n onFocus={!hasAdornment ? e => {\n e.currentTarget.style.borderColor = showError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR_FOCUS;\n e.currentTarget.style.boxShadow = showError ? FF.FOCUS_SHADOW_ERROR : FF.FOCUS_SHADOW;\n } : undefined}\n onBlurCapture={!hasAdornment ? e => {\n e.currentTarget.style.borderColor = showError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR;\n e.currentTarget.style.boxShadow = 'none';\n onBlur();\n } : undefined}\n />\n {hasSuffix && <span style={{ ...adornStyle, borderRight: undefined }}>{field.suffix}</span>}\n </div>\n {showError && (\n <small data-testid={`${fieldId}-error`} style={errorTextStyle}>\n {error}\n </small>\n )}\n </div>\n );\n}\n","/**\n * ToggleField — FlowForge field\n *\n * type: 'toggle'\n *\n * Renders an MUI Switch.\n */\n\nimport React from 'react';\nimport { FormControlLabel, Switch } from '@mui/material';\nimport { errorTextStyle, helperTextStyle } from '../fieldTokens';\nimport type { FieldDescriptor } from '../types';\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\nimport { FieldLabel } from './FieldLabel';\n\ninterface ToggleFieldDescriptor extends FieldDescriptor {\n helperText?: string;\n dataTestId?: string;\n color?: 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning' | 'default';\n ariaLabel?: string;\n ariaDescribedBy?: string;\n}\n\nexport function ToggleField({\n field: rawField,\n value,\n onChange,\n onBlur,\n error,\n touched,\n}: FieldComponentProps) {\n const field = rawField as ToggleFieldDescriptor;\n const fieldId = field.id ?? field.name ?? '';\n const showError = !!(touched && error);\n const isDisabled = field.disabled === true;\n\n const isChecked = !!value;\n\n const switchNode = (\n <FormControlLabel\n control={\n <Switch\n id={fieldId}\n name={fieldId}\n checked={isChecked}\n onChange={e => {\n onChange(e.target.checked);\n }}\n onBlur={onBlur}\n disabled={isDisabled}\n color={field.color ?? 'primary'}\n inputProps={{\n 'aria-label': field.ariaLabel ?? (typeof field.label === 'string' ? field.label : undefined),\n 'aria-describedby': field.ariaDescribedBy,\n 'data-testid': field.dataTestId ?? `${fieldId}-input`,\n } as React.InputHTMLAttributes<HTMLInputElement>}\n />\n }\n label={\n field.label ? (\n <span style={{ fontSize: 14, color: isDisabled ? '#9ca3af' : '#374151', fontWeight: 500 }}>\n {field.label}\n </span>\n ) : undefined\n }\n sx={{ m: 0 }}\n />\n );\n\n return (\n <div>\n \n {switchNode}\n\n {field.helperText && !showError && (\n <small style={helperTextStyle}>{field.helperText}</small>\n )}\n {showError && (\n <small data-testid={`${fieldId}-error`} style={errorTextStyle}>{error}</small>\n )}\n </div>\n );\n}\n","/**\n * RadioGroupField — FlowForge field\n *\n * type: 'radio-group'\n *\n * Renders a group of radio buttons.\n */\n\nimport React from 'react';\nimport { RadioGroup, FormControlLabel, Radio } from '@mui/material';\nimport { errorTextStyle, helperTextStyle } from '../fieldTokens';\nimport type { FieldDescriptor } from '../types';\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\nimport { FieldLabel } from './FieldLabel';\n\ninterface RadioOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\ninterface RadioGroupFieldDescriptor extends FieldDescriptor {\n helperText?: string;\n dataTestId?: string;\n options?: RadioOption[];\n row?: boolean;\n color?: 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning' | 'default';\n}\n\nexport function RadioGroupField({\n field: rawField,\n value,\n onChange,\n onBlur,\n error,\n touched,\n}: FieldComponentProps) {\n const field = rawField as RadioGroupFieldDescriptor;\n const fieldId = field.id ?? field.name ?? '';\n const showError = !!(touched && error);\n const isDisabled = field.disabled === true;\n\n const stringValue = value != null ? String(value) : '';\n\n return (\n <div>\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={fieldId}\n dataTestId={field.dataTestId}\n />\n {field.helperText && !showError && (\n <small style={helperTextStyle}>{field.helperText}</small>\n )}\n\n <RadioGroup\n id={fieldId}\n name={fieldId}\n value={stringValue}\n onChange={e => {\n onChange(e.target.value);\n }}\n onBlur={onBlur}\n row={field.row}\n >\n {(field.options ?? []).map((opt) => (\n <FormControlLabel\n key={String(opt.value)}\n value={opt.value}\n control={\n <Radio\n disabled={isDisabled || opt.disabled}\n color={field.color ?? 'primary'}\n inputProps={{\n 'data-testid': field.dataTestId ? `${field.dataTestId}-opt-${opt.value}` : `${fieldId}-opt-${opt.value}`,\n } as React.InputHTMLAttributes<HTMLInputElement>}\n />\n }\n label={\n <span style={{ fontSize: 14, color: (isDisabled || opt.disabled) ? '#9ca3af' : '#374151' }}>\n {opt.label}\n </span>\n }\n sx={{ mr: field.row ? 3 : 0 }}\n />\n ))}\n </RadioGroup>\n\n {showError && (\n <small data-testid={`${fieldId}-error`} style={errorTextStyle}>{error}</small>\n )}\n </div>\n );\n}\n","/**\n * DateField — FlowForge field\n *\n * type: 'date' — renders <input type=\"date\">\n * type: 'datetime' — renders <input type=\"datetime-local\">\n */\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { FF, errorTextStyle, helperTextStyle } from '../fieldTokens';\nimport type { FieldDescriptor } from '../types';\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\nimport { FieldLabel } from './FieldLabel';\n\ninterface DateFieldDescriptor extends FieldDescriptor {\n inputType?: 'date' | 'datetime' | 'time';\n min?: string;\n max?: string;\n helperText?: string;\n readOnly?: boolean;\n dataTestId?: string;\n}\n\nexport function DateField({\n field: rawField,\n value,\n onChange,\n onBlur,\n error,\n touched,\n}: FieldComponentProps) {\n const field = rawField as DateFieldDescriptor;\n const fieldId = field.id ?? field.name ?? '';\n const showError = !!(touched && error);\n const isDisabled = field.disabled === true;\n\n const htmlType =\n field.inputType === 'datetime' ? 'datetime-local' :\n field.inputType === 'time' ? 'time' :\n 'date';\n\n const [inputValue, setInputValue] = useState<string>(() => String(value ?? ''));\n const lastEmitted = useRef<unknown>(value);\n\n useEffect(() => {\n if (value === lastEmitted.current) return;\n lastEmitted.current = value;\n setInputValue(String(value ?? ''));\n }, [value]);\n\n const inputStyle: React.CSSProperties = {\n width: '100%',\n fontSize: 14,\n color: '#374151',\n backgroundColor: isDisabled ? '#f9fafb' : '#fff',\n border: `1px solid ${showError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR}`,\n borderRadius: FF.BORDER_RADIUS,\n outline: 'none',\n padding: '6px 12px',\n boxSizing: 'border-box',\n lineHeight: 1.5,\n cursor: isDisabled ? 'not-allowed' : undefined,\n };\n\n return (\n <div>\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={fieldId}\n dataTestId={field.dataTestId}\n />\n {field.helperText && !showError && (\n <small style={helperTextStyle}>\n {field.helperText}\n </small>\n )}\n <input\n id={fieldId}\n name={fieldId}\n type={htmlType}\n style={inputStyle}\n value={inputValue}\n min={field.min}\n max={field.max}\n disabled={isDisabled}\n readOnly={field.readOnly}\n data-testid={field.dataTestId ?? `${fieldId}-input`}\n onChange={e => {\n setInputValue(e.target.value);\n lastEmitted.current = e.target.value;\n onChange(e.target.value);\n }}\n onBlur={onBlur}\n onFocus={e => {\n e.currentTarget.style.borderColor = showError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR_FOCUS;\n e.currentTarget.style.boxShadow = showError ? FF.FOCUS_SHADOW_ERROR : FF.FOCUS_SHADOW;\n }}\n onBlurCapture={e => {\n e.currentTarget.style.borderColor = showError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR;\n e.currentTarget.style.boxShadow = 'none';\n }}\n />\n {showError && (\n <small data-testid={`${fieldId}-error`} style={errorTextStyle}>\n {error}\n </small>\n )}\n </div>\n );\n}\n","/**\n * TagsField — FlowForge field\n *\n * type: 'tags'\n *\n * Multi-value chip input. Value is string[].\n * Press Enter or comma to add a tag. Click × to remove.\n */\n\nimport React, { useRef, useState } from 'react';\nimport { FF, errorTextStyle, helperTextStyle } from '../fieldTokens';\nimport { MdClose } from 'react-icons/md';\nimport type { FieldDescriptor } from '../types';\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\nimport { FieldLabel } from './FieldLabel';\n\ninterface TagsFieldDescriptor extends FieldDescriptor {\n helperText?: string;\n placeholder?: string;\n maxTags?: number;\n dataTestId?: string;\n}\n\nexport function TagsField({\n field: rawField,\n value,\n onChange,\n onBlur,\n error,\n touched,\n}: FieldComponentProps) {\n const field = rawField as TagsFieldDescriptor;\n const fieldId = field.id ?? field.name ?? '';\n const showError = !!(touched && error);\n const isDisabled = field.disabled === true;\n\n const tags: string[] = Array.isArray(value) ? (value as string[]) : [];\n const [input, setInput] = useState('');\n const [focused, setFocused] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const addTag = (raw: string) => {\n const tag = raw.trim();\n if (!tag || tags.includes(tag)) return;\n if (field.maxTags && tags.length >= field.maxTags) return;\n onChange([...tags, tag]);\n setInput('');\n };\n\n const removeTag = (idx: number) => {\n onChange(tags.filter((_, i) => i !== idx));\n };\n\n const borderColor = showError ? FF.BORDER_COLOR_ERROR : focused ? FF.BORDER_COLOR_FOCUS : FF.BORDER_COLOR;\n const boxShadow = focused\n ? showError ? FF.FOCUS_SHADOW_ERROR : FF.FOCUS_SHADOW\n : 'none';\n\n return (\n <div>\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={fieldId}\n dataTestId={field.dataTestId}\n />\n {field.helperText && !showError && (\n <small style={helperTextStyle}>{field.helperText}</small>\n )}\n <div\n onClick={() => inputRef.current?.focus()}\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: 4,\n minHeight: 38,\n padding: '4px 8px',\n border: `1px solid ${borderColor}`,\n borderRadius: FF.BORDER_RADIUS,\n backgroundColor: isDisabled ? FF.COLOR_DISABLED_BG : '#fff',\n boxShadow,\n boxSizing: 'border-box',\n cursor: isDisabled ? 'not-allowed' : 'text',\n transition: 'border-color .15s, box-shadow .15s',\n }}\n >\n {tags.map((tag, i) => (\n <span\n key={tag}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n background: '#ede9fe',\n color: '#5b21b6',\n border: '1px solid #ddd6fe',\n borderRadius: 4,\n padding: '1px 6px',\n fontSize: 13,\n fontWeight: 500,\n lineHeight: 1.6,\n }}\n >\n {tag}\n {!isDisabled && (\n <button\n type=\"button\"\n onClick={e => { e.stopPropagation(); removeTag(i); }}\n style={{ background: 'none', border: 'none', cursor: 'pointer', padding: 0, display: 'flex', color: '#7c3aed' }}\n >\n <MdClose size={12} />\n </button>\n )}\n </span>\n ))}\n <input\n ref={inputRef}\n id={fieldId}\n value={input}\n disabled={isDisabled}\n placeholder={tags.length === 0 ? (field.placeholder ?? 'Type and press Enter...') : ''}\n data-testid={field.dataTestId ?? `${fieldId}-input`}\n style={{\n flex: 1,\n minWidth: 80,\n border: 'none',\n outline: 'none',\n fontSize: 14,\n color: '#374151',\n backgroundColor: 'transparent',\n padding: '2px 4px',\n cursor: isDisabled ? 'not-allowed' : undefined,\n }}\n onChange={e => setInput(e.target.value)}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ',') { e.preventDefault(); addTag(input); }\n if (e.key === 'Backspace' && !input && tags.length > 0) removeTag(tags.length - 1);\n }}\n onFocus={() => setFocused(true)}\n onBlur={() => { setFocused(false); if (input.trim()) addTag(input); onBlur(); }}\n />\n </div>\n {showError && (\n <small data-testid={`${fieldId}-error`} style={errorTextStyle}>{error}</small>\n )}\n </div>\n );\n}\n","/**\n * SliderField — FlowForge field\n *\n * type: 'slider'\n *\n * Numeric range slider. Value is number.\n */\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { FF, errorTextStyle, helperTextStyle } from '../fieldTokens';\nimport { Slider } from '@mui/material';\nimport type { FieldDescriptor } from '../types';\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\nimport { FieldLabel } from './FieldLabel';\n\ninterface SliderFieldDescriptor extends FieldDescriptor {\n min?: number;\n max?: number;\n step?: number;\n showValue?: boolean;\n marks?: boolean;\n helperText?: string;\n dataTestId?: string;\n}\n\nexport function SliderField({\n field: rawField,\n value,\n onChange,\n onBlur,\n error,\n touched,\n}: FieldComponentProps) {\n const field = rawField as SliderFieldDescriptor;\n const fieldId = field.id ?? field.name ?? '';\n const showError = !!(touched && error);\n const isDisabled = field.disabled === true;\n\n const min = field.min ?? 0;\n const max = field.max ?? 100;\n const step = field.step ?? 1;\n\n const [sliderValue, setSliderValue] = useState<number>(() =>\n typeof value === 'number' ? value : min\n );\n const lastEmitted = useRef<unknown>(value);\n\n useEffect(() => {\n if (value === lastEmitted.current) return;\n lastEmitted.current = value;\n setSliderValue(typeof value === 'number' ? value : min);\n }, [value, min]);\n\n return (\n <div>\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={fieldId}\n dataTestId={field.dataTestId}\n />\n {field.helperText && !showError && (\n <small style={helperTextStyle}>\n {field.helperText}\n </small>\n )}\n <div style={{ display: 'flex', alignItems: 'center', gap: 12, px: 1 } as React.CSSProperties}>\n <Slider\n id={fieldId}\n value={sliderValue}\n min={min}\n max={max}\n step={step}\n disabled={isDisabled}\n marks={field.marks}\n onChange={(_, v) => {\n const num = Array.isArray(v) ? v[0] : v;\n setSliderValue(num);\n lastEmitted.current = num;\n onChange(num);\n }}\n onChangeCommitted={() => onBlur()}\n sx={{\n color: showError ? '#d32f2f' : '#6366f1',\n flex: 1,\n }}\n data-testid={field.dataTestId ?? `${fieldId}-input`}\n />\n {field.showValue !== false && (\n <span style={{\n fontSize: 13,\n fontWeight: 600,\n color: '#374151',\n minWidth: 36,\n textAlign: 'right',\n }}>\n {sliderValue}\n </span>\n )}\n </div>\n {showError && (\n <small data-testid={`${fieldId}-error`} style={errorTextStyle}>\n {error}\n </small>\n )}\n </div>\n );\n}\n","/**\n * ColorField — FlowForge field\n *\n * type: 'color'\n *\n * Native color picker + hex text input.\n */\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { FF, errorTextStyle, helperTextStyle } from '../fieldTokens';\nimport type { FieldDescriptor } from '../types';\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\nimport { FieldLabel } from './FieldLabel';\n\ninterface ColorFieldDescriptor extends FieldDescriptor {\n helperText?: string;\n showHex?: boolean;\n dataTestId?: string;\n}\n\nexport function ColorField({\n field: rawField,\n value,\n onChange,\n onBlur,\n error,\n touched,\n}: FieldComponentProps) {\n const field = rawField as ColorFieldDescriptor;\n const fieldId = field.id ?? field.name ?? '';\n const showError = !!(touched && error);\n const isDisabled = field.disabled === true;\n\n const [color, setColor] = useState<string>(() => String(value ?? '#6366f1'));\n const lastEmitted = useRef<unknown>(value);\n\n useEffect(() => {\n if (value === lastEmitted.current) return;\n lastEmitted.current = value;\n setColor(String(value ?? '#6366f1'));\n }, [value]);\n\n const emit = (v: string) => {\n setColor(v);\n lastEmitted.current = v;\n onChange(v);\n };\n\n return (\n <div>\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={fieldId}\n dataTestId={field.dataTestId}\n />\n {field.helperText && !showError && (\n <small style={helperTextStyle}>{field.helperText}</small>\n )}\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <div\n style={{\n width: FF.INPUT_HEIGHT,\n height: FF.INPUT_HEIGHT,\n borderRadius: FF.BORDER_RADIUS,\n border: showError ? FF.BORDER_ERROR : FF.BORDER,\n overflow: 'hidden',\n flexShrink: 0,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n position: 'relative',\n }}\n >\n <input\n type=\"color\"\n id={fieldId}\n value={color}\n disabled={isDisabled}\n data-testid={field.dataTestId ?? `${fieldId}-input`}\n onChange={e => emit(e.target.value)}\n onBlur={onBlur}\n style={{\n position: 'absolute',\n inset: 0,\n width: '150%',\n height: '150%',\n border: 'none',\n outline: 'none',\n padding: 0,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n opacity: 0,\n }}\n />\n <div style={{ width: '100%', height: '100%', backgroundColor: color }} />\n </div>\n {field.showHex !== false && (\n <input\n type=\"text\"\n value={color}\n disabled={isDisabled}\n maxLength={7}\n placeholder=\"#000000\"\n onChange={e => {\n const v = e.target.value;\n setColor(v);\n if (/^#[0-9a-fA-F]{6}$/.test(v)) {\n lastEmitted.current = v;\n onChange(v);\n }\n }}\n onBlur={onBlur}\n style={{\n fontSize: FF.FONT_SIZE_INPUT,\n fontFamily: 'monospace',\n color: FF.COLOR_LABEL,\n backgroundColor: isDisabled ? FF.COLOR_DISABLED_BG : '#fff',\n border: showError ? FF.BORDER_ERROR : FF.BORDER,\n borderRadius: FF.BORDER_RADIUS,\n padding: '0 10px',\n outline: 'none',\n height: FF.INPUT_HEIGHT,\n width: 100,\n boxSizing: 'border-box' as const,\n transition: 'border-color 0.15s, box-shadow 0.15s',\n }}\n />\n )}\n </div>\n {showError && (\n <small data-testid={`${fieldId}-error`} style={errorTextStyle}>{error}</small>\n )}\n </div>\n );\n}\n","/**\n * FileField — FlowForge field\n *\n * type: 'file'\n *\n * File upload. Value is File | File[] | null.\n */\n\nimport React, { useRef, useState } from 'react';\nimport { FF, errorTextStyle, helperTextStyle } from '../fieldTokens';\nimport { MdUploadFile, MdClose, MdInsertDriveFile } from 'react-icons/md';\nimport type { FieldDescriptor } from '../types';\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\nimport { FieldLabel } from './FieldLabel';\n\ninterface FileFieldDescriptor extends FieldDescriptor {\n accept?: string;\n multiple?: boolean;\n maxSizeMb?: number;\n helperText?: string;\n dataTestId?: string;\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function FileField({\n field: rawField,\n value,\n onChange,\n onBlur,\n error,\n touched,\n}: FieldComponentProps) {\n const field = rawField as FileFieldDescriptor;\n const fieldId = field.id ?? field.name ?? '';\n const showError = !!(touched && error);\n const isDisabled = field.disabled === true;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [dragOver, setDragOver] = useState(false);\n const [sizeError, setSizeError] = useState<string | null>(null);\n\n const files: File[] = value instanceof File\n ? [value]\n : Array.isArray(value) ? value as File[]\n : [];\n\n const handleFiles = (fileList: FileList | null) => {\n if (!fileList) return;\n const arr = Array.from(fileList);\n if (field.maxSizeMb) {\n const oversized = arr.find(f => f.size > field.maxSizeMb! * 1024 * 1024);\n if (oversized) { setSizeError(`\"${oversized.name}\" exceeds ${field.maxSizeMb} MB`); return; }\n }\n setSizeError(null);\n onChange(field.multiple ? arr : arr[0] ?? null);\n };\n\n const removeFile = (idx: number) => {\n if (field.multiple) onChange(files.filter((_, i) => i !== idx));\n else onChange(null);\n if (inputRef.current) inputRef.current.value = '';\n };\n\n const borderColor = showError || sizeError ? FF.BORDER_COLOR_ERROR : dragOver ? FF.BORDER_COLOR_FOCUS : FF.BORDER_COLOR;\n\n return (\n <div>\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={fieldId}\n dataTestId={field.dataTestId}\n />\n {field.helperText && !showError && (\n <small style={helperTextStyle}>{field.helperText}</small>\n )}\n <div\n onClick={() => !isDisabled && inputRef.current?.click()}\n onDragOver={e => { e.preventDefault(); if (!isDisabled) setDragOver(true); }}\n onDragLeave={() => setDragOver(false)}\n onDrop={e => { e.preventDefault(); setDragOver(false); if (!isDisabled) handleFiles(e.dataTransfer.files); }}\n style={{\n border: `1px dashed ${borderColor}`,\n borderRadius: FF.BORDER_RADIUS,\n padding: '14px 16px',\n textAlign: 'center',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n backgroundColor: dragOver ? 'rgba(99,102,241,0.04)' : isDisabled ? '#f9fafb' : '#fff',\n transition: 'border-color .15s, background .15s',\n }}\n >\n <input\n ref={inputRef}\n id={fieldId}\n type=\"file\"\n accept={field.accept}\n multiple={field.multiple}\n disabled={isDisabled}\n data-testid={field.dataTestId ?? `${fieldId}-input`}\n style={{ display: 'none' }}\n onChange={e => { handleFiles(e.target.files); onBlur(); }}\n />\n <MdUploadFile size={24} color={isDisabled ? '#9ca3af' : '#6366f1'} style={{ marginBottom: 4 }} />\n <div style={{ fontSize: 13, color: isDisabled ? '#9ca3af' : '#374151', fontWeight: 500 }}>\n {dragOver ? 'Drop file here' : 'Click or drag file to upload'}\n </div>\n {field.accept && (\n <div style={{ fontSize: 11, color: '#6b7280', marginTop: 2 }}>{field.accept}</div>\n )}\n {field.maxSizeMb && (\n <div style={{ fontSize: 11, color: '#6b7280' }}>Max {field.maxSizeMb} MB</div>\n )}\n </div>\n\n {files.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4, marginTop: 8 }}>\n {files.map((f, i) => (\n <div key={`${f.name}-${f.size}-${f.lastModified}`} style={{ display: 'flex', alignItems: 'center', gap: 8, padding: '6px 10px', border: '1px solid #e5e7eb', borderRadius: 4, backgroundColor: '#f9fafb' }}>\n <MdInsertDriveFile size={16} color=\"#6366f1\" />\n <span style={{ fontSize: 13, color: '#374151', flex: 1, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{f.name}</span>\n <span style={{ fontSize: 11, color: '#6b7280', flexShrink: 0 }}>{formatBytes(f.size)}</span>\n {!isDisabled && (\n <button type=\"button\" onClick={e => { e.stopPropagation(); removeFile(i); }} style={{ background: 'none', border: 'none', cursor: 'pointer', color: '#9ca3af', display: 'flex', padding: 0 }}>\n <MdClose size={14} />\n </button>\n )}\n </div>\n ))}\n </div>\n )}\n\n {(showError || sizeError) && (\n <small data-testid={`${fieldId}-error`} style={errorTextStyle}>{sizeError ?? error}</small>\n )}\n </div>\n );\n}\n","/**\n * LazyCodeMirror — code-split wrapper around @uiw/react-codemirror.\n *\n * The CodeMirror core and language packs (~150KB gzipped) are only loaded\n * when a `code` or `json-editor` field actually renders. Mirrors the\n * react-quill lazy-load pattern used by RichTextField.\n */\n\nimport React, { Suspense, useMemo } from 'react';\nimport type { ComponentProps } from 'react';\nimport type { Extension } from '@codemirror/state';\n\ntype CodeMirrorComponent = React.ComponentType<ComponentProps<typeof import('@uiw/react-codemirror').default>>;\n\nconst CodeMirrorLazy = React.lazy(async () => {\n const mod = await import('@uiw/react-codemirror');\n return { default: mod.default as CodeMirrorComponent };\n});\n\ntype Language = 'javascript' | 'typescript' | 'python' | 'json';\n\nasync function loadExtensions(lang: Language | undefined): Promise<Extension[]> {\n switch (lang) {\n case 'python': return [(await import('@codemirror/lang-python')).python()];\n case 'json': return [(await import('@codemirror/lang-json')).json()];\n case 'typescript': return [(await import('@codemirror/lang-javascript')).javascript({ typescript: true })];\n default: return [(await import('@codemirror/lang-javascript')).javascript()];\n }\n}\n\ninterface LazyCodeMirrorProps {\n language?: Language;\n value: string;\n readOnly?: boolean;\n minHeight?: string;\n maxHeight?: string;\n basicSetup?: Record<string, boolean>;\n onChange: (v: string) => void;\n onBlur?: () => void;\n style?: React.CSSProperties;\n fallbackHeight?: string;\n}\n\nexport function LazyCodeMirror({\n language, value, readOnly, minHeight, maxHeight, basicSetup, onChange, onBlur, style, fallbackHeight,\n}: LazyCodeMirrorProps) {\n const [extensions, setExtensions] = React.useState<Extension[] | null>(null);\n\n React.useEffect(() => {\n let active = true;\n loadExtensions(language).then((ext) => { if (active) setExtensions(ext); });\n return () => { active = false; };\n }, [language]);\n\n const skeleton = useMemo(() => (\n <div style={{ minHeight: fallbackHeight ?? minHeight, padding: 8, color: '#9ca3af', fontSize: 12 }}>\n Loading editor…\n </div>\n ), [fallbackHeight, minHeight]);\n\n if (!extensions) return skeleton;\n\n return (\n <Suspense fallback={skeleton}>\n <CodeMirrorLazy\n value={value}\n extensions={extensions}\n readOnly={readOnly}\n minHeight={minHeight}\n maxHeight={maxHeight}\n theme=\"light\"\n basicSetup={basicSetup}\n onChange={onChange}\n onBlur={onBlur}\n style={style}\n />\n </Suspense>\n );\n}\n","/**\n * JsonEditorField — FlowForge field\n *\n * type: 'json-editor'\n *\n * CodeMirror-powered JSON editor with validation.\n * Value is the raw JSON string.\n */\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { FF, errorTextStyle, helperTextStyle } from '../fieldTokens';\nimport type { FieldDescriptor } from '../types';\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\nimport { FieldLabel } from './FieldLabel';\nimport { LazyCodeMirror } from './LazyCodeMirror';\n\ninterface JsonEditorFieldDescriptor extends FieldDescriptor {\n rows?: number;\n helperText?: string;\n readOnly?: boolean;\n dataTestId?: string;\n}\n\nexport function JsonEditorField({\n field: rawField,\n value,\n onChange,\n onBlur,\n error,\n touched,\n}: FieldComponentProps) {\n const field = rawField as JsonEditorFieldDescriptor;\n const fieldId = field.id ?? field.name ?? '';\n const showError = !!(touched && error);\n const isDisabled = field.disabled === true;\n\n const [jsonError, setJsonError] = useState<string | null>(null);\n const [code, setCode] = useState<string>(() => {\n if (typeof value === 'string') return value;\n if (value != null) return JSON.stringify(value, null, 2);\n return '';\n });\n const lastEmitted = useRef<unknown>(value);\n\n useEffect(() => {\n if (value === lastEmitted.current) return;\n lastEmitted.current = value;\n if (typeof value === 'string') setCode(value);\n else if (value != null) setCode(JSON.stringify(value, null, 2));\n else setCode('');\n }, [value]);\n\n const handleChange = (val: string) => {\n setCode(val);\n try {\n if (val.trim()) JSON.parse(val);\n setJsonError(null);\n } catch (e) {\n setJsonError((e as Error).message);\n }\n lastEmitted.current = val;\n onChange(val);\n };\n\n const formatJson = () => {\n try {\n const formatted = JSON.stringify(JSON.parse(code), null, 2);\n setCode(formatted);\n setJsonError(null);\n lastEmitted.current = formatted;\n onChange(formatted);\n } catch { /* ignore */ }\n };\n\n const rows = field.rows ?? 8;\n const minHeight = `${rows * 22}px`;\n const maxHeight = `${rows * 22}px`;\n const borderColor = showError || jsonError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR;\n\n return (\n <div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={fieldId}\n dataTestId={field.dataTestId}\n />\n {!isDisabled && !field.readOnly && (\n <button\n type=\"button\"\n onClick={formatJson}\n style={{ fontSize: 11, fontWeight: 600, color: '#6366f1', background: 'none', border: 'none', cursor: 'pointer', padding: '0 0 4px' }}\n >\n Format\n </button>\n )}\n </div>\n {field.helperText && !showError && (\n <small style={helperTextStyle}>\n {field.helperText}\n </small>\n )}\n <div\n id={fieldId}\n data-testid={field.dataTestId ?? `${fieldId}-input`}\n style={{\n border: `1px solid ${borderColor}`,\n borderRadius: FF.BORDER_RADIUS,\n overflow: 'hidden',\n fontSize: 13,\n }}\n >\n <LazyCodeMirror\n language=\"json\"\n value={code}\n readOnly={isDisabled || field.readOnly}\n minHeight={minHeight}\n maxHeight={maxHeight}\n basicSetup={{ lineNumbers: true, foldGutter: true }}\n onChange={handleChange}\n onBlur={onBlur}\n style={{ fontSize: 13 }}\n />\n </div>\n {(showError || jsonError) && (\n <small data-testid={`${fieldId}-error`} style={errorTextStyle}>\n {jsonError ?? error}\n </small>\n )}\n </div>\n );\n}\n","/**\n * CodeField — FlowForge field\n *\n * type: 'code'\n *\n * CodeMirror-powered code editor. Supports js, python, json.\n * Value is the raw code string.\n */\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { FF, errorTextStyle, helperTextStyle } from '../fieldTokens';\nimport type { FieldDescriptor } from '../types';\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\nimport { FieldLabel } from './FieldLabel';\nimport { LazyCodeMirror } from './LazyCodeMirror';\n\ninterface CodeFieldDescriptor extends FieldDescriptor {\n language?: 'javascript' | 'typescript' | 'python' | 'json';\n rows?: number;\n helperText?: string;\n readOnly?: boolean;\n dataTestId?: string;\n}\n\nconst LANG_LABELS: Record<string, string> = {\n javascript: 'JS', typescript: 'TS', python: 'PY', json: 'JSON',\n};\n\nexport function CodeField({\n field: rawField,\n value,\n onChange,\n onBlur,\n error,\n touched,\n}: FieldComponentProps) {\n const field = rawField as CodeFieldDescriptor;\n const fieldId = field.id ?? field.name ?? '';\n const showError = !!(touched && error);\n const isDisabled = field.disabled === true;\n\n const [code, setCode] = useState<string>(() => String(value ?? ''));\n const lastEmitted = useRef<unknown>(value);\n\n useEffect(() => {\n if (value === lastEmitted.current) return;\n lastEmitted.current = value;\n setCode(String(value ?? ''));\n }, [value]);\n\n const handleChange = (val: string) => {\n setCode(val);\n lastEmitted.current = val;\n onChange(val);\n };\n\n const rows = field.rows ?? 8;\n const minHeight = `${rows * 22}px`;\n const maxHeight = `${rows * 22}px`;\n const langLabel = LANG_LABELS[field.language ?? 'javascript'] ?? 'CODE';\n\n return (\n <div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={fieldId}\n dataTestId={field.dataTestId}\n />\n <span style={{\n fontSize: 10, fontWeight: 700, color: '#6b7280',\n backgroundColor: '#f1f5f9', border: '1px solid #e2e8f0',\n borderRadius: 4, padding: '1px 6px', letterSpacing: 0.5,\n marginBottom: 4,\n }}>\n {langLabel}\n </span>\n </div>\n {field.helperText && !showError && (\n <small style={helperTextStyle}>\n {field.helperText}\n </small>\n )}\n <div\n id={fieldId}\n data-testid={field.dataTestId ?? `${fieldId}-input`}\n style={{\n border: `1px solid ${showError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR}`,\n borderRadius: FF.BORDER_RADIUS,\n overflow: 'hidden',\n }}\n >\n <LazyCodeMirror\n language={field.language}\n value={code}\n readOnly={isDisabled || field.readOnly}\n minHeight={minHeight}\n maxHeight={maxHeight}\n basicSetup={{ lineNumbers: true, foldGutter: true, autocompletion: true }}\n onChange={handleChange}\n onBlur={onBlur}\n style={{ fontSize: 13 }}\n />\n </div>\n {showError && (\n <small data-testid={`${fieldId}-error`} style={errorTextStyle}>\n {error}\n </small>\n )}\n </div>\n );\n}\n","/**\n * RichTextField — FlowForge field\n *\n * type: 'rich-text'\n *\n * react-quill is loaded lazily via React.lazy() so its global CSS\n * (quill.snow.css) is only injected into the host app when a rich-text\n * field is actually rendered — never just because FlowForm is imported.\n */\n\nimport React, { Suspense, useEffect, useRef, useState } from 'react';\nimport { FF, errorTextStyle, helperTextStyle } from '../fieldTokens';\nimport type { FieldDescriptor } from '../types';\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\nimport { FieldLabel } from './FieldLabel';\n\n// Lazy-load ReactQuill + its global CSS — only executes when rendered\nconst ReactQuill = React.lazy(() =>\n import('react-quill').then((mod) => {\n // Side-effect: inject quill CSS only at this point\n import('react-quill/dist/quill.snow.css');\n return { default: mod.default };\n })\n);\n\ninterface RichTextFieldDescriptor extends FieldDescriptor {\n rows?: number;\n helperText?: string;\n readOnly?: boolean;\n toolbar?: boolean;\n dataTestId?: string;\n}\n\nconst TOOLBAR = [\n [{ header: [1, 2, 3, false] }],\n ['bold', 'italic', 'underline', 'strike'],\n [{ list: 'ordered' }, { list: 'bullet' }],\n ['link'],\n ['clean'],\n];\n\nexport function RichTextField({\n field: rawField,\n value,\n onChange,\n onBlur,\n error,\n touched,\n}: FieldComponentProps) {\n const field = rawField as RichTextFieldDescriptor;\n const fieldId = field.id ?? field.name ?? '';\n const showError = !!(touched && error);\n const isDisabled = field.disabled === true;\n\n const [html, setHtml] = useState<string>(() => String(value ?? ''));\n const lastEmitted = useRef<unknown>(value);\n\n useEffect(() => {\n if (value === lastEmitted.current) return;\n lastEmitted.current = value;\n setHtml(String(value ?? ''));\n }, [value]);\n\n const handleChange = (val: string) => {\n setHtml(val);\n lastEmitted.current = val;\n onChange(val);\n };\n\n const minHeight = (field.rows ?? 6) * 24;\n const showToolbar = field.toolbar !== false;\n\n return (\n <div>\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={fieldId}\n dataTestId={field.dataTestId}\n />\n {field.helperText && !showError && (\n <small style={helperTextStyle}>{field.helperText}</small>\n )}\n <div\n id={fieldId}\n data-testid={field.dataTestId ?? `${fieldId}-input`}\n style={{\n border: showError ? FF.BORDER_ERROR : FF.BORDER,\n borderRadius: FF.BORDER_RADIUS,\n overflow: 'hidden',\n fontSize: 14,\n }}\n >\n <Suspense fallback={\n <div style={{ minHeight, display: 'flex', alignItems: 'center', padding: '8px 12px', color: 'rgba(0,0,0,0.38)', fontSize: 13 }}>\n Loading editor…\n </div>\n }>\n <ReactQuill\n value={html}\n onChange={handleChange}\n onBlur={onBlur}\n readOnly={isDisabled || field.readOnly}\n modules={{ toolbar: showToolbar ? TOOLBAR : false }}\n style={{ minHeight }}\n theme=\"snow\"\n />\n </Suspense>\n </div>\n {showError && (\n <small data-testid={`${fieldId}-error`} style={errorTextStyle}>{error}</small>\n )}\n </div>\n );\n}\n","/**\n * InfiniteSelectField — type: 'infinite-select'\n *\n * Paginated async select with infinite scroll — single and multi.\n *\n * Descriptor shape:\n * loadPage: ({ page, search, signal }) => Promise<{ options, hasMore }>\n * loadSelected?: (values: string[]) => Promise<Option[]>\n * isMulti?: boolean\n * isClearable?: boolean\n * helperText?: string\n */\n\nimport React, {\n useCallback, useEffect, useMemo, useRef, useState,\n} from 'react';\nimport Select, { components } from 'react-select';\nimport type { GroupBase, MenuListProps } from 'react-select';\nimport type { FieldDescriptor } from '../types';\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\nimport { FieldLabel } from './FieldLabel';\nimport { buildSelectStyles, errorTextStyle, helperTextStyle } from '../fieldTokens';\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface InfiniteOption {\n value: string;\n label: string;\n [key: string]: unknown;\n}\n\nexport interface LoadPageParams {\n page: number;\n search: string;\n signal: AbortSignal;\n}\n\nexport interface LoadPageResult {\n options: InfiniteOption[];\n hasMore: boolean;\n}\n\ninterface InfiniteSelectDescriptor extends FieldDescriptor {\n loadPage: (params: LoadPageParams) => Promise<LoadPageResult>;\n loadSelected?: (values: string[]) => Promise<InfiniteOption[]>;\n isMulti?: boolean;\n isClearable?: boolean;\n helperText?: string;\n}\n\n// ─── One-open-at-a-time (module-level event) ──────────────────────────────────\n\nconst OPEN_EVENT = 'ff-infinite-open';\nfunction fireOpenEvent(uid: string) {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent(OPEN_EVENT, { detail: uid }));\n }\n}\n\n// ─── Spinner keyframes (injected once) ───────────────────────────────────────\n\nif (typeof document !== 'undefined' && !document.getElementById('ff-spin-style')) {\n const s = document.createElement('style');\n s.id = 'ff-spin-style';\n s.textContent = '@keyframes ff-spin { to { transform: rotate(360deg); } }';\n document.head.appendChild(s);\n}\n\n// ─── Custom MenuList — attaches scroll listener via innerRef, NO extra wrapper ─\n\ninterface InfiniteMenuListProps extends MenuListProps<InfiniteOption, boolean, GroupBase<InfiniteOption>> {\n onScrollBottom: () => void;\n isLoading: boolean;\n hasMore: boolean;\n}\n\nfunction InfiniteMenuList(props: InfiniteMenuListProps) {\n const { onScrollBottom, isLoading, hasMore, innerRef, children, ...rest } = props;\n const hasOptionChildren = React.Children.count(children) > 0;\n\n // Combine react-select's innerRef with our scroll listener\n const elRef = useRef<HTMLDivElement | null>(null);\n\n const setRef = useCallback((el: HTMLDivElement | null) => {\n elRef.current = el;\n if (typeof innerRef === 'function') innerRef(el);\n else if (innerRef && 'current' in innerRef) {\n (innerRef as React.MutableRefObject<HTMLDivElement | null>).current = el;\n }\n }, [innerRef]);\n\n // Re-register listener whenever loading/hasMore changes so handler is fresh\n useEffect(() => {\n const el = elRef.current;\n if (!el) return;\n const handler = () => {\n if (isLoading || !hasMore) return;\n if (el.scrollTop + el.clientHeight >= el.scrollHeight - 50) {\n onScrollBottom();\n }\n };\n el.addEventListener('scroll', handler, { passive: true });\n return () => el.removeEventListener('scroll', handler);\n }, [isLoading, hasMore, onScrollBottom]);\n\n // Auto-fill: if the menu content isn't scrollable (e.g. all visible items\n // hidden because they're selected, or a short page), trigger loadMore so the\n // user isn't stuck with no way to reach the next page.\n useEffect(() => {\n const el = elRef.current;\n if (!el || isLoading || !hasMore) return;\n if (el.scrollHeight <= el.clientHeight + 4) {\n onScrollBottom();\n }\n }, [children, isLoading, hasMore, onScrollBottom]);\n\n return (\n <components.MenuList {...rest} innerRef={setRef}>\n {children}\n {/* Footer only when we have option rows — empty+loading is handled by\n noOptionsMessage instead, so we never render \"Loading…\" twice */}\n {hasOptionChildren && (isLoading || hasMore) && (\n <div style={{\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n padding: '8px 12px', gap: 8,\n color: '#6b7280', fontSize: 12,\n borderTop: '1px solid #f1f3f5',\n pointerEvents: 'none', // keep keyboard nav off this row\n userSelect: 'none',\n }}>\n {isLoading\n ? <><SpinnerIcon />Loading…</>\n : <span style={{ color: '#adb5bd' }}>Scroll for more</span>\n }\n </div>\n )}\n </components.MenuList>\n );\n}\n\nfunction SpinnerIcon() {\n return (\n <div style={{\n width: 13, height: 13, flexShrink: 0,\n border: '2px solid #e5e7eb', borderTopColor: '#6366f1',\n borderRadius: '50%', animation: 'ff-spin 0.7s linear infinite',\n }} />\n );\n}\n\n// ─── useInfiniteOptions ───────────────────────────────────────────────────────\n\ninterface UseInfiniteOpts {\n loadPage: InfiniteSelectDescriptor['loadPage'];\n loadSelected?: InfiniteSelectDescriptor['loadSelected'];\n /** Current field value — used to hydrate selected-option labels whenever\n * it changes to include IDs not yet in the cache. */\n currentValues: string[];\n isOpen: boolean;\n}\n\nfunction useInfiniteOptions({ loadPage, loadSelected, currentValues, isOpen }: UseInfiniteOpts) {\n // Accumulated fetched options for the current search term\n const [fetchedOptions, setFetchedOptions] = useState<InfiniteOption[]>([]);\n const [page, setPage] = useState(0);\n const [hasMore, setHasMore] = useState(true);\n const [isLoading, setIsLoading] = useState(false);\n\n // Selected-value cache: holds option objects for values the user has ever\n // selected or that were pre-hydrated. Survives search resets.\n const selectedCacheRef = useRef<Map<string, InfiniteOption>>(new Map());\n // Force-rerender when selectedCache changes (it's a ref, not state)\n const [selectedCacheVersion, setSelectedCacheVersion] = useState(0);\n\n const [inputValue, setInputValue] = useState('');\n const [debouncedSearch, setDebouncedSearch] = useState('');\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const abortRef = useRef<AbortController | null>(null);\n const prevSearchRef = useRef<string | null>(null); // null = \"never loaded\"\n\n // ── Debounce the input ─────────────────────────────────────────────────────\n const handleInputChange = useCallback((val: string) => {\n setInputValue(val);\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => setDebouncedSearch(val), 300);\n }, []);\n\n // ── Core: fetch page 1 on search change, or on first open ─────────────────\n useEffect(() => {\n if (!isOpen) return;\n if (prevSearchRef.current === debouncedSearch) return;\n prevSearchRef.current = debouncedSearch;\n\n abortRef.current?.abort();\n const ctrl = new AbortController();\n abortRef.current = ctrl;\n\n setFetchedOptions([]);\n setPage(0);\n setHasMore(true);\n setIsLoading(true);\n\n loadPage({ page: 1, search: debouncedSearch, signal: ctrl.signal })\n .then((res) => {\n if (ctrl.signal.aborted) return;\n const deduped = dedupOptions(res.options);\n setFetchedOptions(deduped);\n setPage(1);\n setHasMore(res.hasMore);\n setIsLoading(false);\n })\n .catch((err) => {\n if (isAbortError(err)) return;\n setIsLoading(false);\n });\n\n return () => ctrl.abort();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [debouncedSearch, isOpen]);\n\n // ── Load next page (triggered by scroll) ──────────────────────────────────\n const loadMore = useCallback(() => {\n if (isLoading || !hasMore) return;\n\n abortRef.current?.abort();\n const ctrl = new AbortController();\n abortRef.current = ctrl;\n setIsLoading(true);\n\n const nextPage = page + 1;\n loadPage({ page: nextPage, search: debouncedSearch, signal: ctrl.signal })\n .then((res) => {\n if (ctrl.signal.aborted) return;\n setFetchedOptions(prev => dedupOptions([...prev, ...res.options]));\n setPage(nextPage);\n setHasMore(res.hasMore);\n setIsLoading(false);\n })\n .catch((err) => {\n if (isAbortError(err)) return;\n setIsLoading(false);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isLoading, hasMore, page, debouncedSearch]);\n\n // ── Pre-selected hydration — fires whenever currentValues contains IDs\n // not yet in the cache. Handles mount, async form data, and external\n // value changes. In-flight requests for the same set are de-duped. ──────\n const hydratingRef = useRef<Set<string>>(new Set());\n useEffect(() => {\n if (!loadSelected || currentValues.length === 0) return;\n const missing = currentValues.filter(v =>\n !selectedCacheRef.current.has(v) && !hydratingRef.current.has(v)\n );\n if (missing.length === 0) return;\n missing.forEach(v => hydratingRef.current.add(v));\n loadSelected(missing).then((opts) => {\n opts.forEach(o => selectedCacheRef.current.set(o.value, o));\n setSelectedCacheVersion(v => v + 1);\n }).catch(() => { /* ignore */ })\n .finally(() => { missing.forEach(v => hydratingRef.current.delete(v)); });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentValues.join('|')]);\n\n // ── Reset on menu close ────────────────────────────────────────────────────\n const handleMenuClose = useCallback(() => {\n prevSearchRef.current = null;\n setInputValue('');\n setDebouncedSearch('');\n if (debounceRef.current) clearTimeout(debounceRef.current);\n abortRef.current?.abort();\n }, []);\n\n // ── Dropdown options = ONLY the fetched options in server order.\n // Selected items are NOT prepended — that caused deselected items to\n // reappear at the top, and page-2+ items to show up on reopen. ──────────\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const dropdownOptions = useMemo(() => fetchedOptions, [fetchedOptions, selectedCacheVersion]);\n\n // Look up an option by value — searches fetched options first, then the\n // selected-cache (which holds labels for items not in the current page).\n const lookupOption = useCallback((val: string): InfiniteOption | undefined => {\n const inFetched = fetchedOptions.find(o => o.value === val);\n if (inFetched) return inFetched;\n return selectedCacheRef.current.get(val);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fetchedOptions, selectedCacheVersion]);\n\n // ── Update selectedCache when user picks ──────────────────────────────────\n const updateSelectedCache = useCallback((picked: InfiniteOption | InfiniteOption[] | null) => {\n if (!picked) return;\n const arr = Array.isArray(picked) ? picked : [picked];\n arr.forEach(o => selectedCacheRef.current.set(o.value, o));\n }, []);\n\n return {\n options: dropdownOptions,\n lookupOption,\n isLoading,\n hasMore,\n inputValue,\n handleInputChange,\n loadMore,\n handleMenuClose,\n updateSelectedCache,\n };\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction dedupOptions(opts: InfiniteOption[]): InfiniteOption[] {\n const seen = new Set<string>();\n return opts.filter(o => {\n if (seen.has(o.value)) return false;\n seen.add(o.value);\n return true;\n });\n}\n\nfunction isAbortError(err: unknown): boolean {\n return err instanceof Error && (err.name === 'AbortError' || err.message === 'AbortError');\n}\n\nfunction toStringArray(value: unknown): string[] {\n if (value == null) return [];\n if (Array.isArray(value)) return value.map(String);\n return [String(value)];\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport function InfiniteSelectField({\n field: rawField, value, onChange, onBlur, error, touched,\n}: FieldComponentProps) {\n const field = rawField as InfiniteSelectDescriptor;\n const isMulti = field.isMulti ?? false;\n const fieldId = (field.id as string | undefined) ?? (field.name as string | undefined) ?? '';\n const showError = !!(touched && error);\n const isDisabled = field.disabled === true;\n\n // Stable uid per instance for one-open-at-a-time\n const uid = useRef(`ff-inf-${Math.random().toString(36).slice(2)}`).current;\n const [isOpen, setIsOpen] = useState(false);\n\n // Listener is ALWAYS attached (not gated on isOpen) — gating caused races\n // where attach/detach interleaved with controlled-menu state changes and\n // produced an open→close→open flicker on click.\n useEffect(() => {\n const handler = (e: Event) => {\n if ((e as CustomEvent<string>).detail !== uid) setIsOpen(false);\n };\n window.addEventListener(OPEN_EVENT, handler);\n return () => window.removeEventListener(OPEN_EVENT, handler);\n }, [uid]);\n\n // Fire the open event as a side effect AFTER isOpen flips true, not inside\n // the click handler. Avoids dispatching while react-select is still mid-click.\n useEffect(() => {\n if (isOpen) fireOpenEvent(uid);\n }, [isOpen, uid]);\n\n const handleMenuOpen = useCallback(() => setIsOpen(true), []);\n\n // currentValues recomputed on every value change so hydration stays live\n const currentValues = useMemo(() => toStringArray(value), [value]);\n\n const {\n options,\n lookupOption,\n isLoading,\n hasMore,\n inputValue,\n handleInputChange,\n loadMore,\n handleMenuClose: infiniteClose,\n updateSelectedCache,\n } = useInfiniteOptions({\n loadPage: field.loadPage,\n loadSelected: field.loadSelected,\n currentValues,\n isOpen,\n });\n\n // Single cleanup path: every isOpen → false transition runs infiniteClose,\n // regardless of source (user click, escape, or one-open-at-a-time listener\n // forcing close). Avoids stale search state / leaked in-flight fetches.\n const infiniteCloseRef = useRef(infiniteClose);\n infiniteCloseRef.current = infiniteClose;\n const prevOpenRef = useRef(false);\n useEffect(() => {\n if (prevOpenRef.current && !isOpen) infiniteCloseRef.current();\n prevOpenRef.current = isOpen;\n }, [isOpen]);\n\n const handleMenuClose = useCallback(() => setIsOpen(false), []);\n\n // Derive controlled selected value via lookupOption (searches fetched +\n // cached). The dropdown options themselves stay in pure server order.\n const selectedValue = useMemo(() => {\n if (value == null || value === '' || (Array.isArray(value) && value.length === 0)) {\n return isMulti ? [] : null;\n }\n if (isMulti) {\n return toStringArray(value)\n .map(v => lookupOption(v))\n .filter((o): o is InfiniteOption => !!o);\n }\n return lookupOption(String(value)) ?? null;\n }, [value, lookupOption, isMulti]);\n\n const handleChange = useCallback((selected: unknown) => {\n if (isMulti) {\n const arr = (selected as InfiniteOption[] | null) ?? [];\n updateSelectedCache(arr);\n onChange(arr.map(o => o.value));\n } else {\n const opt = selected as InfiniteOption | null;\n if (opt) updateSelectedCache(opt);\n onChange(opt ? opt.value : null);\n }\n }, [isMulti, onChange, updateSelectedCache]);\n\n // Keep a ref to live values so MenuList component reference stays stable.\n // If MenuList dep-changes on isLoading/hasMore, react-select sees a new component\n // type, unmounts the menu list, and scroll position resets to top.\n const infiniteRef = useRef({ loadMore, isLoading, hasMore });\n infiniteRef.current = { loadMore, isLoading, hasMore };\n\n // Created ONCE — stable reference, no remount on isLoading change.\n const MenuList = useRef(\n function BoundMenuList(props: MenuListProps<InfiniteOption, boolean, GroupBase<InfiniteOption>>) {\n return (\n <InfiniteMenuList\n {...props}\n onScrollBottom={() => infiniteRef.current.loadMore()}\n isLoading={infiniteRef.current.isLoading}\n hasMore={infiniteRef.current.hasMore}\n />\n );\n }\n ).current;\n\n // When there are no options, this drives the menu body content.\n // Footer in InfiniteMenuList is suppressed when option list is empty, so\n // only one \"Loading…\" can appear at a time.\n const noOptionsMessage = useCallback(\n () => isLoading ? 'Loading…' : 'No options found',\n [isLoading]\n );\n\n return (\n <div className={`${(field.customClass as string) ?? ''} ${field.hidden ? 'ff-form-hidden' : ''}`}>\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={fieldId}\n />\n {field.helperText && !showError && (\n <small style={helperTextStyle}>{field.helperText}</small>\n )}\n <Select<InfiniteOption, boolean, GroupBase<InfiniteOption>>\n inputId={fieldId}\n value={selectedValue}\n inputValue={inputValue}\n onInputChange={handleInputChange}\n onChange={handleChange as (v: unknown) => void}\n onBlur={onBlur}\n options={options}\n isMulti={isMulti}\n isDisabled={isDisabled}\n isClearable={field.isClearable ?? false}\n isSearchable\n filterOption={null} // server handles filtering\n menuIsOpen={isOpen}\n onMenuOpen={handleMenuOpen}\n onMenuClose={handleMenuClose}\n placeholder={field.placeholder ?? 'Search…'}\n noOptionsMessage={noOptionsMessage}\n styles={buildSelectStyles(showError, isMulti)}\n components={{ MenuList }}\n classNamePrefix=\"ff-select\"\n menuPortalTarget={typeof document !== 'undefined' ? document.body : undefined}\n menuPosition=\"fixed\"\n closeMenuOnSelect={!isMulti}\n hideSelectedOptions={isMulti}\n />\n {showError && (\n <small data-testid={`${fieldId}-error`} style={errorTextStyle}>{error}</small>\n )}\n </div>\n );\n}\n","/**\n * Eagerly register every built-in field component into `fieldRegistry`.\n *\n * Extracted into a dedicated module so we can ensure it stays in the main entry\n * bundle. (Previously these calls lived at the top of DynamicFormRenderer/index.tsx\n * and got hoisted into a lazily-loaded SchemaBuilder chunk by Vite, so consumers\n * importing only FlowForgeCanvas ended up with an empty fieldRegistry and every\n * field rendered as `null`.)\n *\n * Loaded as a side-effect from src/index.ts so any import of @notmrabhi/flowforge\n * guarantees the registry is populated before the first render.\n */\nimport { fieldRegistry } from './fieldRegistry';\nimport { TextField } from '../fields/TextField';\nimport { SelectField } from '../fields/SelectField';\nimport { DescriptiveSelectField } from '../fields/DescriptiveSelectField';\nimport { ArrayField } from '../fields/ArrayField';\nimport { SchemaField } from '../fields/SchemaField';\nimport { NumberField } from '../fields/NumberField';\nimport { ToggleField } from '../fields/ToggleField';\nimport { RadioGroupField } from '../fields/RadioGroupField';\nimport { DateField } from '../fields/DateField';\nimport { TagsField } from '../fields/TagsField';\nimport { SliderField } from '../fields/SliderField';\nimport { ColorField } from '../fields/ColorField';\nimport { FileField } from '../fields/FileField';\nimport { JsonEditorField } from '../fields/JsonEditorField';\nimport { CodeField } from '../fields/CodeField';\nimport { RichTextField } from '../fields/RichTextField';\nimport { InfiniteSelectField } from '../fields/InfiniteSelectField';\n\nfieldRegistry.register('text', TextField);\nfieldRegistry.register('textarea', TextField);\nfieldRegistry.register('select', SelectField);\nfieldRegistry.register('descriptive-select', DescriptiveSelectField);\nfieldRegistry.register('array', ArrayField);\nfieldRegistry.register('schema', SchemaField);\nfieldRegistry.register('number', NumberField);\nfieldRegistry.register('toggle', ToggleField);\nfieldRegistry.register('radio-group', RadioGroupField);\nfieldRegistry.register('date', DateField);\nfieldRegistry.register('datetime', DateField);\nfieldRegistry.register('time', DateField);\nfieldRegistry.register('tags', TagsField);\nfieldRegistry.register('slider', SliderField);\nfieldRegistry.register('color', ColorField);\nfieldRegistry.register('file', FileField);\nfieldRegistry.register('json-editor', JsonEditorField);\nfieldRegistry.register('code', CodeField);\nfieldRegistry.register('rich-text', RichTextField);\nfieldRegistry.register('infinite-select', InfiniteSelectField);\n","/**\n * Based on Kendo UI Core expression code <https://github.com/telerik/kendo-ui-core#license-information>\n */\n'use strict'\n\nfunction Cache(maxSize) {\n this._maxSize = maxSize\n this.clear()\n}\nCache.prototype.clear = function () {\n this._size = 0\n this._values = Object.create(null)\n}\nCache.prototype.get = function (key) {\n return this._values[key]\n}\nCache.prototype.set = function (key, value) {\n this._size >= this._maxSize && this.clear()\n if (!(key in this._values)) this._size++\n\n return (this._values[key] = value)\n}\n\nvar SPLIT_REGEX = /[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,\n DIGIT_REGEX = /^\\d+$/,\n LEAD_DIGIT_REGEX = /^\\d/,\n SPEC_CHAR_REGEX = /[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,\n CLEAN_QUOTES_REGEX = /^\\s*(['\"]?)(.*?)(\\1)\\s*$/,\n MAX_CACHE_SIZE = 512\n\nvar pathCache = new Cache(MAX_CACHE_SIZE),\n setCache = new Cache(MAX_CACHE_SIZE),\n getCache = new Cache(MAX_CACHE_SIZE)\n\nvar config\n\nmodule.exports = {\n Cache: Cache,\n\n split: split,\n\n normalizePath: normalizePath,\n\n setter: function (path) {\n var parts = normalizePath(path)\n\n return (\n setCache.get(path) ||\n setCache.set(path, function setter(obj, value) {\n var index = 0\n var len = parts.length\n var data = obj\n\n while (index < len - 1) {\n var part = parts[index]\n if (\n part === '__proto__' ||\n part === 'constructor' ||\n part === 'prototype'\n ) {\n return obj\n }\n\n data = data[parts[index++]]\n }\n data[parts[index]] = value\n })\n )\n },\n\n getter: function (path, safe) {\n var parts = normalizePath(path)\n return (\n getCache.get(path) ||\n getCache.set(path, function getter(data) {\n var index = 0,\n len = parts.length\n while (index < len) {\n if (data != null || !safe) data = data[parts[index++]]\n else return\n }\n return data\n })\n )\n },\n\n join: function (segments) {\n return segments.reduce(function (path, part) {\n return (\n path +\n (isQuoted(part) || DIGIT_REGEX.test(part)\n ? '[' + part + ']'\n : (path ? '.' : '') + part)\n )\n }, '')\n },\n\n forEach: function (path, cb, thisArg) {\n forEach(Array.isArray(path) ? path : split(path), cb, thisArg)\n },\n}\n\nfunction normalizePath(path) {\n return (\n pathCache.get(path) ||\n pathCache.set(\n path,\n split(path).map(function (part) {\n return part.replace(CLEAN_QUOTES_REGEX, '$2')\n })\n )\n )\n}\n\nfunction split(path) {\n return path.match(SPLIT_REGEX) || ['']\n}\n\nfunction forEach(parts, iter, thisArg) {\n var len = parts.length,\n part,\n idx,\n isArray,\n isBracket\n\n for (idx = 0; idx < len; idx++) {\n part = parts[idx]\n\n if (part) {\n if (shouldBeQuoted(part)) {\n part = '\"' + part + '\"'\n }\n\n isBracket = isQuoted(part)\n isArray = !isBracket && /^\\d+$/.test(part)\n\n iter.call(thisArg, part, isBracket, isArray, idx, parts)\n }\n }\n}\n\nfunction isQuoted(str) {\n return (\n typeof str === 'string' && str && [\"'\", '\"'].indexOf(str.charAt(0)) !== -1\n )\n}\n\nfunction hasLeadingNumber(part) {\n return part.match(LEAD_DIGIT_REGEX) && !part.match(DIGIT_REGEX)\n}\n\nfunction hasSpecialChars(part) {\n return SPEC_CHAR_REGEX.test(part)\n}\n\nfunction shouldBeQuoted(part) {\n return !isQuoted(part) && (hasLeadingNumber(part) || hasSpecialChars(part))\n}\n","const reWords = /[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+(?:['’](?:d|ll|m|re|s|t|ve))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde]|$)|(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde](?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])|$)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?(?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:d|ll|m|re|s|t|ve))?|[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?:['’](?:D|LL|M|RE|S|T|VE))?|\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])|\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])|\\d+|(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?)*/g\n\nconst words = (str) => str.match(reWords) || []\n\nconst upperFirst = (str) => str[0].toUpperCase() + str.slice(1)\n\nconst join = (str, d) => words(str).join(d).toLowerCase()\n\nconst camelCase = (str) =>\n words(str).reduce(\n (acc, next) =>\n `${acc}${\n !acc\n ? next.toLowerCase()\n : next[0].toUpperCase() + next.slice(1).toLowerCase()\n }`,\n '',\n )\n\nconst pascalCase = (str) => upperFirst(camelCase(str))\n\nconst snakeCase = (str) => join(str, '_')\n\nconst kebabCase = (str) => join(str, '-')\n\nconst sentenceCase = (str) => upperFirst(join(str, ' '))\n\nconst titleCase = (str) => words(str).map(upperFirst).join(' ')\n\nmodule.exports = {\n words,\n upperFirst,\n camelCase,\n pascalCase,\n snakeCase,\n kebabCase,\n sentenceCase,\n titleCase,\n}\n","\n/**\n * Topological sorting function\n *\n * @param {Array} edges\n * @returns {Array}\n */\n\nmodule.exports = function(edges) {\n return toposort(uniqueNodes(edges), edges)\n}\n\nmodule.exports.array = toposort\n\nfunction toposort(nodes, edges) {\n var cursor = nodes.length\n , sorted = new Array(cursor)\n , visited = {}\n , i = cursor\n // Better data structures make algorithm much faster.\n , outgoingEdges = makeOutgoingEdges(edges)\n , nodesHash = makeNodesHash(nodes)\n\n // check for unknown nodes\n edges.forEach(function(edge) {\n if (!nodesHash.has(edge[0]) || !nodesHash.has(edge[1])) {\n throw new Error('Unknown node. There is an unknown node in the supplied edges.')\n }\n })\n\n while (i--) {\n if (!visited[i]) visit(nodes[i], i, new Set())\n }\n\n return sorted\n\n function visit(node, i, predecessors) {\n if(predecessors.has(node)) {\n var nodeRep\n try {\n nodeRep = \", node was:\" + JSON.stringify(node)\n } catch(e) {\n nodeRep = \"\"\n }\n throw new Error('Cyclic dependency' + nodeRep)\n }\n\n if (!nodesHash.has(node)) {\n throw new Error('Found unknown node. Make sure to provided all involved nodes. Unknown node: '+JSON.stringify(node))\n }\n\n if (visited[i]) return;\n visited[i] = true\n\n var outgoing = outgoingEdges.get(node) || new Set()\n outgoing = Array.from(outgoing)\n\n if (i = outgoing.length) {\n predecessors.add(node)\n do {\n var child = outgoing[--i]\n visit(child, nodesHash.get(child), predecessors)\n } while (i)\n predecessors.delete(node)\n }\n\n sorted[--cursor] = node\n }\n}\n\nfunction uniqueNodes(arr){\n var res = new Set()\n for (var i = 0, len = arr.length; i < len; i++) {\n var edge = arr[i]\n res.add(edge[0])\n res.add(edge[1])\n }\n return Array.from(res)\n}\n\nfunction makeOutgoingEdges(arr){\n var edges = new Map()\n for (var i = 0, len = arr.length; i < len; i++) {\n var edge = arr[i]\n if (!edges.has(edge[0])) edges.set(edge[0], new Set())\n if (!edges.has(edge[1])) edges.set(edge[1], new Set())\n edges.get(edge[0]).add(edge[1])\n }\n return edges\n}\n\nfunction makeNodesHash(arr){\n var res = new Map()\n for (var i = 0, len = arr.length; i < len; i++) {\n res.set(arr[i], i)\n }\n return res\n}\n","import { getter, forEach, split, normalizePath, join } from 'property-expr';\nimport { camelCase, snakeCase } from 'tiny-case';\nimport toposort from 'toposort';\n\nconst toString = Object.prototype.toString;\nconst errorToString = Error.prototype.toString;\nconst regExpToString = RegExp.prototype.toString;\nconst symbolToString = typeof Symbol !== 'undefined' ? Symbol.prototype.toString : () => '';\nconst SYMBOL_REGEXP = /^Symbol\\((.*)\\)(.*)$/;\nfunction printNumber(val) {\n if (val != +val) return 'NaN';\n const isNegativeZero = val === 0 && 1 / val < 0;\n return isNegativeZero ? '-0' : '' + val;\n}\nfunction printSimpleValue(val, quoteStrings = false) {\n if (val == null || val === true || val === false) return '' + val;\n const typeOf = typeof val;\n if (typeOf === 'number') return printNumber(val);\n if (typeOf === 'string') return quoteStrings ? `\"${val}\"` : val;\n if (typeOf === 'function') return '[Function ' + (val.name || 'anonymous') + ']';\n if (typeOf === 'symbol') return symbolToString.call(val).replace(SYMBOL_REGEXP, 'Symbol($1)');\n const tag = toString.call(val).slice(8, -1);\n if (tag === 'Date') return isNaN(val.getTime()) ? '' + val : val.toISOString(val);\n if (tag === 'Error' || val instanceof Error) return '[' + errorToString.call(val) + ']';\n if (tag === 'RegExp') return regExpToString.call(val);\n return null;\n}\nfunction printValue(value, quoteStrings) {\n let result = printSimpleValue(value, quoteStrings);\n if (result !== null) return result;\n return JSON.stringify(value, function (key, value) {\n let result = printSimpleValue(this[key], quoteStrings);\n if (result !== null) return result;\n return value;\n }, 2);\n}\n\nfunction toArray(value) {\n return value == null ? [] : [].concat(value);\n}\n\nlet _Symbol$toStringTag, _Symbol$hasInstance, _Symbol$toStringTag2;\nlet strReg = /\\$\\{\\s*(\\w+)\\s*\\}/g;\n_Symbol$toStringTag = Symbol.toStringTag;\nclass ValidationErrorNoStack {\n constructor(errorOrErrors, value, field, type) {\n this.name = void 0;\n this.message = void 0;\n this.value = void 0;\n this.path = void 0;\n this.type = void 0;\n this.params = void 0;\n this.errors = void 0;\n this.inner = void 0;\n this[_Symbol$toStringTag] = 'Error';\n this.name = 'ValidationError';\n this.value = value;\n this.path = field;\n this.type = type;\n this.errors = [];\n this.inner = [];\n toArray(errorOrErrors).forEach(err => {\n if (ValidationError.isError(err)) {\n this.errors.push(...err.errors);\n const innerErrors = err.inner.length ? err.inner : [err];\n this.inner.push(...innerErrors);\n } else {\n this.errors.push(err);\n }\n });\n this.message = this.errors.length > 1 ? `${this.errors.length} errors occurred` : this.errors[0];\n }\n}\n_Symbol$hasInstance = Symbol.hasInstance;\n_Symbol$toStringTag2 = Symbol.toStringTag;\nclass ValidationError extends Error {\n static formatError(message, params) {\n // Attempt to make the path more friendly for error message interpolation.\n const path = params.label || params.path || 'this';\n // Store the original path under `originalPath` so it isn't lost to custom\n // message functions; e.g., ones provided in `setLocale()` calls.\n params = Object.assign({}, params, {\n path,\n originalPath: params.path\n });\n if (typeof message === 'string') return message.replace(strReg, (_, key) => printValue(params[key]));\n if (typeof message === 'function') return message(params);\n return message;\n }\n static isError(err) {\n return err && err.name === 'ValidationError';\n }\n constructor(errorOrErrors, value, field, type, disableStack) {\n const errorNoStack = new ValidationErrorNoStack(errorOrErrors, value, field, type);\n if (disableStack) {\n return errorNoStack;\n }\n super();\n this.value = void 0;\n this.path = void 0;\n this.type = void 0;\n this.params = void 0;\n this.errors = [];\n this.inner = [];\n this[_Symbol$toStringTag2] = 'Error';\n this.name = errorNoStack.name;\n this.message = errorNoStack.message;\n this.type = errorNoStack.type;\n this.value = errorNoStack.value;\n this.path = errorNoStack.path;\n this.errors = errorNoStack.errors;\n this.inner = errorNoStack.inner;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ValidationError);\n }\n }\n static [_Symbol$hasInstance](inst) {\n return ValidationErrorNoStack[Symbol.hasInstance](inst) || super[Symbol.hasInstance](inst);\n }\n}\n\nlet mixed = {\n default: '${path} is invalid',\n required: '${path} is a required field',\n defined: '${path} must be defined',\n notNull: '${path} cannot be null',\n oneOf: '${path} must be one of the following values: ${values}',\n notOneOf: '${path} must not be one of the following values: ${values}',\n notType: ({\n path,\n type,\n value,\n originalValue\n }) => {\n const castMsg = originalValue != null && originalValue !== value ? ` (cast from the value \\`${printValue(originalValue, true)}\\`).` : '.';\n return type !== 'mixed' ? `${path} must be a \\`${type}\\` type, ` + `but the final value was: \\`${printValue(value, true)}\\`` + castMsg : `${path} must match the configured type. ` + `The validated value was: \\`${printValue(value, true)}\\`` + castMsg;\n }\n};\nlet string = {\n length: '${path} must be exactly ${length} characters',\n min: '${path} must be at least ${min} characters',\n max: '${path} must be at most ${max} characters',\n matches: '${path} must match the following: \"${regex}\"',\n email: '${path} must be a valid email',\n url: '${path} must be a valid URL',\n uuid: '${path} must be a valid UUID',\n datetime: '${path} must be a valid ISO date-time',\n datetime_precision: '${path} must be a valid ISO date-time with a sub-second precision of exactly ${precision} digits',\n datetime_offset: '${path} must be a valid ISO date-time with UTC \"Z\" timezone',\n trim: '${path} must be a trimmed string',\n lowercase: '${path} must be a lowercase string',\n uppercase: '${path} must be a upper case string'\n};\nlet number = {\n min: '${path} must be greater than or equal to ${min}',\n max: '${path} must be less than or equal to ${max}',\n lessThan: '${path} must be less than ${less}',\n moreThan: '${path} must be greater than ${more}',\n positive: '${path} must be a positive number',\n negative: '${path} must be a negative number',\n integer: '${path} must be an integer'\n};\nlet date = {\n min: '${path} field must be later than ${min}',\n max: '${path} field must be at earlier than ${max}'\n};\nlet boolean = {\n isValue: '${path} field must be ${value}'\n};\nlet object = {\n noUnknown: '${path} field has unspecified keys: ${unknown}',\n exact: '${path} object contains unknown properties: ${properties}'\n};\nlet array = {\n min: '${path} field must have at least ${min} items',\n max: '${path} field must have less than or equal to ${max} items',\n length: '${path} must have ${length} items'\n};\nlet tuple = {\n notType: params => {\n const {\n path,\n value,\n spec\n } = params;\n const typeLen = spec.types.length;\n if (Array.isArray(value)) {\n if (value.length < typeLen) return `${path} tuple value has too few items, expected a length of ${typeLen} but got ${value.length} for value: \\`${printValue(value, true)}\\``;\n if (value.length > typeLen) return `${path} tuple value has too many items, expected a length of ${typeLen} but got ${value.length} for value: \\`${printValue(value, true)}\\``;\n }\n return ValidationError.formatError(mixed.notType, params);\n }\n};\nvar locale = Object.assign(Object.create(null), {\n mixed,\n string,\n number,\n date,\n object,\n array,\n boolean,\n tuple\n});\n\nconst isSchema = obj => obj && obj.__isYupSchema__;\n\nclass Condition {\n static fromOptions(refs, config) {\n if (!config.then && !config.otherwise) throw new TypeError('either `then:` or `otherwise:` is required for `when()` conditions');\n let {\n is,\n then,\n otherwise\n } = config;\n let check = typeof is === 'function' ? is : (...values) => values.every(value => value === is);\n return new Condition(refs, (values, schema) => {\n var _branch;\n let branch = check(...values) ? then : otherwise;\n return (_branch = branch == null ? void 0 : branch(schema)) != null ? _branch : schema;\n });\n }\n constructor(refs, builder) {\n this.fn = void 0;\n this.refs = refs;\n this.refs = refs;\n this.fn = builder;\n }\n resolve(base, options) {\n let values = this.refs.map(ref =>\n // TODO: ? operator here?\n ref.getValue(options == null ? void 0 : options.value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context));\n let schema = this.fn(values, base, options);\n if (schema === undefined ||\n // @ts-ignore this can be base\n schema === base) {\n return base;\n }\n if (!isSchema(schema)) throw new TypeError('conditions must return a schema object');\n return schema.resolve(options);\n }\n}\n\nconst prefixes = {\n context: '$',\n value: '.'\n};\nfunction create$9(key, options) {\n return new Reference(key, options);\n}\nclass Reference {\n constructor(key, options = {}) {\n this.key = void 0;\n this.isContext = void 0;\n this.isValue = void 0;\n this.isSibling = void 0;\n this.path = void 0;\n this.getter = void 0;\n this.map = void 0;\n if (typeof key !== 'string') throw new TypeError('ref must be a string, got: ' + key);\n this.key = key.trim();\n if (key === '') throw new TypeError('ref must be a non-empty string');\n this.isContext = this.key[0] === prefixes.context;\n this.isValue = this.key[0] === prefixes.value;\n this.isSibling = !this.isContext && !this.isValue;\n let prefix = this.isContext ? prefixes.context : this.isValue ? prefixes.value : '';\n this.path = this.key.slice(prefix.length);\n this.getter = this.path && getter(this.path, true);\n this.map = options.map;\n }\n getValue(value, parent, context) {\n let result = this.isContext ? context : this.isValue ? value : parent;\n if (this.getter) result = this.getter(result || {});\n if (this.map) result = this.map(result);\n return result;\n }\n\n /**\n *\n * @param {*} value\n * @param {Object} options\n * @param {Object=} options.context\n * @param {Object=} options.parent\n */\n cast(value, options) {\n return this.getValue(value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context);\n }\n resolve() {\n return this;\n }\n describe() {\n return {\n type: 'ref',\n key: this.key\n };\n }\n toString() {\n return `Ref(${this.key})`;\n }\n static isRef(value) {\n return value && value.__isYupRef;\n }\n}\n\n// @ts-ignore\nReference.prototype.__isYupRef = true;\n\nconst isAbsent = value => value == null;\n\nfunction createValidation(config) {\n function validate({\n value,\n path = '',\n options,\n originalValue,\n schema\n }, panic, next) {\n const {\n name,\n test,\n params,\n message,\n skipAbsent\n } = config;\n let {\n parent,\n context,\n abortEarly = schema.spec.abortEarly,\n disableStackTrace = schema.spec.disableStackTrace\n } = options;\n const resolveOptions = {\n value,\n parent,\n context\n };\n function createError(overrides = {}) {\n const nextParams = resolveParams(Object.assign({\n value,\n originalValue,\n label: schema.spec.label,\n path: overrides.path || path,\n spec: schema.spec,\n disableStackTrace: overrides.disableStackTrace || disableStackTrace\n }, params, overrides.params), resolveOptions);\n const error = new ValidationError(ValidationError.formatError(overrides.message || message, nextParams), value, nextParams.path, overrides.type || name, nextParams.disableStackTrace);\n error.params = nextParams;\n return error;\n }\n const invalid = abortEarly ? panic : next;\n let ctx = {\n path,\n parent,\n type: name,\n from: options.from,\n createError,\n resolve(item) {\n return resolveMaybeRef(item, resolveOptions);\n },\n options,\n originalValue,\n schema\n };\n const handleResult = validOrError => {\n if (ValidationError.isError(validOrError)) invalid(validOrError);else if (!validOrError) invalid(createError());else next(null);\n };\n const handleError = err => {\n if (ValidationError.isError(err)) invalid(err);else panic(err);\n };\n const shouldSkip = skipAbsent && isAbsent(value);\n if (shouldSkip) {\n return handleResult(true);\n }\n let result;\n try {\n var _result;\n result = test.call(ctx, value, ctx);\n if (typeof ((_result = result) == null ? void 0 : _result.then) === 'function') {\n if (options.sync) {\n throw new Error(`Validation test of type: \"${ctx.type}\" returned a Promise during a synchronous validate. ` + `This test will finish after the validate call has returned`);\n }\n return Promise.resolve(result).then(handleResult, handleError);\n }\n } catch (err) {\n handleError(err);\n return;\n }\n handleResult(result);\n }\n validate.OPTIONS = config;\n return validate;\n}\n\n// Warning: mutates the input\nfunction resolveParams(params, options) {\n if (!params) return params;\n for (const key of Object.keys(params)) {\n params[key] = resolveMaybeRef(params[key], options);\n }\n return params;\n}\nfunction resolveMaybeRef(item, options) {\n return Reference.isRef(item) ? item.getValue(options.value, options.parent, options.context) : item;\n}\n\nfunction getIn(schema, path, value, context = value) {\n let parent, lastPart, lastPartDebug;\n\n // root path: ''\n if (!path) return {\n parent,\n parentPath: path,\n schema\n };\n forEach(path, (_part, isBracket, isArray) => {\n let part = isBracket ? _part.slice(1, _part.length - 1) : _part;\n schema = schema.resolve({\n context,\n parent,\n value\n });\n let isTuple = schema.type === 'tuple';\n let idx = isArray ? parseInt(part, 10) : 0;\n if (schema.innerType || isTuple) {\n if (isTuple && !isArray) throw new Error(`Yup.reach cannot implicitly index into a tuple type. the path part \"${lastPartDebug}\" must contain an index to the tuple element, e.g. \"${lastPartDebug}[0]\"`);\n if (value && idx >= value.length) {\n throw new Error(`Yup.reach cannot resolve an array item at index: ${_part}, in the path: ${path}. ` + `because there is no value at that index. `);\n }\n parent = value;\n value = value && value[idx];\n schema = isTuple ? schema.spec.types[idx] : schema.innerType;\n }\n\n // sometimes the array index part of a path doesn't exist: \"nested.arr.child\"\n // in these cases the current part is the next schema and should be processed\n // in this iteration. For cases where the index signature is included this\n // check will fail and we'll handle the `child` part on the next iteration like normal\n if (!isArray) {\n if (!schema.fields || !schema.fields[part]) throw new Error(`The schema does not contain the path: ${path}. ` + `(failed at: ${lastPartDebug} which is a type: \"${schema.type}\")`);\n parent = value;\n value = value && value[part];\n schema = schema.fields[part];\n }\n lastPart = part;\n lastPartDebug = isBracket ? '[' + _part + ']' : '.' + _part;\n });\n return {\n schema,\n parent,\n parentPath: lastPart\n };\n}\nfunction reach(obj, path, value, context) {\n return getIn(obj, path, value, context).schema;\n}\n\nclass ReferenceSet extends Set {\n describe() {\n const description = [];\n for (const item of this.values()) {\n description.push(Reference.isRef(item) ? item.describe() : item);\n }\n return description;\n }\n resolveAll(resolve) {\n let result = [];\n for (const item of this.values()) {\n result.push(resolve(item));\n }\n return result;\n }\n clone() {\n return new ReferenceSet(this.values());\n }\n merge(newItems, removeItems) {\n const next = this.clone();\n newItems.forEach(value => next.add(value));\n removeItems.forEach(value => next.delete(value));\n return next;\n }\n}\n\n// tweaked from https://github.com/Kelin2025/nanoclone/blob/0abeb7635bda9b68ef2277093f76dbe3bf3948e1/src/index.js\nfunction clone(src, seen = new Map()) {\n if (isSchema(src) || !src || typeof src !== 'object') return src;\n if (seen.has(src)) return seen.get(src);\n let copy;\n if (src instanceof Date) {\n // Date\n copy = new Date(src.getTime());\n seen.set(src, copy);\n } else if (src instanceof RegExp) {\n // RegExp\n copy = new RegExp(src);\n seen.set(src, copy);\n } else if (Array.isArray(src)) {\n // Array\n copy = new Array(src.length);\n seen.set(src, copy);\n for (let i = 0; i < src.length; i++) copy[i] = clone(src[i], seen);\n } else if (src instanceof Map) {\n // Map\n copy = new Map();\n seen.set(src, copy);\n for (const [k, v] of src.entries()) copy.set(k, clone(v, seen));\n } else if (src instanceof Set) {\n // Set\n copy = new Set();\n seen.set(src, copy);\n for (const v of src) copy.add(clone(v, seen));\n } else if (src instanceof Object) {\n // Object\n copy = {};\n seen.set(src, copy);\n for (const [k, v] of Object.entries(src)) copy[k] = clone(v, seen);\n } else {\n throw Error(`Unable to clone ${src}`);\n }\n return copy;\n}\n\n/**\n * Copied from @standard-schema/spec to avoid having a dependency on it.\n * https://github.com/standard-schema/standard-schema/blob/main/packages/spec/src/index.ts\n */\n\nfunction createStandardPath(path) {\n if (!(path != null && path.length)) {\n return undefined;\n }\n\n // Array to store the final path segments\n const segments = [];\n // Buffer for building the current segment\n let currentSegment = '';\n // Track if we're inside square brackets (array/property access)\n let inBrackets = false;\n // Track if we're inside quotes (for property names with special chars)\n let inQuotes = false;\n for (let i = 0; i < path.length; i++) {\n const char = path[i];\n if (char === '[' && !inQuotes) {\n // When entering brackets, push any accumulated segment after splitting on dots\n if (currentSegment) {\n segments.push(...currentSegment.split('.').filter(Boolean));\n currentSegment = '';\n }\n inBrackets = true;\n continue;\n }\n if (char === ']' && !inQuotes) {\n if (currentSegment) {\n // Handle numeric indices (e.g. arr[0])\n if (/^\\d+$/.test(currentSegment)) {\n segments.push(currentSegment);\n } else {\n // Handle quoted property names (e.g. obj[\"foo.bar\"])\n segments.push(currentSegment.replace(/^\"|\"$/g, ''));\n }\n currentSegment = '';\n }\n inBrackets = false;\n continue;\n }\n if (char === '\"') {\n // Toggle quote state for handling quoted property names\n inQuotes = !inQuotes;\n continue;\n }\n if (char === '.' && !inBrackets && !inQuotes) {\n // On dots outside brackets/quotes, push current segment\n if (currentSegment) {\n segments.push(currentSegment);\n currentSegment = '';\n }\n continue;\n }\n currentSegment += char;\n }\n\n // Push any remaining segment after splitting on dots\n if (currentSegment) {\n segments.push(...currentSegment.split('.').filter(Boolean));\n }\n return segments;\n}\nfunction createStandardIssues(error, parentPath) {\n const path = parentPath ? `${parentPath}.${error.path}` : error.path;\n return error.errors.map(err => ({\n message: err,\n path: createStandardPath(path)\n }));\n}\nfunction issuesFromValidationError(error, parentPath) {\n var _error$inner;\n if (!((_error$inner = error.inner) != null && _error$inner.length) && error.errors.length) {\n return createStandardIssues(error, parentPath);\n }\n const path = parentPath ? `${parentPath}.${error.path}` : error.path;\n return error.inner.flatMap(err => issuesFromValidationError(err, path));\n}\n\n// If `CustomSchemaMeta` isn't extended with any keys, we'll fall back to a\n// loose Record definition allowing free form usage.\nclass Schema {\n constructor(options) {\n this.type = void 0;\n this.deps = [];\n this.tests = void 0;\n this.transforms = void 0;\n this.conditions = [];\n this._mutate = void 0;\n this.internalTests = {};\n this._whitelist = new ReferenceSet();\n this._blacklist = new ReferenceSet();\n this.exclusiveTests = Object.create(null);\n this._typeCheck = void 0;\n this.spec = void 0;\n this.tests = [];\n this.transforms = [];\n this.withMutation(() => {\n this.typeError(mixed.notType);\n });\n this.type = options.type;\n this._typeCheck = options.check;\n this.spec = Object.assign({\n strip: false,\n strict: false,\n abortEarly: true,\n recursive: true,\n disableStackTrace: false,\n nullable: false,\n optional: true,\n coerce: true\n }, options == null ? void 0 : options.spec);\n this.withMutation(s => {\n s.nonNullable();\n });\n }\n\n // TODO: remove\n get _type() {\n return this.type;\n }\n clone(spec) {\n if (this._mutate) {\n if (spec) Object.assign(this.spec, spec);\n return this;\n }\n\n // if the nested value is a schema we can skip cloning, since\n // they are already immutable\n const next = Object.create(Object.getPrototypeOf(this));\n\n // @ts-expect-error this is readonly\n next.type = this.type;\n next._typeCheck = this._typeCheck;\n next._whitelist = this._whitelist.clone();\n next._blacklist = this._blacklist.clone();\n next.internalTests = Object.assign({}, this.internalTests);\n next.exclusiveTests = Object.assign({}, this.exclusiveTests);\n\n // @ts-expect-error this is readonly\n next.deps = [...this.deps];\n next.conditions = [...this.conditions];\n next.tests = [...this.tests];\n next.transforms = [...this.transforms];\n next.spec = clone(Object.assign({}, this.spec, spec));\n return next;\n }\n label(label) {\n let next = this.clone();\n next.spec.label = label;\n return next;\n }\n meta(...args) {\n if (args.length === 0) return this.spec.meta;\n let next = this.clone();\n next.spec.meta = Object.assign(next.spec.meta || {}, args[0]);\n return next;\n }\n withMutation(fn) {\n let before = this._mutate;\n this._mutate = true;\n let result = fn(this);\n this._mutate = before;\n return result;\n }\n concat(schema) {\n if (!schema || schema === this) return this;\n if (schema.type !== this.type && this.type !== 'mixed') throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${schema.type}`);\n let base = this;\n let combined = schema.clone();\n const mergedSpec = Object.assign({}, base.spec, combined.spec);\n combined.spec = mergedSpec;\n combined.internalTests = Object.assign({}, base.internalTests, combined.internalTests);\n\n // manually merge the blacklist/whitelist (the other `schema` takes\n // precedence in case of conflicts)\n combined._whitelist = base._whitelist.merge(schema._whitelist, schema._blacklist);\n combined._blacklist = base._blacklist.merge(schema._blacklist, schema._whitelist);\n\n // start with the current tests\n combined.tests = base.tests;\n combined.exclusiveTests = base.exclusiveTests;\n\n // manually add the new tests to ensure\n // the deduping logic is consistent\n combined.withMutation(next => {\n schema.tests.forEach(fn => {\n next.test(fn.OPTIONS);\n });\n });\n combined.transforms = [...base.transforms, ...combined.transforms];\n return combined;\n }\n isType(v) {\n if (v == null) {\n if (this.spec.nullable && v === null) return true;\n if (this.spec.optional && v === undefined) return true;\n return false;\n }\n return this._typeCheck(v);\n }\n resolve(options) {\n let schema = this;\n if (schema.conditions.length) {\n let conditions = schema.conditions;\n schema = schema.clone();\n schema.conditions = [];\n schema = conditions.reduce((prevSchema, condition) => condition.resolve(prevSchema, options), schema);\n schema = schema.resolve(options);\n }\n return schema;\n }\n resolveOptions(options) {\n var _options$strict, _options$abortEarly, _options$recursive, _options$disableStack;\n return Object.assign({}, options, {\n from: options.from || [],\n strict: (_options$strict = options.strict) != null ? _options$strict : this.spec.strict,\n abortEarly: (_options$abortEarly = options.abortEarly) != null ? _options$abortEarly : this.spec.abortEarly,\n recursive: (_options$recursive = options.recursive) != null ? _options$recursive : this.spec.recursive,\n disableStackTrace: (_options$disableStack = options.disableStackTrace) != null ? _options$disableStack : this.spec.disableStackTrace\n });\n }\n\n /**\n * Run the configured transform pipeline over an input value.\n */\n\n cast(value, options = {}) {\n let resolvedSchema = this.resolve(Object.assign({}, options, {\n value\n // parent: options.parent,\n // context: options.context,\n }));\n\n let allowOptionality = options.assert === 'ignore-optionality';\n let result = resolvedSchema._cast(value, options);\n if (options.assert !== false && !resolvedSchema.isType(result)) {\n if (allowOptionality && isAbsent(result)) {\n return result;\n }\n let formattedValue = printValue(value);\n let formattedResult = printValue(result);\n throw new TypeError(`The value of ${options.path || 'field'} could not be cast to a value ` + `that satisfies the schema type: \"${resolvedSchema.type}\". \\n\\n` + `attempted value: ${formattedValue} \\n` + (formattedResult !== formattedValue ? `result of cast: ${formattedResult}` : ''));\n }\n return result;\n }\n _cast(rawValue, options) {\n let value = rawValue === undefined ? rawValue : this.transforms.reduce((prevValue, fn) => fn.call(this, prevValue, rawValue, this, options), rawValue);\n if (value === undefined) {\n value = this.getDefault(options);\n }\n return value;\n }\n _validate(_value, options = {}, panic, next) {\n let {\n path,\n originalValue = _value,\n strict = this.spec.strict\n } = options;\n let value = _value;\n if (!strict) {\n value = this._cast(value, Object.assign({\n assert: false\n }, options));\n }\n let initialTests = [];\n for (let test of Object.values(this.internalTests)) {\n if (test) initialTests.push(test);\n }\n this.runTests({\n path,\n value,\n originalValue,\n options,\n tests: initialTests\n }, panic, initialErrors => {\n // even if we aren't ending early we can't proceed further if the types aren't correct\n if (initialErrors.length) {\n return next(initialErrors, value);\n }\n this.runTests({\n path,\n value,\n originalValue,\n options,\n tests: this.tests\n }, panic, next);\n });\n }\n\n /**\n * Executes a set of validations, either schema, produced Tests or a nested\n * schema validate result.\n */\n runTests(runOptions, panic, next) {\n let fired = false;\n let {\n tests,\n value,\n originalValue,\n path,\n options\n } = runOptions;\n let panicOnce = arg => {\n if (fired) return;\n fired = true;\n panic(arg, value);\n };\n let nextOnce = arg => {\n if (fired) return;\n fired = true;\n next(arg, value);\n };\n let count = tests.length;\n let nestedErrors = [];\n if (!count) return nextOnce([]);\n let args = {\n value,\n originalValue,\n path,\n options,\n schema: this\n };\n for (let i = 0; i < tests.length; i++) {\n const test = tests[i];\n test(args, panicOnce, function finishTestRun(err) {\n if (err) {\n Array.isArray(err) ? nestedErrors.push(...err) : nestedErrors.push(err);\n }\n if (--count <= 0) {\n nextOnce(nestedErrors);\n }\n });\n }\n }\n asNestedTest({\n key,\n index,\n parent,\n parentPath,\n originalParent,\n options\n }) {\n const k = key != null ? key : index;\n if (k == null) {\n throw TypeError('Must include `key` or `index` for nested validations');\n }\n const isIndex = typeof k === 'number';\n let value = parent[k];\n const testOptions = Object.assign({}, options, {\n // Nested validations fields are always strict:\n // 1. parent isn't strict so the casting will also have cast inner values\n // 2. parent is strict in which case the nested values weren't cast either\n strict: true,\n parent,\n value,\n originalValue: originalParent[k],\n // FIXME: tests depend on `index` being passed around deeply,\n // we should not let the options.key/index bleed through\n key: undefined,\n // index: undefined,\n [isIndex ? 'index' : 'key']: k,\n path: isIndex || k.includes('.') ? `${parentPath || ''}[${isIndex ? k : `\"${k}\"`}]` : (parentPath ? `${parentPath}.` : '') + key\n });\n return (_, panic, next) => this.resolve(testOptions)._validate(value, testOptions, panic, next);\n }\n validate(value, options) {\n var _options$disableStack2;\n let schema = this.resolve(Object.assign({}, options, {\n value\n }));\n let disableStackTrace = (_options$disableStack2 = options == null ? void 0 : options.disableStackTrace) != null ? _options$disableStack2 : schema.spec.disableStackTrace;\n return new Promise((resolve, reject) => schema._validate(value, options, (error, parsed) => {\n if (ValidationError.isError(error)) error.value = parsed;\n reject(error);\n }, (errors, validated) => {\n if (errors.length) reject(new ValidationError(errors, validated, undefined, undefined, disableStackTrace));else resolve(validated);\n }));\n }\n validateSync(value, options) {\n var _options$disableStack3;\n let schema = this.resolve(Object.assign({}, options, {\n value\n }));\n let result;\n let disableStackTrace = (_options$disableStack3 = options == null ? void 0 : options.disableStackTrace) != null ? _options$disableStack3 : schema.spec.disableStackTrace;\n schema._validate(value, Object.assign({}, options, {\n sync: true\n }), (error, parsed) => {\n if (ValidationError.isError(error)) error.value = parsed;\n throw error;\n }, (errors, validated) => {\n if (errors.length) throw new ValidationError(errors, value, undefined, undefined, disableStackTrace);\n result = validated;\n });\n return result;\n }\n isValid(value, options) {\n return this.validate(value, options).then(() => true, err => {\n if (ValidationError.isError(err)) return false;\n throw err;\n });\n }\n isValidSync(value, options) {\n try {\n this.validateSync(value, options);\n return true;\n } catch (err) {\n if (ValidationError.isError(err)) return false;\n throw err;\n }\n }\n _getDefault(options) {\n let defaultValue = this.spec.default;\n if (defaultValue == null) {\n return defaultValue;\n }\n return typeof defaultValue === 'function' ? defaultValue.call(this, options) : clone(defaultValue);\n }\n getDefault(options\n // If schema is defaulted we know it's at least not undefined\n ) {\n let schema = this.resolve(options || {});\n return schema._getDefault(options);\n }\n default(def) {\n if (arguments.length === 0) {\n return this._getDefault();\n }\n let next = this.clone({\n default: def\n });\n return next;\n }\n strict(isStrict = true) {\n return this.clone({\n strict: isStrict\n });\n }\n nullability(nullable, message) {\n const next = this.clone({\n nullable\n });\n next.internalTests.nullable = createValidation({\n message,\n name: 'nullable',\n test(value) {\n return value === null ? this.schema.spec.nullable : true;\n }\n });\n return next;\n }\n optionality(optional, message) {\n const next = this.clone({\n optional\n });\n next.internalTests.optionality = createValidation({\n message,\n name: 'optionality',\n test(value) {\n return value === undefined ? this.schema.spec.optional : true;\n }\n });\n return next;\n }\n optional() {\n return this.optionality(true);\n }\n defined(message = mixed.defined) {\n return this.optionality(false, message);\n }\n nullable() {\n return this.nullability(true);\n }\n nonNullable(message = mixed.notNull) {\n return this.nullability(false, message);\n }\n required(message = mixed.required) {\n return this.clone().withMutation(next => next.nonNullable(message).defined(message));\n }\n notRequired() {\n return this.clone().withMutation(next => next.nullable().optional());\n }\n transform(fn) {\n let next = this.clone();\n next.transforms.push(fn);\n return next;\n }\n\n /**\n * Adds a test function to the schema's queue of tests.\n * tests can be exclusive or non-exclusive.\n *\n * - exclusive tests, will replace any existing tests of the same name.\n * - non-exclusive: can be stacked\n *\n * If a non-exclusive test is added to a schema with an exclusive test of the same name\n * the exclusive test is removed and further tests of the same name will be stacked.\n *\n * If an exclusive test is added to a schema with non-exclusive tests of the same name\n * the previous tests are removed and further tests of the same name will replace each other.\n */\n\n test(...args) {\n let opts;\n if (args.length === 1) {\n if (typeof args[0] === 'function') {\n opts = {\n test: args[0]\n };\n } else {\n opts = args[0];\n }\n } else if (args.length === 2) {\n opts = {\n name: args[0],\n test: args[1]\n };\n } else {\n opts = {\n name: args[0],\n message: args[1],\n test: args[2]\n };\n }\n if (opts.message === undefined) opts.message = mixed.default;\n if (typeof opts.test !== 'function') throw new TypeError('`test` is a required parameters');\n let next = this.clone();\n let validate = createValidation(opts);\n let isExclusive = opts.exclusive || opts.name && next.exclusiveTests[opts.name] === true;\n if (opts.exclusive) {\n if (!opts.name) throw new TypeError('Exclusive tests must provide a unique `name` identifying the test');\n }\n if (opts.name) next.exclusiveTests[opts.name] = !!opts.exclusive;\n next.tests = next.tests.filter(fn => {\n if (fn.OPTIONS.name === opts.name) {\n if (isExclusive) return false;\n if (fn.OPTIONS.test === validate.OPTIONS.test) return false;\n }\n return true;\n });\n next.tests.push(validate);\n return next;\n }\n when(keys, options) {\n if (!Array.isArray(keys) && typeof keys !== 'string') {\n options = keys;\n keys = '.';\n }\n let next = this.clone();\n let deps = toArray(keys).map(key => new Reference(key));\n deps.forEach(dep => {\n // @ts-ignore readonly array\n if (dep.isSibling) next.deps.push(dep.key);\n });\n next.conditions.push(typeof options === 'function' ? new Condition(deps, options) : Condition.fromOptions(deps, options));\n return next;\n }\n typeError(message) {\n let next = this.clone();\n next.internalTests.typeError = createValidation({\n message,\n name: 'typeError',\n skipAbsent: true,\n test(value) {\n if (!this.schema._typeCheck(value)) return this.createError({\n params: {\n type: this.schema.type\n }\n });\n return true;\n }\n });\n return next;\n }\n oneOf(enums, message = mixed.oneOf) {\n let next = this.clone();\n enums.forEach(val => {\n next._whitelist.add(val);\n next._blacklist.delete(val);\n });\n next.internalTests.whiteList = createValidation({\n message,\n name: 'oneOf',\n skipAbsent: true,\n test(value) {\n let valids = this.schema._whitelist;\n let resolved = valids.resolveAll(this.resolve);\n return resolved.includes(value) ? true : this.createError({\n params: {\n values: Array.from(valids).join(', '),\n resolved\n }\n });\n }\n });\n return next;\n }\n notOneOf(enums, message = mixed.notOneOf) {\n let next = this.clone();\n enums.forEach(val => {\n next._blacklist.add(val);\n next._whitelist.delete(val);\n });\n next.internalTests.blacklist = createValidation({\n message,\n name: 'notOneOf',\n test(value) {\n let invalids = this.schema._blacklist;\n let resolved = invalids.resolveAll(this.resolve);\n if (resolved.includes(value)) return this.createError({\n params: {\n values: Array.from(invalids).join(', '),\n resolved\n }\n });\n return true;\n }\n });\n return next;\n }\n strip(strip = true) {\n let next = this.clone();\n next.spec.strip = strip;\n return next;\n }\n\n /**\n * Return a serialized description of the schema including validations, flags, types etc.\n *\n * @param options Provide any needed context for resolving runtime schema alterations (lazy, when conditions, etc).\n */\n describe(options) {\n const next = (options ? this.resolve(options) : this).clone();\n const {\n label,\n meta,\n optional,\n nullable\n } = next.spec;\n const description = {\n meta,\n label,\n optional,\n nullable,\n default: next.getDefault(options),\n type: next.type,\n oneOf: next._whitelist.describe(),\n notOneOf: next._blacklist.describe(),\n tests: next.tests.filter((n, idx, list) => list.findIndex(c => c.OPTIONS.name === n.OPTIONS.name) === idx).map(fn => {\n const params = fn.OPTIONS.params && options ? resolveParams(Object.assign({}, fn.OPTIONS.params), options) : fn.OPTIONS.params;\n return {\n name: fn.OPTIONS.name,\n params\n };\n })\n };\n return description;\n }\n get ['~standard']() {\n const schema = this;\n const standard = {\n version: 1,\n vendor: 'yup',\n async validate(value) {\n try {\n const result = await schema.validate(value, {\n abortEarly: false\n });\n return {\n value: result\n };\n } catch (err) {\n if (err instanceof ValidationError) {\n return {\n issues: issuesFromValidationError(err)\n };\n }\n throw err;\n }\n }\n };\n return standard;\n }\n}\n// @ts-expect-error\nSchema.prototype.__isYupSchema__ = true;\nfor (const method of ['validate', 'validateSync']) Schema.prototype[`${method}At`] = function (path, value, options = {}) {\n const {\n parent,\n parentPath,\n schema\n } = getIn(this, path, value, options.context);\n return schema[method](parent && parent[parentPath], Object.assign({}, options, {\n parent,\n path\n }));\n};\nfor (const alias of ['equals', 'is']) Schema.prototype[alias] = Schema.prototype.oneOf;\nfor (const alias of ['not', 'nope']) Schema.prototype[alias] = Schema.prototype.notOneOf;\n\nconst returnsTrue = () => true;\nfunction create$8(spec) {\n return new MixedSchema(spec);\n}\nclass MixedSchema extends Schema {\n constructor(spec) {\n super(typeof spec === 'function' ? {\n type: 'mixed',\n check: spec\n } : Object.assign({\n type: 'mixed',\n check: returnsTrue\n }, spec));\n }\n}\ncreate$8.prototype = MixedSchema.prototype;\n\nfunction create$7() {\n return new BooleanSchema();\n}\nclass BooleanSchema extends Schema {\n constructor() {\n super({\n type: 'boolean',\n check(v) {\n if (v instanceof Boolean) v = v.valueOf();\n return typeof v === 'boolean';\n }\n });\n this.withMutation(() => {\n this.transform((value, _raw) => {\n if (this.spec.coerce && !this.isType(value)) {\n if (/^(true|1)$/i.test(String(value))) return true;\n if (/^(false|0)$/i.test(String(value))) return false;\n }\n return value;\n });\n });\n }\n isTrue(message = boolean.isValue) {\n return this.test({\n message,\n name: 'is-value',\n exclusive: true,\n params: {\n value: 'true'\n },\n test(value) {\n return isAbsent(value) || value === true;\n }\n });\n }\n isFalse(message = boolean.isValue) {\n return this.test({\n message,\n name: 'is-value',\n exclusive: true,\n params: {\n value: 'false'\n },\n test(value) {\n return isAbsent(value) || value === false;\n }\n });\n }\n default(def) {\n return super.default(def);\n }\n defined(msg) {\n return super.defined(msg);\n }\n optional() {\n return super.optional();\n }\n required(msg) {\n return super.required(msg);\n }\n notRequired() {\n return super.notRequired();\n }\n nullable() {\n return super.nullable();\n }\n nonNullable(msg) {\n return super.nonNullable(msg);\n }\n strip(v) {\n return super.strip(v);\n }\n}\ncreate$7.prototype = BooleanSchema.prototype;\n\n/**\n * This file is a modified version of the file from the following repository:\n * Date.parse with progressive enhancement for ISO 8601 <https://github.com/csnover/js-iso8601>\n * NON-CONFORMANT EDITION.\n * © 2011 Colin Snover <http://zetafleet.com>\n * Released under MIT license.\n */\n\n// prettier-ignore\n// 1 YYYY 2 MM 3 DD 4 HH 5 mm 6 ss 7 msec 8 Z 9 ± 10 tzHH 11 tzmm\nconst isoReg = /^(\\d{4}|[+-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,.](\\d{1,}))?)?(?:(Z)|([+-])(\\d{2})(?::?(\\d{2}))?)?)?$/;\nfunction parseIsoDate(date) {\n const struct = parseDateStruct(date);\n if (!struct) return Date.parse ? Date.parse(date) : Number.NaN;\n\n // timestamps without timezone identifiers should be considered local time\n if (struct.z === undefined && struct.plusMinus === undefined) {\n return new Date(struct.year, struct.month, struct.day, struct.hour, struct.minute, struct.second, struct.millisecond).valueOf();\n }\n let totalMinutesOffset = 0;\n if (struct.z !== 'Z' && struct.plusMinus !== undefined) {\n totalMinutesOffset = struct.hourOffset * 60 + struct.minuteOffset;\n if (struct.plusMinus === '+') totalMinutesOffset = 0 - totalMinutesOffset;\n }\n return Date.UTC(struct.year, struct.month, struct.day, struct.hour, struct.minute + totalMinutesOffset, struct.second, struct.millisecond);\n}\nfunction parseDateStruct(date) {\n var _regexResult$7$length, _regexResult$;\n const regexResult = isoReg.exec(date);\n if (!regexResult) return null;\n\n // use of toNumber() avoids NaN timestamps caused by “undefined”\n // values being passed to Date constructor\n return {\n year: toNumber(regexResult[1]),\n month: toNumber(regexResult[2], 1) - 1,\n day: toNumber(regexResult[3], 1),\n hour: toNumber(regexResult[4]),\n minute: toNumber(regexResult[5]),\n second: toNumber(regexResult[6]),\n millisecond: regexResult[7] ?\n // allow arbitrary sub-second precision beyond milliseconds\n toNumber(regexResult[7].substring(0, 3)) : 0,\n precision: (_regexResult$7$length = (_regexResult$ = regexResult[7]) == null ? void 0 : _regexResult$.length) != null ? _regexResult$7$length : undefined,\n z: regexResult[8] || undefined,\n plusMinus: regexResult[9] || undefined,\n hourOffset: toNumber(regexResult[10]),\n minuteOffset: toNumber(regexResult[11])\n };\n}\nfunction toNumber(str, defaultValue = 0) {\n return Number(str) || defaultValue;\n}\n\n// Taken from HTML spec: https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlet rEmail =\n// eslint-disable-next-line\n/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\nlet rUrl =\n// eslint-disable-next-line\n/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i;\n\n// eslint-disable-next-line\nlet rUUID = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\nlet yearMonthDay = '^\\\\d{4}-\\\\d{2}-\\\\d{2}';\nlet hourMinuteSecond = '\\\\d{2}:\\\\d{2}:\\\\d{2}';\nlet zOrOffset = '(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)';\nlet rIsoDateTime = new RegExp(`${yearMonthDay}T${hourMinuteSecond}(\\\\.\\\\d+)?${zOrOffset}$`);\nlet isTrimmed = value => isAbsent(value) || value === value.trim();\nlet objStringTag = {}.toString();\nfunction create$6() {\n return new StringSchema();\n}\nclass StringSchema extends Schema {\n constructor() {\n super({\n type: 'string',\n check(value) {\n if (value instanceof String) value = value.valueOf();\n return typeof value === 'string';\n }\n });\n this.withMutation(() => {\n this.transform((value, _raw) => {\n if (!this.spec.coerce || this.isType(value)) return value;\n\n // don't ever convert arrays\n if (Array.isArray(value)) return value;\n const strValue = value != null && value.toString ? value.toString() : value;\n\n // no one wants plain objects converted to [Object object]\n if (strValue === objStringTag) return value;\n return strValue;\n });\n });\n }\n required(message) {\n return super.required(message).withMutation(schema => schema.test({\n message: message || mixed.required,\n name: 'required',\n skipAbsent: true,\n test: value => !!value.length\n }));\n }\n notRequired() {\n return super.notRequired().withMutation(schema => {\n schema.tests = schema.tests.filter(t => t.OPTIONS.name !== 'required');\n return schema;\n });\n }\n length(length, message = string.length) {\n return this.test({\n message,\n name: 'length',\n exclusive: true,\n params: {\n length\n },\n skipAbsent: true,\n test(value) {\n return value.length === this.resolve(length);\n }\n });\n }\n min(min, message = string.min) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n skipAbsent: true,\n test(value) {\n return value.length >= this.resolve(min);\n }\n });\n }\n max(max, message = string.max) {\n return this.test({\n name: 'max',\n exclusive: true,\n message,\n params: {\n max\n },\n skipAbsent: true,\n test(value) {\n return value.length <= this.resolve(max);\n }\n });\n }\n matches(regex, options) {\n let excludeEmptyString = false;\n let message;\n let name;\n if (options) {\n if (typeof options === 'object') {\n ({\n excludeEmptyString = false,\n message,\n name\n } = options);\n } else {\n message = options;\n }\n }\n return this.test({\n name: name || 'matches',\n message: message || string.matches,\n params: {\n regex\n },\n skipAbsent: true,\n test: value => value === '' && excludeEmptyString || value.search(regex) !== -1\n });\n }\n email(message = string.email) {\n return this.matches(rEmail, {\n name: 'email',\n message,\n excludeEmptyString: true\n });\n }\n url(message = string.url) {\n return this.matches(rUrl, {\n name: 'url',\n message,\n excludeEmptyString: true\n });\n }\n uuid(message = string.uuid) {\n return this.matches(rUUID, {\n name: 'uuid',\n message,\n excludeEmptyString: false\n });\n }\n datetime(options) {\n let message = '';\n let allowOffset;\n let precision;\n if (options) {\n if (typeof options === 'object') {\n ({\n message = '',\n allowOffset = false,\n precision = undefined\n } = options);\n } else {\n message = options;\n }\n }\n return this.matches(rIsoDateTime, {\n name: 'datetime',\n message: message || string.datetime,\n excludeEmptyString: true\n }).test({\n name: 'datetime_offset',\n message: message || string.datetime_offset,\n params: {\n allowOffset\n },\n skipAbsent: true,\n test: value => {\n if (!value || allowOffset) return true;\n const struct = parseDateStruct(value);\n if (!struct) return false;\n return !!struct.z;\n }\n }).test({\n name: 'datetime_precision',\n message: message || string.datetime_precision,\n params: {\n precision\n },\n skipAbsent: true,\n test: value => {\n if (!value || precision == undefined) return true;\n const struct = parseDateStruct(value);\n if (!struct) return false;\n return struct.precision === precision;\n }\n });\n }\n\n //-- transforms --\n ensure() {\n return this.default('').transform(val => val === null ? '' : val);\n }\n trim(message = string.trim) {\n return this.transform(val => val != null ? val.trim() : val).test({\n message,\n name: 'trim',\n test: isTrimmed\n });\n }\n lowercase(message = string.lowercase) {\n return this.transform(value => !isAbsent(value) ? value.toLowerCase() : value).test({\n message,\n name: 'string_case',\n exclusive: true,\n skipAbsent: true,\n test: value => isAbsent(value) || value === value.toLowerCase()\n });\n }\n uppercase(message = string.uppercase) {\n return this.transform(value => !isAbsent(value) ? value.toUpperCase() : value).test({\n message,\n name: 'string_case',\n exclusive: true,\n skipAbsent: true,\n test: value => isAbsent(value) || value === value.toUpperCase()\n });\n }\n}\ncreate$6.prototype = StringSchema.prototype;\n\n//\n// String Interfaces\n//\n\nlet isNaN$1 = value => value != +value;\nfunction create$5() {\n return new NumberSchema();\n}\nclass NumberSchema extends Schema {\n constructor() {\n super({\n type: 'number',\n check(value) {\n if (value instanceof Number) value = value.valueOf();\n return typeof value === 'number' && !isNaN$1(value);\n }\n });\n this.withMutation(() => {\n this.transform((value, _raw) => {\n if (!this.spec.coerce) return value;\n let parsed = value;\n if (typeof parsed === 'string') {\n parsed = parsed.replace(/\\s/g, '');\n if (parsed === '') return NaN;\n // don't use parseFloat to avoid positives on alpha-numeric strings\n parsed = +parsed;\n }\n\n // null -> NaN isn't useful; treat all nulls as null and let it fail on\n // nullability check vs TypeErrors\n if (this.isType(parsed) || parsed === null) return parsed;\n return parseFloat(parsed);\n });\n });\n }\n min(min, message = number.min) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n skipAbsent: true,\n test(value) {\n return value >= this.resolve(min);\n }\n });\n }\n max(max, message = number.max) {\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n skipAbsent: true,\n test(value) {\n return value <= this.resolve(max);\n }\n });\n }\n lessThan(less, message = number.lessThan) {\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n less\n },\n skipAbsent: true,\n test(value) {\n return value < this.resolve(less);\n }\n });\n }\n moreThan(more, message = number.moreThan) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n more\n },\n skipAbsent: true,\n test(value) {\n return value > this.resolve(more);\n }\n });\n }\n positive(msg = number.positive) {\n return this.moreThan(0, msg);\n }\n negative(msg = number.negative) {\n return this.lessThan(0, msg);\n }\n integer(message = number.integer) {\n return this.test({\n name: 'integer',\n message,\n skipAbsent: true,\n test: val => Number.isInteger(val)\n });\n }\n truncate() {\n return this.transform(value => !isAbsent(value) ? value | 0 : value);\n }\n round(method) {\n var _method;\n let avail = ['ceil', 'floor', 'round', 'trunc'];\n method = ((_method = method) == null ? void 0 : _method.toLowerCase()) || 'round';\n\n // this exists for symemtry with the new Math.trunc\n if (method === 'trunc') return this.truncate();\n if (avail.indexOf(method.toLowerCase()) === -1) throw new TypeError('Only valid options for round() are: ' + avail.join(', '));\n return this.transform(value => !isAbsent(value) ? Math[method](value) : value);\n }\n}\ncreate$5.prototype = NumberSchema.prototype;\n\n//\n// Number Interfaces\n//\n\nlet invalidDate = new Date('');\nlet isDate = obj => Object.prototype.toString.call(obj) === '[object Date]';\nfunction create$4() {\n return new DateSchema();\n}\nclass DateSchema extends Schema {\n constructor() {\n super({\n type: 'date',\n check(v) {\n return isDate(v) && !isNaN(v.getTime());\n }\n });\n this.withMutation(() => {\n this.transform((value, _raw) => {\n // null -> InvalidDate isn't useful; treat all nulls as null and let it fail on\n // nullability check vs TypeErrors\n if (!this.spec.coerce || this.isType(value) || value === null) return value;\n value = parseIsoDate(value);\n\n // 0 is a valid timestamp equivalent to 1970-01-01T00:00:00Z(unix epoch) or before.\n return !isNaN(value) ? new Date(value) : DateSchema.INVALID_DATE;\n });\n });\n }\n prepareParam(ref, name) {\n let param;\n if (!Reference.isRef(ref)) {\n let cast = this.cast(ref);\n if (!this._typeCheck(cast)) throw new TypeError(`\\`${name}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);\n param = cast;\n } else {\n param = ref;\n }\n return param;\n }\n min(min, message = date.min) {\n let limit = this.prepareParam(min, 'min');\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n skipAbsent: true,\n test(value) {\n return value >= this.resolve(limit);\n }\n });\n }\n max(max, message = date.max) {\n let limit = this.prepareParam(max, 'max');\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n skipAbsent: true,\n test(value) {\n return value <= this.resolve(limit);\n }\n });\n }\n}\nDateSchema.INVALID_DATE = invalidDate;\ncreate$4.prototype = DateSchema.prototype;\ncreate$4.INVALID_DATE = invalidDate;\n\n// @ts-expect-error\nfunction sortFields(fields, excludedEdges = []) {\n let edges = [];\n let nodes = new Set();\n let excludes = new Set(excludedEdges.map(([a, b]) => `${a}-${b}`));\n function addNode(depPath, key) {\n let node = split(depPath)[0];\n nodes.add(node);\n if (!excludes.has(`${key}-${node}`)) edges.push([key, node]);\n }\n for (const key of Object.keys(fields)) {\n let value = fields[key];\n nodes.add(key);\n if (Reference.isRef(value) && value.isSibling) addNode(value.path, key);else if (isSchema(value) && 'deps' in value) value.deps.forEach(path => addNode(path, key));\n }\n return toposort.array(Array.from(nodes), edges).reverse();\n}\n\nfunction findIndex(arr, err) {\n let idx = Infinity;\n arr.some((key, ii) => {\n var _err$path;\n if ((_err$path = err.path) != null && _err$path.includes(key)) {\n idx = ii;\n return true;\n }\n });\n return idx;\n}\nfunction sortByKeyOrder(keys) {\n return (a, b) => {\n return findIndex(keys, a) - findIndex(keys, b);\n };\n}\n\nconst parseJson = (value, _, schema) => {\n if (typeof value !== 'string') {\n return value;\n }\n let parsed = value;\n try {\n parsed = JSON.parse(value);\n } catch (err) {\n /* */\n }\n return schema.isType(parsed) ? parsed : value;\n};\n\n// @ts-ignore\nfunction deepPartial(schema) {\n if ('fields' in schema) {\n const partial = {};\n for (const [key, fieldSchema] of Object.entries(schema.fields)) {\n partial[key] = deepPartial(fieldSchema);\n }\n return schema.setFields(partial);\n }\n if (schema.type === 'array') {\n const nextArray = schema.optional();\n if (nextArray.innerType) nextArray.innerType = deepPartial(nextArray.innerType);\n return nextArray;\n }\n if (schema.type === 'tuple') {\n return schema.optional().clone({\n types: schema.spec.types.map(deepPartial)\n });\n }\n if ('optional' in schema) {\n return schema.optional();\n }\n return schema;\n}\nconst deepHas = (obj, p) => {\n const path = [...normalizePath(p)];\n if (path.length === 1) return path[0] in obj;\n let last = path.pop();\n let parent = getter(join(path), true)(obj);\n return !!(parent && last in parent);\n};\nlet isObject = obj => Object.prototype.toString.call(obj) === '[object Object]';\nfunction unknown(ctx, value) {\n let known = Object.keys(ctx.fields);\n return Object.keys(value).filter(key => known.indexOf(key) === -1);\n}\nconst defaultSort = sortByKeyOrder([]);\nfunction create$3(spec) {\n return new ObjectSchema(spec);\n}\nclass ObjectSchema extends Schema {\n constructor(spec) {\n super({\n type: 'object',\n check(value) {\n return isObject(value) || typeof value === 'function';\n }\n });\n this.fields = Object.create(null);\n this._sortErrors = defaultSort;\n this._nodes = [];\n this._excludedEdges = [];\n this.withMutation(() => {\n if (spec) {\n this.shape(spec);\n }\n });\n }\n _cast(_value, options = {}) {\n var _options$stripUnknown;\n let value = super._cast(_value, options);\n\n //should ignore nulls here\n if (value === undefined) return this.getDefault(options);\n if (!this._typeCheck(value)) return value;\n let fields = this.fields;\n let strip = (_options$stripUnknown = options.stripUnknown) != null ? _options$stripUnknown : this.spec.noUnknown;\n let props = [].concat(this._nodes, Object.keys(value).filter(v => !this._nodes.includes(v)));\n let intermediateValue = {}; // is filled during the transform below\n let innerOptions = Object.assign({}, options, {\n parent: intermediateValue,\n __validating: options.__validating || false\n });\n let isChanged = false;\n for (const prop of props) {\n let field = fields[prop];\n let exists = (prop in value);\n let inputValue = value[prop];\n if (field) {\n let fieldValue;\n\n // safe to mutate since this is fired in sequence\n innerOptions.path = (options.path ? `${options.path}.` : '') + prop;\n field = field.resolve({\n value: inputValue,\n context: options.context,\n parent: intermediateValue\n });\n let fieldSpec = field instanceof Schema ? field.spec : undefined;\n let strict = fieldSpec == null ? void 0 : fieldSpec.strict;\n if (fieldSpec != null && fieldSpec.strip) {\n isChanged = isChanged || prop in value;\n continue;\n }\n fieldValue = !options.__validating || !strict ? field.cast(inputValue, innerOptions) : inputValue;\n if (fieldValue !== undefined) {\n intermediateValue[prop] = fieldValue;\n }\n } else if (exists && !strip) {\n intermediateValue[prop] = inputValue;\n }\n if (exists !== prop in intermediateValue || intermediateValue[prop] !== inputValue) {\n isChanged = true;\n }\n }\n return isChanged ? intermediateValue : value;\n }\n _validate(_value, options = {}, panic, next) {\n let {\n from = [],\n originalValue = _value,\n recursive = this.spec.recursive\n } = options;\n options.from = [{\n schema: this,\n value: originalValue\n }, ...from];\n // this flag is needed for handling `strict` correctly in the context of\n // validation vs just casting. e.g strict() on a field is only used when validating\n options.__validating = true;\n options.originalValue = originalValue;\n super._validate(_value, options, panic, (objectErrors, value) => {\n if (!recursive || !isObject(value)) {\n next(objectErrors, value);\n return;\n }\n originalValue = originalValue || value;\n let tests = [];\n for (let key of this._nodes) {\n let field = this.fields[key];\n if (!field || Reference.isRef(field)) {\n continue;\n }\n tests.push(field.asNestedTest({\n options,\n key,\n parent: value,\n parentPath: options.path,\n originalParent: originalValue\n }));\n }\n this.runTests({\n tests,\n value,\n originalValue,\n options\n }, panic, fieldErrors => {\n next(fieldErrors.sort(this._sortErrors).concat(objectErrors), value);\n });\n });\n }\n clone(spec) {\n const next = super.clone(spec);\n next.fields = Object.assign({}, this.fields);\n next._nodes = this._nodes;\n next._excludedEdges = this._excludedEdges;\n next._sortErrors = this._sortErrors;\n return next;\n }\n concat(schema) {\n let next = super.concat(schema);\n let nextFields = next.fields;\n for (let [field, schemaOrRef] of Object.entries(this.fields)) {\n const target = nextFields[field];\n nextFields[field] = target === undefined ? schemaOrRef : target;\n }\n return next.withMutation(s =>\n // XXX: excludes here is wrong\n s.setFields(nextFields, [...this._excludedEdges, ...schema._excludedEdges]));\n }\n _getDefault(options) {\n if ('default' in this.spec) {\n return super._getDefault(options);\n }\n\n // if there is no default set invent one\n if (!this._nodes.length) {\n return undefined;\n }\n let dft = {};\n this._nodes.forEach(key => {\n var _innerOptions;\n const field = this.fields[key];\n let innerOptions = options;\n if ((_innerOptions = innerOptions) != null && _innerOptions.value) {\n innerOptions = Object.assign({}, innerOptions, {\n parent: innerOptions.value,\n value: innerOptions.value[key]\n });\n }\n dft[key] = field && 'getDefault' in field ? field.getDefault(innerOptions) : undefined;\n });\n return dft;\n }\n setFields(shape, excludedEdges) {\n let next = this.clone();\n next.fields = shape;\n next._nodes = sortFields(shape, excludedEdges);\n next._sortErrors = sortByKeyOrder(Object.keys(shape));\n // XXX: this carries over edges which may not be what you want\n if (excludedEdges) next._excludedEdges = excludedEdges;\n return next;\n }\n shape(additions, excludes = []) {\n return this.clone().withMutation(next => {\n let edges = next._excludedEdges;\n if (excludes.length) {\n if (!Array.isArray(excludes[0])) excludes = [excludes];\n edges = [...next._excludedEdges, ...excludes];\n }\n\n // XXX: excludes here is wrong\n return next.setFields(Object.assign(next.fields, additions), edges);\n });\n }\n partial() {\n const partial = {};\n for (const [key, schema] of Object.entries(this.fields)) {\n partial[key] = 'optional' in schema && schema.optional instanceof Function ? schema.optional() : schema;\n }\n return this.setFields(partial);\n }\n deepPartial() {\n const next = deepPartial(this);\n return next;\n }\n pick(keys) {\n const picked = {};\n for (const key of keys) {\n if (this.fields[key]) picked[key] = this.fields[key];\n }\n return this.setFields(picked, this._excludedEdges.filter(([a, b]) => keys.includes(a) && keys.includes(b)));\n }\n omit(keys) {\n const remaining = [];\n for (const key of Object.keys(this.fields)) {\n if (keys.includes(key)) continue;\n remaining.push(key);\n }\n return this.pick(remaining);\n }\n from(from, to, alias) {\n let fromGetter = getter(from, true);\n return this.transform(obj => {\n if (!obj) return obj;\n let newObj = obj;\n if (deepHas(obj, from)) {\n newObj = Object.assign({}, obj);\n if (!alias) delete newObj[from];\n newObj[to] = fromGetter(obj);\n }\n return newObj;\n });\n }\n\n /** Parse an input JSON string to an object */\n json() {\n return this.transform(parseJson);\n }\n\n /**\n * Similar to `noUnknown` but only validates that an object is the right shape without stripping the unknown keys\n */\n exact(message) {\n return this.test({\n name: 'exact',\n exclusive: true,\n message: message || object.exact,\n test(value) {\n if (value == null) return true;\n const unknownKeys = unknown(this.schema, value);\n return unknownKeys.length === 0 || this.createError({\n params: {\n properties: unknownKeys.join(', ')\n }\n });\n }\n });\n }\n stripUnknown() {\n return this.clone({\n noUnknown: true\n });\n }\n noUnknown(noAllow = true, message = object.noUnknown) {\n if (typeof noAllow !== 'boolean') {\n message = noAllow;\n noAllow = true;\n }\n let next = this.test({\n name: 'noUnknown',\n exclusive: true,\n message: message,\n test(value) {\n if (value == null) return true;\n const unknownKeys = unknown(this.schema, value);\n return !noAllow || unknownKeys.length === 0 || this.createError({\n params: {\n unknown: unknownKeys.join(', ')\n }\n });\n }\n });\n next.spec.noUnknown = noAllow;\n return next;\n }\n unknown(allow = true, message = object.noUnknown) {\n return this.noUnknown(!allow, message);\n }\n transformKeys(fn) {\n return this.transform(obj => {\n if (!obj) return obj;\n const result = {};\n for (const key of Object.keys(obj)) result[fn(key)] = obj[key];\n return result;\n });\n }\n camelCase() {\n return this.transformKeys(camelCase);\n }\n snakeCase() {\n return this.transformKeys(snakeCase);\n }\n constantCase() {\n return this.transformKeys(key => snakeCase(key).toUpperCase());\n }\n describe(options) {\n const next = (options ? this.resolve(options) : this).clone();\n const base = super.describe(options);\n base.fields = {};\n for (const [key, value] of Object.entries(next.fields)) {\n var _innerOptions2;\n let innerOptions = options;\n if ((_innerOptions2 = innerOptions) != null && _innerOptions2.value) {\n innerOptions = Object.assign({}, innerOptions, {\n parent: innerOptions.value,\n value: innerOptions.value[key]\n });\n }\n base.fields[key] = value.describe(innerOptions);\n }\n return base;\n }\n}\ncreate$3.prototype = ObjectSchema.prototype;\n\nfunction create$2(type) {\n return new ArraySchema(type);\n}\nclass ArraySchema extends Schema {\n constructor(type) {\n super({\n type: 'array',\n spec: {\n types: type\n },\n check(v) {\n return Array.isArray(v);\n }\n });\n\n // `undefined` specifically means uninitialized, as opposed to \"no subtype\"\n this.innerType = void 0;\n this.innerType = type;\n }\n _cast(_value, _opts) {\n const value = super._cast(_value, _opts);\n\n // should ignore nulls here\n if (!this._typeCheck(value) || !this.innerType) {\n return value;\n }\n let isChanged = false;\n const castArray = value.map((v, idx) => {\n const castElement = this.innerType.cast(v, Object.assign({}, _opts, {\n path: `${_opts.path || ''}[${idx}]`,\n parent: value,\n originalValue: v,\n value: v,\n index: idx\n }));\n if (castElement !== v) {\n isChanged = true;\n }\n return castElement;\n });\n return isChanged ? castArray : value;\n }\n _validate(_value, options = {}, panic, next) {\n var _options$recursive;\n // let sync = options.sync;\n // let path = options.path;\n let innerType = this.innerType;\n // let endEarly = options.abortEarly ?? this.spec.abortEarly;\n let recursive = (_options$recursive = options.recursive) != null ? _options$recursive : this.spec.recursive;\n options.originalValue != null ? options.originalValue : _value;\n super._validate(_value, options, panic, (arrayErrors, value) => {\n var _options$originalValu2;\n if (!recursive || !innerType || !this._typeCheck(value)) {\n next(arrayErrors, value);\n return;\n }\n\n // #950 Ensure that sparse array empty slots are validated\n let tests = new Array(value.length);\n for (let index = 0; index < value.length; index++) {\n var _options$originalValu;\n tests[index] = innerType.asNestedTest({\n options,\n index,\n parent: value,\n parentPath: options.path,\n originalParent: (_options$originalValu = options.originalValue) != null ? _options$originalValu : _value\n });\n }\n this.runTests({\n value,\n tests,\n originalValue: (_options$originalValu2 = options.originalValue) != null ? _options$originalValu2 : _value,\n options\n }, panic, innerTypeErrors => next(innerTypeErrors.concat(arrayErrors), value));\n });\n }\n clone(spec) {\n const next = super.clone(spec);\n // @ts-expect-error readonly\n next.innerType = this.innerType;\n return next;\n }\n\n /** Parse an input JSON string to an object */\n json() {\n return this.transform(parseJson);\n }\n concat(schema) {\n let next = super.concat(schema);\n\n // @ts-expect-error readonly\n next.innerType = this.innerType;\n if (schema.innerType)\n // @ts-expect-error readonly\n next.innerType = next.innerType ?\n // @ts-expect-error Lazy doesn't have concat and will break\n next.innerType.concat(schema.innerType) : schema.innerType;\n return next;\n }\n of(schema) {\n // FIXME: this should return a new instance of array without the default to be\n let next = this.clone();\n if (!isSchema(schema)) throw new TypeError('`array.of()` sub-schema must be a valid yup schema not: ' + printValue(schema));\n\n // @ts-expect-error readonly\n next.innerType = schema;\n next.spec = Object.assign({}, next.spec, {\n types: schema\n });\n return next;\n }\n length(length, message = array.length) {\n return this.test({\n message,\n name: 'length',\n exclusive: true,\n params: {\n length\n },\n skipAbsent: true,\n test(value) {\n return value.length === this.resolve(length);\n }\n });\n }\n min(min, message) {\n message = message || array.min;\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n skipAbsent: true,\n // FIXME(ts): Array<typeof T>\n test(value) {\n return value.length >= this.resolve(min);\n }\n });\n }\n max(max, message) {\n message = message || array.max;\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n skipAbsent: true,\n test(value) {\n return value.length <= this.resolve(max);\n }\n });\n }\n ensure() {\n return this.default(() => []).transform((val, original) => {\n // We don't want to return `null` for nullable schema\n if (this._typeCheck(val)) return val;\n return original == null ? [] : [].concat(original);\n });\n }\n compact(rejector) {\n let reject = !rejector ? v => !!v : (v, i, a) => !rejector(v, i, a);\n return this.transform(values => values != null ? values.filter(reject) : values);\n }\n describe(options) {\n const next = (options ? this.resolve(options) : this).clone();\n const base = super.describe(options);\n if (next.innerType) {\n var _innerOptions;\n let innerOptions = options;\n if ((_innerOptions = innerOptions) != null && _innerOptions.value) {\n innerOptions = Object.assign({}, innerOptions, {\n parent: innerOptions.value,\n value: innerOptions.value[0]\n });\n }\n base.innerType = next.innerType.describe(innerOptions);\n }\n return base;\n }\n}\ncreate$2.prototype = ArraySchema.prototype;\n\n// @ts-ignore\nfunction create$1(schemas) {\n return new TupleSchema(schemas);\n}\nclass TupleSchema extends Schema {\n constructor(schemas) {\n super({\n type: 'tuple',\n spec: {\n types: schemas\n },\n check(v) {\n const types = this.spec.types;\n return Array.isArray(v) && v.length === types.length;\n }\n });\n this.withMutation(() => {\n this.typeError(tuple.notType);\n });\n }\n _cast(inputValue, options) {\n const {\n types\n } = this.spec;\n const value = super._cast(inputValue, options);\n if (!this._typeCheck(value)) {\n return value;\n }\n let isChanged = false;\n const castArray = types.map((type, idx) => {\n const castElement = type.cast(value[idx], Object.assign({}, options, {\n path: `${options.path || ''}[${idx}]`,\n parent: value,\n originalValue: value[idx],\n value: value[idx],\n index: idx\n }));\n if (castElement !== value[idx]) isChanged = true;\n return castElement;\n });\n return isChanged ? castArray : value;\n }\n _validate(_value, options = {}, panic, next) {\n let itemTypes = this.spec.types;\n super._validate(_value, options, panic, (tupleErrors, value) => {\n var _options$originalValu2;\n // intentionally not respecting recursive\n if (!this._typeCheck(value)) {\n next(tupleErrors, value);\n return;\n }\n let tests = [];\n for (let [index, itemSchema] of itemTypes.entries()) {\n var _options$originalValu;\n tests[index] = itemSchema.asNestedTest({\n options,\n index,\n parent: value,\n parentPath: options.path,\n originalParent: (_options$originalValu = options.originalValue) != null ? _options$originalValu : _value\n });\n }\n this.runTests({\n value,\n tests,\n originalValue: (_options$originalValu2 = options.originalValue) != null ? _options$originalValu2 : _value,\n options\n }, panic, innerTypeErrors => next(innerTypeErrors.concat(tupleErrors), value));\n });\n }\n describe(options) {\n const next = (options ? this.resolve(options) : this).clone();\n const base = super.describe(options);\n base.innerType = next.spec.types.map((schema, index) => {\n var _innerOptions;\n let innerOptions = options;\n if ((_innerOptions = innerOptions) != null && _innerOptions.value) {\n innerOptions = Object.assign({}, innerOptions, {\n parent: innerOptions.value,\n value: innerOptions.value[index]\n });\n }\n return schema.describe(innerOptions);\n });\n return base;\n }\n}\ncreate$1.prototype = TupleSchema.prototype;\n\nfunction create(builder) {\n return new Lazy(builder);\n}\nfunction catchValidationError(fn) {\n try {\n return fn();\n } catch (err) {\n if (ValidationError.isError(err)) return Promise.reject(err);\n throw err;\n }\n}\nclass Lazy {\n constructor(builder) {\n this.type = 'lazy';\n this.__isYupSchema__ = true;\n this.spec = void 0;\n this._resolve = (value, options = {}) => {\n let schema = this.builder(value, options);\n if (!isSchema(schema)) throw new TypeError('lazy() functions must return a valid schema');\n if (this.spec.optional) schema = schema.optional();\n return schema.resolve(options);\n };\n this.builder = builder;\n this.spec = {\n meta: undefined,\n optional: false\n };\n }\n clone(spec) {\n const next = new Lazy(this.builder);\n next.spec = Object.assign({}, this.spec, spec);\n return next;\n }\n optionality(optional) {\n const next = this.clone({\n optional\n });\n return next;\n }\n optional() {\n return this.optionality(true);\n }\n resolve(options) {\n return this._resolve(options.value, options);\n }\n cast(value, options) {\n return this._resolve(value, options).cast(value, options);\n }\n asNestedTest(config) {\n let {\n key,\n index,\n parent,\n options\n } = config;\n let value = parent[index != null ? index : key];\n return this._resolve(value, Object.assign({}, options, {\n value,\n parent\n })).asNestedTest(config);\n }\n validate(value, options) {\n return catchValidationError(() => this._resolve(value, options).validate(value, options));\n }\n validateSync(value, options) {\n return this._resolve(value, options).validateSync(value, options);\n }\n validateAt(path, value, options) {\n return catchValidationError(() => this._resolve(value, options).validateAt(path, value, options));\n }\n validateSyncAt(path, value, options) {\n return this._resolve(value, options).validateSyncAt(path, value, options);\n }\n isValid(value, options) {\n try {\n return this._resolve(value, options).isValid(value, options);\n } catch (err) {\n if (ValidationError.isError(err)) {\n return Promise.resolve(false);\n }\n throw err;\n }\n }\n isValidSync(value, options) {\n return this._resolve(value, options).isValidSync(value, options);\n }\n describe(options) {\n return options ? this.resolve(options).describe(options) : {\n type: 'lazy',\n meta: this.spec.meta,\n label: undefined\n };\n }\n meta(...args) {\n if (args.length === 0) return this.spec.meta;\n let next = this.clone();\n next.spec.meta = Object.assign(next.spec.meta || {}, args[0]);\n return next;\n }\n get ['~standard']() {\n const schema = this;\n const standard = {\n version: 1,\n vendor: 'yup',\n async validate(value) {\n try {\n const result = await schema.validate(value, {\n abortEarly: false\n });\n return {\n value: result\n };\n } catch (err) {\n if (ValidationError.isError(err)) {\n return {\n issues: issuesFromValidationError(err)\n };\n }\n throw err;\n }\n }\n };\n return standard;\n }\n}\n\nfunction setLocale(custom) {\n Object.keys(custom).forEach(type => {\n // @ts-ignore\n Object.keys(custom[type]).forEach(method => {\n // @ts-ignore\n locale[type][method] = custom[type][method];\n });\n });\n}\n\nfunction addMethod(schemaType, name, fn) {\n if (!schemaType || !isSchema(schemaType.prototype)) throw new TypeError('You must provide a yup schema constructor function');\n if (typeof name !== 'string') throw new TypeError('A Method name must be provided');\n if (typeof fn !== 'function') throw new TypeError('Method function must be provided');\n schemaType.prototype[name] = fn;\n}\n\nexport { ArraySchema, BooleanSchema, DateSchema, Lazy as LazySchema, MixedSchema, NumberSchema, ObjectSchema, Schema, StringSchema, TupleSchema, ValidationError, addMethod, create$2 as array, create$7 as bool, create$7 as boolean, create$4 as date, locale as defaultLocale, getIn, isSchema, create as lazy, create$8 as mixed, create$5 as number, create$3 as object, printValue, reach, create$9 as ref, setLocale, create$6 as string, create$1 as tuple };\n","import type { AnySchema } from 'yup';\n\n// ─── Field Descriptor ────────────────────────────────────────────────────────\n\nexport type FieldType =\n | 'text'\n | 'textarea'\n | 'number'\n | 'toggle'\n | 'radio-group'\n | 'select'\n | 'descriptive-select'\n | 'key-value'\n | 'array'\n | 'object'\n | 'reference'\n | 'cron'\n | 'schema';\n\nexport interface FieldTransform {\n in?: (value: unknown) => unknown;\n out?: (value: unknown) => unknown;\n}\n\n/** One column in a per-field condition row */\nexport interface ConditionFieldDef {\n /** Key used to store this column's value in ConditionEntry */\n id: string;\n /**\n * 'select' — native <select> with user-supplied options\n * 'operator' — native <select> pre-filled with the standard operator list (no options needed)\n * 'text' — plain <input>\n * any other string — falls back to <input>\n */\n type: 'select' | 'operator' | 'text' | string;\n colSpan?: number;\n label?: string;\n placeholder?: string;\n /** Options for select columns — user defines these, renderer just renders them */\n options?: Array<{ value: string; label: string }>;\n /**\n * Declarative dynamic options — same shape as `FieldDescriptor.optionsSource`.\n * `dependsOn` resolves against the OUTER form values (not the condition entry),\n * so a condition column can depend on another top-level field (e.g. attributes\n * scoped by `applicationUuid`).\n */\n optionsSource?: OptionsSource;\n /** When true, renders a FormulaInput chip editor instead of a plain <input> */\n formula?: boolean;\n}\n\n/** Condition definition attached to a FieldDescriptor */\nexport interface FieldConditionDef {\n fields: ConditionFieldDef[];\n /** Enables nested condition groups. Defaults to false. */\n allowGroups?: boolean;\n /** Optional depth limit for nested groups when allowGroups is true. */\n maxGroupDepth?: number;\n}\n\n// ─── Dynamic options (industry-standard resolver pattern) ───────────────────\n//\n// Declarative reference to a host-registered resolver. The package is\n// transport-agnostic — the host decides whether the resolver uses axios,\n// fetch, GraphQL, a local cache, or anything else. Matches the convergent\n// pattern across n8n / Zapier / Pipedream / Workato.\n//\n// Example field:\n// { id: 'groupIds', type: 'select', isMulti: true,\n// optionsSource: {\n// id: 'app:groups',\n// dependsOn: { appId: 'applicationUuid' }\n// } }\n//\n// Host wires it once:\n// <FlowForgeCanvas optionsResolvers={{\n// 'app:groups': async ({ appId }, { cursor=0 }) => {\n// const res = await api.get(`/groups?startIndex=${cursor}&count=50`);\n// return { options: res.data.map(g => ({ value: g.uuid, label: g.name })),\n// nextCursor: res.data.length === 50 ? cursor + 50 : undefined };\n// }\n// }} />\n\n/** Args passed to a resolver per call — cursor for pagination, input for typeahead. */\nexport interface OptionsResolverContext {\n cursor?: unknown;\n input?: string;\n /** Full top-level form values, in case a resolver needs read-only access. */\n values?: Record<string, unknown>;\n /** AbortSignal — resolvers SHOULD honor this when their transport supports it. */\n signal?: AbortSignal;\n}\n\n/** Resolver return shape — matches Pipedream's `options` contract. */\nexport interface OptionsResolverResult {\n options: Array<{ value: unknown; label: string; isDisabled?: boolean; [key: string]: unknown }>;\n /** Opaque cursor returned to the next call. Omit to signal \"no more pages\". */\n nextCursor?: unknown;\n}\n\n/** A resolver function — transport-agnostic. */\nexport type OptionsResolver = (\n deps: Record<string, unknown>,\n ctx: OptionsResolverContext\n) => Promise<OptionsResolverResult>;\n\n/**\n * Map of named resolvers — the host registers these once on the canvas / form.\n * Keys are the `optionsSource.id` strings referenced by field descriptors.\n */\nexport type OptionsResolvers = Record<string, OptionsResolver>;\n\nexport interface OptionsSource {\n /** Resolver id — must match a key in the host's `optionsResolvers` map. */\n id: string;\n /**\n * Other field values this resolver depends on. Two shapes accepted:\n * - `string[]` — pass through verbatim ({ fieldA: values.fieldA, ... })\n * - `Record<arg, fieldName>` — rename parent values for the resolver\n *\n * When any dep value changes, the cache key for this field invalidates\n * and the resolver re-fires.\n */\n dependsOn?: string[] | Record<string, string>;\n /**\n * Static params merged into the deps object for every call. Use for\n * \"URL template via the generic resolver\" style:\n * { id: 'default', params: { url: '/groups', valueKey: 'uuid' } }\n */\n params?: Record<string, unknown>;\n /**\n * Lookup individual options by value (edit-mode hydration). When set,\n * the field calls this resolver with `{ ids: [...] }` to render labels\n * for already-selected values that aren't in the current page.\n */\n resolveValueId?: string;\n}\n\nexport interface FieldDescriptor {\n /**\n * The formik key for this field.\n * Use `id` (preferred) or `name` — both are accepted.\n * `id` takes precedence if both are provided.\n */\n id?: string;\n name?: string;\n type: FieldType | string;\n /** Child field descriptors — used by type: 'object' to render a nested group. */\n children?: FieldDescriptor[];\n /** Optional per-field condition guard — renders a condition row below this field. */\n condition?: FieldConditionDef;\n label?: string;\n placeholder?: string;\n required?: boolean;\n showOptional?: boolean;\n disabled?: boolean | ((ctx: FieldContext) => boolean);\n hidden?: boolean;\n colSpan?: number;\n dividerAfter?: boolean;\n info?: string;\n helperText?: string;\n dataTestId?: string;\n validation?: AnySchema;\n shouldHide?: (ctx: FieldContext) => boolean;\n shouldDisable?: (ctx: FieldContext) => boolean;\n shouldRequire?: (ctx: FieldContext) => boolean;\n /**\n * When true, the field's value is auto-cleared (reset to `defaultValue`,\n * or removed if no default) any time `shouldHide` evaluates to true —\n * including on mount when the saved data has orphan values from a prior\n * configuration. Default: false (values persist while hidden, preserving\n * legacy behavior).\n *\n * Use this on conditional fields where stale data would corrupt the\n * payload (e.g. `template` should be empty when `valueSource !== 'template'`).\n */\n clearOnHide?: boolean;\n defaultValue?: unknown;\n compute?: (ctx: FieldContext) => unknown;\n transform?: FieldTransform;\n onChange?: (\n value: unknown,\n ctx: FieldContext & { setFieldValue: (name: string, value: unknown) => void }\n ) => void;\n /**\n * Declarative dynamic options. The renderer translates this into a paged,\n * cached, abortable async loader via the host's resolver registry.\n * Mutually compatible with static `options`: static wins if both set.\n */\n optionsSource?: OptionsSource;\n [key: string]: unknown;\n}\n\n/** Resolve the formik key from a field descriptor — id takes precedence over name */\nexport function resolveFieldKey(field: FieldDescriptor): string {\n const key = field.id ?? field.name;\n if (!key) throw new Error(`[FlowForge] Field descriptor is missing both 'id' and 'name'`);\n return key;\n}\n\nexport interface FieldContext {\n /** Full top-level form values (always). */\n values: Record<string, unknown>;\n /**\n * Item-scoped values for a field rendered INSIDE an array item.\n * Lets `shouldHide` / `shouldDisable` / `shouldRequire` / `compute` see\n * sibling-in-same-row fields without having to splice paths manually:\n *\n * { id: 'template', shouldHide: ({ item }) => item?.valueSource !== 'template' }\n *\n * `undefined` when the field is NOT inside an array item (i.e. top-level\n * fields and fields inside plain `type: 'object'` children at top level).\n * Nested arrays update `item` to the immediate parent row's values.\n */\n item?: Record<string, unknown>;\n}\n\n// ─── Form Schema ─────────────────────────────────────────────────────────────\n\nexport type FormLayout = 'flat' | 'stepper' | 'tabs' | 'sections';\n\nexport interface FormStep {\n label: string;\n hint?: string;\n fields: FieldDescriptor[];\n}\n\nexport interface FormSchema {\n layout?: FormLayout;\n /**\n * Removes the bottom margin on every field.\n * Use for filter bars and inline forms where fields sit in a tight horizontal row.\n */\n compact?: boolean;\n fields?: FieldDescriptor[];\n steps?: FormStep[];\n}\n","import type { TablePickerOption } from '../FlowForm/fields/TablePickerField';\n\nexport interface DataSourceFetchResult {\n options: TablePickerOption[];\n hasNextPage: boolean;\n nextPage?: number;\n}\n\nexport interface DataSourceDefinition {\n fetch: (query: string, page: number) => Promise<DataSourceFetchResult>;\n}\n\nclass DataSourceRegistry {\n private sources = new Map<string, DataSourceDefinition>();\n\n register(key: string, definition: DataSourceDefinition): void {\n this.sources.set(key, definition);\n }\n\n get(key: string): DataSourceDefinition | undefined {\n return this.sources.get(key);\n }\n\n has(key: string): boolean {\n return this.sources.has(key);\n }\n}\n\nexport const dataSourceRegistry = new DataSourceRegistry();\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { FF, errorTextStyle, helperTextStyle } from '../fieldTokens';\nimport { MdClose, MdSearch } from 'react-icons/md';\n\nimport type { FieldDescriptor } from '../types';\nimport type { FieldComponentProps } from '../DynamicFormRenderer/fieldRegistry';\nimport { FieldLabel } from './FieldLabel';\nimport { dataSourceRegistry } from '../../dataSourceRegistry';\n\nconst DEFAULT_PAGE_SIZE = 8;\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface TablePickerOption {\n value: string;\n label: string;\n [key: string]: unknown;\n}\n\ninterface FetchResult {\n options: TablePickerOption[];\n hasNextPage: boolean;\n nextPage?: number;\n}\n\nexport interface TablePickerFieldDescriptor extends FieldDescriptor {\n columns: Array<{ key: string; label: string; width?: number }>;\n fetchOptions?: (query: string, page: number) => Promise<FetchResult>;\n dataSource?: string;\n isMulti?: boolean;\n pageSize?: number;\n}\n\n// ─── Styles ───────────────────────────────────────────────────────────────────\n\nconst S = {\n wrapper: (hasError: boolean): React.CSSProperties => ({\n border: `1px solid ${hasError ? FF.BORDER_COLOR_ERROR : FF.BORDER_COLOR}`,\n borderRadius: FF.BORDER_RADIUS,\n overflow: 'hidden',\n background: '#fff',\n fontSize: 13,\n }),\n toolbar: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '6px 12px',\n borderBottom: '1px solid #e0e0e0',\n minHeight: 40,\n background: '#fff',\n },\n selectedLink: {\n fontSize: 13,\n color: '#1976d2',\n cursor: 'pointer',\n background: 'none',\n border: 'none',\n padding: 0,\n fontWeight: 500,\n },\n searchWrap: {\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n border: '1px solid #e0e0e0',\n borderRadius: 4,\n padding: '3px 8px',\n background: '#fafafa',\n flex: '0 0 220px',\n },\n searchInput: {\n border: 'none',\n outline: 'none',\n fontSize: 13,\n background: 'transparent',\n width: '100%',\n },\n table: {\n width: '100%',\n borderCollapse: 'collapse' as const,\n },\n thead: {\n background: '#f5f5f5',\n },\n th: (width?: number): React.CSSProperties => ({\n textAlign: 'left',\n padding: '0 16px',\n height: 44,\n fontSize: 12,\n fontWeight: 600,\n color: 'rgba(0,0,0,0.6)',\n borderBottom: '1px solid #e0e0e0',\n whiteSpace: 'nowrap',\n width: width,\n letterSpacing: '0.01em',\n }),\n checkTh: {\n width: 48,\n padding: '0 0 0 12px',\n height: 44,\n borderBottom: '1px solid #e0e0e0',\n background: '#f5f5f5',\n } as React.CSSProperties,\n td: {\n padding: '0 16px',\n height: 48,\n borderBottom: '1px solid #f0f0f0',\n color: 'rgba(0,0,0,0.87)',\n verticalAlign: 'middle',\n } as React.CSSProperties,\n checkTd: {\n padding: '0 0 0 12px',\n height: 48,\n borderBottom: '1px solid #f0f0f0',\n verticalAlign: 'middle',\n width: 48,\n } as React.CSSProperties,\n statusRow: {\n textAlign: 'center',\n padding: '24px 16px',\n color: 'rgba(0,0,0,0.38)',\n fontSize: 13,\n } as React.CSSProperties,\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: 16,\n padding: '4px 8px',\n borderTop: '1px solid #e0e0e0',\n fontSize: 12,\n color: 'rgba(0,0,0,0.6)',\n background: '#fafafa',\n minHeight: 40,\n } as React.CSSProperties,\n pageBtn: (disabled: boolean): React.CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n borderRadius: '50%',\n border: 'none',\n background: disabled ? 'transparent' : 'transparent',\n cursor: disabled ? 'default' : 'pointer',\n color: disabled ? 'rgba(0,0,0,0.26)' : 'rgba(0,0,0,0.54)',\n fontSize: 16,\n transition: 'background 0.15s',\n }),\n // Modal\n overlay: {\n position: 'fixed',\n inset: 0,\n background: 'rgba(0,0,0,0.5)',\n zIndex: 9999,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n } as React.CSSProperties,\n modal: {\n background: '#fff',\n borderRadius: 8,\n width: 560,\n maxWidth: '90vw',\n maxHeight: '80vh',\n display: 'flex',\n flexDirection: 'column',\n boxShadow: '0 8px 32px rgba(0,0,0,0.18)',\n } as React.CSSProperties,\n modalHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px 20px',\n borderBottom: '1px solid #e0e0e0',\n fontSize: 16,\n fontWeight: 600,\n color: 'rgba(0,0,0,0.87)',\n } as React.CSSProperties,\n modalCloseBtn: {\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: 'rgba(0,0,0,0.54)',\n display: 'flex',\n alignItems: 'center',\n padding: 4,\n borderRadius: 4,\n } as React.CSSProperties,\n modalSearch: {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n margin: '12px 20px',\n border: '1px solid #e0e0e0',\n borderRadius: 20,\n padding: '6px 12px',\n background: '#fafafa',\n } as React.CSSProperties,\n modalSearchInput: {\n flex: 1,\n border: 'none',\n outline: 'none',\n fontSize: 14,\n background: 'transparent',\n } as React.CSSProperties,\n modalList: {\n flex: 1,\n overflowY: 'auto',\n padding: '0 20px 8px',\n } as React.CSSProperties,\n modalRow: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '10px 0',\n borderBottom: '1px solid #f0f0f0',\n fontSize: 14,\n color: 'rgba(0,0,0,0.87)',\n } as React.CSSProperties,\n modalRemoveBtn: {\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: '#e53935',\n display: 'flex',\n alignItems: 'center',\n padding: 2,\n borderRadius: 4,\n flexShrink: 0,\n } as React.CSSProperties,\n modalFooter: {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: '12px 20px',\n borderTop: '1px solid #e0e0e0',\n } as React.CSSProperties,\n closeBtn: {\n padding: '6px 20px',\n border: '1px solid #e0e0e0',\n borderRadius: 4,\n background: '#fff',\n cursor: 'pointer',\n fontSize: 14,\n color: 'rgba(0,0,0,0.87)',\n } as React.CSSProperties,\n};\n\n// ─── Checkbox styled to match MUI ────────────────────────────────────────────\n\nfunction MuiCheckbox({ checked, onChange, indeterminate, disabled }: {\n checked: boolean;\n onChange: () => void;\n indeterminate?: boolean;\n disabled?: boolean;\n}) {\n const ref = useRef<HTMLInputElement>(null);\n useEffect(() => {\n if (ref.current) ref.current.indeterminate = !!indeterminate;\n }, [indeterminate]);\n\n return (\n <input\n ref={ref}\n type=\"checkbox\"\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n style={{\n width: 16, height: 16, cursor: disabled ? 'default' : 'pointer',\n accentColor: '#1976d2',\n }}\n />\n );\n}\n\n// ─── Selected Items Modal ─────────────────────────────────────────────────────\n\nfunction SelectedModal({ selected, onRemove, onClose }: {\n selected: TablePickerOption[];\n onRemove: (value: string) => void;\n onClose: () => void;\n}) {\n const [search, setSearch] = useState('');\n const filtered = selected.filter((s) =>\n s.label.toLowerCase().includes(search.toLowerCase()),\n );\n\n return (\n <div style={S.overlay} onClick={onClose}>\n <div style={S.modal} onClick={(e) => e.stopPropagation()}>\n <div style={S.modalHeader}>\n <span>Selected Rows</span>\n <button type=\"button\" style={S.modalCloseBtn} onClick={onClose}>\n <MdClose size={20} />\n </button>\n </div>\n\n <div style={S.modalSearch}>\n <MdSearch size={18} color=\"rgba(0,0,0,0.38)\" />\n <input\n autoFocus\n type=\"text\"\n placeholder=\"Search\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n style={S.modalSearchInput}\n />\n </div>\n\n <div style={S.modalList}>\n {filtered.length === 0 && (\n <div style={{ textAlign: 'center', padding: '24px 0', color: 'rgba(0,0,0,0.38)', fontSize: 13 }}>\n No items found\n </div>\n )}\n {filtered.map((opt) => (\n <div key={opt.value} style={S.modalRow}>\n <span>{opt.label}</span>\n <button\n type=\"button\"\n style={S.modalRemoveBtn}\n onClick={() => onRemove(opt.value)}\n title=\"Remove\"\n >\n <MdClose size={16} />\n </button>\n </div>\n ))}\n </div>\n\n <div style={S.modalFooter}>\n <button type=\"button\" style={S.closeBtn} onClick={onClose}>Close</button>\n </div>\n </div>\n </div>\n );\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport function TablePickerField({ field: rawField, value, onChange, onBlur, error, touched }: FieldComponentProps) {\n const field = rawField as TablePickerFieldDescriptor;\n const showError = !!(touched && error);\n const isMulti = field.isMulti ?? false;\n const pageSize = field.pageSize ?? DEFAULT_PAGE_SIZE;\n const fieldId = field.id ?? field.name ?? '';\n\n const [query, setQuery] = useState('');\n const [page, setPage] = useState(1);\n const [rows, setRows] = useState<TablePickerOption[]>([]);\n const [hasNextPage, setHasNextPage] = useState(false);\n const [loading, setLoading] = useState(false);\n const [hoveredRow, setHoveredRow] = useState<string | null>(null);\n const [modalOpen, setModalOpen] = useState(false);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n // Monotonic request id — only the most recent response is allowed to write\n // to state. Prevents out-of-order resolves when typing fast.\n const requestIdRef = useRef(0);\n const mountedRef = useRef(true);\n useEffect(() => () => {\n mountedRef.current = false;\n if (debounceRef.current) clearTimeout(debounceRef.current);\n }, []);\n\n const selectedList: TablePickerOption[] = isMulti\n ? (Array.isArray(value) ? (value as TablePickerOption[]) : [])\n : value ? [(value as TablePickerOption)] : [];\n\n const selectedCount = selectedList.length;\n\n const resolveFetch = useCallback(\n (q: string, p: number): Promise<FetchResult> => {\n if (field.fetchOptions) return field.fetchOptions(q, p);\n if (field.dataSource) {\n const source = dataSourceRegistry.get(field.dataSource);\n if (source) return source.fetch(q, p);\n return Promise.reject(new Error(`[FlowForge] DataSource \"${field.dataSource}\" is not registered.`));\n }\n return Promise.reject(new Error(`[FlowForge] table-picker \"${field.id}\" requires fetchOptions or dataSource.`));\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [field.fetchOptions, field.dataSource, field.id],\n );\n\n const load = useCallback(\n (q: string, p: number) => {\n const reqId = ++requestIdRef.current;\n setLoading(true);\n resolveFetch(q, p)\n .then((result) => {\n if (!mountedRef.current || reqId !== requestIdRef.current) return;\n setRows(result.options.slice(0, pageSize));\n setHasNextPage(result.hasNextPage);\n })\n .catch(() => {\n if (!mountedRef.current || reqId !== requestIdRef.current) return;\n setRows([]); setHasNextPage(false);\n })\n .finally(() => {\n if (!mountedRef.current || reqId !== requestIdRef.current) return;\n setLoading(false);\n });\n },\n [resolveFetch, pageSize],\n );\n\n useEffect(() => {\n load('', 1);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleQueryChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const q = e.target.value;\n setQuery(q);\n setPage(1);\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => load(q, 1), 300);\n };\n\n const handleRowClick = (option: TablePickerOption) => {\n if (isMulti) {\n const current = Array.isArray(value) ? (value as TablePickerOption[]) : [];\n const already = current.some((v) => v.value === option.value);\n onChange(already ? current.filter((v) => v.value !== option.value) : [...current, option]);\n } else {\n onChange((value as TablePickerOption)?.value === option.value ? null : option);\n }\n onBlur?.();\n };\n\n const handleSelectAll = () => {\n if (!isMulti) return;\n const current = Array.isArray(value) ? (value as TablePickerOption[]) : [];\n const allSelected = rows.every((r) => current.some((v) => v.value === r.value));\n if (allSelected) {\n onChange(current.filter((v) => !rows.some((r) => r.value === v.value)));\n } else {\n const toAdd = rows.filter((r) => !current.some((v) => v.value === r.value));\n onChange([...current, ...toAdd]);\n }\n };\n\n const handleRemoveFromModal = (val: string) => {\n if (isMulti) {\n const current = Array.isArray(value) ? (value as TablePickerOption[]) : [];\n const next = current.filter((v) => v.value !== val);\n onChange(next);\n if (next.length === 0) setModalOpen(false);\n } else {\n onChange(null);\n setModalOpen(false);\n }\n onBlur?.();\n };\n\n const colCount = field.columns.length + 1;\n\n const allPageSelected = rows.length > 0 && rows.every((r) =>\n selectedList.some((v) => v.value === r.value),\n );\n const somePageSelected = rows.some((r) =>\n selectedList.some((v) => v.value === r.value),\n );\n\n const isRowSelected = (opt: TablePickerOption) =>\n selectedList.some((v) => v.value === opt.value);\n\n return (\n <div style={{ marginBottom: 16 }}>\n <FieldLabel\n label={field.label}\n required={field.required}\n showOptional={field.showOptional}\n info={field.info}\n htmlFor={fieldId}\n dataTestId={field.dataTestId ?? fieldId}\n />\n\n <div style={S.wrapper(showError)} onBlur={onBlur} id={fieldId}>\n\n {/* Toolbar */}\n <div style={S.toolbar}>\n {selectedCount > 0 ? (\n <button\n type=\"button\"\n style={S.selectedLink}\n onClick={() => setModalOpen(true)}\n >\n {selectedCount} {selectedCount === 1 ? 'Item' : 'Items'} Selected\n </button>\n ) : (\n <span style={{ fontSize: 13, color: 'rgba(0,0,0,0.38)' }}>No selection</span>\n )}\n <div style={S.searchWrap}>\n <MdSearch size={15} color=\"rgba(0,0,0,0.38)\" />\n <input\n type=\"text\"\n placeholder={field.placeholder ?? 'Search…'}\n value={query}\n onChange={handleQueryChange}\n style={S.searchInput}\n aria-label={`Search ${field.label ?? ''}`}\n />\n </div>\n </div>\n\n {/* Table */}\n <div style={{ overflowX: 'auto' }}>\n <table style={S.table}>\n <thead style={S.thead}>\n <tr>\n <th style={S.checkTh}>\n {isMulti && (\n <MuiCheckbox\n checked={allPageSelected}\n indeterminate={!allPageSelected && somePageSelected}\n onChange={handleSelectAll}\n disabled={loading || rows.length === 0}\n />\n )}\n </th>\n {field.columns.map((col) => (\n <th key={col.key} style={S.th(col.width)}>{col.label}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {loading ? (\n <tr><td colSpan={colCount} style={S.statusRow}>Loading…</td></tr>\n ) : rows.length === 0 ? (\n <tr><td colSpan={colCount} style={S.statusRow}>No results found</td></tr>\n ) : rows.map((option) => {\n const selected = isRowSelected(option);\n const hovered = hoveredRow === option.value;\n return (\n <tr\n key={option.value}\n style={{\n cursor: 'pointer',\n background: selected ? 'rgba(25,118,210,0.06)' : hovered ? 'rgba(0,0,0,0.03)' : '#fff',\n transition: 'background 0.1s',\n }}\n onClick={() => handleRowClick(option)}\n onMouseEnter={() => setHoveredRow(option.value)}\n onMouseLeave={() => setHoveredRow(null)}\n aria-selected={selected}\n >\n <td style={S.checkTd}>\n {isMulti ? (\n <MuiCheckbox\n checked={selected}\n onChange={() => handleRowClick(option)}\n />\n ) : (\n <input\n type=\"radio\"\n checked={selected}\n onChange={() => handleRowClick(option)}\n onClick={(e) => e.stopPropagation()}\n name={fieldId}\n style={{ accentColor: '#1976d2', width: 16, height: 16, cursor: 'pointer' }}\n />\n )}\n </td>\n {field.columns.map((col) => (\n <td key={col.key} style={S.td}>{String(option[col.key] ?? '')}</td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n\n {/* Footer / pagination */}\n <div style={S.footer}>\n <span>{`${(page - 1) * pageSize + 1}–${(page - 1) * pageSize + rows.length} of many`}</span>\n <div style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n <button\n type=\"button\"\n onClick={() => { const p = page - 1; setPage(p); load(query, p); }}\n disabled={page <= 1}\n style={S.pageBtn(page <= 1)}\n aria-label=\"Previous page\"\n >‹</button>\n <button\n type=\"button\"\n onClick={() => { const p = page + 1; setPage(p); load(query, p); }}\n disabled={!hasNextPage}\n style={S.pageBtn(!hasNextPage)}\n aria-label=\"Next page\"\n >›</button>\n </div>\n </div>\n </div>\n\n {field.helperText && !showError && (\n <small style={helperTextStyle}>{field.helperText}</small>\n )}\n {showError && (\n <small data-testid={`${fieldId}-error`} style={errorTextStyle}>\n {error}\n </small>\n )}\n\n {modalOpen && (\n <SelectedModal\n selected={selectedList}\n onRemove={handleRemoveFromModal}\n onClose={() => setModalOpen(false)}\n />\n )}\n </div>\n );\n}\n","import type { ComponentType } from 'react';\nimport type { FieldDescriptor } from './types';\nimport type { FieldComponentProps } from './DynamicFormRenderer/fieldRegistry';\nimport { fieldRegistry } from './DynamicFormRenderer/fieldRegistry';\nimport { TablePickerField } from './fields/TablePickerField';\nimport * as Yup from 'yup';\n\nexport interface FlowForgeFieldDefinition {\n /** The unique type identifier (e.g. 'text', 'image-upload') */\n type: string;\n /** The display name for the field picker dropdown */\n label: string;\n \n /** \n * The component used to render the field in the live form.\n * If omitted, relies on a previously registered component in DynamicFormRenderer.\n */\n component?: ComponentType<FieldComponentProps>;\n\n /**\n * Instead of a React component, you provide a FlowForm schema!\n * The Schema Builder Modal will automatically render this schema \n * to ask the user for configuration settings.\n */\n configSchema?: { fields: FieldDescriptor[] };\n\n /**\n * Validation builder for this field type.\n */\n buildValidation?: (field: FieldDescriptor) => Yup.Schema;\n}\n\nclass Registry {\n private fields = new Map<string, FlowForgeFieldDefinition>();\n\n constructor() {\n this.register({ type: 'text', label: 'Text' });\n this.register({ type: 'textarea', label: 'Textarea' });\n \n // Demonstrate self-building UI using our own FlowForm schema format!\n this.register({ \n type: 'number', \n label: 'Number',\n configSchema: {\n fields: [\n { id: 'min', type: 'number', label: 'Minimum limit' },\n { id: 'max', type: 'number', label: 'Maximum limit' },\n { id: 'step', type: 'number', label: 'Step size' },\n { id: 'prefix', type: 'text', label: 'Prefix (e.g. $)' },\n { id: 'suffix', type: 'text', label: 'Suffix (e.g. USD)' },\n ]\n }\n });\n\n this.register({ type: 'toggle', label: 'Toggle/Switch' });\n this.register({ type: 'select', label: 'Select' });\n this.register({ type: 'descriptive-select', label: 'Descriptive Select' });\n this.register({ type: 'radio-group', label: 'Radio Group' });\n this.register({ type: 'key-value', label: 'Key-Value' });\n this.register({ type: 'reference', label: 'Reference' });\n this.register({ type: 'cron', label: 'Cron' });\n this.register({ type: 'object', label: 'Object' });\n this.register({ type: 'schema', label: 'Schema (nested form)' });\n this.register({ type: 'tabs', label: 'Tabs' });\n this.register({ type: 'date', label: 'Date' });\n this.register({ type: 'datetime', label: 'Date & Time' });\n this.register({ type: 'time', label: 'Time' });\n\n this.register({\n type: 'tags',\n label: 'Tags',\n configSchema: { fields: [\n { id: 'placeholder', type: 'text', label: 'Placeholder text' },\n { id: 'maxTags', type: 'number', label: 'Max tags (leave empty for unlimited)' },\n ]},\n });\n\n this.register({\n type: 'slider',\n label: 'Slider',\n configSchema: { fields: [\n { id: 'min', type: 'number', label: 'Minimum value' },\n { id: 'max', type: 'number', label: 'Maximum value' },\n { id: 'step', type: 'number', label: 'Step size' },\n { id: 'showValue', type: 'toggle', label: 'Show current value' },\n { id: 'marks', type: 'toggle', label: 'Show tick marks' },\n ]},\n });\n\n this.register({\n type: 'color',\n label: 'Color',\n configSchema: { fields: [\n { id: 'showHex', type: 'toggle', label: 'Show hex input' },\n ]},\n });\n\n this.register({\n type: 'file',\n label: 'File Upload',\n configSchema: { fields: [\n { id: 'accept', type: 'text', label: 'Accepted file types (e.g. .pdf,.png)' },\n { id: 'maxSizeMb', type: 'number', label: 'Max file size (MB)' },\n { id: 'multiple', type: 'toggle', label: 'Allow multiple files' },\n ]},\n });\n\n this.register({\n type: 'json-editor',\n label: 'JSON Editor',\n configSchema: { fields: [\n { id: 'rows', type: 'number', label: 'Editor height (rows)' },\n ]},\n });\n\n this.register({\n type: 'code',\n label: 'Code',\n configSchema: { fields: [\n {\n id: 'language',\n type: 'select',\n label: 'Language',\n options: [\n { value: 'javascript', label: 'JavaScript' },\n { value: 'typescript', label: 'TypeScript' },\n { value: 'python', label: 'Python' },\n { value: 'json', label: 'JSON' },\n ],\n },\n { id: 'rows', type: 'number', label: 'Editor height (rows)' },\n ]},\n });\n\n this.register({\n type: 'rich-text',\n label: 'Rich Text',\n configSchema: { fields: [\n { id: 'rows', type: 'number', label: 'Editor height (rows)' },\n { id: 'toolbar', type: 'toggle', label: 'Show toolbar' },\n ]},\n });\n\n this.register({\n type: 'table-picker',\n label: 'Table Picker',\n component: TablePickerField,\n configSchema: {\n fields: [\n { id: 'label', type: 'text', label: 'Label' },\n { id: 'required', type: 'toggle', label: 'Required' },\n { id: 'isMulti', type: 'toggle', label: 'Multi-select' },\n { id: 'pageSize', type: 'number', label: 'Page size' },\n ],\n },\n });\n }\n\n public register(def: FlowForgeFieldDefinition) {\n this.fields.set(def.type, def);\n if (def.component) {\n fieldRegistry.register(def.type, def.component);\n }\n }\n\n public get(type: string): FlowForgeFieldDefinition | undefined {\n return this.fields.get(type);\n }\n\n public getAll(): FlowForgeFieldDefinition[] {\n return Array.from(this.fields.values());\n }\n\n /** Gets all allowed options for the Type Picker in SchemaBuilder */\n public getTypeOptions(): Array<{ value: string; label: string }> {\n return this.getAll().map(def => ({\n value: def.type,\n label: def.label\n }));\n }\n}\n\nexport const FlowForgeRegistry = new Registry();\n","import * as Yup from 'yup';\nimport type { FieldDescriptor } from '../types';\nimport { resolveFieldKey } from '../types';\nimport { FlowForgeRegistry } from '../registry';\n\n/**\n * Builds a Yup ObjectSchema from a flat FieldDescriptor[].\n * Validates required fields and applies type-appropriate rules.\n * Recurses into object/schema children.\n */\nexport function buildValidationSchema(fields: FieldDescriptor[]): Yup.ObjectSchema<any> {\n const shape: Record<string, Yup.Schema> = {};\n\n for (const field of fields) {\n let key: string;\n try { key = resolveFieldKey(field); } catch { continue; }\n if (!key || field.hidden) continue;\n\n // Honour a field-level custom Yup schema if provided\n if (field.validation) {\n shape[key] = field.validation as Yup.Schema;\n continue;\n }\n\n let schema: Yup.Schema;\n\n // Check registry first\n const registryDef = FlowForgeRegistry.get(field.type);\n if (registryDef?.buildValidation) {\n schema = registryDef.buildValidation(field);\n } else {\n switch (field.type) {\n // ── Select-like ──────────────────────────────────────────────────────\n // `isMulti: true` makes the field store an array of selected values\n // instead of a single string. Validate as array in that case so Yup\n // doesn't reject the value with \"must be a string type\".\n case 'select':\n case 'descriptive-select':\n case 'infinite-select':\n case 'radio-group': {\n const isMulti = (field as { isMulti?: boolean }).isMulti === true;\n if (isMulti) {\n let a = Yup.array();\n if (field.required) {\n a = a.min(1, `${field.label ?? key} is required`);\n }\n schema = a;\n } else {\n let s = Yup.string();\n if (field.required) {\n s = s.required(`${field.label ?? key} is required`);\n }\n schema = s;\n }\n break;\n }\n\n // ── Numeric ──────────────────────────────────────────────────────────\n case 'number':\n case 'slider': {\n let n = Yup.number().typeError(`${field.label ?? key} must be a number`);\n if ((field as any).min != null) n = n.min((field as any).min, `${field.label ?? key} must be at least ${(field as any).min}`);\n if ((field as any).max != null) n = n.max((field as any).max, `${field.label ?? key} must be at most ${(field as any).max}`);\n if (field.required) n = n.required(`${field.label ?? key} is required`);\n schema = n;\n break;\n }\n\n // ── Boolean ──────────────────────────────────────────────────────────\n case 'toggle':\n case 'checkbox':\n schema = Yup.boolean();\n if (field.required) {\n schema = (schema as Yup.BooleanSchema).oneOf([true], `${field.label ?? key} must be checked`);\n }\n break;\n\n // ── Array / Tags ─────────────────────────────────────────────────────\n case 'array':\n case 'tags': {\n let a = Yup.array();\n if (field.required) a = a.min(1, `${field.label ?? key} must have at least one item`);\n if ((field as any).maxTags != null) a = a.max((field as any).maxTags, `${field.label ?? key} can have at most ${(field as any).maxTags} items`);\n schema = a;\n break;\n }\n\n // ── Nested object ────────────────────────────────────────────────────\n case 'object':\n case 'schema': {\n const children = (field.children ?? []) as FieldDescriptor[];\n schema = children.length > 0\n ? buildValidationSchema(children)\n : Yup.object();\n if (field.required) {\n schema = (schema as Yup.ObjectSchema<any>).required(`${field.label ?? key} is required`);\n }\n break;\n }\n\n // ── Date / time ──────────────────────────────────────────────────────\n case 'date':\n case 'datetime':\n case 'time': {\n let s = Yup.string();\n if (field.required) s = s.required(`${field.label ?? key} is required`);\n schema = s;\n break;\n }\n\n // ── Text (default) — with inputType-aware sub-rules ──────────────────\n default: {\n const inputType = (field as any).inputType as string | undefined;\n let s = Yup.string();\n\n if (inputType === 'email') {\n s = s.email(`${field.label ?? key} must be a valid email address`);\n } else if (inputType === 'url') {\n s = s.url(`${field.label ?? key} must be a valid URL`);\n }\n\n const minLen = (field as any).minLength as number | undefined;\n const maxLen = (field as any).maxLength as number | undefined;\n if (minLen != null) s = s.min(minLen, `${field.label ?? key} must be at least ${minLen} characters`);\n if (maxLen != null) s = s.max(maxLen, `${field.label ?? key} must be at most ${maxLen} characters`);\n\n if (field.required) s = s.trim().required(`${field.label ?? key} is required`);\n\n schema = s;\n break;\n }\n }\n }\n\n shape[key] = schema;\n }\n\n return Yup.object().shape(shape);\n}\n","/**\n * buildFieldValidator — derives a Formik field-level validator from a\n * FieldDescriptor by reusing buildValidationSchema's full rule set.\n *\n * Why this exists\n * ───────────────\n * In *uncontrolled* mode FlowForm runs `buildValidationSchema(schema.fields)`\n * once at mount-time and hands the resulting Yup schema to its internal\n * <Formik>. In *controlled* mode the host already owns Formik, so we can't\n * inject a top-level validationSchema after the fact. But Formik supports\n * **per-field validators** that each field self-registers via `useField`/\n * `registerField` — Formik merges those errors into `formik.errors`\n * automatically.\n *\n * By reusing the same rule logic (required, pattern, min/max, minLength,\n * maxLength, minItems, maxItems, inputType=email/url) on a per-field basis,\n * the host writes ZERO validation code in either mode and the schema's\n * declarations Just Work.\n */\nimport { ValidationError } from 'yup';\nimport { buildValidationSchema } from '../SchemaBuilder/buildValidationSchema';\nimport type { FieldDescriptor } from '../types';\n\nexport type FieldValidator = (value: unknown) => Promise<string | undefined>;\n\n// Single-word placeholder key used to wrap the field for Yup. Avoids dotted\n// `field.id` values (e.g. \"attributeMapping.rules\") confusing Yup's\n// validateAt path-resolution into nested-navigation mode, which would fail\n// the lookup and surface a generic \"Invalid\" via our catch.\nconst SINGLE_KEY = '__ff_field__';\n\n/**\n * Returns a Formik per-field validator for a single FieldDescriptor.\n * The returned async function resolves to an error message string, or\n * `undefined` when the value passes.\n *\n * Important — we rebind the field's id/name to a dot-free placeholder ONLY\n * for the purpose of building the Yup schema. The error messages still\n * read `field.label` (preserving \"Target Field is required\" UX). This\n * sidesteps Yup treating dotted ids as nested paths in validateAt.\n */\nexport function buildFieldValidator(field: FieldDescriptor): FieldValidator {\n const rebound = { ...field, id: SINGLE_KEY, name: SINGLE_KEY } as FieldDescriptor;\n const schema = buildValidationSchema([rebound]);\n\n return async (value: unknown) => {\n try {\n await schema.validateAt(SINGLE_KEY, { [SINGLE_KEY]: value });\n return undefined;\n } catch (err) {\n return err instanceof ValidationError ? err.message : 'Invalid';\n }\n };\n}\n","/**\n * ObjectField - collapsible nested group renderer.\n *\n * Design goals:\n * - Calm, industry-standard configuration grouping\n * - Subtle hierarchy instead of loud tree lines\n * - Clear nested structure without excessive indentation\n * - Consistent typography with the rest of the field system\n */\n\nimport React, { useState } from 'react';\nimport { Box, Chip, Typography } from '@mui/material';\nimport { MdKeyboardArrowRight } from 'react-icons/md';\nimport type { FieldDescriptor } from '../types';\n\nfunction countLeafFields(fields: FieldDescriptor[]): number {\n return fields.reduce((accumulator, field) => {\n if (field.type === 'object') {\n return accumulator + countLeafFields((field.children ?? []) as FieldDescriptor[]);\n }\n\n return accumulator + 1;\n }, 0);\n}\n\nfunction getObjectTitle(field: FieldDescriptor, pathPrefix: string): string {\n if (field.label) return field.label;\n\n const fallback = pathPrefix.split('.').pop() ?? 'Group';\n return fallback\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/[-_]/g, ' ')\n .replace(/\\b\\w/g, (match) => match.toUpperCase());\n}\n\nfunction getShellStyles(depth: number, compact?: boolean) {\n const isRoot = depth === 0;\n const isInsetLevel = depth === 1;\n const isDeepLevel = depth >= 2;\n\n return {\n marginBottom: compact ? 8 : isDeepLevel ? 10 : 12,\n borderRadius: isRoot ? '12px' : isInsetLevel ? '10px' : '0px',\n border: isDeepLevel ? 'none' : '1px solid #E5E7EB',\n backgroundColor: isRoot ? '#FFFFFF' : isInsetLevel ? '#FAFAFB' : 'transparent',\n boxShadow: isRoot ? '0 1px 2px rgba(15, 23, 42, 0.04)' : 'none',\n padding: 0,\n overflow: 'hidden',\n marginLeft: isRoot ? 0 : isInsetLevel ? '10px' : '16px',\n };\n}\n\nfunction getHeaderStyles(depth: number, open: boolean) {\n const isRoot = depth === 0;\n const isInsetLevel = depth === 1;\n const isDeepLevel = depth >= 2;\n\n return {\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n px: isRoot ? 1.75 : isInsetLevel ? 1.5 : 0.25,\n py: isRoot ? 1.35 : isInsetLevel ? 1.1 : 0.75,\n cursor: 'pointer',\n userSelect: 'none',\n backgroundColor: open\n ? (isRoot ? '#FCFCFD' : isInsetLevel ? 'rgba(248, 250, 252, 0.92)' : 'transparent')\n : (isRoot ? '#FFFFFF' : isInsetLevel ? '#FAFAFB' : 'transparent'),\n borderBottom: open && !isDeepLevel ? '1px solid #EEF2F7' : 'none',\n transition: 'background-color 0.18s ease',\n '&:hover': {\n backgroundColor: isRoot ? '#F8FAFC' : isInsetLevel ? '#F5F7FA' : 'rgba(248, 250, 252, 0.75)',\n },\n };\n}\n\nexport interface ChildRouterProps {\n field: FieldDescriptor;\n pathPrefix: string;\n depth: number;\n values: Record<string, unknown>;\n errors: Record<string, unknown>;\n touched: Record<string, unknown>;\n setFieldValue: (name: string, value: unknown) => void;\n setFieldTouched: (name: string, touched: boolean) => void;\n compact?: boolean;\n inlineLabel?: boolean;\n /**\n * Item-scoped values when this child is rendered inside an array item.\n * ArrayField sets it to `items[i]` per row; ObjectField/TabsField pass\n * whatever they received through unchanged. FieldRouter folds this into\n * `ctx.item` for shouldHide/shouldDisable/compute callbacks.\n */\n item?: Record<string, unknown>;\n}\n\nexport interface ObjectFieldRendererProps {\n field: FieldDescriptor;\n pathPrefix: string;\n depth: number;\n values: Record<string, unknown>;\n errors: Record<string, unknown>;\n touched: Record<string, unknown>;\n setFieldValue: (name: string, value: unknown) => void;\n setFieldTouched: (name: string, touched: boolean) => void;\n compact?: boolean;\n renderFieldRouter: (props: ChildRouterProps) => React.ReactNode;\n /** Item-scoped values passed through unchanged from any parent ArrayField. */\n item?: Record<string, unknown>;\n}\n\nexport function ObjectField({\n field,\n pathPrefix,\n depth,\n values,\n errors,\n touched,\n setFieldValue,\n setFieldTouched,\n compact,\n renderFieldRouter,\n item,\n}: ObjectFieldRendererProps) {\n const [open, setOpen] = useState(true);\n const children = (field.children ?? []) as FieldDescriptor[];\n const leafCount = countLeafFields(children);\n const title = getObjectTitle(field, pathPrefix);\n const objectDescription = typeof field.helperText === 'string' ? field.helperText : undefined;\n const summaryLabel = `${leafCount} field${leafCount === 1 ? '' : 's'}`;\n\n return (\n <Box sx={getShellStyles(depth, compact)}>\n <Box onClick={() => setOpen((current) => !current)} sx={getHeaderStyles(depth, open)}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 18,\n height: 18,\n color: '#64748B',\n transform: open ? 'rotate(90deg)' : 'rotate(0deg)',\n transition: 'transform 0.18s ease',\n flexShrink: 0,\n }}\n >\n <MdKeyboardArrowRight size={16} />\n </Box>\n\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'wrap' }}>\n <Typography\n sx={{\n fontSize: depth >= 2 ? 13 : 14,\n fontWeight: 600,\n lineHeight: 1.35,\n color: '#0F172A',\n overflowWrap: 'anywhere',\n }}\n >\n {title}\n </Typography>\n\n <Chip\n label={summaryLabel}\n size=\"small\"\n sx={{\n height: 20,\n fontSize: 10.5,\n fontWeight: 600,\n bgcolor: '#F3F4F6',\n color: '#6B7280',\n '& .MuiChip-label': { px: 1 },\n }}\n />\n </Box>\n\n {objectDescription && (\n <Typography\n sx={{\n mt: 0.35,\n fontSize: 12,\n lineHeight: 1.45,\n color: '#6c757d',\n overflowWrap: 'anywhere',\n }}\n >\n {objectDescription}\n </Typography>\n )}\n </Box>\n </Box>\n\n <Box\n sx={{\n display: open ? 'block' : 'none',\n px: depth === 0 ? 1.75 : depth === 1 ? 1.5 : 0.25,\n py: depth >= 2 ? 0.75 : 1.5,\n }}\n >\n <Box\n sx={{\n pl: depth === 0 ? 0 : depth === 1 ? 1 : 0,\n }}\n >\n {children.map((child) => {\n const childKey = child.id ?? child.name ?? '';\n const childPath = pathPrefix ? `${pathPrefix}.${childKey}` : childKey;\n\n return renderFieldRouter({\n field: child,\n pathPrefix: childPath,\n depth: depth + 1,\n values,\n errors,\n touched,\n setFieldValue,\n setFieldTouched,\n compact,\n inlineLabel: false,\n // Pass parent's item scope through — plain object groups don't\n // create a new array-item scope themselves.\n item,\n });\n })}\n </Box>\n </Box>\n </Box>\n );\n}\n","import { createContext, useContext } from 'react';\n\n/**\n * Allows TabsField (in the rendered form) to request adding a field to a tab\n * without creating a circular dependency on SchemaBuilder.\n *\n * SchemaBuilder provides this context; TabsField consumes it.\n * When not inside a SchemaBuilder, the context is null and TabsField hides the add button.\n */\nexport interface TabsEditContextValue {\n /** Opens the \"Add field\" dialog targeting a specific tab inside a container field. */\n openAddFieldDialog: (containerFieldId: string, tabId: string) => void;\n /** Removes a field from a specific tab. */\n removeFieldFromTab: (containerFieldId: string, tabId: string, fieldIndex: number) => void;\n}\n\nexport const TabsEditContext = createContext<TabsEditContextValue | null>(null);\n\nexport function useTabsEdit() {\n return useContext(TabsEditContext);\n}\n","/**\r\n * TabsField — FlowForge field\r\n *\r\n * type: 'tabs'\r\n *\r\n * Renders child fields grouped into tabs.\r\n * Each tab is defined in field.tabs: { id, label, fields }[]\r\n * Values are nested under each tab's id, e.g. values.headers.contentType\r\n *\r\n * Schema example:\r\n * {\r\n * id: 'request',\r\n * type: 'tabs',\r\n * label: 'Request Configuration',\r\n * tabs: [\r\n * { id: 'headers', label: 'Headers', fields: [...] },\r\n * { id: 'body', label: 'Body', fields: [...] },\r\n * { id: 'params', label: 'Params', fields: [...] },\r\n * ]\r\n * }\r\n */\r\n\r\nimport React, { useEffect, useState } from 'react';\r\nimport { Box } from '@mui/material';\r\nimport { MdAdd, MdClose } from 'react-icons/md';\r\nimport type { FieldDescriptor } from '../types';\r\nimport type { ChildRouterProps } from './ObjectField';\r\nimport { useTabsEdit } from '../SchemaBuilder/TabsEditContext';\r\n\r\nexport interface TabDefinition {\r\n id: string;\r\n label: string;\r\n fields: FieldDescriptor[];\r\n}\r\n\r\nexport interface TabsFieldDescriptor extends FieldDescriptor {\r\n tabs?: TabDefinition[];\r\n variant?: 'pill' | 'line';\r\n alignment?: 'left' | 'center' | 'right' | 'center-left' | 'center-right';\r\n height?: 'auto' | 'fixed';\r\n margin?: 'normal' | 'none';\r\n activeColor?: string;\r\n activeTextColor?: string;\r\n inactiveTextColor?: string;\r\n}\r\n\r\nexport interface TabsFieldRendererProps {\r\n field: TabsFieldDescriptor;\r\n pathPrefix: string;\r\n depth: number;\r\n values: Record<string, unknown>;\r\n errors: Record<string, unknown>;\r\n touched: Record<string, unknown>;\r\n setFieldValue: (name: string, value: unknown) => void;\r\n setFieldTouched: (name: string, touched: boolean) => void;\r\n compact?: boolean;\r\n renderFieldRouter: (props: ChildRouterProps) => React.ReactNode;\r\n}\r\n\r\nexport function TabsField({\r\n field,\r\n pathPrefix,\r\n depth,\r\n values,\r\n errors,\r\n touched,\r\n setFieldValue,\r\n setFieldTouched,\r\n compact,\r\n renderFieldRouter,\r\n}: TabsFieldRendererProps) {\r\n const tabs: TabDefinition[] = field.tabs ?? [];\r\n const [activeTab, setActiveTab] = useState<string>(tabs[0]?.id ?? '');\r\n\r\n // Recover when the active tab is removed (schema-builder reorder/delete).\r\n useEffect(() => {\r\n if (tabs.length === 0) return;\r\n if (!tabs.some(t => t.id === activeTab)) setActiveTab(tabs[0].id);\r\n }, [tabs, activeTab]);\r\n const tabsEdit = useTabsEdit();\r\n const containerFieldId = field.id ?? field.name ?? '';\r\n\r\n const variant = field.variant ?? 'line';\r\n const alignment = field.alignment ?? 'left';\r\n const height = field.height ?? 'auto';\r\n const margin = field.margin ?? 'normal';\r\n const activeColor = field.activeColor ?? '#6366f1';\r\n const activeTextColor = field.activeTextColor ?? (variant === 'pill' ? '#ffffff' : activeColor);\r\n const inactiveTextColor = field.inactiveTextColor ?? '#64748b';\r\n\r\n const alignMap: Record<string, string> = {\r\n 'left': 'flex-start', 'center-left': 'flex-start',\r\n 'center': 'center', 'center-right': 'flex-end', 'right': 'flex-end',\r\n };\r\n\r\n if (tabs.length === 0) {\r\n return (\r\n <Box sx={{ p: 2, border: '1px dashed #e2e8f0', borderRadius: 2, color: '#94a3b8', fontSize: 13 }}>\r\n No tabs defined. Add a <code>tabs</code> array to this field descriptor.\r\n </Box>\r\n );\r\n }\r\n\r\n const currentTab = tabs.find(t => t.id === activeTab) ?? tabs[0];\r\n\r\n return (\r\n <Box sx={{\r\n mb: margin === 'none' ? 0 : undefined,\r\n height: height === 'fixed' ? 400 : undefined,\r\n display: height === 'fixed' ? 'flex' : undefined,\r\n flexDirection: height === 'fixed' ? 'column' : undefined,\r\n }}>\r\n {/* Tab bar */}\r\n <Box sx={{\r\n display: 'flex',\r\n justifyContent: alignMap[alignment] ?? 'flex-start',\r\n alignItems: 'center',\r\n gap: 0,\r\n px: 1.5,\r\n pt: 1.5,\r\n borderBottom: '1px solid #e2e8f0',\r\n flexShrink: 0,\r\n }}>\r\n {tabs.map(tab => {\r\n const isActive = tab.id === activeTab;\r\n const tabPath = pathPrefix ? `${pathPrefix}.${tab.id}` : tab.id;\r\n const hasError = tab.fields.some(f => {\r\n const fKey = f.id ?? f.name ?? '';\r\n const fPath = `${tabPath}.${fKey}`;\r\n const err = fPath.split('.').reduce<unknown>((o, k) => (o && typeof o === 'object' ? (o as Record<string, unknown>)[k] : undefined), errors);\r\n return !!err;\r\n });\r\n\r\n // Pill variant: rounded filled chip; Line variant: underline\r\n const pillActive = { bgcolor: activeColor, color: activeTextColor, borderRadius: '20px', border: 'none' };\r\n const pillInactive = { bgcolor: 'transparent', color: inactiveTextColor, borderRadius: '20px', border: 'none' };\r\n const lineActive = { borderBottom: `2px solid ${activeColor}`, color: activeTextColor, border: 'none' };\r\n const lineInactive = { borderBottom: '2px solid transparent', color: inactiveTextColor, border: 'none' };\r\n\r\n const tabStyle = variant === 'pill'\r\n ? (isActive ? pillActive : pillInactive)\r\n : (isActive ? lineActive : lineInactive);\r\n\r\n return (\r\n <Box\r\n key={tab.id}\r\n component=\"button\"\r\n type=\"button\"\r\n onClick={() => setActiveTab(tab.id)}\r\n sx={{\r\n ...tabStyle,\r\n background: variant === 'pill' && isActive ? activeColor : 'none',\r\n cursor: 'pointer',\r\n px: 1.5,\r\n py: variant === 'pill' ? 0.5 : 1,\r\n fontSize: 13,\r\n fontWeight: isActive ? 700 : 500,\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 0.5,\r\n transition: 'color .12s, border-color .12s, background .12s',\r\n '&:hover': { color: variant === 'pill' && isActive ? activeTextColor : activeColor },\r\n mb: variant === 'line' ? '-1px' : 0.5,\r\n mr: variant === 'pill' ? 0.5 : 0,\r\n }}\r\n >\r\n {tab.label}\r\n {hasError && (\r\n <Box sx={{ width: 6, height: 6, borderRadius: '50%', bgcolor: '#ef4444', flexShrink: 0 }} />\r\n )}\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n\r\n {/* Tab content */}\r\n <Box sx={{ p: 2, flex: height === 'fixed' ? 1 : undefined, overflowY: height === 'fixed' ? 'auto' : undefined }}>\r\n <Box className=\"ff-form-row\">\r\n {currentTab.fields.map((child, childIdx) => {\r\n const childKey = child.id ?? child.name ?? '';\r\n const tabPath = pathPrefix ? `${pathPrefix}.${currentTab.id}` : currentTab.id;\r\n const childPath = `${tabPath}.${childKey}`;\r\n return (\r\n <Box key={childPath} sx={{ position: 'relative', width: '100%' }}>\r\n {tabsEdit && (\r\n <Box\r\n component=\"button\"\r\n type=\"button\"\r\n onClick={() => tabsEdit.removeFieldFromTab(containerFieldId, currentTab.id, childIdx)}\r\n title=\"Remove field\"\r\n sx={{\r\n position: 'absolute', top: 4, right: 4, zIndex: 10,\r\n width: 18, height: 18, borderRadius: '50%',\r\n border: 'none', background: '#fee2e2', color: '#dc2626',\r\n cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n opacity: 0, transition: 'opacity .15s',\r\n '.field-remove-wrapper:hover &': { opacity: 1 },\r\n }}\r\n className=\"field-remove-btn\"\r\n >\r\n <MdClose size={11} />\r\n </Box>\r\n )}\r\n {renderFieldRouter({\r\n field: child,\r\n pathPrefix: childPath,\r\n depth: depth + 1,\r\n values,\r\n errors,\r\n touched,\r\n setFieldValue,\r\n setFieldTouched,\r\n compact,\r\n inlineLabel: false,\r\n })}\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n\r\n {/* Add field button — only visible inside SchemaBuilder */}\r\n {tabsEdit && (\r\n <Box\r\n component=\"button\"\r\n type=\"button\"\r\n onClick={() => tabsEdit.openAddFieldDialog(containerFieldId, currentTab.id)}\r\n sx={{\r\n mt: currentTab.fields.length > 0 ? 1.5 : 0,\r\n width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n gap: 0.75, border: '1.5px dashed #c7d2fe', borderRadius: '8px',\r\n background: 'none', cursor: 'pointer', py: 1.25,\r\n fontSize: 13, fontWeight: 600, color: '#6366f1',\r\n transition: 'all .15s',\r\n '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' },\r\n }}\r\n >\r\n <MdAdd size={15} /> Add field to {currentTab.label}\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","/**\r\n * ConditionRow — recursive condition builder.\r\n *\r\n * Cell rendering is delegated to the field registry — no duplicate field logic here.\r\n * `type: 'operator'` also renders via the registry's `select` component, but with a\r\n * built-in standard operator list (it's condition-specific, not schema-supplied).\r\n *\r\n * Supports:\r\n * - Leaf rows: When [field] [operator] [value]\r\n * - Groups: collapsible parenthesised sub-lists (AND / OR logic inside)\r\n * - AND / OR connector toggle between any two siblings at the same level\r\n */\r\n\r\nimport React, { useState } from 'react';\r\nimport { Box, Button, Tooltip, Typography, Collapse } from '@mui/material';\r\nimport { MdAdd, MdDeleteOutline, MdKeyboardArrowDown, MdKeyboardArrowRight } from 'react-icons/md';\r\nimport type { FieldConditionDef, ConditionFieldDef } from '../types';\r\nimport type { ConditionEntry, ConditionGroup, ConditionNode } from '../types/formula';\r\nimport type { FormulaConfig } from '../types/formula';\r\nimport { fieldRegistry } from './fieldRegistry';\r\n\r\n// ─── Standard operator list (type: 'operator') ───────────────────────────────\r\n\r\nconst STANDARD_OPERATORS = [\r\n { value: 'equals', label: 'equals' },\r\n { value: 'notEquals', label: 'not equals' },\r\n { value: 'contains', label: 'contains' },\r\n { value: 'notContains', label: 'not contains' },\r\n { value: 'startsWith', label: 'starts with' },\r\n { value: 'endsWith', label: 'ends with' },\r\n { value: 'isPresent', label: 'is present' },\r\n { value: 'isNotPresent', label: 'is not present' },\r\n { value: 'greaterThan', label: 'greater than' },\r\n { value: 'lessThan', label: 'less than' },\r\n { value: 'greaterOrEquals', label: 'greater or equal' },\r\n { value: 'lessOrEquals', label: 'less or equal' },\r\n];\r\n\r\nconst VALUELESS_OPERATORS = new Set(['isPresent', 'isNotPresent', 'isEmpty', 'isNotEmpty']);\r\n\r\n// ─── Helpers ──────────────────────────────────────────────────────────────────\r\n\r\nconst addButtonSx = {\r\n textTransform: 'none',\r\n fontSize: 12,\r\n fontWeight: 500,\r\n minWidth: 0,\r\n color: '#111827',\r\n bgcolor: '#f9fafb',\r\n borderRadius: '6px',\r\n boxShadow: 'none',\r\n '&:hover': {\r\n bgcolor: '#f3f4f6',\r\n boxShadow: 'none',\r\n },\r\n '& .MuiButton-startIcon': {\r\n mr: 1.25,\r\n ml: 0,\r\n color: '#111827',\r\n '& svg': {\r\n fontSize: 17,\r\n },\r\n },\r\n};\r\n\r\nfunction isGroup(node: ConditionNode): node is ConditionGroup {\r\n return (node as ConditionGroup).type === 'group';\r\n}\r\n\r\nfunction emptyLeaf(): ConditionEntry {\r\n return { field: '', fieldLabel: '', operator: 'equals', value: '', connector: 'and' };\r\n}\r\n\r\nfunction operatorNeedsValue(operator: string): boolean {\r\n return !VALUELESS_OPERATORS.has(operator);\r\n}\r\n\r\nfunction nodeCount(entries: ConditionNode[]): number {\r\n return entries.reduce((sum, n) => sum + (isGroup(n) ? nodeCount(n.entries) : 1), 0);\r\n}\r\n\r\n// ─── AND / OR toggle ──────────────────────────────────────────────────────────\r\n\r\nfunction ConnectorToggle({ connector, onChange }: {\r\n connector: 'and' | 'or';\r\n onChange: (c: 'and' | 'or') => void;\r\n}) {\r\n return (\r\n <Box sx={{ display: 'flex', gap: '2px' }}>\r\n {(['and', 'or'] as const).map(opt => (\r\n <Box\r\n key={opt}\r\n component=\"button\"\r\n type=\"button\"\r\n onClick={() => onChange(opt)}\r\n aria-pressed={connector === opt}\r\n aria-label={opt === 'and' ? 'AND — all conditions must match' : 'OR — any condition must match'}\r\n sx={{\r\n border: '1px solid',\r\n borderRadius: '4px',\r\n fontSize: 10,\r\n fontWeight: 700,\r\n px: '6px',\r\n py: '1px',\r\n cursor: 'pointer',\r\n textTransform: 'uppercase',\r\n letterSpacing: 0.6,\r\n lineHeight: '18px',\r\n ...(connector === opt\r\n ? { bgcolor: '#f1f5f9', color: '#374151', borderColor: '#94a3b8' }\r\n : { bgcolor: 'transparent', color: '#cbd5e1', borderColor: '#e2e8f0' }),\r\n }}\r\n >\r\n {opt}\r\n </Box>\r\n ))}\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Single condition cell — delegates to field registry ──────────────────────\r\n\r\nfunction ConditionCell({ colDef, entry, onChange, cellId, formValues }: {\r\n colDef: ConditionFieldDef;\r\n entry: ConditionEntry;\r\n onChange: (patch: Partial<ConditionEntry>) => void;\r\n cellId: string;\r\n formValues: Record<string, unknown>;\r\n}) {\r\n // Local formulaConfig for formula cells — ephemeral, not persisted to parent\r\n const [localFormulaConfig, setLocalFormulaConfig] = useState<FormulaConfig>({});\r\n const isValueDisabled = colDef.id === 'value' && !operatorNeedsValue(entry.operator);\r\n\r\n // Operator — rendered with the same react-select as other select fields, but\r\n // with the built-in standard operator list (it's condition-specific, not a\r\n // schema-supplied option set). Selecting a valueless operator clears the value.\r\n if (colDef.type === 'operator') {\r\n const SelectComponent = fieldRegistry.get('select');\r\n if (!SelectComponent) return null;\r\n return (\r\n <SelectComponent\r\n field={{\r\n id: cellId,\r\n name: cellId,\r\n type: 'select',\r\n options: STANDARD_OPERATORS,\r\n label: undefined,\r\n placeholder: 'Operator…',\r\n compact: true,\r\n }}\r\n value={entry.operator ?? ''}\r\n values={formValues}\r\n onChange={(val: unknown) => {\r\n const nextOperator = String(val ?? '');\r\n onChange({\r\n operator: nextOperator,\r\n ...(!operatorNeedsValue(nextOperator) && { value: '' }),\r\n } as Partial<ConditionEntry>);\r\n }}\r\n onBlur={() => {}}\r\n error={undefined}\r\n touched={false}\r\n formulaConfig={localFormulaConfig}\r\n onFormulaConfigChange={setLocalFormulaConfig}\r\n />\r\n );\r\n }\r\n\r\n // All other types — delegate to the field registry\r\n const Component = fieldRegistry.get(colDef.type);\r\n if (!Component) return null;\r\n\r\n // The `field` column carries an extra invariant: when the user picks an\r\n // option, we also persist the option's label as `fieldLabel` so downstream\r\n // consumers (preview, server-side rules) can render or log the human name\r\n // without needing to re-resolve options. We do it for any column whose\r\n // type is `select` and that exposes static options — the picker layer\r\n // hides label access, so we resolve it here from `colDef.options`.\r\n const handleCellChange = (val: unknown): void => {\r\n const patch: Partial<ConditionEntry> = { [colDef.id]: val } as Partial<ConditionEntry>;\r\n if (colDef.id === 'field' && colDef.type === 'select' && Array.isArray(colDef.options)) {\r\n const picked = colDef.options.find((o) => String(o.value) === String(val));\r\n patch.fieldLabel = picked?.label ?? '';\r\n }\r\n onChange(patch);\r\n };\r\n\r\n return (\r\n <Component\r\n field={{\r\n ...colDef,\r\n id: cellId,\r\n name: cellId,\r\n disabled: isValueDisabled,\r\n placeholder: isValueDisabled ? 'Not required' : colDef.placeholder,\r\n label: undefined, // FieldLabel returns null when falsy — no label rendered\r\n compact: true,\r\n }}\r\n value={entry[colDef.id as keyof ConditionEntry] ?? ''}\r\n values={formValues}\r\n onChange={handleCellChange}\r\n onBlur={() => {}}\r\n error={undefined}\r\n touched={false}\r\n formulaConfig={localFormulaConfig}\r\n onFormulaConfigChange={setLocalFormulaConfig}\r\n />\r\n );\r\n}\r\n\r\n// ─── Collapsible group node ───────────────────────────────────────────────────\r\n\r\nfunction GroupNode({ node, conditionDef, depth, fieldPath, onUpdate, onRemove, formValues }: {\r\n node: ConditionGroup;\r\n conditionDef: FieldConditionDef;\r\n depth: number;\r\n fieldPath: string;\r\n onUpdate: (entries: ConditionNode[]) => void;\r\n onRemove: () => void;\r\n formValues: Record<string, unknown>;\r\n}) {\r\n const [collapsed, setCollapsed] = useState(false);\r\n const count = nodeCount(node.entries);\r\n\r\n return (\r\n <Box sx={{\r\n border: '1px solid #e9e9e9',\r\n borderLeft: '3px solid #d1d5db',\r\n borderRadius: '6px',\r\n bgcolor: '#f9fafb',\r\n overflow: 'hidden',\r\n }}>\r\n {/* Group header */}\r\n <Box\r\n sx={{\r\n display: 'flex', alignItems: 'center', gap: 0.5,\r\n px: 1, py: '5px',\r\n borderBottom: collapsed ? 'none' : '1px solid #f0f0f0',\r\n cursor: 'pointer', userSelect: 'none',\r\n }}\r\n onClick={() => setCollapsed(c => !c)}\r\n >\r\n <Box sx={{ color: '#94a3b8', display: 'flex', alignItems: 'center' }}>\r\n {collapsed ? <MdKeyboardArrowRight size={15} /> : <MdKeyboardArrowDown size={15} />}\r\n </Box>\r\n <Typography sx={{ fontSize: 11, fontWeight: 700, color: '#94a3b8', fontFamily: 'monospace', letterSpacing: -1 }}>\r\n ( )\r\n </Typography>\r\n <Typography sx={{ fontSize: 11, color: '#64748b' }}>\r\n Group\r\n {collapsed && (\r\n <Box component=\"span\" sx={{ ml: 0.5, color: '#94a3b8' }}>\r\n · {count} condition{count !== 1 ? 's' : ''}\r\n </Box>\r\n )}\r\n </Typography>\r\n <Box sx={{ ml: 'auto' }} onClick={e => e.stopPropagation()}>\r\n <Tooltip title=\"Remove group\">\r\n <Box\r\n component=\"button\"\r\n type=\"button\"\r\n onClick={onRemove}\r\n sx={{ background: 'none', border: 'none', cursor: 'pointer', display: 'flex', alignItems: 'center', p: '2px' }}\r\n >\r\n <MdDeleteOutline size={16} color=\"#ef4444\" />\r\n </Box>\r\n </Tooltip>\r\n </Box>\r\n </Box>\r\n\r\n <Collapse in={!collapsed}>\r\n <Box sx={{ p: 1, pt: 0.5 }}>\r\n <ConditionRow\r\n conditionDef={conditionDef}\r\n entries={node.entries}\r\n onUpdate={onUpdate}\r\n depth={depth + 1}\r\n fieldPath={fieldPath}\r\n formValues={formValues}\r\n />\r\n </Box>\r\n </Collapse>\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── ConditionRow (recursive) ─────────────────────────────────────────────────\r\n\r\ninterface ConditionRowProps {\r\n conditionDef: FieldConditionDef;\r\n entries: ConditionNode[];\r\n onUpdate: (entries: ConditionNode[]) => void;\r\n depth?: number;\r\n fieldPath?: string;\r\n /** Outer form values — used by condition columns that declare `optionsSource.dependsOn`. */\r\n formValues?: Record<string, unknown>;\r\n}\r\n\r\nexport function ConditionRow({ conditionDef, entries, onUpdate, depth = 0, fieldPath = 'cond', formValues = {} }: ConditionRowProps) {\r\n const canAddGroup = conditionDef.allowGroups === true\r\n && (conditionDef.maxGroupDepth == null || depth < conditionDef.maxGroupDepth);\r\n\r\n const addLeaf = () => onUpdate([...entries, emptyLeaf()]);\r\n\r\n const addGroup = () => onUpdate([...entries, {\r\n type: 'group',\r\n connector: 'and',\r\n entries: [emptyLeaf()],\r\n } satisfies ConditionGroup]);\r\n\r\n const removeNode = (index: number) => onUpdate(entries.filter((_, i) => i !== index));\r\n\r\n const setConnector = (index: number, connector: 'and' | 'or') =>\r\n onUpdate(entries.map((n, i) => i === index ? ({ ...n, connector } as ConditionNode) : n));\r\n\r\n const updateLeaf = (index: number, patch: Partial<ConditionEntry>) =>\r\n onUpdate(entries.map((n, i) => i === index ? ({ ...n, ...patch } as ConditionNode) : n));\r\n\r\n const updateGroupEntries = (index: number, updated: ConditionNode[]) =>\r\n onUpdate(entries.map((n, i) =>\r\n i === index ? { ...(n as ConditionGroup), entries: updated } : n\r\n ));\r\n\r\n return (\r\n <Box sx={{ mt: depth === 0 ? 1.25 : 0.25 }}>\r\n {entries.map((node, index) => (\r\n <Box key={index}>\r\n\r\n {/* AND / OR connector between siblings */}\r\n {index > 0 && (\r\n <Box sx={{ display: 'flex', alignItems: 'center', my: '10px' }}>\r\n <ConnectorToggle\r\n connector={node.connector ?? 'and'}\r\n onChange={c => setConnector(index, c)}\r\n />\r\n </Box>\r\n )}\r\n\r\n {isGroup(node) ? (\r\n <GroupNode\r\n node={node}\r\n conditionDef={conditionDef}\r\n depth={depth}\r\n fieldPath={`${fieldPath}__g${index}`}\r\n onUpdate={updated => updateGroupEntries(index, updated)}\r\n onRemove={() => removeNode(index)}\r\n formValues={formValues}\r\n />\r\n ) : (\r\n <Box>\r\n {index === 0 && (\r\n <Typography sx={{ fontSize: 12, fontWeight: 600, color: '#475569', mb: 0.75 }}>\r\n When\r\n </Typography>\r\n )}\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\r\n <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(12, 1fr)', gap: 0.75, flex: 1 }}>\r\n {conditionDef.fields.map(col => (\r\n <Box key={col.id} sx={{ gridColumn: `span ${col.colSpan ?? 4}` }}>\r\n <ConditionCell\r\n colDef={col}\r\n entry={node as ConditionEntry}\r\n onChange={patch => updateLeaf(index, patch)}\r\n cellId={`${fieldPath}__${index}__${col.id}`}\r\n formValues={formValues}\r\n />\r\n </Box>\r\n ))}\r\n </Box>\r\n <Tooltip title=\"Remove condition\">\r\n <Box\r\n component=\"button\"\r\n type=\"button\"\r\n onClick={() => removeNode(index)}\r\n aria-label=\"Remove condition\"\r\n sx={{ background: 'none', border: 'none', cursor: 'pointer', flexShrink: 0, display: 'flex', alignItems: 'center', p: '3px' }}\r\n >\r\n <MdDeleteOutline size={17} color=\"#ef4444\" aria-hidden=\"true\" />\r\n </Box>\r\n </Tooltip>\r\n </Box>\r\n </Box>\r\n )}\r\n </Box>\r\n ))}\r\n\r\n {/* Add buttons */}\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mt: entries.length > 0 ? 1.5 : 0 }}>\r\n <Button\r\n variant=\"contained\"\r\n startIcon={<MdAdd />}\r\n onClick={addLeaf}\r\n data-testid=\"add-condition-button\"\r\n className=\"ff-form-text-capitalize ff-form-text-12 ff-form-text-dark ff-form-shadow-none ff-form-bg-light\"\r\n disableElevation\r\n sx={addButtonSx}\r\n >\r\n Add\r\n </Button>\r\n {canAddGroup && (\r\n <Button\r\n variant=\"contained\"\r\n startIcon={<MdAdd />}\r\n onClick={addGroup}\r\n data-testid=\"add-group-button\"\r\n disableElevation\r\n sx={addButtonSx}\r\n >\r\n Add Group\r\n </Button>\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","/**\n * FieldConfigContext — holds formula and condition config so FieldRouter\n * doesn't need to drill them through every level of nesting.\n */\nimport React, { createContext, useContext } from 'react';\nimport type { FormulaConfig, ConditionConfig } from '../types/formula';\n\ninterface FieldConfigContextValue {\n formulaConfig: FormulaConfig;\n onFormulaConfigChange: (config: FormulaConfig) => void;\n conditionConfig: ConditionConfig;\n onConditionConfigChange: (config: ConditionConfig) => void;\n}\n\nconst noop = () => {};\n\nconst FieldConfigContext = createContext<FieldConfigContextValue>({\n formulaConfig: {},\n onFormulaConfigChange: noop,\n conditionConfig: {},\n onConditionConfigChange: noop,\n});\n\nexport function FieldConfigProvider({\n formulaConfig,\n onFormulaConfigChange,\n conditionConfig,\n onConditionConfigChange,\n children,\n}: FieldConfigContextValue & { children: React.ReactNode }) {\n return (\n <FieldConfigContext.Provider value={{ formulaConfig, onFormulaConfigChange, conditionConfig, onConditionConfigChange }}>\n {children}\n </FieldConfigContext.Provider>\n );\n}\n\nexport function useFieldConfig(): FieldConfigContextValue {\n return useContext(FieldConfigContext);\n}\n","import React, { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState, Component } from 'react';\r\nimport { Formik, FormikProvider, Form, useField, useFormikContext } from 'formik';\r\nimport { buildFieldValidator } from '../validation/buildFieldValidator';\r\nimport type { FormikProps } from 'formik';\r\nimport type { ObjectSchema } from 'yup';\r\nimport { buildValidationSchema } from '../SchemaBuilder/buildValidationSchema';\r\nimport type { FormSchema, FieldDescriptor } from '../types';\r\nimport { resolveFieldKey } from '../types';\r\nimport type { FormulaConfig, ConditionConfig, ConditionNode } from '../types/formula';\r\nimport { fieldRegistry } from './fieldRegistry';\r\nimport { FieldWrapper } from '../fields/FieldWrapper';\r\nimport { ObjectField } from '../fields/ObjectField';\r\nimport { ArrayField } from '../fields/ArrayField';\r\nimport type { ChildRouterProps } from '../fields/ObjectField';\r\nimport { TabsField } from '../fields/TabsField';\r\nimport type { TabsFieldDescriptor } from '../fields/TabsField';\r\nimport { VariablePickerProvider } from '../VariablePicker/VariablePickerContext';\r\nimport type { VariableGroup } from '../VariablePicker/VariablePickerContext';\r\nimport { ConditionRow } from './ConditionRow';\r\nimport { FieldConfigProvider, useFieldConfig } from './FieldConfigContext';\r\nimport { OptionsResolversProvider } from '../options/OptionsResolversContext';\r\nimport type { OptionsResolvers } from '../types';\r\nimport '../FlowForm.css';\r\nimport type { FlowFormInstance } from '../useFlowForm';\r\n\r\n// ─── Helpers ──────────────────────────────────────────────────────────────────\r\n\r\n/** Read a value from a nested object using a dot-path string. */\r\nfunction getValueByPath(obj: Record<string, unknown>, path: string): unknown {\r\n return path.split('.').reduce<unknown>((acc, key) => {\r\n if (acc == null || typeof acc !== 'object') return undefined;\r\n return (acc as Record<string, unknown>)[key];\r\n }, obj);\r\n}\r\n\r\n/**\r\n * Tiny Levenshtein implementation used for DEV-mode \"did you mean…\"\r\n * suggestions when a schema declares an unknown field `type`. Returns the\r\n * closest candidate within a max distance of 3 (so \"tetx\" → \"text\" works\r\n * but \"completely-wrong\" doesn't pick up a misleading suggestion).\r\n */\r\nfunction closestMatch(target: string, candidates: string[]): string | undefined {\r\n let best: { name: string; dist: number } | undefined;\r\n const targetLower = target.toLowerCase();\r\n for (const c of candidates) {\r\n const dist = levenshtein(targetLower, c.toLowerCase());\r\n if (dist <= 3 && (!best || dist < best.dist)) best = { name: c, dist };\r\n }\r\n return best?.name;\r\n}\r\n\r\nfunction levenshtein(a: string, b: string): number {\r\n if (a === b) return 0;\r\n if (!a.length) return b.length;\r\n if (!b.length) return a.length;\r\n let prev = Array.from({ length: b.length + 1 }, (_, i) => i);\r\n let curr = new Array(b.length + 1);\r\n for (let i = 1; i <= a.length; i++) {\r\n curr[0] = i;\r\n for (let j = 1; j <= b.length; j++) {\r\n const cost = a[i - 1] === b[j - 1] ? 0 : 1;\r\n curr[j] = Math.min(curr[j - 1] + 1, prev[j] + 1, prev[j - 1] + cost);\r\n }\r\n [prev, curr] = [curr, prev];\r\n }\r\n return prev[b.length];\r\n}\r\n\r\n\r\n// Built-in field type registrations live in a separate side-effect module so\r\n// they aren't hoisted into a lazy chunk by the bundler (see registerFieldTypes.ts).\r\nimport './registerFieldTypes';\r\n\r\n// ─── Shared formula / condition config props ──────────────────────────────────\r\n\r\ninterface FormulaProps {\r\n formulaConfig?: FormulaConfig;\r\n onFormulaConfigChange?: (config: FormulaConfig) => void;\r\n /**\r\n * Optional variable groups for the built-in Smart Values picker.\r\n * When provided, DynamicFormRenderer automatically wraps itself in\r\n * VariablePickerProvider — every FormulaInput gets a picker button and\r\n * drag-and-drop support with no extra setup from the host.\r\n *\r\n * For advanced layout control (picker rendered elsewhere on the page),\r\n * wrap with <VariablePickerProvider> manually instead.\r\n */\r\n variableGroups?: VariableGroup[];\r\n /** Active per-field condition guards. Key = field pathPrefix. */\r\n conditionConfig?: ConditionConfig;\r\n onConditionConfigChange?: (config: ConditionConfig) => void;\r\n /**\r\n * Key under `formik.values` where conditionConfig is auto-roundtripped\r\n * when the host doesn't supply explicit `conditionConfig` /\r\n * `onConditionConfigChange`. Defaults to `_conditionConfig`.\r\n */\r\n conditionConfigKey?: string;\r\n /**\r\n * Called by `flowFormRef.current.save()` once validation passes.\r\n * Receives the full payload (formik values incl. conditionConfig sidecar)\r\n * + a meta object with `isValid` / `errors`.\r\n *\r\n * Available in controlled AND uncontrolled mode. In uncontrolled mode it\r\n * runs in addition to `onSubmit`.\r\n */\r\n onSave?: (\r\n values: Record<string, unknown>,\r\n meta: { isValid: boolean; errors: Record<string, unknown> },\r\n ) => void;\r\n /**\r\n * Host-registered resolver map for declarative dynamic options.\r\n * Fields with `optionsSource: { id: '...', dependsOn: ... }` look up\r\n * their loader in this map. Transport-agnostic — use axios, fetch,\r\n * GraphQL, anything that returns a Promise.\r\n */\r\n optionsResolvers?: OptionsResolvers;\r\n}\r\n\r\n// ─── Props ────────────────────────────────────────────────────────────────────\r\n\r\ninterface UncontrolledProps extends FormulaProps {\r\n schema: FormSchema;\r\n initialValues: Record<string, unknown>;\r\n onSubmit: (values: Record<string, unknown>) => void | Promise<void>;\r\n formik?: never;\r\n form?: never;\r\n validationSchema?: ObjectSchema<any>;\r\n /** Pre-mark fields as touched so validation errors show immediately */\r\n initialTouched?: Record<string, boolean>;\r\n /** Called on every values change — use to observe live form values */\r\n onValuesChange?: (values: Record<string, unknown>) => void;\r\n /** Called whenever form validity changes — use to enable/disable a parent Save button */\r\n onValidityChange?: (isValid: boolean) => void;\r\n children?: (props: { isSubmitting: boolean }) => React.ReactNode;\r\n /**\r\n * Optional HTML `id` for the underlying <form> element. Use this when the\r\n * submit button lives outside the form (e.g. in a drawer footer) — a\r\n * `<button type=\"submit\" form={formId}>` will still trigger this form's\r\n * submit via the HTML5 form attribute.\r\n */\r\n formId?: string;\r\n}\r\n\r\ninterface ControlledProps extends FormulaProps {\r\n schema: FormSchema;\r\n formik: FormikProps<Record<string, unknown>>;\r\n initialValues?: never;\r\n onSubmit?: never;\r\n children?: never;\r\n form?: never;\r\n}\r\n\r\n/** Props when using the useFlowForm() hook — simplest API. */\r\ninterface HookProps {\r\n form: FlowFormInstance;\r\n schema?: never;\r\n formik?: never;\r\n initialValues?: never;\r\n onSubmit?: never;\r\n formulaConfig?: never;\r\n onFormulaConfigChange?: never;\r\n conditionConfig?: never;\r\n onConditionConfigChange?: never;\r\n variableGroups?: never;\r\n children?: never;\r\n}\r\n\r\nexport type FlowFormProps = UncontrolledProps | ControlledProps | HookProps;\r\n/** @deprecated Use FlowFormProps */\r\nexport type DynamicFormRendererProps = FlowFormProps;\r\n\r\n// ─── Imperative handle types ──────────────────────────────────────────────────\r\n\r\n/**\r\n * Result of `FlowFormHandle.save()`.\r\n * - `isValid`: true when no validation errors\r\n * - `values`: the latest formik values (includes conditionConfig sidecar\r\n * under `_conditionConfig` by default, configurable via prop)\r\n * - `errors`: per-path validation errors (empty object when isValid)\r\n */\r\nexport interface SaveResult {\r\n isValid: boolean;\r\n values: Record<string, unknown>;\r\n errors: Record<string, unknown>;\r\n}\r\n\r\n/**\r\n * Imperative API exposed via `ref` on `<FlowForm>`. Lets a host drive Save\r\n * from a footer button outside the form without writing forwardRef\r\n * boilerplate per-section. See README for the canonical pattern.\r\n */\r\nexport interface FlowFormHandle {\r\n /**\r\n * Touch every field, validate the form, and (when valid) call `onSave`\r\n * with the full payload. Returns `{ isValid, values, errors }` so the\r\n * caller can also branch off the result directly.\r\n */\r\n save: () => Promise<SaveResult>;\r\n /** Reset to initial values + clear touched/errors. */\r\n reset: () => void;\r\n /** Run validation and return errors without touching fields. */\r\n validate: () => Promise<Record<string, unknown>>;\r\n /** Push server-side errors back into formik state for display. */\r\n setErrors: (errors: Record<string, unknown>) => void;\r\n /** Read the current values. Includes the conditionConfig sidecar. */\r\n getValues: () => Record<string, unknown>;\r\n /** Programmatic write — useful for pre-filling on edit. */\r\n setValues: (values: Record<string, unknown>) => void;\r\n}\r\n\r\n/**\r\n * Deep-clones the shape of `values`, replacing every leaf with `true`. Used\r\n * by `save()` to mark every field as touched so per-field validation errors\r\n * actually render (FieldWrapper hides errors when touched is falsy).\r\n */\r\nfunction buildAllTouched(values: unknown): unknown {\r\n if (Array.isArray(values)) {\r\n return values.map(buildAllTouched);\r\n }\r\n if (values !== null && typeof values === 'object') {\r\n const out: Record<string, unknown> = {};\r\n for (const k of Object.keys(values as Record<string, unknown>)) {\r\n out[k] = buildAllTouched((values as Record<string, unknown>)[k]);\r\n }\r\n return out;\r\n }\r\n return true;\r\n}\r\n\r\nconst DEFAULT_CONDITION_CONFIG_KEY = '_conditionConfig';\r\n\r\n/**\r\n * ImperativeHandleBridge — lives inside FormikProvider so it can grab the\r\n * (controlled or internal) formik instance via context and expose the\r\n * `save / reset / validate / …` API on the host's ref. Renders nothing.\r\n */\r\nfunction ImperativeHandleBridge({\r\n handleRef, onSave, conditionConfigKey,\r\n}: {\r\n handleRef: React.Ref<FlowFormHandle> | undefined;\r\n onSave?: (payload: Record<string, unknown>, meta: { isValid: boolean; errors: Record<string, unknown> }) => void;\r\n conditionConfigKey: string;\r\n}) {\r\n const formik = useFormikContext<Record<string, unknown>>();\r\n\r\n // Capture formik via ref so the imperative methods always read the latest\r\n // state without forcing the consumer to re-grab the ref each render.\r\n const formikRef = useRef(formik);\r\n formikRef.current = formik;\r\n const onSaveRef = useRef(onSave);\r\n onSaveRef.current = onSave;\r\n\r\n useImperativeHandle(handleRef, () => ({\r\n save: async () => {\r\n const fk = formikRef.current;\r\n // Touch every field so errors render\r\n fk.setTouched(buildAllTouched(fk.values) as never, false);\r\n // Run validation\r\n const errors = (await fk.validateForm()) as Record<string, unknown>;\r\n const isValid = !errors || Object.keys(errors).length === 0;\r\n const values = { ...fk.values };\r\n if (isValid) onSaveRef.current?.(values, { isValid, errors: {} });\r\n return { isValid, values, errors: errors ?? {} };\r\n },\r\n reset: () => formikRef.current.resetForm(),\r\n validate: async () =>\r\n (await formikRef.current.validateForm()) as Record<string, unknown>,\r\n setErrors: (errors) => formikRef.current.setErrors(errors as never),\r\n getValues: () => formikRef.current.values,\r\n setValues: (values) => formikRef.current.setValues(values as never),\r\n }), []);\r\n\r\n // Silence \"key unused\" warnings — referenced for future-proofing\r\n void conditionConfigKey;\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * ConditionConfigBridge — supplies FieldConfigProvider with conditionConfig\r\n * and onConditionConfigChange that auto-roundtrip through `formik.values`\r\n * under a configurable key (default `_conditionConfig`).\r\n *\r\n * Why auto-roundtrip? In controlled mode (host passes `formik`) the When-\r\n * builder data has no natural home in formik.values, so previously it lived\r\n * in FlowForm's internal useState and was silently dropped on Save. By\r\n * writing it to formik.values via setFieldValue, it ships with every Save\r\n * payload, AND when the host re-opens an existing node and seeds formik\r\n * with its prior `_conditionConfig`, the builders restore automatically.\r\n *\r\n * Host can override by passing explicit `conditionConfig` + `onConditionConfigChange`\r\n * props — those take precedence over the auto-roundtrip.\r\n */\r\nfunction ConditionConfigBridge({\r\n conditionConfigKey,\r\n explicitConditionConfig, explicitOnConditionConfigChange,\r\n formulaConfig, onFormulaConfigChange,\r\n children,\r\n}: {\r\n conditionConfigKey: string;\r\n explicitConditionConfig?: ConditionConfig;\r\n explicitOnConditionConfigChange?: (config: ConditionConfig) => void;\r\n formulaConfig: FormulaConfig;\r\n onFormulaConfigChange: (config: FormulaConfig) => void;\r\n children: React.ReactNode;\r\n}) {\r\n const formik = useFormikContext<Record<string, unknown>>();\r\n\r\n // Read via dot-path so consumers can nest the sidecar under their\r\n // existing parent (e.g. `attributeMapping._conditionConfig`) — this lets\r\n // the host's existing save/load path for that parent automatically\r\n // round-trip conditions without any extra wiring.\r\n const conditionConfig: ConditionConfig =\r\n explicitConditionConfig\r\n ?? ((getValueByPath(formik.values, conditionConfigKey) as\r\n | ConditionConfig\r\n | undefined) ?? {});\r\n\r\n const onConditionConfigChange = (next: ConditionConfig) => {\r\n if (explicitOnConditionConfigChange) {\r\n explicitOnConditionConfigChange(next);\r\n return;\r\n }\r\n // setFieldValue accepts dot paths and auto-creates intermediate\r\n // objects. shouldValidate=false: condition config edits don't need to\r\n // retrigger the entire formik validation pipeline — it's auxiliary state.\r\n formik.setFieldValue(conditionConfigKey, next, false);\r\n };\r\n\r\n return (\r\n <FieldConfigProvider\r\n conditionConfig={conditionConfig}\r\n onConditionConfigChange={onConditionConfigChange}\r\n formulaConfig={formulaConfig}\r\n onFormulaConfigChange={onFormulaConfigChange}\r\n >\r\n {children}\r\n </FieldConfigProvider>\r\n );\r\n}\r\n\r\n// ─── ValuesObserver — fires onValuesChange on every Formik values change ──────\r\n\r\nfunction ValuesObserver({ onValuesChange }: { onValuesChange: (v: Record<string, unknown>) => void }) {\r\n const { values } = useFormikContext<Record<string, unknown>>();\r\n // Use identity (Formik gives a fresh object per change) instead of\r\n // JSON.stringify, which silently treats File/Date/Map etc. as equal and\r\n // is O(N) on every render for large schemas.\r\n useEffect(() => { onValuesChange(values); }, [values, onValuesChange]);\r\n return null;\r\n}\r\n\r\nfunction ValidityObserver({ onValidityChange }: { onValidityChange: (isValid: boolean) => void }) {\r\n const { isValid } = useFormikContext<Record<string, unknown>>();\r\n useEffect(() => { onValidityChange(isValid); }, [isValid, onValidityChange]);\r\n return null;\r\n}\r\n\r\n// ─── FlowForm ─────────────────────────────────────────────────────────────────\r\n\r\nexport const FlowForm = forwardRef<FlowFormHandle, FlowFormProps>(function FlowForm(props, ref) {\r\n // ── useFlowForm() hook path — all state lives in the hook instance ──────────\r\n if ('form' in props && props.form) {\r\n const { form } = props;\r\n return (\r\n <FormikProvider value={form._formik}>\r\n <FieldConfigProvider\r\n formulaConfig={form._formulaConfig}\r\n onFormulaConfigChange={form._onFormulaConfigChange}\r\n conditionConfig={form._conditionConfig}\r\n onConditionConfigChange={form._onConditionConfigChange}\r\n >\r\n <ImperativeHandleBridge\r\n handleRef={ref}\r\n conditionConfigKey={DEFAULT_CONDITION_CONFIG_KEY}\r\n />\r\n <ControlledRenderer schema={form._schema} formik={form._formik} />\r\n </FieldConfigProvider>\r\n </FormikProvider>\r\n );\r\n }\r\n\r\n // Internal fallback state — covers the simplest controlled API\r\n // (`<FlowForm formik={f} schema={s} />`) AND the rare case where the host\r\n // doesn't supply formulaConfig wiring. ConditionConfig auto-roundtrips\r\n // through `formik.values[conditionConfigKey]` so it survives Save without\r\n // any host wiring; formulaConfig still lives in local state until a host\r\n // explicitly threads it.\r\n const [internalFormulaConfig, setInternalFormulaConfig] = useState<FormulaConfig>({});\r\n const conditionConfigKey = props.conditionConfigKey ?? DEFAULT_CONDITION_CONFIG_KEY;\r\n const formulaConfig = props.formulaConfig ?? internalFormulaConfig;\r\n const onFormulaConfigChange = props.onFormulaConfigChange ?? setInternalFormulaConfig;\r\n\r\n const bridgedChildren = (children: React.ReactNode) => (\r\n <>\r\n <ImperativeHandleBridge\r\n handleRef={ref}\r\n onSave={props.onSave}\r\n conditionConfigKey={conditionConfigKey}\r\n />\r\n <ConditionConfigBridge\r\n conditionConfigKey={conditionConfigKey}\r\n explicitConditionConfig={props.conditionConfig}\r\n explicitOnConditionConfigChange={props.onConditionConfigChange}\r\n formulaConfig={formulaConfig}\r\n onFormulaConfigChange={onFormulaConfigChange}\r\n >\r\n {children}\r\n </ConditionConfigBridge>\r\n </>\r\n );\r\n\r\n const inner = props.formik\r\n ? (\r\n <FormikProvider value={props.formik}>\r\n {bridgedChildren(\r\n <ControlledRenderer schema={props.schema} formik={props.formik} />,\r\n )}\r\n </FormikProvider>\r\n )\r\n : (\r\n <Formik\r\n initialValues={props.initialValues}\r\n onSubmit={props.onSubmit}\r\n validationSchema={\r\n props.validationSchema\r\n ?? (props.schema?.fields ? buildValidationSchema(props.schema.fields) : undefined)\r\n }\r\n initialTouched={props.initialTouched}\r\n validateOnMount={!!props.initialTouched}\r\n enableReinitialize\r\n validateOnChange\r\n validateOnBlur\r\n >\r\n {({ values, errors, touched, isSubmitting, setFieldValue, setFieldTouched }) => (\r\n <Form id={props.formId}>\r\n {props.onValuesChange && <ValuesObserver onValuesChange={props.onValuesChange} />}\r\n {props.onValidityChange && <ValidityObserver onValidityChange={props.onValidityChange} />}\r\n {bridgedChildren(\r\n <FieldGrid\r\n schema={props.schema}\r\n values={values as Record<string, unknown>}\r\n errors={errors as Record<string, unknown>}\r\n touched={touched as Record<string, unknown>}\r\n setFieldValue={setFieldValue}\r\n setFieldTouched={setFieldTouched}\r\n />,\r\n )}\r\n {props.children?.({ isSubmitting })}\r\n </Form>\r\n )}\r\n </Formik>\r\n );\r\n\r\n let wrapped: React.ReactNode = inner;\r\n if (props.variableGroups) {\r\n wrapped = (\r\n <VariablePickerProvider groups={props.variableGroups}>\r\n {wrapped}\r\n </VariablePickerProvider>\r\n );\r\n }\r\n if ('optionsResolvers' in props && props.optionsResolvers) {\r\n wrapped = (\r\n <OptionsResolversProvider resolvers={props.optionsResolvers}>\r\n {wrapped}\r\n </OptionsResolversProvider>\r\n );\r\n }\r\n return <>{wrapped}</>;\r\n});\r\n\r\n// ─── Controlled renderer ──────────────────────────────────────────────────────\r\n\r\nfunction ControlledRenderer({\r\n schema, formik,\r\n}: {\r\n schema: FormSchema;\r\n formik: FormikProps<Record<string, unknown>>;\r\n}) {\r\n return (\r\n <FieldGrid\r\n schema={schema}\r\n values={formik.values}\r\n errors={formik.errors as Record<string, unknown>}\r\n touched={formik.touched as Record<string, unknown>}\r\n setFieldValue={formik.setFieldValue}\r\n setFieldTouched={formik.setFieldTouched}\r\n />\r\n );\r\n}\r\n\r\n// ─── FieldErrorBoundary ───────────────────────────────────────────────────────\r\n\r\ninterface FieldErrorBoundaryState { error: string | null }\r\n\r\nclass FieldErrorBoundary extends Component<\r\n { fieldId: string; children: React.ReactNode },\r\n FieldErrorBoundaryState\r\n> {\r\n state: FieldErrorBoundaryState = { error: null };\r\n\r\n static getDerivedStateFromError(err: Error): FieldErrorBoundaryState {\r\n return { error: err.message };\r\n }\r\n\r\n render() {\r\n if (this.state.error) {\r\n if (import.meta.env.DEV) {\r\n return (\r\n <div className=\"ff-form-col-12 ff-form-mb-4\">\r\n <div style={{\r\n padding: '8px 12px', borderRadius: 6,\r\n background: '#fef2f2', border: '1px solid #fecaca',\r\n fontSize: 12, color: '#dc2626', fontFamily: 'monospace',\r\n }}>\r\n <strong>[FlowForge] field \"{this.props.fieldId}\" crashed:</strong>{' '}\r\n {this.state.error}\r\n </div>\r\n </div>\r\n );\r\n }\r\n return null;\r\n }\r\n return this.props.children;\r\n }\r\n}\r\n\r\n// ─── FieldGrid ────────────────────────────────────────────────────────────────\r\n\r\ninterface FieldGridProps {\r\n schema: FormSchema;\r\n values: Record<string, unknown>;\r\n errors: Record<string, unknown>;\r\n touched: Record<string, unknown>;\r\n setFieldValue: (name: string, value: unknown) => void;\r\n setFieldTouched: (name: string, touched: boolean) => void;\r\n}\r\n\r\nfunction FieldGrid({\r\n schema, values, errors, touched,\r\n setFieldValue, setFieldTouched,\r\n}: FieldGridProps) {\r\n const layout = schema.layout ?? 'flat';\r\n const fields = layout === 'flat' ? (schema.fields ?? []) : [];\r\n const compact = schema.compact ?? false;\r\n\r\n return (\r\n <div className=\"ff-form-grid\">\r\n {fields.map((field) => {\r\n const key = resolveFieldKey(field);\r\n return (\r\n <FieldErrorBoundary key={key} fieldId={key}>\r\n <FieldRouter\r\n field={field}\r\n pathPrefix={key}\r\n depth={0}\r\n values={values}\r\n errors={errors}\r\n touched={touched}\r\n setFieldValue={setFieldValue}\r\n setFieldTouched={setFieldTouched}\r\n compact={compact}\r\n />\r\n </FieldErrorBoundary>\r\n );\r\n })}\r\n </div>\r\n );\r\n}\r\n\r\n// ─── FieldRouter ─────────────────────────────────────────────────────────────\r\n\r\ninterface FieldRouterProps {\r\n field: FieldDescriptor;\r\n /** Full dot-path to this field, e.g. \"evaluationConfig.input.dmnKey\" */\r\n pathPrefix: string;\r\n /** Nesting depth — 0 for top-level, increments per object group */\r\n depth?: number;\r\n values: Record<string, unknown>;\r\n errors: Record<string, unknown>;\r\n touched: Record<string, unknown>;\r\n setFieldValue: (name: string, value: unknown) => void;\r\n setFieldTouched: (name: string, touched: boolean) => void;\r\n compact?: boolean;\r\n /** Render label + input side-by-side (used inside object groups) */\r\n inlineLabel?: boolean;\r\n /**\r\n * Item-scoped values when rendered INSIDE an array row. Folded into\r\n * `ctx.item` for shouldHide / shouldDisable / shouldRequire / compute /\r\n * field validators. Undefined for top-level fields.\r\n */\r\n item?: Record<string, unknown>;\r\n}\r\n\r\nfunction FieldRouter({\r\n field, pathPrefix, depth = 0, values, errors, touched,\r\n setFieldValue, setFieldTouched, compact, inlineLabel, item,\r\n}: FieldRouterProps) {\r\n const { formulaConfig, onFormulaConfigChange, conditionConfig, onConditionConfigChange } = useFieldConfig();\r\n const ctx = { values, item };\r\n\r\n // ── Auto-register a per-field validator with the host's Formik ──────────────\r\n // This is what makes `required: true` / `pattern` / `min` / `max` / `minItems`\r\n // declared in the schema fire automatically in BOTH controlled and\r\n // uncontrolled modes — the host writes zero validation code. Formik's\r\n // useField hook registers our validator with its parent Formik (host-owned\r\n // in controlled mode, FlowForge-owned in uncontrolled). Errors merge into\r\n // `formik.errors[pathPrefix]` and flow back through `errors` prop below.\r\n //\r\n // We capture `values` AND `item` via refs so the validator closure stays\r\n // stable across renders while still seeing the latest item-scoped values\r\n // (needed for shouldHide rules like `({ item }) => item.valueSource !== 'template'`).\r\n const valuesRef = useRef(values);\r\n valuesRef.current = values;\r\n const itemRef = useRef(item);\r\n itemRef.current = item;\r\n const validate = useMemo(() => {\r\n const base = buildFieldValidator(field);\r\n return async (value: unknown) => {\r\n const liveCtx = { values: valuesRef.current, item: itemRef.current };\r\n if (field.shouldHide?.(liveCtx) ?? field.hidden) return undefined;\r\n return base(value);\r\n };\r\n }, [field]);\r\n // Subscribe purely for validator registration — returned [field, meta]\r\n // tuple is unused; FlowForge already drives value/onChange through its\r\n // own pathway (setFieldValue / setFieldTouched).\r\n useField({ name: pathPrefix, validate });\r\n\r\n const hidden = field.shouldHide?.(ctx) ?? field.hidden ?? false;\r\n\r\n // ── Auto-clear orphan values when shouldHide flips to true ──────────────────\r\n // Opt-in via `clearOnHide: true`. Fires on first mount when the field is\r\n // already hidden (e.g. saved data was for a different value-source path) AND\r\n // on every subsequent false→true transition. Reset target = `defaultValue`\r\n // when declared, else `undefined`. The empty-check avoids a write loop when\r\n // there's nothing to clear.\r\n const prevHiddenRef = useRef<boolean | undefined>(undefined);\r\n useEffect(() => {\r\n const wasHidden = prevHiddenRef.current;\r\n prevHiddenRef.current = hidden;\r\n if (!hidden || wasHidden === true) return;\r\n if (!field.clearOnHide) return;\r\n const currentVal = getValueByPath(valuesRef.current, pathPrefix);\r\n const isEmpty =\r\n currentVal === undefined\r\n || currentVal === null\r\n || currentVal === ''\r\n || (Array.isArray(currentVal) && currentVal.length === 0);\r\n if (isEmpty) return;\r\n setFieldValue(pathPrefix, field.defaultValue);\r\n }, [hidden, pathPrefix, field.clearOnHide, field.defaultValue, setFieldValue]);\r\n\r\n if (hidden) return null;\r\n\r\n // ── Object field — render children recursively ────────────────────────────\r\n if (field.type === 'object') {\r\n return (\r\n <FieldWrapper field={field} compact={compact}>\r\n <ObjectField\r\n field={field}\r\n pathPrefix={pathPrefix}\r\n depth={depth}\r\n values={values}\r\n errors={errors}\r\n touched={touched}\r\n setFieldValue={setFieldValue}\r\n setFieldTouched={setFieldTouched}\r\n compact={compact}\r\n item={item}\r\n renderFieldRouter={(props: ChildRouterProps) => (\r\n <FieldRouter\r\n key={props.pathPrefix}\r\n field={props.field}\r\n pathPrefix={props.pathPrefix}\r\n depth={props.depth}\r\n values={props.values}\r\n errors={props.errors}\r\n touched={props.touched}\r\n setFieldValue={props.setFieldValue}\r\n setFieldTouched={props.setFieldTouched}\r\n compact={props.compact}\r\n inlineLabel={props.inlineLabel}\r\n item={props.item}\r\n />\r\n )}\r\n />\r\n </FieldWrapper>\r\n );\r\n }\r\n\r\n // ── Array field with item children — route through the real renderer ─────\r\n // When an array carries `children` (or itemFields), each item's children\r\n // render through this same FieldRouter at `${pathPrefix}.${i}.${childId}`, so\r\n // every feature (condition builder, formula, react-select…) works inside\r\n // array items. Legacy primitive / itemType modes fall through to LeafField.\r\n if (field.type === 'array' && Array.isArray(field.children ?? (field as { itemFields?: unknown }).itemFields)) {\r\n return (\r\n <FieldWrapper field={field} compact={compact}>\r\n <ArrayField\r\n field={field}\r\n value={getValueByPath(values, pathPrefix)}\r\n values={values}\r\n onChange={(v: unknown) => setFieldValue(pathPrefix, v)}\r\n onBlur={() => setFieldTouched(pathPrefix, true)}\r\n pathPrefix={pathPrefix}\r\n depth={depth}\r\n compact={compact}\r\n parentErrors={errors}\r\n parentTouched={touched}\r\n parentSetFieldValue={setFieldValue}\r\n parentSetFieldTouched={setFieldTouched}\r\n renderFieldRouter={(props: ChildRouterProps) => (\r\n <FieldRouter\r\n key={props.pathPrefix}\r\n field={props.field}\r\n pathPrefix={props.pathPrefix}\r\n depth={props.depth}\r\n values={props.values}\r\n errors={props.errors}\r\n touched={props.touched}\r\n setFieldValue={props.setFieldValue}\r\n setFieldTouched={props.setFieldTouched}\r\n compact={props.compact}\r\n inlineLabel={props.inlineLabel}\r\n item={props.item}\r\n />\r\n )}\r\n />\r\n </FieldWrapper>\r\n );\r\n }\r\n\r\n // ── Tabs field ────────────────────────────────────────────────────────────\r\n if (field.type === 'tabs') {\r\n return (\r\n <FieldWrapper field={field} compact={compact}>\r\n <TabsField\r\n field={field as TabsFieldDescriptor}\r\n pathPrefix={pathPrefix}\r\n depth={depth}\r\n values={values}\r\n errors={errors}\r\n touched={touched}\r\n setFieldValue={setFieldValue}\r\n setFieldTouched={setFieldTouched}\r\n compact={compact}\r\n renderFieldRouter={(props: ChildRouterProps) => (\r\n <FieldRouter\r\n key={props.pathPrefix}\r\n field={props.field}\r\n pathPrefix={props.pathPrefix}\r\n depth={props.depth}\r\n values={props.values}\r\n errors={props.errors}\r\n touched={props.touched}\r\n setFieldValue={props.setFieldValue}\r\n setFieldTouched={props.setFieldTouched}\r\n compact={props.compact}\r\n inlineLabel={props.inlineLabel}\r\n item={props.item}\r\n />\r\n )}\r\n />\r\n </FieldWrapper>\r\n );\r\n }\r\n\r\n // ── Leaf field — delegated so its hooks always run in stable order ────────\r\n return (\r\n <LeafField\r\n field={field}\r\n pathPrefix={pathPrefix}\r\n values={values}\r\n errors={errors}\r\n touched={touched}\r\n setFieldValue={setFieldValue}\r\n setFieldTouched={setFieldTouched}\r\n compact={compact}\r\n inlineLabel={inlineLabel}\r\n item={item}\r\n formulaConfig={formulaConfig}\r\n onFormulaConfigChange={onFormulaConfigChange}\r\n conditionConfig={conditionConfig}\r\n onConditionConfigChange={onConditionConfigChange}\r\n />\r\n );\r\n}\r\n\r\n/**\r\n * LeafField is the leaf branch of FieldRouter. It's a separate component so\r\n * its hooks (the `compute` effect) always run in the same order — they're\r\n * no longer gated by FieldRouter's early returns for `hidden`/`object`/`tabs`.\r\n */\r\ninterface LeafFieldProps {\r\n field: FieldDescriptor;\r\n pathPrefix: string;\r\n values: Record<string, unknown>;\r\n errors: Record<string, unknown>;\r\n touched: Record<string, unknown>;\r\n setFieldValue: (path: string, value: unknown) => void;\r\n setFieldTouched: (path: string, touched: boolean) => void;\r\n compact?: boolean;\r\n inlineLabel?: boolean;\r\n /** Item-scoped values when rendered inside an array row. */\r\n item?: Record<string, unknown>;\r\n formulaConfig?: FormulaConfig;\r\n onFormulaConfigChange?: (config: FormulaConfig) => void;\r\n conditionConfig?: ConditionConfig;\r\n onConditionConfigChange?: (config: ConditionConfig) => void;\r\n}\r\n\r\nfunction LeafField({\r\n field, pathPrefix, values, errors, touched,\r\n setFieldValue, setFieldTouched, compact, inlineLabel, item,\r\n formulaConfig, onFormulaConfigChange,\r\n conditionConfig, onConditionConfigChange,\r\n}: LeafFieldProps) {\r\n const ctx = { values, item };\r\n const value = getValueByPath(values, pathPrefix);\r\n\r\n // Compute effect — runs in stable order because LeafField only renders when\r\n // the leaf path is taken. Reads field.compute via a ref so closure stays\r\n // fresh even when the parent re-creates compute() each render.\r\n const computeRef = useRef(field.compute);\r\n computeRef.current = field.compute;\r\n useEffect(() => {\r\n const fn = computeRef.current;\r\n if (!fn) return;\r\n const next = fn({ values });\r\n if (next !== value) setFieldValue(pathPrefix, next);\r\n // values identity (not JSON.stringify — that broke File values) drives this\r\n }, [values, value, pathPrefix, setFieldValue]);\r\n\r\n const Component = fieldRegistry.get(field.type);\r\n if (!Component) {\r\n if (import.meta.env.DEV) {\r\n // Throw in DEV so the FieldErrorBoundary surfaces a visible error\r\n // box right where the field would render. Include a \"did you mean\"\r\n // suggestion picked by Levenshtein distance against the registered\r\n // types — catches typos like `type: 'tetx'` instantly.\r\n const registered = fieldRegistry.keys();\r\n const suggestion = closestMatch(field.type, registered);\r\n throw new Error(\r\n `[FlowForge] Unknown field type \"${field.type}\" at path \"${pathPrefix}\".${\r\n suggestion ? ` Did you mean \"${suggestion}\"?` : ''\r\n } Registered types: ${registered.sort().join(', ')}`,\r\n );\r\n }\r\n // PROD: fail quietly so a single bad descriptor doesn't take down the\r\n // whole form. The DEV-time throw is enough to catch it during build.\r\n return null;\r\n }\r\n\r\n const disabled =\r\n typeof field.disabled === 'function'\r\n ? field.disabled(ctx)\r\n : (field.shouldDisable?.(ctx) ?? field.disabled ?? false);\r\n\r\n const error = getValueByPath(errors, pathPrefix) as string | undefined;\r\n const isTouched = !!getValueByPath(touched, pathPrefix);\r\n const computedValue = field.compute?.(ctx);\r\n\r\n const source = computedValue !== undefined ? computedValue : value;\r\n const displayValue = field.transform?.in ? field.transform.in(source) : source;\r\n\r\n const handleChange = (rawDisplayValue: unknown) => {\r\n if (field.compute) return;\r\n const stored = field.transform?.out\r\n ? field.transform.out(rawDisplayValue)\r\n : rawDisplayValue;\r\n setFieldValue(pathPrefix, stored);\r\n setFieldTouched(pathPrefix, true);\r\n field.onChange?.(stored, { values, setFieldValue });\r\n };\r\n\r\n const conditionEntries = field.condition && conditionConfig\r\n ? (conditionConfig[pathPrefix] ?? [])\r\n : [];\r\n\r\n const handleConditionUpdate = (nodes: ConditionNode[]) => {\r\n if (!onConditionConfigChange || !conditionConfig) return;\r\n if (nodes.length === 0) {\r\n const next = { ...conditionConfig };\r\n delete next[pathPrefix];\r\n onConditionConfigChange(next);\r\n } else {\r\n onConditionConfigChange({ ...conditionConfig, [pathPrefix]: nodes });\r\n }\r\n };\r\n\r\n const fieldProps = {\r\n field: { ...field, disabled: disabled as boolean, id: pathPrefix, name: pathPrefix },\r\n value: displayValue,\r\n values,\r\n onChange: handleChange,\r\n onBlur: () => setFieldTouched(pathPrefix, true),\r\n error,\r\n touched: isTouched,\r\n formulaConfig,\r\n onFormulaConfigChange,\r\n };\r\n\r\n if (inlineLabel) {\r\n return <Component {...fieldProps} inlineLabel />;\r\n }\r\n\r\n return (\r\n <FieldWrapper field={field} compact={compact}>\r\n <Component {...fieldProps} touched={isTouched} />\r\n {field.condition && (\r\n <ConditionRow\r\n conditionDef={field.condition}\r\n entries={conditionEntries}\r\n onUpdate={handleConditionUpdate}\r\n fieldPath={pathPrefix}\r\n formValues={values}\r\n />\r\n )}\r\n </FieldWrapper>\r\n );\r\n}\r\n\r\n/** @deprecated Use FlowForm */\r\nexport const DynamicFormRenderer = FlowForm;\r\n"],"names":["registry","fieldRegistry","type","component","FF","inputStyle","opts","buildSelectStyles","hasError","isMulti","base","state","isDisabled","errorTextStyle","helperTextStyle","EXPR_RE","DE_ONLY_RE","extractLabel","path","matches","parts","escapeFormulaPathSegment","segment","buildFormulaPath","root","segments","s","parseToAST","raw","configEnabled","re","nodes","last","m","serializeAST","serializeNode","node","serializeASTAsConfig","serializeNodeAsConfig","buildFieldConfig","VALUELESS_CONDITION_OPERATORS","isConditionGroup","conditionOperatorNeedsValue","operator","toPathReference","value","trimmed","deMatch","serializeConditionEntry","entry","result","serializeConditionNode","buildEvaluationPayload","values","conditionConfig","conditions","fieldId","lit","v","OPERATOR_EXPR","r","nodeToExpression","nodesToExpression","ref","fn","i","expr","serializeConditionExpressions","hasFormulaTokens","astHasRefs","n","astToTokens","tokens","tokenize","FORMULA_PREFIX","FORMULA_SUFFIX","isFormula","wrapFormula","expression","unwrapFormula","stripFormulaTokens","FieldLabel","label","required","showOptional","info","htmlFor","dataTestId","jsxs","jsx","Tooltip","IconButton","MdInfoOutline","CHIP_STYLE","PREFIX_CSS","buildChipSpan","args","span","prefix","buildPathExpr","VariablePickerContext","createContext","VariablePickerProvider","groups","children","isOpen","setIsOpen","useState","activeFieldId","setActiveFieldId","anchorEl","setAnchorEl","activeFieldRef","useRef","formulaActiveCountRef","openPicker","useCallback","closePicker","notifyFormulaToggle","on","anchor","registerField","field","saveRange","range","insertVariable","active","editor","chip","sel","fid","useVariablePickerContext","useContext","buildSharedChipSpan","DRAG_DATA_KEY","flattenItems","items","item","matchesSearch","query","q","_a","VariableRow","ctx","dragging","setDragging","handleDragStart","e","ghost","Box","MdDataObject","Typography","VariableGroupSection","group","searchQuery","open","setOpen","visibleItems","useMemo","leaves","MdKeyboardArrowRight","Collapse","VariablePicker","width","title","mode","floating","search","setSearch","pos","setPos","panelRef","useEffect","handleMouseDown","target","insidePanel","insideAnchor","_b","buttonRect","panelWidth","panelHeight","container","anchorRect","spaceLeft","spaceRight","left","rawTop","top","hasResults","panel","MdClose","MdSearch","InputBase","Divider","ReactDOM","createChipSpan","token","el","c","serializeDOM","applyTokensToDOM","buildFragment","frag","serializeFragment","FormulaInput","onExpressionChange","onBlur","placeholder","disabled","error","id","formulaConfigEnabled","onFormulaConfigToggle","onPickerOpen","compact","editorRef","formulaToggleBtnRef","lastSerialized","isComposing","isEmpty","pickerCtx","dropState","setDropState","errorToast","setErrorToast","groupLabelMap","incoming","groupsKey","key","domLabelMap","t","emit","ast","handleInput","handlePaste","text","handleCopy","handleCut","handleKeyDown","handleInsert","buildDropChipSpan","handleFocus","handleSelectionChange","handleDragOver","handleDragLeave","handleDrop","variable","getCaretRangeAtPoint","actionCount","prRight","borderColor","boxShadow","next","Snackbar","Alert","x","y","TextField","rawField","onChange","touched","formulaConfig","onFormulaConfigChange","inlineLabel","isFormulaEnabled","setFormulaConfigEnabled","formulaConfigEnabledRef","setExpression","inputValue","setInputValue","lastEmittedRef","str","handleExpressionChange","serialized","toggleFormulaConfig","reparsed","newSerialized","updated","showError","labelNode","helperNode","inputBlock","Fragment","hasPrefix","hasSuffix","hasCopy","hasEndAdornment","nativeInputStyle","wrapperStyle","adornmentStyle","bareInputStyle","inputEl","MdContentCopy","plainInput","_extends","_typeof","o","toPrimitive","toPropertyKey","_defineProperty","ownKeys","_objectSpread2","defineProperty","_classCallCheck","a","_defineProperties","_createClass","_setPrototypeOf","_inherits","setPrototypeOf","_getPrototypeOf","_isNativeReflectConstruct","_assertThisInitialized","_possibleConstructorReturn","assertThisInitialized","_createSuper","isNativeReflectConstruct","getPrototypeOf","possibleConstructorReturn","_arrayLikeToArray","_arrayWithoutHoles","arrayLikeToArray","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_toConsumableArray","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread","_arrayWithHoles","_iterableToArrayLimit","l","u","f","_nonIterableRest","_slicedToArray","arrayWithHoles","iterableToArrayLimit","nonIterableRest","_objectWithoutPropertiesLoose","_objectWithoutProperties","objectWithoutPropertiesLoose","_taggedTemplateLiteral","min","max","round","floor","createCoords","rectToClientRect","rect","height","hasWindow","getNodeName","isNode","getWindow","_node$ownerDocument","getDocumentElement","_ref","isElement","isHTMLElement","isShadowRoot","isOverflowElement","element","overflow","overflowX","overflowY","display","getComputedStyle","isWebKitValue","isWebKit","isLastTraversableNode","getParentNode","getNearestOverflowAncestor","parentNode","getOverflowAncestors","list","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","css","getComputedStyle$1","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","$","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","offsetParent","clientRect","scale","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","rectsAreEqual","b","observeMove","onMove","io","timeoutId","cleanup","_io","refresh","skip","threshold","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","options","isFirstUpdate","handleObserve","entries","ratio","autoUpdate","reference","update","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","ancestor","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","index","useLayoutEffect","_excluded$4","noop","applyPrefixToName","name","classNames","_len","classNameList","_key","arr","cleanValue","isArray","cleanCommonProps","props","innerProps","_objectSpread","getStyleProps","classNamesState","cx","getStyles","getClassNames","className","handleInputChange","actionMeta","onInputChange","_newValue","isDocumentElement","normalizedHeight","getScrollTop","scrollTo","getScrollParent","style","excludeStaticParent","overflowRx","parent","easeOutCubic","d","animatedScrollTo","to","duration","callback","start","change","increment","currentTime","animateScroll","val","scrollIntoView","menuEl","focusedEl","menuRect","focusedRect","overScroll","getBoundingClientObj","isTouchCapable","isMobileDevice","passiveOptionAccessed","w","supportsPassiveEvents","notNullish","arg","valueTernary","multiValue","singleValue","removeProps","propsObj","_len2","properties","_key2","propsMap","_ref2","newProps","_ref3","_ref4","_excluded$3","_excluded2$1","getMenuPlacement","preferredMaxHeight","minHeight","preferredPlacement","shouldScroll","isFixedPosition","controlHeight","scrollParent","defaultState","_scrollParent$getBoun","scrollHeight","_menuEl$getBoundingCl","menuBottom","menuHeight","menuTop","_menuEl$offsetParent$","containerTop","viewHeight","scrollTop","marginBottom","marginTop","viewSpaceAbove","viewSpaceBelow","scrollSpaceAbove","scrollSpaceBelow","scrollDown","scrollUp","scrollDuration","constrainedHeight","_constrainedHeight","spaceAbove","_constrainedHeight2","alignToControl","placement","placementToCSSProp","coercePlacement","p","menuCSS","unstyled","_ref2$theme","borderRadius","spacing","colors","PortalPlacementContext","MenuPlacer","minMenuHeight","maxMenuHeight","menuPlacement","menuPosition","menuShouldScrollIntoView","theme","setPortalPlacement","_useState","_useState2","maxHeight","setMaxHeight","_useState3","_useState4","setPlacement","Menu","innerRef","Menu$1","menuListCSS","baseUnit","MenuList","noticeCSS","_ref5","_ref5$theme","noOptionsMessageCSS","loadingMessageCSS","NoOptionsMessage","_ref6","_ref6$children","restProps","LoadingMessage","_ref7","_ref7$children","menuPortalCSS","_ref8","offset","position","MenuPortal","appendTo","controlElement","menuPortalRef","cleanupRef","_useState5","_useState6","portalPlacementContext","_useState7","_useState8","computedPosition","setComputedPosition","updateComputedPosition","scrollDistance","runAutoUpdate","setMenuPortalElement","menuPortalElement","menuWrapper","createPortal","containerCSS","isRtl","SelectContainer","valueContainerCSS","hasValue","controlShouldRenderValue","ValueContainer","indicatorsContainerCSS","IndicatorsContainer","_templateObject","_excluded$2","_excluded2","_EMOTION_STRINGIFIED_CSS_ERROR__","Svg","size","CrossIcon","DownChevron","baseCSS","isFocused","_ref3$theme","dropdownIndicatorCSS","DropdownIndicator","clearIndicatorCSS","ClearIndicator","indicatorSeparatorCSS","_ref4$theme","IndicatorSeparator","loadingDotAnimations","keyframes","loadingIndicatorCSS","LoadingDot","delay","css$2","LoadingIndicator","_ref7$size","css$1","_ref$theme","Control","menuIsOpen","Control$1","_excluded$1","groupCSS","Group","Heading","headingProps","selectProps","groupHeadingCSS","GroupHeading","_cleanCommonProps","Group$1","_excluded","inputCSS","containerStyle","spacingStyle","isHidden","Input","inputClassName","Input$1","multiValueCSS","multiValueLabelCSS","cropWithEllipsis","multiValueRemoveCSS","MultiValueGeneric","MultiValueContainer","MultiValueLabel","MultiValueRemove","MultiValue","components","data","Container","Label","Remove","MultiValue$1","optionCSS","isSelected","Option","Option$1","placeholderCSS","Placeholder","Placeholder$1","SingleValue","SingleValue$1","defaultComponents","safeIsNaN","isEqual","first","second","areInputsEqual","newInputs","lastInputs","memoizeOne","resultFn","cache","memoized","newArgs","_i","lastResult","_EMOTION_STRINGIFIED_CSS_ERROR__$2","A11yText","A11yText$1","defaultAriaLiveMessages","isSearchable","tabSelectsValue","context","isInitialFocus","action","_props$label","labels","focused","_props$label2","selectValue","isAppleDevice","getArrayIndex","status","resultsMessage","LiveRegion","ariaSelection","focusedOption","focusedValue","focusableOptions","ariaLiveMessages","getOptionLabel","isOptionDisabled","screenReaderStatus","isLoading","ariaLabel","ariaLive","messages","ariaSelected","message","option","selectedOptions","removedValue","removedValues","asOption","selected","multiSelected","onChangeProps","ariaFocused","focusMsg","onFocusProps","ariaResults","resultsMsg","ariaGuidance","guidanceMsg","ScreenReaderText","LiveRegion$1","diacritics","anyDiacritic","diacriticToBase","diacritic","j","stripDiacritics","match","memoizedStripDiacriticsForInput","trimString","defaultStringify","createFilter","config","rawInput","_ignoreCase$ignoreAcc","ignoreCase","ignoreAccents","stringify","trim","matchFrom","input","candidate","DummyInput","filteredProps","cancelScroll","event","useScrollCapture","isEnabled","onBottomArrive","onBottomLeave","onTopArrive","onTopLeave","isBottom","isTop","touchStart","scrollTarget","handleEventDelta","delta","_scrollTarget$current","clientHeight","isDeltaPositive","availableScroll","shouldCancelScroll","onWheel","onTouchStart","onTouchMove","deltaY","startListening","notPassive","stopListening","STYLE_KEYS","LOCK_STYLES","preventTouchMove","allowTouchMove","preventInertiaScroll","totalScroll","currentScroll","isTouchDevice","canUseDOM","activeScrollLocks","listenerOptions","useScrollLock","_ref$accountForScroll","accountForScrollbars","originalStyles","addScrollLock","touchScrollTarget","targetStyle","currentPadding","clientWidth","adjustedPadding","removeScrollLock","_EMOTION_STRINGIFIED_CSS_ERROR__$1","blurSelectInput","_ref2$1","ScrollManager","lockEnabled","_ref$captureEnabled","captureEnabled","setScrollCaptureTarget","setScrollLockTarget","targetRef","RequiredInput","onFocus","RequiredInput$1","testPlatform","_window$navigator$use","isIPhone","isMac","isIPad","isIOS","formatGroupLabel","getOptionLabel$1","getOptionValue$1","defaultStyles","menuGutter","defaultTheme","defaultProps","count","toCategorizedOption","_isOptionDisabled","_isOptionSelected","getOptionValue","buildCategorizedOptions","groupOrOption","groupOrOptionIndex","categorizedOptions","optionIndex","categorizedOption","isFocusable","buildFocusableOptionsFromCategorizedOptions","optionsAccumulator","buildFocusableOptionsWithIds","optionId","buildFocusableOptions","_props$inputValue","shouldHideSelectedOptions","_filterOption","getNextFocusedValue","nextSelectValue","lastSelectValue","lastFocusedIndex","nextFocusedIndex","getNextFocusedOption","lastFocusedOption","getFocusedOptionId","focusableOptionsWithIds","_focusableOptionsWith","focusedOptionId","hideSelectedOptions","instanceId","Select","_Component","_super","_props","_this","newValue","_this$props","_this$props2","closeMenuOnSelect","_this$props3","blurInputOnSelect","deselected","newValueArray","lastSelectedValue","custom","_this$props$className","_this$props$className2","openMenuOnClick","_this$props4","touches","touch","deltaX","moveThreshold","prevInputValue","focusedOptionIndex","_this$props5","backspaceRemovesValue","escapeClearsValue","isClearable","onKeyDown","openMenuOnFocus","_this$state","prevProps","_this$props6","focusOption","_this2","_this$state2","openAtIndex","selectedIndex","direction","_this$state3","focusedIndex","lastIndex","nextFocus","pageSize","clearValue","getValue","selectOption","setValue","_this$props7","_inputValue","_selectValue","_this$props8","inputId","tabIndex","form","_this$getComponents","_this$state4","inputIsHidden","commonProps","ariaAttributes","React","_this3","_this$getComponents2","_this$props9","_this$state5","opt","isOptionFocused","_this$getComponents3","_this$props10","_this$getComponents4","_this$props11","_this$getComponents5","_this$getComponents6","_this4","_this$getComponents7","_this$props12","captureMenuScroll","loadingMessage","menuPortalTarget","menuShouldBlockScroll","noOptionsMessage","onMenuScrollToTop","onMenuScrollToBottom","render","onHover","onSelect","menuUI","_data","groupIndex","groupId","headingId","_message","menuPlacementProps","menuElement","_ref4$placerProps","scrollTargetRef","instance","_this5","_this$props13","delimiter","_value","_this$state6","_this$getComponents8","_this$props14","clearFocusValueOnUpdate","inputIsHiddenAfterUpdate","prevWasFocused","instancePrefix","newMenuOptionsState","newInputIsHiddenState","newAriaSelection","hasKeptFocus","Component","useStateManager","_ref$defaultInputValu","defaultInputValue","_ref$defaultMenuIsOpe","defaultMenuIsOpen","_ref$defaultValue","defaultValue","propsInputValue","propsMenuIsOpen","propsOnChange","propsOnInputChange","propsOnMenuClose","propsOnMenuOpen","propsValue","restSelectProps","stateInputValue","setStateInputValue","stateMenuIsOpen","setStateMenuIsOpen","stateValue","setStateValue","onMenuOpen","onMenuClose","useAsync","_ref$defaultOptions","propsDefaultOptions","_ref$cacheOptions","cacheOptions","propsLoadOptions","_ref$isLoading","propsIsLoading","_ref$filterOption","filterOption","lastRequest","mounted","defaultOptions","setDefaultOptions","setIsLoading","loadedInputValue","setLoadedInputValue","_useState9","_useState10","loadedOptions","setLoadedOptions","_useState11","_useState12","passEmptyOptions","setPassEmptyOptions","_useState13","_useState14","optionsCache","setOptionsCache","_useState15","_useState16","prevDefaultOptions","setPrevDefaultOptions","_useState17","_useState18","prevCacheOptions","setPrevCacheOptions","loadOptions","loader","request","AsyncSelect","forwardRef","stateManagedProps","AsyncSelect$1","compareOption","accessors","optionValue","optionLabel","builtins","selectOptions","useCreatable","_ref$allowCreateWhile","allowCreateWhileLoading","_ref$createOptionPosi","createOptionPosition","_ref$formatCreateLabe","formatCreateLabel","_ref$isValidNewOption","isValidNewOption","_ref$getNewOptionData","getNewOptionData","onCreateOption","_ref$options","propsOptions","_restSelectProps$getO","_restSelectProps$getO2","newOption","valueArray","newOptionData","newActionMeta","CreatableSelect","creatableProps","CreatableSelect$1","AsyncCreatableSelect","stateManagerProps","AsyncCreatableSelect$1","FormulaOverlay","helperText","renderNative","isFormulaCapable","toggleBtnRef","formulaActive","setFormulaActive","formulaActiveRef","toggleFormula","OptionsResolversContext","cacheRefSentinel","OptionsResolversProvider","resolvers","cacheRef","inFlightRef","invalidate","resolverId","depsKey","bucket","normalizeDeps","dependsOn","params","out","fieldName","stableKey","obj","keys","acc","k","useDynamicOptions","source","hidden","resolver","deps","abortRef","runResolver","cursor","cursorKey","pageBucket","depsBucket","cached","flightBucket","flightDeps","inFlight","controller","resolverCtx","err","loadValue","ids","idResolver","res","idStrings","useOptionsResolvers","SelectField","getVal","staticOptions","dyn","effectiveLoadOptions","effectiveLoadValue","asyncKey","setAsyncKey","dependsOnValues","isAsync","asyncSelected","setAsyncSelected","hydratedRef","selectedValue","vals","handleChange","renderSelect","isCreatable","ReactSelect","optionLabelStyles","optionDescriptionStyles","DescriptiveOptionComponent","MdCheckCircle","DescriptiveSingleValue","buildDescriptiveStyles","DescriptiveSelectField","valueSet","selectedOption","nativeSelect","nextValues","nextValue","ITEM_KEY","_seq","uid","ensureKeys","stripKeys","_k","__value","rest","getKey","emptyObjectFromFields","fields","emptyItem","itemType","itemFields","toArray","itemValue","PrimitiveRow","inputType","MuiTextField","SelectRow","MenuItem","ObjectRow","depth","colSpan","widthPct","ArrayField","RowShell","itemLabel","canRemove","onRemove","emptyChildObject","RouterArrayBody","pathPrefix","childFields","errors","setFieldValue","setFieldTouched","renderFieldRouter","minItems","maxItems","setKeys","prev","add","removeAt","_","desc","rowValue","child","childKey","childPath","MdAdd","parentErrors","parentTouched","parentSetFieldValue","parentSetFieldTouched","setItems","reKeyed","keyed","clean","remove","colClass","FieldWrapper","buildInitialValues","current","ChildField","allValues","SchemaField","valueRef","handleChildChange","childValue","NumberField","lastEmitted","hasAdornment","baseInputStyle","adornStyle","handleBlur","num","ToggleField","switchNode","FormControlLabel","Switch","RadioGroupField","stringValue","RadioGroup","Radio","DateField","htmlType","TagsField","tags","setInput","setFocused","inputRef","addTag","tag","removeTag","idx","SliderField","step","sliderValue","setSliderValue","Slider","ColorField","color","setColor","formatBytes","bytes","FileField","dragOver","setDragOver","sizeError","setSizeError","files","handleFiles","fileList","oversized","removeFile","MdUploadFile","MdInsertDriveFile","CodeMirrorLazy","loadExtensions","lang","LazyCodeMirror","language","readOnly","basicSetup","fallbackHeight","extensions","setExtensions","ext","skeleton","Suspense","JsonEditorField","jsonError","setJsonError","code","setCode","formatJson","formatted","rows","LANG_LABELS","CodeField","langLabel","ReactQuill","mod","TOOLBAR","RichTextField","html","setHtml","showToolbar","OPEN_EVENT","fireOpenEvent","InfiniteMenuList","onScrollBottom","hasMore","hasOptionChildren","elRef","setRef","handler","SpinnerIcon","useInfiniteOptions","loadPage","loadSelected","currentValues","fetchedOptions","setFetchedOptions","page","setPage","setHasMore","selectedCacheRef","selectedCacheVersion","setSelectedCacheVersion","debouncedSearch","setDebouncedSearch","debounceRef","prevSearchRef","ctrl","deduped","dedupOptions","isAbortError","loadMore","nextPage","hydratingRef","missing","handleMenuClose","dropdownOptions","lookupOption","inFetched","updateSelectedCache","picked","seen","toStringArray","InfiniteSelectField","handleMenuOpen","infiniteClose","infiniteCloseRef","prevOpenRef","infiniteRef","Cache","maxSize","SPLIT_REGEX","DIGIT_REGEX","LEAD_DIGIT_REGEX","SPEC_CHAR_REGEX","CLEAN_QUOTES_REGEX","MAX_CACHE_SIZE","pathCache","getCache","propertyExpr","split","normalizePath","safe","len","part","isQuoted","cb","thisArg","forEach","iter","isBracket","shouldBeQuoted","hasLeadingNumber","hasSpecialChars","reWords","words","join","camelCase","snakeCase","tinyCase","toposortModule","edges","toposort","uniqueNodes","sorted","visited","outgoingEdges","makeOutgoingEdges","nodesHash","makeNodesHash","edge","visit","predecessors","nodeRep","outgoing","toString","errorToString","regExpToString","symbolToString","SYMBOL_REGEXP","printNumber","printSimpleValue","quoteStrings","typeOf","printValue","_Symbol$toStringTag","_Symbol$hasInstance","_Symbol$toStringTag2","strReg","ValidationErrorNoStack","errorOrErrors","ValidationError","innerErrors","disableStack","errorNoStack","inst","mixed","originalValue","castMsg","string","number","date","boolean","object","array","tuple","spec","typeLen","isSchema","Condition","refs","is","then","otherwise","check","schema","_branch","branch","builder","prefixes","Reference","getter","isAbsent","createValidation","validate","panic","test","skipAbsent","abortEarly","disableStackTrace","resolveOptions","createError","overrides","nextParams","resolveParams","invalid","resolveMaybeRef","handleResult","validOrError","handleError","_result","getIn","lastPart","lastPartDebug","_part","isTuple","ReferenceSet","description","resolve","newItems","removeItems","clone","src","copy","createStandardPath","currentSegment","inBrackets","inQuotes","char","createStandardIssues","parentPath","issuesFromValidationError","_error$inner","Schema","before","combined","mergedSpec","prevSchema","condition","_options$strict","_options$abortEarly","_options$recursive","_options$disableStack","resolvedSchema","allowOptionality","formattedValue","formattedResult","rawValue","prevValue","strict","initialTests","initialErrors","runOptions","fired","tests","panicOnce","nextOnce","nestedErrors","originalParent","isIndex","testOptions","_options$disableStack2","reject","parsed","validated","_options$disableStack3","def","isStrict","nullable","optional","isExclusive","dep","enums","valids","resolved","invalids","strip","meta","method","alias","create$7","BooleanSchema","_raw","msg","isoReg","parseIsoDate","struct","parseDateStruct","totalMinutesOffset","_regexResult$7$length","_regexResult$","regexResult","toNumber","rEmail","rUrl","rUUID","yearMonthDay","hourMinuteSecond","zOrOffset","rIsoDateTime","isTrimmed","objStringTag","create$6","StringSchema","strValue","length","regex","excludeEmptyString","allowOffset","precision","isNaN$1","create$5","NumberSchema","less","more","_method","avail","invalidDate","isDate","DateSchema","param","cast","limit","sortFields","excludedEdges","excludes","addNode","depPath","findIndex","ii","_err$path","sortByKeyOrder","parseJson","deepPartial","partial","fieldSchema","nextArray","deepHas","isObject","unknown","known","defaultSort","create$3","ObjectSchema","_options$stripUnknown","intermediateValue","innerOptions","isChanged","prop","exists","fieldValue","fieldSpec","from","recursive","objectErrors","fieldErrors","nextFields","schemaOrRef","dft","_innerOptions","shape","additions","remaining","fromGetter","newObj","unknownKeys","noAllow","allow","_innerOptions2","create$2","ArraySchema","_opts","castArray","castElement","innerType","arrayErrors","_options$originalValu2","_options$originalValu","innerTypeErrors","original","rejector","resolveFieldKey","DataSourceRegistry","definition","dataSourceRegistry","DEFAULT_PAGE_SIZE","S","MuiCheckbox","checked","indeterminate","SelectedModal","onClose","filtered","TablePickerField","setQuery","setRows","hasNextPage","setHasNextPage","loading","setLoading","hoveredRow","setHoveredRow","modalOpen","setModalOpen","requestIdRef","mountedRef","selectedList","selectedCount","resolveFetch","load","reqId","handleQueryChange","handleRowClick","already","handleSelectAll","toAdd","handleRemoveFromModal","colCount","allPageSelected","somePageSelected","isRowSelected","col","hovered","Registry","FlowForgeRegistry","buildValidationSchema","registryDef","Yup.array","Yup.string","Yup.number","Yup.boolean","Yup.object","minLen","maxLen","SINGLE_KEY","buildFieldValidator","rebound","countLeafFields","accumulator","getObjectTitle","getShellStyles","isRoot","isInsetLevel","isDeepLevel","getHeaderStyles","ObjectField","leafCount","objectDescription","summaryLabel","Chip","TabsEditContext","useTabsEdit","TabsField","tabs","activeTab","setActiveTab","tabsEdit","containerFieldId","variant","alignment","margin","activeColor","activeTextColor","inactiveTextColor","alignMap","currentTab","tab","isActive","tabPath","fKey","pillActive","pillInactive","lineActive","childIdx","STANDARD_OPERATORS","VALUELESS_OPERATORS","addButtonSx","isGroup","emptyLeaf","operatorNeedsValue","nodeCount","sum","ConnectorToggle","connector","ConditionCell","colDef","cellId","formValues","localFormulaConfig","setLocalFormulaConfig","isValueDisabled","SelectComponent","nextOperator","handleCellChange","patch","GroupNode","conditionDef","fieldPath","onUpdate","collapsed","setCollapsed","MdKeyboardArrowDown","MdDeleteOutline","ConditionRow","canAddGroup","addLeaf","addGroup","removeNode","setConnector","updateLeaf","updateGroupEntries","Button","FieldConfigContext","FieldConfigProvider","onConditionConfigChange","useFieldConfig","getValueByPath","buildAllTouched","DEFAULT_CONDITION_CONFIG_KEY","ImperativeHandleBridge","handleRef","onSave","conditionConfigKey","formik","useFormikContext","formikRef","onSaveRef","useImperativeHandle","fk","isValid","ConditionConfigBridge","explicitConditionConfig","explicitOnConditionConfigChange","ValuesObserver","onValuesChange","ValidityObserver","onValidityChange","FlowForm","FormikProvider","ControlledRenderer","internalFormulaConfig","setInternalFormulaConfig","bridgedChildren","wrapped","Formik","isSubmitting","Form","FieldGrid","FieldErrorBoundary","FieldRouter","valuesRef","itemRef","liveCtx","useField","prevHiddenRef","wasHidden","currentVal","LeafField","computeRef","isTouched","computedValue","displayValue","_c","rawDisplayValue","stored","conditionEntries","handleConditionUpdate","fieldProps","DynamicFormRenderer"],"mappings":"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ACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;AACX,GAAG;AAAA,EACD,MAAM;AAAA,EACN,SAAS;A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","x_google_ignoreList":[9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,71,72,73,74]}
|