@luster-ui/ui 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 (176) hide show
  1. package/PUBLISHING.md +469 -0
  2. package/README.md +423 -0
  3. package/dist/cjs/index-Couc0LVo.js +1571 -0
  4. package/dist/cjs/index.cjs.js +2 -0
  5. package/dist/cjs/loader.cjs.js +12 -0
  6. package/dist/cjs/luster-accordion_19.cjs.entry.js +555 -0
  7. package/dist/cjs/luster-card.cjs.entry.js +25 -0
  8. package/dist/cjs/luster.cjs.js +24 -0
  9. package/dist/collection/collection-manifest.json +32 -0
  10. package/dist/collection/components/luster-accordion/luster-accordion.css +76 -0
  11. package/dist/collection/components/luster-accordion/luster-accordion.js +160 -0
  12. package/dist/collection/components/luster-accordion/luster-accordion.stories.js +88 -0
  13. package/dist/collection/components/luster-activity-item/luster-activity-item.css +102 -0
  14. package/dist/collection/components/luster-activity-item/luster-activity-item.js +188 -0
  15. package/dist/collection/components/luster-activity-item/luster-activity-item.stories.js +94 -0
  16. package/dist/collection/components/luster-alert/luster-alert.css +71 -0
  17. package/dist/collection/components/luster-alert/luster-alert.js +171 -0
  18. package/dist/collection/components/luster-alert/luster-alert.stories.js +82 -0
  19. package/dist/collection/components/luster-article-card/luster-article-card.css +120 -0
  20. package/dist/collection/components/luster-article-card/luster-article-card.js +192 -0
  21. package/dist/collection/components/luster-article-card/luster-article-card.stories.js +82 -0
  22. package/dist/collection/components/luster-badge/luster-badge.css +38 -0
  23. package/dist/collection/components/luster-badge/luster-badge.js +87 -0
  24. package/dist/collection/components/luster-badge/luster-badge.stories.js +86 -0
  25. package/dist/collection/components/luster-button/luster-button.css +121 -0
  26. package/dist/collection/components/luster-button/luster-button.js +179 -0
  27. package/dist/collection/components/luster-button/luster-button.stories.js +103 -0
  28. package/dist/collection/components/luster-card/luster-card.css +29 -0
  29. package/dist/collection/components/luster-card/luster-card.js +92 -0
  30. package/dist/collection/components/luster-card/luster-card.stories.js +67 -0
  31. package/dist/collection/components/luster-checkbox/luster-checkbox.css +42 -0
  32. package/dist/collection/components/luster-checkbox/luster-checkbox.js +162 -0
  33. package/dist/collection/components/luster-checkbox/luster-checkbox.stories.js +78 -0
  34. package/dist/collection/components/luster-color-swatch/luster-color-swatch.css +33 -0
  35. package/dist/collection/components/luster-color-swatch/luster-color-swatch.js +108 -0
  36. package/dist/collection/components/luster-color-swatch/luster-color-swatch.stories.js +58 -0
  37. package/dist/collection/components/luster-feature-quote/luster-feature-quote.css +84 -0
  38. package/dist/collection/components/luster-feature-quote/luster-feature-quote.js +108 -0
  39. package/dist/collection/components/luster-feature-quote/luster-feature-quote.stories.js +52 -0
  40. package/dist/collection/components/luster-hero/luster-hero.css +119 -0
  41. package/dist/collection/components/luster-hero/luster-hero.js +129 -0
  42. package/dist/collection/components/luster-hero/luster-hero.stories.js +72 -0
  43. package/dist/collection/components/luster-input/luster-input.css +72 -0
  44. package/dist/collection/components/luster-input/luster-input.js +332 -0
  45. package/dist/collection/components/luster-input/luster-input.stories.js +106 -0
  46. package/dist/collection/components/luster-modal/luster-modal.css +103 -0
  47. package/dist/collection/components/luster-modal/luster-modal.js +215 -0
  48. package/dist/collection/components/luster-modal/luster-modal.stories.js +78 -0
  49. package/dist/collection/components/luster-navbar/luster-navbar.css +151 -0
  50. package/dist/collection/components/luster-navbar/luster-navbar.js +87 -0
  51. package/dist/collection/components/luster-navbar/luster-navbar.stories.js +41 -0
  52. package/dist/collection/components/luster-profile-card/luster-profile-card.css +89 -0
  53. package/dist/collection/components/luster-profile-card/luster-profile-card.js +194 -0
  54. package/dist/collection/components/luster-profile-card/luster-profile-card.stories.js +56 -0
  55. package/dist/collection/components/luster-resource-table/luster-resource-table.css +141 -0
  56. package/dist/collection/components/luster-resource-table/luster-resource-table.js +78 -0
  57. package/dist/collection/components/luster-resource-table/luster-resource-table.stories.js +44 -0
  58. package/dist/collection/components/luster-sidebar/luster-sidebar.css +152 -0
  59. package/dist/collection/components/luster-sidebar/luster-sidebar.js +78 -0
  60. package/dist/collection/components/luster-sidebar/luster-sidebar.stories.js +34 -0
  61. package/dist/collection/components/luster-stat-card/luster-stat-card.css +82 -0
  62. package/dist/collection/components/luster-stat-card/luster-stat-card.js +194 -0
  63. package/dist/collection/components/luster-stat-card/luster-stat-card.stories.js +75 -0
  64. package/dist/collection/components/luster-tabs/luster-tabs.css +35 -0
  65. package/dist/collection/components/luster-tabs/luster-tabs.js +116 -0
  66. package/dist/collection/components/luster-tabs/luster-tabs.stories.js +56 -0
  67. package/dist/collection/components/luster-toggle/luster-toggle.css +48 -0
  68. package/dist/collection/components/luster-toggle/luster-toggle.js +120 -0
  69. package/dist/collection/components/luster-toggle/luster-toggle.stories.js +66 -0
  70. package/dist/components/index.d.ts +33 -0
  71. package/dist/components/index.js +1 -0
  72. package/dist/components/luster-accordion.d.ts +11 -0
  73. package/dist/components/luster-accordion.js +1 -0
  74. package/dist/components/luster-activity-item.d.ts +11 -0
  75. package/dist/components/luster-activity-item.js +1 -0
  76. package/dist/components/luster-alert.d.ts +11 -0
  77. package/dist/components/luster-alert.js +1 -0
  78. package/dist/components/luster-article-card.d.ts +11 -0
  79. package/dist/components/luster-article-card.js +1 -0
  80. package/dist/components/luster-badge.d.ts +11 -0
  81. package/dist/components/luster-badge.js +1 -0
  82. package/dist/components/luster-badge2.js +1 -0
  83. package/dist/components/luster-button.d.ts +11 -0
  84. package/dist/components/luster-button.js +1 -0
  85. package/dist/components/luster-button2.js +1 -0
  86. package/dist/components/luster-card.d.ts +11 -0
  87. package/dist/components/luster-card.js +1 -0
  88. package/dist/components/luster-checkbox.d.ts +11 -0
  89. package/dist/components/luster-checkbox.js +1 -0
  90. package/dist/components/luster-color-swatch.d.ts +11 -0
  91. package/dist/components/luster-color-swatch.js +1 -0
  92. package/dist/components/luster-feature-quote.d.ts +11 -0
  93. package/dist/components/luster-feature-quote.js +1 -0
  94. package/dist/components/luster-hero.d.ts +11 -0
  95. package/dist/components/luster-hero.js +1 -0
  96. package/dist/components/luster-input.d.ts +11 -0
  97. package/dist/components/luster-input.js +1 -0
  98. package/dist/components/luster-modal.d.ts +11 -0
  99. package/dist/components/luster-modal.js +1 -0
  100. package/dist/components/luster-navbar.d.ts +11 -0
  101. package/dist/components/luster-navbar.js +1 -0
  102. package/dist/components/luster-profile-card.d.ts +11 -0
  103. package/dist/components/luster-profile-card.js +1 -0
  104. package/dist/components/luster-resource-table.d.ts +11 -0
  105. package/dist/components/luster-resource-table.js +1 -0
  106. package/dist/components/luster-sidebar.d.ts +11 -0
  107. package/dist/components/luster-sidebar.js +1 -0
  108. package/dist/components/luster-stat-card.d.ts +11 -0
  109. package/dist/components/luster-stat-card.js +1 -0
  110. package/dist/components/luster-tabs.d.ts +11 -0
  111. package/dist/components/luster-tabs.js +1 -0
  112. package/dist/components/luster-toggle.d.ts +11 -0
  113. package/dist/components/luster-toggle.js +1 -0
  114. package/dist/components/luster-toggle2.js +1 -0
  115. package/dist/esm/index-CeYIN8dN.js +1563 -0
  116. package/dist/esm/index.js +1 -0
  117. package/dist/esm/loader.js +10 -0
  118. package/dist/esm/luster-accordion_19.entry.js +535 -0
  119. package/dist/esm/luster-card.entry.js +23 -0
  120. package/dist/esm/luster.js +20 -0
  121. package/dist/index.cjs.js +1 -0
  122. package/dist/index.js +1 -0
  123. package/dist/luster/index.esm.js +0 -0
  124. package/dist/luster/luster.css +313 -0
  125. package/dist/luster/luster.esm.js +1 -0
  126. package/dist/luster/p-3c4ce897.entry.js +1 -0
  127. package/dist/luster/p-CeYIN8dN.js +2 -0
  128. package/dist/luster/p-e368ec08.entry.js +1 -0
  129. package/dist/types/.stencil/luster-accordion/luster-accordion.d.ts +13 -0
  130. package/dist/types/.stencil/luster-accordion/luster-accordion.stories.d.ts +10 -0
  131. package/dist/types/.stencil/luster-activity-item/luster-activity-item.d.ts +11 -0
  132. package/dist/types/.stencil/luster-activity-item/luster-activity-item.stories.d.ts +9 -0
  133. package/dist/types/.stencil/luster-alert/luster-alert.d.ts +13 -0
  134. package/dist/types/.stencil/luster-alert/luster-alert.stories.d.ts +10 -0
  135. package/dist/types/.stencil/luster-article-card/luster-article-card.d.ts +11 -0
  136. package/dist/types/.stencil/luster-article-card/luster-article-card.stories.d.ts +8 -0
  137. package/dist/types/.stencil/luster-badge/luster-badge.d.ts +6 -0
  138. package/dist/types/.stencil/luster-badge/luster-badge.stories.d.ts +12 -0
  139. package/dist/types/.stencil/luster-button/luster-button.d.ts +12 -0
  140. package/dist/types/.stencil/luster-button/luster-button.stories.d.ts +13 -0
  141. package/dist/types/.stencil/luster-card/luster-card.d.ts +6 -0
  142. package/dist/types/.stencil/luster-card/luster-card.stories.d.ts +10 -0
  143. package/dist/types/.stencil/luster-checkbox/luster-checkbox.d.ts +13 -0
  144. package/dist/types/.stencil/luster-checkbox/luster-checkbox.stories.d.ts +10 -0
  145. package/dist/types/.stencil/luster-color-swatch/luster-color-swatch.d.ts +7 -0
  146. package/dist/types/.stencil/luster-color-swatch/luster-color-swatch.stories.d.ts +8 -0
  147. package/dist/types/.stencil/luster-feature-quote/luster-feature-quote.d.ts +7 -0
  148. package/dist/types/.stencil/luster-feature-quote/luster-feature-quote.stories.d.ts +8 -0
  149. package/dist/types/.stencil/luster-hero/luster-hero.d.ts +8 -0
  150. package/dist/types/.stencil/luster-hero/luster-hero.stories.d.ts +8 -0
  151. package/dist/types/.stencil/luster-input/luster-input.d.ts +25 -0
  152. package/dist/types/.stencil/luster-input/luster-input.stories.d.ts +9 -0
  153. package/dist/types/.stencil/luster-modal/luster-modal.d.ts +17 -0
  154. package/dist/types/.stencil/luster-modal/luster-modal.stories.d.ts +8 -0
  155. package/dist/types/.stencil/luster-navbar/luster-navbar.d.ts +6 -0
  156. package/dist/types/.stencil/luster-navbar/luster-navbar.stories.d.ts +6 -0
  157. package/dist/types/.stencil/luster-profile-card/luster-profile-card.d.ts +11 -0
  158. package/dist/types/.stencil/luster-profile-card/luster-profile-card.stories.d.ts +7 -0
  159. package/dist/types/.stencil/luster-resource-table/luster-resource-table.d.ts +14 -0
  160. package/dist/types/.stencil/luster-resource-table/luster-resource-table.stories.d.ts +6 -0
  161. package/dist/types/.stencil/luster-sidebar/luster-sidebar.d.ts +9 -0
  162. package/dist/types/.stencil/luster-sidebar/luster-sidebar.stories.d.ts +8 -0
  163. package/dist/types/.stencil/luster-stat-card/luster-stat-card.d.ts +11 -0
  164. package/dist/types/.stencil/luster-stat-card/luster-stat-card.stories.d.ts +8 -0
  165. package/dist/types/.stencil/luster-tabs/luster-tabs.d.ts +15 -0
  166. package/dist/types/.stencil/luster-tabs/luster-tabs.stories.d.ts +7 -0
  167. package/dist/types/.stencil/luster-toggle/luster-toggle.d.ts +11 -0
  168. package/dist/types/.stencil/luster-toggle/luster-toggle.stories.d.ts +9 -0
  169. package/dist/types/components.d.ts +1355 -0
  170. package/dist/types/stencil-public-runtime.d.ts +1860 -0
  171. package/loader/cdn.js +1 -0
  172. package/loader/index.cjs.js +1 -0
  173. package/loader/index.d.ts +24 -0
  174. package/loader/index.es2017.js +1 -0
  175. package/loader/index.js +2 -0
  176. package/package.json +73 -0
