@dskripchenko/laravel-admin 1.19.3 → 1.19.5

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # dskripchenko/laravel-admin
2
2
 
3
- > 🌐 **English** · [Русский](README.ru.md) · [Deutsch](README.de.md) · [中文](README.zh.md)
3
+ > 🌐 **English** · [Русский](docs/ru/README.md) · [Deutsch](docs/de/README.md) · [中文](docs/zh/README.md)
4
4
 
5
5
  A Laravel admin-panel constructor inspired by Orchid, with a Vue 3 SPA frontend.
6
6
 
@@ -128,7 +128,7 @@ Optional extensions, install only what you need:
128
128
 
129
129
  ## Contributing
130
130
 
131
- See [CONTRIBUTING.md](CONTRIBUTING.md). PRs welcome.
131
+ See [CONTRIBUTING.md](.github/CONTRIBUTING.md). PRs welcome.
132
132
 
133
133
  ## License
134
134
 
@@ -26,5 +26,7 @@ export interface AdminClient {
26
26
  patch<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;
27
27
  delete<T = unknown>(url: string, config?: AxiosRequestConfig): Promise<T>;
28
28
  setLocale(locale: string): void;
29
+ /** Снять закреплённый X-Admin-Locale — резолвить локаль будет сервер. */
30
+ clearLocale(): void;
29
31
  }
30
32
  export declare function createAdminClient(opts: ClientOptions): AdminClient;
@@ -1,4 +1,4 @@
1
- import { inject as l, reactive as i, provide as d } from "vue";
1
+ import { reactive as i, provide as d, inject as l } from "vue";
2
2
  const n = /* @__PURE__ */ Symbol("admin.form-state");
