@wssto2/vue-core 0.4.14 → 0.4.16

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 (98) hide show
  1. package/dist/{ActionRow.vue_vue_type_script_setup_true_lang-LlfIPWsJ.js → ActionRow.vue_vue_type_script_setup_true_lang-DOjn7fqy.js} +1 -1
  2. package/dist/{Activity-BdSvn0GP.js → Activity-CVO3sJwy.js} +6 -6
  3. package/dist/{Changes-BQO--N9F.js → Changes-Bzvl3cEx.js} +5 -5
  4. package/dist/{CollectionPage.vue_vue_type_script_setup_true_lang-DkpFEHUw.js → CollectionPage.vue_vue_type_script_setup_true_lang-CD5zZ29o.js} +2 -2
  5. package/dist/DateField.vue_vue_type_script_setup_true_lang-BufoFwVQ.js +278 -0
  6. package/dist/{DeadLetters-OmeiADEi.js → DeadLetters-DmwUtgf9.js} +4 -4
  7. package/dist/FormErrors.vue_vue_type_script_setup_true_lang-DWcVKZM3.js +285 -0
  8. package/dist/{FormGroup.vue_vue_type_script_setup_true_lang-DG2zdG_a.js → FormGroup.vue_vue_type_script_setup_true_lang-BokxZ7LU.js} +1 -1
  9. package/dist/{FormView.vue_vue_type_script_setup_true_lang-cr0xNDXP.js → FormView.vue_vue_type_script_setup_true_lang-Dz5TZt92.js} +2 -2
  10. package/dist/{General-CBwFLiKQ.js → General-CUEjJBD4.js} +10 -10
  11. package/dist/{NewRolePage-CblUW2gA.js → NewRolePage-Cyn-oV6r.js} +3 -3
  12. package/dist/NumberField.vue_vue_type_script_setup_true_lang-a8kN3A7k.js +150 -0
  13. package/dist/{ProfilePage-BOoDDbmB.js → ProfilePage-I74SQBFO.js} +41 -41
  14. package/dist/{RoleEditor.vue_vue_type_script_setup_true_lang-BCE5yrwy.js → RoleEditor.vue_vue_type_script_setup_true_lang-Ce6wjptT.js} +44 -44
  15. package/dist/{RolePage-xDsFL_eC.js → RolePage-DWQP3qQl.js} +8 -8
  16. package/dist/{RolesPage-C39wsF6X.js → RolesPage-BeEsHIQ2.js} +5 -5
  17. package/dist/SegmentedField.vue_vue_type_script_setup_true_lang-BMBkEmxr.js +81 -0
  18. package/dist/SelectField.vue_vue_type_script_setup_true_lang-C1Flb1hA.js +465 -0
  19. package/dist/{SessionList.vue_vue_type_script_setup_true_lang-D4k5QeWS.js → SessionList.vue_vue_type_script_setup_true_lang-DoUo68xE.js} +2 -2
  20. package/dist/{Sessions-m_i4aTfw.js → Sessions-D8IXcb5M.js} +4 -4
  21. package/dist/{SettingsPage-ktKvQQnE.js → SettingsPage-DRQP2nrH.js} +9 -9
  22. package/dist/{SignIn-CkoEixY4.js → SignIn-CAZkovhb.js} +6 -6
  23. package/dist/{SignInPage-DVcpFz3G.js → SignInPage-D-49oLY3.js} +3 -3
  24. package/dist/{SignIns-BnVAtncZ.js → SignIns-BtNfgMLc.js} +3 -3
  25. package/dist/SwitchField.vue_vue_type_script_setup_true_lang-0weBvsJf.js +87 -0
  26. package/dist/TextField.vue_vue_type_script_setup_true_lang-D3-R5XXG.js +292 -0
  27. package/dist/TextareaField.vue_vue_type_script_setup_true_lang-4wC3c0BM.js +91 -0
  28. package/dist/TimeField.vue_vue_type_script_setup_true_lang-pAdLPYXA.js +187 -0
  29. package/dist/{UserRecord-Cg69_mbU.js → UserRecord-BSbNuRFi.js} +10 -10
  30. package/dist/{UsersList-BFmBDGs7.js → UsersList-DPHxcaDm.js} +8 -8
  31. package/dist/access/index.js +1 -1
  32. package/dist/app/application.d.ts +8 -2
  33. package/dist/app/index.js +93 -93
  34. package/dist/collection/index.js +1 -1
  35. package/dist/control-B_Nwtmag.js +334 -0
  36. package/dist/{describeError-CvGmajU0.js → describeError-B-NMa--w.js} +12 -7
  37. package/dist/fieldMessages-DV6sESpn.js +25 -0
  38. package/dist/form/CardSelectField.vue.d.ts +2 -2
  39. package/dist/form/ChoiceChips.vue.d.ts +2 -2
  40. package/dist/form/ComboField.vue.d.ts +2 -2
  41. package/dist/form/DateField.vue.d.ts +10 -2
  42. package/dist/form/DateTimeField.vue.d.ts +10 -2
  43. package/dist/form/Field.vue.d.ts +2 -1
  44. package/dist/form/FileField.vue.d.ts +10 -2
  45. package/dist/form/FormErrors.vue.d.ts +1 -1
  46. package/dist/form/FormRow.vue.d.ts +3 -0
  47. package/dist/form/I18nField.vue.d.ts +10 -2
  48. package/dist/form/MoneyField.vue.d.ts +10 -2
  49. package/dist/form/MonthYearField.vue.d.ts +10 -2
  50. package/dist/form/MultiSelectField.vue.d.ts +2 -2
  51. package/dist/form/NumberField.vue.d.ts +25 -2
  52. package/dist/form/PhotoField.vue.d.ts +10 -2
  53. package/dist/form/SegmentedField.vue.d.ts +2 -2
  54. package/dist/form/SelectField.vue.d.ts +7 -8
  55. package/dist/form/SwitchField.vue.d.ts +3 -2
  56. package/dist/form/TextField.vue.d.ts +10 -2
  57. package/dist/form/TextareaField.vue.d.ts +10 -2
  58. package/dist/form/TimeField.vue.d.ts +10 -2
  59. package/dist/form/field.d.ts +12 -0
  60. package/dist/form/index.d.ts +3 -1
  61. package/dist/form/index.js +1167 -956
  62. package/dist/form/useForm.d.ts +2 -2
  63. package/dist/form/useHiddenFieldErrors.d.ts +23 -0
  64. package/dist/form/useSaveChrome.d.ts +8 -3
  65. package/dist/i18n/describeError.d.ts +8 -0
  66. package/dist/i18n/index.d.ts +3 -2
  67. package/dist/i18n/index.js +32 -28
  68. package/dist/identity/fieldMessages.d.ts +1 -1
  69. package/dist/identity/index.js +1 -1
  70. package/dist/{index-RNF5-9uf.js → index-Bq96L43f.js} +15 -15
  71. package/dist/{index-B416VXmR.js → index-CWeNiBX6.js} +2 -2
  72. package/dist/{index-KcCoCfr-.js → index-yKIOaisE.js} +10 -10
  73. package/dist/index.d.ts +1 -1
  74. package/dist/index.js +1 -1
  75. package/dist/notifications/index.js +1 -1
  76. package/dist/phone/PhoneField.vue.d.ts +1 -0
  77. package/dist/phone/index.js +66 -65
  78. package/dist/resource/index.js +1 -1
  79. package/dist/{routeResource-BwEFXzIX.js → routeResource-DlTsGTg_.js} +1 -1
  80. package/dist/state/index.js +1 -1
  81. package/dist/{status-OZUHZpWl.js → status-DzmySsWw.js} +1 -1
  82. package/dist/{useCommand-BkONMn3X.js → useCommand-B-N6HJOz.js} +1 -1
  83. package/dist/{useLoad-DuEsLECT.js → useLoad-M7V-AVwR.js} +1 -1
  84. package/dist/{useResourceForm-D1hIpwW5.js → useResourceForm-CP2lCwmD.js} +1 -1
  85. package/dist/useSaveChrome-7huA3FzR.js +26 -0
  86. package/package.json +1 -1
  87. package/dist/DateField.vue_vue_type_script_setup_true_lang-GVasv8ao.js +0 -255
  88. package/dist/FormErrors.vue_vue_type_script_setup_true_lang-BQb7wLT0.js +0 -276
  89. package/dist/NumberField.vue_vue_type_script_setup_true_lang-C7N5nq0P.js +0 -113
  90. package/dist/SegmentedField.vue_vue_type_script_setup_true_lang-BMqWlpsL.js +0 -58
  91. package/dist/SelectField.vue_vue_type_script_setup_true_lang-BJoAkBo2.js +0 -437
  92. package/dist/SwitchField.vue_vue_type_script_setup_true_lang-CM8yp9JQ.js +0 -64
  93. package/dist/TextField.vue_vue_type_script_setup_true_lang-B9dwVASU.js +0 -269
  94. package/dist/TextareaField.vue_vue_type_script_setup_true_lang-CqAWfABZ.js +0 -68
  95. package/dist/TimeField.vue_vue_type_script_setup_true_lang-DWfAUlnz.js +0 -164
  96. package/dist/control-7EP4tjYy.js +0 -313
  97. package/dist/fieldMessages-D_dpSe19.js +0 -25
  98. package/dist/useSaveChrome-DuWm0Czf.js +0 -25