@@ -0,0 +1,215 @@
1
+ import { h } from "@stencil/core";
2
+ export class DcModal {
3
+ constructor() {
4
+ this.open = false;
5
+ this.heading = '';
6
+ this.subtitle = '';
7
+ this.confirmLabel = 'Proceed';
8
+ this.cancelLabel = 'Cancel';
9
+ this.size = 'md';
10
+ this.visible = false;
11
+ this.handleClose = () => {
12
+ this.open = false;
13
+ this.visible = false;
14
+ this.dcClose.emit();
15
+ };
16
+ this.handleConfirm = () => {
17
+ this.dcConfirm.emit();
18
+ this.handleClose();
19
+ };
20
+ }
21
+ watchOpen(newValue) {
22
+ this.visible = newValue;
23
+ }
24
+ componentWillLoad() {
25
+ this.visible = this.open;
26
+ }
27
+ render() {
28
+ if (!this.visible)
29
+ return null;
30
+ return (h("div", { class: "modal-overlay", onClick: e => {
31
+ if (e.target.classList.contains('modal-overlay'))
32
+ this.handleClose();
33
+ } }, h("div", { class: `modal modal--${this.size}`, role: "dialog", "aria-modal": "true" }, h("div", { class: "modal__header" }, this.heading && h("h2", { class: "modal__title" }, this.heading), this.subtitle && h("p", { class: "modal__subtitle" }, this.subtitle), h("button", { class: "modal__close", onClick: this.handleClose, "aria-label": "Close" }, h("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none" }, h("line", { x1: "18", y1: "6", x2: "6", y2: "18", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round" }), h("line", { x1: "6", y1: "6", x2: "18", y2: "18", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round" })))), h("div", { class: "modal__body" }, h("slot", null)), h("div", { class: "modal__footer" }, h("slot", { name: "footer" }, h("luster-button", { variant: "secondary", onDcClick: this.handleClose }, this.cancelLabel), h("luster-button", { variant: "primary", onDcClick: this.handleConfirm }, this.confirmLabel))))));
34
+ }
35
+ static get is() { return "luster-modal"; }
36
+ static get encapsulation() { return "shadow"; }
37
+ static get originalStyleUrls() {
38
+ return {
39
+ "$": ["luster-modal.css"]
40
+ };
41
+ }
42
+ static get styleUrls() {
43
+ return {
44
+ "$": ["luster-modal.css"]
45
+ };
46
+ }
47
+ static get properties() {
48
+ return {
49
+ "open": {
50
+ "type": "boolean",
51
+ "mutable": true,
52
+ "complexType": {
53
+ "original": "boolean",
54
+ "resolved": "boolean",
55
+ "references": {}
56
+ },
57
+ "required": false,
58
+ "optional": false,
59
+ "docs": {
60
+ "tags": [],
61
+ "text": ""
62
+ },
63
+ "getter": false,
64
+ "setter": false,
65
+ "reflect": false,
66
+ "attribute": "open",
67
+ "defaultValue": "false"
68
+ },
69
+ "heading": {
70
+ "type": "string",
71
+ "mutable": false,
72
+ "complexType": {
73
+ "original": "string",
74
+ "resolved": "string",
75
+ "references": {}
76
+ },
77
+ "required": false,
78
+ "optional": false,
79
+ "docs": {
80
+ "tags": [],
81
+ "text": ""
82
+ },
83
+ "getter": false,
84
+ "setter": false,
85
+ "reflect": false,
86
+ "attribute": "heading",
87
+ "defaultValue": "''"
88
+ },
89
+ "subtitle": {
90
+ "type": "string",
91
+ "mutable": false,
92
+ "complexType": {
93
+ "original": "string",
94
+ "resolved": "string",
95
+ "references": {}
96
+ },
97
+ "required": false,
98
+ "optional": false,
99
+ "docs": {
100
+ "tags": [],
101
+ "text": ""
102
+ },
103
+ "getter": false,
104
+ "setter": false,
105
+ "reflect": false,
106
+ "attribute": "subtitle",
107
+ "defaultValue": "''"
108
+ },
109
+ "confirmLabel": {
110
+ "type": "string",
111
+ "mutable": false,
112
+ "complexType": {
113
+ "original": "string",
114
+ "resolved": "string",
115
+ "references": {}
116
+ },
117
+ "required": false,
118
+ "optional": false,
119
+ "docs": {
120
+ "tags": [],
121
+ "text": ""
122
+ },
123
+ "getter": false,
124
+ "setter": false,
125
+ "reflect": false,
126
+ "attribute": "confirm-label",
127
+ "defaultValue": "'Proceed'"
128
+ },
129
+ "cancelLabel": {
130
+ "type": "string",
131
+ "mutable": false,
132
+ "complexType": {
133
+ "original": "string",
134
+ "resolved": "string",
135
+ "references": {}
136
+ },
137
+ "required": false,
138
+ "optional": false,
139
+ "docs": {
140
+ "tags": [],
141
+ "text": ""
142
+ },
143
+ "getter": false,
144
+ "setter": false,
145
+ "reflect": false,
146
+ "attribute": "cancel-label",
147
+ "defaultValue": "'Cancel'"
148
+ },
149
+ "size": {
150
+ "type": "string",
151
+ "mutable": false,
152
+ "complexType": {
153
+ "original": "'sm' | 'md' | 'lg'",
154
+ "resolved": "\"lg\" | \"md\" | \"sm\"",
155
+ "references": {}
156
+ },
157
+ "required": false,
158
+ "optional": false,
159
+ "docs": {
160
+ "tags": [],
161
+ "text": ""
162
+ },
163
+ "getter": false,
164
+ "setter": false,
165
+ "reflect": false,
166
+ "attribute": "size",
167
+ "defaultValue": "'md'"
168
+ }
169
+ };
170
+ }
171
+ static get states() {
172
+ return {
173
+ "visible": {}
174
+ };
175
+ }
176
+ static get events() {
177
+ return [{
178
+ "method": "dcClose",
179
+ "name": "dcClose",
180
+ "bubbles": true,
181
+ "cancelable": true,
182
+ "composed": true,
183
+ "docs": {
184
+ "tags": [],
185
+ "text": ""
186
+ },
187
+ "complexType": {
188
+ "original": "void",
189
+ "resolved": "void",
190
+ "references": {}
191
+ }
192
+ }, {
193
+ "method": "dcConfirm",
194
+ "name": "dcConfirm",
195
+ "bubbles": true,
196
+ "cancelable": true,
197
+ "composed": true,
198
+ "docs": {
199
+ "tags": [],
200
+ "text": ""
201
+ },
202
+ "complexType": {
203
+ "original": "void",
204
+ "resolved": "void",
205
+ "references": {}
206
+ }
207
+ }];
208
+ }
209
+ static get watchers() {
210
+ return [{
211
+ "propName": "open",
212
+ "methodName": "watchOpen"
213
+ }];
214
+ }
215
+ }
@@ -0,0 +1,78 @@
1
+ import { html } from "lit";
2
+ const meta = {
3
+ title: 'Navigation/Modal',
4
+ tags: ['autodocs'],
5
+ parameters: {
6
+ docs: {
7
+ description: {
8
+ component: 'Diálogo modal com overlay. Props: `open`, `heading`, `subtitle`, `confirm-label`, `cancel-label`, `size`.',
9
+ },
10
+ },
11
+ },
12
+ argTypes: {
13
+ open: {
14
+ control: 'boolean',
15
+ description: 'Controla visibilidade',
16
+ table: { defaultValue: { summary: 'false' } },
17
+ },
18
+ heading: { control: 'text', description: 'Título do modal' },
19
+ subtitle: { control: 'text', description: 'Subtítulo / descrição' },
20
+ confirmLabel: { control: 'text', description: 'Label do botão de confirmação' },
21
+ cancelLabel: { control: 'text', description: 'Label do botão de cancelamento' },
22
+ size: {
23
+ control: 'select',
24
+ options: ['sm', 'md', 'lg'],
25
+ description: 'Tamanho do modal',
26
+ table: { defaultValue: { summary: 'md' } },
27
+ },
28
+ },
29
+ args: {
30
+ open: true,
31
+ heading: 'Confirm action',
32
+ subtitle: 'This action cannot be undone.',
33
+ confirmLabel: 'Proceed',
34
+ cancelLabel: 'Cancel',
35
+ size: 'md',
36
+ },
37
+ };
38
+ export default meta;
39
+ const render = (args) => html `
40
+ <div style="position:relative;min-height:300px;">
41
+ <luster-modal
42
+ ?open="${args.open}"
43
+ heading="${args.heading}"
44
+ subtitle="${args.subtitle}"
45
+ confirm-label="${args.confirmLabel}"
46
+ cancel-label="${args.cancelLabel}"
47
+ size="${args.size}"
48
+ >
49
+ <p style="color:var(--dc-on-surface-variant);margin:0;">
50
+ Are you sure you want to proceed? All unsaved changes will be lost.
51
+ </p>
52
+ </luster-modal>
53
+ </div>
54
+ `;
55
+ export const Default = {
56
+ args: { open: true, heading: 'Confirm action', subtitle: 'This action cannot be undone.' },
57
+ render,
58
+ };
59
+ export const Small = {
60
+ args: { open: true, size: 'sm', heading: 'Quick confirm', subtitle: '' },
61
+ render,
62
+ };
63
+ export const Large = {
64
+ args: { open: true, size: 'lg', heading: 'Edit article', subtitle: 'Make your changes below.' },
65
+ render,
66
+ };
67
+ export const DeleteConfirm = {
68
+ name: 'Delete Confirmation',
69
+ args: {
70
+ open: true,
71
+ heading: 'Delete resource',
72
+ subtitle: 'This will permanently remove the resource.',
73
+ confirmLabel: 'Delete',
74
+ cancelLabel: 'Keep it',
75
+ size: 'sm',
76
+ },
77
+ render,
78
+ };
@@ -0,0 +1,151 @@
1
+ :host {
2
+ display: block;
3
+ position: sticky;
4
+ top: 0;
5
+ z-index: 100;
6
+ }
7
+
8
+ .navbar {
9
+ display: flex;
10
+ align-items: center;
11
+ gap: var(--dc-space-6);
12
+ padding: var(--dc-space-3) var(--dc-space-6);
13
+ background: var(--dc-glass-nav);
14
+ backdrop-filter: blur(20px);
15
+ -webkit-backdrop-filter: blur(20px);
16
+ border-bottom: 1px solid var(--dc-border-default);
17
+ }
18
+
19
+ .navbar__logo {
20
+ display: flex;
21
+ align-items: center;
22
+ gap: var(--dc-space-3);
23
+ flex-shrink: 0;
24
+ text-decoration: none;
25
+ }
26
+
27
+ .navbar__logo-text {
28
+ display: flex;
29
+ flex-direction: column;
30
+ line-height: 1.2;
31
+ }
32
+
33
+ .navbar__logo-title {
34
+ font-family: var(--dc-font-display);
35
+ font-size: var(--dc-label-lg);
36
+ font-weight: 700;
37
+ color: var(--dc-on-surface);
38
+ white-space: nowrap;
39
+ }
40
+
41
+ .navbar__logo-sub {
42
+ font-size: var(--dc-label-sm);
43
+ font-weight: 600;
44
+ color: var(--dc-on-surface-variant);
45
+ letter-spacing: var(--dc-tracking-wider);
46
+ text-transform: uppercase;
47
+ }
48
+
49
+ .navbar__nav {
50
+ display: flex;
51
+ align-items: center;
52
+ gap: var(--dc-space-1);
53
+ flex: 1;
54
+ }
55
+
56
+ .navbar__link {
57
+ font-size: var(--dc-body-md);
58
+ font-weight: 500;
59
+ color: var(--dc-on-surface-variant);
60
+ text-decoration: none;
61
+ cursor: pointer;
62
+ padding: var(--dc-space-1) var(--dc-space-3);
63
+ border-radius: var(--dc-round-2);
64
+ transition: color var(--dc-transition-fast), background var(--dc-transition-fast);
65
+ }
66
+
67
+ .navbar__link:hover {
68
+ color: var(--dc-on-surface);
69
+ background: var(--dc-hover-tint-md);
70
+ }
71
+
72
+ .navbar__link--active {
73
+ color: var(--dc-on-surface);
74
+ font-weight: 600;
75
+ }
76
+
77
+ .navbar__actions {
78
+ display: flex;
79
+ align-items: center;
80
+ gap: var(--dc-space-2);
81
+ flex-shrink: 0;
82
+ }
83
+
84
+ .navbar__search {
85
+ display: flex;
86
+ align-items: center;
87
+ gap: var(--dc-space-2);
88
+ background: var(--dc-glass-search);
89
+ border: 1px solid var(--dc-border-medium);
90
+ border-radius: var(--dc-round-full);
91
+ padding: var(--dc-space-1) var(--dc-space-3);
92
+ transition: border-color var(--dc-transition-fast);
93
+ }
94
+
95
+ .navbar__search:focus-within {
96
+ border-color: var(--dc-focus-ring-hover);
97
+ }
98
+
99
+ .navbar__search-icon {
100
+ color: var(--dc-on-surface-variant);
101
+ flex-shrink: 0;
102
+ }
103
+
104
+ .navbar__search-input {
105
+ background: none;
106
+ border: none;
107
+ outline: none;
108
+ color: var(--dc-on-surface);
109
+ font-family: var(--dc-font-body);
110
+ font-size: var(--dc-body-sm);
111
+ width: 140px;
112
+ }
113
+
114
+ .navbar__search-input::placeholder {
115
+ color: var(--dc-on-surface-variant);
116
+ }
117
+
118
+ .navbar__icon-btn {
119
+ display: flex;
120
+ align-items: center;
121
+ justify-content: center;
122
+ width: 34px;
123
+ height: 34px;
124
+ background: none;
125
+ border: none;
126
+ border-radius: var(--dc-round-full);
127
+ color: var(--dc-on-surface-variant);
128
+ cursor: pointer;
129
+ transition: background var(--dc-transition-fast), color var(--dc-transition-fast);
130
+ }
131
+
132
+ .navbar__icon-btn:hover {
133
+ background: var(--dc-hover-tint-icon-md);
134
+ color: var(--dc-on-surface);
135
+ }
136
+
137
+ .navbar__avatar {
138
+ width: 30px;
139
+ height: 30px;
140
+ border-radius: var(--dc-round-full);
141
+ background: linear-gradient(135deg, var(--dc-primary), var(--dc-primary-dim));
142
+ display: flex;
143
+ align-items: center;
144
+ justify-content: center;
145
+ font-family: var(--dc-font-display);
146
+ font-size: 10px;
147
+ font-weight: 700;
148
+ color: var(--dc-on-primary);
149
+ cursor: pointer;
150
+ flex-shrink: 0;
151
+ }
@@ -0,0 +1,87 @@
1
+ import { h } from "@stencil/core";
2
+ export class DcNavbar {
3
+ constructor() {
4
+ this.logoTitle = 'The Digital Curator';
5
+ this.logoSub = 'EDITORIAL SYSTEM';
6
+ this.activeLink = 'explorer';
7
+ }
8
+ render() {
9
+ return (h("nav", { key: 'e5dbbb0cc263cb87e559918ef5cc38fb3cfde204', class: "navbar" }, h("div", { key: 'f95606c6b5af2ae3ce1cab758f7c66b2f87f515c', class: "navbar__logo" }, h("div", { key: 'd482f382cddea590500018f3deb56bce9a3d1c14', class: "navbar__logo-icon" }, h("svg", { key: 'bc8261415478dfb00d86a6d39a0325c0cf93c95e', width: "22", height: "22", viewBox: "0 0 22 22", fill: "none" }, h("rect", { key: 'f13bf8767bbc656a51fbb2a93fb1cc47facaa35c', x: "2", y: "2", width: "8", height: "8", rx: "1.5", fill: "var(--dc-primary)", opacity: "0.9" }), h("rect", { key: 'd0424e2e33f7e13e2bf7a8058495f29bf9f6db8c', x: "12", y: "2", width: "8", height: "8", rx: "1.5", fill: "var(--dc-primary)", opacity: "0.55" }), h("rect", { key: '7c60e5ad1f221330882f26bedcdb091b4ce1d52a', x: "2", y: "12", width: "8", height: "8", rx: "1.5", fill: "var(--dc-primary)", opacity: "0.55" }), h("rect", { key: '2b513e2d6290e8879620533aa9c58ab49b1e4b32', x: "12", y: "12", width: "8", height: "8", rx: "1.5", fill: "var(--dc-primary)", opacity: "0.25" }))), h("div", { key: 'b3ca9864b28b79126c08275bca941fcf98354bc2', class: "navbar__logo-text" }, h("span", { key: 'aec2170c04b5d40cf32e5e8cfa2d860c84b002d0', class: "navbar__logo-title" }, this.logoTitle), h("span", { key: '5408c53b4aabcb10620b48d358d11ddc0f54c0b4', class: "navbar__logo-sub" }, this.logoSub))), h("div", { key: 'b0a4f7d1c7b157f87f3139bc9d97404c34108811', class: "navbar__nav" }, h("a", { key: '2db3c86508d3221e2f536121bc34be11a3f19d81', class: `navbar__link ${this.activeLink === 'explorer' ? 'navbar__link--active' : ''}` }, "Design System Explorer"), h("a", { key: '969e28208f8ed5b827c0a4bbe5ca355a3a7e04f2', class: "navbar__link" }, "Docs"), h("a", { key: 'b6acdb1baee7870c2cb58bb45aae9eb7d17a2159', class: "navbar__link" }, "Updates"), h("a", { key: 'dd590a967203a59a0f5200af95d11f0069da51a1', class: "navbar__link" }, "Community")), h("div", { key: 'c19d890b314017cdd5d4322e3b57ce5f4ae2051e', class: "navbar__actions" }, h("div", { key: '2cb9d4b178f73f85deda72a3a1838afbafae4bd0', class: "navbar__search" }, h("svg", { key: 'c2b50cfbb95a8910f18ed9a65771c4231f821640', class: "navbar__search-icon", width: "13", height: "13", viewBox: "0 0 24 24", fill: "none" }, h("circle", { key: 'b0844d54bdf2488c0f1631e2f1303b917fcbcafa', cx: "11", cy: "11", r: "8", stroke: "currentColor", "stroke-width": "2.5" }), h("path", { key: '8ae57987a06dc1adb093340e48b5507317b00159', d: "m21 21-4.35-4.35", stroke: "currentColor", "stroke-width": "2.5", "stroke-linecap": "round" })), h("input", { key: '4effb00bb7c2a3b6bd136cc579586953f7d138a4', class: "navbar__search-input", placeholder: "Search components..." })), h("button", { key: '87f4634d7546500bbfdd2a8e47654d745b1e6fe3', class: "navbar__icon-btn", "aria-label": "Notifications" }, h("svg", { key: '0cf8c5e5b4cd9856d17b377f456316ebe2293fb0', width: "17", height: "17", viewBox: "0 0 24 24", fill: "none" }, h("path", { key: '89b2fe4434e9a3021ff3c7d8782dba2956334ebb', d: "M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }), h("path", { key: '74aabe2b9558adb47eb460d995993423517c2baa', d: "M13.73 21a2 2 0 0 1-3.46 0", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round" }))), h("button", { key: '225948849df6c7f5b117a00a5a1ecf812c02b099', class: "navbar__icon-btn", "aria-label": "Settings" }, h("svg", { key: '841e4d3fa5a43c128a225cf242a9abe6958d4b09', width: "17", height: "17", viewBox: "0 0 24 24", fill: "none" }, h("circle", { key: 'df0e9409049654cab0aaf04a377f0ef829efa0be', cx: "12", cy: "12", r: "3", stroke: "currentColor", "stroke-width": "2" }), h("path", { key: 'f4e5f61b6706fc390c7221584dcd9e3ae6d86b9a', d: "M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z", stroke: "currentColor", "stroke-width": "2" }))), h("div", { key: '5fa98a2166329a036352f71f8f5e68e1d053460b', class: "navbar__avatar" }, "DC"))));
10
+ }
11
+ static get is() { return "luster-navbar"; }
12
+ static get encapsulation() { return "shadow"; }
13
+ static get originalStyleUrls() {
14
+ return {
15
+ "$": ["luster-navbar.css"]
16
+ };
17
+ }
18
+ static get styleUrls() {
19
+ return {
20
+ "$": ["luster-navbar.css"]
21
+ };
22
+ }
23
+ static get properties() {
24
+ return {
25
+ "logoTitle": {
26
+ "type": "string",
27
+ "mutable": false,
28
+ "complexType": {
29
+ "original": "string",
30
+ "resolved": "string",
31
+ "references": {}
32
+ },
33
+ "required": false,
34
+ "optional": false,
35
+ "docs": {
36
+ "tags": [],
37
+ "text": ""
38
+ },
39
+ "getter": false,
40
+ "setter": false,
41
+ "reflect": false,
42
+ "attribute": "logo-title",
43
+ "defaultValue": "'The Digital Curator'"
44
+ },
45
+ "logoSub": {
46
+ "type": "string",
47
+ "mutable": false,
48
+ "complexType": {
49
+ "original": "string",
50
+ "resolved": "string",
51
+ "references": {}
52
+ },
53
+ "required": false,
54
+ "optional": false,
55
+ "docs": {
56
+ "tags": [],
57
+ "text": ""
58
+ },
59
+ "getter": false,
60
+ "setter": false,
61
+ "reflect": false,
62
+ "attribute": "logo-sub",
63
+ "defaultValue": "'EDITORIAL SYSTEM'"
64
+ },
65
+ "activeLink": {
66
+ "type": "string",
67
+ "mutable": false,
68
+ "complexType": {
69
+ "original": "string",
70
+ "resolved": "string",
71
+ "references": {}
72
+ },
73
+ "required": false,
74
+ "optional": false,
75
+ "docs": {
76
+ "tags": [],
77
+ "text": ""
78
+ },
79
+ "getter": false,
80
+ "setter": false,
81
+ "reflect": false,
82
+ "attribute": "active-link",
83
+ "defaultValue": "'explorer'"
84
+ }
85
+ };
86
+ }
87
+ }
@@ -0,0 +1,41 @@
1
+ import { html } from "lit";
2
+ const meta = {
3
+ title: 'Navigation/Navbar',
4
+ tags: ['autodocs'],
5
+ parameters: {
6
+ docs: {
7
+ description: {
8
+ component: 'Barra de navegação superior com logo, links e ações. Props: `logo-title`, `logo-sub`, `active-link`.',
9
+ },
10
+ },
11
+ layout: 'fullscreen',
12
+ },
13
+ argTypes: {
14
+ logoTitle: { control: 'text', description: 'Título do logo' },
15
+ logoSub: { control: 'text', description: 'Subtítulo do logo' },
16
+ activeLink: {
17
+ control: 'select',
18
+ options: ['explorer', 'docs', 'updates', 'community'],
19
+ description: 'Link ativo',
20
+ },
21
+ },
22
+ args: {
23
+ logoTitle: 'The Digital Curator',
24
+ logoSub: 'EDITORIAL SYSTEM',
25
+ activeLink: 'explorer',
26
+ },
27
+ };
28
+ export default meta;
29
+ const render = (args) => html `
30
+ <luster-navbar
31
+ logo-title="${args.logoTitle}"
32
+ logo-sub="${args.logoSub}"
33
+ active-link="${args.activeLink}"
34
+ ></luster-navbar>
35
+ `;
36
+ export const Default = { render };
37
+ export const CustomBrand = {
38
+ name: 'Custom Brand',
39
+ args: { logoTitle: 'Luster DS', logoSub: 'DESIGN SYSTEM' },
40
+ render,
41
+ };
@@ -0,0 +1,89 @@
1
+ :host { display: block; }
2
+
3
+ .profile-card {
4
+ display: flex;
5
+ flex-direction: column;
6
+ align-items: center;
7
+ gap: var(--dc-space-4);
8
+ padding: var(--dc-space-6);
9
+ background: var(--dc-surface-container-high);
10
+ border-radius: var(--dc-round-4);
11
+ text-align: center;
12
+ }
13
+
14
+ .profile-card__avatar {
15
+ width: 80px;
16
+ height: 80px;
17
+ border-radius: var(--dc-round-full);
18
+ background: linear-gradient(135deg, var(--dc-primary-dim), var(--dc-secondary-container));
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ flex-shrink: 0;
23
+ overflow: hidden;
24
+ box-shadow: 0 0 0 3px var(--dc-focus-ring);
25
+ }
26
+
27
+ .profile-card__avatar-img {
28
+ width: 100%;
29
+ height: 100%;
30
+ object-fit: cover;
31
+ }
32
+
33
+ .profile-card__avatar-initials {
34
+ font-family: var(--dc-font-display);
35
+ font-size: var(--dc-headline-sm);
36
+ font-weight: 800;
37
+ color: var(--dc-on-primary);
38
+ }
39
+
40
+ .profile-card__info {
41
+ display: flex;
42
+ flex-direction: column;
43
+ gap: var(--dc-space-1);
44
+ }
45
+
46
+ .profile-card__name {
47
+ font-family: var(--dc-font-display);
48
+ font-size: var(--dc-title-lg);
49
+ font-weight: 700;
50
+ color: var(--dc-on-surface);
51
+ margin: 0;
52
+ letter-spacing: var(--dc-tracking-tight);
53
+ }
54
+
55
+ .profile-card__role {
56
+ font-size: var(--dc-body-sm);
57
+ color: var(--dc-on-surface-variant);
58
+ }
59
+
60
+ .profile-card__stats {
61
+ display: flex;
62
+ gap: var(--dc-space-6);
63
+ width: 100%;
64
+ justify-content: center;
65
+ padding: var(--dc-space-3) 0;
66
+ border-top: 1px solid var(--dc-border-faint);
67
+ border-bottom: 1px solid var(--dc-border-faint);
68
+ }
69
+
70
+ .profile-card__stat {
71
+ display: flex;
72
+ flex-direction: column;
73
+ align-items: center;
74
+ gap: 2px;
75
+ }
76
+
77
+ .profile-card__stat-value {
78
+ font-family: var(--dc-font-display);
79
+ font-size: var(--dc-headline-sm);
80
+ font-weight: 800;
81
+ color: var(--dc-on-surface);
82
+ }
83
+
84
+ .profile-card__stat-label {
85
+ font-size: var(--dc-label-sm);
86
+ color: var(--dc-on-surface-variant);
87
+ text-transform: uppercase;
88
+ letter-spacing: var(--dc-tracking-wide);
89
+ }