@stacksjs/defaults 0.70.362 → 0.70.363

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 (135) hide show
  1. package/ai/skills/stacks-browse/SKILL.md +2 -1
  2. package/ai/skills/stacks-browse/scripts/browse.ts +20 -2
  3. package/ai/skills/stacks-dashboard/SKILL.md +4 -0
  4. package/app/Actions/Dashboard/Models/ModelShowAction.ts +4 -1
  5. package/app/Actions/Dashboard/Models/model-write.ts +5 -0
  6. package/ide/vscode/package.json +1 -1
  7. package/package.json +1 -1
  8. package/resources/components/Buttons/Counter.stx +1 -1
  9. package/resources/components/Buttons/ToggleDark.stx +1 -1
  10. package/resources/components/Dashboard/App/RequestDetailsDialog.stx +42 -0
  11. package/resources/components/Dashboard/App/RequestsOverview.stx +1 -21
  12. package/resources/components/Dashboard/Auth/AccessTokenCreateDialog.stx +155 -0
  13. package/resources/components/Dashboard/Auth/AccessTokens.stx +41 -129
  14. package/resources/components/Dashboard/Ci/CiDashboard.stx +1 -157
  15. package/resources/components/Dashboard/Ci/CiRunHistoryDrawer.stx +127 -0
  16. package/resources/components/Dashboard/Commerce/CommerceCategoryDeleteDialog.stx +10 -8
  17. package/resources/components/Dashboard/Commerce/CommerceCategoryDetailsDialog.stx +22 -17
  18. package/resources/components/Dashboard/Commerce/CommerceCategoryDialog.stx +14 -13
  19. package/resources/components/Dashboard/Commerce/CommerceCouponDeleteDialog.stx +10 -7
  20. package/resources/components/Dashboard/Commerce/CommerceCouponDetailsDialog.stx +25 -19
  21. package/resources/components/Dashboard/Commerce/CommerceCouponDialog.stx +14 -11
  22. package/resources/components/Dashboard/Commerce/CommerceCustomerDeleteDialog.stx +10 -8
  23. package/resources/components/Dashboard/Commerce/CommerceCustomerDetailsDialog.stx +24 -16
  24. package/resources/components/Dashboard/Commerce/CommerceCustomerDialog.stx +14 -13
  25. package/resources/components/Dashboard/Commerce/CommerceGiftCardDeleteDialog.stx +10 -8
  26. package/resources/components/Dashboard/Commerce/CommerceGiftCardDetailsDialog.stx +16 -14
  27. package/resources/components/Dashboard/Commerce/CommerceGiftCardDialog.stx +17 -16
  28. package/resources/components/Dashboard/Commerce/CommerceManufacturerDeleteDialog.stx +14 -16
  29. package/resources/components/Dashboard/Commerce/CommerceManufacturerDialog.stx +17 -16
  30. package/resources/components/Dashboard/Commerce/CommerceOrderDeleteDialog.stx +10 -8
  31. package/resources/components/Dashboard/Commerce/CommerceOrderDetailsDialog.stx +15 -10
  32. package/resources/components/Dashboard/Commerce/CommerceOrderDialog.stx +14 -13
  33. package/resources/components/Dashboard/Commerce/CommercePosCheckoutDialog.stx +30 -25
  34. package/resources/components/Dashboard/Commerce/CommercePosReceiptDialog.stx +27 -20
  35. package/resources/components/Dashboard/Commerce/CommerceProductDeleteDialog.stx +14 -14
  36. package/resources/components/Dashboard/Commerce/CommerceProductDialog.stx +14 -13
  37. package/resources/components/Dashboard/Commerce/CommerceReviewDeleteDialog.stx +10 -18
  38. package/resources/components/Dashboard/Commerce/CommerceReviewEditDialog.stx +17 -16
  39. package/resources/components/Dashboard/Commerce/CommerceTaxDeleteDialog.stx +14 -14
  40. package/resources/components/Dashboard/Commerce/CommerceTaxDialog.stx +17 -16
  41. package/resources/components/Dashboard/Commerce/CommerceTaxesTable.stx +1 -1
  42. package/resources/components/Dashboard/Commerce/CommerceUnitDeleteDialog.stx +14 -17
  43. package/resources/components/Dashboard/Commerce/CommerceUnitDialog.stx +17 -16
  44. package/resources/components/Dashboard/Commerce/CommerceVariantDeleteDialog.stx +10 -8
  45. package/resources/components/Dashboard/Commerce/CommerceVariantDialog.stx +17 -16
  46. package/resources/components/Dashboard/Commerce/Delivery/DeliveryRouteDeleteDialog.stx +11 -15
  47. package/resources/components/Dashboard/Commerce/Delivery/DeliveryRouteDialog.stx +17 -16
  48. package/resources/components/Dashboard/Commerce/Delivery/DigitalDeliveryDeleteDialog.stx +11 -15
  49. package/resources/components/Dashboard/Commerce/Delivery/DigitalDeliveryDialog.stx +17 -16
  50. package/resources/components/Dashboard/Commerce/Delivery/DriverDeleteDialog.stx +11 -15
  51. package/resources/components/Dashboard/Commerce/Delivery/DriverDialog.stx +17 -16
  52. package/resources/components/Dashboard/Commerce/Delivery/LicenseKeyDeleteDialog.stx +11 -15
  53. package/resources/components/Dashboard/Commerce/Delivery/LicenseKeyDialog.stx +17 -16
  54. package/resources/components/Dashboard/Commerce/Delivery/ShippingMethodDeleteDialog.stx +11 -15
  55. package/resources/components/Dashboard/Commerce/Delivery/ShippingMethodDialog.stx +17 -16
  56. package/resources/components/Dashboard/Commerce/Delivery/ShippingRateDeleteDialog.stx +11 -15
  57. package/resources/components/Dashboard/Commerce/Delivery/ShippingRateDialog.stx +17 -16
  58. package/resources/components/Dashboard/Commerce/Delivery/ShippingZoneDeleteDialog.stx +11 -15
  59. package/resources/components/Dashboard/Commerce/Delivery/ShippingZoneDialog.stx +17 -16
  60. package/resources/components/Dashboard/Commerce/PaymentDetailsDialog.stx +16 -15
  61. package/resources/components/Dashboard/Commerce/PaymentRefundDialog.stx +16 -15
  62. package/resources/components/Dashboard/Commerce/PrintDeviceDeleteDialog.stx +10 -11
  63. package/resources/components/Dashboard/Commerce/PrintDeviceDetailsDialog.stx +16 -14
  64. package/resources/components/Dashboard/Commerce/PrintDeviceDialog.stx +17 -16
  65. package/resources/components/Dashboard/Commerce/PrintLogDeleteDialog.stx +10 -7
  66. package/resources/components/Dashboard/Commerce/PrintLogDetailsDialog.stx +13 -10
  67. package/resources/components/Dashboard/Commerce/ProductWaitlistDeleteDialog.stx +10 -18
  68. package/resources/components/Dashboard/Commerce/ProductWaitlistEntryDialog.stx +96 -105
  69. package/resources/components/Dashboard/Commerce/RestaurantWaitlistDeleteDialog.stx +10 -18
  70. package/resources/components/Dashboard/Commerce/RestaurantWaitlistEntryDialog.stx +92 -95
  71. package/resources/components/Dashboard/Content/AuthorEditorDialog.stx +94 -0
  72. package/resources/components/Dashboard/Content/AuthorsDashboard.stx +39 -31
  73. package/resources/components/Dashboard/Content/BlogDashboard.stx +87 -176
  74. package/resources/components/Dashboard/Content/BlogPostEditorDialog.stx +195 -0
  75. package/resources/components/Dashboard/Content/CommentsDashboard.stx +14 -4
  76. package/resources/components/Dashboard/Content/ContentTaxonomyDashboard.stx +40 -55
  77. package/resources/components/Dashboard/Content/CreateFolderDialog.stx +45 -0
  78. package/resources/components/Dashboard/Content/FileDetailsDrawer.stx +31 -0
  79. package/resources/components/Dashboard/Content/FileManagerDashboard.stx +47 -107
  80. package/resources/components/Dashboard/Content/FileUploadDialog.stx +89 -0
  81. package/resources/components/Dashboard/Content/PageEditorDialog.stx +93 -0
  82. package/resources/components/Dashboard/Content/PagesDashboard.stx +36 -26
  83. package/resources/components/Dashboard/Content/PostEditorDialog.stx +176 -0
  84. package/resources/components/Dashboard/Content/PostsDashboard.stx +40 -64
  85. package/resources/components/Dashboard/Content/SeoDashboard.stx +18 -84
  86. package/resources/components/Dashboard/Content/SeoEditorDialog.stx +108 -0
  87. package/resources/components/Dashboard/Content/TaxonomyEditorDialog.stx +106 -0
  88. package/resources/components/Dashboard/CreateRecordModal.stx +72 -83
  89. package/resources/components/Dashboard/Email/InboxMessageList.stx +1 -1
  90. package/resources/components/Dashboard/GlobalSearch.stx +3 -9
  91. package/resources/components/Dashboard/Infrastructure/CloudDetailsDialog.stx +2 -16
  92. package/resources/components/Dashboard/Infrastructure/DnsRecordDialog.stx +4 -16
  93. package/resources/components/Dashboard/Infrastructure/LogDetailsDialog.stx +4 -19
  94. package/resources/components/Dashboard/Infrastructure/MailboxDetailsDialog.stx +6 -16
  95. package/resources/components/Dashboard/Infrastructure/ServerInspectorDialog.stx +105 -0
  96. package/resources/components/Dashboard/Infrastructure/ServersDashboard.stx +5 -59
  97. package/resources/components/Dashboard/Jobs/JobHistory.stx +1 -11
  98. package/resources/components/Dashboard/Library/ComponentsDashboard.stx +11 -60
  99. package/resources/components/Dashboard/Library/FunctionsDashboard.stx +11 -15
  100. package/resources/components/Dashboard/Library/SourceScaffoldDialog.stx +95 -0
  101. package/resources/components/Dashboard/Management/AssignmentDrawer.stx +93 -0
  102. package/resources/components/Dashboard/Management/PermissionsDashboard.stx +47 -129
  103. package/resources/components/Dashboard/Marketing/CampaignDeliveryDialog.stx +5 -8
  104. package/resources/components/Dashboard/Marketing/CampaignDialog.stx +17 -17
  105. package/resources/components/Dashboard/Marketing/MarketingListDialog.stx +17 -17
  106. package/resources/components/Dashboard/Marketing/MarketingListsTable.stx +1 -1
  107. package/resources/components/Dashboard/Marketing/SocialPostDialog.stx +17 -16
  108. package/resources/components/Dashboard/Models/EditRecordModal.stx +81 -0
  109. package/resources/components/Dashboard/Models/ModelRecordActions.stx +30 -0
  110. package/resources/components/Dashboard/Models/ModelRecordsDashboard.stx +42 -94
  111. package/resources/components/Dashboard/Navbar.stx +5 -5
  112. package/resources/components/Dashboard/Notifications/NotificationDeliveryDialog.stx +40 -60
  113. package/resources/components/Dashboard/UI/Button.stx +4 -0
  114. package/resources/components/Dashboard/UI/ConfirmDialog.stx +4 -0
  115. package/resources/components/Dashboard/UI/Drawer.stx +114 -0
  116. package/resources/components/Dashboard/UI/Modal.stx +19 -12
  117. package/resources/components/Docs/Demo/ComboboxDemo.stx +4 -5
  118. package/resources/components/Docs/Demo/DropdownDemo.stx +12 -5
  119. package/resources/components/Docs/Demo/ListboxDemo.stx +14 -6
  120. package/resources/components/Docs/Demo/PopoverDemo.stx +10 -5
  121. package/resources/components/Docs/Demo/RadioGroupDemo.stx +14 -6
  122. package/resources/components/Docs/Demo/StepperDemo.stx +4 -5
  123. package/resources/components/Docs/TeamMember.stx +16 -9
  124. package/resources/components/Forum/ForumReplyForm.stx +7 -7
  125. package/resources/components/Forum/ForumSidebar.stx +10 -6
  126. package/resources/components/Marketing/Faqs.stx +5 -5
  127. package/resources/components/Marketing/Feature.stx +11 -6
  128. package/resources/components/Marketing/Layout.stx +12 -8
  129. package/resources/components/Marketing/Pricing.stx +11 -5
  130. package/resources/components/Marketing/PrimaryFeatures.stx +4 -5
  131. package/resources/components/Marketing/PrimaryFeatures2.stx +6 -5
  132. package/resources/components/Marketing/SecondaryFeatures.stx +10 -5
  133. package/resources/components/Marketing/Testimonials.stx +8 -5
  134. package/resources/views/index.stx +4 -4
  135. package/views/system-tray/index.stx +1 -1
