@chelone/vue 0.9.0 → 0.11.0

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 (118) hide show
  1. package/dist/admin/admin-shell.vue_vue_type_script_setup_true_lang.js +15 -2
  2. package/dist/admin/resource-registry.d.ts +6 -2
  3. package/dist/admin/resource-registry.js +0 -18
  4. package/dist/admin/resource.vue.d.ts +6 -2
  5. package/dist/choices/choices-context.d.ts +9 -9
  6. package/dist/choices/use-reference-input.js +2 -2
  7. package/dist/components/admin/auth/access-denied.vue.d.ts +2 -2
  8. package/dist/components/admin/auth/access-denied.vue_vue_type_script_setup_true_lang.js +2 -2
  9. package/dist/components/admin/auth/auth-error.vue.d.ts +2 -2
  10. package/dist/components/admin/auth/auth-error.vue_vue_type_script_setup_true_lang.js +3 -3
  11. package/dist/components/admin/auth/authentication-error.vue.d.ts +2 -2
  12. package/dist/components/admin/auth/authentication-error.vue_vue_type_script_setup_true_lang.js +2 -2
  13. package/dist/components/admin/auth/login-form.vue_vue_type_script_setup_true_lang.js +2 -2
  14. package/dist/components/admin/auth/login-with-email.vue.d.ts +1 -1
  15. package/dist/components/admin/auth/login-with-email.vue_vue_type_script_setup_true_lang.js +2 -2
  16. package/dist/components/admin/auth/logout.vue_vue_type_script_setup_true_lang.js +1 -1
  17. package/dist/components/admin/auth/permission-matrix.vue_vue_type_script_setup_true_lang.js +1 -1
  18. package/dist/components/admin/buttons/bulk-delete-button.vue.d.ts +2 -2
  19. package/dist/components/admin/buttons/bulk-delete-button.vue_vue_type_script_setup_true_lang.js +3 -3
  20. package/dist/components/admin/buttons/bulk-export-button.vue_vue_type_script_setup_true_lang.js +1 -1
  21. package/dist/components/admin/buttons/bulk-update-button.vue_vue_type_script_setup_true_lang.js +2 -2
  22. package/dist/components/admin/buttons/cancel-button.vue_vue_type_script_setup_true_lang.js +1 -1
  23. package/dist/components/admin/buttons/clone-button.vue_vue_type_script_setup_true_lang.js +1 -1
  24. package/dist/components/admin/buttons/columns-button.vue_vue_type_script_setup_true_lang.js +1 -1
  25. package/dist/components/admin/buttons/create-button.vue_vue_type_script_setup_true_lang.js +1 -1
  26. package/dist/components/admin/buttons/delete-button.vue.d.ts +2 -2
  27. package/dist/components/admin/buttons/delete-button.vue_vue_type_script_setup_true_lang.js +3 -3
  28. package/dist/components/admin/buttons/edit-button.vue_vue_type_script_setup_true_lang.js +1 -1
  29. package/dist/components/admin/buttons/export-button.vue_vue_type_script_setup_true_lang.js +1 -1
  30. package/dist/components/admin/buttons/fields-selector.vue_vue_type_script_setup_true_lang.js +5 -5
  31. package/dist/components/admin/buttons/filter-button.vue_vue_type_script_setup_true_lang.js +2 -2
  32. package/dist/components/admin/buttons/list-button.vue_vue_type_script_setup_true_lang.js +1 -1
  33. package/dist/components/admin/buttons/locales-menu.vue_vue_type_script_setup_true_lang.js +1 -1
  34. package/dist/components/admin/buttons/refresh-button.vue_vue_type_script_setup_true_lang.js +1 -1
  35. package/dist/components/admin/buttons/refresh-icon-button.vue_vue_type_script_setup_true_lang.js +1 -1
  36. package/dist/components/admin/buttons/save-button.vue_vue_type_script_setup_true_lang.js +2 -2
  37. package/dist/components/admin/buttons/select-all-button.vue_vue_type_script_setup_true_lang.js +1 -1
  38. package/dist/components/admin/buttons/show-button.vue_vue_type_script_setup_true_lang.js +1 -1
  39. package/dist/components/admin/buttons/sidebar-toggle-button.vue_vue_type_script_setup_true_lang.js +1 -1
  40. package/dist/components/admin/buttons/skip-navigation-button.vue.d.ts +1 -1
  41. package/dist/components/admin/buttons/skip-navigation-button.vue_vue_type_script_setup_true_lang.js +1 -1
  42. package/dist/components/admin/buttons/sort-button.vue_vue_type_script_setup_true_lang.js +2 -2
  43. package/dist/components/admin/buttons/update-button.vue.d.ts +2 -2
  44. package/dist/components/admin/buttons/update-button.vue_vue_type_script_setup_true_lang.js +3 -3
  45. package/dist/components/admin/common/application-updated-notification.vue_vue_type_script_setup_true_lang.js +2 -2
  46. package/dist/components/admin/csv-import/csv-import.vue.d.ts +24 -14
  47. package/dist/components/admin/csv-import/csv-import.vue_vue_type_script_setup_true_lang.js +18 -18
  48. package/dist/components/admin/feedback/confirm.vue.d.ts +2 -2
  49. package/dist/components/admin/feedback/confirm.vue_vue_type_script_setup_true_lang.js +2 -2
  50. package/dist/components/admin/feedback/error.vue_vue_type_script_setup_true_lang.js +3 -3
  51. package/dist/components/admin/feedback/loading-indicator.vue_vue_type_script_setup_true_lang.js +2 -2
  52. package/dist/components/admin/feedback/loading.vue.d.ts +2 -2
  53. package/dist/components/admin/feedback/loading.vue_vue_type_script_setup_true_lang.js +2 -2
  54. package/dist/components/admin/feedback/not-found.vue_vue_type_script_setup_true_lang.js +3 -3
  55. package/dist/components/admin/feedback/notification.vue_vue_type_script_setup_true_lang.js +1 -1
  56. package/dist/components/admin/feedback/offline.vue_vue_type_script_setup_true_lang.js +1 -1
  57. package/dist/components/admin/fields/boolean-field.vue_vue_type_script_setup_true_lang.js +1 -1
  58. package/dist/components/admin/form/translatable-inputs-tab.vue_vue_type_script_setup_true_lang.js +1 -1
  59. package/dist/components/admin/inputs/array-input-row.vue_vue_type_script_setup_true_lang.js +3 -3
  60. package/dist/components/admin/inputs/array-input.vue_vue_type_script_setup_true_lang.js +3 -3
  61. package/dist/components/admin/inputs/autocomplete-array-input.vue_vue_type_script_setup_true_lang.js +3 -3
  62. package/dist/components/admin/inputs/autocomplete-input.vue_vue_type_script_setup_true_lang.js +2 -2
  63. package/dist/components/admin/inputs/datagrid-input.vue_vue_type_script_setup_true_lang.js +2 -2
  64. package/dist/components/admin/inputs/file-input-preview.vue_vue_type_script_setup_true_lang.js +2 -2
  65. package/dist/components/admin/inputs/file-input.vue_vue_type_script_setup_true_lang.js +2 -2
  66. package/dist/components/admin/inputs/image-input.vue_vue_type_script_setup_true_lang.js +2 -2
  67. package/dist/components/admin/inputs/in-place-editor-form.vue_vue_type_script_setup_true_lang.js +4 -4
  68. package/dist/components/admin/inputs/in-place-editor.vue_vue_type_script_setup_true_lang.js +1 -1
  69. package/dist/components/admin/inputs/nullable-boolean-input.vue_vue_type_script_setup_true_lang.js +3 -3
  70. package/dist/components/admin/inputs/password-input.vue_vue_type_script_setup_true_lang.js +1 -1
  71. package/dist/components/admin/inputs/resettable-text-input.vue_vue_type_script_setup_true_lang.js +1 -1
  72. package/dist/components/admin/inputs/search-input.vue_vue_type_script_setup_true_lang.js +2 -2
  73. package/dist/components/admin/inputs/select-array-input.vue_vue_type_script_setup_true_lang.js +2 -2
  74. package/dist/components/admin/inputs/text-array-input.vue_vue_type_script_setup_true_lang.js +1 -1
  75. package/dist/components/admin/layout/command-menu-logout.vue_vue_type_script_setup_true_lang.js +2 -2
  76. package/dist/components/admin/layout/dashboard-menu-item.vue.d.ts +1 -1
  77. package/dist/components/admin/layout/dashboard-menu-item.vue_vue_type_script_setup_true_lang.js +1 -1
  78. package/dist/components/admin/layout/data-provider-devtools.vue_vue_type_script_setup_true_lang.js +61 -27
  79. package/dist/components/admin/layout/icons.d.ts +2 -0
  80. package/dist/components/admin/layout/icons.js +3 -1
  81. package/dist/components/admin/layout/theme-mode-toggle.vue_vue_type_script_setup_true_lang.js +1 -1
  82. package/dist/components/admin/layout/user-menu-inner.vue_vue_type_script_setup_true_lang.js +1 -1
  83. package/dist/components/admin/list/approval-queue-row.vue_vue_type_script_setup_true_lang.js +1 -1
  84. package/dist/components/admin/list/bulk-actions-toolbar.vue_vue_type_script_setup_true_lang.js +2 -2
  85. package/dist/components/admin/list/bulk-edit-drawer.vue_vue_type_script_setup_true_lang.js +4 -4
  86. package/dist/components/admin/list/calendar-agenda-view.vue_vue_type_script_setup_true_lang.js +1 -1
  87. package/dist/components/admin/list/calendar-header.vue_vue_type_script_setup_true_lang.js +5 -5
  88. package/dist/components/admin/list/calendar-list.vue_vue_type_script_setup_true_lang.js +2 -2
  89. package/dist/components/admin/list/count.vue_vue_type_script_setup_true_lang.js +1 -1
  90. package/dist/components/admin/list/filter-form.vue_vue_type_script_setup_true_lang.js +1 -1
  91. package/dist/components/admin/list/filter-list-item.vue_vue_type_script_setup_true_lang.js +1 -1
  92. package/dist/components/admin/list/filter-live-search.vue_vue_type_script_setup_true_lang.js +1 -1
  93. package/dist/components/admin/list/list-no-results.vue_vue_type_script_setup_true_lang.js +2 -2
  94. package/dist/components/admin/list/list-pagination.vue_vue_type_script_setup_true_lang.js +5 -5
  95. package/dist/components/admin/list/prev-next-buttons.vue_vue_type_script_setup_true_lang.js +5 -5
  96. package/dist/components/admin/list/saved-queries-list.vue_vue_type_script_setup_true_lang.js +5 -5
  97. package/dist/components/admin/list/tree-list-node.vue_vue_type_script_setup_true_lang.js +1 -1
  98. package/dist/components/admin/realtime/menu-live.vue.d.ts +3 -1
  99. package/dist/components/admin/realtime/menu-live.vue_vue_type_script_setup_true_lang.js +42 -12
  100. package/dist/components/admin/supabase/forgot-password-form.vue_vue_type_script_setup_true_lang.js +1 -1
  101. package/dist/components/admin/supabase/set-password-form.vue_vue_type_script_setup_true_lang.js +3 -3
  102. package/dist/components/admin/supabase/supabase-login-page.vue_vue_type_script_setup_true_lang.js +1 -1
  103. package/dist/components/admin/view/create.vue_vue_type_script_setup_true_lang.js +1 -1
  104. package/dist/components/admin/view/infinite-list.vue_vue_type_script_setup_true_lang.js +1 -1
  105. package/dist/components/admin/view/list.vue_vue_type_script_setup_true_lang.js +1 -1
  106. package/dist/components/admin/view/translatable-fields-tab.vue_vue_type_script_setup_true_lang.js +1 -1
  107. package/dist/components/admin/widgets/job-monitor-row.vue_vue_type_script_setup_true_lang.js +1 -1
  108. package/dist/components/inspector/inspector.vue_vue_type_script_setup_true_lang.js +1 -1
  109. package/dist/controllers/reference-field-options.d.ts +18 -0
  110. package/dist/controllers/reference-field-test-harness.d.ts +3 -2
  111. package/dist/controllers/use-infinite-list-controller.d.ts +3 -3
  112. package/dist/controllers/use-list-controller.d.ts +4 -4
  113. package/dist/controllers/use-reference-many-field-controller.d.ts +8 -15
  114. package/dist/controllers/use-reference-one-field-controller.d.ts +8 -17
  115. package/dist/list/list-context.d.ts +10 -4
  116. package/dist/list/use-list.d.ts +3 -3
  117. package/dist/store/use-saved-queries.d.ts +5 -5
  118. package/package.json +5 -5
