@scalewing/react 1.39.0 → 1.41.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 (181) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +255 -5
  3. package/dist/calendar-labels.d.ts +2 -0
  4. package/dist/calendar-labels.js +7 -0
  5. package/dist/calendar-month.d.ts +6 -0
  6. package/dist/calendar-month.js +15 -0
  7. package/dist/components/BarChart.d.ts +20 -4
  8. package/dist/components/BarChart.js +13 -6
  9. package/dist/components/ButtonGroup.d.ts +8 -1
  10. package/dist/components/ButtonGroup.js +11 -2
  11. package/dist/components/DateField.d.ts +14 -2
  12. package/dist/components/DateField.js +14 -11
  13. package/dist/components/DateRangeButton.d.ts +65 -0
  14. package/dist/components/DateRangeButton.js +54 -0
  15. package/dist/components/DenominationGrid.d.ts +3 -2
  16. package/dist/components/DenominationGrid.js +21 -3
  17. package/dist/components/Dialog.d.ts +29 -13
  18. package/dist/components/Dialog.js +22 -20
  19. package/dist/components/Field.d.ts +13 -2
  20. package/dist/components/Field.js +14 -38
  21. package/dist/components/FilterChips.d.ts +7 -37
  22. package/dist/components/FilterChips.js +32 -24
  23. package/dist/components/ListGroup.d.ts +33 -0
  24. package/dist/components/ListGroup.js +19 -0
  25. package/dist/components/ListRow.d.ts +60 -0
  26. package/dist/components/ListRow.js +60 -0
  27. package/dist/components/NavCount.d.ts +21 -0
  28. package/dist/components/NavCount.js +23 -0
  29. package/dist/components/SectionNav.js +1 -8
  30. package/dist/components/SegmentedControl.d.ts +17 -1
  31. package/dist/components/SegmentedControl.js +11 -3
  32. package/dist/components/StatTile.d.ts +11 -4
  33. package/dist/components/StatTile.js +11 -4
  34. package/dist/components/Switch.d.ts +16 -1
  35. package/dist/components/Switch.js +17 -6
  36. package/dist/components/action-bar/ActionBarSummary.d.ts +10 -2
  37. package/dist/components/action-bar/ActionBarSummary.js +11 -2
  38. package/dist/components/{date-field → calendar}/CalendarGrid.d.ts +17 -2
  39. package/dist/components/{date-field → calendar}/CalendarGrid.js +11 -3
  40. package/dist/components/calendar/CalendarPopover.d.ts +25 -0
  41. package/dist/components/calendar/CalendarPopover.js +22 -0
  42. package/dist/components/calendar/MonthStep.d.ts +16 -0
  43. package/dist/components/calendar/MonthStep.js +17 -0
  44. package/dist/components/calendar/use-grid-focus.d.ts +18 -0
  45. package/dist/components/calendar/use-grid-focus.js +35 -0
  46. package/dist/components/calendar/wrap-tab.d.ts +7 -0
  47. package/dist/components/calendar/wrap-tab.js +29 -0
  48. package/dist/components/date-field/CalendarDialog.js +9 -67
  49. package/dist/components/date-field/CalendarEntryButton.d.ts +24 -0
  50. package/dist/components/date-field/CalendarEntryButton.js +16 -0
  51. package/dist/components/date-field/CalendarHeader.js +2 -11
  52. package/dist/components/date-field/TypedEntry.d.ts +26 -0
  53. package/dist/components/date-field/TypedEntry.js +13 -0
  54. package/dist/components/date-range/DateRangePopover.d.ts +7 -0
  55. package/dist/components/date-range/DateRangePopover.js +17 -0
  56. package/dist/components/date-range/DateRangeSheet.d.ts +7 -0
  57. package/dist/components/date-range/DateRangeSheet.js +15 -0
  58. package/dist/components/date-range/RangeMonths.d.ts +28 -0
  59. package/dist/components/date-range/RangeMonths.js +50 -0
  60. package/dist/components/date-range/RangePresets.d.ts +16 -0
  61. package/dist/components/date-range/RangePresets.js +10 -0
  62. package/dist/components/date-range/RangeSummary.d.ts +15 -0
  63. package/dist/components/date-range/RangeSummary.js +11 -0
  64. package/dist/components/date-range/range-panel-props.d.ts +31 -0
  65. package/dist/components/date-range/range-panel-props.js +1 -0
  66. package/dist/components/date-range/use-range-popup.d.ts +21 -0
  67. package/dist/components/date-range/use-range-popup.js +53 -0
  68. package/dist/components/denomination-grid/CountCell.d.ts +16 -0
  69. package/dist/components/denomination-grid/CountCell.js +14 -0
  70. package/dist/components/denomination-grid/DenominationStrip.d.ts +4 -1
  71. package/dist/components/denomination-grid/DenominationStrip.js +2 -2
  72. package/dist/components/denomination-grid/EntryCell.d.ts +3 -1
  73. package/dist/components/denomination-grid/EntryCell.js +2 -2
  74. package/dist/components/denomination-grid/StripRow.js +1 -10
  75. package/dist/components/denomination-grid/TransposedStrip.d.ts +17 -0
  76. package/dist/components/denomination-grid/TransposedStrip.js +43 -0
  77. package/dist/components/denomination-grid/types.d.ts +31 -0
  78. package/dist/components/denomination-grid/types.js +7 -1
  79. package/dist/components/denomination-grid/validate-options.d.ts +7 -0
  80. package/dist/components/denomination-grid/validate-options.js +27 -0
  81. package/dist/components/dialog/DialogFooter.d.ts +6 -5
  82. package/dist/components/dialog/DialogFooter.js +6 -6
  83. package/dist/components/dialog/validate.d.ts +24 -0
  84. package/dist/components/dialog/validate.js +23 -0
  85. package/dist/components/field/field-checks.d.ts +34 -0
  86. package/dist/components/field/field-checks.js +42 -0
  87. package/dist/components/filter-chips/FilterChip.d.ts +16 -0
  88. package/dist/components/filter-chips/FilterChip.js +20 -0
  89. package/dist/components/filter-chips/options.d.ts +75 -0
  90. package/dist/components/filter-chips/options.js +11 -0
  91. package/dist/components/filter-chips/validate.d.ts +9 -0
  92. package/dist/components/filter-chips/validate.js +48 -0
  93. package/dist/components/link-press.d.ts +7 -0
  94. package/dist/components/link-press.js +13 -0
  95. package/dist/components/list/ListRowAccessoryMark.d.ts +5 -0
  96. package/dist/components/list/ListRowAccessoryMark.js +7 -0
  97. package/dist/components/list/ListRowContent.d.ts +22 -0
  98. package/dist/components/list/ListRowContent.js +11 -0
  99. package/dist/components/list/list-row-container.d.ts +5 -0
  100. package/dist/components/list/list-row-container.js +6 -0
  101. package/dist/components/use-media-query.d.ts +5 -0
  102. package/dist/components/use-media-query.js +18 -0
  103. package/dist/css/chart-tones.d.ts +2 -0
  104. package/dist/css/chart-tones.js +5 -1
  105. package/dist/css/chevron.d.ts +6 -0
  106. package/dist/css/chevron.js +14 -0
  107. package/dist/css/css-bar-chart.d.ts +17 -2
  108. package/dist/css/css-bar-chart.js +38 -7
  109. package/dist/css/css-button-group-attached.d.ts +3 -0
  110. package/dist/css/css-button-group-attached.js +26 -5
  111. package/dist/css/css-button-group-track.js +1 -1
  112. package/dist/css/css-canvas-grouped.d.ts +17 -0
  113. package/dist/css/css-canvas-grouped.js +40 -0
  114. package/dist/css/css-checkbox.js +2 -2
  115. package/dist/css/css-components.js +15 -0
  116. package/dist/css/css-count-pill.d.ts +2 -0
  117. package/dist/css/css-count-pill.js +54 -0
  118. package/dist/css/css-date-field-calendar-entry.d.ts +11 -0
  119. package/dist/css/css-date-field-calendar-entry.js +50 -0
  120. package/dist/css/css-date-field.js +7 -2
  121. package/dist/css/css-date-range-presets.d.ts +2 -0
  122. package/dist/css/css-date-range-presets.js +109 -0
  123. package/dist/css/css-date-range.d.ts +2 -0
  124. package/dist/css/css-date-range.js +197 -0
  125. package/dist/css/css-denomination-grid.js +4 -0
  126. package/dist/css/css-denomination-transposed.d.ts +4 -0
  127. package/dist/css/css-denomination-transposed.js +178 -0
  128. package/dist/css/css-dialog-canvas.d.ts +3 -0
  129. package/dist/css/css-dialog-canvas.js +20 -0
  130. package/dist/css/css-dialog-frame.js +19 -2
  131. package/dist/css/css-dialog-grabber.d.ts +4 -0
  132. package/dist/css/css-dialog-grabber.js +56 -0
  133. package/dist/css/css-dialog.js +3 -2
  134. package/dist/css/css-document.js +3 -0
  135. package/dist/css/css-field-width.d.ts +12 -0
  136. package/dist/css/css-field-width.js +49 -0
  137. package/dist/css/css-field.js +4 -0
  138. package/dist/css/css-filter-chips-layout.d.ts +2 -0
  139. package/dist/css/css-filter-chips-layout.js +42 -0
  140. package/dist/css/css-filter-chips.js +4 -0
  141. package/dist/css/css-list-row.d.ts +8 -0
  142. package/dist/css/css-list-row.js +209 -0
  143. package/dist/css/css-list.d.ts +3 -0
  144. package/dist/css/css-list.js +85 -0
  145. package/dist/css/css-scroll-region.d.ts +18 -0
  146. package/dist/css/css-scroll-region.js +41 -0
  147. package/dist/css/css-section-nav-filled.js +2 -25
  148. package/dist/css/css-segmented-sizing.d.ts +13 -0
  149. package/dist/css/css-segmented-sizing.js +66 -0
  150. package/dist/css/css-segmented.js +4 -0
  151. package/dist/css/css-stat-tile.d.ts +7 -0
  152. package/dist/css/css-stat-tile.js +16 -0
  153. package/dist/css/css-steps.js +2 -2
  154. package/dist/css/css-switch.d.ts +6 -0
  155. package/dist/css/css-switch.js +39 -0
  156. package/dist/css/css-table-bounded-edges.js +4 -27
  157. package/dist/css/range-band.d.ts +2 -0
  158. package/dist/css/range-band.js +7 -0
  159. package/dist/css/stacking.d.ts +1 -0
  160. package/dist/css/stacking.js +6 -3
  161. package/dist/css/stylesheet.js +10 -0
  162. package/dist/date-field-labels.d.ts +5 -0
  163. package/dist/date-field-labels.js +1 -0
  164. package/dist/date-range-draft.d.ts +26 -0
  165. package/dist/date-range-draft.js +36 -0
  166. package/dist/date-range-input.d.ts +26 -0
  167. package/dist/date-range-input.js +58 -0
  168. package/dist/date-range-labels.d.ts +22 -0
  169. package/dist/date-range-labels.js +26 -0
  170. package/dist/date-range-view.d.ts +12 -0
  171. package/dist/date-range-view.js +29 -0
  172. package/dist/date-range-words.d.ts +11 -0
  173. package/dist/date-range-words.js +40 -0
  174. package/dist/index.d.ts +16 -9
  175. package/dist/index.js +14 -7
  176. package/dist/list-options.d.ts +71 -0
  177. package/dist/list-options.js +84 -0
  178. package/dist/styles.css +863 -41
  179. package/dist/theme/ThemeProvider.d.ts +11 -1
  180. package/dist/theme/ThemeProvider.js +4 -2
  181. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { scrollShadeColor } from './css-scroll-region.js';