@@ -80,8 +80,8 @@ export interface FormOptions<Values extends object, Output = Values> {
80
80
  readonly defaults: Values | (() => Values);
81
81
  /** The app's schema (anything with Zod's `safeParse`). Without one the server is the only validator. */
82
82
  readonly validator?: FormValidator<Output>;
83
- /** Server messages are often codes: turn one into a sentence (`t(message)`). Default: as sent. */
84
- readonly translate?: (message: string, field: string) => string;
83
+ /** A field message into a sentence, for a form that says it differently from the rest of the app. Default: the application's (`createApplication({ describeFieldError })`), else as sent. */
84
+ readonly describeFieldError?: (message: string, field: string) => string;
85
85
  /** The draft's name for a field the server names, given the whole dotted path (`tax_id` is `taxId`, `lines.0.unit_price` is `lines.0.unitPrice`). Default: the same name. */
86
86
  readonly serverField?: (field: string) => string;
87
87
  /** The sentence for a failure; return undefined for the library's default of that kind. */
@@ -0,0 +1,23 @@
1
+ import { type ComputedRef, type MaybeRefOrGetter } from "vue";
2
+ import type { Form } from "./useForm";
3
+ export interface HiddenFieldError {
4
+ /** The path of the field (`lines.0.quantity`). */
5
+ readonly field: string;
6
+ /** Its first message. */
7
+ readonly message: string;
8
+ }
9
+ /**
10
+ * The form's errors whose field is not on screen: the draft lacks that field (a server field), or it sits in a part that is not
11
+ * shown (a collapsed section). `FormErrors` lists them; use this for another way to say it, such as a toast when a save fails.
12
+ *
13
+ * const hidden = useHiddenFieldErrors({ form });
14
+ * // after a refused save: toast.error(hidden.value.map((each) => `${label(each.field)}: ${each.message}`).join("; "))
15
+ *
16
+ * A field counts as shown while an element carries `data-field-key="<name>"` (`form.bind()` sets it) or the name of something that
17
+ * contains it. The answer follows the errors and is worked out after the next render, so read it after `await nextTick()`.
18
+ */
19
+ export declare function useHiddenFieldErrors(options: {
20
+ readonly form: Pick<Form<object>, "errors">;
21
+ /** Where to look for shown fields; by default the whole document. */
22
+ readonly root?: MaybeRefOrGetter<ParentNode | null | undefined>;
23
+ }): ComputedRef<readonly HiddenFieldError[]>;
@@ -11,16 +11,21 @@ export interface SaveChromeOptions {
11
11
  readonly ready?: MaybeRefOrGetter<boolean>;
12
12
  /** The action id (for tests and shortcuts). Default `save`. */
13
13
  readonly id?: string;
14
+ /** Save is disabled while the form has no changes (nothing to save). Default true; a page that creates a record passes false so an untouched form can still be submitted and say what is missing. */
15
+ readonly disabledWhileClean?: MaybeRefOrGetter<boolean>;
14
16
  readonly save: () => void;
15
- /** Cancel: put the saved values back. */
16
- readonly cancel: () => void;
17
+ /** Cancel: put the saved values back. Without it there is no Cancel (a section edited in place, where leaving is guarded anyway). */
18
+ readonly cancel?: () => void;
17
19
  }
18
20
  /**
19
21
  * The page chrome of a page that edits directly (a long form, a settings section): Save as the page's primary action with
20
- * a spinner while it works, "Unsaved changes" beside it, Cancel (while there are edits) in place of Back, and the leave guard.
22
+ * a spinner while it works (disabled while there is nothing to save), "Unsaved changes" beside it, Cancel (while there are edits, if you
23
+ * give one) in place of Back, and the leave guard.
21
24
  * Inside an `EditorPage` this is done for you; use it for a page of your own. Call it from a component rendered inside the
22
25
  * page shell (or where the app's page chrome is installed).
23
26
  *
24
27
  * useSaveChrome({ form, label: () => t("save"), allowed: () => can("tickets:update"), save: submit, cancel: () => form.reset() });
28
+ * useSaveChrome({ form, allowed: () => can("dealer:update"), save: submit }); // a section edited in place: no Cancel
29
+ * useSaveChrome({ form, disabledWhileClean: false, save: submit }); // a create page: Save is always there
25
30
  */
26
31
  export declare function useSaveChrome(options: SaveChromeOptions): void;
@@ -19,6 +19,14 @@ interface Translator {
19
19
  */
20
20
  export type AppErrorDescriber = (error: unknown) => string | undefined;
21
21
  export declare const appErrorDescriberKey: InjectionKey<AppErrorDescriber>;
22
+ /**
23
+ * The application's one sentence for a field message the server sent (`createApplication({ describeFieldError })`): often a
24
+ * code or a translation key. Asked by every form that has no `describeFieldError` of its own; `(message, field) => sentence`.
25
+ */
26
+ export type AppFieldErrorDescriber = (message: string, field: string) => string;
27
+ export declare const appFieldErrorDescriberKey: InjectionKey<AppFieldErrorDescriber>;
28
+ /** The application's field-message describer, when one was installed and this runs in a setup. */
29
+ export declare function useAppFieldErrorDescriber(): AppFieldErrorDescriber | null;
22
30
  /** The application's describer, when one was installed and this runs in a setup. */
23
31
  export declare function useAppErrorDescriber(): AppErrorDescriber | null;
24
32
  /** `describeError` over a translator; exported for the composable and tests. */
@@ -379,11 +379,12 @@ export declare const coreMessages: {
379
379
  readonly hr: CoreMessages;
380
380
  readonly bs: CoreMessages;
381
381
  readonly sl: CoreMessages;
382
+ readonly "sr-Latn": CoreMessages;
382
383
  };
383
384
  export type CoreLocale = keyof typeof coreMessages;
384
385
  export { localeMessages } from "./messages";
385
386
  export type { LocaleMessagesOptions, MessageLoader, MessageNamespace, Messages } from "./messages";
386
387
  export { createMessageRuntime } from "./runtime";
387
388
  export type { MessageFailure, MessageRuntime, MessageRuntimeOptions, MessageTarget } from "./runtime";
388
- export { appErrorDescriberKey, useDescribeError } from "./describeError";
389
- export type { AppErrorDescriber, DescribeError, DescribeErrorOptions } from "./describeError";
389
+ export { appErrorDescriberKey, appFieldErrorDescriberKey, useDescribeError } from "./describeError";
390
+ export type { AppErrorDescriber, AppFieldErrorDescriber, DescribeError, DescribeErrorOptions } from "./describeError";