@tailor-platform/app-shell 1.12.0 → 1.14.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 (140) hide show
  1. package/README.md +1 -1
  2. package/dist/app-shell-core.css +3 -1
  3. package/dist/app-shell.d.ts +1038 -46
  4. package/dist/app-shell.js +10700 -14287
  5. package/dist/appshell-CtS8Y3LW.js +1823 -0
  6. package/dist/fonts/NOTO-SANS-JP-LICENSE.txt +93 -0
  7. package/dist/fonts/files/noto-sans-jp-0-wght-normal.woff2 +0 -0
  8. package/dist/fonts/files/noto-sans-jp-1-wght-normal.woff2 +0 -0
  9. package/dist/fonts/files/noto-sans-jp-10-wght-normal.woff2 +0 -0
  10. package/dist/fonts/files/noto-sans-jp-100-wght-normal.woff2 +0 -0
  11. package/dist/fonts/files/noto-sans-jp-101-wght-normal.woff2 +0 -0
  12. package/dist/fonts/files/noto-sans-jp-102-wght-normal.woff2 +0 -0
  13. package/dist/fonts/files/noto-sans-jp-103-wght-normal.woff2 +0 -0
  14. package/dist/fonts/files/noto-sans-jp-104-wght-normal.woff2 +0 -0
  15. package/dist/fonts/files/noto-sans-jp-105-wght-normal.woff2 +0 -0
  16. package/dist/fonts/files/noto-sans-jp-106-wght-normal.woff2 +0 -0
  17. package/dist/fonts/files/noto-sans-jp-107-wght-normal.woff2 +0 -0
  18. package/dist/fonts/files/noto-sans-jp-108-wght-normal.woff2 +0 -0
  19. package/dist/fonts/files/noto-sans-jp-109-wght-normal.woff2 +0 -0
  20. package/dist/fonts/files/noto-sans-jp-11-wght-normal.woff2 +0 -0
  21. package/dist/fonts/files/noto-sans-jp-110-wght-normal.woff2 +0 -0
  22. package/dist/fonts/files/noto-sans-jp-111-wght-normal.woff2 +0 -0
  23. package/dist/fonts/files/noto-sans-jp-112-wght-normal.woff2 +0 -0
  24. package/dist/fonts/files/noto-sans-jp-113-wght-normal.woff2 +0 -0
  25. package/dist/fonts/files/noto-sans-jp-114-wght-normal.woff2 +0 -0
  26. package/dist/fonts/files/noto-sans-jp-115-wght-normal.woff2 +0 -0
  27. package/dist/fonts/files/noto-sans-jp-116-wght-normal.woff2 +0 -0
  28. package/dist/fonts/files/noto-sans-jp-117-wght-normal.woff2 +0 -0
  29. package/dist/fonts/files/noto-sans-jp-118-wght-normal.woff2 +0 -0
  30. package/dist/fonts/files/noto-sans-jp-119-wght-normal.woff2 +0 -0
  31. package/dist/fonts/files/noto-sans-jp-12-wght-normal.woff2 +0 -0
  32. package/dist/fonts/files/noto-sans-jp-13-wght-normal.woff2 +0 -0
  33. package/dist/fonts/files/noto-sans-jp-14-wght-normal.woff2 +0 -0
  34. package/dist/fonts/files/noto-sans-jp-15-wght-normal.woff2 +0 -0
  35. package/dist/fonts/files/noto-sans-jp-16-wght-normal.woff2 +0 -0
  36. package/dist/fonts/files/noto-sans-jp-17-wght-normal.woff2 +0 -0
  37. package/dist/fonts/files/noto-sans-jp-18-wght-normal.woff2 +0 -0
  38. package/dist/fonts/files/noto-sans-jp-19-wght-normal.woff2 +0 -0
  39. package/dist/fonts/files/noto-sans-jp-2-wght-normal.woff2 +0 -0
  40. package/dist/fonts/files/noto-sans-jp-20-wght-normal.woff2 +0 -0
  41. package/dist/fonts/files/noto-sans-jp-21-wght-normal.woff2 +0 -0
  42. package/dist/fonts/files/noto-sans-jp-22-wght-normal.woff2 +0 -0
  43. package/dist/fonts/files/noto-sans-jp-23-wght-normal.woff2 +0 -0
  44. package/dist/fonts/files/noto-sans-jp-24-wght-normal.woff2 +0 -0
  45. package/dist/fonts/files/noto-sans-jp-25-wght-normal.woff2 +0 -0
  46. package/dist/fonts/files/noto-sans-jp-26-wght-normal.woff2 +0 -0
  47. package/dist/fonts/files/noto-sans-jp-27-wght-normal.woff2 +0 -0
  48. package/dist/fonts/files/noto-sans-jp-28-wght-normal.woff2 +0 -0
  49. package/dist/fonts/files/noto-sans-jp-29-wght-normal.woff2 +0 -0
  50. package/dist/fonts/files/noto-sans-jp-3-wght-normal.woff2 +0 -0
  51. package/dist/fonts/files/noto-sans-jp-30-wght-normal.woff2 +0 -0
  52. package/dist/fonts/files/noto-sans-jp-31-wght-normal.woff2 +0 -0
  53. package/dist/fonts/files/noto-sans-jp-32-wght-normal.woff2 +0 -0
  54. package/dist/fonts/files/noto-sans-jp-33-wght-normal.woff2 +0 -0
  55. package/dist/fonts/files/noto-sans-jp-34-wght-normal.woff2 +0 -0
  56. package/dist/fonts/files/noto-sans-jp-35-wght-normal.woff2 +0 -0
  57. package/dist/fonts/files/noto-sans-jp-36-wght-normal.woff2 +0 -0
  58. package/dist/fonts/files/noto-sans-jp-37-wght-normal.woff2 +0 -0
  59. package/dist/fonts/files/noto-sans-jp-38-wght-normal.woff2 +0 -0
  60. package/dist/fonts/files/noto-sans-jp-39-wght-normal.woff2 +0 -0
  61. package/dist/fonts/files/noto-sans-jp-4-wght-normal.woff2 +0 -0
  62. package/dist/fonts/files/noto-sans-jp-40-wght-normal.woff2 +0 -0
  63. package/dist/fonts/files/noto-sans-jp-41-wght-normal.woff2 +0 -0
  64. package/dist/fonts/files/noto-sans-jp-42-wght-normal.woff2 +0 -0
  65. package/dist/fonts/files/noto-sans-jp-43-wght-normal.woff2 +0 -0
  66. package/dist/fonts/files/noto-sans-jp-44-wght-normal.woff2 +0 -0
  67. package/dist/fonts/files/noto-sans-jp-45-wght-normal.woff2 +0 -0
  68. package/dist/fonts/files/noto-sans-jp-46-wght-normal.woff2 +0 -0
  69. package/dist/fonts/files/noto-sans-jp-47-wght-normal.woff2 +0 -0
  70. package/dist/fonts/files/noto-sans-jp-48-wght-normal.woff2 +0 -0
  71. package/dist/fonts/files/noto-sans-jp-49-wght-normal.woff2 +0 -0
  72. package/dist/fonts/files/noto-sans-jp-5-wght-normal.woff2 +0 -0
  73. package/dist/fonts/files/noto-sans-jp-50-wght-normal.woff2 +0 -0
  74. package/dist/fonts/files/noto-sans-jp-51-wght-normal.woff2 +0 -0
  75. package/dist/fonts/files/noto-sans-jp-52-wght-normal.woff2 +0 -0
  76. package/dist/fonts/files/noto-sans-jp-53-wght-normal.woff2 +0 -0
  77. package/dist/fonts/files/noto-sans-jp-54-wght-normal.woff2 +0 -0
  78. package/dist/fonts/files/noto-sans-jp-55-wght-normal.woff2 +0 -0
  79. package/dist/fonts/files/noto-sans-jp-6-wght-normal.woff2 +0 -0
  80. package/dist/fonts/files/noto-sans-jp-60-wght-normal.woff2 +0 -0
  81. package/dist/fonts/files/noto-sans-jp-61-wght-normal.woff2 +0 -0
  82. package/dist/fonts/files/noto-sans-jp-62-wght-normal.woff2 +0 -0
  83. package/dist/fonts/files/noto-sans-jp-63-wght-normal.woff2 +0 -0
  84. package/dist/fonts/files/noto-sans-jp-64-wght-normal.woff2 +0 -0
  85. package/dist/fonts/files/noto-sans-jp-65-wght-normal.woff2 +0 -0
  86. package/dist/fonts/files/noto-sans-jp-66-wght-normal.woff2 +0 -0
  87. package/dist/fonts/files/noto-sans-jp-67-wght-normal.woff2 +0 -0
  88. package/dist/fonts/files/noto-sans-jp-68-wght-normal.woff2 +0 -0
  89. package/dist/fonts/files/noto-sans-jp-69-wght-normal.woff2 +0 -0
  90. package/dist/fonts/files/noto-sans-jp-7-wght-normal.woff2 +0 -0
  91. package/dist/fonts/files/noto-sans-jp-70-wght-normal.woff2 +0 -0
  92. package/dist/fonts/files/noto-sans-jp-71-wght-normal.woff2 +0 -0
  93. package/dist/fonts/files/noto-sans-jp-72-wght-normal.woff2 +0 -0
  94. package/dist/fonts/files/noto-sans-jp-73-wght-normal.woff2 +0 -0
  95. package/dist/fonts/files/noto-sans-jp-74-wght-normal.woff2 +0 -0
  96. package/dist/fonts/files/noto-sans-jp-75-wght-normal.woff2 +0 -0
  97. package/dist/fonts/files/noto-sans-jp-76-wght-normal.woff2 +0 -0
  98. package/dist/fonts/files/noto-sans-jp-77-wght-normal.woff2 +0 -0
  99. package/dist/fonts/files/noto-sans-jp-78-wght-normal.woff2 +0 -0
  100. package/dist/fonts/files/noto-sans-jp-79-wght-normal.woff2 +0 -0
  101. package/dist/fonts/files/noto-sans-jp-8-wght-normal.woff2 +0 -0
  102. package/dist/fonts/files/noto-sans-jp-80-wght-normal.woff2 +0 -0
  103. package/dist/fonts/files/noto-sans-jp-81-wght-normal.woff2 +0 -0
  104. package/dist/fonts/files/noto-sans-jp-82-wght-normal.woff2 +0 -0
  105. package/dist/fonts/files/noto-sans-jp-83-wght-normal.woff2 +0 -0
  106. package/dist/fonts/files/noto-sans-jp-84-wght-normal.woff2 +0 -0
  107. package/dist/fonts/files/noto-sans-jp-85-wght-normal.woff2 +0 -0
  108. package/dist/fonts/files/noto-sans-jp-86-wght-normal.woff2 +0 -0
  109. package/dist/fonts/files/noto-sans-jp-87-wght-normal.woff2 +0 -0
  110. package/dist/fonts/files/noto-sans-jp-88-wght-normal.woff2 +0 -0
  111. package/dist/fonts/files/noto-sans-jp-89-wght-normal.woff2 +0 -0
  112. package/dist/fonts/files/noto-sans-jp-9-wght-normal.woff2 +0 -0
  113. package/dist/fonts/files/noto-sans-jp-90-wght-normal.woff2 +0 -0
  114. package/dist/fonts/files/noto-sans-jp-91-wght-normal.woff2 +0 -0
  115. package/dist/fonts/files/noto-sans-jp-92-wght-normal.woff2 +0 -0
  116. package/dist/fonts/files/noto-sans-jp-93-wght-normal.woff2 +0 -0
  117. package/dist/fonts/files/noto-sans-jp-94-wght-normal.woff2 +0 -0
  118. package/dist/fonts/files/noto-sans-jp-95-wght-normal.woff2 +0 -0
  119. package/dist/fonts/files/noto-sans-jp-96-wght-normal.woff2 +0 -0
  120. package/dist/fonts/files/noto-sans-jp-97-wght-normal.woff2 +0 -0
  121. package/dist/fonts/files/noto-sans-jp-98-wght-normal.woff2 +0 -0
  122. package/dist/fonts/files/noto-sans-jp-99-wght-normal.woff2 +0 -0
  123. package/dist/fonts/noto-sans-jp.css +2506 -0
  124. package/dist/style-entry.d.ts +600 -0
  125. package/dist/style-entry.js +0 -1
  126. package/dist/testing.d.ts +1140 -0
  127. package/dist/testing.js +14 -0
  128. package/dist/theme.bridge.css +29 -1
  129. package/dist/vite-plugin.d.ts +607 -1
  130. package/dist/vite-plugin.js +2 -4
  131. package/package.json +23 -15
  132. package/skills/app-shell-patterns/SKILL.md +14 -6
  133. package/skills/app-shell-patterns/references/fundamental/components.md +147 -4
  134. package/skills/app-shell-patterns/references/fundamental/design-system.md +1 -1
  135. package/skills/app-shell-patterns/references/fundamental/graphql.md +1 -1
  136. package/skills/app-shell-patterns/references/patterns/form-composer.md +142 -0
  137. package/skills/app-shell-patterns/references/patterns/form-modal.md +84 -30
  138. package/skills/app-shell-patterns/references/patterns/form-sectioned.md +136 -64
  139. package/skills/app-shell-patterns/references/patterns/form-single-page.md +58 -26
  140. package/skills/app-shell-patterns/references/patterns/form-wizard.md +157 -69
