@vendure/dashboard 3.4.1-master-202508210231 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/package.json +152 -152
  2. package/src/app/routes/_authenticated/_orders/components/order-modification-preview-dialog.tsx +2 -1
  3. package/src/app/routes/_authenticated/_products/components/add-product-variant-dialog.tsx +1 -0
  4. package/src/lib/components/data-input/affixed-input.tsx +19 -5
  5. package/src/lib/components/data-input/boolean-input.tsx +9 -0
  6. package/src/lib/components/data-input/checkbox-input.tsx +8 -0
  7. package/src/lib/components/data-input/combination-mode-input.tsx +11 -2
  8. package/src/lib/components/data-input/configurable-operation-list-input.tsx +26 -401
  9. package/src/lib/components/data-input/custom-field-list-input.tsx +18 -25
  10. package/src/lib/components/data-input/customer-group-input.tsx +7 -11
  11. package/src/lib/components/data-input/datetime-input.tsx +9 -13
  12. package/src/lib/components/data-input/default-relation-input.tsx +29 -9
  13. package/src/lib/components/data-input/facet-value-input.tsx +15 -13
  14. package/src/lib/components/data-input/index.ts +2 -2
  15. package/src/lib/components/data-input/money-input.tsx +27 -20
  16. package/src/lib/components/data-input/number-input.tsx +48 -0
  17. package/src/lib/components/data-input/password-input.tsx +16 -0
  18. package/src/lib/components/data-input/{product-multi-selector.tsx → product-multi-selector-input.tsx} +8 -15
  19. package/src/lib/components/data-input/relation-input.tsx +7 -6
  20. package/src/lib/components/data-input/rich-text-input.tsx +10 -13
  21. package/src/lib/components/data-input/select-with-options.tsx +29 -17
  22. package/src/lib/components/data-input/struct-form-input.tsx +54 -59
  23. package/src/lib/components/data-input/text-input.tsx +9 -0
  24. package/src/lib/components/data-input/textarea-input.tsx +16 -0
  25. package/src/lib/components/data-table/filters/data-table-number-filter.tsx +3 -0
  26. package/src/lib/components/data-table/use-generated-columns.tsx +16 -5
  27. package/src/lib/components/shared/configurable-operation-arg-input.tsx +3 -10
  28. package/src/lib/components/shared/configurable-operation-input.tsx +1 -6
  29. package/src/lib/components/shared/configurable-operation-multi-selector.tsx +8 -5
  30. package/src/lib/components/shared/configurable-operation-selector.tsx +5 -5
  31. package/src/lib/components/shared/custom-fields-form.tsx +20 -49
  32. package/src/lib/components/shared/multi-select.tsx +1 -1
  33. package/src/lib/framework/component-registry/component-registry.tsx +9 -32
  34. package/src/lib/framework/component-registry/display-component.tsx +28 -0
  35. package/src/lib/framework/extension-api/display-component-extensions.tsx +0 -14
  36. package/src/lib/framework/extension-api/input-component-extensions.tsx +52 -34
  37. package/src/lib/framework/extension-api/logic/data-table.ts +4 -27
  38. package/src/lib/framework/extension-api/logic/form-components.ts +3 -2
  39. package/src/lib/framework/extension-api/types/detail-forms.ts +2 -38
  40. package/src/lib/framework/extension-api/types/form-components.ts +2 -4
  41. package/src/lib/framework/form-engine/custom-form-component-extensions.ts +0 -23
  42. package/src/lib/framework/form-engine/custom-form-component.tsx +8 -25
  43. package/src/lib/framework/form-engine/default-input-for-type.tsx +35 -0
  44. package/src/lib/framework/form-engine/form-control-adapter.tsx +192 -0
  45. package/src/lib/framework/form-engine/form-engine-types.ts +163 -0
  46. package/src/lib/framework/form-engine/form-schema-tools.ts +55 -71
  47. package/src/lib/framework/form-engine/overridden-form-component.tsx +2 -2
  48. package/src/lib/framework/form-engine/utils.ts +223 -0
  49. package/src/lib/{components/shared → framework/form-engine}/value-transformers.ts +9 -9
  50. package/src/lib/framework/registry/registry-types.ts +3 -5
  51. package/src/lib/graphql/graphql-env.d.ts +11 -7
  52. package/src/lib/index.ts +28 -1
  53. package/src/lib/providers/server-config.tsx +1 -0
  54. package/src/lib/components/shared/direct-form-component-map.tsx +0 -393
  55. package/src/lib/components/shared/universal-field-definition.ts +0 -118
  56. package/src/lib/components/shared/universal-form-input.tsx +0 -175
  57. package/src/lib/components/shared/universal-input-components.tsx +0 -291
  58. package/src/lib/framework/component-registry/dynamic-component.tsx +0 -58
