@webiny/app-admin 6.5.0-beta.5 → 6.5.0-beta.6
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/features/formModel/FieldBuilder.test.js +13 -0
- package/features/formModel/FieldBuilder.test.js.map +1 -1
- package/features/formModel/FormModel.test.js +202 -0
- package/features/formModel/FormModel.test.js.map +1 -1
- package/features/formModel/ObjectField.d.ts +2 -0
- package/features/formModel/ObjectField.js +18 -3
- package/features/formModel/ObjectField.js.map +1 -1
- package/features/formModel/abstractions.d.ts +13 -0
- package/features/formModel/abstractions.js.map +1 -1
- package/features/formModel/fieldTypes/DateTimeFieldType.js +5 -4
- package/features/formModel/fieldTypes/DateTimeFieldType.js.map +1 -1
- package/features/formModel/fieldTypes/ObjectFieldType.d.ts +3 -1
- package/features/formModel/fieldTypes/ObjectFieldType.js +17 -1
- package/features/formModel/fieldTypes/ObjectFieldType.js.map +1 -1
- package/package.json +19 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/formModel/fieldTypes/DateTimeFieldType.js","sources":["../../../../src/features/formModel/fieldTypes/DateTimeFieldType.ts"],"sourcesContent":["import { FieldType, type IFieldTypeFactory } from \"../abstractions.js\";\nimport { FieldBuilder } from \"../FieldBuilder.js\";\n\ntype DateTimeSubtype =\n | \"date\"\n | \"time\"\n | \"dateTimeWithTimezone\"\n | \"dateTimeWithoutTimezone\"\n | \"month\"\n | \"week\"\n | \"year\"\n | \"dateRange\"\n | \"multipleDates\"\n | \"multipleMonths\"\n | \"multipleYears\";\n\nexport class DateTimeFieldBuilder extends FieldBuilder<\"datetime\"> {\n private _subtype: DateTimeSubtype = \"date\";\n\n constructor() {\n super(\"datetime\");\n this._config.renderer = \"dateTimeInput\";\n this._config.rendererSettings = { type: \"date\" };\n }\n\n override list(): this {\n super.list();\n this._config.renderer = \"dateTimeInputs\";\n return this;\n }\n\n /** Subtype methods reset the renderer; a list field keeps the list renderer. */\n private _defaultRenderer(): \"dateTimeInput\" | \"dateTimeInputs\" {\n return this._config.isList ? \"dateTimeInputs\" : \"dateTimeInput\";\n }\n\n /**\n * Calendar date only.\n * @example datetime().dateOnly()\n *\n * Value format: `\"2026-05-01\"` (YYYY-MM-DD)\n */\n dateOnly(): this {\n this._subtype = \"date\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = { ...this._config.rendererSettings, type: \"date\" };\n return this;\n }\n\n /**\n * Time only, no date component.\n * @example datetime().timeOnly()\n *\n * Value format: `\"14:30:00\"` (HH:mm:ss)\n */\n timeOnly(): this {\n this._subtype = \"time\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = { ...this._config.rendererSettings, type: \"time\" };\n return this;\n }\n\n /**\n * Date and time with explicit timezone offset.\n * @example datetime().withTimezone()\n *\n * Value format: `\"2026-05-01T14:30:00+02:00\"` (ISO 8601 with offset)\n */\n withTimezone(): this {\n this._subtype = \"dateTimeWithTimezone\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"dateTimeWithTimezone\"\n };\n return this;\n }\n\n /**\n * Date and time in UTC, no timezone offset.\n * @example datetime().withoutTimezone()\n *\n * Value format: `\"2026-05-01T14:30:00.000Z\"` (ISO 8601 UTC)\n */\n withoutTimezone(): this {\n this._subtype = \"dateTimeWithoutTimezone\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"dateTimeWithoutTimezone\"\n };\n return this;\n }\n\n /**\n * Month and year picker.\n * @example datetime().monthOnly()\n *\n * Value format: `\"2026-05\"` (YYYY-MM)\n */\n monthOnly(): this {\n this._subtype = \"month\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = { ...this._config.rendererSettings, type: \"month\" };\n return this;\n }\n\n /**\n * ISO week picker. Selecting any day highlights and selects the full week.\n * @example\n * datetime().weekOnly()\n * datetime().weekOnly({ startsOn: 1 }) // weeks start on Monday\n *\n * Value format: `\"2026-W18\"` (YYYY-Www)\n */\n weekOnly(options?: { startsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 }): this {\n this._subtype = \"week\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"week\",\n ...(options?.startsOn !== undefined && { weekStartsOn: options.startsOn })\n };\n return this;\n }\n\n /**\n * Year picker with a scrollable grid.\n * @example\n * datetime().yearOnly()\n * datetime().yearOnly({ range: [2010, 2030] })\n *\n * Value format: `2026` (number)\n */\n yearOnly(options?: { range?: [number, number] }): this {\n this._subtype = \"year\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"year\",\n ...(options?.range && { yearRange: options.range })\n };\n return this;\n }\n\n /**\n * Date range picker with a two-month calendar.\n * @example datetime().dateRange()\n *\n * Value format: `{ from: \"2026-05-01\", to: \"2026-05-15\" }`\n */\n dateRange(): this {\n this._subtype = \"dateRange\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = { ...this._config.rendererSettings, type: \"dateRange\" };\n return this;\n }\n\n /**\n * Select multiple individual dates.\n * @example datetime().multipleDates()\n *\n * Value format: `[\"2026-05-01\", \"2026-05-03\"]`\n */\n multipleDates(): this {\n this._subtype = \"multipleDates\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"multipleDates\"\n };\n return this;\n }\n\n /**\n * Select multiple months.\n * @example datetime().multipleMonths()\n *\n * Value format: `[\"2026-01\", \"2026-03\"]`\n */\n multipleMonths(): this {\n this._subtype = \"multipleMonths\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"multipleMonths\"\n };\n return this;\n }\n\n /**\n * Select multiple years.\n * @example\n * datetime().multipleYears()\n * datetime().multipleYears({ range: [2020, 2035] })\n *\n * Value format: `[2024, 2025, 2026]`\n */\n multipleYears(options?: { range?: [number, number] }): this {\n this._subtype = \"multipleYears\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"multipleYears\",\n ...(options?.range && { yearRange: options.range })\n };\n return this;\n }\n\n /**\n * Add quick-select preset buttons to the picker. Available on all variants.\n * Each preset's `value` function is called at click time, and the variant\n * handles formatting the Date into its value type.\n * @example\n * datetime().dateOnly().presets([\n * { label: \"Today\", value: () => new Date() },\n * { label: \"In a week\", value: () => addDays(new Date(), 7) }\n * ])\n */\n presets(presets: Array<{ label: string; value: () => Date }>): this {\n this._config.rendererSettings = { ...this._config.rendererSettings, presets };\n return this;\n }\n\n /**\n * Customize the display format shown in the picker trigger.\n * Uses date-fns format tokens.\n * @example\n * datetime().dateOnly().displayFormat(\"MM/dd/yyyy\") // \"05/01/2026\"\n * datetime().dateOnly().displayFormat(\"dd MMM yyyy\") // \"01 May 2026\"\n * datetime().monthOnly().displayFormat(\"MMMM yyyy\") // \"May 2026\"\n */\n displayFormat(format: string): this {\n this._config.rendererSettings = { ...this._config.rendererSettings, displayFormat: format };\n return this;\n }\n\n override normalizeValue(value: unknown): unknown {\n if (value == null || value === \"\") {\n return value;\n }\n switch (this._subtype) {\n case \"date\":\n return normalizeDateOnly(String(value));\n case \"time\":\n return normalizeTime(String(value));\n case \"dateTimeWithoutTimezone\":\n return normalizeDateTimeWithoutTimezone(String(value));\n case \"dateTimeWithTimezone\":\n return normalizeDateTimeWithTimezone(String(value));\n case \"month\":\n return normalizeMonth(String(value));\n case \"week\":\n return normalizeWeek(String(value));\n case \"year\":\n return normalizeYear(value);\n case \"dateRange\":\n case \"multipleDates\":\n case \"multipleMonths\":\n return value;\n case \"multipleYears\":\n return normalizeMultipleYears(value);\n default:\n return value;\n }\n }\n}\n\nfunction normalizeDateOnly(value: string): string {\n try {\n return new Date(value).toISOString().slice(0, 10);\n } catch {\n return value;\n }\n}\n\nfunction normalizeTime(value: string): string {\n if (!value.includes(\":\")) {\n return value;\n }\n const parts = value.split(\":\");\n if (parts.length === 3) {\n return value;\n }\n if (parts.length === 2) {\n return `${value}:00`;\n }\n return value;\n}\n\nfunction normalizeDateTimeWithoutTimezone(value: string): string {\n if (!value.includes(\" \") && !value.includes(\"T\")) {\n return value;\n }\n try {\n const normalized = value.includes(\" \") ? value.replace(\" \", \"T\") : value;\n const withZ =\n normalized.endsWith(\"Z\") ||\n normalized.includes(\"+\") ||\n /\\d-\\d{2}:\\d{2}$/.test(normalized)\n ? normalized\n : `${normalized}.000Z`;\n return new Date(withZ).toISOString();\n } catch {\n return value;\n }\n}\n\nfunction normalizeDateTimeWithTimezone(value: string): string {\n if (!value.includes(\"T\")) {\n return value;\n }\n const [initialDate, rest] = value.split(\"T\");\n if (!rest) {\n return value;\n }\n\n let date: string;\n try {\n date = new Date(initialDate).toISOString().slice(0, 10);\n } catch {\n return value;\n }\n\n const sign = rest.includes(\"+\") ? \"+\" : \"-\";\n const [timePart, tz] = rest.split(sign);\n const time = normalizeTime(timePart);\n\n return `${date}T${time}${sign}${tz}`;\n}\n\nfunction normalizeMonth(value: string): string {\n if (/^\\d{4}-\\d{2}$/.test(value)) {\n return value;\n }\n try {\n const d = new Date(value);\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, \"0\");\n return `${y}-${m}`;\n } catch {\n return value;\n }\n}\n\nfunction normalizeWeek(value: string): string {\n if (/^\\d{4}-W\\d{2}$/.test(value)) {\n return value;\n }\n return value;\n}\n\nfunction normalizeYear(value: unknown): number | unknown {\n const num = Number(value);\n if (!Number.isNaN(num) && Number.isFinite(num)) {\n return Math.round(num);\n }\n return value;\n}\n\nfunction normalizeMultipleYears(value: unknown): unknown {\n if (!Array.isArray(value)) {\n return value;\n }\n return value.map(v => {\n const num = Number(v);\n return !Number.isNaN(num) && Number.isFinite(num) ? Math.round(num) : v;\n });\n}\n\nclass DateTimeFieldTypeFactory implements IFieldTypeFactory {\n readonly type = \"datetime\";\n create(_registry: any) {\n return new DateTimeFieldBuilder();\n }\n}\n\nexport const DateTimeFieldType = FieldType.createImplementation({\n implementation: DateTimeFieldTypeFactory,\n dependencies: []\n});\n\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n /**\n * Defines a field that stores date and/or time values.\n *\n * Variant methods (pick one):\n * - `dateOnly()` — \"2026-05-01\"\n * - `timeOnly()` — \"14:30:00\"\n * - `withoutTimezone()` — \"2026-05-01T14:30:00.000Z\"\n * - `withTimezone()` — \"2026-05-01T14:30:00+02:00\"\n * - `monthOnly()` — \"2026-05\"\n * - `weekOnly()` — \"2026-W18\"\n * - `yearOnly()` — 2026\n * - `dateRange()` — { from: \"2026-05-01\", to: \"2026-05-15\" }\n * - `multipleDates()` — [\"2026-05-01\", \"2026-05-03\"]\n * - `multipleMonths()` — [\"2026-01\", \"2026-03\"]\n * - `multipleYears()` — [2024, 2025, 2026]\n *\n * Configuration methods (chain after variant):\n * - `.presets([...])` — quick-select buttons (all variants)\n * - `.displayFormat(\"MM/dd/yyyy\")` — customize trigger display\n *\n * Variant-specific options (passed to variant method):\n * - `yearOnly({ range: [2020, 2030] })` — year range\n * - `multipleYears({ range: [2020, 2035] })` — year range\n * - `weekOnly({ startsOn: 1 })` — first day of week (0=Sun, 1=Mon)\n *\n * @example\n * datetime() // full UTC datetime (default)\n * datetime().dateOnly() // birthdays, due dates, holidays\n * datetime().timeOnly() // opening hours, daily reminders\n * datetime().withTimezone() // events tied to a specific locale\n * datetime().withoutTimezone() // timestamps, logs, sortable moments\n * datetime().monthOnly() // billing cycles, report periods\n * datetime().weekOnly() // sprint planning, weekly schedules\n * datetime().yearOnly({ range: [2010, 2030] }) // fiscal years\n * datetime().dateRange() // vacation requests, booking windows\n * datetime().multipleDates() // blackout dates, recurring events\n * datetime().multipleMonths() // seasonal availability\n * datetime().multipleYears({ range: [2020, 2035] }) // multi-year budgets\n * datetime().dateOnly().presets([...]).displayFormat(\"dd/MM/yyyy\")\n */\n datetime(): DateTimeFieldBuilder;\n }\n}\n"],"names":["DateTimeFieldBuilder","FieldBuilder","options","undefined","presets","format","value","normalizeDateOnly","String","normalizeTime","normalizeDateTimeWithoutTimezone","normalizeDateTimeWithTimezone","normalizeMonth","normalizeWeek","normalizeYear","normalizeMultipleYears","Date","parts","normalized","withZ","initialDate","rest","date","sign","timePart","tz","time","d","y","m","num","Number","Math","Array","v","DateTimeFieldTypeFactory","_registry","DateTimeFieldType","FieldType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"features/formModel/fieldTypes/DateTimeFieldType.js","sources":["../../../../src/features/formModel/fieldTypes/DateTimeFieldType.ts"],"sourcesContent":["import { FieldType, type IFieldTypeFactory } from \"../abstractions.js\";\nimport { FieldBuilder } from \"../FieldBuilder.js\";\n\ntype DateTimeSubtype =\n | \"date\"\n | \"time\"\n | \"dateTimeWithTimezone\"\n | \"dateTimeWithoutTimezone\"\n | \"month\"\n | \"week\"\n | \"year\"\n | \"dateRange\"\n | \"multipleDates\"\n | \"multipleMonths\"\n | \"multipleYears\";\n\nexport class DateTimeFieldBuilder extends FieldBuilder<\"datetime\"> {\n private _subtype: DateTimeSubtype = \"date\";\n\n constructor() {\n super(\"datetime\");\n this._config.renderer = \"dateTimeInput\";\n this._config.rendererSettings = { type: \"date\" };\n }\n\n override list(): this {\n super.list();\n this._config.renderer = \"dateTimeInputs\";\n return this;\n }\n\n /** Subtype methods reset the renderer; a list field keeps the list renderer. */\n private _defaultRenderer(): \"dateTimeInput\" | \"dateTimeInputs\" {\n return this._config.isList ? \"dateTimeInputs\" : \"dateTimeInput\";\n }\n\n /**\n * Calendar date only.\n * @example datetime().dateOnly()\n *\n * Value format: `\"2026-05-01\"` (YYYY-MM-DD)\n */\n dateOnly(): this {\n this._subtype = \"date\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = { ...this._config.rendererSettings, type: \"date\" };\n return this;\n }\n\n /**\n * Time only, no date component.\n * @example datetime().timeOnly()\n *\n * Value format: `\"14:30:00\"` (HH:mm:ss)\n */\n timeOnly(): this {\n this._subtype = \"time\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = { ...this._config.rendererSettings, type: \"time\" };\n return this;\n }\n\n /**\n * Date and time with explicit timezone offset.\n * @example datetime().withTimezone()\n *\n * Value format: `\"2026-05-01T14:30:00+02:00\"` (ISO 8601 with offset)\n */\n withTimezone(): this {\n this._subtype = \"dateTimeWithTimezone\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"dateTimeWithTimezone\"\n };\n return this;\n }\n\n /**\n * Date and time in UTC, no timezone offset.\n * @example datetime().withoutTimezone()\n *\n * Value format: `\"2026-05-01T14:30:00.000Z\"` (ISO 8601 UTC)\n */\n withoutTimezone(): this {\n this._subtype = \"dateTimeWithoutTimezone\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"dateTimeWithoutTimezone\"\n };\n return this;\n }\n\n /**\n * Month and year picker.\n * @example datetime().monthOnly()\n *\n * Value format: `\"2026-05\"` (YYYY-MM)\n */\n monthOnly(): this {\n this._subtype = \"month\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = { ...this._config.rendererSettings, type: \"month\" };\n return this;\n }\n\n /**\n * ISO week picker. Selecting any day highlights and selects the full week.\n * @example\n * datetime().weekOnly()\n * datetime().weekOnly({ startsOn: 1 }) // weeks start on Monday\n *\n * Value format: `\"2026-W18\"` (YYYY-Www)\n */\n weekOnly(options?: { startsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 }): this {\n this._subtype = \"week\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"week\",\n ...(options?.startsOn !== undefined && { weekStartsOn: options.startsOn })\n };\n return this;\n }\n\n /**\n * Year picker with a scrollable grid.\n * @example\n * datetime().yearOnly()\n * datetime().yearOnly({ range: [2010, 2030] })\n *\n * Value format: `2026` (number)\n */\n yearOnly(options?: { range?: [number, number] }): this {\n this._subtype = \"year\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"year\",\n ...(options?.range && { yearRange: options.range })\n };\n return this;\n }\n\n /**\n * Date range picker with a two-month calendar.\n * @example datetime().dateRange()\n *\n * Value format: `{ from: \"2026-05-01\", to: \"2026-05-15\" }`\n */\n dateRange(): this {\n this._subtype = \"dateRange\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = { ...this._config.rendererSettings, type: \"dateRange\" };\n return this;\n }\n\n /**\n * Select multiple individual dates.\n * @example datetime().multipleDates()\n *\n * Value format: `[\"2026-05-01\", \"2026-05-03\"]`\n */\n multipleDates(): this {\n this._subtype = \"multipleDates\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"multipleDates\"\n };\n return this;\n }\n\n /**\n * Select multiple months.\n * @example datetime().multipleMonths()\n *\n * Value format: `[\"2026-01\", \"2026-03\"]`\n */\n multipleMonths(): this {\n this._subtype = \"multipleMonths\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"multipleMonths\"\n };\n return this;\n }\n\n /**\n * Select multiple years.\n * @example\n * datetime().multipleYears()\n * datetime().multipleYears({ range: [2020, 2035] })\n *\n * Value format: `[2024, 2025, 2026]`\n */\n multipleYears(options?: { range?: [number, number] }): this {\n this._subtype = \"multipleYears\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"multipleYears\",\n ...(options?.range && { yearRange: options.range })\n };\n return this;\n }\n\n /**\n * Add quick-select preset buttons to the picker. Available on all variants.\n * Each preset's `value` function is called at click time, and the variant\n * handles formatting the Date into its value type.\n * @example\n * datetime().dateOnly().presets([\n * { label: \"Today\", value: () => new Date() },\n * { label: \"In a week\", value: () => addDays(new Date(), 7) }\n * ])\n */\n presets(presets: Array<{ label: string; value: () => Date }>): this {\n this._config.rendererSettings = { ...this._config.rendererSettings, presets };\n return this;\n }\n\n /**\n * Customize the display format shown in the picker trigger.\n * Uses date-fns format tokens.\n * @example\n * datetime().dateOnly().displayFormat(\"MM/dd/yyyy\") // \"05/01/2026\"\n * datetime().dateOnly().displayFormat(\"dd MMM yyyy\") // \"01 May 2026\"\n * datetime().monthOnly().displayFormat(\"MMMM yyyy\") // \"May 2026\"\n */\n displayFormat(format: string): this {\n this._config.rendererSettings = { ...this._config.rendererSettings, displayFormat: format };\n return this;\n }\n\n override normalizeValue(value: unknown): unknown {\n if (value == null || value === \"\") {\n return value;\n }\n switch (this._subtype) {\n case \"date\":\n return normalizeDateOnly(String(value));\n case \"time\":\n return normalizeTime(String(value));\n case \"dateTimeWithoutTimezone\":\n return normalizeDateTimeWithoutTimezone(String(value));\n case \"dateTimeWithTimezone\":\n return normalizeDateTimeWithTimezone(String(value));\n case \"month\":\n return normalizeMonth(String(value));\n case \"week\":\n return normalizeWeek(String(value));\n case \"year\":\n return normalizeYear(value);\n case \"dateRange\":\n case \"multipleDates\":\n case \"multipleMonths\":\n return value;\n case \"multipleYears\":\n return normalizeMultipleYears(value);\n default:\n return value;\n }\n }\n}\n\nfunction normalizeDateOnly(value: string): string {\n try {\n return new Date(value).toISOString().slice(0, 10);\n } catch {\n return value;\n }\n}\n\nfunction normalizeTime(value: string): string {\n if (!value.includes(\":\")) {\n return value;\n }\n const parts = value.split(\":\");\n if (parts.length === 3) {\n return value;\n }\n if (parts.length === 2) {\n return `${value}:00`;\n }\n return value;\n}\n\nfunction normalizeDateTimeWithoutTimezone(value: string): string {\n if (!value.includes(\" \") && !value.includes(\"T\")) {\n return value;\n }\n try {\n const normalized = value.includes(\" \") ? value.replace(\" \", \"T\") : value;\n const withZ =\n normalized.endsWith(\"Z\") ||\n normalized.includes(\"+\") ||\n /\\d-\\d{2}:\\d{2}$/.test(normalized)\n ? normalized\n : `${normalized}.000Z`;\n return new Date(withZ).toISOString();\n } catch {\n return value;\n }\n}\n\nfunction normalizeDateTimeWithTimezone(value: string): string {\n if (!value.includes(\"T\")) {\n return value;\n }\n const [initialDate, rest] = value.split(\"T\");\n if (!rest) {\n return value;\n }\n\n const match = rest.match(/^(.+?)(Z|[+-]\\d{2}:\\d{2})$/);\n if (!match) {\n return value;\n }\n const [, timePart, zone] = match;\n\n let date: string;\n try {\n date = new Date(initialDate).toISOString().slice(0, 10);\n } catch {\n return value;\n }\n\n // A UTC value is valid; express it with the explicit offset the API expects.\n const tz = zone === \"Z\" ? \"+00:00\" : zone;\n\n return `${date}T${normalizeTime(timePart)}${tz}`;\n}\n\nfunction normalizeMonth(value: string): string {\n if (/^\\d{4}-\\d{2}$/.test(value)) {\n return value;\n }\n try {\n const d = new Date(value);\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, \"0\");\n return `${y}-${m}`;\n } catch {\n return value;\n }\n}\n\nfunction normalizeWeek(value: string): string {\n if (/^\\d{4}-W\\d{2}$/.test(value)) {\n return value;\n }\n return value;\n}\n\nfunction normalizeYear(value: unknown): number | unknown {\n const num = Number(value);\n if (!Number.isNaN(num) && Number.isFinite(num)) {\n return Math.round(num);\n }\n return value;\n}\n\nfunction normalizeMultipleYears(value: unknown): unknown {\n if (!Array.isArray(value)) {\n return value;\n }\n return value.map(v => {\n const num = Number(v);\n return !Number.isNaN(num) && Number.isFinite(num) ? Math.round(num) : v;\n });\n}\n\nclass DateTimeFieldTypeFactory implements IFieldTypeFactory {\n readonly type = \"datetime\";\n create(_registry: any) {\n return new DateTimeFieldBuilder();\n }\n}\n\nexport const DateTimeFieldType = FieldType.createImplementation({\n implementation: DateTimeFieldTypeFactory,\n dependencies: []\n});\n\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n /**\n * Defines a field that stores date and/or time values.\n *\n * Variant methods (pick one):\n * - `dateOnly()` — \"2026-05-01\"\n * - `timeOnly()` — \"14:30:00\"\n * - `withoutTimezone()` — \"2026-05-01T14:30:00.000Z\"\n * - `withTimezone()` — \"2026-05-01T14:30:00+02:00\"\n * - `monthOnly()` — \"2026-05\"\n * - `weekOnly()` — \"2026-W18\"\n * - `yearOnly()` — 2026\n * - `dateRange()` — { from: \"2026-05-01\", to: \"2026-05-15\" }\n * - `multipleDates()` — [\"2026-05-01\", \"2026-05-03\"]\n * - `multipleMonths()` — [\"2026-01\", \"2026-03\"]\n * - `multipleYears()` — [2024, 2025, 2026]\n *\n * Configuration methods (chain after variant):\n * - `.presets([...])` — quick-select buttons (all variants)\n * - `.displayFormat(\"MM/dd/yyyy\")` — customize trigger display\n *\n * Variant-specific options (passed to variant method):\n * - `yearOnly({ range: [2020, 2030] })` — year range\n * - `multipleYears({ range: [2020, 2035] })` — year range\n * - `weekOnly({ startsOn: 1 })` — first day of week (0=Sun, 1=Mon)\n *\n * @example\n * datetime() // full UTC datetime (default)\n * datetime().dateOnly() // birthdays, due dates, holidays\n * datetime().timeOnly() // opening hours, daily reminders\n * datetime().withTimezone() // events tied to a specific locale\n * datetime().withoutTimezone() // timestamps, logs, sortable moments\n * datetime().monthOnly() // billing cycles, report periods\n * datetime().weekOnly() // sprint planning, weekly schedules\n * datetime().yearOnly({ range: [2010, 2030] }) // fiscal years\n * datetime().dateRange() // vacation requests, booking windows\n * datetime().multipleDates() // blackout dates, recurring events\n * datetime().multipleMonths() // seasonal availability\n * datetime().multipleYears({ range: [2020, 2035] }) // multi-year budgets\n * datetime().dateOnly().presets([...]).displayFormat(\"dd/MM/yyyy\")\n */\n datetime(): DateTimeFieldBuilder;\n }\n}\n"],"names":["DateTimeFieldBuilder","FieldBuilder","options","undefined","presets","format","value","normalizeDateOnly","String","normalizeTime","normalizeDateTimeWithoutTimezone","normalizeDateTimeWithTimezone","normalizeMonth","normalizeWeek","normalizeYear","normalizeMultipleYears","Date","parts","normalized","withZ","initialDate","rest","match","timePart","zone","date","tz","d","y","m","num","Number","Math","Array","v","DateTimeFieldTypeFactory","_registry","DateTimeFieldType","FieldType"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
import { type IFieldTypeFactory, type IFieldBuilder, type IFieldBuilderRegistry, type IObjectFieldBuilder, type IObjectFieldConfig, type ITemplateBuilder, type ITemplateConfig } from "../abstractions.js";
|
|
2
|
+
import { type IFieldTypeFactory, type IFieldBuilder, type IFieldBuilderRegistry, type ILayoutBuilder, type ILayoutNodeBuilder, type IObjectFieldBuilder, type IObjectFieldConfig, type ITemplateBuilder, type ITemplateConfig } from "../abstractions.js";
|
|
3
3
|
import { FieldBuilder } from "../FieldBuilder.js";
|
|
4
4
|
interface TemplateBuilderInternal extends ITemplateBuilder {
|
|
5
5
|
_build(id: string, registry: IFieldBuilderRegistry): ITemplateConfig;
|
|
@@ -11,12 +11,14 @@ export declare class ObjectFieldBuilder extends FieldBuilder<"object"> implement
|
|
|
11
11
|
private _listSchema?;
|
|
12
12
|
private _templates?;
|
|
13
13
|
private _templateIds;
|
|
14
|
+
private _layout?;
|
|
14
15
|
private _registry;
|
|
15
16
|
constructor(registry: IFieldBuilderRegistry);
|
|
16
17
|
fields(fn: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this;
|
|
17
18
|
list(): this;
|
|
18
19
|
listSchema(schema: z.ZodTypeAny): this;
|
|
19
20
|
template(id: string, configure: (t: ITemplateBuilder) => void): this;
|
|
21
|
+
layout(factory: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]): this;
|
|
20
22
|
build(name: string): IObjectFieldConfig;
|
|
21
23
|
}
|
|
22
24
|
declare class ObjectFieldTypeFactory implements IFieldTypeFactory {
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { FieldType } from "../abstractions.js";
|
|
2
2
|
import { FieldBuilder } from "../FieldBuilder.js";
|
|
3
|
+
import { LayoutBuilderFactory } from "../LayoutBuilderFactory.js";
|
|
4
|
+
function resolveInnerLayout(factory) {
|
|
5
|
+
return LayoutBuilderFactory.resolveObjectInner(factory);
|
|
6
|
+
}
|
|
3
7
|
function createTemplateBuilder() {
|
|
4
8
|
let label = "";
|
|
5
9
|
let description;
|
|
6
10
|
let icon;
|
|
7
11
|
let fieldsFactory;
|
|
12
|
+
let layout;
|
|
8
13
|
let visibleFn;
|
|
9
14
|
const builder = {
|
|
10
15
|
label (text) {
|
|
@@ -23,6 +28,10 @@ function createTemplateBuilder() {
|
|
|
23
28
|
fieldsFactory = factory;
|
|
24
29
|
return builder;
|
|
25
30
|
},
|
|
31
|
+
layout (factory) {
|
|
32
|
+
layout = resolveInnerLayout(factory);
|
|
33
|
+
return builder;
|
|
34
|
+
},
|
|
26
35
|
visible (predicate) {
|
|
27
36
|
visibleFn = predicate;
|
|
28
37
|
return builder;
|
|
@@ -37,6 +46,7 @@ function createTemplateBuilder() {
|
|
|
37
46
|
description,
|
|
38
47
|
icon,
|
|
39
48
|
childBuilders,
|
|
49
|
+
layout,
|
|
40
50
|
visible: visibleFn
|
|
41
51
|
};
|
|
42
52
|
}
|
|
@@ -73,15 +83,21 @@ class ObjectFieldBuilder extends FieldBuilder {
|
|
|
73
83
|
if ("objectAccordionSingle" === this._config.renderer || "objectAccordionMultiple" === this._config.renderer) this._config.renderer = "dynamicZone";
|
|
74
84
|
return this;
|
|
75
85
|
}
|
|
86
|
+
layout(factory) {
|
|
87
|
+
this._layout = resolveInnerLayout(factory);
|
|
88
|
+
return this;
|
|
89
|
+
}
|
|
76
90
|
build(name) {
|
|
77
91
|
this._config.name = name;
|
|
78
92
|
if (this._templates && Object.keys(this._childBuilders).length > 0) throw new Error(`Object field "${name}" has both .fields() and .template() defined. Templates are mutually exclusive with .fields(); each template defines its own children.`);
|
|
93
|
+
if (this._templates && this._layout) throw new Error(`Object field "${name}" has both .layout() and .template() defined. Templated objects declare their layouts per template.`);
|
|
79
94
|
return {
|
|
80
95
|
...this._config,
|
|
81
96
|
childBuilders: this._childBuilders,
|
|
82
97
|
isList: this._isList,
|
|
83
98
|
listSchema: this._listSchema,
|
|
84
|
-
templates: this._templates
|
|
99
|
+
templates: this._templates,
|
|
100
|
+
layout: this._layout
|
|
85
101
|
};
|
|
86
102
|
}
|
|
87
103
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/formModel/fieldTypes/ObjectFieldType.js","sources":["../../../../src/features/formModel/fieldTypes/ObjectFieldType.ts"],"sourcesContent":["import type { z } from \"zod\";\nimport {\n FieldType,\n type IFieldTypeFactory,\n type IFieldBuilder,\n type IFieldBuilderRegistry,\n type IObjectFieldBuilder,\n type IObjectFieldConfig,\n type ITemplateBuilder,\n type ITemplateConfig,\n type ITemplateIcon\n} from \"../abstractions.js\";\nimport type { IFormModel } from \"../abstractions.js\";\nimport { FieldBuilder } from \"../FieldBuilder.js\";\n\ninterface TemplateBuilderInternal extends ITemplateBuilder {\n _build(id: string, registry: IFieldBuilderRegistry): ITemplateConfig;\n}\n\nexport function createTemplateBuilder(): TemplateBuilderInternal {\n let label = \"\";\n let description: string | undefined;\n let icon: ITemplateIcon | undefined;\n let fieldsFactory:\n | ((registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>)\n | undefined;\n let visibleFn: ((form: IFormModel) => boolean) | undefined;\n\n const builder: TemplateBuilderInternal = {\n label(text: string) {\n label = text;\n return builder;\n },\n description(text: string) {\n description = text;\n return builder;\n },\n icon(i: ITemplateIcon) {\n icon = i;\n return builder;\n },\n fields(factory) {\n fieldsFactory = factory;\n return builder;\n },\n visible(predicate) {\n visibleFn = predicate;\n return builder;\n },\n _build(id: string, registry: IFieldBuilderRegistry): ITemplateConfig {\n const childBuilders = fieldsFactory ? fieldsFactory(registry) : {};\n if (\"_templateId\" in childBuilders) {\n throw new Error(\n `Template \"${id}\" defines a reserved field \"_templateId\". ` +\n `The discriminator is added automatically.`\n );\n }\n for (const [fieldName, builder] of Object.entries(childBuilders)) {\n if (builder) {\n builder.build(fieldName);\n }\n }\n return { id, label, description, icon, childBuilders, visible: visibleFn };\n }\n };\n return builder;\n}\n\nexport class ObjectFieldBuilder extends FieldBuilder<\"object\"> implements IObjectFieldBuilder {\n private _childBuilders: Record<string, IFieldBuilder> = {};\n private _isList = false;\n private _listSchema?: z.ZodTypeAny;\n private _templates?: ITemplateConfig[];\n private _templateIds = new Set<string>();\n private _registry: IFieldBuilderRegistry;\n\n constructor(registry: IFieldBuilderRegistry) {\n super(\"object\");\n this._config.renderer = \"objectAccordionSingle\";\n this._registry = registry;\n }\n\n fields(fn: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this {\n this._childBuilders = fn(this._registry);\n return this;\n }\n\n override list(): this {\n this._isList = true;\n if (this._config.renderer === \"objectAccordionSingle\") {\n this._config.renderer = \"objectAccordionMultiple\";\n }\n return this;\n }\n\n listSchema(schema: z.ZodTypeAny): this {\n this._listSchema = schema;\n return this;\n }\n\n template(id: string, configure: (t: ITemplateBuilder) => void): this {\n if (id === \"_templateId\") {\n throw new Error(`Template id \"_templateId\" is reserved. Choose a different id.`);\n }\n if (this._templateIds.has(id)) {\n throw new Error(`Duplicate template id \"${id}\".`);\n }\n this._templateIds.add(id);\n\n const tb = createTemplateBuilder();\n configure(tb);\n\n if (!this._templates) {\n this._templates = [];\n }\n this._templates.push(tb._build(id, this._registry));\n\n if (\n this._config.renderer === \"objectAccordionSingle\" ||\n this._config.renderer === \"objectAccordionMultiple\"\n ) {\n this._config.renderer = \"dynamicZone\";\n }\n\n return this;\n }\n\n override build(name: string): IObjectFieldConfig {\n this._config.name = name;\n\n if (this._templates && Object.keys(this._childBuilders).length > 0) {\n throw new Error(\n `Object field \"${name}\" has both .fields() and .template() defined. ` +\n `Templates are mutually exclusive with .fields(); each template defines its own children.`\n );\n }\n\n return {\n ...this._config,\n childBuilders: this._childBuilders,\n isList: this._isList,\n listSchema: this._listSchema,\n templates: this._templates\n };\n }\n}\n\nclass ObjectFieldTypeFactory implements IFieldTypeFactory {\n readonly type = \"object\";\n create(registry: IFieldBuilderRegistry) {\n return new ObjectFieldBuilder(registry);\n }\n}\n\nexport const ObjectFieldType = FieldType.createImplementation({\n implementation: ObjectFieldTypeFactory,\n dependencies: []\n});\n\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n object(): IObjectFieldBuilder;\n }\n}\n"],"names":["createTemplateBuilder","label","description","icon","fieldsFactory","visibleFn","builder","text","i","
|
|
1
|
+
{"version":3,"file":"features/formModel/fieldTypes/ObjectFieldType.js","sources":["../../../../src/features/formModel/fieldTypes/ObjectFieldType.ts"],"sourcesContent":["import type { z } from \"zod\";\nimport {\n FieldType,\n type IFieldTypeFactory,\n type IFieldBuilder,\n type IFieldBuilderRegistry,\n type ILayoutBuilder,\n type ILayoutNodeBuilder,\n type IObjectFieldBuilder,\n type IObjectFieldConfig,\n type ITemplateBuilder,\n type ITemplateConfig,\n type ITemplateIcon,\n type LayoutNode\n} from \"../abstractions.js\";\nimport type { IFormModel } from \"../abstractions.js\";\nimport { FieldBuilder } from \"../FieldBuilder.js\";\nimport { LayoutBuilderFactory } from \"../LayoutBuilderFactory.js\";\n\nfunction resolveInnerLayout(\n factory: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]\n): LayoutNode[] {\n return LayoutBuilderFactory.resolveObjectInner(factory) as LayoutNode[];\n}\n\ninterface TemplateBuilderInternal extends ITemplateBuilder {\n _build(id: string, registry: IFieldBuilderRegistry): ITemplateConfig;\n}\n\nexport function createTemplateBuilder(): TemplateBuilderInternal {\n let label = \"\";\n let description: string | undefined;\n let icon: ITemplateIcon | undefined;\n let fieldsFactory:\n | ((registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>)\n | undefined;\n let layout: LayoutNode[] | undefined;\n let visibleFn: ((form: IFormModel) => boolean) | undefined;\n\n const builder: TemplateBuilderInternal = {\n label(text: string) {\n label = text;\n return builder;\n },\n description(text: string) {\n description = text;\n return builder;\n },\n icon(i: ITemplateIcon) {\n icon = i;\n return builder;\n },\n fields(factory) {\n fieldsFactory = factory;\n return builder;\n },\n layout(factory) {\n layout = resolveInnerLayout(factory);\n return builder;\n },\n visible(predicate) {\n visibleFn = predicate;\n return builder;\n },\n _build(id: string, registry: IFieldBuilderRegistry): ITemplateConfig {\n const childBuilders = fieldsFactory ? fieldsFactory(registry) : {};\n if (\"_templateId\" in childBuilders) {\n throw new Error(\n `Template \"${id}\" defines a reserved field \"_templateId\". ` +\n `The discriminator is added automatically.`\n );\n }\n for (const [fieldName, builder] of Object.entries(childBuilders)) {\n if (builder) {\n builder.build(fieldName);\n }\n }\n return { id, label, description, icon, childBuilders, layout, visible: visibleFn };\n }\n };\n return builder;\n}\n\nexport class ObjectFieldBuilder extends FieldBuilder<\"object\"> implements IObjectFieldBuilder {\n private _childBuilders: Record<string, IFieldBuilder> = {};\n private _isList = false;\n private _listSchema?: z.ZodTypeAny;\n private _templates?: ITemplateConfig[];\n private _templateIds = new Set<string>();\n private _layout?: LayoutNode[];\n private _registry: IFieldBuilderRegistry;\n\n constructor(registry: IFieldBuilderRegistry) {\n super(\"object\");\n this._config.renderer = \"objectAccordionSingle\";\n this._registry = registry;\n }\n\n fields(fn: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this {\n this._childBuilders = fn(this._registry);\n return this;\n }\n\n override list(): this {\n this._isList = true;\n if (this._config.renderer === \"objectAccordionSingle\") {\n this._config.renderer = \"objectAccordionMultiple\";\n }\n return this;\n }\n\n listSchema(schema: z.ZodTypeAny): this {\n this._listSchema = schema;\n return this;\n }\n\n template(id: string, configure: (t: ITemplateBuilder) => void): this {\n if (id === \"_templateId\") {\n throw new Error(`Template id \"_templateId\" is reserved. Choose a different id.`);\n }\n if (this._templateIds.has(id)) {\n throw new Error(`Duplicate template id \"${id}\".`);\n }\n this._templateIds.add(id);\n\n const tb = createTemplateBuilder();\n configure(tb);\n\n if (!this._templates) {\n this._templates = [];\n }\n this._templates.push(tb._build(id, this._registry));\n\n if (\n this._config.renderer === \"objectAccordionSingle\" ||\n this._config.renderer === \"objectAccordionMultiple\"\n ) {\n this._config.renderer = \"dynamicZone\";\n }\n\n return this;\n }\n\n layout(factory: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]): this {\n this._layout = resolveInnerLayout(factory);\n return this;\n }\n\n override build(name: string): IObjectFieldConfig {\n this._config.name = name;\n\n if (this._templates && Object.keys(this._childBuilders).length > 0) {\n throw new Error(\n `Object field \"${name}\" has both .fields() and .template() defined. ` +\n `Templates are mutually exclusive with .fields(); each template defines its own children.`\n );\n }\n\n if (this._templates && this._layout) {\n throw new Error(\n `Object field \"${name}\" has both .layout() and .template() defined. ` +\n `Templated objects declare their layouts per template.`\n );\n }\n\n return {\n ...this._config,\n childBuilders: this._childBuilders,\n isList: this._isList,\n listSchema: this._listSchema,\n templates: this._templates,\n layout: this._layout\n };\n }\n}\n\nclass ObjectFieldTypeFactory implements IFieldTypeFactory {\n readonly type = \"object\";\n create(registry: IFieldBuilderRegistry) {\n return new ObjectFieldBuilder(registry);\n }\n}\n\nexport const ObjectFieldType = FieldType.createImplementation({\n implementation: ObjectFieldTypeFactory,\n dependencies: []\n});\n\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n object(): IObjectFieldBuilder;\n }\n}\n"],"names":["resolveInnerLayout","factory","LayoutBuilderFactory","createTemplateBuilder","label","description","icon","fieldsFactory","layout","visibleFn","builder","text","i","predicate","id","registry","childBuilders","Error","fieldName","Object","ObjectFieldBuilder","FieldBuilder","Set","fn","schema","configure","tb","name","ObjectFieldTypeFactory","ObjectFieldType","FieldType"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-admin",
|
|
3
|
-
"version": "6.5.0-beta.
|
|
3
|
+
"version": "6.5.0-beta.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -26,24 +26,24 @@
|
|
|
26
26
|
"@iconify/json": "2.2.534",
|
|
27
27
|
"@lexical/utils": "0.51.0",
|
|
28
28
|
"@types/react": "18.3.31",
|
|
29
|
-
"@webiny/admin-ui": "6.5.0-beta.
|
|
30
|
-
"@webiny/app": "6.5.0-beta.
|
|
29
|
+
"@webiny/admin-ui": "6.5.0-beta.6",
|
|
30
|
+
"@webiny/app": "6.5.0-beta.6",
|
|
31
31
|
"@webiny/di": "1.1.0",
|
|
32
|
-
"@webiny/feature": "6.5.0-beta.
|
|
33
|
-
"@webiny/form": "6.5.0-beta.
|
|
34
|
-
"@webiny/icons": "6.5.0-beta.
|
|
35
|
-
"@webiny/lexical-converter": "6.5.0-beta.
|
|
36
|
-
"@webiny/lexical-editor": "6.5.0-beta.
|
|
37
|
-
"@webiny/lexical-nodes": "6.5.0-beta.
|
|
38
|
-
"@webiny/lexical-theme": "6.5.0-beta.
|
|
39
|
-
"@webiny/plugins": "6.5.0-beta.
|
|
40
|
-
"@webiny/react-composition": "6.5.0-beta.
|
|
41
|
-
"@webiny/react-properties": "6.5.0-beta.
|
|
42
|
-
"@webiny/sdk": "6.5.0-beta.
|
|
43
|
-
"@webiny/telemetry": "6.5.0-beta.
|
|
44
|
-
"@webiny/utils": "6.5.0-beta.
|
|
45
|
-
"@webiny/validation": "6.5.0-beta.
|
|
46
|
-
"@webiny/wcp": "6.5.0-beta.
|
|
32
|
+
"@webiny/feature": "6.5.0-beta.6",
|
|
33
|
+
"@webiny/form": "6.5.0-beta.6",
|
|
34
|
+
"@webiny/icons": "6.5.0-beta.6",
|
|
35
|
+
"@webiny/lexical-converter": "6.5.0-beta.6",
|
|
36
|
+
"@webiny/lexical-editor": "6.5.0-beta.6",
|
|
37
|
+
"@webiny/lexical-nodes": "6.5.0-beta.6",
|
|
38
|
+
"@webiny/lexical-theme": "6.5.0-beta.6",
|
|
39
|
+
"@webiny/plugins": "6.5.0-beta.6",
|
|
40
|
+
"@webiny/react-composition": "6.5.0-beta.6",
|
|
41
|
+
"@webiny/react-properties": "6.5.0-beta.6",
|
|
42
|
+
"@webiny/sdk": "6.5.0-beta.6",
|
|
43
|
+
"@webiny/telemetry": "6.5.0-beta.6",
|
|
44
|
+
"@webiny/utils": "6.5.0-beta.6",
|
|
45
|
+
"@webiny/validation": "6.5.0-beta.6",
|
|
46
|
+
"@webiny/wcp": "6.5.0-beta.6",
|
|
47
47
|
"apollo-cache": "1.3.5",
|
|
48
48
|
"apollo-client": "2.6.10",
|
|
49
49
|
"apollo-link": "1.2.14",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"@types/react-transition-group": "4.4.12",
|
|
84
84
|
"@types/store": "2.0.5",
|
|
85
85
|
"@types/tinycolor2": "1.4.6",
|
|
86
|
-
"@webiny/build-tools": "6.5.0-beta.
|
|
86
|
+
"@webiny/build-tools": "6.5.0-beta.6",
|
|
87
87
|
"rimraf": "6.1.3",
|
|
88
88
|
"typescript": "7.0.2",
|
|
89
89
|
"vitest": "5.0.2"
|