@saasicat/ui-vue 1.0.0-rc.2 → 1.0.0-rc.20

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 (306) hide show
  1. package/README.md +84 -19
  2. package/dist/.build-stamp +1 -1
  3. package/dist/assets/material-icons/material-icons.css +31 -0
  4. package/dist/assets/material-icons/web-font/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.woff +0 -0
  5. package/dist/assets/material-icons/web-font/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2 +0 -0
  6. package/dist/assets/quasar.css +11696 -0
  7. package/dist/assets/ui-vue.css +6923 -0
  8. package/dist/auth/SuperAdminLoginPage.js +213 -0
  9. package/dist/auth/SuperAdminSetupWizard.js +5 -0
  10. package/dist/{batch-column-fetcher-Dk9X92db.d.cts → batch-column-fetcher-CFnqFxQU.d.ts} +5 -5
  11. package/dist/{batch-column-fetcher-VwjOxerL.d.ts → batch-column-fetcher-DmoujOET.d.cts} +5 -5
  12. package/dist/{catalog-C5VKGbxk.d.cts → catalog-DUdy_YZB.d.cts} +124 -86
  13. package/dist/{catalog-C5VKGbxk.d.ts → catalog-DUdy_YZB.d.ts} +124 -86
  14. package/dist/{chunk-4CJBABLZ.js → chunk-3GE35VVZ.js} +634 -196
  15. package/dist/{chunk-6X6AGH66.js → chunk-MPVQBEM6.js} +7 -4
  16. package/dist/{chunk-P4EJF43F.js → chunk-OH6IXCK7.js} +346 -297
  17. package/dist/{chunk-A7JICGQ5.js → chunk-S3I4ZLOQ.js} +16 -3
  18. package/dist/chunk-U7LNAX6T.js +35 -0
  19. package/dist/{chunk-L7HPDVHV.js → chunk-V4GZU757.js} +86 -7
  20. package/dist/chunks/AdminAccordion.vue_vue_type_script_setup_true_lang-DOwlTV5_.js +175 -0
  21. package/dist/chunks/AdminBanner.vue_vue_type_script_setup_true_lang-D27JEaak.js +83 -0
  22. package/dist/chunks/AdminBody.vue_vue_type_script_setup_true_lang-DxcVRzXE.js +41 -0
  23. package/dist/chunks/AdminDialog.vue_vue_type_script_setup_true_lang-CpxfSrx-.js +138 -0
  24. package/dist/chunks/AdminEmptyState.vue_vue_type_script_setup_true_lang-jaYkgNbE.js +48 -0
  25. package/dist/chunks/AdminErrorBanner.vue_vue_type_script_setup_true_lang-t-5uqt82.js +50 -0
  26. package/dist/chunks/AdminField.vue_vue_type_script_setup_true_lang-CtPByt2w.js +63 -0
  27. package/dist/chunks/AdminFieldGrid.vue_vue_type_script_setup_true_lang-BxuyHtBU.js +21 -0
  28. package/dist/chunks/AdminFilters.vue_vue_type_script_setup_true_lang-DSnzAlwj.js +18 -0
  29. package/dist/chunks/AdminFormDialog.vue_vue_type_script_setup_true_lang-BpWshaWv.js +84 -0
  30. package/dist/chunks/AdminHero.vue_vue_type_script_setup_true_lang-CoaRxXLF.js +46 -0
  31. package/dist/chunks/AdminKpi.vue_vue_type_script_setup_true_lang-CgCcGGmY.js +79 -0
  32. package/dist/chunks/AdminPage.vue_vue_type_script_setup_true_lang-L7St_zOY.js +15 -0
  33. package/dist/chunks/AdminPaginator.vue_vue_type_script_setup_true_lang-Cv8EEBGP.js +157 -0
  34. package/dist/chunks/AdminRefreshBtn.vue_vue_type_script_setup_true_lang-Bxk5GWOB.js +41 -0
  35. package/dist/chunks/AdminSection.vue_vue_type_script_setup_true_lang-DpjApOU-.js +62 -0
  36. package/dist/chunks/AdminStatistics.vue_vue_type_script_setup_true_lang-DwHeeYCX.js +32 -0
  37. package/dist/chunks/AdminStatusPill.vue_vue_type_script_setup_true_lang-09G3rCxN.js +32 -0
  38. package/dist/chunks/AdminTable.vue_vue_type_script_setup_true_lang-BzAusc-r.js +2007 -0
  39. package/dist/chunks/ClosePopup-iyFHWknU.js +48 -0
  40. package/dist/chunks/PromoCodeEditDialog.vue_vue_type_script_setup_true_lang-NiW-Ky7H.js +639 -0
  41. package/dist/chunks/QBadge-B8LYhEVv.js +43 -0
  42. package/dist/chunks/QBtn-CSVcAwrE.js +770 -0
  43. package/dist/chunks/QCard-g0Hwqx6i.js +30 -0
  44. package/dist/chunks/QCardSection-FvPMZdQ4.js +22 -0
  45. package/dist/chunks/QCheckbox-BwxH7EyE.js +63 -0
  46. package/dist/chunks/QDialog-CcwVEueo.js +331 -0
  47. package/dist/chunks/QIcon-DaxYRLz0.js +195 -0
  48. package/dist/chunks/QInput-SRRCebo8.js +1663 -0
  49. package/dist/chunks/QItem-DunhGoPO.js +127 -0
  50. package/dist/chunks/QList-D3jMUITp.js +37 -0
  51. package/dist/chunks/QMenu-BFP-qtEm.js +831 -0
  52. package/dist/chunks/QSelect-jOvICNCy.js +1885 -0
  53. package/dist/chunks/QSeparator-CrLemO5z.js +60 -0
  54. package/dist/chunks/QSpinner-DblEBRSQ.js +57 -0
  55. package/dist/chunks/QToggle-BBogOutP.js +40 -0
  56. package/dist/chunks/QTooltip-Ch_r2hMZ.js +320 -0
  57. package/dist/chunks/SuperAdminSetupWizard-UO4j4Eyu.js +465 -0
  58. package/dist/chunks/TenantActionConfirmDialog-DU11RlmB.js +201 -0
  59. package/dist/chunks/_plugin-vue_export-helper-1tPrXgE0.js +10 -0
  60. package/dist/chunks/catalog-i18n-tKlkm6-2.js +32 -0
  61. package/dist/chunks/create-Ck-e8kVF.js +42 -0
  62. package/dist/chunks/detached-fullscreen-DuM-R9uv.js +488 -0
  63. package/dist/chunks/focus-manager-Cc4uTjsQ.js +301 -0
  64. package/dist/chunks/format-BIQKj_qk.js +23 -0
  65. package/dist/chunks/is-DNOHJAOK.js +269 -0
  66. package/dist/chunks/plan-area-context-RiY4rHni.js +20 -0
  67. package/dist/chunks/private.use-form-BdJSI6of.js +30 -0
  68. package/dist/chunks/render-DSsuXum_.js +32 -0
  69. package/dist/chunks/symbols-Cy0ehVpr.js +67 -0
  70. package/dist/chunks/touch-B8tpYG34.js +162 -0
  71. package/dist/chunks/use-checkbox-CBtmpkdc.js +221 -0
  72. package/dist/chunks/use-dark-VmDF1SYZ.js +14 -0
  73. package/dist/chunks/use-hydration-PO-eh3w4.js +14 -0
  74. package/dist/chunks/use-prevent-scroll-B9A_pIzH.js +156 -0
  75. package/dist/chunks/use-render-cache-Bj5SbY5v.js +22 -0
  76. package/dist/chunks/use-size-C7KmPm4L.js +23 -0
  77. package/dist/chunks/vm-Dl-TBfKC.js +182 -0
  78. package/dist/client/index.cjs +472 -300
  79. package/dist/client/index.d.cts +106 -7
  80. package/dist/client/index.d.ts +106 -7
  81. package/dist/client/index.js +23 -3
  82. package/dist/index.cjs +1159 -530
  83. package/dist/index.d.cts +5 -5
  84. package/dist/index.d.ts +5 -5
  85. package/dist/index.js +49 -7
  86. package/dist/layouts/AdminLayout.js +1711 -0
  87. package/dist/pages/AdminManifestErrorPage.js +99 -0
  88. package/dist/pages/AuditPage.js +244 -0
  89. package/dist/pages/BundlesPage.js +2883 -0
  90. package/dist/pages/DashboardPage.js +299 -0
  91. package/dist/pages/DiscoveryPage.js +2563 -0
  92. package/dist/pages/EmailHistoryPage.js +509 -0
  93. package/dist/pages/MarketingCatalogPage.js +2093 -0
  94. package/dist/pages/PilotsPage.js +1197 -0
  95. package/dist/pages/PlanReviewPage.js +563 -0
  96. package/dist/pages/PlanVersionEditorPage.js +1626 -0
  97. package/dist/pages/PlansPage.js +6164 -0
  98. package/dist/pages/PlatformEmailPage.js +455 -0
  99. package/dist/pages/PromoCodeDetailPage.js +240 -0
  100. package/dist/pages/PromoCodesPage.js +557 -0
  101. package/dist/pages/SettingsPage.js +216 -0
  102. package/dist/pages/SubscriptionsPage.js +113 -0
  103. package/dist/pages/TenantDetailPage.js +393 -0
  104. package/dist/pages/TenantsPage.js +430 -0
  105. package/dist/pages/UsersPage.js +386 -0
  106. package/dist/pages/index.js +75 -0
  107. package/dist/quasar/index.cjs +386 -297
  108. package/dist/quasar/index.d.cts +13 -3
  109. package/dist/quasar/index.d.ts +13 -3
  110. package/dist/quasar/index.js +10 -6
  111. package/dist/{resource-registry-Cw_c0F11.d.ts → resource-registry-CYmBGVPK.d.cts} +32 -18
  112. package/dist/{resource-registry-CrHUvVx6.d.cts → resource-registry-bG2PxbM0.d.ts} +32 -18
  113. package/dist/testing/admin-pages-suite.cjs +4 -1
  114. package/dist/testing/admin-pages-suite.d.cts +10 -1
  115. package/dist/testing/admin-pages-suite.d.ts +10 -1
  116. package/dist/testing/admin-pages-suite.js +3 -1
  117. package/dist/testing/mount-with-quasar.cjs +65 -0
  118. package/dist/testing/mount-with-quasar.d.cts +7 -0
  119. package/dist/testing/mount-with-quasar.d.ts +7 -0
  120. package/dist/testing/mount-with-quasar.js +63 -0
  121. package/dist/ui/data/AdminKpi.js +4 -0
  122. package/dist/ui/data/AdminPaginator.js +4 -0
  123. package/dist/ui/data/AdminRowActions.js +37 -0
  124. package/dist/ui/data/AdminStatistics.js +4 -0
  125. package/dist/ui/data/AdminStatusPill.js +4 -0
  126. package/dist/ui/data/AdminTable.js +4 -0
  127. package/dist/ui/data/KvBlock.js +24 -0
  128. package/dist/ui/entitlement/FeatureGate.js +25 -0
  129. package/dist/ui/feedback/AdminBanner.js +4 -0
  130. package/dist/ui/feedback/AdminEmptyState.js +4 -0
  131. package/dist/ui/feedback/AdminErrorBanner.js +4 -0
  132. package/dist/ui/feedback/AdminRefreshBtn.js +4 -0
  133. package/dist/ui/overlay/AdminConfirmDialog.js +112 -0
  134. package/dist/ui/overlay/AdminDialog.js +4 -0
  135. package/dist/ui/overlay/AdminFormDialog.js +4 -0
  136. package/dist/ui/overlay/MfaPromptDialog.js +131 -0
  137. package/dist/ui/page/AdminAccordion.js +4 -0
  138. package/dist/ui/page/AdminBody.js +4 -0
  139. package/dist/ui/page/AdminField.js +4 -0
  140. package/dist/ui/page/AdminFieldGrid.js +4 -0
  141. package/dist/ui/page/AdminFilters.js +4 -0
  142. package/dist/ui/page/AdminHero.js +4 -0
  143. package/dist/ui/page/AdminPage.js +4 -0
  144. package/dist/ui/page/AdminSection.js +4 -0
  145. package/dist/ui/page/AdminToolbar.js +35 -0
  146. package/dist/ui/page/LocaleSwitcher.js +90 -0
  147. package/dist/ui/page/ThemeSwitcher.js +95 -0
  148. package/dist/ui/page/WizardStepper.js +55 -0
  149. package/dist/vue/index.cjs +1076 -524
  150. package/dist/vue/index.d.cts +479 -44
  151. package/dist/vue/index.d.ts +479 -44
  152. package/dist/vue/index.js +28 -6
  153. package/package.json +30 -15
  154. package/src/auth/SuperAdminLoginPage.vue +16 -16
  155. package/src/auth/SuperAdminSetupWizard.vue +33 -28
  156. package/src/client/admin-resource-client.ts +23 -8
  157. package/src/client/brand-bridge.ts +98 -0
  158. package/src/client/http/axios-http-client.ts +4 -3
  159. package/src/client/i18n/messages/audit.ts +1 -0
  160. package/src/client/i18n/messages/bundles.ts +17 -4
  161. package/src/client/i18n/messages/common.ts +1 -0
  162. package/src/client/i18n/messages/dashboard.ts +1 -0
  163. package/src/client/i18n/messages/discovery.ts +10 -19
  164. package/src/client/i18n/messages/email.ts +1 -0
  165. package/src/client/i18n/messages/errors.ts +1 -0
  166. package/src/client/i18n/messages/marketing.ts +7 -2
  167. package/src/client/i18n/messages/nav.ts +3 -0
  168. package/src/client/i18n/messages/pilots.ts +1 -0
  169. package/src/client/i18n/messages/plan-detail.ts +1 -0
  170. package/src/client/i18n/messages/plan-editor.ts +1 -0
  171. package/src/client/i18n/messages/plan-versions.ts +3 -4
  172. package/src/client/i18n/messages/plans.ts +9 -4
  173. package/src/client/i18n/messages/promos.ts +1 -0
  174. package/src/client/i18n/messages/settings.ts +75 -0
  175. package/src/client/i18n/messages/shell.ts +1 -0
  176. package/src/client/i18n/messages/tenants.ts +1 -0
  177. package/src/client/i18n/messages/users.ts +1 -0
  178. package/src/client/i18n/messages.ts +3 -0
  179. package/src/client/index.ts +10 -0
  180. package/src/client/mfa-header.ts +14 -0
  181. package/src/client/nav-builder.ts +7 -4
  182. package/src/client/reorder-priorities.ts +76 -0
  183. package/src/client/resources/bundles.resource.ts +24 -38
  184. package/src/client/resources/catalog.resource.ts +91 -113
  185. package/src/client/resources/define-resource.ts +2 -75
  186. package/src/client/resources/index.ts +3 -0
  187. package/src/client/resources/marketing.resource.ts +77 -80
  188. package/src/client/resources/pilots.resource.ts +1 -11
  189. package/src/client/resources/plans.resource.ts +47 -64
  190. package/src/client/resources/platform-email.resource.ts +1 -11
  191. package/src/client/resources/promotions.resource.ts +18 -25
  192. package/src/client/resources/settings.resource.ts +68 -0
  193. package/src/client/resources/tenants.resource.ts +10 -4
  194. package/src/client/resources/users.resource.ts +3 -2
  195. package/src/client/settings-view.ts +50 -0
  196. package/src/client/version-change-fields.ts +17 -0
  197. package/src/features/bundle/BundleVersionInlineEditor.vue +112 -155
  198. package/src/features/bundle/BundleVersionPublishDialog.vue +34 -16
  199. package/src/features/bundle/BundleVersionStrip.vue +25 -31
  200. package/src/features/bundle/VersionDiffPreview.vue +21 -15
  201. package/src/features/bundle/internal/BundleCreatePanel.vue +65 -119
  202. package/src/features/bundle/internal/BundleFeaturesEditor.vue +18 -31
  203. package/src/features/bundle/internal/BundlePlanCompatPicker.vue +23 -29
  204. package/src/features/bundle/internal/BundleQuotasEditor.vue +20 -41
  205. package/src/features/bundle/internal/BundleStatusBanner.vue +16 -70
  206. package/src/features/marketing/MarketingPromotionsTab.vue +155 -122
  207. package/src/features/plan/PlanCreateDialog.vue +49 -129
  208. package/src/features/plan/PlanDetail.vue +57 -76
  209. package/src/features/plan/PlanList.vue +81 -156
  210. package/src/features/plan/PlanMatrix.vue +89 -158
  211. package/src/features/plan/PlanReview.vue +62 -80
  212. package/src/features/plan/PlanVersionEditor.vue +134 -238
  213. package/src/features/plan/internal/PlanCatalogPreview.vue +22 -68
  214. package/src/features/plan/internal/PlanComponentPool.vue +18 -88
  215. package/src/features/plan/internal/PlanTitleEdit.vue +12 -9
  216. package/src/features/plan/internal/PlanVersionBasket.vue +65 -89
  217. package/src/features/plan/internal/PlanVersionEditorHeader.vue +16 -20
  218. package/src/features/plan/internal/PlanVersionsPanel.vue +29 -75
  219. package/src/features/tenant/TenantActionConfirmDialog.vue +4 -4
  220. package/src/index.ts +8 -0
  221. package/src/internal/bundles-page/BundleAccordionList.vue +32 -2
  222. package/src/internal/bundles-page/BundleDetailPanel.vue +37 -21
  223. package/src/internal/bundles-page/BundlesToolbar.vue +9 -5
  224. package/src/internal/dialogs/PilotCreateDialog.vue +65 -104
  225. package/src/internal/dialogs/PilotEditDialog.vue +22 -23
  226. package/src/internal/dialogs/PromoCodeCreateDialog.vue +27 -23
  227. package/src/internal/dialogs/PromoCodeDialogFields.vue +203 -252
  228. package/src/internal/dialogs/PromoCodeEditDialog.vue +52 -48
  229. package/src/internal/dialogs/pilot-dialog.css +16 -111
  230. package/src/internal/discovery-page/CatalogEntryTransPanel.vue +18 -18
  231. package/src/internal/discovery-page/DiscoveryCapList.vue +20 -20
  232. package/src/internal/discovery-page/DiscoveryFeatureCard.vue +20 -20
  233. package/src/internal/discovery-page/DiscoveryQuotaCard.vue +10 -10
  234. package/src/internal/discovery-page/DiscoveryStatusControl.vue +1 -1
  235. package/src/internal/marketing-catalog-page/MarketingCatalogAdmin.vue +660 -0
  236. package/src/internal/{marketing-catalog → marketing-catalog-page}/MarketingCatalogHeader.vue +21 -16
  237. package/src/internal/{marketing-catalog → marketing-catalog-page}/MarketingCatalogPreview.vue +26 -13
  238. package/src/internal/{marketing-catalog → marketing-catalog-page}/MarketingCatalogToolbar.vue +14 -10
  239. package/src/internal/plan-versions/PlanDiffCard.vue +15 -15
  240. package/src/internal/plan-versions/PlanVersionsDiff.vue +11 -11
  241. package/src/internal/plan-versions/PlanVersionsTimeline.vue +35 -31
  242. package/src/internal/plans-page/PlanBundleOverview.vue +8 -8
  243. package/src/internal/plans-page/PlanPublishDialog.vue +2 -2
  244. package/src/internal/tenant-detail/TenantUsage.vue +3 -3
  245. package/src/internal/tenant-detail/types.ts +2 -2
  246. package/src/layouts/AdminLayout.vue +22 -22
  247. package/src/pages/AdminManifestErrorPage.vue +7 -7
  248. package/src/pages/AuditPage.vue +2 -2
  249. package/src/pages/BundlesPage.vue +81 -89
  250. package/src/pages/DashboardPage.vue +106 -97
  251. package/src/pages/DiscoveryPage.vue +22 -28
  252. package/src/pages/EmailHistoryPage.vue +26 -34
  253. package/src/pages/MarketingCatalogPage.vue +280 -274
  254. package/src/pages/PilotsPage.vue +22 -35
  255. package/src/pages/PlanVersionEditorPage.vue +1 -1
  256. package/src/pages/PlansPage.vue +181 -107
  257. package/src/pages/PlatformEmailPage.vue +33 -41
  258. package/src/pages/PromoCodeDetailPage.vue +12 -18
  259. package/src/pages/PromoCodesPage.vue +14 -13
  260. package/src/pages/SettingsPage.vue +226 -0
  261. package/src/pages/TenantDetailPage.vue +28 -53
  262. package/src/pages/TenantsPage.vue +7 -7
  263. package/src/pages/UsersPage.vue +7 -20
  264. package/src/pages/index.ts +3 -1
  265. package/src/quasar/create-super-admin-app.ts +13 -2
  266. package/src/quasar/dark-bridge.ts +8 -4
  267. package/src/quasar/index.ts +11 -0
  268. package/src/testing/admin-pages-suite.ts +11 -1
  269. package/src/testing/mount-with-quasar.ts +73 -0
  270. package/src/ui/data/AdminPaginator.vue +30 -20
  271. package/src/ui/data/KvBlock.vue +4 -4
  272. package/src/ui/entitlement/FeatureGate.vue +2 -2
  273. package/src/ui/feedback/AdminRefreshBtn.vue +10 -7
  274. package/src/ui/overlay/MfaPromptDialog.vue +5 -6
  275. package/src/ui/page/AdminAccordion.vue +27 -10
  276. package/src/ui/page/WizardStepper.vue +7 -18
  277. package/src/ui/theme/base.css +31 -0
  278. package/src/ui/theme/components/accordion.css +9 -9
  279. package/src/ui/theme/components/button.css +10 -68
  280. package/src/ui/theme/components/card.css +0 -8
  281. package/src/ui/theme/components/paginator.css +14 -28
  282. package/src/ui/theme/tokens.semantic.dark.css +13 -0
  283. package/src/ui/theme/tokens.semantic.light.css +39 -0
  284. package/src/vue/index.ts +8 -0
  285. package/src/vue/platform-loaders.ts +1 -3
  286. package/src/vue/resource-registry.ts +0 -8
  287. package/src/vue/super-admin-context.ts +14 -15
  288. package/src/vue/use-applied-settings.ts +79 -0
  289. package/src/vue/use-bulk-publish.ts +2 -5
  290. package/src/vue/use-bundles.ts +6 -10
  291. package/src/vue/use-catalog-entries.ts +9 -16
  292. package/src/vue/use-dialog.ts +221 -0
  293. package/src/vue/use-marketing-projections.ts +5 -6
  294. package/src/vue/use-mfa-prompt.ts +61 -11
  295. package/src/vue/use-plans.ts +28 -21
  296. package/src/vue/use-promotions.ts +1 -7
  297. package/src/vue/use-row-reorder.ts +109 -0
  298. package/src/vue/use-sa-theme.ts +31 -0
  299. package/src/vue/use-steps.ts +109 -0
  300. package/src/vue/use-subscription-draft.ts +63 -60
  301. package/src/vue/use-tenant-billing.ts +250 -33
  302. package/src/vue/use-tenant-payment-method.ts +116 -0
  303. package/src/vue/use-tenant-subscription-bundles.ts +8 -0
  304. package/src/internal/marketing-catalog/MarketingCatalogAdmin.vue +0 -553
  305. package/src/internal/plans-page/PlansPageToast.vue +0 -69
  306. /package/src/internal/{marketing-catalog → marketing-catalog-page}/types.ts +0 -0