package/package.json CHANGED
@@ -1,156 +1,156 @@
1
1
  {
2
- "name": "@vendure/dashboard",
3
- "private": false,
4
- "version": "3.4.1-master-202508210231",
5
- "type": "module",
6
- "repository": {
7
- "type": "git",
8
- "url": "https://github.com/vendure-ecommerce/vendure"
9
- },
10
- "homepage": "https://www.vendure.io",
11
- "funding": "https://github.com/sponsors/michaelbromley",
12
- "publishConfig": {
13
- "access": "public"
14
- },
15
- "scripts": {
16
- "dev": "vite",
17
- "build:standalone": "vite build",
18
- "build:vite": "tsc --project tsconfig.vite.json",
19
- "build:plugin": "tsc --project tsconfig.plugin.json && node scripts/build-plugin.js",
20
- "build": "npm run build:vite && npm run build:plugin",
21
- "watch": "tsc --project tsconfig.vite.json --watch",
22
- "test": "vitest run",
23
- "lint": "eslint .",
24
- "preview": "vite preview",
25
- "generate-index": "node scripts/generate-index.js"
26
- },
27
- "module": "./src/lib/index.ts",
28
- "main": "./src/lib/index.ts",
29
- "types": "./src/lib/index.d.ts",
30
- "exports": {
31
- ".": {
32
- "types": "./src/lib/index.d.ts",
33
- "import": "./src/lib/index.ts",
34
- "require": "./src/lib/index.ts"
2
+ "name": "@vendure/dashboard",
3
+ "private": false,
4
+ "version": "3.4.1",
5
+ "type": "module",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/vendure-ecommerce/vendure"
35
9
  },
36
- "./plugin": {
37
- "types": "./dist/plugin/index.d.ts",
38
- "import": "./dist/plugin/index.js",
39
- "require": "./dist/plugin/index.js"
10
+ "homepage": "https://www.vendure.io",
11
+ "funding": "https://github.com/sponsors/michaelbromley",
12
+ "publishConfig": {
13
+ "access": "public"
40
14
  },
41
- "./vite": {
42
- "types": "./dist/vite/index.d.ts",
43
- "import": "./dist/vite/index.js",
44
- "require": "./dist/vite/index.js"
45
- }
46
- },
47
- "files": [
48
- "dist",
49
- "src",
50
- "lingui.config.js",
51
- "index.html"
52
- ],
53
- "dependencies": {
54
- "@dnd-kit/core": "^6.3.1",
55
- "@dnd-kit/modifiers": "^9.0.0",
56
- "@dnd-kit/sortable": "^10.0.0",
57
- "@hookform/resolvers": "^4.1.3",
58
- "@lingui/babel-plugin-lingui-macro": "^5.2.0",
59
- "@lingui/cli": "^5.2.0",
60
- "@lingui/core": "^5.2.0",
61
- "@lingui/react": "^5.2.0",
62
- "@lingui/vite-plugin": "^5.2.0",
63
- "@radix-ui/react-accordion": "^1.2.11",
64
- "@radix-ui/react-alert-dialog": "^1.1.14",
65
- "@radix-ui/react-aspect-ratio": "^1.1.7",
66
- "@radix-ui/react-avatar": "^1.1.10",
67
- "@radix-ui/react-checkbox": "^1.3.2",
68
- "@radix-ui/react-collapsible": "^1.1.11",
69
- "@radix-ui/react-context-menu": "^2.2.15",
70
- "@radix-ui/react-dialog": "^1.1.14",
71
- "@radix-ui/react-dropdown-menu": "^2.1.15",
72
- "@radix-ui/react-hover-card": "^1.1.14",
73
- "@radix-ui/react-label": "^2.1.7",
74
- "@radix-ui/react-menubar": "^1.1.15",
75
- "@radix-ui/react-navigation-menu": "^1.2.13",
76
- "@radix-ui/react-popover": "^1.1.14",
77
- "@radix-ui/react-progress": "^1.1.7",
78
- "@radix-ui/react-radio-group": "^1.3.7",
79
- "@radix-ui/react-scroll-area": "^1.2.9",
80
- "@radix-ui/react-select": "^2.2.5",
81
- "@radix-ui/react-separator": "^1.1.7",
82
- "@radix-ui/react-slider": "^1.3.5",
83
- "@radix-ui/react-slot": "^1.2.3",
84
- "@radix-ui/react-switch": "^1.2.5",
85
- "@radix-ui/react-tabs": "^1.1.12",
86
- "@radix-ui/react-toggle": "^1.1.9",
87
- "@radix-ui/react-toggle-group": "^1.1.10",
88
- "@radix-ui/react-tooltip": "^1.2.7",
89
- "@tailwindcss/vite": "^4.1.5",
90
- "@tanstack/eslint-plugin-query": "^5.66.1",
91
- "@tanstack/react-query": "^5.66.7",
92
- "@tanstack/react-query-devtools": "^5.68.0",
93
- "@tanstack/react-router": "^1.105.0",
94
- "@tanstack/react-table": "^8.21.2",
95
- "@tanstack/router-devtools": "^1.105.0",
96
- "@tanstack/router-plugin": "^1.105.0",
97
- "@tiptap/pm": "^2.11.5",
98
- "@tiptap/react": "^2.11.5",
99
- "@tiptap/starter-kit": "^2.11.5",
100
- "@types/react": "^19.0.10",
101
- "@types/react-dom": "^19.0.4",
102
- "@uidotdev/usehooks": "^2.4.1",
103
- "@vendure/common": "^3.4.1-master-202508210231",
104
- "@vendure/core": "^3.4.1-master-202508210231",
105
- "@vitejs/plugin-react": "^4.3.4",
106
- "acorn": "^8.11.3",
107
- "acorn-walk": "^8.3.2",
108
- "awesome-graphql-client": "^2.1.0",
109
- "class-variance-authority": "^0.7.1",
110
- "clsx": "^2.1.1",
111
- "cmdk": "^1.1.1",
112
- "date-fns": "^4.0.0",
113
- "embla-carousel-react": "^8.6.0",
114
- "express-rate-limit": "^7.5.0",
115
- "fast-glob": "^3.3.2",
116
- "fs-extra": "^11.2.0",
117
- "gql.tada": "^1.8.10",
118
- "graphql": "^16.10.0",
119
- "input-otp": "^1.4.2",
120
- "json-edit-react": "^1.23.1",
121
- "lucide-react": "^0.475.0",
122
- "motion": "^12.6.2",
123
- "next-themes": "^0.4.6",
124
- "react": "^19.0.0",
125
- "react-day-picker": "^9.8.0",
126
- "react-dom": "^19.0.0",
127
- "react-dropzone": "^14.3.8",
128
- "react-hook-form": "^7.60.0",
129
- "react-resizable-panels": "^3.0.3",
130
- "recharts": "^2.15.4",
131
- "sonner": "^2.0.6",
132
- "tailwind-merge": "^3.2.0",
133
- "tailwindcss": "^4.1.5",
134
- "tailwindcss-animate": "^1.0.7",
135
- "tsconfig-paths": "^4.2.0",
136
- "tw-animate-css": "^1.2.9",
137
- "vaul": "^1.1.2",
138
- "vite": "^6.3.5",
139
- "zod": "^3.25.76"
140
- },
141
- "devDependencies": {
142
- "@eslint/js": "^9.19.0",
143
- "@types/node": "^22.13.4",
144
- "eslint": "^9.19.0",
145
- "eslint-plugin-react": "^7.37.4",
146
- "eslint-plugin-react-hooks": "^5.0.0",
147
- "eslint-plugin-react-refresh": "^0.4.18",
148
- "globals": "^15.14.0",
149
- "vite-plugin-dts": "^4.5.3"
150
- },
151
- "optionalDependencies": {
152
- "lightningcss-linux-arm64-musl": "^1.29.3",
153
- "lightningcss-linux-x64-musl": "^1.29.1"
154
- },
155
- "gitHead": "1d3c19a82f1e59ed6e7c1078a7328bb373ee097c"
15
+ "scripts": {
16
+ "dev": "vite",
17
+ "build:standalone": "vite build",
18
+ "build:vite": "tsc --project tsconfig.vite.json",
19
+ "build:plugin": "tsc --project tsconfig.plugin.json && node scripts/build-plugin.js",
20
+ "build": "npm run build:vite && npm run build:plugin",
21
+ "watch": "tsc --project tsconfig.vite.json --watch",
22
+ "test": "vitest run",
23
+ "lint": "eslint .",
24
+ "preview": "vite preview",
25
+ "generate-index": "node scripts/generate-index.js"
26
+ },
27
+ "module": "./src/lib/index.ts",
28
+ "main": "./src/lib/index.ts",
29
+ "types": "./src/lib/index.d.ts",
30
+ "exports": {
31
+ ".": {
32
+ "types": "./src/lib/index.d.ts",
33
+ "import": "./src/lib/index.ts",
34
+ "require": "./src/lib/index.ts"
35
+ },
36
+ "./plugin": {
37
+ "types": "./dist/plugin/index.d.ts",
38
+ "import": "./dist/plugin/index.js",
39
+ "require": "./dist/plugin/index.js"
40
+ },
41
+ "./vite": {
42
+ "types": "./dist/vite/index.d.ts",
43
+ "import": "./dist/vite/index.js",
44
+ "require": "./dist/vite/index.js"
45
+ }
46
+ },
47
+ "files": [
48
+ "dist",
49
+ "src",
50
+ "lingui.config.js",
51
+ "index.html"
52
+ ],
53
+ "dependencies": {
54
+ "@dnd-kit/core": "^6.3.1",
55
+ "@dnd-kit/modifiers": "^9.0.0",
56
+ "@dnd-kit/sortable": "^10.0.0",
57
+ "@hookform/resolvers": "^4.1.3",
58
+ "@lingui/babel-plugin-lingui-macro": "^5.2.0",
59
+ "@lingui/cli": "^5.2.0",
60
+ "@lingui/core": "^5.2.0",
61
+ "@lingui/react": "^5.2.0",
62
+ "@lingui/vite-plugin": "^5.2.0",
63
+ "@radix-ui/react-accordion": "^1.2.11",
64
+ "@radix-ui/react-alert-dialog": "^1.1.14",
65
+ "@radix-ui/react-aspect-ratio": "^1.1.7",
66
+ "@radix-ui/react-avatar": "^1.1.10",
67
+ "@radix-ui/react-checkbox": "^1.3.2",
68
+ "@radix-ui/react-collapsible": "^1.1.11",
69
+ "@radix-ui/react-context-menu": "^2.2.15",
70
+ "@radix-ui/react-dialog": "^1.1.14",
71
+ "@radix-ui/react-dropdown-menu": "^2.1.15",
72
+ "@radix-ui/react-hover-card": "^1.1.14",
73
+ "@radix-ui/react-label": "^2.1.7",
74
+ "@radix-ui/react-menubar": "^1.1.15",
75
+ "@radix-ui/react-navigation-menu": "^1.2.13",
76
+ "@radix-ui/react-popover": "^1.1.14",
77
+ "@radix-ui/react-progress": "^1.1.7",
78
+ "@radix-ui/react-radio-group": "^1.3.7",
79
+ "@radix-ui/react-scroll-area": "^1.2.9",
80
+ "@radix-ui/react-select": "^2.2.5",
81
+ "@radix-ui/react-separator": "^1.1.7",
82
+ "@radix-ui/react-slider": "^1.3.5",
83
+ "@radix-ui/react-slot": "^1.2.3",
84
+ "@radix-ui/react-switch": "^1.2.5",
85
+ "@radix-ui/react-tabs": "^1.1.12",
86
+ "@radix-ui/react-toggle": "^1.1.9",
87
+ "@radix-ui/react-toggle-group": "^1.1.10",
88
+ "@radix-ui/react-tooltip": "^1.2.7",
89
+ "@tailwindcss/vite": "^4.1.5",
90
+ "@tanstack/eslint-plugin-query": "^5.66.1",
91
+ "@tanstack/react-query": "^5.66.7",
92
+ "@tanstack/react-query-devtools": "^5.68.0",
93
+ "@tanstack/react-router": "^1.105.0",
94
+ "@tanstack/react-table": "^8.21.2",
95
+ "@tanstack/router-devtools": "^1.105.0",
96
+ "@tanstack/router-plugin": "^1.105.0",
97
+ "@tiptap/pm": "^2.11.5",
98
+ "@tiptap/react": "^2.11.5",
99
+ "@tiptap/starter-kit": "^2.11.5",
100
+ "@types/react": "^19.0.10",
101
+ "@types/react-dom": "^19.0.4",
102
+ "@uidotdev/usehooks": "^2.4.1",
103
+ "@vendure/common": "3.4.1",
104
+ "@vendure/core": "3.4.1",
105
+ "@vitejs/plugin-react": "^4.3.4",
106
+ "acorn": "^8.11.3",
107
+ "acorn-walk": "^8.3.2",
108
+ "awesome-graphql-client": "^2.1.0",
109
+ "class-variance-authority": "^0.7.1",
110
+ "clsx": "^2.1.1",
111
+ "cmdk": "^1.1.1",
112
+ "date-fns": "^4.0.0",
113
+ "embla-carousel-react": "^8.6.0",
114
+ "express-rate-limit": "^7.5.0",
115
+ "fast-glob": "^3.3.2",
116
+ "fs-extra": "^11.2.0",
117
+ "gql.tada": "^1.8.10",
118
+ "graphql": "^16.10.0",
119
+ "input-otp": "^1.4.2",
120
+ "json-edit-react": "^1.23.1",
121
+ "lucide-react": "^0.475.0",
122
+ "motion": "^12.6.2",
123
+ "next-themes": "^0.4.6",
124
+ "react": "^19.0.0",
125
+ "react-day-picker": "^9.8.0",
126
+ "react-dom": "^19.0.0",
127
+ "react-dropzone": "^14.3.8",
128
+ "react-hook-form": "^7.60.0",
129
+ "react-resizable-panels": "^3.0.3",
130
+ "recharts": "^2.15.4",
131
+ "sonner": "^2.0.6",
132
+ "tailwind-merge": "^3.2.0",
133
+ "tailwindcss": "^4.1.5",
134
+ "tailwindcss-animate": "^1.0.7",
135
+ "tsconfig-paths": "^4.2.0",
136
+ "tw-animate-css": "^1.2.9",
137
+ "vaul": "^1.1.2",
138
+ "vite": "^6.3.5",
139
+ "zod": "^3.25.76"
140
+ },
141
+ "devDependencies": {
142
+ "@eslint/js": "^9.19.0",
143
+ "@types/node": "^22.13.4",
144
+ "eslint": "^9.19.0",
145
+ "eslint-plugin-react": "^7.37.4",
146
+ "eslint-plugin-react-hooks": "^5.0.0",
147
+ "eslint-plugin-react-refresh": "^0.4.18",
148
+ "globals": "^15.14.0",
149
+ "vite-plugin-dts": "^4.5.3"
150
+ },
151
+ "optionalDependencies": {
152
+ "lightningcss-linux-arm64-musl": "^1.29.3",
153
+ "lightningcss-linux-x64-musl": "^1.29.1"
154
+ },
155
+ "gitHead": "e3736f4d7015d94eca04448e58cc385b2f086eb7"
156
156
  }
@@ -161,7 +161,7 @@ export function OrderModificationPreviewDialog({
161
161
  {error && <div className="text-destructive py-2">{error}</div>}
162
162
  {previewOrder && !loading && !error && (
163
163
  <>
164
- <OrderTable order={previewOrder} />
164
+ <OrderTable pageId="order-modification-preview" order={previewOrder} />
165
165
  {/* Refund/payment UI using Alert */}
166
166
  {priceDifference < 0 && (
167
167
  <>
@@ -245,6 +245,7 @@ export function OrderModificationPreviewDialog({
245
245
  render={({ field }) => (
246
246
  <FormControl>
247
247
  <MoneyInput
248
+ {...field}
248
249
  value={
249
250
  field.value || 0
250
251
  }
@@ -338,6 +338,7 @@ export function AddProductVariantDialog({
338
338
  label={<Trans>Price</Trans>}
339
339
  render={({ field }) => (
340
340
  <MoneyInput
341
+ {...field}
341
342
  value={Number(field.value) || 0}
342
343
  onChange={value => field.onChange(value.toString())}
343
344
  currency={activeChannel?.defaultCurrencyCode ?? 'USD'}
@@ -1,12 +1,17 @@
1
1
  import { ReactNode, useEffect, useRef, useState } from 'react';
2
2
  import { Input } from '../ui/input.js';
3
3
 
4
- interface AffixedInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'prefix'> {
5
- prefix?: ReactNode;
6
- suffix?: ReactNode;
7
- }
4
+ import { DashboardFormComponentProps } from '@/vdb/framework/form-engine/form-engine-types.js';
5
+ import { isReadonlyField } from '@/vdb/framework/form-engine/utils.js';
6
+
7
+ export type AffixedInputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'prefix'> &
8
+ DashboardFormComponentProps & {
9
+ prefix?: ReactNode;
10
+ suffix?: ReactNode;
11
+ };
8
12
 
9
13
  export function AffixedInput({ prefix, suffix, className = '', ...props }: Readonly<AffixedInputProps>) {
14
+ const readOnly = props.disabled || isReadonlyField(props.fieldDef);
10
15
  const prefixRef = useRef<HTMLSpanElement>(null);
11
16
  const suffixRef = useRef<HTMLSpanElement>(null);
12
17
  const [prefixWidth, setPrefixWidth] = useState(0);
@@ -33,7 +38,16 @@ export function AffixedInput({ prefix, suffix, className = '', ...props }: Reado
33
38
  {prefix}
34
39
  </span>
35
40
  )}
36
- <Input {...props} className={className} style={style} />
41
+ <Input
42
+ value={props.value}
43
+ onChange={props.onChange}
44
+ onBlur={props.onBlur}
45
+ type={props.type}
46
+ ref={props.ref}
47
+ className={className}
48
+ style={style}
49
+ disabled={readOnly}
50
+ />
37
51
  {suffix && (
38
52
  <span ref={suffixRef} className="absolute right-3 text-muted-foreground whitespace-nowrap">
39
53
  {suffix}
@@ -0,0 +1,9 @@
1
+ import { Switch } from '@/vdb/components/ui/switch.js';
2
+ import { DashboardFormComponentProps } from '@/vdb/framework/form-engine/form-engine-types.js';
3
+ import { isReadonlyField } from '@/vdb/framework/form-engine/utils.js';
4
+
5
+ export function BooleanInput({ value, onChange, fieldDef }: Readonly<DashboardFormComponentProps>) {
6
+ const checked = typeof value === 'string' ? value === 'true' : value;
7
+ const readOnly = isReadonlyField(fieldDef);
8
+ return <Switch checked={checked} onCheckedChange={onChange} disabled={readOnly} />;
9
+ }
@@ -0,0 +1,8 @@
1
+ import { Checkbox } from '../ui/checkbox.js';
2
+ import { DashboardFormComponentProps } from '@/vdb/framework/form-engine/form-engine-types.js';
3
+ import { isReadonlyField } from '@/vdb/framework/form-engine/utils.js';
4
+
5
+ export function CheckboxInput({ value, onChange, fieldDef }: Readonly<DashboardFormComponentProps>) {
6
+ const readOnly = isReadonlyField(fieldDef);
7
+ return <Checkbox checked={value} onCheckedChange={onChange} disabled={readOnly} />;
8
+ }
@@ -1,7 +1,16 @@
1
- import { DataInputComponent } from '@/vdb/framework/component-registry/component-registry.js';
1
+ import { DashboardFormComponentProps } from '@/vdb/framework/form-engine/form-engine-types.js';
2
2
  import { Trans } from '@/vdb/lib/trans.js';
3
3
 
4
- export const CombinationModeInput: DataInputComponent = ({ value, onChange, position, ...props }) => {
4
+ export type CombinationModeInputProps = DashboardFormComponentProps & {
5
+ position?: number;
6
+ };
7
+
8
+ export const CombinationModeInput = ({
9
+ value,
10
+ onChange,
11
+ position,
12
+ ...props
13
+ }: Readonly<CombinationModeInputProps>) => {
5
14
  const booleanValue = value === 'true' || value === true;
6
15
 
7
16
  // Only show for items after the first one