@sondor-technology/sondor-components 1.0.0-1165-initial-setup.11 → 1.0.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 (168) hide show
  1. package/package.json +2 -3
  2. package/src/components/alert/alert.ts +100 -100
  3. package/src/components/badge/badge.ts +96 -96
  4. package/src/components/breadcrumb/breadcrumb.ts +98 -98
  5. package/src/components/button/button.ts +281 -281
  6. package/src/components/button-group/button-group.ts +67 -67
  7. package/src/components/card/card.ts +52 -52
  8. package/src/components/checkbox/checkbox.ts +238 -238
  9. package/src/components/code-block/code-block.ts +256 -256
  10. package/src/components/content-card/content-card.ts +133 -133
  11. package/src/components/divider/divider.ts +68 -68
  12. package/src/components/drawer/drawer.ts +217 -217
  13. package/src/components/field/field.ts +30 -30
  14. package/src/components/footer/footer.ts +58 -58
  15. package/src/components/form/form-step.ts +32 -32
  16. package/src/components/form/form.ts +376 -376
  17. package/src/components/grid/grid-row.ts +75 -75
  18. package/src/components/grid/grid.ts +36 -36
  19. package/src/components/icon/icon-paths.ts +124 -124
  20. package/src/components/icon/icon.ts +82 -82
  21. package/src/components/input/input.ts +248 -248
  22. package/src/components/link/link.ts +97 -97
  23. package/src/components/metadata/metadata.ts +66 -66
  24. package/src/components/modal/modal.ts +158 -158
  25. package/src/components/page-layout/page-layout.ts +704 -704
  26. package/src/components/radio/radio.ts +142 -142
  27. package/src/components/radio-group/radio-group.ts +157 -157
  28. package/src/components/router/router.ts +46 -46
  29. package/src/components/select/select.ts +161 -161
  30. package/src/components/skeleton/skeleton.ts +67 -67
  31. package/src/components/switch/switch.ts +181 -181
  32. package/src/components/table/data-table.ts +556 -556
  33. package/src/components/table/table.ts +153 -153
  34. package/src/components/tabs/tab-panel.ts +30 -30
  35. package/src/components/tabs/tab.ts +76 -76
  36. package/src/components/tabs/tabs.ts +88 -88
  37. package/src/components/textarea/textarea.ts +215 -215
  38. package/src/components/theme-toggle/theme-toggle.ts +131 -131
  39. package/src/components/vertical-nav/vertical-nav-group.ts +96 -96
  40. package/src/components/vertical-nav/vertical-nav-item.ts +49 -49
  41. package/src/styles/globals.css +58 -58
  42. package/src/styles/index.css +80 -80
  43. package/src/styles/reset.ts +50 -50
  44. package/src/styles/theme.css +58 -58
  45. package/src/styles/typography.css +25 -25
  46. package/tsconfig.json +15 -15
  47. package/README.md +0 -8
  48. package/dist/components/alert/alert.d.ts +0 -13
  49. package/dist/components/alert/alert.d.ts.map +0 -1
  50. package/dist/components/alert/alert.js +0 -105
  51. package/dist/components/badge/badge.d.ts +0 -13
  52. package/dist/components/badge/badge.d.ts.map +0 -1
  53. package/dist/components/badge/badge.js +0 -101
  54. package/dist/components/breadcrumb/breadcrumb.d.ts +0 -19
  55. package/dist/components/breadcrumb/breadcrumb.d.ts.map +0 -1
  56. package/dist/components/breadcrumb/breadcrumb.js +0 -99
  57. package/dist/components/button/button.d.ts +0 -23
  58. package/dist/components/button/button.d.ts.map +0 -1
  59. package/dist/components/button/button.js +0 -304
  60. package/dist/components/button-group/button-group.d.ts +0 -6
  61. package/dist/components/button-group/button-group.d.ts.map +0 -1
  62. package/dist/components/button-group/button-group.js +0 -74
  63. package/dist/components/card/card.d.ts +0 -11
  64. package/dist/components/card/card.d.ts.map +0 -1
  65. package/dist/components/card/card.js +0 -54
  66. package/dist/components/checkbox/checkbox.d.ts +0 -28
  67. package/dist/components/checkbox/checkbox.d.ts.map +0 -1
  68. package/dist/components/checkbox/checkbox.js +0 -247
  69. package/dist/components/code-block/code-block.d.ts +0 -20
  70. package/dist/components/code-block/code-block.d.ts.map +0 -1
  71. package/dist/components/code-block/code-block.js +0 -260
  72. package/dist/components/content-card/content-card.d.ts +0 -13
  73. package/dist/components/content-card/content-card.d.ts.map +0 -1
  74. package/dist/components/content-card/content-card.js +0 -140
  75. package/dist/components/divider/divider.d.ts +0 -16
  76. package/dist/components/divider/divider.d.ts.map +0 -1
  77. package/dist/components/divider/divider.js +0 -82
  78. package/dist/components/drawer/drawer.d.ts +0 -22
  79. package/dist/components/drawer/drawer.d.ts.map +0 -1
  80. package/dist/components/drawer/drawer.js +0 -226
  81. package/dist/components/field/field.d.ts +0 -11
  82. package/dist/components/field/field.d.ts.map +0 -1
  83. package/dist/components/field/field.js +0 -32
  84. package/dist/components/footer/footer.d.ts +0 -6
  85. package/dist/components/footer/footer.d.ts.map +0 -1
  86. package/dist/components/footer/footer.js +0 -65
  87. package/dist/components/form/form-step.d.ts +0 -13
  88. package/dist/components/form/form-step.d.ts.map +0 -1
  89. package/dist/components/form/form-step.js +0 -41
  90. package/dist/components/form/form.d.ts +0 -25
  91. package/dist/components/form/form.d.ts.map +0 -1
  92. package/dist/components/form/form.js +0 -358
  93. package/dist/components/grid/grid-row.d.ts +0 -17
  94. package/dist/components/grid/grid-row.d.ts.map +0 -1
  95. package/dist/components/grid/grid-row.js +0 -92
  96. package/dist/components/grid/grid.d.ts +0 -13
  97. package/dist/components/grid/grid.d.ts.map +0 -1
  98. package/dist/components/grid/grid.js +0 -42
  99. package/dist/components/icon/icon-paths.d.ts +0 -116
  100. package/dist/components/icon/icon-paths.d.ts.map +0 -1
  101. package/dist/components/icon/icon-paths.js +0 -121
  102. package/dist/components/icon/icon.d.ts +0 -16
  103. package/dist/components/icon/icon.d.ts.map +0 -1
  104. package/dist/components/icon/icon.js +0 -95
  105. package/dist/components/input/input.d.ts +0 -31
  106. package/dist/components/input/input.d.ts.map +0 -1
  107. package/dist/components/input/input.js +0 -268
  108. package/dist/components/link/link.d.ts +0 -16
  109. package/dist/components/link/link.d.ts.map +0 -1
  110. package/dist/components/link/link.js +0 -116
  111. package/dist/components/metadata/metadata.d.ts +0 -18
  112. package/dist/components/metadata/metadata.d.ts.map +0 -1
  113. package/dist/components/metadata/metadata.js +0 -71
  114. package/dist/components/modal/modal.d.ts +0 -24
  115. package/dist/components/modal/modal.d.ts.map +0 -1
  116. package/dist/components/modal/modal.js +0 -163
  117. package/dist/components/page-layout/page-layout.d.ts +0 -46
  118. package/dist/components/page-layout/page-layout.d.ts.map +0 -1
  119. package/dist/components/page-layout/page-layout.js +0 -697
  120. package/dist/components/radio/radio.d.ts +0 -16
  121. package/dist/components/radio/radio.d.ts.map +0 -1
  122. package/dist/components/radio/radio.js +0 -152
  123. package/dist/components/radio-group/radio-group.d.ts +0 -27
  124. package/dist/components/radio-group/radio-group.d.ts.map +0 -1
  125. package/dist/components/radio-group/radio-group.js +0 -161
  126. package/dist/components/router/router.d.ts +0 -7
  127. package/dist/components/router/router.d.ts.map +0 -1
  128. package/dist/components/router/router.js +0 -37
  129. package/dist/components/select/select.d.ts +0 -16
  130. package/dist/components/select/select.d.ts.map +0 -1
  131. package/dist/components/select/select.js +0 -172
  132. package/dist/components/skeleton/skeleton.d.ts +0 -17
  133. package/dist/components/skeleton/skeleton.d.ts.map +0 -1
  134. package/dist/components/skeleton/skeleton.js +0 -78
  135. package/dist/components/switch/switch.d.ts +0 -25
  136. package/dist/components/switch/switch.d.ts.map +0 -1
  137. package/dist/components/switch/switch.js +0 -185
  138. package/dist/components/table/data-table.d.ts +0 -72
  139. package/dist/components/table/data-table.d.ts.map +0 -1
  140. package/dist/components/table/data-table.js +0 -551
  141. package/dist/components/table/table.d.ts +0 -22
  142. package/dist/components/table/table.d.ts.map +0 -1
  143. package/dist/components/table/table.js +0 -167
  144. package/dist/components/tabs/tab-panel.d.ts +0 -8
  145. package/dist/components/tabs/tab-panel.d.ts.map +0 -1
  146. package/dist/components/tabs/tab-panel.js +0 -46
  147. package/dist/components/tabs/tab.d.ts +0 -9
  148. package/dist/components/tabs/tab.d.ts.map +0 -1
  149. package/dist/components/tabs/tab.js +0 -91
  150. package/dist/components/tabs/tabs.d.ts +0 -14
  151. package/dist/components/tabs/tabs.d.ts.map +0 -1
  152. package/dist/components/tabs/tabs.js +0 -85
  153. package/dist/components/textarea/textarea.d.ts +0 -36
  154. package/dist/components/textarea/textarea.d.ts.map +0 -1
  155. package/dist/components/textarea/textarea.js +0 -231
  156. package/dist/components/theme-toggle/theme-toggle.d.ts +0 -15
  157. package/dist/components/theme-toggle/theme-toggle.d.ts.map +0 -1
  158. package/dist/components/theme-toggle/theme-toggle.js +0 -130
  159. package/dist/components/vertical-nav/vertical-nav-group.d.ts +0 -9
  160. package/dist/components/vertical-nav/vertical-nav-group.d.ts.map +0 -1
  161. package/dist/components/vertical-nav/vertical-nav-group.js +0 -111
  162. package/dist/components/vertical-nav/vertical-nav-item.d.ts +0 -8
  163. package/dist/components/vertical-nav/vertical-nav-item.d.ts.map +0 -1
  164. package/dist/components/vertical-nav/vertical-nav-item.js +0 -65
  165. package/dist/styles/index.css +0 -171
  166. package/dist/styles/reset.d.ts +0 -2
  167. package/dist/styles/reset.d.ts.map +0 -1
  168. package/dist/styles/reset.js +0 -50
