@wix/bex-core 2.333.0 → 2.337.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/dist/cjs/assets/locale/messages_ar.json +10 -2
  2. package/dist/cjs/assets/locale/messages_bg.json +10 -2
  3. package/dist/cjs/assets/locale/messages_ca.json +10 -2
  4. package/dist/cjs/assets/locale/messages_cs.json +8 -0
  5. package/dist/cjs/assets/locale/messages_da.json +8 -0
  6. package/dist/cjs/assets/locale/messages_de.json +8 -0
  7. package/dist/cjs/assets/locale/messages_el.json +10 -2
  8. package/dist/cjs/assets/locale/messages_en.json +10 -2
  9. package/dist/cjs/assets/locale/messages_es.json +8 -0
  10. package/dist/cjs/assets/locale/messages_fi.json +10 -2
  11. package/dist/cjs/assets/locale/messages_fr.json +8 -0
  12. package/dist/cjs/assets/locale/messages_he.json +10 -2
  13. package/dist/cjs/assets/locale/messages_hi.json +8 -0
  14. package/dist/cjs/assets/locale/messages_hu.json +10 -2
  15. package/dist/cjs/assets/locale/messages_id.json +8 -0
  16. package/dist/cjs/assets/locale/messages_it.json +8 -0
  17. package/dist/cjs/assets/locale/messages_ja.json +8 -0
  18. package/dist/cjs/assets/locale/messages_ko.json +8 -0
  19. package/dist/cjs/assets/locale/messages_lt.json +10 -2
  20. package/dist/cjs/assets/locale/messages_ms.json +10 -2
  21. package/dist/cjs/assets/locale/messages_nl.json +8 -0
  22. package/dist/cjs/assets/locale/messages_no.json +8 -0
  23. package/dist/cjs/assets/locale/messages_pl.json +8 -0
  24. package/dist/cjs/assets/locale/messages_pt.json +8 -0
  25. package/dist/cjs/assets/locale/messages_ro.json +10 -2
  26. package/dist/cjs/assets/locale/messages_ru.json +8 -0
  27. package/dist/cjs/assets/locale/messages_sk.json +10 -2
  28. package/dist/cjs/assets/locale/messages_sl.json +10 -2
  29. package/dist/cjs/assets/locale/messages_sv.json +8 -0
  30. package/dist/cjs/assets/locale/messages_th.json +8 -0
  31. package/dist/cjs/assets/locale/messages_tl.json +10 -2
  32. package/dist/cjs/assets/locale/messages_tr.json +8 -0
  33. package/dist/cjs/assets/locale/messages_uk.json +8 -0
  34. package/dist/cjs/assets/locale/messages_vi.json +8 -0
  35. package/dist/cjs/assets/locale/messages_zh.json +8 -0
  36. package/dist/cjs/assets/locale/version_file +1 -1
  37. package/dist/cjs/hooks/index.js +6 -0
  38. package/dist/cjs/hooks/index.js.map +1 -1
  39. package/dist/cjs/hooks/useImport.js +4 -0
  40. package/dist/cjs/hooks/useImport.js.map +1 -1
  41. package/dist/cjs/hooks/useSchemaSource.js +11 -0
  42. package/dist/cjs/hooks/useSchemaSource.js.map +1 -0
  43. package/dist/cjs/index.js +11 -2
  44. package/dist/cjs/index.js.map +1 -1
  45. package/dist/cjs/services/translations.js.map +1 -1
  46. package/dist/cjs/state/ImportState/ImportState.js +104 -15
  47. package/dist/cjs/state/ImportState/ImportState.js.map +1 -1
  48. package/dist/cjs/state/ImportState/__tests__/ImportState.engine.spec.js +32 -3
  49. package/dist/cjs/state/ImportState/__tests__/ImportState.engine.spec.js.map +1 -1
  50. package/dist/cjs/state/ImportState/__tests__/buildImportConfig.spec.js +156 -0
  51. package/dist/cjs/state/ImportState/__tests__/buildImportConfig.spec.js.map +1 -0
  52. package/dist/cjs/state/ImportState/detectFieldType.js +20 -2
  53. package/dist/cjs/state/ImportState/detectFieldType.js.map +1 -1
  54. package/dist/cjs/state/SourceState.js +150 -0
  55. package/dist/cjs/state/SourceState.js.map +1 -0
  56. package/dist/cjs/state/index.js +7 -0
  57. package/dist/cjs/state/index.js.map +1 -1
  58. package/dist/cjs/testkit/createInMemorySchemaSource.js +14 -8
  59. package/dist/cjs/testkit/createInMemorySchemaSource.js.map +1 -1
  60. package/dist/cjs/testkit/hubJobImportMocks.js +14 -4
  61. package/dist/cjs/testkit/hubJobImportMocks.js.map +1 -1
  62. package/dist/cjs/types/Field.js.map +1 -1
  63. package/dist/cjs/types/FieldTypeDefinition.js +79 -0
  64. package/dist/cjs/types/FieldTypeDefinition.js.map +1 -0
  65. package/dist/cjs/types/FieldsSource.js.map +1 -1
  66. package/dist/cjs/types/Schema.js.map +1 -1
  67. package/dist/cjs/types/SchemaSource.js +41 -20
  68. package/dist/cjs/types/SchemaSource.js.map +1 -1
  69. package/dist/cjs/types/__tests__/defineSchemaSource.fieldTypes.spec.js +78 -0
  70. package/dist/cjs/types/__tests__/defineSchemaSource.fieldTypes.spec.js.map +1 -0
  71. package/dist/esm/assets/locale/messages_ar.json +10 -2
  72. package/dist/esm/assets/locale/messages_bg.json +10 -2
  73. package/dist/esm/assets/locale/messages_ca.json +10 -2
  74. package/dist/esm/assets/locale/messages_cs.json +8 -0
  75. package/dist/esm/assets/locale/messages_da.json +8 -0
  76. package/dist/esm/assets/locale/messages_de.json +8 -0
  77. package/dist/esm/assets/locale/messages_el.json +10 -2
  78. package/dist/esm/assets/locale/messages_en.json +10 -2
  79. package/dist/esm/assets/locale/messages_es.json +8 -0
  80. package/dist/esm/assets/locale/messages_fi.json +10 -2
  81. package/dist/esm/assets/locale/messages_fr.json +8 -0
  82. package/dist/esm/assets/locale/messages_he.json +10 -2
  83. package/dist/esm/assets/locale/messages_hi.json +8 -0
  84. package/dist/esm/assets/locale/messages_hu.json +10 -2
  85. package/dist/esm/assets/locale/messages_id.json +8 -0
  86. package/dist/esm/assets/locale/messages_it.json +8 -0
  87. package/dist/esm/assets/locale/messages_ja.json +8 -0
  88. package/dist/esm/assets/locale/messages_ko.json +8 -0
  89. package/dist/esm/assets/locale/messages_lt.json +10 -2
  90. package/dist/esm/assets/locale/messages_ms.json +10 -2
  91. package/dist/esm/assets/locale/messages_nl.json +8 -0
  92. package/dist/esm/assets/locale/messages_no.json +8 -0
  93. package/dist/esm/assets/locale/messages_pl.json +8 -0
  94. package/dist/esm/assets/locale/messages_pt.json +8 -0
  95. package/dist/esm/assets/locale/messages_ro.json +10 -2
  96. package/dist/esm/assets/locale/messages_ru.json +8 -0
  97. package/dist/esm/assets/locale/messages_sk.json +10 -2
  98. package/dist/esm/assets/locale/messages_sl.json +10 -2
  99. package/dist/esm/assets/locale/messages_sv.json +8 -0
  100. package/dist/esm/assets/locale/messages_th.json +8 -0
  101. package/dist/esm/assets/locale/messages_tl.json +10 -2
  102. package/dist/esm/assets/locale/messages_tr.json +8 -0
  103. package/dist/esm/assets/locale/messages_uk.json +8 -0
  104. package/dist/esm/assets/locale/messages_vi.json +8 -0
  105. package/dist/esm/assets/locale/messages_zh.json +8 -0
  106. package/dist/esm/assets/locale/version_file +1 -1
  107. package/dist/esm/hooks/index.js +1 -0
  108. package/dist/esm/hooks/index.js.map +1 -1
  109. package/dist/esm/hooks/useImport.js +3 -1
  110. package/dist/esm/hooks/useImport.js.map +1 -1
  111. package/dist/esm/hooks/useSchemaSource.js +7 -0
  112. package/dist/esm/hooks/useSchemaSource.js.map +1 -0
  113. package/dist/esm/index.js +2 -1
  114. package/dist/esm/index.js.map +1 -1
  115. package/dist/esm/state/ImportState/ImportState.js +67 -7
  116. package/dist/esm/state/ImportState/ImportState.js.map +1 -1
  117. package/dist/esm/state/ImportState/__tests__/ImportState.engine.spec.js +32 -4
  118. package/dist/esm/state/ImportState/__tests__/ImportState.engine.spec.js.map +1 -1
  119. package/dist/esm/state/ImportState/__tests__/buildImportConfig.spec.js +100 -0
  120. package/dist/esm/state/ImportState/__tests__/buildImportConfig.spec.js.map +1 -0
  121. package/dist/esm/state/ImportState/detectFieldType.js +15 -15
  122. package/dist/esm/state/ImportState/detectFieldType.js.map +1 -1
  123. package/dist/esm/state/SourceState.js +131 -0
  124. package/dist/esm/state/SourceState.js.map +1 -0
  125. package/dist/esm/state/index.js +1 -0
  126. package/dist/esm/state/index.js.map +1 -1
  127. package/dist/esm/testkit/createInMemorySchemaSource.js +9 -7
  128. package/dist/esm/testkit/createInMemorySchemaSource.js.map +1 -1
  129. package/dist/esm/testkit/hubJobImportMocks.js +14 -4
  130. package/dist/esm/testkit/hubJobImportMocks.js.map +1 -1
  131. package/dist/esm/types/FieldTypeDefinition.js +16 -0
  132. package/dist/esm/types/FieldTypeDefinition.js.map +1 -0
  133. package/dist/esm/types/SchemaSource.js +33 -14
  134. package/dist/esm/types/SchemaSource.js.map +1 -1
  135. package/dist/esm/types/__tests__/defineSchemaSource.fieldTypes.spec.js +51 -0
  136. package/dist/esm/types/__tests__/defineSchemaSource.fieldTypes.spec.js.map +1 -0
  137. package/dist/types/hooks/index.d.ts +1 -0
  138. package/dist/types/hooks/index.d.ts.map +1 -1
  139. package/dist/types/hooks/useImport.d.ts +9 -3
  140. package/dist/types/hooks/useImport.d.ts.map +1 -1
  141. package/dist/types/hooks/useSchemaSource.d.ts +4 -0
  142. package/dist/types/hooks/useSchemaSource.d.ts.map +1 -0
  143. package/dist/types/index.d.ts +4 -3
  144. package/dist/types/index.d.ts.map +1 -1
  145. package/dist/types/services/translations.d.ts +1 -1
  146. package/dist/types/services/translations.d.ts.map +1 -1
  147. package/dist/types/state/ImportState/ImportState.d.ts +53 -14
  148. package/dist/types/state/ImportState/ImportState.d.ts.map +1 -1
  149. package/dist/types/state/ImportState/__tests__/buildImportConfig.spec.d.ts +2 -0
  150. package/dist/types/state/ImportState/__tests__/buildImportConfig.spec.d.ts.map +1 -0
  151. package/dist/types/state/ImportState/detectFieldType.d.ts +3 -0
  152. package/dist/types/state/ImportState/detectFieldType.d.ts.map +1 -1
  153. package/dist/types/state/SourceState.d.ts +39 -0
  154. package/dist/types/state/SourceState.d.ts.map +1 -0
  155. package/dist/types/state/index.d.ts +1 -0
  156. package/dist/types/state/index.d.ts.map +1 -1
  157. package/dist/types/testkit/WixPatternsContainer.driver.d.ts +2 -0
  158. package/dist/types/testkit/WixPatternsContainer.driver.d.ts.map +1 -1
  159. package/dist/types/testkit/createInMemorySchemaSource.d.ts +12 -7
  160. package/dist/types/testkit/createInMemorySchemaSource.d.ts.map +1 -1
  161. package/dist/types/testkit/hubJobImportMocks.d.ts +8 -0
  162. package/dist/types/testkit/hubJobImportMocks.d.ts.map +1 -1
  163. package/dist/types/types/Field.d.ts +6 -1
  164. package/dist/types/types/Field.d.ts.map +1 -1
  165. package/dist/types/types/FieldTypeDefinition.d.ts +253 -0
  166. package/dist/types/types/FieldTypeDefinition.d.ts.map +1 -0
  167. package/dist/types/types/FieldsSource.d.ts +29 -1
  168. package/dist/types/types/FieldsSource.d.ts.map +1 -1
  169. package/dist/types/types/Schema.d.ts +10 -6
  170. package/dist/types/types/Schema.d.ts.map +1 -1
  171. package/dist/types/types/SchemaSource.d.ts +44 -10
  172. package/dist/types/types/SchemaSource.d.ts.map +1 -1
  173. package/dist/types/types/__tests__/defineSchemaSource.fieldTypes.spec.d.ts +2 -0
  174. package/dist/types/types/__tests__/defineSchemaSource.fieldTypes.spec.d.ts.map +1 -0
  175. package/package.json +4 -4
