@stacksjs/defaults 0.70.54

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 (286) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +2 -0
  3. package/package.json +20 -0
  4. package/resources/assets/fonts/013717e9.woff +0 -0
  5. package/resources/assets/fonts/03355817.woff2 +0 -0
  6. package/resources/assets/fonts/0380de7e.woff2 +0 -0
  7. package/resources/assets/fonts/0ba5d32a.woff +0 -0
  8. package/resources/assets/fonts/0bd57ddf.woff2 +0 -0
  9. package/resources/assets/fonts/19de0a60.woff2 +0 -0
  10. package/resources/assets/fonts/20b87e84.woff +0 -0
  11. package/resources/assets/fonts/4bbc67e1.woff +0 -0
  12. package/resources/assets/fonts/576fb0d7.woff +0 -0
  13. package/resources/assets/fonts/5ea10ee5.woff2 +0 -0
  14. package/resources/assets/fonts/6413fc0a.woff +0 -0
  15. package/resources/assets/fonts/72c114cf.woff +0 -0
  16. package/resources/assets/fonts/73c57e73.woff2 +0 -0
  17. package/resources/assets/fonts/813dca6c.woff +0 -0
  18. package/resources/assets/fonts/8a9b0995.woff2 +0 -0
  19. package/resources/assets/fonts/90b4832f.woff +0 -0
  20. package/resources/assets/fonts/9394ab85.woff2 +0 -0
  21. package/resources/assets/fonts/9b3c7d7f.woff2 +0 -0
  22. package/resources/assets/fonts/Monaco.ttf +0 -0
  23. package/resources/assets/fonts/b1b36d74.woff +0 -0
  24. package/resources/assets/fonts/b5d74798.woff2 +0 -0
  25. package/resources/assets/fonts/b9f81a4d.woff +0 -0
  26. package/resources/assets/fonts/c9784008.woff2 +0 -0
  27. package/resources/assets/fonts/cf692227.woff +0 -0
  28. package/resources/assets/fonts/d1c6ab51.woff2 +0 -0
  29. package/resources/assets/fonts/e2eb62fc.woff +0 -0
  30. package/resources/assets/fonts/fe21f8d8.woff2 +0 -0
  31. package/resources/assets/fonts/nps/CampmateScript-Regular.woff2 +0 -0
  32. package/resources/assets/fonts/nps/NPS_2026-variable.woff2 +0 -0
  33. package/resources/assets/fonts/nps/RedwoodSerif-Regular.woff2 +0 -0
  34. package/resources/assets/fonts/nps/SequoiaSans-Regular.woff2 +0 -0
  35. package/resources/assets/fonts/nps/Switchback-Regular.woff2 +0 -0
  36. package/resources/assets/images/app-icon.png +0 -0
  37. package/resources/assets/images/bg-img.png +0 -0
  38. package/resources/assets/images/park-ridge.svg +15 -0
  39. package/resources/assets/images/topography.svg +1 -0
  40. package/resources/assets/scripts/main.ts +2153 -0
  41. package/resources/assets/styles/README.md +19 -0
  42. package/resources/assets/styles/docs/main.css +1 -0
  43. package/resources/assets/styles/docs/overrides.css +1 -0
  44. package/resources/assets/styles/docs/vars.css +8 -0
  45. package/resources/assets/styles/main.css +1419 -0
  46. package/resources/components/Button.stx +70 -0
  47. package/resources/components/Buttons/BaseButton.stx +39 -0
  48. package/resources/components/Buttons/Counter.stx +28 -0
  49. package/resources/components/Buttons/ToggleDark.stx +11 -0
  50. package/resources/components/Container.stx +10 -0
  51. package/resources/components/Dashboard/.gitkeep +0 -0
  52. package/resources/components/Dashboard/Auth/ForgotPassword.stx +127 -0
  53. package/resources/components/Dashboard/Auth/Login.stx +212 -0
  54. package/resources/components/Dashboard/Auth/Register.stx +306 -0
  55. package/resources/components/Dashboard/Avatar.stx +123 -0
  56. package/resources/components/Dashboard/Billing/ActivePlan.stx +57 -0
  57. package/resources/components/Dashboard/Billing/CardBrands.stx +32 -0
  58. package/resources/components/Dashboard/Billing/CardForm.stx +34 -0
  59. package/resources/components/Dashboard/Billing/OneTimePayment.stx +28 -0
  60. package/resources/components/Dashboard/Billing/PaymentForm.stx +33 -0
  61. package/resources/components/Dashboard/Billing/PaymentMethod.stx +66 -0
  62. package/resources/components/Dashboard/Billing/PaymentMethodList.stx +52 -0
  63. package/resources/components/Dashboard/Billing/Plans.stx +136 -0
  64. package/resources/components/Dashboard/Buttons/AppButton.stx +48 -0
  65. package/resources/components/Dashboard/Buttons/IconButton.stx +20 -0
  66. package/resources/components/Dashboard/Card.stx +78 -0
  67. package/resources/components/Dashboard/Chart.stx +75 -0
  68. package/resources/components/Dashboard/CodeEditor.stx +41 -0
  69. package/resources/components/Dashboard/Commerce/BulkActionBar.stx +70 -0
  70. package/resources/components/Dashboard/Commerce/CategoriesTable.stx +133 -0
  71. package/resources/components/Dashboard/Commerce/CouponsTable.stx +161 -0
  72. package/resources/components/Dashboard/Commerce/CustomersTable.stx +142 -0
  73. package/resources/components/Dashboard/Commerce/Delivery/DeliveryRoutesTable.stx +80 -0
  74. package/resources/components/Dashboard/Commerce/Delivery/DigitalDeliveryTable.stx +85 -0
  75. package/resources/components/Dashboard/Commerce/Delivery/DriversTable.stx +99 -0
  76. package/resources/components/Dashboard/Commerce/Delivery/LicenseKeysTable.stx +92 -0
  77. package/resources/components/Dashboard/Commerce/Delivery/LicenseTemplatesTable.stx +88 -0
  78. package/resources/components/Dashboard/Commerce/Delivery/Pagination.stx +122 -0
  79. package/resources/components/Dashboard/Commerce/Delivery/SearchFilter.stx +23 -0
  80. package/resources/components/Dashboard/Commerce/Delivery/ShippingMethodsTable.stx +80 -0
  81. package/resources/components/Dashboard/Commerce/Delivery/ShippingRatesTable.stx +59 -0
  82. package/resources/components/Dashboard/Commerce/Delivery/ShippingZonesTable.stx +71 -0
  83. package/resources/components/Dashboard/Commerce/Delivery/TabNavigation.stx +36 -0
  84. package/resources/components/Dashboard/Commerce/Forms/CouponsForm.stx +191 -0
  85. package/resources/components/Dashboard/Commerce/OrdersTable.stx +131 -0
  86. package/resources/components/Dashboard/Commerce/ProductsTable.stx +170 -0
  87. package/resources/components/Dashboard/CreateRecordModal.stx +363 -0
  88. package/resources/components/Dashboard/DashboardLayout.stx +155 -0
  89. package/resources/components/Dashboard/Deployments/ActivityFeed.stx +54 -0
  90. package/resources/components/Dashboard/Deployments/DeployScript.stx +23 -0
  91. package/resources/components/Dashboard/Deployments/DeploymentHistory.stx +97 -0
  92. package/resources/components/Dashboard/Deployments/DeploymentList.stx +94 -0
  93. package/resources/components/Dashboard/Deployments/LiveTerminalOutput.stx +18 -0
  94. package/resources/components/Dashboard/Elements/Dropdown.stx +57 -0
  95. package/resources/components/Dashboard/Email/EmailActivityChart.stx +111 -0
  96. package/resources/components/Dashboard/Email/EmailCompose.stx +72 -0
  97. package/resources/components/Dashboard/Email/EmailDetail.stx +105 -0
  98. package/resources/components/Dashboard/Email/EmailList.stx +117 -0
  99. package/resources/components/Dashboard/Email/EmailSearch.stx +40 -0
  100. package/resources/components/Dashboard/Email/EmailSidebar.stx +133 -0
  101. package/resources/components/Dashboard/GlobalSearch.stx +124 -0
  102. package/resources/components/Dashboard/MobileSidebar.stx +47 -0
  103. package/resources/components/Dashboard/Modals/BaseModal.stx +50 -0
  104. package/resources/components/Dashboard/Modals/Popups/Alert.stx +112 -0
  105. package/resources/components/Dashboard/Modals/Popups/Toast.stx +70 -0
  106. package/resources/components/Dashboard/Modals/ToastWrapper.stx +35 -0
  107. package/resources/components/Dashboard/Monitoring/ErrorDetailModal.stx +228 -0
  108. package/resources/components/Dashboard/Monitoring/ErrorsTable.stx +184 -0
  109. package/resources/components/Dashboard/Navbar.stx +194 -0
  110. package/resources/components/Dashboard/NavbarModern.stx +188 -0
  111. package/resources/components/Dashboard/NotificationErrorModal.stx +105 -0
  112. package/resources/components/Dashboard/NotificationStatusBadge.stx +20 -0
  113. package/resources/components/Dashboard/Pagination.stx +90 -0
  114. package/resources/components/Dashboard/Queue/QueueTable.stx +127 -0
  115. package/resources/components/Dashboard/Settings/Forms/AIForm.stx +126 -0
  116. package/resources/components/Dashboard/Settings/Forms/AnalyticsForm.stx +52 -0
  117. package/resources/components/Dashboard/Settings/Forms/AppForm.stx +157 -0
  118. package/resources/components/Dashboard/Settings/Forms/CLIForm.stx +66 -0
  119. package/resources/components/Dashboard/Settings/Forms/CacheForm.stx +253 -0
  120. package/resources/components/Dashboard/Settings/Forms/CloudForm.stx +441 -0
  121. package/resources/components/Dashboard/Settings/Forms/DNSForm.stx +307 -0
  122. package/resources/components/Dashboard/Settings/Forms/DatabaseForm.stx +168 -0
  123. package/resources/components/Dashboard/Settings/Forms/EmailForm.stx +100 -0
  124. package/resources/components/Dashboard/Settings/Forms/FileSystemForm.stx +259 -0
  125. package/resources/components/Dashboard/Settings/Forms/HashingForm.stx +119 -0
  126. package/resources/components/Dashboard/Settings/Forms/LibraryForm.stx +389 -0
  127. package/resources/components/Dashboard/Settings/Forms/QueueForm.stx +219 -0
  128. package/resources/components/Dashboard/Settings/Forms/SearchEngineForm.stx +48 -0
  129. package/resources/components/Dashboard/Settings/Forms/SecurityForm.stx +143 -0
  130. package/resources/components/Dashboard/Settings/Forms/ServicesForm.stx +194 -0
  131. package/resources/components/Dashboard/Settings/Forms/StorageForm.stx +191 -0
  132. package/resources/components/Dashboard/Settings/Forms/TeamsForm.stx +33 -0
  133. package/resources/components/Dashboard/Settings/SettingsFormManager.stx +181 -0
  134. package/resources/components/Dashboard/SettingsHeader.stx +88 -0
  135. package/resources/components/Dashboard/SettingsSidebar.stx +234 -0
  136. package/resources/components/Dashboard/Sidebar.stx +23 -0
  137. package/resources/components/Dashboard/SidebarModern.stx +249 -0
  138. package/resources/components/Dashboard/Skeleton/LoadingCard.stx +15 -0
  139. package/resources/components/Dashboard/Skeleton/LoadingDetails.stx +26 -0
  140. package/resources/components/Dashboard/Table.stx +82 -0
  141. package/resources/components/Dashboard/TerminalContainer.stx +97 -0
  142. package/resources/components/Dashboard/Tooltip.stx +166 -0
  143. package/resources/components/Dashboard/Transaction/index.stx +88 -0
  144. package/resources/components/Dashboard/UI/ActivityTable.stx +54 -0
  145. package/resources/components/Dashboard/UI/Avatar.stx +102 -0
  146. package/resources/components/Dashboard/UI/Badge.stx +66 -0
  147. package/resources/components/Dashboard/UI/Button.stx +73 -0
  148. package/resources/components/Dashboard/UI/Card.stx +51 -0
  149. package/resources/components/Dashboard/UI/ChartCard.stx +36 -0
  150. package/resources/components/Dashboard/UI/Checkbox.stx +74 -0
  151. package/resources/components/Dashboard/UI/ConfirmDialog.stx +74 -0
  152. package/resources/components/Dashboard/UI/DataTable.stx +45 -0
  153. package/resources/components/Dashboard/UI/Dropdown.stx +72 -0
  154. package/resources/components/Dashboard/UI/DropdownItem.stx +80 -0
  155. package/resources/components/Dashboard/UI/EmptyState.stx +50 -0
  156. package/resources/components/Dashboard/UI/FilterBar.stx +48 -0
  157. package/resources/components/Dashboard/UI/Input.stx +77 -0
  158. package/resources/components/Dashboard/UI/Modal.stx +75 -0
  159. package/resources/components/Dashboard/UI/PageHeader.stx +69 -0
  160. package/resources/components/Dashboard/UI/PageLayout.stx +84 -0
  161. package/resources/components/Dashboard/UI/Pagination.stx +126 -0
  162. package/resources/components/Dashboard/UI/QuickLinks.stx +31 -0
  163. package/resources/components/Dashboard/UI/RouterLink.stx +31 -0
  164. package/resources/components/Dashboard/UI/Select.stx +84 -0
  165. package/resources/components/Dashboard/UI/ServiceHealth.stx +38 -0
  166. package/resources/components/Dashboard/UI/StatsCard.stx +79 -0
  167. package/resources/components/Dashboard/UI/Table.stx +143 -0
  168. package/resources/components/Dashboard/UI/Tabs.stx +45 -0
  169. package/resources/components/Dashboard/UI/Textarea.stx +93 -0
  170. package/resources/components/Dashboard/UI/Toggle.stx +84 -0
  171. package/resources/components/Dashboard/UI/WindowControls.stx +135 -0
  172. package/resources/components/Dashboard/Widget.stx +89 -0
  173. package/resources/components/Dashboard/WindowControls.stx +119 -0
  174. package/resources/components/Dashboard/index.ts +106 -0
  175. package/resources/components/Docs/Demo/ComboboxCode.md +114 -0
  176. package/resources/components/Docs/Demo/ComboboxDemo.stx +91 -0
  177. package/resources/components/Docs/Demo/DialogCode.md +42 -0
  178. package/resources/components/Docs/Demo/DialogDemo.stx +76 -0
  179. package/resources/components/Docs/Demo/DocsPlayground.stx +39 -0
  180. package/resources/components/Docs/Demo/DropdownCode.md +109 -0
  181. package/resources/components/Docs/Demo/DropdownDemo.stx +82 -0
  182. package/resources/components/Docs/Demo/Hero.stx +100 -0
  183. package/resources/components/Docs/Demo/ListboxCode.md +87 -0
  184. package/resources/components/Docs/Demo/ListboxDemo.stx +59 -0
  185. package/resources/components/Docs/Demo/NotificationCode.md +173 -0
  186. package/resources/components/Docs/Demo/NotificationDemo.stx +99 -0
  187. package/resources/components/Docs/Demo/PopoverCode.md +161 -0
  188. package/resources/components/Docs/Demo/PopoverDemo.stx +96 -0
  189. package/resources/components/Docs/Demo/RadioGroupCode.md +98 -0
  190. package/resources/components/Docs/Demo/RadioGroupDemo.stx +53 -0
  191. package/resources/components/Docs/Demo/StepperCode.md +216 -0
  192. package/resources/components/Docs/Demo/StepperDemo.stx +137 -0
  193. package/resources/components/Docs/Demo/SwitchCode.md +24 -0
  194. package/resources/components/Docs/Demo/SwitchDemo.stx +28 -0
  195. package/resources/components/Docs/Home.stx +7 -0
  196. package/resources/components/Docs/HomeContributors.stx +23 -0
  197. package/resources/components/Docs/HomeSponsors.stx +17 -0
  198. package/resources/components/Docs/HomeTeam.stx +18 -0
  199. package/resources/components/Docs/TeamMember.stx +79 -0
  200. package/resources/components/Email/EmailButton.stx +32 -0
  201. package/resources/components/Email/EmailDivider.stx +20 -0
  202. package/resources/components/Email/EmailImage.stx +24 -0
  203. package/resources/components/Email/EmailLayout.stx +55 -0
  204. package/resources/components/Email/EmailLink.stx +22 -0
  205. package/resources/components/Email/EmailSection.stx +20 -0
  206. package/resources/components/Email/EmailText.stx +30 -0
  207. package/resources/components/Forum/ForumBreadcrumb.stx +38 -0
  208. package/resources/components/Forum/ForumCategory.stx +16 -0
  209. package/resources/components/Forum/ForumCategoryItem.stx +46 -0
  210. package/resources/components/Forum/ForumLayout.stx +36 -0
  211. package/resources/components/Forum/ForumPagination.stx +39 -0
  212. package/resources/components/Forum/ForumPost.stx +71 -0
  213. package/resources/components/Forum/ForumReplyForm.stx +76 -0
  214. package/resources/components/Forum/ForumSidebar.stx +86 -0
  215. package/resources/components/Forum/ForumTopicItem.stx +77 -0
  216. package/resources/components/Forum/ForumTopicList.stx +23 -0
  217. package/resources/components/HelloWorld.stx +253 -0
  218. package/resources/components/Logo.stx +10 -0
  219. package/resources/components/Marketing/CallToAction.stx +30 -0
  220. package/resources/components/Marketing/ComingSoon.stx +155 -0
  221. package/resources/components/Marketing/Faqs.stx +99 -0
  222. package/resources/components/Marketing/Feature.stx +32 -0
  223. package/resources/components/Marketing/Fields.stx +28 -0
  224. package/resources/components/Marketing/Footer.stx +33 -0
  225. package/resources/components/Marketing/Header.stx +51 -0
  226. package/resources/components/Marketing/Hero.stx +46 -0
  227. package/resources/components/Marketing/Layout.stx +26 -0
  228. package/resources/components/Marketing/NavLink.stx +13 -0
  229. package/resources/components/Marketing/Plan.stx +43 -0
  230. package/resources/components/Marketing/Pricing.stx +120 -0
  231. package/resources/components/Marketing/PrimaryFeatures.stx +80 -0
  232. package/resources/components/Marketing/PrimaryFeatures2.stx +98 -0
  233. package/resources/components/Marketing/SecondaryFeatures.stx +80 -0
  234. package/resources/components/Marketing/Testimonials.stx +120 -0
  235. package/resources/components/Pagination.stx +149 -0
  236. package/resources/components/Playground.stx +9 -0
  237. package/resources/components/README.md +87 -0
  238. package/resources/components/Storefront/AnnouncementBar.stx +17 -0
  239. package/resources/components/Storefront/CartDrawer.stx +227 -0
  240. package/resources/components/Storefront/CheckoutSteps.stx +50 -0
  241. package/resources/components/Storefront/Footer.stx +81 -0
  242. package/resources/components/Storefront/Header.stx +66 -0
  243. package/resources/components/Storefront/OrderSummary.stx +79 -0
  244. package/resources/components/Storefront/ProductCard.stx +63 -0
  245. package/resources/components/Storefront/ProductGallery.stx +88 -0
  246. package/resources/components/Storefront/QuantitySelector.stx +97 -0
  247. package/resources/components/index.ts +13 -0
  248. package/resources/emails/email-verification.stx +46 -0
  249. package/resources/emails/layouts/base.html +113 -0
  250. package/resources/emails/password-changed.stx +55 -0
  251. package/resources/emails/password-reset.stx +43 -0
  252. package/resources/emails/subscription-confirmation.stx +99 -0
  253. package/resources/emails/welcome.stx +48 -0
  254. package/resources/functions/README.md +28 -0
  255. package/resources/functions/counter.ts +13 -0
  256. package/resources/functions/dark.ts +4 -0
  257. package/resources/functions/dashboard/analytics.ts +238 -0
  258. package/resources/functions/dashboard/config-io.ts +316 -0
  259. package/resources/functions/dashboard/data.ts +375 -0
  260. package/resources/functions/dashboard/library.ts +250 -0
  261. package/resources/functions/dashboard/sidebar.ts +537 -0
  262. package/resources/functions/dashboard/system.ts +150 -0
  263. package/resources/layouts/403.stx +188 -0
  264. package/resources/layouts/404.stx +34 -0
  265. package/resources/layouts/README.md +14 -0
  266. package/resources/layouts/dashboard/default.stx +20 -0
  267. package/resources/layouts/dashboard/guest.stx +10 -0
  268. package/resources/layouts/default.stx +3 -0
  269. package/resources/layouts/maintenance.stx +11 -0
  270. package/resources/layouts/storefront.stx +73 -0
  271. package/resources/layouts/system-tray/default.stx +3 -0
  272. package/resources/modules/.gitkeep +0 -0
  273. package/resources/plugins/.gitkeep +0 -0
  274. package/resources/plugins/preloader.ts +308 -0
  275. package/resources/types/README.md +3 -0
  276. package/resources/views/cart.stx +149 -0
  277. package/resources/views/checkout/contact.stx +101 -0
  278. package/resources/views/checkout/payment.stx +114 -0
  279. package/resources/views/checkout/shipping.stx +120 -0
  280. package/resources/views/coming-soon.stx +9 -0
  281. package/resources/views/dashboard/custom-page.stx +45 -0
  282. package/resources/views/dashboard/index.stx +24 -0
  283. package/resources/views/emails/welcome.stx +0 -0
  284. package/resources/views/errors/tester.stx +26 -0
  285. package/resources/views/index.stx +2865 -0
  286. package/resources/views/orders/[id].stx +130 -0
