@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,249 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
interface SidebarModernProps {
|
|
3
|
+
isCollapsed?: boolean
|
|
4
|
+
searchQuery?: string
|
|
5
|
+
expandedSections?: boolean
|
|
6
|
+
currentTeam?: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const { isCollapsed = false, searchQuery = '', expandedSections = {, currentTeam = { } = defineProps<SidebarModernProps>()
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Dashboard Sidebar
|
|
13
|
+
*
|
|
14
|
+
* Uses stx native Sidebar components with Craft integration for
|
|
15
|
+
* true native macOS sidebar rendering when running in Craft.
|
|
16
|
+
* Dynamically loads models from app/Models directory.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
// Import stx Sidebar components from @stacksjs/components
|
|
20
|
+
import { Sidebar, SidebarHeader, SidebarFooter } from '@stacksjs/components'
|
|
21
|
+
|
|
22
|
+
// Load models dynamically using synchronous fs
|
|
23
|
+
const fs = require('node:fs')
|
|
24
|
+
const path = require('node:path')
|
|
25
|
+
|
|
26
|
+
// Get list of models from app/Models directory
|
|
27
|
+
function getModelItems() {
|
|
28
|
+
const modelsDir = path.join(process.cwd(), 'app', 'Models')
|
|
29
|
+
const items = []
|
|
30
|
+
|
|
31
|
+
try {
|
|
32
|
+
const files = fs.readdirSync(modelsDir)
|
|
33
|
+
for (const file of files) {
|
|
34
|
+
if (file.endsWith('.ts') && !file.startsWith('index') && !file.startsWith('_') && !file.startsWith('README')) {
|
|
35
|
+
const modelName = file.replace('.ts', '')
|
|
36
|
+
// Convert PascalCase to kebab-case for URL
|
|
37
|
+
const urlSlug = modelName
|
|
38
|
+
.replace(/([a-z])([A-Z])/g, '$1-$2')
|
|
39
|
+
.toLowerCase()
|
|
40
|
+
items.push({
|
|
41
|
+
id: `model-${urlSlug}`,
|
|
42
|
+
label: modelName,
|
|
43
|
+
icon: 'i-hugeicons-database-01',
|
|
44
|
+
href: `/models/${urlSlug}`,
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
} catch (e) {
|
|
49
|
+
// If directory doesn't exist, return empty array
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Sort alphabetically by label
|
|
53
|
+
items.sort((a, b) => a.label.localeCompare(b.label))
|
|
54
|
+
return items
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const modelItems = getModelItems()
|
|
58
|
+
|
|
59
|
+
// State
|
|
60
|
+
// Section expansion state
|
|
61
|
+
library: true,
|
|
62
|
+
content: false,
|
|
63
|
+
app: false,
|
|
64
|
+
models: false,
|
|
65
|
+
data: false,
|
|
66
|
+
commerce: false,
|
|
67
|
+
marketing: false,
|
|
68
|
+
analytics: false,
|
|
69
|
+
management: false,
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Current team
|
|
73
|
+
id: 1,
|
|
74
|
+
name: 'Stacks',
|
|
75
|
+
type: 'Professional',
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Navigation sections configuration
|
|
79
|
+
const sections = [
|
|
80
|
+
{
|
|
81
|
+
id: 'library',
|
|
82
|
+
label: 'Library',
|
|
83
|
+
icon: 'i-hugeicons-book-02',
|
|
84
|
+
expanded: expandedSections.library,
|
|
85
|
+
items: [
|
|
86
|
+
{ id: 'components', label: 'Components', icon: 'i-hugeicons-puzzle', href: '/components' },
|
|
87
|
+
{ id: 'functions', label: 'Functions', icon: 'i-hugeicons-function-square', href: '/functions' },
|
|
88
|
+
{ id: 'releases', label: 'Releases', icon: 'i-hugeicons-right-to-left-list-number', href: '/releases' },
|
|
89
|
+
{ id: 'packages', label: 'Packages', icon: 'i-hugeicons-package', href: '/packages' },
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: 'content',
|
|
94
|
+
label: 'Content',
|
|
95
|
+
icon: 'i-hugeicons-file-02',
|
|
96
|
+
expanded: expandedSections.content,
|
|
97
|
+
items: [
|
|
98
|
+
{ id: 'content-dashboard', label: 'Dashboard', icon: 'i-hugeicons-dashboard-speed-01', href: '/content/dashboard' },
|
|
99
|
+
{ id: 'files', label: 'Files', icon: 'i-hugeicons-apple-finder', href: '/content/files' },
|
|
100
|
+
{ id: 'pages', label: 'Pages', icon: 'i-hugeicons-file-02', href: '/content/pages' },
|
|
101
|
+
{ id: 'posts', label: 'Posts', icon: 'i-hugeicons-message-edit-02', href: '/content/posts' },
|
|
102
|
+
{ id: 'categories', label: 'Categories', icon: 'i-hugeicons-tags', href: '/content/categories' },
|
|
103
|
+
{ id: 'tags', label: 'Tags', icon: 'i-hugeicons-tag-01', href: '/content/tags' },
|
|
104
|
+
{ id: 'comments', label: 'Comments', icon: 'i-hugeicons-comment-01', href: '/content/comments' },
|
|
105
|
+
{ id: 'authors', label: 'Authors', icon: 'i-hugeicons-user-edit-01', href: '/content/authors' },
|
|
106
|
+
{ id: 'seo', label: 'SEO', icon: 'i-hugeicons-seo', href: '/content/seo' },
|
|
107
|
+
],
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
id: 'models',
|
|
111
|
+
label: 'Models',
|
|
112
|
+
icon: 'i-hugeicons-database',
|
|
113
|
+
expanded: expandedSections.models,
|
|
114
|
+
items: modelItems,
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: 'app',
|
|
118
|
+
label: 'App',
|
|
119
|
+
icon: 'i-hugeicons-code',
|
|
120
|
+
expanded: expandedSections.app,
|
|
121
|
+
items: [
|
|
122
|
+
{ id: 'deployments', label: 'Deployments', icon: 'i-hugeicons-rocket-01', href: '/deployments' },
|
|
123
|
+
{ id: 'requests', label: 'Requests', icon: 'i-hugeicons-api', href: '/requests' },
|
|
124
|
+
{ id: 'realtime', label: 'Realtime', icon: 'i-hugeicons-link-03', href: '/realtime' },
|
|
125
|
+
{ id: 'actions', label: 'Actions', icon: 'i-hugeicons-function-of-x', href: '/actions' },
|
|
126
|
+
{ id: 'commands', label: 'Commands', icon: 'i-hugeicons-command-line', href: '/commands' },
|
|
127
|
+
{ id: 'queue', label: 'Queue', icon: 'i-hugeicons-queue-02', href: '/queue' },
|
|
128
|
+
{ id: 'jobs', label: 'Jobs', icon: 'i-hugeicons-briefcase-01', href: '/jobs' },
|
|
129
|
+
{ id: 'queries', label: 'Queries', icon: 'i-hugeicons-search-area', href: '/queries' },
|
|
130
|
+
{ id: 'errors', label: 'Errors', icon: 'i-hugeicons-bug-01', href: '/monitoring/errors' },
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
id: 'commerce',
|
|
135
|
+
label: 'Commerce',
|
|
136
|
+
icon: 'i-hugeicons-shopping-cart-02',
|
|
137
|
+
expanded: expandedSections.commerce,
|
|
138
|
+
items: [
|
|
139
|
+
{ id: 'commerce-dashboard', label: 'Dashboard', icon: 'i-hugeicons-dashboard-speed-01', href: '/commerce/dashboard' },
|
|
140
|
+
{ id: 'pos', label: 'POS', icon: 'i-hugeicons-shopping-cart-02', href: '/commerce/pos' },
|
|
141
|
+
{ id: 'customers', label: 'Customers', icon: 'i-hugeicons-user-account', href: '/commerce/customers' },
|
|
142
|
+
{ id: 'orders', label: 'Orders', icon: 'i-hugeicons-search-list-01', href: '/commerce/orders' },
|
|
143
|
+
{ id: 'products', label: 'Products', icon: 'i-hugeicons-package', href: '/commerce/products' },
|
|
144
|
+
{ id: 'payments', label: 'Payments', icon: 'i-hugeicons-invoice-01', href: '/commerce/payments' },
|
|
145
|
+
{ id: 'delivery', label: 'Delivery', icon: 'i-hugeicons-shipping-truck-01', href: '/commerce/delivery' },
|
|
146
|
+
],
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
id: 'data',
|
|
150
|
+
label: 'Data',
|
|
151
|
+
icon: 'i-hugeicons-database',
|
|
152
|
+
expanded: expandedSections.data,
|
|
153
|
+
items: [
|
|
154
|
+
{ id: 'data-dashboard', label: 'Dashboard', icon: 'i-hugeicons-dashboard-speed-01', href: '/data/dashboard' },
|
|
155
|
+
{ id: 'activity', label: 'Activity', icon: 'i-hugeicons-activity-01', href: '/data/activity' },
|
|
156
|
+
{ id: 'users', label: 'Users', icon: 'i-hugeicons-user-group', href: '/data/users' },
|
|
157
|
+
{ id: 'teams', label: 'Teams', icon: 'i-hugeicons-user-multiple', href: '/data/teams' },
|
|
158
|
+
{ id: 'subscribers', label: 'Subscribers', icon: 'i-hugeicons-mail-01', href: '/data/subscribers' },
|
|
159
|
+
],
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
id: 'marketing',
|
|
163
|
+
label: 'Marketing',
|
|
164
|
+
icon: 'i-hugeicons-megaphone-01',
|
|
165
|
+
expanded: expandedSections.marketing,
|
|
166
|
+
items: [
|
|
167
|
+
{ id: 'lists', label: 'Lists', icon: 'i-hugeicons-list-setting', href: '/marketing/lists' },
|
|
168
|
+
{ id: 'social-posts', label: 'Social Posts', icon: 'i-hugeicons-time-schedule', href: '/marketing/social-posts' },
|
|
169
|
+
{ id: 'campaigns', label: 'Campaigns', icon: 'i-hugeicons-rocket-01', href: '/marketing/campaigns' },
|
|
170
|
+
{ id: 'reviews', label: 'Reviews', icon: 'i-hugeicons-star', href: '/marketing/reviews' },
|
|
171
|
+
],
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
id: 'analytics',
|
|
175
|
+
label: 'Analytics',
|
|
176
|
+
icon: 'i-hugeicons-chart-line-data-01',
|
|
177
|
+
expanded: expandedSections.analytics,
|
|
178
|
+
items: [
|
|
179
|
+
{ id: 'web', label: 'Web', icon: 'i-hugeicons-global', href: '/analytics/web' },
|
|
180
|
+
{ id: 'blog', label: 'Blog', icon: 'i-hugeicons-edit-02', href: '/analytics/blog' },
|
|
181
|
+
{ id: 'commerce-analytics', label: 'Commerce', icon: 'i-hugeicons-shopping-bag-01', href: '/analytics/commerce' },
|
|
182
|
+
{ id: 'events', label: 'Events', icon: 'i-hugeicons-cursor-click-02', href: '/analytics/events' },
|
|
183
|
+
],
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
id: 'management',
|
|
187
|
+
label: 'Management',
|
|
188
|
+
icon: 'i-hugeicons-settings-02',
|
|
189
|
+
expanded: expandedSections.management,
|
|
190
|
+
items: [
|
|
191
|
+
{ id: 'cloud', label: 'Cloud', icon: 'i-hugeicons-cloud', href: '/cloud' },
|
|
192
|
+
{ id: 'dns', label: 'DNS', icon: 'i-hugeicons-internet', href: '/dns' },
|
|
193
|
+
{ id: 'permissions', label: 'Permissions', icon: 'i-hugeicons-shield-01', href: '/management/permissions' },
|
|
194
|
+
{ id: 'mailboxes', label: 'Mailboxes', icon: 'i-hugeicons-mailbox-01', href: '/mailboxes' },
|
|
195
|
+
{ id: 'logs', label: 'Logs', icon: 'i-hugeicons-file-search', href: '/logs' },
|
|
196
|
+
{ id: 'health', label: 'Health', icon: 'i-hugeicons-pulse-02', href: '/health' },
|
|
197
|
+
],
|
|
198
|
+
},
|
|
199
|
+
]
|
|
200
|
+
|
|
201
|
+
// Quick actions for footer
|
|
202
|
+
const footerActions = [
|
|
203
|
+
{ label: 'AI Buddy', icon: 'i-hugeicons-ai-chat-02', href: '/buddy' },
|
|
204
|
+
]
|
|
205
|
+
|
|
206
|
+
// Handlers
|
|
207
|
+
function handleCollapse(collapsed) {
|
|
208
|
+
isCollapsed = collapsed
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
function handleSectionToggle(sectionId) {
|
|
212
|
+
expandedSections[sectionId] = !expandedSections[sectionId]
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
function handleSearch(value) {
|
|
216
|
+
searchQuery = value
|
|
217
|
+
}
|
|
218
|
+
</script>
|
|
219
|
+
<Sidebar
|
|
220
|
+
:sections="sections"
|
|
221
|
+
:collapsed="isCollapsed"
|
|
222
|
+
:collapsible="true"
|
|
223
|
+
:width="240"
|
|
224
|
+
:minWidth="64"
|
|
225
|
+
variant="tahoe"
|
|
226
|
+
position="left"
|
|
227
|
+
:bordered="true"
|
|
228
|
+
@collapse="handleCollapse"
|
|
229
|
+
@sectionToggle="handleSectionToggle"
|
|
230
|
+
>
|
|
231
|
+
<template #header>
|
|
232
|
+
<SidebarHeader
|
|
233
|
+
:title="currentTeam.name"
|
|
234
|
+
:subtitle="currentTeam.type"
|
|
235
|
+
:showSearch="true"
|
|
236
|
+
:searchValue="searchQuery"
|
|
237
|
+
:collapsed="isCollapsed"
|
|
238
|
+
@search="handleSearch"
|
|
239
|
+
/>
|
|
240
|
+
<template #footer>
|
|
241
|
+
<SidebarFooter
|
|
242
|
+
:showSettings="true"
|
|
243
|
+
:showThemeToggle="true"
|
|
244
|
+
settingsHref="/settings"
|
|
245
|
+
:collapsed="isCollapsed"
|
|
246
|
+
:actions="footerActions"
|
|
247
|
+
/>
|
|
248
|
+
</template>
|
|
249
|
+
</Sidebar>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
interface LoadingCardProps {
|
|
3
|
+
width?: number
|
|
4
|
+
height?: number
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
const { width = 16, height = 4 } = defineProps<LoadingCardProps>()
|
|
8
|
+
</script>
|
|
9
|
+
<div class="mx-auto w-full rounded-md shadow">
|
|
10
|
+
<div class="flex space-x-4 animate-pulse">
|
|
11
|
+
<div class="flex-1 space-y-6">
|
|
12
|
+
<div class="bg-slate-300 rounded-md" style="height: {{ height }}rem"></div>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
interface LoadingDetailsProps {
|
|
3
|
+
width?: number
|
|
4
|
+
height?: number
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
const { width = 16, height = 4 } = defineProps<LoadingDetailsProps>()
|
|
8
|
+
</script>
|
|
9
|
+
<div class="mx-auto p-4 w-full rounded-md" style="height: {{ height }}rem">
|
|
10
|
+
<div class="space-y-12 animate-pulse">
|
|
11
|
+
<!-- Title -->
|
|
12
|
+
<div class="h-4 w-3/4 bg-slate-300 rounded-md"></div>
|
|
13
|
+
|
|
14
|
+
<!-- Description -->
|
|
15
|
+
<div class="space-y-2">
|
|
16
|
+
<div class="h-3 w-full bg-slate-300 rounded-md"></div>
|
|
17
|
+
<div class="h-3 w-5/6 bg-slate-300 rounded-md"></div>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<!-- Buttons -->
|
|
21
|
+
<div class="flex space-x-4">
|
|
22
|
+
<div class="h-8 w-1/4 bg-slate-300 rounded-md"></div>
|
|
23
|
+
<div class="h-8 w-1/4 bg-slate-300 rounded-md"></div>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Custom Dashboard Table Component
|
|
3
|
+
|
|
4
|
+
A reusable table component for dashboard data display.
|
|
5
|
+
|
|
6
|
+
Usage:
|
|
7
|
+
<Table
|
|
8
|
+
:columns="[{ key: 'name', label: 'Name' }, { key: 'status', label: 'Status' }]"
|
|
9
|
+
:data="[{ name: 'Item 1', status: 'active' }]"
|
|
10
|
+
/>
|
|
11
|
+
-->
|
|
12
|
+
|
|
13
|
+
<script>
|
|
14
|
+
interface TableProps {
|
|
15
|
+
columns: any[]
|
|
16
|
+
data: any[]
|
|
17
|
+
striped?: boolean
|
|
18
|
+
hoverable?: boolean
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const { columns, data, striped, hoverable } = defineProps<TableProps>()
|
|
22
|
+
</script>
|
|
23
|
+
<div class="dashboard-table-container">
|
|
24
|
+
<table class="dashboard-table {{ striped ? 'striped' : '' }} {{ hoverable ? 'hoverable' : '' }}">
|
|
25
|
+
<thead>
|
|
26
|
+
<tr>
|
|
27
|
+
@foreach (columns as column)
|
|
28
|
+
<th class="{{ column.align ? 'text-' + column.align : '' }}">
|
|
29
|
+
{{ column.label }}
|
|
30
|
+
</th>
|
|
31
|
+
@endforeach
|
|
32
|
+
</tr>
|
|
33
|
+
</thead>
|
|
34
|
+
<tbody>
|
|
35
|
+
@foreach (data as row)
|
|
36
|
+
<tr>
|
|
37
|
+
@foreach (columns as column)
|
|
38
|
+
<td class="{{ column.align ? 'text-' + column.align : '' }}">
|
|
39
|
+
@if (column.render)
|
|
40
|
+
{{ column.render(row[column.key], row) }}
|
|
41
|
+
@else
|
|
42
|
+
{{ row[column.key] }}
|
|
43
|
+
@endif
|
|
44
|
+
</td>
|
|
45
|
+
@endforeach
|
|
46
|
+
</tr>
|
|
47
|
+
@endforeach
|
|
48
|
+
</tbody>
|
|
49
|
+
</table>
|
|
50
|
+
</div>
|
|
51
|
+
<style>
|
|
52
|
+
.dashboard-table-container {
|
|
53
|
+
overflow-x: auto;
|
|
54
|
+
}
|
|
55
|
+
.dashboard-table {
|
|
56
|
+
width: 100%;
|
|
57
|
+
border-collapse: collapse;
|
|
58
|
+
}
|
|
59
|
+
.dashboard-table th,
|
|
60
|
+
.dashboard-table td {
|
|
61
|
+
padding: 0.75rem 1rem;
|
|
62
|
+
text-align: left;
|
|
63
|
+
border-bottom: 1px solid var(--color-border);
|
|
64
|
+
}
|
|
65
|
+
.dashboard-table th {
|
|
66
|
+
font-size: 0.75rem;
|
|
67
|
+
font-weight: 600;
|
|
68
|
+
text-transform: uppercase;
|
|
69
|
+
letter-spacing: 0.05em;
|
|
70
|
+
color: var(--color-text-muted);
|
|
71
|
+
background: var(--color-bg-subtle);
|
|
72
|
+
}
|
|
73
|
+
.dashboard-table.striped tbody tr:nth-child(even) {
|
|
74
|
+
background: var(--color-bg-subtle);
|
|
75
|
+
}
|
|
76
|
+
.dashboard-table.hoverable tbody tr:hover {
|
|
77
|
+
background: var(--color-bg-hover);
|
|
78
|
+
}
|
|
79
|
+
.text-left { text-align: left; }
|
|
80
|
+
.text-center { text-align: center; }
|
|
81
|
+
.text-right { text-align: right; }
|
|
82
|
+
</style>
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
interface TerminalContainerProps {
|
|
3
|
+
live?: boolean
|
|
4
|
+
path?: string
|
|
5
|
+
branch?: string
|
|
6
|
+
version?: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const { live = false, path = '~/Code/stacks', branch = 'main', version = 'v1.2.3' } = defineProps<TerminalContainerProps>()
|
|
10
|
+
|
|
11
|
+
const files = [
|
|
12
|
+
'CHANGELOG.md', 'LICENSE.md', 'README.md', 'app',
|
|
13
|
+
'bootstrap', 'buddy', 'cloud', 'commitlint.config.ts',
|
|
14
|
+
'bun.lock', 'bunfig.toml', 'config', 'database',
|
|
15
|
+
'docs', 'eslint.config.ts', 'node_modules', 'package.json',
|
|
16
|
+
'pantry.yaml', 'public', 'resources', 'routes',
|
|
17
|
+
'storage', 'tests', 'tsconfig.json', '~'
|
|
18
|
+
]
|
|
19
|
+
</script>
|
|
20
|
+
<div class="font-mono">
|
|
21
|
+
<div class="flex flex-col h-full w-full text-[#C9D1D9] bg-[#0D1117] rounded-lg shadow">
|
|
22
|
+
<!-- Terminal Header -->
|
|
23
|
+
<header class="flex items-center justify-between px-3 py-2 bg-[#161B22] rounded-t-lg">
|
|
24
|
+
<div class="flex gap-2 items-center">
|
|
25
|
+
<div class="h-3 w-3 bg-[#FF5F56] rounded-full"></div>
|
|
26
|
+
<div class="h-3 w-3 bg-[#FFBD2E] rounded-full"></div>
|
|
27
|
+
<div class="h-3 w-3 bg-[#27C93F] rounded-full"></div>
|
|
28
|
+
</div>
|
|
29
|
+
<div class="absolute left-1/2 text-[#8B949E] text-sm -translate-x-1/2">
|
|
30
|
+
{{ path }}
|
|
31
|
+
</div>
|
|
32
|
+
</header>
|
|
33
|
+
|
|
34
|
+
<!-- Terminal Content -->
|
|
35
|
+
<div class="p-4 leading-6 text-sm">
|
|
36
|
+
<div class="flex gap-2 items-center text-[#C9D1D9]">
|
|
37
|
+
<span class="text-[#8B949E]">{{ path }}</span>
|
|
38
|
+
<span>on</span>
|
|
39
|
+
<span class="flex gap-1 items-center">
|
|
40
|
+
<span class="text-[#7EE787]">{{ branch }}</span>
|
|
41
|
+
</span>
|
|
42
|
+
<span>via</span>
|
|
43
|
+
<span class="flex gap-1 items-center">
|
|
44
|
+
<span class="text-[#8B949E]">🐰</span>
|
|
45
|
+
<span class="text-[#FF7B72]">{{ version }}</span>
|
|
46
|
+
</span>
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
<div class="flex gap-2 items-center mt-1 text-[#C9D1D9]">
|
|
50
|
+
<span class="text-[#8B949E]">❯</span>
|
|
51
|
+
<span>ls</span>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
<div class="grid gap-4 grid-cols-4 mt-2">
|
|
55
|
+
@foreach(files as file)
|
|
56
|
+
<div class="text-[#C9D1D9]">{{ file }}</div>
|
|
57
|
+
@endforeach
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<div class="flex gap-2 items-center mt-4 text-[#C9D1D9]">
|
|
61
|
+
<span class="text-[#8B949E]">{{ path }}</span>
|
|
62
|
+
<span>on</span>
|
|
63
|
+
<span class="flex gap-1 items-center">
|
|
64
|
+
<span class="text-[#7EE787]">{{ branch }}</span>
|
|
65
|
+
</span>
|
|
66
|
+
<span>via</span>
|
|
67
|
+
<span class="flex gap-1 items-center">
|
|
68
|
+
<span class="text-[#8B949E]">🐰</span>
|
|
69
|
+
<span class="text-[#FF7B72]">{{ version }}</span>
|
|
70
|
+
</span>
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
<div class="flex gap-2 items-center mt-1 text-[#C9D1D9]">
|
|
74
|
+
<span class="text-[#8B949E]">❯</span>
|
|
75
|
+
<input
|
|
76
|
+
type="text"
|
|
77
|
+
class="flex-1 bg-transparent border-0 outline-0 active:outline-0 active:ring-0 focus:outline-0 focus:ring-0"
|
|
78
|
+
style="-webkit-tap-highlight-color: transparent;"
|
|
79
|
+
>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
<style>
|
|
85
|
+
@keyframes blink {
|
|
86
|
+
0%, 100% { opacity: 1; }
|
|
87
|
+
50% { opacity: 0; }
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.cli-cursor {
|
|
91
|
+
opacity: 1;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.cursor-blink {
|
|
95
|
+
animation: blink 1s step-end infinite;
|
|
96
|
+
}
|
|
97
|
+
</style>
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
interface TooltipProps {
|
|
3
|
+
label?: string
|
|
4
|
+
position?: string
|
|
5
|
+
dark?: boolean
|
|
6
|
+
alignment?: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// `label` (was `text`) holds the tooltip body. The original `text` prop
|
|
10
|
+
// collided with the auto-imported text() validator from @stacksjs/validation,
|
|
11
|
+
// which leaked the validator function source into the rendered tooltip.
|
|
12
|
+
const { label = '', position = 'bottom', dark = false, alignment = 'center' } = defineProps<TooltipProps>()
|
|
13
|
+
</script>
|
|
14
|
+
<div
|
|
15
|
+
class="tooltip-container"
|
|
16
|
+
data-tooltip
|
|
17
|
+
>
|
|
18
|
+
<slot />
|
|
19
|
+
|
|
20
|
+
<span
|
|
21
|
+
class="tooltip {{ position }} {{ dark ? 'dark-tooltip' : '' }} align-{{ alignment }}"
|
|
22
|
+
data-tooltip-text
|
|
23
|
+
>
|
|
24
|
+
{{ label }}
|
|
25
|
+
</span>
|
|
26
|
+
</div>
|
|
27
|
+
<style>
|
|
28
|
+
.tooltip-container {
|
|
29
|
+
position: relative;
|
|
30
|
+
display: inline-flex;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.tooltip {
|
|
34
|
+
visibility: hidden;
|
|
35
|
+
position: absolute;
|
|
36
|
+
background-color: rgba(0, 0, 0, 0.8);
|
|
37
|
+
color: white;
|
|
38
|
+
text-align: center;
|
|
39
|
+
padding: 4px 8px;
|
|
40
|
+
border-radius: 4px;
|
|
41
|
+
font-size: 12px;
|
|
42
|
+
white-space: nowrap;
|
|
43
|
+
z-index: 100;
|
|
44
|
+
opacity: 0;
|
|
45
|
+
transition: opacity 0.2s, visibility 0.2s;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.tooltip-container:hover .tooltip {
|
|
49
|
+
visibility: visible;
|
|
50
|
+
opacity: 1;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* Position variations */
|
|
54
|
+
.tooltip.bottom {
|
|
55
|
+
bottom: -30px;
|
|
56
|
+
left: 50%;
|
|
57
|
+
transform: translateX(-50%);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.tooltip.bottom.align-left {
|
|
61
|
+
left: 0;
|
|
62
|
+
transform: none;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.tooltip.bottom.align-right {
|
|
66
|
+
left: auto;
|
|
67
|
+
right: 0;
|
|
68
|
+
transform: none;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.tooltip.top {
|
|
72
|
+
top: -30px;
|
|
73
|
+
left: 50%;
|
|
74
|
+
transform: translateX(-50%);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.tooltip.top.align-left {
|
|
78
|
+
left: 0;
|
|
79
|
+
transform: none;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.tooltip.top.align-right {
|
|
83
|
+
left: auto;
|
|
84
|
+
right: 0;
|
|
85
|
+
transform: none;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.tooltip.left {
|
|
89
|
+
left: -8px;
|
|
90
|
+
top: 50%;
|
|
91
|
+
transform: translate(-100%, -50%);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.tooltip.right {
|
|
95
|
+
right: -8px;
|
|
96
|
+
top: 50%;
|
|
97
|
+
transform: translate(100%, -50%);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* Arrows for each position */
|
|
101
|
+
.tooltip.bottom::after {
|
|
102
|
+
content: "";
|
|
103
|
+
position: absolute;
|
|
104
|
+
bottom: 100%;
|
|
105
|
+
left: 50%;
|
|
106
|
+
margin-left: -5px;
|
|
107
|
+
border-width: 5px;
|
|
108
|
+
border-style: solid;
|
|
109
|
+
border-color: transparent transparent rgba(0, 0, 0, 0.8) transparent;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.tooltip.top::after {
|
|
113
|
+
content: "";
|
|
114
|
+
position: absolute;
|
|
115
|
+
top: 100%;
|
|
116
|
+
left: 50%;
|
|
117
|
+
margin-left: -5px;
|
|
118
|
+
border-width: 5px;
|
|
119
|
+
border-style: solid;
|
|
120
|
+
border-color: rgba(0, 0, 0, 0.8) transparent transparent transparent;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.tooltip.left::after {
|
|
124
|
+
content: "";
|
|
125
|
+
position: absolute;
|
|
126
|
+
top: 50%;
|
|
127
|
+
left: 100%;
|
|
128
|
+
margin-top: -5px;
|
|
129
|
+
border-width: 5px;
|
|
130
|
+
border-style: solid;
|
|
131
|
+
border-color: transparent transparent transparent rgba(0, 0, 0, 0.8);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.tooltip.right::after {
|
|
135
|
+
content: "";
|
|
136
|
+
position: absolute;
|
|
137
|
+
top: 50%;
|
|
138
|
+
right: 100%;
|
|
139
|
+
margin-top: -5px;
|
|
140
|
+
border-width: 5px;
|
|
141
|
+
border-style: solid;
|
|
142
|
+
border-color: transparent rgba(0, 0, 0, 0.8) transparent transparent;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* Dark mode adjustments */
|
|
146
|
+
.dark-tooltip {
|
|
147
|
+
background-color: rgba(255, 255, 255, 0.8);
|
|
148
|
+
color: #1e293b;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.dark-tooltip.bottom::after {
|
|
152
|
+
border-bottom-color: rgba(255, 255, 255, 0.8);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.dark-tooltip.top::after {
|
|
156
|
+
border-top-color: rgba(255, 255, 255, 0.8);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.dark-tooltip.left::after {
|
|
160
|
+
border-left-color: rgba(255, 255, 255, 0.8);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.dark-tooltip.right::after {
|
|
164
|
+
border-right-color: rgba(255, 255, 255, 0.8);
|
|
165
|
+
}
|
|
166
|
+
</style>
|