3
3
  function F(o = {}, f = {}, u) {
4
4
  const s = i(o), e = i({ ...f }), c = {
@@ -38,4 +38,4 @@ export {
38
38
  y as t,
39
39
  p as u
40
40
  };
41
- //# sourceMappingURL=formState-DC25j4xe.js.map
41
+ //# sourceMappingURL=formState-DeRZBwWH.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formState-DC25j4xe.js","sources":["../resources/ts/components/render/formState.ts"],"sourcesContent":["/**\n * Composable для form-state: предоставляет state + ошибки через provide/inject.\n *\n * Контейнер (Resource form / Settings page) вызывает `provideFormState()`,\n * Field-компоненты в дереве — `useFormState()` для чтения значения и\n * мутации поля.\n *\n * State — reactive proxy; setField мутирует ключ. Errors — отдельный\n * reactive Map (field-name → string[] messages).\n */\n\nimport { inject, provide, reactive, type InjectionKey } from 'vue'\n\nexport interface FormStateContext {\n state: Record<string, unknown>\n errors: Record<string, string[]>\n /** Контекст формы: FieldRenderer скрывает поля с visibility[mode]=false. */\n mode?: 'create' | 'update' | 'view'\n setField: (name: string, value: unknown) => void\n getField: (name: string) => unknown\n setError: (name: string, messages: string[] | null) => void\n setErrors: (next: Record<string, string[]>) => void\n clearErrors: () => void\n}\n\nconst FormStateKey: InjectionKey<FormStateContext> = Symbol('admin.form-state')\n\n/**\n * Создаёт form-context и provid'ит его потомкам.\n *\n * Переданный `initial`-object оборачивается в `reactive()` — мутации stora\n * видны и снаружи (caller владеет state'ом и может его читать после submit'а).\n *\n * @param initial Начальные значения state'а.\n * @param initialErrors Начальные ошибки (для повторного render'а после\n * ValidationError).\n */\nexport function provideFormState(\n initial: Record<string, unknown> = {},\n initialErrors: Record<string, string[]> = {},\n mode?: 'create' | 'update' | 'view',\n): FormStateContext {\n const state = reactive(initial)\n const errors = reactive<Record<string, string[]>>({ ...initialErrors })\n\n const ctx: FormStateContext = {\n state,\n errors,\n mode,\n setField(name, value) {\n ;(state as Record<string, unknown>)[name] = value\n // Очистить ошибки этого поля при изменении — стандартный UX.\n if (errors[name]) {\n delete errors[name]\n }\n },\n getField(name) {\n return (state as Record<string, unknown>)[name]\n },\n setError(name, messages) {\n if (messages === null || messages.length === 0) {\n delete errors[name]\n } else {\n errors[name] = messages\n }\n },\n setErrors(next) {\n for (const key of Object.keys(errors)) delete errors[key]\n Object.assign(errors, next)\n },\n clearErrors() {\n for (const key of Object.keys(errors)) delete errors[key]\n },\n }\n\n provide(FormStateKey, ctx)\n return ctx\n}\n\n/**\n * Получить form-context. Throws, если не вызван внутри `provideFormState()`.\n */\nexport function useFormState(): FormStateContext {\n const ctx = inject(FormStateKey)\n if (!ctx) {\n throw new Error('useFormState() called outside of provideFormState() scope')\n }\n return ctx\n}\n\n/** Опционально получить (null если нет). */\nexport function tryUseFormState(): FormStateContext | null {\n return inject(FormStateKey, null)\n}\n"],"names":["FormStateKey","provideFormState","initial","initialErrors","mode","state","reactive","errors","ctx","name","value","messages","next","key","provide","useFormState","inject","tryUseFormState"],"mappings":";AAyBA,MAAMA,2BAAsD,kBAAkB;AAYvE,SAASC,EACdC,IAAmC,CAAA,GACnCC,IAA0C,CAAA,GAC1CC,GACkB;AAClB,QAAMC,IAAQC,EAASJ,CAAO,GACxBK,IAASD,EAAmC,EAAE,GAAGH,GAAe,GAEhEK,IAAwB;AAAA,IAC5B,OAAAH;AAAA,IACA,QAAAE;AAAA,IACA,MAAAH;AAAA,IACA,SAASK,GAAMC,GAAO;AAClB,MAAAL,EAAkCI,CAAI,IAAIC,GAExCH,EAAOE,CAAI,KACb,OAAOF,EAAOE,CAAI;AAAA,IAEtB;AAAA,IACA,SAASA,GAAM;AACb,aAAQJ,EAAkCI,CAAI;AAAA,IAChD;AAAA,IACA,SAASA,GAAME,GAAU;AACvB,MAAIA,MAAa,QAAQA,EAAS,WAAW,IAC3C,OAAOJ,EAAOE,CAAI,IAElBF,EAAOE,CAAI,IAAIE;AAAA,IAEnB;AAAA,IACA,UAAUC,GAAM;AACd,iBAAWC,KAAO,OAAO,KAAKN,CAAM,EAAG,QAAOA,EAAOM,CAAG;AACxD,aAAO,OAAON,GAAQK,CAAI;AAAA,IAC5B;AAAA,IACA,cAAc;AACZ,iBAAWC,KAAO,OAAO,KAAKN,CAAM,EAAG,QAAOA,EAAOM,CAAG;AAAA,IAC1D;AAAA,EAAA;AAGF,SAAAC,EAAQd,GAAcQ,CAAG,GAClBA;AACT;AAKO,SAASO,IAAiC;AAC/C,QAAMP,IAAMQ,EAAOhB,CAAY;AAC/B,MAAI,CAACQ;AACH,UAAM,IAAI,MAAM,2DAA2D;AAE7E,SAAOA;AACT;AAGO,SAASS,IAA2C;AACzD,SAAOD,EAAOhB,GAAc,IAAI;AAClC;"}
1
+ {"version":3,"file":"formState-DeRZBwWH.js","sources":["../resources/ts/components/render/formState.ts"],"sourcesContent":["/**\n * Composable для form-state: предоставляет state + ошибки через provide/inject.\n *\n * Контейнер (Resource form / Settings page) вызывает `provideFormState()`,\n * Field-компоненты в дереве — `useFormState()` для чтения значения и\n * мутации поля.\n *\n * State — reactive proxy; setField мутирует ключ. Errors — отдельный\n * reactive Map (field-name → string[] messages).\n */\n\nimport { inject, provide, reactive, type InjectionKey } from 'vue'\n\nexport interface FormStateContext {\n state: Record<string, unknown>\n errors: Record<string, string[]>\n /** Контекст формы: FieldRenderer скрывает поля с visibility[mode]=false. */\n mode?: 'create' | 'update' | 'view'\n setField: (name: string, value: unknown) => void\n getField: (name: string) => unknown\n setError: (name: string, messages: string[] | null) => void\n setErrors: (next: Record<string, string[]>) => void\n clearErrors: () => void\n}\n\nconst FormStateKey: InjectionKey<FormStateContext> = Symbol('admin.form-state')\n\n/**\n * Создаёт form-context и provid'ит его потомкам.\n *\n * Переданный `initial`-object оборачивается в `reactive()` — мутации stora\n * видны и снаружи (caller владеет state'ом и может его читать после submit'а).\n *\n * @param initial Начальные значения state'а.\n * @param initialErrors Начальные ошибки (для повторного render'а после\n * ValidationError).\n */\nexport function provideFormState(\n initial: Record<string, unknown> = {},\n initialErrors: Record<string, string[]> = {},\n mode?: 'create' | 'update' | 'view',\n): FormStateContext {\n const state = reactive(initial)\n const errors = reactive<Record<string, string[]>>({ ...initialErrors })\n\n const ctx: FormStateContext = {\n state,\n errors,\n mode,\n setField(name, value) {\n ;(state as Record<string, unknown>)[name] = value\n // Очистить ошибки этого поля при изменении — стандартный UX.\n if (errors[name]) {\n delete errors[name]\n }\n },\n getField(name) {\n return (state as Record<string, unknown>)[name]\n },\n setError(name, messages) {\n if (messages === null || messages.length === 0) {\n delete errors[name]\n } else {\n errors[name] = messages\n }\n },\n setErrors(next) {\n for (const key of Object.keys(errors)) delete errors[key]\n Object.assign(errors, next)\n },\n clearErrors() {\n for (const key of Object.keys(errors)) delete errors[key]\n },\n }\n\n provide(FormStateKey, ctx)\n return ctx\n}\n\n/**\n * Получить form-context. Throws, если не вызван внутри `provideFormState()`.\n */\nexport function useFormState(): FormStateContext {\n const ctx = inject(FormStateKey)\n if (!ctx) {\n throw new Error('useFormState() called outside of provideFormState() scope')\n }\n return ctx\n}\n\n/** Опционально получить (null если нет). */\nexport function tryUseFormState(): FormStateContext | null {\n return inject(FormStateKey, null)\n}\n"],"names":["FormStateKey","provideFormState","initial","initialErrors","mode","state","reactive","errors","ctx","name","value","messages","next","key","provide","useFormState","inject","tryUseFormState"],"mappings":";AAyBA,MAAMA,2BAAsD,kBAAkB;AAYvE,SAASC,EACdC,IAAmC,CAAA,GACnCC,IAA0C,CAAA,GAC1CC,GACkB;AAClB,QAAMC,IAAQC,EAASJ,CAAO,GACxBK,IAASD,EAAmC,EAAE,GAAGH,GAAe,GAEhEK,IAAwB;AAAA,IAC5B,OAAAH;AAAA,IACA,QAAAE;AAAA,IACA,MAAAH;AAAA,IACA,SAASK,GAAMC,GAAO;AAClB,MAAAL,EAAkCI,CAAI,IAAIC,GAExCH,EAAOE,CAAI,KACb,OAAOF,EAAOE,CAAI;AAAA,IAEtB;AAAA,IACA,SAASA,GAAM;AACb,aAAQJ,EAAkCI,CAAI;AAAA,IAChD;AAAA,IACA,SAASA,GAAME,GAAU;AACvB,MAAIA,MAAa,QAAQA,EAAS,WAAW,IAC3C,OAAOJ,EAAOE,CAAI,IAElBF,EAAOE,CAAI,IAAIE;AAAA,IAEnB;AAAA,IACA,UAAUC,GAAM;AACd,iBAAWC,KAAO,OAAO,KAAKN,CAAM,EAAG,QAAOA,EAAOM,CAAG;AACxD,aAAO,OAAON,GAAQK,CAAI;AAAA,IAC5B;AAAA,IACA,cAAc;AACZ,iBAAWC,KAAO,OAAO,KAAKN,CAAM,EAAG,QAAOA,EAAOM,CAAG;AAAA,IAC1D;AAAA,EAAA;AAGF,SAAAC,EAAQd,GAAcQ,CAAG,GAClBA;AACT;AAKO,SAASO,IAAiC;AAC/C,QAAMP,IAAMQ,EAAOhB,CAAY;AAC/B,MAAI,CAACQ;AACH,UAAM,IAAI,MAAM,2DAA2D;AAE7E,SAAOA;AACT;AAGO,SAASS,IAA2C;AACzD,SAAOD,EAAOhB,GAAc,IAAI;AAClC;"}