@nuxt/ui 3.0.0-alpha.8 → 3.0.0-alpha.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/.nuxt/ui/button.ts +1 -1
  2. package/.nuxt/ui/card.ts +1 -1
  3. package/.nuxt/ui/carousel.ts +2 -2
  4. package/.nuxt/ui/container.ts +1 -1
  5. package/.nuxt/ui/index.ts +2 -0
  6. package/.nuxt/ui/input-menu.ts +3 -3
  7. package/.nuxt/ui/input-number.ts +204 -0
  8. package/.nuxt/ui/input.ts +2 -2
  9. package/.nuxt/ui/navigation-menu.ts +1 -1
  10. package/.nuxt/ui/pin-input.ts +145 -0
  11. package/.nuxt/ui/select-menu.ts +8 -13
  12. package/.nuxt/ui/select.ts +2 -2
  13. package/.nuxt/ui/table.ts +1 -0
  14. package/.nuxt/ui/tabs.ts +1 -1
  15. package/.nuxt/ui/textarea.ts +2 -2
  16. package/.nuxt/ui/toaster.ts +1 -1
  17. package/.nuxt/ui/tooltip.ts +1 -1
  18. package/README.md +52 -12
  19. package/cli/commands/{init.mjs → make/component.mjs} +4 -4
  20. package/cli/commands/make/index.mjs +14 -0
  21. package/cli/commands/make/locale.mjs +64 -0
  22. package/cli/index.mjs +2 -2
  23. package/cli/templates.mjs +46 -1
  24. package/cli/utils.mjs +14 -0
  25. package/dist/chunks/component-meta.cjs +7320 -3335
  26. package/dist/chunks/component-meta.mjs +7320 -3335
  27. package/dist/client/devtools/200.html +1 -1
  28. package/dist/client/devtools/404.html +1 -1
  29. package/dist/client/devtools/_nuxt/{hKiujHsR.js → BDC8ywlR.js} +1 -1
  30. package/dist/client/devtools/_nuxt/{DM3_wAgz.js → BT004Uxp.js} +22 -31
  31. package/dist/client/devtools/_nuxt/{Bj9hdafK.js → C1H2Soz3.js} +1 -1
  32. package/dist/client/devtools/_nuxt/builds/latest.json +1 -1
  33. package/dist/client/devtools/_nuxt/builds/meta/f98c13ea-d751-4b37-8ce3-94e99708745f.json +1 -0
  34. package/dist/client/devtools/_nuxt/entry.Bx6WJjrx.css +1 -0
  35. package/dist/client/devtools/_nuxt/error-404.Cq4qshcf.css +1 -0
  36. package/dist/client/devtools/_nuxt/error-500.ax1aM34m.css +1 -0
  37. package/dist/client/devtools/index.html +1 -1
  38. package/dist/module.cjs +13 -12
  39. package/dist/module.json +1 -1
  40. package/dist/module.mjs +13 -12
  41. package/dist/runtime/components/Alert.vue +4 -1
  42. package/dist/runtime/components/App.vue +11 -5
  43. package/dist/runtime/components/Breadcrumb.vue +8 -3
  44. package/dist/runtime/components/Carousel.vue +11 -7
  45. package/dist/runtime/components/CommandPalette.vue +5 -3
  46. package/dist/runtime/components/ContextMenuContent.vue +2 -0
  47. package/dist/runtime/components/DropdownMenuContent.vue +2 -0
  48. package/dist/runtime/components/Form.vue +18 -20
  49. package/dist/runtime/components/FormField.vue +7 -3
  50. package/dist/runtime/components/InputMenu.vue +97 -21
  51. package/dist/runtime/components/InputNumber.vue +192 -0
  52. package/dist/runtime/components/Link.vue +19 -5
  53. package/dist/runtime/components/Modal.vue +12 -3
  54. package/dist/runtime/components/NavigationMenu.vue +4 -2
  55. package/dist/runtime/components/Pagination.vue +12 -5
  56. package/dist/runtime/components/PinInput.vue +96 -0
  57. package/dist/runtime/components/Popover.vue +17 -1
  58. package/dist/runtime/components/Select.vue +1 -1
  59. package/dist/runtime/components/SelectMenu.vue +106 -30
  60. package/dist/runtime/components/Slideover.vue +12 -3
  61. package/dist/runtime/components/Table.vue +11 -1
  62. package/dist/runtime/components/Textarea.vue +1 -1
  63. package/dist/runtime/components/Toast.vue +4 -1
  64. package/dist/runtime/components/Toaster.vue +22 -14
  65. package/dist/runtime/composables/defineLocale.d.ts +9 -0
  66. package/dist/runtime/composables/defineLocale.js +4 -0
  67. package/dist/runtime/composables/useFormField.d.ts +4 -1
  68. package/dist/runtime/composables/useFormField.js +1 -1
  69. package/dist/runtime/composables/useLocale.d.ts +4 -0
  70. package/dist/runtime/composables/useLocale.js +10 -0
  71. package/dist/runtime/index.css +1 -1
  72. package/dist/runtime/locale/ar.d.ts +2 -0
  73. package/dist/runtime/locale/ar.js +47 -0
  74. package/dist/runtime/locale/cs.d.ts +2 -0
  75. package/dist/runtime/locale/cs.js +46 -0
  76. package/dist/runtime/locale/de.d.ts +2 -0
  77. package/dist/runtime/locale/de.js +46 -0
  78. package/dist/runtime/locale/en.d.ts +2 -0
  79. package/dist/runtime/locale/en.js +46 -0
  80. package/dist/runtime/locale/es.d.ts +2 -0
  81. package/dist/runtime/locale/es.js +46 -0
  82. package/dist/runtime/locale/fa_ir.d.ts +2 -0
  83. package/dist/runtime/locale/fa_ir.js +47 -0
  84. package/dist/runtime/locale/fr.d.ts +2 -0
  85. package/dist/runtime/locale/fr.js +46 -0
  86. package/dist/runtime/locale/index.d.ts +12 -0
  87. package/dist/runtime/locale/index.js +12 -0
  88. package/dist/runtime/locale/it.d.ts +2 -0
  89. package/dist/runtime/locale/it.js +46 -0
  90. package/dist/runtime/locale/pl.d.ts +2 -0
  91. package/dist/runtime/locale/pl.js +46 -0
  92. package/dist/runtime/locale/ru.d.ts +2 -0
  93. package/dist/runtime/locale/ru.js +46 -0
  94. package/dist/runtime/locale/zh_hans.d.ts +2 -0
  95. package/dist/runtime/locale/zh_hans.js +46 -0
  96. package/dist/runtime/locale/zh_hant.d.ts +2 -0
  97. package/dist/runtime/locale/zh_hant.js +46 -0
  98. package/dist/runtime/types/form.d.ts +7 -2
  99. package/dist/runtime/types/index.d.ts +3 -0
  100. package/dist/runtime/types/index.js +3 -0
  101. package/dist/runtime/types/locale.d.ts +48 -0
  102. package/dist/runtime/types/locale.js +0 -0
  103. package/dist/runtime/utils/form.d.ts +5 -9
  104. package/dist/runtime/utils/form.js +115 -50
  105. package/dist/runtime/utils/link.d.ts +1 -1
  106. package/dist/runtime/utils/locale.d.ts +15 -0
  107. package/dist/runtime/utils/locale.js +25 -0
  108. package/dist/shared/{ui.BU7wzH0D.cjs → ui.BPnAe4QS.cjs} +194 -36
  109. package/dist/shared/{ui.BufKhDiD.mjs → ui.d52SSCwA.mjs} +194 -36
  110. package/dist/unplugin.cjs +1 -1
  111. package/dist/unplugin.d.cts +5 -3
  112. package/dist/unplugin.d.mts +5 -3
  113. package/dist/unplugin.d.ts +5 -3
  114. package/dist/unplugin.mjs +1 -1
  115. package/dist/vite.cjs +1 -1
  116. package/dist/vite.mjs +1 -1
  117. package/package.json +33 -26
  118. package/dist/client/devtools/_nuxt/builds/meta/e6b425f7-b919-4014-915b-0ea07c316790.json +0 -1
  119. package/dist/client/devtools/_nuxt/entry.DaJP-ZMB.css +0 -24
  120. package/dist/client/devtools/_nuxt/error-404.B0Nmv3fV.css +0 -1
  121. package/dist/client/devtools/_nuxt/error-500.C8fgTxVz.css +0 -1