@@ -2,6 +2,7 @@ import layout_default from "../components/admin/layout/layout.js";
2
2
  import theme_provider_default from "../components/admin/layout/theme-provider.js";
3
3
  import login_page_default from "../components/admin/auth/login-page.js";
4
4
  import spinner_default from "../components/ui/spinner.js";
5
+ import { useLocale } from "../i18n/use-locale.js";
5
6
  import { useBasename } from "../router/adapter.js";
6
7
  import { useWatchDataErrors } from "../auth/permissions-hooks.js";
7
8
  import { useAuthGate } from "./auth-gate.js";
@@ -9,8 +10,8 @@ import { NO_LAYOUT_META } from "./custom-routes.js";
9
10
  import navigate_to_first_resource_default from "./navigate-to-first-resource.js";
10
11
  import { useResourceDefinitions } from "./resource-registry.js";
11
12
  import shell_error_boundary_default from "./shell-error-boundary.js";
12
- import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createVNode, defineComponent, guardReactiveProps, normalizeProps, openBlock, renderSlot, resolveComponent, unref, useSlots, withCtx } from "vue";
13
- import { joinBasename } from "@chelone/core";
13
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createVNode, defineComponent, guardReactiveProps, normalizeProps, openBlock, renderSlot, resolveComponent, unref, useSlots, watchEffect, withCtx } from "vue";
14
+ import { getLocaleDirection, joinBasename } from "@chelone/core";
14
15
  import { START_LOCATION, useRoute, useRouter } from "vue-router";
