@roadlittledawn/docs-design-system-react 0.8.0 → 0.10.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.
package/dist/styles.css CHANGED
@@ -259,12 +259,45 @@
259
259
  --dds-list-connector-line: #eceef2; /* gray-200 */
260
260
  --dds-list-text: #374151; /* gray-700 */
261
261
 
262
+ /* Table */
263
+ --dds-table-margin: 1rem 0;
264
+ --dds-table-radius: 0.5rem; /* rounded-lg */
265
+ --dds-table-font-size: 0.875rem; /* text-sm */
266
+ --dds-table-bg: transparent;
267
+ --dds-table-text: #374151; /* gray-700 */
268
+ --dds-table-border: #e5e7eb; /* gray-200 */
269
+ --dds-table-row-border: #e5e7eb; /* gray-200 */
270
+ --dds-table-row-hover-bg: #f9fafb; /* gray-50 */
271
+ --dds-table-header-bg: #f3f4f6; /* gray-100 */
272
+ --dds-table-sticky-bg: var(--dds-table-header-bg); /* used as sticky header background; should be opaque */
273
+ --dds-table-sticky-hover-bg: var(--dds-table-header-hover-bg); /* used as sticky sortable header hover; should be opaque */
274
+ --dds-table-header-text: #111827; /* gray-900 */
275
+ --dds-table-header-font-size: 0.8125rem; /* ~13px */
276
+ --dds-table-header-border: #d1d5db; /* gray-300 */
277
+ --dds-table-header-hover-bg: #e5e7eb; /* gray-200 */
278
+ --dds-table-header-hover-text: #111827; /* gray-900 */
279
+ --dds-table-header-active-text: #1d4ed8; /* blue-700 */
280
+ --dds-table-cell-padding: 0.75rem 1rem;
281
+ --dds-table-focus-ring: #3b82f6; /* blue-500 */
282
+
262
283
  /* Grid */
263
284
  --dds-grid-gap-sm: 1rem; /* gap-4 */
264
285
  --dds-grid-gap-md: 1.5rem; /* gap-6 */
265
286
  --dds-grid-gap-lg: 2.5rem; /* gap-10 */
266
287
  --dds-grid-divider-color: #e5e7eb; /* gray-200 */
267
288
  --dds-grid-sticky-top: 1rem;
289
+
290
+ /* Breadcrumb */
291
+ --dds-breadcrumb-font-size-sm: 0.75rem; /* text-xs */
292
+ --dds-breadcrumb-font-size-md: 0.875rem; /* text-sm */
293
+ --dds-breadcrumb-gap: 0.375rem;
294
+ --dds-breadcrumb-link-color: #6b7280; /* gray-500 */
295
+ --dds-breadcrumb-link-color-hover: #111827; /* gray-900 */
296
+ --dds-breadcrumb-current-color: #111827; /* gray-900 */
297
+ --dds-breadcrumb-current-weight: 500;
298
+ --dds-breadcrumb-delimiter-color: #9ca3af; /* gray-400 */
299
+ --dds-breadcrumb-ellipsis-radius: 0.25rem; /* rounded */
300
+ --dds-breadcrumb-ellipsis-hover-bg: #f3f4f6; /* gray-100 */
268
301
  }
269
302
  /* ==========================================================================
270
303
  Dark Mode Tokens
@@ -427,8 +460,31 @@
427
460
  --dds-list-connector-line: #353a42; /* gray-600 */
428
461
  --dds-list-text: #e5e7eb; /* gray-200 */
429
462
 