@@ -0,0 +1,46 @@
1
+ import { defineLocale } from "../composables/defineLocale.js";
2
+ export default defineLocale({
3
+ name: "Polski",
4
+ code: "pl",
5
+ messages: {
6
+ inputMenu: {
7
+ noMatch: "Brak pasuj\u0105cych danych",
8
+ noData: "Brak danych",
9
+ create: 'Utw\xF3rz "{label}"'
10
+ },
11
+ inputNumber: {
12
+ increment: "Zwi\u0119ksz",
13
+ decrement: "Zmniejsz"
14
+ },
15
+ commandPalette: {
16
+ noMatch: "Brak pasuj\u0105cych danych",
17
+ noData: "Brak danych",
18
+ close: "Zamknij"
19
+ },
20
+ selectMenu: {
21
+ noMatch: "Brak pasuj\u0105cych danych",
22
+ noData: "Brak danych",
23
+ create: 'Utw\xF3rz "{label}"'
24
+ },
25
+ toast: {
26
+ close: "Zamknij"
27
+ },
28
+ carousel: {
29
+ prev: "Poprzedni",
30
+ next: "Nast\u0119pny",
31
+ goto: "Id\u017A do {slide}"
32
+ },
33
+ modal: {
34
+ close: "Zamknij"
35
+ },
36
+ slideover: {
37
+ close: "Zamknij"
38
+ },
39
+ alert: {
40
+ close: "Zamknij"
41
+ },
42
+ table: {
43
+ noData: "Brak danych"
44
+ }
45
+ }
46
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../types").Locale;
2
+ export default _default;
@@ -0,0 +1,46 @@
1
+ import { defineLocale } from "../composables/defineLocale.js";
2
+ export default defineLocale({
3
+ name: "\u0420\u0443\u0441\u0441\u043A\u0438\u0439",
4
+ code: "ru",
5
+ messages: {
6
+ inputMenu: {
7
+ noMatch: "\u0421\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E",
8
+ noData: "\u041D\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0445",
9
+ create: '\u0421\u043E\u0437\u0434\u0430\u0442\u044C "{label}"'
10
+ },
11
+ inputNumber: {
12
+ increment: "\u0423\u0432\u0435\u043B\u0438\u0447\u0438\u0442\u044C",
13
+ decrement: "\u0423\u043C\u0435\u043D\u044C\u0448\u0438\u0442\u044C"
14
+ },
15
+ commandPalette: {
16
+ noMatch: "\u0421\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E",
17
+ noData: "\u041D\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0445",
18
+ close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C"
19
+ },
20
+ selectMenu: {
21
+ noMatch: "\u0421\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E",
22
+ noData: "\u041D\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0445",
23
+ create: '\u0421\u043E\u0437\u0434\u0430\u0442\u044C "{label}"'
24
+ },
25
+ toast: {
26
+ close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C"
27
+ },
28
+ carousel: {
29
+ prev: "\u041D\u0430\u0437\u0430\u0434",
30
+ next: "\u0414\u0430\u043B\u0435\u0435",
31
+ goto: "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A {slide}"
32
+ },
33
+ modal: {
34
+ close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C"
35
+ },
36
+ slideover: {
37
+ close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C"
38
+ },
39
+ alert: {
40
+ close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C"
41
+ },
42
+ table: {
43
+ noData: "\u041D\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0445"
44
+ }
45
+ }
46
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../types").Locale;
2
+ export default _default;
@@ -0,0 +1,46 @@
1
+ import { defineLocale } from "../composables/defineLocale.js";
2
+ export default defineLocale({
3
+ name: "\u7B80\u4F53\u4E2D\u6587",
4
+ code: "zh-Hans",
5
+ messages: {
6
+ inputMenu: {
7
+ noMatch: "\u6CA1\u6709\u5339\u914D\u7684\u6570\u636E",
8
+ noData: "\u6CA1\u6709\u6570\u636E",
9
+ create: '\u521B\u5EFA "{label}"'
10
+ },
11
+ inputNumber: {
12
+ increment: "\u589E\u52A0",
13
+ decrement: "\u51CF\u5C11"
14
+ },
15
+ commandPalette: {
16
+ noMatch: "\u6CA1\u6709\u5339\u914D\u7684\u6570\u636E",
17
+ noData: "\u6CA1\u6709\u6570\u636E",
18
+ close: "\u5173\u95ED"
19
+ },
20
+ selectMenu: {
21
+ noMatch: "\u6CA1\u6709\u5339\u914D\u7684\u6570\u636E",
22
+ noData: "\u6CA1\u6709\u6570\u636E",
23
+ create: '\u521B\u5EFA "{label}"'
24
+ },
25
+ toast: {
26
+ close: "\u5173\u95ED"
27
+ },
28
+ carousel: {
29
+ prev: "\u4E0A\u4E00\u9875",
30
+ next: "\u4E0B\u4E00\u9875",
31
+ goto: "\u8DF3\u8F6C\u5230\u7B2C {slide} \u9875"
32
+ },
33
+ modal: {
34
+ close: "\u5173\u95ED"
35
+ },
36
+ slideover: {
37
+ close: "\u5173\u95ED"
38
+ },
39
+ alert: {
40
+ close: "\u5173\u95ED"
41
+ },
42
+ table: {
43
+ noData: "\u6CA1\u6709\u6570\u636E"
44
+ }
45
+ }
46
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../types").Locale;
2
+ export default _default;
@@ -0,0 +1,46 @@
1
+ import { defineLocale } from "../composables/defineLocale.js";
2
+ export default defineLocale({
3
+ name: "\u7E41\u4F53\u4E2D\u6587",
4
+ code: "zh-Hant",
5
+ messages: {
6
+ inputMenu: {
7
+ noMatch: "\u6C92\u6709\u5339\u914D\u7684\u8CC7\u6599",
8
+ noData: "\u6C92\u6709\u8CC7\u6599",
9
+ create: '\u5275\u5EFA "{label}"'
10
+ },
11
+ inputNumber: {
12
+ increment: "\u589E\u52A0",
13
+ decrement: "\u51CF\u5C11"
14
+ },
15
+ commandPalette: {
16
+ noMatch: "\u6C92\u6709\u5339\u914D\u7684\u8CC7\u6599",
17
+ noData: "\u6C92\u6709\u8CC7\u6599",
18
+ close: "\u95DC\u9589"
19
+ },
20
+ selectMenu: {
21
+ noMatch: "\u6C92\u6709\u5339\u914D\u7684\u8CC7\u6599",
22
+ noData: "\u6C92\u6709\u8CC7\u6599",
23
+ create: '\u5275\u5EFA "{label}"'
24
+ },
25
+ toast: {
26
+ close: "\u95DC\u9589"
27
+ },
28
+ carousel: {
29
+ prev: "\u4E0A\u4E00\u9801",
30
+ next: "\u4E0B\u4E00\u9801",
31
+ goto: "\u8DF3\u8F49\u5230\u7B2C {slide} \u9801"
32
+ },
33
+ modal: {
34
+ close: "\u95DC\u9589"
35
+ },
36
+ slideover: {
37
+ close: "\u95DC\u9589"
38
+ },
39
+ alert: {
40
+ close: "\u95DC\u9589"
41
+ },
42
+ table: {
43
+ noData: "\u6C92\u6709\u8CC7\u6599"
44
+ }
45
+ }
46
+ });
@@ -1,4 +1,4 @@
1
- import type { StandardSchema } from '@standard-schema/spec';
1
+ import type { v1 } from '@standard-schema/spec';
2
2
  import type { ComputedRef, Ref } from 'vue';
3
3
  import type { ZodSchema } from 'zod';
4
4
  import type { Schema as JoiSchema } from 'joi';
@@ -19,7 +19,7 @@ export interface Form<T> {
19
19
  submit(): Promise<void>;
20
20
  disabled: ComputedRef<boolean>;
21
21
  }
22
- export type FormSchema<T extends Record<string, any>> = ZodSchema | YupObjectSchema<T> | ValibotSchema | ValibotSchemaAsync | ValibotSafeParser<any, any> | ValibotSafeParserAsync<any, any> | JoiSchema<T> | SuperstructSchema<any, any> | StandardSchema;
22
+ export type FormSchema<T extends Record<string, any>> = ZodSchema | YupObjectSchema<T> | ValibotSchema | ValibotSchemaAsync | ValibotSafeParser<any, any> | ValibotSafeParserAsync<any, any> | JoiSchema<T> | SuperstructSchema<any, any> | v1.StandardSchema;
23
23
  export type FormInputEvents = 'input' | 'blur' | 'change';
24
24
  export interface FormError<P extends string = string> {
25
25
  name: P;
@@ -61,6 +61,11 @@ export interface FormFieldInjectedOptions<T> {
61
61
  error?: string | boolean;
62
62
  eagerValidation?: boolean;
63
63
  validateOnInputDelay?: number;
64
+ errorPattern?: RegExp;
65
+ }
66
+ export interface ValidateReturnSchema<T> {
67
+ result: T;
68
+ errors: FormError[] | null;
64
69
  }
65
70
  export declare class FormValidationException extends Error {
66
71
  formId: string | number;
@@ -20,11 +20,13 @@ export * from '../components/Form.vue';
20
20
  export * from '../components/FormField.vue';
21
21
  export * from '../components/Input.vue';
22
22
  export * from '../components/InputMenu.vue';
23
+ export * from '../components/InputNumber.vue';
23
24
  export * from '../components/Kbd.vue';
24
25
  export * from '../components/Link.vue';
25
26
  export * from '../components/Modal.vue';
26
27
  export * from '../components/NavigationMenu.vue';
27
28
  export * from '../components/Pagination.vue';
29
+ export * from '../components/PinInput.vue';
28
30
  export * from '../components/Popover.vue';
29
31
  export * from '../components/Progress.vue';
30
32
  export * from '../components/RadioGroup.vue';
@@ -42,3 +44,4 @@ export * from '../components/Toast.vue';
42
44
  export * from '../components/Toaster.vue';
43
45
  export * from '../components/Tooltip.vue';
44
46
  export * from './form';
47
+ export * from './locale';
@@ -20,11 +20,13 @@ export * from "../components/Form.vue";
20
20
  export * from "../components/FormField.vue";
21
21
  export * from "../components/Input.vue";
22
22
  export * from "../components/InputMenu.vue";
23
+ export * from "../components/InputNumber.vue";
23
24
  export * from "../components/Kbd.vue";
24
25
  export * from "../components/Link.vue";
25
26
  export * from "../components/Modal.vue";
26
27
  export * from "../components/NavigationMenu.vue";
27
28
  export * from "../components/Pagination.vue";
29
+ export * from "../components/PinInput.vue";
28
30
  export * from "../components/Popover.vue";
29
31
  export * from "../components/Progress.vue";
30
32
  export * from "../components/RadioGroup.vue";
@@ -42,3 +44,4 @@ export * from "../components/Toast.vue";
42
44
  export * from "../components/Toaster.vue";
43
45
  export * from "../components/Tooltip.vue";
44
46
  export * from "./form.js";
47
+ export * from "./locale.js";
@@ -0,0 +1,48 @@
1
+ export type Messages = {
2
+ inputMenu: {
3
+ noMatch: string;
4
+ noData: string;
5
+ create: string;
6
+ };
7
+ inputNumber: {
8
+ increment: string;
9
+ decrement: string;
10
+ };
11
+ commandPalette: {
12
+ noMatch: string;
13
+ noData: string;
14
+ close: string;
15
+ };
16
+ selectMenu: {
17
+ noMatch: string;
18
+ noData: string;
19
+ create: string;
20
+ };
21
+ toast: {
22
+ close: string;
23
+ };
24
+ carousel: {
25
+ prev: string;
26
+ next: string;
27
+ goto: string;
28
+ };
29
+ modal: {
30
+ close: string;
31
+ };
32
+ slideover: {
33
+ close: string;
34
+ };
35
+ alert: {
36
+ close: string;
37
+ };
38
+ table: {
39
+ noData: string;
40
+ };
41
+ };
42
+ export type Direction = 'ltr' | 'rtl';
43
+ export type Locale = {
44
+ name: string;
45
+ code: string;
46
+ dir: Direction;
47
+ messages: Messages;
48
+ };
File without changes
@@ -1,21 +1,17 @@
1
- import type { StandardSchema } from '@standard-schema/spec';
1
+ import type { v1 } from '@standard-schema/spec';
2
2
  import type { ZodSchema } from 'zod';
3
3
  import type { ValidationError as JoiError, Schema as JoiSchema } from 'joi';
4
4
  import type { ObjectSchema as YupObjectSchema, ValidationError as YupError } from 'yup';
5
5
  import type { GenericSchema as ValibotSchema, GenericSchemaAsync as ValibotSchemaAsync, SafeParser as ValibotSafeParser, SafeParserAsync as ValibotSafeParserAsync } from 'valibot';
6
6
  import type { Struct } from 'superstruct';
7
- import type { FormError } from '../types/form';
7
+ import type { FormSchema, ValidateReturnSchema } from '../types/form';
8
8
  export declare function isYupSchema(schema: any): schema is YupObjectSchema<any>;
9
9
  export declare function isYupError(error: any): error is YupError;
10
- export declare function getYupErrors(state: any, schema: YupObjectSchema<any>): Promise<FormError[]>;
11
10
  export declare function isSuperStructSchema(schema: any): schema is Struct<any, any>;
12
11
  export declare function isZodSchema(schema: any): schema is ZodSchema;
13
- export declare function getZodErrors(state: any, schema: ZodSchema): Promise<FormError[]>;
14
12
  export declare function isJoiSchema(schema: any): schema is JoiSchema;
15
13
  export declare function isJoiError(error: any): error is JoiError;
16
- export declare function getJoiErrors(state: any, schema: JoiSchema): Promise<FormError[]>;
17
14
  export declare function isValibotSchema(schema: any): schema is ValibotSchema | ValibotSchemaAsync | ValibotSafeParser<any, any> | ValibotSafeParserAsync<any, any>;
18
- export declare function getValibotErrors(state: any, schema: ValibotSchema | ValibotSchemaAsync | ValibotSafeParser<any, any> | ValibotSafeParserAsync<any, any>): Promise<FormError[]>;
19
- export declare function isStandardSchema(schema: any): schema is StandardSchema;
20
- export declare function getStandardErrors(state: any, schema: StandardSchema): Promise<FormError[]>;
21
- export declare function getSuperStructErrors(state: any, schema: Struct<any, any>): Promise<FormError[]>;
15
+ export declare function isStandardSchema(schema: any): schema is v1.StandardSchema;
16
+ export declare function validateStandarSchema(state: any, schema: v1.StandardSchema): Promise<ValidateReturnSchema<typeof state>>;
17
+ export declare function parseSchema<T extends object>(state: T, schema: FormSchema<T>): Promise<ValidateReturnSchema<typeof state>>;
@@ -4,87 +4,152 @@ export function isYupSchema(schema) {
4
4
  export function isYupError(error) {
5
5
  return error.inner !== void 0;
6
6
  }
7
- export async function getYupErrors(state, schema) {
7
+ export function isSuperStructSchema(schema) {
8
+ return "schema" in schema && typeof schema.coercer === "function" && typeof schema.validator === "function" && typeof schema.refiner === "function";
9
+ }
10
+ export function isZodSchema(schema) {
11
+ return schema.parse !== void 0;
12
+ }
13
+ export function isJoiSchema(schema) {
14
+ return schema.validateAsync !== void 0 && schema.id !== void 0;
15
+ }
16
+ export function isJoiError(error) {
17
+ return error.isJoi === true;
18
+ }
19
+ export function isValibotSchema(schema) {
20
+ return "_run" in schema || typeof schema === "function" && "schema" in schema;
21
+ }
22
+ export function isStandardSchema(schema) {
23
+ return "~standard" in schema;
24
+ }
25
+ export async function validateStandarSchema(state, schema) {
26
+ const result = await schema["~standard"].validate({
27
+ value: state
28
+ });
29
+ if (result.issues) {
30
+ return {
31
+ errors: result.issues?.map((issue) => ({
32
+ name: issue.path?.map((item) => typeof item === "object" ? item.key : item).join(".") || "",
33
+ message: issue.message
34
+ })) || [],
35
+ result: null
36
+ };
37
+ }
38
+ return {
39
+ errors: null,
40
+ result: result.value
41
+ };
42
+ }
43
+ async function validateYupSchema(state, schema) {
8
44
  try {
9
- await schema.validate(state, { abortEarly: false });
10
- return [];
45
+ const result = schema.validateSync(state, { abortEarly: false });
46
+ return {
47
+ errors: null,
48
+ result
49
+ };
11
50
  } catch (error) {
12
51
  if (isYupError(error)) {
13
- return error.inner.map((issue) => ({
52
+ const errors = error.inner.map((issue) => ({
14
53
  name: issue.path ?? "",
15
54
  message: issue.message
16
55
  }));
56
+ return {
57
+ errors,
58
+ result: null
59
+ };
17
60
  } else {
18
61
  throw error;
19
62
  }
20
63
  }
21
64
  }
22
- export function isSuperStructSchema(schema) {
23
- return "schema" in schema && typeof schema.coercer === "function" && typeof schema.validator === "function" && typeof schema.refiner === "function";
24
- }
25
- export function isZodSchema(schema) {
26
- return schema.parse !== void 0;
65
+ async function validateSuperstructSchema(state, schema) {
66
+ const [err, result] = schema.validate(state);
67
+ if (err) {
68
+ const errors = err.failures().map((error) => ({
69
+ message: error.message,
70
+ name: error.path.join(".")
71
+ }));
72
+ return {
73
+ errors,
74
+ result: null
75
+ };
76
+ }
77
+ return {
78
+ errors: null,
79
+ result
80
+ };
27
81
  }
28
- export async function getZodErrors(state, schema) {
82
+ async function validateZodSchema(state, schema) {
29
83
  const result = await schema.safeParseAsync(state);
30
84
  if (result.success === false) {
31
- return result.error.issues.map((issue) => ({
85
+ const errors = result.error.issues.map((issue) => ({
32
86
  name: issue.path.join("."),
33
87
  message: issue.message
34
88
  }));
89
+ return {
90
+ errors,
91
+ result: null
92
+ };
35
93
  }
36
- return [];
94
+ return {
95
+ result: result.data,
96
+ errors: null
97
+ };
37
98
  }
38
- export function isJoiSchema(schema) {
39
- return schema.validateAsync !== void 0 && schema.id !== void 0;
40
- }
41
- export function isJoiError(error) {
42
- return error.isJoi === true;
43
- }
44
- export async function getJoiErrors(state, schema) {
99
+ async function validateJoiSchema(state, schema) {
45
100
  try {
46
- await schema.validateAsync(state, { abortEarly: false });
47
- return [];
101
+ const result = await schema.validateAsync(state, { abortEarly: false });
102
+ return {
103
+ errors: null,
104
+ result
105
+ };
48
106
  } catch (error) {
49
107
  if (isJoiError(error)) {
50
- return error.details.map((detail) => ({
51
- name: detail.path.join("."),
52
- message: detail.message
108
+ const errors = error.details.map((issue) => ({
109
+ name: issue.path.join("."),
110
+ message: issue.message
53
111
  }));
112
+ return {
113
+ errors,
114
+ result: null
115
+ };
54
116
  } else {
55
117
  throw error;
56
118
  }
57
119
  }
58
120
  }
59
- export function isValibotSchema(schema) {
60
- return "_run" in schema || typeof schema === "function" && "schema" in schema;
61
- }
62
- export async function getValibotErrors(state, schema) {
121
+ async function validateValibotSchema(state, schema) {
63
122
  const result = await ("_run" in schema ? schema._run({ typed: false, value: state }, {}) : schema(state));
64
- return result.issues?.map((issue) => ({
65
- // We know that the key for a form schema is always a string or a number
123
+ if (!result.issues || result.issues.length === 0) {
124
+ const output = "output" in result ? result.output : "value" in result ? result.value : null;
125
+ return {
126
+ errors: null,
127
+ result: output
128
+ };
129
+ }
130
+ const errors = result.issues.map((issue) => ({
66
131
  name: issue.path?.map((item) => item.key).join(".") || "",
67
132
  message: issue.message
68
- })) || [];
69
- }
70
- export function isStandardSchema(schema) {
71
- return "~standard" in schema;
72
- }
73
- export async function getStandardErrors(state, schema) {
74
- const result = await schema["~validate"]({ value: state });
75
- return result.issues?.map((issue) => ({
76
- name: issue.path?.map((item) => typeof item === "object" ? item.key : item).join(".") || "",
77
- message: issue.message
78
- })) || [];
133
+ }));
134
+ return {
135
+ errors,
136
+ result: null
137
+ };
79
138
  }
80
- export async function getSuperStructErrors(state, schema) {
81
- const [err] = schema.validate(state);
82
- if (err) {
83
- const errors = err.failures();
84
- return errors.map((error) => ({
85
- message: error.message,
86
- name: error.path.join(".")
87
- }));
139
+ export function parseSchema(state, schema) {
140
+ if (isZodSchema(schema)) {
141
+ return validateZodSchema(state, schema);
142
+ } else if (isJoiSchema(schema)) {
143
+ return validateJoiSchema(state, schema);
144
+ } else if (isValibotSchema(schema)) {
145
+ return validateValibotSchema(state, schema);
146
+ } else if (isYupSchema(schema)) {
147
+ return validateYupSchema(state, schema);
148
+ } else if (isSuperStructSchema(schema)) {
149
+ return validateSuperstructSchema(state, schema);
150
+ } else if (isStandardSchema(schema)) {
151
+ return validateStandarSchema(state, schema);
152
+ } else {
153
+ throw new Error("Form validation failed: Unsupported form schema");
88
154
  }
89
- return [];
90
155
  }
@@ -6,13 +6,13 @@ export declare function pickLinkProps(link: LinkProps & {
6
6
  replace: any;
7
7
  type: any;
8
8
  title: any;
9
+ exact: any;
9
10
  active: any;
10
11
  activeClass: any;
11
12
  ariaCurrentValue: any;
12
13
  ariaLabel: any;
13
14
  as: any;
14
15
  disabled: any;
15
- exact: any;
16
16
  exactActiveClass: any;
17
17
  exactHash: any;
18
18
  exactQuery: any;
@@ -0,0 +1,15 @@
1
+ import type { Ref } from 'vue';
2
+ import type { Locale, Direction } from '../types/locale';
3
+ import type { MaybeRef } from '@vueuse/core';
4
+ export type TranslatorOption = Record<string, string | number>;
5
+ export type Translator = (path: string, option?: TranslatorOption) => string;
6
+ export type LocaleContext = {
7
+ locale: Ref<Locale>;
8
+ lang: Ref<string>;
9
+ dir: Ref<Direction>;
10
+ code: Ref<string>;
11
+ t: Translator;
12
+ };
13
+ export declare function buildTranslator(locale: MaybeRef<Locale>): Translator;
14
+ export declare function translate(path: string, option: undefined | TranslatorOption, locale: Locale): string;
15
+ export declare function buildLocaleContext(locale: MaybeRef<Locale>): LocaleContext;
@@ -0,0 +1,25 @@
1
+ import { computed, isRef, ref, unref } from "vue";
2
+ import { get } from "./index.js";
3
+ export function buildTranslator(locale) {
4
+ return (path, option) => translate(path, option, unref(locale));
5
+ }
6
+ export function translate(path, option, locale) {
7
+ const prop = get(locale, `messages.${path}`, path);
8
+ return prop.replace(
9
+ /\{(\w+)\}/g,
10
+ (_, key) => `${option?.[key] ?? `{${key}}`}`
11
+ );
12
+ }
13
+ export function buildLocaleContext(locale) {
14
+ const lang = computed(() => unref(locale).name);
15
+ const code = computed(() => unref(locale).code);
16
+ const dir = computed(() => unref(locale).dir);
17
+ const localeRef = isRef(locale) ? locale : ref(locale);
18
+ return {
19
+ lang,
20
+ code,
21
+ dir,
22
+ locale: localeRef,
23
+ t: buildTranslator(locale)
24
+ };
25
+ }