@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,216 @@
1
+ ```vue
2
+ <script setup>
3
+ import { ref, computed } from '@stacksjs/stx'
4
+ import { Stepper } from '@stacksjs/stepper'
5
+
6
+ const currentStep = ref(0)
7
+ const stepperRef = ref()
8
+
9
+ const steps = [
10
+ {
11
+ title: 'Step 1',
12
+ description: 'First step',
13
+ icon: 'i-heroicons-check'
14
+ },
15
+ {
16
+ title: 'Step 2',
17
+ description: 'Second step',
18
+ icon: 'i-heroicons-check'
19
+ },
20
+ {
21
+ title: 'Step 3',
22
+ description: 'Third step',
23
+ icon: 'i-heroicons-check'
24
+ }
25
+ ]
26
+
27
+ const next = () => {
28
+ if (currentStep.value < steps.length - 1) {
29
+ currentStep.value++
30
+ }
31
+ }
32
+
33
+ const previous = () => {
34
+ if (currentStep.value > 0) {
35
+ currentStep.value--
36
+ }
37
+ }
38
+
39
+ const reset = () => {
40
+ currentStep.value = 0
41
+ }
42
+
43
+ const currentContent = computed(() => {
44
+ switch (currentStep.value) {
45
+ case 0:
46
+ return {
47
+ title: 'Personal Information',
48
+ description: 'Please provide your basic details'
49
+ }
50
+ case 1:
51
+ return {
52
+ title: 'Account Setup',
53
+ description: 'Configure your account settings'
54
+ }
55
+ case 2:
56
+ return {
57
+ title: 'Final Review',
58
+ description: 'Review your information before submitting'
59
+ }
60
+ default:
61
+ return {
62
+ title: '',
63
+ description: ''
64
+ }
65
+ }
66
+ })
67
+ </script>
68
+
69
+ <template>
70
+ <div class="mx-auto p-8 max-w-3xl">
71
+ <Stepper
72
+ ref="stepperRef"
73
+ v-model="currentStep"
74
+ :steps="steps"
75
+ orientation="horizontal"
76
+ class="mb-12"
77
+ />
78
+
79
+ <!-- Content Section -->
80
+ <div class="mb-8 p-6 bg-white ring-1 ring-gray-900/5 rounded-lg shadow-sm">
81
+ <h2 class="mb-2 font-semibold text-gray-900 text-xl">
82
+ {{ currentContent.title }}
83
+ </h2>
84
+ <p class="mb-6 text-gray-600">
85
+ {{ currentContent.description }}
86
+ </p>
87
+
88
+ <!-- Step 1 Content -->
89
+ <div v-if="currentStep === 0" class="space-y-4">
90
+ <div class="grid gap-4 grid-cols-2">
91
+ <div class="space-y-2">
92
+ <label class="block font-medium text-gray-700 text-sm">First Name</label>
93
+ <input type="text" class="block w-full sm:text-sm border-gray-300 rounded-md focus:border-blue-500 focus:ring-blue-500 shadow-sm" />
94
+ </div>
95
+ <div class="space-y-2">
96
+ <label class="block font-medium text-gray-700 text-sm">Last Name</label>
97
+ <input type="text" class="block w-full sm:text-sm border-gray-300 rounded-md focus:border-blue-500 focus:ring-blue-500 shadow-sm" />
98
+ </div>
99
+ </div>
100
+ <div class="space-y-2">
101
+ <label class="block font-medium text-gray-700 text-sm">Email</label>
102
+ <input type="email" class="block w-full sm:text-sm border-gray-300 rounded-md focus:border-blue-500 focus:ring-blue-500 shadow-sm" />
103
+ </div>
104
+ </div>
105
+
106
+ <!-- Step 2 Content -->
107
+ <div v-if="currentStep === 1" class="space-y-4">
108
+ <div class="space-y-2">
109
+ <label class="block font-medium text-gray-700 text-sm">Username</label>
110
+ <input type="text" class="block w-full sm:text-sm border-gray-300 rounded-md focus:border-blue-500 focus:ring-blue-500 shadow-sm" />
111
+ </div>
112
+ <div class="space-y-2">
113
+ <label class="block font-medium text-gray-700 text-sm">Password</label>
114
+ <input type="password" class="block w-full sm:text-sm border-gray-300 rounded-md focus:border-blue-500 focus:ring-blue-500 shadow-sm" />
115
+ </div>
116
+ </div>
117
+
118
+ <!-- Step 3 Content -->
119
+ <div v-if="currentStep === 2" class="space-y-4">
120
+ <div class="p-4 bg-gray-50 rounded-lg">
121
+ <h3 class="mb-2 font-medium text-gray-900 text-sm">Review Your Information</h3>
122
+ <p class="text-gray-600 text-sm">Please review all the information you've entered. Once you submit, you won't be able to make changes.</p>
123
+ </div>
124
+ <div class="flex items-center space-x-2">
125
+ <input type="checkbox" class="text-blue-600 border-gray-300 rounded focus:ring-blue-500" />
126
+ <label class="text-gray-700 text-sm">I confirm that all the information provided is correct</label>
127
+ </div>
128
+ </div>
129
+ </div>
130
+
131
+ <div class="flex gap-4 justify-center">
132
+ <button
133
+ class="px-4 py-2 font-medium text-gray-700 text-sm bg-gray-50 hover:bg-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50"
134
+ :disabled="currentStep === 0"
135
+ @click="previous"
136
+ >
137
+ Previous
138
+ </button>
139
+ <button
140
+ class="px-4 py-2 font-medium text-sm text-white bg-blue-500 hover:bg-blue-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50"
141
+ :disabled="currentStep === steps.length - 1"
142
+ @click="next"
143
+ >
144
+ Next
145
+ </button>
146
+ <button
147
+ class="px-4 py-2 font-medium text-gray-700 text-sm bg-white hover:bg-gray-50 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2"
148
+ @click="reset"
149
+ >
150
+ Reset
151
+ </button>
152
+ </div>
153
+ </div>
154
+ </template>
155
+
156
+ <style scoped>
157
+ :deep(.stepper) {
158
+ --tw-primary-100: rgb(219 234 254);
159
+ --tw-primary-600: rgb(37 99 235);
160
+ }
161
+
162
+ button {
163
+ transition: all 0.2s ease;
164
+ }
165
+
166
+ button:not(:disabled):active {
167
+ transform: scale(0.98);
168
+ }
169
+
170
+ :deep(.step) {
171
+ min-width: 120px;
172
+ }
173
+
174
+ :deep(.step[data-orientation="horizontal"]:not(:last-child)) {
175
+ margin-right: 1rem;
176
+ }
177
+
178
+ :deep(.step-completed .connector-line) {
179
+ @apply bg-blue-500;
180
+ }
181
+
182
+ :deep(.step-current) {
183
+ @apply text-blue-600;
184
+ }
185
+
186
+ :deep(.step-completed) {
187
+ @apply text-blue-600;
188
+ }
189
+
190
+ :deep(.step-icon) {
191
+ @apply h-8 w-8 rounded-full flex items-center justify-center;
192
+ }
193
+
194
+ :deep(.step-completed .step-icon) {
195
+ @apply bg-blue-100 text-blue-600;
196
+ }
197
+
198
+ :deep(.step-current .step-icon) {
199
+ @apply bg-blue-100 text-blue-600 ring-2 ring-blue-600 ring-offset-2;
200
+ }
201
+
202
+ :deep(.step-upcoming .step-icon) {
203
+ @apply bg-gray-100 text-gray-500;
204
+ }
205
+
206
+ input[type="text"],
207
+ input[type="email"],
208
+ input[type="password"] {
209
+ @apply border-gray-300;
210
+ }
211
+
212
+ input[type="checkbox"] {
213
+ @apply rounded border-gray-300 text-blue-600 focus:ring-blue-500;
214
+ }
215
+ </style>
216
+ ```
@@ -0,0 +1,137 @@
1
+ <script>
2
+ interface StepperDemoProps {
3
+ currentStep?: number
4
+ steps?: string
5
+ }
6
+
7
+ const { currentStep = 0, steps = [ } = defineProps<StepperDemoProps>()
8
+
9
+ { title: 'Step 1', description: 'First step', icon: 'i-heroicons-check' },
10
+ { title: 'Step 2', description: 'Second step', icon: 'i-heroicons-check' },
11
+ { title: 'Step 3', description: 'Third step', icon: 'i-heroicons-check' },
12
+ ]
13
+
14
+ function getStepContent(step) {
15
+ switch (step) {
16
+ case 0:
17
+ return { title: 'Personal Information', description: 'Please provide your basic details' }
18
+ case 1:
19
+ return { title: 'Account Setup', description: 'Configure your account settings' }
20
+ case 2:
21
+ return { title: 'Final Review', description: 'Review your information before submitting' }
22
+ default:
23
+ return { title: '', description: '' }
24
+ }
25
+ }
26
+ </script>
27
+ <div class="max-w-4xl">
28
+ <DocsPlayground>
29
+ <div class="mx-auto p-8 max-w-3xl">
30
+ <!-- Stepper indicator -->
31
+ <div class="flex items-center justify-between mb-12">
32
+ @foreach(steps as step)
33
+ <div class="flex items-center : ? '' 'flex-1' {{ }} loop.last">
34
+ <div class="flex flex-col items-center">
35
+ <div class="flex items-center justify-center h-8 w-8 text-blue-600' text-gray-500' ring-blue-600 ring-offset-2' rounded-full : : ? ? '' 'bg-blue-100 'bg-gray-100 'ring-2 {{ {{ }} }} <= == currentStep currentStep loop.index loop.index">
36
+ @if(loop.index < currentStep)
37
+ <div class="h-5 w-5 i-heroicons-check"></div>
38
+ @else
39
+ {{ loop.index + 1 }}
40
+ @endif
41
+ </div>
42
+ <span class="mt-2 font-medium' text-sm : ? 'text-blue-600 'text-gray-500' {{ }} == currentStep loop.index">{{ step.title }}</span>
43
+ </div>
44
+ @if(!loop.last)
45
+ <div class="flex-1 mx-4 h-0.5 : ? 'bg-blue-500' 'bg-gray-200' {{ }} < currentStep loop.index"></div>
46
+ @endif
47
+ </div>
48
+ @endforeach
49
+ </div>
50
+
51
+ <!-- Content Section -->
52
+ <div class="mb-8 p-6 bg-white ring-1 ring-gray-900/5 rounded-lg shadow-sm">
53
+ <h2 class="mb-2 font-semibold text-gray-900 text-xl">
54
+ {{ getStepContent(currentStep).title }}
55
+ </h2>
56
+ <p class="mb-6 text-gray-600">
57
+ {{ getStepContent(currentStep).description }}
58
+ </p>
59
+
60
+ <!-- Step 1 Content -->
61
+ @if(currentStep == 0)
62
+ <div class="space-y-4">
63
+ <div class="grid gap-4 grid-cols-2">
64
+ <div class="space-y-2">
65
+ <label class="block font-medium text-gray-700 text-sm">First Name</label>
66
+ <input type="text" class="block w-full sm:text-sm border-gray-300 rounded-md focus:border-blue-500 focus:ring-blue-500 shadow-sm">
67
+ </div>
68
+ <div class="space-y-2">
69
+ <label class="block font-medium text-gray-700 text-sm">Last Name</label>
70
+ <input type="text" class="block w-full sm:text-sm border-gray-300 rounded-md focus:border-blue-500 focus:ring-blue-500 shadow-sm">
71
+ </div>
72
+ </div>
73
+ <div class="space-y-2">
74
+ <label class="block font-medium text-gray-700 text-sm">Email</label>
75
+ <input type="email" class="block w-full sm:text-sm border-gray-300 rounded-md focus:border-blue-500 focus:ring-blue-500 shadow-sm">
76
+ </div>
77
+ </div>
78
+ @endif
79
+
80
+ <!-- Step 2 Content -->
81
+ @if(currentStep == 1)
82
+ <div class="space-y-4">
83
+ <div class="space-y-2">
84
+ <label class="block font-medium text-gray-700 text-sm">Username</label>
85
+ <input type="text" class="block w-full sm:text-sm border-gray-300 rounded-md focus:border-blue-500 focus:ring-blue-500 shadow-sm">
86
+ </div>
87
+ <div class="space-y-2">
88
+ <label class="block font-medium text-gray-700 text-sm">Password</label>
89
+ <input type="password" class="block w-full sm:text-sm border-gray-300 rounded-md focus:border-blue-500 focus:ring-blue-500 shadow-sm">
90
+ </div>
91
+ </div>
92
+ @endif
93
+
94
+ <!-- Step 3 Content -->
95
+ @if(currentStep == 2)
96
+ <div class="space-y-4">
97
+ <div class="p-4 bg-gray-50 rounded-lg">
98
+ <h3 class="mb-2 font-medium text-gray-900 text-sm">Review Your Information</h3>
99
+ <p class="text-gray-600 text-sm">Please review all the information you've entered. Once you submit, you won't be able to make changes.</p>
100
+ </div>
101
+ <div class="flex items-center space-x-2">
102
+ <input type="checkbox" class="text-blue-600 border-gray-300 rounded focus:ring-blue-500">
103
+ <label class="text-gray-700 text-sm">I confirm that all the information provided is correct</label>
104
+ </div>
105
+ </div>
106
+ @endif
107
+ </div>
108
+
109
+ <div class="flex gap-4 justify-center">
110
+ <button
111
+ class="px-4 py-2 font-medium text-gray-700 text-sm bg-gray-50 hover:bg-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 cursor-not-allowed' : ? '' 'opacity-50 {{ }} == 0 currentStep"
112
+ data-action="previous-step"
113
+ {{ currentStep == 0 ? 'disabled' : '' }}
114
+ >
115
+ Previous
116
+ </button>
117
+ <button
118
+ class="px-4 py-2 font-medium text-sm text-white bg-blue-500 hover:bg-blue-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 cursor-not-allowed' - : ? '' 'opacity-50 {{ }} == 1 currentStep steps.length"
119
+ data-action="next-step"
120
+ {{ currentStep == steps.length - 1 ? 'disabled' : '' }}
121
+ >
122
+ Next
123
+ </button>
124
+ <button
125
+ class="px-4 py-2 font-medium text-gray-700 text-sm bg-white hover:bg-gray-50 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2"
126
+ data-action="reset-stepper"
127
+ >
128
+ Reset
129
+ </button>
130
+ </div>
131
+ </div>
132
+
133
+ <div slot="code">
134
+ <!-- StepperCode component would be rendered here -->
135
+ </div>
136
+ </DocsPlayground>
137
+ </div>
@@ -0,0 +1,24 @@
1
+ ```vue
2
+ <script lang="ts" setup>
3
+ import { ref } from '@stacksjs/stx'
4
+ import { Switch } from '@stacksjs/switch'
5
+
6
+ const enabled = ref(false)
7
+ </script>
8
+
9
+ <template>
10
+ <Switch
11
+ v-model="enabled"
12
+ :class=": ? 'bg-blue-500' 'bg-gray-400' enabled"
13
+ class="inline-flex relative shrink-0 h-[38px] w-[74px] border-2 border-transparent rounded-full focus-visible:ring-2 focus-visible:ring-white/75 focus:outline-none duration-200 ease-in-out transition-colors cursor-pointer"
14
+ >
15
+ <span class="sr-only">Use setting</span>
16
+ <span
17
+ aria-hidden="true"
18
+ :class=": ? 'translate-x-0' 'translate-x-9' enabled"
19
+ class="inline-block h-[34px] w-[34px] bg-white ring-0 rounded-full shadow-lg duration-200 ease-in-out transition transform pointer-events-none"
20
+ />
21
+ </Switch>
22
+ </template>
23
+
24
+ ```
@@ -0,0 +1,28 @@
1
+ <script>
2
+ interface SwitchDemoProps {
3
+ enabled?: boolean
4
+ }
5
+
6
+ const { enabled = false } = defineProps<SwitchDemoProps>()
7
+ </script>
8
+ <div class="max-w-4xl">
9
+ <DocsPlayground>
10
+ <div class="flex gap-2 items-center justify-center my-3">
11
+ <button
12
+ class="inline-flex relative shrink-0 h-[38px] w-[74px] border-2 border-transparent rounded-full focus-visible:ring-2 focus-visible:ring-white/75 focus:outline-none duration-200 ease-in-out transition-colors cursor-pointer : ? 'bg-blue-500' 'bg-gray-400' {{ }} enabled"
13
+ data-action="toggle-switch"
14
+ >
15
+ <span class="sr-only">Use setting</span>
16
+ <span
17
+ aria-hidden="true"
18
+ class="inline-block h-[34px] w-[34px] bg-white ring-0 rounded-full shadow-lg duration-200 ease-in-out transition transform pointer-events-none : ? 'translate-x-0' 'translate-x-9' {{ }} enabled"
19
+ ></span>
20
+ </button>
21
+ </div>
22
+
23
+ <!-- Code slot placeholder -->
24
+ <div slot="code">
25
+ <!-- SwitchCode component would be rendered here -->
26
+ </div>
27
+ </DocsPlayground>
28
+ </div>
@@ -0,0 +1,7 @@
1
+ <div class="flex flex-col items-center mt-4 home">
2
+ <HomeTeam />
3
+
4
+ <HomeSponsors />
5
+
6
+ <HomeContributors />
7
+ </div>
@@ -0,0 +1,23 @@
1
+ <script>
2
+ interface HomeContributorsProps {
3
+ contributors?: any[]
4
+ }
5
+
6
+ const { contributors = [] } = defineProps<HomeContributorsProps>()
7
+ </script>
8
+ <div class="vp-doc">
9
+ <h2 class="pb-2 pt-5 font-normal op50">
10
+ Contributors
11
+ </h2>
12
+ </div>
13
+
14
+ <div class="p-10 max-w-200 leading-7 text-center text-lg">
15
+ <div class="flex flex-wrap gap-1 justify-center">
16
+ @foreach(contributors as contributor)
17
+ <a href="https://github.com/{{ contributor.name }}" class="m-0" rel="noopener noreferrer" aria-label="{{ contributor.name }} on GitHub">
18
+ <img loading="lazy" src="{{ contributor.avatar }}" width="40" height="40" class="h-10 min-h-10 min-w-10 w-10 rounded-full" alt="{{ contributor.name }}'s avatar">
19
+ </a>
20
+ @endforeach
21
+ </div>
22
+ <br>
23
+ </div>
@@ -0,0 +1,17 @@
1
+ <div class="vp-doc">
2
+ <h2 class="pb-2 pt-5 font-normal op50">
3
+ Stacks Sponsors
4
+ </h2>
5
+ </div>
6
+
7
+ <p id="sponsor" class="mt-5 text-center">
8
+ <a href="https://github.com/sponsors/chrisbbreuer">
9
+ <img src="https://cdn.jsdelivr.net/gh/stacksjs/sponsors/sponsorkit/sponsors.svg" class="m-auto">
10
+ </a>
11
+ </p>
12
+
13
+ <p class="mt-5 text-center">
14
+ <a href="https://github.com/sponsors/chrisbbreuer" class="italic text-xs">
15
+ Click here to become a sponsor.
16
+ </a>
17
+ </p>
@@ -0,0 +1,18 @@
1
+ <script>
2
+ interface HomeTeamProps {
3
+ coreTeamMembers?: any[]
4
+ }
5
+
6
+ const { coreTeamMembers = [] } = defineProps<HomeTeamProps>()
7
+ </script>
8
+ <div class="vp-doc">
9
+ <h2 class="pb-2 pt-5 font-normal op50">
10
+ Meet The Team
11
+ </h2>
12
+ </div>
13
+
14
+ <div class="grid gap-x-3 gap-y-20 items-start sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 p-10">
15
+ @foreach(coreTeamMembers as member)
16
+ <TeamMember data="{{ member }}" />
17
+ @endforeach
18
+ </div>
@@ -0,0 +1,79 @@
1
+ <script>
2
+ interface TeamMemberProps {
3
+ data?: string
4
+ }
5
+
6
+ const { data = { } = defineProps<TeamMemberProps>()
7
+
8
+ name: '',
9
+ avatar: '',
10
+ description: '',
11
+ github: '',
12
+ sponsors: false,
13
+ functions: [],
14
+ packages: []
15
+ }
16
+ </script>
17
+ <div class="text-center">
18
+ <img
19
+ loading="lazy"
20
+ width="100"
21
+ height="100"
22
+ class="m-auto h-25 min-h-25 min-w-25 w-25 rounded-full"
23
+ src="{{ data.avatar }}"
24
+ alt="{{ data.name }}'s avatar"
25
+ >
26
+ <div class="mb-1 mt-2 text-xl">
27
+ {{ data.name }}
28
+ </div>
29
+ <div class="h-80px op60">
30
+ {!! data.description !!}
31
+ </div>
32
+
33
+ <div class="flex inline gap-2 py-2 text-2xl">
34
+ <a
35
+ class="inline-block text-current duration-200 transition i-carbon-logo-github mya op30 hover:op100"
36
+ href="https://github.com/{{ data.github }}"
37
+ target="_blank"
38
+ rel="noopener noreferrer"
39
+ aria-label="{{ data.name }} on GitHub"
40
+ ></a>
41
+
42
+ @if(data.sponsors)
43
+ <a
44
+ class="inline-block text-current duration-200 transition i-carbon-favorite-filled mya op30 hover:op100"
45
+ href="https://github.com/sponsors/{{ data.github }}"
46
+ target="_blank"
47
+ rel="noopener noreferrer"
48
+ title="Sponsor {{ data.name }}"
49
+ aria-label="Sponsor {{ data.name }}"
50
+ ></a>
51
+ @endif
52
+ </div>
53
+
54
+ @if(data.functions.length > 0 || data.packages.length > 0)
55
+ <div class="grid gap-x-1 gap-y-2 grid-cols-[20px_1fr] items-start mb-2 mx-auto p-3 w-5/6 bg-gray-100 rounded">
56
+ @if(data.functions.length > 0)
57
+ <div class="ma op50 i-carbon:function-math" title="Functions"></div>
58
+ <div class="flex flex-row flex-wrap gap-2 text-left text-sm">
59
+ @foreach(data.functions as func)
60
+ <a href="/{{ func }}" target="_blank">
61
+ <code>{{ func }}</code>
62
+ </a>
63
+ @endforeach
64
+ </div>
65
+ @endif
66
+
67
+ @if(data.packages.length > 0)
68
+ <div class="i-carbon-cube ma op50" title="Packages"></div>
69
+ <div class="flex flex-row flex-wrap gap-2 text-left text-sm">
70
+ @foreach(data.packages as pkg)
71
+ <a href="/add-ons">
72
+ <code>{{ pkg }}</code>
73
+ </a>
74
+ @endforeach
75
+ </div>
76
+ @endif
77
+ </div>
78
+ @endif
79
+ </div>
@@ -0,0 +1,32 @@
1
+ <script server>
2
+ // Bulletproof email button (stacksjs/stacks#1901 B1).
3
+ //
4
+ // Renders a table-based CTA that works in Outlook 2007-2019, Gmail
5
+ // (web + Android), Apple Mail. The `bg` colour applies to BOTH the
6
+ // table cell (Outlook ignores anchor backgrounds) and the anchor
7
+ // (everywhere else). `mso-padding-alt` is the documented hint that
8
+ // lets Outlook render padding correctly.
9
+ interface EmailButtonProps {
10
+ href: string
11
+ color?: string
12
+ bg?: string
13
+ padX?: string
14
+ padY?: string
15
+ }
16
+
17
+ const props = defineProps<EmailButtonProps>()
18
+ const href = props.href || '#'
19
+ const color = props.color || '#ffffff'
20
+ const bg = props.bg || '#3451b2'
21
+ const padX = props.padX || '32px'
22
+ const padY = props.padY || '14px'
23
+ </script>
24
+ <table role="presentation" cellpadding="0" cellspacing="0" border="0" style="margin:24px 0;border-collapse:separate;">
25
+ <tr>
26
+ <td align="center" style="border-radius:6px;background-color:{{ bg }};mso-padding-alt:0;">
27
+ <a href="{{ href }}" style="display:inline-block;padding:{{ padY }} {{ padX }};color:{{ color }};text-decoration:none;border-radius:6px;font-weight:600;font-size:16px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;text-align:center;mso-padding-alt:{{ padY }} {{ padX }};">
28
+ <slot />
29
+ </a>
30
+ </td>
31
+ </tr>
32
+ </table>
@@ -0,0 +1,20 @@
1
+ <script server>
2
+ // Email horizontal rule (stacksjs/stacks#1901 B1).
3
+ //
4
+ // `<hr>` renders inconsistently across clients (Outlook draws double
5
+ // lines, Gmail strips the colour). A 1px-tall table row with a forced
6
+ // font-size:1px;line-height:1px; is the safe equivalent.
7
+ interface EmailDividerProps {
8
+ color?: string
9
+ spacing?: string
10
+ }
11
+
12
+ const props = defineProps<EmailDividerProps>()
13
+ const color = props.color || '#e5e7eb'
14
+ const spacing = props.spacing || '24px'
15
+ </script>
16
+ <table role="presentation" cellpadding="0" cellspacing="0" border="0" style="width:100%;border-collapse:collapse;margin:{{ spacing }} 0;">
17
+ <tr>
18
+ <td style="height:1px;font-size:1px;line-height:1px;background-color:{{ color }};">&nbsp;</td>
19
+ </tr>
20
+ </table>
@@ -0,0 +1,24 @@
1
+ <script server>
2
+ // Email image (stacksjs/stacks#1901 B1).
3
+ //
4
+ // Sets the attributes Outlook + Gmail (mobile especially) need to
5
+ // behave: display:block kills the inline whitespace gap, border:0
6
+ // undoes the default link border, -ms-interpolation-mode:bicubic
7
+ // smooths scaling in Outlook on Windows. Always set `alt`: image
8
+ // blocking is the default in many corporate clients.
9
+ interface EmailImageProps {
10
+ src: string
11
+ alt: string
12
+ width?: number | string
13
+ height?: number | string
14
+ display?: 'block' | 'inline'
15
+ }
16
+
17
+ const props = defineProps<EmailImageProps>()
18
+ const src = props.src || ''
19
+ const alt = props.alt || ''
20
+ const width = props.width || ''
21
+ const height = props.height || ''
22
+ const display = props.display || 'block'
23
+ </script>
24
+ <img src="{{ src }}" alt="{{ alt }}" @if(width) width="{{ width }}" @endif @if(height) height="{{ height }}" @endif style="display:{{ display }};border:0;outline:none;text-decoration:none;-ms-interpolation-mode:bicubic;max-width:100%;height:auto;" />