15
16
  // src/admin/admin-shell.vue?vue&type=script&setup=true&lang.ts
16
17
  var _hoisted_1 = { class: "flex min-h-screen flex-col justify-center items-center" };
@@ -53,6 +54,18 @@ var admin_shell_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
53
54
  return router.currentRoute.value !== START_LOCATION && (path === indexPath || path === `${indexPath}/`);
54
55
  });
55
56
  useWatchDataErrors();
57
+ const locale = useLocale();
58
+ const direction = computed(() => getLocaleDirection(locale.value));
59
+ watchEffect((onCleanup) => {
60
+ if (typeof document === "undefined") return;
61
+ const root = document.documentElement;
62
+ const previous = root.getAttribute("dir");
63
+ root.setAttribute("dir", direction.value);
64
+ onCleanup(() => {
65
+ if (previous === null) root.removeAttribute("dir");
66
+ else root.setAttribute("dir", previous);
67
+ });
68
+ });
56
69
  return (_ctx, _cache) => {
57
70
  const _component_router_view = resolveComponent("router-view");
58
71
  return showReady() ? (openBlock(), createBlock(theme_provider_default, { key: 0 }, {
@@ -16,6 +16,7 @@
16
16
  * (name + `has*` flags) — a Vue-adapter-local shape, matching how React's
17
17
  * `<Resource>` also carries the view components as props.
18
18
  */
19
+ import type { RegisteredResourceName } from "@chelone/core";
19
20
  import { type Component, type ComputedRef, type InjectionKey, type MaybeRefOrGetter } from "vue";
20
21
  import type { RecordRepresentation } from "../index.js";
21
22
  /**
@@ -25,8 +26,11 @@ import type { RecordRepresentation } from "../index.js";
25
26
  * the menu / breadcrumb surface (later phases).
26
27
  */
27
28
  export interface ResourceDefinition {
28
- /** The resource name — the registry key and the route base (`/{name}`). */
29
- name: string;
29
+ /**
30
+ * The resource name — the registry key and the route base (`/{name}`). A
31
+ * registered resource once `Register` is augmented, else any string.
32
+ */
33
+ name: RegisteredResourceName;
30
34
  /** The list view. Presence adds the `/{name}` route. */
31
35
  list?: Component;
32
36
  /** The create view. Presence adds the `/{name}/create` route. */
@@ -2,24 +2,6 @@ import { useResourceContext } from "../resource-context.js";
2
2
  import { computed, inject, shallowReactive, toValue } from "vue";
3
3
  // src/admin/resource-registry.ts
4
4
  /**
5
- * The runtime resource registry for `@chelone/vue` — the Vue twin of the React
6
- * adapter's registry seam (`packages/react/src/resource/registry-hooks.tsx`).
7
- * Where React wraps core's vanilla `createResourceRegistry` in a
8
- * `useSyncExternalStore`, the Vue adapter models the registry as a *reactive
9
- * map* (D3): `<Resource>` children `register` themselves into it on `setup` and
10
- * `unregister` on scope disposal, and `<Admin>`'s `watchEffect` rebuilds the
11
- * vue-router route table whenever the map's key set changes. Vue's own
12
- * reactivity graph replaces the external-store subscription — no bridge needed
13
- * because the registry IS reactive.
14
- *
15
- * The stored `ResourceDefinition` deliberately holds the ACTUAL view components
16
- * (`list`/`edit`/`create`/`show`) rather than boolean `has*` route flags: the
17
- * Vue router needs the component to mount a route, so the registry doubles as
18
- * the source of route records. This differs from core's `ResourceDefinition`
19
- * (name + `has*` flags) — a Vue-adapter-local shape, matching how React's
20
- * `<Resource>` also carries the view components as props.
21
- */
22
- /**
23
5
  * The provide/inject key for the reactive registry. `<Admin>` provides it in
24
6
  * `setup`; `<Resource>` reads it via {@link useResourceRegistry} to
25
7
  * self-register. A typed `InjectionKey` keeps both sites cast-free.
@@ -1,8 +1,12 @@
1
1
  import { type ResourceDefinition } from "./resource-registry.js";
2
+ import type { RegisteredResourceName } from "@chelone/core";
2
3
  /** Props for {@link Resource}. */
3
4
  export interface ResourceProps {
4
- /** The resource name — the registry key and the route base (`/{name}`). */
5
- name: string;
5
+ /**
6
+ * The resource name — the registry key and the route base (`/{name}`). A
7
+ * registered resource once `Register` is augmented, else any string.
8
+ */
9
+ name: RegisteredResourceName;
6
10
  /** The list view (adds the `/{name}` route). */
7
11
  list?: ResourceDefinition["list"];
8
12
  /** The create view (adds the `/{name}/create` route). */
@@ -21,18 +21,18 @@ import { type InjectionKey } from "vue";
21
21
  * data fields through getters (reactive); an inline context is static. The
22
22
  * list-mutation actions are inert on an inline context.
23
23
  */
24
- export interface ChoicesContextValue {
25
- allChoices: ChoiceRecord[];
26
- availableChoices: ChoiceRecord[];
27
- selectedChoices: ChoiceRecord[];
24
+ export interface ChoicesContextValue<TChoice extends ChoiceRecord = ChoiceRecord> {
25
+ allChoices: TChoice[];
26
+ availableChoices: TChoice[];
27
+ selectedChoices: TChoice[];
28
28
  total: number | undefined;
29
29
  isPending: boolean;
30
30
  isFetching: boolean;
31
31
  error: Error | null;
32
32
  page: number;
33
33
  perPage: number;
34
- sort: SortPayload;
35
- filter: FilterPayload;
34
+ sort: SortPayload<TChoice>;
35
+ filter: FilterPayload<TChoice>;
36
36
  hasNextPage: boolean | undefined;
37
37
  hasPreviousPage: boolean | undefined;
38
38
  /** The referenced resource name (inline: `undefined`). */
@@ -43,8 +43,8 @@ export interface ChoicesContextValue {
43
43
  isFromReference: boolean;
44
44
  setPage(page: number): void;
45
45
  setPerPage(perPage: number): void;
46
- setSort(sort: SortPayload): void;
47
- setFilters(filter: FilterPayload, debounce?: boolean): void;
46
+ setSort(sort: SortPayload<TChoice>): void;
47
+ setFilters(filter: FilterPayload<TChoice>, debounce?: boolean): void;
48
48
  setValue(value: unknown): void;
49
49
  refetch(): void;
50
50
  }
@@ -81,4 +81,4 @@ export interface UseChoicesContextOptions {
81
81
  * {@link provideChoicesContext} value is returned. Throws if neither is present.
82
82
  * Call in `setup`.
83
83
  */
84
- export declare function useChoicesContext(options?: UseChoicesContextOptions): ChoicesContextValue;
84
+ export declare function useChoicesContext<TChoice extends ChoiceRecord = ChoiceRecord>(options?: UseChoicesContextOptions): ChoicesContextValue<TChoice>;
@@ -1,6 +1,6 @@
1
1
  import { useCheloneContext } from "../context.js";
2
2
  import { useMicroStore } from "../store/use-micro-store.js";
3
- import { choiceListsOf, createChoicesController } from "@chelone/core";
3
+ import { choiceListsOf, createChoicesController, eraseChoicesController } from "@chelone/core";
4
4
  // src/choices/use-reference-input.ts
5
5
  /** Structurally the choices-controller context (data services + i18n). */
6
6
  function toChoicesContext(ctx) {
@@ -23,7 +23,7 @@ function toChoicesContext(ctx) {
23
23
  */
24
24
  function useReferenceInput(options) {
25
25
  const ctx = useCheloneContext();
26
- const controller = createChoicesController(toChoicesContext(ctx), options);
26
+ const controller = eraseChoicesController(createChoicesController(toChoicesContext(ctx), options));
27
27
  const state = useMicroStore(controller);
28
28
  return {
29
29
  get allChoices() {
@@ -12,9 +12,9 @@ import type { FunctionalComponent } from "vue";
12
12
  export interface AccessDeniedProps {
13
13
  /** Override the default padlock glyph. */
14
14
  icon?: FunctionalComponent;
15
- /** i18n key for the heading. Defaults to `ra.page.access_denied`. */
15
+ /** i18n key for the heading. Defaults to `chelone.page.access_denied`. */
16
16
  textPrimary?: string;
17
- /** i18n key for the sub-text. Defaults to `ra.message.access_denied`. */
17
+ /** i18n key for the sub-text. Defaults to `chelone.message.access_denied_detail`. */
18
18
  textSecondary?: string;
19
19
  class?: string;
20
20
  }
@@ -10,8 +10,8 @@ var access_denied_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
10
10
  __name: "access-denied",
11
11
  props: {
12
12
  icon: {},
13
- textPrimary: { default: "ra.page.access_denied" },
14
- textSecondary: { default: "ra.message.access_denied" },
13
+ textPrimary: { default: "chelone.page.access_denied" },
14
+ textSecondary: { default: "chelone.message.access_denied_detail" },
15
15
  class: {}
16
16
  },
17
17
  setup(__props) {
@@ -1,8 +1,8 @@
1
1
  /** Props for {@link AuthError}. */
2
2
  export interface AuthErrorProps {
3
- /** i18n key for the heading. Defaults to `ra.page.error`. */
3
+ /** i18n key for the heading. Defaults to `chelone.page.error`. */
4
4
  title?: string;
5
- /** i18n key (or raw message) for the body. Defaults to `ra.message.auth_error`. */
5
+ /** i18n key (or raw message) for the body. Defaults to `chelone.message.auth_error`. */
6
6
  message?: string;
7
7
  class?: string;
8
8
  }
@@ -14,8 +14,8 @@ var _hoisted_2 = { class: "my-5" };
14
14
  var auth_error_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
15
15
  __name: "auth-error",
16
16
  props: {
17
- title: { default: "ra.page.error" },
18
- message: { default: "ra.message.auth_error" },
17
+ title: { default: "chelone.page.error" },
18
+ message: { default: "chelone.message.auth_error" },
19
19
  class: {}
20
20
  },
21
21
  setup(__props) {
@@ -43,7 +43,7 @@ var auth_error_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
43
43
  class: normalizeClass(linkClasses.value),
44
44
  "data-slot": "auth-error-signin"
45
45
  }, {
46
- default: withCtx(() => [createVNode(unref(LockIcon), { class: "size-4" }), createTextVNode(" " + toDisplayString(unref(translate)("ra.auth.sign_in", { _: "Sign in" })), 1)]),
46
+ default: withCtx(() => [createVNode(unref(LockIcon), { class: "size-4" }), createTextVNode(" " + toDisplayString(unref(translate)("chelone.auth.sign_in", { _: "Sign in" })), 1)]),
47
47
  _: 1
48
48
  }, 8, ["to", "class"])
49
49
  ], 2);
@@ -3,9 +3,9 @@ import type { FunctionalComponent } from "vue";
3
3
  export interface AuthenticationErrorProps {
4
4
  /** Override the default warning-triangle glyph. */
5
5
  icon?: FunctionalComponent;
6
- /** i18n key for the heading. Defaults to `ra.page.authentication_error`. */
6
+ /** i18n key for the heading. Defaults to `chelone.page.authentication_error`. */
7
7
  textPrimary?: string;
8
- /** i18n key for the sub-text. Defaults to `ra.message.authentication_error`. */
8
+ /** i18n key for the sub-text. Defaults to `chelone.message.authentication_error_detail`. */
9
9
  textSecondary?: string;
10
10
  class?: string;
11
11
  }
@@ -6,8 +6,8 @@ var authentication_error_vue_vue_type_script_setup_true_lang_default = /*@__PURE
6
6
  __name: "authentication-error",
7
7
  props: {
8
8
  icon: {},
9
- textPrimary: { default: "ra.page.authentication_error" },
10
- textSecondary: { default: "ra.message.authentication_error" },
9
+ textPrimary: { default: "chelone.page.authentication_error" },
10
+ textSecondary: { default: "chelone.message.authentication_error_detail" },
11
11
  class: {}
12
12
  },
13
13
  setup(__props) {
@@ -47,7 +47,7 @@ var login_form_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
47
47
  } : { ...values });
48
48
  } catch (error) {
49
49
  const message = errorMessageOf(error);
50
- notifications?.notify(message ?? "ra.auth.sign_in_error", {
50
+ notifications?.notify(message ?? "chelone.auth.sign_in_error", {
51
51
  type: "error",
52
52
  messageArgs: message === void 0 ? void 0 : { _: message }
53
53
  });
@@ -89,7 +89,7 @@ var login_form_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
89
89
  class: "cursor-pointer",
90
90
  disabled: unref(submitting)
91
91
  }, {
92
- default: withCtx(() => [unref(submitting) ? (openBlock(), createBlock(spinner_default, { key: 0 })) : createCommentVNode("", true), createTextVNode(" " + toDisplayString(unref(translate)("ra.auth.sign_in", { _: "Sign in" })), 1)]),
92
+ default: withCtx(() => [unref(submitting) ? (openBlock(), createBlock(spinner_default, { key: 0 })) : createCommentVNode("", true), createTextVNode(" " + toDisplayString(unref(translate)("chelone.auth.sign_in", { _: "Sign in" })), 1)]),
93
93
  _: 1
94
94
  }, 8, ["disabled"])
95
95
  ], 34);
@@ -18,7 +18,7 @@ export interface LoginWithEmailProps {
18
18
  * `authProvider.login`; ignored when `onSubmit` is set.
19
19
  */
20
20
  redirectTo?: string;
21
- /** Button text. Defaults to the translated `ra.auth.sign_in`. */
21
+ /** Button text. Defaults to the translated `chelone.auth.sign_in`. */
22
22
  submitLabel?: string;
23
23
  /** Extra class names applied to the `<form>` element. */
24
24
  class?: string;
@@ -59,7 +59,7 @@ var login_with_email_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
59
59
  });
60
60
  } catch (error) {
61
61
  const message = errorMessageOf(error);
62
- notifications?.notify(message ?? "ra.auth.sign_in_error", {
62
+ notifications?.notify(message ?? "chelone.auth.sign_in_error", {
63
63
  type: "error",
64
64
  messageArgs: message === void 0 ? void 0 : { _: message }
65
65
  });
@@ -103,7 +103,7 @@ var login_with_email_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
103
103
  default: withCtx(() => [props.loading || unref(submitting) ? (openBlock(), createBlock(spinner_default, { key: 0 })) : (openBlock(), createBlock(unref(LogInIcon), {
104
104
  key: 1,
105
105
  class: "size-4"
106
- })), createTextVNode(" " + toDisplayString(props.submitLabel ?? unref(translate)("ra.auth.sign_in", { _: "Sign in" })), 1)]),
106
+ })), createTextVNode(" " + toDisplayString(props.submitLabel ?? unref(translate)("chelone.auth.sign_in", { _: "Sign in" })), 1)]),
107
107
  _: 1
108
108
  }, 8, ["disabled"])
109
109
  ], 34);
@@ -35,7 +35,7 @@ var logout_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
35
35
  class: normalizeClass(unref(cn)("cursor-pointer", props.class)),
36
36
  onSelect: handleClick
37
37
  }, {
38
- default: withCtx(() => [createVNode(unref(LogOutIcon)), createTextVNode(" " + toDisplayString(unref(translate)("ra.auth.logout", { _: "Log out" })), 1)]),
38
+ default: withCtx(() => [createVNode(unref(LogOutIcon)), createTextVNode(" " + toDisplayString(unref(translate)("chelone.auth.logout", { _: "Log out" })), 1)]),
39
39
  _: 1
40
40
  }, 8, ["class"])) : createCommentVNode("", true);
