@common-origin/design-system 3.0.0 → 3.1.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 (97) hide show
  1. package/dist/client.js +2175 -687
  2. package/dist/client.js.map +1 -1
  3. package/dist/components/atoms/Tooltip/Tooltip.d.mts +41 -0
  4. package/dist/components/atoms/Tooltip/Tooltip.d.ts +41 -0
  5. package/dist/components/atoms/Tooltip/Tooltip.mjs +204 -0
  6. package/dist/components/atoms/Tooltip/Tooltip.mjs.map +1 -0
  7. package/dist/components/atoms/Tooltip/index.d.mts +2 -0
  8. package/dist/components/atoms/Tooltip/index.d.ts +2 -0
  9. package/dist/components/atoms/index.d.mts +1 -0
  10. package/dist/components/atoms/index.d.ts +1 -0
  11. package/dist/components/index.d.mts +1 -0
  12. package/dist/components/index.d.ts +1 -0
  13. package/dist/components/molecules/ActionSheet/ActionSheet.mjs +1 -0
  14. package/dist/components/molecules/Alert/Alert.mjs +1 -1
  15. package/dist/components/molecules/ChipGroup/ChipGroup.mjs +1 -0
  16. package/dist/components/molecules/List/List.d.mts +2 -0
  17. package/dist/components/molecules/List/List.d.ts +2 -0
  18. package/dist/components/molecules/List/ListItem.d.mts +2 -0
  19. package/dist/components/molecules/List/ListItem.d.ts +2 -0
  20. package/dist/components/molecules/List/ListItem.mjs +5 -5
  21. package/dist/components/molecules/Menu/Menu.d.mts +117 -0
  22. package/dist/components/molecules/Menu/Menu.d.ts +117 -0
  23. package/dist/components/molecules/Menu/Menu.mjs +473 -0
  24. package/dist/components/molecules/Menu/Menu.mjs.map +1 -0
  25. package/dist/components/molecules/Menu/index.d.mts +2 -0
  26. package/dist/components/molecules/Menu/index.d.ts +2 -0
  27. package/dist/components/molecules/SearchField/SearchField.mjs +2 -0
  28. package/dist/components/molecules/SidebarNavItem/SidebarNavContext.d.mts +13 -0
  29. package/dist/components/molecules/SidebarNavItem/SidebarNavContext.d.ts +13 -0
  30. package/dist/components/molecules/SidebarNavItem/SidebarNavContext.mjs +13 -0
  31. package/dist/components/molecules/SidebarNavItem/SidebarNavContext.mjs.map +1 -0
  32. package/dist/components/molecules/SidebarNavItem/SidebarNavItem.d.mts +43 -0
  33. package/dist/components/molecules/SidebarNavItem/SidebarNavItem.d.ts +43 -0
  34. package/dist/components/molecules/SidebarNavItem/SidebarNavItem.mjs +148 -0
  35. package/dist/components/molecules/SidebarNavItem/SidebarNavItem.mjs.map +1 -0
  36. package/dist/components/molecules/SidebarNavItem/index.d.mts +2 -0
  37. package/dist/components/molecules/SidebarNavItem/index.d.ts +2 -0
  38. package/dist/components/molecules/SidebarNavSection/SidebarNavSection.d.mts +36 -0
  39. package/dist/components/molecules/SidebarNavSection/SidebarNavSection.d.ts +36 -0
  40. package/dist/components/molecules/SidebarNavSection/SidebarNavSection.mjs +188 -0
  41. package/dist/components/molecules/SidebarNavSection/SidebarNavSection.mjs.map +1 -0
  42. package/dist/components/molecules/SidebarNavSection/index.d.mts +2 -0
  43. package/dist/components/molecules/SidebarNavSection/index.d.ts +2 -0
  44. package/dist/components/molecules/TransactionListItem/TransactionListItem.mjs +1 -1
  45. package/dist/components/molecules/WorkspaceSwitcher/WorkspaceSwitcher.d.mts +39 -0
  46. package/dist/components/molecules/WorkspaceSwitcher/WorkspaceSwitcher.d.ts +39 -0
  47. package/dist/components/molecules/WorkspaceSwitcher/WorkspaceSwitcher.mjs +131 -0
  48. package/dist/components/molecules/WorkspaceSwitcher/WorkspaceSwitcher.mjs.map +1 -0
  49. package/dist/components/molecules/WorkspaceSwitcher/index.d.mts +2 -0
  50. package/dist/components/molecules/WorkspaceSwitcher/index.d.ts +2 -0
  51. package/dist/components/molecules/index.d.mts +4 -0
  52. package/dist/components/molecules/index.d.ts +4 -0
  53. package/dist/components/organisms/SidebarNav/SidebarNav.d.mts +52 -0
  54. package/dist/components/organisms/SidebarNav/SidebarNav.d.ts +52 -0
  55. package/dist/components/organisms/SidebarNav/SidebarNav.mjs +235 -0
  56. package/dist/components/organisms/SidebarNav/SidebarNav.mjs.map +1 -0
  57. package/dist/components/organisms/SidebarNav/index.d.mts +2 -0
  58. package/dist/components/organisms/SidebarNav/index.d.ts +2 -0
  59. package/dist/components/organisms/index.d.mts +1 -0
  60. package/dist/components/organisms/index.d.ts +1 -0
  61. package/dist/data.js +59 -9
  62. package/dist/data.js.map +1 -1
  63. package/dist/index.js +11 -0
  64. package/dist/index.js.map +1 -1
  65. package/dist/index.mjs +6 -0
  66. package/dist/index.mjs.map +1 -1
  67. package/dist/lib/floatingPosition.d.mts +43 -0
  68. package/dist/lib/floatingPosition.d.ts +43 -0
  69. package/dist/lib/floatingPosition.mjs +86 -0
  70. package/dist/lib/floatingPosition.mjs.map +1 -0
  71. package/dist/lib/keyboardFocus.d.mts +6 -0
  72. package/dist/lib/keyboardFocus.d.ts +6 -0
  73. package/dist/lib/keyboardFocus.mjs +17 -0
  74. package/dist/lib/keyboardFocus.mjs.map +1 -0
  75. package/dist/lib/useFloatingLayer.d.mts +25 -0
  76. package/dist/lib/useFloatingLayer.d.ts +25 -0
  77. package/dist/lib/useFloatingLayer.mjs +86 -0
  78. package/dist/lib/useFloatingLayer.mjs.map +1 -0
  79. package/dist/styles/icons.json +30 -1
  80. package/dist/styles/icons.json.mjs +34 -3
  81. package/dist/styles/icons.json.mjs.map +1 -1
  82. package/dist/styles/tokens.d.mts +46 -8
  83. package/dist/styles/tokens.d.ts +46 -8
  84. package/dist/styles/tokens.json +26 -7
  85. package/dist/styles/tokens.json.mjs +26 -7
  86. package/dist/styles/tokens.json.mjs.map +1 -1
  87. package/dist/tokens/index.js +26 -7
  88. package/dist/tokens/index.js.map +1 -1
  89. package/dist/tokens/index.mjs +26 -7
  90. package/dist/tokens/index.mjs.map +1 -1
  91. package/dist/tokens/styles/tokens.d.mts +46 -8
  92. package/dist/tokens/styles/tokens.d.ts +46 -8
  93. package/dist/tokens.css +35 -15
  94. package/dist/types/icons.d.mts +1 -1
  95. package/dist/types/icons.d.ts +1 -1
  96. package/dist/types/icons.mjs.map +1 -1
  97. package/package.json +2 -2
@@ -785,7 +785,7 @@ var component = {
785
785
  }
786
786
  },
787
787
  title: {
788
- typography: "500 1.125rem/1.5rem 'Inter', sans-serif",
788
+ typography: "600 1.125rem/1.5rem 'Inter', sans-serif",
789
789
  fontWeight: "600",
790
790
  lineHeight: "1.25rem"
791
791
  },