463
+ /* Table */
464
+ --dds-table-bg: transparent;
465
+ --dds-table-text: #d1d5db; /* gray-300 */
466
+ --dds-table-border: #4b5563; /* gray-600 */
467
+ --dds-table-row-border: #374151; /* gray-700 */
468
+ --dds-table-row-hover-bg: rgba(255, 255, 255, 0.04);
469
+ --dds-table-header-bg: rgba(255, 255, 255, 0.06);
470
+ --dds-table-sticky-bg: #1f2937; /* gray-800 — opaque fallback for sticky header */
471
+ --dds-table-sticky-hover-bg: #263347; /* slightly lighter opaque hover for sticky header */
472
+ --dds-table-header-text: #f9fafb; /* gray-50 */
473
+ --dds-table-header-border: #4b5563; /* gray-600 */
474
+ --dds-table-header-hover-bg: rgba(255, 255, 255, 0.1);
475
+ --dds-table-header-hover-text: #f9fafb; /* gray-50 */
476
+ --dds-table-header-active-text: #93c5fd; /* blue-300 */
477
+ --dds-table-focus-ring: #60a5fa; /* blue-400 */
478
+
430
479
  /* Grid */
431
480
  --dds-grid-divider-color: #4b5563; /* gray-600 */
481
+
482
+ /* Breadcrumb */
483
+ --dds-breadcrumb-link-color: #9ca3af; /* gray-400 */
484
+ --dds-breadcrumb-link-color-hover: #f9fafb; /* gray-50 */
485
+ --dds-breadcrumb-current-color: #e5e7eb; /* gray-200 */
486
+ --dds-breadcrumb-delimiter-color: #6b7280; /* gray-500 */
487
+ --dds-breadcrumb-ellipsis-hover-bg: rgba(255, 255, 255, 0.08);
432
488
  }
433
489
  /* Auto dark mode — follows OS preference, opt-out with .dds-light */
434
490
  @media (prefers-color-scheme: dark) {
@@ -586,8 +642,31 @@
586
642
  --dds-list-connector-line: #353a42; /* gray-600 */
587
643
  --dds-list-text: #e5e7eb; /* gray-200 */
588
644
 
645
+ /* Table */
646
+ --dds-table-bg: transparent;
647
+ --dds-table-text: #d1d5db;
648
+ --dds-table-border: #4b5563;
649
+ --dds-table-row-border: #374151;
650
+ --dds-table-row-hover-bg: rgba(255, 255, 255, 0.04);
651
+ --dds-table-header-bg: rgba(255, 255, 255, 0.06);
652
+ --dds-table-sticky-bg: #1f2937;
653
+ --dds-table-sticky-hover-bg: #263347;
654
+ --dds-table-header-text: #f9fafb;
655
+ --dds-table-header-border: #4b5563;
656
+ --dds-table-header-hover-bg: rgba(255, 255, 255, 0.1);
657
+ --dds-table-header-hover-text: #f9fafb;
658
+ --dds-table-header-active-text: #93c5fd;
659
+ --dds-table-focus-ring: #60a5fa;
660
+
589
661
  /* Grid */
590
662
  --dds-grid-divider-color: #4b5563; /* gray-600 */
663
+
664
+ /* Breadcrumb */
665
+ --dds-breadcrumb-link-color: #9ca3af; /* gray-400 */
666
+ --dds-breadcrumb-link-color-hover: #f9fafb; /* gray-50 */
667
+ --dds-breadcrumb-current-color: #e5e7eb; /* gray-200 */
668
+ --dds-breadcrumb-delimiter-color: #6b7280; /* gray-500 */
669
+ --dds-breadcrumb-ellipsis-hover-bg: rgba(255, 255, 255, 0.08);
591
670
  }
592
671
  }
593
672
  /* Explicit dark mode via data attribute (overrides OS preference) */
@@ -726,6 +805,29 @@
726
805
  --dds-popover-eyebrow-color: #9ca3af;
727
806
  --dds-popover-link-color: #60a5fa;
728
807
  --dds-popover-link-color-hover: #93c5fd;
