@duskmoon-dev/core 1.18.6 → 1.19.1

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/README.md CHANGED
@@ -442,4 +442,4 @@ See [specs/004-oklch-color-system/quickstart.md](./specs/004-oklch-color-system/
442
442
 
443
443
  MIT
444
444
 
445
- <!-- release 33708081247 -->
445
+ <!-- release 34185365594 -->
@@ -18,7 +18,7 @@ var __toESM = (mod, isNodeMode, target) => {
18
18
  return cached;
19
19
  }
20
20
  target = mod != null ? __create(__getProtoOf(mod)) : {};
21
- const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
21
+ const to = isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
22
22
  if (mod && typeof mod === "object" || typeof mod === "function") {
23
23
  for (let key of __getOwnPropNames(mod))
24
24
  if (!__hasOwnProp.call(to, key))
@@ -69,7 +69,7 @@ __export(exports_tailwind_plugin, {
69
69
  duskmoonPlugin: () => duskmoonPlugin
70
70
  });
71
71
  module.exports = __toCommonJS(exports_tailwind_plugin);
72
- var import_plugin = __toESM(require("tailwindcss/plugin"));
72
+ var import_plugin = __toESM(require("tailwindcss/plugin"), 1);
73
73
  var themeColors = {
74
74
  primary: "var(--color-primary)",
75
75
  "primary-content": "var(--color-primary-content)",
@@ -20,6 +20,26 @@
20
20
  visibility: visible;
21
21
  }
22
22
 
23
+ /* Native surfaces keep the browser's closed state and reset UA dialog/popover geometry. */
24
+ :where(.bottomsheet[popover], dialog.bottomsheet) {
25
+ inset: auto;
26
+ margin: 0;
27
+ width: auto;
28
+ height: auto;
29
+ padding: 0;
30
+ border: 0;
31
+ color: var(--color-on-surface);
32
+ max-width: none;
33
+ max-height: none;
34
+ overflow: auto;
35
+ box-sizing: border-box;
36
+ }
37
+
38
+ .bottomsheet[popover]:not(:popover-open),
39
+ dialog.bottomsheet:not([open]) {
40
+ display: none;
41
+ }
42
+
23
43
  /* Base Bottom Sheet */
24
44
  .bottomsheet {
25
45
  position: fixed;
@@ -321,8 +341,57 @@
321
341
  }
322
342
  }
323
343
 
344
+ /* Native state overrides legacy transforms without requiring class toggles. */
345
+ .bottomsheet[popover],
346
+ dialog.bottomsheet {
347
+ transition: transform 300ms ease-out, opacity 300ms ease-out,
348
+ display 300ms allow-discrete, overlay 300ms allow-discrete;
349
+ opacity: 0;
350
+ }
351
+
352
+ .bottomsheet[popover]:popover-open,
353
+ dialog.bottomsheet[open] {
354
+ display: flex;
355
+ transform: translate(0, 0);
356
+ opacity: 1;
357
+ }
358
+
359
+ dialog.bottomsheet::backdrop {
360
+ background-color: color-mix(in srgb, var(--color-scrim) 50%, transparent);
361
+ opacity: 0;
362
+ transition: opacity 300ms ease-out, display 300ms allow-discrete,
363
+ overlay 300ms allow-discrete;
364
+ }
365
+
366
+ dialog.bottomsheet[open]::backdrop {
367
+ opacity: 1;
368
+ }
369
+
370
+ @starting-style {
371
+ .bottomsheet[popover]:popover-open,
372
+ dialog.bottomsheet[open],
373
+ dialog.bottomsheet[open]::backdrop {
374
+ opacity: 0;
375
+ }
376
+
377
+ .bottomsheet[popover]:popover-open,
378
+ dialog.bottomsheet[open] {
379
+ transform: translateY(100%);
380
+ }
381
+
382
+ @media (min-width: 768px) {
383
+ .bottomsheet-responsive[popover]:popover-open,
384
+ dialog.bottomsheet-responsive[open] {
385
+ transform: translateX(100%);
386
+ }
387
+ }
388
+ }
389
+
324
390
  /* Reduce Motion */
325
391
  @media (prefers-reduced-motion: reduce) {
392
+ .bottomsheet[popover],
393
+ dialog.bottomsheet,
394
+ dialog.bottomsheet::backdrop,
326
395
  .bottomsheet,
327
396
  .bottomsheet-backdrop,
328
397
  .bottomsheet-close,
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Console Page Layout
3
+ * Responsive application shell with expanded, icon-rail, and hidden sidebar states.
4
+ */
5
+
6
+ @layer components {
7
+ .console-page {
8
+ --console-page-sidebar-width: 17.5rem;
9
+ --console-page-sidebar-compact-width: 5rem;
10
+ container-type: inline-size;
11
+ container-name: console-page;
12
+ width: 100%;
13
+ min-width: 0;
14
+ min-height: var(--console-page-min-height, 100dvh);
15
+ background-color: var(--color-surface);
16
+ color: var(--color-on-surface);
17
+ }
18
+
19
+ .console-page-frame {
20
+ display: grid;
21
+ min-height: inherit;
22
+ grid-template-areas:
23
+ "appbar"
24
+ "main";
25
+ grid-template-columns: minmax(0, 1fr);
26
+ grid-template-rows: auto minmax(0, 1fr);
27
+ transition: grid-template-columns 240ms ease-out;
28
+ }
29
+
30
+ .console-page-appbar {
31
+ grid-area: appbar;
32
+ z-index: 20;
33
+ }
34
+
35
+ .console-page-sidebar {
36
+ display: none;
37
+ grid-area: sidebar;
38
+ min-width: 0;
39
+ overflow: hidden;
40
+ background-color: var(--color-surface-container-low);
41
+ border-inline-end: 1px solid var(--color-outline-variant);
42
+ transition:
43
+ opacity 160ms ease-out,
44
+ visibility 160ms ease-out;
45
+ }
46
+
47
+ .console-page-sidebar-header,
48
+ .console-page-sidebar-footer {
49
+ display: flex;
50
+ align-items: center;
51
+ gap: 0.75rem;
52
+ min-height: 4rem;
53
+ padding: 0.75rem 1rem;
54
+ flex-shrink: 0;
55
+ }
56
+
57
+ .console-page-sidebar-header {
58
+ border-bottom: 1px solid var(--color-outline-variant);
59
+ }
60
+
61
+ .console-page-sidebar-body {
62
+ flex: 1;
63
+ min-height: 0;
64
+ overflow-y: auto;
65
+ overflow-x: hidden;
66
+ padding-block: 0.5rem;
67
+ }
68
+
69
+ .console-page-sidebar-footer {
70
+ border-top: 1px solid var(--color-outline-variant);
71
+ }
72
+
73
+ .console-page-main {
74
+ grid-area: main;
75
+ min-width: 0;
76
+ overflow: auto;
77
+ padding: clamp(1rem, 4cqi, 2.5rem);
78
+ background-color: var(--color-surface);
79
+ }
80
+
81
+ .console-page-nav-label {
82
+ overflow: hidden;
83
+ text-overflow: ellipsis;
84
+ white-space: nowrap;
85
+ }
86
+
87
+ .console-page-sidebar-toggle {
88
+ display: none;
89
+ }
90
+
91
+ .console-page-menu-trigger {
92
+ display: inline-flex;
93
+ }
94
+
95
+ .console-page-mobile-menu {
96
+ max-width: min(20rem, calc(100cqi - 2rem));
97
+ }
98
+
99
+ @container console-page (min-width: 48rem) {
100
+ .console-page-frame {
101
+ grid-template-areas:
102
+ "appbar appbar"
103
+ "sidebar main";
104
+ grid-template-columns: var(--console-page-sidebar-width) minmax(0, 1fr);
105
+ }
106
+
107
+ .console-page-sidebar {
108
+ display: flex;
109
+ flex-direction: column;
110
+ }
111
+
112
+ .console-page-sidebar-toggle {
113
+ display: inline-flex;
114
+ }
115
+
116
+ .console-page-menu-trigger {
117
+ display: none;
118
+ }
119
+
120
+ .console-page-mobile-menu {
121
+ display: none;
122
+ }
123
+
124
+ .console-page-sidebar-compact .console-page-frame {
125
+ grid-template-columns: var(--console-page-sidebar-compact-width) minmax(0, 1fr);
126
+ }
127
+
128
+ .console-page-sidebar-compact .console-page-nav-label {
129
+ position: absolute;
130
+ width: 1px;
131
+ height: 1px;
132
+ padding: 0;
133
+ margin: -1px;
134
+ overflow: hidden;
135
+ clip: rect(0, 0, 0, 0);
136
+ white-space: nowrap;
137
+ border: 0;
138
+ }
139
+
140
+ .console-page-sidebar-compact .console-page-sidebar-header,
141
+ .console-page-sidebar-compact .console-page-sidebar-footer {
142
+ justify-content: center;
143
+ padding-inline: 0.75rem;
144
+ }
145
+
146
+ .console-page-sidebar-compact .console-page-sidebar-body :is(.nested-menu li > a, .nested-menu li > button, .nested-menu summary) {
147
+ justify-content: center;
148
+ padding-inline: 0.75rem;
149
+ }
150
+
151
+ .console-page-sidebar-compact .console-page-sidebar-body .drawer-item {
152
+ justify-content: center;
153
+ padding-inline: 0.75rem;
154
+ }
155
+
156
+ .console-page-sidebar-compact .console-page-sidebar-body :is(.nested-menu-title, details > ul, summary::after) {
157
+ display: none;
158
+ }
159
+
160
+ .console-page-sidebar-hidden .console-page-frame {
161
+ grid-template-areas:
162
+ "appbar"
163
+ "main";
164
+ grid-template-columns: minmax(0, 1fr);
165
+ }
166
+
167
+ .console-page-sidebar-hidden .console-page-sidebar {
168
+ display: none;
169
+ }
170
+ }
171
+
172
+ @media (prefers-reduced-motion: reduce) {
173
+ .console-page-frame,
174
+ .console-page-sidebar {
175
+ transition: none;
176
+ }
177
+ }
178
+ }
@@ -20,6 +20,26 @@
20
20
  visibility: visible;
21
21
  }
22
22
 
23
+ /* Native surfaces keep the browser's closed state and reset UA dialog/popover geometry. */
24
+ :where(.drawer[popover], dialog.drawer) {
25
+ inset: auto;
26
+ margin: 0;
27
+ width: auto;
28
+ height: auto;
29
+ padding: 0;
30
+ border: 0;
31
+ color: var(--color-on-surface);
32
+ max-width: none;
33
+ max-height: none;
34
+ overflow: auto;
35
+ box-sizing: border-box;
36
+ }
37
+
38
+ .drawer[popover]:not(:popover-open),
39
+ dialog.drawer:not([open]) {
40
+ display: none;
41
+ }
42
+
23
43
  /* Base Drawer */
24
44
  .drawer {
25
45
  position: fixed;
@@ -358,8 +378,65 @@
358
378
  border-radius: 0;
359
379
  }
360
380
 
381
+ /* Native state overrides legacy transforms without requiring class toggles. */
382
+ .drawer[popover],
383
+ dialog.drawer {
384
+ transition: transform 300ms ease-out, opacity 300ms ease-out,
385
+ display 300ms allow-discrete, overlay 300ms allow-discrete;
386
+ opacity: 0;
387
+ }
388
+
389
+ .drawer[popover]:popover-open,
390
+ dialog.drawer[open] {
391
+ display: flex;
392
+ transform: translate(0, 0);
393
+ opacity: 1;
394
+ }
395
+
396
+ dialog.drawer::backdrop {
397
+ background-color: color-mix(in srgb, var(--color-scrim) 50%, transparent);
398
+ opacity: 0;
399
+ transition: opacity 300ms ease-out, display 300ms allow-discrete,
400
+ overlay 300ms allow-discrete;
401
+ }
402
+
403
+ dialog.drawer[open]::backdrop {
404
+ opacity: 1;
405
+ }
406
+
407
+ @starting-style {
408
+ .drawer[popover]:popover-open,
409
+ dialog.drawer[open],
410
+ dialog.drawer[open]::backdrop {
411
+ opacity: 0;
412
+ }
413
+
414
+ .drawer-left[popover]:popover-open,
415
+ dialog.drawer-left[open] {
416
+ transform: translateX(-100%);
417
+ }
418
+
419
+ .drawer-right[popover]:popover-open,
420
+ dialog.drawer-right[open] {
421
+ transform: translateX(100%);
422
+ }
423
+
424
+ .drawer-top[popover]:popover-open,
425
+ dialog.drawer-top[open] {
426
+ transform: translateY(-100%);
427
+ }
428
+
429
+ .drawer-bottom[popover]:popover-open,
430
+ dialog.drawer-bottom[open] {
431
+ transform: translateY(100%);
432
+ }
433
+ }
434
+
361
435
  /* Reduce Motion */
362
436
  @media (prefers-reduced-motion: reduce) {
437
+ .drawer[popover],
438
+ dialog.drawer,
439
+ dialog.drawer::backdrop,
363
440
  .drawer,
364
441
  .drawer-backdrop,
365
442
  .drawer-close,
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Home Page Layout
3
+ * App-bar-led public application shell driven by its containing width.
4
+ */
5
+
6
+ @layer components {
7
+ .home-page {
8
+ container-type: inline-size;
9
+ container-name: home-page;
10
+ width: 100%;
11
+ min-width: 0;
12
+ min-height: var(--home-page-min-height, 100dvh);
13
+ background-color: var(--color-surface);
14
+ color: var(--color-on-surface);
15
+ }
16
+
17
+ .home-page-frame {
18
+ display: grid;
19
+ min-height: inherit;
20
+ grid-template-rows: auto minmax(0, 1fr) auto;
21
+ }
22
+
23
+ .home-page-header {
24
+ z-index: 10;
25
+ }
26
+
27
+ .home-page-nav {
28
+ display: none;
29
+ align-items: center;
30
+ gap: 0.25rem;
31
+ }
32
+
33
+ .home-page-actions {
34
+ display: none;
35
+ align-items: center;
36
+ gap: 0.25rem;
37
+ }
38
+
39
+ .home-page-menu-trigger {
40
+ display: inline-flex;
41
+ }
42
+
43
+ .home-page-mobile-menu {
44
+ max-width: min(20rem, calc(100cqi - 2rem));
45
+ }
46
+
47
+ .home-page-main {
48
+ min-width: 0;
49
+ }
50
+
51
+ .home-page-content {
52
+ width: min(100%, 80rem);
53
+ margin-inline: auto;
54
+ padding: clamp(1rem, 5cqi, 3rem);
55
+ }
56
+
57
+ .home-page-hero {
58
+ display: grid;
59
+ align-items: center;
60
+ grid-template-columns: minmax(0, 1fr);
61
+ gap: clamp(2rem, 5cqi, 4rem);
62
+ }
63
+
64
+ .home-page-footer {
65
+ border-top: 1px solid var(--color-outline-variant);
66
+ background-color: var(--color-surface-container-low);
67
+ }
68
+
69
+ @container home-page (min-width: 48rem) {
70
+ .home-page-nav {
71
+ display: flex;
72
+ }
73
+
74
+ .home-page-actions {
75
+ display: flex;
76
+ }
77
+
78
+ .home-page-menu-trigger {
79
+ display: none;
80
+ }
81
+
82
+ .home-page-mobile-menu {
83
+ display: none;
84
+ }
85
+
86
+ .home-page-content {
87
+ padding-inline: clamp(2rem, 5cqi, 5rem);
88
+ }
89
+
90
+ .home-page-hero {
91
+ grid-template-columns: minmax(0, 1fr) minmax(18rem, 0.8fr);
92
+ }
93
+ }
94
+ }