@timeax/form-palette 0.0.2 → 0.0.4
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/adapters/axios.d.ts +21 -0
- package/dist/adapters/axios.d.ts.map +1 -0
- package/dist/adapters/axios.js +74 -0
- package/dist/adapters/axios.js.map +1 -0
- package/dist/adapters/index.d.ts +35 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +74 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/inertia.d.ts +24 -0
- package/dist/adapters/inertia.d.ts.map +1 -0
- package/dist/adapters/inertia.js +126 -0
- package/dist/adapters/inertia.js.map +1 -0
- package/dist/core/adapter-registry.d.ts +30 -0
- package/dist/core/adapter-registry.d.ts.map +1 -0
- package/{src/core/adapter-registry.ts → dist/core/adapter-registry.js} +10 -28
- package/dist/core/adapter-registry.js.map +1 -0
- package/{src/core/bound/bind-host.ts → dist/core/bound/bind-host.d.ts} +2 -3
- package/dist/core/bound/bind-host.d.ts.map +1 -0
- package/dist/core/bound/bind-host.js +2 -0
- package/dist/core/bound/bind-host.js.map +1 -0
- package/dist/core/bound/observe-bound-field.d.ts +21 -0
- package/dist/core/bound/observe-bound-field.d.ts.map +1 -0
- package/dist/core/bound/observe-bound-field.js +116 -0
- package/dist/core/bound/observe-bound-field.js.map +1 -0
- package/dist/core/bound/wait-for-bound-field.d.ts +5 -0
- package/dist/core/bound/wait-for-bound-field.d.ts.map +1 -0
- package/dist/core/bound/wait-for-bound-field.js +35 -0
- package/dist/core/bound/wait-for-bound-field.js.map +1 -0
- package/{src/core/context.ts → dist/core/context.d.ts} +2 -6
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +11 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/core-provider.d.ts +22 -0
- package/dist/core/core-provider.d.ts.map +1 -0
- package/{src/core/core-provider.tsx → dist/core/core-provider.js} +209 -364
- package/dist/core/core-provider.js.map +1 -0
- package/dist/core/core-root.d.ts +26 -0
- package/dist/core/core-root.d.ts.map +1 -0
- package/dist/core/core-root.js +38 -0
- package/dist/core/core-root.js.map +1 -0
- package/dist/core/core-shell.d.ts +22 -0
- package/dist/core/core-shell.d.ts.map +1 -0
- package/dist/core/core-shell.js +8 -0
- package/dist/core/core-shell.js.map +1 -0
- package/{src/core/errors/error-strip.tsx → dist/core/errors/error-strip.d.ts} +2 -39
- package/dist/core/errors/error-strip.d.ts.map +1 -0
- package/dist/core/errors/error-strip.js +18 -0
- package/dist/core/errors/error-strip.js.map +1 -0
- package/dist/core/errors/index.d.ts +4 -0
- package/dist/core/errors/index.d.ts.map +1 -0
- package/dist/core/errors/index.js +4 -0
- package/dist/core/errors/index.js.map +1 -0
- package/dist/core/errors/map-error-bag.d.ts +24 -0
- package/dist/core/errors/map-error-bag.d.ts.map +1 -0
- package/{src/core/errors/map-error-bag.ts → dist/core/errors/map-error-bag.js} +10 -22
- package/dist/core/errors/map-error-bag.js.map +1 -0
- package/dist/core/errors/map-zod.d.ts +18 -0
- package/dist/core/errors/map-zod.d.ts.map +1 -0
- package/{src/core/errors/map-zod.ts → dist/core/errors/map-zod.js} +7 -19
- package/dist/core/errors/map-zod.js.map +1 -0
- package/dist/core/hooks/use-button.d.ts +73 -0
- package/dist/core/hooks/use-button.d.ts.map +1 -0
- package/dist/core/hooks/use-button.js +116 -0
- package/dist/core/hooks/use-button.js.map +1 -0
- package/dist/core/hooks/use-core-context.d.ts +9 -0
- package/dist/core/hooks/use-core-context.d.ts.map +1 -0
- package/{src/core/hooks/use-core-context.ts → dist/core/hooks/use-core-context.js} +3 -6
- package/dist/core/hooks/use-core-context.js.map +1 -0
- package/dist/core/hooks/use-core-utility.d.ts +1 -0
- package/dist/core/hooks/use-core-utility.d.ts.map +1 -0
- package/dist/core/hooks/use-core-utility.js +2 -0
- package/dist/core/hooks/use-core-utility.js.map +1 -0
- package/{src/core/hooks/use-core.ts → dist/core/hooks/use-core.d.ts} +9 -13
- package/dist/core/hooks/use-core.d.ts.map +1 -0
- package/dist/core/hooks/use-core.js +11 -0
- package/dist/core/hooks/use-core.js.map +1 -0
- package/dist/core/hooks/use-field.d.ts +141 -0
- package/dist/core/hooks/use-field.d.ts.map +1 -0
- package/dist/core/hooks/use-field.js +256 -0
- package/dist/core/hooks/use-field.js.map +1 -0
- package/dist/core/hooks/use-optional-field.d.ts +9 -0
- package/dist/core/hooks/use-optional-field.d.ts.map +1 -0
- package/dist/core/hooks/use-optional-field.js +146 -0
- package/dist/core/hooks/use-optional-field.js.map +1 -0
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +11 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/registry/binder-registry.d.ts +38 -0
- package/dist/core/registry/binder-registry.d.ts.map +1 -0
- package/dist/core/registry/binder-registry.js +52 -0
- package/dist/core/registry/binder-registry.js.map +1 -0
- package/dist/core/registry/field-registry.d.ts +86 -0
- package/dist/core/registry/field-registry.d.ts.map +1 -0
- package/{src/core/registry/field-registry.ts → dist/core/registry/field-registry.js} +56 -70
- package/dist/core/registry/field-registry.js.map +1 -0
- package/dist/core/test.d.ts +2 -0
- package/dist/core/test.d.ts.map +1 -0
- package/dist/core/test.js +9 -0
- package/dist/core/test.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/{src/index.ts → dist/index.js} +5 -47
- package/dist/index.js.map +1 -0
- package/{src/input/index.ts → dist/input/index.d.ts} +1 -2
- package/dist/input/index.d.ts.map +1 -0
- package/dist/input/index.js +3 -0
- package/dist/input/index.js.map +1 -0
- package/dist/input/input-field.d.ts +15 -0
- package/dist/input/input-field.d.ts.map +1 -0
- package/dist/input/input-field.js +413 -0
- package/dist/input/input-field.js.map +1 -0
- package/dist/input/input-layout-graph.d.ts +77 -0
- package/dist/input/input-layout-graph.d.ts.map +1 -0
- package/dist/input/input-layout-graph.js +108 -0
- package/dist/input/input-layout-graph.js.map +1 -0
- package/{src/input/input-props.ts → dist/input/input-props.d.ts} +22 -84
- package/dist/input/input-props.d.ts.map +1 -0
- package/dist/input/input-props.js +4 -0
- package/dist/input/input-props.js.map +1 -0
- package/dist/lib/get-global-countries.d.ts +3 -0
- package/dist/lib/get-global-countries.d.ts.map +1 -0
- package/dist/lib/get-global-countries.js +70 -0
- package/dist/lib/get-global-countries.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +6 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/presets/index.d.ts +1 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +2 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/presets/shadcn-preset.d.ts +1 -0
- package/dist/presets/shadcn-preset.d.ts.map +1 -0
- package/dist/presets/shadcn-preset.js +2 -0
- package/dist/presets/shadcn-preset.js.map +1 -0
- package/dist/presets/shadcn-variants/checkbox.d.ts +212 -0
- package/dist/presets/shadcn-variants/checkbox.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/checkbox.js +315 -0
- package/dist/presets/shadcn-variants/checkbox.js.map +1 -0
- package/dist/presets/shadcn-variants/chips.d.ts +154 -0
- package/dist/presets/shadcn-variants/chips.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/chips.js +266 -0
- package/dist/presets/shadcn-variants/chips.js.map +1 -0
- package/dist/presets/shadcn-variants/color.d.ts +63 -0
- package/dist/presets/shadcn-variants/color.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/color.js +96 -0
- package/dist/presets/shadcn-variants/color.js.map +1 -0
- package/dist/presets/shadcn-variants/custom.d.ts +94 -0
- package/dist/presets/shadcn-variants/custom.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/custom.js +80 -0
- package/dist/presets/shadcn-variants/custom.js.map +1 -0
- package/dist/presets/shadcn-variants/date.d.ts +114 -0
- package/dist/presets/shadcn-variants/date.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/date.js +414 -0
- package/dist/presets/shadcn-variants/date.js.map +1 -0
- package/dist/presets/shadcn-variants/file.d.ts +79 -0
- package/dist/presets/shadcn-variants/file.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/file.js +289 -0
- package/dist/presets/shadcn-variants/file.js.map +1 -0
- package/dist/presets/shadcn-variants/keyvalue.d.ts +35 -0
- package/dist/presets/shadcn-variants/keyvalue.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/keyvalue.js +215 -0
- package/dist/presets/shadcn-variants/keyvalue.js.map +1 -0
- package/dist/presets/shadcn-variants/multiselect.d.ts +210 -0
- package/dist/presets/shadcn-variants/multiselect.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/multiselect.js +352 -0
- package/dist/presets/shadcn-variants/multiselect.js.map +1 -0
- package/dist/presets/shadcn-variants/number.d.ts +31 -0
- package/dist/presets/shadcn-variants/number.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/number.js +64 -0
- package/dist/presets/shadcn-variants/number.js.map +1 -0
- package/dist/presets/shadcn-variants/password.d.ts +195 -0
- package/dist/presets/shadcn-variants/password.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/password.js +296 -0
- package/dist/presets/shadcn-variants/password.js.map +1 -0
- package/dist/presets/shadcn-variants/phone.d.ts +69 -0
- package/dist/presets/shadcn-variants/phone.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/phone.js +308 -0
- package/dist/presets/shadcn-variants/phone.js.map +1 -0
- package/dist/presets/shadcn-variants/radio.d.ts +172 -0
- package/dist/presets/shadcn-variants/radio.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/radio.js +192 -0
- package/dist/presets/shadcn-variants/radio.js.map +1 -0
- package/dist/presets/shadcn-variants/select.d.ts +203 -0
- package/dist/presets/shadcn-variants/select.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/select.js +285 -0
- package/dist/presets/shadcn-variants/select.js.map +1 -0
- package/dist/presets/shadcn-variants/slider.d.ts +131 -0
- package/dist/presets/shadcn-variants/slider.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/slider.js +151 -0
- package/dist/presets/shadcn-variants/slider.js.map +1 -0
- package/dist/presets/shadcn-variants/text.d.ts +155 -0
- package/dist/presets/shadcn-variants/text.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/text.js +98 -0
- package/dist/presets/shadcn-variants/text.js.map +1 -0
- package/dist/presets/shadcn-variants/textarea.d.ts +18 -0
- package/dist/presets/shadcn-variants/textarea.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/textarea.js +24 -0
- package/dist/presets/shadcn-variants/textarea.js.map +1 -0
- package/dist/presets/shadcn-variants/toggle.d.ts +61 -0
- package/dist/presets/shadcn-variants/toggle.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/toggle.js +67 -0
- package/dist/presets/shadcn-variants/toggle.js.map +1 -0
- package/dist/presets/shadcn-variants/treeselect.d.ts +81 -0
- package/dist/presets/shadcn-variants/treeselect.d.ts.map +1 -0
- package/dist/presets/shadcn-variants/treeselect.js +317 -0
- package/dist/presets/shadcn-variants/treeselect.js.map +1 -0
- package/dist/presets/ui/badge.d.ts +10 -0
- package/dist/presets/ui/badge.d.ts.map +1 -0
- package/dist/presets/ui/badge.js +23 -0
- package/dist/presets/ui/badge.js.map +1 -0
- package/dist/presets/ui/button.d.ts +11 -0
- package/dist/presets/ui/button.d.ts.map +1 -0
- package/dist/presets/ui/button.js +34 -0
- package/dist/presets/ui/button.js.map +1 -0
- package/dist/presets/ui/calendar.d.ts +9 -0
- package/dist/presets/ui/calendar.d.ts.map +1 -0
- package/dist/presets/ui/calendar.js +76 -0
- package/dist/presets/ui/calendar.js.map +1 -0
- package/dist/presets/ui/checkbox.d.ts +18 -0
- package/dist/presets/ui/checkbox.d.ts.map +1 -0
- package/dist/presets/ui/checkbox.js +61 -0
- package/dist/presets/ui/checkbox.js.map +1 -0
- package/dist/presets/ui/custom.d.ts +1 -0
- package/dist/presets/ui/custom.d.ts.map +1 -0
- package/dist/presets/ui/custom.js +2 -0
- package/dist/presets/ui/custom.js.map +1 -0
- package/dist/presets/ui/dialog.d.ts +16 -0
- package/dist/presets/ui/dialog.d.ts.map +1 -0
- package/dist/presets/ui/dialog.js +36 -0
- package/dist/presets/ui/dialog.js.map +1 -0
- package/dist/presets/ui/field.d.ts +25 -0
- package/dist/presets/ui/field.d.ts.map +1 -0
- package/dist/presets/ui/field.js +76 -0
- package/dist/presets/ui/field.js.map +1 -0
- package/dist/presets/ui/input-mask.d.ts +34 -0
- package/dist/presets/ui/input-mask.d.ts.map +1 -0
- package/dist/presets/ui/input-mask.js +561 -0
- package/dist/presets/ui/input-mask.js.map +1 -0
- package/dist/presets/ui/input-otp.d.ts +12 -0
- package/dist/presets/ui/input-otp.d.ts.map +1 -0
- package/dist/presets/ui/input-otp.js +22 -0
- package/dist/presets/ui/input-otp.js.map +1 -0
- package/dist/presets/ui/input.d.ts +83 -0
- package/dist/presets/ui/input.d.ts.map +1 -0
- package/dist/presets/ui/input.js +436 -0
- package/dist/presets/ui/input.js.map +1 -0
- package/dist/presets/ui/label.d.ts +5 -0
- package/dist/presets/ui/label.d.ts.map +1 -0
- package/dist/presets/ui/label.js +8 -0
- package/dist/presets/ui/label.js.map +1 -0
- package/dist/presets/ui/number.d.ts +60 -0
- package/dist/presets/ui/number.d.ts.map +1 -0
- package/dist/presets/ui/number.js +1078 -0
- package/dist/presets/ui/number.js.map +1 -0
- package/dist/presets/ui/popover.d.ts +8 -0
- package/dist/presets/ui/popover.d.ts.map +1 -0
- package/dist/presets/ui/popover.js +17 -0
- package/dist/presets/ui/popover.js.map +1 -0
- package/dist/presets/ui/radio-group.d.ts +6 -0
- package/dist/presets/ui/radio-group.d.ts.map +1 -0
- package/dist/presets/ui/radio-group.js +12 -0
- package/dist/presets/ui/radio-group.js.map +1 -0
- package/dist/presets/ui/scroll-area.d.ts +6 -0
- package/dist/presets/ui/scroll-area.d.ts.map +1 -0
- package/dist/presets/ui/scroll-area.js +13 -0
- package/dist/presets/ui/scroll-area.js.map +1 -0
- package/dist/presets/ui/select.d.ts +21 -0
- package/dist/presets/ui/select.d.ts.map +1 -0
- package/dist/presets/ui/select.js +38 -0
- package/dist/presets/ui/select.js.map +1 -0
- package/dist/presets/ui/separator.d.ts +5 -0
- package/dist/presets/ui/separator.d.ts.map +1 -0
- package/dist/presets/ui/separator.js +9 -0
- package/dist/presets/ui/separator.js.map +1 -0
- package/dist/presets/ui/slider.d.ts +5 -0
- package/dist/presets/ui/slider.d.ts.map +1 -0
- package/dist/presets/ui/slider.js +14 -0
- package/dist/presets/ui/slider.js.map +1 -0
- package/dist/presets/ui/switch.d.ts +7 -0
- package/dist/presets/ui/switch.d.ts.map +1 -0
- package/dist/presets/ui/switch.js +9 -0
- package/dist/presets/ui/switch.js.map +1 -0
- package/dist/presets/ui/textarea.d.ts +76 -0
- package/dist/presets/ui/textarea.d.ts.map +1 -0
- package/dist/presets/ui/textarea.js +291 -0
- package/dist/presets/ui/textarea.js.map +1 -0
- package/dist/presets/ui/time-dropdowns.d.ts +58 -0
- package/dist/presets/ui/time-dropdowns.d.ts.map +1 -0
- package/dist/presets/ui/time-dropdowns.js +133 -0
- package/dist/presets/ui/time-dropdowns.js.map +1 -0
- package/{src/schema/adapter.ts → dist/schema/adapter.d.ts} +7 -35
- package/dist/schema/adapter.d.ts.map +1 -0
- package/dist/schema/adapter.js +3 -0
- package/dist/schema/adapter.js.map +1 -0
- package/{src/schema/core.ts → dist/schema/core.d.ts} +17 -117
- package/dist/schema/core.d.ts.map +1 -0
- package/dist/schema/core.js +4 -0
- package/dist/schema/core.js.map +1 -0
- package/dist/schema/field-map.d.ts +1 -0
- package/dist/schema/field-map.d.ts.map +1 -0
- package/dist/schema/field-map.js +2 -0
- package/dist/schema/field-map.js.map +1 -0
- package/{src/schema/field.ts → dist/schema/field.d.ts} +1 -34
- package/dist/schema/field.d.ts.map +1 -0
- package/dist/schema/field.js +4 -0
- package/dist/schema/field.js.map +1 -0
- package/dist/schema/index.d.ts +1 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +2 -0
- package/dist/schema/index.js.map +1 -0
- package/{src/schema/input-field.ts → dist/schema/input-field.d.ts} +6 -43
- package/dist/schema/input-field.d.ts.map +1 -0
- package/dist/schema/input-field.js +3 -0
- package/dist/schema/input-field.js.map +1 -0
- package/dist/schema/presets.d.ts +1 -0
- package/dist/schema/presets.d.ts.map +1 -0
- package/dist/schema/presets.js +2 -0
- package/dist/schema/presets.js.map +1 -0
- package/{src/schema/variant.ts → dist/schema/variant.d.ts} +24 -64
- package/dist/schema/variant.d.ts.map +1 -0
- package/dist/schema/variant.js +3 -0
- package/dist/schema/variant.js.map +1 -0
- package/dist/variants/core/checkbox.d.ts +15 -0
- package/dist/variants/core/checkbox.d.ts.map +1 -0
- package/dist/variants/core/checkbox.js +27 -0
- package/dist/variants/core/checkbox.js.map +1 -0
- package/dist/variants/core/chips.d.ts +3 -0
- package/dist/variants/core/chips.d.ts.map +1 -0
- package/dist/variants/core/chips.js +20 -0
- package/dist/variants/core/chips.js.map +1 -0
- package/dist/variants/core/color.d.ts +3 -0
- package/dist/variants/core/color.d.ts.map +1 -0
- package/dist/variants/core/color.js +14 -0
- package/dist/variants/core/color.js.map +1 -0
- package/dist/variants/core/custom.d.ts +11 -0
- package/dist/variants/core/custom.d.ts.map +1 -0
- package/{src/variants/core/custom.tsx → dist/variants/core/custom.js} +15 -18
- package/dist/variants/core/custom.js.map +1 -0
- package/dist/variants/core/date.d.ts +3 -0
- package/dist/variants/core/date.d.ts.map +1 -0
- package/dist/variants/core/date.js +20 -0
- package/dist/variants/core/date.js.map +1 -0
- package/dist/variants/core/file.d.ts +3 -0
- package/dist/variants/core/file.d.ts.map +1 -0
- package/dist/variants/core/file.js +6 -0
- package/dist/variants/core/file.js.map +1 -0
- package/dist/variants/core/keyvalue.d.ts +3 -0
- package/dist/variants/core/keyvalue.d.ts.map +1 -0
- package/dist/variants/core/keyvalue.js +9 -0
- package/dist/variants/core/keyvalue.js.map +1 -0
- package/dist/variants/core/multiselect.d.ts +11 -0
- package/dist/variants/core/multiselect.d.ts.map +1 -0
- package/dist/variants/core/multiselect.js +15 -0
- package/dist/variants/core/multiselect.js.map +1 -0
- package/dist/variants/core/number.d.ts +38 -0
- package/dist/variants/core/number.d.ts.map +1 -0
- package/dist/variants/core/number.js +62 -0
- package/dist/variants/core/number.js.map +1 -0
- package/dist/variants/core/password.d.ts +11 -0
- package/dist/variants/core/password.d.ts.map +1 -0
- package/dist/variants/core/password.js +29 -0
- package/dist/variants/core/password.js.map +1 -0
- package/dist/variants/core/phone.d.ts +3 -0
- package/dist/variants/core/phone.d.ts.map +1 -0
- package/dist/variants/core/phone.js +14 -0
- package/dist/variants/core/phone.js.map +1 -0
- package/dist/variants/core/radio.d.ts +8 -0
- package/dist/variants/core/radio.d.ts.map +1 -0
- package/dist/variants/core/radio.js +34 -0
- package/dist/variants/core/radio.js.map +1 -0
- package/dist/variants/core/select.d.ts +5 -0
- package/dist/variants/core/select.d.ts.map +1 -0
- package/dist/variants/core/select.js +11 -0
- package/dist/variants/core/select.js.map +1 -0
- package/dist/variants/core/slider.d.ts +19 -0
- package/dist/variants/core/slider.d.ts.map +1 -0
- package/dist/variants/core/slider.js +36 -0
- package/dist/variants/core/slider.js.map +1 -0
- package/dist/variants/core/text.d.ts +38 -0
- package/dist/variants/core/text.d.ts.map +1 -0
- package/{src/variants/core/text.tsx → dist/variants/core/text.js} +4 -56
- package/dist/variants/core/text.js.map +1 -0
- package/dist/variants/core/textarea.d.ts +3 -0
- package/dist/variants/core/textarea.d.ts.map +1 -0
- package/dist/variants/core/textarea.js +20 -0
- package/dist/variants/core/textarea.js.map +1 -0
- package/dist/variants/core/toggle.d.ts +6 -0
- package/dist/variants/core/toggle.d.ts.map +1 -0
- package/dist/variants/core/toggle.js +41 -0
- package/dist/variants/core/toggle.js.map +1 -0
- package/dist/variants/core/treeselect.d.ts +4 -0
- package/dist/variants/core/treeselect.d.ts.map +1 -0
- package/dist/variants/core/treeselect.js +7 -0
- package/dist/variants/core/treeselect.js.map +1 -0
- package/dist/variants/helpers/selection-summary.d.ts +24 -0
- package/dist/variants/helpers/selection-summary.d.ts.map +1 -0
- package/dist/variants/helpers/selection-summary.js +105 -0
- package/dist/variants/helpers/selection-summary.js.map +1 -0
- package/dist/variants/index.d.ts +16 -0
- package/dist/variants/index.d.ts.map +1 -0
- package/{src/variants/index.ts → dist/variants/index.js} +7 -27
- package/dist/variants/index.js.map +1 -0
- package/dist/variants/registry.d.ts +19 -0
- package/dist/variants/registry.d.ts.map +1 -0
- package/dist/variants/registry.js +29 -0
- package/dist/variants/registry.js.map +1 -0
- package/dist/variants/select-shared.d.ts +1 -0
- package/dist/variants/select-shared.d.ts.map +1 -0
- package/dist/variants/select-shared.js +2 -0
- package/dist/variants/select-shared.js.map +1 -0
- package/{src/variants/shared.ts → dist/variants/shared.d.ts} +3 -22
- package/dist/variants/shared.d.ts.map +1 -0
- package/dist/variants/shared.js +3 -0
- package/dist/variants/shared.js.map +1 -0
- package/package.json +5 -5
- package/.scaffold-cache.json +0 -537
- package/src/.scaffold-cache.json +0 -544
- package/src/adapters/axios.ts +0 -117
- package/src/adapters/index.ts +0 -91
- package/src/adapters/inertia.ts +0 -187
- package/src/core/bound/observe-bound-field.ts +0 -172
- package/src/core/bound/wait-for-bound-field.ts +0 -57
- package/src/core/core-root.tsx +0 -72
- package/src/core/core-shell.tsx +0 -44
- package/src/core/errors/index.ts +0 -2
- package/src/core/hooks/use-button.ts +0 -220
- package/src/core/hooks/use-core-utility.ts +0 -0
- package/src/core/hooks/use-field.ts +0 -497
- package/src/core/hooks/use-optional-field.ts +0 -28
- package/src/core/index.ts +0 -0
- package/src/core/registry/binder-registry.ts +0 -82
- package/src/core/test.tsx +0 -17
- package/src/global.d.ts +0 -14
- package/src/input/input-field.tsx +0 -854
- package/src/input/input-layout-graph.ts +0 -230
- package/src/lib/get-global-countries.ts +0 -87
- package/src/lib/utils.ts +0 -6
- package/src/presets/index.ts +0 -0
- package/src/presets/shadcn-preset.ts +0 -0
- package/src/presets/shadcn-variants/checkbox.tsx +0 -849
- package/src/presets/shadcn-variants/chips.tsx +0 -756
- package/src/presets/shadcn-variants/color.tsx +0 -284
- package/src/presets/shadcn-variants/custom.tsx +0 -227
- package/src/presets/shadcn-variants/date.tsx +0 -796
- package/src/presets/shadcn-variants/file.tsx +0 -764
- package/src/presets/shadcn-variants/keyvalue.tsx +0 -556
- package/src/presets/shadcn-variants/multiselect.tsx +0 -1132
- package/src/presets/shadcn-variants/number.tsx +0 -176
- package/src/presets/shadcn-variants/password.tsx +0 -737
- package/src/presets/shadcn-variants/phone.tsx +0 -628
- package/src/presets/shadcn-variants/radio.tsx +0 -578
- package/src/presets/shadcn-variants/select.tsx +0 -956
- package/src/presets/shadcn-variants/slider.tsx +0 -622
- package/src/presets/shadcn-variants/text.tsx +0 -343
- package/src/presets/shadcn-variants/textarea.tsx +0 -66
- package/src/presets/shadcn-variants/toggle.tsx +0 -218
- package/src/presets/shadcn-variants/treeselect.tsx +0 -784
- package/src/presets/ui/badge.tsx +0 -46
- package/src/presets/ui/button.tsx +0 -60
- package/src/presets/ui/calendar.tsx +0 -214
- package/src/presets/ui/checkbox.tsx +0 -115
- package/src/presets/ui/custom.tsx +0 -0
- package/src/presets/ui/dialog.tsx +0 -141
- package/src/presets/ui/field.tsx +0 -246
- package/src/presets/ui/input-mask.tsx +0 -739
- package/src/presets/ui/input-otp.tsx +0 -77
- package/src/presets/ui/input.tsx +0 -1011
- package/src/presets/ui/label.tsx +0 -22
- package/src/presets/ui/number.tsx +0 -1370
- package/src/presets/ui/popover.tsx +0 -46
- package/src/presets/ui/radio-group.tsx +0 -43
- package/src/presets/ui/scroll-area.tsx +0 -56
- package/src/presets/ui/select.tsx +0 -190
- package/src/presets/ui/separator.tsx +0 -28
- package/src/presets/ui/slider.tsx +0 -61
- package/src/presets/ui/switch.tsx +0 -32
- package/src/presets/ui/textarea.tsx +0 -634
- package/src/presets/ui/time-dropdowns.tsx +0 -350
- package/src/schema/field-map.ts +0 -0
- package/src/schema/index.ts +0 -0
- package/src/schema/presets.ts +0 -0
- package/src/variants/core/checkbox.tsx +0 -54
- package/src/variants/core/chips.tsx +0 -22
- package/src/variants/core/color.tsx +0 -16
- package/src/variants/core/date.tsx +0 -25
- package/src/variants/core/file.tsx +0 -9
- package/src/variants/core/keyvalue.tsx +0 -12
- package/src/variants/core/multiselect.tsx +0 -28
- package/src/variants/core/number.tsx +0 -115
- package/src/variants/core/password.tsx +0 -35
- package/src/variants/core/phone.tsx +0 -16
- package/src/variants/core/radio.tsx +0 -38
- package/src/variants/core/select.tsx +0 -15
- package/src/variants/core/slider.tsx +0 -55
- package/src/variants/core/textarea.tsx +0 -22
- package/src/variants/core/toggle.tsx +0 -50
- package/src/variants/core/treeselect.tsx +0 -11
- package/src/variants/helpers/selection-summary.tsx +0 -236
- package/src/variants/registry.ts +0 -38
- package/src/variants/select-shared.ts +0 -0
- package/tsconfig.json +0 -14
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { InputNumber } from "../ui/number";
|
|
4
|
+
import { cn } from "@/lib/utils";
|
|
5
|
+
import { ChevronUp, ChevronDown, Plus, Minus } from "lucide-react";
|
|
6
|
+
export const ShadcnNumberVariant = React.forwardRef(function ShadcnNumberVariant(props, forwardedRef) {
|
|
7
|
+
const { showButtons, buttonLayout = "stacked", disabled, // Extract disabled to style buttons
|
|
8
|
+
...rest } = props;
|
|
9
|
+
// we still want access to these for stepping logic
|
|
10
|
+
const { step = 1, min, value, max, onValue: onValueChange, name, id, inputId, } = rest;
|
|
11
|
+
const handleChange = React.useCallback((e) => {
|
|
12
|
+
if (onValueChange) {
|
|
13
|
+
onValueChange(e.value, {
|
|
14
|
+
source: "user",
|
|
15
|
+
nativeEvent: e.originalEvent,
|
|
16
|
+
raw: e.value,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}, [onValueChange]);
|
|
20
|
+
const handleStep = React.useCallback((direction, originalEvent) => {
|
|
21
|
+
if (disabled)
|
|
22
|
+
return;
|
|
23
|
+
const current = value ?? 0;
|
|
24
|
+
let next = current + direction * step;
|
|
25
|
+
if (typeof min === "number")
|
|
26
|
+
next = Math.max(next, min);
|
|
27
|
+
if (typeof max === "number")
|
|
28
|
+
next = Math.min(next, max);
|
|
29
|
+
// Prime-style event
|
|
30
|
+
const e = {
|
|
31
|
+
originalEvent,
|
|
32
|
+
value: next,
|
|
33
|
+
stopPropagation: () => originalEvent.stopPropagation(),
|
|
34
|
+
preventDefault: () => originalEvent.preventDefault(),
|
|
35
|
+
target: {
|
|
36
|
+
name,
|
|
37
|
+
id: id ?? inputId ?? null,
|
|
38
|
+
value: next,
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
handleChange(e);
|
|
42
|
+
}, [value, step, min, max, onValueChange, name, id, inputId, disabled, handleChange]);
|
|
43
|
+
// --- Styles ---
|
|
44
|
+
// Common styles for the interactive buttons
|
|
45
|
+
const btnBase = "flex h-full items-center justify-center bg-transparent text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground disabled:opacity-50 disabled:cursor-not-allowed";
|
|
46
|
+
// Build controls based on layout
|
|
47
|
+
let leadingControl;
|
|
48
|
+
let trailingControl;
|
|
49
|
+
if (showButtons) {
|
|
50
|
+
if (buttonLayout === "inline") {
|
|
51
|
+
// INLINE: "-" on the left, "+" on the right
|
|
52
|
+
leadingControl = (_jsx("button", { type: "button", tabIndex: -1, disabled: disabled, onClick: (e) => handleStep(-1, e), className: cn(btnBase, "border-r border-input px-3"), "aria-label": "Decrease value", children: _jsx(Minus, { className: "h-4 w-4" }) }));
|
|
53
|
+
trailingControl = (_jsx("button", { type: "button", tabIndex: -1, disabled: disabled, onClick: (e) => handleStep(1, e), className: cn(btnBase, "border-l border-input px-3"), "aria-label": "Increase value", children: _jsx(Plus, { className: "h-4 w-4" }) }));
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// STACKED: vertical +/- on the right
|
|
57
|
+
trailingControl = (_jsxs("div", { className: "flex h-full flex-col border-l border-input", children: [_jsx("button", { type: "button", tabIndex: -1, disabled: disabled, onClick: (e) => handleStep(1, e), className: cn(btnBase, "h-1/2 px-2 border-b border-input"), "aria-label": "Increase value", children: _jsx(ChevronUp, { className: "h-3 w-3" }) }), _jsx("button", { type: "button", tabIndex: -1, disabled: disabled, onClick: (e) => handleStep(-1, e), className: cn(btnBase, "h-1/2 px-2"), "aria-label": "Decrease value", children: _jsx(ChevronDown, { className: "h-3 w-3" }) })] }));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return (_jsx(InputNumber, { ref: forwardedRef, value: value, disabled: disabled, ...rest, onValueChange: handleChange, leadingControl: leadingControl, trailingControl: trailingControl, extendBoxToControls: true,
|
|
61
|
+
// Ensure the controls sit flush inside the container
|
|
62
|
+
leadingControlClassName: cn("flex h-full", rest.leadingControlClassName), trailingControlClassName: cn("flex h-full", rest.trailingControlClassName) }));
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=number.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../../src/presets/shadcn-variants/number.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { VariantBaseProps } from "@/variants/shared";
|
|
3
|
+
import type { ShadcnTextVariantProps } from "@/presets/shadcn-variants/text";
|
|
4
|
+
type BaseProps = VariantBaseProps<string | undefined>;
|
|
5
|
+
/**
|
|
6
|
+
* Options for the built-in password strength meter.
|
|
7
|
+
*
|
|
8
|
+
* NOTE: Score is always in the range 0–4 (inclusive).
|
|
9
|
+
*/
|
|
10
|
+
export interface StrengthOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Custom scoring function.
|
|
13
|
+
* Return a number in the range 0–4 (inclusive) where 0 = weakest, 4 = strongest.
|
|
14
|
+
*/
|
|
15
|
+
calc?: (value: string) => number;
|
|
16
|
+
/**
|
|
17
|
+
* Labels for each score bucket (index 0..4).
|
|
18
|
+
* Defaults to: ["Very weak", "Weak", "Okay", "Good", "Strong"]
|
|
19
|
+
*/
|
|
20
|
+
labels?: [string, string, string, string, string];
|
|
21
|
+
/**
|
|
22
|
+
* Thresholds for score steps using a 0–100 bar.
|
|
23
|
+
* Defaults to [0, 25, 50, 75, 100] mapping to scores 0..4 respectively.
|
|
24
|
+
*/
|
|
25
|
+
thresholds?: [number, number, number, number, number];
|
|
26
|
+
/**
|
|
27
|
+
* Minimum score required to consider the password acceptable (0–4).
|
|
28
|
+
* This is purely visual unless you enforce it in validate/onChange.
|
|
29
|
+
* Default: 2
|
|
30
|
+
*/
|
|
31
|
+
minScore?: number | 2;
|
|
32
|
+
/**
|
|
33
|
+
* Whether to show the textual label next to/under the bar.
|
|
34
|
+
* Default: true
|
|
35
|
+
*/
|
|
36
|
+
showLabel?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Where to render the meter.
|
|
39
|
+
* - "inline" → compact row under the input
|
|
40
|
+
* - "block" → stacked with more spacing
|
|
41
|
+
* Default: "inline"
|
|
42
|
+
*/
|
|
43
|
+
display?: "inline" | "block";
|
|
44
|
+
}
|
|
45
|
+
export interface PasswordRuleConfig {
|
|
46
|
+
/**
|
|
47
|
+
* Pattern used to decide if the rule passes.
|
|
48
|
+
*/
|
|
49
|
+
pattern: RegExp;
|
|
50
|
+
/**
|
|
51
|
+
* If true, the rule is considered optional (recommendation).
|
|
52
|
+
* Default: false unless the rule name is not prefixed with "!".
|
|
53
|
+
*/
|
|
54
|
+
optional?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Weight in the scoring (relative importance).
|
|
57
|
+
* Default: 1, doubled if the use key is prefixed with "!".
|
|
58
|
+
*/
|
|
59
|
+
weight?: number;
|
|
60
|
+
/**
|
|
61
|
+
* Short label for the rule (e.g. "At least 8 characters").
|
|
62
|
+
* Defaults to the map key if omitted.
|
|
63
|
+
*/
|
|
64
|
+
label?: string;
|
|
65
|
+
/**
|
|
66
|
+
* Longer description, used in detailed rule view.
|
|
67
|
+
*/
|
|
68
|
+
description?: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* A definition entry can be:
|
|
72
|
+
* - string → treated as a regex source
|
|
73
|
+
* - RegExp → used directly
|
|
74
|
+
* - full config
|
|
75
|
+
*/
|
|
76
|
+
export type PasswordRuleDefinition = string | RegExp | PasswordRuleConfig;
|
|
77
|
+
/**
|
|
78
|
+
* Map of alias/keys → definition entries.
|
|
79
|
+
*/
|
|
80
|
+
export type PasswordDefinitionMap = Record<string, PasswordRuleDefinition>;
|
|
81
|
+
/**
|
|
82
|
+
* Internal normalized state for a single rule.
|
|
83
|
+
*/
|
|
84
|
+
interface NormalizedRuleState {
|
|
85
|
+
key: string;
|
|
86
|
+
label: string;
|
|
87
|
+
description?: string;
|
|
88
|
+
optional: boolean;
|
|
89
|
+
required: boolean;
|
|
90
|
+
weight: number;
|
|
91
|
+
passed: boolean;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Props passed to custom meter renderers.
|
|
95
|
+
*/
|
|
96
|
+
export interface PasswordMeterRenderProps {
|
|
97
|
+
/** Raw password value. */
|
|
98
|
+
value: string;
|
|
99
|
+
/** Bucket score 0..4 based on percent + thresholds. */
|
|
100
|
+
score: number;
|
|
101
|
+
/** 0–100 progress used for the bar. */
|
|
102
|
+
percent: number;
|
|
103
|
+
/** Human label for the current score. */
|
|
104
|
+
label: string;
|
|
105
|
+
/** Whether score >= minScore. */
|
|
106
|
+
passed: boolean;
|
|
107
|
+
/** Effective minScore after normalization. */
|
|
108
|
+
minScore: number;
|
|
109
|
+
/** Effective thresholds used for bucketing. */
|
|
110
|
+
thresholds: [number, number, number, number, number];
|
|
111
|
+
/** Effective labels used. */
|
|
112
|
+
labels: [string, string, string, string, string];
|
|
113
|
+
/** Rule-level details when using a definition map. */
|
|
114
|
+
rules: NormalizedRuleState[];
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Password-only props (on top of Shadcn text UI props & VariantBaseProps).
|
|
118
|
+
*
|
|
119
|
+
* This is what the form runtime sees as VariantPropsFor<"password">.
|
|
120
|
+
*/
|
|
121
|
+
export interface PasswordVariantProps {
|
|
122
|
+
/** Maximum number of characters permitted. */
|
|
123
|
+
maxLength?: number;
|
|
124
|
+
/** Browser autocomplete hint (e.g., "current-password", "new-password"). */
|
|
125
|
+
autoComplete?: string;
|
|
126
|
+
/** Show an eye button to toggle between obscured/plain text. (default: true) */
|
|
127
|
+
revealToggle?: boolean;
|
|
128
|
+
/** Start in the revealed (plain text) state. */
|
|
129
|
+
defaultRevealed?: boolean;
|
|
130
|
+
/** Called whenever the reveal state changes. */
|
|
131
|
+
onRevealChange?(revealed: boolean): void;
|
|
132
|
+
/** Override the icons used for hide/show. */
|
|
133
|
+
renderToggleIcon?(revealed: boolean): React.ReactNode;
|
|
134
|
+
/** Accessible label for the toggle button. */
|
|
135
|
+
toggleAriaLabel?(revealed: boolean): string;
|
|
136
|
+
/**
|
|
137
|
+
* Extra className for the reveal toggle button.
|
|
138
|
+
*/
|
|
139
|
+
toggleButtonClassName?: string;
|
|
140
|
+
/**
|
|
141
|
+
* Enable the built-in strength meter (boolean or options).
|
|
142
|
+
*
|
|
143
|
+
* - false / undefined → no built-in meter is shown
|
|
144
|
+
* - true → use defaults
|
|
145
|
+
* - object → merge with defaults
|
|
146
|
+
*/
|
|
147
|
+
strengthMeter?: boolean | StrengthOptions;
|
|
148
|
+
/**
|
|
149
|
+
* Optional rule definition map.
|
|
150
|
+
*/
|
|
151
|
+
ruleDefinitions?: PasswordDefinitionMap;
|
|
152
|
+
/**
|
|
153
|
+
* Selection of rule aliases to apply.
|
|
154
|
+
*
|
|
155
|
+
* - "length" → use ruleDefinitions["length"] with default importance
|
|
156
|
+
* - "!length" → same rule but treated as more important
|
|
157
|
+
*/
|
|
158
|
+
ruleUses?: string[];
|
|
159
|
+
/**
|
|
160
|
+
* Built-in meter style:
|
|
161
|
+
* - "simple" → single bar + label
|
|
162
|
+
* - "rules" → bar + per-rule checklist
|
|
163
|
+
* Default: "simple"
|
|
164
|
+
*/
|
|
165
|
+
meterStyle?: "simple" | "rules";
|
|
166
|
+
/**
|
|
167
|
+
* Optional custom meter renderer.
|
|
168
|
+
*/
|
|
169
|
+
renderMeter?(props: PasswordMeterRenderProps): React.ReactNode;
|
|
170
|
+
/**
|
|
171
|
+
* ClassNames for the meter and rules UI.
|
|
172
|
+
*/
|
|
173
|
+
meterWrapperClassName?: string;
|
|
174
|
+
meterContainerClassName?: string;
|
|
175
|
+
meterBarClassName?: string;
|
|
176
|
+
meterLabelClassName?: string;
|
|
177
|
+
rulesWrapperClassName?: string;
|
|
178
|
+
rulesHeadingClassName?: string;
|
|
179
|
+
rulesListClassName?: string;
|
|
180
|
+
ruleItemClassName?: string;
|
|
181
|
+
ruleIconClassName?: string;
|
|
182
|
+
ruleLabelClassName?: string;
|
|
183
|
+
/**
|
|
184
|
+
* Extra className for the outer field wrapper.
|
|
185
|
+
*/
|
|
186
|
+
className?: string;
|
|
187
|
+
}
|
|
188
|
+
type TextUiProps = Omit<ShadcnTextVariantProps, "type" | "inputMode" | "leadingControl" | "trailingControl" | "value" | "onValue">;
|
|
189
|
+
/**
|
|
190
|
+
* Full props for the Shadcn-based password variant.
|
|
191
|
+
*/
|
|
192
|
+
export type ShadcnPasswordVariantProps = TextUiProps & PasswordVariantProps & Pick<BaseProps, "value" | "onValue" | "error">;
|
|
193
|
+
export declare const ShadcnPasswordVariant: React.ForwardRefExoticComponent<TextUiProps & PasswordVariantProps & Pick<BaseProps, "value" | "onValue" | "error"> & React.RefAttributes<HTMLInputElement>>;
|
|
194
|
+
export default ShadcnPasswordVariant;
|
|
195
|
+
//# sourceMappingURL=password.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../../src/presets/shadcn-variants/password.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// src/presets/shadcn-variants/password.tsx
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { Input } from "@/presets/ui/input";
|
|
5
|
+
import { cn } from "@/lib/utils";
|
|
6
|
+
import { Eye, EyeOff, Check } from "lucide-react";
|
|
7
|
+
/** Heuristic length/charset score: fast, dependency-free. Returns 0..4. */
|
|
8
|
+
function defaultScore(pw) {
|
|
9
|
+
if (!pw)
|
|
10
|
+
return 0;
|
|
11
|
+
let score = 0;
|
|
12
|
+
// length
|
|
13
|
+
if (pw.length >= 8)
|
|
14
|
+
score++;
|
|
15
|
+
if (pw.length >= 12)
|
|
16
|
+
score++;
|
|
17
|
+
// diversity
|
|
18
|
+
const hasLower = /[a-z]/.test(pw);
|
|
19
|
+
const hasUpper = /[A-Z]/.test(pw);
|
|
20
|
+
const hasDigit = /\d/.test(pw);
|
|
21
|
+
const hasSymbol = /[^A-Za-z0-9]/.test(pw);
|
|
22
|
+
const variety = [hasLower, hasUpper, hasDigit, hasSymbol].filter(Boolean)
|
|
23
|
+
.length;
|
|
24
|
+
if (variety >= 2)
|
|
25
|
+
score++;
|
|
26
|
+
if (variety >= 3)
|
|
27
|
+
score++;
|
|
28
|
+
// Cap at 4
|
|
29
|
+
return Math.max(0, Math.min(4, score));
|
|
30
|
+
}
|
|
31
|
+
const DEFAULT_LABELS = [
|
|
32
|
+
"Very weak",
|
|
33
|
+
"Weak",
|
|
34
|
+
"Okay",
|
|
35
|
+
"Good",
|
|
36
|
+
"Strong",
|
|
37
|
+
];
|
|
38
|
+
const DEFAULT_THRESHOLDS = [
|
|
39
|
+
0, 25, 50, 75, 100,
|
|
40
|
+
];
|
|
41
|
+
function normalizeStrengthOptions(raw) {
|
|
42
|
+
if (!raw)
|
|
43
|
+
return null;
|
|
44
|
+
const base = {
|
|
45
|
+
calc: defaultScore,
|
|
46
|
+
labels: DEFAULT_LABELS,
|
|
47
|
+
thresholds: DEFAULT_THRESHOLDS,
|
|
48
|
+
minScore: 2,
|
|
49
|
+
showLabel: true,
|
|
50
|
+
display: "inline",
|
|
51
|
+
};
|
|
52
|
+
if (raw === true) {
|
|
53
|
+
return base;
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
...base,
|
|
57
|
+
...raw,
|
|
58
|
+
labels: raw.labels ?? base.labels,
|
|
59
|
+
thresholds: raw.thresholds ?? base.thresholds,
|
|
60
|
+
minScore: raw.minScore ?? base.minScore,
|
|
61
|
+
showLabel: raw.showLabel ?? base.showLabel,
|
|
62
|
+
display: raw.display ?? base.display,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// Default rule definitions used by the meter.
|
|
66
|
+
const DEFAULT_RULE_DEFINITIONS = {
|
|
67
|
+
"length-8": {
|
|
68
|
+
pattern: /.{8,}/,
|
|
69
|
+
label: "8+ chars",
|
|
70
|
+
description: "Use at least 8 characters.",
|
|
71
|
+
},
|
|
72
|
+
"length-12": {
|
|
73
|
+
pattern: /.{12,}/,
|
|
74
|
+
optional: true,
|
|
75
|
+
label: "12+ chars",
|
|
76
|
+
description: "Use 12 or more characters for stronger security.",
|
|
77
|
+
},
|
|
78
|
+
lower: {
|
|
79
|
+
pattern: /[a-z]/,
|
|
80
|
+
label: "Lowercase",
|
|
81
|
+
description: "Include at least one lowercase letter (a–z).",
|
|
82
|
+
},
|
|
83
|
+
upper: {
|
|
84
|
+
pattern: /[A-Z]/,
|
|
85
|
+
label: "Uppercase",
|
|
86
|
+
description: "Include at least one uppercase letter (A–Z).",
|
|
87
|
+
},
|
|
88
|
+
digit: {
|
|
89
|
+
pattern: /\d/,
|
|
90
|
+
label: "Number",
|
|
91
|
+
description: "Include at least one digit (0–9).",
|
|
92
|
+
},
|
|
93
|
+
symbol: {
|
|
94
|
+
pattern: /[^A-Za-z0-9]/,
|
|
95
|
+
label: "Symbol",
|
|
96
|
+
description: "Include at least one symbol (e.g. !, @, #, ?).",
|
|
97
|
+
},
|
|
98
|
+
"no-space": {
|
|
99
|
+
pattern: /^\S+$/,
|
|
100
|
+
optional: true,
|
|
101
|
+
label: "No spaces",
|
|
102
|
+
description: "Avoid spaces in your password.",
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Merge default → global → local rule definitions.
|
|
107
|
+
*
|
|
108
|
+
* - DEFAULT_RULE_DEFINITIONS
|
|
109
|
+
* - window["form-palette"]?.ruleDefinition
|
|
110
|
+
* - props.ruleDefinitions
|
|
111
|
+
*/
|
|
112
|
+
function getMergedRuleDefinitions(local) {
|
|
113
|
+
let merged = { ...DEFAULT_RULE_DEFINITIONS };
|
|
114
|
+
if (typeof window !== "undefined") {
|
|
115
|
+
const fp = window["form-palette"];
|
|
116
|
+
const globalDefs = fp?.ruleDefinition;
|
|
117
|
+
if (globalDefs && typeof globalDefs === "object") {
|
|
118
|
+
merged = { ...merged, ...globalDefs };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (local && typeof local === "object") {
|
|
122
|
+
merged = { ...merged, ...local };
|
|
123
|
+
}
|
|
124
|
+
return merged;
|
|
125
|
+
}
|
|
126
|
+
// ─────────────────────────────────────────────
|
|
127
|
+
// Rule normalization & scoring
|
|
128
|
+
// ─────────────────────────────────────────────
|
|
129
|
+
function normalizeRules(value, definitions, uses) {
|
|
130
|
+
if (!definitions || Object.keys(definitions).length === 0) {
|
|
131
|
+
return { rules: [], percent: null };
|
|
132
|
+
}
|
|
133
|
+
const useList = uses && uses.length ? uses : Object.keys(definitions);
|
|
134
|
+
const rules = [];
|
|
135
|
+
let totalWeight = 0;
|
|
136
|
+
let passedWeight = 0;
|
|
137
|
+
for (const rawKey of useList) {
|
|
138
|
+
if (!rawKey)
|
|
139
|
+
continue;
|
|
140
|
+
const important = rawKey.startsWith("!");
|
|
141
|
+
const key = important ? rawKey.slice(1) : rawKey;
|
|
142
|
+
const def = definitions[key];
|
|
143
|
+
if (!def)
|
|
144
|
+
continue;
|
|
145
|
+
let pattern;
|
|
146
|
+
let optional = !important;
|
|
147
|
+
let weight = important ? 2 : 1;
|
|
148
|
+
let label = key;
|
|
149
|
+
let description;
|
|
150
|
+
if (typeof def === "string") {
|
|
151
|
+
pattern = new RegExp(def);
|
|
152
|
+
}
|
|
153
|
+
else if (def instanceof RegExp) {
|
|
154
|
+
pattern = def;
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
pattern = def.pattern;
|
|
158
|
+
if (def.optional !== undefined)
|
|
159
|
+
optional = def.optional;
|
|
160
|
+
if (def.weight !== undefined)
|
|
161
|
+
weight = def.weight;
|
|
162
|
+
if (def.label)
|
|
163
|
+
label = def.label;
|
|
164
|
+
if (def.description)
|
|
165
|
+
description = def.description;
|
|
166
|
+
}
|
|
167
|
+
const passed = pattern.test(value);
|
|
168
|
+
totalWeight += weight;
|
|
169
|
+
if (passed)
|
|
170
|
+
passedWeight += weight;
|
|
171
|
+
rules.push({
|
|
172
|
+
key,
|
|
173
|
+
label,
|
|
174
|
+
description,
|
|
175
|
+
optional,
|
|
176
|
+
required: !optional,
|
|
177
|
+
weight,
|
|
178
|
+
passed,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
if (totalWeight === 0) {
|
|
182
|
+
return { rules, percent: null };
|
|
183
|
+
}
|
|
184
|
+
const percent = (passedWeight / totalWeight) * 100;
|
|
185
|
+
return { rules, percent };
|
|
186
|
+
}
|
|
187
|
+
function clampScore(x) {
|
|
188
|
+
if (Number.isNaN(x))
|
|
189
|
+
return 0;
|
|
190
|
+
return Math.max(0, Math.min(4, x));
|
|
191
|
+
}
|
|
192
|
+
function computeMeterState(value, strength, definitions, uses) {
|
|
193
|
+
const { rules, percent: rulesPercent } = normalizeRules(value, definitions, uses);
|
|
194
|
+
const labels = strength.labels ?? DEFAULT_LABELS;
|
|
195
|
+
const thresholds = strength.thresholds ?? DEFAULT_THRESHOLDS;
|
|
196
|
+
const minScore = (strength.minScore ?? 2);
|
|
197
|
+
let percent;
|
|
198
|
+
let score;
|
|
199
|
+
if (rulesPercent != null) {
|
|
200
|
+
percent = rulesPercent;
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
const rawScore = clampScore(strength.calc ? strength.calc(value) : defaultScore(value));
|
|
204
|
+
percent = (rawScore / 4) * 100;
|
|
205
|
+
}
|
|
206
|
+
let bucketIndex = 0;
|
|
207
|
+
for (let i = 0; i < thresholds.length; i++) {
|
|
208
|
+
if (percent >= thresholds[i]) {
|
|
209
|
+
bucketIndex = i;
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
score = bucketIndex;
|
|
216
|
+
const label = labels[score] ??
|
|
217
|
+
labels[labels.length - 1] ??
|
|
218
|
+
DEFAULT_LABELS[DEFAULT_LABELS.length - 1];
|
|
219
|
+
const passed = score >= minScore;
|
|
220
|
+
return {
|
|
221
|
+
value,
|
|
222
|
+
score,
|
|
223
|
+
percent,
|
|
224
|
+
label,
|
|
225
|
+
passed,
|
|
226
|
+
minScore,
|
|
227
|
+
thresholds: thresholds,
|
|
228
|
+
labels,
|
|
229
|
+
rules,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
function meterColor(score) {
|
|
233
|
+
if (score <= 1)
|
|
234
|
+
return "bg-destructive";
|
|
235
|
+
if (score === 2)
|
|
236
|
+
return "bg-orange-500";
|
|
237
|
+
if (score === 3)
|
|
238
|
+
return "bg-amber-500";
|
|
239
|
+
return "bg-emerald-500";
|
|
240
|
+
}
|
|
241
|
+
// ─────────────────────────────────────────────
|
|
242
|
+
// Main variant component
|
|
243
|
+
// ─────────────────────────────────────────────
|
|
244
|
+
export const ShadcnPasswordVariant = React.forwardRef(function ShadcnPasswordVariant(props, ref) {
|
|
245
|
+
const {
|
|
246
|
+
// base variant bits
|
|
247
|
+
value, onValue, error,
|
|
248
|
+
// password base props
|
|
249
|
+
maxLength, autoComplete, revealToggle = true, defaultRevealed = false, onRevealChange, renderToggleIcon, toggleAriaLabel, toggleButtonClassName,
|
|
250
|
+
// strength / rules
|
|
251
|
+
strengthMeter, ruleDefinitions, ruleUses, meterStyle = "simple", renderMeter, meterWrapperClassName, meterContainerClassName, meterBarClassName, meterLabelClassName, rulesWrapperClassName, rulesHeadingClassName, rulesListClassName, ruleItemClassName, ruleIconClassName, ruleLabelClassName, className,
|
|
252
|
+
// everything else from Shadcn text UI
|
|
253
|
+
...restTextProps } = props;
|
|
254
|
+
const [revealed, setRevealed] = React.useState(Boolean(defaultRevealed));
|
|
255
|
+
const normalizedStrength = React.useMemo(() => normalizeStrengthOptions(strengthMeter), [strengthMeter]);
|
|
256
|
+
const effectiveRuleDefinitions = React.useMemo(() => getMergedRuleDefinitions(ruleDefinitions), [ruleDefinitions]);
|
|
257
|
+
const meterState = React.useMemo(() => {
|
|
258
|
+
if (!normalizedStrength)
|
|
259
|
+
return null;
|
|
260
|
+
const v = value ?? "";
|
|
261
|
+
return computeMeterState(v, normalizedStrength, effectiveRuleDefinitions, ruleUses);
|
|
262
|
+
}, [normalizedStrength, value, ruleUses, effectiveRuleDefinitions]);
|
|
263
|
+
const handleToggleReveal = React.useCallback(() => {
|
|
264
|
+
setRevealed((prev) => {
|
|
265
|
+
const next = !prev;
|
|
266
|
+
onRevealChange?.(next);
|
|
267
|
+
return next;
|
|
268
|
+
});
|
|
269
|
+
}, [onRevealChange]);
|
|
270
|
+
const handleChange = React.useCallback((event) => {
|
|
271
|
+
const next = event.target.value ?? "";
|
|
272
|
+
const detail = {
|
|
273
|
+
source: "variant",
|
|
274
|
+
raw: next,
|
|
275
|
+
nativeEvent: event,
|
|
276
|
+
meta: meterState ?? undefined,
|
|
277
|
+
};
|
|
278
|
+
onValue?.(next, detail);
|
|
279
|
+
}, [onValue, meterState]);
|
|
280
|
+
const toggleLabel = toggleAriaLabel?.(revealed) ??
|
|
281
|
+
(revealed ? "Hide password" : "Show password");
|
|
282
|
+
const trailingControl = revealToggle === false ? undefined : (_jsx("button", { type: "button", onClick: handleToggleReveal, "aria-label": toggleLabel, tabIndex: -1, className: cn("inline-flex h-full items-center justify-center px-3 text-muted-foreground transition-colors hover:text-foreground hover:bg-muted/50 focus-visible:outline-none focus-visible:bg-muted/50", toggleButtonClassName), "data-slot": "password-toggle", children: renderToggleIcon ? (renderToggleIcon(revealed)) : revealed ? (_jsx(EyeOff, { className: "h-4 w-4" })) : (_jsx(Eye, { className: "h-4 w-4" })) }));
|
|
283
|
+
const meterNode = normalizedStrength && meterState
|
|
284
|
+
? renderMeter?.(meterState) ??
|
|
285
|
+
(strengthMeter && (_jsxs("div", { className: cn(normalizedStrength.display === "block"
|
|
286
|
+
? "mt-2 space-y-2"
|
|
287
|
+
: "mt-1.5 flex flex-col gap-0", meterWrapperClassName), "data-slot": "password-meter", children: [_jsxs("div", { className: cn("flex w-full items-center gap-3", meterContainerClassName), children: [_jsx("div", { className: "flex-1", children: _jsx("div", { className: "h-1 w-full overflow-hidden rounded-full bg-secondary", children: _jsx("div", { className: cn("h-full transition-all duration-300 ease-out", meterColor(meterState.score), meterBarClassName), style: { width: `${meterState.percent}%` } }) }) }), normalizedStrength.showLabel !== false && (_jsx("div", { className: cn("min-w-[4rem] text-right text-[10px] font-medium uppercase tracking-wider text-muted-foreground", meterLabelClassName), children: meterState.label }))] }), meterStyle === "rules" &&
|
|
288
|
+
meterState.rules.length > 0 && (_jsx("div", { className: cn("flex flex-wrap gap-1.5 pt-1", rulesWrapperClassName), children: meterState.rules.map((rule) => (_jsxs("span", { className: cn("inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-medium transition-colors duration-200", rule.passed
|
|
289
|
+
? "border-emerald-500/30 bg-emerald-500/10 text-emerald-600 dark:border-emerald-400/20 dark:bg-emerald-400/10 dark:text-emerald-400"
|
|
290
|
+
: "border-transparent bg-secondary text-muted-foreground", ruleItemClassName), children: [rule.passed && (_jsx(Check, { className: "h-3 w-3", strokeWidth: 3 })), rule.label] }, rule.key))) }))] })))
|
|
291
|
+
: null;
|
|
292
|
+
return (_jsxs("div", { className: cn("group/password w-full", className), "data-slot": "password-field", children: [_jsx(Input, { ref: ref, ...restTextProps, type: revealed ? "text" : "password", value: value ?? "", onChange: handleChange, maxLength: maxLength, autoComplete: autoComplete, trailingControl: trailingControl, "aria-invalid": error ? "true" : undefined }), meterNode] }));
|
|
293
|
+
});
|
|
294
|
+
ShadcnPasswordVariant.displayName = "ShadcnPasswordVariant";
|
|
295
|
+
export default ShadcnPasswordVariant;
|
|
296
|
+
//# sourceMappingURL=password.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password.js","sourceRoot":"","sources":["../../../src/presets/shadcn-variants/password.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { VariantBaseProps } from "@/variants/shared";
|
|
3
|
+
import type { ShadcnTextVariantProps } from "@/presets/shadcn-variants/text";
|
|
4
|
+
type BaseProps = VariantBaseProps<string | undefined>;
|
|
5
|
+
/**
|
|
6
|
+
* Single-country phone config.
|
|
7
|
+
*
|
|
8
|
+
* - code: ISO 3166-1 alpha-2 ("NG", "US", "GB", ...)
|
|
9
|
+
* - dial: dial code without "+" ("234", "1", "44", ...)
|
|
10
|
+
* - mask: NATIONAL portion mask only (no dial), e.g. "999 999 9999"
|
|
11
|
+
*/
|
|
12
|
+
export interface PhoneCountry {
|
|
13
|
+
code: string;
|
|
14
|
+
label: string;
|
|
15
|
+
dial: string;
|
|
16
|
+
mask: string;
|
|
17
|
+
flag?: React.ReactNode;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* How the variant emits the form value.
|
|
21
|
+
*
|
|
22
|
+
* - "masked" → "+234 801 234 5678"
|
|
23
|
+
* - "e164" → "2348012345678" (dial + national digits, no "+")
|
|
24
|
+
* - "national"→ "8012345678"
|
|
25
|
+
*/
|
|
26
|
+
export type PhoneValueMode = "masked" | "e164" | "national";
|
|
27
|
+
export interface PhoneSpecificProps {
|
|
28
|
+
countries?: PhoneCountry[];
|
|
29
|
+
defaultCountry?: string;
|
|
30
|
+
onCountryChange?: (country: PhoneCountry) => void;
|
|
31
|
+
showCountry?: boolean;
|
|
32
|
+
countryPlaceholder?: string;
|
|
33
|
+
showFlag?: boolean;
|
|
34
|
+
showSelectedLabel?: boolean;
|
|
35
|
+
showSelectedDial?: boolean;
|
|
36
|
+
showDialInList?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Controls how the emitted value is shaped.
|
|
39
|
+
*
|
|
40
|
+
* Default mirrors legacy autoUnmask=true + emitE164=true → "e164".
|
|
41
|
+
*/
|
|
42
|
+
valueMode?: PhoneValueMode;
|
|
43
|
+
/**
|
|
44
|
+
* When true, the national mask keeps placeholder characters
|
|
45
|
+
* for not-yet-filled positions. When false, trailing mask
|
|
46
|
+
* fragments are omitted.
|
|
47
|
+
*/
|
|
48
|
+
keepCharPositions?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Style hooks for the internal country selector.
|
|
51
|
+
*/
|
|
52
|
+
countrySelectClassName?: string;
|
|
53
|
+
countryTriggerClassName?: string;
|
|
54
|
+
countryValueClassName?: string;
|
|
55
|
+
countryContentClassName?: string;
|
|
56
|
+
countryItemClassName?: string;
|
|
57
|
+
}
|
|
58
|
+
type TextUiProps = Omit<ShadcnTextVariantProps, "type" | "inputMode" | "leadingControl" | "value" | "onValue">;
|
|
59
|
+
/**
|
|
60
|
+
* Full props for the phone variant as seen by the form runtime.
|
|
61
|
+
*
|
|
62
|
+
* - Keeps the same `value`/`onValue` contract as other variants.
|
|
63
|
+
* - Inherits visual/behavioural text props (size, density, className, etc.).
|
|
64
|
+
* - Adds phone-specific configuration (countries, valueMode, etc.).
|
|
65
|
+
*/
|
|
66
|
+
export type ShadcnPhoneVariantProps = TextUiProps & PhoneSpecificProps & Pick<BaseProps, "value" | "onValue">;
|
|
67
|
+
export declare const ShadcnPhoneVariant: React.ForwardRefExoticComponent<TextUiProps & PhoneSpecificProps & Pick<BaseProps, "value" | "onValue"> & React.RefAttributes<HTMLInputElement>>;
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=phone.d.ts.map
|