@bagelink/vue 1.15.205 → 1.15.207

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.
@@ -0,0 +1,111 @@
1
+ import { BaseBagelField, BglFormSchemaT, Field, Path, SchemaChild, UploadInputProps } from '../types/BagelForm';
2
+ import { IconType, Option } from '../types';
3
+ interface InputOptions<T, P extends Path<T>> extends Partial<BaseBagelField<T, P>> {
4
+ defaultValue?: string | number;
5
+ autocomplete?: string;
6
+ }
7
+ interface DateOptions<T, K extends Path<T>> extends InputOptions<T, K> {
8
+ enableTime?: boolean;
9
+ mode?: 'day' | 'month' | 'year';
10
+ locale?: string;
11
+ timezone?: string;
12
+ }
13
+ interface TextInputOptions<T, K extends Path<T>> extends InputOptions<T, K> {
14
+ type?: 'text' | 'tel' | 'email' | 'time';
15
+ pattern?: string;
16
+ multiline?: boolean;
17
+ autoheight?: boolean;
18
+ code?: boolean;
19
+ rows?: number | string;
20
+ icon?: IconType;
21
+ iconStart?: IconType;
22
+ }
23
+ interface SlctInputOptions<T, K extends Path<T>> extends InputOptions<T, K> {
24
+ searchable?: boolean;
25
+ multiselect?: boolean;
26
+ clearable?: boolean;
27
+ onSearch?: (search: string) => any;
28
+ }
29
+ interface NumFieldOptions<T, K extends Path<T>> extends InputOptions<T, K> {
30
+ max?: number;
31
+ min?: number;
32
+ step?: number;
33
+ layout?: 'default' | 'vertical' | 'horizontal';
34
+ padZero?: number;
35
+ center?: boolean;
36
+ useGrouping?: boolean;
37
+ }
38
+ type RichTextOptions<T, P extends Path<T>> = InputOptions<T, P>;
39
+ export declare function getBaseField<T, P extends Path<T>>(id?: P, labelOrRest?: string | Partial<BaseBagelField<T, P>>, rest?: Partial<BaseBagelField<T, P>>): BaseBagelField<T, P>;
40
+ export declare function richText<T, P extends Path<T>>(id: P, label?: string, options?: RichTextOptions<T, P>): BaseBagelField<T, P>;
41
+ export declare function txtField<T, P extends Path<T>>(id: P, label?: string, options?: TextInputOptions<T, P>): BaseBagelField<T, P>;
42
+ export declare function selectField<T, P extends Path<T>>(id: P, label?: string, options?: Option[] | (() => Option[]), config?: SlctInputOptions<T, P>): BaseBagelField<T, P>;
43
+ export declare const slctField: typeof selectField;
44
+ interface CheckInputOptions<T, K extends Path<T>> extends InputOptions<T, K> {
45
+ value?: string;
46
+ }
47
+ export declare function checkField<T, P extends Path<T>>(id: P, label?: string, options?: CheckInputOptions<T, P>): BaseBagelField<T, P>;
48
+ interface EmailInputOptions<T, P extends Path<T>> extends InputOptions<T, P> {
49
+ autocorrect?: boolean;
50
+ serverValidate?: boolean;
51
+ preventFakeEmails?: boolean;
52
+ pattern?: string;
53
+ }
54
+ export declare function emailField<T, P extends Path<T>>(id: P, label?: string, options?: EmailInputOptions<T, P>): BaseBagelField<T, P>;
55
+ export declare function dateField<T, P extends Path<T>>(id: P, label?: string, options?: DateOptions<T, P>): BaseBagelField<T, P>;
56
+ export declare function numField<T, P extends Path<T>>(id: P, label?: string, options?: NumFieldOptions<T, P>): BaseBagelField<T, P>;
57
+ export declare function frmRow<T, P extends Path<T>>(...children: SchemaChild<T, P>[]): {
58
+ $el: string;
59
+ class: string;
60
+ children: SchemaChild<T, P>[];
61
+ };
62
+ export type UploadOptions<T, K extends Path<T>> = UploadInputProps & InputOptions<T, K>;
63
+ export declare function uploadField<T, P extends Path<T>>(id: P, label?: string, options?: UploadOptions<T, P>): BaseBagelField<T, P>;
64
+ interface RangeOptions<T, K extends Path<T>> extends InputOptions<T, K> {
65
+ min?: number;
66
+ max?: number;
67
+ step?: number;
68
+ rtl?: boolean;
69
+ multiRange?: boolean;
70
+ formatValue?: (value: number) => string;
71
+ }
72
+ export declare function rangeField<T, P extends Path<T>>(id: P, label?: string, options?: RangeOptions<T, P>): BaseBagelField<T, P>;
73
+ export declare function bglForm<T>(idOrField?: string | Field<T>, ...schema: Field<T>[]): {
74
+ $el: string;
75
+ id?: string;
76
+ attrs: {
77
+ schema: (string | Field<T> | undefined)[];
78
+ };
79
+ };
80
+ export declare function telField<T, P extends Path<T>>(id: P, label?: string, options?: {
81
+ [key: string]: any;
82
+ }): BaseBagelField<T, P>;
83
+ export declare function colorField<T, P extends Path<T>>(id: P, label?: string, options?: {
84
+ [key: string]: any;
85
+ }): BaseBagelField<T, P>;
86
+ export declare function findBglFieldById<T>(id: string, _schema: BglFormSchemaT<T>): Field<T> | undefined;
87
+ export interface ArrayFieldOptions<T, K extends Path<T>> extends InputOptions<T, K> {
88
+ delete?: boolean;
89
+ add?: boolean;
90
+ }
91
+ export type ArrayType = 'number' | 'text';
92
+ export declare function arrField<T, P extends Path<T>>(id: P, label: string, schemaOrType: BglFormSchemaT<any> | ArrayType, options?: ArrayFieldOptions<T, P>): BaseBagelField<T, P>;
93
+ export declare function useForm(): {
94
+ txtField: typeof txtField;
95
+ selectField: typeof selectField;
96
+ checkField: typeof checkField;
97
+ dateField: typeof dateField;
98
+ numField: typeof numField;
99
+ frmRow: typeof frmRow;
100
+ uploadField: typeof uploadField;
101
+ rangeField: typeof rangeField;
102
+ bglForm: typeof bglForm;
103
+ telField: typeof telField;
104
+ colorField: typeof colorField;
105
+ arrField: typeof arrField;
106
+ richText: typeof richText;
107
+ findBglFieldById: typeof findBglFieldById;
108
+ getBaseField: typeof getBaseField;
109
+ };
110
+ export {};
111
+ //# sourceMappingURL=BagelFormUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BagelFormUtils.d.ts","sourceRoot":"","sources":["../../src/utils/BagelFormUtils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bagelink/vue",
3
3
  "type": "module",