@@ -0,0 +1,249 @@
1
+ <script>
2
+ interface SidebarModernProps {
3
+ isCollapsed?: boolean
4
+ searchQuery?: string
5
+ expandedSections?: boolean
6
+ currentTeam?: string
7
+ }
8
+
9
+ const { isCollapsed = false, searchQuery = '', expandedSections = {, currentTeam = { } = defineProps<SidebarModernProps>()
10
+
11
+ /**
12
+ * Dashboard Sidebar
13
+ *
14
+ * Uses stx native Sidebar components with Craft integration for
15
+ * true native macOS sidebar rendering when running in Craft.
16
+ * Dynamically loads models from app/Models directory.
17
+ */
18
+
19
+ // Import stx Sidebar components from @stacksjs/components
20
+ import { Sidebar, SidebarHeader, SidebarFooter } from '@stacksjs/components'
21
+
22
+ // Load models dynamically using synchronous fs
23
+ const fs = require('node:fs')
24
+ const path = require('node:path')
25
+
26
+ // Get list of models from app/Models directory
27
+ function getModelItems() {
28
+ const modelsDir = path.join(process.cwd(), 'app', 'Models')
29
+ const items = []
30
+
31
+ try {
32
+ const files = fs.readdirSync(modelsDir)
33
+ for (const file of files) {
34
+ if (file.endsWith('.ts') && !file.startsWith('index') && !file.startsWith('_') && !file.startsWith('README')) {
35
+ const modelName = file.replace('.ts', '')
36
+ // Convert PascalCase to kebab-case for URL
37
+ const urlSlug = modelName
38
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
39
+ .toLowerCase()
40
+ items.push({
41
+ id: `model-${urlSlug}`,
42
+ label: modelName,
43
+ icon: 'i-hugeicons-database-01',
44
+ href: `/models/${urlSlug}`,
45
+ }
46
+ }
47
+ }
48
+ } catch (e) {
49
+ // If directory doesn't exist, return empty array
50
+ }
51
+
52
+ // Sort alphabetically by label
53
+ items.sort((a, b) => a.label.localeCompare(b.label))
54
+ return items
55
+ }
56
+
57
+ const modelItems = getModelItems()
58
+
59
+ // State
60
+ // Section expansion state
61
+ library: true,
62
+ content: false,
63
+ app: false,
64
+ models: false,
65
+ data: false,
66
+ commerce: false,
67
+ marketing: false,
68
+ analytics: false,
69
+ management: false,
70
+ }
71
+
72
+ // Current team
73
+ id: 1,
74
+ name: 'Stacks',
75
+ type: 'Professional',
76
+ }
77
+
78
+ // Navigation sections configuration
79
+ const sections = [
80
+ {
81
+ id: 'library',
82
+ label: 'Library',
83
+ icon: 'i-hugeicons-book-02',
84
+ expanded: expandedSections.library,
85
+ items: [
86
+ { id: 'components', label: 'Components', icon: 'i-hugeicons-puzzle', href: '/components' },
87
+ { id: 'functions', label: 'Functions', icon: 'i-hugeicons-function-square', href: '/functions' },
88
+ { id: 'releases', label: 'Releases', icon: 'i-hugeicons-right-to-left-list-number', href: '/releases' },
89
+ { id: 'packages', label: 'Packages', icon: 'i-hugeicons-package', href: '/packages' },
90
+ ],
91
+ },
92
+ {
93
+ id: 'content',
94
+ label: 'Content',
95
+ icon: 'i-hugeicons-file-02',
96
+ expanded: expandedSections.content,
97
+ items: [
98
+ { id: 'content-dashboard', label: 'Dashboard', icon: 'i-hugeicons-dashboard-speed-01', href: '/content/dashboard' },
99
+ { id: 'files', label: 'Files', icon: 'i-hugeicons-apple-finder', href: '/content/files' },
100
+ { id: 'pages', label: 'Pages', icon: 'i-hugeicons-file-02', href: '/content/pages' },
101
+ { id: 'posts', label: 'Posts', icon: 'i-hugeicons-message-edit-02', href: '/content/posts' },
102
+ { id: 'categories', label: 'Categories', icon: 'i-hugeicons-tags', href: '/content/categories' },
103
+ { id: 'tags', label: 'Tags', icon: 'i-hugeicons-tag-01', href: '/content/tags' },
104
+ { id: 'comments', label: 'Comments', icon: 'i-hugeicons-comment-01', href: '/content/comments' },
105
+ { id: 'authors', label: 'Authors', icon: 'i-hugeicons-user-edit-01', href: '/content/authors' },
106
+ { id: 'seo', label: 'SEO', icon: 'i-hugeicons-seo', href: '/content/seo' },
107
+ ],
108
+ },
109
+ {
110
+ id: 'models',
111
+ label: 'Models',
112
+ icon: 'i-hugeicons-database',
113
+ expanded: expandedSections.models,
114
+ items: modelItems,
115
+ },
116
+ {
117
+ id: 'app',
118
+ label: 'App',
119
+ icon: 'i-hugeicons-code',
120
+ expanded: expandedSections.app,
121
+ items: [
122
+ { id: 'deployments', label: 'Deployments', icon: 'i-hugeicons-rocket-01', href: '/deployments' },
123
+ { id: 'requests', label: 'Requests', icon: 'i-hugeicons-api', href: '/requests' },
124
+ { id: 'realtime', label: 'Realtime', icon: 'i-hugeicons-link-03', href: '/realtime' },
125
+ { id: 'actions', label: 'Actions', icon: 'i-hugeicons-function-of-x', href: '/actions' },
126
+ { id: 'commands', label: 'Commands', icon: 'i-hugeicons-command-line', href: '/commands' },
127
+ { id: 'queue', label: 'Queue', icon: 'i-hugeicons-queue-02', href: '/queue' },
128
+ { id: 'jobs', label: 'Jobs', icon: 'i-hugeicons-briefcase-01', href: '/jobs' },
129
+ { id: 'queries', label: 'Queries', icon: 'i-hugeicons-search-area', href: '/queries' },
130
+ { id: 'errors', label: 'Errors', icon: 'i-hugeicons-bug-01', href: '/monitoring/errors' },
131
+ ],
132
+ },
133
+ {
134
+ id: 'commerce',
135
+ label: 'Commerce',
136
+ icon: 'i-hugeicons-shopping-cart-02',
137
+ expanded: expandedSections.commerce,
138
+ items: [
139
+ { id: 'commerce-dashboard', label: 'Dashboard', icon: 'i-hugeicons-dashboard-speed-01', href: '/commerce/dashboard' },
140
+ { id: 'pos', label: 'POS', icon: 'i-hugeicons-shopping-cart-02', href: '/commerce/pos' },
141
+ { id: 'customers', label: 'Customers', icon: 'i-hugeicons-user-account', href: '/commerce/customers' },
142
+ { id: 'orders', label: 'Orders', icon: 'i-hugeicons-search-list-01', href: '/commerce/orders' },
143
+ { id: 'products', label: 'Products', icon: 'i-hugeicons-package', href: '/commerce/products' },
144
+ { id: 'payments', label: 'Payments', icon: 'i-hugeicons-invoice-01', href: '/commerce/payments' },
145
+ { id: 'delivery', label: 'Delivery', icon: 'i-hugeicons-shipping-truck-01', href: '/commerce/delivery' },
146
+ ],
147
+ },
148
+ {
149
+ id: 'data',
150
+ label: 'Data',
151
+ icon: 'i-hugeicons-database',
152
+ expanded: expandedSections.data,
153
+ items: [
154
+ { id: 'data-dashboard', label: 'Dashboard', icon: 'i-hugeicons-dashboard-speed-01', href: '/data/dashboard' },
155
+ { id: 'activity', label: 'Activity', icon: 'i-hugeicons-activity-01', href: '/data/activity' },
156
+ { id: 'users', label: 'Users', icon: 'i-hugeicons-user-group', href: '/data/users' },
157
+ { id: 'teams', label: 'Teams', icon: 'i-hugeicons-user-multiple', href: '/data/teams' },
158
+ { id: 'subscribers', label: 'Subscribers', icon: 'i-hugeicons-mail-01', href: '/data/subscribers' },
159
+ ],
160
+ },
161
+ {
162
+ id: 'marketing',
163
+ label: 'Marketing',
164
+ icon: 'i-hugeicons-megaphone-01',
165
+ expanded: expandedSections.marketing,
166
+ items: [
167
+ { id: 'lists', label: 'Lists', icon: 'i-hugeicons-list-setting', href: '/marketing/lists' },
168
+ { id: 'social-posts', label: 'Social Posts', icon: 'i-hugeicons-time-schedule', href: '/marketing/social-posts' },
169
+ { id: 'campaigns', label: 'Campaigns', icon: 'i-hugeicons-rocket-01', href: '/marketing/campaigns' },
170
+ { id: 'reviews', label: 'Reviews', icon: 'i-hugeicons-star', href: '/marketing/reviews' },
171
+ ],
172
+ },
173
+ {
174
+ id: 'analytics',
175
+ label: 'Analytics',
176
+ icon: 'i-hugeicons-chart-line-data-01',
177
+ expanded: expandedSections.analytics,
178
+ items: [
179
+ { id: 'web', label: 'Web', icon: 'i-hugeicons-global', href: '/analytics/web' },
180
+ { id: 'blog', label: 'Blog', icon: 'i-hugeicons-edit-02', href: '/analytics/blog' },
181
+ { id: 'commerce-analytics', label: 'Commerce', icon: 'i-hugeicons-shopping-bag-01', href: '/analytics/commerce' },
182
+ { id: 'events', label: 'Events', icon: 'i-hugeicons-cursor-click-02', href: '/analytics/events' },
183
+ ],
184
+ },
185
+ {
186
+ id: 'management',
187
+ label: 'Management',
188
+ icon: 'i-hugeicons-settings-02',
189
+ expanded: expandedSections.management,
190
+ items: [
191
+ { id: 'cloud', label: 'Cloud', icon: 'i-hugeicons-cloud', href: '/cloud' },
192
+ { id: 'dns', label: 'DNS', icon: 'i-hugeicons-internet', href: '/dns' },
193
+ { id: 'permissions', label: 'Permissions', icon: 'i-hugeicons-shield-01', href: '/management/permissions' },
194
+ { id: 'mailboxes', label: 'Mailboxes', icon: 'i-hugeicons-mailbox-01', href: '/mailboxes' },
195
+ { id: 'logs', label: 'Logs', icon: 'i-hugeicons-file-search', href: '/logs' },
196
+ { id: 'health', label: 'Health', icon: 'i-hugeicons-pulse-02', href: '/health' },
197
+ ],
198
+ },
199
+ ]
200
+
201
+ // Quick actions for footer
202
+ const footerActions = [
203
+ { label: 'AI Buddy', icon: 'i-hugeicons-ai-chat-02', href: '/buddy' },
204
+ ]
205
+
206
+ // Handlers
207
+ function handleCollapse(collapsed) {
208
+ isCollapsed = collapsed
209
+ }
210
+
211
+ function handleSectionToggle(sectionId) {
212
+ expandedSections[sectionId] = !expandedSections[sectionId]
213
+ }
214
+
215
+ function handleSearch(value) {
216
+ searchQuery = value
217
+ }
218
+ </script>
219
+ <Sidebar
220
+ :sections="sections"
221
+ :collapsed="isCollapsed"
222
+ :collapsible="true"
223
+ :width="240"
224
+ :minWidth="64"
225
+ variant="tahoe"
226
+ position="left"
227
+ :bordered="true"
228
+ @collapse="handleCollapse"
229
+ @sectionToggle="handleSectionToggle"
230
+ >
231
+ <template #header>
232
+ <SidebarHeader
233
+ :title="currentTeam.name"
234
+ :subtitle="currentTeam.type"
235
+ :showSearch="true"
236
+ :searchValue="searchQuery"
237
+ :collapsed="isCollapsed"
238
+ @search="handleSearch"
239
+ />
240
+ <template #footer>
241
+ <SidebarFooter
242
+ :showSettings="true"
243
+ :showThemeToggle="true"
244
+ settingsHref="/settings"
245
+ :collapsed="isCollapsed"
246
+ :actions="footerActions"
247
+ />
248
+ </template>
249
+ </Sidebar>
@@ -0,0 +1,15 @@
1
+ <script>
2
+ interface LoadingCardProps {
3
+ width?: number
4
+ height?: number
5
+ }
6
+
7
+ const { width = 16, height = 4 } = defineProps<LoadingCardProps>()
8
+ </script>
9
+ <div class="mx-auto w-full rounded-md shadow">
10
+ <div class="flex space-x-4 animate-pulse">
11
+ <div class="flex-1 space-y-6">
12
+ <div class="bg-slate-300 rounded-md" style="height: {{ height }}rem"></div>
13
+ </div>
14
+ </div>
15
+ </div>
@@ -0,0 +1,26 @@
1
+ <script>
2
+ interface LoadingDetailsProps {
3
+ width?: number
4
+ height?: number
5
+ }
6
+
7
+ const { width = 16, height = 4 } = defineProps<LoadingDetailsProps>()
8
+ </script>
9
+ <div class="mx-auto p-4 w-full rounded-md" style="height: {{ height }}rem">
10
+ <div class="space-y-12 animate-pulse">
11
+ <!-- Title -->
12
+ <div class="h-4 w-3/4 bg-slate-300 rounded-md"></div>
13
+
14
+ <!-- Description -->
15
+ <div class="space-y-2">
16
+ <div class="h-3 w-full bg-slate-300 rounded-md"></div>
17
+ <div class="h-3 w-5/6 bg-slate-300 rounded-md"></div>
18
+ </div>
19
+
20
+ <!-- Buttons -->
21
+ <div class="flex space-x-4">
22
+ <div class="h-8 w-1/4 bg-slate-300 rounded-md"></div>
23
+ <div class="h-8 w-1/4 bg-slate-300 rounded-md"></div>
24
+ </div>
25
+ </div>
26
+ </div>
@@ -0,0 +1,82 @@
1
+ <!--
2
+ Custom Dashboard Table Component
3
+
4
+ A reusable table component for dashboard data display.
5
+
6
+ Usage:
7
+ <Table
8
+ :columns="[{ key: 'name', label: 'Name' }, { key: 'status', label: 'Status' }]"
9
+ :data="[{ name: 'Item 1', status: 'active' }]"
10
+ />
11
+ -->
12
+
13
+ <script>
14
+ interface TableProps {
15
+ columns: any[]
16
+ data: any[]
17
+ striped?: boolean
18
+ hoverable?: boolean
19
+ }
20
+
21
+ const { columns, data, striped, hoverable } = defineProps<TableProps>()
22
+ </script>
23
+ <div class="dashboard-table-container">
24
+ <table class="dashboard-table {{ striped ? 'striped' : '' }} {{ hoverable ? 'hoverable' : '' }}">
25
+ <thead>
26
+ <tr>
27
+ @foreach (columns as column)
28
+ <th class="{{ column.align ? 'text-' + column.align : '' }}">
29
+ {{ column.label }}
30
+ </th>
31
+ @endforeach
32
+ </tr>
33
+ </thead>
34
+ <tbody>
35
+ @foreach (data as row)
36
+ <tr>
37
+ @foreach (columns as column)
38
+ <td class="{{ column.align ? 'text-' + column.align : '' }}">
39
+ @if (column.render)
40
+ {{ column.render(row[column.key], row) }}
41
+ @else
42
+ {{ row[column.key] }}
43
+ @endif
44
+ </td>
45
+ @endforeach
46
+ </tr>
47
+ @endforeach
48
+ </tbody>
49
+ </table>
50
+ </div>
51
+ <style>
52
+ .dashboard-table-container {
53
+ overflow-x: auto;
54
+ }
55
+ .dashboard-table {
56
+ width: 100%;
57
+ border-collapse: collapse;
58
+ }
59
+ .dashboard-table th,
60
+ .dashboard-table td {
61
+ padding: 0.75rem 1rem;
62
+ text-align: left;
63
+ border-bottom: 1px solid var(--color-border);
64
+ }
65
+ .dashboard-table th {
66
+ font-size: 0.75rem;
67
+ font-weight: 600;
68
+ text-transform: uppercase;
69
+ letter-spacing: 0.05em;
70
+ color: var(--color-text-muted);
71
+ background: var(--color-bg-subtle);
72
+ }
73
+ .dashboard-table.striped tbody tr:nth-child(even) {
74
+ background: var(--color-bg-subtle);
75
+ }
76
+ .dashboard-table.hoverable tbody tr:hover {
77
+ background: var(--color-bg-hover);
78
+ }
79
+ .text-left { text-align: left; }
80
+ .text-center { text-align: center; }
81
+ .text-right { text-align: right; }
82
+ </style>
@@ -0,0 +1,97 @@
1
+ <script>
2
+ interface TerminalContainerProps {
3
+ live?: boolean
4
+ path?: string
5
+ branch?: string
6
+ version?: string
7
+ }
8
+
9
+ const { live = false, path = '~/Code/stacks', branch = 'main', version = 'v1.2.3' } = defineProps<TerminalContainerProps>()
10
+
11
+ const files = [
12
+ 'CHANGELOG.md', 'LICENSE.md', 'README.md', 'app',
13
+ 'bootstrap', 'buddy', 'cloud', 'commitlint.config.ts',
14
+ 'bun.lock', 'bunfig.toml', 'config', 'database',
15
+ 'docs', 'eslint.config.ts', 'node_modules', 'package.json',
16
+ 'pantry.yaml', 'public', 'resources', 'routes',
17
+ 'storage', 'tests', 'tsconfig.json', '~'
18
+ ]
19
+ </script>
20
+ <div class="font-mono">
21
+ <div class="flex flex-col h-full w-full text-[#C9D1D9] bg-[#0D1117] rounded-lg shadow">
22
+ <!-- Terminal Header -->
23
+ <header class="flex items-center justify-between px-3 py-2 bg-[#161B22] rounded-t-lg">
24
+ <div class="flex gap-2 items-center">
25
+ <div class="h-3 w-3 bg-[#FF5F56] rounded-full"></div>
26
+ <div class="h-3 w-3 bg-[#FFBD2E] rounded-full"></div>
27
+ <div class="h-3 w-3 bg-[#27C93F] rounded-full"></div>
28
+ </div>
29
+ <div class="absolute left-1/2 text-[#8B949E] text-sm -translate-x-1/2">
30
+ {{ path }}
31
+ </div>
32
+ </header>
33
+
34
+ <!-- Terminal Content -->
35
+ <div class="p-4 leading-6 text-sm">
36
+ <div class="flex gap-2 items-center text-[#C9D1D9]">
37
+ <span class="text-[#8B949E]">{{ path }}</span>
38
+ <span>on</span>
39
+ <span class="flex gap-1 items-center">
40
+ <span class="text-[#7EE787]">{{ branch }}</span>
41
+ </span>
42
+ <span>via</span>
43
+ <span class="flex gap-1 items-center">
44
+ <span class="text-[#8B949E]">🐰</span>
45
+ <span class="text-[#FF7B72]">{{ version }}</span>
46
+ </span>
47
+ </div>
48
+
49
+ <div class="flex gap-2 items-center mt-1 text-[#C9D1D9]">
50
+ <span class="text-[#8B949E]">❯</span>
51
+ <span>ls</span>
52
+ </div>
53
+
54
+ <div class="grid gap-4 grid-cols-4 mt-2">
55
+ @foreach(files as file)
56
+ <div class="text-[#C9D1D9]">{{ file }}</div>
57
+ @endforeach
58
+ </div>
59
+
60
+ <div class="flex gap-2 items-center mt-4 text-[#C9D1D9]">
61
+ <span class="text-[#8B949E]">{{ path }}</span>
62
+ <span>on</span>
63
+ <span class="flex gap-1 items-center">
64
+ <span class="text-[#7EE787]">{{ branch }}</span>
65
+ </span>
66
+ <span>via</span>
67
+ <span class="flex gap-1 items-center">
68
+ <span class="text-[#8B949E]">🐰</span>
69
+ <span class="text-[#FF7B72]">{{ version }}</span>
70
+ </span>
71
+ </div>
72
+
73
+ <div class="flex gap-2 items-center mt-1 text-[#C9D1D9]">
74
+ <span class="text-[#8B949E]">❯</span>
75
+ <input
76
+ type="text"
77
+ class="flex-1 bg-transparent border-0 outline-0 active:outline-0 active:ring-0 focus:outline-0 focus:ring-0"
78
+ style="-webkit-tap-highlight-color: transparent;"
79
+ >
80
+ </div>
81
+ </div>
82
+ </div>
83
+ </div>
84
+ <style>
85
+ @keyframes blink {
86
+ 0%, 100% { opacity: 1; }
87
+ 50% { opacity: 0; }
88
+ }
89
+
90
+ .cli-cursor {
91
+ opacity: 1;
92
+ }
93
+
94
+ .cursor-blink {
95
+ animation: blink 1s step-end infinite;
96
+ }
97
+ </style>
@@ -0,0 +1,166 @@
1
+ <script>
2
+ interface TooltipProps {
3
+ label?: string
4
+ position?: string
5
+ dark?: boolean
6
+ alignment?: string
7
+ }
8
+
9
+ // `label` (was `text`) holds the tooltip body. The original `text` prop
10
+ // collided with the auto-imported text() validator from @stacksjs/validation,
11
+ // which leaked the validator function source into the rendered tooltip.
12
+ const { label = '', position = 'bottom', dark = false, alignment = 'center' } = defineProps<TooltipProps>()
13
+ </script>
14
+ <div
15
+ class="tooltip-container"
16
+ data-tooltip
17
+ >
18
+ <slot />
19
+
20
+ <span
21
+ class="tooltip {{ position }} {{ dark ? 'dark-tooltip' : '' }} align-{{ alignment }}"
22
+ data-tooltip-text
23
+ >
24
+ {{ label }}
25
+ </span>
26
+ </div>
27
+ <style>
28
+ .tooltip-container {
29
+ position: relative;
30
+ display: inline-flex;
31
+ }
32
+
33
+ .tooltip {
34
+ visibility: hidden;
35
+ position: absolute;
36
+ background-color: rgba(0, 0, 0, 0.8);
37
+ color: white;
38
+ text-align: center;
39
+ padding: 4px 8px;
40
+ border-radius: 4px;
41
+ font-size: 12px;
42
+ white-space: nowrap;
43
+ z-index: 100;
44
+ opacity: 0;
45
+ transition: opacity 0.2s, visibility 0.2s;
46
+ }
47
+
48
+ .tooltip-container:hover .tooltip {
49
+ visibility: visible;
50
+ opacity: 1;
51
+ }
52
+
53
+ /* Position variations */
54
+ .tooltip.bottom {
55
+ bottom: -30px;
56
+ left: 50%;
57
+ transform: translateX(-50%);
58
+ }
59
+
60
+ .tooltip.bottom.align-left {
61
+ left: 0;
62
+ transform: none;
63
+ }
64
+
65
+ .tooltip.bottom.align-right {
66
+ left: auto;
67
+ right: 0;
68
+ transform: none;
69
+ }
70
+
71
+ .tooltip.top {
72
+ top: -30px;
73
+ left: 50%;
74
+ transform: translateX(-50%);
75
+ }
76
+
77
+ .tooltip.top.align-left {
78
+ left: 0;
79
+ transform: none;
80
+ }
81
+
82
+ .tooltip.top.align-right {
83
+ left: auto;
84
+ right: 0;
85
+ transform: none;
86
+ }
87
+
88
+ .tooltip.left {
89
+ left: -8px;
90
+ top: 50%;
91
+ transform: translate(-100%, -50%);
92
+ }
93
+
94
+ .tooltip.right {
95
+ right: -8px;
96
+ top: 50%;
97
+ transform: translate(100%, -50%);
98
+ }
99
+
100
+ /* Arrows for each position */
101
+ .tooltip.bottom::after {
102
+ content: "";
103
+ position: absolute;
104
+ bottom: 100%;
105
+ left: 50%;
106
+ margin-left: -5px;
107
+ border-width: 5px;
108
+ border-style: solid;
109
+ border-color: transparent transparent rgba(0, 0, 0, 0.8) transparent;
110
+ }
111
+
112
+ .tooltip.top::after {
113
+ content: "";
114
+ position: absolute;
115
+ top: 100%;
116
+ left: 50%;
117
+ margin-left: -5px;
118
+ border-width: 5px;
119
+ border-style: solid;
120
+ border-color: rgba(0, 0, 0, 0.8) transparent transparent transparent;
121
+ }
122
+
123
+ .tooltip.left::after {
124
+ content: "";
125
+ position: absolute;
126
+ top: 50%;
127
+ left: 100%;
128
+ margin-top: -5px;
129
+ border-width: 5px;
130
+ border-style: solid;
131
+ border-color: transparent transparent transparent rgba(0, 0, 0, 0.8);
132
+ }
133
+
134
+ .tooltip.right::after {
135
+ content: "";
136
+ position: absolute;
137
+ top: 50%;
138
+ right: 100%;
139
+ margin-top: -5px;
140
+ border-width: 5px;
141
+ border-style: solid;
142
+ border-color: transparent rgba(0, 0, 0, 0.8) transparent transparent;
143
+ }
144
+
145
+ /* Dark mode adjustments */
146
+ .dark-tooltip {
147
+ background-color: rgba(255, 255, 255, 0.8);
148
+ color: #1e293b;
149
+ }
150
+
151
+ .dark-tooltip.bottom::after {
152
+ border-bottom-color: rgba(255, 255, 255, 0.8);
153
+ }
154
+
155
+ .dark-tooltip.top::after {
156
+ border-top-color: rgba(255, 255, 255, 0.8);
157
+ }
158
+
159
+ .dark-tooltip.left::after {
160
+ border-left-color: rgba(255, 255, 255, 0.8);
161
+ }
162
+
163
+ .dark-tooltip.right::after {
164
+ border-right-color: rgba(255, 255, 255, 0.8);
165
+ }
166
+ </style>