1
+ import { blockEdgeShadeRules, blockShade } from './css-scroll-region.js';
2
2
  const region = '.sw-table-bounded';
3
3
  /*
4
4
  * While rows are scrolled out past the top or bottom of a bounded region
@@ -17,7 +17,6 @@ const region = '.sw-table-bounded';
17
17
  * is. Forced colours draw no shade; the system scrollbar is the cue.
18
18
  */
19
19
  function shadeRules() {
20
- const shade = (direction) => `linear-gradient(to ${direction}, ${scrollShadeColor}, transparent)`;
21
20
  const headCells = `${region}.sw-scroll-more-top > .sw-table-sticky > thead > tr:last-child > :is(th, td)::before`;
22
21
  const footCells = `${region}.sw-scroll-more-bottom > .sw-table > .sw-table-footer-sticky > tr:first-child > :is(th, td)::before`;
23
22
  const noHead = ':not(:has(> .sw-table > thead))';
@@ -26,7 +25,7 @@ function shadeRules() {
26
25
  const ownBottom = `${region}.sw-scroll-more-bottom${noPinnedFoot}`;
27
26
  const ownBoth = `${region}.sw-scroll-more-top.sw-scroll-more-bottom${noHead}${noPinnedFoot}`;
28
27
  return `${headCells} {
29
- background: ${shade('bottom')};
28
+ background: ${blockShade('bottom')};
30
29
  border-bottom: 0;
31
30
  border-top: 1px solid var(--sw-color-border);
32
31
  box-sizing: border-box;
@@ -36,7 +35,7 @@ function shadeRules() {
36
35
  }
37
36
 
38
37
  ${footCells} {
39
- background: ${shade('top')};
38
+ background: ${blockShade('top')};
40
39
  border-bottom: 2px solid var(--sw-color-border);
41
40
  border-top: 0;
42
41
  box-sizing: border-box;
@@ -45,33 +44,11 @@ ${footCells} {
45
44
  inset-block-start: auto;
46
45
  }
47
46
 
48
- ${ownTop},
49
- ${ownBottom} {
50
- background-repeat: no-repeat;
51
- background-size: 100% var(--sw-space-5);
52
- }
53
-
54
- ${ownTop} {
55
- background-image: ${shade('bottom')};
56
- background-position: top;
57
- }
58
-
59
- ${ownBottom} {
60
- background-image: ${shade('top')};
61
- background-position: bottom;
62
- }
63
-
64
- ${ownBoth} {
65
- background-image: ${shade('bottom')}, ${shade('top')};
66
- background-position: top, bottom;
67
- }
47
+ ${blockEdgeShadeRules({ top: ownTop, bottom: ownBottom, both: ownBoth })}
68
48
 
69
49
  @media (forced-colors: active) {
70
50
  ${headCells},
71
51
  ${footCells} { background: none; border-color: CanvasText; }
72
- ${ownTop},
73
- ${ownBottom},
74
- ${ownBoth} { background-image: none; }
75
52
  }`;
76
53
  }
77
54
  /*
@@ -0,0 +1,2 @@
1
+ export declare const rangeBand = "color-mix(in srgb, var(--sw-color-accent) 16%, transparent)";
2
+ export declare const rangeBandHover = "color-mix(in srgb, var(--sw-color-accent) 24%, transparent)";
@@ -0,0 +1,7 @@
1
+ /*
2
+ * A range's band in a calendar: the accent at 16 % over the calendar's
3
+ * glass, 24 % under the pointer. CalendarButton's tint and DateRangeButton's
4
+ * days between a range's ends share it, so the two read as one band.
5
+ */
6
+ export const rangeBand = 'color-mix(in srgb, var(--sw-color-accent) 16%, transparent)';
7
+ export const rangeBandHover = 'color-mix(in srgb, var(--sw-color-accent) 24%, transparent)';
@@ -4,6 +4,7 @@ export declare const stackingOrder: {
4
4
  readonly bottomChrome: 3;
5
5
  readonly popupHost: 4;
6
6
  readonly topChrome: 5;
7
+ readonly sheetGrabber: 6;
7
8
  readonly popup: 10;
8
9
  };
9
10
  export type StackingLayer = keyof typeof stackingOrder;
@@ -17,7 +17,9 @@
17
17
  * Dialog's title band, inside its dialog), over a lifted
18
18
  * surface that scrolls up under it (the header is the page's way back, the
19
19
  * strip its way between sections, and a popup opens downward).
20
- * 6. `popup`: a popup outside any lifted surface (Select list, ActionMenu
20
+ * 6. `sheetGrabber`: a bottom sheet's grabber, inside its dialog, over the
21
+ * banded title band that sticks under it.
22
+ * 7. `popup`: a popup outside any lifted surface (Select list, ActionMenu
21
23
  * list, MultiSelect panel, Combobox list, Tooltip, the DateField and CalendarButton
22
24
  * calendar) over everything in the page.
23
25
  *
@@ -29,6 +31,7 @@ export const stackingOrder = {
29
31
  bottomChrome: 3,
30
32
  popupHost: 4,
31
33
  topChrome: 5,
34
+ sheetGrabber: 6,
32
35
  popup: 10,
33
36
  };
34
37
  /*
@@ -58,8 +61,8 @@ const openPopups = [
58
61
  // popover API exists.
59
62
  '.sw-combobox-popup',
60
63
  '.sw-tooltip:not([hidden])',
61
- // DateField and CalendarButton share it. Rendered only while open; on the
62
- // top layer where the popover API exists.
64
+ // DateField, CalendarButton and DateRangeButton share it. Rendered only
65
+ // while open; on the top layer where the popover API exists.
63
66
  '.sw-date-field-calendar',
64
67
  ].join(', ');
65
68
  const popupHosts = ['.sw-card-glass', '.sw-accordion'];
@@ -6,6 +6,9 @@ import { accordionClassCatalog } from './css-accordion.js';
6
6
  import { switchClassCatalog } from './css-switch.js';
7
7
  import { dateFieldClassCatalog } from './css-date-field.js';
8
8
  import { calendarButtonClassCatalog } from './css-calendar-button.js';
9
+ import { dateRangeClassCatalog } from './css-date-range.js';
10
+ import { listClassCatalog } from './css-list.js';
11
+ import { countPillClassCatalog } from './css-count-pill.js';
9
12
  import { checkboxClassCatalog } from './css-checkbox.js';
10
13
  import { radioGroupClassCatalog } from './css-radio-group.js';
11
14
  import { spinnerClassCatalog } from './css-spinner.js';
@@ -45,6 +48,8 @@ import { sectionNavClassCatalog } from './css-section-nav.js';
45
48
  import { dialogClassCatalog } from './css-dialog.js';
46
49
  import { dialogBandedClassCatalog } from './css-dialog-banded.js';
47
50
  import { dialogFrameClassCatalog } from './css-dialog-frame.js';
51
+ import { dialogCanvasClassCatalog } from './css-dialog-canvas.js';
52
+ import { dialogGrabberClassCatalog } from './css-dialog-grabber.js';
48
53
  import { selectClassCatalog } from './css-select.js';
49
54
  import { multiSelectClassCatalog } from './css-multi-select.js';
50
55
  import { comboboxClassCatalog } from './css-combobox.js';
@@ -86,6 +91,8 @@ export function utilityClassCatalog() {
86
91
  ...dialogClassCatalog(),
87
92
  ...dialogFrameClassCatalog(),
88
93
  ...dialogBandedClassCatalog(),
94
+ ...dialogCanvasClassCatalog(),
95
+ ...dialogGrabberClassCatalog(),
89
96
  ...accordionClassCatalog(),
90
97
  ...selectClassCatalog(),
91
98
  ...actionMenuClassCatalog(),
@@ -95,6 +102,9 @@ export function utilityClassCatalog() {
95
102
  ...switchClassCatalog(),
96
103
  ...dateFieldClassCatalog(),
97
104
  ...calendarButtonClassCatalog(),
105
+ ...dateRangeClassCatalog(),
106
+ ...listClassCatalog(),
107
+ ...countPillClassCatalog(),
98
108
  ...checkboxClassCatalog(),
99
109
  ...radioGroupClassCatalog(),
100
110
  ...spinnerClassCatalog(),
@@ -28,6 +28,11 @@ export type DateFieldLabels = {
28
28
  * outside `min` and `max`.
29
29
  */
30
30
  outOfRange: string;
31
+ /**
32
+ * Said after a calendar entry's name while the field is required (a
33
+ * button has no required state of its own), such as "Required".
34
+ */
35
+ required: string;
31
36
  /** Placeholder letters, arranged in the locale's field order. */
32
37
  dayPlaceholder: string;
33
38
  monthPlaceholder: string;
@@ -8,6 +8,7 @@ export const defaultDateFieldLabels = {
8
8
  clear: 'Clear',
9
9
  invalidEntry: 'Enter a valid date.',
10
10
  outOfRange: 'Choose a date in the allowed range.',
11
+ required: 'Required',
11
12
  dayPlaceholder: 'DD',
12
13
  monthPlaceholder: 'MM',
13
14
  yearPlaceholder: 'YYYY',
@@ -0,0 +1,26 @@
1
+ import { type DateOnlyRange } from './date-only.js';
2
+ /**
3
+ * A range being picked in DateRangeButton's calendar: the days so far, and
4
+ * whether the next press sets its end. A first press makes a one-day range
5
+ * that waits for its end, so Apply always has a whole range to give.
6
+ */
7
+ export type RangeDraft = {
8
+ range: DateOnlyRange;
9
+ awaitingEnd: boolean;
10
+ };
11
+ /** A whole range, such as the value the calendar opens on. */
12
+ export declare function settledDraft(range: DateOnlyRange): RangeDraft;
13
+ /**
14
+ * The draft after a press on `day`: the first press sets the start, the
15
+ * second the end. A second press before the start starts over from that
16
+ * day, and a press on a whole range starts a new one.
17
+ */
18
+ export declare function pressDay(draft: RangeDraft, day: string): RangeDraft;
19
+ /** The days in a range, both ends counted: 1 for a one-day range. */
20
+ export declare function rangeDayCount(range: DateOnlyRange): number;
21
+ /**
22
+ * The last day a press may pick: `max`, or while the draft waits for its
23
+ * end, the day `maxDays` long from its start when that is earlier.
24
+ */
25
+ export declare function latestPick(draft: RangeDraft, max: string | undefined, maxDays: number | undefined): string | undefined;
26
+ export declare function sameRange(a: DateOnlyRange, b: DateOnlyRange): boolean;
@@ -0,0 +1,36 @@
1
+ import { addDays, daysBetween } from './calendar-month.js';
2
+ import { clampDateOnly } from './date-only.js';
3
+ /** A whole range, such as the value the calendar opens on. */
4
+ export function settledDraft(range) {
5
+ return { range, awaitingEnd: false };
6
+ }
7
+ /**
8
+ * The draft after a press on `day`: the first press sets the start, the
9
+ * second the end. A second press before the start starts over from that
10
+ * day, and a press on a whole range starts a new one.
11
+ */
12
+ export function pressDay(draft, day) {
13
+ if (draft.awaitingEnd && day >= draft.range.start)
14
+ return {
15
+ range: { start: draft.range.start, end: day },
16
+ awaitingEnd: false,
17
+ };
18
+ return { range: { start: day, end: day }, awaitingEnd: true };
19
+ }
20
+ /** The days in a range, both ends counted: 1 for a one-day range. */
21
+ export function rangeDayCount(range) {
22
+ return daysBetween(range.start, range.end) + 1;
23
+ }
24
+ /**
25
+ * The last day a press may pick: `max`, or while the draft waits for its
26
+ * end, the day `maxDays` long from its start when that is earlier.
27
+ */
28
+ export function latestPick(draft, max, maxDays) {
29
+ if (!draft.awaitingEnd || maxDays === undefined)
30
+ return max;
31
+ const longest = clampDateOnly(addDays(draft.range.start, maxDays - 1));
32
+ return max === undefined || longest < max ? longest : max;
33
+ }
34
+ export function sameRange(a, b) {
35
+ return a.start === b.start && a.end === b.end;
36
+ }
@@ -0,0 +1,26 @@
1
+ import { type DateOnlyRange } from './date-only.js';
2
+ /** A named range a person can choose in one press, such as "Last 7 days". */
3
+ export type DateRangePreset = {
4
+ /** Unique among the presets; never shown. */
5
+ id: string;
6
+ label: string;
7
+ range: DateOnlyRange;
8
+ };
9
+ export type DateRangeInput = {
10
+ label: string;
11
+ value: DateOnlyRange;
12
+ presets: readonly DateRangePreset[];
13
+ min?: string;
14
+ max?: string;
15
+ maxDays?: number;
16
+ today?: string;
17
+ weekStartsOn: number;
18
+ };
19
+ /**
20
+ * Fails closed on DateRangeButton props it cannot draw: empty words, a
21
+ * malformed or reversed value, bounds or today, a `maxDays` that is not a
22
+ * whole number from 1, and presets that repeat an id or that a press could
23
+ * not pick (outside the bounds or longer than `maxDays`). A value outside
24
+ * the bounds stays the value, as on CalendarButton.
25
+ */
26
+ export declare function assertDateRangeInput(input: DateRangeInput): void;
@@ -0,0 +1,58 @@
1
+ import { assertWeekStart } from './calendar-month.js';
2
+ import { rangeDayCount } from './date-range-draft.js';
3
+ import { assertDateOnly, assertDateRange, isOutsideDateRange, } from './date-only.js';
4
+ function isBlank(text) {
5
+ return typeof text !== 'string' || text.trim() === '';
6
+ }
7
+ function assertValue(value) {
8
+ if (typeof value !== 'object' || value === null)
9
+ throw new RangeError('value must be a { start, end } range');
10
+ assertDateOnly('value.start', value.start);
11
+ assertDateOnly('value.end', value.end);
12
+ if (value.start > value.end)
13
+ throw new RangeError('value.start must not be after value.end');
14
+ }
15
+ function assertBounds(min, max) {
16
+ if (min !== undefined)
17
+ assertDateOnly('min', min);
18
+ if (max !== undefined)
19
+ assertDateOnly('max', max);
20
+ if (min !== undefined && max !== undefined && min > max)
21
+ throw new RangeError('min must not be after max');
22
+ }
23
+ function assertPreset(preset, { min, max, maxDays }) {
24
+ if (isBlank(preset.id) || isBlank(preset.label))
25
+ throw new RangeError('presets must have non-empty ids and labels');
26
+ assertDateRange(preset.range);
27
+ const { start, end } = preset.range;
28
+ if (isOutsideDateRange(start, min, max) || isOutsideDateRange(end, min, max))
29
+ throw new RangeError(`preset ${preset.id} must lie inside min and max`);
30
+ if (maxDays !== undefined && rangeDayCount(preset.range) > maxDays)
31
+ throw new RangeError(`preset ${preset.id} must not exceed maxDays`);
32
+ }
33
+ /**
34
+ * Fails closed on DateRangeButton props it cannot draw: empty words, a
35
+ * malformed or reversed value, bounds or today, a `maxDays` that is not a
36
+ * whole number from 1, and presets that repeat an id or that a press could
37
+ * not pick (outside the bounds or longer than `maxDays`). A value outside
38
+ * the bounds stays the value, as on CalendarButton.
39
+ */
40
+ export function assertDateRangeInput(input) {
41
+ if (isBlank(input.label))
42
+ throw new RangeError('label must be non-empty text');
43
+ assertValue(input.value);
44
+ assertBounds(input.min, input.max);
45
+ if (input.today !== undefined)
46
+ assertDateOnly('today', input.today);
47
+ assertWeekStart(input.weekStartsOn);
48
+ const { maxDays } = input;
49
+ if (maxDays !== undefined && (!Number.isInteger(maxDays) || maxDays < 1))
50
+ throw new RangeError('maxDays must be a whole number from 1');
51
+ const ids = new Set();
52
+ for (const preset of input.presets) {
53
+ assertPreset(preset, input);
54
+ if (ids.has(preset.id))
55
+ throw new RangeError(`presets must have unique ids: ${preset.id}`);
56
+ ids.add(preset.id);
57
+ }
58
+ }
@@ -0,0 +1,22 @@
1
+ import { type CalendarButtonLabels } from './calendar-button-labels.js';
2
+ /**
3
+ * DateRangeButton's own words. Products pass their translations; month and
4
+ * weekday names, and the dates themselves, come from `Intl` instead.
5
+ */
6
+ export type DateRangeButtonLabels = Pick<CalendarButtonLabels, 'previousMonth' | 'nextMonth' | 'nameSeparator'> & {
7
+ /** Names the list of presets, such as "Quick ranges". */
8
+ presets: string;
9
+ /** Applies the chosen range and closes the calendar, such as "Apply". */
10
+ apply: string;
11
+ /** Closes the calendar and keeps the range it opened with. */
12
+ cancel: string;
13
+ /** The bottom sheet's close button. */
14
+ close: string;
15
+ /** How to pick, shown under the calendar, such as "Choose a first and a last day." */
16
+ hint: string;
17
+ /** The length of the chosen range, such as "7 days". */
18
+ dayCount: (days: number) => string;
19
+ };
20
+ export declare const defaultDateRangeButtonLabels: DateRangeButtonLabels;
21
+ /** Consumer words over the English defaults; empty words fail closed. */
22
+ export declare function resolveDateRangeButtonLabels(labels?: Partial<DateRangeButtonLabels>): DateRangeButtonLabels;
@@ -0,0 +1,26 @@
1
+ import { defaultNameSeparator, } from './calendar-button-labels.js';
2
+ export const defaultDateRangeButtonLabels = {
3
+ previousMonth: 'Previous month',
4
+ nextMonth: 'Next month',
5
+ nameSeparator: defaultNameSeparator,
6
+ presets: 'Presets',
7
+ apply: 'Apply',
8
+ cancel: 'Cancel',
9
+ close: 'Close',
10
+ hint: 'Choose a first and a last day.',
11
+ dayCount: (days) => (days === 1 ? '1 day' : `${days} days`),
12
+ };
13
+ /** Consumer words over the English defaults; empty words fail closed. */
14
+ export function resolveDateRangeButtonLabels(labels = {}) {
15
+ const resolved = { ...defaultDateRangeButtonLabels, ...labels };
16
+ const { dayCount, nameSeparator, ...words } = resolved;
17
+ for (const [key, text] of Object.entries(words))
18
+ if (typeof text !== 'string' || text.trim() === '')
19
+ throw new RangeError(`labels.${key} must be non-empty text`);
20
+ // Only an empty string is refused: a lone space is a valid separator.
21
+ if (typeof nameSeparator !== 'string' || nameSeparator === '')
22
+ throw new RangeError('labels.nameSeparator must be non-empty text');
23
+ if (typeof dayCount !== 'function')
24
+ throw new RangeError('labels.dayCount must be a function');
25
+ return resolved;
26
+ }
@@ -0,0 +1,12 @@
1
+ import { type CalendarMonth } from './calendar-month.js';
2
+ /** How many months a range calendar shows: two side by side, or one. */
3
+ export type RangeMonthCount = 1 | 2;
4
+ /**
5
+ * The first month a range calendar shows so that `focusDate` is in view.
6
+ * A view that already holds it stays; a focus date before it becomes the
7
+ * first month, and one after it the last. With no view yet, the focus
8
+ * date's month is the last one shown, but never a month before `min`'s.
9
+ */
10
+ export declare function firstShownMonth(focusDate: string, count: RangeMonthCount, shown: CalendarMonth | undefined, min: string | undefined): CalendarMonth;
11
+ /** The months shown from `first`, in order. */
12
+ export declare function shownMonths(first: CalendarMonth, count: RangeMonthCount): CalendarMonth[];
@@ -0,0 +1,29 @@
1
+ import { monthOf, monthsBetween, shiftMonth, } from './calendar-month.js';
2
+ /**
3
+ * The first month a range calendar shows so that `focusDate` is in view.
4
+ * A view that already holds it stays; a focus date before it becomes the
5
+ * first month, and one after it the last. With no view yet, the focus
6
+ * date's month is the last one shown, but never a month before `min`'s.
7
+ */
8
+ export function firstShownMonth(focusDate, count, shown, min) {
9
+ const focus = monthOf(focusDate);
10
+ if (shown !== undefined) {
11
+ const offset = monthsBetween(shown, focus);
12
+ if (offset >= 0 && offset < count)
13
+ return shown;
14
+ if (offset < 0)
15
+ return focus;
16
+ return shiftMonth(focus, 1 - count);
17
+ }
18
+ const first = shiftMonth(focus, 1 - count);
19
+ // No month before 0001 exists: the first year's January leads.
20
+ if (first.year < 1)
21
+ return focus;
22
+ if (min !== undefined && monthsBetween(first, monthOf(min)) > 0)
23
+ return monthOf(min);
24
+ return first;
25
+ }
26
+ /** The months shown from `first`, in order. */
27
+ export function shownMonths(first, count) {
28
+ return Array.from({ length: count }, (_, index) => shiftMonth(first, index));
29
+ }
@@ -0,0 +1,11 @@
1
+ import { type DateOnlyRange } from './date-only.js';
2
+ /**
3
+ * A range as the button shows it, the locale sharing what both ends have,
4
+ * such as "Oct 6 – 12, 2026", or "Oct 6, 2026" for one day.
5
+ */
6
+ export declare function formatRangeShort(range: DateOnlyRange, locale: string): string;
7
+ /**
8
+ * A range with its weekdays, as the calendar states the one being picked,
9
+ * such as "Tue, Oct 6 – Mon, Oct 12, 2026".
10
+ */
11
+ export declare function formatRangeLong(range: DateOnlyRange, locale: string): string;
@@ -0,0 +1,40 @@
1
+ import { dateFormatter, formatterDate } from './date-formatters.js';
2
+ import { parseDateOnly } from './date-only.js';
3
+ const shortRange = {
4
+ month: 'short',
5
+ day: 'numeric',
6
+ year: 'numeric',
7
+ };
8
+ const longRange = {
9
+ weekday: 'short',
10
+ month: 'short',
11
+ day: 'numeric',
12
+ year: 'numeric',
13
+ };
14
+ function formatRange(range, locale, options) {
15
+ const start = parseDateOnly(range.start);
16
+ const end = parseDateOnly(range.end);
17
+ if (!start || !end)
18
+ return '';
19
+ const format = dateFormatter(locale, options);
20
+ // Browsers before formatRange (Safari 14.0) write both ends in full.
21
+ if (typeof format.formatRange !== 'function')
22
+ return range.start === range.end
23
+ ? format.format(formatterDate(start))
24
+ : `${format.format(formatterDate(start))} – ${format.format(formatterDate(end))}`;
25
+ return format.formatRange(formatterDate(start), formatterDate(end));
26
+ }
27
+ /**
28
+ * A range as the button shows it, the locale sharing what both ends have,
29
+ * such as "Oct 6 – 12, 2026", or "Oct 6, 2026" for one day.
30
+ */
31
+ export function formatRangeShort(range, locale) {
32
+ return formatRange(range, locale, shortRange);
33
+ }
34
+ /**
35
+ * A range with its weekdays, as the calendar states the one being picked,
36
+ * such as "Tue, Oct 6 – Mon, Oct 12, 2026".
37
+ */
38
+ export function formatRangeLong(range, locale) {
39
+ return formatRange(range, locale, longRange);
40
+ }
package/dist/index.d.ts CHANGED
@@ -2,9 +2,13 @@ export { ActionMenu, type ActionMenuAlign, type ActionMenuItem, type ActionMenuP
2
2
  export { ActionBar, type ActionBarProps, type ActionBarSummary, type ActionBarSummaryTone, } from './components/ActionBar.js';
3
3
  export { Accordion } from './components/Accordion.js';
4
4
  export type { AccordionProps, AccordionSize } from './components/Accordion.js';
5
- export { Switch, type SwitchProps } from './components/Switch.js';
6
- export { DateField, type DateFieldLabels, type DateFieldProps, type WeekStart, } from './components/DateField.js';
5
+ export { Switch, switchCheckedTones, switchLayouts, type SwitchCheckedTone, type SwitchLayout, type SwitchProps, } from './components/Switch.js';
6
+ export { DateField, dateFieldEntries, type DateFieldEntry, type DateFieldLabels, type DateFieldProps, type WeekStart, } from './components/DateField.js';
7
7
  export { CalendarButton, type CalendarButtonLabels, type CalendarButtonProps, type CalendarButtonRange, } from './components/CalendarButton.js';
8
+ export { DateRangeButton, type DateRangeButtonLabels, type DateRangeButtonProps, type DateRangeButtonValue, type DateRangePreset, } from './components/DateRangeButton.js';
9
+ export { ListGroup, type ListGroupProps } from './components/ListGroup.js';
10
+ export { ListRow, type ListRowProps } from './components/ListRow.js';
11
+ export { listGroupVariants, listRowTitleAppearances, listRowTones, listRowValueTones, type ListGroupMaxHeight, type ListGroupVariant, type ListRowTitleAppearance, type ListRowTone, type ListRowValueTone, } from './list-options.js';
8
12
  export { Checkbox, type CheckboxProps } from './components/Checkbox.js';
9
13
  export { Spinner, type SpinnerProps, type SpinnerSize, } from './components/Spinner.js';
10
14
  export { GlyphTile, glyphTileSizes, type GlyphTileHue, type GlyphTileProps, type GlyphTileSize, } from './components/GlyphTile.js';
@@ -15,7 +19,7 @@ export { InfoTip, type InfoTipProps } from './components/InfoTip.js';
15
19
  export { RadioGroup, type RadioGroupOption, type RadioGroupProps, } from './components/RadioGroup.js';
16
20
  export { AppHeader, appHeaderAppearances, type AppHeaderAppearance, type AppHeaderProps, } from './components/AppHeader.js';
17
21
  export { Badge, type BadgeProps, type BadgeSize, type BadgeTone, badgeSizes, badgeTones, } from './components/Badge.js';
18
- export { BarChart, type BarChartItem, type BarChartProps, type BarChartTone, barChartTones, } from './components/BarChart.js';
22
+ export { BarChart, barChartAppearances, type BarChartAppearance, type BarChartItem, type BarChartProps, type BarChartTone, barChartTones, } from './components/BarChart.js';
19
23
  export { ChartLegend, type ChartFillTone, type ChartLegendItem, type ChartLegendProps, type ChartLegendSwatch, type ChartStrokeTone, type ChartTone, chartFillTones, chartLegendSwatches, chartStrokeTones, } from './components/ChartLegend.js';
20
24
  export { ColumnChart, type ColumnChartCallout, type ColumnChartLine, type ColumnChartMode, type ColumnChartProps, type ColumnChartSeries, columnChartModes, } from './components/ColumnChart.js';
21
25
  export { LineChart, type LineChartCurve, type LineChartMarker, type LineChartPeriod, type LineChartPoint, type LineChartProps, lineChartCurves, } from './components/LineChart.js';
@@ -28,11 +32,12 @@ export { boxLinkAppearances } from './css/css-box-link.js';
28
32
  export { ButtonGroup, buttonGroupAppearances, type ButtonGroupAppearance, type ButtonGroupJustify, type ButtonGroupProps, } from './components/ButtonGroup.js';
29
33
  export { Card, type CardProps, type CardVariant } from './components/Card.js';
30
34
  export { Dialog, dialogAppearances, dialogSizes, type DialogAppearance, type DialogProps, type DialogRole, type DialogSize, type DialogTitleLevel, } from './components/Dialog.js';
31
- export { StatTile, type StatTileEmphasis, type StatTileProps, type StatTileTone, statTileTones, } from './components/StatTile.js';
35
+ export { StatTile, type StatTileAppearance, statTileAppearances, type StatTileEmphasis, type StatTileProps, type StatTileTone, statTileTones, } from './components/StatTile.js';
32
36
  export { TabPanel, type TabItem, type TabPanelProps, Tabs, type TabsProps, tabId, tabPanelId, } from './components/Tabs.js';
33
37
  export { Toast, toastPlacements, toastTones, type ToastAction, type ToastPlacement, } from './components/Toast.js';
34
38
  export type { ToastProps, ToastTone } from './components/Toast.js';
35
39
  export { Field, fieldVariants, type FieldProps, type FieldSize, type FieldVariant, } from './components/Field.js';
40
+ export { fieldWidths, type FieldWidth } from './css/css-field-width.js';
36
41
  export { requiredMarks, type RequiredMark, } from './components/FieldLabelText.js';
37
42
  export { Step, type StepHeadingLevel, type StepProps, Steps, type StepsLabels, type StepsProps, type StepStatus, } from './components/Steps.js';
38
43
  export { Stepper, stepperLimitAppearances, type StepperLimitAppearance, type StepperProps, type StepperWidth, } from './components/Stepper.js';
@@ -40,8 +45,9 @@ export { Inline, type InlineProps } from './components/Inline.js';
40
45
  export { Split } from './components/Split.js';
41
46
  export type { SplitProps } from './components/Split.js';
42
47
  export { Nav, navAppearances, type NavAppearance, type NavProps, } from './components/Nav.js';
48
+ export { NavCount, type NavCountProps } from './components/NavCount.js';
43
49
  export { SectionNav, sectionNavAppearances, type SectionNavAppearance, type SectionNavItem, type SectionNavProps, } from './components/SectionNav.js';
44
- export { SegmentedControl, type SegmentedControlProps, type SegmentedControlVariant, type SegmentedItem, } from './components/SegmentedControl.js';
50
+ export { SegmentedControl, type SegmentedControlProps, type SegmentedControlVariant, segmentedSizes, type SegmentedSize, type SegmentedItem, } from './components/SegmentedControl.js';
45
51
  export { Combobox, comboboxSizes, type ComboboxAction, type ComboboxBadge, type ComboboxGroup, type ComboboxOption, type ComboboxProps, type ComboboxSize, } from './components/Combobox.js';
46
52
  export { Select } from './components/Select.js';
47
53
  export type { SelectAction, SelectOption, SelectProps, SelectWidth, } from './components/Select.js';
@@ -50,6 +56,7 @@ export { Stack, type Align, type Justify, type StackProps, } from './components/
50
56
  export { Table, TableBody, TableCell, TableFooter, TableHeader, TableRow, tableCellTones, tableRowVariants, type TableBodyProps, type TableCellProps, type TableCellTone, type TableColumnWidth, type TableDensity, type TableFooterProps, type TableHeaderProps, type TableLayout, type TableMaxHeight, type TableProps, type TableRowProps, type TableRowVariant, type TableSort, type TableStickyHeader, type TableVerticalAlign, } from './components/Table.js';
51
57
  export { Text, type TextAlign, type TextElement, type TextProps, } from './components/Text.js';
52
58
  export { ThemeProvider, useTheme, type ThemeProviderProps, } from './theme/ThemeProvider.js';
59
+ export { themeCanvases, type ThemeCanvas } from './css/css-canvas-grouped.js';
53
60
  export { utilityClassCatalog } from './css/stylesheet.js';
54
61
  export type { VisibilityProps } from './visibility-classes.js';
55
62
  export type { Breakpoint, BreakpointDirection, VisibilityBreakpoint, } from './css/breakpoints.js';
@@ -62,7 +69,7 @@ export { Grid } from './components/Grid.js';
62
69
  export type { GridColumns, GridProps } from './components/Grid.js';
63
70
  export type { GridColumnSpan } from './css/css-grid-span.js';
64
71
  export type { ColumnSpanProps } from './column-span-classes.js';
65
- export { DenominationGrid, denominationCellToneAppearances, denominationGridFrames, denominationLabelAppearances, denominationTotalEmphases, } from './components/DenominationGrid.js';
66
- export type { DenominationCellToneAppearance, DenominationGridColumn, DenominationGridEntry, DenominationGridFrame, DenominationGridLayout, DenominationGridProps, DenominationGridRow, DenominationGridRowEmphasis, DenominationGridRowRole, DenominationGridTone, DenominationGridValueRow, DenominationLabelAppearance, DenominationLabelWidth, DenominationTotalEmphasis, } from './components/DenominationGrid.js';
67
- export { FilterChips } from './components/FilterChips.js';
68
- export type { FilterChipOption, FilterChipsProps, } from './components/FilterChips.js';
72
+ export { DenominationGrid, denominationCellToneAppearances, denominationGridFrames, denominationLabelAppearances, denominationNegativeAppearances, denominationTotalEmphases, denominationTransposeBreakpoints, } from './components/DenominationGrid.js';
73
+ export type { DenominationCellToneAppearance, DenominationGridColumn, DenominationGridEntry, DenominationGridFrame, DenominationGridLayout, DenominationGridNegativeAppearance, DenominationGridProps, DenominationGridRow, DenominationGridRowEmphasis, DenominationGridRowRole, DenominationGridTone, DenominationGridValueRow, DenominationLabelAppearance, DenominationLabelWidth, DenominationTotalEmphasis, DenominationTransposeBreakpoint, } from './components/DenominationGrid.js';
74
+ export { FilterChips, filterChipCountAppearances, filterChipsOverflows, } from './components/FilterChips.js';
75
+ export type { FilterChipCountAppearance, FilterChipOption, FilterChipsOverflow, FilterChipsProps, } from './components/FilterChips.js';
package/dist/index.js CHANGED
@@ -1,9 +1,13 @@
1
1
  export { ActionMenu, actionMenuTriggerAppearances, } from './components/ActionMenu.js';
2
2
  export { ActionBar, } from './components/ActionBar.js';
3
3
  export { Accordion } from './components/Accordion.js';
4
- export { Switch } from './components/Switch.js';
5
- export { DateField, } from './components/DateField.js';
4
+ export { Switch, switchCheckedTones, switchLayouts, } from './components/Switch.js';
5
+ export { DateField, dateFieldEntries, } from './components/DateField.js';
6
6
  export { CalendarButton, } from './components/CalendarButton.js';
7
+ export { DateRangeButton, } from './components/DateRangeButton.js';
8
+ export { ListGroup } from './components/ListGroup.js';
9
+ export { ListRow } from './components/ListRow.js';
10
+ export { listGroupVariants, listRowTitleAppearances, listRowTones, listRowValueTones, } from './list-options.js';
7
11
  export { Checkbox } from './components/Checkbox.js';
8
12
  export { Spinner, } from './components/Spinner.js';
9
13
  export { GlyphTile, glyphTileSizes, } from './components/GlyphTile.js';
@@ -14,7 +18,7 @@ export { InfoTip } from './components/InfoTip.js';
14
18
  export { RadioGroup, } from './components/RadioGroup.js';
15
19
  export { AppHeader, appHeaderAppearances, } from './components/AppHeader.js';
16
20
  export { Badge, badgeSizes, badgeTones, } from './components/Badge.js';
17
- export { BarChart, barChartTones, } from './components/BarChart.js';
21
+ export { BarChart, barChartAppearances, barChartTones, } from './components/BarChart.js';
18
22
  export { ChartLegend, chartFillTones, chartLegendSwatches, chartStrokeTones, } from './components/ChartLegend.js';
19
23
  export { ColumnChart, columnChartModes, } from './components/ColumnChart.js';
20
24
  export { LineChart, lineChartCurves, } from './components/LineChart.js';
@@ -27,18 +31,20 @@ export { boxLinkAppearances } from './css/css-box-link.js';
27
31
  export { ButtonGroup, buttonGroupAppearances, } from './components/ButtonGroup.js';
28
32
  export { Card } from './components/Card.js';
29
33
  export { Dialog, dialogAppearances, dialogSizes, } from './components/Dialog.js';
30
- export { StatTile, statTileTones, } from './components/StatTile.js';
34
+ export { StatTile, statTileAppearances, statTileTones, } from './components/StatTile.js';
31
35
  export { TabPanel, Tabs, tabId, tabPanelId, } from './components/Tabs.js';
32
36
  export { Toast, toastPlacements, toastTones, } from './components/Toast.js';
33
37
  export { Field, fieldVariants, } from './components/Field.js';
38
+ export { fieldWidths } from './css/css-field-width.js';
34
39
  export { requiredMarks, } from './components/FieldLabelText.js';
35
40
  export { Step, Steps, } from './components/Steps.js';
36
41
  export { Stepper, stepperLimitAppearances, } from './components/Stepper.js';
37
42
  export { Inline } from './components/Inline.js';
38
43
  export { Split } from './components/Split.js';
39
44
  export { Nav, navAppearances, } from './components/Nav.js';
45
+ export { NavCount } from './components/NavCount.js';
40
46
  export { SectionNav, sectionNavAppearances, } from './components/SectionNav.js';
41
- export { SegmentedControl, } from './components/SegmentedControl.js';
47
+ export { SegmentedControl, segmentedSizes, } from './components/SegmentedControl.js';
42
48
  export { Combobox, comboboxSizes, } from './components/Combobox.js';
43
49
  export { Select } from './components/Select.js';
44
50
  export { MultiSelect, } from './components/MultiSelect.js';
@@ -46,10 +52,11 @@ export { Stack, } from './components/Stack.js';
46
52
  export { Table, TableBody, TableCell, TableFooter, TableHeader, TableRow, tableCellTones, tableRowVariants, } from './components/Table.js';
47
53
  export { Text, } from './components/Text.js';
48
54
  export { ThemeProvider, useTheme, } from './theme/ThemeProvider.js';
55
+ export { themeCanvases } from './css/css-canvas-grouped.js';
49
56
  export { utilityClassCatalog } from './css/stylesheet.js';
50
57
  export { breakpointQuery } from './css/breakpoints.js';
51
58
  export { Separator } from './components/Separator.js';
52
59
  export { DescriptionItem, DescriptionList, } from './components/DescriptionList.js';
53
60
  export { Grid } from './components/Grid.js';
54
- export { DenominationGrid, denominationCellToneAppearances, denominationGridFrames, denominationLabelAppearances, denominationTotalEmphases, } from './components/DenominationGrid.js';
55
- export { FilterChips } from './components/FilterChips.js';
61
+ export { DenominationGrid, denominationCellToneAppearances, denominationGridFrames, denominationLabelAppearances, denominationNegativeAppearances, denominationTotalEmphases, denominationTransposeBreakpoints, } from './components/DenominationGrid.js';
62
+ export { FilterChips, filterChipCountAppearances, filterChipsOverflows, } from './components/FilterChips.js';