@@ -829,6 +829,14 @@ var component = {
829
829
  fontSize: "0.75rem",
830
830
  lineHeight: "1.25rem"
831
831
  },
832
+ sidebarNav: {
833
+ width: {
834
+ rail: "3.5rem",
835
+ narrow: "14rem",
836
+ "default": "16rem",
837
+ wide: "18.75rem"
838
+ }
839
+ },
832
840
  slider: {
833
841
  thumb: {
834
842
  shadow: {
@@ -987,12 +995,15 @@ var semantic = {
987
995
  "600": "1.5rem",
988
996
  "800": "2rem",
989
997
  "1200": "3rem",
998
+ "1400": "3.5rem",
990
999
  "1500": "3.75rem",
991
1000
  "1800": "4.5rem",
992
1001
  "2000": "5rem",
993
1002
  "3000": "7.5rem",
994
1003
  "4500": "11.25rem",
995
1004
  "5000": "12.5rem",
1005
+ "5600": "14rem",
1006
+ "6400": "16rem",
996
1007
  "7500": "18.75rem",
997
1008
  "9000": "22.5rem",
998
1009
  "10000": "25rem",
@@ -1004,6 +1015,11 @@ var semantic = {
1004
1015
  md: "2.5rem",
1005
1016
  lg: "3rem"
1006
1017
  },
1018
+ row: {
1019
+ sm: "2rem",
1020
+ md: "3rem",
1021
+ lg: "4.5rem"
1022
+ },
1007
1023
  overlay: {
1008
1024
  sm: "25rem",
1009
1025
  md: "35rem",
@@ -1160,12 +1176,12 @@ var semantic = {
1160
1176
  },
1161
1177
  typography: {
1162
1178
  display: "700 5rem/4.5rem 'Inter', sans-serif",
1163
- h1: "700 3rem/3rem 'Inter', sans-serif",
1164
- h2: "700 2rem/2.5rem 'Inter', sans-serif",
1165
- h3: "700 1.75rem/2.25rem 'Inter', sans-serif",
1166
- h4: "700 1.5rem/2rem 'Inter', sans-serif",
1167
- h5: "500 1.25rem/1.75rem 'Inter', sans-serif",
1168
- h6: "500 1.125rem/1.5rem 'Inter', sans-serif",
1179
+ h1: "600 3rem/3rem 'Inter', sans-serif",
1180
+ h2: "600 2rem/2.5rem 'Inter', sans-serif",
1181
+ h3: "600 1.75rem/2.25rem 'Inter', sans-serif",
1182
+ h4: "600 1.5rem/2rem 'Inter', sans-serif",
1183
+ h5: "600 1.25rem/1.75rem 'Inter', sans-serif",
1184
+ h6: "600 1.125rem/1.5rem 'Inter', sans-serif",
1169
1185
  subtitle: "500 1rem/1.5rem 'Inter', sans-serif",
1170
1186
  body: "400 1rem/1.5rem 'Inter', sans-serif",
1171
1187
  small: "400 0.875rem/1.25rem 'Inter', sans-serif",
@@ -1180,6 +1196,9 @@ var semantic = {
1180
1196
  instant: "0ms",
1181
1197
  moderate: "200ms"
1182
1198
  },
1199
+ delay: {
1200
+ hint: "500ms"
1201
+ },
1183
1202
  easing: {
1184
1203
  standard: "ease-in-out",
1185
1204
  decelerate: "ease-out",
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/types/tokens.ts","../../src/tokens.ts"],"sourcesContent":["import tokensJson from '../styles/tokens.json'\nimport type { Tokens } from '../styles/tokens'\n\n// The published types come from the generated `src/styles/tokens.ts`, which carries each token's\n// description as JSDoc and `@deprecated` on deprecated tokens (decision 0033, #199). Declaring the\n// constant with that type also keeps emitted .d.ts files free of JSON imports, which consumers can\n// only resolve with `resolveJsonModule`.\nexport const tokens: Tokens = tokensJson\n\nexport type { Tokens }\nexport type TokensBase = Tokens['base']\nexport type TokensSemantic = Tokens['semantic']\nexport type TokensComponent = Tokens['component']\n","// Tokens-only export for standalone usage\nimport { tokens } from './types/tokens'\n\nexport { tokens }\nexport default tokens\n\nexport type {\n Tokens,\n TokensBase,\n TokensSemantic,\n TokensComponent\n} from './types/tokens'\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACO,IAAM,MAAM,GAAW;;ACP9B;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/types/tokens.ts","../../src/tokens.ts"],"sourcesContent":["import tokensJson from '../styles/tokens.json'\nimport type { Tokens } from '../styles/tokens'\n\n// The published types come from the generated `src/styles/tokens.ts`, which carries each token's\n// description as JSDoc and `@deprecated` on deprecated tokens (decision 0033, #199). Declaring the\n// constant with that type also keeps emitted .d.ts files free of JSON imports, which consumers can\n// only resolve with `resolveJsonModule`.\nexport const tokens: Tokens = tokensJson\n\nexport type { Tokens }\nexport type TokensBase = Tokens['base']\nexport type TokensSemantic = Tokens['semantic']\nexport type TokensComponent = Tokens['component']\n","// Tokens-only export for standalone usage\nimport { tokens } from './types/tokens'\n\nexport { tokens }\nexport default tokens\n\nexport type {\n Tokens,\n TokensBase,\n TokensSemantic,\n TokensComponent\n} from './types/tokens'\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACO,IAAM,MAAM,GAAW;;ACP9B;;;;"}
@@ -1212,9 +1212,13 @@ export type Tokens = {
1212
1212
  };
1213
1213
  };
1214
1214
  title: {
1215
- /** Alert title style (h6), adjusted by title.fontWeight and title.lineHeight. */
1215
+ /** Alert title style (h6), adjusted by title.lineHeight. */
1216
1216
  typography: string;
1217
- /** Alert titles are semibold, heavier than h6's medium. */
1217
+ /**
1218
+ * Alert title weight.
1219
+ *
1220
+ * @deprecated h6 is semibold since decision 0050, so the title takes its weight from title.typography. Use semantic.fontWeight.semibold. Removed in 4.0.
1221
+ */
1218
1222
  fontWeight: string;
1219
1223
  /** Alert titles use a tighter line height than h6. */
1220
1224
  lineHeight: string;
@@ -1278,6 +1282,18 @@ export type Tokens = {
1278
1282
  /** Code line height. */
1279
1283
  lineHeight: string;
1280
1284
  };
1285
+ sidebarNav: {
1286
+ width: {
1287
+ /** Width of a collapsed SidebarNav, the icon rail: the tallest dense row (size.row.sm, in comfortable) with an inset on each side. */
1288
+ rail: string;
1289
+ /** Width of an expanded SidebarNav with width="narrow": short labels. */
1290
+ narrow: string;
1291
+ /** Width of an expanded SidebarNav with the default width: labels with a trailing count. */
1292
+ default: string;
1293
+ /** Width of an expanded SidebarNav with width="wide": long titles, such as chat history. */
1294
+ wide: string;
1295
+ };
1296
+ };
1281
1297
  slider: {
1282
1298
  thumb: {
1283
1299
  shadow: {
@@ -1349,7 +1365,11 @@ export type Tokens = {
1349
1365
  };
1350
1366
  };
1351
1367
  transactionListItem: {
1352
- /** Minimum height of a TransactionListItem row, so rows line up in a list. */
1368
+ /**
1369
+ * Minimum height of a TransactionListItem row, so rows line up in a list.
1370
+ *
1371
+ * @deprecated Two-line rows share semantic.size.row.lg, which follows density (decision 0051). Removed in 4.0.
1372
+ */
1353
1373
  minHeight: string;
1354
1374
  };
1355
1375
  status: {
@@ -1479,11 +1499,11 @@ export type Tokens = {
1479
1499
  fontWeight: {
1480
1500
  /** 400. Body text, captions, most UI text. */
1481
1501
  regular: string;
1482
- /** 500. Subheadings (h5, h6, subtitle), buttons, emphasis within UI text. */
1502
+ /** 500. Subtitle, buttons, emphasis within UI text. */
1483
1503
  medium: string;
1484
- /** 600. Labels and short titles that need more weight than medium (label, Alert title). */
1504
+ /** 600. Headings (h1 to h6), labels and short titles (label, Alert title). */
1485
1505
  semibold: string;
1486
- /** 700. Headings (display to h4), overline, strong indicators such as the required-field asterisk. */
1506
+ /** 700. The display heading, overline, strong indicators such as the required-field asterisk. */
1487
1507
  bold: string;
1488
1508
  };
1489
1509
  border: {
@@ -1517,6 +1537,8 @@ export type Tokens = {
1517
1537
  '800': string;
1518
1538
  /** Size step for headers and indents, such as the AccountCard header. */
1519
1539
  '1200': string;
1540
+ /** Size step for the collapsed SidebarNav rail: one icon row with an inset on each side. */
1541
+ '1400': string;
1520
1542
  /** Size step for the comfortable ListItem expanded indent. */
1521
1543
  '1500': string;
1522
1544
  /** Size step for tall rows, such as the TransactionListItem minimum height. */
@@ -1529,7 +1551,11 @@ export type Tokens = {
1529
1551
  '4500': string;
1530
1552
  /** Size step for large illustrations, such as the large EmptyState image. */
1531
1553
  '5000': string;
1532
- /** Size step for narrow column widths: AccountCard, EmptyState actions. */
1554
+ /** Size step for a narrow navigation column: the narrow SidebarNav. */
1555
+ '5600': string;
1556
+ /** Size step for a standard navigation column: the default SidebarNav. */
1557
+ '6400': string;
1558
+ /** Size step for narrow column widths: AccountCard, EmptyState actions, the wide SidebarNav, the widest a Tooltip grows. */
1533
1559
  '7500': string;
1534
1560
  /** Size step for readable text widths, such as EmptyState copy. */
1535
1561
  '9000': string;
@@ -1539,7 +1565,7 @@ export type Tokens = {
1539
1565
  '19200': string;
1540
1566
  /** Minimum pointer target for a control that's smaller to look at: its invisible hit area (WCAG 2.5.8, decision 0039). On touch screens, use touchTarget. */
1541
1567
  pointerTarget: string;
1542
- /** Minimum height of a tappable row or control on touch screens. */
1568
+ /** Invisible hit area of a small control on touch screens, such as the Slider thumb. Not a row or control height: those follow density down to pointerTarget (decision 0051). */
1543
1569
  touchTarget: string;
1544
1570
  control: {
1545
1571
  /** Minimum height of small controls: small Buttons and IconButtons, buttons inside fields (decision 0034). */
@@ -1549,6 +1575,14 @@ export type Tokens = {
1549
1575
  /** Minimum height of large controls: text fields, Dropdown, SearchField, the default Button (decision 0034). */
1550
1576
  lg: string;
1551
1577
  };
1578
+ row: {
1579
+ /** Minimum height of dense single-line rows: navigation items, menu items, dense table rows. Follows density down to the minimum pointer target (decision 0051). */
1580
+ sm: string;
1581
+ /** Minimum height of single-line list rows: ListItem and the rows built on it, such as ActionSheet actions and SearchField suggestions. Follows density (decision 0051). */
1582
+ md: string;
1583
+ /** Minimum height of two-line rows: TransactionListItem. Follows density (decision 0051). */
1584
+ lg: string;
1585
+ };
1552
1586
  overlay: {
1553
1587
  /** Width of a small Modal, and the default width or height of a Sheet. */
1554
1588
  sm: string;
@@ -1861,6 +1895,10 @@ export type Tokens = {
1861
1895
  /** The default duration for state changes and short movements, such as a menu opening. */
1862
1896
  moderate: string;
1863
1897
  };
1898
+ delay: {
1899
+ /** How long the pointer rests on a control before its Tooltip opens, so passing pointers don't open it. A wait before anything moves, not an animation duration. */
1900
+ hint: string;
1901
+ };
1864
1902
  easing: {
1865
1903
  /** Easing for change on screen: something moving or resizing in place. */
1866
1904
  standard: string;
@@ -1212,9 +1212,13 @@ export type Tokens = {
1212
1212
  };
1213
1213
  };
1214
1214
  title: {
1215
- /** Alert title style (h6), adjusted by title.fontWeight and title.lineHeight. */
1215
+ /** Alert title style (h6), adjusted by title.lineHeight. */
1216
1216
  typography: string;
1217
- /** Alert titles are semibold, heavier than h6's medium. */
1217
+ /**
1218
+ * Alert title weight.
1219
+ *
1220
+ * @deprecated h6 is semibold since decision 0050, so the title takes its weight from title.typography. Use semantic.fontWeight.semibold. Removed in 4.0.
1221
+ */
1218
1222
  fontWeight: string;
1219
1223
  /** Alert titles use a tighter line height than h6. */
1220
1224
  lineHeight: string;
@@ -1278,6 +1282,18 @@ export type Tokens = {
1278
1282
  /** Code line height. */
1279
1283
  lineHeight: string;
1280
1284
  };
1285
+ sidebarNav: {
1286
+ width: {
1287
+ /** Width of a collapsed SidebarNav, the icon rail: the tallest dense row (size.row.sm, in comfortable) with an inset on each side. */
1288
+ rail: string;
1289
+ /** Width of an expanded SidebarNav with width="narrow": short labels. */
1290
+ narrow: string;
1291
+ /** Width of an expanded SidebarNav with the default width: labels with a trailing count. */
1292
+ default: string;
1293
+ /** Width of an expanded SidebarNav with width="wide": long titles, such as chat history. */
1294
+ wide: string;
1295
+ };
1296
+ };
1281
1297
  slider: {
1282
1298
  thumb: {
1283
1299
  shadow: {
@@ -1349,7 +1365,11 @@ export type Tokens = {
1349
1365
  };
1350
1366
  };
1351
1367
  transactionListItem: {
1352
- /** Minimum height of a TransactionListItem row, so rows line up in a list. */
1368
+ /**
1369
+ * Minimum height of a TransactionListItem row, so rows line up in a list.
1370
+ *
1371
+ * @deprecated Two-line rows share semantic.size.row.lg, which follows density (decision 0051). Removed in 4.0.
1372
+ */
1353
1373
  minHeight: string;
1354
1374
  };
1355
1375
  status: {
@@ -1479,11 +1499,11 @@ export type Tokens = {
1479
1499
  fontWeight: {
1480
1500
  /** 400. Body text, captions, most UI text. */
1481
1501
  regular: string;
1482
- /** 500. Subheadings (h5, h6, subtitle), buttons, emphasis within UI text. */
1502
+ /** 500. Subtitle, buttons, emphasis within UI text. */
1483
1503
  medium: string;
1484
- /** 600. Labels and short titles that need more weight than medium (label, Alert title). */
1504
+ /** 600. Headings (h1 to h6), labels and short titles (label, Alert title). */
1485
1505
  semibold: string;
1486
- /** 700. Headings (display to h4), overline, strong indicators such as the required-field asterisk. */
1506
+ /** 700. The display heading, overline, strong indicators such as the required-field asterisk. */
1487
1507
  bold: string;
1488
1508
  };
1489
1509
  border: {
@@ -1517,6 +1537,8 @@ export type Tokens = {
1517
1537
  '800': string;
1518
1538
  /** Size step for headers and indents, such as the AccountCard header. */
1519
1539
  '1200': string;
1540
+ /** Size step for the collapsed SidebarNav rail: one icon row with an inset on each side. */
1541
+ '1400': string;
1520
1542
  /** Size step for the comfortable ListItem expanded indent. */
1521
1543
  '1500': string;
1522
1544
  /** Size step for tall rows, such as the TransactionListItem minimum height. */
@@ -1529,7 +1551,11 @@ export type Tokens = {
1529
1551
  '4500': string;
1530
1552
  /** Size step for large illustrations, such as the large EmptyState image. */
1531
1553
  '5000': string;
1532
- /** Size step for narrow column widths: AccountCard, EmptyState actions. */
1554
+ /** Size step for a narrow navigation column: the narrow SidebarNav. */
1555
+ '5600': string;
1556
+ /** Size step for a standard navigation column: the default SidebarNav. */
1557
+ '6400': string;
1558
+ /** Size step for narrow column widths: AccountCard, EmptyState actions, the wide SidebarNav, the widest a Tooltip grows. */
1533
1559
  '7500': string;
1534
1560
  /** Size step for readable text widths, such as EmptyState copy. */
1535
1561
  '9000': string;
@@ -1539,7 +1565,7 @@ export type Tokens = {
1539
1565
  '19200': string;
1540
1566
  /** Minimum pointer target for a control that's smaller to look at: its invisible hit area (WCAG 2.5.8, decision 0039). On touch screens, use touchTarget. */
1541
1567
  pointerTarget: string;
1542
- /** Minimum height of a tappable row or control on touch screens. */
1568
+ /** Invisible hit area of a small control on touch screens, such as the Slider thumb. Not a row or control height: those follow density down to pointerTarget (decision 0051). */
1543
1569
  touchTarget: string;
1544
1570
  control: {
1545
1571
  /** Minimum height of small controls: small Buttons and IconButtons, buttons inside fields (decision 0034). */
@@ -1549,6 +1575,14 @@ export type Tokens = {
1549
1575
  /** Minimum height of large controls: text fields, Dropdown, SearchField, the default Button (decision 0034). */
1550
1576
  lg: string;
1551
1577
  };
1578
+ row: {
1579
+ /** Minimum height of dense single-line rows: navigation items, menu items, dense table rows. Follows density down to the minimum pointer target (decision 0051). */
1580
+ sm: string;
1581
+ /** Minimum height of single-line list rows: ListItem and the rows built on it, such as ActionSheet actions and SearchField suggestions. Follows density (decision 0051). */
1582
+ md: string;
1583
+ /** Minimum height of two-line rows: TransactionListItem. Follows density (decision 0051). */
1584
+ lg: string;
1585
+ };
1552
1586
  overlay: {
1553
1587
  /** Width of a small Modal, and the default width or height of a Sheet. */
1554
1588
  sm: string;
@@ -1861,6 +1895,10 @@ export type Tokens = {
1861
1895
  /** The default duration for state changes and short movements, such as a menu opening. */
1862
1896
  moderate: string;
1863
1897
  };
1898
+ delay: {
1899
+ /** How long the pointer rests on a control before its Tooltip opens, so passing pointers don't open it. A wait before anything moves, not an animation duration. */
1900
+ hint: string;
1901
+ };
1864
1902
  easing: {
1865
1903
  /** Easing for change on screen: something moving or resizing in place. */
1866
1904
  standard: string;
package/dist/tokens.css CHANGED
@@ -460,9 +460,9 @@
460
460
  --co-semantic-letter-spacing-normal: var(--co-base-letter-spacing-2); /** 0: default tracking (h5, h6 and text). */
461
461
  --co-semantic-letter-spacing-wide: var(--co-base-letter-spacing-4); /** Wide tracking for small uppercase labels, such as SearchField section headers. */
462
462
  --co-semantic-font-weight-regular: var(--co-base-font-weight-2); /** 400. Body text, captions, most UI text. */
463
- --co-semantic-font-weight-medium: var(--co-base-font-weight-3); /** 500. Subheadings (h5, h6, subtitle), buttons, emphasis within UI text. */
464
- --co-semantic-font-weight-semibold: var(--co-base-font-weight-4); /** 600. Labels and short titles that need more weight than medium (label, Alert title). */
465
- --co-semantic-font-weight-bold: var(--co-base-font-weight-5); /** 700. Headings (display to h4), overline, strong indicators such as the required-field asterisk. */
463
+ --co-semantic-font-weight-medium: var(--co-base-font-weight-3); /** 500. Subtitle, buttons, emphasis within UI text. */
464
+ --co-semantic-font-weight-semibold: var(--co-base-font-weight-4); /** 600. Headings (h1 to h6), labels and short titles (label, Alert title). */
465
+ --co-semantic-font-weight-bold: var(--co-base-font-weight-5); /** 700. The display heading, overline, strong indicators such as the required-field asterisk. */
466
466
  --co-semantic-border-default: var(--co-base-border-width-1) var(--co-base-border-style-solid) var(--co-semantic-color-border-default); /** Hairline in the default border colour: dividers and decorative outlines, such as Breadcrumbs, CodeBlock and Divider. 1.53:1 on white, so never a control edge (decision 0025). */
467
467
  --co-semantic-border-focus: var(--co-base-border-width-2) var(--co-base-border-style-solid) var(--co-semantic-color-border-focus); /** The focus ring every component draws, with border.focusOffset; never blue (decision 0029). */
468
468
  --co-semantic-border-width-thin: var(--co-base-border-width-1); /** Hairline border: dividers, control edges and rings. */
@@ -476,21 +476,27 @@
476
476
  --co-semantic-size-600: var(--co-base-dimension-6); /** Size step for the medium label height, used by chips and StatusLabel. */
477
477
  --co-semantic-size-800: var(--co-base-dimension-8); /** Size step for compact rows and large labels, such as the Checkbox row. */
478
478
  --co-semantic-size-1200: var(--co-base-dimension-12); /** Size step for headers and indents, such as the AccountCard header. */
479
+ --co-semantic-size-1400: var(--co-base-dimension-14); /** Size step for the collapsed SidebarNav rail: one icon row with an inset on each side. */
479
480
  --co-semantic-size-1500: var(--co-base-dimension-15); /** Size step for the comfortable ListItem expanded indent. */
480
481
  --co-semantic-size-1800: var(--co-base-dimension-18); /** Size step for tall rows, such as the TransactionListItem minimum height. */
481
482
  --co-semantic-size-2000: var(--co-base-dimension-20); /** Size step for small illustrations, such as the small EmptyState image. */
482
483
  --co-semantic-size-3000: var(--co-base-dimension-30); /** Size step for medium illustrations and multi-line inputs: EmptyState, TextArea. */
483
484
  --co-semantic-size-4500: var(--co-base-dimension-45); /** Size step for truncation widths, such as a Breadcrumbs label. */
484
485
  --co-semantic-size-5000: var(--co-base-dimension-50); /** Size step for large illustrations, such as the large EmptyState image. */
485
- --co-semantic-size-7500: var(--co-base-dimension-75); /** Size step for narrow column widths: AccountCard, EmptyState actions. */
486
+ --co-semantic-size-5600: var(--co-base-dimension-56); /** Size step for a narrow navigation column: the narrow SidebarNav. */
487
+ --co-semantic-size-6400: var(--co-base-dimension-64); /** Size step for a standard navigation column: the default SidebarNav. */
488
+ --co-semantic-size-7500: var(--co-base-dimension-75); /** Size step for narrow column widths: AccountCard, EmptyState actions, the wide SidebarNav, the widest a Tooltip grows. */
486
489
  --co-semantic-size-9000: var(--co-base-dimension-90); /** Size step for readable text widths, such as EmptyState copy. */
487
490
  --co-semantic-size-10000: var(--co-base-dimension-100); /** Size step for compact panel widths, such as the EmptyState block. */
488
491
  --co-semantic-size-19200: var(--co-base-dimension-192); /** Size step for wide content columns, such as CardLarge. */
489
492
  --co-semantic-size-pointer-target: var(--co-base-dimension-6); /** Minimum pointer target for a control that's smaller to look at: its invisible hit area (WCAG 2.5.8, decision 0039). On touch screens, use touchTarget. */
490
- --co-semantic-size-touch-target: var(--co-base-dimension-11); /** Minimum height of a tappable row or control on touch screens. */
493
+ --co-semantic-size-touch-target: var(--co-base-dimension-11); /** Invisible hit area of a small control on touch screens, such as the Slider thumb. Not a row or control height: those follow density down to pointerTarget (decision 0051). */
491
494
  --co-semantic-size-control-sm: var(--co-base-dimension-8); /** Minimum height of small controls: small Buttons and IconButtons, buttons inside fields (decision 0034). */
492
495
  --co-semantic-size-control-md: var(--co-base-dimension-10); /** Minimum height of medium controls: the default IconButton, medium Buttons (decision 0034). */
493
496
  --co-semantic-size-control-lg: var(--co-base-dimension-12); /** Minimum height of large controls: text fields, Dropdown, SearchField, the default Button (decision 0034). */
497
+ --co-semantic-size-row-sm: var(--co-base-dimension-8); /** Minimum height of dense single-line rows: navigation items, menu items, dense table rows. Follows density down to the minimum pointer target (decision 0051). */
498
+ --co-semantic-size-row-md: var(--co-base-dimension-12); /** Minimum height of single-line list rows: ListItem and the rows built on it, such as ActionSheet actions and SearchField suggestions. Follows density (decision 0051). */
499
+ --co-semantic-size-row-lg: var(--co-base-dimension-18); /** Minimum height of two-line rows: TransactionListItem. Follows density (decision 0051). */
494
500
  --co-semantic-size-overlay-sm: var(--co-base-dimension-100); /** Width of a small Modal, and the default width or height of a Sheet. */
495
501
  --co-semantic-size-overlay-md: var(--co-base-dimension-140); /** Width of a medium overlay panel, such as a medium Modal. */
496
502
  --co-semantic-size-overlay-lg: var(--co-base-dimension-180); /** Width of a large overlay panel, such as a large Modal. */
@@ -603,6 +609,7 @@
603
609
  --co-semantic-motion-duration-slow: var(--co-base-duration-moderate); /** The longest duration (P6): larger movements, such as a Sheet sliding in. */
604
610
  --co-semantic-motion-duration-instant: var(--co-base-duration-instant); /** No duration: changes that should happen at once, such as movement under reduced motion. */
605
611
  --co-semantic-motion-duration-moderate: var(--co-base-duration-normal); /** The default duration for state changes and short movements, such as a menu opening. */
612
+ --co-semantic-motion-delay-hint: var(--co-base-duration-slow); /** How long the pointer rests on a control before its Tooltip opens, so passing pointers don't open it. A wait before anything moves, not an animation duration. */
606
613
  --co-semantic-motion-easing-standard: var(--co-base-easing-ease-in-out); /** Easing for change on screen: something moving or resizing in place. */
607
614
  --co-semantic-motion-easing-decelerate: var(--co-base-easing-ease-out); /** Easing for things arriving or responding: entrances, hover and press. */
608
615
  --co-semantic-motion-easing-accelerate: var(--co-base-easing-ease-in); /** Easing for things leaving: exits and dismissals speed up as they go (decision 0037). */
@@ -749,7 +756,7 @@
749
756
  --co-component-alert-appearance-borderless-border-color-warning: var(--co-semantic-color-border-none); /** Borderless warning alert: no visible border, keeping its width so both appearances take the same space (decision 0019). */
750
757
  --co-component-alert-appearance-borderless-border-color-info: var(--co-semantic-color-border-none); /** Borderless info alert: no visible border, keeping its width so both appearances take the same space (decision 0019). */
751
758
  --co-component-alert-appearance-borderless-border-color-success: var(--co-semantic-color-border-none); /** Borderless success alert: no visible border, keeping its width so both appearances take the same space (decision 0019). */
752
- --co-component-alert-title-font-weight: var(--co-semantic-font-weight-semibold); /** Alert titles are semibold, heavier than h6's medium. */
759
+ --co-component-alert-title-font-weight: var(--co-semantic-font-weight-semibold); /** Deprecated: h6 is semibold since decision 0050, so the title takes its weight from title.typography. Use semantic.fontWeight.semibold. Removed in 4.0. */
753
760
  --co-component-alert-title-line-height: var(--co-semantic-line-height-tight); /** Alert titles use a tighter line height than h6. */
754
761
  --co-component-alert-message-line-height: var(--co-semantic-line-height-tight); /** Alert messages use a tighter line height than body. */
755
762
  --co-component-tab-bar-badge-font-weight: var(--co-semantic-font-weight-bold); /** Tab count badges are bold, heavier than caption. */
@@ -767,6 +774,10 @@
767
774
  --co-component-code-block-font-family: var(--co-semantic-font-family-monospace); /** Code font. */
768
775
  --co-component-code-block-font-size: var(--co-semantic-font-size-xs); /** Code text size. */
769
776
  --co-component-code-block-line-height: var(--co-semantic-line-height-tight); /** Code line height. */
777
+ --co-component-sidebar-nav-width-rail: var(--co-semantic-size-1400); /** Width of a collapsed SidebarNav, the icon rail: the tallest dense row (size.row.sm, in comfortable) with an inset on each side. */
778
+ --co-component-sidebar-nav-width-narrow: var(--co-semantic-size-5600); /** Width of an expanded SidebarNav with width="narrow": short labels. */
779
+ --co-component-sidebar-nav-width-default: var(--co-semantic-size-6400); /** Width of an expanded SidebarNav with the default width: labels with a trailing count. */
780
+ --co-component-sidebar-nav-width-wide: var(--co-semantic-size-7500); /** Width of an expanded SidebarNav with width="wide": long titles, such as chat history. */
770
781
  --co-component-slider-thumb-shadow-default: var(--co-semantic-elevation-raised); /** Slider thumb at rest. */
771
782
  --co-component-slider-thumb-shadow-hover: var(--co-semantic-elevation-sticky); /** Slider thumb on hover: one step deeper. */
772
783
  --co-component-slider-thumb-shadow-active: var(--co-semantic-elevation-floating); /** Slider thumb while dragging: deepest. */
@@ -785,7 +796,7 @@
785
796
  --co-component-empty-state-actions-max-width: var(--co-semantic-size-7500); /** Widest EmptyState's actions area grows, so buttons don't stretch. */
786
797
  --co-component-list-item-expanded-indent-compact: var(--co-semantic-size-1200); /** Indent of a compact ListItem's expanded content, aligning it with the label. */
787
798
  --co-component-list-item-expanded-indent-comfortable: var(--co-semantic-size-1500); /** Left indent of a comfortable ListItem's expanded content. */
788
- --co-component-transaction-list-item-min-height: var(--co-semantic-size-1800); /** Minimum height of a TransactionListItem row, so rows line up in a list. */
799
+ --co-component-transaction-list-item-min-height: var(--co-semantic-size-1800); /** Deprecated: Two-line rows share semantic.size.row.lg, which follows density (decision 0051). Removed in 4.0. */
789
800
  --co-component-status-pending-text: var(--co-semantic-color-text-muted); /** Text and icon of a pending StatusLabel: neutral, because waiting needs no attention (decision 0045). 6.01:1 on white. */
790
801
  --co-component-status-pending-background: var(--co-semantic-color-fill-muted); /** Fill of a pending StatusLabel (decision 0045). */
791
802
  --co-component-status-completed-text: var(--co-semantic-color-text-success); /** Text and icon of a completed StatusLabel, on its completed background. */
@@ -804,12 +815,12 @@
804
815
  --co-semantic-color-fill-danger-hover: color-mix(in srgb, var(--co-semantic-color-fill-danger), var(--co-semantic-color-text-inverse) calc(var(--co-semantic-opacity-state-hover) * 100%)); /** Fill of a hovered destructive control: fill.danger with text.inverse mixed in at opacity.state.hover (decision 0048). */
805
816
  --co-semantic-color-fill-danger-pressed: color-mix(in srgb, var(--co-semantic-color-fill-danger), var(--co-semantic-color-text-inverse) calc(var(--co-semantic-opacity-state-pressed) * 100%)); /** Fill of a pressed destructive control: fill.danger with text.inverse mixed in at opacity.state.pressed (decision 0048). */
806
817
  --co-semantic-typography-display: var(--co-semantic-font-weight-bold) var(--co-base-font-size-10)/var(--co-base-line-height-10) var(--co-base-font-family-heading); /** The largest heading, for hero titles. */
807
- --co-semantic-typography-h1: var(--co-semantic-font-weight-bold) var(--co-base-font-size-9)/var(--co-base-line-height-9) var(--co-base-font-family-heading); /** Heading 1: the page title, one per page. */
808
- --co-semantic-typography-h2: var(--co-semantic-font-weight-bold) var(--co-base-font-size-8)/var(--co-base-line-height-8) var(--co-base-font-family-heading); /** Heading 2: major sections of a page. */
809
- --co-semantic-typography-h3: var(--co-semantic-font-weight-bold) var(--co-base-font-size-7)/var(--co-base-line-height-7) var(--co-base-font-family-heading); /** Heading 3: the third heading level in a page outline. */
810
- --co-semantic-typography-h4: var(--co-semantic-font-weight-bold) var(--co-base-font-size-6)/var(--co-base-line-height-6) var(--co-base-font-family-heading); /** Heading 4: the fourth heading level in a page outline. */
811
- --co-semantic-typography-h5: var(--co-semantic-font-weight-medium) var(--co-base-font-size-5)/var(--co-base-line-height-5) var(--co-base-font-family-heading); /** Heading 5: the fifth heading level in a page outline. */
812
- --co-semantic-typography-h6: var(--co-semantic-font-weight-medium) var(--co-base-font-size-4)/var(--co-base-line-height-4) var(--co-base-font-family-heading); /** The smallest heading; Alert's title builds on it. */
818
+ --co-semantic-typography-h1: var(--co-semantic-font-weight-semibold) var(--co-base-font-size-9)/var(--co-base-line-height-9) var(--co-base-font-family-heading); /** Heading 1: the page title, one per page. */
819
+ --co-semantic-typography-h2: var(--co-semantic-font-weight-semibold) var(--co-base-font-size-8)/var(--co-base-line-height-8) var(--co-base-font-family-heading); /** Heading 2: major sections of a page. */
820
+ --co-semantic-typography-h3: var(--co-semantic-font-weight-semibold) var(--co-base-font-size-7)/var(--co-base-line-height-7) var(--co-base-font-family-heading); /** Heading 3: the third heading level in a page outline. */
821
+ --co-semantic-typography-h4: var(--co-semantic-font-weight-semibold) var(--co-base-font-size-6)/var(--co-base-line-height-6) var(--co-base-font-family-heading); /** Heading 4: the fourth heading level in a page outline. */
822
+ --co-semantic-typography-h5: var(--co-semantic-font-weight-semibold) var(--co-base-font-size-5)/var(--co-base-line-height-5) var(--co-base-font-family-heading); /** Heading 5: the fifth heading level in a page outline. */
823
+ --co-semantic-typography-h6: var(--co-semantic-font-weight-semibold) var(--co-base-font-size-4)/var(--co-base-line-height-4) var(--co-base-font-family-heading); /** The smallest heading; Alert's title builds on it. */
813
824
  --co-semantic-typography-subtitle: var(--co-semantic-font-weight-medium) var(--co-base-font-size-3)/var(--co-base-line-height-4) var(--co-base-font-family-body); /** Subtitle: a short line under a heading. */
814
825
  --co-semantic-typography-body: var(--co-semantic-font-weight-regular) var(--co-base-font-size-3)/var(--co-base-line-height-4) var(--co-base-font-family-body); /** Body text: paragraphs and input values. The default text style. */
815
826
  --co-semantic-typography-small: var(--co-semantic-font-weight-regular) var(--co-base-font-size-2)/var(--co-base-line-height-3) var(--co-base-font-family-body); /** Small text: secondary copy and compact controls. */
@@ -828,18 +839,21 @@
828
839
  --co-component-badge-label-typography-medium: var(--co-semantic-typography-small); /** Typography for medium labels in the badge-like family (StatusLabel medium, CategoryLabel large). Combine with label.fontWeight. */
829
840
  --co-component-field-label-typography: var(--co-semantic-typography-label); /** Field label text. */
830
841
  --co-component-field-helper-text-typography: var(--co-semantic-typography-caption); /** Helper and error text under a field (TextField, PasswordField, NumberInput, Dropdown, Checkbox). One step below the label. */
831
- --co-component-alert-title-typography: var(--co-semantic-typography-h6); /** Alert title style (h6), adjusted by title.fontWeight and title.lineHeight. */
842
+ --co-component-alert-title-typography: var(--co-semantic-typography-h6); /** Alert title style (h6), adjusted by title.lineHeight. */
832
843
  --co-component-alert-message-typography: var(--co-semantic-typography-body); /** Alert message style (body), adjusted by message.lineHeight. */
833
844
  --co-component-tab-bar-badge-typography: var(--co-semantic-typography-caption); /** Tab count badge text. */
834
845
  --co-component-search-field-section-header-typography: var(--co-semantic-typography-caption); /** Suggestion-list section header text (shown uppercase). */
835
846
  }
836
847
 
837
- /* Mode: density (decision 0032). Control heights and control insets for a region, set with data-co-density on any element (decisions 0032 and 0034, #191). Rows and layout spacing don't change. */
848
+ /* Mode: density (decision 0032). Control heights, control insets and row heights for a region, set with data-co-density on any element (decisions 0032, 0034 and 0051). Layout spacing doesn't change. */
838
849
 
839
850
  [data-co-density="default"] {
840
851
  --co-semantic-size-control-sm: var(--co-base-dimension-8); /** Minimum height of small controls: small Buttons and IconButtons, buttons inside fields (decision 0034). */
841
852
  --co-semantic-size-control-md: var(--co-base-dimension-10); /** Minimum height of medium controls: the default IconButton, medium Buttons (decision 0034). */
842
853
  --co-semantic-size-control-lg: var(--co-base-dimension-12); /** Minimum height of large controls: text fields, Dropdown, SearchField, the default Button (decision 0034). */
854
+ --co-semantic-size-row-sm: var(--co-base-dimension-8); /** Minimum height of dense single-line rows: navigation items, menu items, dense table rows. Follows density down to the minimum pointer target (decision 0051). */
855
+ --co-semantic-size-row-md: var(--co-base-dimension-12); /** Minimum height of single-line list rows: ListItem and the rows built on it, such as ActionSheet actions and SearchField suggestions. Follows density (decision 0051). */
856
+ --co-semantic-size-row-lg: var(--co-base-dimension-18); /** Minimum height of two-line rows: TransactionListItem. Follows density (decision 0051). */
843
857
  --co-semantic-space-inset-xs: var(--co-base-dimension-1); /** Tightest padding inside a component, such as around an icon in a small control. */
844
858
  --co-semantic-space-inset-sm: var(--co-base-dimension-2); /** Small padding inside a component: chip sides, icon-to-label gaps, compact buttons. */
845
859
  --co-semantic-space-inset-md: var(--co-base-dimension-3); /** Medium padding inside a component: form field insides, medium IconButtons. */
@@ -852,6 +866,9 @@
852
866
  --co-semantic-size-control-sm: var(--co-base-dimension-6); /** Minimum height of small controls: small Buttons and IconButtons, buttons inside fields (decision 0034). */
853
867
  --co-semantic-size-control-md: var(--co-base-dimension-8); /** Minimum height of medium controls: the default IconButton, medium Buttons (decision 0034). */
854
868
  --co-semantic-size-control-lg: var(--co-base-dimension-10); /** Minimum height of large controls: text fields, Dropdown, SearchField, the default Button (decision 0034). */
869
+ --co-semantic-size-row-sm: var(--co-base-dimension-6); /** Minimum height of dense single-line rows: navigation items, menu items, dense table rows. Follows density down to the minimum pointer target (decision 0051). */
870
+ --co-semantic-size-row-md: var(--co-base-dimension-10); /** Minimum height of single-line list rows: ListItem and the rows built on it, such as ActionSheet actions and SearchField suggestions. Follows density (decision 0051). */
871
+ --co-semantic-size-row-lg: var(--co-base-dimension-16); /** Minimum height of two-line rows: TransactionListItem. Follows density (decision 0051). */
855
872
  --co-semantic-space-inset-xs: var(--co-base-dimension-1); /** Tightest padding inside a component, such as around an icon in a small control. */
856
873
  --co-semantic-space-inset-sm: var(--co-base-dimension-1); /** Small padding inside a component: chip sides, icon-to-label gaps, compact buttons. */
857
874
  --co-semantic-space-inset-md: var(--co-base-dimension-2); /** Medium padding inside a component: form field insides, medium IconButtons. */
@@ -864,6 +881,9 @@
864
881
  --co-semantic-size-control-sm: var(--co-base-dimension-10); /** Minimum height of small controls: small Buttons and IconButtons, buttons inside fields (decision 0034). */
865
882
  --co-semantic-size-control-md: var(--co-base-dimension-12); /** Minimum height of medium controls: the default IconButton, medium Buttons (decision 0034). */
866
883
  --co-semantic-size-control-lg: var(--co-base-dimension-14); /** Minimum height of large controls: text fields, Dropdown, SearchField, the default Button (decision 0034). */
884
+ --co-semantic-size-row-sm: var(--co-base-dimension-10); /** Minimum height of dense single-line rows: navigation items, menu items, dense table rows. Follows density down to the minimum pointer target (decision 0051). */
885
+ --co-semantic-size-row-md: var(--co-base-dimension-14); /** Minimum height of single-line list rows: ListItem and the rows built on it, such as ActionSheet actions and SearchField suggestions. Follows density (decision 0051). */
886
+ --co-semantic-size-row-lg: var(--co-base-dimension-20); /** Minimum height of two-line rows: TransactionListItem. Follows density (decision 0051). */
867
887
  --co-semantic-space-inset-xs: var(--co-base-dimension-2); /** Tightest padding inside a component, such as around an icon in a small control. */
868
888
  --co-semantic-space-inset-sm: var(--co-base-dimension-3); /** Small padding inside a component: chip sides, icon-to-label gaps, compact buttons. */
869
889
  --co-semantic-space-inset-md: var(--co-base-dimension-4); /** Medium padding inside a component: form field insides, medium IconButtons. */
@@ -1,4 +1,4 @@
1
- export type IconName = 'add' | 'ai' | 'addRing' | 'arrowDown' | 'arrowLeft' | 'arrowRight' | 'arrowUp' | 'back' | 'bell' | 'cancel' | 'caret' | 'caretDown' | 'caretUp' | 'check' | 'checkRing' | 'close' | 'copy' | 'creditCard' | 'crossCircle' | 'directionRight' | 'directionUp' | 'edit' | 'export' | 'fileDocSearch' | 'filter' | 'info' | 'kebab' | 'lamp' | 'lineOut' | 'link' | 'meatballs' | 'menu' | 'message' | 'move' | 'mic' | 'order' | 'paper' | 'pause' | 'play' | 'playBack' | 'refresh' | 'remove' | 'search' | 'star' | 'starFilled' | 'statusCancelled' | 'statusError' | 'statusInProgress' | 'statusInfo' | 'statusNotStarted' | 'statusPending' | 'statusScheduled' | 'statusSerious' | 'statusSuccess' | 'statusWarning' | 'stop' | 'table' | 'trash' | 'userBox' | 'view' | 'viewHide' | 'wallet';
1
+ export type IconName = 'add' | 'ai' | 'addRing' | 'arrowDown' | 'arrowLeft' | 'arrowRight' | 'arrowUp' | 'back' | 'bell' | 'cancel' | 'caret' | 'caretDown' | 'caretUp' | 'check' | 'checkRing' | 'close' | 'copy' | 'creditCard' | 'crossCircle' | 'directionRight' | 'directionUp' | 'edit' | 'export' | 'fileDocSearch' | 'filter' | 'home' | 'info' | 'kebab' | 'lamp' | 'lineOut' | 'link' | 'meatballs' | 'menu' | 'message' | 'move' | 'mic' | 'order' | 'paper' | 'pause' | 'play' | 'playBack' | 'refresh' | 'remove' | 'search' | 'sidebar' | 'star' | 'starFilled' | 'statusCancelled' | 'statusError' | 'statusInProgress' | 'statusInfo' | 'statusNotStarted' | 'statusPending' | 'statusScheduled' | 'statusSerious' | 'statusSuccess' | 'statusWarning' | 'stop' | 'table' | 'trash' | 'userBox' | 'view' | 'viewHide' | 'wallet';
2
2
  /** Semantic category for grouping icons by purpose */
3
3
  export type IconCategory = 'action' | 'communication' | 'content' | 'feedback' | 'media' | 'navigation' | 'object' | 'status' | 'user';
4
4
  /** Enriched metadata for each icon entry in icons.json */
@@ -1,4 +1,4 @@
1
- export type IconName = 'add' | 'ai' | 'addRing' | 'arrowDown' | 'arrowLeft' | 'arrowRight' | 'arrowUp' | 'back' | 'bell' | 'cancel' | 'caret' | 'caretDown' | 'caretUp' | 'check' | 'checkRing' | 'close' | 'copy' | 'creditCard' | 'crossCircle' | 'directionRight' | 'directionUp' | 'edit' | 'export' | 'fileDocSearch' | 'filter' | 'info' | 'kebab' | 'lamp' | 'lineOut' | 'link' | 'meatballs' | 'menu' | 'message' | 'move' | 'mic' | 'order' | 'paper' | 'pause' | 'play' | 'playBack' | 'refresh' | 'remove' | 'search' | 'star' | 'starFilled' | 'statusCancelled' | 'statusError' | 'statusInProgress' | 'statusInfo' | 'statusNotStarted' | 'statusPending' | 'statusScheduled' | 'statusSerious' | 'statusSuccess' | 'statusWarning' | 'stop' | 'table' | 'trash' | 'userBox' | 'view' | 'viewHide' | 'wallet';
1
+ export type IconName = 'add' | 'ai' | 'addRing' | 'arrowDown' | 'arrowLeft' | 'arrowRight' | 'arrowUp' | 'back' | 'bell' | 'cancel' | 'caret' | 'caretDown' | 'caretUp' | 'check' | 'checkRing' | 'close' | 'copy' | 'creditCard' | 'crossCircle' | 'directionRight' | 'directionUp' | 'edit' | 'export' | 'fileDocSearch' | 'filter' | 'home' | 'info' | 'kebab' | 'lamp' | 'lineOut' | 'link' | 'meatballs' | 'menu' | 'message' | 'move' | 'mic' | 'order' | 'paper' | 'pause' | 'play' | 'playBack' | 'refresh' | 'remove' | 'search' | 'sidebar' | 'star' | 'starFilled' | 'statusCancelled' | 'statusError' | 'statusInProgress' | 'statusInfo' | 'statusNotStarted' | 'statusPending' | 'statusScheduled' | 'statusSerious' | 'statusSuccess' | 'statusWarning' | 'stop' | 'table' | 'trash' | 'userBox' | 'view' | 'viewHide' | 'wallet';
2
2
  /** Semantic category for grouping icons by purpose */
3
3
  export type IconCategory = 'action' | 'communication' | 'content' | 'feedback' | 'media' | 'navigation' | 'object' | 'status' | 'user';
4
4
  /** Enriched metadata for each icon entry in icons.json */
@@ -1 +1 @@
1
- {"version":3,"file":"icons.mjs","sources":["../../src/types/icons.ts"],"sourcesContent":["// Icon type definitions for external consumption\n// This is a self-contained type that doesn't depend on JSON imports\n// to ensure it works correctly in consuming projects\n\nimport iconsJson from '../styles/icons.json'\n\nexport type IconName =\n | 'add'\n | 'ai'\n | 'addRing'\n | 'arrowDown'\n | 'arrowLeft'\n | 'arrowRight'\n | 'arrowUp'\n | 'back'\n | 'bell'\n | 'cancel'\n | 'caret'\n | 'caretDown'\n | 'caretUp'\n | 'check'\n | 'checkRing'\n | 'close'\n | 'copy'\n | 'creditCard'\n | 'crossCircle'\n | 'directionRight'\n | 'directionUp'\n | 'edit'\n | 'export'\n | 'fileDocSearch'\n | 'filter'\n | 'info'\n | 'kebab'\n | 'lamp'\n | 'lineOut'\n | 'link'\n | 'meatballs'\n | 'menu'\n | 'message'\n | 'move'\n | 'mic'\n | 'order'\n | 'paper'\n | 'pause'\n | 'play'\n | 'playBack'\n | 'refresh'\n | 'remove'\n | 'search'\n | 'star'\n | 'starFilled'\n | 'statusCancelled'\n | 'statusError'\n | 'statusInProgress'\n | 'statusInfo'\n | 'statusNotStarted'\n | 'statusPending'\n | 'statusScheduled'\n | 'statusSerious'\n | 'statusSuccess'\n | 'statusWarning'\n | 'stop'\n | 'table'\n | 'trash'\n | 'userBox'\n | 'view'\n | 'viewHide'\n | 'wallet'\n\n/** Semantic category for grouping icons by purpose */\nexport type IconCategory =\n | 'action'\n | 'communication'\n | 'content'\n | 'feedback'\n | 'media'\n | 'navigation'\n | 'object'\n | 'status'\n | 'user'\n\n/** Enriched metadata for each icon entry in icons.json */\nexport interface IconMetadata {\n /** SVG path data */\n path: string\n /** Display name of the icon */\n name: string\n /** What the icon visually depicts */\n description: string\n /** Semantic category for grouping */\n category: IconCategory\n /** Alternative names and search terms */\n aliases: string[]\n /** When and why to use this icon */\n intent: string\n /** Whether the icon is typically decorative (true) or informative (false) */\n decorativeDefault: boolean\n /** Suggested accessible label when the icon conveys meaning */\n ariaLabelDefault: string\n}\n\n/** The full icon registry keyed by IconName */\nexport type IconRegistry = Record<IconName, IconMetadata>\n\n// Typed as IconRegistry so emitted .d.ts files don't import JSON (needs `resolveJsonModule` in consumers).\nexport const iconsData = iconsJson as IconRegistry\n"],"names":["iconsData","iconsJson"],"mappings":";;AAAA;AACA;AACA;AAuGA;AACO,IAAMA,SAAS,GAAGC;;;;"}
1
+ {"version":3,"file":"icons.mjs","sources":["../../src/types/icons.ts"],"sourcesContent":["// Icon type definitions for external consumption\n// This is a self-contained type that doesn't depend on JSON imports\n// to ensure it works correctly in consuming projects\n\nimport iconsJson from '../styles/icons.json'\n\nexport type IconName =\n | 'add'\n | 'ai'\n | 'addRing'\n | 'arrowDown'\n | 'arrowLeft'\n | 'arrowRight'\n | 'arrowUp'\n | 'back'\n | 'bell'\n | 'cancel'\n | 'caret'\n | 'caretDown'\n | 'caretUp'\n | 'check'\n | 'checkRing'\n | 'close'\n | 'copy'\n | 'creditCard'\n | 'crossCircle'\n | 'directionRight'\n | 'directionUp'\n | 'edit'\n | 'export'\n | 'fileDocSearch'\n | 'filter'\n | 'home'\n | 'info'\n | 'kebab'\n | 'lamp'\n | 'lineOut'\n | 'link'\n | 'meatballs'\n | 'menu'\n | 'message'\n | 'move'\n | 'mic'\n | 'order'\n | 'paper'\n | 'pause'\n | 'play'\n | 'playBack'\n | 'refresh'\n | 'remove'\n | 'search'\n | 'sidebar'\n | 'star'\n | 'starFilled'\n | 'statusCancelled'\n | 'statusError'\n | 'statusInProgress'\n | 'statusInfo'\n | 'statusNotStarted'\n | 'statusPending'\n | 'statusScheduled'\n | 'statusSerious'\n | 'statusSuccess'\n | 'statusWarning'\n | 'stop'\n | 'table'\n | 'trash'\n | 'userBox'\n | 'view'\n | 'viewHide'\n | 'wallet'\n\n/** Semantic category for grouping icons by purpose */\nexport type IconCategory =\n | 'action'\n | 'communication'\n | 'content'\n | 'feedback'\n | 'media'\n | 'navigation'\n | 'object'\n | 'status'\n | 'user'\n\n/** Enriched metadata for each icon entry in icons.json */\nexport interface IconMetadata {\n /** SVG path data */\n path: string\n /** Display name of the icon */\n name: string\n /** What the icon visually depicts */\n description: string\n /** Semantic category for grouping */\n category: IconCategory\n /** Alternative names and search terms */\n aliases: string[]\n /** When and why to use this icon */\n intent: string\n /** Whether the icon is typically decorative (true) or informative (false) */\n decorativeDefault: boolean\n /** Suggested accessible label when the icon conveys meaning */\n ariaLabelDefault: string\n}\n\n/** The full icon registry keyed by IconName */\nexport type IconRegistry = Record<IconName, IconMetadata>\n\n// Typed as IconRegistry so emitted .d.ts files don't import JSON (needs `resolveJsonModule` in consumers).\nexport const iconsData = iconsJson as IconRegistry\n"],"names":["iconsData","iconsJson"],"mappings":";;AAAA;AACA;AACA;AAyGA;AACO,IAAMA,SAAS,GAAGC;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@common-origin/design-system",
3
- "version": "3.0.0",
3
+ "version": "3.1.0",
4
4
  "description": "Common Origin Design System - Framework-agnostic atomic design components with comprehensive WCAG 2.2 AA testing",
5
5
  "private": false,
6
6
  "main": "dist/index.js",
@@ -65,7 +65,7 @@
65
65
  "test:coverage": "jest --coverage",
66
66
  "test:e2e": "playwright test",
67
67
  "typecheck": "tsc --noEmit",
68
- "lint": "eslint . --max-warnings 159",
68
+ "lint": "eslint . --max-warnings 157",
69
69
  "docs:dev": "npm run build:tokens && npm run dev",
70
70
  "verify:types": "node scripts/verify-types.cjs",
71
71
  "verify:no-nextjs": "node scripts/verify-no-nextjs-deps.cjs",