qdadm 0.55.0 → 0.57.0

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 (41) hide show
  1. package/package.json +2 -2
  2. package/src/components/InfoBanner.vue +96 -0
  3. package/src/components/display/BannerZone.vue +61 -0
  4. package/src/components/index.js +3 -0
  5. package/src/components/layout/AppLayout.vue +463 -143
  6. package/src/components/layout/BaseLayout.vue +2 -2
  7. package/src/components/layout/SidebarBox.vue +91 -0
  8. package/src/composables/index.js +1 -0
  9. package/src/composables/useInfoBanner.js +167 -0
  10. package/src/modules/debug/components/DebugBar.vue +48 -31
  11. package/src/modules/debug/styles.scss +81 -0
  12. package/src/styles/_alerts.scss +75 -0
  13. package/src/styles/_code.scss +35 -0
  14. package/src/styles/_dialogs.scss +19 -0
  15. package/src/styles/_filter-bar.scss +55 -0
  16. package/src/styles/_forms.scss +357 -0
  17. package/src/styles/_helpers.scss +153 -0
  18. package/src/styles/_lists.scss +144 -0
  19. package/src/styles/_main.scss +295 -0
  20. package/src/styles/_markdown.scss +88 -0
  21. package/src/styles/_responsive.scss +15 -11
  22. package/src/styles/_show-pages.scss +80 -0
  23. package/src/styles/_sidebar.scss +254 -0
  24. package/src/styles/_states.scss +74 -0
  25. package/src/styles/_stats.scss +47 -0
  26. package/src/styles/_variables.scss +224 -0
  27. package/src/styles/index.scss +27 -10
  28. package/src/styles/theme/_components.scss +331 -0
  29. package/src/styles/theme/{index.css → _index.scss} +3 -3
  30. package/src/styles/theme/_tokens.scss +147 -0
  31. package/src/styles/theme/_utilities.scss +175 -0
  32. package/src/styles/_alerts.css +0 -48
  33. package/src/styles/_breakpoints.scss +0 -65
  34. package/src/styles/_code.css +0 -33
  35. package/src/styles/_dialogs.css +0 -17
  36. package/src/styles/_markdown.css +0 -82
  37. package/src/styles/_show-pages.css +0 -84
  38. package/src/styles/main.css +0 -949
  39. package/src/styles/theme/components.css +0 -329
  40. package/src/styles/theme/tokens.css +0 -125
  41. package/src/styles/theme/utilities.css +0 -172
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qdadm",
3
- "version": "0.55.0",
3
+ "version": "0.57.0",
4
4
  "description": "Vue 3 framework for admin dashboards with PrimeVue",
5
5
  "author": "quazardous",
6
6
  "license": "MIT",
@@ -29,7 +29,7 @@
29
29
  "./utils": "./src/utils/index.js",
30
30
  "./modules/debug": "./src/modules/debug/index.js",
31
31
  "./styles": "./src/styles/index.scss",
32
- "./styles/breakpoints": "./src/styles/_breakpoints.scss",
32
+ "./styles/variables": "./src/styles/_variables.scss",
33
33
  "./gen": "./src/gen/index.js",
34
34
  "./gen/vite-plugin": "./src/gen/vite-plugin.js"
35
35
  },
