@btst/stack 1.5.1 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/DayPicker.cjs +14 -2
- package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/DayPicker.mjs +14 -2
- package/dist/node_modules/.pnpm/react-day-picker@9.13.0_react@19.2.0/node_modules/react-day-picker/dist/esm/noonDateLib.cjs +162 -0
- package/dist/node_modules/.pnpm/react-day-picker@9.13.0_react@19.2.0/node_modules/react-day-picker/dist/esm/noonDateLib.mjs +160 -0
- package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/convertMatchersToTimeZone.cjs +12 -8
- package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/convertMatchersToTimeZone.mjs +12 -8
- package/dist/packages/better-stack/src/plugins/cms/api/plugin.cjs +33 -4
- package/dist/packages/better-stack/src/plugins/cms/api/plugin.mjs +33 -4
- package/dist/packages/better-stack/src/plugins/cms/client/components/forms/content-form.cjs +26 -141
- package/dist/packages/better-stack/src/plugins/cms/client/components/forms/content-form.mjs +24 -139
- package/dist/packages/better-stack/src/plugins/cms/client/components/forms/file-upload.cjs +2 -2
- package/dist/packages/better-stack/src/plugins/cms/client/components/forms/file-upload.mjs +2 -2
- package/dist/packages/better-stack/src/plugins/cms/db.cjs +4 -0
- package/dist/packages/better-stack/src/plugins/cms/db.mjs +4 -0
- package/dist/packages/better-stack/src/plugins/cms/schemas.cjs +0 -1
- package/dist/packages/better-stack/src/plugins/cms/schemas.mjs +0 -1
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/common/label.cjs +2 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/common/label.mjs +2 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/config.cjs +0 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/config.mjs +0 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/array.cjs +15 -29
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/array.mjs +16 -16
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/checkbox.cjs +2 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/checkbox.mjs +2 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/date.cjs +29 -5
- package/dist/packages/ui/src/components/auto-form/fields/date.mjs +59 -0
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/enum.cjs +2 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/enum.mjs +2 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/input.cjs +2 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/input.mjs +2 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/number.cjs +2 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/number.mjs +2 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/object.cjs +7 -4
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/object.mjs +8 -5
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/radio-group.cjs +2 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/radio-group.mjs +2 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/switch.cjs +2 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/switch.mjs +2 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/textarea.cjs +2 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/fields/textarea.mjs +2 -2
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/index.cjs +3 -3
- package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/index.mjs +3 -3
- package/dist/packages/ui/src/components/auto-form/utils.cjs +306 -0
- package/dist/packages/ui/src/components/auto-form/utils.mjs +294 -0
- package/dist/packages/ui/src/components/calendar.cjs +2 -2
- package/dist/packages/ui/src/components/calendar.mjs +2 -2
- package/dist/plugins/cms/api/index.d.cts +2 -4
- package/dist/plugins/cms/api/index.d.mts +2 -4
- package/dist/plugins/cms/api/index.d.ts +2 -4
- package/dist/plugins/cms/client/hooks/index.d.cts +1 -4
- package/dist/plugins/cms/client/hooks/index.d.mts +1 -4
- package/dist/plugins/cms/client/hooks/index.d.ts +1 -4
- package/dist/plugins/cms/client/index.d.cts +113 -5
- package/dist/plugins/cms/client/index.d.mts +113 -5
- package/dist/plugins/cms/client/index.d.ts +113 -5
- package/dist/plugins/cms/query-keys.d.cts +1 -4
- package/dist/plugins/cms/query-keys.d.mts +1 -4
- package/dist/plugins/cms/query-keys.d.ts +1 -4
- package/dist/shared/{stack.DwnJA87a.d.ts → stack.L-UFwz2G.d.cts} +14 -14
- package/dist/shared/{stack.BwkyFwF8.d.cts → stack.L-UFwz2G.d.mts} +14 -14
- package/dist/shared/{stack.DBqxCs0V.d.mts → stack.L-UFwz2G.d.ts} +14 -14
- package/package.json +1 -1
- package/src/plugins/cms/__tests__/schema-roundtrip.test.ts +195 -0
- package/src/plugins/cms/api/plugin.ts +65 -4
- package/src/plugins/cms/client/components/forms/content-form.tsx +50 -234
- package/src/plugins/cms/client/components/forms/file-upload.tsx +3 -3
- package/src/plugins/cms/client/index.ts +1 -1
- package/src/plugins/cms/client/overrides.ts +1 -1
- package/src/plugins/cms/db.ts +4 -0
- package/src/plugins/cms/schemas.ts +1 -1
- package/src/plugins/cms/types.ts +14 -17
- package/dist/packages/ui/src/components/ui/auto-form/fields/date.mjs +0 -35
- package/dist/packages/ui/src/components/ui/auto-form/fields/file.cjs +0 -63
- package/dist/packages/ui/src/components/ui/auto-form/fields/file.mjs +0 -61
- package/dist/packages/ui/src/components/ui/auto-form/utils.cjs +0 -179
- package/dist/packages/ui/src/components/ui/auto-form/utils.mjs +0 -169
- package/dist/shared/stack.NZJogTUn.d.cts +0 -66
- package/dist/shared/stack.NZJogTUn.d.mts +0 -66
- package/dist/shared/stack.NZJogTUn.d.ts +0 -66
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/UI.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/UI.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/classes/CalendarDay.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/classes/CalendarDay.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/classes/CalendarMonth.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/classes/CalendarMonth.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/classes/CalendarWeek.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/classes/CalendarWeek.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/classes/DateLib.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/classes/DateLib.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Button.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Button.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/CaptionLabel.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/CaptionLabel.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Chevron.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Chevron.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Day.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Day.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/DayButton.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/DayButton.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Dropdown.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Dropdown.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/DropdownNav.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/DropdownNav.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Footer.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Footer.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Month.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Month.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/MonthCaption.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/MonthCaption.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/MonthGrid.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/MonthGrid.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Months.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Months.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/MonthsDropdown.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/MonthsDropdown.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Nav.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Nav.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/NextMonthButton.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/NextMonthButton.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Option.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Option.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/PreviousMonthButton.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/PreviousMonthButton.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Root.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Root.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Select.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Select.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Week.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Week.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/WeekNumber.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/WeekNumber.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/WeekNumberHeader.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/WeekNumberHeader.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Weekday.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Weekday.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Weekdays.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Weekdays.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Weeks.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Weeks.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/YearsDropdown.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/YearsDropdown.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/custom-components.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/custom-components.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatCaption.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatCaption.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatDay.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatDay.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatMonthDropdown.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatMonthDropdown.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumber.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumber.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumberHeader.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumberHeader.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatWeekdayName.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatWeekdayName.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatYearDropdown.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatYearDropdown.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/index.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/index.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/calculateFocusTarget.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/calculateFocusTarget.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/endOfBroadcastWeek.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/endOfBroadcastWeek.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getBroadcastWeeksInMonth.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getBroadcastWeeksInMonth.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getClassNamesForModifiers.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getClassNamesForModifiers.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getComponents.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getComponents.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDataAttributes.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDataAttributes.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDates.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDates.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDays.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDays.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDefaultClassNames.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDefaultClassNames.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDisplayMonths.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDisplayMonths.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getFocusableDate.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getFocusableDate.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getFormatters.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getFormatters.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getLabels.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getLabels.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getMonthOptions.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getMonthOptions.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getMonths.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getMonths.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getNavMonth.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getNavMonth.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getNextFocus.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getNextFocus.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getNextMonth.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getNextMonth.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getPreviousMonth.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getPreviousMonth.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getStyleForModifiers.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getStyleForModifiers.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getWeekdays.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getWeekdays.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getWeeks.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getWeeks.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getYearOptions.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getYearOptions.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/startOfBroadcastWeek.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/startOfBroadcastWeek.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/useControlledValue.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/useControlledValue.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/index.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/index.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelDayButton.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelDayButton.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelGrid.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelGrid.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelGridcell.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelGridcell.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelMonthDropdown.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelMonthDropdown.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelNav.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelNav.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelNext.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelNext.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelPrevious.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelPrevious.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelWeekNumber.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelWeekNumber.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelWeekNumberHeader.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelWeekNumberHeader.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelWeekday.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelWeekday.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelYearDropdown.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelYearDropdown.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/locale/en-US.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/locale/en-US.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/selection/useMulti.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/selection/useMulti.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/selection/useRange.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/selection/useRange.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/selection/useSingle.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/selection/useSingle.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/useAnimation.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/useAnimation.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/useCalendar.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/useCalendar.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/useDayPicker.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/useDayPicker.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/useFocus.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/useFocus.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/useSelection.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/useSelection.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/addToRange.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/addToRange.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/dateMatchModifiers.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/dateMatchModifiers.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/rangeContainsDayOfWeek.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/rangeContainsDayOfWeek.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/rangeContainsModifiers.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/rangeContainsModifiers.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/rangeIncludesDate.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/rangeIncludesDate.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/rangeOverlaps.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/rangeOverlaps.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/toTimeZone.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/toTimeZone.mjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/typeguards.cjs +0 -0
- /package/dist/node_modules/.pnpm/{react-day-picker@9.12.0_react@19.2.0 → react-day-picker@9.13.0_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/typeguards.mjs +0 -0
- /package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/common/tooltip.cjs +0 -0
- /package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/common/tooltip.mjs +0 -0
- /package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/dependencies.cjs +0 -0
- /package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/dependencies.mjs +0 -0
- /package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/types.cjs +0 -0
- /package/dist/packages/ui/src/components/{ui/auto-form → auto-form}/types.mjs +0 -0
|
@@ -16,12 +16,66 @@ import type {
|
|
|
16
16
|
import { listContentQuerySchema } from "../schemas";
|
|
17
17
|
import { slugify } from "../utils";
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Migrate a legacy JSON Schema (version 1) to unified format (version 2)
|
|
21
|
+
* by merging fieldConfig values into the JSON Schema properties
|
|
22
|
+
*/
|
|
23
|
+
function migrateToUnifiedSchema(
|
|
24
|
+
jsonSchemaStr: string,
|
|
25
|
+
fieldConfigStr: string | null | undefined,
|
|
26
|
+
): string {
|
|
27
|
+
if (!fieldConfigStr) {
|
|
28
|
+
return jsonSchemaStr;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
try {
|
|
32
|
+
const jsonSchema = JSON.parse(jsonSchemaStr);
|
|
33
|
+
const fieldConfig = JSON.parse(fieldConfigStr);
|
|
34
|
+
|
|
35
|
+
if (!jsonSchema.properties || typeof fieldConfig !== "object") {
|
|
36
|
+
return jsonSchemaStr;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Merge fieldType from fieldConfig into each property
|
|
40
|
+
for (const [key, config] of Object.entries(fieldConfig)) {
|
|
41
|
+
if (
|
|
42
|
+
jsonSchema.properties[key] &&
|
|
43
|
+
typeof config === "object" &&
|
|
44
|
+
config !== null &&
|
|
45
|
+
"fieldType" in config
|
|
46
|
+
) {
|
|
47
|
+
jsonSchema.properties[key].fieldType = (
|
|
48
|
+
config as { fieldType: string }
|
|
49
|
+
).fieldType;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return JSON.stringify(jsonSchema);
|
|
54
|
+
} catch {
|
|
55
|
+
// If parsing fails, return original
|
|
56
|
+
return jsonSchemaStr;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
19
60
|
/**
|
|
20
61
|
* Serialize a ContentType for API response (convert dates to strings)
|
|
62
|
+
* Also applies lazy migration for legacy schemas (version 1 → 2)
|
|
21
63
|
*/
|
|
22
64
|
function serializeContentType(ct: ContentType): SerializedContentType {
|
|
65
|
+
// Check if this is a legacy schema that needs migration
|
|
66
|
+
const needsMigration = !ct.autoFormVersion || ct.autoFormVersion < 2;
|
|
67
|
+
|
|
68
|
+
// Apply lazy migration: merge fieldConfig into jsonSchema on read
|
|
69
|
+
const migratedJsonSchema = needsMigration
|
|
70
|
+
? migrateToUnifiedSchema(ct.jsonSchema, ct.fieldConfig)
|
|
71
|
+
: ct.jsonSchema;
|
|
72
|
+
|
|
23
73
|
return {
|
|
24
|
-
|
|
74
|
+
id: ct.id,
|
|
75
|
+
name: ct.name,
|
|
76
|
+
slug: ct.slug,
|
|
77
|
+
description: ct.description,
|
|
78
|
+
jsonSchema: migratedJsonSchema,
|
|
25
79
|
createdAt: ct.createdAt.toISOString(),
|
|
26
80
|
updatedAt: ct.updatedAt.toISOString(),
|
|
27
81
|
};
|
|
@@ -57,6 +111,11 @@ function serializeContentItemWithType(
|
|
|
57
111
|
* Sync content types from config to database
|
|
58
112
|
* Creates or updates content types based on the developer's Zod schemas
|
|
59
113
|
*
|
|
114
|
+
* Always writes version 2 format:
|
|
115
|
+
* - fieldType is embedded in jsonSchema via .meta()
|
|
116
|
+
* - fieldConfig is set to null (no longer used)
|
|
117
|
+
* - autoFormVersion is set to 2
|
|
118
|
+
*
|
|
60
119
|
* Handles race conditions from multiple instances by catching unique constraint
|
|
61
120
|
* errors and verifying the record exists (another instance created it first).
|
|
62
121
|
*/
|
|
@@ -65,8 +124,8 @@ async function syncContentTypes(
|
|
|
65
124
|
config: CMSBackendConfig,
|
|
66
125
|
): Promise<void> {
|
|
67
126
|
for (const ct of config.contentTypes) {
|
|
127
|
+
// Convert Zod schema to JSON Schema - fieldType is now embedded via .meta()
|
|
68
128
|
const jsonSchema = JSON.stringify(z.toJSONSchema(ct.schema));
|
|
69
|
-
const fieldConfig = ct.fieldConfig ? JSON.stringify(ct.fieldConfig) : null;
|
|
70
129
|
|
|
71
130
|
const existing = await adapter.findOne<ContentType>({
|
|
72
131
|
model: "contentType",
|
|
@@ -81,7 +140,8 @@ async function syncContentTypes(
|
|
|
81
140
|
name: ct.name,
|
|
82
141
|
description: ct.description ?? null,
|
|
83
142
|
jsonSchema,
|
|
84
|
-
fieldConfig,
|
|
143
|
+
fieldConfig: null, // No longer used in version 2
|
|
144
|
+
autoFormVersion: 2,
|
|
85
145
|
updatedAt: new Date(),
|
|
86
146
|
},
|
|
87
147
|
});
|
|
@@ -94,7 +154,8 @@ async function syncContentTypes(
|
|
|
94
154
|
slug: ct.slug,
|
|
95
155
|
description: ct.description ?? null,
|
|
96
156
|
jsonSchema,
|
|
97
|
-
fieldConfig,
|
|
157
|
+
fieldConfig: null, // No longer used in version 2
|
|
158
|
+
autoFormVersion: 2,
|
|
98
159
|
createdAt: new Date(),
|
|
99
160
|
updatedAt: new Date(),
|
|
100
161
|
},
|
|
@@ -3,13 +3,15 @@
|
|
|
3
3
|
import { useState, useMemo, useEffect } from "react";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { toast } from "sonner";
|
|
6
|
-
import AutoForm, {
|
|
7
|
-
AutoFormSubmit,
|
|
8
|
-
} from "@workspace/ui/components/ui/auto-form";
|
|
6
|
+
import AutoForm, { AutoFormSubmit } from "@workspace/ui/components/auto-form";
|
|
9
7
|
import type {
|
|
10
8
|
FieldConfig,
|
|
11
9
|
AutoFormInputComponentProps,
|
|
12
|
-
} from "@workspace/ui/components/
|
|
10
|
+
} from "@workspace/ui/components/auto-form/types";
|
|
11
|
+
import {
|
|
12
|
+
buildFieldConfigFromJsonSchema as buildFieldConfigBase,
|
|
13
|
+
fromJSONSchemaWithDates,
|
|
14
|
+
} from "@workspace/ui/components/auto-form/utils";
|
|
13
15
|
import { Input } from "@workspace/ui/components/input";
|
|
14
16
|
import { Label } from "@workspace/ui/components/label";
|
|
15
17
|
import { Badge } from "@workspace/ui/components/badge";
|
|
@@ -20,126 +22,6 @@ import { slugify } from "../../../utils";
|
|
|
20
22
|
import { CMS_LOCALIZATION } from "../../localization";
|
|
21
23
|
import { CMSFileUpload } from "./file-upload";
|
|
22
24
|
|
|
23
|
-
/**
|
|
24
|
-
* JSON Schema property type definition
|
|
25
|
-
*/
|
|
26
|
-
interface JsonSchemaProperty {
|
|
27
|
-
type?: string | string[];
|
|
28
|
-
format?: string;
|
|
29
|
-
enum?: (string | number | boolean)[];
|
|
30
|
-
minimum?: number;
|
|
31
|
-
maximum?: number;
|
|
32
|
-
minLength?: number;
|
|
33
|
-
maxLength?: number;
|
|
34
|
-
default?: unknown;
|
|
35
|
-
description?: string;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
interface JsonSchema {
|
|
39
|
-
type?: string;
|
|
40
|
-
properties?: Record<string, JsonSchemaProperty>;
|
|
41
|
-
required?: string[];
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Convert JSON Schema to Zod schema with proper coercion for AutoForm
|
|
46
|
-
*
|
|
47
|
-
* Uses Zod v4's native z.fromJSONSchema() as a base and applies coercion
|
|
48
|
-
* where needed. AutoForm requires z.coerce.number() and z.coerce.date()
|
|
49
|
-
* for proper form handling because HTML inputs return strings.
|
|
50
|
-
*
|
|
51
|
-
* Note: We build the schema manually to ensure proper coercion support,
|
|
52
|
-
* as z.fromJSONSchema() doesn't add coercion automatically.
|
|
53
|
-
*/
|
|
54
|
-
function jsonSchemaToZodWithCoercion(
|
|
55
|
-
jsonSchema: JsonSchema,
|
|
56
|
-
): z.ZodObject<Record<string, z.ZodTypeAny>> {
|
|
57
|
-
const shape: Record<string, z.ZodTypeAny> = {};
|
|
58
|
-
const properties = jsonSchema.properties || {};
|
|
59
|
-
const required = jsonSchema.required || [];
|
|
60
|
-
|
|
61
|
-
for (const [key, prop] of Object.entries(properties)) {
|
|
62
|
-
let fieldSchema: z.ZodTypeAny;
|
|
63
|
-
|
|
64
|
-
// Determine the type (handle arrays like ["string", "null"] for nullable)
|
|
65
|
-
const typeValue = Array.isArray(prop.type) ? prop.type[0] : prop.type;
|
|
66
|
-
|
|
67
|
-
// Handle enum first - works for string enums
|
|
68
|
-
if (prop.enum && Array.isArray(prop.enum) && prop.enum.length > 0) {
|
|
69
|
-
// Filter to only string values for z.enum
|
|
70
|
-
const stringValues = prop.enum.filter(
|
|
71
|
-
(v): v is string => typeof v === "string",
|
|
72
|
-
);
|
|
73
|
-
if (stringValues.length > 0) {
|
|
74
|
-
fieldSchema = z.enum(stringValues as [string, ...string[]]);
|
|
75
|
-
} else {
|
|
76
|
-
// Fallback for non-string enums
|
|
77
|
-
fieldSchema = z.string();
|
|
78
|
-
}
|
|
79
|
-
} else {
|
|
80
|
-
switch (typeValue) {
|
|
81
|
-
case "number":
|
|
82
|
-
case "integer": {
|
|
83
|
-
// Use z.coerce.number() for proper form handling (HTML inputs return strings)
|
|
84
|
-
let numSchema = z.coerce.number();
|
|
85
|
-
if (prop.minimum !== undefined) {
|
|
86
|
-
numSchema = numSchema.min(prop.minimum);
|
|
87
|
-
}
|
|
88
|
-
if (prop.maximum !== undefined) {
|
|
89
|
-
numSchema = numSchema.max(prop.maximum);
|
|
90
|
-
}
|
|
91
|
-
fieldSchema = numSchema;
|
|
92
|
-
break;
|
|
93
|
-
}
|
|
94
|
-
case "boolean": {
|
|
95
|
-
fieldSchema = z.boolean();
|
|
96
|
-
if (prop.default !== undefined) {
|
|
97
|
-
fieldSchema = (fieldSchema as z.ZodBoolean).default(
|
|
98
|
-
prop.default as boolean,
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
break;
|
|
102
|
-
}
|
|
103
|
-
case "string": {
|
|
104
|
-
// Check for date format
|
|
105
|
-
if (prop.format === "date" || prop.format === "date-time") {
|
|
106
|
-
fieldSchema = z.coerce.date();
|
|
107
|
-
} else {
|
|
108
|
-
let strSchema = z.string();
|
|
109
|
-
if (prop.minLength !== undefined) {
|
|
110
|
-
strSchema = strSchema.min(prop.minLength);
|
|
111
|
-
}
|
|
112
|
-
if (prop.maxLength !== undefined) {
|
|
113
|
-
strSchema = strSchema.max(prop.maxLength);
|
|
114
|
-
}
|
|
115
|
-
fieldSchema = strSchema;
|
|
116
|
-
}
|
|
117
|
-
break;
|
|
118
|
-
}
|
|
119
|
-
default: {
|
|
120
|
-
// Fallback to string for unknown types
|
|
121
|
-
fieldSchema = z.string();
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// Apply default if present and not already applied (skip for booleans which handle it above)
|
|
127
|
-
// Use typeValue to correctly handle nullable types where prop.type is an array like ["boolean", "null"]
|
|
128
|
-
if (prop.default !== undefined && typeValue !== "boolean") {
|
|
129
|
-
fieldSchema = fieldSchema.default(prop.default);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
// Make optional if not in required array
|
|
133
|
-
if (!required.includes(key)) {
|
|
134
|
-
fieldSchema = fieldSchema.optional();
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
shape[key] = fieldSchema;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
return z.object(shape);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
25
|
interface ContentFormProps {
|
|
144
26
|
contentType: SerializedContentType;
|
|
145
27
|
initialData?: Record<string, unknown>;
|
|
@@ -153,112 +35,63 @@ interface ContentFormProps {
|
|
|
153
35
|
}
|
|
154
36
|
|
|
155
37
|
/**
|
|
156
|
-
*
|
|
157
|
-
*/
|
|
158
|
-
const BUILTIN_FIELD_TYPES = [
|
|
159
|
-
"checkbox",
|
|
160
|
-
"date",
|
|
161
|
-
"select",
|
|
162
|
-
"radio",
|
|
163
|
-
"switch",
|
|
164
|
-
"textarea",
|
|
165
|
-
"number",
|
|
166
|
-
"file",
|
|
167
|
-
"fallback",
|
|
168
|
-
] as const;
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Extract field configuration from JSON Schema properties
|
|
172
|
-
* Maps description and placeholder to AutoForm's fieldConfig format
|
|
38
|
+
* Build field configuration for AutoForm with CMS-specific file upload handling.
|
|
173
39
|
*
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
*
|
|
40
|
+
* Uses the shared buildFieldConfigFromJsonSchema from auto-form/utils as a base,
|
|
41
|
+
* then adds special handling for "file" fieldType to inject CMSFileUpload component
|
|
42
|
+
* ONLY if no custom component is provided via fieldComponents.
|
|
43
|
+
*
|
|
44
|
+
* @param jsonSchema - The JSON Schema from the content type (with fieldType embedded in properties)
|
|
45
|
+
* @param uploadImage - The uploadImage function from overrides (for file fields)
|
|
177
46
|
* @param fieldComponents - Custom field components from overrides
|
|
178
47
|
*/
|
|
179
48
|
function buildFieldConfigFromJsonSchema(
|
|
180
49
|
jsonSchema: Record<string, unknown>,
|
|
181
|
-
storedFieldConfig?: Record<string, { fieldType?: string }>,
|
|
182
50
|
uploadImage?: (file: File) => Promise<string>,
|
|
183
51
|
fieldComponents?: Record<
|
|
184
52
|
string,
|
|
185
53
|
React.ComponentType<AutoFormInputComponentProps>
|
|
186
54
|
>,
|
|
187
55
|
): FieldConfig<Record<string, unknown>> {
|
|
188
|
-
|
|
56
|
+
// Get base config from shared utility (handles fieldType from JSON Schema)
|
|
57
|
+
const baseConfig = buildFieldConfigBase(jsonSchema, fieldComponents);
|
|
58
|
+
|
|
59
|
+
// Apply CMS-specific handling for "file" fieldType ONLY if no custom component exists
|
|
60
|
+
// Custom fieldComponents take priority - don't override if user provided one
|
|
189
61
|
const properties = jsonSchema.properties as Record<
|
|
190
62
|
string,
|
|
191
|
-
{
|
|
63
|
+
{ fieldType?: string }
|
|
192
64
|
>;
|
|
193
65
|
|
|
194
|
-
if (!properties) return
|
|
66
|
+
if (!properties) return baseConfig;
|
|
195
67
|
|
|
196
|
-
for (const [key,
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
config.fieldType = (props: AutoFormInputComponentProps) => (
|
|
219
|
-
<CustomComponent {...props} />
|
|
220
|
-
);
|
|
221
|
-
}
|
|
222
|
-
// 2. Special handling for built-in "file" type - use CMSFileUpload with uploadImage
|
|
223
|
-
else if (fieldType === "file") {
|
|
224
|
-
if (!uploadImage) {
|
|
225
|
-
// Show a clear error message if uploadImage is not provided
|
|
226
|
-
config.fieldType = () => (
|
|
227
|
-
<div className="rounded-md border border-destructive bg-destructive/10 p-3 text-sm text-destructive">
|
|
228
|
-
File upload requires an <code>uploadImage</code> function in CMS
|
|
229
|
-
overrides.
|
|
230
|
-
</div>
|
|
231
|
-
);
|
|
232
|
-
} else {
|
|
233
|
-
config.fieldType = (props: AutoFormInputComponentProps) => (
|
|
234
|
-
<CMSFileUpload {...props} uploadImage={uploadImage} />
|
|
235
|
-
);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
// 3. For other built-in types, pass through to auto-form
|
|
239
|
-
else if (
|
|
240
|
-
BUILTIN_FIELD_TYPES.includes(
|
|
241
|
-
fieldType as (typeof BUILTIN_FIELD_TYPES)[number],
|
|
242
|
-
)
|
|
243
|
-
) {
|
|
244
|
-
config.fieldType = fieldType;
|
|
245
|
-
}
|
|
246
|
-
// 4. Unknown custom type without a component - log warning and skip
|
|
247
|
-
else {
|
|
248
|
-
console.warn(
|
|
249
|
-
`CMS: Unknown fieldType "${fieldType}" for field "${key}". ` +
|
|
250
|
-
`Provide a component via fieldComponents override or use a built-in type.`,
|
|
251
|
-
);
|
|
252
|
-
}
|
|
68
|
+
for (const [key, prop] of Object.entries(properties)) {
|
|
69
|
+
// Only handle "file" fieldType when there's NO custom component for "file"
|
|
70
|
+
if (prop.fieldType === "file" && !fieldComponents?.["file"]) {
|
|
71
|
+
// Use CMSFileUpload as the default file component
|
|
72
|
+
if (!uploadImage) {
|
|
73
|
+
// Show a clear error message if uploadImage is not provided
|
|
74
|
+
baseConfig[key] = {
|
|
75
|
+
...baseConfig[key],
|
|
76
|
+
fieldType: () => (
|
|
77
|
+
<div className="rounded-md border border-destructive bg-destructive/10 p-3 text-sm text-destructive">
|
|
78
|
+
File upload requires an <code>uploadImage</code> function in CMS
|
|
79
|
+
overrides.
|
|
80
|
+
</div>
|
|
81
|
+
),
|
|
82
|
+
};
|
|
83
|
+
} else {
|
|
84
|
+
baseConfig[key] = {
|
|
85
|
+
...baseConfig[key],
|
|
86
|
+
fieldType: (props: AutoFormInputComponentProps) => (
|
|
87
|
+
<CMSFileUpload {...props} uploadImage={uploadImage} />
|
|
88
|
+
),
|
|
89
|
+
};
|
|
253
90
|
}
|
|
254
91
|
}
|
|
255
|
-
|
|
256
|
-
if (Object.keys(config).length > 0) {
|
|
257
|
-
fieldConfig[key] = config;
|
|
258
|
-
}
|
|
259
92
|
}
|
|
260
93
|
|
|
261
|
-
return
|
|
94
|
+
return baseConfig;
|
|
262
95
|
}
|
|
263
96
|
|
|
264
97
|
/**
|
|
@@ -326,7 +159,7 @@ export function ContentForm({
|
|
|
326
159
|
}
|
|
327
160
|
}, [initialSlug, isEditing]);
|
|
328
161
|
|
|
329
|
-
// Parse JSON Schema
|
|
162
|
+
// Parse JSON Schema (now includes fieldType embedded in properties)
|
|
330
163
|
const jsonSchema = useMemo(() => {
|
|
331
164
|
try {
|
|
332
165
|
return JSON.parse(contentType.jsonSchema) as Record<string, unknown>;
|
|
@@ -335,38 +168,21 @@ export function ContentForm({
|
|
|
335
168
|
}
|
|
336
169
|
}, [contentType.jsonSchema]);
|
|
337
170
|
|
|
338
|
-
//
|
|
339
|
-
|
|
340
|
-
if (!contentType.fieldConfig) return undefined;
|
|
341
|
-
try {
|
|
342
|
-
return JSON.parse(contentType.fieldConfig) as Record<
|
|
343
|
-
string,
|
|
344
|
-
{ fieldType?: string }
|
|
345
|
-
>;
|
|
346
|
-
} catch {
|
|
347
|
-
return undefined;
|
|
348
|
-
}
|
|
349
|
-
}, [contentType.fieldConfig]);
|
|
350
|
-
|
|
351
|
-
// Convert to Zod schema with coercion for proper AutoForm handling
|
|
171
|
+
// Convert JSON Schema to Zod schema using fromJSONSchemaWithDates utility
|
|
172
|
+
// This properly handles date fields (format: "date-time") and min/max date constraints
|
|
352
173
|
const zodSchema = useMemo(() => {
|
|
353
174
|
try {
|
|
354
|
-
return
|
|
175
|
+
return fromJSONSchemaWithDates(jsonSchema);
|
|
355
176
|
} catch {
|
|
356
177
|
return z.object({});
|
|
357
178
|
}
|
|
358
179
|
}, [jsonSchema]);
|
|
359
180
|
|
|
360
|
-
// Build field config for AutoForm
|
|
181
|
+
// Build field config for AutoForm (fieldType is now embedded in jsonSchema)
|
|
361
182
|
const fieldConfig = useMemo(
|
|
362
183
|
() =>
|
|
363
|
-
buildFieldConfigFromJsonSchema(
|
|
364
|
-
|
|
365
|
-
storedFieldConfig,
|
|
366
|
-
uploadImage,
|
|
367
|
-
fieldComponents,
|
|
368
|
-
),
|
|
369
|
-
[jsonSchema, storedFieldConfig, uploadImage, fieldComponents],
|
|
184
|
+
buildFieldConfigFromJsonSchema(jsonSchema, uploadImage, fieldComponents),
|
|
185
|
+
[jsonSchema, uploadImage, fieldComponents],
|
|
370
186
|
);
|
|
371
187
|
|
|
372
188
|
// Find the field to use for slug auto-generation
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useState, useCallback, useEffect, type ChangeEvent } from "react";
|
|
4
4
|
import { toast } from "sonner";
|
|
5
|
-
import type { AutoFormInputComponentProps } from "@workspace/ui/components/
|
|
5
|
+
import type { AutoFormInputComponentProps } from "@workspace/ui/components/auto-form/types";
|
|
6
6
|
import { Input } from "@workspace/ui/components/input";
|
|
7
7
|
import { Button } from "@workspace/ui/components/button";
|
|
8
8
|
import {
|
|
@@ -11,8 +11,8 @@ import {
|
|
|
11
11
|
FormMessage,
|
|
12
12
|
} from "@workspace/ui/components/form";
|
|
13
13
|
import { Trash2, Loader2 } from "lucide-react";
|
|
14
|
-
import AutoFormLabel from "@workspace/ui/components/
|
|
15
|
-
import AutoFormTooltip from "@workspace/ui/components/
|
|
14
|
+
import AutoFormLabel from "@workspace/ui/components/auto-form/common/label";
|
|
15
|
+
import AutoFormTooltip from "@workspace/ui/components/auto-form/common/tooltip";
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Props for the CMSFileUpload component
|
|
@@ -4,7 +4,7 @@ export type { CMSPluginOverrides, RouteContext } from "./overrides";
|
|
|
4
4
|
export type { CMSLocalization } from "./localization";
|
|
5
5
|
|
|
6
6
|
// Re-export AutoFormInputComponentProps for custom field components
|
|
7
|
-
export type { AutoFormInputComponentProps } from "@workspace/ui/components/
|
|
7
|
+
export type { AutoFormInputComponentProps } from "@workspace/ui/components/auto-form/types";
|
|
8
8
|
|
|
9
9
|
// Export CMSFileUpload for consumers to use or extend
|
|
10
10
|
export {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ComponentType } from "react";
|
|
2
2
|
import type { CMSLocalization } from "./localization";
|
|
3
|
-
import type { AutoFormInputComponentProps } from "@workspace/ui/components/
|
|
3
|
+
import type { AutoFormInputComponentProps } from "@workspace/ui/components/auto-form/types";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Context passed to lifecycle hooks
|
package/src/plugins/cms/db.ts
CHANGED
|
@@ -31,6 +31,7 @@ export const updateContentSchema = z.object({
|
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* Schema for content type response
|
|
34
|
+
* Note: fieldConfig is no longer included - it's merged into jsonSchema during read
|
|
34
35
|
*/
|
|
35
36
|
export const contentTypeResponseSchema = z.object({
|
|
36
37
|
id: z.string(),
|
|
@@ -38,7 +39,6 @@ export const contentTypeResponseSchema = z.object({
|
|
|
38
39
|
slug: z.string(),
|
|
39
40
|
description: z.string().nullable().optional(),
|
|
40
41
|
jsonSchema: z.string(),
|
|
41
|
-
fieldConfig: z.string().nullable().optional(),
|
|
42
42
|
createdAt: z.string(),
|
|
43
43
|
updatedAt: z.string(),
|
|
44
44
|
});
|
package/src/plugins/cms/types.ts
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
import type { AutoFormFieldType } from "@workspace/ui/components/ui/auto-form/types";
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
|
-
* Configuration for a content type defined by the developer
|
|
4
|
+
* Configuration for a content type defined by the developer.
|
|
5
|
+
*
|
|
6
|
+
* Field types are now specified directly in the Zod schema via .meta():
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const ProductSchema = z.object({
|
|
10
|
+
* description: z.string().meta({ fieldType: "textarea" }),
|
|
11
|
+
* image: z.string().optional().meta({ fieldType: "file" }),
|
|
12
|
+
* });
|
|
13
|
+
* ```
|
|
6
14
|
*/
|
|
7
15
|
export interface ContentTypeConfig {
|
|
8
16
|
/** Display name for the content type (e.g., "Product", "Testimonial") */
|
|
@@ -11,21 +19,8 @@ export interface ContentTypeConfig {
|
|
|
11
19
|
slug: string;
|
|
12
20
|
/** Optional description shown in the admin UI */
|
|
13
21
|
description?: string;
|
|
14
|
-
/** Zod schema defining the content type's fields */
|
|
22
|
+
/** Zod schema defining the content type's fields. Use .meta({ fieldType: "..." }) for field type overrides. */
|
|
15
23
|
schema: z.ZodObject<z.ZodRawShape>;
|
|
16
|
-
/**
|
|
17
|
-
* Optional field configuration for AutoForm customization.
|
|
18
|
-
*
|
|
19
|
-
* fieldType can be:
|
|
20
|
-
* - A built-in AutoForm type: "checkbox", "date", "select", "radio", "switch", "textarea", "number", "file", "fallback"
|
|
21
|
-
* - A custom type name that maps to a component provided via `fieldComponents` in overrides
|
|
22
|
-
*/
|
|
23
|
-
fieldConfig?: Record<
|
|
24
|
-
string,
|
|
25
|
-
{
|
|
26
|
-
fieldType?: AutoFormFieldType | (string & {});
|
|
27
|
-
}
|
|
28
|
-
>;
|
|
29
24
|
}
|
|
30
25
|
|
|
31
26
|
/**
|
|
@@ -41,8 +36,10 @@ export type ContentType = {
|
|
|
41
36
|
description?: string;
|
|
42
37
|
/** JSON Schema representation of the Zod schema (stringified) */
|
|
43
38
|
jsonSchema: string;
|
|
44
|
-
/**
|
|
39
|
+
/** @deprecated Legacy field config - now embedded in jsonSchema. Kept for backwards compat. */
|
|
45
40
|
fieldConfig?: string;
|
|
41
|
+
/** AutoForm schema version. 1 = legacy (separate fieldConfig), 2 = unified (fieldType in jsonSchema) */
|
|
42
|
+
autoFormVersion?: number;
|
|
46
43
|
createdAt: Date;
|
|
47
44
|
updatedAt: Date;
|
|
48
45
|
};
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { DatePicker } from '../../../date-picker.mjs';
|
|
3
|
-
import { FormItem, FormControl, FormMessage } from '../../../form.mjs';
|
|
4
|
-
import AutoFormLabel from '../common/label.mjs';
|
|
5
|
-
import AutoFormTooltip from '../common/tooltip.mjs';
|
|
6
|
-
|
|
7
|
-
function AutoFormDate({
|
|
8
|
-
label,
|
|
9
|
-
isRequired,
|
|
10
|
-
field,
|
|
11
|
-
fieldConfigItem,
|
|
12
|
-
fieldProps
|
|
13
|
-
}) {
|
|
14
|
-
return /* @__PURE__ */ jsxs(FormItem, { children: [
|
|
15
|
-
/* @__PURE__ */ jsx(
|
|
16
|
-
AutoFormLabel,
|
|
17
|
-
{
|
|
18
|
-
label: fieldConfigItem?.label || label,
|
|
19
|
-
isRequired
|
|
20
|
-
}
|
|
21
|
-
),
|
|
22
|
-
/* @__PURE__ */ jsx(FormControl, { children: /* @__PURE__ */ jsx(
|
|
23
|
-
DatePicker,
|
|
24
|
-
{
|
|
25
|
-
date: field.value,
|
|
26
|
-
setDate: field.onChange,
|
|
27
|
-
...fieldProps
|
|
28
|
-
}
|
|
29
|
-
) }),
|
|
30
|
-
/* @__PURE__ */ jsx(AutoFormTooltip, { fieldConfigItem }),
|
|
31
|
-
/* @__PURE__ */ jsx(FormMessage, {})
|
|
32
|
-
] });
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export { AutoFormDate as default };
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
const form = require('../../../form.cjs');
|
|
5
|
-
const input = require('../../../input.cjs');
|
|
6
|
-
const lucideReact = require('lucide-react');
|
|
7
|
-
const React = require('react');
|
|
8
|
-
const label = require('../common/label.cjs');
|
|
9
|
-
const tooltip = require('../common/tooltip.cjs');
|
|
10
|
-
|
|
11
|
-
function AutoFormFile({
|
|
12
|
-
label: label$1,
|
|
13
|
-
isRequired,
|
|
14
|
-
fieldConfigItem,
|
|
15
|
-
fieldProps,
|
|
16
|
-
field
|
|
17
|
-
}) {
|
|
18
|
-
const { showLabel: _showLabel, ...fieldPropsWithoutShowLabel } = fieldProps;
|
|
19
|
-
const showLabel = _showLabel === void 0 ? true : _showLabel;
|
|
20
|
-
const [file, setFile] = React.useState(null);
|
|
21
|
-
const [fileName, setFileName] = React.useState(null);
|
|
22
|
-
const handleFileChange = (e) => {
|
|
23
|
-
const file2 = e.target.files?.[0];
|
|
24
|
-
if (file2) {
|
|
25
|
-
const reader = new FileReader();
|
|
26
|
-
reader.onloadend = () => {
|
|
27
|
-
setFile(reader.result);
|
|
28
|
-
setFileName(file2.name);
|
|
29
|
-
field.onChange(reader.result);
|
|
30
|
-
};
|
|
31
|
-
reader.readAsDataURL(file2);
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
const handleRemoveClick = () => {
|
|
35
|
-
setFile(null);
|
|
36
|
-
};
|
|
37
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(form.FormItem, { children: [
|
|
38
|
-
showLabel && /* @__PURE__ */ jsxRuntime.jsx(
|
|
39
|
-
label,
|
|
40
|
-
{
|
|
41
|
-
label: fieldConfigItem?.label || label$1,
|
|
42
|
-
isRequired
|
|
43
|
-
}
|
|
44
|
-
),
|
|
45
|
-
!file && /* @__PURE__ */ jsxRuntime.jsx(form.FormControl, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
46
|
-
input.Input,
|
|
47
|
-
{
|
|
48
|
-
type: "file",
|
|
49
|
-
...fieldPropsWithoutShowLabel,
|
|
50
|
-
onChange: handleFileChange,
|
|
51
|
-
value: ""
|
|
52
|
-
}
|
|
53
|
-
) }),
|
|
54
|
-
file && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-[40px] w-full flex-row items-center justify-between space-x-2 rounded-sm border p-2 text-black focus-visible:ring-0 focus-visible:ring-offset-0 dark:bg-white dark:text-black dark:focus-visible:ring-0 dark:focus-visible:ring-offset-0", children: [
|
|
55
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { children: fileName }),
|
|
56
|
-
/* @__PURE__ */ jsxRuntime.jsx("button", { onClick: handleRemoveClick, "aria-label": "Remove image", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { size: 16 }) })
|
|
57
|
-
] }),
|
|
58
|
-
/* @__PURE__ */ jsxRuntime.jsx(tooltip, { fieldConfigItem }),
|
|
59
|
-
/* @__PURE__ */ jsxRuntime.jsx(form.FormMessage, {})
|
|
60
|
-
] });
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
module.exports = AutoFormFile;
|