@lumal/core 0.0.1-beta

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 (271) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +16 -0
  3. package/dist/LumalThemeSettingsPanel-BFkZzwEW.js +685 -0
  4. package/dist/LumalThemeSettingsPanel-C6aPhgUX.cjs +1 -0
  5. package/dist/_plugin-vue_export-helper-B3ysoDQm.js +8 -0
  6. package/dist/_plugin-vue_export-helper-BTmtiIyf.cjs +1 -0
  7. package/dist/auth.cjs +1 -0
  8. package/dist/auth.js +127 -0
  9. package/dist/components-DJiHYQQB.cjs +2 -0
  10. package/dist/components-DYmKh-eF.js +2206 -0
  11. package/dist/components.cjs +1 -0
  12. package/dist/components.js +3 -0
  13. package/dist/composables-C4twj5Ov.cjs +1 -0
  14. package/dist/composables-C9EuCUjj.js +130 -0
  15. package/dist/composables.cjs +1 -0
  16. package/dist/composables.js +148 -0
  17. package/dist/core.css +2 -0
  18. package/dist/dictionary-B7tsaVqB.js +19 -0
  19. package/dist/dictionary-ClEWtQCU.cjs +1 -0
  20. package/dist/dictionary.cjs +1 -0
  21. package/dist/dictionary.js +3 -0
  22. package/dist/directive-D-fB5qbY.js +16 -0
  23. package/dist/directive-DSVr7QvO.cjs +1 -0
  24. package/dist/directives.cjs +1 -0
  25. package/dist/directives.js +11 -0
  26. package/dist/index.cjs +1 -0
  27. package/dist/index.js +88 -0
  28. package/dist/layout-C8H9wuQa.js +2075 -0
  29. package/dist/layout-ZnyG9X3N.cjs +1 -0
  30. package/dist/layout.cjs +1 -0
  31. package/dist/layout.js +2 -0
  32. package/dist/permission-6sXtjGMS.cjs +1 -0
  33. package/dist/permission-CCkqvnWg.js +104 -0
  34. package/dist/permission.cjs +1 -0
  35. package/dist/permission.js +3 -0
  36. package/dist/request.cjs +1 -0
  37. package/dist/request.js +277 -0
  38. package/dist/router.cjs +1 -0
  39. package/dist/router.js +510 -0
  40. package/dist/src/app/createLumalAdmin.d.ts +4 -0
  41. package/dist/src/app/createLumalAdmin.d.ts.map +1 -0
  42. package/dist/src/app/default-components.d.ts +4 -0
  43. package/dist/src/app/default-components.d.ts.map +1 -0
  44. package/dist/src/app/index.d.ts +3 -0
  45. package/dist/src/app/index.d.ts.map +1 -0
  46. package/dist/src/app/types.d.ts +41 -0
  47. package/dist/src/app/types.d.ts.map +1 -0
  48. package/dist/src/auth/adapter.d.ts +3 -0
  49. package/dist/src/auth/adapter.d.ts.map +1 -0
  50. package/dist/src/auth/createAuthSession.d.ts +8 -0
  51. package/dist/src/auth/createAuthSession.d.ts.map +1 -0
  52. package/dist/src/auth/index.d.ts +8 -0
  53. package/dist/src/auth/index.d.ts.map +1 -0
  54. package/dist/src/auth/redirect.d.ts +8 -0
  55. package/dist/src/auth/redirect.d.ts.map +1 -0
  56. package/dist/src/auth/session-expired.d.ts +5 -0
  57. package/dist/src/auth/session-expired.d.ts.map +1 -0
  58. package/dist/src/auth/session.d.ts +10 -0
  59. package/dist/src/auth/session.d.ts.map +1 -0
  60. package/dist/src/auth/storage.d.ts +7 -0
  61. package/dist/src/auth/storage.d.ts.map +1 -0
  62. package/dist/src/auth/types.d.ts +68 -0
  63. package/dist/src/auth/types.d.ts.map +1 -0
  64. package/dist/src/components/crud-table/LumalCrudEditor.vue.d.ts +41 -0
  65. package/dist/src/components/crud-table/LumalCrudEditor.vue.d.ts.map +1 -0
  66. package/dist/src/components/crud-table/LumalCrudTable.vue.d.ts +151 -0
  67. package/dist/src/components/crud-table/LumalCrudTable.vue.d.ts.map +1 -0
  68. package/dist/src/components/crud-table/index.d.ts +4 -0
  69. package/dist/src/components/crud-table/index.d.ts.map +1 -0
  70. package/dist/src/components/crud-table/schema.d.ts +4 -0
  71. package/dist/src/components/crud-table/schema.d.ts.map +1 -0
  72. package/dist/src/components/crud-table/types.d.ts +165 -0
  73. package/dist/src/components/crud-table/types.d.ts.map +1 -0
  74. package/dist/src/components/crud-table/useCrudData.d.ts +20 -0
  75. package/dist/src/components/crud-table/useCrudData.d.ts.map +1 -0
  76. package/dist/src/components/crud-table/useCrudDialog.d.ts +19 -0
  77. package/dist/src/components/crud-table/useCrudDialog.d.ts.map +1 -0
  78. package/dist/src/components/crud-table/useCrudQuery.d.ts +18 -0
  79. package/dist/src/components/crud-table/useCrudQuery.d.ts.map +1 -0
  80. package/dist/src/components/crud-table/useCrudSelection.d.ts +9 -0
  81. package/dist/src/components/crud-table/useCrudSelection.d.ts.map +1 -0
  82. package/dist/src/components/info-table/LumalInfoTable.vue.d.ts +12 -0
  83. package/dist/src/components/info-table/LumalInfoTable.vue.d.ts.map +1 -0
  84. package/dist/src/components/info-table/index.d.ts +3 -0
  85. package/dist/src/components/info-table/index.d.ts.map +1 -0
  86. package/dist/src/components/info-table/types.d.ts +15 -0
  87. package/dist/src/components/info-table/types.d.ts.map +1 -0
  88. package/dist/src/components/page/LumalPage.vue.d.ts +36 -0
  89. package/dist/src/components/page/LumalPage.vue.d.ts.map +1 -0
  90. package/dist/src/components/page/index.d.ts +2 -0
  91. package/dist/src/components/page/index.d.ts.map +1 -0
  92. package/dist/src/components/page-layout/LumalPageLayout.vue.d.ts +38 -0
  93. package/dist/src/components/page-layout/LumalPageLayout.vue.d.ts.map +1 -0
  94. package/dist/src/components/page-layout/index.d.ts +3 -0
  95. package/dist/src/components/page-layout/index.d.ts.map +1 -0
  96. package/dist/src/components/page-layout/types.d.ts +9 -0
  97. package/dist/src/components/page-layout/types.d.ts.map +1 -0
  98. package/dist/src/components/pagination/LumalPagination.vue.d.ts +31 -0
  99. package/dist/src/components/pagination/LumalPagination.vue.d.ts.map +1 -0
  100. package/dist/src/components/pagination/index.d.ts +3 -0
  101. package/dist/src/components/pagination/index.d.ts.map +1 -0
  102. package/dist/src/components/pagination/types.d.ts +5 -0
  103. package/dist/src/components/pagination/types.d.ts.map +1 -0
  104. package/dist/src/components/schema-form/LumalSchemaForm.vue.d.ts +78 -0
  105. package/dist/src/components/schema-form/LumalSchemaForm.vue.d.ts.map +1 -0
  106. package/dist/src/components/schema-form/index.d.ts +4 -0
  107. package/dist/src/components/schema-form/index.d.ts.map +1 -0
  108. package/dist/src/components/schema-form/normalize.d.ts +11 -0
  109. package/dist/src/components/schema-form/normalize.d.ts.map +1 -0
  110. package/dist/src/components/schema-form/types.d.ts +103 -0
  111. package/dist/src/components/schema-form/types.d.ts.map +1 -0
  112. package/dist/src/components/schema-form/types.type-test.d.ts +2 -0
  113. package/dist/src/components/schema-form/types.type-test.d.ts.map +1 -0
  114. package/dist/src/components/schema-table/LumalSchemaTable.vue.d.ts +108 -0
  115. package/dist/src/components/schema-table/LumalSchemaTable.vue.d.ts.map +1 -0
  116. package/dist/src/components/schema-table/LumalSchemaTableCell.vue.d.ts +8 -0
  117. package/dist/src/components/schema-table/LumalSchemaTableCell.vue.d.ts.map +1 -0
  118. package/dist/src/components/schema-table/cell.d.ts +13 -0
  119. package/dist/src/components/schema-table/cell.d.ts.map +1 -0
  120. package/dist/src/components/schema-table/index.d.ts +6 -0
  121. package/dist/src/components/schema-table/index.d.ts.map +1 -0
  122. package/dist/src/components/schema-table/normalize.d.ts +8 -0
  123. package/dist/src/components/schema-table/normalize.d.ts.map +1 -0
  124. package/dist/src/components/schema-table/types.d.ts +66 -0
  125. package/dist/src/components/schema-table/types.d.ts.map +1 -0
  126. package/dist/src/components/schema-table/types.type-test.d.ts +2 -0
  127. package/dist/src/components/schema-table/types.type-test.d.ts.map +1 -0
  128. package/dist/src/composables/index.d.ts +11 -0
  129. package/dist/src/composables/index.d.ts.map +1 -0
  130. package/dist/src/composables/useConfirmAction.d.ts +21 -0
  131. package/dist/src/composables/useConfirmAction.d.ts.map +1 -0
  132. package/dist/src/composables/useFullscreen.d.ts +14 -0
  133. package/dist/src/composables/useFullscreen.d.ts.map +1 -0
  134. package/dist/src/composables/usePagination.d.ts +36 -0
  135. package/dist/src/composables/usePagination.d.ts.map +1 -0
  136. package/dist/src/composables/usePersistentState.d.ts +9 -0
  137. package/dist/src/composables/usePersistentState.d.ts.map +1 -0
  138. package/dist/src/composables/useSelection.d.ts +20 -0
  139. package/dist/src/composables/useSelection.d.ts.map +1 -0
  140. package/dist/src/dictionary/composables.d.ts +15 -0
  141. package/dist/src/dictionary/composables.d.ts.map +1 -0
  142. package/dist/src/dictionary/context.d.ts +10 -0
  143. package/dist/src/dictionary/context.d.ts.map +1 -0
  144. package/dist/src/dictionary/fetcher.d.ts +4 -0
  145. package/dist/src/dictionary/fetcher.d.ts.map +1 -0
  146. package/dist/src/dictionary/index.d.ts +8 -0
  147. package/dist/src/dictionary/index.d.ts.map +1 -0
  148. package/dist/src/dictionary/normalize.d.ts +5 -0
  149. package/dist/src/dictionary/normalize.d.ts.map +1 -0
  150. package/dist/src/dictionary/store.d.ts +4 -0
  151. package/dist/src/dictionary/store.d.ts.map +1 -0
  152. package/dist/src/dictionary/types.d.ts +53 -0
  153. package/dist/src/dictionary/types.d.ts.map +1 -0
  154. package/dist/src/directives/index.d.ts +16 -0
  155. package/dist/src/directives/index.d.ts.map +1 -0
  156. package/dist/src/exports/components.d.ts +16 -0
  157. package/dist/src/exports/components.d.ts.map +1 -0
  158. package/dist/src/index.d.ts +6 -0
  159. package/dist/src/index.d.ts.map +1 -0
  160. package/dist/src/layout/LumalBreadcrumb.vue.d.ts +28 -0
  161. package/dist/src/layout/LumalBreadcrumb.vue.d.ts.map +1 -0
  162. package/dist/src/layout/LumalContent.vue.d.ts +18 -0
  163. package/dist/src/layout/LumalContent.vue.d.ts.map +1 -0
  164. package/dist/src/layout/LumalGlobalSearch.vue.d.ts +25 -0
  165. package/dist/src/layout/LumalGlobalSearch.vue.d.ts.map +1 -0
  166. package/dist/src/layout/LumalHeader.vue.d.ts +43 -0
  167. package/dist/src/layout/LumalHeader.vue.d.ts.map +1 -0
  168. package/dist/src/layout/LumalLayout.vue.d.ts +98 -0
  169. package/dist/src/layout/LumalLayout.vue.d.ts.map +1 -0
  170. package/dist/src/layout/LumalMenuBadge.vue.d.ts +16 -0
  171. package/dist/src/layout/LumalMenuBadge.vue.d.ts.map +1 -0
  172. package/dist/src/layout/LumalRouterView.vue.d.ts +24 -0
  173. package/dist/src/layout/LumalRouterView.vue.d.ts.map +1 -0
  174. package/dist/src/layout/LumalSidebar.vue.d.ts +29 -0
  175. package/dist/src/layout/LumalSidebar.vue.d.ts.map +1 -0
  176. package/dist/src/layout/LumalSidebarMenuItem.vue.d.ts +16 -0
  177. package/dist/src/layout/LumalSidebarMenuItem.vue.d.ts.map +1 -0
  178. package/dist/src/layout/LumalTabs.vue.d.ts +76 -0
  179. package/dist/src/layout/LumalTabs.vue.d.ts.map +1 -0
  180. package/dist/src/layout/LumalTopNav.vue.d.ts +27 -0
  181. package/dist/src/layout/LumalTopNav.vue.d.ts.map +1 -0
  182. package/dist/src/layout/LumalTopNavMenuItem.vue.d.ts +15 -0
  183. package/dist/src/layout/LumalTopNavMenuItem.vue.d.ts.map +1 -0
  184. package/dist/src/layout/index.d.ts +18 -0
  185. package/dist/src/layout/index.d.ts.map +1 -0
  186. package/dist/src/layout/state/menu-layout.d.ts +35 -0
  187. package/dist/src/layout/state/menu-layout.d.ts.map +1 -0
  188. package/dist/src/layout/state/tab-storage.d.ts +51 -0
  189. package/dist/src/layout/state/tab-storage.d.ts.map +1 -0
  190. package/dist/src/layout/state/tab-strategy.d.ts +73 -0
  191. package/dist/src/layout/state/tab-strategy.d.ts.map +1 -0
  192. package/dist/src/layout/types.d.ts +29 -0
  193. package/dist/src/layout/types.d.ts.map +1 -0
  194. package/dist/src/permission/LumalAccessControl.vue.d.ts +26 -0
  195. package/dist/src/permission/LumalAccessControl.vue.d.ts.map +1 -0
  196. package/dist/src/permission/context.d.ts +6 -0
  197. package/dist/src/permission/context.d.ts.map +1 -0
  198. package/dist/src/permission/directive.d.ts +3 -0
  199. package/dist/src/permission/directive.d.ts.map +1 -0
  200. package/dist/src/permission/guard.d.ts +4 -0
  201. package/dist/src/permission/guard.d.ts.map +1 -0
  202. package/dist/src/permission/helpers.d.ts +4 -0
  203. package/dist/src/permission/helpers.d.ts.map +1 -0
  204. package/dist/src/permission/index.d.ts +8 -0
  205. package/dist/src/permission/index.d.ts.map +1 -0
  206. package/dist/src/permission/store.d.ts +4 -0
  207. package/dist/src/permission/store.d.ts.map +1 -0
  208. package/dist/src/permission/types.d.ts +67 -0
  209. package/dist/src/permission/types.d.ts.map +1 -0
  210. package/dist/src/request/cache.d.ts +8 -0
  211. package/dist/src/request/cache.d.ts.map +1 -0
  212. package/dist/src/request/client.d.ts +4 -0
  213. package/dist/src/request/client.d.ts.map +1 -0
  214. package/dist/src/request/error.d.ts +19 -0
  215. package/dist/src/request/error.d.ts.map +1 -0
  216. package/dist/src/request/index.d.ts +8 -0
  217. package/dist/src/request/index.d.ts.map +1 -0
  218. package/dist/src/request/standard.d.ts +61 -0
  219. package/dist/src/request/standard.d.ts.map +1 -0
  220. package/dist/src/request/types.d.ts +102 -0
  221. package/dist/src/request/types.d.ts.map +1 -0
  222. package/dist/src/router/index.d.ts +36 -0
  223. package/dist/src/router/index.d.ts.map +1 -0
  224. package/dist/src/router/types.d.ts +231 -0
  225. package/dist/src/router/types.d.ts.map +1 -0
  226. package/dist/src/theme/LumalThemeSettingsPanel.vue.d.ts +33 -0
  227. package/dist/src/theme/LumalThemeSettingsPanel.vue.d.ts.map +1 -0
  228. package/dist/src/theme/dom.d.ts +6 -0
  229. package/dist/src/theme/dom.d.ts.map +1 -0
  230. package/dist/src/theme/index.d.ts +11 -0
  231. package/dist/src/theme/index.d.ts.map +1 -0
  232. package/dist/src/theme/preferences-store.d.ts +4 -0
  233. package/dist/src/theme/preferences-store.d.ts.map +1 -0
  234. package/dist/src/theme/preferences.d.ts +18 -0
  235. package/dist/src/theme/preferences.d.ts.map +1 -0
  236. package/dist/src/theme/store.d.ts +3 -0
  237. package/dist/src/theme/store.d.ts.map +1 -0
  238. package/dist/src/theme/theme-color-presets.d.ts +13 -0
  239. package/dist/src/theme/theme-color-presets.d.ts.map +1 -0
  240. package/dist/src/theme/tokens.d.ts +5 -0
  241. package/dist/src/theme/tokens.d.ts.map +1 -0
  242. package/dist/src/theme/types.d.ts +103 -0
  243. package/dist/src/theme/types.d.ts.map +1 -0
  244. package/dist/src/utils/clone.d.ts +12 -0
  245. package/dist/src/utils/clone.d.ts.map +1 -0
  246. package/dist/src/utils/color.d.ts +6 -0
  247. package/dist/src/utils/color.d.ts.map +1 -0
  248. package/dist/src/utils/display.d.ts +10 -0
  249. package/dist/src/utils/display.d.ts.map +1 -0
  250. package/dist/src/utils/download.d.ts +10 -0
  251. package/dist/src/utils/download.d.ts.map +1 -0
  252. package/dist/src/utils/index.d.ts +12 -0
  253. package/dist/src/utils/index.d.ts.map +1 -0
  254. package/dist/src/utils/object.d.ts +6 -0
  255. package/dist/src/utils/object.d.ts.map +1 -0
  256. package/dist/src/utils/path.d.ts +6 -0
  257. package/dist/src/utils/path.d.ts.map +1 -0
  258. package/dist/src/utils/query.d.ts +9 -0
  259. package/dist/src/utils/query.d.ts.map +1 -0
  260. package/dist/src/utils/storage.d.ts +7 -0
  261. package/dist/src/utils/storage.d.ts.map +1 -0
  262. package/dist/src/utils/types.d.ts +13 -0
  263. package/dist/src/utils/types.d.ts.map +1 -0
  264. package/dist/src/utils/with-install.d.ts +11 -0
  265. package/dist/src/utils/with-install.d.ts.map +1 -0
  266. package/dist/theme.cjs +1 -0
  267. package/dist/theme.js +187 -0
  268. package/dist/utils.cjs +1 -0
  269. package/dist/utils.js +130 -0
  270. package/package.json +124 -0
  271. package/theme-chalk/index.scss +70 -0
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./permission-6sXtjGMS.cjs"),t=require("./components-DJiHYQQB.cjs");let n=require("@lumal/icons-vue");exports.LumalAccessControl=e.n,exports.LumalCrudTable=t.i,Object.defineProperty(exports,"LumalIcon",{enumerable:!0,get:function(){return n.LumalIcon}}),Object.defineProperty(exports,"LumalIconPicker",{enumerable:!0,get:function(){return n.LumalIconPicker}}),Object.defineProperty(exports,"LumalIconPickerDialog",{enumerable:!0,get:function(){return n.LumalIconPickerDialog}}),exports.LumalInfoTable=t.r,exports.LumalPage=t.n,exports.LumalPageLayout=t.t,exports.LumalPagination=t.c,exports.LumalSchemaForm=t.s,exports.LumalSchemaTable=t.o,exports.deriveCrudFormSchemas=t.a;
@@ -0,0 +1,3 @@
1
+ import { n as e } from "./permission-CCkqvnWg.js";
2
+ import { a as t, c as n, d as r, i, l as a, n as o, o as s, r as c, s as l, t as u, u as d } from "./components-DYmKh-eF.js";
3
+ export { e as LumalAccessControl, l as LumalCrudTable, u as LumalIcon, o as LumalIconPicker, c as LumalIconPickerDialog, s as LumalInfoTable, t as LumalPage, i as LumalPageLayout, r as LumalPagination, d as LumalSchemaForm, a as LumalSchemaTable, n as deriveCrudFormSchemas };
@@ -0,0 +1 @@
1
+ let e=require("vue");function t(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function n(e,t){return Object.hasOwn(e,t)}function r(e,t){return t?e[t]:void 0}function i(e){return typeof e==`boolean`||typeof e==`number`||typeof e==`string`?e:e==null?``:String(e)}function a(e,a={}){if(!t(e))return;let s=a.label??`label`,c=a.value??`value`,l=a.disabled??`disabled`,u=a.children??`children`,d=a.color??`color`,f=i(r(e,c)),p=r(e,s),m=r(e,u),h=Array.isArray(m)?o(m,a):void 0,g={label:String(p??f),value:f};return n(e,l)&&(g.disabled=!!r(e,l)),typeof r(e,d)==`string`&&(g.color=String(r(e,d))),h?.length&&(g.children=h),t(e.meta)&&(g.meta=e.meta),g}function o(e,t={}){return e.map(e=>a(e,t)).filter(e=>!!e)}function s(e,n={},r){if(n.parseResponse)return o(n.parseResponse(e,r),n.fieldNames);if(!t(e))return[];let i=e[n.fieldNames?.items??`items`];return Array.isArray(i)?o(i,n.fieldNames):[]}function c(e,t){if(t==null)return`-`;let n=Array.isArray(t)?t:[t];return n.length===0?`-`:n.map(t=>e.find(e=>String(e.value)===String(t))?.label??String(t)).join(`, `)}function l(e,t){return c(e,t)}function u(e){return e instanceof Error?e.message:String(e)}function d(t={}){let n=(0,e.reactive)({}),r=(0,e.reactive)({}),i=(0,e.reactive)({}),a=new Map;function o(e,t){e&&(n[e]=t)}async function c(e){if(!e)return[];if(Object.hasOwn(n,e))return n[e]??[];let c=a.get(e);if(c)return c;if(!t.fetcher)return o(e,[]),[];r[e]=!0,i[e]=null;let l=t.fetcher(e).then(n=>{let r=s(n,t,e);return o(e,r),r}).catch(t=>{throw i[e]=u(t),t}).finally(()=>{r[e]=!1,a.delete(e)});return a.set(e,l),l}function l(e){delete n[e],delete r[e],delete i[e]}function d(){Object.keys(n).forEach(e=>delete n[e]),Object.keys(r).forEach(e=>delete r[e]),Object.keys(i).forEach(e=>delete i[e]),a.clear()}return{clearDictionary:d,errors:i,loadDictionary:c,loading:r,records:n,removeDictionary:l,setDictionary:o}}var f=Symbol(`lumal-dictionary-context`),p=null;function m(e){p=e}function h(){return p}function g(t=!1){let n=(0,e.inject)(f,p);if(!n&&!t)throw Error(`Lumal dictionary context is not installed.`);return n}function _(t){p=t,(0,e.provide)(f,t)}function v(e,t={}){let n={store:d(t)};return m(n),e.provide(f,n),n}function y(e){return Array.from(new Set(e.filter(e=>!!e)))}function b(...e){return x(()=>e).dictionaryRefs}function x(t){let n=g(!0),r={};return(0,e.watch)(()=>y(t()),t=>{t.forEach(t=>{r[t]||(r[t]=(0,e.computed)(()=>n?.store.records[t]??[])),n?.store.loadDictionary(t).catch(()=>[])})},{immediate:!0}),{dictionaryMap:(0,e.computed)(()=>Object.fromEntries(y(t()).map(e=>[e,n?.store.records[e]??[]]))),dictionaryRefs:r}}function S(e){return h()?.store.records[e]??[]}function C(e,t){return l(S(e),t)}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return f}});
@@ -0,0 +1,130 @@
1
+ import { computed as e, inject as t, provide as n, reactive as r, watch as i } from "vue";
2
+ //#region src/dictionary/normalize.ts
3
+ function a(e) {
4
+ return typeof e == "object" && !!e && !Array.isArray(e);
5
+ }
6
+ function o(e, t) {
7
+ return Object.hasOwn(e, t);
8
+ }
9
+ function s(e, t) {
10
+ return t ? e[t] : void 0;
11
+ }
12
+ function c(e) {
13
+ return typeof e == "boolean" || typeof e == "number" || typeof e == "string" ? e : e == null ? "" : String(e);
14
+ }
15
+ function l(e, t = {}) {
16
+ if (!a(e)) return;
17
+ let n = t.label ?? "label", r = t.value ?? "value", i = t.disabled ?? "disabled", l = t.children ?? "children", d = t.color ?? "color", f = c(s(e, r)), p = s(e, n), m = s(e, l), h = Array.isArray(m) ? u(m, t) : void 0, g = {
18
+ label: String(p ?? f),
19
+ value: f
20
+ };
21
+ return o(e, i) && (g.disabled = !!s(e, i)), typeof s(e, d) == "string" && (g.color = String(s(e, d))), h?.length && (g.children = h), a(e.meta) && (g.meta = e.meta), g;
22
+ }
23
+ function u(e, t = {}) {
24
+ return e.map((e) => l(e, t)).filter((e) => !!e);
25
+ }
26
+ function d(e, t = {}, n) {
27
+ if (t.parseResponse) return u(t.parseResponse(e, n), t.fieldNames);
28
+ if (!a(e)) return [];
29
+ let r = e[t.fieldNames?.items ?? "items"];
30
+ return Array.isArray(r) ? u(r, t.fieldNames) : [];
31
+ }
32
+ function f(e, t) {
33
+ if (t == null) return "-";
34
+ let n = Array.isArray(t) ? t : [t];
35
+ return n.length === 0 ? "-" : n.map((t) => e.find((e) => String(e.value) === String(t))?.label ?? String(t)).join(", ");
36
+ }
37
+ function p(e, t) {
38
+ return f(e, t);
39
+ }
40
+ //#endregion
41
+ //#region src/dictionary/store.ts
42
+ function m(e) {
43
+ return e instanceof Error ? e.message : String(e);
44
+ }
45
+ function h(e = {}) {
46
+ let t = r({}), n = r({}), i = r({}), a = /* @__PURE__ */ new Map();
47
+ function o(e, n) {
48
+ e && (t[e] = n);
49
+ }
50
+ async function s(r) {
51
+ if (!r) return [];
52
+ if (Object.hasOwn(t, r)) return t[r] ?? [];
53
+ let s = a.get(r);
54
+ if (s) return s;
55
+ if (!e.fetcher) return o(r, []), [];
56
+ n[r] = !0, i[r] = null;
57
+ let c = e.fetcher(r).then((t) => {
58
+ let n = d(t, e, r);
59
+ return o(r, n), n;
60
+ }).catch((e) => {
61
+ throw i[r] = m(e), e;
62
+ }).finally(() => {
63
+ n[r] = !1, a.delete(r);
64
+ });
65
+ return a.set(r, c), c;
66
+ }
67
+ function c(e) {
68
+ delete t[e], delete n[e], delete i[e];
69
+ }
70
+ function l() {
71
+ Object.keys(t).forEach((e) => delete t[e]), Object.keys(n).forEach((e) => delete n[e]), Object.keys(i).forEach((e) => delete i[e]), a.clear();
72
+ }
73
+ return {
74
+ clearDictionary: l,
75
+ errors: i,
76
+ loadDictionary: s,
77
+ loading: n,
78
+ records: t,
79
+ removeDictionary: c,
80
+ setDictionary: o
81
+ };
82
+ }
83
+ //#endregion
84
+ //#region src/dictionary/types.ts
85
+ var g = Symbol("lumal-dictionary-context"), _ = null;
86
+ function v(e) {
87
+ _ = e;
88
+ }
89
+ function y() {
90
+ return _;
91
+ }
92
+ function b(e = !1) {
93
+ let n = t(g, _);
94
+ if (!n && !e) throw Error("Lumal dictionary context is not installed.");
95
+ return n;
96
+ }
97
+ function x(e) {
98
+ _ = e, n(g, e);
99
+ }
100
+ function S(e, t = {}) {
101
+ let n = { store: h(t) };
102
+ return v(n), e.provide(g, n), n;
103
+ }
104
+ //#endregion
105
+ //#region src/dictionary/composables.ts
106
+ function C(e) {
107
+ return Array.from(new Set(e.filter((e) => !!e)));
108
+ }
109
+ function w(...e) {
110
+ return T(() => e).dictionaryRefs;
111
+ }
112
+ function T(t) {
113
+ let n = b(!0), r = {};
114
+ return i(() => C(t()), (t) => {
115
+ t.forEach((t) => {
116
+ r[t] || (r[t] = e(() => n?.store.records[t] ?? [])), n?.store.loadDictionary(t).catch(() => []);
117
+ });
118
+ }, { immediate: !0 }), {
119
+ dictionaryMap: e(() => Object.fromEntries(C(t()).map((e) => [e, n?.store.records[e] ?? []]))),
120
+ dictionaryRefs: r
121
+ };
122
+ }
123
+ function E(e) {
124
+ return y()?.store.records[e] ?? [];
125
+ }
126
+ function D(e, t) {
127
+ return p(E(e), t);
128
+ }
129
+ //#endregion
130
+ export { y as a, v as c, h as d, p as f, T as i, b as l, d as m, D as n, S as o, u as p, w as r, x as s, E as t, g as u };
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./composables-C4twj5Ov.cjs");let t=require("vue");var n={title:`提示`,message:`确定执行此操作?`,confirmButtonText:`确定`,cancelButtonText:`取消`};function r(e={}){let t=e.confirm,r={...n,...e.defaults};async function i(e,n={}){let i={...r,...n};if(t)try{await t(i)}catch{return}return await e()}return{confirmAction:i}}function i(e){let n=(0,t.ref)(!1);function r(t){return t??e?.()??(typeof document<`u`?document.documentElement:void 0)}function i(){n.value=typeof document<`u`&&!!document.fullscreenElement}async function a(e){let t=r(e);t?.requestFullscreen&&(await t.requestFullscreen(),i())}async function o(){typeof document>`u`||!document.exitFullscreen||!document.fullscreenElement||(await document.exitFullscreen(),i())}async function s(e){if(n.value){await o();return}await a(e)}return typeof document<`u`&&(document.addEventListener(`fullscreenchange`,i),(0,t.onBeforeUnmount)(()=>{document.removeEventListener(`fullscreenchange`,i)})),{isFullscreen:n,enter:a,exit:o,toggle:s}}function a(e){let t=e;return{items:t?.items??[],total:t?.total??0}}function o(e,n,r={}){let i=typeof r==`number`?{initialPageSize:r}:r,o=i.parser??a,s=i.pageKey??`page`,c=i.pageSizeKey??`pageSize`,l=(0,t.ref)([]),u=(0,t.ref)(0),d=(0,t.ref)(i.initialPage??1),f=(0,t.ref)(i.initialPageSize??10),p=(0,t.ref)(!1);async function m(){p.value=!0;try{let t=await e({...n?.()??{},[s]:d.value,[c]:f.value}),r=o(t);l.value=r.items,u.value=r.total}finally{p.value=!1}}async function h(){d.value=1,await m()}async function g(e){f.value=e,await m()}async function _(e){d.value=e,await m()}return{items:l,total:u,page:d,pageSize:f,loading:p,fetchData:m,query:h,setPageSize:g,setPage:_}}function s(e,n,r){let i=(0,t.ref)(e.get(n)??r);return(0,t.watch)(i,t=>{e.set(n,t)},{deep:!0}),i}function c(e={}){let n=e.rowKey??(e=>e.id),r=(0,t.ref)([]),i=(0,t.computed)(()=>r.value.map(n)),a=(0,t.computed)(()=>r.value.length>0);function o(e){let t=n(e);return r.value.some(e=>n(e)===t)}function s(e){if(o(e)){let t=n(e);r.value=r.value.filter(e=>n(e)!==t);return}r.value=[...r.value,e]}function c(e){r.value=[...e]}function l(){r.value=[]}return{selected:r,selectedKeys:i,hasSelection:a,isSelected:o,toggle:s,setSelected:c,clear:l}}exports.useConfirmAction=r,exports.useDictionary=e.r,exports.useDictionaryMap=e.i,exports.useFullscreen=i,exports.usePagination=o,exports.usePersistentState=s,exports.useSelection=c;
@@ -0,0 +1,148 @@
1
+ import { i as e, r as t } from "./composables-C9EuCUjj.js";
2
+ import { computed as n, onBeforeUnmount as r, ref as i, watch as a } from "vue";
3
+ //#region src/composables/useConfirmAction.ts
4
+ var o = {
5
+ title: "提示",
6
+ message: "确定执行此操作?",
7
+ confirmButtonText: "确定",
8
+ cancelButtonText: "取消"
9
+ };
10
+ function s(e = {}) {
11
+ let t = e.confirm, n = {
12
+ ...o,
13
+ ...e.defaults
14
+ };
15
+ async function r(e, r = {}) {
16
+ let i = {
17
+ ...n,
18
+ ...r
19
+ };
20
+ if (t) try {
21
+ await t(i);
22
+ } catch {
23
+ return;
24
+ }
25
+ return await e();
26
+ }
27
+ return { confirmAction: r };
28
+ }
29
+ //#endregion
30
+ //#region src/composables/useFullscreen.ts
31
+ function c(e) {
32
+ let t = i(!1);
33
+ function n(t) {
34
+ return t ?? e?.() ?? (typeof document < "u" ? document.documentElement : void 0);
35
+ }
36
+ function a() {
37
+ t.value = typeof document < "u" && !!document.fullscreenElement;
38
+ }
39
+ async function o(e) {
40
+ let t = n(e);
41
+ t?.requestFullscreen && (await t.requestFullscreen(), a());
42
+ }
43
+ async function s() {
44
+ typeof document > "u" || !document.exitFullscreen || !document.fullscreenElement || (await document.exitFullscreen(), a());
45
+ }
46
+ async function c(e) {
47
+ if (t.value) {
48
+ await s();
49
+ return;
50
+ }
51
+ await o(e);
52
+ }
53
+ return typeof document < "u" && (document.addEventListener("fullscreenchange", a), r(() => {
54
+ document.removeEventListener("fullscreenchange", a);
55
+ })), {
56
+ isFullscreen: t,
57
+ enter: o,
58
+ exit: s,
59
+ toggle: c
60
+ };
61
+ }
62
+ //#endregion
63
+ //#region src/composables/usePagination.ts
64
+ function l(e) {
65
+ let t = e;
66
+ return {
67
+ items: t?.items ?? [],
68
+ total: t?.total ?? 0
69
+ };
70
+ }
71
+ function u(e, t, n = {}) {
72
+ let r = typeof n == "number" ? { initialPageSize: n } : n, a = r.parser ?? l, o = r.pageKey ?? "page", s = r.pageSizeKey ?? "pageSize", c = i([]), u = i(0), d = i(r.initialPage ?? 1), f = i(r.initialPageSize ?? 10), p = i(!1);
73
+ async function m() {
74
+ p.value = !0;
75
+ try {
76
+ let n = await e({
77
+ ...t?.() ?? {},
78
+ [o]: d.value,
79
+ [s]: f.value
80
+ }), r = a(n);
81
+ c.value = r.items, u.value = r.total;
82
+ } finally {
83
+ p.value = !1;
84
+ }
85
+ }
86
+ async function h() {
87
+ d.value = 1, await m();
88
+ }
89
+ async function g(e) {
90
+ f.value = e, await m();
91
+ }
92
+ async function _(e) {
93
+ d.value = e, await m();
94
+ }
95
+ return {
96
+ items: c,
97
+ total: u,
98
+ page: d,
99
+ pageSize: f,
100
+ loading: p,
101
+ fetchData: m,
102
+ query: h,
103
+ setPageSize: g,
104
+ setPage: _
105
+ };
106
+ }
107
+ //#endregion
108
+ //#region src/composables/usePersistentState.ts
109
+ function d(e, t, n) {
110
+ let r = i(e.get(t) ?? n);
111
+ return a(r, (n) => {
112
+ e.set(t, n);
113
+ }, { deep: !0 }), r;
114
+ }
115
+ //#endregion
116
+ //#region src/composables/useSelection.ts
117
+ function f(e = {}) {
118
+ let t = e.rowKey ?? ((e) => e.id), r = i([]), a = n(() => r.value.map(t)), o = n(() => r.value.length > 0);
119
+ function s(e) {
120
+ let n = t(e);
121
+ return r.value.some((e) => t(e) === n);
122
+ }
123
+ function c(e) {
124
+ if (s(e)) {
125
+ let n = t(e);
126
+ r.value = r.value.filter((e) => t(e) !== n);
127
+ return;
128
+ }
129
+ r.value = [...r.value, e];
130
+ }
131
+ function l(e) {
132
+ r.value = [...e];
133
+ }
134
+ function u() {
135
+ r.value = [];
136
+ }
137
+ return {
138
+ selected: r,
139
+ selectedKeys: a,
140
+ hasSelection: o,
141
+ isSelected: s,
142
+ toggle: c,
143
+ setSelected: l,
144
+ clear: u
145
+ };
146
+ }
147
+ //#endregion
148
+ export { s as useConfirmAction, t as useDictionary, e as useDictionaryMap, c as useFullscreen, u as usePagination, d as usePersistentState, f as useSelection };
package/dist/core.css ADDED
@@ -0,0 +1,2 @@
1
+ .lumal-pagination[data-v-e5a835aa]{flex-wrap:wrap;justify-content:flex-end;row-gap:8px;width:100%;min-width:0;display:flex}@media (width<=640px){.lumal-pagination[data-v-e5a835aa]{justify-content:flex-start;row-gap:4px}.lumal-pagination[data-v-e5a835aa] .el-pagination__jump{display:none}.lumal-pagination[data-v-e5a835aa] .el-pagination__sizes{margin-left:0}}.lumal-schema-form[data-v-5c24440d]{gap:18px;width:100%;min-width:0;display:grid}.lumal-schema-form__row[data-v-5c24440d]{row-gap:18px;min-width:0}.lumal-schema-form__item[data-v-5c24440d]{width:100%;margin-bottom:0}.lumal-schema-form__item[data-v-5c24440d] .el-form-item__content{min-width:0}.lumal-schema-form.is-compact .lumal-schema-form__row[data-v-5c24440d]{row-gap:10px}.lumal-schema-form__description[data-v-5c24440d],.lumal-schema-form__help[data-v-5c24440d]{width:100%;color:var(--el-text-color-secondary);font-size:calc(var(--lumal-font-size-base,14px) - 2px);margin:6px 0 0;line-height:1.5}.lumal-schema-form__help[data-v-5c24440d]{color:var(--el-color-info)}.lumal-schema-form__item[data-v-5c24440d] .el-input,.lumal-schema-form__item[data-v-5c24440d] .el-input-number,.lumal-schema-form__item[data-v-5c24440d] .el-select,.lumal-schema-form__item[data-v-5c24440d] .el-cascader,.lumal-schema-form__item[data-v-5c24440d] .el-date-editor,.lumal-schema-form__item[data-v-5c24440d] .el-tree-select{width:100%;min-width:0}.lumal-schema-form__readonly-value[data-v-5c24440d]{min-height:32px;color:var(--el-text-color-regular);overflow-wrap:anywhere;line-height:32px}.lumal-schema-form__actions[data-v-5c24440d]{border-top:1px solid var(--el-border-color-lighter);justify-content:flex-end;padding-top:16px;display:flex}.lumal-schema-form__actions.is-left[data-v-5c24440d]{justify-content:flex-start}.lumal-schema-form__actions.is-center[data-v-5c24440d]{justify-content:center}.lumal-schema-form__actions.is-inline[data-v-5c24440d]{border-top:0;padding-top:0}.lumal-schema-form__actions.is-newLine[data-v-5c24440d]{margin-top:4px}@media (width<=1024px){.lumal-schema-form__row[data-v-5c24440d] .el-col:not(.is-full-span){flex:0 0 50%;max-width:50%}}@media (width<=768px){.lumal-schema-form[data-v-5c24440d]{gap:12px}.lumal-schema-form__row[data-v-5c24440d]{row-gap:10px}.lumal-schema-form__row[data-v-5c24440d] .el-col.el-col{flex:0 0 100%;max-width:100%}.lumal-schema-form[data-v-5c24440d] .el-input__wrapper,.lumal-schema-form[data-v-5c24440d] .el-select__wrapper,.lumal-schema-form[data-v-5c24440d] .el-input-number,.lumal-schema-form[data-v-5c24440d] .el-date-editor{min-height:32px}.lumal-schema-form__actions[data-v-5c24440d]{justify-content:stretch;padding-top:12px}.lumal-schema-form__actions[data-v-5c24440d] .el-button{flex:auto;min-height:32px}}@media (width<=480px){.lumal-schema-form__item[data-v-5c24440d]{display:block}.lumal-schema-form__item[data-v-5c24440d] .el-form-item__label{justify-content:flex-start;height:auto;padding:0 0 6px;line-height:20px;width:100%!important}.lumal-schema-form__item[data-v-5c24440d] .el-form-item__content{width:100%;margin-left:0!important}}.lumal-schema-table__dictionary-tags[data-v-ad0cf9f4]{flex-wrap:wrap;align-items:center;gap:4px;max-width:100%;display:inline-flex}.lumal-schema-table__dictionary-tag[data-v-ad0cf9f4]{border:1px solid;border-color:color-mix(in srgb, var(--lumal-dictionary-color,var(--el-border-color)) 32%, var(--el-border-color-lighter));max-width:100%;min-height:24px;color:color-mix(in srgb, var(--lumal-dictionary-color,var(--el-text-color-regular)) 82%, var(--el-text-color-primary));background:color-mix(in srgb, var(--lumal-dictionary-color,var(--el-fill-color)) 10%, var(--el-bg-color));border-radius:999px;align-items:center;gap:6px;padding:2px 8px;display:inline-flex}.lumal-schema-table__dictionary-dot[data-v-ad0cf9f4]{background:var(--lumal-dictionary-color);width:7px;height:7px;box-shadow:0 0 0 1px color-mix(in srgb, var(--lumal-dictionary-color) 70%, transparent);border-radius:50%;flex:none;display:inline-block}.lumal-schema-table[data-v-0cb1dbee]{gap:16px;width:100%;min-width:0;display:grid}.lumal-schema-table__toolbar[data-v-0cb1dbee],.lumal-schema-table__pagination[data-v-0cb1dbee]{justify-content:flex-end;display:flex}.lumal-schema-table__toolbar[data-v-0cb1dbee]{align-items:center;gap:8px;min-height:40px}.lumal-schema-table__toolbar-content[data-v-0cb1dbee]{flex:auto;justify-content:flex-start;min-width:0;display:flex}.lumal-schema-table__toolbar-title[data-v-0cb1dbee]{min-width:0;color:var(--el-text-color-primary);font-size:calc(var(--lumal-font-size-base,14px) + 2px);flex:none;font-weight:600;line-height:1.5}.lumal-schema-table__toolbar-tools[data-v-0cb1dbee]{flex:none;justify-content:flex-end;align-items:center;gap:8px;margin-left:auto;display:flex}.lumal-schema-table__toolbar-tools[data-v-0cb1dbee] .el-button{margin-left:0}.lumal-schema-table__toolbar-tools[data-v-0cb1dbee] .el-button.is-circle{flex:0 0 30px;width:30px;min-width:30px;height:30px;min-height:30px;padding:0}.lumal-schema-table__column-options[data-v-0cb1dbee]{z-index:var(--lumal-z-dropdown);border:1px solid var(--el-border-color-lighter);border-radius:var(--el-border-radius-base);background:var(--el-bg-color-overlay);width:max-content;min-width:200px;box-shadow:var(--lumal-shadow-base);flex-direction:column;gap:6px;padding:12px;display:flex;position:absolute;top:calc(100% + 8px);right:0}.lumal-schema-table__column-options-header[data-v-0cb1dbee],.lumal-schema-table__column-option[data-v-0cb1dbee]{justify-content:space-between;align-items:center;gap:12px;display:flex}.lumal-schema-table__column-options-header[data-v-0cb1dbee]{border-bottom:1px solid var(--el-border-color-lighter);padding-bottom:8px}.lumal-schema-table__column-options-header button[data-v-0cb1dbee],.lumal-schema-table__column-order-actions button[data-v-0cb1dbee],.lumal-schema-table__error button[data-v-0cb1dbee]{border:1px solid var(--el-border-color);border-radius:var(--el-border-radius-small);min-height:32px;color:var(--el-text-color-regular);background:var(--el-fill-color-blank);cursor:pointer;padding:0 8px}.lumal-schema-table__column-option[draggable=true][data-v-0cb1dbee]{cursor:grab}.lumal-schema-table__column-order-actions[data-v-0cb1dbee]{gap:4px;display:inline-flex}.lumal-schema-table__column-order-actions button[data-v-0cb1dbee]{min-width:32px;padding:0}.lumal-schema-table__column-order-actions button[data-v-0cb1dbee]:disabled{cursor:not-allowed;opacity:.45}.lumal-schema-table__error[data-v-0cb1dbee]{border:1px dashed var(--el-color-danger-light-5);border-radius:var(--el-border-radius-base);min-height:160px;color:var(--el-color-danger);background:var(--el-color-danger-light-9);justify-content:center;align-items:center;gap:12px;padding:24px;display:flex}.lumal-schema-table__column-settings[data-v-0cb1dbee]{position:relative}.lumal-schema-table__column-settings-trigger[data-v-0cb1dbee] .lumal-icon{width:16px;height:16px}.lumal-schema-table__column-settings-trigger[data-v-0cb1dbee]{box-sizing:border-box;border:1px solid var(--el-border-color);width:30px;height:30px;color:var(--el-text-color-regular);background:var(--el-fill-color-blank);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;padding:0;list-style:none;display:inline-flex}.lumal-schema-table__column-settings-trigger[data-v-0cb1dbee]::-webkit-details-marker{display:none}.lumal-schema-table__scroll[data-v-0cb1dbee]{width:100%;min-width:0;overflow-x:auto}.lumal-schema-table__body[data-v-0cb1dbee]{width:100%;min-width:720px}.lumal-schema-table__actions[data-v-0cb1dbee]{white-space:nowrap;align-items:center;gap:8px;display:inline-flex}.lumal-schema-table__mobile-actions[data-v-0cb1dbee]{box-sizing:border-box;border-radius:var(--el-border-radius-small);color:var(--el-color-primary);font:inherit;cursor:pointer;background:0 0;border:0;display:none}.lumal-schema-table__mobile-actions-menu[data-v-0cb1dbee]{gap:6px;min-width:112px;display:grid}.lumal-schema-table__mobile-actions-menu[data-v-0cb1dbee] .el-button{justify-content:flex-start;width:100%;margin-left:0}@media (width<=768px){.lumal-schema-table[data-v-0cb1dbee]{gap:12px}.lumal-schema-table__toolbar[data-v-0cb1dbee]{flex-wrap:wrap;justify-content:flex-start;align-items:center;row-gap:8px}.lumal-schema-table__toolbar-content[data-v-0cb1dbee]{flex:auto;justify-content:flex-start;min-width:0}.lumal-schema-table__toolbar-tools[data-v-0cb1dbee]{flex:0 auto;justify-content:flex-end;gap:6px;min-width:0;margin-left:auto}.lumal-schema-table__toolbar-tools[data-v-0cb1dbee] .el-button.is-circle{flex-basis:28px;width:28px;min-width:28px;height:28px;min-height:28px}.lumal-schema-table__column-settings-trigger[data-v-0cb1dbee]{width:28px;min-width:28px;height:28px;min-height:28px}.lumal-schema-table__pagination[data-v-0cb1dbee]{justify-content:flex-start;overflow-x:auto}.lumal-schema-table__actions--desktop[data-v-0cb1dbee]{display:none}.lumal-schema-table__mobile-actions[data-v-0cb1dbee]{justify-content:center;align-items:center;min-width:48px;height:32px;min-height:32px;padding:0 8px;display:inline-flex}.lumal-schema-table__mobile-actions[data-v-0cb1dbee]:hover,.lumal-schema-table__mobile-actions[data-v-0cb1dbee]:focus-visible,.lumal-schema-table__mobile-actions[aria-expanded=true][data-v-0cb1dbee]{background:var(--el-color-primary-light-9);outline:none}.lumal-schema-table__body[data-v-0cb1dbee] .el-table__body .el-table__cell{padding:8px 0}.lumal-schema-table__body[data-v-0cb1dbee] .el-table__body .cell{min-height:32px;line-height:32px}}.lumal-crud-table[data-v-68c1d18f]{box-sizing:border-box;flex-direction:column;flex:auto;gap:16px;width:100%;min-width:0;height:100%;min-height:0;max-height:100%;display:flex;overflow:hidden}.lumal-crud-table[data-v-68c1d18f]:fullscreen{box-sizing:border-box;background:var(--el-bg-color-page);height:100dvh;padding:16px;overflow:auto}.lumal-crud-table__query[data-v-68c1d18f]{gap:var(--lumal-space-3,12px);border:1px solid var(--el-border-color-lighter);border-radius:calc(8px * var(--lumal-radius-scale,1));background:var(--el-fill-color-light);flex:none;padding:16px;display:grid}.lumal-crud-table__query-form[data-v-68c1d18f] .lumal-schema-form__row{row-gap:14px}.lumal-crud-table__query-form[data-v-68c1d18f] .el-form-item__label{color:var(--el-text-color-regular);font-weight:500}.lumal-crud-table__query-actions[data-v-68c1d18f],.lumal-crud-table__toolbar[data-v-68c1d18f],.lumal-crud-table__toolbar-tools[data-v-68c1d18f]{gap:var(--lumal-space-2,8px);flex-wrap:wrap;align-items:center;min-width:0;display:flex}.lumal-crud-table__toolbar[data-v-68c1d18f]{justify-content:flex-start;width:100%}.lumal-crud-table__toolbar.is-right[data-v-68c1d18f]{justify-content:flex-end}.lumal-crud-table__toolbar-tools[data-v-68c1d18f]{flex:none;justify-content:flex-end}.lumal-crud-table__toolbar-tools[data-v-68c1d18f] [data-action=toggle-query-panel].is-active{border-color:var(--el-color-primary-light-5);color:var(--el-color-primary);background:var(--el-color-primary-light-9)}.lumal-crud-table__query-actions[data-v-68c1d18f]{justify-content:flex-end}.lumal-crud-table__error[data-v-68c1d18f],.lumal-crud-table__dialog-error[data-v-68c1d18f]{gap:var(--lumal-space-3,12px);border:1px solid var(--el-color-danger-light-7);border-radius:var(--el-border-radius-base);color:var(--el-color-danger-dark-2);background:var(--el-color-danger-light-9);justify-content:space-between;align-items:center;padding:10px 12px;display:flex}.lumal-crud-table__table-panel[data-v-68c1d18f],.lumal-crud-table__body[data-v-68c1d18f],.lumal-crud-table__extra[data-v-68c1d18f]{width:100%;min-width:0}.lumal-crud-table__table-panel[data-v-68c1d18f]{box-sizing:border-box;border:1px solid var(--el-border-color-lighter);border-radius:calc(8px * var(--lumal-radius-scale,1));background:var(--el-bg-color);flex-direction:column;flex:auto;min-height:0;padding:16px;display:flex}.lumal-crud-table__body[data-v-68c1d18f]{flex:auto;min-height:0;display:flex}.lumal-crud-table__body[data-v-68c1d18f] .lumal-schema-table{grid-template-rows:auto minmax(0,1fr);height:100%;min-height:0}.lumal-crud-table__body[data-v-68c1d18f] .lumal-schema-table__scroll{height:100%;min-height:0}.lumal-crud-table__pagination[data-v-68c1d18f]{flex:none;min-width:0;padding-top:12px}@media (width>=960px){.lumal-crud-table__query.is-collapsed[data-v-68c1d18f]{grid-template-columns:minmax(0,1fr) auto;align-items:end}.lumal-crud-table__query.is-collapsed .lumal-crud-table__query-actions[data-v-68c1d18f]{white-space:nowrap;align-self:end}}.lumal-crud-table__dialog-error[data-v-68c1d18f]{margin-bottom:var(--lumal-space-4,16px)}.lumal-crud-table__dialog-footer[data-v-68c1d18f]{justify-content:flex-end;gap:8px;display:flex}.lumal-crud-table__dialog .el-dialog__header{border-bottom:1px solid var(--el-border-color-lighter);margin-right:0;padding:20px 24px 16px}.lumal-crud-table__dialog .el-dialog__body{padding:24px}.lumal-crud-table__dialog .el-dialog__footer{border-top:1px solid var(--el-border-color-lighter);padding:16px 24px}@media (width<=768px){.lumal-crud-table[data-v-68c1d18f]{gap:12px;height:auto;max-height:none;overflow:visible}.lumal-crud-table__query[data-v-68c1d18f]{gap:10px;padding:12px}.lumal-crud-table__query-form[data-v-68c1d18f] .lumal-schema-form__row{row-gap:10px}.lumal-crud-table__table-panel[data-v-68c1d18f]{flex:none;padding:12px}.lumal-crud-table__body[data-v-68c1d18f]{flex:none;min-height:0}.lumal-crud-table__body[data-v-68c1d18f] .lumal-schema-table{grid-template-rows:auto auto;height:auto;min-height:0}.lumal-crud-table__body[data-v-68c1d18f] .lumal-schema-table__scroll{height:auto;min-height:160px;max-height:min(56dvh,480px);overflow:auto}.lumal-crud-table__query-actions[data-v-68c1d18f]{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.lumal-crud-table__query-actions[data-v-68c1d18f] .el-button{min-height:32px;margin-left:0}.lumal-crud-table__query-actions[data-v-68c1d18f] [data-action=toggle-query]{grid-column:1/-1}.lumal-crud-table__toolbar[data-v-68c1d18f] .el-button{min-height:32px;margin-left:0}.lumal-crud-table__toolbar-tools[data-v-68c1d18f] .el-button{margin-left:0}.lumal-crud-table__dialog.el-dialog{flex-direction:column;max-height:calc(100dvh - 24px);margin:12px auto;display:flex;width:calc(100vw - 24px)!important}.lumal-crud-table__dialog .el-dialog__header{padding:12px}.lumal-crud-table__dialog .el-dialog__body{min-height:0;padding:12px;overflow-y:auto}.lumal-crud-table__dialog .el-dialog__footer{padding:10px 12px 12px}.lumal-crud-table__dialog-footer[data-v-68c1d18f] .el-button{min-height:32px;margin-left:0}}@media (width<=480px){.lumal-crud-table__dialog-footer[data-v-68c1d18f] .el-button{flex:1 1 0}}.lumal-info-table[data-v-4066d619]{grid-template-columns:repeat(var(--lumal-info-table-columns), minmax(0, 1fr));border-radius:8px;margin:0;display:grid;overflow:hidden}.lumal-info-table--bordered[data-v-4066d619]{border:1px solid var(--el-border-color-lighter)}.lumal-info-table__item[data-v-4066d619]{border-bottom:1px solid var(--el-border-color-lighter);background:var(--el-bg-color);min-width:0;display:flex}.lumal-info-table__label[data-v-4066d619]{box-sizing:border-box;color:var(--el-text-color-regular);background:var(--el-fill-color-light);font-size:calc(var(--lumal-font-size-base,14px) - 1px);flex:none;margin:0;padding:10px 12px;font-weight:600;line-height:1.5}.lumal-info-table__value[data-v-4066d619]{min-width:0;color:var(--el-text-color-primary);font-size:calc(var(--lumal-font-size-base,14px) - 1px);overflow-wrap:anywhere;flex:auto;margin:0;padding:10px 12px;line-height:1.5}@media (width<=760px){.lumal-info-table[data-v-4066d619]{grid-template-columns:1fr}.lumal-info-table__item[data-v-4066d619]{grid-column:span 1!important}}.lumal-page[data-v-07931bf6]{box-sizing:border-box;border:1px solid var(--el-border-color-lighter);border-radius:calc(10px * var(--lumal-radius-scale,1));background:var(--el-bg-color);min-width:0;box-shadow:var(--lumal-shadow-light);align-content:start;gap:16px;padding:20px;display:grid;position:relative}.lumal-page.is-fill[data-v-07931bf6]{grid-template-rows:auto minmax(0,1fr);height:100%;min-height:0}.lumal-page.is-no-padding[data-v-07931bf6]{box-shadow:none;background:0 0;border:0;padding:0}.lumal-page__header[data-v-07931bf6]{justify-content:space-between;align-items:flex-start;gap:16px;min-width:0;display:flex}.lumal-page__heading[data-v-07931bf6]{min-width:0}.lumal-page__title[data-v-07931bf6]{color:var(--el-text-color-primary);font-size:calc(var(--lumal-font-size-base,14px) + 4px);margin:0;line-height:1.4}.lumal-page__description[data-v-07931bf6]{color:var(--el-text-color-secondary);font-size:var(--lumal-font-size-base,14px);margin:4px 0 0;line-height:1.5}.lumal-page__actions[data-v-07931bf6]{flex:none;align-items:center;gap:8px;display:flex}.lumal-page__body[data-v-07931bf6]{min-width:0;min-height:0}.lumal-page.is-fill .lumal-page__body[data-v-07931bf6]{overflow:auto}.lumal-page__loading[data-v-07931bf6]{color:var(--el-text-color-regular);background:color-mix(in srgb, var(--el-bg-color) 82%, transparent);font-size:var(--lumal-font-size-base,14px);place-items:center;display:grid;position:absolute;inset:0}@media (width<=768px){.lumal-page[data-v-07931bf6]{gap:12px;padding:12px}.lumal-page__header[data-v-07931bf6]{flex-direction:column}.lumal-page__actions[data-v-07931bf6]{flex-wrap:wrap;width:100%}}.lumal-page-layout[data-v-8e09ec3e]{gap:16px;min-width:0;display:grid}.lumal-page-layout.is-fill[data-v-8e09ec3e]{grid-template-rows:auto auto minmax(0,1fr) auto;height:100%;min-height:0}.lumal-page-layout__query[data-v-8e09ec3e],.lumal-page-layout__toolbar[data-v-8e09ec3e],.lumal-page-layout__content[data-v-8e09ec3e],.lumal-page-layout__pagination[data-v-8e09ec3e]{min-width:0}.lumal-page-layout.is-surface .lumal-page-layout__query[data-v-8e09ec3e]{border:1px solid var(--el-border-color-lighter);border-radius:var(--el-border-radius-base);background:var(--el-fill-color-blank);gap:12px;padding:16px;display:grid}.lumal-page-layout__query-body[data-v-8e09ec3e]{min-width:0}.lumal-page-layout__query-actions[data-v-8e09ec3e]{justify-content:flex-end;gap:8px;display:flex}.lumal-page-layout.is-surface .lumal-page-layout__toolbar[data-v-8e09ec3e]{border:1px solid var(--el-border-color-lighter);border-radius:var(--el-border-radius-base);background:var(--el-fill-color-blank);justify-content:space-between;align-items:center;gap:8px;padding:12px 16px;display:flex}.lumal-page-layout__content[data-v-8e09ec3e]{min-width:0;min-height:0;overflow:hidden}.lumal-page-layout.is-content-scrollable .lumal-page-layout__content[data-v-8e09ec3e]{overflow:auto}.lumal-page-layout.is-surface .lumal-page-layout__content[data-v-8e09ec3e]{border:1px solid var(--el-border-color-lighter);border-radius:var(--el-border-radius-base);background:var(--el-fill-color-blank)}.lumal-page-layout__pagination[data-v-8e09ec3e]{justify-content:flex-end;padding:12px 16px;display:flex}.lumal-page-layout.is-surface .lumal-page-layout__pagination[data-v-8e09ec3e]{border:1px solid var(--el-border-color-lighter);border-radius:var(--el-border-radius-base);background:var(--el-fill-color-blank)}@media (width<=768px){.lumal-page-layout[data-v-8e09ec3e]{gap:12px}.lumal-page-layout__query[data-v-8e09ec3e],.lumal-page-layout__toolbar[data-v-8e09ec3e],.lumal-page-layout__pagination[data-v-8e09ec3e]{padding:12px}.lumal-page-layout__query-actions[data-v-8e09ec3e],.lumal-page-layout__pagination[data-v-8e09ec3e]{justify-content:flex-start}.lumal-page-layout__query-actions[data-v-8e09ec3e] .el-button{min-height:32px;padding-inline:12px}}.lumal-breadcrumb[data-v-53a036d9]{min-height:40px;padding:0 var(--lumal-page-gutter,20px);border-bottom:1px solid var(--el-border-color-lighter);background:var(--el-bg-color);flex:none;align-items:center;display:flex}.lumal-breadcrumb__list[data-v-53a036d9],.lumal-breadcrumb__item[data-v-53a036d9],.lumal-breadcrumb__current[data-v-53a036d9],.lumal-breadcrumb__link[data-v-53a036d9]{align-items:center;min-width:0;display:flex}.lumal-breadcrumb__list[data-v-53a036d9]{margin:0;padding:0;list-style:none;overflow:hidden}.lumal-breadcrumb__item[data-v-53a036d9]{flex:none;gap:8px}.lumal-breadcrumb__separator[data-v-53a036d9]{color:var(--el-text-color-placeholder);flex:none}.lumal-breadcrumb__link[data-v-53a036d9]{color:var(--el-text-color-regular);cursor:pointer;font:inherit;background:0 0;border:0;gap:5px;padding:4px 0}.lumal-breadcrumb__link[data-v-53a036d9]:hover{color:var(--el-color-primary)}.lumal-breadcrumb__link[data-v-53a036d9]:focus-visible{border-radius:var(--el-border-radius-small);outline:2px solid var(--el-color-primary);outline-offset:2px}.lumal-breadcrumb__current[data-v-53a036d9]{max-width:240px;color:var(--el-text-color-primary);text-overflow:ellipsis;white-space:nowrap;gap:5px;font-weight:500;overflow:hidden}@media (width<=768px){.lumal-breadcrumb[data-v-53a036d9]{display:none}}.lumal-content[data-v-50b337c5]{-webkit-overflow-scrolling:touch;overscroll-behavior:contain;background:var(--el-bg-color-page);flex-direction:column;flex:auto;min-width:0;min-height:0;padding:14px;display:flex;overflow:hidden auto}@media (width<=1024px){.lumal-content[data-v-50b337c5]{padding:10px}}@media (width<=768px){.lumal-content[data-v-50b337c5]{padding:6px}}.lumal-global-search__trigger[data-v-a433539f]{border:1px solid var(--el-border-color-lighter);border-radius:var(--el-border-radius-base);min-width:44px;height:36px;color:var(--el-text-color-regular);cursor:pointer;background:var(--el-fill-color-light);font:inherit;justify-content:center;align-items:center;gap:7px;padding:0 9px;display:inline-flex}.lumal-global-search__trigger[data-v-a433539f]:hover{border-color:var(--el-color-primary-light-5);color:var(--el-color-primary)}.lumal-global-search__trigger[data-v-a433539f]:focus-visible,.lumal-global-search__dialog button[data-v-a433539f]:focus-visible,.lumal-global-search__dialog input[data-v-a433539f]:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.lumal-global-search__trigger-label[data-v-a433539f]{font-size:calc(var(--lumal-font-size-base,14px) - 1px)}.lumal-global-search__trigger kbd[data-v-a433539f]{border:1px solid var(--el-border-color);color:var(--el-text-color-secondary);background:var(--el-bg-color);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:calc(var(--lumal-font-size-base,14px) - 3px);border-radius:4px;padding:2px 5px;line-height:1.2}.lumal-global-search__backdrop[data-v-a433539f]{z-index:calc(var(--lumal-z-drawer,1200) + 20);background:color-mix(in srgb, var(--el-color-black) 48%, transparent);justify-content:center;align-items:flex-start;padding:min(14vh,120px) 16px 24px;display:flex;position:fixed;inset:0}.lumal-global-search__dialog[data-v-a433539f]{border:1px solid var(--el-border-color-light);border-radius:var(--el-border-radius-base);background:var(--el-bg-color);width:min(640px,100%);max-height:min(640px,76vh);box-shadow:var(--el-box-shadow-dark);flex-direction:column;display:flex;overflow:hidden}.lumal-global-search__header[data-v-a433539f]{border-bottom:1px solid var(--el-border-color-lighter);justify-content:space-between;align-items:center;min-height:52px;padding:0 14px 0 18px;display:flex}.lumal-global-search__header h2[data-v-a433539f]{font-size:calc(var(--lumal-font-size-base,14px) + 2px);margin:0;font-weight:600}.lumal-global-search__header button[data-v-a433539f]{border-radius:var(--el-border-radius-base);width:40px;height:40px;color:var(--el-text-color-secondary);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.lumal-global-search__input-wrap[data-v-a433539f]{border:1px solid var(--el-border-color);border-radius:var(--el-border-radius-base);min-height:52px;color:var(--el-text-color-placeholder);background:var(--el-fill-color-lighter);align-items:center;gap:10px;margin:14px;padding:0 14px;display:flex}.lumal-global-search__input-wrap[data-v-a433539f]:focus-within{border-color:var(--el-color-primary)}.lumal-global-search__input-wrap input[data-v-a433539f]{width:100%;min-width:0;height:48px;color:var(--el-text-color-primary);font:inherit;background:0 0;border:0;outline:0;padding:0}.lumal-global-search__results[data-v-a433539f]{min-height:0;margin:0;padding:0 10px 12px;list-style:none;overflow-y:auto}.lumal-global-search__results button[data-v-a433539f]{border-radius:var(--el-border-radius-base);width:100%;min-height:52px;color:var(--el-text-color-regular);cursor:pointer;text-align:left;background:0 0;border:0;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:8px 10px;display:grid}.lumal-global-search__results button[data-v-a433539f]:hover,.lumal-global-search__results button.is-active[data-v-a433539f]{color:var(--el-color-primary);background:var(--el-color-primary-light-9)}.lumal-global-search__results button>span[data-v-a433539f]{flex-direction:column;gap:2px;min-width:0;display:flex}.lumal-global-search__results strong[data-v-a433539f],.lumal-global-search__results small[data-v-a433539f]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.lumal-global-search__results strong[data-v-a433539f]{font-size:var(--lumal-font-size-base,14px);font-weight:600}.lumal-global-search__results small[data-v-a433539f],.lumal-global-search__results code[data-v-a433539f]{color:var(--el-text-color-secondary);font-size:calc(var(--lumal-font-size-base,14px) - 2px)}.lumal-global-search__results code[data-v-a433539f]{text-overflow:ellipsis;white-space:nowrap;max-width:180px;overflow:hidden}.lumal-global-search__empty[data-v-a433539f]{color:var(--el-text-color-secondary);text-align:center;margin:0;padding:28px 20px 36px}.lumal-global-search__sr-only[data-v-a433539f]{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}@media (width<=1024px){.lumal-global-search__trigger-label[data-v-a433539f],.lumal-global-search__trigger kbd[data-v-a433539f]{display:none}}@media (prefers-reduced-motion:reduce){.lumal-global-search[data-v-a433539f] *{scroll-behavior:auto!important}}.lumal-header[data-v-e9574860]{z-index:var(--lumal-z-header);border-bottom:1px solid var(--el-border-color-lighter);background:var(--el-bg-color);flex:none;justify-content:space-between;align-items:center;min-width:0;padding:0 12px;display:flex;position:relative}.lumal-header__left[data-v-e9574860]{align-items:center;gap:8px;min-width:0;display:flex}.lumal-header__toggle[data-v-e9574860]{width:32px;height:32px;color:var(--el-text-color-regular);border-radius:6px;flex:none;order:-1;margin-left:-4px;padding:0}.lumal-header__toggle[data-v-e9574860]:hover{color:var(--el-text-color-primary);background:var(--el-fill-color-light)}.lumal-header__toggle.is-after-title[data-v-e9574860]{order:initial;margin-left:0;margin-right:-4px}.lumal-header__toggle.is-mobile-only[data-v-e9574860]{display:none}.lumal-header__toggle svg[data-v-e9574860]{fill:none;stroke:currentColor;stroke-linecap:round;stroke-width:1.8px;width:16px;height:16px}.lumal-header__title[data-v-e9574860]{min-width:0;color:var(--el-text-color-primary);font-size:var(--lumal-font-size-base,14px);text-overflow:ellipsis;white-space:nowrap;font-weight:600;line-height:1.2;overflow:hidden}.lumal-header__navigation[data-v-e9574860]{flex:auto;align-self:stretch;align-items:center;min-width:0;margin-left:12px;display:flex;overflow:hidden}.lumal-header__breadcrumb[data-v-e9574860]{flex:auto;align-items:center;min-width:0;margin-left:12px;display:flex;overflow:hidden}.lumal-header__actions[data-v-e9574860]{flex:none;align-items:center;gap:4px;margin-left:8px;display:flex}@media (width<=1024px){.lumal-header[data-v-e9574860]{padding:0 10px}.lumal-header__navigation[data-v-e9574860],.lumal-header__breadcrumb[data-v-e9574860]{margin-left:8px}}@media (width<=768px){.lumal-header[data-v-e9574860]{padding:0 10px}.lumal-header__navigation[data-v-e9574860],.lumal-header__breadcrumb[data-v-e9574860]{display:none}.lumal-header__toggle.is-mobile-only[data-v-e9574860]{display:inline-flex}.lumal-header__left[data-v-e9574860]{flex:auto}}.lumal-menu-badge[data-v-0ca73e4b]{--lumal-menu-badge-color:var(--el-color-primary);min-width:18px;height:18px;color:var(--el-color-white);background:var(--lumal-menu-badge-color);font-size:calc(var(--lumal-font-size-base,14px) - 3px);font-variant-numeric:tabular-nums;border-radius:9px;flex:none;justify-content:center;align-items:center;padding:0 5px;line-height:18px;display:inline-flex}.lumal-menu-badge.is-dot[data-v-0ca73e4b]{width:8px;min-width:8px;height:8px;padding:0}.lumal-menu-badge.is-success[data-v-0ca73e4b]{--lumal-menu-badge-color:var(--el-color-success)}.lumal-menu-badge.is-warning[data-v-0ca73e4b]{--lumal-menu-badge-color:var(--el-color-warning)}.lumal-menu-badge.is-danger[data-v-0ca73e4b]{--lumal-menu-badge-color:var(--el-color-danger)}.lumal-menu-badge.is-info[data-v-0ca73e4b]{--lumal-menu-badge-color:var(--el-color-info)}.lumal-sidebar-menu-item__icon[data-v-a5f8c946]{flex:none;justify-content:center;align-items:center;margin-right:8px;font-style:normal;display:inline-flex}.lumal-sidebar-menu-item__label[data-v-a5f8c946]{align-items:center;gap:6px;min-width:0;display:flex}.lumal-sidebar-menu-item__title[data-v-a5f8c946]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.lumal-sidebar-menu-item__external[data-v-a5f8c946]{color:var(--el-text-color-placeholder);font-size:calc(var(--lumal-font-size-base,14px) - 2px);margin-left:auto}.lumal-sidebar[data-v-59a9bda5]{border-right:1px solid var(--el-border-color-lighter);background:var(--el-bg-color);min-height:0;transition:width var(--lumal-motion-duration-base) var(--lumal-easing-standard), transform var(--lumal-motion-duration-base) var(--lumal-easing-standard);flex:none}.lumal-sidebar__scrollbar[data-v-59a9bda5]{height:100%}.lumal-sidebar__menu[data-v-59a9bda5]{border-right:0;min-height:100%;padding:12px 8px}.lumal-sidebar__menu[data-v-59a9bda5] .el-menu-item,.lumal-sidebar__menu[data-v-59a9bda5] .el-sub-menu__title{border-radius:var(--el-border-radius-base);height:44px;margin:2px 0}.lumal-sidebar__menu[data-v-59a9bda5] .el-menu-item.is-active{background:var(--el-color-primary-light-9);font-weight:600}.lumal-sidebar__menu.el-menu--collapse[data-v-59a9bda5] .el-menu-item,.lumal-sidebar__menu.el-menu--collapse[data-v-59a9bda5] .el-sub-menu__title{justify-content:center;padding-left:0!important;padding-right:0!important}.lumal-sidebar__menu.el-menu--collapse[data-v-59a9bda5] .lumal-sidebar-menu-item__icon{justify-content:center;align-items:center;width:20px;height:20px;margin:0;display:inline-flex}.lumal-tabs[data-v-e1921025]{width:100%;min-width:0;height:var(--lumal-tabbar-height);border-bottom:1px solid var(--el-border-color-lighter);background:var(--el-bg-color);flex:none;display:flex;position:relative}.lumal-tabs__viewport[data-v-e1921025]{scrollbar-width:none;flex:auto;min-width:0;overflow:auto hidden}.lumal-tabs__viewport[data-v-e1921025]::-webkit-scrollbar{display:none}.lumal-tabs__list[data-v-e1921025]{box-sizing:border-box;align-items:stretch;gap:2px;width:max-content;min-width:100%;height:100%;padding:3px 6px 0;display:flex}.lumal-tabs__item[data-v-e1921025]{border-radius:var(--lumal-radius-small) var(--lumal-radius-small) 0 0;min-width:88px;max-width:min(240px,32vw);color:var(--el-text-color-regular);transition:color var(--lumal-motion-duration-fast) var(--lumal-easing-standard), background-color var(--lumal-motion-duration-fast) var(--lumal-easing-standard);align-items:center;display:flex;position:relative}.lumal-tabs__item[data-v-e1921025]:hover{background:var(--el-fill-color-light)}.lumal-tabs__tab[data-v-e1921025]{min-width:0;height:100%;color:inherit;cursor:pointer;background:0 0;border:0;flex:auto;align-items:center;gap:5px;padding:0 26px 0 10px;display:flex}.lumal-tabs__tab[data-v-e1921025]:focus-visible,.lumal-tabs__tool[data-v-e1921025]:focus-visible,.lumal-tabs__close[data-v-e1921025]:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:-2px}.lumal-tabs__label[data-v-e1921025]{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.lumal-tabs__close[data-v-e1921025]{width:18px;height:18px;color:var(--el-text-color-secondary);cursor:pointer;background:0 0;border:0;border-radius:50%;place-items:center;padding:0;display:grid;position:absolute;top:50%;right:7px;transform:translateY(-50%)}.lumal-tabs__close[data-v-e1921025]:hover{color:var(--el-text-color-primary);background:var(--el-fill-color)}.lumal-tabs__tool[data-v-e1921025]{border:0;border-left:1px solid var(--el-border-color-lighter);width:36px;height:100%;color:var(--el-text-color-secondary);cursor:pointer;background:0 0;flex:0 0 36px;place-items:center;padding:0;display:grid}.lumal-tabs__tool[data-v-e1921025]:hover:not(:disabled){color:var(--el-text-color-primary);background:var(--el-fill-color-light)}.lumal-tabs__tool[data-v-e1921025]:disabled{cursor:default;opacity:.35}.lumal-tabs__item--ghost[data-v-e1921025]{opacity:.4}.lumal-tabs__item--chosen[data-v-e1921025]{box-shadow:inset 0 0 0 1px var(--el-color-primary-light-5)}.lumal-tabs.is-style-chrome .lumal-tabs__item.is-active[data-v-e1921025]{color:var(--el-color-primary);background:var(--el-color-primary-light-9);box-shadow:inset 0 -2px var(--el-color-primary);position:relative}.lumal-tabs.is-style-chrome .lumal-tabs__item.is-active[data-v-e1921025]:before,.lumal-tabs.is-style-chrome .lumal-tabs__item.is-active[data-v-e1921025]:after{content:"";pointer-events:none;width:8px;height:8px;position:absolute;bottom:0}.lumal-tabs.is-style-chrome .lumal-tabs__item.is-active[data-v-e1921025]:before{box-shadow:2px 2px 0 0 var(--el-color-primary-light-9);border-bottom-right-radius:8px;left:-8px}.lumal-tabs.is-style-chrome .lumal-tabs__item.is-active[data-v-e1921025]:after{box-shadow:-2px 2px 0 0 var(--el-color-primary-light-9);border-bottom-left-radius:8px;right:-8px}.lumal-tabs.is-style-chrome .lumal-tabs__list>.lumal-tabs__item.is-active+.lumal-tabs__item .lumal-tabs__tab[data-v-e1921025]:before{display:none}.lumal-tabs.is-style-chrome .lumal-tabs__list>.lumal-tabs__item+.lumal-tabs__item .lumal-tabs__tab[data-v-e1921025]:before{content:"";background:var(--el-border-color-light);width:1px;position:absolute;top:12px;bottom:10px;left:-3px}.lumal-tabs.is-style-chrome .lumal-tabs__list>.lumal-tabs__item.is-active+.lumal-tabs__item .lumal-tabs__tab[data-v-e1921025]:before,.lumal-tabs.is-style-chrome .lumal-tabs__list>.lumal-tabs__item+.lumal-tabs__item.is-active .lumal-tabs__tab[data-v-e1921025]:before{display:none}.lumal-tabs.is-style-plain .lumal-tabs__item.is-active[data-v-e1921025]{color:var(--el-color-primary);border-bottom:2px solid var(--el-color-primary)}.lumal-tabs.is-style-plain .lumal-tabs__list>.lumal-tabs__item+.lumal-tabs__item[data-v-e1921025]{border-left:1px solid var(--el-border-color-lighter)}.lumal-tabs.is-style-card .lumal-tabs__item[data-v-e1921025]{border-radius:var(--lumal-radius-small);border:1px solid #0000}.lumal-tabs.is-style-card .lumal-tabs__item.is-active[data-v-e1921025]{border-color:var(--el-border-color-light);color:var(--el-color-primary);background:var(--el-bg-color);box-shadow:0 1px 3px color-mix(in srgb, var(--el-color-primary) 12%, transparent)}.lumal-tabs.is-style-card .lumal-tabs__item[data-v-e1921025]:not(.is-active){background:var(--el-fill-color-light)}.lumal-tabs.is-style-card .lumal-tabs__list[data-v-e1921025]{gap:4px;padding-top:4px}.lumal-tabs.is-style-brisk .lumal-tabs__item.is-active[data-v-e1921025]{color:var(--el-color-primary)}.lumal-tabs.is-style-brisk .lumal-tabs__item.is-active[data-v-e1921025]:after{content:"";background:var(--el-color-primary);transform-origin:50%;height:2px;animation:lumal-tab-brisk-underline-e1921025 .16s var(--lumal-easing-standard);border-radius:2px;position:absolute;bottom:4px;left:14px;right:14px}@keyframes lumal-tab-brisk-underline-e1921025{0%{opacity:0;transform:scaleX(.2)}to{opacity:1;transform:scaleX(1)}}.lumal-tabs__item.is-pinned .lumal-tabs__tab[data-v-e1921025],.lumal-tabs__item.is-not-draggable[data-v-e1921025]{cursor:default}@media (pointer:coarse){.lumal-tabs__item.is-not-draggable[data-v-e1921025],.lumal-tabs__item[data-v-e1921025]{cursor:default}}@media (width<=768px){.lumal-tabs[data-v-e1921025]{height:40px}.lumal-tabs__list[data-v-e1921025]{gap:1px;padding:3px 4px 0}.lumal-tabs__item[data-v-e1921025]{min-width:72px;max-width:min(180px,42vw)}.lumal-tabs__tab[data-v-e1921025]{gap:4px;padding:0 22px 0 8px}.lumal-tabs__close[data-v-e1921025]{right:5px}.lumal-tabs__tool[data-v-e1921025]{flex-basis:32px;width:32px}.lumal-tabs__tool--refresh[data-v-e1921025],.lumal-tabs__tool--maximize[data-v-e1921025]{display:none}}@media (prefers-reduced-motion:reduce){.lumal-tabs__item[data-v-e1921025]{transition:none}.lumal-tabs.is-style-brisk .lumal-tabs__item.is-active[data-v-e1921025]:after{animation:none}}.lumal-tab-enter-active[data-v-e1921025],.lumal-tab-leave-active[data-v-e1921025]{transition:opacity .16s var(--lumal-easing-standard), transform .16s var(--lumal-easing-standard)}.lumal-tab-enter-from[data-v-e1921025]{opacity:0;transform:translate(-8px)}.lumal-tab-leave-to[data-v-e1921025]{opacity:0;transform:translate(8px)}.lumal-tab-move[data-v-e1921025]{transition:transform .16s var(--lumal-easing-standard)}@media (prefers-reduced-motion:reduce){.lumal-tab-enter-active[data-v-e1921025],.lumal-tab-leave-active[data-v-e1921025],.lumal-tab-move[data-v-e1921025]{transition:none}}.lumal-tabs-context-menu{z-index:var(--lumal-z-context-menu);border:1px solid var(--el-border-color-lighter);border-radius:var(--lumal-radius-base);background:var(--el-bg-color-overlay);min-width:168px;box-shadow:var(--lumal-shadow-base);transform-origin:0 0;animation:lumal-tab-menu-in .14s var(--lumal-easing-standard);padding:4px;display:grid;position:fixed}@keyframes lumal-tab-menu-in{0%{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}.lumal-tabs-context-menu button{border-radius:var(--lumal-radius-small);color:var(--el-text-color-regular);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:8px 12px;display:flex}.lumal-tabs-context-menu button:hover:not(:disabled){color:var(--el-text-color-primary);background:var(--el-fill-color-light)}.lumal-tabs-context-menu button:disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.lumal-tabs-context-menu button:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:-2px}.lumal-tabs-context-menu__divider{background:var(--el-border-color-lighter);height:1px;margin:4px 6px}@media (prefers-reduced-motion:reduce){.lumal-tabs-context-menu{animation:none}}.lumal-top-nav-menu-item__label[data-v-f78b5b43]{align-items:center;gap:6px;min-width:0;display:inline-flex}.lumal-top-nav-menu-item__external[data-v-f78b5b43]{color:var(--el-text-color-placeholder);font-size:calc(var(--lumal-font-size-base,14px) - 2px);margin-left:4px}.lumal-top-nav[data-v-1c664f72]{--lumal-top-nav-item-height:36px;--lumal-top-nav-item-radius:6px;--lumal-top-nav-item-gap:2px;--lumal-top-nav-item-padding-x:12px;width:100%;max-width:var(--lumal-top-nav-max-width);flex:auto;align-items:center;min-width:0;height:100%;display:flex;background:0 0!important;border-bottom:0!important}.lumal-top-nav.is-align-left[data-v-1c664f72]{justify-content:flex-start;margin-right:auto}.lumal-top-nav.is-align-center[data-v-1c664f72]{justify-content:center;margin-left:auto;margin-right:auto}.lumal-top-nav.is-align-right[data-v-1c664f72]{justify-content:flex-end;margin-left:auto}.lumal-top-nav[data-v-1c664f72] .el-menu-item,.lumal-top-nav[data-v-1c664f72] .el-sub-menu__title{margin:0 var(--lumal-top-nav-item-gap);border-radius:var(--lumal-top-nav-item-radius);color:var(--el-text-color-regular);font-size:calc(var(--lumal-font-size-base,14px) - 1px);justify-content:center;align-items:center;gap:6px;font-weight:500;line-height:1;transition:color .15s,background-color .15s;display:inline-flex;height:var(--lumal-top-nav-item-height)!important;min-height:var(--lumal-top-nav-item-height)!important;padding:0 var(--lumal-top-nav-item-padding-x)!important;border-bottom:0!important}.lumal-top-nav[data-v-1c664f72] .el-sub-menu{height:var(--lumal-top-nav-item-height);margin:0}.lumal-top-nav[data-v-1c664f72] .el-sub-menu .el-sub-menu__icon-arrow{margin-top:1px;margin-left:4px;font-size:10px}.lumal-top-nav[data-v-1c664f72] .el-menu-item:not(.is-disabled):hover,.lumal-top-nav[data-v-1c664f72] .el-menu-item:not(.is-disabled):focus,.lumal-top-nav[data-v-1c664f72] .el-sub-menu__title:hover{color:var(--el-text-color-primary)!important;background-color:var(--el-fill-color-light)!important}.lumal-top-nav[data-v-1c664f72] .el-menu-item.is-active,.lumal-top-nav[data-v-1c664f72] .el-sub-menu.is-active>.el-sub-menu__title,.lumal-top-nav[data-v-1c664f72] .el-sub-menu.is-active>.el-tooltip__trigger>.el-sub-menu__title{font-weight:600;color:var(--el-color-primary)!important;background-color:color-mix(in srgb, var(--el-color-primary) 12%, transparent)!important;border-bottom:0!important}.lumal-top-nav[data-v-1c664f72] .el-menu--horizontal>.el-menu-item.is-active,.lumal-top-nav[data-v-1c664f72] .el-menu--horizontal>.el-sub-menu.is-active .el-sub-menu__title{border-bottom:0!important}.lumal-top-nav[data-v-1c664f72] .el-menu--popup .el-menu-item,.lumal-top-nav[data-v-1c664f72] .el-menu--popup .el-sub-menu__title{border-radius:var(--lumal-top-nav-item-radius);justify-content:flex-start;margin:2px 6px;height:36px!important;min-height:36px!important}.lumal-top-nav__external[data-v-1c664f72]{color:var(--el-text-color-placeholder);font-size:calc(var(--lumal-font-size-base,14px) - 2px)}.lumal-top-nav__label[data-v-1c664f72]{align-items:center;gap:4px;min-width:0;display:inline-flex}.lumal-layout[data-v-c4a60970]{background:var(--el-bg-color-page);min-width:0;height:100dvh;min-height:100dvh;position:relative;overflow:hidden}.lumal-layout__body[data-v-c4a60970]{flex:auto;min-width:0;min-height:0;position:relative;overflow:hidden}.lumal-layout__main[data-v-c4a60970]{background:var(--el-bg-color-page);flex:auto;width:0;min-width:0;min-height:0;overflow:hidden}.lumal-layout__sidebar-scrim[data-v-c4a60970],.lumal-layout__mobile-sidebar[data-v-c4a60970]{display:none}.lumal-layout__header-breadcrumb[data-v-c4a60970]{background:0 0;border-bottom:0;width:100%;min-height:0;padding:0}.lumal-layout.is-content-maximized .lumal-layout__main[data-v-c4a60970]{z-index:var(--lumal-z-scrim);background:var(--el-bg-color-page);position:absolute;inset:0}.lumal-layout-sidebar-enter-active[data-v-c4a60970],.lumal-layout-sidebar-leave-active[data-v-c4a60970]{transition:width var(--lumal-motion-duration-base) var(--lumal-easing-standard), opacity var(--lumal-motion-duration-fast) ease, transform var(--lumal-motion-duration-base) var(--lumal-easing-standard), border-color var(--lumal-motion-duration-fast) ease;overflow:hidden}.lumal-layout-sidebar-leave-active[data-v-c4a60970]{pointer-events:none}.lumal-layout-sidebar-enter-from[data-v-c4a60970],.lumal-layout-sidebar-leave-to[data-v-c4a60970]{opacity:0;border-right-color:#0000;transform:translate(-12px);width:0!important}@media (width<=768px){.lumal-layout__desktop-sidebar[data-v-c4a60970]{display:none}.lumal-layout__mobile-sidebar[data-v-c4a60970]{z-index:var(--lumal-z-drawer);box-shadow:var(--lumal-shadow-base);display:block;position:absolute;inset:0 auto 0 0;transform:translate(0);width:min(var(--lumal-sidebar-width,248px), 84vw)!important}.lumal-layout.is-mobile-menu-hidden .lumal-layout__mobile-sidebar[data-v-c4a60970]{pointer-events:none;transform:translate(-100%)}.lumal-layout__sidebar-scrim[data-v-c4a60970]{z-index:var(--lumal-z-scrim);background:color-mix(in srgb, var(--lumal-color-text-primary) 42%, transparent);cursor:pointer;border:0;padding:0;display:block;position:absolute;inset:0}.lumal-layout.is-mobile-menu-hidden .lumal-layout__sidebar-scrim[data-v-c4a60970]{display:none}.lumal-layout__main[data-v-c4a60970]{width:100%}}@media (prefers-reduced-motion:reduce){.lumal-layout__body[data-v-c4a60970] .lumal-sidebar,.lumal-layout-sidebar-enter-active[data-v-c4a60970],.lumal-layout-sidebar-leave-active[data-v-c4a60970]{transition:none}}.lumal-router-view[data-v-3ad5cc30]{flex-direction:column;flex:auto;width:100%;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden visible}.lumal-router-view[data-v-3ad5cc30]>*{box-sizing:border-box;flex:auto;width:100%;min-width:0}.lumal-router-view__progress[data-v-3ad5cc30]{z-index:3000;background:color-mix(in srgb, var(--el-color-primary) 14%, transparent);height:2px;position:fixed;top:0;left:0;right:0;overflow:hidden}.lumal-router-view__progress-bar[data-v-3ad5cc30]{background:var(--el-color-primary);transform-origin:0;width:100%;height:100%;animation:.32s ease-out both lumal-router-view-progress-3ad5cc30;display:block}.lumal-router-view__loading[data-v-3ad5cc30]{z-index:19;background:color-mix(in srgb, var(--el-bg-color-page) 72%, transparent);pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.lumal-router-view__loading-dot[data-v-3ad5cc30]{border:3px solid color-mix(in srgb, var(--el-color-primary) 18%, transparent);border-top-color:var(--el-color-primary);border-radius:999px;width:28px;height:28px;animation:.72s linear infinite lumal-router-view-loading-3ad5cc30}.fade-side-enter-active[data-v-3ad5cc30],.fade-side-leave-active[data-v-3ad5cc30]{transition:opacity var(--lumal-motion-duration-slow) var(--lumal-easing-standard), transform var(--lumal-motion-duration-slow) var(--lumal-easing-standard)}.fade-side-enter-from[data-v-3ad5cc30]{opacity:0;transform:translate(-30px)}.fade-side-leave-to[data-v-3ad5cc30]{opacity:0;transform:translate(30px)}.fade-enter-active[data-v-3ad5cc30],.fade-leave-active[data-v-3ad5cc30]{transition:opacity var(--lumal-motion-duration-base) var(--lumal-easing-standard)}.fade-enter-from[data-v-3ad5cc30],.fade-leave-to[data-v-3ad5cc30]{opacity:0}.fade-bottom-enter-active[data-v-3ad5cc30],.fade-bottom-leave-active[data-v-3ad5cc30]{transition:opacity var(--lumal-motion-duration-base) var(--lumal-easing-standard), transform var(--lumal-motion-duration-slow) var(--lumal-easing-standard)}.fade-bottom-enter-from[data-v-3ad5cc30]{opacity:0;transform:translateY(10%)}.fade-bottom-leave-to[data-v-3ad5cc30]{opacity:0;transform:translateY(-10%)}.zoom-fade-enter-active[data-v-3ad5cc30],.zoom-fade-leave-active[data-v-3ad5cc30]{transition:opacity var(--lumal-motion-duration-slow) var(--lumal-easing-standard), transform var(--lumal-motion-duration-slow) var(--lumal-easing-standard)}.zoom-fade-enter-from[data-v-3ad5cc30]{opacity:0;transform:scale(1.2)}.zoom-fade-leave-to[data-v-3ad5cc30]{opacity:0;transform:scale(.8)}@keyframes lumal-router-view-progress-3ad5cc30{0%{transform:scaleX(0)}to{transform:scaleX(1)}}@keyframes lumal-router-view-loading-3ad5cc30{to{transform:rotate(360deg)}}.lumal-theme-settings[data-v-e1228cb0]{height:100%;min-height:0;color:var(--el-text-color-primary);flex-direction:column;display:flex;overflow:hidden;container-type:inline-size}.lumal-theme-settings__tabs[data-v-e1228cb0]{border:1px solid var(--el-border-color-lighter);background:var(--el-fill-color);border-radius:9px;flex:none;grid-template-columns:repeat(3,1fr);gap:4px;margin-top:12px;padding:4px;display:grid}.lumal-theme-settings__tab[data-v-e1228cb0]{min-height:34px;color:var(--el-text-color-secondary);cursor:pointer;font-size:calc(var(--lumal-font-size-base,14px) - 1px);background:0 0;border:0;border-radius:6px;padding:0 8px;font-weight:600;transition:color .2s,background-color .2s,box-shadow .2s}.lumal-theme-settings__tab[data-v-e1228cb0]:hover{color:var(--el-text-color-primary)}.lumal-theme-settings__tab.is-active[data-v-e1228cb0]{color:var(--el-color-primary);background:var(--el-bg-color);box-shadow:0 1px 3px color-mix(in srgb, var(--el-color-black) 12%, transparent)}.lumal-theme-settings__scroll[data-v-e1228cb0]{scrollbar-width:thin;flex:1;min-height:0;padding:18px 4px 22px;overflow-y:auto}.lumal-theme-settings__pane[data-v-e1228cb0]{gap:26px;display:grid}.lumal-theme-settings__section[data-v-e1228cb0]{gap:12px;display:grid}.lumal-theme-settings__section+.lumal-theme-settings__section[data-v-e1228cb0]{border-top:0;padding-top:0}h4[data-v-e1228cb0]{color:var(--el-text-color-primary);font-size:var(--lumal-font-size-base,14px);letter-spacing:.01em;margin:0;font-weight:700}.lumal-theme-settings__row[data-v-e1228cb0]{min-height:34px;font-size:calc(var(--lumal-font-size-base,14px) - 1px);justify-content:space-between;align-items:center;gap:12px;padding:0 4px;display:flex}.lumal-theme-settings__row.is-stacked[data-v-e1228cb0]{grid-template-columns:1fr auto;display:grid}.lumal-theme-settings__row.is-stacked[data-v-e1228cb0] .el-slider{grid-column:1;width:100%}.lumal-theme-settings__row.is-stacked[data-v-e1228cb0] .el-input-number{grid-area:2/2;width:112px}.is-disabled[data-v-e1228cb0]{opacity:.48}.lumal-theme-settings__card-grid[data-v-e1228cb0],.lumal-theme-settings__layout-grid[data-v-e1228cb0],.lumal-theme-settings__transition-grid[data-v-e1228cb0]{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.lumal-theme-settings__card-grid.is-three[data-v-e1228cb0],.lumal-theme-settings__layout-grid[data-v-e1228cb0]{grid-template-columns:repeat(3,minmax(0,1fr))}.lumal-theme-settings__transition-grid[data-v-e1228cb0]{grid-template-columns:repeat(4,minmax(0,1fr))}button[data-v-e1228cb0]{font:inherit}.lumal-theme-settings__mode-card[data-v-e1228cb0],.lumal-theme-settings__layout-card[data-v-e1228cb0],.lumal-theme-settings__transition-card[data-v-e1228cb0]{border:1px solid var(--el-border-color-lighter);min-width:0;min-height:62px;color:var(--el-text-color-secondary);cursor:pointer;background:var(--el-bg-color);box-shadow:0 1px 2px color-mix(in srgb, var(--el-color-black) 4%, transparent);border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:8px;transition:border-color .2s,color .2s,background-color .2s,box-shadow .2s;display:flex}.lumal-theme-settings__mode-card[data-v-e1228cb0]:hover,.lumal-theme-settings__layout-card[data-v-e1228cb0]:hover,.lumal-theme-settings__transition-card[data-v-e1228cb0]:hover{border-color:var(--el-color-primary-light-5);color:var(--el-text-color-primary);box-shadow:0 3px 8px color-mix(in srgb, var(--el-color-black) 8%, transparent)}.lumal-theme-settings__mode-card.is-active[data-v-e1228cb0],.lumal-theme-settings__layout-card.is-active[data-v-e1228cb0],.lumal-theme-settings__transition-card.is-active[data-v-e1228cb0]{border-color:var(--el-color-primary);color:var(--el-color-primary);background:color-mix(in srgb, var(--el-color-primary) 8%, var(--el-bg-color));box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--el-color-primary) 30%, transparent)}.lumal-theme-settings__mode-card[data-v-e1228cb0]:focus-visible,.lumal-theme-settings__layout-card[data-v-e1228cb0]:focus-visible,.lumal-theme-settings__transition-card[data-v-e1228cb0]:focus-visible,.lumal-theme-settings__tab[data-v-e1228cb0]:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.lumal-theme-settings__mode-icon[data-v-e1228cb0]{flex:none}.lumal-theme-settings__mode-card>span[data-v-e1228cb0]:last-child{white-space:nowrap;word-break:keep-all}.lumal-theme-settings__color-grid[data-v-e1228cb0]{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.lumal-theme-settings__color-card[data-v-e1228cb0]{border:1px solid var(--el-border-color-lighter);min-width:0;min-height:68px;color:var(--el-text-color-secondary);cursor:pointer;background:var(--el-bg-color);border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:7px;padding:8px 6px;transition:border-color .2s,color .2s,background-color .2s,box-shadow .2s;display:flex;position:relative;overflow:hidden}.lumal-theme-settings__color-card[data-v-e1228cb0]:hover{border-color:var(--el-color-primary-light-5);color:var(--el-text-color-primary)}.lumal-theme-settings__color-card.is-active[data-v-e1228cb0]{border-color:var(--el-color-primary);color:var(--el-color-primary);background:color-mix(in srgb, var(--el-color-primary) 6%, var(--el-bg-color));box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--el-color-primary) 25%, transparent)}.lumal-theme-settings__color-card i[data-v-e1228cb0]{width:28px;height:20px;box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--el-color-black) 8%, transparent);border-radius:6px;flex:none}.lumal-theme-settings__color-card i.is-custom[data-v-e1228cb0]{background:linear-gradient(135deg,#3b82f6,#8b5cf6 50%,#ef4444)}.lumal-theme-settings__color-card>span[data-v-e1228cb0]{min-width:0;max-width:100%;font-size:calc(var(--lumal-font-size-base,14px) - 2px);text-overflow:ellipsis;white-space:nowrap;word-break:keep-all;overflow:hidden}.lumal-theme-settings__color-card input[data-v-e1228cb0]{opacity:0;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.lumal-theme-settings__radius-grid[data-v-e1228cb0],.lumal-theme-settings__segments[data-v-e1228cb0]{grid-template-columns:repeat(5,1fr);gap:6px;display:grid}.lumal-theme-settings__radius-grid button[data-v-e1228cb0],.lumal-theme-settings__segments button[data-v-e1228cb0]{border:1px solid var(--el-border-color-lighter);min-height:32px;color:var(--el-text-color-secondary);cursor:pointer;background:var(--el-bg-color);border-radius:6px}.lumal-theme-settings__radius-grid button.is-active[data-v-e1228cb0],.lumal-theme-settings__segments button.is-active[data-v-e1228cb0]{border-color:var(--el-color-primary);color:var(--el-color-primary);background:var(--el-color-primary-light-9)}.lumal-theme-settings__segments[data-v-e1228cb0]{grid-column:1/-1;grid-template-columns:repeat(3,1fr)}.lumal-theme-settings__tab-style[data-v-e1228cb0]{grid-template-columns:repeat(4,1fr)}.lumal-theme-settings__layout-preview[data-v-e1228cb0]{width:100%;max-height:48px;color:var(--el-color-primary)}.lumal-theme-settings__layout-preview rect[data-v-e1228cb0]{fill:var(--el-fill-color);stroke:color-mix(in srgb, var(--el-border-color) 80%, transparent);stroke-width:1px}.lumal-theme-settings__layout-preview rect.is-background[data-v-e1228cb0]{fill:var(--el-fill-color-lighter)}.lumal-theme-settings__layout-preview rect.is-medium[data-v-e1228cb0]{fill:var(--el-color-primary-light-7);stroke:var(--el-color-primary-light-5)}.lumal-theme-settings__layout-preview rect.is-strong[data-v-e1228cb0]{fill:var(--el-color-primary-light-5);stroke:var(--el-color-primary-light-3)}.lumal-theme-settings__transition-card[data-v-e1228cb0]{min-height:64px;font-size:calc(var(--lumal-font-size-base,14px) - 2px);padding:7px 4px}.lumal-theme-settings__transition-preview[data-v-e1228cb0]{background:var(--el-fill-color-light);border-radius:6px;width:42px;height:30px;position:relative}.lumal-theme-settings__transition-preview i[data-v-e1228cb0]{background:var(--el-color-primary-light-5);opacity:.3;border-radius:5px;position:absolute;inset:7px 10px}.lumal-theme-settings__transition-preview i[data-v-e1228cb0]:last-child{opacity:1}.lumal-theme-settings__transition-card:not(:disabled).is-fade-side i[data-v-e1228cb0]:last-child{animation:2.4s infinite lumal-settings-side-e1228cb0}.lumal-theme-settings__transition-card:not(:disabled).is-fade i[data-v-e1228cb0]:last-child{animation:2.4s infinite lumal-settings-fade-e1228cb0}.lumal-theme-settings__transition-card:not(:disabled).is-fade-bottom i[data-v-e1228cb0]:last-child{animation:2.4s infinite lumal-settings-bottom-e1228cb0}.lumal-theme-settings__transition-card:not(:disabled).is-zoom-fade i[data-v-e1228cb0]:last-child{animation:2.4s infinite lumal-settings-zoom-e1228cb0}.lumal-theme-settings__transition-card[data-v-e1228cb0]:disabled{cursor:not-allowed;opacity:.45}.lumal-theme-settings__actions[data-v-e1228cb0]{border-top:1px solid var(--el-border-color-lighter);background:var(--el-bg-color-page);flex:none;padding:12px 4px 0}.lumal-theme-settings__reset[data-v-e1228cb0]{border-color:var(--el-border-color);background:var(--el-bg-color);gap:8px;width:100%;min-height:38px}@keyframes lumal-settings-side-e1228cb0{0%,20%,to{opacity:0;transform:translate(-10px)}40%,80%{opacity:1;transform:translate(0)}}@keyframes lumal-settings-fade-e1228cb0{0%,20%,to{opacity:0}40%,80%{opacity:1}}@keyframes lumal-settings-bottom-e1228cb0{0%,20%,to{opacity:0;transform:translateY(8px)}40%,80%{opacity:1;transform:translateY(0)}}@keyframes lumal-settings-zoom-e1228cb0{0%,20%,to{opacity:0;transform:scale(.82)}40%,80%{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion:reduce){.lumal-theme-settings[data-v-e1228cb0] *,.lumal-theme-settings[data-v-e1228cb0] :before,.lumal-theme-settings[data-v-e1228cb0] :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation:none!important}}@container (width<=320px){.lumal-theme-settings__transition-grid[data-v-e1228cb0]{grid-template-columns:repeat(2,minmax(0,1fr))}}
2
+ /*$vite$:1*/
@@ -0,0 +1,19 @@
1
+ import { m as e } from "./composables-C9EuCUjj.js";
2
+ //#region src/dictionary/fetcher.ts
3
+ async function t(e, t) {
4
+ return e ? typeof e == "function" ? e(t) : e : [];
5
+ }
6
+ function n(n) {
7
+ let r = n.warnOnRemoteFailure ?? !0;
8
+ return async (i) => {
9
+ let a = [];
10
+ try {
11
+ a = e(await n.remote(i));
12
+ } catch (e) {
13
+ r && console.warn(`[dictionary] remote fetcher failed for "${i}":`, e);
14
+ }
15
+ return a.length > 0 ? { items: a } : { items: await t(n.fallback, i) };
16
+ };
17
+ }
18
+ //#endregion
19
+ export { n as t };
@@ -0,0 +1 @@
1
+ const e=require("./composables-C4twj5Ov.cjs");async function t(e,t){return e?typeof e==`function`?e(t):e:[]}function n(n){let r=n.warnOnRemoteFailure??!0;return async i=>{let a=[];try{a=e.m(await n.remote(i))}catch(e){r&&console.warn(`[dictionary] remote fetcher failed for "${i}":`,e)}return a.length>0?{items:a}:{items:await t(n.fallback,i)}}}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return n}});
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./composables-C4twj5Ov.cjs"),t=require("./dictionary-ClEWtQCU.cjs");exports.createDictionaryFetcherWithFallback=t.t,exports.createDictionaryStore=e.d,exports.dictionaryContextKey=e.u,exports.getActiveDictionaryContext=e.a,exports.getDictionaryLabel=e.f,exports.getDictionaryOptions=e.t,exports.getDictionaryValueLabel=e.n,exports.installDictionary=e.o,exports.normalizeDictionaryOptionList=e.p,exports.normalizeDictionaryOptions=e.m,exports.provideDictionaryContext=e.s,exports.setActiveDictionaryContext=e.c,exports.useDictionary=e.r,exports.useDictionaryContext=e.l,exports.useDictionaryMap=e.i;
@@ -0,0 +1,3 @@
1
+ import { a as e, c as t, d as n, f as r, i, l as a, m as o, n as s, o as c, p as l, r as u, s as d, t as f, u as p } from "./composables-C9EuCUjj.js";
2
+ import { t as m } from "./dictionary-B7tsaVqB.js";
3
+ export { m as createDictionaryFetcherWithFallback, n as createDictionaryStore, p as dictionaryContextKey, e as getActiveDictionaryContext, r as getDictionaryLabel, f as getDictionaryOptions, s as getDictionaryValueLabel, c as installDictionary, l as normalizeDictionaryOptionList, o as normalizeDictionaryOptions, d as provideDictionaryContext, t as setActiveDictionaryContext, u as useDictionary, a as useDictionaryContext, i as useDictionaryMap };
@@ -0,0 +1,16 @@
1
+ //#region src/permission/directive.ts
2
+ function e(e, t, n, r) {
3
+ e.style.display = n.hasPermission(t.value, r.mode) ? "" : "none";
4
+ }
5
+ function t(t, n = {}) {
6
+ return {
7
+ mounted(r, i) {
8
+ e(r, i, t, n);
9
+ },
10
+ updated(r, i) {
11
+ e(r, i, t, n);
12
+ }
13
+ };
14
+ }
15
+ //#endregion
16
+ export { t };
@@ -0,0 +1 @@
1
+ function e(e,t,n,r){e.style.display=n.hasPermission(t.value,r.mode)?``:`none`}function t(t,n={}){return{mounted(r,i){e(r,i,t,n)},updated(r,i){e(r,i,t,n)}}}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return t}});
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./directive-DSVr7QvO.cjs");function t(t,n={}){return e.t(t,n)}function n(e,n,r={}){let i=t(n,r);e.directive(`authority`,i),e.directive(`permission`,i)}exports.createAuthorityDirective=t,exports.createPermissionDirective=e.t,exports.registerAuthorityDirectives=n;
@@ -0,0 +1,11 @@
1
+ import { t as e } from "./directive-D-fB5qbY.js";
2
+ //#region src/directives/index.ts
3
+ function t(t, n = {}) {
4
+ return e(t, n);
5
+ }
6
+ function n(e, n, r = {}) {
7
+ let i = t(n, r);
8
+ e.directive("authority", i), e.directive("permission", i);
9
+ }
10
+ //#endregion
11
+ export { t as createAuthorityDirective, e as createPermissionDirective, n as registerAuthorityDirectives };
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./layout-ZnyG9X3N.cjs"),t=require("./composables-C4twj5Ov.cjs"),n=require("./dictionary-ClEWtQCU.cjs"),r=require("./permission-6sXtjGMS.cjs"),i=require("./components-DJiHYQQB.cjs"),a=require("./LumalThemeSettingsPanel-C6aPhgUX.cjs"),o=require("./router.cjs");let s=require("@lumal/icons"),c=require("vue"),l=require("@lumal/icons-vue");var u={LumalAccessControl:r.n,LumalBreadcrumb:e.P,LumalContent:e.N,LumalCrudTable:i.i,LumalHeader:e.j,LumalIcon:l.LumalIcon,LumalIconPicker:l.LumalIconPicker,LumalIconPickerDialog:l.LumalIconPickerDialog,LumalInfoTable:i.r,LumalGlobalSearch:e.M,LumalLayout:e.n,LumalPage:i.n,LumalPageLayout:i.t,LumalPagination:i.c,LumalRouterView:e.t,LumalSchemaForm:i.s,LumalSchemaTable:i.o,LumalSidebar:e.A,LumalTabs:e.k,LumalThemeSettingsPanel:a.t,LumalTopNav:e.O};function d(e){let t=e.preset??`admin-default`;return t===`minimal`?{...e,components:e.components??!0,dictionary:e.dictionary??!1,preset:t}:{...e,components:e.components??!0,preset:t}}function f(e){return!!(e&&typeof e==`object`&&`plugin`in e)}function p(e,n){n.dictionary!==!1&&t.o(e,n.dictionary),n.router&&e.use(n.router),n.pinia&&e.use(n.pinia),n.elementPlus&&(f(n.elementPlus)?e.use(n.elementPlus.plugin,n.elementPlus.options):e.use(n.elementPlus))}function m(e,t){let n=t.components;if(n===!1)return;let r=n===!0||n===void 0?u:Array.isArray(n)?Object.fromEntries(n.filter(e=>!!u[e]).map(e=>[e,u[e]])):n;Object.entries(r).forEach(([t,n])=>{e.component(t,n)})}function h(e){let t=d(e),n=(0,c.createApp)(t.rootComponent,t.rootProps);t.permissionStore&&n.provide(r.o,t.permissionStore),t.icons?.localSvg?.length&&(0,s.registerStaticLocalSvgIcons)(t.icons.localSvg),p(n,t),m(n,t);let i={app:n,permissionStore:t.permissionStore,pinia:t.pinia,router:t.router},a;function o(){return a??=Promise.resolve().then(()=>t.setup?.(i)).then(()=>t.router?.isReady?.()),a}let l={...i,async mount(e){return await o(),n.mount(e)},use(e,...t){return n.use(e,...t),l}};return l}exports.LumalAccessControl=r.n,exports.LumalCrudTable=i.i,Object.defineProperty(exports,"LumalIcon",{enumerable:!0,get:function(){return l.LumalIcon}}),Object.defineProperty(exports,"LumalIconPicker",{enumerable:!0,get:function(){return l.LumalIconPicker}}),Object.defineProperty(exports,"LumalIconPickerDialog",{enumerable:!0,get:function(){return l.LumalIconPickerDialog}}),exports.LumalInfoTable=i.r,exports.LumalPage=i.n,exports.LumalPageLayout=i.t,exports.LumalPagination=i.c,exports.LumalSchemaForm=i.s,exports.LumalSchemaTable=i.o,exports.MenuRouteConflictError=o.MenuRouteConflictError,exports.createDictionaryFetcherWithFallback=n.t,exports.createDictionaryStore=t.d,exports.createGlobComponentResolver=o.createGlobComponentResolver,exports.createLumalAdmin=h,exports.createMenuRouteRuntime=o.createMenuRouteRuntime,exports.createRouteRecords=o.createRouteRecords,exports.createRouteRegistry=o.createRouteRegistry,exports.createSidebarMenus=o.createSidebarMenus,exports.createTopMenus=o.createTopMenus,exports.deriveCrudFormSchemas=i.a,exports.dictionaryContextKey=t.u,exports.findFirstAccessibleMenu=o.findFirstAccessibleMenu,exports.getActiveDictionaryContext=t.a,exports.getDictionaryLabel=t.f,exports.getDictionaryOptions=t.t,exports.getDictionaryValueLabel=t.n,exports.installDictionary=t.o,exports.normalizeDictionaryOptionList=t.p,exports.normalizeDictionaryOptions=t.m,exports.normalizeMenuNodes=o.normalizeMenuNodes,exports.normalizeMenuRecords=o.normalizeMenuRecords,exports.provideDictionaryContext=t.s,exports.setActiveDictionaryContext=t.c,exports.useDictionary=t.r,exports.useDictionaryContext=t.l,exports.useDictionaryMap=t.i;
package/dist/index.js ADDED
@@ -0,0 +1,88 @@
1
+ import { a as e, c as t, d as n, f as r, i, l as a, m as o, n as s, o as c, p as l, r as u, s as d, t as f, u as p } from "./composables-C9EuCUjj.js";
2
+ import { t as m } from "./dictionary-B7tsaVqB.js";
3
+ import { n as h, o as g } from "./permission-CCkqvnWg.js";
4
+ import { a as _, c as v, d as y, i as b, l as x, n as S, o as C, r as w, s as T, t as E, u as D } from "./components-DYmKh-eF.js";
5
+ import { A as O, M as k, N as A, O as j, P as M, j as N, k as P, n as F, t as I } from "./layout-C8H9wuQa.js";
6
+ import { t as L } from "./LumalThemeSettingsPanel-BFkZzwEW.js";
7
+ import { MenuRouteConflictError as ee, createGlobComponentResolver as R, createMenuRouteRuntime as z, createRouteRecords as B, createRouteRegistry as V, createSidebarMenus as H, createTopMenus as U, findFirstAccessibleMenu as W, normalizeMenuNodes as G, normalizeMenuRecords as K } from "./router.js";
8
+ import { registerStaticLocalSvgIcons as q } from "@lumal/icons";
9
+ import { createApp as J } from "vue";
10
+ import { LumalIcon as Y, LumalIconPicker as X, LumalIconPickerDialog as Z } from "@lumal/icons-vue";
11
+ //#region src/app/default-components.ts
12
+ var Q = {
13
+ LumalAccessControl: h,
14
+ LumalBreadcrumb: M,
15
+ LumalContent: A,
16
+ LumalCrudTable: T,
17
+ LumalHeader: N,
18
+ LumalIcon: Y,
19
+ LumalIconPicker: X,
20
+ LumalIconPickerDialog: Z,
21
+ LumalInfoTable: C,
22
+ LumalGlobalSearch: k,
23
+ LumalLayout: F,
24
+ LumalPage: _,
25
+ LumalPageLayout: b,
26
+ LumalPagination: y,
27
+ LumalRouterView: I,
28
+ LumalSchemaForm: D,
29
+ LumalSchemaTable: x,
30
+ LumalSidebar: O,
31
+ LumalTabs: P,
32
+ LumalThemeSettingsPanel: L,
33
+ LumalTopNav: j
34
+ };
35
+ //#endregion
36
+ //#region src/app/createLumalAdmin.ts
37
+ function $(e) {
38
+ let t = e.preset ?? "admin-default";
39
+ return t === "minimal" ? {
40
+ ...e,
41
+ components: e.components ?? !0,
42
+ dictionary: e.dictionary ?? !1,
43
+ preset: t
44
+ } : {
45
+ ...e,
46
+ components: e.components ?? !0,
47
+ preset: t
48
+ };
49
+ }
50
+ function te(e) {
51
+ return !!(e && typeof e == "object" && "plugin" in e);
52
+ }
53
+ function ne(e, t) {
54
+ t.dictionary !== !1 && c(e, t.dictionary), t.router && e.use(t.router), t.pinia && e.use(t.pinia), t.elementPlus && (te(t.elementPlus) ? e.use(t.elementPlus.plugin, t.elementPlus.options) : e.use(t.elementPlus));
55
+ }
56
+ function re(e, t) {
57
+ let n = t.components;
58
+ if (n === !1) return;
59
+ let r = n === !0 || n === void 0 ? Q : Array.isArray(n) ? Object.fromEntries(n.filter((e) => !!Q[e]).map((e) => [e, Q[e]])) : n;
60
+ Object.entries(r).forEach(([t, n]) => {
61
+ e.component(t, n);
62
+ });
63
+ }
64
+ function ie(e) {
65
+ let t = $(e), n = J(t.rootComponent, t.rootProps);
66
+ t.permissionStore && n.provide(g, t.permissionStore), t.icons?.localSvg?.length && q(t.icons.localSvg), ne(n, t), re(n, t);
67
+ let r = {
68
+ app: n,
69
+ permissionStore: t.permissionStore,
70
+ pinia: t.pinia,
71
+ router: t.router
72
+ }, i;
73
+ function a() {
74
+ return i ??= Promise.resolve().then(() => t.setup?.(r)).then(() => t.router?.isReady?.()), i;
75
+ }
76
+ let o = {
77
+ ...r,
78
+ async mount(e) {
79
+ return await a(), n.mount(e);
80
+ },
81
+ use(e, ...t) {
82
+ return n.use(e, ...t), o;
83
+ }
84
+ };
85
+ return o;
86
+ }
87
+ //#endregion
88
+ export { h as LumalAccessControl, T as LumalCrudTable, E as LumalIcon, S as LumalIconPicker, w as LumalIconPickerDialog, C as LumalInfoTable, _ as LumalPage, b as LumalPageLayout, y as LumalPagination, D as LumalSchemaForm, x as LumalSchemaTable, ee as MenuRouteConflictError, m as createDictionaryFetcherWithFallback, n as createDictionaryStore, R as createGlobComponentResolver, ie as createLumalAdmin, z as createMenuRouteRuntime, B as createRouteRecords, V as createRouteRegistry, H as createSidebarMenus, U as createTopMenus, v as deriveCrudFormSchemas, p as dictionaryContextKey, W as findFirstAccessibleMenu, e as getActiveDictionaryContext, r as getDictionaryLabel, f as getDictionaryOptions, s as getDictionaryValueLabel, c as installDictionary, l as normalizeDictionaryOptionList, o as normalizeDictionaryOptions, G as normalizeMenuNodes, K as normalizeMenuRecords, d as provideDictionaryContext, t as setActiveDictionaryContext, u as useDictionary, a as useDictionaryContext, i as useDictionaryMap };