@@ -0,0 +1,1823 @@
1
+ import { capitalCase as e } from "change-case";
2
+ import { Await as t, Link as n, NavLink as r, Navigate as i, Outlet as a, createBrowserRouter as o, createMemoryRouter as s, isRouteErrorResponse as c, redirect as l, useLocation as u, useMatch as d, useNavigate as f, useRouteError as p, useRouteLoaderData as m } from "react-router";
3
+ import { cva as h } from "class-variance-authority";
4
+ import { useRender as g } from "@base-ui/react/use-render";
5
+ import { clsx as _ } from "clsx";
6
+ import { twMerge as v } from "tailwind-merge";
7
+ import { AlertCircle as y, ChevronRight as b, HouseIcon as x, LoaderCircleIcon as S, SearchIcon as ee, Table as te, XIcon as ne } from "lucide-react";
8
+ import { Suspense as C, createContext as w, useCallback as T, useContext as E, useEffect as D, useId as re, useMemo as O, useReducer as ie, useRef as k, useState as A, useSyncExternalStore as ae } from "react";
9
+ import { getLocalTimeZone as oe, now as se, today as ce } from "@internationalized/date";
10
+ import { Fragment as j, jsx as M, jsxs as N } from "react/jsx-runtime";
11
+ import { RouterProvider as le } from "react-router/dom";
12
+ import { Toaster as ue } from "sonner";
13
+ import { Dialog as P } from "@base-ui/react/dialog";
14
+ import { parsePath as de } from "@tailor-platform/vite-plugin-app-shell/parser";
15
+ //#region src/lib/utils.ts
16
+ function F(...e) {
17
+ return v(_(e));
18
+ }
19
+ //#endregion
20
+ //#region src/components/button/button.tsx
21
+ var fe = h("astw:inline-flex astw:cursor-pointer astw:items-center astw:justify-center astw:gap-2 astw:whitespace-nowrap astw:rounded-md astw:text-sm astw:font-medium astw:transition-all astw:disabled:pointer-events-none astw:disabled:opacity-50 astw:[&_svg]:pointer-events-none astw:[&_svg:not([class*='size-'])]:size-4 astw:shrink-0 astw:[&_svg]:shrink-0 astw:outline-none astw:focus-visible:border-ring astw:focus-visible:ring-ring/50 astw:focus-visible:ring-[3px] astw:aria-invalid:ring-destructive/20 astw:dark:aria-invalid:ring-destructive/40 astw:aria-invalid:border-destructive", {
22
+ variants: {
23
+ variant: {
24
+ default: "astw:bg-primary astw:text-primary-foreground astw:shadow-xs astw:hover:bg-primary/90",
25
+ destructive: "astw:bg-destructive astw:text-white astw:shadow-xs astw:hover:bg-destructive/90 astw:focus-visible:ring-destructive/20 astw:dark:focus-visible:ring-destructive/40 astw:dark:bg-destructive/60",
26
+ outline: "astw:border astw:border-border astw:bg-background astw:shadow-xs astw:hover:bg-accent astw:hover:text-accent-foreground astw:dark:bg-input/30 astw:dark:border-input astw:dark:hover:bg-input/50",
27
+ secondary: "astw:bg-secondary astw:text-secondary-foreground astw:shadow-xs astw:hover:bg-secondary/80",
28
+ ghost: "astw:hover:bg-accent astw:hover:text-accent-foreground astw:dark:hover:bg-accent/50",
29
+ link: "astw:text-primary astw:underline-offset-4 astw:hover:underline"
30
+ },
31
+ size: {
32
+ default: "astw:h-9 astw:px-4 astw:py-2 astw:has-[>svg]:px-3",
33
+ xs: "astw:h-7 astw:rounded-md astw:gap-1 astw:px-2.5 astw:text-xs astw:has-[>svg]:px-1.5",
34
+ sm: "astw:h-8 astw:rounded-md astw:gap-1.5 astw:px-3 astw:has-[>svg]:px-2.5",
35
+ lg: "astw:h-10 astw:rounded-md astw:px-6 astw:has-[>svg]:px-4",
36
+ icon: "astw:size-9"
37
+ }
38
+ },
39
+ defaultVariants: {
40
+ variant: "default",
41
+ size: "default"
42
+ }
43
+ });
44
+ function I({ className: e, variant: t, size: n, render: r, children: i, ...a }) {
45
+ return g({
46
+ defaultTagName: "button",
47
+ render: r,
48
+ props: {
49
+ "data-slot": "button",
50
+ className: F(fe({
51
+ variant: t,
52
+ size: n,
53
+ className: e
54
+ })),
55
+ children: i,
56
+ ...a
57
+ }
58
+ });
59
+ }
60
+ var pe = () => {
61
+ try {
62
+ if (typeof navigator > "u") return "en";
63
+ let e = navigator.languages?.[0] ?? navigator.language;
64
+ return e ? new Intl.Locale(e).language : "en";
65
+ } catch {
66
+ return "en";
67
+ }
68
+ }, me = () => {
69
+ try {
70
+ return typeof navigator > "u" ? "en" : navigator.languages?.[0] ?? navigator.language ?? "en";
71
+ } catch {
72
+ return "en";
73
+ }
74
+ }, he = (e) => {
75
+ try {
76
+ return new Intl.Locale(e).language;
77
+ } catch {
78
+ return e;
79
+ }
80
+ }, L = (e) => (t, n) => t ? typeof t == "string" ? t : t(e) ?? n : n, ge = (t) => {
81
+ let n = L(t);
82
+ return (t, r) => n(t, typeof t == "string" ? t : e(r));
83
+ }, _e = (e) => ({
84
+ modules: e.modules,
85
+ settingsResources: e.settingsResources ?? [],
86
+ errorBoundary: e.errorBoundary ?? /* @__PURE__ */ M(U, {}),
87
+ basePath: e.basePath,
88
+ locale: e.locale ? he(e.locale) : pe(),
89
+ resolvedLocale: e.locale ?? me(),
90
+ timeZone: e.timeZone
91
+ }), R = w({ configurations: {
92
+ modules: [],
93
+ settingsResources: [],
94
+ locale: "en",
95
+ errorBoundary: null
96
+ } }), z = w({ contextData: {} }), B = () => E(R), ve = () => E(z), ye = () => {
97
+ let e = E(R), t = E(z);
98
+ return {
99
+ ...e,
100
+ ...t
101
+ };
102
+ }, be = () => {
103
+ let { configurations: e } = E(R);
104
+ return {
105
+ locale: e.resolvedLocale ?? e.locale,
106
+ language: e.locale
107
+ };
108
+ }, xe = () => {
109
+ let { configurations: e } = E(R), t = e.timeZone ?? oe();
110
+ return {
111
+ value: t,
112
+ today: () => ce(t),
113
+ now: () => se(t)
114
+ };
115
+ }, Se = () => {
116
+ let { configurations: e } = B(), t = L(e.locale);
117
+ return (e, n) => t(e, n);
118
+ }, Ce = (e) => {
119
+ let t = (t) => (n) => e[t]?.[n] ?? e.en[n];
120
+ return {
121
+ useT: () => {
122
+ let { configurations: n } = B(), r = t(n.locale), i = ((e, ...t) => {
123
+ let n = r(e);
124
+ return typeof n == "function" ? n(t[0]) : n;
125
+ });
126
+ return i.dynamic = (t, r) => {
127
+ let i = e[n.locale]?.[t] ?? e.en[t];
128
+ return i === void 0 || typeof i == "function" ? r : i;
129
+ }, i;
130
+ },
131
+ t: (e, ...n) => (r) => {
132
+ let i = t(r)(e);
133
+ return typeof i == "function" ? i(n[0]) : i;
134
+ }
135
+ };
136
+ }, V = Ce({
137
+ en: {
138
+ home: "Home",
139
+ error404Title: "404 Not Found",
140
+ error404Body: "The page you requested could not be found.",
141
+ goBack: "Go Back",
142
+ errorUnexpected: "An unexpected error occurred",
143
+ errorTitle: "Something went wrong",
144
+ tryAgain: "Try Again",
145
+ welcomeTitle: "Welcome to AppShell",
146
+ welcomeBody: "Add your GraphQL resources from configuration at first!",
147
+ settings: "Settings",
148
+ toggle: "Toggle",
149
+ toggleSidebar: "Toggle Sidebar",
150
+ sidebar: "Sidebar",
151
+ sidebarDesc: "Displays the mobile sidebar.",
152
+ close: "Close",
153
+ more: "More",
154
+ search: "Search",
155
+ commandPaletteSearch: "Search pages...",
156
+ commandPaletteNoResults: "No results found",
157
+ commandPaletteActions: "Actions",
158
+ commandPalettePages: "Pages",
159
+ commandPaletteSearchModes: "Search Modes",
160
+ commandPaletteSearching: "Searching...",
161
+ appInfoTitle: "App info",
162
+ appInfoDescription: "Information about the current app and AppShell.",
163
+ appInfoAppName: "App name",
164
+ appInfoAppShellVersion: "AppShell version",
165
+ appInfoCopy: "Copy"
166
+ },
167
+ ja: {
168
+ home: "ホーム",
169
+ error404Title: "404 ページが見つかりません",
170
+ error404Body: "お探しのページは存在しません。",
171
+ goBack: "戻る",
172
+ errorUnexpected: "予期しないエラーが発生しました",
173
+ errorTitle: "問題が発生しました",
174
+ tryAgain: "再試行",
175
+ welcomeTitle: "AppShell へようこそ",
176
+ welcomeBody: "まず設定から GraphQL リソースを追加してください。",
177
+ settings: "設定",
178
+ toggle: "切り替え",
179
+ toggleSidebar: "サイドバーを切り替え",
180
+ sidebar: "サイドバー",
181
+ sidebarDesc: "モバイル用サイドバーを表示します。",
182
+ close: "閉じる",
183
+ more: "その他",
184
+ search: "検索",
185
+ commandPaletteSearch: "ページを検索...",
186
+ commandPaletteNoResults: "結果が見つかりません",
187
+ commandPaletteActions: "アクション",
188
+ commandPalettePages: "ページ",
189
+ commandPaletteSearchModes: "検索モード",
190
+ commandPaletteSearching: "検索中...",
191
+ appInfoTitle: "アプリ情報",
192
+ appInfoDescription: "現在のアプリと AppShell の情報です。",
193
+ appInfoAppName: "アプリ名",
194
+ appInfoAppShellVersion: "AppShell バージョン",
195
+ appInfoCopy: "コピー"
196
+ }
197
+ }), H = V.useT, U = () => {
198
+ let e = p(), t = H(), n = {
199
+ role: "alert",
200
+ "aria-label": "default-error-boundary"
201
+ };
202
+ if (c(e) && e.status === 404) return /* @__PURE__ */ M("div", {
203
+ ...n,
204
+ className: "astw:p-6",
205
+ children: /* @__PURE__ */ N("div", {
206
+ className: "astw:flex astw:items-start astw:gap-4",
207
+ children: [/* @__PURE__ */ M(y, { className: "astw:h-5 astw:w-5 astw:text-destructive astw:flex-shrink-0 astw:mt-0.5" }), /* @__PURE__ */ N("div", { children: [
208
+ /* @__PURE__ */ M("h1", {
209
+ className: "astw:font-semibold astw:text-lg",
210
+ children: t("error404Title")
211
+ }),
212
+ /* @__PURE__ */ M("p", {
213
+ className: "astw:text-sm astw:text-muted-foreground astw:mt-1",
214
+ children: t("error404Body")
215
+ }),
216
+ /* @__PURE__ */ M(I, {
217
+ variant: "outline",
218
+ size: "sm",
219
+ className: "astw:mt-4",
220
+ onClick: () => window.history.back(),
221
+ children: t("goBack")
222
+ })
223
+ ] })]
224
+ })
225
+ });
226
+ let r = e instanceof Error ? e.message : t("errorUnexpected");
227
+ return /* @__PURE__ */ M("div", {
228
+ ...n,
229
+ className: "astw:p-6",
230
+ children: /* @__PURE__ */ N("div", {
231
+ className: "astw:flex astw:items-start astw:gap-4",
232
+ children: [/* @__PURE__ */ M(y, { className: "astw:h-5 astw:w-5 astw:text-destructive astw:flex-shrink-0 astw:mt-0.5" }), /* @__PURE__ */ N("div", { children: [
233
+ /* @__PURE__ */ M("h1", {
234
+ className: "astw:font-semibold astw:text-lg",
235
+ children: t("errorTitle")
236
+ }),
237
+ /* @__PURE__ */ M("p", {
238
+ className: "astw:text-sm astw:text-muted-foreground astw:mt-1",
239
+ children: r
240
+ }),
241
+ /* @__PURE__ */ M(I, {
242
+ variant: "outline",
243
+ size: "sm",
244
+ className: "astw:mt-4",
245
+ onClick: () => window.location.reload(),
246
+ children: t("tryAgain")
247
+ })
248
+ ] })]
249
+ })
250
+ });
251
+ }, we = {}, Te = (e) => {
252
+ we = e;
253
+ }, Ee = () => ({ type: "pass" }), De = () => ({ type: "hidden" }), Oe = (e) => ({
254
+ type: "redirect",
255
+ to: e
256
+ }), W = () => new Response("Not Found", { status: 404 }), G = async (e) => {
257
+ if (!e || e.length === 0) return { type: "pass" };
258
+ let t = { context: we };
259
+ for (let n of e) {
260
+ let e = await n(t);
261
+ if (e.type !== "pass") return e;
262
+ }
263
+ return { type: "pass" };
264
+ }, K = (e, t) => async (n) => {
265
+ let r = await G(e);
266
+ switch (r.type) {
267
+ case "hidden": throw W();
268
+ case "redirect": return l(r.to);
269
+ case "pass": return t ? t(n) : null;
270
+ }
271
+ }, q = (t) => t === "" || t === "/" ? V.t("home") : e(t), ke = (e, t) => () => {
272
+ let { configurations: n } = B(), { metaTitle: r, fallbackTitle: i } = e;
273
+ return t(L(n.locale)(r, typeof i == "function" ? i(n.locale) : i));
274
+ };
275
+ function Ae(e) {
276
+ let { path: t, meta: n, component: r, resources: i, errorBoundary: a, guards: o } = e, s = n?.title ?? q(t), c = q(t), l = o && o.length > 0 ? K(o) : void 0;
277
+ return {
278
+ path: t,
279
+ type: "component",
280
+ _type: "module",
281
+ component: r ? ke({
282
+ metaTitle: s,
283
+ fallbackTitle: c
284
+ }, (e) => r({
285
+ title: e,
286
+ resources: i
287
+ })) : void 0,
288
+ loader: l,
289
+ meta: {
290
+ title: s,
291
+ ...n?.breadcrumbTitle === void 0 ? {} : { breadcrumbTitle: n.breadcrumbTitle },
292
+ ...n,
293
+ menuItemClickable: r !== void 0,
294
+ icon: e.meta?.icon
295
+ },
296
+ resources: i,
297
+ errorBoundary: a || /* @__PURE__ */ M(U, {}),
298
+ guards: o
299
+ };
300
+ }
301
+ function je(t) {
302
+ let { path: n, component: r, subResources: i, meta: a, errorBoundary: o, guards: s } = t, c = a?.title ?? e(n), l = e(n), u = s && s.length > 0 ? K(s) : void 0, d = r ? ke({
303
+ metaTitle: c,
304
+ fallbackTitle: l
305
+ }, (e) => r({
306
+ title: e,
307
+ resources: i
308
+ })) : void 0;
309
+ return {
310
+ _type: "resource",
311
+ type: "component",
312
+ path: n,
313
+ meta: {
314
+ title: c,
315
+ icon: a?.icon,
316
+ ...a?.breadcrumbTitle === void 0 ? {} : { breadcrumbTitle: a.breadcrumbTitle }
317
+ },
318
+ component: d,
319
+ subResources: i,
320
+ errorBoundary: o ?? /* @__PURE__ */ M(U, {}),
321
+ guards: s,
322
+ loader: u
323
+ };
324
+ }
325
+ var Me = {
326
+ name: "@tailor-platform/app-shell",
327
+ version: "1.14.0",
328
+ description: "An opinionated React application framework for building ERP applications on Tailor Platform",
329
+ keywords: [
330
+ "app-shell",
331
+ "erp",
332
+ "react",
333
+ "routing",
334
+ "sidebar",
335
+ "tailor-platform",
336
+ "vite"
337
+ ],
338
+ homepage: "https://github.com/tailor-platform/app-shell/tree/main/packages/core#readme",
339
+ bugs: { url: "https://github.com/tailor-platform" },
340
+ license: "MIT",
341
+ repository: {
342
+ type: "git",
343
+ url: "https://github.com/tailor-platform/app-shell",
344
+ directory: "packages/core"
345
+ },
346
+ files: ["dist/**", "skills/**"],
347
+ type: "module",
348
+ exports: {
349
+ "./styles": "./dist/app-shell.css",
350
+ "./theme.css": "./dist/theme.shims.css",
351
+ "./themes/*": "./dist/themes/*.css",
352
+ ".": {
353
+ types: "./dist/app-shell.d.ts",
354
+ default: "./dist/app-shell.js"
355
+ },
356
+ "./vite-plugin": {
357
+ types: "./dist/vite-plugin.d.ts",
358
+ default: "./dist/vite-plugin.js"
359
+ },
360
+ "./testing": {
361
+ types: "./dist/testing.d.ts",
362
+ default: "./dist/testing.js"
363
+ }
364
+ },
365
+ publishConfig: { access: "public" },
366
+ scripts: {
367
+ dev: "vite build --watch --mode development",
368
+ build: "vite build",
369
+ "check-dts": "node scripts/check-dts.mjs",
370
+ "vendor:fonts": "node scripts/sync-noto-fonts.mjs",
371
+ lint: "oxlint -c .oxlintrc.jsonc",
372
+ test: "vitest run",
373
+ "type-check": "tsc --incremental"
374
+ },
375
+ dependencies: {
376
+ "@base-ui/react": "1.6.0",
377
+ "@internationalized/date": "3.12.2",
378
+ "@standard-schema/spec": "^1.1.0",
379
+ "@tailor-platform/auth-public-client": "^0.6.1",
380
+ "@tailor-platform/vite-plugin-app-shell": "workspace:*",
381
+ "change-case": "^5.4.4",
382
+ "class-variance-authority": "^0.7.1",
383
+ clsx: "^2.1.1",
384
+ "encoding-japanese": "^2.2.0",
385
+ "lucide-react": "^1.8.0",
386
+ openai: "6.45.0",
387
+ papaparse: "^5.5.3",
388
+ "react-router": "^8.3.0",
389
+ sonner: "^2.0.7",
390
+ "tailwind-merge": "^3.6.0"
391
+ },
392
+ devDependencies: {
393
+ "@fontsource-variable/noto-sans-jp": "5.3.0",
394
+ "@microsoft/api-extractor": "7.58.12",
395
+ "@tailwindcss/postcss": "catalog:",
396
+ "@testing-library/react": "16.3.3",
397
+ "@testing-library/user-event": "14.6.7",
398
+ "@types/encoding-japanese": "2.2.1",
399
+ "@types/node": "catalog:",
400
+ "@types/papaparse": "5.5.2",
401
+ "@types/react": "catalog:",
402
+ "@types/react-dom": "catalog:",
403
+ "@vitejs/plugin-react": "catalog:",
404
+ "@vitest/coverage-v8": "4.1.10",
405
+ "happy-dom": "20.9.0",
406
+ postcss: "8.5.26",
407
+ react: "catalog:",
408
+ "react-dom": "catalog:",
409
+ "react-hook-form": "7.71.2",
410
+ tailwindcss: "catalog:",
411
+ "tw-animate-css": "1.4.0",
412
+ typescript: "5.9.3",
413
+ vite: "catalog:",
414
+ "vite-plugin-dts": "5.0.3",
415
+ vitest: "catalog:"
416
+ },
417
+ peerDependencies: {
418
+ react: ">=19.2.7",
419
+ "react-dom": ">=19.2.7"
420
+ }
421
+ };
422
+ //#endregion
423
+ //#region src/components/card/card.tsx
424
+ function Ne({ className: e, ...t }) {
425
+ return /* @__PURE__ */ M("div", {
426
+ "data-slot": "card",
427
+ className: F("astw:bg-card astw:text-card-foreground astw:flex astw:flex-col astw:rounded-xl astw:border astw:border-border astw:shadow-xs", e),
428
+ ...t
429
+ });
430
+ }
431
+ Ne.displayName = "Card.Root";
432
+ function Pe({ className: e, title: t, description: n, children: r, ...i }) {
433
+ return /* @__PURE__ */ N("div", {
434
+ "data-slot": "card-header",
435
+ className: F("astw:@container/card-header astw:grid astw:auto-rows-min astw:grid-rows-[auto_auto] astw:items-start astw:gap-2 astw:px-6 astw:pt-6 astw:pb-4 astw:[.border-b]:pb-6", e),
436
+ ...i,
437
+ children: [
438
+ t && /* @__PURE__ */ M("h3", {
439
+ "data-slot": "card-title",
440
+ className: "astw:text-lg astw:font-semibold astw:leading-none astw:text-card-foreground",
441
+ children: t
442
+ }),
443
+ n && /* @__PURE__ */ M("div", {
444
+ "data-slot": "card-description",
445
+ className: "astw:text-muted-foreground astw:text-sm",
446
+ children: n
447
+ }),
448
+ r
449
+ ]
450
+ });
451
+ }
452
+ Pe.displayName = "Card.Header";
453
+ function Fe({ className: e, ...t }) {
454
+ return /* @__PURE__ */ M("div", {
455
+ "data-slot": "card-content",
456
+ className: F("astw:px-6 astw:pb-6 astw:first:pt-6", e),
457
+ ...t
458
+ });
459
+ }
460
+ Fe.displayName = "Card.Content";
461
+ var J = {
462
+ Root: Ne,
463
+ Header: Pe,
464
+ Content: Fe
465
+ }, Ie = w(null), Le = ({ children: e }) => {
466
+ let [t, n] = A(() => /* @__PURE__ */ new Map()), r = T((e, t) => {
467
+ n((n) => {
468
+ let r = new Map(n);
469
+ return r.set(e, t), r;
470
+ });
471
+ }, []), i = T((e) => {
472
+ n((t) => {
473
+ if (!t.has(e)) return t;
474
+ let n = new Map(t);
475
+ return n.delete(e), n;
476
+ });
477
+ }, []);
478
+ return /* @__PURE__ */ M(Ie.Provider, {
479
+ value: {
480
+ overrides: t,
481
+ register: r,
482
+ unregister: i
483
+ },
484
+ children: e
485
+ });
486
+ }, Re = () => {
487
+ let e = E(Ie);
488
+ if (!e) throw Error("useBreadcrumbOverride must be used within BreadcrumbOverrideProvider");
489
+ return e;
490
+ }, ze = () => E(Ie);
491
+ //#endregion
492
+ //#region src/hooks/use-override-breadcrumb.ts
493
+ function Be(e) {
494
+ let t = u(), { register: n, unregister: r } = Re(), i = t.pathname;
495
+ D(() => (e ? n(i, e) : r(i), () => r(i)), [
496
+ i,
497
+ e,
498
+ n,
499
+ r
500
+ ]);
501
+ }
502
+ //#endregion
503
+ //#region src/components/internals/app-info/app-info.tsx
504
+ var Ve = "__appinfo", He = `/${Ve}`, Ue = Me.version, We = (e) => e == null ? "-" : String(e), Ge = (e) => e.map((e) => `${e.label}: ${We(e.value)}`).join("\n"), Ke = ({ label: e, value: t }) => /* @__PURE__ */ N("div", {
505
+ className: "astw:grid astw:gap-1 astw:py-3 astw:sm:grid-cols-[12rem_minmax(0,1fr)] astw:sm:gap-4",
506
+ children: [/* @__PURE__ */ M("dt", {
507
+ className: "astw:text-sm astw:text-muted-foreground",
508
+ children: e
509
+ }), /* @__PURE__ */ M("dd", {
510
+ className: "astw:min-w-0 astw:text-sm astw:break-all",
511
+ children: We(t)
512
+ })]
513
+ }), qe = () => {
514
+ let e = H();
515
+ return {
516
+ path: He,
517
+ title: e("appInfoTitle"),
518
+ breadcrumb: [e("appInfoTitle")]
519
+ };
520
+ }, Je = () => {
521
+ let e = H(), { title: t, appInfo: n } = B();
522
+ Be(e("appInfoTitle"));
523
+ let r = [
524
+ ...t ? [{
525
+ label: e("appInfoAppName"),
526
+ value: t
527
+ }] : [],
528
+ {
529
+ label: e("appInfoAppShellVersion"),
530
+ value: Ue
531
+ },
532
+ ...n?.metadata ?? []
533
+ ];
534
+ return /* @__PURE__ */ M("div", {
535
+ className: "astw:w-full astw:max-w-xl",
536
+ children: /* @__PURE__ */ N(J.Root, { children: [/* @__PURE__ */ N("div", {
537
+ className: "astw:flex astw:items-center astw:justify-between astw:px-6 astw:pt-6 astw:pb-4",
538
+ children: [/* @__PURE__ */ M("h1", {
539
+ className: "astw:text-lg astw:font-semibold astw:leading-none",
540
+ children: e("appInfoTitle")
541
+ }), /* @__PURE__ */ M(I, {
542
+ variant: "outline",
543
+ size: "sm",
544
+ onClick: async () => {
545
+ try {
546
+ await navigator.clipboard.writeText(Ge(r));
547
+ } catch {}
548
+ },
549
+ children: e("appInfoCopy")
550
+ })]
551
+ }), /* @__PURE__ */ M(J.Content, { children: /* @__PURE__ */ M("dl", { children: r.map((e, t) => /* @__PURE__ */ M("div", {
552
+ className: t > 0 ? "astw:border-t astw:border-border" : void 0,
553
+ children: /* @__PURE__ */ M(Ke, { ...e })
554
+ }, `${e.label}-${t}`)) }) })] })
555
+ });
556
+ }, Ye = [
557
+ "light",
558
+ "dark",
559
+ "system"
560
+ ], Xe = [
561
+ {
562
+ value: "light",
563
+ label: "Light"
564
+ },
565
+ {
566
+ value: "dark",
567
+ label: "Dark"
568
+ },
569
+ {
570
+ value: "system",
571
+ label: "System"
572
+ }
573
+ ], Ze = "appshell-ui-theme";
574
+ function Qe(e, t, n) {
575
+ if (typeof window > "u") return n;
576
+ try {
577
+ let r = localStorage.getItem(e);
578
+ return r && t.includes(r) ? r : n;
579
+ } catch {
580
+ return n;
581
+ }
582
+ }
583
+ function $e(e, t) {
584
+ return e === "system" ? t ? "dark" : "light" : e;
585
+ }
586
+ function et() {
587
+ return typeof window < "u" && window.matchMedia("(prefers-color-scheme: dark)").matches;
588
+ }
589
+ var tt = w(void 0);
590
+ function nt({ children: e, defaultColorTheme: t = "system" }) {
591
+ let [n, r] = A(() => Qe(Ze, Ye, t)), [i, a] = A(() => $e(Qe(Ze, Ye, t), et())), o = T((e) => {
592
+ let t = window.document.documentElement;
593
+ t.classList.remove("light", "dark"), t.classList.add(e);
594
+ }, []);
595
+ D(() => {
596
+ o(i);
597
+ let e = window.matchMedia("(prefers-color-scheme: dark)"), t = (e) => {
598
+ let t = $e(n, e.matches);
599
+ a(t);
600
+ };
601
+ return e.addEventListener("change", t), () => e.removeEventListener("change", t);
602
+ }, [
603
+ n,
604
+ i,
605
+ o
606
+ ]);
607
+ let s = T((e) => {
608
+ try {
609
+ localStorage.setItem(Ze, e);
610
+ } catch {}
611
+ r(e);
612
+ let t = $e(e, et());
613
+ a(t), o(t);
614
+ }, [o]), c = O(() => ({
615
+ colorTheme: n,
616
+ resolvedColorTheme: i,
617
+ setColorTheme: s
618
+ }), [
619
+ n,
620
+ i,
621
+ s
622
+ ]);
623
+ return /* @__PURE__ */ M(tt.Provider, {
624
+ value: c,
625
+ children: e
626
+ });
627
+ }
628
+ var rt = () => {
629
+ let e = E(tt);
630
+ if (e === void 0) throw Error("useTheme must be used within a ThemeProvider");
631
+ let { colorTheme: t, resolvedColorTheme: n, setColorTheme: r } = e;
632
+ return O(() => ({
633
+ theme: t,
634
+ resolvedTheme: n,
635
+ setTheme: r
636
+ }), [
637
+ t,
638
+ n,
639
+ r
640
+ ]);
641
+ }, it = ({ ...e }) => {
642
+ let { resolvedTheme: t } = rt();
643
+ return /* @__PURE__ */ M(ue, {
644
+ theme: t,
645
+ className: "astw:toaster astw:group",
646
+ style: {
647
+ "--normal-bg": "var(--popover)",
648
+ "--normal-text": "var(--popover-foreground)",
649
+ "--normal-border": "var(--border)"
650
+ },
651
+ ...e
652
+ });
653
+ }, at = () => {
654
+ let e = H();
655
+ return /* @__PURE__ */ N(j, { children: [/* @__PURE__ */ M("p", {
656
+ className: "astw:font-semibold astw:leading-none astw:tracking-tight",
657
+ children: e("welcomeTitle")
658
+ }), /* @__PURE__ */ M("p", {
659
+ className: "pt-4",
660
+ children: e("welcomeBody")
661
+ })] });
662
+ }, ot = () => /* @__PURE__ */ N(j, { children: [/* @__PURE__ */ M(a, {}), /* @__PURE__ */ M(it, {})] }), st = () => {
663
+ let { configurations: e } = ye(), t = H(), n = Se();
664
+ return /* @__PURE__ */ N("div", {
665
+ className: "astw:mx-auto astw:flex-col astw:flex astw:md:flex-row astw:max-w-5xl astw:gap-[10px] astw:w-full",
666
+ children: [/* @__PURE__ */ M("div", { children: /* @__PURE__ */ N("nav", {
667
+ className: "astw:bg-card astw:md:w-xs astw:rounded-md astw:border astw:border-border astw:p-3 astw:shadow-xs",
668
+ children: [/* @__PURE__ */ M("h2", {
669
+ className: "astw:text-sm astw:leading-[36px] astw:mb-2 astw:font-bold ",
670
+ children: t("settings")
671
+ }), /* @__PURE__ */ M("ul", {
672
+ className: "astw:flex astw:flex-col astw:gap-1",
673
+ children: e.settingsResources.map((e) => /* @__PURE__ */ M("li", { children: /* @__PURE__ */ M(r, {
674
+ to: `./${e.path}`,
675
+ children: ({ isActive: t }) => /* @__PURE__ */ N(I, {
676
+ variant: t ? "secondary" : "ghost",
677
+ className: "astw:w-full astw:justify-start",
678
+ children: [e.meta.icon, n(e.meta.title, e.path)]
679
+ })
680
+ }) }, e.path))
681
+ })]
682
+ }) }), /* @__PURE__ */ M("section", {
683
+ className: "astw:bg-card astw:flex-1 astw:rounded-md astw:border astw:border-border astw:shadow-xs",
684
+ children: /* @__PURE__ */ M(a, {})
685
+ })]
686
+ });
687
+ }, ct = (e) => () => /* @__PURE__ */ M(j, { children: e }), lt = (e) => e.component ? {
688
+ index: !0,
689
+ Component: e.component,
690
+ ...e.loader && { loader: e.loader }
691
+ } : e.loader ? {
692
+ index: !0,
693
+ Component: () => null,
694
+ loader: async (t) => {
695
+ let n = await e.loader(t);
696
+ if (n instanceof Response) return n;
697
+ throw W();
698
+ }
699
+ } : {
700
+ index: !0,
701
+ Component: () => null,
702
+ loader: () => {
703
+ throw W();
704
+ }
705
+ }, ut = (e, t, n) => {
706
+ let r = e.errorBoundary || n, i = (t ?? []).map((e) => ut(e, e.subResources, r)), a = [lt(e), ...i];
707
+ return {
708
+ path: e.path,
709
+ ...e.errorBoundary && { ErrorBoundary: ct(e.errorBoundary) },
710
+ ...a.length > 0 ? { children: a } : {}
711
+ };
712
+ }, dt = (e) => e.map((e) => ut(e, e.resources, e.errorBoundary)), ft = ({ modules: e, settingsResources: t }) => {
713
+ let n = e.some((e) => e.path === "") ? null : lt({
714
+ path: "",
715
+ component: at
716
+ }), r = t.length > 0 ? [{
717
+ path: "settings",
718
+ index: !0,
719
+ Component: () => /* @__PURE__ */ M(i, {
720
+ to: t[0].path,
721
+ relative: "path",
722
+ replace: !0
723
+ })
724
+ }, {
725
+ path: "settings",
726
+ Component: st,
727
+ children: t.map((e) => {
728
+ if (!e.component) throw Error(`Settings resource "${e.path}" must have a component.`);
729
+ return {
730
+ path: e.path,
731
+ Component: e.component,
732
+ ...e.errorBoundary && { ErrorBoundary: ct(e.errorBoundary) }
733
+ };
734
+ })
735
+ }] : [];
736
+ return [
737
+ ...n ? [n] : [],
738
+ { children: dt(e) },
739
+ {
740
+ path: Ve,
741
+ Component: Je
742
+ },
743
+ ...r,
744
+ {
745
+ path: "*",
746
+ loader: () => {
747
+ throw W();
748
+ },
749
+ Component: () => null,
750
+ ErrorBoundary: U
751
+ }
752
+ ];
753
+ }, pt = "appshell-root-nav", mt = (e) => ({
754
+ loaderID: pt,
755
+ loader: async () => ({ navItems: gt(e) })
756
+ }), ht = () => m(pt)?.navItems, gt = async (e) => {
757
+ let t = ge(e.locale);
758
+ return (await Promise.all(e.modules.map(async (e) => {
759
+ if (e.path.startsWith(":") || (await G(e.guards)).type !== "pass") return null;
760
+ let n = await _t(e.resources, e.path, t);
761
+ return n.length === 0 && !e.meta.menuItemClickable ? null : {
762
+ module: e,
763
+ resources: n
764
+ };
765
+ }))).filter((e) => e !== null).map(({ module: e, resources: n }) => ({
766
+ title: t(e.meta.title, e.path),
767
+ url: e.meta.menuItemClickable ? e.path || "/" : void 0,
768
+ icon: e.meta.icon || /* @__PURE__ */ M(te, {}),
769
+ items: n
770
+ }));
771
+ }, _t = async (e, t, n) => (await Promise.all(e.map(async (e) => {
772
+ if (e.path.startsWith(":") || (await G(e.guards)).type !== "pass") return null;
773
+ let r = `${t}/${e.path}`, i = n(e.meta.title, e.path), a = e.component !== void 0, o = e.subResources ? await _t(e.subResources, r, n) : void 0, s = o && o.length > 0;
774
+ return !a && !s ? null : {
775
+ title: i,
776
+ url: a ? r : void 0,
777
+ items: s ? o : void 0
778
+ };
779
+ }))).filter((e) => e !== null);
780
+ //#endregion
781
+ //#region src/components/internals/breadcrumb/breadcrumb.tsx
782
+ function vt({ ...e }) {
783
+ return /* @__PURE__ */ M("nav", {
784
+ "aria-label": "breadcrumb",
785
+ "data-slot": "breadcrumb",
786
+ ...e
787
+ });
788
+ }
789
+ function yt({ className: e, ...t }) {
790
+ return /* @__PURE__ */ M("ol", {
791
+ "data-slot": "breadcrumb-list",
792
+ className: F("astw:text-muted-foreground astw:flex astw:flex-wrap astw:items-center astw:gap-1.5 astw:text-sm astw:break-words astw:sm:gap-2.5", e),
793
+ ...t
794
+ });
795
+ }
796
+ function bt({ className: e, ...t }) {
797
+ return /* @__PURE__ */ M("li", {
798
+ "data-slot": "breadcrumb-item",
799
+ className: F("astw:inline-flex astw:items-center astw:gap-1.5", e),
800
+ ...t
801
+ });
802
+ }
803
+ function xt({ render: e, className: t, children: r, to: i, ...a }) {
804
+ let o = F("astw:hover:text-foreground astw:transition-colors", t);
805
+ return g({
806
+ defaultTagName: "a",
807
+ render: e ?? /* @__PURE__ */ M(n, { to: i }),
808
+ props: {
809
+ "data-slot": "breadcrumb-link",
810
+ className: o,
811
+ children: r,
812
+ ...e ? a : {
813
+ to: i,
814
+ ...a
815
+ }
816
+ }
817
+ });
818
+ }
819
+ function St({ className: e, ariaCurrent: t = "location", ...n }) {
820
+ return /* @__PURE__ */ M("span", {
821
+ "data-slot": "breadcrumb-page",
822
+ "aria-disabled": "true",
823
+ "aria-current": t,
824
+ className: F("astw:text-foreground astw:font-normal", e),
825
+ ...n
826
+ });
827
+ }
828
+ function Ct({ children: e, className: t, ...n }) {
829
+ return /* @__PURE__ */ M("li", {
830
+ "data-slot": "breadcrumb-separator",
831
+ role: "presentation",
832
+ "aria-hidden": "true",
833
+ className: F("astw:[&>svg]:size-3.5", t),
834
+ ...n,
835
+ children: e ?? /* @__PURE__ */ M(b, {})
836
+ });
837
+ }
838
+ //#endregion
839
+ //#region src/routing/path.ts
840
+ function wt(e, t) {
841
+ if (!t.trim()) return e;
842
+ let n = t.toLowerCase();
843
+ return e.filter((e) => e.title.toLowerCase().includes(n) || e.path.toLowerCase().includes(n));
844
+ }
845
+ var Tt = (e, t) => typeof e.breadcrumbTitle == "function" ? e.breadcrumbTitle(t) : typeof e.breadcrumbTitle == "string" ? e.breadcrumbTitle : e.title, Et = (e, t) => {
846
+ let n = ge(t);
847
+ return e.reduce((e, t) => {
848
+ let r = n(t.meta.title, t.path);
849
+ e[t.path] = {
850
+ title: r,
851
+ breadcrumbTitle: t.meta.breadcrumbTitle,
852
+ clickable: t.meta.menuItemClickable
853
+ };
854
+ let i = (t, r) => {
855
+ !t || t.length === 0 || t.forEach((t) => {
856
+ let a = r ? `${r}/${t.path}` : t.path;
857
+ e[a] = {
858
+ title: n(t.meta.title, t.path),
859
+ breadcrumbTitle: t.meta.breadcrumbTitle,
860
+ clickable: !0
861
+ }, t.subResources && t.subResources.length > 0 && i(t.subResources, a);
862
+ });
863
+ };
864
+ return t.resources && t.resources.length > 0 && i(t.resources, t.path), e;
865
+ }, {});
866
+ };
867
+ function Dt(e, t, n, r) {
868
+ let i = e.split("/").filter((e) => e !== ""), a = t && i[0] === t ? i.slice(1) : i, o = Et(n, r);
869
+ if (a.length === 0) {
870
+ let e = o[""];
871
+ if (e) return {
872
+ basePath: t || null,
873
+ segments: [{
874
+ segment: "",
875
+ path: "",
876
+ title: Tt(e, ""),
877
+ clickable: e.clickable
878
+ }]
879
+ };
880
+ }
881
+ let s = a.map((e, t) => {
882
+ let n = a.slice(0, t + 1).join("/"), r = o[n];
883
+ if (!r) {
884
+ let e = Object.entries(o).find(([e]) => {
885
+ let t = e.split("/").map((e) => e.startsWith(":") ? "[^/]+" : e).join("/");
886
+ return RegExp(`^${t}$`).test(n);
887
+ })?.[1];
888
+ e && (r = e);
889
+ }
890
+ let i;
891
+ return i = r ? Tt(r, e) : decodeURIComponent(e), {
892
+ segment: e,
893
+ path: n,
894
+ title: i,
895
+ clickable: r?.clickable ?? !0
896
+ };
897
+ });
898
+ return {
899
+ basePath: t || null,
900
+ segments: s
901
+ };
902
+ }
903
+ //#endregion
904
+ //#region src/components/sidebar/dynamic-breadcrumb.tsx
905
+ var Ot = () => {
906
+ let { configurations: e } = B();
907
+ return Dt(u().pathname, e.basePath, e.modules, e.locale);
908
+ }, kt = () => {
909
+ let { basePath: e, segments: t } = Ot(), { overrides: n } = Re(), r = d("/:prefix/settings/:suffix"), i = H();
910
+ return r ? /* @__PURE__ */ M(vt, { children: /* @__PURE__ */ M(yt, { children: /* @__PURE__ */ M("div", {
911
+ className: "astw:inline-flex astw:items-center astw:gap-3 astw:last:text-foreground",
912
+ children: /* @__PURE__ */ M(bt, { children: /* @__PURE__ */ M(xt, {
913
+ to: `/${r.params.prefix}/settings`,
914
+ children: i("settings")
915
+ }) })
916
+ }) }) }) : /* @__PURE__ */ M(vt, { children: /* @__PURE__ */ M(yt, { children: t.map((r, i) => {
917
+ let a = e ? `/${e}/${r.path}` : `/${r.path}`, o = n.get(a) ?? r.title;
918
+ return /* @__PURE__ */ N("div", {
919
+ className: "astw:inline-flex astw:items-center astw:gap-3 astw:last:text-foreground",
920
+ children: [/* @__PURE__ */ M(bt, { children: r.clickable ? /* @__PURE__ */ M(xt, {
921
+ to: r.path,
922
+ children: o
923
+ }) : /* @__PURE__ */ M(St, {
924
+ ariaCurrent: i === t.length - 1 && "location",
925
+ children: o
926
+ }) }), i < t.length - 1 && /* @__PURE__ */ M(Ct, {})]
927
+ }, i);
928
+ }) }) });
929
+ }, At = [
930
+ {
931
+ rel: "icon",
932
+ type: "image/png",
933
+ sizes: "16x16",
934
+ href: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB5klEQVR4AYRSTUiUURQ9980MONG2ch1Ri2hTKK2iRYsgClyYkS3aVRBBi6RFi6EWCgVRYZmBrfzBQVDBlSAICupCxYULGZVxnBlHQVzp/Ph91+PDec7oOD7u9+5955177r2Pz6DKam/Xi39/6a0qFFQU6O/XQMcPfR0oYFl9DKLKOiXQ+VMfbG9gjjl/IAgf+khEgy0t+oS+hucycwJdv/Uqqw77ilEobpL1X3zciK9jcW8XC6IYymZxl3iZOYH8Pj7z5jGrTvpAfXwN31ZT6GI8QsHrRvAvl8NCU3O6runF1m1yrTkBEQQALO8k8WgtiZe+wbwCDwUYg8GdWDrTGs9sduyrTHu+94Fca07AnoCVHQ91qnjLTtKs2pBIbTfE1jPP1MOiQBvJ4zQaord2UgBMtJhRPI8lMxdyWljiCB/ZjXtAw5ZwtCz5KC5zHCHBB/3CxCtlFzwQ42QMaGcK8A58F0c8PLuvBD0W8FFwhHMDdRJOwBd8J/zp3FwSFOqKOYE372SO34waZMk5yxSCnpAXfF8kOIEiEA5jiuD9tjYkipj1IrNGzb2B7trmvr5LKYtxI5d7iUUikm/9KuMiwt/BdrNF0iuTH6+P9l6eKKHakHfWV96C2lgjoWvRntrOaPSpV4l0AAAA//+gJiqYAAAABklEQVQDALs5qJYoGXx6AAAAAElFTkSuQmCC"
935
+ },
936
+ {
937
+ rel: "icon",
938
+ type: "image/png",
939
+ sizes: "32x32",
940
+ href: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEKklEQVR4AcRWb2hbVRQ/5yWp07qJG9JUENkE1yooQ1AHEyr6QRH80KRbWFqEbvaP1E5nt6bbh0XRGFthc/mwtrOIte3WdZkfJoriEIUhMiZM0Y0y/DedaceK4NauNLlnv9ek2fvTtC9vhT3Oufecc8+f37vn5d5odIufmwJwYL+sA79zcJ884vY9XAFIJGR1z345zEKnwbsyTFFy+RQFoK9Plnd/IDGfol9FaBNqMlincn1ww44AHDkinu6EbJm5QqMo0gFeBs4Sk2gancoqxY+LAjiYkKqJFAoo+hDp/eAbxHSaFFU1vMqtujESkbsjOyXavlM+b2uT1bptMS4IAD1+AJzMKPqGhNZZEv0LvT41QY83vcbfNTSIr32HbJMMnUdr9sD/eY+HasjBYwOgb3dvQmJI9Au42pLjGjPFfNdobdM2/igaZdXeJi+svIt+gt8+8EpwlhStygoLjzYAE+NUpRTpfb4tH4o+E9OIlFBlYyvv3tLO/3e8IQ9FdsgXsH8mRBV5Xwj4Mi+AT0BclGwAWGi5KYrpnN7nplbe2NzMf3R0yCr0OaE0OoPCz5l8ia4iPrqslCriXfyVvrapduzR4OaxgWA49fWL9ZfMueFgAwBbnlDgYlqjDXqfe3qyfVZpGkVrWuDkBc+Rwhv3C6Pw+/wmWjNZXXupPBAe70sr+VFIwoh5pmQ6vWEuYG5eEIDGdKilhS9juyt+O08/I8jcZxhQ+CR76Em88Uudnfx3Tc2F2wPh1G5WmVESVQ+XfA0mXgHdRPlFkzWnKKHxWVGjOsxrwXlioj/BoXgXPRWP8ykS4WBdKqR8vrP4FbwNxzvBJhIhhJhMtCAAg2uJQRb8Et6bTlNlvIuHiVgCdaknguGxk/gZHiKi+8HzEuJs9WyGeSMNRrzCx/FOjuzdy1Oh0D/3VW9ODVCGvhei9QY3x2LRADJEST17oHZ844zHcw6AwtAxYXRBRQPAuf+fXoeV2kpCd+iyUxa9eRbnogEY4j0G2ZEo7P4jdFTAjdPN7ICberYYG4BMBgevzW1pDJo4aAEQzX5kS1PSnEU0/cQ221DPbJhU+PNBdAJYj3kVHTevLr1mA7B9O0/hrn8Wt1/g5df5rF5S6cMSMG717NFuyGUDYFgzimmjUrwsE8TcPDJQ/qU11hEAJrIhtyYqoOPglAPKW/pgcrCsm3BvkOVxBEDz0RAukl4cJFvXrKEfLDnmVQH6W6/GjyWHyl/5tH/F5XmdYHQEIBbjMVxAjbjv+xobeQZxBQlA/wLQ0NGhsqeHB8rOFHTMLTgCkPO1Tthek2lKY35rulRVHhv0z17TptUCimsAwnwxl1OIJKl56OGRwbI9x3vvnczZHU2uAXg9Wgzb/S7OzfXoc3DkE//vjipanFwDGO6/Z/TooH9X8rB/wY/SUs+mXgcAAP//Y00SeAAAAAZJREFUAwDulVhQYhOh1gAAAABJRU5ErkJggg=="
941
+ },
942
+ {
943
+ rel: "apple-touch-icon",
944
+ sizes: "180x180",
945
+ href: "data:image/png;base64,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"
946
+ }
947
+ ], jt = " · ", Mt = "data-app-shell-favicon", Nt = (e) => {
948
+ if (e.startsWith("data:")) return e.match(/^data:([^;,]+)/)?.[1];
949
+ if (e.endsWith(".svg")) return "image/svg+xml";
950
+ if (e.endsWith(".png")) return "image/png";
951
+ if (e.endsWith(".ico")) return "image/x-icon";
952
+ }, Pt = () => {
953
+ let { title: e, favicon: t } = B(), { basePath: n, segments: r } = Ot(), i = ze()?.overrides, a = r.at(-1), o;
954
+ if (a) {
955
+ let e = n ? `/${n}/${a.path}` : `/${a.path}`;
956
+ o = i?.get(e) ?? a.title;
957
+ }
958
+ let s = [o, e].filter(Boolean).join(jt), c = typeof document < "u" && document.head.querySelector(`link[rel~="icon"]:not([${Mt}])`), l;
959
+ return l = t ? [{
960
+ rel: "icon",
961
+ href: t,
962
+ type: Nt(t)
963
+ }] : c ? [] : At, /* @__PURE__ */ N(j, { children: [s ? /* @__PURE__ */ M("title", { children: s }) : null, l.map(({ rel: e, href: t, type: n, sizes: r }) => /* @__PURE__ */ M("link", {
964
+ rel: e,
965
+ href: t,
966
+ "data-app-shell-favicon": "",
967
+ ...n ? { type: n } : {},
968
+ ...r ? { sizes: r } : {}
969
+ }, `${e}-${r ?? "any"}`))] });
970
+ }, Ft = (e) => {
971
+ let { configurations: t, contentRoutes: n, children: r } = e, { loaderID: i, loader: o } = mt({
972
+ modules: t.modules,
973
+ locale: t.locale
974
+ }), s = t.errorBoundary, c = s ? [{
975
+ element: /* @__PURE__ */ M(a, {}),
976
+ ErrorBoundary: ct(s),
977
+ children: n
978
+ }] : n;
979
+ return {
980
+ id: i,
981
+ loader: o,
982
+ element: /* @__PURE__ */ N(j, { children: [/* @__PURE__ */ M(Pt, {}), r] }),
983
+ children: c,
984
+ HydrateFallback: () => null
985
+ };
986
+ }, It = {
987
+ createBrowserRouter: o,
988
+ createMemoryRouter: s
989
+ }, Lt = (e) => {
990
+ let { children: t } = e, { configurations: n } = B(), r = O(() => ft({
991
+ modules: n.modules,
992
+ settingsResources: n.settingsResources
993
+ }), [n.modules, n.settingsResources]), i = O(() => [Ft({
994
+ configurations: n,
995
+ contentRoutes: r,
996
+ children: t
997
+ })], [
998
+ n,
999
+ r,
1000
+ t
1001
+ ]), a = n.basePath ? "/" + n.basePath : void 0, o = e.memory ? e.initialEntries : void 0, s = O(() => e.memory ? It.createMemoryRouter(i, {
1002
+ basename: a,
1003
+ ...o ? { initialEntries: o } : {}
1004
+ }) : It.createBrowserRouter(i, { basename: a }), [
1005
+ a,
1006
+ o,
1007
+ e.memory,
1008
+ i
1009
+ ]);
1010
+ return /* @__PURE__ */ M(le, { router: s });
1011
+ }, Rt = w(null), Y = w(null);
1012
+ function zt({ children: e, searchSources: t = [] }) {
1013
+ let n = k(/* @__PURE__ */ new Map()), [r, i] = A([]), [a, o] = A(!1), [s, c] = A(null), l = T(() => {
1014
+ i(Array.from(n.current.values()).flat());
1015
+ }, []), u = T((e, t) => (n.current.set(e, t), l(), () => {
1016
+ n.current.delete(e), l();
1017
+ }), [l]), d = T(() => {
1018
+ c(null);
1019
+ }, []), f = T((e = {}) => {
1020
+ o(!0), c({ search: e.search });
1021
+ }, []);
1022
+ D(() => {
1023
+ let e = (e) => {
1024
+ (e.metaKey || e.ctrlKey) && e.key === "k" && (e.preventDefault(), o((e) => !e));
1025
+ };
1026
+ return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
1027
+ }, []);
1028
+ let p = O(() => ({ register: u }), [u]), m = O(() => ({
1029
+ actions: r,
1030
+ searchSources: t,
1031
+ open: a,
1032
+ setOpen: o,
1033
+ openRequest: s,
1034
+ clearOpenRequest: d,
1035
+ openCommandPalette: f
1036
+ }), [
1037
+ r,
1038
+ t,
1039
+ a,
1040
+ s,
1041
+ d,
1042
+ f
1043
+ ]);
1044
+ return /* @__PURE__ */ M(Rt.Provider, {
1045
+ value: p,
1046
+ children: /* @__PURE__ */ M(Y.Provider, {
1047
+ value: m,
1048
+ children: e
1049
+ })
1050
+ });
1051
+ }
1052
+ function Bt() {
1053
+ let e = E(Rt);
1054
+ if (!e) throw Error("useCommandPaletteDispatch must be used within CommandPaletteProvider");
1055
+ return e;
1056
+ }
1057
+ function Vt(e, t) {
1058
+ let n = re(), { register: r } = Bt(), i = k(t);
1059
+ i.current = t;
1060
+ let a = t.map((e) => `${e.key}\0${e.label}`).join("\n");
1061
+ D(() => r(n, i.current.map((t) => ({
1062
+ ...t,
1063
+ group: t.group ?? e,
1064
+ onSelect: () => i.current.find((e) => e.key === t.key)?.onSelect()
1065
+ }))), [
1066
+ n,
1067
+ r,
1068
+ a,
1069
+ e
1070
+ ]);
1071
+ }
1072
+ function Ht() {
1073
+ let e = E(Y);
1074
+ if (!e) throw Error("useCommandPaletteState must be used within CommandPaletteProvider");
1075
+ return e;
1076
+ }
1077
+ function Ut() {
1078
+ let e = E(Y);
1079
+ if (!e) throw Error("useOpenCommandPalette must be used within CommandPaletteProvider");
1080
+ return e.openCommandPalette;
1081
+ }
1082
+ function Wt() {
1083
+ let e = E(Y);
1084
+ if (!e) throw Error("useCommandPaletteActions must be used within CommandPaletteProvider");
1085
+ return e.actions;
1086
+ }
1087
+ //#endregion
1088
+ //#region src/components/dialog/dialog.tsx
1089
+ function Gt({ ...e }) {
1090
+ return /* @__PURE__ */ M(P.Root, {
1091
+ "data-slot": "dialog",
1092
+ ...e
1093
+ });
1094
+ }
1095
+ Gt.displayName = "Dialog.Root";
1096
+ function Kt({ ...e }) {
1097
+ return /* @__PURE__ */ M(P.Trigger, {
1098
+ "data-slot": "dialog-trigger",
1099
+ ...e
1100
+ });
1101
+ }
1102
+ Kt.displayName = "Dialog.Trigger";
1103
+ function qt({ ...e }) {
1104
+ return /* @__PURE__ */ M(P.Portal, {
1105
+ "data-slot": "dialog-portal",
1106
+ ...e
1107
+ });
1108
+ }
1109
+ qt.displayName = "Dialog.Portal";
1110
+ function Jt({ ...e }) {
1111
+ return /* @__PURE__ */ M(P.Close, {
1112
+ "data-slot": "dialog-close",
1113
+ ...e
1114
+ });
1115
+ }
1116
+ Jt.displayName = "Dialog.Close";
1117
+ function Yt({ className: e, ...t }) {
1118
+ return /* @__PURE__ */ M(P.Backdrop, {
1119
+ "data-slot": "dialog-overlay",
1120
+ className: F("astw:data-open:animate-in astw:data-ending-style:animate-out astw:data-ending-style:fade-out-0 astw:data-open:fade-in-0 astw:fill-mode-forwards astw:fixed astw:inset-0 astw:z-(--z-overlay) astw:bg-black/50", e),
1121
+ ...t
1122
+ });
1123
+ }
1124
+ Yt.displayName = "Dialog.Overlay";
1125
+ function Xt({ className: e, children: t, ...n }) {
1126
+ return /* @__PURE__ */ N(qt, {
1127
+ "data-slot": "dialog-portal",
1128
+ children: [/* @__PURE__ */ M(Yt, {}), /* @__PURE__ */ N(P.Popup, {
1129
+ "data-slot": "dialog-content",
1130
+ className: F("astw:bg-card astw:data-open:animate-in astw:data-ending-style:animate-out astw:data-ending-style:fade-out-0 astw:data-open:fade-in-0 astw:data-ending-style:zoom-out-95 astw:data-open:zoom-in-95 astw:fill-mode-forwards astw:fixed astw:top-[50%] astw:left-[50%] astw:z-(--z-overlay) astw:grid astw:w-full astw:max-w-[calc(100%-2rem)] astw:translate-x-[-50%] astw:translate-y-[-50%] astw:gap-4 astw:rounded-lg astw:border astw:border-border astw:p-6 astw:shadow-lg astw:duration-200 astw:sm:max-w-lg", e),
1131
+ ...n,
1132
+ children: [t, /* @__PURE__ */ N(P.Close, {
1133
+ className: "astw:ring-offset-bg astw:focus:ring-ring astw:data-open:bg-accent astw:data-open:text-muted-foreground astw:absolute astw:top-4 astw:right-4 astw:rounded-xs astw:opacity-70 astw:transition-opacity astw:hover:opacity-100 astw:focus:ring-2 astw:focus:ring-offset-2 astw:focus:outline-hidden astw:disabled:pointer-events-none astw:[&_svg]:pointer-events-none astw:[&_svg]:shrink-0 astw:[&_svg:not([class*='size-'])]:size-4",
1134
+ children: [/* @__PURE__ */ M(ne, {}), /* @__PURE__ */ M("span", {
1135
+ className: "astw:sr-only",
1136
+ children: "Close"
1137
+ })]
1138
+ })]
1139
+ })]
1140
+ });
1141
+ }
1142
+ Xt.displayName = "Dialog.Content";
1143
+ function Zt({ className: e, ...t }) {
1144
+ return /* @__PURE__ */ M("div", {
1145
+ "data-slot": "dialog-header",
1146
+ className: F("astw:flex astw:flex-col astw:gap-2 astw:text-center astw:sm:text-left", e),
1147
+ ...t
1148
+ });
1149
+ }
1150
+ Zt.displayName = "Dialog.Header";
1151
+ function Qt({ className: e, ...t }) {
1152
+ return /* @__PURE__ */ M("div", {
1153
+ "data-slot": "dialog-footer",
1154
+ className: F("astw:flex astw:flex-col-reverse astw:gap-2 astw:sm:flex-row astw:sm:justify-end", e),
1155
+ ...t
1156
+ });
1157
+ }
1158
+ Qt.displayName = "Dialog.Footer";
1159
+ function $t({ className: e, ...t }) {
1160
+ return /* @__PURE__ */ M(P.Title, {
1161
+ "data-slot": "dialog-title",
1162
+ className: F("astw:text-lg astw:leading-none astw:font-semibold", e),
1163
+ ...t
1164
+ });
1165
+ }
1166
+ $t.displayName = "Dialog.Title";
1167
+ function en({ className: e, ...t }) {
1168
+ return /* @__PURE__ */ M(P.Description, {
1169
+ "data-slot": "dialog-description",
1170
+ className: F("astw:text-muted-foreground astw:text-sm", e),
1171
+ ...t
1172
+ });
1173
+ }
1174
+ en.displayName = "Dialog.Description";
1175
+ var X = {
1176
+ Root: Gt,
1177
+ Close: Jt,
1178
+ Content: Xt,
1179
+ Description: en,
1180
+ Footer: Qt,
1181
+ Header: Zt,
1182
+ Title: $t,
1183
+ Trigger: Kt
1184
+ }, tn = [
1185
+ "astw:border-input astw:flex astw:w-full astw:min-w-0 astw:rounded-md astw:border astw:bg-transparent astw:px-3 astw:text-base astw:shadow-xs astw:outline-none astw:md:text-sm",
1186
+ "astw:dark:bg-input/30 astw:transition-[color,box-shadow]",
1187
+ "astw:selection:bg-primary astw:selection:text-primary-foreground",
1188
+ "astw:placeholder:text-muted-foreground",
1189
+ "astw:focus-visible:border-ring astw:focus-visible:ring-ring/50 astw:focus-visible:ring-[3px]",
1190
+ "astw:disabled:pointer-events-none astw:disabled:cursor-not-allowed astw:disabled:opacity-50"
1191
+ ], nn = [...tn, "astw:h-9 astw:py-1"], rn = [...tn, "astw:min-h-16 astw:py-2 astw:resize-y"];
1192
+ //#endregion
1193
+ //#region src/components/input/input.tsx
1194
+ function an({ className: e, type: t, ...n }) {
1195
+ return /* @__PURE__ */ M("input", {
1196
+ type: t,
1197
+ "data-slot": "input",
1198
+ className: F(nn, "astw:file:text-foreground astw:file:inline-flex astw:file:h-7 astw:file:border-0 astw:file:bg-transparent astw:file:text-sm astw:file:font-medium", "astw:aria-invalid:ring-destructive/20 astw:dark:aria-invalid:ring-destructive/40 astw:aria-invalid:border-destructive", e),
1199
+ ...n
1200
+ });
1201
+ }
1202
+ //#endregion
1203
+ //#region src/components/command-palette/command-palette.tsx
1204
+ var Z = "astw:relative astw:flex astw:w-full astw:cursor-pointer astw:select-none astw:rounded-sm astw:px-2 astw:py-2 astw:text-sm astw:outline-none astw:text-left", Q = (e) => e ? "astw:bg-accent astw:text-accent-foreground" : "astw:hover:bg-accent astw:hover:text-accent-foreground";
1205
+ function on(e) {
1206
+ let t = [], n = (e, r, i) => {
1207
+ e.forEach((e) => {
1208
+ let a = [...i, e.title];
1209
+ e.url && t.push({
1210
+ path: e.url,
1211
+ title: e.title,
1212
+ icon: r,
1213
+ breadcrumb: a
1214
+ }), e.items && e.items.length > 0 && n(e.items, r, a);
1215
+ });
1216
+ };
1217
+ return e.forEach((e) => {
1218
+ e.url && t.push({
1219
+ path: e.url,
1220
+ title: e.title,
1221
+ icon: e.icon,
1222
+ breadcrumb: [e.title]
1223
+ }), n(e.items, e.icon, [e.title]);
1224
+ }), t;
1225
+ }
1226
+ function sn(e, t) {
1227
+ if (!t.trim()) return e;
1228
+ let n = t.toLowerCase();
1229
+ return e.filter((e) => e.label.toLowerCase().includes(n));
1230
+ }
1231
+ var cn = 300, ln = {
1232
+ mode: "browse",
1233
+ search: "",
1234
+ selectedIndex: 0
1235
+ }, un = [];
1236
+ function dn(e, t) {
1237
+ switch (t.type) {
1238
+ case "SET_SEARCH": return e.mode === "search" ? {
1239
+ ...e,
1240
+ query: t.value,
1241
+ selectedIndex: 0
1242
+ } : t.detectedSource ? {
1243
+ mode: "search",
1244
+ source: t.detectedSource,
1245
+ query: t.detectedQuery ?? "",
1246
+ selectedIndex: 0,
1247
+ results: [],
1248
+ isSearching: !1
1249
+ } : {
1250
+ ...e,
1251
+ search: t.value,
1252
+ selectedIndex: 0
1253
+ };
1254
+ case "INITIALIZE_SEARCH": return t.detectedSource ? {
1255
+ mode: "search",
1256
+ source: t.detectedSource,
1257
+ query: t.detectedQuery ?? "",
1258
+ selectedIndex: 0,
1259
+ results: [],
1260
+ isSearching: !1
1261
+ } : {
1262
+ mode: "browse",
1263
+ search: t.value,
1264
+ selectedIndex: 0
1265
+ };
1266
+ case "ENTER_SEARCH_MODE": return {
1267
+ mode: "search",
1268
+ source: t.source,
1269
+ query: "",
1270
+ selectedIndex: 0,
1271
+ results: [],
1272
+ isSearching: !1
1273
+ };
1274
+ case "EXIT_SEARCH_MODE": return ln;
1275
+ case "SEARCH_START": return e.mode === "search" ? {
1276
+ ...e,
1277
+ isSearching: !0,
1278
+ results: []
1279
+ } : e;
1280
+ case "SEARCH_DONE": return e.mode === "search" ? {
1281
+ ...e,
1282
+ results: t.results,
1283
+ isSearching: !1
1284
+ } : e;
1285
+ case "SEARCH_FAIL": return e.mode === "search" ? {
1286
+ ...e,
1287
+ results: [],
1288
+ isSearching: !1
1289
+ } : e;
1290
+ case "ARROW_DOWN": return {
1291
+ ...e,
1292
+ selectedIndex: Math.min(e.selectedIndex + 1, t.maxIndex)
1293
+ };
1294
+ case "ARROW_UP": return {
1295
+ ...e,
1296
+ selectedIndex: Math.max(e.selectedIndex - 1, 0)
1297
+ };
1298
+ case "RESET": return ln;
1299
+ }
1300
+ }
1301
+ function fn(e, t) {
1302
+ let n = e.indexOf(":");
1303
+ if (n < 1) return {
1304
+ activeSource: null,
1305
+ searchQuery: e
1306
+ };
1307
+ let r = e.slice(0, n), i = t.find((e) => e.prefix === r);
1308
+ return i ? {
1309
+ activeSource: i,
1310
+ searchQuery: e.slice(n + 1).trimStart()
1311
+ } : {
1312
+ activeSource: null,
1313
+ searchQuery: e
1314
+ };
1315
+ }
1316
+ function pn({ routes: e, contextualActions: t = [], searchSources: n = [], open: r, setOpen: i }) {
1317
+ let a = f(), o = k(null), [s, c] = ie(dn, ln), l = k(null), u = s.mode === "search" ? s.query : s.search, d = s.selectedIndex, p = s.mode === "search" ? s.source : null, m = s.mode === "search" ? s.results : un, h = s.mode === "search" && s.isSearching, g = O(() => p ? [] : sn(t, u), [
1318
+ t,
1319
+ u,
1320
+ p
1321
+ ]), _ = O(() => p ? [] : wt(e, u), [
1322
+ e,
1323
+ u,
1324
+ p
1325
+ ]);
1326
+ D(() => {
1327
+ if (!p) {
1328
+ l.current?.abort(), l.current = null;
1329
+ return;
1330
+ }
1331
+ let e = setTimeout(() => {
1332
+ c({ type: "SEARCH_START" }), l.current?.abort();
1333
+ let e = new AbortController();
1334
+ l.current = e, p.search(u, { signal: e.signal }).then((t) => {
1335
+ e.signal.aborted || c({
1336
+ type: "SEARCH_DONE",
1337
+ results: t
1338
+ });
1339
+ }).catch(() => {
1340
+ e.signal.aborted || c({ type: "SEARCH_FAIL" });
1341
+ });
1342
+ }, cn);
1343
+ return () => {
1344
+ clearTimeout(e), l.current?.abort(), l.current = null;
1345
+ };
1346
+ }, [p, u]);
1347
+ let v = O(() => {
1348
+ if (p) return m.map((e) => ({
1349
+ type: "search-result",
1350
+ result: e,
1351
+ source: p
1352
+ }));
1353
+ let e = [];
1354
+ if (n.length > 0) {
1355
+ let t = u.trim().toLowerCase(), r = t ? n.filter((e) => e.prefix.toLowerCase().includes(t) || e.title.toLowerCase().includes(t)) : n;
1356
+ e.push(...r.map((e) => ({
1357
+ type: "search-mode",
1358
+ source: e
1359
+ })));
1360
+ }
1361
+ return e.push(...g.map((e) => ({
1362
+ type: "action",
1363
+ action: e
1364
+ }))), e.push(..._.map((e) => ({
1365
+ type: "route",
1366
+ route: e
1367
+ }))), e;
1368
+ }, [
1369
+ p,
1370
+ m,
1371
+ u,
1372
+ n,
1373
+ g,
1374
+ _
1375
+ ]), y = T((e) => {
1376
+ if (s.mode === "search") {
1377
+ c({
1378
+ type: "SET_SEARCH",
1379
+ value: e
1380
+ });
1381
+ return;
1382
+ }
1383
+ let t = fn(e, n);
1384
+ c({
1385
+ type: "SET_SEARCH",
1386
+ value: e,
1387
+ detectedSource: t.activeSource ?? void 0,
1388
+ detectedQuery: t.activeSource ? t.searchQuery : void 0
1389
+ });
1390
+ }, [s.mode, n]), b = T((e) => {
1391
+ let t = fn(e, n);
1392
+ c({
1393
+ type: "INITIALIZE_SEARCH",
1394
+ value: e,
1395
+ detectedSource: t.activeSource ?? void 0,
1396
+ detectedQuery: t.activeSource ? t.searchQuery : void 0
1397
+ });
1398
+ }, [n]), x = T((e) => {
1399
+ i(e), e || (c({ type: "RESET" }), l.current?.abort(), l.current = null);
1400
+ }, [i]);
1401
+ D(() => {
1402
+ o.current && o.current.querySelector(`[data-index="${d}"]`)?.scrollIntoView({ block: "nearest" });
1403
+ }, [d]);
1404
+ let S = T((e) => {
1405
+ if (e.type === "search-mode") {
1406
+ c({
1407
+ type: "ENTER_SEARCH_MODE",
1408
+ source: e.source
1409
+ });
1410
+ return;
1411
+ }
1412
+ if (e.type === "search-result") a(e.result.path);
1413
+ else if (e.type === "route") a(e.route.path);
1414
+ else {
1415
+ let t = e.action.onSelect();
1416
+ t instanceof Promise && t.catch((e) => console.error("[CommandPalette] onSelect error:", e));
1417
+ }
1418
+ i(!1), c({ type: "RESET" });
1419
+ }, [a, i]);
1420
+ return {
1421
+ open: r,
1422
+ handleOpenChange: x,
1423
+ search: u,
1424
+ setSearch: y,
1425
+ initializeSearch: b,
1426
+ selectedIndex: d,
1427
+ filteredActions: g,
1428
+ filteredRoutes: _,
1429
+ searchResults: m,
1430
+ activeSearchSource: p,
1431
+ isSearching: h,
1432
+ selectableItems: v,
1433
+ handleSelectItem: S,
1434
+ handleKeyDown: T((e) => {
1435
+ if (!e.nativeEvent.isComposing) switch (e.key) {
1436
+ case "ArrowDown":
1437
+ e.preventDefault(), c({
1438
+ type: "ARROW_DOWN",
1439
+ maxIndex: v.length - 1
1440
+ });
1441
+ break;
1442
+ case "ArrowUp":
1443
+ e.preventDefault(), c({ type: "ARROW_UP" });
1444
+ break;
1445
+ case "Enter":
1446
+ e.preventDefault(), v[d] && S(v[d]);
1447
+ break;
1448
+ case "Backspace": p && u === "" && (e.preventDefault(), c({ type: "EXIT_SEARCH_MODE" }), l.current?.abort(), l.current = null);
1449
+ }
1450
+ }, [
1451
+ v,
1452
+ d,
1453
+ S,
1454
+ p,
1455
+ u
1456
+ ]),
1457
+ listRef: o
1458
+ };
1459
+ }
1460
+ function mn({ navItems: e, extraRoutes: t = [] }) {
1461
+ let n = H(), r = Wt(), { searchSources: i, open: a, setOpen: o, openRequest: s, clearOpenRequest: c } = Ht(), { open: l, handleOpenChange: u, search: d, setSearch: f, initializeSearch: p, selectedIndex: m, filteredActions: h, filteredRoutes: g, searchResults: _, activeSearchSource: v, isSearching: y, selectableItems: b, handleSelectItem: x, handleKeyDown: te, listRef: ne } = pn({
1462
+ routes: O(() => [...on(e), ...t], [t, e]),
1463
+ contextualActions: r,
1464
+ searchSources: i,
1465
+ open: a,
1466
+ setOpen: o
1467
+ });
1468
+ D(() => {
1469
+ s && (p(s.search ?? ""), c());
1470
+ }, [
1471
+ s,
1472
+ p,
1473
+ c
1474
+ ]);
1475
+ let C = v ? [] : b.filter((e) => e.type === "search-mode"), w = C.length, T = w, E = T + h.length;
1476
+ return /* @__PURE__ */ M(X.Root, {
1477
+ open: l,
1478
+ onOpenChange: u,
1479
+ children: /* @__PURE__ */ N(X.Content, {
1480
+ className: "astw:p-0 astw:gap-0 astw:sm:max-w-2xl astw:overflow-hidden astw:top-[30%] astw:translate-y-[-30%]",
1481
+ onKeyDown: te,
1482
+ "aria-describedby": void 0,
1483
+ children: [
1484
+ /* @__PURE__ */ M(X.Title, {
1485
+ className: "astw:sr-only",
1486
+ children: n("commandPaletteSearch")
1487
+ }),
1488
+ /* @__PURE__ */ N("div", {
1489
+ className: "astw:flex astw:items-center astw:border-b astw:border-border astw:px-3 astw:py-1",
1490
+ children: [
1491
+ /* @__PURE__ */ M(ee, { className: "astw:mr-2 astw:h-4 astw:w-4 astw:shrink-0 astw:opacity-50" }),
1492
+ v && /* @__PURE__ */ M("span", {
1493
+ className: "astw:inline-flex astw:items-center astw:shrink-0 astw:rounded astw:bg-muted astw:px-1.5 astw:py-0.5 astw:mr-1.5 astw:text-xs astw:font-medium astw:text-muted-foreground",
1494
+ children: v.prefix
1495
+ }),
1496
+ /* @__PURE__ */ M(an, {
1497
+ value: d,
1498
+ onChange: (e) => f(e.target.value),
1499
+ placeholder: n("commandPaletteSearch"),
1500
+ className: "astw:flex astw:h-10 astw:w-full astw:rounded-md astw:bg-transparent astw:py-3 astw:text-sm astw:outline-none astw:border-0 astw:shadow-none astw:focus-visible:ring-0 astw:placeholder:text-muted-foreground astw:disabled:cursor-not-allowed astw:disabled:opacity-50",
1501
+ autoFocus: !0
1502
+ })
1503
+ ]
1504
+ }),
1505
+ /* @__PURE__ */ N("div", {
1506
+ ref: ne,
1507
+ className: "astw:max-h-[50vh] astw:overflow-y-auto astw:overflow-x-hidden",
1508
+ children: [b.length === 0 && !y ? /* @__PURE__ */ M("div", {
1509
+ className: "astw:py-6 astw:text-center astw:text-sm astw:text-muted-foreground",
1510
+ children: n("commandPaletteNoResults")
1511
+ }) : /* @__PURE__ */ N("div", {
1512
+ className: "astw:p-1",
1513
+ children: [
1514
+ w > 0 && /* @__PURE__ */ N(j, { children: [/* @__PURE__ */ M("div", {
1515
+ className: "astw:px-2 astw:py-1.5 astw:text-xs astw:font-medium astw:text-muted-foreground",
1516
+ children: n("commandPaletteSearchModes")
1517
+ }), C.map((e, t) => {
1518
+ let n = e.type === "search-mode" ? e.source : null;
1519
+ return n ? /* @__PURE__ */ N("button", {
1520
+ "data-index": t,
1521
+ onClick: () => x({
1522
+ type: "search-mode",
1523
+ source: n
1524
+ }),
1525
+ className: F(Z, "astw:items-center astw:gap-2", Q(t === m)),
1526
+ children: [
1527
+ n.icon && /* @__PURE__ */ M("span", {
1528
+ className: "astw:flex astw:size-4 astw:items-center astw:justify-center astw:shrink-0",
1529
+ children: n.icon
1530
+ }),
1531
+ /* @__PURE__ */ N("span", {
1532
+ className: "astw:font-mono astw:text-xs astw:text-muted-foreground astw:shrink-0",
1533
+ children: [n.prefix, ":"]
1534
+ }),
1535
+ /* @__PURE__ */ M("span", {
1536
+ className: "astw:truncate",
1537
+ children: n.title
1538
+ })
1539
+ ]
1540
+ }, `search-mode-${n.prefix}`) : null;
1541
+ })] }),
1542
+ h.length > 0 && /* @__PURE__ */ N(j, { children: [/* @__PURE__ */ M("div", {
1543
+ className: "astw:px-2 astw:py-1.5 astw:text-xs astw:font-medium astw:text-muted-foreground",
1544
+ children: n("commandPaletteActions")
1545
+ }), h.map((e, t) => {
1546
+ let n = T + t;
1547
+ return /* @__PURE__ */ N("button", {
1548
+ "data-index": n,
1549
+ onClick: () => x({
1550
+ type: "action",
1551
+ action: e
1552
+ }),
1553
+ className: F(Z, "astw:items-center astw:gap-2", Q(n === m)),
1554
+ children: [
1555
+ e.icon && /* @__PURE__ */ M("span", {
1556
+ className: "astw:flex astw:size-4 astw:items-center astw:justify-center astw:shrink-0",
1557
+ children: e.icon
1558
+ }),
1559
+ /* @__PURE__ */ M("span", {
1560
+ className: "astw:truncate",
1561
+ children: e.label
1562
+ }),
1563
+ e.group && /* @__PURE__ */ M("span", {
1564
+ className: "astw:ml-auto astw:text-xs astw:text-muted-foreground astw:shrink-0",
1565
+ children: e.group
1566
+ })
1567
+ ]
1568
+ }, `action-${e.key}`);
1569
+ })] }),
1570
+ g.length > 0 && /* @__PURE__ */ N(j, { children: [/* @__PURE__ */ M("div", {
1571
+ className: "astw:px-2 astw:py-1.5 astw:text-xs astw:font-medium astw:text-muted-foreground",
1572
+ children: n("commandPalettePages")
1573
+ }), g.map((e, t) => {
1574
+ let n = E + t;
1575
+ return /* @__PURE__ */ N("button", {
1576
+ "data-index": n,
1577
+ onClick: () => x({
1578
+ type: "route",
1579
+ route: e
1580
+ }),
1581
+ className: F(Z, "astw:flex-col astw:items-start", Q(n === m)),
1582
+ children: [/* @__PURE__ */ M("span", {
1583
+ className: "astw:truncate astw:w-full astw:text-left",
1584
+ children: e.breadcrumb.join(" > ")
1585
+ }), /* @__PURE__ */ M("span", {
1586
+ className: "astw:text-[11px] astw:text-muted-foreground astw:truncate astw:w-full astw:text-left",
1587
+ children: e.path.startsWith("/") ? e.path : `/${e.path}`
1588
+ })]
1589
+ }, e.path);
1590
+ })] }),
1591
+ v && _.length > 0 && /* @__PURE__ */ N(j, { children: [/* @__PURE__ */ M("div", {
1592
+ className: "astw:px-2 astw:py-1.5 astw:text-xs astw:font-medium astw:text-muted-foreground",
1593
+ children: v.title
1594
+ }), _.map((e, t) => /* @__PURE__ */ N("button", {
1595
+ "data-index": t,
1596
+ onClick: () => x({
1597
+ type: "search-result",
1598
+ result: e,
1599
+ source: v
1600
+ }),
1601
+ className: F(Z, "astw:flex-col astw:items-start", Q(t === m)),
1602
+ children: [/* @__PURE__ */ N("span", {
1603
+ className: "astw:flex astw:items-center astw:gap-2 astw:w-full",
1604
+ children: [(e.icon || v.icon) && /* @__PURE__ */ M("span", {
1605
+ className: "astw:flex astw:size-4 astw:items-center astw:justify-center astw:shrink-0",
1606
+ children: e.icon ?? v.icon
1607
+ }), /* @__PURE__ */ M("span", {
1608
+ className: "astw:truncate",
1609
+ children: e.label
1610
+ })]
1611
+ }), e.description && /* @__PURE__ */ M("span", {
1612
+ className: "astw:text-[11px] astw:text-muted-foreground astw:truncate astw:w-full astw:text-left",
1613
+ children: e.description
1614
+ })]
1615
+ }, `search-result-${e.key}`))] })
1616
+ ]
1617
+ }), y && /* @__PURE__ */ N("div", {
1618
+ className: "astw:flex astw:items-center astw:justify-center astw:gap-2 astw:py-4 astw:text-sm astw:text-muted-foreground",
1619
+ children: [/* @__PURE__ */ M(S, { className: "astw:h-4 astw:w-4 astw:animate-spin" }), n("commandPaletteSearching")]
1620
+ })]
1621
+ })
1622
+ ]
1623
+ })
1624
+ });
1625
+ }
1626
+ function hn() {
1627
+ return null;
1628
+ }
1629
+ function gn() {
1630
+ let e = ht(), n = qe();
1631
+ return /* @__PURE__ */ M(C, {
1632
+ fallback: null,
1633
+ children: /* @__PURE__ */ M(t, {
1634
+ resolve: e,
1635
+ children: (e) => /* @__PURE__ */ M(mn, {
1636
+ navItems: e ?? [],
1637
+ extraRoutes: [n]
1638
+ })
1639
+ })
1640
+ });
1641
+ }
1642
+ //#endregion
1643
+ //#region src/hooks/use-is-client.ts
1644
+ var _n = () => () => {}, vn = () => !0, yn = () => !1;
1645
+ function bn() {
1646
+ return ae(_n, vn, yn);
1647
+ }
1648
+ //#endregion
1649
+ //#region src/fs-routes/converter.tsx
1650
+ function xn(e) {
1651
+ let t = {
1652
+ path: "",
1653
+ fullPath: "",
1654
+ guards: [],
1655
+ children: /* @__PURE__ */ new Map()
1656
+ };
1657
+ for (let n of e) {
1658
+ let e = de(n.path), r = t, i = "";
1659
+ for (let t of e) t.type !== "group" && (i = i ? `${i}/${t.converted}` : t.converted, r.children.has(t.converted) || r.children.set(t.converted, {
1660
+ path: t.converted,
1661
+ fullPath: i,
1662
+ guards: [],
1663
+ children: /* @__PURE__ */ new Map()
1664
+ }), r = r.children.get(t.converted));
1665
+ r.component = n.component, r.guards = n.component.appShellPageProps?.guards ?? [];
1666
+ }
1667
+ return t;
1668
+ }
1669
+ function Sn(e, t) {
1670
+ return e?.appShellPageProps?.meta?.title ?? q(t);
1671
+ }
1672
+ function Cn(e) {
1673
+ let t = e.component, n = Sn(t, e.path), r = t?.appShellPageProps?.meta?.icon, i = t?.appShellPageProps?.meta?.breadcrumbTitle, a = e.guards && e.guards.length > 0 ? K(e.guards) : void 0, o = [];
1674
+ for (let t of e.children.values()) o.push(Cn(t));
1675
+ return {
1676
+ _type: "resource",
1677
+ type: "component",
1678
+ path: e.path,
1679
+ meta: {
1680
+ title: n,
1681
+ icon: r,
1682
+ ...i === void 0 ? {} : { breadcrumbTitle: i }
1683
+ },
1684
+ component: t ? () => /* @__PURE__ */ M(t, {}) : void 0,
1685
+ subResources: o.length > 0 ? o : void 0,
1686
+ errorBoundary: /* @__PURE__ */ M(U, {}),
1687
+ guards: e.guards,
1688
+ loader: a
1689
+ };
1690
+ }
1691
+ function wn(e) {
1692
+ let t = e.component, n = Sn(t, e.path), r = t?.appShellPageProps?.meta?.icon, i = t?.appShellPageProps?.meta?.breadcrumbTitle, a = e.guards && e.guards.length > 0 ? K(e.guards) : void 0, o = [];
1693
+ for (let t of e.children.values()) o.push(Cn(t));
1694
+ return {
1695
+ _type: "module",
1696
+ type: "component",
1697
+ path: e.path,
1698
+ meta: {
1699
+ title: n,
1700
+ icon: r,
1701
+ ...i === void 0 ? {} : { breadcrumbTitle: i },
1702
+ menuItemClickable: t !== void 0
1703
+ },
1704
+ component: t ? () => /* @__PURE__ */ M(t, {}) : void 0,
1705
+ resources: o,
1706
+ errorBoundary: /* @__PURE__ */ M(U, {}),
1707
+ guards: e.guards,
1708
+ loader: a
1709
+ };
1710
+ }
1711
+ function Tn(e) {
1712
+ if (e.length === 0) return [];
1713
+ let t = xn(e), n = [];
1714
+ if (t.component) {
1715
+ let e = wn({
1716
+ ...t,
1717
+ path: "",
1718
+ children: /* @__PURE__ */ new Map()
1719
+ });
1720
+ n.push(e);
1721
+ }
1722
+ for (let e of t.children.values()) n.push(wn(e));
1723
+ return n;
1724
+ }
1725
+ //#endregion
1726
+ //#region src/components/appshell/appshell.tsx
1727
+ var $ = (e) => {
1728
+ let t = bn();
1729
+ Te(e.contextData ?? {});
1730
+ let { modules: n, rootComponent: r, rootGuards: i } = e, a = e.memory ? {
1731
+ memory: !0,
1732
+ initialEntries: e.initialEntries
1733
+ } : { memory: !1 }, o = O(() => n && (n.some((e) => e.path === "") ? ((r || i?.length) && console.warn("[AppShell] Both a root module (path=\"\") and rootComponent/rootGuards are provided. The root module takes precedence; rootComponent and rootGuards will be ignored. Define guards directly on the root module instead."), n) : r || i?.length ? [Ae({
1734
+ path: "",
1735
+ ...r ? {
1736
+ meta: {
1737
+ title: V.t("home"),
1738
+ icon: /* @__PURE__ */ M(x, {})
1739
+ },
1740
+ component: () => r()
1741
+ } : { meta: {} },
1742
+ guards: i,
1743
+ resources: []
1744
+ }), ...n] : n), [
1745
+ n,
1746
+ r,
1747
+ i
1748
+ ]), s = O(() => o ? _e({
1749
+ modules: o,
1750
+ settingsResources: e.settingsResources,
1751
+ basePath: e.basePath,
1752
+ errorBoundary: e.errorBoundary,
1753
+ locale: e.locale,
1754
+ timeZone: e.timeZone
1755
+ }) : null, [
1756
+ o,
1757
+ e.settingsResources,
1758
+ e.basePath,
1759
+ e.errorBoundary,
1760
+ e.locale,
1761
+ e.timeZone
1762
+ ]), c = O(() => s ? {
1763
+ title: e.title,
1764
+ icon: e.icon,
1765
+ favicon: e.favicon,
1766
+ appInfo: e.appInfo,
1767
+ configurations: s
1768
+ } : null, [
1769
+ e.title,
1770
+ e.icon,
1771
+ e.favicon,
1772
+ e.appInfo,
1773
+ s
1774
+ ]), l = O(() => ({ contextData: e.contextData ?? {} }), [e.contextData]);
1775
+ if (!o || !c) {
1776
+ let e = "[AppShell] No routes configured. Either use the appShellRoutes() vite-plugin for automatic page configuration, or pass the 'modules' prop for manual configuration.";
1777
+ return console.error(e), /* @__PURE__ */ M("div", {
1778
+ className: "astw:flex astw:min-h-screen astw:items-center astw:justify-center astw:bg-background astw:p-4",
1779
+ children: /* @__PURE__ */ N("div", {
1780
+ className: "astw:max-w-md astw:rounded-lg astw:border astw:border-destructive/50 astw:bg-destructive/10 astw:p-6 astw:text-center",
1781
+ children: [/* @__PURE__ */ M("h1", {
1782
+ className: "astw:mb-2 astw:text-lg astw:font-semibold astw:text-destructive",
1783
+ children: "Configuration Error"
1784
+ }), /* @__PURE__ */ M("p", {
1785
+ className: "astw:text-sm astw:text-muted-foreground",
1786
+ children: e
1787
+ })]
1788
+ })
1789
+ });
1790
+ }
1791
+ return t ? /* @__PURE__ */ M(R.Provider, {
1792
+ value: c,
1793
+ children: /* @__PURE__ */ M(z.Provider, {
1794
+ value: l,
1795
+ children: /* @__PURE__ */ M(Le, { children: /* @__PURE__ */ M(zt, {
1796
+ searchSources: e.searchSources,
1797
+ children: /* @__PURE__ */ M(nt, {
1798
+ defaultColorTheme: e.defaultColorTheme,
1799
+ children: /* @__PURE__ */ N(Lt, {
1800
+ ...a,
1801
+ children: [e.children, /* @__PURE__ */ M(gn, {})]
1802
+ })
1803
+ })
1804
+ }) })
1805
+ })
1806
+ }) : null;
1807
+ };
1808
+ $.WithPages = (e) => {
1809
+ let t = Tn(e);
1810
+ return (e) => /* @__PURE__ */ M($, {
1811
+ ...e,
1812
+ modules: t,
1813
+ memory: !1
1814
+ });
1815
+ };
1816
+ var En = (e) => /* @__PURE__ */ M($, {
1817
+ ...e,
1818
+ memory: !1
1819
+ });
1820
+ En.WithPages = $.WithPages;
1821
+ var Dn = En;
1822
+ //#endregion
1823
+ export { L as A, H as C, ve as D, B as E, fe as M, F as N, be as O, Oe as S, ye as T, J as _, nn as a, De as b, Ht as c, kt as d, ht as f, Be as g, rt as h, an as i, I as j, xe as k, Ut as l, Xe as m, $ as n, rn as o, ot as p, hn as r, X as s, Dn as t, Vt as u, Ae as v, Ce as w, Ee as x, je as y };