package/README.md CHANGED
@@ -1,26 +1,78 @@
1
1
  # @saasicat/ui-vue
2
2
 
3
+ ## What this is
4
+
3
5
  Vue 3 components + composables for the SuperAdmin UI shell. Provides the
4
6
  boot loader, manifest loader (ETag cache), nav builder, action registry,
5
7
  standard pages (Dashboard, Tenants, Plans, Discovery, …) and the tenant
6
8
  self-service building blocks (`FeatureGate`, `useTenantManifest`,
7
9
  `PlanChangeWizard`).
8
10
 
9
- Peer dependencies: `vue` (required); `vue-router`, `pinia`, `quasar`
10
- (optional — see the layers below for what actually needs them).
11
+ Peer dependencies: `vue` (required); `vue-router` and `pinia` (optional — see
12
+ the layers below for what actually needs them). **Not `quasar`**: the components
13
+ are built and carry it as a dependency of this package, so you install
14
+ `@saasicat/ui-vue` and nothing else — no `@quasar/vite-plugin`, no Sass
15
+ ([ADR 0011](../../docs/explanation/adr/0011-admin-ui-bundles-quasar.md)).
11
16
 
12
- ## Layers
17
+ Three stylesheet imports, once, in your entry:
13
18
 
14
- The package is layered so that each entry only loads what it names.
15
- Lower layers never import upward; ESLint (`no-restricted-imports`, repo
16
- root config) enforces the boundaries in CI.
19
+ ```ts
20
+ import '@saasicat/ui-vue/quasar.css'; // the framework's own reset
21
+ import '@saasicat/ui-vue/icons.css'; // the icon font the components render
22
+ import '@saasicat/ui-vue/theme.css'; // the design tokens
23
+ import '@saasicat/ui-vue/style.css'; // the components' own styles
24
+ ```
17
25
 