@@ -0,0 +1,253 @@
1
+ import type { ComponentType, MutableRefObject, ReactElement, ReactNode } from 'react';
2
+ import type { Field } from './Field';
3
+ import type { Filter } from '../model/filter';
4
+ import type { FieldsSource } from './FieldsSource';
5
+ export type ValidationRule = {
6
+ type: 'required';
7
+ message: string;
8
+ } | {
9
+ type: 'min' | 'max';
10
+ value: number;
11
+ message: string;
12
+ } | {
13
+ type: 'minLength' | 'maxLength';
14
+ value: number;
15
+ message: string;
16
+ } | {
17
+ type: 'pattern';
18
+ value: RegExp;
19
+ message: string;
20
+ } | {
21
+ type: 'custom';
22
+ validate: (value: unknown) => boolean;
23
+ message: string;
24
+ } | {
25
+ type: 'specificValues';
26
+ values: {
27
+ id: string;
28
+ value: string;
29
+ }[];
30
+ message: string;
31
+ };
32
+ export interface Focusable {
33
+ focus: () => void;
34
+ }
35
+ export type EditTrigger = {
36
+ kind: 'type';
37
+ key: string;
38
+ } | 'enter' | 'click' | 'doubleClick';
39
+ export interface CellViewProps<V> {
40
+ value: V;
41
+ typeConfig?: unknown;
42
+ validation?: ValidationRule[];
43
+ /** Stable id of the column. Cell components can use it to derive unique DOM ids. */
44
+ columnId: string;
45
+ /** Stable key of the row. Cell components can use it to derive unique DOM ids. */
46
+ rowKey: string;
47
+ }
48
+ export interface CellEditProps<V> {
49
+ value: V;
50
+ onChange(value: V): void;
51
+ onCommit: () => void;
52
+ onCancel: () => void;
53
+ /**
54
+ * Signals that the cell is starting an editing operation that will move focus
55
+ * outside the table (e.g., opening a media manager or a modal). Calling this
56
+ * sets isEditing=true so the table does not clear cell focus while the
57
+ * external UI is open. Pair with onCommit (after the operation succeeds)
58
+ * or onCancel (if the user dismisses without a value change).
59
+ */
60
+ onStartEdit?: () => void;
61
+ /** Ref to the focusable input element. Used for type-to-edit (focusing the input when user starts typing on a focused cell). */
62
+ inputRef?: MutableRefObject<Focusable | undefined | null>;
63
+ typeConfig?: unknown;
64
+ /** How edit mode was triggered. Edit components can use this to customize behavior (e.g., date picker auto-opens on 'type'). */
65
+ editTrigger?: EditTrigger | null;
66
+ /** Column-level validation rules. Edit components can derive UI behavior (e.g., maxLength blocking/tooltip) from these. */
67
+ validation?: ValidationRule[];
68
+ /** Stable id of the column. Cell components can use it to derive unique DOM ids. */
69
+ columnId: string;
70
+ /** Stable key of the row. Cell components can use it to derive unique DOM ids. */
71
+ rowKey: string;
72
+ }
73
+ /**
74
+ * Props passed to a cell type's optional `EditWrapper`. The table mounts the
75
+ * wrapper around the cell content and keeps it mounted across the edit↔view
76
+ * transition, so the wrapper can own behavior that must outlive the inline
77
+ * editor (e.g. a reference cell navigating to an overlay and refreshing on
78
+ * return). The wrapper hands anything the editor needs down via its own context.
79
+ */
80
+ export interface CellEditWrapperProps {
81
+ /** The column's typeConfig (same value handed to the cell's Edit/View). */
82
+ typeConfig?: unknown;
83
+ /** Stable id of the column. */
84
+ columnId: string;
85
+ /** Stable key of the row. */
86
+ rowKey: string;
87
+ /** The cell content (the Edit or View component) to render inside the wrapper. */
88
+ children: ReactNode;
89
+ }
90
+ /**
91
+ * The editable-cell slot of a field type definition: how a cell of that type
92
+ * renders, edits, and moves through the clipboard. The definition's key
93
+ * identifies the type and the definition's `value` owns validation, so the
94
+ * slot carries neither.
95
+ *
96
+ * Members that take `V` use method syntax so a definition typed with a
97
+ * concrete value type stays assignable where a loosely typed definition is
98
+ * expected (see `FieldTypeDefinition`).
99
+ */
100
+ export interface EditableCellConfig<V> {
101
+ /** Render cell in view mode (read-only display). */
102
+ ViewComponent(props: CellViewProps<V>): ReactElement | null;
103
+ /** Render cell in edit mode (inline editor). Optional — omit for view-only cells. */
104
+ EditComponent?(props: CellEditProps<V>): ReactElement | null;
105
+ /** Serialize value to clipboard string. */
106
+ serialize?(value: V): string;
107
+ /** Deserialize clipboard string to value. */
108
+ deserialize?(raw: string): V;
109
+ /** Can this cell type be edited? (default: true) */
110
+ editable?: boolean;
111
+ /** Can this cell type be cleared with Delete key? (default: true) */
112
+ clearable?: boolean;
113
+ /** Toggle value on single click (e.g., boolean checkbox). Skips focus→edit flow. */
114
+ toggleValue?(value: V): V;
115
+ /** Enter edit mode on single click (e.g., image cell with no value). */
116
+ editOnClick?(value: V): boolean;
117
+ /** Show the EditComponent when the cell is focused, without entering edit mode.
118
+ * Keyboard navigation remains active. Similar to toggleValue but without toggling. */
119
+ showEditWhenFocused?: boolean;
120
+ /** Optional wrapper component the cell type defines to own behavior that must
121
+ * outlive the inline editor. Mounted around the cell content and kept mounted
122
+ * across the edit↔view transition. */
123
+ EditWrapper?: ComponentType<CellEditWrapperProps>;
124
+ /** Cell content can grow past row height when focused. Only applies to
125
+ * showEditWhenFocused cells. */
126
+ growable?: boolean;
127
+ /** Called on type-to-edit. Return object with cleared value and/or prevent flag.
128
+ * Return undefined to block the key. Return {} to enter edit mode without changing the value. */
129
+ onTypeToEdit?(params: {
130
+ key: string;
131
+ validation?: ValidationRule[];
132
+ }): {
133
+ value?: V;
134
+ } | undefined;
135
+ /** Optional hook to normalize the committed value (e.g. auto-prepend https://).
136
+ * Called before the edit commits; the value is written back before committing. */
137
+ normalizeOnCommit?(value: V): V;
138
+ /** When true, type-to-edit flushes the edit-mode render synchronously and
139
+ * focuses the input within the same keydown event, then lets the browser's
140
+ * default action deliver the keystroke to the now-focused input naturally.
141
+ * Use for cells that wrap a controlled input whose value can't be seeded via props. */
142
+ nativeTypeToEdit?: boolean;
143
+ }
144
+ /** The props the filter builder passes to a definition's toolbar filter
145
+ * component — the same contract the built-in filter elements receive. */
146
+ export interface FilterTypeComponentProps<V = any> {
147
+ filter: Filter<V>;
148
+ toolbarItemProps?: {
149
+ label?: ReactNode;
150
+ };
151
+ toolbarTagProps?: {
152
+ label?: string;
153
+ };
154
+ accordionItemProps?: {
155
+ label?: string;
156
+ };
157
+ }
158
+ /** The filter slot of a field type definition: the filter state registered on
159
+ * the collection query and the toolbar element that renders it. */
160
+ export interface FilterTypeConfig {
161
+ createFilter: (field: Field) => Filter<any>;
162
+ Component: ComponentType<FilterTypeComponentProps>;
163
+ }
164
+ /** Narrows a definition's filter slot to an active filter config. */
165
+ export declare function isFilterTypeConfig(filter: FieldTypeDefinition['filter']): filter is FilterTypeConfig;
166
+ /**
167
+ * The read-only table slot of a field type definition: how a cell of that
168
+ * type renders in the table, and the column's layout. Independent of
169
+ * `editableTable` — neither slot falls back to the other.
170
+ */
171
+ export interface TableCellConfig<V> {
172
+ /** Render the cell. Method syntax keeps the definition assignable to
173
+ * `FieldTypeDefinition<unknown>` (see FieldTypeDefinition). */
174
+ CellComponent(props: {
175
+ value: V;
176
+ }): ReactElement | null;
177
+ /** Column width. Required — custom types get no built-in layout default. */
178
+ width: string;
179
+ /** Default: 'start'. */
180
+ align?: 'start' | 'center' | 'end';
181
+ }
182
+ /** An extra menu item a field type definition adds to a field's actions menu. */
183
+ export interface FieldTypeActionItem {
184
+ key: string;
185
+ label: string;
186
+ icon?: ReactNode;
187
+ skin?: 'destructive';
188
+ onClick: (field: Field) => void;
189
+ /** Default: visible. */
190
+ visible?: (field: Field) => boolean;
191
+ /** Returning a string disables the item and shows the tooltip. */
192
+ disabledTooltip?: (field: Field) => string | undefined;
193
+ }
194
+ /** The actions slot of a field type definition: extra items for the field's "more actions" menu. */
195
+ export interface FieldActionsConfig {
196
+ items?: FieldTypeActionItem[];
197
+ }
198
+ /** Display metadata for a field type: menu label and type icons. */
199
+ export interface FieldTypeDisplay {
200
+ label: string;
201
+ icons: {
202
+ Small: ComponentType;
203
+ Medium: ComponentType;
204
+ };
205
+ }
206
+ /** Value semantics of a field type, independent of any rendering surface.
207
+ * Members use method syntax so a definition typed with a concrete value type
208
+ * stays assignable where a loosely typed definition is expected. */
209
+ export interface FieldValueBehavior<V> {
210
+ defaultValue?: V;
211
+ isEmpty?(value: V): boolean;
212
+ /** Returns an error message, or null when the value is valid. Every surface
213
+ * that validates a field of this type runs this. */
214
+ validate?(value: V, rules?: ValidationRule[]): string | null;
215
+ }
216
+ export interface FieldCapabilities {
217
+ sortable: boolean;
218
+ }
219
+ /**
220
+ * A consumer-defined field type. Defined once on the fields source; every
221
+ * entry point that renders the field resolves its slot from here. `V` is the
222
+ * field's value type — `defineFieldType` infers it, and it keeps all the
223
+ * slots consistent with each other.
224
+ *
225
+ * Sources hold definitions of mixed value types in one
226
+ * `FieldTypeDefinition[]` (= `FieldTypeDefinition<unknown>[]`) array. That
227
+ * works because every member that takes `V` is declared with method syntax,
228
+ * which TypeScript checks bivariantly — so `FieldTypeDefinition<number>` is
229
+ * assignable to `FieldTypeDefinition<unknown>` without casts.
230
+ */
231
+ export interface FieldTypeDefinition<V = unknown> {
232
+ /** Unique key for the type. A built-in type uses its `PatternsFieldType`; a
233
+ * consumer-defined type uses the string its fields reference via `customType`. */
234
+ type: string;
235
+ display: FieldTypeDisplay;
236
+ /** Filter behavior, or an explicit opt-out — never silently absent. */
237
+ filter: FilterTypeConfig | {
238
+ filterable: false;
239
+ };
240
+ value?: FieldValueBehavior<V>;
241
+ capabilities?: FieldCapabilities;
242
+ /** Absent ⇒ the field renders with the default cell in the read-only table. */
243
+ table?: TableCellConfig<V>;
244
+ /** Absent ⇒ the field renders as a read-only cell in editable surfaces. */
245
+ editableTable?: EditableCellConfig<V>;
246
+ /** Extra items for the field's "more actions" menu. */
247
+ actions?: FieldActionsConfig;
248
+ }
249
+ /** Identity factory: infers `V` and keeps the definition's slots type-checked. */
250
+ export declare function defineFieldType<V>(definition: FieldTypeDefinition<V>): FieldTypeDefinition<V>;
251
+ /** Resolves the definition a CUSTOM field references on its source. */
252
+ export declare function resolveFieldTypeDefinition(source: Pick<FieldsSource, 'fieldTypes'>, field: Field): FieldTypeDefinition<unknown> | undefined;
253
+ //# sourceMappingURL=FieldTypeDefinition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldTypeDefinition.d.ts","sourceRoot":"","sources":["../../../src/types/FieldTypeDefinition.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { Field, PatternsFieldType } from './Field';
2
2
  import type { FieldActions, Schema } from './Schema';
