@duskmoon-dev/core 1.2.0 → 1.3.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.
@@ -1547,6 +1547,7 @@
1547
1547
  font-size: 0.875rem;
1548
1548
  }
1549
1549
 
1550
+ /* List-based breadcrumbs (legacy) */
1550
1551
  .breadcrumbs li {
1551
1552
  display: flex;
1552
1553
  align-items: center;
@@ -1577,6 +1578,198 @@
1577
1578
  color: var(--color-on-surface-variant);
1578
1579
  }
1579
1580
 
1581
+ /* Span-based breadcrumbs */
1582
+ .breadcrumb-item {
1583
+ display: inline-flex;
1584
+ align-items: center;
1585
+ gap: 0.375rem;
1586
+ color: var(--color-on-surface-variant);
1587
+ text-decoration: none;
1588
+ transition: color 150ms ease-in-out;
1589
+ }
1590
+
1591
+ .breadcrumb-item:hover {
1592
+ color: var(--color-on-surface);
1593
+ }
1594
+
1595
+ .breadcrumb-item-active {
1596
+ color: var(--color-on-surface);
1597
+ font-weight: 500;
1598
+ pointer-events: none;
1599
+ }
1600
+
1601
+ .breadcrumb-link {
1602
+ display: inline-flex;
1603
+ align-items: center;
1604
+ gap: 0.375rem;
1605
+ color: var(--color-on-surface-variant);
1606
+ text-decoration: none;
1607
+ transition: color 150ms ease-in-out;
1608
+ cursor: pointer;
1609
+ }
1610
+
1611
+ .breadcrumb-link:hover {
1612
+ color: var(--color-primary);
1613
+ text-decoration: underline;
1614
+ }
1615
+
1616
+ .breadcrumb-link:focus-visible {
1617
+ outline: 2px solid var(--color-primary);
1618
+ outline-offset: 2px;
1619
+ border-radius: 0.25rem;
1620
+ }
1621
+
1622
+ /* Separator - Default shows "/" */
1623
+ .breadcrumb-separator {
1624
+ display: inline-flex;
1625
+ align-items: center;
1626
+ color: var(--color-on-surface-variant);
1627
+ font-size: 0.875rem;
1628
+ user-select: none;
1629
+ opacity: 0.6;
1630
+ }
1631
+
1632
+ .breadcrumb-separator::before {
1633
+ content: "/";
1634
+ }
1635
+
1636
+ /* Separator Variants */
1637
+ .breadcrumbs-slash .breadcrumb-separator::before {
1638
+ content: "/";
1639
+ }
1640
+
1641
+ .breadcrumbs-chevron .breadcrumb-separator::before {
1642
+ content: "›";
1643
+ font-size: 1.125rem;
1644
+ }
1645
+
1646
+ .breadcrumbs-dot .breadcrumb-separator::before {
1647
+ content: "•";
1648
+ }
1649
+
1650
+ .breadcrumbs-arrow .breadcrumb-separator::before {
1651
+ content: "→";
1652
+ }
1653
+
1654
+ .breadcrumbs-pipe .breadcrumb-separator::before {
1655
+ content: "|";
1656
+ }
1657
+
1658
+ /* Breadcrumb Icon */
1659
+ .breadcrumb-icon {
1660
+ display: inline-flex;
1661
+ align-items: center;
1662
+ justify-content: center;
1663
+ width: 1rem;
1664
+ height: 1rem;
1665
+ flex-shrink: 0;
1666
+ }
1667
+
1668
+ .breadcrumb-icon svg {
1669
+ width: 100%;
1670
+ height: 100%;
1671
+ }
1672
+
1673
+ /* Home Icon Link */
1674
+ .breadcrumb-home {
1675
+ display: inline-flex;
1676
+ align-items: center;
1677
+ justify-content: center;
1678
+ color: var(--color-on-surface-variant);
1679
+ text-decoration: none;
1680
+ transition: color 150ms ease-in-out;
1681
+ }
1682
+
1683
+ .breadcrumb-home:hover {
1684
+ color: var(--color-primary);
1685
+ }
1686
+
1687
+ .breadcrumb-home-icon {
1688
+ width: 1.125rem;
1689
+ height: 1.125rem;
1690
+ }
1691
+
1692
+ /* Collapsed Breadcrumbs (with ellipsis) */
1693
+ .breadcrumb-ellipsis {
1694
+ display: inline-flex;
1695
+ align-items: center;
1696
+ justify-content: center;
1697
+ padding: 0.25rem 0.5rem;
1698
+ color: var(--color-on-surface-variant);
1699
+ background-color: transparent;
1700
+ border: none;
1701
+ border-radius: 0.25rem;
1702
+ cursor: pointer;
1703
+ transition: background-color 150ms ease-in-out;
1704
+ }
1705
+
1706
+ .breadcrumb-ellipsis::before {
1707
+ content: "...";
1708
+ }
1709
+
1710
+ .breadcrumb-ellipsis:hover {
1711
+ background-color: color-mix(in oklch, var(--color-on-surface) 8%, transparent);
1712
+ }
1713
+
1714
+ /* Color Variants */
1715
+ .breadcrumbs-primary .breadcrumb-link:hover,
1716
+ .breadcrumbs-primary .breadcrumb-item-active {
1717
+ color: var(--color-primary);
1718
+ }
1719
+
1720
+ .breadcrumbs-secondary .breadcrumb-link:hover,
1721
+ .breadcrumbs-secondary .breadcrumb-item-active {
1722
+ color: var(--color-secondary);
1723
+ }
1724
+
1725
+ .breadcrumbs-tertiary .breadcrumb-link:hover,
1726
+ .breadcrumbs-tertiary .breadcrumb-item-active {
1727
+ color: var(--color-tertiary);
1728
+ }
1729
+
1730
+ /* Size Variants */
1731
+ .breadcrumbs-sm {
1732
+ font-size: 0.75rem;
1733
+ gap: 0.375rem;
1734
+ }
1735
+
1736
+ .breadcrumbs-sm .breadcrumb-icon,
1737
+ .breadcrumbs-sm .breadcrumb-home-icon {
1738
+ width: 0.875rem;
1739
+ height: 0.875rem;
1740
+ }
1741
+
1742
+ .breadcrumbs-lg {
1743
+ font-size: 1rem;
1744
+ gap: 0.625rem;
1745
+ }
1746
+
1747
+ .breadcrumbs-lg .breadcrumb-icon,
1748
+ .breadcrumbs-lg .breadcrumb-home-icon {
1749
+ width: 1.25rem;
1750
+ height: 1.25rem;
1751
+ }
1752
+
1753
+ /* Contained Variant (with background) */
1754
+ .breadcrumbs-contained {
1755
+ padding: 0.75rem 1rem;
1756
+ background-color: var(--color-surface-container);
1757
+ border-radius: 0.5rem;
1758
+ }
1759
+
1760
+ /* No Wrap Variant */
1761
+ .breadcrumbs-nowrap {
1762
+ flex-wrap: nowrap;
1763
+ overflow-x: auto;
1764
+ }
1765
+
1766
+ /* Disabled Breadcrumb Item */
1767
+ .breadcrumb-item-disabled {
1768
+ opacity: 0.38;
1769
+ pointer-events: none;
1770
+ cursor: not-allowed;
1771
+ }
1772
+
1580
1773
  /* Tabs */
