@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.
- package/LICENSE.md +21 -0
- package/README.md +2 -0
- package/package.json +20 -0
- package/resources/assets/fonts/013717e9.woff +0 -0
- package/resources/assets/fonts/03355817.woff2 +0 -0
- package/resources/assets/fonts/0380de7e.woff2 +0 -0
- package/resources/assets/fonts/0ba5d32a.woff +0 -0
- package/resources/assets/fonts/0bd57ddf.woff2 +0 -0
- package/resources/assets/fonts/19de0a60.woff2 +0 -0
- package/resources/assets/fonts/20b87e84.woff +0 -0
- package/resources/assets/fonts/4bbc67e1.woff +0 -0
- package/resources/assets/fonts/576fb0d7.woff +0 -0
- package/resources/assets/fonts/5ea10ee5.woff2 +0 -0
- package/resources/assets/fonts/6413fc0a.woff +0 -0
- package/resources/assets/fonts/72c114cf.woff +0 -0
- package/resources/assets/fonts/73c57e73.woff2 +0 -0
- package/resources/assets/fonts/813dca6c.woff +0 -0
- package/resources/assets/fonts/8a9b0995.woff2 +0 -0
- package/resources/assets/fonts/90b4832f.woff +0 -0
- package/resources/assets/fonts/9394ab85.woff2 +0 -0
- package/resources/assets/fonts/9b3c7d7f.woff2 +0 -0
- package/resources/assets/fonts/Monaco.ttf +0 -0
- package/resources/assets/fonts/b1b36d74.woff +0 -0
- package/resources/assets/fonts/b5d74798.woff2 +0 -0
- package/resources/assets/fonts/b9f81a4d.woff +0 -0
- package/resources/assets/fonts/c9784008.woff2 +0 -0
- package/resources/assets/fonts/cf692227.woff +0 -0
- package/resources/assets/fonts/d1c6ab51.woff2 +0 -0
- package/resources/assets/fonts/e2eb62fc.woff +0 -0
- package/resources/assets/fonts/fe21f8d8.woff2 +0 -0
- package/resources/assets/fonts/nps/CampmateScript-Regular.woff2 +0 -0
- package/resources/assets/fonts/nps/NPS_2026-variable.woff2 +0 -0
- package/resources/assets/fonts/nps/RedwoodSerif-Regular.woff2 +0 -0
- package/resources/assets/fonts/nps/SequoiaSans-Regular.woff2 +0 -0
- package/resources/assets/fonts/nps/Switchback-Regular.woff2 +0 -0
- package/resources/assets/images/app-icon.png +0 -0
- package/resources/assets/images/bg-img.png +0 -0
- package/resources/assets/images/park-ridge.svg +15 -0
- package/resources/assets/images/topography.svg +1 -0
- package/resources/assets/scripts/main.ts +2153 -0
- package/resources/assets/styles/README.md +19 -0
- package/resources/assets/styles/docs/main.css +1 -0
- package/resources/assets/styles/docs/overrides.css +1 -0
- package/resources/assets/styles/docs/vars.css +8 -0
- package/resources/assets/styles/main.css +1419 -0
- package/resources/components/Button.stx +70 -0
- package/resources/components/Buttons/BaseButton.stx +39 -0
- package/resources/components/Buttons/Counter.stx +28 -0
- package/resources/components/Buttons/ToggleDark.stx +11 -0
- package/resources/components/Container.stx +10 -0
- package/resources/components/Dashboard/.gitkeep +0 -0
- package/resources/components/Dashboard/Auth/ForgotPassword.stx +127 -0
- package/resources/components/Dashboard/Auth/Login.stx +212 -0
- package/resources/components/Dashboard/Auth/Register.stx +306 -0
- package/resources/components/Dashboard/Avatar.stx +123 -0
- package/resources/components/Dashboard/Billing/ActivePlan.stx +57 -0
- package/resources/components/Dashboard/Billing/CardBrands.stx +32 -0
- package/resources/components/Dashboard/Billing/CardForm.stx +34 -0
- package/resources/components/Dashboard/Billing/OneTimePayment.stx +28 -0
- package/resources/components/Dashboard/Billing/PaymentForm.stx +33 -0
- package/resources/components/Dashboard/Billing/PaymentMethod.stx +66 -0
- package/resources/components/Dashboard/Billing/PaymentMethodList.stx +52 -0
- package/resources/components/Dashboard/Billing/Plans.stx +136 -0
- package/resources/components/Dashboard/Buttons/AppButton.stx +48 -0
- package/resources/components/Dashboard/Buttons/IconButton.stx +20 -0
- package/resources/components/Dashboard/Card.stx +78 -0
- package/resources/components/Dashboard/Chart.stx +75 -0
- package/resources/components/Dashboard/CodeEditor.stx +41 -0
- package/resources/components/Dashboard/Commerce/BulkActionBar.stx +70 -0
- package/resources/components/Dashboard/Commerce/CategoriesTable.stx +133 -0
- package/resources/components/Dashboard/Commerce/CouponsTable.stx +161 -0
- package/resources/components/Dashboard/Commerce/CustomersTable.stx +142 -0
- package/resources/components/Dashboard/Commerce/Delivery/DeliveryRoutesTable.stx +80 -0
- package/resources/components/Dashboard/Commerce/Delivery/DigitalDeliveryTable.stx +85 -0
- package/resources/components/Dashboard/Commerce/Delivery/DriversTable.stx +99 -0
- package/resources/components/Dashboard/Commerce/Delivery/LicenseKeysTable.stx +92 -0
- package/resources/components/Dashboard/Commerce/Delivery/LicenseTemplatesTable.stx +88 -0
- package/resources/components/Dashboard/Commerce/Delivery/Pagination.stx +122 -0
- package/resources/components/Dashboard/Commerce/Delivery/SearchFilter.stx +23 -0
- package/resources/components/Dashboard/Commerce/Delivery/ShippingMethodsTable.stx +80 -0
- package/resources/components/Dashboard/Commerce/Delivery/ShippingRatesTable.stx +59 -0
- package/resources/components/Dashboard/Commerce/Delivery/ShippingZonesTable.stx +71 -0
- package/resources/components/Dashboard/Commerce/Delivery/TabNavigation.stx +36 -0
- package/resources/components/Dashboard/Commerce/Forms/CouponsForm.stx +191 -0
- package/resources/components/Dashboard/Commerce/OrdersTable.stx +131 -0
- package/resources/components/Dashboard/Commerce/ProductsTable.stx +170 -0
- package/resources/components/Dashboard/CreateRecordModal.stx +363 -0
- package/resources/components/Dashboard/DashboardLayout.stx +155 -0
- package/resources/components/Dashboard/Deployments/ActivityFeed.stx +54 -0
- package/resources/components/Dashboard/Deployments/DeployScript.stx +23 -0
- package/resources/components/Dashboard/Deployments/DeploymentHistory.stx +97 -0
- package/resources/components/Dashboard/Deployments/DeploymentList.stx +94 -0
- package/resources/components/Dashboard/Deployments/LiveTerminalOutput.stx +18 -0
- package/resources/components/Dashboard/Elements/Dropdown.stx +57 -0
- package/resources/components/Dashboard/Email/EmailActivityChart.stx +111 -0
- package/resources/components/Dashboard/Email/EmailCompose.stx +72 -0
- package/resources/components/Dashboard/Email/EmailDetail.stx +105 -0
- package/resources/components/Dashboard/Email/EmailList.stx +117 -0
- package/resources/components/Dashboard/Email/EmailSearch.stx +40 -0
- package/resources/components/Dashboard/Email/EmailSidebar.stx +133 -0
- package/resources/components/Dashboard/GlobalSearch.stx +124 -0
- package/resources/components/Dashboard/MobileSidebar.stx +47 -0
- package/resources/components/Dashboard/Modals/BaseModal.stx +50 -0
- package/resources/components/Dashboard/Modals/Popups/Alert.stx +112 -0
- package/resources/components/Dashboard/Modals/Popups/Toast.stx +70 -0
- package/resources/components/Dashboard/Modals/ToastWrapper.stx +35 -0
- package/resources/components/Dashboard/Monitoring/ErrorDetailModal.stx +228 -0
- package/resources/components/Dashboard/Monitoring/ErrorsTable.stx +184 -0
- package/resources/components/Dashboard/Navbar.stx +194 -0
- package/resources/components/Dashboard/NavbarModern.stx +188 -0
- package/resources/components/Dashboard/NotificationErrorModal.stx +105 -0
- package/resources/components/Dashboard/NotificationStatusBadge.stx +20 -0
- package/resources/components/Dashboard/Pagination.stx +90 -0
- package/resources/components/Dashboard/Queue/QueueTable.stx +127 -0
- package/resources/components/Dashboard/Settings/Forms/AIForm.stx +126 -0
- package/resources/components/Dashboard/Settings/Forms/AnalyticsForm.stx +52 -0
- package/resources/components/Dashboard/Settings/Forms/AppForm.stx +157 -0
- package/resources/components/Dashboard/Settings/Forms/CLIForm.stx +66 -0
- package/resources/components/Dashboard/Settings/Forms/CacheForm.stx +253 -0
- package/resources/components/Dashboard/Settings/Forms/CloudForm.stx +441 -0
- package/resources/components/Dashboard/Settings/Forms/DNSForm.stx +307 -0
- package/resources/components/Dashboard/Settings/Forms/DatabaseForm.stx +168 -0
- package/resources/components/Dashboard/Settings/Forms/EmailForm.stx +100 -0
- package/resources/components/Dashboard/Settings/Forms/FileSystemForm.stx +259 -0
- package/resources/components/Dashboard/Settings/Forms/HashingForm.stx +119 -0
- package/resources/components/Dashboard/Settings/Forms/LibraryForm.stx +389 -0
- package/resources/components/Dashboard/Settings/Forms/QueueForm.stx +219 -0
- package/resources/components/Dashboard/Settings/Forms/SearchEngineForm.stx +48 -0
- package/resources/components/Dashboard/Settings/Forms/SecurityForm.stx +143 -0
- package/resources/components/Dashboard/Settings/Forms/ServicesForm.stx +194 -0
- package/resources/components/Dashboard/Settings/Forms/StorageForm.stx +191 -0
- package/resources/components/Dashboard/Settings/Forms/TeamsForm.stx +33 -0
- package/resources/components/Dashboard/Settings/SettingsFormManager.stx +181 -0
- package/resources/components/Dashboard/SettingsHeader.stx +88 -0
- package/resources/components/Dashboard/SettingsSidebar.stx +234 -0
- package/resources/components/Dashboard/Sidebar.stx +23 -0
- package/resources/components/Dashboard/SidebarModern.stx +249 -0
- package/resources/components/Dashboard/Skeleton/LoadingCard.stx +15 -0
- package/resources/components/Dashboard/Skeleton/LoadingDetails.stx +26 -0
- package/resources/components/Dashboard/Table.stx +82 -0
- package/resources/components/Dashboard/TerminalContainer.stx +97 -0
- package/resources/components/Dashboard/Tooltip.stx +166 -0
- package/resources/components/Dashboard/Transaction/index.stx +88 -0
- package/resources/components/Dashboard/UI/ActivityTable.stx +54 -0
- package/resources/components/Dashboard/UI/Avatar.stx +102 -0
- package/resources/components/Dashboard/UI/Badge.stx +66 -0
- package/resources/components/Dashboard/UI/Button.stx +73 -0
- package/resources/components/Dashboard/UI/Card.stx +51 -0
- package/resources/components/Dashboard/UI/ChartCard.stx +36 -0
- package/resources/components/Dashboard/UI/Checkbox.stx +74 -0
- package/resources/components/Dashboard/UI/ConfirmDialog.stx +74 -0
- package/resources/components/Dashboard/UI/DataTable.stx +45 -0
- package/resources/components/Dashboard/UI/Dropdown.stx +72 -0
- package/resources/components/Dashboard/UI/DropdownItem.stx +80 -0
- package/resources/components/Dashboard/UI/EmptyState.stx +50 -0
- package/resources/components/Dashboard/UI/FilterBar.stx +48 -0
- package/resources/components/Dashboard/UI/Input.stx +77 -0
- package/resources/components/Dashboard/UI/Modal.stx +75 -0
- package/resources/components/Dashboard/UI/PageHeader.stx +69 -0
- package/resources/components/Dashboard/UI/PageLayout.stx +84 -0
- package/resources/components/Dashboard/UI/Pagination.stx +126 -0
- package/resources/components/Dashboard/UI/QuickLinks.stx +31 -0
- package/resources/components/Dashboard/UI/RouterLink.stx +31 -0
- package/resources/components/Dashboard/UI/Select.stx +84 -0
- package/resources/components/Dashboard/UI/ServiceHealth.stx +38 -0
- package/resources/components/Dashboard/UI/StatsCard.stx +79 -0
- package/resources/components/Dashboard/UI/Table.stx +143 -0
- package/resources/components/Dashboard/UI/Tabs.stx +45 -0
- package/resources/components/Dashboard/UI/Textarea.stx +93 -0
- package/resources/components/Dashboard/UI/Toggle.stx +84 -0
- package/resources/components/Dashboard/UI/WindowControls.stx +135 -0
- package/resources/components/Dashboard/Widget.stx +89 -0
- package/resources/components/Dashboard/WindowControls.stx +119 -0
- package/resources/components/Dashboard/index.ts +106 -0
- package/resources/components/Docs/Demo/ComboboxCode.md +114 -0
- package/resources/components/Docs/Demo/ComboboxDemo.stx +91 -0
- package/resources/components/Docs/Demo/DialogCode.md +42 -0
- package/resources/components/Docs/Demo/DialogDemo.stx +76 -0
- package/resources/components/Docs/Demo/DocsPlayground.stx +39 -0
- package/resources/components/Docs/Demo/DropdownCode.md +109 -0
- package/resources/components/Docs/Demo/DropdownDemo.stx +82 -0
- package/resources/components/Docs/Demo/Hero.stx +100 -0
- package/resources/components/Docs/Demo/ListboxCode.md +87 -0
- package/resources/components/Docs/Demo/ListboxDemo.stx +59 -0
- package/resources/components/Docs/Demo/NotificationCode.md +173 -0
- package/resources/components/Docs/Demo/NotificationDemo.stx +99 -0
- package/resources/components/Docs/Demo/PopoverCode.md +161 -0
- package/resources/components/Docs/Demo/PopoverDemo.stx +96 -0
- package/resources/components/Docs/Demo/RadioGroupCode.md +98 -0
- package/resources/components/Docs/Demo/RadioGroupDemo.stx +53 -0
- package/resources/components/Docs/Demo/StepperCode.md +216 -0
- package/resources/components/Docs/Demo/StepperDemo.stx +137 -0
- package/resources/components/Docs/Demo/SwitchCode.md +24 -0
- package/resources/components/Docs/Demo/SwitchDemo.stx +28 -0
- package/resources/components/Docs/Home.stx +7 -0
- package/resources/components/Docs/HomeContributors.stx +23 -0
- package/resources/components/Docs/HomeSponsors.stx +17 -0
- package/resources/components/Docs/HomeTeam.stx +18 -0
- package/resources/components/Docs/TeamMember.stx +79 -0
- package/resources/components/Email/EmailButton.stx +32 -0
- package/resources/components/Email/EmailDivider.stx +20 -0
- package/resources/components/Email/EmailImage.stx +24 -0
- package/resources/components/Email/EmailLayout.stx +55 -0
- package/resources/components/Email/EmailLink.stx +22 -0
- package/resources/components/Email/EmailSection.stx +20 -0
- package/resources/components/Email/EmailText.stx +30 -0
- package/resources/components/Forum/ForumBreadcrumb.stx +38 -0
- package/resources/components/Forum/ForumCategory.stx +16 -0
- package/resources/components/Forum/ForumCategoryItem.stx +46 -0
- package/resources/components/Forum/ForumLayout.stx +36 -0
- package/resources/components/Forum/ForumPagination.stx +39 -0
- package/resources/components/Forum/ForumPost.stx +71 -0
- package/resources/components/Forum/ForumReplyForm.stx +76 -0
- package/resources/components/Forum/ForumSidebar.stx +86 -0
- package/resources/components/Forum/ForumTopicItem.stx +77 -0
- package/resources/components/Forum/ForumTopicList.stx +23 -0
- package/resources/components/HelloWorld.stx +253 -0
- package/resources/components/Logo.stx +10 -0
- package/resources/components/Marketing/CallToAction.stx +30 -0
- package/resources/components/Marketing/ComingSoon.stx +155 -0
- package/resources/components/Marketing/Faqs.stx +99 -0
- package/resources/components/Marketing/Feature.stx +32 -0
- package/resources/components/Marketing/Fields.stx +28 -0
- package/resources/components/Marketing/Footer.stx +33 -0
- package/resources/components/Marketing/Header.stx +51 -0
- package/resources/components/Marketing/Hero.stx +46 -0
- package/resources/components/Marketing/Layout.stx +26 -0
- package/resources/components/Marketing/NavLink.stx +13 -0
- package/resources/components/Marketing/Plan.stx +43 -0
- package/resources/components/Marketing/Pricing.stx +120 -0
- package/resources/components/Marketing/PrimaryFeatures.stx +80 -0
- package/resources/components/Marketing/PrimaryFeatures2.stx +98 -0
- package/resources/components/Marketing/SecondaryFeatures.stx +80 -0
- package/resources/components/Marketing/Testimonials.stx +120 -0
- package/resources/components/Pagination.stx +149 -0
- package/resources/components/Playground.stx +9 -0
- package/resources/components/README.md +87 -0
- package/resources/components/Storefront/AnnouncementBar.stx +17 -0
- package/resources/components/Storefront/CartDrawer.stx +227 -0
- package/resources/components/Storefront/CheckoutSteps.stx +50 -0
- package/resources/components/Storefront/Footer.stx +81 -0
- package/resources/components/Storefront/Header.stx +66 -0
- package/resources/components/Storefront/OrderSummary.stx +79 -0
- package/resources/components/Storefront/ProductCard.stx +63 -0
- package/resources/components/Storefront/ProductGallery.stx +88 -0
- package/resources/components/Storefront/QuantitySelector.stx +97 -0
- package/resources/components/index.ts +13 -0
- package/resources/emails/email-verification.stx +46 -0
- package/resources/emails/layouts/base.html +113 -0
- package/resources/emails/password-changed.stx +55 -0
- package/resources/emails/password-reset.stx +43 -0
- package/resources/emails/subscription-confirmation.stx +99 -0
- package/resources/emails/welcome.stx +48 -0
- package/resources/functions/README.md +28 -0
- package/resources/functions/counter.ts +13 -0
- package/resources/functions/dark.ts +4 -0
- package/resources/functions/dashboard/analytics.ts +238 -0
- package/resources/functions/dashboard/config-io.ts +316 -0
- package/resources/functions/dashboard/data.ts +375 -0
- package/resources/functions/dashboard/library.ts +250 -0
- package/resources/functions/dashboard/sidebar.ts +537 -0
- package/resources/functions/dashboard/system.ts +150 -0
- package/resources/layouts/403.stx +188 -0
- package/resources/layouts/404.stx +34 -0
- package/resources/layouts/README.md +14 -0
- package/resources/layouts/dashboard/default.stx +20 -0
- package/resources/layouts/dashboard/guest.stx +10 -0
- package/resources/layouts/default.stx +3 -0
- package/resources/layouts/maintenance.stx +11 -0
- package/resources/layouts/storefront.stx +73 -0
- package/resources/layouts/system-tray/default.stx +3 -0
- package/resources/modules/.gitkeep +0 -0
- package/resources/plugins/.gitkeep +0 -0
- package/resources/plugins/preloader.ts +308 -0
- package/resources/types/README.md +3 -0
- package/resources/views/cart.stx +149 -0
- package/resources/views/checkout/contact.stx +101 -0
- package/resources/views/checkout/payment.stx +114 -0
- package/resources/views/checkout/shipping.stx +120 -0
- package/resources/views/coming-soon.stx +9 -0
- package/resources/views/dashboard/custom-page.stx +45 -0
- package/resources/views/dashboard/index.stx +24 -0
- package/resources/views/emails/welcome.stx +0 -0
- package/resources/views/errors/tester.stx +26 -0
- package/resources/views/index.stx +2865 -0
- 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,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 }};"> </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;" />
|