3
+ import type { FieldTypeDefinition } from './FieldTypeDefinition';
3
4
  /** A field the source has archived. Sources without archiving omit `archive`. */
4
5
  export interface ArchivedFieldItem {
5
6
  id: string;
@@ -12,6 +13,9 @@ export interface FieldTypeOption {
12
13
  id: string;
13
14
  label: string;
14
15
  namePlaceholder?: string;
16
+ subtitle?: string;
17
+ /** Group heading in the type list; types sharing a heading form one group. */
18
+ group?: string;
15
19
  /** Drives the type icon in the modal. */
16
20
  patternsType: PatternsFieldType;
17
21
  }
@@ -39,6 +43,23 @@ export interface FieldDraft {
39
43
  writeUsers: boolean;
40
44
  containsPii: boolean;
41
45
  }
46
+ /** The add-modal subtitle: a line of text, an optional second note line, and an
47
+ * optional "learn more" link. */
48
+ export interface FieldModalSubtitle {
49
+ text: string;
50
+ note?: string;
51
+ learnMore?: {
52
+ label: string;
53
+ href: string;
54
+ };
55
+ }
56
+ /** Title and subtitle a source supplies for the add/edit field modal. */
57
+ export interface FieldModalText {
58
+ addTitle: string;
59
+ editTitle: string;
60
+ /** Subtitle for the add modal; omit for none. */
61
+ addSubtitle?: FieldModalSubtitle;
62
+ }
42
63
  /** Add/edit/delete capability a source exposes. Present ⇒ field management UI shows. */
43
64
  export interface FieldManagement {
44
65
  /** False ⇒ the add-field CTA is hidden entirely. */
@@ -58,8 +79,11 @@ export interface FieldManagement {
58
79
  maxReached?: boolean;
59
80
  /** Permission defaults; absent ⇒ the modal hides the permissions section. */
60
81
  permissions?: FieldPermissions;
61
- /** True when the source supports marking a field as PII. */
82
+ /** Source-wide default for whether a field type can be marked PII. A field
83
+ * type overrides it by declaring `form.pii` in its definition. */
62
84
  supportsPii?: boolean;
85
+ /** Title and subtitle for the add/edit field modal. */
86
+ fieldModalText: FieldModalText;
63
87
  addField(draft: FieldDraft): Promise<void>;
64
88
  editField(fieldId: string, draft: FieldDraft): Promise<void>;
65
89
  /** Current values for an existing field, to prefill the edit modal. */
@@ -104,6 +128,10 @@ export interface FieldsSource {
104
128
  * columns with no refetch. Present when the source holds its fields in a
105
129
  * mergeable state (e.g. a loaded schema); used after an import creates fields. */
106
130
  mergeFields?(fields: Schema['fields']): void;
131
+ /** Field-type definitions the source supports. Built-in types are keyed by
132
+ * their `PatternsFieldType`; consumer-defined types are keyed by the string a
133
+ * field references via `customType`. */
134
+ fieldTypes?: FieldTypeDefinition[];
107
135
  /** Present when fields can be added/edited/deleted. */
108
136
  fieldManagement?: FieldManagement;
109
137
  /** The collection's field-mutation actions (delete/makePrimary/duplicate/…),
@@ -1 +1 @@
1
- {"version":3,"file":"FieldsSource.d.ts","sourceRoot":"","sources":["../../../src/types/FieldsSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAErD,iFAAiF;AACjF,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,kFAAkF;AAClF,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,YAAY,EAAE,iBAAiB,CAAC;CACjC;AAED,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE;QACd,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,YAAY,CAAC,EAAE;QACb,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;CACH;AAED,oEAAoE;AACpE,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wFAAwF;AACxF,MAAM,WAAW,eAAe;IAC9B,oDAAoD;IACpD,YAAY,EAAE,OAAO,CAAC;IACtB,wDAAwD;IACxD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IACpC,6EAA6E;IAC7E,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D,2EAA2E;IAC3E,mBAAmB,EAAE,eAAe,EAAE,CAAC;IACvC,uEAAuE;IACvE,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,wEAAwE;IACxE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,4DAA4D;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,uEAAuE;IACvE,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;CACxD;AAED,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,0DAA0D;IAC1D,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,IAAI,IAAI,CAAC;IAClB,UAAU,IAAI,IAAI,CAAC;IACnB,6EAA6E;IAC7E,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,6DAA6D;IAC7D,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B;sDACkD;IAClD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC1B,+EAA+E;IAC/E,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC1B,yGAAyG;IACzG,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;IACvC,+GAA+G;IAC/G,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;IACnC,iDAAiD;IACjD,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IAClD,qHAAqH;IACrH,YAAY,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAEnE;;uFAEmF;IACnF,WAAW,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IAE7C,uDAAuD;IACvD,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC;mFAC+E;IAC/E,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,yDAAyD;IACzD,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,2DAA2D;IAC3D,MAAM,CAAC,EAAE;QACP,GAAG,EAAE,MAAM,EAAE,CAAC;QACd,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,CAAC;KACxC,CAAC;CACH"}
1
+ {"version":3,"file":"FieldsSource.d.ts","sourceRoot":"","sources":["../../../src/types/FieldsSource.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,8 @@ export interface Schema {
24
24
  displayField: string;
25
25
  /** The identifier field. */
26
26
  idField: string;
27
+ /** Group display order, present when fields carry a `group`. */
28
+ groups?: string[];
27
29
  /** Absent when the schema's fields cannot be edited. */
28
30
  schemaPermissions?: SchemaPermissions;
29
31
  itemPermissions?: ItemPermissions;
@@ -53,13 +55,15 @@ export interface BulkInsertResult {
53
55
  failed?: number;
54
56
  errors?: BulkInsertError[];
55
57
  }
56
- /** Item data access shared by both pagination modes. */
58
+ /** Item data access shared by both pagination modes. `find` (on
59
+ * `CollectionBackend`) is the only required call — the rest are capabilities
60
+ * a source provides when it (or its consumer) supports them. */
57
61
  export interface CollectionBackendBase<T = Record<string, unknown>> {
58
- get: (entityId: string) => Promise<T>;
59
- create: (entity: Partial<T>) => Promise<T>;
60
- update: (entity: T) => Promise<T>;
61
- delete: (entityId: string) => Promise<void>;
62
- bulkDelete: (entityIds: string[]) => Promise<void>;
62
+ get?: (entityId: string) => Promise<T>;
63
+ create?: (entity: Partial<T>) => Promise<T>;
64
+ update?: (entity: T) => Promise<T>;
65
+ delete?: (entityId: string) => Promise<void>;
66
+ bulkDelete?: (entityIds: string[]) => Promise<void>;
63
67
  move?: (id: string, params: {
64
68
  moveAfterId: string | null | undefined;
65
69
  }) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../../src/types/Schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../../src/types/Schema.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { Field, PatternsFieldType } from './Field';
2
+ import type { FieldTypeDefinition } from './FieldTypeDefinition';
2
3
  import type { Schema, LoadedSchema } from './Schema';
3
- import type { FieldPermissions } from './FieldsSource';
4
+ import type { FieldModalText, FieldPermissions } from './FieldsSource';
4
5
  import type { OffsetQuery, OffsetQueryResult } from '../hooks/paginationModeConfig';
5
6
  /** A field type a source allows creating. Declare one entry per
6
7
  * `patternsType` — the type is the entry's identity. */
@@ -10,19 +11,22 @@ export interface CreatableFieldType {
10
11
  label?: string;
11
12
  /** Custom name-input placeholder. Absent ⇒ the UI's standard placeholder. */
12
13
  namePlaceholder?: string;
13
- }
14
- /** Collection-query config derived from a source, ready to spread into a collection hook. */
15
- export interface SchemaCollectionConfig<T> {
16
- queryName: string;
17
- paginationMode: 'offset';
18
- fetchData: (query: OffsetQuery) => Promise<OffsetQueryResult<T>>;
19
- itemKey: (item: T) => string;
20
- itemName: (item: T) => string;
14
+ /** A one-line description shown under the type in the add-field menu. */
15
+ subtitle?: string;
16
+ /** The group heading this type is listed under in the add-field menu, in
17
+ * first-seen order. Types sharing a heading form one group. Absent ⇒
18
+ * ungrouped. */
19
+ group?: string;
21
20
  }
22
21
  /** What a caller passes. Only `collectionId` and `loadSchema` are required. */
23
22
  export interface SchemaSourceInput<T> {
24
23
  collectionId: string;
25
24
  loadSchema: () => Promise<LoadedSchema<T>>;
25
+ /** Sources for collections this one references, keyed by the referenced
26
+ * collection id. A renderer resolves a reference field through the matching
27
+ * entry — its `loadSchema` gives the referenced schema and `sourceFetchData`
28
+ * queries the referenced items. Default: none. */
29
+ references?: Record<string, SchemaSource<any>>;
26
30
  paginationMode?: 'offset';
27
31
  /** Stable row identity. Default: `row[idField]`. */
28
32
  itemKey?: (item: T) => string;
@@ -32,6 +36,9 @@ export interface SchemaSourceInput<T> {
32
36
  searchableFieldIds?: (schema: Schema) => string[];
33
37
  /** Field types the add-field modal offers. Default: none. */
34
38
  creatableFieldTypes?: CreatableFieldType[];
39
+ /** Consumer-defined field types. A field with `type: 'CUSTOM'` resolves its
40
+ * definition here by `customType`. Default: none. */
41
+ fieldTypes?: FieldTypeDefinition[];
35
42
  /** Default: `schemaPermissions.createField`. */
36
43
  canAddFields?: (schema: Schema) => boolean;
37
44
  /** Default: `schemaPermissions.updateField && !field.isSystem`. */
@@ -42,20 +49,47 @@ export interface SchemaSourceInput<T> {
42
49
  fieldPermissions?: FieldPermissions;
43
50
  /** Default: `false`. */
44
51
  supportsPii?: boolean;
52
+ /** Title and subtitle for the add/edit field modal. Absent ⇒ generic default. */
53
+ fieldModalText?: FieldModalText;
54
+ /** The value of a field on an item. Default: `item[field.id]`. */
55
+ getFieldValue?: (item: T, field: Field) => unknown;
56
+ /** Writes a field's value on an item, returning the updated item.
57
+ * Default: `{ ...item, [field.id]: value }`. */
58
+ setFieldValue?: (item: T, field: Field, value: unknown) => T;
45
59
  }
46
60
  /** The resolved source: defaults filled, `loadSchema` memoized. */
47
61
  export interface SchemaSource<T> {
48
62
  readonly collectionId: string;
49
63
  loadSchema: () => Promise<LoadedSchema<T>>;
50
- readonly collectionConfig: SchemaCollectionConfig<T>;
64
+ readonly paginationMode: 'offset';
65
+ /** Stable row identity. */
66
+ itemKey: (item: T) => string;
67
+ /** Row display label. */
68
+ itemName: (item: T) => string;
69
+ /** Sources for referenced collections, keyed by referenced collection id. */
70
+ readonly references: Record<string, SchemaSource<any>>;
51
71
  readonly creatableFieldTypes: CreatableFieldType[];
72
+ readonly fieldTypes: FieldTypeDefinition[];
52
73
  searchableFieldIds: (schema: Schema) => string[];
53
74
  canAddFields: (schema: Schema) => boolean;
54
75
  canEditField: (field: Field, schema: Schema) => boolean;
55
76
  canDeleteField: (field: Field, schema: Schema) => boolean;
56
77
  readonly fieldPermissions?: FieldPermissions;
57
78
  readonly supportsPii: boolean;
79
+ readonly fieldModalText?: FieldModalText;
80
+ /** The value of a field on an item. */
81
+ getFieldValue: (item: T, field: Field) => unknown;
82
+ /** Writes a field's value on an item, returning the updated item. */
83
+ setFieldValue: (item: T, field: Field, value: unknown) => T;
58
84
  }
85
+ /** The collection fetch derived from a source: loads once, then queries the
86
+ * backend's `find`.
87
+ *
88
+ * Free-text search covers the columns the page is showing: the table keeps
89
+ * `query.columns` in sync with them, so the scope comes off the query rather
90
+ * than being threaded in. Falls back to the source's own `searchableFieldIds`
91
+ * before any columns are known (or with no table attached). */
92
+ export declare function sourceFetchData<T>(source: SchemaSource<T>): (query: OffsetQuery) => Promise<OffsetQueryResult<T>>;
59
93
  /** Fills source-neutral defaults over `input` and memoizes the load so the collection
60
94
  * query and the table columns share a single fetch. */
61
95
  export declare function defineSchemaSource<T>(input: SchemaSourceInput<T>): SchemaSource<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaSource.d.ts","sourceRoot":"","sources":["../../../src/types/SchemaSource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SchemaSource.d.ts","sourceRoot":"","sources":["../../../src/types/SchemaSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAe,MAAM,UAAU,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AAEvC;yDACyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,iBAAiB,CAAC;IAChC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;qBAEiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C;;;uDAGmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,cAAc,CAAC,EAAE,QAAQ,CAAC;IAC1B,oDAAoD;IACpD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC9B,uDAAuD;IACvD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC/B,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAClD,6DAA6D;IAC7D,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC3C;0DACsD;IACtD,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACnC,gDAAgD;IAChD,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C,mEAAmE;IACnE,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IACzD,mEAAmE;IACnE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3D,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,wBAAwB;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iFAAiF;IACjF,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,kEAAkE;IAClE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;IACnD;qDACiD;IACjD,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,KAAK,CAAC,CAAC;CAC9D;AAED,mEAAmE;AACnE,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC;IAClC,2BAA2B;IAC3B,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC7B,yBAAyB;IACzB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC9B,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAC3C,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACjD,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IACxD,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,uCAAuC;IACvC,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;IAClD,qEAAqE;IACrE,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,KAAK,CAAC,CAAC;CAC7D;AAOD;;;;;;gEAMgE;AAChE,wBAAgB,eAAe,CAAC,CAAC,EAC/B,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GACtB,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAYvD;AAED;wDACwD;AACxD,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC1B,YAAY,CAAC,CAAC,CAAC,CA8EjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=defineSchemaSource.fieldTypes.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineSchemaSource.fieldTypes.spec.d.ts","sourceRoot":"","sources":["../../../../src/types/__tests__/defineSchemaSource.fieldTypes.spec.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/bex-core",
3
- "version": "2.333.0",
3
+ "version": "2.337.0",
4
4
  "license": "UNLICENSED",
5
5
  "author": {
6
6
  "name": "Kobi",
@@ -41,7 +41,7 @@
41
41
  "exports"
42
42
  ],
43
43
  "dependencies": {
44
- "@wix/bex-utils": "2.120.0",
44
+ "@wix/bex-utils": "2.124.0",
45
45
  "chance": "^1.0.0",
46
46
  "events": "^3.0.0",
47
47
  "formstate": "^2.1.0",
@@ -63,7 +63,7 @@
63
63
  "@types/react": "^16.0.0",
64
64
  "@wix/auto-crud": "^1.0.108",
65
65
  "@wix/babel-cli": "^1.11.0",
66
- "@wix/cairo-integration-utils": "1.95.0",
66
+ "@wix/cairo-integration-utils": "1.99.0",
67
67
  "@wix/eslint-config-yoshi": "^6.74.0",
68
68
  "@wix/fe-essentials": "^1.233.0",
69
69
  "@wix/fe-essentials-standalone": "^1.374.0",
@@ -169,5 +169,5 @@
169
169
  "wallaby": {
170
170
  "autoDetect": true
171
171
  },
172
- "falconPackageHash": "84f09d1e3291258b1516ffe2c0f05f1a7037351a859794c4001d4b20"
172
+ "falconPackageHash": "9e8daff437b8846c5191500f8a4eb4d94cd28215cd481467ccb364f5"
173
173
  }