@@ -1,19 +1,26 @@
1
1
  <script>
2
+ interface DropdownMenuItem {
3
+ icon?: string
4
+ label?: string
5
+ variant?: string
6
+ /** A separator rather than a real entry — getMenuSections splits on these. */
7
+ divider?: boolean
8
+ }
9
+
2
10
  interface DropdownDemoProps {
3
- menuItems?: string
11
+ menuItems?: DropdownMenuItem[]
4
12
  isOpen?: boolean
5
13
  }
6
14
 
7
- const { menuItems = [, isOpen = false } = defineProps<DropdownDemoProps>()
8
-
9
- { icon: 'i-hugeicons-pencil-20-solid', label: 'Edit' },
15
+ const { menuItems = [
16
+ { icon: 'i-hugeicons-pencil-20-solid', label: 'Edit' },
10
17
  { icon: 'i-hugeicons-document-duplicate-20-solid', label: 'Duplicate' },
11
18
  { divider: true },
12
19
  { icon: 'i-hugeicons-archive-box-20-solid', label: 'Archive' },
13
20
  { icon: 'i-hugeicons-arrow-path-20-solid', label: 'Move' },
14
21
  { divider: true },
15
22
  { icon: 'i-hugeicons-trash-20-solid', label: 'Delete', variant: 'danger' },
16
- ]
23
+ ], isOpen = false } = defineProps<DropdownDemoProps>()
17
24
  function getMenuSections(items) {
18
25
  const sections = []
19
26
  let currentSection = []
@@ -1,18 +1,26 @@
1
1
  <script>
2
+ interface Person {
3
+ id: number
4
+ name: string
5
+ unavailable: boolean
6
+ }
7
+
2
8
  interface ListboxDemoProps {
3
- people?: string
4
- selectedPerson?: boolean
9
+ people?: Person[]
10
+ selectedPerson?: Person
5
11
  isOpen?: boolean
6
12
  }
7
13
 
8
- const { people = [, selectedPerson = people[0], isOpen = false } = defineProps<ListboxDemoProps>()
9
-
10
- { id: 1, name: 'Chris Breuer', unavailable: false },
14
+ // `selectedPerson` defaults off `people`, which is legal here because
15
+ // destructuring binds left to right — `people` is in scope by the time the
16
+ // default for `selectedPerson` is evaluated.
17
+ const { people = [
18
+ { id: 1, name: 'Chris Breuer', unavailable: false },
11
19
  { id: 2, name: 'Avery Hill', unavailable: false },
12
20
  { id: 3, name: 'Glenn Michael', unavailable: false },
13
21
  { id: 4, name: 'Michael Vincent', unavailable: true },
14
22
  { id: 5, name: 'Blake Ayer', unavailable: false },
15
- ]
23
+ ], selectedPerson = people[0], isOpen = false } = defineProps<ListboxDemoProps>()
16
24
  </script>
17
25
  <div class="max-w-4xl">
18
26
  <DocsPlayground>
@@ -1,12 +1,17 @@
1
1
  <script>
2
2
  interface PopoverDemoProps {
3
- solutions?: string
3
+ solutions?: Array<{
4
+ name: string
5
+ description: string
6
+ href: string
7
+ iconBg: string
8
+ iconStroke: string
9
+ }>
4
10
  isOpen?: boolean
5
11
  }
6
12
 
7
- const { solutions = [, isOpen = false } = defineProps<PopoverDemoProps>()
8
-
9
- {
13
+ const { solutions = [
14
+ {
10
15
  name: 'Insights',
11
16
  description: 'Measure actions your users take',
12
17
  href: '##',
@@ -27,7 +32,7 @@ const { solutions = [, isOpen = false } = defineProps<PopoverDemoProps>()
27
32
  iconBg: '#FFEDD5',
28
33
  iconStroke: '#FB923C',
29
34
  },
30
- ]
35
+ ], isOpen = false } = defineProps<PopoverDemoProps>()
31
36
  </script>
32
37
  <div class="max-w-4xl">
33
38
  <DocsPlayground>
@@ -1,15 +1,23 @@
1
1
  <script>
2
- interface RadioGroupDemoProps {
3
- plans?: string
4
- selected?: boolean
2
+ interface Plan {
3
+ name: string
4
+ ram: string
5
+ cpus: string
6
+ disk: string
5
7
  }
6
8
 
7
- const { plans = [, selected = plans[0] } = defineProps<RadioGroupDemoProps>()
9
+ interface RadioGroupDemoProps {
10
+ plans?: Plan[]
11
+ selected?: Plan
12
+ }
8
13
 
9
- { name: 'Startup', ram: '12GB', cpus: '6 CPUs', disk: '160 GB SSD disk' },
14
+ // `selected` defaults off `plans`; destructuring binds left to right, so `plans`
15
+ // is already in scope when this default is evaluated.
16
+ const { plans = [
17
+ { name: 'Startup', ram: '12GB', cpus: '6 CPUs', disk: '160 GB SSD disk' },
10
18
  { name: 'Business', ram: '16GB', cpus: '8 CPUs', disk: '512 GB SSD disk' },
11
19
  { name: 'Enterprise', ram: '32GB', cpus: '12 CPUs', disk: '1024 GB SSD disk' },
12
- ]
20
+ ], selected = plans[0] } = defineProps<RadioGroupDemoProps>()
13
21
  </script>
14
22
  <div class="max-w-4xl">
15
23
  <DocsPlayground>
@@ -1,15 +1,14 @@
1
1
  <script>
2
2
  interface StepperDemoProps {
3
3
  currentStep?: number
4
- steps?: string
4
+ steps?: Array<{ title: string, description: string, icon: string }>
5
5
  }
6
6
 
7
- const { currentStep = 0, steps = [ } = defineProps<StepperDemoProps>()
8
-
9
- { title: 'Step 1', description: 'First step', icon: 'i-heroicons-check' },
7
+ const { currentStep = 0, steps = [
8
+ { title: 'Step 1', description: 'First step', icon: 'i-heroicons-check' },
10
9
  { title: 'Step 2', description: 'Second step', icon: 'i-heroicons-check' },
11
10
  { title: 'Step 3', description: 'Third step', icon: 'i-heroicons-check' },
12
- ]
11
+ ] } = defineProps<StepperDemoProps>()
13
12
 
14
13
  function getStepContent(step) {
15
14
  switch (step) {
@@ -1,18 +1,25 @@
1
1
  <script>
2
2
  interface TeamMemberProps {
3
- data?: string
3
+ data?: {
4
+ name: string
5
+ avatar: string
6
+ description: string
7
+ github: string
8
+ sponsors: boolean
9
+ functions: string[]
10
+ packages: string[]
11
+ }
4
12
  }
5
13
 
6
- const { data = { } = defineProps<TeamMemberProps>()
7
-
8
- name: '',
14
+ const { data = {
15
+ name: '',
9
16
  avatar: '',
10
17
  description: '',
11
18
  github: '',
12
19
  sponsors: false,
13
20
  functions: [],
14
- packages: []
15
- }
21
+ packages: [],
22
+ } } = defineProps<TeamMemberProps>()
16
23
  </script>
17
24
  <div class="text-center">
18
25
  <img
@@ -45,7 +52,7 @@ name: '',
45
52
  href="https://github.com/sponsors/{{ data.github }}"
46
53
  target="_blank"
47
54
  rel="noopener noreferrer"
48
- title="Sponsor {{ data.name }}"
55
+ x-tooltip="Sponsor {{ data.name }}" title="Sponsor {{ data.name }}"
49
56
  aria-label="Sponsor {{ data.name }}"
50
57
  ></a>
51
58
  @endif
@@ -54,7 +61,7 @@ name: '',
54
61
  @if(data.functions.length > 0 || data.packages.length > 0)
55
62
  <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
63
  @if(data.functions.length > 0)
57
- <div class="ma op50 i-carbon:function-math" title="Functions"></div>
64
+ <div class="ma op50 i-carbon:function-math" x-tooltip="Functions" title="Functions"></div>
58
65
  <div class="flex flex-row flex-wrap gap-2 text-left text-sm">
59
66
  @foreach(data.functions as func)
60
67
  <a href="/{{ func }}" target="_blank">
@@ -65,7 +72,7 @@ name: '',
65
72
  @endif
66
73
 
67
74
  @if(data.packages.length > 0)
68
- <div class="i-carbon-cube ma op50" title="Packages"></div>
75
+ <div class="i-carbon-cube ma op50" x-tooltip="Packages" title="Packages"></div>
69
76
  <div class="flex flex-row flex-wrap gap-2 text-left text-sm">
70
77
  @foreach(data.packages as pkg)
71
78
  <a href="/add-ons">
@@ -18,21 +18,21 @@ function canSubmit(content) {
18
18
  <div class="p-4">
19
19
  <div class="mb-4">
20
20
  <div class="flex gap-2 mb-2">
21
- <button class="px-2 py-1 text-sm hover:bg-gray-100 border rounded" title="Bold" data-action="format" data-format="bold">B</button>
22
- <button class="px-2 py-1 text-sm hover:bg-gray-100 border rounded" title="Italic" data-action="format" data-format="italic">I</button>
23
- <button class="px-2 py-1 text-sm hover:bg-gray-100 border rounded" title="Link" data-action="format" data-format="link">
21
+ <button class="px-2 py-1 text-sm hover:bg-gray-100 border rounded" x-tooltip="Bold" title="Bold" data-action="format" data-format="bold">B</button>
22
+ <button class="px-2 py-1 text-sm hover:bg-gray-100 border rounded" x-tooltip="Italic" title="Italic" data-action="format" data-format="italic">I</button>
23
+ <button class="px-2 py-1 text-sm hover:bg-gray-100 border rounded" x-tooltip="Link" title="Link" data-action="format" data-format="link">
24
24
  <span class="i-hugeicons-link"></span>
25
25
  </button>
26
- <button class="px-2 py-1 text-sm hover:bg-gray-100 border rounded" title="Code" data-action="format" data-format="code">
26
+ <button class="px-2 py-1 text-sm hover:bg-gray-100 border rounded" x-tooltip="Code" title="Code" data-action="format" data-format="code">
27
27
  <span class="i-hugeicons-code"></span>
28
28
  </button>
29
- <button class="px-2 py-1 text-sm hover:bg-gray-100 border rounded" title="Image" data-action="format" data-format="image">
29
+ <button class="px-2 py-1 text-sm hover:bg-gray-100 border rounded" x-tooltip="Image" title="Image" data-action="format" data-format="image">
30
30
  <span class="i-hugeicons-image"></span>
31
31
  </button>
32
- <button class="px-2 py-1 text-sm hover:bg-gray-100 border rounded" title="Quote" data-action="format" data-format="quote">
32
+ <button class="px-2 py-1 text-sm hover:bg-gray-100 border rounded" x-tooltip="Quote" title="Quote" data-action="format" data-format="quote">
33
33
  <span class="i-hugeicons-quote"></span>
34
34
  </button>
35
- <button class="px-2 py-1 text-sm hover:bg-gray-100 border rounded" title="List" data-action="format" data-format="list">
35
+ <button class="px-2 py-1 text-sm hover:bg-gray-100 border rounded" x-tooltip="List" title="List" data-action="format" data-format="list">
36
36
  <span class="i-hugeicons-list"></span>
37
37
  </button>
38
38
  </div>
@@ -1,17 +1,21 @@
1
1
  <script>
2
2
  interface ForumSidebarProps {
3
- stats?: string
3
+ stats?: {
4
+ topics: number
5
+ posts: number
6
+ members: number
7
+ newestMember: string
8
+ }
4
9
  popularTopics?: any[]
5
10
  onlineUsers?: any[]
6
11
  }
7
12
 
8
- const { stats = {, popularTopics = [], onlineUsers = [] } = defineProps<ForumSidebarProps>()
9
-
10
- topics: 0,
13
+ const { stats = {
14
+ topics: 0,
11
15
  posts: 0,
12
16
  members: 0,
13
- newestMember: ''
14
- }
17
+ newestMember: '',
18
+ }, popularTopics = [], onlineUsers = [] } = defineProps<ForumSidebarProps>()
15
19
  </script>
16
20
  <div class="space-y-6">
17
21
  <!-- Search -->
@@ -1,12 +1,12 @@
1
1
  <script>
2
2
  interface FaqsProps {
3
3
  backgroundImage?: string
4
- faqs?: string
4
+ /** One inner array per rendered column. */
5
+ faqs?: Array<Array<{ question: string, answer: string }>>
5
6
  }
6
7
 
7
- const { backgroundImage = '/images/background-faqs.jpg', faqs = [ } = defineProps<FaqsProps>()
8
-
9
- [
8
+ const { backgroundImage = '/images/background-faqs.jpg', faqs = [
9
+ [
10
10
  {
11
11
  question: 'What is the goal of the Stacks framework?',
12
12
  answer: 'The goal of the Stacks framework is to help you create and maintain frontends, backends, and clouds—without having to worry about the boilerplate. It is a rapid development framework, meeting all your full stack needs.',
@@ -48,7 +48,7 @@ const { backgroundImage = '/images/background-faqs.jpg', faqs = [ } = defineProp
48
48
  answer: 'The roadmap for Stacks includes first-party supported stacks like Table, Calendar, Command Palette, Date Picker, File Manager, Image, Video, Audio, Identity, Digital Ownership, Payments, and Governance. More information can be found in the detailed roadmap.',
49
49
  },
50
50
  ],
51
- ]
51
+ ] } = defineProps<FaqsProps>()
52
52
  </script>
53
53
  <section
54
54
  id="faq"
@@ -1,18 +1,23 @@
1
1
  <script>
2
2
  interface FeatureProps {
3
3
  className?: string
4
- feature?: string
4
+ feature?: {
5
+ name: string
6
+ summary: string
7
+ description: string
8
+ image: string
9
+ icon: string
10
+ }
5
11
  isActive?: boolean
6
12
  }
7
13
 
8
- const { className = '', feature = {, isActive = false } = defineProps<FeatureProps>()
9
-
10
- name: '',
14
+ const { className = '', feature = {
15
+ name: '',
11
16
  summary: '',
12
17
  description: '',
13
18
  image: '',
14
- icon: ''
15
- }
19
+ icon: '',
20
+ }, isActive = false } = defineProps<FeatureProps>()
16
21
  </script>
17
22
  <div class="{{ className }} {{ !isActive ? 'opacity-75 hover:opacity-100' : '' }}">
18
23
  <div class="w-9 rounded-lg {{ isActive ? 'bg-blue-600' : 'bg-slate-500' }}">
@@ -1,20 +1,24 @@
1
1
  <script>
2
- interface LayoutProps {
3
- inter?: string
4
- lexend?: string
2
+ interface FontConfig {
3
+ subsets: string[]
4
+ display: string
5
+ variable: string
5
6
  }
6
7
 
7
- const { inter = {, lexend = { } = defineProps<LayoutProps>()
8
+ interface LayoutProps {
9
+ inter?: FontConfig
10
+ lexend?: FontConfig
11
+ }
8
12
 
9
- subsets: ['latin'],
13
+ const { inter = {
14
+ subsets: ['latin'],
10
15
  display: 'swap',
11
16
  variable: '--font-inter',
12
- }
13
-
17
+ }, lexend = {
14
18
  subsets: ['latin'],
15
19
  display: 'swap',
16
20
  variable: '--font-lexend',
17
- }
21
+ } } = defineProps<LayoutProps>()
18
22
  </script>
19
23
  <html
20
24
  lang="en"
@@ -1,11 +1,17 @@
1
1
  <script>
2
2
  interface PricingProps {
3
- plans?: string
3
+ plans?: Array<{
4
+ name: string
5
+ price: string
6
+ description: string
7
+ href: string
8
+ features: string[]
9
+ featured: boolean
10
+ }>
4
11
  }
5
12
 
6
- const { plans = [ } = defineProps<PricingProps>()
7
-
8
- {
13
+ const { plans = [
14
+ {
9
15
  name: 'Hobby (Early Bird Pricing)',
10
16
  price: '$19',
11
17
  description: 'Get a lifetime access with all upgrades included in the future.',
@@ -49,7 +55,7 @@ const { plans = [ } = defineProps<PricingProps>()
49
55
  ],
50
56
  featured: false,
51
57
  },
52
- ]
58
+ ] } = defineProps<PricingProps>()
53
59
  </script>
54
60
  <section
55
61
  id="pricing"
@@ -1,12 +1,11 @@
1
1
  <script>
2
2
  interface PrimaryFeaturesProps {
3
- features?: string
3
+ features?: Array<{ title: string, description: string, image: string }>
4
4
  selectedIndex?: number
5
5
  }
6
6
 
7
- const { features = [, selectedIndex = 0 } = defineProps<PrimaryFeaturesProps>()
8
-
9
- {
7
+ const { features = [
8
+ {
10
9
  title: 'Frontend',
11
10
  description: 'Powered by a progressive UI Engine, building application interfaces has never been easier.',
12
11
  image: 'https://salient.tailwindui.com/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fpayroll.517af4e7.png&w=1920&q=75',
@@ -26,7 +25,7 @@ const { features = [, selectedIndex = 0 } = defineProps<PrimaryFeaturesProps>()
26
25
  description: 'Lorem ipsum dolor sit, amet consectetur adipisicing elit. Tempora in cum blanditiis? Qui omnis unde.',
27
26
  image: 'https://salient.tailwindui.com/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fpayroll.517af4e7.png&w=1920&q=75',
28
27
  },
29
- ]
28
+ ], selectedIndex = 0 } = defineProps<PrimaryFeaturesProps>()
30
29
  </script>
31
30
  <section id="features" aria-label="Features for running your books" class="overflow-hidden relative pb-28 pt-20 sm:py-32 bg-blue-600">
32
31
  <Container class="relative">
@@ -2,14 +2,15 @@
2
2
  interface PrimaryFeatures2Props {
3
3
  backgroundImage?: string
4
4
  screenshotPayroll?: string
5
- features?: string
5
+ features?: Array<{ title: string, description: string, image: string }>
6
6
  selectedIndex?: number
7
7
  tabOrientation?: string
8
8
  }
9
9
 
10
- const { backgroundImage = '/images/screenshots/background-features.jpg', screenshotPayroll = '/images/screenshots/payroll.webp', features = [, selectedIndex = 0, tabOrientation = 'vertical' } = defineProps<PrimaryFeatures2Props>()
11
-
12
- {
10
+ // `features` defaults reference `screenshotPayroll`, which is bound earlier in
11
+ // the same pattern — destructuring initializes left to right, so that is legal.
12
+ const { backgroundImage = '/images/screenshots/background-features.jpg', screenshotPayroll = '/images/screenshots/payroll.webp', features = [
13
+ {
13
14
  title: 'Payroll',
14
15
  description: "Keep track of everyone's salaries and whether or not they've been paid. Direct deposit not supported.",
15
16
  image: screenshotPayroll,
@@ -29,7 +30,7 @@ const { backgroundImage = '/images/screenshots/background-features.jpg', screens
29
30
  description: 'Easily export your data into an Excel spreadsheet where you can do whatever the hell you want with it.',
30
31
  image: '',
31
32
  },
32
- ]
33
+ ], selectedIndex = 0, tabOrientation = 'vertical' } = defineProps<PrimaryFeatures2Props>()
33
34
  </script>
34
35
  <section
35
36
  id="features"
@@ -1,12 +1,17 @@
1
1
  <script>
2
2
  interface SecondaryFeaturesProps {
3
- features?: string
3
+ features?: Array<{
4
+ name: string
5
+ summary: string
6
+ description: string
7
+ image: string
8
+ icon: string
9
+ }>
4
10
  selectedIndex?: number
5
11
  }
6
12
 
7
- const { features = [, selectedIndex = 0 } = defineProps<SecondaryFeaturesProps>()
8
-
9
- {
13
+ const { features = [
14
+ {
10
15
  name: 'Dashboard',
11
16
  summary: 'The UI to your application.',
12
17
  description: 'Whether you are a developer or a client, The Dashboard visualizes your data. Easily extend your admin panel.',
@@ -27,7 +32,7 @@ const { features = [, selectedIndex = 0 } = defineProps<SecondaryFeaturesProps>(
27
32
  image: 'https://salient.tailwindui.com/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofit-loss.2a2f85d5.png&w=1200&q=75',
28
33
  icon: '',
29
34
  },
30
- ]
35
+ ], selectedIndex = 0 } = defineProps<SecondaryFeaturesProps>()
31
36
  </script>
32
37
  <section id="secondary-features" aria-label="Features for simplifying everyday business tasks" class="pb-14 pt-20 sm:pb-20 sm:pt-32 lg:pb-32">
33
38
  <Container>
@@ -1,11 +1,14 @@
1
1
  <script>
2
2
  interface TestimonialsProps {
3
- testimonials?: string
3
+ /** One inner array per rendered column. */
4
+ testimonials?: Array<Array<{
5
+ content: string
6
+ author: { name: string, role: string, image: string }
7
+ }>>
4
8
  }
5
9
 
6
- const { testimonials = [ } = defineProps<TestimonialsProps>()
7
-
8
- [
10
+ const { testimonials = [
11
+ [
9
12
  {
10
13
  content: 'Stacks is a rapid development framework that has helped me create and maintain frontends, backends, and clouds without worrying about the boilerplate.',
11
14
  author: {
@@ -59,7 +62,7 @@ const { testimonials = [ } = defineProps<TestimonialsProps>()
59
62
  },
60
63
  },
61
64
  ],
62
- ]
65
+ ] } = defineProps<TestimonialsProps>()
63
66
  </script>
64
67
  <section
65
68
  id="testimonials"
@@ -2636,22 +2636,22 @@ export default {
2636
2636
  </button>
2637
2637
  <div class="taskbar-divider"></div>
2638
2638
  <div class="quick-launch">
2639
- <a href="https://stacksjs.com/docs" target="_blank" class="quick-launch-icon" title="Documentation">
2639
+ <a href="https://stacksjs.com/docs" target="_blank" class="quick-launch-icon" x-tooltip="Documentation" title="Documentation">
2640
2640
  <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
2641
2641
  <path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20"/>
2642
2642
  </svg>
2643
2643
  </a>
2644
- <a href="https://github.com/stacksjs/stacks" target="_blank" class="quick-launch-icon" title="GitHub Repository">
2644
+ <a href="https://github.com/stacksjs/stacks" target="_blank" class="quick-launch-icon" x-tooltip="GitHub Repository" title="GitHub Repository">
2645
2645
  <svg width="20" height="20" viewBox="0 0 16 16" fill="currentColor">
2646
2646
  <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/>
2647
2647
  </svg>
2648
2648
  </a>
2649
- <a href="https://github.com/sponsors/chrisbbreuer" target="_blank" class="quick-launch-icon" title="Sponsor">
2649
+ <a href="https://github.com/sponsors/chrisbbreuer" target="_blank" class="quick-launch-icon" x-tooltip="Sponsor" title="Sponsor">
2650
2650
  <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
2651
2651
  <path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/>
2652
2652
  </svg>
2653
2653
  </a>
2654
- <a href="https://stacksjs.com/discord" target="_blank" class="quick-launch-icon" title="Discord">
2654
+ <a href="https://stacksjs.com/discord" target="_blank" class="quick-launch-icon" x-tooltip="Discord" title="Discord">
2655
2655
  <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
2656
2656
  <path d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z"/>
2657
2657
  </svg>
@@ -83,7 +83,7 @@ void loadProjects()
83
83
  <p class="text-neutral-500 text-xs dark:text-neutral-400">Project shortcuts</p>
84
84
  </div>
85
85
  </div>
86
- <button type="button" class="flex items-center justify-center h-9 w-9 text-neutral-500 hover:text-neutral-900 dark:hover:text-white bg-white dark:bg-white/5 border border-black/5 rounded-lg dark:border-white/10" @click="run('refresh')" title="Refresh">
86
+ <button type="button" class="flex items-center justify-center h-9 w-9 text-neutral-500 hover:text-neutral-900 dark:hover:text-white bg-white dark:bg-white/5 border border-black/5 rounded-lg dark:border-white/10" @click="run('refresh')" x-tooltip="Refresh" title="Refresh">
87
87
  <span :class="running() === 'refresh' ? 'h-4 w-4 animate-spin i-hugeicons-loading-03' : 'h-4 w-4 i-hugeicons-refresh'"></span>
88
88
  </button>
89
89
  </header>