18
- | Entry | Source | May import | Contents |
19
- | ----------------------------------------------------------------------------------------------- | -------------------------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
20
- | `@saasicat/ui-vue/client` | `src/client/` | `@saasicat/core` only | Framework-free core: `BootLoader`, `ManifestLoader` (ETag cache), nav builder, action registry, batch column fetcher, the `HttpClient`/`KvStore` contract with its `fetch` and axios adapters, `AdminError`. Usable from any framework or plain Node/TypeScript. |
21
- | `@saasicat/ui-vue` (main) | `src/vue/` (+ client re-exports) | Vue, `vue-router`, Pinia — **no Quasar** | Composables (`useTenants`, `usePlanEditor`, …), router guards, injection keys + shell contract, notify-port type, optional Pinia store factory. |
22
- | `@saasicat/ui-vue/quasar` | `src/quasar/` | everything above + Quasar | `createSuperAdminApp()` bootstrap and the Quasar notify-port implementation. |
23
- | `@saasicat/ui-vue/pages/*.vue`, `/layouts/*.vue`, `/auth/*.vue`, `/ui/*.vue`, `/pages-tenant/*` | SFC directories | everything | The Quasar reference UI, shipped as raw `.vue` from `src/` (compiled by the consumer's Vite). |
26
+ Quasar's stylesheet restyles `html`, `body` and typography — 76 computed
27
+ properties across every element of a page that styles itself. That is why it is
28
+ an import you write rather than one the package hides inside its bundle.
29
+
30
+ ## What this is not
31
+
32
+ Not a component library to pick from. It is the SuperAdmin application's
33
+ inside: complete pages, the shell around them, the theme they read and the
34
+ data layer beneath them. Taking one primitive out of context is possible and
35
+ rarely what you want.
36
+
37
+ Not a design system for your product, either. The `Admin*` roster exists for
38
+ admin surfaces; everything else is Quasar, styled through the theme.
39
+
40
+ Compiled, since 1.0: your bundler loads `dist/`. Your **type**checker still
41
+ reads the `.vue` sources through the `types` condition, which is why that source
42
+ stays within ES2021 and why the floor below still applies.
43
+
44
+ ## Entry points
45
+
46
+ The package is layered so that each entry only loads what it names. Lower
47
+ layers never import upward, and ESLint enforces it — the reasoning is in
48
+ [ADR 0004](../../docs/explanation/adr/0004-ui-vue-layer-boundaries.md).
49
+
50
+ | Entry | Source | May import | When you take it |
51
+ | --------------------- | --------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
52
+ | `./client` | `src/client/` | `@saasicat/core` only | Framework-free: loaders, nav builder, action registry, the resource descriptors, `HttpClient`/`KvStore` with their `fetch` and axios adapters, `AdminError`. Usable from plain Node. |
53
+ | `.` | `src/vue/` | Vue, `vue-router`, Pinia | Composables, router guards, injection keys, `createAdminRoutes`, the store factory. No Quasar. |
54
+ | `./quasar` | `src/quasar/` | everything above, plus Quasar | `createSuperAdminApp()` and the Quasar implementations of the notify and confirm ports. |
55
+ | `./pages` | `src/pages/` | everything | `standardAdminChildren()` — the platform's own screens as route children. |
56
+ | `./pages/*.vue` | `src/pages/` | everything | One standard page, when you mount it yourself. |
57
+ | `./layouts/*.vue` | `src/layouts/` | everything | `AdminLayout` — the shell around the pages. |
58
+ | `./auth/*.vue` | `src/auth/` | everything | The login screen and the first-run setup wizard. |
59
+ | `./ui/*.vue` | `src/ui/` | everything | The `Admin*` primitives, when you build a page of your own. |
60
+ | `./theme.css` | `src/ui/theme/` | — | The design tokens. Import it once; without it the pages render unstyled. |
61
+ | `./style.css` | built | — | The components' own styles, extracted into one file. Import it once, beside the theme. |
62
+ | `./quasar.css` | built | — | Quasar's stylesheet, shipped so you do not install Quasar to get it. It restyles `html`, `body` and typography — which is why it stays an import you write rather than one we hide. |
63
+ | `./icons.css` | built | — | The Material icon font the components render through `q-icon`. Without it every icon renders as its ligature name. |
64
+ | `./theme/*` | `src/ui/theme/` | — | The individual token layers, for a consumer that overrides roles. |
65
+ | `./theme/breakpoints` | `src/ui/theme/` | — | The five breakpoint values, for a build that needs them in JavaScript. |
66
+ | `./vue` | `src/vue/` | Vue, `vue-router`, Pinia | The Vue layer alone, without the client re-exports. |
67
+ | `./testing/*` | `src/testing/` | everything | Fixtures for component and end-to-end tests against the pages. |
68
+
69
+ The four component subpaths keep their `.vue` specifier and resolve two ways:
70
+ your **type**checker reads the source, your **bundler** loads the build. That
71
+ split is what removed Quasar from your `package.json` without changing a single
72
+ import of yours —
73
+ [ADR 0011](../../docs/explanation/adr/0011-admin-ui-bundles-quasar.md). The
74
+ source is still yours to compile for types, so the floor below still holds
75
+ ([ADR 0005](../../docs/explanation/adr/0005-ship-sfc-source-not-dist.md)).
24
76
 
25
77
  ### The shipped source has a language floor
26
78
 
@@ -34,7 +86,8 @@ minimum compiler. The language level is checked rather than promised:
34
86
  `pnpm --filter @saasicat/ui-vue test:shipped-source` compiles the closure
35
87
  reachable from every source-shipping subpath at that level, with
36
88
  `isolatedModules`, `useDefineForClassFields` and `strictPropertyInitialization`
37
- set the way a Vite app sets them, and CI runs it. The directories come from the export map, so a new source subpath
89
+ set the way a Vite app sets them, and CI runs it. The directories come from the export map, so a new
90
+ source subpath
38
91
  is covered the day it is added. The compiler version is not checked — `satisfies`
39
92
  in the shipped source needs 4.9 or newer whatever `lib` says, and testing that
40
93
  would mean installing old compilers.
@@ -121,11 +174,13 @@ mount('#app');
121
174
  The fastest way to a running admin app is the scaffolder:
122
175
 
123
176
  ```bash
124
- pnpm create saasicat-admin admin --project-key=myapp
177
+ pnpm create saasicat-admin admin --app-key=myapp
125
178
  ```
126
179
 
127
- See the [quickstart](https://github.com/uelker70/saasicat/blob/main/docs/quickstart.md) (step 9) for the full setup
128
- and the [handbook](https://github.com/uelker70/saasicat/blob/main/docs/handbook.md) for the architecture.
180
+ See the [quickstart](https://github.com/uelker70/saasicat/blob/main/docs/quickstart.md) (step 9) for
181
+ the full setup
182
+ and the [architecture](https://github.com/uelker70/saasicat/blob/main/docs/explanation/architecture.md)
183
+ for how the pieces fit.
129
184
 
130
185
  ## Language
131
186
 
@@ -145,7 +200,7 @@ own call: `i18n.locales` narrows the set, `i18n.additionalLocales` adds
145
200
  languages the platform does not ship, `i18n.overrides` replaces individual
146
201
  strings, and `i18n.switcher: false` drops the control entirely. Components read
147
202
  the catalog via `useSaMessages('<namespace>')` / `useSuperAdminI18n()`.
148
- See [handbook §8.7](https://github.com/uelker70/saasicat/blob/main/docs/handbook.md#87-ui-language-i18n).
203
+ See [UI language](https://github.com/uelker70/saasicat/blob/main/docs/guides/build-the-admin-frontend.md#ui-language-i18n).
149
204
 
150
205
  ## Build
151
206
 
@@ -153,5 +208,15 @@ See [handbook §8.7](https://github.com/uelker70/saasicat/blob/main/docs/handboo
153
208
  pnpm --filter @saasicat/ui-vue build
154
209
  ```
155
210
 
156
- Produces `dist/{index,client/index,quasar/index}.{js,cjs,d.ts}` via tsup
157
- (`tsup.config.ts`); `vue`, `vue-router`, `pinia` and `quasar` stay external.
211
+ Two builders. tsup (`tsup.config.ts`) produces
212
+ `dist/{index,client/index,vue/index,quasar/index}.{js,cjs,d.ts}`; Vite
213
+ (`vite.build.config.ts`) compiles the components, one entry each, and copies
214
+ Quasar's stylesheet and the icon font beside them. `vue`, `vue-router` and
215
+ `pinia` stay external in both; `quasar` is external too and travels as a
216
+ dependency of this package.
217
+
218
+ ## Next
219
+
220
+ - [Build the admin frontend](../../docs/guides/build-the-admin-frontend.md) — wiring it into an app
221
+ - [Design guide](../../docs/explanation/design-guide.md) — the page recipe and the colour roles
222
+ - [Pages take resources, not callbacks](../../docs/explanation/adr/0008-resource-ports-over-props.md)
package/dist/.build-stamp CHANGED
@@ -1 +1 @@
1
- 14b1904cc8763759de50625a5589d989cdf7e6be7f84abe3f6c54aa3ca8ac9ae
1
+ e8f376ec180b1cf9e82413687a0ad2d83b23d267dbc7682b960e94e42fb0beaf
@@ -0,0 +1,31 @@
1
+ @font-face {
2
+ font-family: 'Material Icons';
3
+ font-style: normal;
4
+ font-weight: 400;
5
+ font-display: block;
6
+ src: url('./web-font/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2') format('woff2'), url('./web-font/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.woff') format('woff');
7
+ }
8
+
9
+ .material-icons {
10
+ font-family: 'Material Icons';
11
+ font-weight: normal;
12
+ font-style: normal;
13
+ display: inline-block;
14
+ line-height: 1;
15
+ text-transform: none;
16
+ letter-spacing: normal;
17
+ word-wrap: normal;
18
+ white-space: nowrap;
19
+ direction: ltr;
20
+
21
+ /* Support for all WebKit browsers. */
22
+ -webkit-font-smoothing: antialiased;
23
+ /* Support for Safari and Chrome. */
24
+ text-rendering: optimizeLegibility;
25
+
26
+ /* Support for Firefox. */
27
+ -moz-osx-font-smoothing: grayscale;
28
+
29
+ /* Support for IE. */
30
+ font-feature-settings: 'liga';
31
+ }