@@ -1,131 +1,131 @@
1
- import {LitElement, html, css} from "lit";
2
- import {customElement, property} from "lit/decorators.js";
3
- import {resetStyles} from "../../styles/reset.js";
4
-
5
- export type ThemeMode = "light" | "system" | "dark";
6
-
7
- @customElement("st-theme-toggle")
8
- export class StThemeToggle extends LitElement {
9
- @property({type: String, reflect: true}) theme: ThemeMode = "system";
10
-
11
- static styles = [
12
- resetStyles,
13
- css`
14
- :host {
15
- display: inline-flex;
16
- /* Use semantic tokens for the container */
17
- background-color: var(--st-color-surface);
18
- border: 1px solid var(--st-color-border);
19
- border-radius: 999px;
20
- padding: 4px;
21
- gap: 2px;
22
- }
23
-
24
- button {
25
- display: flex;
26
- align-items: center;
27
- justify-content: center;
28
- width: 28px;
29
- height: 28px;
30
- border-radius: 50%;
31
- border: none;
32
- background: transparent;
33
- color: var(--st-color-text-muted);
34
- cursor: pointer;
35
- transition: all 0.2s ease;
36
- }
37
-
38
- button:hover {
39
- color: var(--st-color-text);
40
- }
41
-
42
- /* Active State Styling */
43
- button[aria-pressed="true"] {
44
- /* Use the main background color so the active pill "pops" out of the surface */
45
- background-color: var(--st-color-bg);
46
- color: var(--st-color-primary);
47
- /* Subtle shadow to lift the active pill */
48
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
49
- }
50
-
51
- svg {
52
- width: 16px;
53
- height: 16px;
54
- fill: none;
55
- stroke: currentColor;
56
- stroke-width: 2;
57
- stroke-linecap: round;
58
- stroke-linejoin: round;
59
- }
60
- `,
61
- ];
62
-
63
- private _handleThemeChange(newTheme: ThemeMode) {
64
- this.theme = newTheme;
65
-
66
- // Dispatch an event so the consuming app knows to update the document root
67
- this.dispatchEvent(
68
- new CustomEvent("st-theme-change", {
69
- detail: {theme: newTheme},
70
- bubbles: true,
71
- composed: true,
72
- }),
73
- );
74
- }
75
-
76
- override connectedCallback() {
77
- super.connectedCallback();
78
- // Check the html tag for the theme injected by your blocking <head> script
79
- const rootTheme = document.documentElement.getAttribute("data-theme") as ThemeMode;
80
- if (rootTheme) {
81
- this.theme = rootTheme;
82
- }
83
- }
84
-
85
- render() {
86
- return html`
87
- <button
88
- aria-pressed=${this.theme === "light"}
89
- title="Light Mode"
90
- @click=${() => this._handleThemeChange("light")}
91
- >
92
- <!-- Sun Icon -->
93
- <svg viewBox="0 0 24 24">
94
- <circle cx="12" cy="12" r="5"></circle>
95
- <path
96
- d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"
97
- ></path>
98
- </svg>
99
- </button>
100
-
101
- <button
102
- aria-pressed=${this.theme === "system"}
103
- title="System Preference"
104
- @click=${() => this._handleThemeChange("system")}
105
- >
106
- <!-- Monitor/System Icon -->
107
- <svg viewBox="0 0 24 24">
108
- <rect x="2" y="3" width="20" height="14" rx="2" ry="2"></rect>
109
- <path d="M8 21h8M12 17v4"></path>
110
- </svg>
111
- </button>
112
-
113
- <button
114
- aria-pressed=${this.theme === "dark"}
115
- title="Dark Mode"
116
- @click=${() => this._handleThemeChange("dark")}
117
- >
118
- <!-- Moon Icon -->
119
- <svg viewBox="0 0 24 24">
120
- <path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"></path>
121
- </svg>
122
- </button>
123
- `;
124
- }
125
- }
126
-
127
- declare global {
128
- interface HTMLElementTagNameMap {
129
- "st-theme-toggle": StThemeToggle;
130
- }
131
- }
1
+ import {LitElement, html, css} from "lit";
2
+ import {customElement, property} from "lit/decorators.js";
3
+ import {resetStyles} from "../../styles/reset.js";
4
+
5
+ export type ThemeMode = "light" | "system" | "dark";
6
+
7
+ @customElement("st-theme-toggle")
8
+ export class StThemeToggle extends LitElement {
9
+ @property({type: String, reflect: true}) theme: ThemeMode = "system";
10
+
11
+ static styles = [
12
+ resetStyles,
13
+ css`
14
+ :host {
15
+ display: inline-flex;
16
+ /* Use semantic tokens for the container */
17
+ background-color: var(--st-color-surface);
18
+ border: 1px solid var(--st-color-border);
19
+ border-radius: 999px;
20
+ padding: 4px;
21
+ gap: 2px;
22
+ }
23
+
24
+ button {
25
+ display: flex;
26
+ align-items: center;
27
+ justify-content: center;
28
+ width: 28px;
29
+ height: 28px;
30
+ border-radius: 50%;
31
+ border: none;
32
+ background: transparent;
33
+ color: var(--st-color-text-muted);
34
+ cursor: pointer;
35
+ transition: all 0.2s ease;
36
+ }
37
+
38
+ button:hover {
39
+ color: var(--st-color-text);
40
+ }
41
+
42
+ /* Active State Styling */
43
+ button[aria-pressed="true"] {
44
+ /* Use the main background color so the active pill "pops" out of the surface */
45
+ background-color: var(--st-color-bg);
46
+ color: var(--st-color-primary);
47
+ /* Subtle shadow to lift the active pill */
48
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
49
+ }
50
+
51
+ svg {
52
+ width: 16px;
53
+ height: 16px;
54
+ fill: none;
55
+ stroke: currentColor;
56
+ stroke-width: 2;
57
+ stroke-linecap: round;
58
+ stroke-linejoin: round;
59
+ }
60
+ `,
61
+ ];
62
+
63
+ private _handleThemeChange(newTheme: ThemeMode) {
64
+ this.theme = newTheme;
65
+
66
+ // Dispatch an event so the consuming app knows to update the document root
67
+ this.dispatchEvent(
68
+ new CustomEvent("st-theme-change", {
69
+ detail: {theme: newTheme},
70
+ bubbles: true,
71
+ composed: true,
72
+ }),
73
+ );
74
+ }
75
+
76
+ override connectedCallback() {
77
+ super.connectedCallback();
78
+ // Check the html tag for the theme injected by your blocking <head> script
79
+ const rootTheme = document.documentElement.getAttribute("data-theme") as ThemeMode;
80
+ if (rootTheme) {
81
+ this.theme = rootTheme;
82
+ }
83
+ }
84
+
85
+ render() {
86
+ return html`
87
+ <button
88
+ aria-pressed=${this.theme === "light"}
89
+ title="Light Mode"
90
+ @click=${() => this._handleThemeChange("light")}
91
+ >
92
+ <!-- Sun Icon -->
93
+ <svg viewBox="0 0 24 24">
94
+ <circle cx="12" cy="12" r="5"></circle>
95
+ <path
96
+ d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"
97
+ ></path>
98
+ </svg>
99
+ </button>
100
+
101
+ <button
102
+ aria-pressed=${this.theme === "system"}
103
+ title="System Preference"
104
+ @click=${() => this._handleThemeChange("system")}
105
+ >
106
+ <!-- Monitor/System Icon -->
107
+ <svg viewBox="0 0 24 24">
108
+ <rect x="2" y="3" width="20" height="14" rx="2" ry="2"></rect>
109
+ <path d="M8 21h8M12 17v4"></path>
110
+ </svg>
111
+ </button>
112
+
113
+ <button
114
+ aria-pressed=${this.theme === "dark"}
115
+ title="Dark Mode"
116
+ @click=${() => this._handleThemeChange("dark")}
117
+ >
118
+ <!-- Moon Icon -->
119
+ <svg viewBox="0 0 24 24">
120
+ <path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"></path>
121
+ </svg>
122
+ </button>
123
+ `;
124
+ }
125
+ }
126
+
127
+ declare global {
128
+ interface HTMLElementTagNameMap {
129
+ "st-theme-toggle": StThemeToggle;
130
+ }
131
+ }
@@ -1,97 +1,97 @@
1
- import { LitElement, html, css } from 'lit';
2
- import { customElement, property } from 'lit/decorators.js';
3
- import { resetStyles } from '../../styles/reset.js';
4
-
5
- @customElement('st-vertical-nav-group')
6
- export class StNavGroup extends LitElement {
7
- @property({ type: String }) label = '';
8
- @property({ type: Boolean, reflect: true }) open = false;
9
-
10
- static styles = [
11
- resetStyles,
12
- css`
13
- :host {
14
- display: block;
15
- margin-bottom: var(--st-spacing-sm);
16
- }
17
-
18
- button {
19
- display: flex;
20
- align-items: center;
21
- justify-content: space-between;
22
- width: 100%;
23
- background: transparent;
24
- border: none;
25
- padding: var(--st-spacing-xs) var(--st-spacing-lg);
26
- color: var(--st-color-text);
27
- font-size: var(--st-font-size-sm);
28
- font-weight: var(--st-font-weight-bold);
29
- cursor: pointer;
30
- text-align: left;
31
- transition: color 0.2s ease;
32
- }
33
-
34
- button:hover {
35
- color: var(--st-color-primary);
36
- }
37
-
38
- svg {
39
- width: 1rem;
40
- height: 1rem;
41
- fill: none;
42
- stroke: currentColor;
43
- stroke-width: 2;
44
- stroke-linecap: round;
45
- stroke-linejoin: round;
46
- transition: transform 0.2s ease;
47
- }
48
-
49
- /* Rotate Chevron when open */
50
- :host([open]) svg {
51
- transform: rotate(180deg);
52
- }
53
-
54
- /* Modern CSS Grid Animation trick for accordion height */
55
- .drawer {
56
- display: grid;
57
- grid-template-rows: 0fr;
58
- transition: grid-template-rows 0.2s ease-in-out;
59
- }
60
-
61
- :host([open]) .drawer {
62
- grid-template-rows: 1fr;
63
- }
64
-
65
- .drawer-content {
66
- overflow: hidden;
67
- display: flex;
68
- flex-direction: column;
69
- gap: 2px;
70
- }
71
- `
72
- ];
73
-
74
- private _toggle() {
75
- this.open = !this.open;
76
- }
77
-
78
- render() {
79
- return html`
80
- <button @click=${this._toggle} aria-expanded=${this.open}>
81
- ${this.label}
82
- <svg viewBox="0 0 24 24">
83
- <path d="M6 9l6 6 6-6"></path>
84
- </svg>
85
- </button>
86
-
87
- <div class="drawer">
88
- <div class="drawer-content">
89
- <!-- We add slight padding top/bottom so the inner links breathe -->
90
- <div style="padding: 4px 0;">
91
- <slot></slot>
92
- </div>
93
- </div>
94
- </div>
95
- `;
96
- }
1
+ import { LitElement, html, css } from 'lit';
2
+ import { customElement, property } from 'lit/decorators.js';
3
+ import { resetStyles } from '../../styles/reset.js';
4
+
5
+ @customElement('st-vertical-nav-group')
6
+ export class StNavGroup extends LitElement {
7
+ @property({ type: String }) label = '';
8
+ @property({ type: Boolean, reflect: true }) open = false;
9
+
10
+ static styles = [
11
+ resetStyles,
12
+ css`
13
+ :host {
14
+ display: block;
15
+ margin-bottom: var(--st-spacing-sm);
16
+ }
17
+
18
+ button {
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: space-between;
22
+ width: 100%;
23
+ background: transparent;
24
+ border: none;
25
+ padding: var(--st-spacing-xs) var(--st-spacing-lg);
26
+ color: var(--st-color-text);
27
+ font-size: var(--st-font-size-sm);
28
+ font-weight: var(--st-font-weight-bold);
29
+ cursor: pointer;
30
+ text-align: left;
31
+ transition: color 0.2s ease;
32
+ }
33
+
34
+ button:hover {
35
+ color: var(--st-color-primary);
36
+ }
37
+
38
+ svg {
39
+ width: 1rem;
40
+ height: 1rem;
41
+ fill: none;
42
+ stroke: currentColor;
43
+ stroke-width: 2;
44
+ stroke-linecap: round;
45
+ stroke-linejoin: round;
46
+ transition: transform 0.2s ease;
47
+ }
48
+
49
+ /* Rotate Chevron when open */
50
+ :host([open]) svg {
51
+ transform: rotate(180deg);
52
+ }
53
+
54
+ /* Modern CSS Grid Animation trick for accordion height */
55
+ .drawer {
56
+ display: grid;
57
+ grid-template-rows: 0fr;
58
+ transition: grid-template-rows 0.2s ease-in-out;
59
+ }
60
+
61
+ :host([open]) .drawer {
62
+ grid-template-rows: 1fr;
63
+ }
64
+
65
+ .drawer-content {
66
+ overflow: hidden;
67
+ display: flex;
68
+ flex-direction: column;
69
+ gap: 2px;
70
+ }
71
+ `
72
+ ];
73
+
74
+ private _toggle() {
75
+ this.open = !this.open;
76
+ }
77
+
78
+ render() {
79
+ return html`
80
+ <button @click=${this._toggle} aria-expanded=${this.open}>
81
+ ${this.label}
82
+ <svg viewBox="0 0 24 24">
83
+ <path d="M6 9l6 6 6-6"></path>
84
+ </svg>
85
+ </button>
86
+
87
+ <div class="drawer">
88
+ <div class="drawer-content">
89
+ <!-- We add slight padding top/bottom so the inner links breathe -->
90
+ <div style="padding: 4px 0;">
91
+ <slot></slot>
92
+ </div>
93
+ </div>
94
+ </div>
95
+ `;
96
+ }
97
97
  }
@@ -1,50 +1,50 @@
1
- import { LitElement, html, css } from 'lit';
2
- import { customElement, property } from 'lit/decorators.js';
3
- import { resetStyles } from '../../styles/reset.js';
4
-
5
- @customElement('st-vertical-nav-item')
6
- export class StNavItem extends LitElement {
7
- @property({ type: String }) href = '#';
8
- @property({ type: Boolean, reflect: true }) active = false;
9
-
10
- static styles = [
11
- resetStyles,
12
- css`
13
- :host {
14
- display: block;
15
- }
16
-
17
- a {
18
- display: flex;
19
- align-items: center;
20
- padding: 6px var(--st-spacing-lg);
21
- color: var(--st-color-text-muted);
22
- font-size: var(--st-font-size-sm);
23
- text-decoration: none;
24
- border-left: 2px solid transparent;
25
- transition: all 0.15s ease;
26
- }
27
-
28
- a:hover {
29
- color: var(--st-color-text);
30
- background-color: var(--st-color-surface);
31
- }
32
-
33
- /* Active state: Purple text with a left border indicator */
34
- :host([active]) a {
35
- color: var(--st-color-primary);
36
- border-left-color: var(--st-color-primary);
37
- font-weight: var(--st-font-weight-medium);
38
- background-color: transparent;
39
- }
40
- `
41
- ];
42
-
43
- render() {
44
- return html`
45
- <a href=${this.href} part="link">
46
- <slot></slot>
47
- </a>
48
- `;
49
- }
1
+ import { LitElement, html, css } from 'lit';
2
+ import { customElement, property } from 'lit/decorators.js';
3
+ import { resetStyles } from '../../styles/reset.js';
4
+
5
+ @customElement('st-vertical-nav-item')
6
+ export class StNavItem extends LitElement {
7
+ @property({ type: String }) href = '#';
8
+ @property({ type: Boolean, reflect: true }) active = false;
9
+
10
+ static styles = [
11
+ resetStyles,
12
+ css`
13
+ :host {
14
+ display: block;
15
+ }
16
+
17
+ a {
18
+ display: flex;
19
+ align-items: center;
20
+ padding: 6px var(--st-spacing-lg);
21
+ color: var(--st-color-text-muted);
22
+ font-size: var(--st-font-size-sm);
23
+ text-decoration: none;
24
+ border-left: 2px solid transparent;
25
+ transition: all 0.15s ease;
26
+ }
27
+
28
+ a:hover {
29
+ color: var(--st-color-text);
30
+ background-color: var(--st-color-surface);
31
+ }
32
+
33
+ /* Active state: Purple text with a left border indicator */
34
+ :host([active]) a {
35
+ color: var(--st-color-primary);
36
+ border-left-color: var(--st-color-primary);
37
+ font-weight: var(--st-font-weight-medium);
38
+ background-color: transparent;
39
+ }
40
+ `
41
+ ];
42
+
43
+ render() {
44
+ return html`
45
+ <a href=${this.href} part="link">
46
+ <slot></slot>
47
+ </a>
48
+ `;
49
+ }
50
50
  }
@@ -1,58 +1,58 @@
1
- :root {
2
- /* ==========================================================
3
- Brand Primitives: Purple
4
- ========================================================== */
5
- --st-purple-50: #faf5ff;
6
- --st-purple-100: #f3e8ff;
7
- --st-purple-400: #c084fc; /* dark mode shade */
8
- --st-purple-500: #a855f7;
9
- --st-purple-600: #6d28d9; /* light mode shade */
10
- --st-purple-700: #5b21b6;
11
-
12
- /* ==========================================================
13
- Neutral Primitives: Space Grey Scale
14
- ========================================================== */
15
- --st-white: #ffffff;
16
- --st-gray-50: #f9fafb;
17
- --st-gray-100: #f3f4f6;
18
- --st-gray-200: #e5e7eb;
19
- --st-gray-700: #374151;
20
- --st-gray-800: #27272a;
21
- --st-gray-900: #18181b;
22
-
23
- /* ==========================================================
24
- State Primitives: Red, Green, Amber, Blue
25
- ========================================================== */
26
- /* Error / Danger */
27
- --st-red-100: #fee2e2;
28
- --st-red-500: #ef4444;
29
- --st-red-600: #dc2626;
30
- --st-red-900: #7f1d1d;
31
-
32
- /* Success / Validation */
33
- --st-green-100: #dcfce7;
34
- --st-green-500: #22c55e;
35
- --st-green-600: #16a34a;
36
- --st-green-900: #14532d;
37
-
38
- /* Warning */
39
- --st-amber-100: #fef3c7;
40
- --st-amber-500: #f59e0b;
41
- --st-amber-600: #d97706;
42
- --st-amber-900: #78350f;
43
-
44
- /* Information */
45
- --st-blue-100: #dbeafe;
46
- --st-blue-500: #3b82f6;
47
- --st-blue-600: #2563eb;
48
- --st-blue-900: #1e3a8a;
49
-
50
- /* ==========================================================
51
- Global Spacing Scale
52
- ========================================================== */
53
- --st-spacing-xs: 0.25rem;
54
- --st-spacing-sm: 0.5rem;
55
- --st-spacing-md: 1rem;
56
- --st-spacing-lg: 1.5rem;
57
- --st-spacing-xl: 2rem;
58
- }
1
+ :root {
2
+ /* ==========================================================
3
+ Brand Primitives: Purple
4
+ ========================================================== */
5
+ --st-purple-50: #faf5ff;
6
+ --st-purple-100: #f3e8ff;
7
+ --st-purple-400: #c084fc; /* dark mode shade */
8
+ --st-purple-500: #a855f7;
9
+ --st-purple-600: #6d28d9; /* light mode shade */
10
+ --st-purple-700: #5b21b6;
11
+
12
+ /* ==========================================================
13
+ Neutral Primitives: Space Grey Scale
14
+ ========================================================== */
15
+ --st-white: #ffffff;
16
+ --st-gray-50: #f9fafb;
17
+ --st-gray-100: #f3f4f6;
18
+ --st-gray-200: #e5e7eb;
19
+ --st-gray-700: #374151;
20
+ --st-gray-800: #27272a;
21
+ --st-gray-900: #18181b;
22
+
23
+ /* ==========================================================
24
+ State Primitives: Red, Green, Amber, Blue
25
+ ========================================================== */
26
+ /* Error / Danger */
27
+ --st-red-100: #fee2e2;
28
+ --st-red-500: #ef4444;
29
+ --st-red-600: #dc2626;
30
+ --st-red-900: #7f1d1d;
31
+
32
+ /* Success / Validation */
33
+ --st-green-100: #dcfce7;
34
+ --st-green-500: #22c55e;
35
+ --st-green-600: #16a34a;
36
+ --st-green-900: #14532d;
37
+
38
+ /* Warning */
39
+ --st-amber-100: #fef3c7;
40
+ --st-amber-500: #f59e0b;
41
+ --st-amber-600: #d97706;
42
+ --st-amber-900: #78350f;
43
+
44
+ /* Information */
45
+ --st-blue-100: #dbeafe;
46
+ --st-blue-500: #3b82f6;
47
+ --st-blue-600: #2563eb;
48
+ --st-blue-900: #1e3a8a;
49
+
50
+ /* ==========================================================
51
+ Global Spacing Scale
52
+ ========================================================== */
53
+ --st-spacing-xs: 0.25rem;
54
+ --st-spacing-sm: 0.5rem;
55
+ --st-spacing-md: 1rem;
56
+ --st-spacing-lg: 1.5rem;
57
+ --st-spacing-xl: 2rem;
58
+ }