@ds-mo/ui 14.4.0 → 14.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +6 -5
  4. package/dist/components/ds-bar-nav.js +1 -1
  5. package/dist/components/ds-bar-title.js +1 -1
  6. package/dist/components/ds-bar-workflow.js +1 -1
  7. package/dist/components/ds-menu.js +1 -1
  8. package/dist/components/ds-mobile-header.js +1 -1
  9. package/dist/components/ds-mobile-section-switcher.js +1 -1
  10. package/dist/components/ds-pagination.js +1 -1
  11. package/dist/components/ds-panel-nav.js +1 -1
  12. package/dist/components/ds-panel-tool-header.js +1 -1
  13. package/dist/components/ds-panel-tool-search.js +1 -1
  14. package/dist/components/ds-panel-tools.js +1 -1
  15. package/dist/components/ds-shell-app.js +1 -1
  16. package/dist/components/ds-shell-page.js +1 -1
  17. package/dist/components/ds-shell-tools.js +1 -1
  18. package/dist/components/ds-swatch-picker.js +1 -1
  19. package/dist/components/ds-table.js +1 -1
  20. package/dist/components/ds-table.js.map +1 -1
  21. package/dist/components/ds-toast.js +1 -1
  22. package/dist/components/ds-typing-indicator.js +1 -1
  23. package/dist/components/{p-DhDWmMxD.js → p-B2hqUkg-.js} +2 -2
  24. package/dist/components/{p-CbqdWBAC.js → p-BGGm1NB1.js} +2 -2
  25. package/dist/components/{p-b-Dlg3y_.js → p-BXNLaPbw.js} +2 -2
  26. package/dist/components/{p-CW7ML-3h.js → p-Ba1l3Yot.js} +2 -2
  27. package/dist/components/{p-DF52Grw1.js → p-BiIdszv1.js} +2 -2
  28. package/dist/components/{p-RLiackRN.js → p-CXqVVdW2.js} +2 -2
  29. package/dist/components/{p-CKfdvOZ2.js → p-Ccq1RmOb.js} +2 -2
  30. package/dist/components/p-CvpsV-jC.js +2 -0
  31. package/dist/components/p-CvpsV-jC.js.map +1 -0
  32. package/dist/components/{p-CDF_nP74.js → p-DgWGfscR.js} +2 -2
  33. package/dist/components/{p-O3OuOaj3.js → p-DjqZWBnM.js} +2 -2
  34. package/dist/components/{p-ChWnbdFS.js → p-o1v7Choa.js} +2 -2
  35. package/dist/components/{p-BDXMXH_i.js → p-w64TmQd-.js} +2 -2
  36. package/dist/docs/components.json +8 -1
  37. package/dist/mcp-data/registry/agent-activity.json +1 -1
  38. package/dist/mcp-data/registry/agent-questionnaire.json +1 -1
  39. package/dist/mcp-data/registry/agent-response.json +1 -1
  40. package/dist/mcp-data/registry/agent-source-list.json +1 -1
  41. package/dist/mcp-data/registry/agent-tool-call.json +1 -1
  42. package/dist/mcp-data/registry/attachment-list.json +1 -1
  43. package/dist/mcp-data/registry/avatar.json +1 -1
  44. package/dist/mcp-data/registry/badge.json +1 -1
  45. package/dist/mcp-data/registry/banner.json +1 -1
  46. package/dist/mcp-data/registry/bar-action.json +1 -1
  47. package/dist/mcp-data/registry/bar-nav.json +1 -1
  48. package/dist/mcp-data/registry/bar-title.json +1 -1
  49. package/dist/mcp-data/registry/bar-workflow.json +1 -1
  50. package/dist/mcp-data/registry/breadcrumb.json +1 -1
  51. package/dist/mcp-data/registry/button-filled.json +1 -1
  52. package/dist/mcp-data/registry/button-unfilled.json +1 -1
  53. package/dist/mcp-data/registry/card-chart.json +1 -1
  54. package/dist/mcp-data/registry/card-overview.json +1 -1
  55. package/dist/mcp-data/registry/card-setting.json +1 -1
  56. package/dist/mcp-data/registry/chart-legend.json +1 -1
  57. package/dist/mcp-data/registry/chart.json +1 -1
  58. package/dist/mcp-data/registry/checkbox.json +1 -1
  59. package/dist/mcp-data/registry/chip.json +1 -1
  60. package/dist/mcp-data/registry/code-block.json +1 -1
  61. package/dist/mcp-data/registry/conversation-list-item.json +1 -1
  62. package/dist/mcp-data/registry/conversation-list-section.json +1 -1
  63. package/dist/mcp-data/registry/conversation-list.json +1 -1
  64. package/dist/mcp-data/registry/divider.json +1 -1
  65. package/dist/mcp-data/registry/empty-state.json +1 -1
  66. package/dist/mcp-data/registry/field.json +1 -1
  67. package/dist/mcp-data/registry/filter-menu.json +1 -1
  68. package/dist/mcp-data/registry/icon.json +1 -1
  69. package/dist/mcp-data/registry/input.json +1 -1
  70. package/dist/mcp-data/registry/loader.json +1 -1
  71. package/dist/mcp-data/registry/markdown.json +1 -1
  72. package/dist/mcp-data/registry/menu.json +1 -1
  73. package/dist/mcp-data/registry/message-actions.json +1 -1
  74. package/dist/mcp-data/registry/message-bubble.json +1 -1
  75. package/dist/mcp-data/registry/message-composer.json +1 -1
  76. package/dist/mcp-data/registry/message-scroller.json +1 -1
  77. package/dist/mcp-data/registry/message.json +1 -1
  78. package/dist/mcp-data/registry/mobile-bar-nav.json +1 -1
  79. package/dist/mcp-data/registry/mobile-header.json +1 -1
  80. package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
  81. package/dist/mcp-data/registry/mobile-sheet-nav.json +1 -1
  82. package/dist/mcp-data/registry/modal.json +1 -1
  83. package/dist/mcp-data/registry/pagination.json +6 -5
  84. package/dist/mcp-data/registry/panel-nav.json +1 -1
  85. package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
  86. package/dist/mcp-data/registry/panel-tool-header.json +1 -1
  87. package/dist/mcp-data/registry/panel-tool-search.json +1 -1
  88. package/dist/mcp-data/registry/panel-tools.json +1 -1
  89. package/dist/mcp-data/registry/radio.json +1 -1
  90. package/dist/mcp-data/registry/registry.json +6 -5
  91. package/dist/mcp-data/registry/scroll-overlay.json +1 -1
  92. package/dist/mcp-data/registry/select.json +1 -1
  93. package/dist/mcp-data/registry/shell-app.json +1 -1
  94. package/dist/mcp-data/registry/shell-page.json +1 -1
  95. package/dist/mcp-data/registry/shell-tools.json +1 -1
  96. package/dist/mcp-data/registry/skeleton.json +1 -1
  97. package/dist/mcp-data/registry/slider.json +1 -1
  98. package/dist/mcp-data/registry/swatch-picker.json +1 -1
  99. package/dist/mcp-data/registry/switch.json +1 -1
  100. package/dist/mcp-data/registry/tab-group.json +1 -1
  101. package/dist/mcp-data/registry/table.json +5 -5
  102. package/dist/mcp-data/registry/tag.json +1 -1
  103. package/dist/mcp-data/registry/text.json +1 -1
  104. package/dist/mcp-data/registry/toast.json +1 -1
  105. package/dist/mcp-data/registry/tooltip-chart.json +1 -1
  106. package/dist/mcp-data/registry/tooltip.json +1 -1
  107. package/dist/mcp-data/registry/typing-indicator.json +1 -1
  108. package/dist/types/components/Table/Table.d.ts +1 -0
  109. package/dist/types/stories/Foundation/typography-styles.d.ts +18 -0
  110. package/package.json +2 -2
  111. package/dist/components/p-Cc5xgR17.js +0 -2
  112. package/dist/components/p-Cc5xgR17.js.map +0 -1
  113. /package/dist/components/{p-DhDWmMxD.js.map → p-B2hqUkg-.js.map} +0 -0
  114. /package/dist/components/{p-CbqdWBAC.js.map → p-BGGm1NB1.js.map} +0 -0
  115. /package/dist/components/{p-b-Dlg3y_.js.map → p-BXNLaPbw.js.map} +0 -0
  116. /package/dist/components/{p-CW7ML-3h.js.map → p-Ba1l3Yot.js.map} +0 -0
  117. /package/dist/components/{p-DF52Grw1.js.map → p-BiIdszv1.js.map} +0 -0
  118. /package/dist/components/{p-RLiackRN.js.map → p-CXqVVdW2.js.map} +0 -0
  119. /package/dist/components/{p-CKfdvOZ2.js.map → p-Ccq1RmOb.js.map} +0 -0
  120. /package/dist/components/{p-CDF_nP74.js.map → p-DgWGfscR.js.map} +0 -0
  121. /package/dist/components/{p-O3OuOaj3.js.map → p-DjqZWBnM.js.map} +0 -0
  122. /package/dist/components/{p-ChWnbdFS.js.map → p-o1v7Choa.js.map} +0 -0
  123. /package/dist/components/{p-BDXMXH_i.js.map → p-w64TmQd-.js.map} +0 -0