1581
1774
  .tabs {
1582
1775
  display: flex;
@@ -12038,18 +12231,93 @@
12038
12231
  @layer components {
12039
12232
  /* Base Collapse */
12040
12233
  .collapse {
12234
+ display: flex;
12235
+ flex-direction: column;
12236
+ border-radius: 0.5rem;
12237
+ background-color: var(--color-surface);
12238
+ /* Override Tailwind's visibility: collapse utility */
12239
+ visibility: visible !important;
12240
+ }
12241
+
12242
+ /* Collapse Trigger */
12243
+ .collapse-trigger {
12244
+ display: flex;
12245
+ align-items: center;
12246
+ justify-content: space-between;
12247
+ width: 100%;
12248
+ padding: 0.75rem 1rem;
12249
+ font-size: 1rem;
12250
+ font-weight: 500;
12251
+ color: var(--color-on-surface);
12252
+ background-color: transparent;
12253
+ border: none;
12254
+ cursor: pointer;
12255
+ transition: background-color 150ms ease-in-out;
12256
+ text-align: left;
12257
+ }
12258
+
12259
+ .collapse-trigger:hover {
12260
+ background-color: var(--color-surface-container);
12261
+ }
12262
+
12263
+ .collapse-trigger:focus-visible {
12264
+ outline: 2px solid var(--color-primary);
12265
+ outline-offset: -2px;
12266
+ }
12267
+
12268
+ /* Collapse Icon */
12269
+ .collapse-icon {
12270
+ display: flex;
12271
+ align-items: center;
12272
+ justify-content: center;
12273
+ width: 1.5rem;
12274
+ height: 1.5rem;
12275
+ transition: transform 300ms ease-in-out;
12276
+ flex-shrink: 0;
12277
+ }
12278
+
12279
+ /* Collapse Content - hidden by default */
12280
+ .collapse-content {
12041
12281
  display: grid;
12042
12282
  grid-template-rows: 0fr;
12043
12283
  transition: grid-template-rows 300ms ease-in-out;
12284
+ overflow: hidden;
12044
12285
  }
12045
12286
 
12046
- .collapse.show {
12287
+ .collapse-content > * {
12288
+ overflow: hidden;
12289
+ padding: 0 1rem;
12290
+ }
12291
+
12292
+ /* Open State */
12293
+ .collapse-open .collapse-content {
12047
12294
  grid-template-rows: 1fr;
12048
12295
  }
12049
12296
 
12050
- /* Collapse Content */
12051
- .collapse-content {
12052
- overflow: hidden;
12297
+ .collapse-open .collapse-content > * {
12298
+ padding: 0 1rem 1rem;
12299
+ }
12300
+
12301
+ .collapse-open .collapse-icon {
12302
+ transform: rotate(180deg);
12303
+ }
12304
+
12305
+ /* Closed State (explicit) */
12306
+ .collapse-closed .collapse-content {
12307
+ grid-template-rows: 0fr;
12308
+ }
12309
+
12310
+ /* Legacy show class for backwards compatibility */
12311
+ .collapse.show .collapse-content {
12312
+ grid-template-rows: 1fr;
12313
+ }
12314
+
12315
+ .collapse.show .collapse-content > * {
12316
+ padding: 0 1rem 1rem;
12317
+ }
12318
+
12319
+ .collapse.show .collapse-icon {
12320
+ transform: rotate(180deg);
12053
12321
  }
12054
12322
 
12055
12323
  /* Collapse Inner (for padding) */
@@ -12113,9 +12381,11 @@
12113
12381
  border: 1px solid var(--color-outline-variant);
12114
12382
  border-radius: 0.75rem;
12115
12383
  overflow: hidden;
12384
+ box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);
12116
12385
  }
12117
12386
 
12118
- .collapse-card .collapse-toggle {
12387
+ .collapse-card .collapse-toggle,
12388
+ .collapse-card .collapse-trigger {
12119
12389
  width: 100%;
12120
12390
  justify-content: space-between;
12121
12391
  padding: 1rem;
@@ -12123,15 +12393,132 @@
12123
12393
  color: var(--color-on-surface);
12124
12394
  }
12125
12395
 
12126
- .collapse-card .collapse-toggle:hover {
12396
+ .collapse-card .collapse-toggle:hover,
12397
+ .collapse-card .collapse-trigger:hover {
12127
12398
  background-color: var(--color-surface-container);
12128
12399
  }
12129
12400
 
12130
- .collapse-card .collapse-inner {
12401
+ .collapse-card .collapse-inner,
12402
+ .collapse-card .collapse-content > * {
12131
12403
  padding: 0 1rem 1rem;
12132
12404
  color: var(--color-on-surface-variant);
12133
12405
  }
12134
12406
 
12407
+ /* Bordered Variant */
12408
+ .collapse-bordered {
12409
+ border: 1px solid var(--color-outline-variant);
12410
+ border-radius: 0.5rem;
12411
+ }
12412
+
12413
+ /* Ghost Variant */
12414
+ .collapse-ghost {
12415
+ background-color: transparent;
12416
+ }
12417
+
12418
+ .collapse-ghost .collapse-trigger:hover {
12419
+ background-color: color-mix(in oklch, var(--color-on-surface) 5%, transparent);
12420
+ }
12421
+
12422
+ /* Color Variants */
12423
+ .collapse-primary .collapse-trigger {
12424
+ color: var(--color-primary);
12425
+ }
12426
+
12427
+ .collapse-primary .collapse-trigger:hover {
12428
+ background-color: var(--color-primary-container);
12429
+ }
12430
+
12431
+ .collapse-secondary .collapse-trigger {
12432
+ color: var(--color-secondary);
12433
+ }
12434
+
12435
+ .collapse-secondary .collapse-trigger:hover {
12436
+ background-color: var(--color-secondary-container);
12437
+ }
12438
+
12439
+ .collapse-tertiary .collapse-trigger {
12440
+ color: var(--color-tertiary);
12441
+ }
12442
+
12443
+ .collapse-tertiary .collapse-trigger:hover {
12444
+ background-color: var(--color-tertiary-container);
12445
+ }
12446
+
12447
+ /* Size Variants */
12448
+ .collapse-sm .collapse-trigger {
12449
+ padding: 0.5rem 0.75rem;
12450
+ font-size: 0.875rem;
12451
+ }
12452
+
12453
+ .collapse-sm .collapse-content > * {
12454
+ padding: 0 0.75rem;
12455
+ }
12456
+
12457
+ .collapse-sm.collapse-open .collapse-content > * {
12458
+ padding: 0 0.75rem 0.75rem;
12459
+ }
12460
+
12461
+ .collapse-lg .collapse-trigger {
12462
+ padding: 1rem 1.25rem;
12463
+ font-size: 1.125rem;
12464
+ }
12465
+
12466
+ .collapse-lg .collapse-content > * {
12467
+ padding: 0 1.25rem;
12468
+ }
12469
+
12470
+ .collapse-lg.collapse-open .collapse-content > * {
12471
+ padding: 0 1.25rem 1.25rem;
12472
+ }
12473
+
12474
+ /* Divider Variant */
12475
+ .collapse-divider .collapse-trigger {
12476
+ border-bottom: 1px solid var(--color-outline-variant);
12477
+ }
12478
+
12479
+ .collapse-divider.collapse-open .collapse-trigger {
12480
+ border-bottom-color: var(--color-outline-variant);
12481
+ }
12482
+
12483
+ /* Disabled State */
12484
+ .collapse-disabled {
12485
+ opacity: 0.5;
12486
+ pointer-events: none;
12487
+ }
12488
+
12489
+ .collapse-disabled .collapse-trigger {
12490
+ cursor: not-allowed;
12491
+ }
12492
+
12493
+ /* Loading State */
12494
+ .collapse-loading .collapse-trigger::after {
12495
+ content: '';
12496
+ display: inline-block;
12497
+ width: 1rem;
12498
+ height: 1rem;
12499
+ margin-left: 0.5rem;
12500
+ border: 2px solid var(--color-outline);
12501
+ border-top-color: var(--color-primary);
12502
+ border-radius: 50%;
12503
+ animation: collapse-spin 0.8s linear infinite;
12504
+ }
12505
+
12506
+ @keyframes collapse-spin {
12507
+ to { transform: rotate(360deg); }
12508
+ }
12509
+
12510
+ /* Slide Animation */
12511
+ .collapse-slide .collapse-content > * {
12512
+ transform: translateY(-0.5rem);
12513
+ opacity: 0;
12514
+ transition: transform 300ms ease-in-out, opacity 200ms ease-in-out;
12515
+ }
12516
+
12517
+ .collapse-slide.collapse-open .collapse-content > * {
12518
+ transform: translateY(0);
12519
+ opacity: 1;
12520
+ }
12521
+
12135
12522
  /* Horizontal Collapse */
12136
12523
  .collapse-horizontal {
12137
12524
  display: grid;
@@ -12274,14 +12661,20 @@
12274
12661
  /* Reduce Motion */
12275
12662
  @media (prefers-reduced-motion: reduce) {
12276
12663
  .collapse,
12664
+ .collapse-content,
12665
+ .collapse-icon,
12277
12666
  .collapse-fade,
12278
12667
  .collapse-horizontal,
12279
12668
  .collapse-horizontal-fixed,
12280
12669
  .collapse-toggle-icon,
12281
12670
  .collapse-maxheight,
12282
- .collapse-animating {
12671
+ .collapse-animating,
12672
+ .collapse-slide .collapse-content > * {
12283
12673
  transition: none;
12284
12674
  }
12675
+ .collapse-loading .collapse-trigger::after {
12676
+ animation: none;
12677
+ }
12285
12678
  }
12286
12679
  }
12287
12680
 
@@ -149,6 +149,7 @@
149
149
  font-size: 0.875rem;
150
150
  }
151
151
 
152
+ /* List-based breadcrumbs (legacy) */
152
153
  .breadcrumbs li {
153
154
  display: flex;
154
155
  align-items: center;
@@ -179,6 +180,198 @@
179
180
  color: var(--color-on-surface-variant);
180
181
  }
181
182
 
183
+ /* Span-based breadcrumbs */
184
+ .breadcrumb-item {
185
+ display: inline-flex;
186
+ align-items: center;
187
+ gap: 0.375rem;
188
+ color: var(--color-on-surface-variant);
189
+ text-decoration: none;
190
+ transition: color 150ms ease-in-out;
191
+ }
192
+
193
+ .breadcrumb-item:hover {
194
+ color: var(--color-on-surface);
195
+ }
196
+
197
+ .breadcrumb-item-active {
198
+ color: var(--color-on-surface);
199
+ font-weight: 500;
200
+ pointer-events: none;
201
+ }
202
+
203
+ .breadcrumb-link {
204
+ display: inline-flex;
205
+ align-items: center;
206
+ gap: 0.375rem;
207
+ color: var(--color-on-surface-variant);
208
+ text-decoration: none;
209
+ transition: color 150ms ease-in-out;
210
+ cursor: pointer;
211
+ }
212
+
213
+ .breadcrumb-link:hover {
214
+ color: var(--color-primary);
215
+ text-decoration: underline;
216
+ }
217
+
218
+ .breadcrumb-link:focus-visible {
219
+ outline: 2px solid var(--color-primary);
220
+ outline-offset: 2px;
221
+ border-radius: 0.25rem;
222
+ }
223
+
224
+ /* Separator - Default shows "/" */
225
+ .breadcrumb-separator {
226
+ display: inline-flex;
227
+ align-items: center;
228
+ color: var(--color-on-surface-variant);
229
+ font-size: 0.875rem;
230
+ user-select: none;
231
+ opacity: 0.6;
232
+ }
233
+
234
+ .breadcrumb-separator::before {
235
+ content: "/";
236
+ }
237
+
238
+ /* Separator Variants */
239
+ .breadcrumbs-slash .breadcrumb-separator::before {
240
+ content: "/";
241
+ }
242
+
243
+ .breadcrumbs-chevron .breadcrumb-separator::before {
244
+ content: "›";
245
+ font-size: 1.125rem;
246
+ }
247
+
248
+ .breadcrumbs-dot .breadcrumb-separator::before {
249
+ content: "•";
250
+ }
251
+
252
+ .breadcrumbs-arrow .breadcrumb-separator::before {
253
+ content: "→";
254
+ }
255
+
256
+ .breadcrumbs-pipe .breadcrumb-separator::before {
257
+ content: "|";
258
+ }
259
+
260
+ /* Breadcrumb Icon */
261
+ .breadcrumb-icon {
262
+ display: inline-flex;
263
+ align-items: center;
264
+ justify-content: center;
265
+ width: 1rem;
266
+ height: 1rem;
267
+ flex-shrink: 0;
268
+ }
269
+
270
+ .breadcrumb-icon svg {
271
+ width: 100%;
272
+ height: 100%;
273
+ }
274
+
275
+ /* Home Icon Link */
276
+ .breadcrumb-home {
277
+ display: inline-flex;
278
+ align-items: center;
279
+ justify-content: center;
280
+ color: var(--color-on-surface-variant);
281
+ text-decoration: none;
282
+ transition: color 150ms ease-in-out;
283
+ }
284
+
285
+ .breadcrumb-home:hover {
286
+ color: var(--color-primary);
287
+ }
288
+
289
+ .breadcrumb-home-icon {
290
+ width: 1.125rem;
291
+ height: 1.125rem;
292
+ }
293
+
294
+ /* Collapsed Breadcrumbs (with ellipsis) */
295
+ .breadcrumb-ellipsis {
296
+ display: inline-flex;
297
+ align-items: center;
298
+ justify-content: center;
299
+ padding: 0.25rem 0.5rem;
300
+ color: var(--color-on-surface-variant);
301
+ background-color: transparent;
302
+ border: none;
303
+ border-radius: 0.25rem;
304
+ cursor: pointer;
305
+ transition: background-color 150ms ease-in-out;
306
+ }
307
+
308
+ .breadcrumb-ellipsis::before {
309
+ content: "...";
310
+ }
311
+
312
+ .breadcrumb-ellipsis:hover {
313
+ background-color: color-mix(in oklch, var(--color-on-surface) 8%, transparent);
314
+ }
315
+
316
+ /* Color Variants */
317
+ .breadcrumbs-primary .breadcrumb-link:hover,
318
+ .breadcrumbs-primary .breadcrumb-item-active {
319
+ color: var(--color-primary);
320
+ }
321
+
322
+ .breadcrumbs-secondary .breadcrumb-link:hover,
323
+ .breadcrumbs-secondary .breadcrumb-item-active {
324
+ color: var(--color-secondary);
325
+ }
326
+
327
+ .breadcrumbs-tertiary .breadcrumb-link:hover,
328
+ .breadcrumbs-tertiary .breadcrumb-item-active {
329
+ color: var(--color-tertiary);
330
+ }
331
+
332
+ /* Size Variants */
333
+ .breadcrumbs-sm {
334
+ font-size: 0.75rem;
335
+ gap: 0.375rem;
336
+ }
337
+
338
+ .breadcrumbs-sm .breadcrumb-icon,
339
+ .breadcrumbs-sm .breadcrumb-home-icon {
340
+ width: 0.875rem;
341
+ height: 0.875rem;
342
+ }
343
+
344
+ .breadcrumbs-lg {
345
+ font-size: 1rem;
346
+ gap: 0.625rem;
347
+ }
348
+
349
+ .breadcrumbs-lg .breadcrumb-icon,
350
+ .breadcrumbs-lg .breadcrumb-home-icon {
351
+ width: 1.25rem;
352
+ height: 1.25rem;
353
+ }
354
+
355
+ /* Contained Variant (with background) */
356
+ .breadcrumbs-contained {
357
+ padding: 0.75rem 1rem;
358
+ background-color: var(--color-surface-container);
359
+ border-radius: 0.5rem;
360
+ }
361
+
362
+ /* No Wrap Variant */
363
+ .breadcrumbs-nowrap {
364
+ flex-wrap: nowrap;
365
+ overflow-x: auto;
366
+ }
367
+
368
+ /* Disabled Breadcrumb Item */
369
+ .breadcrumb-item-disabled {
370
+ opacity: 0.38;
371
+ pointer-events: none;
372
+ cursor: not-allowed;
373
+ }
374
+
182
375
  /* Tabs */
183
376
  .tabs {
184
377
  display: flex;