@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
@@ -0,0 +1,71 @@
1
+ import { type CSSProperties } from 'react';
2
+ import { type BadgeTone } from './css/css-data.js';
3
+ import { listRowValueTones, type ListRowValueTone } from './css/css-list-row.js';
4
+ /**
5
+ * `panel` (the default) is one bordered panel on the surface; `plain`
6
+ * draws no panel and a hairline above the first row too, for rows inside
7
+ * a surface that already has one, such as a Card.
8
+ */
9
+ export declare const listGroupVariants: readonly ["panel", "plain"];
10
+ export type ListGroupVariant = (typeof listGroupVariants)[number];
11
+ /**
12
+ * A list's bounded height, counted in rows: as tall as `rows` rows of a
13
+ * title and one detail line, the rest scrolling inside it. Taller rows
14
+ * show fewer at a time, shorter ones more.
15
+ */
16
+ export type ListGroupMaxHeight = {
17
+ rows: number;
18
+ };
19
+ /** `danger` draws the title in the danger colour, for a row that ends something. */
20
+ export declare const listRowTones: readonly ["default", "danger"];
21
+ export type ListRowTone = (typeof listRowTones)[number];
22
+ /** `strong` (the default) sets the title at the label weight; `plain` at the body's. */
23
+ export declare const listRowTitleAppearances: readonly ["strong", "plain"];
24
+ export type ListRowTitleAppearance = (typeof listRowTitleAppearances)[number];
25
+ export { listRowValueTones, type ListRowValueTone };
26
+ /** What ends a row: a chevron (it opens something), a check (chosen), or none. */
27
+ export type ListRowAccessory = 'chevron' | 'check' | 'none';
28
+ export type ListGroupInput = {
29
+ label: string | undefined;
30
+ labelledBy: string | undefined;
31
+ variant: unknown;
32
+ maxHeight: ListGroupMaxHeight | undefined;
33
+ };
34
+ /**
35
+ * Fails closed on a ListGroup it cannot draw: an unknown variant, a
36
+ * `maxHeight` that is not a whole row count from 1, or a bounded list with
37
+ * no name (its scroll region is a keyboard stop and must say what it holds).
38
+ */
39
+ export declare function assertListGroup({ label, labelledBy, variant, maxHeight, }: ListGroupInput): void;
40
+ /** The row count the generated `sw-list-group-scroll` height reads. */
41
+ export declare function listMaxHeightStyle(maxHeight: ListGroupMaxHeight): CSSProperties;
42
+ export type ListRowInput = {
43
+ title: string;
44
+ tone: unknown;
45
+ titleAppearance: unknown;
46
+ valueTone: unknown;
47
+ accessory: unknown;
48
+ value: string | undefined;
49
+ valueDetail: string | undefined;
50
+ valueBadge: BadgeTone | undefined;
51
+ selected: boolean | undefined;
52
+ pressable: boolean;
53
+ };
54
+ /**
55
+ * Fails closed on a ListRow it cannot draw: an empty title or value, an
56
+ * unknown tone, title appearance, value tone, badge tone or accessory, a
57
+ * `valueDetail`, `valueTone` or `valueBadge` with no value, a value both
58
+ * toned and a badge, or `selected` on a row that is not a button or link
59
+ * (its check would be a state nothing can read).
60
+ */
61
+ export declare function assertListRow(input: ListRowInput): void;
62
+ /**
63
+ * The row's end: a check while `selected`, nothing for an unchosen choice,
64
+ * a chevron on a row that opens something (unless `accessory` is `none`),
65
+ * and nothing on a read-only row.
66
+ */
67
+ export declare function listRowAccessory(options: {
68
+ pressable: boolean;
69
+ selected: boolean | undefined;
70
+ accessory: 'chevron' | 'none';
71
+ }): ListRowAccessory;
@@ -0,0 +1,84 @@
1
+ import { badgeTones } from './css/css-data.js';
2
+ import { listRowValueTones, } from './css/css-list-row.js';
3
+ import { isOneOf } from './is-one-of.js';
4
+ /**
5
+ * `panel` (the default) is one bordered panel on the surface; `plain`
6
+ * draws no panel and a hairline above the first row too, for rows inside
7
+ * a surface that already has one, such as a Card.
8
+ */
9
+ export const listGroupVariants = ['panel', 'plain'];
10
+ /** `danger` draws the title in the danger colour, for a row that ends something. */
11
+ export const listRowTones = ['default', 'danger'];
12
+ /** `strong` (the default) sets the title at the label weight; `plain` at the body's. */
13
+ export const listRowTitleAppearances = ['strong', 'plain'];
14
+ export { listRowValueTones };
15
+ function isBlank(text) {
16
+ return typeof text !== 'string' || text.trim() === '';
17
+ }
18
+ /**
19
+ * Fails closed on a ListGroup it cannot draw: an unknown variant, a
20
+ * `maxHeight` that is not a whole row count from 1, or a bounded list with
21
+ * no name (its scroll region is a keyboard stop and must say what it holds).
22
+ */
23
+ export function assertListGroup({ label, labelledBy, variant, maxHeight, }) {
24
+ if (!isOneOf(listGroupVariants, variant))
25
+ throw new RangeError(`Unknown ListGroup variant: ${String(variant)}`);
26
+ if (maxHeight === undefined)
27
+ return;
28
+ const rows = typeof maxHeight === 'object' && maxHeight !== null
29
+ ? maxHeight.rows
30
+ : undefined;
31
+ if (typeof rows !== 'number' || !Number.isInteger(rows) || rows < 1)
32
+ throw new RangeError('ListGroup maxHeight must be { rows } with a whole number from 1');
33
+ if (isBlank(label) && isBlank(labelledBy))
34
+ throw new RangeError('A ListGroup with maxHeight needs aria-label or aria-labelledby');
35
+ }
36
+ /** The row count the generated `sw-list-group-scroll` height reads. */
37
+ export function listMaxHeightStyle(maxHeight) {
38
+ return { '--sw-list-max-rows': maxHeight.rows };
39
+ }
40
+ /**
41
+ * Fails closed on a ListRow it cannot draw: an empty title or value, an
42
+ * unknown tone, title appearance, value tone, badge tone or accessory, a
43
+ * `valueDetail`, `valueTone` or `valueBadge` with no value, a value both
44
+ * toned and a badge, or `selected` on a row that is not a button or link
45
+ * (its check would be a state nothing can read).
46
+ */
47
+ export function assertListRow(input) {
48
+ if (isBlank(input.title))
49
+ throw new RangeError('ListRow title must be non-empty text');
50
+ if (!isOneOf(listRowTones, input.tone))
51
+ throw new RangeError(`Unknown ListRow tone: ${String(input.tone)}`);
52
+ if (!isOneOf(listRowTitleAppearances, input.titleAppearance))
53
+ throw new RangeError(`Unknown ListRow titleAppearance: ${String(input.titleAppearance)}`);
54
+ if (input.valueTone !== undefined &&
55
+ !isOneOf(listRowValueTones, input.valueTone))
56
+ throw new RangeError(`Unknown ListRow valueTone: ${String(input.valueTone)}`);
57
+ if (!isOneOf(['chevron', 'none'], input.accessory))
58
+ throw new RangeError(`Unknown ListRow accessory: ${String(input.accessory)}`);
59
+ if (input.valueBadge !== undefined && !isOneOf(badgeTones, input.valueBadge))
60
+ throw new RangeError(`Unknown ListRow valueBadge: ${String(input.valueBadge)}`);
61
+ if (input.valueBadge !== undefined && input.valueTone !== undefined)
62
+ throw new RangeError('A ListRow value is a toned figure or a badge, not both');
63
+ if (input.value !== undefined && isBlank(input.value))
64
+ throw new RangeError('ListRow value must be non-empty text');
65
+ if (input.selected !== undefined && !input.pressable)
66
+ throw new RangeError('A ListRow choice (selected) needs onPress or href to say its state');
67
+ if (input.value === undefined &&
68
+ (input.valueDetail !== undefined ||
69
+ input.valueTone !== undefined ||
70
+ input.valueBadge !== undefined))
71
+ throw new RangeError('ListRow valueDetail, valueTone and valueBadge need a value');
72
+ }
73
+ /**
74
+ * The row's end: a check while `selected`, nothing for an unchosen choice,
75
+ * a chevron on a row that opens something (unless `accessory` is `none`),
76
+ * and nothing on a read-only row.
77
+ */
78
+ export function listRowAccessory(options) {
79
+ if (options.selected !== undefined)
80
+ return options.selected ? 'check' : 'none';
81
+ if (!options.pressable)
82
+ return 'none';
83
+ return options.accessory;
84
+ }