808
+
809
+ /* Table */
810
+ --dds-table-bg: transparent;
811
+ --dds-table-text: #d1d5db;
812
+ --dds-table-border: #4b5563;
813
+ --dds-table-row-border: #374151;
814
+ --dds-table-row-hover-bg: rgba(255, 255, 255, 0.04);
815
+ --dds-table-header-bg: rgba(255, 255, 255, 0.06);
816
+ --dds-table-sticky-bg: #1f2937;
817
+ --dds-table-sticky-hover-bg: #263347;
818
+ --dds-table-header-text: #f9fafb;
819
+ --dds-table-header-border: #4b5563;
820
+ --dds-table-header-hover-bg: rgba(255, 255, 255, 0.1);
821
+ --dds-table-header-hover-text: #f9fafb;
822
+ --dds-table-header-active-text: #93c5fd;
823
+ --dds-table-focus-ring: #60a5fa;
824
+
825
+ /* Breadcrumb */
826
+ --dds-breadcrumb-link-color: #9ca3af; /* gray-400 */
827
+ --dds-breadcrumb-link-color-hover: #f9fafb; /* gray-50 */
828
+ --dds-breadcrumb-current-color: #e5e7eb; /* gray-200 */
829
+ --dds-breadcrumb-delimiter-color: #6b7280; /* gray-500 */
830
+ --dds-breadcrumb-ellipsis-hover-bg: rgba(255, 255, 255, 0.08);
729
831
  }
730
832
  /* Import PrismJS theme */
731
833
  /**
@@ -1845,6 +1947,125 @@ a.no-text-decoration {
1845
1947
  }
1846
1948
  }
1847
1949
  }
1950
+ /* Table wrapper — enables responsive horizontal scroll */
1951
+ .dds-table-wrapper {
1952
+ width: 100%;
1953
+ overflow-x: auto;
1954
+ -webkit-overflow-scrolling: touch;
1955
+ border: 1px solid var(--dds-table-border);
1956
+ border-radius: var(--dds-table-radius);
1957
+ margin: var(--dds-table-margin);
1958
+ }
1959
+ /* When stickyHeader is true the wrapper also scrolls vertically so that
1960
+ position:sticky on th elements activates within the same scroll container. */
1961
+ .dds-table-scrollable {
1962
+ overflow-y: auto;
1963
+ }
1964
+ /* Remove outer border for borderless variant — only row borders remain */
1965
+ .dds-table-borderless {
1966
+ border: none;
1967
+ border-radius: 0;
1968
+ }
1969
+ .dds-table {
1970
+ width: 100%;
1971
+ border-collapse: collapse;
1972
+ font-size: var(--dds-table-font-size);
1973
+ color: var(--dds-table-text);
1974
+ background-color: var(--dds-table-bg);
1975
+ }
1976
+ /* -----------------------------------------------------------------------
1977
+ Header
1978
+ ----------------------------------------------------------------------- */
1979
+ .dds-table-head {
1980
+ background-color: var(--dds-table-header-bg);
1981
+ }
1982
+ .dds-table-head-sticky th {
1983
+ position: sticky;
1984
+ top: 0;
1985
+ z-index: 2;
1986
+ background-color: var(--dds-table-sticky-bg, var(--dds-table-header-bg));
1987
+ }
1988
+ /* When headerBg is set via inline style, the sticky cells must inherit it */
1989
+ .dds-table-head-sticky[style] th {
1990
+ background-color: inherit;
1991
+ }
1992
+ /* Sticky sortable header hover: keep background opaque to avoid bleed-through
1993
+ when the global .dds-table-th-sortable:hover uses a semi-transparent color. */
1994
+ .dds-table-head-sticky th.dds-table-th-sortable:hover {
1995
+ background-color: var(
1996
+ --dds-table-sticky-hover-bg,
1997
+ var(--dds-table-sticky-bg, var(--dds-table-header-bg))
1998
+ );
1999
+ }
2000
+ /* -----------------------------------------------------------------------
2001
+ Cells — shared
2002
+ ----------------------------------------------------------------------- */
2003
+ .dds-table-th,
2004
+ .dds-table-td {
2005
+ padding: var(--dds-table-cell-padding);
2006
+ text-align: left;
2007
+ vertical-align: top;
2008
+ }
2009
+ /* Alignment helpers */
2010
+ .dds-table-align-left { text-align: left; }
2011
+ .dds-table-align-center { text-align: center; }
2012
+ .dds-table-align-right { text-align: right; }
2013
+ /* -----------------------------------------------------------------------
2014
+ Header cell
2015
+ ----------------------------------------------------------------------- */
2016
+ .dds-table-th {
2017
+ font-weight: var(--dds-font-semibold);
2018
+ font-size: var(--dds-table-header-font-size);
2019
+ color: var(--dds-table-header-text);
2020
+ border-bottom: 2px solid var(--dds-table-header-border);
2021
+ white-space: nowrap;
2022
+ }
2023
+ /* Default variant: left/right column borders */
2024
+ .dds-table-wrapper:not(.dds-table-borderless) .dds-table-th + .dds-table-th,
2025
+ .dds-table-wrapper:not(.dds-table-borderless) .dds-table-td + .dds-table-td {
2026
+ border-left: 1px solid var(--dds-table-border);
2027
+ }
2028
+ /* -----------------------------------------------------------------------
2029
+ Sortable column header
2030
+ ----------------------------------------------------------------------- */
2031
+ .dds-table-th-sortable {
2032
+ cursor: pointer;
2033
+ user-select: none;
2034
+ }
2035
+ .dds-table-th-sortable:hover {
2036
+ background-color: var(--dds-table-header-hover-bg);
2037
+ color: var(--dds-table-header-hover-text);
2038
+ }
2039
+ .dds-table-th-sortable:focus-visible {
2040
+ outline: 2px solid var(--dds-table-focus-ring);
2041
+ outline-offset: -2px;
2042
+ }
2043
+ .dds-table-th-active {
2044
+ color: var(--dds-table-header-active-text);
2045
+ }
2046
+ .dds-table-th-content {
2047
+ display: inline-flex;
2048
+ align-items: center;
2049
+ gap: 0.375rem;
2050
+ }
2051
+ .dds-table-sort-icon {
2052
+ font-size: 0.75em;
2053
+ opacity: 0.7;
2054
+ flex-shrink: 0;
2055
+ }
2056
+ .dds-table-th-active .dds-table-sort-icon {
2057
+ opacity: 1;
2058
+ }
2059
+ /* -----------------------------------------------------------------------
2060
+ Body rows
2061
+ ----------------------------------------------------------------------- */
2062
+ .dds-table-body .dds-table-row {
2063
+ border-top: 1px solid var(--dds-table-row-border);
2064
+ transition: background-color 150ms ease-in-out;
2065
+ }
2066
+ .dds-table-body .dds-table-row:hover {
2067
+ background-color: var(--dds-table-row-hover-bg);
2068
+ }
1848
2069
  /* =============================================================================
1849
2070
  Grid — multi-column layout component
1850
2071
  ============================================================================= */