4
- "version": "1.15.205",
4
+ "version": "1.15.207",
5
5
  "description": "Bagel core sdk packages",
6
6
  "author": {
7
7
  "name": "Bagel Studio",
package/src/index.ts CHANGED
@@ -31,6 +31,7 @@ export { type BagelToastOptions, type ToastApi, ToastPlugin, useToast } from './
31
31
 
32
32
  export * from './types'
33
33
  export * from './utils'
34
+ export * as bagelFormUtils from './utils/BagelFormUtils'
34
35
  export * from './utils/allCountries'
35
36
  export * from './utils/calendar/dateUtils'
36
37
 
@@ -0,0 +1,341 @@
1
+ /**
2
+ * BagelFormUtils — legacy `$el`-based schema-builder helpers.
3
+ *
4
+ * These construct `BaseBagelField` descriptors for the object-schema form
5
+ * renderer (`BagelForm` / `BglFormSchemaT`). Retained for backwards
6
+ * compatibility with consumers (e.g. Blox block configs) that author form
7
+ * schemas with `txtField`/`slctField`/`frmRow`/… rather than the newer
8
+ * `defineSchema`/FormFlow API. Pure factory functions, no runtime deps.
9
+ *
10
+ * Re-exported as the `bagelFormUtils` namespace from the package root.
11
+ */
12
+ import type {
13
+ BaseBagelField,
14
+ BglFormSchemaT,
15
+ Field,
16
+ Path,
17
+ SchemaChild,
18
+ UploadInputProps,
19
+ } from '../types/BagelForm'
20
+ import type { IconType, Option } from '../types'
21
+
22
+ interface InputOptions<T, P extends Path<T>> extends Partial<BaseBagelField<T, P>> {
23
+ defaultValue?: string | number
24
+ autocomplete?: string
25
+ }
26
+
27
+ interface DateOptions<T, K extends Path<T>> extends InputOptions<T, K> {
28
+ enableTime?: boolean
29
+ mode?: 'day' | 'month' | 'year'
30
+ locale?: string
31
+ timezone?: string
32
+ }
33
+
34
+ interface TextInputOptions<T, K extends Path<T>> extends InputOptions<T, K> {
35
+ type?: 'text' | 'tel' | 'email' | 'time'
36
+ pattern?: string
37
+ multiline?: boolean
38
+ autoheight?: boolean
39
+ code?: boolean
40
+ rows?: number | string
41
+ icon?: IconType
42
+ iconStart?: IconType
43
+ }
44
+
45
+ interface SlctInputOptions<T, K extends Path<T>> extends InputOptions<T, K> {
46
+ searchable?: boolean
47
+ multiselect?: boolean
48
+ clearable?: boolean
49
+ onSearch?: (search: string) => any
50
+ }
51
+
52
+ interface NumFieldOptions<T, K extends Path<T>> extends InputOptions<T, K> {
53
+ max?: number
54
+ min?: number
55
+ step?: number
56
+ layout?: 'default' | 'vertical' | 'horizontal'
57
+ padZero?: number
58
+ center?: boolean
59
+ useGrouping?: boolean
60
+ }
61
+
62
+ type RichTextOptions<T, P extends Path<T>> = InputOptions<T, P>
63
+
64
+ export function getBaseField<T, P extends Path<T>>(
65
+ id?: P,
66
+ labelOrRest: string | Partial<BaseBagelField<T, P>> = {},
67
+ rest: Partial<BaseBagelField<T, P>> = {},
68
+ ): BaseBagelField<T, P> {
69
+ if (typeof labelOrRest === 'object') return { id, ...labelOrRest }
70
+ return { id, label: labelOrRest, ...rest }
71
+ }
72
+
73
+ export function richText<T, P extends Path<T>>(id: P, label?: string, options?: RichTextOptions<T, P>): BaseBagelField<T, P> {
74
+ return {
75
+ $el: 'richtext',
76
+ class: options?.class,
77
+ required: options?.required,
78
+ id,
79
+ label,
80
+ vIf: options?.vIf,
81
+ placeholder: options?.placeholder,
82
+ attrs: { autocomplete: options?.autocomplete },
83
+ }
84
+ }
85
+
86
+ export function txtField<T, P extends Path<T>>(id: P, label?: string, options?: TextInputOptions<T, P>): BaseBagelField<T, P> {
87
+ return {
88
+ $el: 'text',
89
+ id,
90
+ label,
91
+ class: options?.class,
92
+ required: options?.required,
93
+ vIf: options?.vIf,
94
+ disabled: options?.disabled,
95
+ placeholder: options?.placeholder,
96
+ defaultValue: options?.defaultValue,
97
+ validate: options?.validate,
98
+ onUpdate: options?.onUpdate,
99
+ attrs: {
100
+ type: options?.type,
101
+ pattern: options?.pattern,
102
+ multiline: options?.multiline,
103
+ autocomplete: options?.autocomplete,
104
+ rows: options?.rows,
105
+ code: options?.code,
106
+ autoheight: options?.autoheight,
107
+ icon: options?.icon,
108
+ iconStart: options?.iconStart,
109
+ },
110
+ }
111
+ }
112
+
113
+ export function selectField<T, P extends Path<T>>(
114
+ id: P,
115
+ label?: string,
116
+ options?: Option[] | (() => Option[]),
117
+ config?: SlctInputOptions<T, P>,
118
+ ): BaseBagelField<T, P> {
119
+ return {
120
+ $el: 'select',
121
+ id,
122
+ // Runtime renderer also accepts a lazy `() => Option[]` loader, which the
123
+ // static `FieldOptions` type doesn't model — cast to preserve that.
124
+ options: options as BaseBagelField<T, P>['options'],
125
+ class: config?.class,
126
+ placeholder: config?.placeholder,
127
+ required: config?.required,
128
+ label,
129
+ defaultValue: config?.defaultValue,
130
+ vIf: config?.vIf,
131
+ attrs: {
132
+ disabled: config?.disabled,
133
+ searchable: config?.searchable,
134
+ multiselect: config?.multiselect,
135
+ onSearch: config?.onSearch,
136
+ clearable: config?.clearable,
137
+ autocomplete: config?.autocomplete,
138
+ },
139
+ }
140
+ }
141
+
142
+ export const slctField = selectField
143
+
144
+ interface CheckInputOptions<T, K extends Path<T>> extends InputOptions<T, K> {
145
+ value?: string
146
+ }
147
+
148
+ export function checkField<T, P extends Path<T>>(id: P, label?: string, options?: CheckInputOptions<T, P>): BaseBagelField<T, P> {
149
+ return {
150
+ $el: 'check',
151
+ class: options?.class,
152
+ required: options?.required,
153
+ id,
154
+ label,
155
+ attrs: { value: options?.value },
156
+ }
157
+ }
158
+
159
+ interface EmailInputOptions<T, P extends Path<T>> extends InputOptions<T, P> {
160
+ autocorrect?: boolean
161
+ serverValidate?: boolean
162
+ preventFakeEmails?: boolean
163
+ pattern?: string
164
+ }
165
+
166
+ export function emailField<T, P extends Path<T>>(id: P, label?: string, options?: EmailInputOptions<T, P>): BaseBagelField<T, P> {
167
+ return {
168
+ $el: 'email',
169
+ id,
170
+ label,
171
+ class: options?.class,
172
+ required: options?.required,
173
+ vIf: options?.vIf,
174
+ attrs: {
175
+ autocorrect: options?.autocorrect,
176
+ serverValidate: options?.serverValidate,
177
+ preventFakeEmails: options?.preventFakeEmails,
178
+ pattern: options?.pattern,
179
+ },
180
+ }
181
+ }
182
+
183
+ export function dateField<T, P extends Path<T>>(id: P, label?: string, options?: DateOptions<T, P>): BaseBagelField<T, P> {
184
+ return {
185
+ $el: 'date',
186
+ class: options?.class,
187
+ required: options?.required,
188
+ id,
189
+ disabled: options?.disabled,
190
+ label,
191
+ defaultValue: options?.defaultValue,
192
+ vIf: options?.vIf,
193
+ attrs: {
194
+ disabled: options?.disabled,
195
+ autocomplete: options?.autocomplete,
196
+ enableTime: options?.enableTime,
197
+ mode: options?.mode,
198
+ locale: options?.locale,
199
+ timezone: options?.timezone,
200
+ },
201
+ }
202
+ }
203
+
204
+ export function numField<T, P extends Path<T>>(id: P, label?: string, options?: NumFieldOptions<T, P>): BaseBagelField<T, P> {
205
+ return {
206
+ $el: 'number',
207
+ class: options?.class,
208
+ required: options?.required,
209
+ defaultValue: options?.defaultValue,
210
+ id,
211
+ label,
212
+ disabled: options?.disabled,
213
+ placeholder: options?.placeholder,
214
+ helptext: options?.helptext,
215
+ vIf: options?.vIf,
216
+ attrs: {
217
+ autocomplete: options?.autocomplete,
218
+ step: options?.step,
219
+ min: options?.min,
220
+ max: options?.max,
221
+ layout: options?.layout,
222
+ padZero: options?.padZero,
223
+ center: options?.center,
224
+ useGrouping: options?.useGrouping,
225
+ },
226
+ }
227
+ }
228
+
229
+ export function frmRow<T, P extends Path<T>>(...children: SchemaChild<T, P>[]): {
230
+ $el: string
231
+ class: string
232
+ children: SchemaChild<T, P>[]
233
+ } {
234
+ return { $el: 'div', class: 'flex gap-1 m_block align-items-end', children }
235
+ }
236
+
237
+ export type UploadOptions<T, K extends Path<T>> = UploadInputProps & InputOptions<T, K>
238
+
239
+ export function uploadField<T, P extends Path<T>>(id: P, label?: string, options?: UploadOptions<T, P>): BaseBagelField<T, P> {
240
+ return { $el: 'upload', id, label, vIf: options?.vIf, attrs: { ...options } }
241
+ }
242
+
243
+ interface RangeOptions<T, K extends Path<T>> extends InputOptions<T, K> {
244
+ min?: number
245
+ max?: number
246
+ step?: number
247
+ rtl?: boolean
248
+ multiRange?: boolean
249
+ formatValue?: (value: number) => string
250
+ }
251
+
252
+ export function rangeField<T, P extends Path<T>>(id: P, label?: string, options?: RangeOptions<T, P>): BaseBagelField<T, P> {
253
+ return {
254
+ $el: 'range',
255
+ id,
256
+ label,
257
+ vIf: options?.vIf,
258
+ attrs: {
259
+ autocomplete: options?.autocomplete,
260
+ min: options?.min,
261
+ max: options?.max,
262
+ step: options?.step,
263
+ rtl: options?.rtl,
264
+ multiRange: options?.multiRange,
265
+ formatValue: options?.formatValue,
266
+ },
267
+ }
268
+ }
269
+
270
+ export function bglForm<T>(idOrField?: string | Field<T>, ...schema: Field<T>[]): {
271
+ $el: string
272
+ id?: string
273
+ attrs: { schema: (string | Field<T> | undefined)[] }
274
+ } {
275
+ if (typeof idOrField === 'string') {
276
+ return { $el: 'bagelform', id: idOrField, attrs: { schema: [idOrField, ...schema] } }
277
+ }
278
+ return { $el: 'bagelform', attrs: { schema: [idOrField, ...schema] } }
279
+ }
280
+
281
+ export function telField<T, P extends Path<T>>(id: P, label?: string, options?: { [key: string]: any }): BaseBagelField<T, P> {
282
+ return { $el: 'tel', id, label, vIf: options?.vIf, attrs: options, class: options?.class }
283
+ }
284
+
285
+ export function colorField<T, P extends Path<T>>(id: P, label?: string, options?: { [key: string]: any }): BaseBagelField<T, P> {
286
+ return { $el: 'color', id, label, vIf: options?.vIf, attrs: options, class: options?.class }
287
+ }
288
+
289
+ export function findBglFieldById<T>(id: string, _schema: BglFormSchemaT<T>): Field<T> | undefined {
290
+ for (const field of _schema) {
291
+ if ((field as BaseBagelField<T, Path<T>>).id === id) return field as Field<T>
292
+ const children = (field as BaseBagelField<T, Path<T>>).children
293
+ if (children && Number(children.length) > 0) {
294
+ const fieldChildren = children.filter(
295
+ (c): c is Field<T> => typeof c === 'object' && c !== null && '$el' in c,
296
+ )
297
+ const child = findBglFieldById(id, fieldChildren as BglFormSchemaT<T>)
298
+ if (child) return child
299
+ }
300
+ }
301
+ return undefined
302
+ }
303
+
304
+ export interface ArrayFieldOptions<T, K extends Path<T>> extends InputOptions<T, K> {
305
+ delete?: boolean
306
+ add?: boolean
307
+ }
308
+
309
+ export type ArrayType = 'number' | 'text'
310
+
311
+ export function arrField<T, P extends Path<T>>(
312
+ id: P,
313
+ label: string,
314
+ schemaOrType: BglFormSchemaT<any> | ArrayType,
315
+ options?: ArrayFieldOptions<T, P>,
316
+ ): BaseBagelField<T, P> {
317
+ const attrs: Record<string, any> = { delete: true, add: true, ...options }
318
+ if (typeof schemaOrType === 'string') attrs.type = schemaOrType
319
+ else attrs.schema = schemaOrType
320
+ return { label, id, class: options?.class, $el: 'array', vIf: options?.vIf, attrs }
321
+ }
322
+
323
+ export function useForm() {
324
+ return {
325
+ txtField,
326
+ selectField,
327
+ checkField,
328
+ dateField,
329
+ numField,
330
+ frmRow,
331
+ uploadField,
332
+ rangeField,
333
+ bglForm,
334
+ telField,
335
+ colorField,
336
+ arrField,
337
+ richText,
338
+ findBglFieldById,
339
+ getBaseField,
340
+ }
341
+ }