@@ -528,7 +528,7 @@
528
528
  },
529
529
  "peerDependencies": {
530
530
  "required": [
531
- "@ds-mo/tokens ^6.2.2",
531
+ "@ds-mo/tokens ^6.5.0",
532
532
  "@ds-mo/icons ^7.0.0"
533
533
  ],
534
534
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -591,7 +591,7 @@
591
591
  },
592
592
  "peerDependencies": {
593
593
  "required": [
594
- "@ds-mo/tokens ^6.2.2",
594
+ "@ds-mo/tokens ^6.5.0",
595
595
  "@ds-mo/icons ^7.0.0"
596
596
  ],
597
597
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -208,7 +208,7 @@
208
208
  },
209
209
  "peerDependencies": {
210
210
  "required": [
211
- "@ds-mo/tokens ^6.2.2",
211
+ "@ds-mo/tokens ^6.5.0",
212
212
  "@ds-mo/icons ^7.0.0"
213
213
  ],
214
214
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -345,7 +345,7 @@
345
345
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: metrics, score.",
346
346
  "peerDependencies": {
347
347
  "required": [
348
- "@ds-mo/tokens ^6.2.2",
348
+ "@ds-mo/tokens ^6.5.0",
349
349
  "@ds-mo/icons ^7.0.0"
350
350
  ],
351
351
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -249,7 +249,7 @@
249
249
  },
250
250
  "peerDependencies": {
251
251
  "required": [
252
- "@ds-mo/tokens ^6.2.2",
252
+ "@ds-mo/tokens ^6.5.0",
253
253
  "@ds-mo/icons ^7.0.0"
254
254
  ],
255
255
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -267,7 +267,7 @@
267
267
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: items.",
268
268
  "peerDependencies": {
269
269
  "required": [
270
- "@ds-mo/tokens ^6.2.2",
270
+ "@ds-mo/tokens ^6.5.0",
271
271
  "@ds-mo/icons ^7.0.0"
272
272
  ],
273
273
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -229,7 +229,7 @@
229
229
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: definition.",
230
230
  "peerDependencies": {
231
231
  "required": [
232
- "@ds-mo/tokens ^6.2.2",
232
+ "@ds-mo/tokens ^6.5.0",
233
233
  "@ds-mo/icons ^7.0.0"
234
234
  ],
235
235
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -349,7 +349,7 @@
349
349
  },
350
350
  "peerDependencies": {
351
351
  "required": [
352
- "@ds-mo/tokens ^6.2.2",
352
+ "@ds-mo/tokens ^6.5.0",
353
353
  "@ds-mo/icons ^7.0.0"
354
354
  ],
355
355
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -245,7 +245,7 @@
245
245
  },
246
246
  "peerDependencies": {
247
247
  "required": [
248
- "@ds-mo/tokens ^6.2.2",
248
+ "@ds-mo/tokens ^6.5.0",
249
249
  "@ds-mo/icons ^7.0.0"
250
250
  ],
251
251
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -128,7 +128,7 @@
128
128
  },
129
129
  "peerDependencies": {
130
130
  "required": [
131
- "@ds-mo/tokens ^6.2.2",
131
+ "@ds-mo/tokens ^6.5.0",
132
132
  "@ds-mo/icons ^7.0.0"
133
133
  ],
134
134
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -253,7 +253,7 @@
253
253
  },
254
254
  "peerDependencies": {
255
255
  "required": [
256
- "@ds-mo/tokens ^6.2.2",
256
+ "@ds-mo/tokens ^6.5.0",
257
257
  "@ds-mo/icons ^7.0.0"
258
258
  ],
259
259
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -110,7 +110,7 @@
110
110
  },
111
111
  "peerDependencies": {
112
112
  "required": [
113
- "@ds-mo/tokens ^6.2.2",
113
+ "@ds-mo/tokens ^6.5.0",
114
114
  "@ds-mo/icons ^7.0.0"
115
115
  ],
116
116
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -102,7 +102,7 @@
102
102
  },
103
103
  "peerDependencies": {
104
104
  "required": [
105
- "@ds-mo/tokens ^6.2.2",
105
+ "@ds-mo/tokens ^6.5.0",
106
106
  "@ds-mo/icons ^7.0.0"
107
107
  ],
108
108
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -198,7 +198,7 @@
198
198
  },
199
199
  "peerDependencies": {
200
200
  "required": [
201
- "@ds-mo/tokens ^6.2.2",
201
+ "@ds-mo/tokens ^6.5.0",
202
202
  "@ds-mo/icons ^7.0.0"
203
203
  ],
204
204
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -170,7 +170,7 @@
170
170
  },
171
171
  "peerDependencies": {
172
172
  "required": [
173
- "@ds-mo/tokens ^6.2.2",
173
+ "@ds-mo/tokens ^6.5.0",
174
174
  "@ds-mo/icons ^7.0.0"
175
175
  ],
176
176
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -193,7 +193,7 @@
193
193
  },
194
194
  "peerDependencies": {
195
195
  "required": [
196
- "@ds-mo/tokens ^6.2.2",
196
+ "@ds-mo/tokens ^6.5.0",
197
197
  "@ds-mo/icons ^7.0.0"
198
198
  ],
199
199
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -609,7 +609,7 @@
609
609
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: anchor, filters, values.",
610
610
  "peerDependencies": {
611
611
  "required": [
612
- "@ds-mo/tokens ^6.2.2",
612
+ "@ds-mo/tokens ^6.5.0",
613
613
  "@ds-mo/icons ^7.0.0"
614
614
  ],
615
615
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -194,7 +194,7 @@
194
194
  },
195
195
  "peerDependencies": {
196
196
  "required": [
197
- "@ds-mo/tokens ^6.2.2",
197
+ "@ds-mo/tokens ^6.5.0",
198
198
  "@ds-mo/icons ^7.0.0"
199
199
  ],
200
200
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -566,7 +566,7 @@
566
566
  },
567
567
  "peerDependencies": {
568
568
  "required": [
569
- "@ds-mo/tokens ^6.2.2",
569
+ "@ds-mo/tokens ^6.5.0",
570
570
  "@ds-mo/icons ^7.0.0"
571
571
  ],
572
572
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -165,7 +165,7 @@
165
165
  },
166
166
  "peerDependencies": {
167
167
  "required": [
168
- "@ds-mo/tokens ^6.2.2",
168
+ "@ds-mo/tokens ^6.5.0",
169
169
  "@ds-mo/icons ^7.0.0"
170
170
  ],
171
171
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -117,7 +117,7 @@
117
117
  },
118
118
  "peerDependencies": {
119
119
  "required": [
120
- "@ds-mo/tokens ^6.2.2",
120
+ "@ds-mo/tokens ^6.5.0",
121
121
  "@ds-mo/icons ^7.0.0"
122
122
  ],
123
123
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -455,7 +455,7 @@
455
455
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: anchor, items, sections.",
456
456
  "peerDependencies": {
457
457
  "required": [
458
- "@ds-mo/tokens ^6.2.2",
458
+ "@ds-mo/tokens ^6.5.0",
459
459
  "@ds-mo/icons ^7.0.0"
460
460
  ],
461
461
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -157,7 +157,7 @@
157
157
  },
158
158
  "peerDependencies": {
159
159
  "required": [
160
- "@ds-mo/tokens ^6.2.2",
160
+ "@ds-mo/tokens ^6.5.0",
161
161
  "@ds-mo/icons ^7.0.0"
162
162
  ],
163
163
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -97,7 +97,7 @@
97
97
  },
98
98
  "peerDependencies": {
99
99
  "required": [
100
- "@ds-mo/tokens ^6.2.2",
100
+ "@ds-mo/tokens ^6.5.0",
101
101
  "@ds-mo/icons ^7.0.0"
102
102
  ],
103
103
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -257,7 +257,7 @@
257
257
  },
258
258
  "peerDependencies": {
259
259
  "required": [
260
- "@ds-mo/tokens ^6.2.2",
260
+ "@ds-mo/tokens ^6.5.0",
261
261
  "@ds-mo/icons ^7.0.0"
262
262
  ],
263
263
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -194,7 +194,7 @@
194
194
  },
195
195
  "peerDependencies": {
196
196
  "required": [
197
- "@ds-mo/tokens ^6.2.2",
197
+ "@ds-mo/tokens ^6.5.0",
198
198
  "@ds-mo/icons ^7.0.0"
199
199
  ],
200
200
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -249,7 +249,7 @@
249
249
  },
250
250
  "peerDependencies": {
251
251
  "required": [
252
- "@ds-mo/tokens ^6.2.2",
252
+ "@ds-mo/tokens ^6.5.0",
253
253
  "@ds-mo/icons ^7.0.0"
254
254
  ],
255
255
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -331,7 +331,7 @@
331
331
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: currentArea.",
332
332
  "peerDependencies": {
333
333
  "required": [
334
- "@ds-mo/tokens ^6.2.2",
334
+ "@ds-mo/tokens ^6.5.0",
335
335
  "@ds-mo/icons ^7.0.0"
336
336
  ],
337
337
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -318,7 +318,7 @@
318
318
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: sections, subsections.",
319
319
  "peerDependencies": {
320
320
  "required": [
321
- "@ds-mo/tokens ^6.2.2",
321
+ "@ds-mo/tokens ^6.5.0",
322
322
  "@ds-mo/icons ^7.0.0"
323
323
  ],
324
324
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -153,7 +153,7 @@
153
153
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: sections.",
154
154
  "peerDependencies": {
155
155
  "required": [
156
- "@ds-mo/tokens ^6.2.2",
156
+ "@ds-mo/tokens ^6.5.0",
157
157
  "@ds-mo/icons ^7.0.0"
158
158
  ],
159
159
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -323,7 +323,7 @@
323
323
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: dashboardGroups, settingsGroups.",
324
324
  "peerDependencies": {
325
325
  "required": [
326
- "@ds-mo/tokens ^6.2.2",
326
+ "@ds-mo/tokens ^6.5.0",
327
327
  "@ds-mo/icons ^7.0.0"
328
328
  ],
329
329
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -270,7 +270,7 @@
270
270
  },
271
271
  "peerDependencies": {
272
272
  "required": [
273
- "@ds-mo/tokens ^6.2.2",
273
+ "@ds-mo/tokens ^6.5.0",
274
274
  "@ds-mo/icons ^7.0.0"
275
275
  ],
276
276
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -29,7 +29,7 @@
29
29
  ],
30
30
  "accessibility": [
31
31
  "The component renders a named navigation region, gives its compact page-size noun a complete accessible label, and gives every icon-only boundary control an explicit page action name.",
32
- "The visible range and page position use compact slash notation with tabular numerals. A polite atomic status update retains complete ‘of’ and ‘Page’ phrasing with the localized item noun.",
32
+ "The visible page-size cluster states the localized noun, selected size, and total, for example Rows: 25 of 500. The page position uses compact ‘of’ phrasing, for example 1 of 20. A polite atomic status update retains the complete current range and ‘Page’ phrasing with the localized item noun.",
33
33
  "Left and Right Arrow request the adjacent page while focus is within pagination navigation controls. The page-size combobox retains its own arrow-key behavior.",
34
34
  "Inactive boundary controls and every control during loading remain non-interactive while retaining their accessible names."
35
35
  ],
@@ -41,7 +41,7 @@
41
41
  "fitToPage appends a Fit to page choice. fitPageSize supplies its effective whole-item capacity; the closed trigger says Fit while the range continues to expose the resulting count. Pagination does not measure layouts itself."
42
42
  ],
43
43
  "responsiveBehavior": [
44
- "The compact controls remain on one line with noun, range, and page slash notation. When inline space is still insufficient, the pagination surface scrolls horizontally rather than wrapping labels away from their controls."
44
+ "The compact controls remain on one line with noun, selected size, total, a vertical divider, and page position. When inline space is still insufficient, the pagination surface scrolls horizontally rather than wrapping labels away from their controls."
45
45
  ],
46
46
  "frameworkCaveats": {
47
47
  "customElements": [
@@ -360,7 +360,7 @@
360
360
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: pageSizeOptions.",
361
361
  "peerDependencies": {
362
362
  "required": [
363
- "@ds-mo/tokens ^6.2.2",
363
+ "@ds-mo/tokens ^6.5.0",
364
364
  "@ds-mo/icons ^7.0.0"
365
365
  ],
366
366
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -373,18 +373,19 @@
373
373
  ],
374
374
  "registryDependencies": [
375
375
  "button-unfilled",
376
+ "divider",
376
377
  "select",
377
378
  "text"
378
379
  ],
379
380
  "files": [
380
381
  {
381
382
  "path": "src/wc/components/Pagination/Pagination.css",
382
- "content": "@import '../../utils/visually-hidden.css';\n\n:host {\n display: block;\n box-sizing: border-box;\n min-width: 0;\n max-width: 100%;\n overflow-x: auto;\n scrollbar-width: none;\n}\n\n:host::-webkit-scrollbar {\n display: none;\n}\n\n.pagination,\n.pagination__page-size,\n.pagination__navigation {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n}\n\n.pagination {\n width: max-content;\n min-width: 100%;\n gap: var(--dimension-space-200);\n}\n\n.pagination__page-size,\n.pagination__navigation {\n flex: 0 0 auto;\n}\n\n.pagination__page-size {\n gap: var(--dimension-space-100);\n}\n\n.pagination__navigation {\n gap: var(--dimension-space-050);\n}\n\n.pagination__range,\n.pagination__page,\n.pagination__label {\n display: inline-flex;\n align-items: center;\n flex: 0 0 auto;\n white-space: nowrap;\n}\n\n.pagination__page {\n justify-content: center;\n min-inline-size: calc(var(--dimension-size-800) + var(--dimension-space-200));\n padding-inline: var(--dimension-space-050);\n}\n",
383
+ "content": "@import '../../utils/visually-hidden.css';\n\n:host {\n display: block;\n box-sizing: border-box;\n min-width: 0;\n max-width: 100%;\n overflow-x: auto;\n scrollbar-width: none;\n}\n\n:host::-webkit-scrollbar {\n display: none;\n}\n\n.pagination,\n.pagination__page-size,\n.pagination__navigation {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n}\n\n.pagination {\n width: max-content;\n min-width: 100%;\n gap: var(--dimension-space-200);\n}\n\n.pagination__page-size,\n.pagination__navigation {\n flex: 0 0 auto;\n}\n\n.pagination__page-size {\n gap: var(--dimension-space-100);\n padding-inline-end: var(--dimension-space-100);\n}\n\n.pagination__navigation {\n gap: var(--dimension-space-050);\n}\n\n.pagination__total,\n.pagination__page,\n.pagination__label {\n display: inline-flex;\n align-items: center;\n flex: 0 0 auto;\n white-space: nowrap;\n}\n\n.pagination__page {\n justify-content: center;\n min-inline-size: 0;\n padding-inline: var(--dimension-space-100);\n}\n",
383
384
  "type": "registry:ui"
384
385
  },
385
386
  {
386
387
  "path": "src/wc/components/Pagination/Pagination.tsx",
387
- "content": "import { Component, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\nimport { resolvePaginationState } from './pagination-model';\nimport type {\n PaginationChangeDetail,\n PaginationPageSizeMode,\n} from './pagination-types';\n\nlet paginationId = 0;\n\n@Component({\n tag: 'ds-pagination',\n styleUrl: 'Pagination.css',\n scoped: true,\n})\nexport class Pagination {\n /** Controlled zero-based page index. */\n @Prop() pageIndex: number = 0;\n /** Controlled number of top-level items on a full page. */\n @Prop() pageSize: number = 25;\n /** Whether pageSize is a fixed choice or a measured Fit snapshot. */\n @Prop() pageSizeMode: PaginationPageSizeMode = 'fixed';\n /** Controlled total number of top-level items across every page. */\n @Prop() totalItems: number = 0;\n /** Available page sizes. Assign arrays through JavaScript. */\n @Prop() pageSizeOptions: number[] = [25, 50, 100, 200];\n /** Include the Fit to page choice. */\n @Prop() fitToPage: boolean = false;\n /** Effective whole-item capacity to request when Fit is selected. */\n @Prop() fitPageSize: number | undefined;\n /** Full choice-list label for Fit. */\n @Prop() fitPageSizeLabel: string = 'Fit to page';\n /** Compact closed-trigger label while Fit is selected. */\n @Prop() fitPageSizeTriggerLabel: string = 'Fit';\n /** Localized plural noun used by assistive range announcements. */\n @Prop() itemLabel: string = 'items';\n /** Visible page-size control label. */\n @Prop() pageSizeLabel: string = 'Items';\n /** Accessible page-size control label. Defaults to “{pageSizeLabel} per page”. */\n @Prop() pageSizeAriaLabel: string | undefined;\n /** Accessible name for the pagination navigation region. */\n @Prop() label: string = 'Pagination';\n /** Prevent interaction while the owner replaces the current data page. */\n @Prop() loading: boolean = false;\n\n /** Emits the complete next controlled state after a page or page-size request. */\n @Event() dsChange!: EventEmitter<PaginationChangeDetail>;\n\n private readonly pageSizeControlId = `ds-pagination-${++paginationId}-page-size`;\n\n private requestPage(pageIndex: number): void {\n const state = this.resolvedState;\n if (this.loading || pageIndex === state.pageIndex || pageIndex < 0 || pageIndex >= state.totalPages) {\n return;\n }\n this.dsChange.emit({\n pageIndex,\n pageSize: state.pageSize,\n pageSizeMode: state.pageSizeMode,\n totalItems: state.totalItems,\n pageSizeOptions: state.pageSizeOptions,\n fitToPage: this.fitToPage,\n fitPageSize: this.resolvedFitPageSize,\n fitPageSizeLabel: this.fitPageSizeLabel,\n fitPageSizeTriggerLabel: this.fitPageSizeTriggerLabel,\n itemLabel: this.itemLabel,\n pageSizeLabel: this.pageSizeLabel,\n ariaLabel: this.label,\n previousPageIndex: state.pageIndex,\n previousPageSize: state.pageSize,\n previousPageSizeMode: state.pageSizeMode,\n reason: 'page',\n });\n }\n\n private requestPageSize(value: string | string[]): void {\n if (this.loading || typeof value !== 'string') return;\n const state = this.resolvedState;\n const nextMode: PaginationPageSizeMode = value === 'fit' ? 'fit' : 'fixed';\n const pageSize = nextMode === 'fit' ? this.resolvedFitPageSize : Number(value);\n if (!pageSize || (pageSize === state.pageSize && nextMode === state.pageSizeMode)) return;\n this.dsChange.emit({\n pageIndex: 0,\n pageSize: Math.trunc(pageSize),\n pageSizeMode: nextMode,\n totalItems: state.totalItems,\n pageSizeOptions: state.pageSizeOptions,\n fitToPage: this.fitToPage,\n fitPageSize: this.resolvedFitPageSize,\n fitPageSizeLabel: this.fitPageSizeLabel,\n fitPageSizeTriggerLabel: this.fitPageSizeTriggerLabel,\n itemLabel: this.itemLabel,\n pageSizeLabel: this.pageSizeLabel,\n ariaLabel: this.label,\n previousPageIndex: state.pageIndex,\n previousPageSize: state.pageSize,\n previousPageSizeMode: state.pageSizeMode,\n reason: 'page-size',\n });\n }\n\n private handleKeyDown(event: KeyboardEvent): void {\n if (event.defaultPrevented || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n const fromChoiceControl = event.composedPath().some(node =>\n node instanceof HTMLElement &&\n (node.tagName === 'DS-SELECT' || ['INPUT', 'SELECT', 'TEXTAREA'].includes(node.tagName)),\n );\n if (fromChoiceControl || (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight')) return;\n const state = this.resolvedState;\n const pageIndex = event.key === 'ArrowLeft' ? state.pageIndex - 1 : state.pageIndex + 1;\n if (this.loading || pageIndex < 0 || pageIndex >= state.totalPages) return;\n event.preventDefault();\n this.requestPage(pageIndex);\n }\n\n private get resolvedFitPageSize(): number | undefined {\n return Number.isFinite(this.fitPageSize) && Number(this.fitPageSize) > 0\n ? Math.trunc(Number(this.fitPageSize))\n : undefined;\n }\n\n private get resolvedState() {\n return resolvePaginationState({\n pageIndex: this.pageIndex,\n pageSize: this.pageSize,\n pageSizeMode: this.pageSizeMode,\n totalItems: this.totalItems,\n pageSizeOptions: this.pageSizeOptions,\n });\n }\n\n render() {\n const state = this.resolvedState;\n const atStart = state.pageIndex === 0;\n const atEnd = state.pageIndex === state.totalPages - 1;\n const range = `${state.firstItem}–${state.lastItem} / ${state.totalItems}`;\n const page = `${state.pageIndex + 1} / ${state.totalPages}`;\n const announcedRange = `${state.firstItem}–${state.lastItem} of ${state.totalItems}`;\n const announcedPage = `Page ${state.pageIndex + 1} of ${state.totalPages}`;\n const pageSizeAriaLabel = this.pageSizeAriaLabel ?? `${this.pageSizeLabel} per page`;\n const options: Array<{ label: string; value: string; isInactive?: boolean }> =\n state.pageSizeOptions.map(value => ({ label: String(value), value: String(value) }));\n if (this.fitToPage) {\n options.push({\n label: this.fitPageSizeLabel,\n value: 'fit',\n isInactive: this.resolvedFitPageSize === undefined,\n });\n }\n\n return (\n <Host>\n <nav\n class=\"pagination\"\n aria-label={this.label}\n aria-busy={this.loading ? 'true' : undefined}\n onKeyDown={event => this.handleKeyDown(event)}\n >\n <div class=\"pagination__page-size\">\n <ds-text\n class=\"pagination__label\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n aria-hidden=\"true\"\n >\n {this.pageSizeLabel}:\n </ds-text>\n <span id={`${this.pageSizeControlId}-label`} class=\"ds-visually-hidden\">\n {pageSizeAriaLabel}\n </span>\n <ds-select\n size=\"md\"\n inputId={this.pageSizeControlId}\n ariaLabelledby={`${this.pageSizeControlId}-label`}\n options={options}\n value={state.pageSizeMode === 'fit' ? 'fit' : String(state.pageSize)}\n triggerLabel={state.pageSizeMode === 'fit' ? this.fitPageSizeTriggerLabel : undefined}\n indicator=\"up-down\"\n allowClear={false}\n activeFill={false}\n isInactive={this.loading}\n onDsChange={event => {\n event.stopPropagation();\n this.requestPageSize(event.detail);\n }}\n />\n </div>\n <ds-text\n class=\"pagination__range\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n fontFeature=\"tabular-nums\"\n >\n {range}\n </ds-text>\n <div class=\"pagination__navigation\">\n <ds-button-unfilled\n variant=\"icon\"\n size=\"md\"\n icon=\"ChevronLeftDouble\"\n ariaLabel=\"First page\"\n hasBorder={false}\n isInactive={this.loading || atStart}\n onDsClick={() => this.requestPage(0)}\n />\n <ds-button-unfilled\n variant=\"icon\"\n size=\"md\"\n icon=\"ChevronLeft\"\n ariaLabel=\"Previous page\"\n hasBorder={false}\n isInactive={this.loading || atStart}\n onDsClick={() => this.requestPage(state.pageIndex - 1)}\n />\n <ds-text\n class=\"pagination__page\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n fontFeature=\"tabular-nums\"\n >\n {page}\n </ds-text>\n <ds-button-unfilled\n variant=\"icon\"\n size=\"md\"\n icon=\"ChevronRight\"\n ariaLabel=\"Next page\"\n hasBorder={false}\n isInactive={this.loading || atEnd}\n onDsClick={() => this.requestPage(state.pageIndex + 1)}\n />\n <ds-button-unfilled\n variant=\"icon\"\n size=\"md\"\n icon=\"ChevronRightDouble\"\n ariaLabel=\"Last page\"\n hasBorder={false}\n isInactive={this.loading || atEnd}\n onDsClick={() => this.requestPage(state.totalPages - 1)}\n />\n </div>\n <span class=\"ds-visually-hidden\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {announcedRange} {this.itemLabel}. {announcedPage}.\n </span>\n </nav>\n </Host>\n );\n }\n}\n",
388
+ "content": "import { Component, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\nimport { resolvePaginationState } from './pagination-model';\nimport type {\n PaginationChangeDetail,\n PaginationPageSizeMode,\n} from './pagination-types';\n\nlet paginationId = 0;\n\n@Component({\n tag: 'ds-pagination',\n styleUrl: 'Pagination.css',\n scoped: true,\n})\nexport class Pagination {\n /** Controlled zero-based page index. */\n @Prop() pageIndex: number = 0;\n /** Controlled number of top-level items on a full page. */\n @Prop() pageSize: number = 25;\n /** Whether pageSize is a fixed choice or a measured Fit snapshot. */\n @Prop() pageSizeMode: PaginationPageSizeMode = 'fixed';\n /** Controlled total number of top-level items across every page. */\n @Prop() totalItems: number = 0;\n /** Available page sizes. Assign arrays through JavaScript. */\n @Prop() pageSizeOptions: number[] = [25, 50, 100, 200];\n /** Include the Fit to page choice. */\n @Prop() fitToPage: boolean = false;\n /** Effective whole-item capacity to request when Fit is selected. */\n @Prop() fitPageSize: number | undefined;\n /** Full choice-list label for Fit. */\n @Prop() fitPageSizeLabel: string = 'Fit to page';\n /** Compact closed-trigger label while Fit is selected. */\n @Prop() fitPageSizeTriggerLabel: string = 'Fit';\n /** Localized plural noun used by assistive range announcements. */\n @Prop() itemLabel: string = 'items';\n /** Visible page-size control label. */\n @Prop() pageSizeLabel: string = 'Items';\n /** Accessible page-size control label. Defaults to “{pageSizeLabel} per page”. */\n @Prop() pageSizeAriaLabel: string | undefined;\n /** Accessible name for the pagination navigation region. */\n @Prop() label: string = 'Pagination';\n /** Prevent interaction while the owner replaces the current data page. */\n @Prop() loading: boolean = false;\n\n /** Emits the complete next controlled state after a page or page-size request. */\n @Event() dsChange!: EventEmitter<PaginationChangeDetail>;\n\n private readonly pageSizeControlId = `ds-pagination-${++paginationId}-page-size`;\n\n private requestPage(pageIndex: number): void {\n const state = this.resolvedState;\n if (this.loading || pageIndex === state.pageIndex || pageIndex < 0 || pageIndex >= state.totalPages) {\n return;\n }\n this.dsChange.emit({\n pageIndex,\n pageSize: state.pageSize,\n pageSizeMode: state.pageSizeMode,\n totalItems: state.totalItems,\n pageSizeOptions: state.pageSizeOptions,\n fitToPage: this.fitToPage,\n fitPageSize: this.resolvedFitPageSize,\n fitPageSizeLabel: this.fitPageSizeLabel,\n fitPageSizeTriggerLabel: this.fitPageSizeTriggerLabel,\n itemLabel: this.itemLabel,\n pageSizeLabel: this.pageSizeLabel,\n ariaLabel: this.label,\n previousPageIndex: state.pageIndex,\n previousPageSize: state.pageSize,\n previousPageSizeMode: state.pageSizeMode,\n reason: 'page',\n });\n }\n\n private requestPageSize(value: string | string[]): void {\n if (this.loading || typeof value !== 'string') return;\n const state = this.resolvedState;\n const nextMode: PaginationPageSizeMode = value === 'fit' ? 'fit' : 'fixed';\n const pageSize = nextMode === 'fit' ? this.resolvedFitPageSize : Number(value);\n if (!pageSize || (pageSize === state.pageSize && nextMode === state.pageSizeMode)) return;\n this.dsChange.emit({\n pageIndex: 0,\n pageSize: Math.trunc(pageSize),\n pageSizeMode: nextMode,\n totalItems: state.totalItems,\n pageSizeOptions: state.pageSizeOptions,\n fitToPage: this.fitToPage,\n fitPageSize: this.resolvedFitPageSize,\n fitPageSizeLabel: this.fitPageSizeLabel,\n fitPageSizeTriggerLabel: this.fitPageSizeTriggerLabel,\n itemLabel: this.itemLabel,\n pageSizeLabel: this.pageSizeLabel,\n ariaLabel: this.label,\n previousPageIndex: state.pageIndex,\n previousPageSize: state.pageSize,\n previousPageSizeMode: state.pageSizeMode,\n reason: 'page-size',\n });\n }\n\n private handleKeyDown(event: KeyboardEvent): void {\n if (event.defaultPrevented || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n const fromChoiceControl = event.composedPath().some(node =>\n node instanceof HTMLElement &&\n (node.tagName === 'DS-SELECT' || ['INPUT', 'SELECT', 'TEXTAREA'].includes(node.tagName)),\n );\n if (fromChoiceControl || (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight')) return;\n const state = this.resolvedState;\n const pageIndex = event.key === 'ArrowLeft' ? state.pageIndex - 1 : state.pageIndex + 1;\n if (this.loading || pageIndex < 0 || pageIndex >= state.totalPages) return;\n event.preventDefault();\n this.requestPage(pageIndex);\n }\n\n private get resolvedFitPageSize(): number | undefined {\n return Number.isFinite(this.fitPageSize) && Number(this.fitPageSize) > 0\n ? Math.trunc(Number(this.fitPageSize))\n : undefined;\n }\n\n private get resolvedState() {\n return resolvePaginationState({\n pageIndex: this.pageIndex,\n pageSize: this.pageSize,\n pageSizeMode: this.pageSizeMode,\n totalItems: this.totalItems,\n pageSizeOptions: this.pageSizeOptions,\n });\n }\n\n render() {\n const state = this.resolvedState;\n const atStart = state.pageIndex === 0;\n const atEnd = state.pageIndex === state.totalPages - 1;\n const total = `of ${state.totalItems}`;\n const page = `${state.pageIndex + 1} of ${state.totalPages}`;\n const announcedRange = `${state.firstItem}–${state.lastItem} of ${state.totalItems}`;\n const announcedPage = `Page ${state.pageIndex + 1} of ${state.totalPages}`;\n const pageSizeAriaLabel = this.pageSizeAriaLabel ?? `${this.pageSizeLabel} per page`;\n const options: Array<{ label: string; value: string; isInactive?: boolean }> =\n state.pageSizeOptions.map(value => ({ label: String(value), value: String(value) }));\n if (this.fitToPage) {\n options.push({\n label: this.fitPageSizeLabel,\n value: 'fit',\n isInactive: this.resolvedFitPageSize === undefined,\n });\n }\n\n return (\n <Host>\n <nav\n class=\"pagination\"\n aria-label={this.label}\n aria-busy={this.loading ? 'true' : undefined}\n onKeyDown={event => this.handleKeyDown(event)}\n >\n <div class=\"pagination__page-size\">\n <ds-text\n class=\"pagination__label\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n aria-hidden=\"true\"\n >\n {this.pageSizeLabel}:\n </ds-text>\n <span id={`${this.pageSizeControlId}-label`} class=\"ds-visually-hidden\">\n {pageSizeAriaLabel}\n </span>\n <ds-select\n size=\"md\"\n inputId={this.pageSizeControlId}\n ariaLabelledby={`${this.pageSizeControlId}-label`}\n options={options}\n value={state.pageSizeMode === 'fit' ? 'fit' : String(state.pageSize)}\n triggerLabel={state.pageSizeMode === 'fit' ? this.fitPageSizeTriggerLabel : undefined}\n indicator=\"up-down\"\n allowClear={false}\n activeFill={false}\n isInactive={this.loading}\n onDsChange={event => {\n event.stopPropagation();\n this.requestPageSize(event.detail);\n }}\n />\n <ds-text\n class=\"pagination__total\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n fontFeature=\"tabular-nums\"\n >\n {total}\n </ds-text>\n </div>\n <ds-divider class=\"pagination__divider\" orientation=\"vertical\" length=\"24px\" />\n <div class=\"pagination__navigation\">\n <ds-button-unfilled\n variant=\"icon\"\n size=\"md\"\n icon=\"ChevronLeftDouble\"\n ariaLabel=\"First page\"\n hasBorder={false}\n isInactive={this.loading || atStart}\n onDsClick={() => this.requestPage(0)}\n />\n <ds-button-unfilled\n variant=\"icon\"\n size=\"md\"\n icon=\"ChevronLeft\"\n ariaLabel=\"Previous page\"\n hasBorder={false}\n isInactive={this.loading || atStart}\n onDsClick={() => this.requestPage(state.pageIndex - 1)}\n />\n <ds-text\n class=\"pagination__page\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n fontFeature=\"tabular-nums\"\n >\n {page}\n </ds-text>\n <ds-button-unfilled\n variant=\"icon\"\n size=\"md\"\n icon=\"ChevronRight\"\n ariaLabel=\"Next page\"\n hasBorder={false}\n isInactive={this.loading || atEnd}\n onDsClick={() => this.requestPage(state.pageIndex + 1)}\n />\n <ds-button-unfilled\n variant=\"icon\"\n size=\"md\"\n icon=\"ChevronRightDouble\"\n ariaLabel=\"Last page\"\n hasBorder={false}\n isInactive={this.loading || atEnd}\n onDsClick={() => this.requestPage(state.totalPages - 1)}\n />\n </div>\n <span class=\"ds-visually-hidden\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {announcedRange} {this.itemLabel}. {announcedPage}.\n </span>\n </nav>\n </Host>\n );\n }\n}\n",
388
389
  "type": "registry:ui"
389
390
  },
390
391
  {
@@ -598,7 +598,7 @@
598
598
  },
599
599
  "peerDependencies": {
600
600
  "required": [
601
- "@ds-mo/tokens ^6.2.2",
601
+ "@ds-mo/tokens ^6.5.0",
602
602
  "@ds-mo/icons ^7.0.0"
603
603
  ],
604
604
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -215,7 +215,7 @@
215
215
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: items.",
216
216
  "peerDependencies": {
217
217
  "required": [
218
- "@ds-mo/tokens ^6.2.2",
218
+ "@ds-mo/tokens ^6.5.0",
219
219
  "@ds-mo/icons ^7.0.0"
220
220
  ],
221
221
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -312,7 +312,7 @@
312
312
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: actions.",
313
313
  "peerDependencies": {
314
314
  "required": [
315
- "@ds-mo/tokens ^6.2.2",
315
+ "@ds-mo/tokens ^6.5.0",
316
316
  "@ds-mo/icons ^7.0.0"
317
317
  ],
318
318
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -354,7 +354,7 @@
354
354
  },
355
355
  "peerDependencies": {
356
356
  "required": [
357
- "@ds-mo/tokens ^6.2.2",
357
+ "@ds-mo/tokens ^6.5.0",
358
358
  "@ds-mo/icons ^7.0.0"
359
359
  ],
360
360
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -439,7 +439,7 @@
439
439
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: headers, items.",
440
440
  "peerDependencies": {
441
441
  "required": [
442
- "@ds-mo/tokens ^6.2.2",
442
+ "@ds-mo/tokens ^6.5.0",
443
443
  "@ds-mo/icons ^7.0.0"
444
444
  ],
445
445
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -358,7 +358,7 @@
358
358
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: options.",
359
359
  "peerDependencies": {
360
360
  "required": [
361
- "@ds-mo/tokens ^6.2.2",
361
+ "@ds-mo/tokens ^6.5.0",
362
362
  "@ds-mo/icons ^7.0.0"
363
363
  ],
364
364
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -12,7 +12,7 @@
12
12
  "themeSetup": "Set data-theme=\"dark\" on <html> for dark mode. Light is default.",
13
13
  "peerDependencies": {
14
14
  "required": [
15
- "@ds-mo/tokens ^6.2.2",
15
+ "@ds-mo/tokens ^6.5.0",
16
16
  "@ds-mo/icons ^7.0.0"
17
17
  ],
18
18
  "optional": [],
@@ -5961,7 +5961,7 @@
5961
5961
  ],
5962
5962
  "accessibility": [
5963
5963
  "The component renders a named navigation region, gives its compact page-size noun a complete accessible label, and gives every icon-only boundary control an explicit page action name.",
5964
- "The visible range and page position use compact slash notation with tabular numerals. A polite atomic status update retains complete ‘of’ and ‘Page’ phrasing with the localized item noun.",
5964
+ "The visible page-size cluster states the localized noun, selected size, and total, for example Rows: 25 of 500. The page position uses compact ‘of’ phrasing, for example 1 of 20. A polite atomic status update retains the complete current range and ‘Page’ phrasing with the localized item noun.",
5965
5965
  "Left and Right Arrow request the adjacent page while focus is within pagination navigation controls. The page-size combobox retains its own arrow-key behavior.",
5966
5966
  "Inactive boundary controls and every control during loading remain non-interactive while retaining their accessible names."
5967
5967
  ],
@@ -5973,7 +5973,7 @@
5973
5973
  "fitToPage appends a Fit to page choice. fitPageSize supplies its effective whole-item capacity; the closed trigger says Fit while the range continues to expose the resulting count. Pagination does not measure layouts itself."
5974
5974
  ],
5975
5975
  "responsiveBehavior": [
5976
- "The compact controls remain on one line with noun, range, and page slash notation. When inline space is still insufficient, the pagination surface scrolls horizontally rather than wrapping labels away from their controls."
5976
+ "The compact controls remain on one line with noun, selected size, total, a vertical divider, and page position. When inline space is still insufficient, the pagination surface scrolls horizontally rather than wrapping labels away from their controls."
5977
5977
  ],
5978
5978
  "frameworkCaveats": {
5979
5979
  "customElements": [
@@ -6070,6 +6070,7 @@
6070
6070
  ],
6071
6071
  "registryDependencies": [
6072
6072
  "button-unfilled",
6073
+ "divider",
6073
6074
  "select",
6074
6075
  "text"
6075
6076
  ]
@@ -8856,14 +8857,14 @@
8856
8857
  "Interactive rows are focusable as native rows, activate with Enter or Space, and do not steal activation from their nested selection or action controls.",
8857
8858
  "Scrollable table regions become keyboard focusable and named only when overflow exists.",
8858
8859
  "Incremental loading, newly appended row counts, failures, and end-of-results transitions are announced through a polite status region without replacing visible state. In grouped tables, announcements name the independently loading group.",
8859
- "Static and infinite tables may show an optional result summary footer when displayedCount and totalCount are finite. Pagination mode instead renders a named Pagination control with compact slash notation, whose range changes are announced independently with complete phrasing. The footer slot can replace summary copy, while footer-leading and footer-trailing remain available in the same compact-bar anatomy."
8860
+ "Static and infinite tables may show an optional result summary footer when displayedCount and totalCount are finite. Pagination mode instead renders a named Pagination control with a compact selected-size total, vertical divider, and page position; range changes are announced independently with complete phrasing. While focus is anywhere inside a paginated table, unmodified Left and Right Arrow request the adjacent page; editable fields, choice controls, sliders, and modified key combinations retain their own keyboard behavior. The footer slot can replace summary copy, while footer-leading and footer-trailing remain available in the same compact-bar anatomy."
8860
8861
  ],
8861
8862
  "states": [
8862
8863
  "Columns, rows, groups, grouping, sorting, selected row IDs, collapsed group IDs, dataMode, pagination, displayedCount, totalCount, and incremental-loading state are controlled inputs. Events communicate intent and never mutate those inputs. The optional header is one full-width composable table-local surface: the component owns its 48px chrome, 8px inset on every side, and sticky placement while the application owns all internal layout, controls, labels, filtering behavior, and action handling. The footer retains its compact-bar composition: application-owned leading status sits left while a controlled result summary or Pagination aligns right, before any trailing action. Content-sized tables remain natural for sparse or fixed-count results. height bounds the complete header, frame, and footer composition. fitViewport reserves the compact-state composition height in the nearest vertical scrollport while growing the visible table into that reservation as surrounding page chrome collapses.",
8863
8864
  "Grouping supports one level. The application supplies groups in a fixed product-defined order and supplies ordered member rows independently. Group section headers show an emphasized text-body-medium label followed by a middle dot and plain secondary loaded progress, for example Critical · 50 of 166. The loaded value comes from the supplied member rows and the total comes from totalCount. A localized countLabel total phrase remains available for the complete assistive progress announcement. Groups may declare an optional intent (brand, neutral, negative, warning, caution, positive) that paints an LTR gradient from the faint intent surface at the label edge into faint neutral at the trailing edge, plus a bold intent title color. Neutral groups remain solid faint neutral. Section separators are painted inside that viewport-width surface so translucent border tokens composite with each intent background. Internal sections keep their separators; a collapsed or empty section header yields its separator only when it is the table's final rendered item. A trailing visually neutral icon-only ButtonUnfilled uses the 24px md double-inset action recipe and toggles controlled collapsedGroupIds, showing ChevronUp while expanded and ChevronDown while collapsed. While any group is expanded, a ChevronDownUp action uses the xs sort-control recipe widened to a table-owned 24px lane and collapses every group. It appears at the inline-end edge of the trailing column declared with kind action when one exists; otherwise a button-hugging 24px by 16px medium-elevation surface floats at the visible scrollport's header edge so the action remains reachable while member columns scroll beneath it. With stickyHeader enabled, each contained section uses its one real section row as a native sticky header inside its real row-group boundary. The browser therefore owns pinning, push-off, scrolling, and resize layout in one pass without a duplicated lane, active-section state, transforms, or scroll-time geometry. Shared grid tracks retain exact header and member-cell alignment. The section surface also stays pinned to the visible horizontal scrollport and spans the smaller of the visible viewport or table width.",
8864
8865
  "An active member sort toggles only between ascending and descending; activating a different sortable label moves the one sorting state to that key. Applications may still clear the controlled sort state explicitly. Grouping does not introduce another interactive direction.",
8865
8866
  "Compound headers can expose multiple related labels with independent sort keys. Each label owns only its content-width interaction target while the active direction remains in the column's alignment-aware sort lane.",
8866
- "Initial loading defaults to ten row-shaped skeletons and preserves row dividers, column dividers, selection lanes, and sticky boundaries. Each column may declare representative text, multiline text, image, Tag, icon, action, or intentionally blank loading geometry; the table applies the matching resolved-cell padding and track anatomy so the placeholder row has the same height and rhythm as its data row. Columns without a declaration use one text line, while action columns infer an icon action placeholder. Empty, initial error, load-more, retry, loading-more, and terminal bands remain fixed to the visible table width while data columns scroll horizontally beneath them. Incremental loading retains existing rows and supports automatic sentinel, manual load-more, retry, and terminal states. When grouping is active, each expanded group owns its load band at the end of its member rows; internal group load bands keep their bottom divider, while a terminal group load band yields it to the table edge or footer. The global bottom-of-table loader is not rendered.",
8867
+ "Initial loading defaults to ten row-shaped skeletons and preserves row dividers, column dividers, selection lanes, and sticky boundaries. A selectable table renders a checkbox-sized control skeleton in its selection lane so loading geometry matches the real checkbox instead of a generic icon. Each column may declare representative text, multiline text, image, Tag, icon, action, or intentionally blank loading geometry; the table applies the matching resolved-cell padding and track anatomy so the placeholder row has the same height and rhythm as its data row. Columns without a declaration use one text line, while action columns infer an icon action placeholder. Empty, initial error, load-more, retry, loading-more, and terminal bands remain fixed to the visible table width while data columns scroll horizontally beneath them. Incremental loading retains existing rows and supports automatic sentinel, manual load-more, retry, and terminal states. When grouping is active, each expanded group owns its load band at the end of its member rows; internal group load bands keep their bottom divider, while a terminal group load band yields it to the table edge or footer. The global bottom-of-table loader is not rendered.",
8867
8868
  "dataMode selects the top-level window: infinite appends ungrouped rows through dsLoadMore when hasMore is true, and pagination renders the controlled page supplied by the application and emits dsPaginationChange. Infinite mode also covers fixed result sets by leaving hasMore false. In a grouped paginated table, pagination counts and windows only parent groups; each expanded parent can still append its own members through dsGroupLoadMore. The application owns requests, cancellation, cursors, deduplication, slicing, and query identity.",
8868
8869
  "When pagination enables Fit to page on a bounded table, the table proposes the number of complete top-level rows that fit below its column header. Grouped tables count group headers only; member rows never affect capacity. Selecting Fit captures that numeric snapshot. A changed fitIdentity requests one fresh snapshot for a new query shape, while viewport resizing alone does not change the active controlled page size.",
8869
8870
  "Rows opt into complete-row activation with interactive and emit dsRowActivate without owning navigation. Selection paints through the shared selected ::before layer; interactive hover and press paint through the shared ::after layer.",
@@ -156,7 +156,7 @@
156
156
  },
157
157
  "peerDependencies": {
158
158
  "required": [
159
- "@ds-mo/tokens ^6.2.2",
159
+ "@ds-mo/tokens ^6.5.0",
160
160
  "@ds-mo/icons ^7.0.0"
161
161
  ],
162
162
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -883,7 +883,7 @@
883
883
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: options, sections.",
884
884
  "peerDependencies": {
885
885
  "required": [
886
- "@ds-mo/tokens ^6.2.2",
886
+ "@ds-mo/tokens ^6.5.0",
887
887
  "@ds-mo/icons ^7.0.0"
888
888
  ],
889
889
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -566,7 +566,7 @@
566
566
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: navigation, pageChrome, tools.",
567
567
  "peerDependencies": {
568
568
  "required": [
569
- "@ds-mo/tokens ^6.2.2",
569
+ "@ds-mo/tokens ^6.5.0",
570
570
  "@ds-mo/icons ^7.0.0"
571
571
  ],
572
572
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -301,7 +301,7 @@
301
301
  },
302
302
  "peerDependencies": {
303
303
  "required": [
304
- "@ds-mo/tokens ^6.2.2",
304
+ "@ds-mo/tokens ^6.5.0",
305
305
  "@ds-mo/icons ^7.0.0"
306
306
  ],
307
307
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
@@ -390,7 +390,7 @@
390
390
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: headers, items.",
391
391
  "peerDependencies": {
392
392
  "required": [
393
- "@ds-mo/tokens ^6.2.2",
393
+ "@ds-mo/tokens ^6.5.0",
394
394
  "@ds-mo/icons ^7.0.0"
395
395
  ],
396
396
  "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."