41
41
  };
@@ -59,7 +59,7 @@ var permission_matrix_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*
59
59
  return text.charAt(0).toUpperCase() + text.slice(1);
60
60
  }
61
61
  function actionLabel(action) {
62
- return translate(`ra.action.${action}`, { _: capitalize(action) });
62
+ return translate(`chelone.action.${action}`, { _: capitalize(action) });
63
63
  }
64
64
  const allLabel = computed(() => translate("chelone.permission_matrix.all", { _: "All" }));
65
65
  const activeRole = computed(() => {
@@ -11,9 +11,9 @@ export interface BulkDeleteButtonProps {
11
11
  * window closes. Default (`"pessimistic"`) is confirm-gated.
12
12
  */
13
13
  mutationMode?: MutationMode;
14
- /** Confirmation-dialog title. Default `"ra.message.bulk_delete_title"`. */
14
+ /** Confirmation-dialog title. Default `"chelone.message.bulk_delete_title"`. */
15
15
  confirmTitle?: string;
16
- /** Confirmation-dialog body copy. Default `"ra.message.bulk_delete_content"`. */
16
+ /** Confirmation-dialog body copy. Default `"chelone.message.bulk_delete_content"`. */
17
17
  confirmContent?: string;
18
18
  /** `"warning"` tints the confirm button destructive. Default `"warning"`. */
19
19
  confirmColor?: "primary" | "warning";
@@ -17,8 +17,8 @@ var bulk_delete_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__
17
17
  resource: {},
18
18
  label: {},
19
19
  mutationMode: {},
20
- confirmTitle: { default: "ra.message.bulk_delete_title" },
21
- confirmContent: { default: "ra.message.bulk_delete_content" },
20
+ confirmTitle: { default: "chelone.message.bulk_delete_title" },
21
+ confirmContent: { default: "chelone.message.bulk_delete_content" },
22
22
  confirmColor: { default: "warning" },
23
23
  class: {}
24
24
  },
@@ -57,7 +57,7 @@ var bulk_delete_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__
57
57
  const refresh = useRefresh();
58
58
  const deleteMany = useDeleteMany(resource);
59
59
  const isPending = computed(() => deleteMany.isPending.value);
60
- const label = computed(() => translate("ra.action.delete", { _: props.label ?? "Delete" }));
60
+ const label = computed(() => translate("chelone.action.delete", { _: props.label ?? "Delete" }));
61
61
  const classes = computed(() => props.class ?? "h-9");
62
62
  const open = ref(false);
63
63
  const selectedCount = computed(() => (list.selectedIds ?? []).length);
@@ -34,7 +34,7 @@ var bulk_export_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__
34
34
  const { dataProvider } = useCheloneContext();
35
35
  const notifications = useCheloneNotifications();
36
36
  const translate = useTranslate();
37
- const label = computed(() => translate("ra.action.export", { _: props.label ?? "Export" }));
37
+ const label = computed(() => translate("chelone.action.export", { _: props.label ?? "Export" }));
38
38
  async function onClick() {
39
39
  const exporter = props.exporter ?? defaultExporter;
40
40
  try {
@@ -49,7 +49,7 @@ var bulk_update_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__
49
49
  const list = useListContext();
50
50
  const updateMany = useUpdateMany(resource);
51
51
  const isPending = computed(() => updateMany.isPending.value);
52
- const label = computed(() => props.label ? translate(props.label, { _: props.label }) : translate("ra.action.update", { _: "Update" }));
52
+ const label = computed(() => props.label ? translate(props.label, { _: props.label }) : translate("chelone.action.update", { _: "Update" }));
53
53
  async function onClick(event) {
54
54
  event.stopPropagation();
55
55
  const ids = list.selectedIds ?? [];
@@ -73,7 +73,7 @@ var bulk_update_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__
73
73
  list.unselectAll();
74
74
  return;
75
75
  }
76
- const message = props.confirmContent ?? translate("ra.message.bulk_update_content", {
76
+ const message = props.confirmContent ?? translate("chelone.message.bulk_update_content", {
77
77
  smart_count: ids.length,
78
78
  _: "Are you sure you want to update these items?"
79
79
  });
@@ -20,7 +20,7 @@ var cancel_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
20
20
  const props = __props;
21
21
  const navigate = useNavigate();
22
22
  const translate = useTranslate();
23
- const label = computed(() => translate("ra.action.cancel", { _: props.label ?? "Cancel" }));
23
+ const label = computed(() => translate("chelone.action.cancel", { _: props.label ?? "Cancel" }));
24
24
  function onClick() {
25
25
  navigate(-1);
26
26
  }
@@ -43,7 +43,7 @@ var clone_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
43
43
  type: "create"
44
44
  })}?source=${encodeURIComponent(JSON.stringify(copy))}`;
45
45
  });
46
- const label = computed(() => props.label ?? translate("ra.action.clone", { _: "Clone" }));
46
+ const label = computed(() => props.label ?? translate("chelone.action.clone", { _: "Clone" }));
47
47
  const classes = computed(() => buttonVariants({
48
48
  variant: "outline",
49
49
  class: props.class
@@ -53,7 +53,7 @@ var columns_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
53
53
  class: normalizeClass(props.class),
54
54
  "data-slot": "columns-button"
55
55
  }, {
56
- default: withCtx(() => [createVNode(unref(ColumnsIcon)), createTextVNode(" " + toDisplayString(unref(translate)("ra.action.select_columns", { _: "Columns" })), 1)]),
56
+ default: withCtx(() => [createVNode(unref(ColumnsIcon)), createTextVNode(" " + toDisplayString(unref(translate)("chelone.action.select_columns", { _: "Columns" })), 1)]),
57
57
  _: 1
58
58
  }, 8, ["disabled", "class"])]),
59
59
  _: 1
@@ -47,7 +47,7 @@ var create_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
47
47
  resource,
48
48
  type: "create"
49
49
  }));
50
- const label = computed(() => translate("ra.action.create", definedParams({
50
+ const label = computed(() => translate("chelone.action.create", definedParams({
51
51
  _: "Create",
52
52
  name: resource ? getResourceLabel(resource, 1) : void 0
53
53
  })));
@@ -18,9 +18,9 @@ export interface DeleteButtonProps<TRecord extends ResourceRecord = LooseRecord>
18
18
  mutationMode?: MutationMode;
19
19
  /** Where to navigate after deleting. Default `"list"`; `false` = stay. */
20
20
  redirect?: DeleteRedirect;
21
- /** Confirmation-dialog title. Default `"ra.message.delete_title"`. */
21
+ /** Confirmation-dialog title. Default `"chelone.message.delete_title"`. */
22
22
  confirmTitle?: string;
23
- /** Confirmation-dialog body copy. Default `"ra.message.delete_content"`. */
23
+ /** Confirmation-dialog body copy. Default `"chelone.message.delete_content"`. */
24
24
  confirmContent?: string;
25
25
  /** `"warning"` tints the confirm button destructive. Default `"warning"`. */
26
26
  confirmColor?: "primary" | "warning";
@@ -25,8 +25,8 @@ var delete_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
25
25
  type: [String, Boolean],
26
26
  default: "list"
27
27
  },
28
- confirmTitle: { default: "ra.message.delete_title" },
29
- confirmContent: { default: "ra.message.delete_content" },
28
+ confirmTitle: { default: "chelone.message.delete_title" },
29
+ confirmContent: { default: "chelone.message.delete_content" },
30
30
  confirmColor: { default: "warning" },
31
31
  variant: { default: "outline" },
32
32
  class: {}
@@ -89,7 +89,7 @@ var delete_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
89
89
  id: record.value?.id
90
90
  });
91
91
  });
92
- const label = computed(() => translate("ra.action.delete", { _: props.label ?? "Delete" }));
92
+ const label = computed(() => translate("chelone.action.delete", { _: props.label ?? "Delete" }));
93
93
  const destructiveClass = "cursor-pointer text-destructive border-destructive hover:bg-destructive/10";
94
94
  const classes = computed(() => props.class ?? destructiveClass);
95
95
  const open = ref(false);
@@ -49,7 +49,7 @@ var edit_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
49
49
  id
50
50
  });
51
51
  });
52
- const label = computed(() => translate("ra.action.edit", definedParams({
52
+ const label = computed(() => translate("chelone.action.edit", definedParams({
53
53
  _: "Edit",
54
54
  name: resource ? getResourceLabel(resource, 1) : void 0
55
55
  })));
@@ -37,7 +37,7 @@ var export_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
37
37
  const { dataProvider } = useCheloneContext();
38
38
  const notifications = useCheloneNotifications();
39
39
  const translate = useTranslate();
40
- const label = computed(() => translate("ra.action.export", { _: props.label ?? "Export" }));
40
+ const label = computed(() => translate("chelone.action.export", { _: props.label ?? "Export" }));
41
41
  const disabled = computed(() => list.total === 0);
42
42
  async function onClick() {
43
43
  const exporter = props.exporter ?? defaultExporter;
@@ -114,7 +114,7 @@ var fields_selector_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
114
114
  createVNode(input_default, {
115
115
  modelValue: query.value,
116
116
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => query.value = $event),
117
- "aria-label": unref(translate)("ra.action.search", { _: "Search" }),
117
+ "aria-label": unref(translate)("chelone.action.search", { _: "Search" }),
118
118
  class: "px-8"
119
119
  }, null, 8, ["modelValue", "aria-label"]),
120
120
  query.value !== "" ? (openBlock(), createBlock(button_default, {
@@ -122,7 +122,7 @@ var fields_selector_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
122
122
  variant: "ghost",
123
123
  size: "icon",
124
124
  class: "absolute right-0 top-1/2 size-7 -translate-y-1/2",
125
- "aria-label": unref(translate)("ra.action.clear_input_value", { _: "Clear value" }),
125
+ "aria-label": unref(translate)("chelone.action.clear_input_value", { _: "Clear value" }),
126
126
  onClick: _cache[1] || (_cache[1] = ($event) => query.value = "")
127
127
  }, {
128
128
  default: withCtx(() => [createVNode(unref(XIcon))]),
@@ -151,7 +151,7 @@ var fields_selector_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
151
151
  size: "icon",
152
152
  class: "size-7",
153
153
  disabled: searching.value || row.index === 0,
154
- "aria-label": unref(translate)("ra.action.move_up", { _: "Move up" }),
154
+ "aria-label": unref(translate)("chelone.action.move_up", { _: "Move up" }),
155
155
  onClick: ($event) => unref(state).move(row.id, -1)
156
156
  }, {
157
157
  default: withCtx(() => [createVNode(unref(ChevronUpIcon))]),
@@ -166,7 +166,7 @@ var fields_selector_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
166
166
  size: "icon",
167
167
  class: "size-7",
168
168
  disabled: searching.value || row.index === rows.value.length - 1,
169
- "aria-label": unref(translate)("ra.action.move_down", { _: "Move down" }),
169
+ "aria-label": unref(translate)("chelone.action.move_down", { _: "Move down" }),
170
170
  onClick: ($event) => unref(state).move(row.id, 1)
171
171
  }, {
172
172
  default: withCtx(() => [createVNode(unref(ChevronDownIcon))]),
@@ -195,7 +195,7 @@ var fields_selector_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
195
195
  size: "sm",
196
196
  onClick: _cache[2] || (_cache[2] = ($event) => unref(state).reset())
197
197
  }, {
198
- default: withCtx(() => [createTextVNode(toDisplayString(unref(translate)("ra.action.reset", { _: "Reset" })), 1)]),
198
+ default: withCtx(() => [createTextVNode(toDisplayString(unref(translate)("chelone.action.reset", { _: "Reset" })), 1)]),
199
199
  _: 1
200
200
  })])
201
201
  ], 64);
@@ -46,8 +46,8 @@ var filter_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
46
46
  const togglable = computed(() => props.filters.filter((e) => !e.alwaysOn));
47
47
  const hasFilterValues = computed(() => Object.keys(list.filter ?? {}).length > 0);
48
48
  const isDisplayed = (source) => list.displayedFilters[source] === true;
49
- const addLabel = computed(() => translate("ra.action.add_filter", { _: "Add filter" }));
50
- const removeAllLabel = computed(() => translate("ra.action.remove_all_filters", { _: "Remove all filters" }));
49
+ const addLabel = computed(() => translate("chelone.action.add_filter", { _: "Add filter" }));
50
+ const removeAllLabel = computed(() => translate("chelone.action.remove_all_filters", { _: "Remove all filters" }));
51
51
  function onToggle(entry) {
52
52
  if (isDisplayed(entry.source)) list.hideFilter(entry.source);
53
53
  else list.showFilter(entry.source, entry.defaultValue === "" ? void 0 : entry.defaultValue);
@@ -34,7 +34,7 @@ var list_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
34
34
  type: "list",
35
35
  resource
36
36
  }));
37
- const label = computed(() => translate("ra.action.list", {
37
+ const label = computed(() => translate("chelone.action.list", {
38
38
  _: "List",
39
39
  name: getResourceLabel(resource, 1)
40
40
  }));
@@ -31,7 +31,7 @@ var locales_menu_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
31
31
  variant: "ghost",
32
32
  size: "icon",
33
33
  class: normalizeClass(unref(cn)("hidden sm:inline-flex", props.class)),
34
- "aria-label": unref(translate)("ra.action.change_locale", { _: "Change locale" }),
34
+ "aria-label": unref(translate)("chelone.action.change_locale", { _: "Change locale" }),
35
35
  "data-slot": "locales-menu-button"
36
36
  }, {
37
37
  default: withCtx(() => [renderSlot(_ctx.$slots, "icon", {}, () => [createTextVNode(toDisplayString(unref(locale).toUpperCase()), 1)])]),
@@ -28,7 +28,7 @@ var refresh_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
28
28
  const refresh = useRefresh();
29
29
  const loading = useLoading();
30
30
  const translate = useTranslate();
31
- const label = computed(() => translate("ra.action.refresh", { _: props.label ?? "Refresh" }));
31
+ const label = computed(() => translate("chelone.action.refresh", { _: props.label ?? "Refresh" }));
32
32
  function onClick() {
33
33
  refresh();
34
34
  }
@@ -4,7 +4,7 @@ import button_default from "../../ui/button.js";
4
4
  import { RotateCwIcon } from "./icons.js";
5
5
  import { computed, createBlock, createVNode, defineComponent, normalizeClass, openBlock, renderSlot, unref, withCtx } from "vue";
6
6
  // src/components/admin/buttons/refresh-icon-button.vue?vue&type=script&setup=true&lang.ts
7
- var defaultLabel = "ra.action.refresh";
7
+ var defaultLabel = "chelone.action.refresh";
8
8
  var refresh_icon_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
9
9
  __name: "refresh-icon-button",
10
10
  props: {
@@ -12,7 +12,7 @@ var _hoisted_1 = {
12
12
  var save_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
13
13
  __name: "save-button",
14
14
  props: {
15
- label: { default: "ra.action.save" },
15
+ label: { default: "chelone.action.save" },
16
16
  alwaysEnable: {
17
17
  type: Boolean,
18
18
  default: false
@@ -44,7 +44,7 @@ var save_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
44
44
  if (props.alwaysEnable) return props.disabled ?? false;
45
45
  return (props.disabled ?? false) || state.value.isValidating || state.value.isSubmitting || !state.value.canSubmit;
46
46
  });
47
- const displayedLabel = computed(() => translate(props.label, { _: props.label === "ra.action.save" ? "Save" : props.label }));
47
+ const displayedLabel = computed(() => translate(props.label, { _: props.label === "chelone.action.save" ? "Save" : props.label }));
48
48
  async function onClick() {
49
49
  if (submit) await submit();
50
50
  else await form.ambient.handleSubmit();
@@ -3,7 +3,7 @@ import { useListContext } from "../../../list/list-context.js";
3
3
  import button_default from "../../ui/button.js";
4
4
  import { computed, createBlock, createCommentVNode, createTextVNode, defineComponent, normalizeClass, openBlock, toDisplayString, withCtx } from "vue";
5
5
  // src/components/admin/buttons/select-all-button.vue?vue&type=script&setup=true&lang.ts
6
- var defaultLabel = "ra.action.select_all";
6
+ var defaultLabel = "chelone.action.select_all";
7
7
  var select_all_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
8
8
  __name: "select-all-button",
9
9
  props: {
@@ -49,7 +49,7 @@ var show_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
49
49
  id
50
50
  });
51
51
  });
52
- const label = computed(() => translate("ra.action.show", definedParams({
52
+ const label = computed(() => translate("chelone.action.show", definedParams({
53
53
  _: "Show",
54
54
  name: resource ? getResourceLabel(resource, 1) : void 0
55
55
  })));