@@ -0,0 +1,96 @@
1
+ <script setup>
2
+ /**
3
+ * InfoBanner - Consistent message banner component
4
+ *
5
+ * Wraps PrimeVue Message with standardized styling and icon support.
6
+ *
7
+ * @example
8
+ * // Simple usage
9
+ * <InfoBanner severity="warn">
10
+ * Settings will be lost on refresh.
11
+ * </InfoBanner>
12
+ *
13
+ * // With custom icon
14
+ * <InfoBanner severity="success" icon="pi-check-circle">
15
+ * Operation completed successfully.
16
+ * </InfoBanner>
17
+ *
18
+ * // Without icon
19
+ * <InfoBanner severity="info" :icon="false">
20
+ * Just some information.
21
+ * </InfoBanner>
22
+ */
23
+ import Message from 'primevue/message'
24
+ import { computed } from 'vue'
25
+
26
+ const props = defineProps({
27
+ // Severity level: info, success, warn, error, secondary, contrast
28
+ severity: {
29
+ type: String,
30
+ default: 'info',
31
+ validator: (v) => ['info', 'success', 'warn', 'error', 'secondary', 'contrast'].includes(v)
32
+ },
33
+ // Custom icon class (e.g., 'pi-user'). Set to false to hide icon.
34
+ icon: {
35
+ type: [String, Boolean],
36
+ default: null
37
+ },
38
+ // Allow closing the banner
39
+ closable: {
40
+ type: Boolean,
41
+ default: false
42
+ }
43
+ })
44
+
45
+ // Default icons per severity
46
+ const defaultIcons = {
47
+ info: 'pi-info-circle',
48
+ success: 'pi-check-circle',
49
+ warn: 'pi-exclamation-triangle',
50
+ error: 'pi-times-circle',
51
+ secondary: 'pi-info-circle',
52
+ contrast: 'pi-info-circle'
53
+ }
54
+
55
+ const iconClass = computed(() => {
56
+ if (props.icon === false) return null
57
+ if (props.icon) return `pi ${props.icon}`
58
+ return `pi ${defaultIcons[props.severity]}`
59
+ })
60
+ </script>
61
+
62
+ <template>
63
+ <Message
64
+ :severity="severity"
65
+ :closable="closable"
66
+ class="info-banner"
67
+ >
68
+ <div class="info-banner-content">
69
+ <i v-if="iconClass" :class="iconClass" class="info-banner-icon"></i>
70
+ <span class="info-banner-text">
71
+ <slot />
72
+ </span>
73
+ </div>
74
+ </Message>
75
+ </template>
76
+
77
+ <style scoped>
78
+ .info-banner-content {
79
+ display: flex;
80
+ align-items: center;
81
+ gap: 0.625rem;
82
+ }
83
+
84
+ .info-banner-icon {
85
+ font-size: 1.125rem;
86
+ flex-shrink: 0;
87
+ }
88
+
89
+ .info-banner-text {
90
+ flex: 1;
91
+ }
92
+
93
+ .info-banner-text :deep(strong) {
94
+ font-weight: 600;
95
+ }
96
+ </style>
@@ -0,0 +1,61 @@
1
+ <script setup>
2
+ /**
3
+ * BannerZone - Renders programmatic banners from useInfoBanner
4
+ *
5
+ * Place this component where you want banners to appear (typically
6
+ * at the top of page content).
7
+ *
8
+ * @example
9
+ * <template>
10
+ * <div class="page-content">
11
+ * <BannerZone />
12
+ * <!-- rest of page content -->
13
+ * </div>
14
+ * </template>
15
+ */
16
+ import { useInfoBanner } from '../../composables/useInfoBanner.js'
17
+ import InfoBanner from '../InfoBanner.vue'
18
+
19
+ const { banners, hideBanner } = useInfoBanner()
20
+ </script>
21
+
22
+ <template>
23
+ <TransitionGroup name="banner" tag="div" class="banner-zone">
24
+ <InfoBanner
25
+ v-for="banner in banners"
26
+ :key="banner.id"
27
+ :severity="banner.severity"
28
+ :icon="banner.icon"
29
+ :closable="banner.closable"
30
+ @close="hideBanner(banner.id)"
31
+ >
32
+ <span v-html="banner.message"></span>
33
+ </InfoBanner>
34
+ </TransitionGroup>
35
+ </template>
36
+
37
+ <style scoped>
38
+ .banner-zone {
39
+ position: relative;
40
+ }
41
+
42
+ /* Transition animations */
43
+ .banner-enter-active,
44
+ .banner-leave-active {
45
+ transition: all 0.3s ease;
46
+ }
47
+
48
+ .banner-enter-from {
49
+ opacity: 0;
50
+ transform: translateY(-10px);
51
+ }
52
+
53
+ .banner-leave-to {
54
+ opacity: 0;
55
+ transform: translateY(-10px);
56
+ }
57
+
58
+ .banner-move {
59
+ transition: transform 0.3s ease;
60
+ }
61
+ </style>
@@ -10,6 +10,7 @@ export { default as PageHeader } from './layout/PageHeader.vue'
10
10
  export { default as Breadcrumb } from './layout/Breadcrumb.vue'
11
11
  export { default as PageNav } from './layout/PageNav.vue'
12
12
  export { default as Zone } from './layout/Zone.vue'
13
+ export { default as SidebarBox } from './layout/SidebarBox.vue'
13
14
 
14
15
  // Default zone components
15
16
  export { default as DefaultHeader } from './layout/defaults/DefaultHeader.vue'
@@ -59,6 +60,8 @@ export { default as EmptyState } from './display/EmptyState.vue'
59
60
  export { default as IntensityBar } from './display/IntensityBar.vue'
60
61
  export { default as BoolCell } from './BoolCell.vue'
61
62
  export { default as SeverityTag } from './SeverityTag.vue'
63
+ export { default as InfoBanner } from './InfoBanner.vue'
64
+ export { default as BannerZone } from './display/BannerZone.vue'
62
65
 
63
66
  // Pages
64
67
  export { default as LoginPage } from './pages/LoginPage.vue'