dalila 1.10.0 → 1.10.2

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.
@@ -30,6 +30,12 @@ const TAG_ALIASES = {
30
30
  "d-table-wrapper": "div", "d-table": "table",
31
31
  "d-pagination": "nav", "d-page": "button", "d-page-ellipsis": "span",
32
32
  "d-breadcrumb": "ol", "d-breadcrumb-item": "li",
33
+ "d-nav-bar": "nav", "d-nav-brand": "a", "d-nav-links": "div", "d-nav-link": "a",
34
+ "d-side-bar": "aside", "d-side-bar-header": "div", "d-side-bar-sections": "div",
35
+ "d-side-bar-inner": "div", "d-side-bar-footer": "div", "d-side-bar-avatar": "span",
36
+ "d-side-bar-top": "div", "d-side-bar-brand": "a", "d-side-bar-logo": "span", "d-side-bar-meta": "div",
37
+ "d-side-bar-name": "span", "d-side-bar-subtitle": "span", "d-side-bar-toggle": "button",
38
+ "d-side-bar-section": "details", "d-side-bar-title": "summary", "d-side-bar-links": "div", "d-side-bar-link": "a",
33
39
  "d-separator": "hr", "d-separator-label": "div",
34
40
  "d-skeleton": "div", "d-loading": "div", "d-spinner": "span",
35
41
  "d-empty": "div", "d-empty-icon": "div", "d-empty-title": "h3", "d-empty-text": "p",
@@ -72,6 +78,12 @@ const TAG_DEFAULT_CLASS = {
72
78
  "d-table-wrapper": "d-table-wrapper", "d-table": "d-table",
73
79
  "d-pagination": "d-pagination", "d-page": "d-page", "d-page-ellipsis": "d-page-ellipsis",
74
80
  "d-breadcrumb": "d-breadcrumb", "d-breadcrumb-item": "d-breadcrumb-item",
81
+ "d-nav-bar": "d-nav-bar", "d-nav-brand": "d-nav-brand", "d-nav-links": "d-nav-links", "d-nav-link": "d-nav-link",
82
+ "d-side-bar": "d-side-bar", "d-side-bar-header": "d-side-bar-header", "d-side-bar-sections": "d-side-bar-sections",
83
+ "d-side-bar-inner": "d-side-bar-inner", "d-side-bar-footer": "d-side-bar-footer", "d-side-bar-avatar": "d-side-bar-avatar",
84
+ "d-side-bar-top": "d-side-bar-top", "d-side-bar-brand": "d-side-bar-brand", "d-side-bar-logo": "d-side-bar-logo", "d-side-bar-meta": "d-side-bar-meta",
85
+ "d-side-bar-name": "d-side-bar-name", "d-side-bar-subtitle": "d-side-bar-subtitle", "d-side-bar-toggle": "d-side-bar-toggle",
86
+ "d-side-bar-section": "d-side-bar-section", "d-side-bar-title": "d-side-bar-title", "d-side-bar-links": "d-side-bar-links", "d-side-bar-link": "d-side-bar-link",
75
87
  "d-separator": "d-separator", "d-separator-label": "d-separator-label",
76
88
  "d-skeleton": "d-skeleton", "d-loading": "d-loading", "d-spinner": "d-spinner",
77
89
  "d-empty": "d-empty", "d-empty-icon": "d-empty-icon", "d-empty-title": "d-empty-title", "d-empty-text": "d-empty-text",
@@ -125,6 +137,7 @@ const TAG_UPGRADE_RULES = {
125
137
  "d-calendar-nav": { defaultType: "button" },
126
138
  "d-calendar-day": { defaultType: "button" },
127
139
  "d-combobox-input": { defaultType: "text" },
140
+ "d-side-bar-toggle": { defaultType: "button" },
128
141
  };
129
142
  // ── Tag upgrade engine ──────────────────────────────────────────────
130
143
  function upgradeDalilaTags(root) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dalila",
3
- "version": "1.10.0",
3
+ "version": "1.10.2",
4
4
  "description": "DOM-first reactive framework based on signals",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -35,6 +35,8 @@
35
35
  @import "../table/table.css";
36
36
  @import "../pagination/pagination.css";
37
37
  @import "../breadcrumb/breadcrumb.css";
38
+ @import "../nav-bar/nav-bar.css";
39
+ @import "../side-bar/side-bar.css";
38
40
  @import "../separator/separator.css";
39
41
  @import "../skeleton/skeleton.css";
40
42
  @import "../spinner/spinner.css";
@@ -0,0 +1,75 @@
1
+ /* Dalila UI — Nav Bar */
2
+
3
+ .d-nav-bar {
4
+ display: flex;
5
+ align-items: center;
6
+ justify-content: space-between;
7
+ gap: var(--d-space-4);
8
+ width: 100%;
9
+ padding: var(--d-space-3) var(--d-space-4);
10
+ border: 1px solid var(--d-border-color);
11
+ border-radius: var(--d-radius-lg);
12
+ background: var(--d-surface);
13
+ }
14
+
15
+ .d-nav-brand {
16
+ display: inline-flex;
17
+ align-items: center;
18
+ gap: var(--d-space-2);
19
+ font-family: var(--d-font-sans);
20
+ font-size: var(--d-text-base);
21
+ font-weight: var(--d-font-semibold);
22
+ color: var(--d-text-primary);
23
+ text-decoration: none;
24
+ white-space: nowrap;
25
+ }
26
+
27
+ .d-nav-links {
28
+ display: flex;
29
+ align-items: center;
30
+ gap: var(--d-space-1);
31
+ flex-wrap: wrap;
32
+ }
33
+
34
+ .d-nav-link {
35
+ display: inline-flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ min-height: 2rem;
39
+ padding: var(--d-space-1) var(--d-space-3);
40
+ border-radius: var(--d-radius-md);
41
+ font-family: var(--d-font-sans);
42
+ font-size: var(--d-text-sm);
43
+ font-weight: var(--d-font-medium);
44
+ color: var(--d-text-secondary);
45
+ text-decoration: none;
46
+ transition:
47
+ background var(--d-duration-fast) var(--d-ease),
48
+ color var(--d-duration-fast) var(--d-ease);
49
+ }
50
+
51
+ .d-nav-link:hover {
52
+ color: var(--d-text-primary);
53
+ background: var(--d-surface-raised);
54
+ }
55
+
56
+ .d-nav-link[aria-current="page"],
57
+ .d-nav-link.active {
58
+ color: #fff;
59
+ background: var(--d-accent);
60
+ }
61
+
62
+ @media (max-width: 640px) {
63
+ .d-nav-bar {
64
+ flex-direction: column;
65
+ align-items: stretch;
66
+ }
67
+
68
+ .d-nav-links {
69
+ width: 100%;
70
+ }
71
+
72
+ .d-nav-link {
73
+ flex: 1 1 auto;
74
+ }
75
+ }
@@ -0,0 +1,470 @@
1
+ /* Dalila UI — Side Bar */
2
+
3
+ .d-side-bar {
4
+ display: block;
5
+ box-sizing: border-box;
6
+ width: 18rem;
7
+ max-width: 18rem;
8
+ min-height: 22.75rem;
9
+ padding: var(--d-space-3);
10
+ border: 1px solid var(--d-border-color);
11
+ border-radius: var(--d-radius-xl);
12
+ background: var(--d-surface);
13
+ transition:
14
+ width var(--d-duration-slow) var(--d-ease),
15
+ max-width var(--d-duration-slow) var(--d-ease),
16
+ padding var(--d-duration) var(--d-ease),
17
+ transform var(--d-duration-slow) var(--d-ease),
18
+ opacity var(--d-duration) var(--d-ease),
19
+ visibility var(--d-duration) var(--d-ease),
20
+ box-shadow var(--d-duration) var(--d-ease);
21
+ }
22
+
23
+ .d-side-bar-shell {
24
+ position: relative;
25
+ display: inline-grid;
26
+ grid-template-columns: max-content 2.75rem;
27
+ column-gap: var(--d-space-3);
28
+ justify-self: start;
29
+ align-self: start;
30
+ width: fit-content;
31
+ }
32
+
33
+ .d-side-bar-rail {
34
+ position: relative;
35
+ display: flex;
36
+ align-items: flex-start;
37
+ justify-content: center;
38
+ width: 2.75rem;
39
+ min-height: 100%;
40
+ padding-top: calc(var(--d-space-4) + 1px);
41
+ }
42
+
43
+ .d-side-bar-rail::before {
44
+ content: "";
45
+ position: absolute;
46
+ inset: 0 auto 0 50%;
47
+ width: 1px;
48
+ background: color-mix(in srgb, var(--d-border-color) 72%, transparent);
49
+ transform: translateX(-50%);
50
+ }
51
+
52
+ .d-side-bar-floating-toggle {
53
+ position: relative;
54
+ display: inline-flex;
55
+ align-items: center;
56
+ justify-content: center;
57
+ width: 2.25rem;
58
+ height: 2.25rem;
59
+ border: 1px solid var(--d-border-color);
60
+ border-radius: var(--d-radius-lg);
61
+ background: color-mix(in srgb, var(--d-surface-card) 88%, var(--d-surface-raised));
62
+ color: var(--d-text-secondary);
63
+ box-shadow: var(--d-shadow-sm);
64
+ cursor: pointer;
65
+ z-index: 2;
66
+ transition:
67
+ background var(--d-duration-fast) var(--d-ease),
68
+ border-color var(--d-duration-fast) var(--d-ease),
69
+ color var(--d-duration-fast) var(--d-ease),
70
+ box-shadow var(--d-duration-fast) var(--d-ease);
71
+ }
72
+
73
+ .d-side-bar-floating-toggle:hover {
74
+ background: var(--d-surface-card);
75
+ border-color: color-mix(in srgb, var(--d-border-color) 50%, var(--d-accent) 50%);
76
+ color: var(--d-text-primary);
77
+ }
78
+
79
+ .d-side-bar-floating-toggle:focus-visible {
80
+ outline: none;
81
+ border-color: var(--d-accent);
82
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--d-accent) 18%, transparent);
83
+ }
84
+
85
+ .d-side-bar-toggle-icon {
86
+ width: 1rem;
87
+ height: 1rem;
88
+ stroke: currentColor;
89
+ fill: none;
90
+ stroke-width: 1.9;
91
+ stroke-linecap: round;
92
+ stroke-linejoin: round;
93
+ }
94
+
95
+ .d-side-bar-floating-toggle .d-side-bar-toggle-icon-expand {
96
+ display: none;
97
+ }
98
+
99
+ .d-side-bar-floating-toggle.collapsed .d-side-bar-toggle-icon-expand {
100
+ display: block;
101
+ }
102
+
103
+ .d-side-bar-floating-toggle.collapsed .d-side-bar-toggle-icon-collapse {
104
+ display: none;
105
+ }
106
+
107
+ .d-side-bar-backdrop {
108
+ position: fixed;
109
+ inset: 0;
110
+ display: block;
111
+ padding: 0;
112
+ border: 0;
113
+ background: var(--d-surface-overlay);
114
+ opacity: 0;
115
+ pointer-events: none;
116
+ transition: opacity var(--d-duration) var(--d-ease);
117
+ z-index: calc(var(--d-z-overlay) - 1);
118
+ }
119
+
120
+ .d-side-bar-backdrop.visible {
121
+ opacity: 1;
122
+ pointer-events: auto;
123
+ }
124
+
125
+ .d-side-bar-inner {
126
+ display: flex;
127
+ flex-direction: column;
128
+ min-height: 100%;
129
+ }
130
+
131
+ .d-side-bar-top {
132
+ display: flex;
133
+ align-items: center;
134
+ justify-content: space-between;
135
+ gap: var(--d-space-2);
136
+ margin-bottom: var(--d-space-3);
137
+ }
138
+
139
+ .d-side-bar-brand {
140
+ display: inline-flex;
141
+ align-items: center;
142
+ gap: var(--d-space-3);
143
+ min-width: 0;
144
+ color: inherit;
145
+ text-decoration: none;
146
+ }
147
+
148
+ .d-side-bar-logo {
149
+ display: inline-flex;
150
+ align-items: center;
151
+ justify-content: center;
152
+ width: 2.25rem;
153
+ height: 2.25rem;
154
+ border-radius: var(--d-radius-md);
155
+ background: var(--d-primary-600);
156
+ color: var(--d-primary-50);
157
+ font-size: var(--d-text-base);
158
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--d-primary-50) 20%, transparent);
159
+ }
160
+
161
+ .d-side-bar-meta {
162
+ min-width: 0;
163
+ }
164
+
165
+ .d-side-bar-name {
166
+ display: block;
167
+ font-family: var(--d-font-sans);
168
+ font-size: var(--d-text-sm);
169
+ font-weight: var(--d-font-semibold);
170
+ color: var(--d-text-primary);
171
+ line-height: 1.3;
172
+ white-space: nowrap;
173
+ overflow: hidden;
174
+ text-overflow: ellipsis;
175
+ }
176
+
177
+ .d-side-bar-subtitle {
178
+ display: block;
179
+ font-family: var(--d-font-sans);
180
+ font-size: var(--d-text-xs);
181
+ color: var(--d-text-tertiary);
182
+ line-height: 1.3;
183
+ white-space: nowrap;
184
+ overflow: hidden;
185
+ text-overflow: ellipsis;
186
+ }
187
+
188
+ .d-side-bar-toggle {
189
+ display: inline-flex;
190
+ align-items: center;
191
+ justify-content: center;
192
+ width: 2rem;
193
+ height: 2rem;
194
+ border: 1px solid var(--d-border-color);
195
+ border-radius: var(--d-radius-md);
196
+ background: transparent;
197
+ color: var(--d-text-secondary);
198
+ cursor: pointer;
199
+ font-family: var(--d-font-sans);
200
+ font-size: var(--d-text-sm);
201
+ line-height: 1;
202
+ transition:
203
+ background var(--d-duration-fast) var(--d-ease),
204
+ color var(--d-duration-fast) var(--d-ease);
205
+ }
206
+
207
+ .d-side-bar-toggle:hover {
208
+ background: var(--d-surface-raised);
209
+ color: var(--d-text-primary);
210
+ }
211
+
212
+ .d-side-bar-toggle:focus-visible {
213
+ outline: none;
214
+ box-shadow: inset 0 0 0 2px var(--d-accent);
215
+ }
216
+
217
+ .d-side-bar-header {
218
+ margin-bottom: var(--d-space-3);
219
+ padding: 0 var(--d-space-2);
220
+ font-family: var(--d-font-sans);
221
+ font-size: var(--d-text-xs);
222
+ font-weight: var(--d-font-semibold);
223
+ letter-spacing: 0.08em;
224
+ text-transform: uppercase;
225
+ color: var(--d-text-tertiary);
226
+ }
227
+
228
+ .d-side-bar-sections {
229
+ display: flex;
230
+ flex-direction: column;
231
+ gap: var(--d-space-1);
232
+ }
233
+
234
+ .d-side-bar-section {
235
+ border-radius: var(--d-radius-md);
236
+ overflow: hidden;
237
+ }
238
+
239
+ .d-side-bar-title {
240
+ display: flex;
241
+ align-items: center;
242
+ justify-content: space-between;
243
+ width: 100%;
244
+ min-height: 2.25rem;
245
+ padding: var(--d-space-2) var(--d-space-3);
246
+ font-family: var(--d-font-sans);
247
+ font-size: var(--d-text-sm);
248
+ font-weight: var(--d-font-medium);
249
+ color: var(--d-text-primary);
250
+ cursor: pointer;
251
+ list-style: none;
252
+ user-select: none;
253
+ transition: background var(--d-duration-fast) var(--d-ease);
254
+ border-radius: var(--d-radius-md);
255
+ }
256
+
257
+ .d-side-bar-title:hover {
258
+ background: var(--d-surface-raised);
259
+ }
260
+
261
+ .d-side-bar-section[open] > .d-side-bar-title,
262
+ .d-side-bar-section.open > .d-side-bar-title {
263
+ border-radius: var(--d-radius-md);
264
+ }
265
+
266
+ .d-side-bar-title::-webkit-details-marker {
267
+ display: none;
268
+ }
269
+
270
+ .d-side-bar-title::after {
271
+ content: "";
272
+ width: 0.45rem;
273
+ height: 0.45rem;
274
+ border-right: 2px solid var(--d-text-tertiary);
275
+ border-bottom: 2px solid var(--d-text-tertiary);
276
+ transform: rotate(45deg);
277
+ transition: transform var(--d-duration) var(--d-ease);
278
+ flex-shrink: 0;
279
+ }
280
+
281
+ .d-side-bar-section[open] > .d-side-bar-title::after,
282
+ .d-side-bar-section.open > .d-side-bar-title::after {
283
+ transform: rotate(-135deg);
284
+ }
285
+
286
+ .d-side-bar-links {
287
+ display: grid;
288
+ gap: var(--d-space-1);
289
+ padding: var(--d-space-2) var(--d-space-2) var(--d-space-2) var(--d-space-4);
290
+ transition: padding var(--d-duration) var(--d-ease);
291
+ }
292
+
293
+ .d-side-bar-link {
294
+ display: inline-flex;
295
+ align-items: center;
296
+ gap: var(--d-space-2);
297
+ width: 100%;
298
+ min-height: 2rem;
299
+ padding: var(--d-space-1) var(--d-space-2);
300
+ border-radius: var(--d-radius-sm);
301
+ font-family: var(--d-font-sans);
302
+ font-size: var(--d-text-sm);
303
+ color: var(--d-text-secondary);
304
+ position: relative;
305
+ text-decoration: none;
306
+ transition:
307
+ background var(--d-duration-fast) var(--d-ease),
308
+ color var(--d-duration-fast) var(--d-ease);
309
+ }
310
+
311
+ .d-side-bar-link:hover {
312
+ color: var(--d-text-primary);
313
+ background: color-mix(in srgb, var(--d-accent) 12%, transparent);
314
+ }
315
+
316
+ .d-side-bar-link[aria-current="page"],
317
+ .d-side-bar-link.active {
318
+ color: var(--d-accent);
319
+ background: color-mix(in srgb, var(--d-accent) 16%, transparent);
320
+ }
321
+
322
+ .d-side-bar-link-icon {
323
+ display: inline-flex;
324
+ align-items: center;
325
+ justify-content: center;
326
+ width: 1.125rem;
327
+ flex-shrink: 0;
328
+ }
329
+
330
+ .d-side-bar-link-label {
331
+ white-space: nowrap;
332
+ overflow: hidden;
333
+ text-overflow: ellipsis;
334
+ }
335
+
336
+ .d-side-bar.collapsed {
337
+ width: 4.25rem;
338
+ max-width: 4.25rem;
339
+ padding: var(--d-space-3) var(--d-space-2);
340
+ }
341
+
342
+ .d-side-bar.collapsed .d-side-bar-top {
343
+ margin-bottom: var(--d-space-2);
344
+ justify-content: center;
345
+ }
346
+
347
+ .d-side-bar.collapsed .d-side-bar-meta,
348
+ .d-side-bar.collapsed .d-side-bar-header,
349
+ .d-side-bar.collapsed .d-side-bar-footer {
350
+ display: none;
351
+ }
352
+
353
+ .d-side-bar.collapsed .d-side-bar-brand {
354
+ justify-content: center;
355
+ width: 100%;
356
+ gap: 0;
357
+ }
358
+
359
+ .d-side-bar.collapsed .d-side-bar-sections {
360
+ gap: var(--d-space-2);
361
+ }
362
+
363
+ .d-side-bar.collapsed .d-side-bar-section {
364
+ width: 100%;
365
+ overflow: visible;
366
+ }
367
+
368
+ .d-side-bar.collapsed .d-side-bar-link:nth-child(n + 2) {
369
+ display: none;
370
+ }
371
+
372
+ .d-side-bar.collapsed .d-side-bar-title {
373
+ display: none;
374
+ }
375
+
376
+ .d-side-bar.collapsed .d-side-bar-links {
377
+ padding: 0;
378
+ }
379
+
380
+ .d-side-bar.collapsed .d-side-bar-link {
381
+ justify-content: center;
382
+ min-height: 2.5rem;
383
+ padding: 0;
384
+ border-radius: var(--d-radius-md);
385
+ }
386
+
387
+ .d-side-bar.collapsed .d-side-bar-link-icon {
388
+ width: 1.25rem;
389
+ font-size: var(--d-text-base);
390
+ }
391
+
392
+ .d-side-bar.collapsed .d-side-bar-link-label {
393
+ position: absolute;
394
+ width: 1px;
395
+ height: 1px;
396
+ margin: -1px;
397
+ padding: 0;
398
+ overflow: hidden;
399
+ clip: rect(0, 0, 0, 0);
400
+ white-space: nowrap;
401
+ border: 0;
402
+ }
403
+
404
+ .d-side-bar-footer {
405
+ margin-top: auto;
406
+ padding-top: var(--d-space-3);
407
+ display: flex;
408
+ justify-content: center;
409
+ }
410
+
411
+ .d-side-bar-avatar {
412
+ width: 1.9rem;
413
+ height: 1.9rem;
414
+ border-radius: 999px;
415
+ overflow: hidden;
416
+ display: inline-flex;
417
+ align-items: center;
418
+ justify-content: center;
419
+ }
420
+
421
+ .d-side-bar-avatar img {
422
+ width: 100%;
423
+ height: 100%;
424
+ object-fit: cover;
425
+ }
426
+
427
+ .d-side-bar-avatar-text {
428
+ width: 100%;
429
+ height: 100%;
430
+ display: inline-flex;
431
+ align-items: center;
432
+ justify-content: center;
433
+ font-size: 0.95rem;
434
+ background: linear-gradient(145deg, var(--d-primary-500), var(--d-accent-500));
435
+ color: #fff;
436
+ }
437
+
438
+ @media (max-width: 840px) {
439
+ .d-side-bar-mobile-shell {
440
+ display: block;
441
+ width: 100%;
442
+ }
443
+
444
+ .d-side-bar-mobile-shell .d-side-bar {
445
+ position: fixed;
446
+ inset: var(--d-space-4) auto var(--d-space-4) var(--d-space-4);
447
+ width: min(20rem, calc(100vw - (var(--d-space-4) * 2)));
448
+ max-width: calc(100vw - (var(--d-space-4) * 2));
449
+ min-height: auto;
450
+ max-height: calc(100dvh - (var(--d-space-4) * 2));
451
+ overflow-y: auto;
452
+ box-shadow: var(--d-shadow-lg);
453
+ transform: translateX(calc(-100% - var(--d-space-4)));
454
+ opacity: 0;
455
+ visibility: hidden;
456
+ pointer-events: none;
457
+ z-index: var(--d-z-overlay);
458
+ }
459
+
460
+ .d-side-bar-mobile-shell .d-side-bar.mobile-open {
461
+ transform: translateX(0);
462
+ opacity: 1;
463
+ visibility: visible;
464
+ pointer-events: auto;
465
+ }
466
+
467
+ .d-side-bar-mobile-shell .d-side-bar-rail {
468
+ display: none;
469
+ }
470
+ }
@@ -116,6 +116,7 @@
116
116
 
117
117
  --d-surface-page: var(--d-bg);
118
118
  --d-surface-card: var(--d-bg-card);
119
+ --d-surface: var(--d-surface-card);
119
120
  --d-surface-raised: var(--d-bg-elevated);
120
121
  --d-surface-overlay: rgba(0, 0, 0, 0.4);
121
122