@@ -1948,4 +2169,107 @@ a.no-text-decoration {
1948
2169
  position: static;
1949
2170
  }
1950
2171
  }
2172
+ /* ============================================================
2173
+ Breadcrumb component
2174
+ ============================================================ */
2175
+ .dds-breadcrumb {
2176
+ font-size: var(--dds-breadcrumb-font-size-md);
2177
+ line-height: var(--dds-line-height-tight);
2178
+ }
2179
+ /* Size variants */
2180
+ .dds-breadcrumb--sm {
2181
+ font-size: var(--dds-breadcrumb-font-size-sm);
2182
+ }
2183
+ /* The ordered list */
2184
+ .dds-breadcrumb-list {
2185
+ display: flex;
2186
+ flex-wrap: wrap;
2187
+ align-items: center;
2188
+ list-style: none;
2189
+ margin: 0;
2190
+ padding: 0;
2191
+ gap: var(--dds-breadcrumb-gap);
2192
+ }
2193
+ /* Scroll mode: single row with horizontal scroll (mobile only) */
2194
+ @media (max-width: 640px) {
2195
+ .dds-breadcrumb--scroll .dds-breadcrumb-list {
2196
+ flex-wrap: nowrap;
2197
+ overflow-x: auto;
2198
+ -webkit-overflow-scrolling: touch;
2199
+ scrollbar-width: none; /* Firefox */
2200
+ }
2201
+
2202
+ .dds-breadcrumb--scroll .dds-breadcrumb-list::-webkit-scrollbar {
2203
+ display: none;
2204
+ }
2205
+ }
2206
+ /* Individual segment items */
2207
+ .dds-breadcrumb-item {
2208
+ display: flex;
2209
+ align-items: center;
2210
+ gap: var(--dds-breadcrumb-gap);
2211
+ white-space: nowrap;
2212
+ }
2213
+ /* Linked segments */
2214
+ .dds-breadcrumb-link {
2215
+ color: var(--dds-breadcrumb-link-color);
2216
+ text-decoration: none;
2217
+ transition: color 150ms ease;
2218
+ }
2219
+ a.dds-breadcrumb-link:hover {
2220
+ color: var(--dds-breadcrumb-link-color-hover);
2221
+ text-decoration: underline;
2222
+ }
2223
+ /* Current page segment */
2224
+ .dds-breadcrumb-current {
2225
+ color: var(--dds-breadcrumb-current-color);
2226
+ font-weight: var(--dds-breadcrumb-current-weight);
2227
+ }
2228
+ /* Delimiter characters — aria-hidden in markup */
2229
+ .dds-breadcrumb-delimiter {
2230
+ color: var(--dds-breadcrumb-delimiter-color);
2231
+ user-select: none;
2232
+ flex-shrink: 0;
2233
+ }
2234
+ /* Ellipsis expand button */
2235
+ .dds-breadcrumb-ellipsis {
2236
+ display: inline-flex;
2237
+ align-items: center;
2238
+ background: none;
2239
+ border: none;
2240
+ cursor: pointer;
2241
+ color: var(--dds-breadcrumb-link-color);
2242
+ font-size: inherit;
2243
+ padding: 0.1em 0.3em;
2244
+ line-height: 1;
2245
+ border-radius: var(--dds-breadcrumb-ellipsis-radius);
2246
+ transition: color 150ms ease, background-color 150ms ease;
2247
+ }
2248
+ .dds-breadcrumb-ellipsis:hover {
2249
+ color: var(--dds-breadcrumb-link-color-hover);
2250
+ background-color: var(--dds-breadcrumb-ellipsis-hover-bg);
2251
+ }
2252
+ .dds-breadcrumb-ellipsis:focus-visible {
2253
+ outline: 2px solid var(--dds-breadcrumb-link-color-hover);
2254
+ outline-offset: 2px;
2255
+ }
2256
+ /* ============================================================
2257
+ Collapsible behaviour
2258
+ ============================================================ */
2259
+ /* On desktop the ellipsis is always hidden — show all items */
2260
+ .dds-breadcrumb--collapsible .dds-breadcrumb-item--ellipsis {
2261
+ display: none;
2262
+ }
2263
+ /* On narrow viewports: hide middle items and show ellipsis when not expanded */
2264
+ @media (max-width: 640px) {
2265
+ .dds-breadcrumb--collapsible:not([data-expanded="true"])
2266
+ .dds-breadcrumb-item--middle {
2267
+ display: none;
2268
+ }
2269
+
2270
+ .dds-breadcrumb--collapsible:not([data-expanded="true"])
2271
+ .dds-breadcrumb-item--ellipsis {
2272
+ display: flex;
2273
+ }
2274
+ }
1951
2275
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roadlittledawn/docs-design-system-react",
3
- "version": "0.8.0",
3
+ "version": "0.10.0",
4
4
  "license": "MIT",
5
5
  "description": "React components for documentation design system",
6
6
  "repository": {
@@ -11,7 +11,8 @@
11
11
  "main": "dist/index.js",
12
12
  "types": "dist/index.d.ts",
13
13
  "files": [
14
- "dist"
14
+ "dist",
15
+ "USAGE.md"
15
16
  ],
16
17
  "scripts": {
17
18
  "build": "tsc && npm run build:css",