@scalewing/react 1.21.0 → 1.23.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 (71) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +49 -5
  3. package/dist/components/ActionMenu.d.ts +13 -1
  4. package/dist/components/ActionMenu.js +2 -2
  5. package/dist/components/BarChart.d.ts +28 -0
  6. package/dist/components/BarChart.js +5 -4
  7. package/dist/components/CalendarButton.d.ts +10 -0
  8. package/dist/components/CalendarButton.js +4 -3
  9. package/dist/components/DenominationGrid.d.ts +2 -2
  10. package/dist/components/DenominationGrid.js +5 -2
  11. package/dist/components/Field.d.ts +9 -0
  12. package/dist/components/Field.js +3 -2
  13. package/dist/components/SectionNav.d.ts +44 -0
  14. package/dist/components/SectionNav.js +48 -0
  15. package/dist/components/Table.d.ts +38 -13
  16. package/dist/components/Table.js +7 -12
  17. package/dist/components/Tabs.d.ts +3 -1
  18. package/dist/components/Tabs.js +8 -2
  19. package/dist/components/Tooltip.js +19 -3
  20. package/dist/components/action-menu/ActionMenuList.d.ts +3 -2
  21. package/dist/components/action-menu/ActionMenuList.js +16 -4
  22. package/dist/components/date-field/CalendarDialog.d.ts +4 -1
  23. package/dist/components/date-field/CalendarDialog.js +2 -2
  24. package/dist/components/date-field/CalendarGrid.d.ts +4 -1
  25. package/dist/components/date-field/CalendarGrid.js +11 -3
  26. package/dist/components/denomination-grid/DenominationStrip.d.ts +2 -2
  27. package/dist/components/denomination-grid/DenominationStrip.js +17 -6
  28. package/dist/components/denomination-grid/types.d.ts +15 -2
  29. package/dist/components/table/TableCell.d.ts +42 -0
  30. package/dist/components/table/TableCell.js +27 -0
  31. package/dist/components/table/table-layout.d.ts +10 -0
  32. package/dist/components/table/table-layout.js +14 -0
  33. package/dist/components/tooltip/tooltip-open.d.ts +8 -0
  34. package/dist/components/tooltip/tooltip-open.js +60 -0
  35. package/dist/components/tooltip/use-tooltip-placement.d.ts +11 -0
  36. package/dist/components/tooltip/use-tooltip-placement.js +46 -0
  37. package/dist/components/use-anchored-popover.d.ts +2 -0
  38. package/dist/components/use-anchored-popover.js +2 -1
  39. package/dist/css/breakpoints.d.ts +24 -3
  40. package/dist/css/breakpoints.js +27 -1
  41. package/dist/css/css-action-menu.js +24 -0
  42. package/dist/css/css-chart.js +45 -1
  43. package/dist/css/css-chrome.js +13 -0
  44. package/dist/css/css-components.js +3 -0
  45. package/dist/css/css-date-field.js +47 -1
  46. package/dist/css/css-denomination-aligned.d.ts +7 -0
  47. package/dist/css/css-denomination-aligned.js +68 -0
  48. package/dist/css/css-denomination-grid.js +7 -1
  49. package/dist/css/css-field.js +14 -0
  50. package/dist/css/css-responsive.js +4 -5
  51. package/dist/css/css-scroll-region.d.ts +8 -0
  52. package/dist/css/css-scroll-region.js +9 -3
  53. package/dist/css/css-section-nav.d.ts +4 -0
  54. package/dist/css/css-section-nav.js +120 -0
  55. package/dist/css/css-table-layout.d.ts +20 -0
  56. package/dist/css/css-table-layout.js +59 -0
  57. package/dist/css/css-table-sort.d.ts +2 -0
  58. package/dist/css/css-table-sort.js +105 -0
  59. package/dist/css/css-table.js +8 -0
  60. package/dist/css/css-tabs.d.ts +6 -1
  61. package/dist/css/css-tabs.js +9 -1
  62. package/dist/css/css-tooltip.js +7 -4
  63. package/dist/css/stylesheet.js +2 -0
  64. package/dist/date-only.d.ts +12 -0
  65. package/dist/date-only.js +24 -0
  66. package/dist/index.d.ts +6 -4
  67. package/dist/index.js +2 -0
  68. package/dist/styles.css +383 -6
  69. package/dist/visibility-classes.d.ts +3 -3
  70. package/dist/visibility-classes.js +7 -1
  71. package/package.json +1 -1
@@ -0,0 +1,120 @@
1
+ import { typographyVariants } from '@scalewing/tokens';
2
+ import { breakpointQuery, breakpoints, } from './breakpoints.js';
3
+ import { coarsePointerQuery, touchTarget } from './touch-target.js';
4
+ const label = typographyVariants.label;
5
+ export function sectionNavVerticalClass(breakpoint) {
6
+ return `sw-section-nav-vertical-from-${breakpoint}`;
7
+ }
8
+ /*
9
+ * From the breakpoint up the row becomes a side list: one item per line,
10
+ * the full width of its column, the current one marked by an accent bar at
11
+ * its inline start instead of the underline.
12
+ */
13
+ function verticalRules() {
14
+ return breakpoints
15
+ .map((breakpoint) => {
16
+ const nav = `.${sectionNavVerticalClass(breakpoint)}`;
17
+ return `@media ${breakpointQuery('from', breakpoint)} {
18
+ ${nav} .sw-section-nav-list {
19
+ border-bottom: 0;
20
+ flex-direction: column;
21
+ gap: var(--sw-space-1);
22
+ }
23
+
24
+ ${nav} .sw-section-nav-link {
25
+ border-bottom: 0;
26
+ border-inline-start: 2px solid transparent;
27
+ border-radius: 0 var(--sw-radius-sm) var(--sw-radius-sm) 0;
28
+ margin-bottom: 0;
29
+ width: 100%;
30
+ }
31
+
32
+ ${nav} .sw-section-nav-link:dir(rtl) {
33
+ border-radius: var(--sw-radius-sm) 0 0 var(--sw-radius-sm);
34
+ }
35
+
36
+ ${nav} .sw-section-nav-link[aria-current] {
37
+ border-inline-start-color: var(--sw-color-accent);
38
+ }
39
+ }`;
40
+ })
41
+ .join('\n\n');
42
+ }
43
+ /*
44
+ * A section navigation is quieter than a workspace's: label-size words in
45
+ * the muted color with no fill, the current item in the text color over an
46
+ * accent underline on the row's hairline (as a tab strip marks its tab),
47
+ * and a soft fill on hover. A link that is the current page or holds it is
48
+ * marked the same way. A coarse pointer gets the 44 px target. The link
49
+ * rules start at the canvas (`[data-theme]`) to outrank its accent links.
50
+ */
51
+ export function cssSectionNavClasses() {
52
+ return `.sw-section-nav-list {
53
+ border-bottom: 1px solid var(--sw-color-border);
54
+ display: flex;
55
+ flex-wrap: wrap;
56
+ gap: var(--sw-space-1) var(--sw-space-2);
57
+ list-style: none;
58
+ margin: 0;
59
+ padding: 0;
60
+ }
61
+
62
+ [data-theme] .sw-section-nav-link {
63
+ align-items: center;
64
+ border-bottom: 2px solid transparent;
65
+ border-radius: var(--sw-radius-sm) var(--sw-radius-sm) 0 0;
66
+ box-sizing: border-box;
67
+ color: var(--sw-color-muted);
68
+ display: inline-flex;
69
+ font-family: var(--sw-font-sans);
70
+ font-size: ${label.fontSize}px;
71
+ font-weight: ${label.fontWeight};
72
+ gap: var(--sw-space-2);
73
+ letter-spacing: ${label.letterSpacing}px;
74
+ line-height: ${label.lineHeight}px;
75
+ margin-bottom: -1px;
76
+ min-height: var(--sw-control-sm-min-height);
77
+ padding-inline: var(--sw-control-xs-padding-inline);
78
+ text-decoration: none;
79
+ }
80
+
81
+ [data-theme] .sw-section-nav-link:hover {
82
+ background: color-mix(in srgb, var(--sw-color-muted) 12%, transparent);
83
+ color: var(--sw-color-text);
84
+ }
85
+
86
+ [data-theme] .sw-section-nav-link:focus-visible {
87
+ outline: var(--sw-focus-ring-width) solid var(--sw-color-accent);
88
+ outline-offset: calc(-1 * var(--sw-focus-ring-width));
89
+ }
90
+
91
+ [data-theme] .sw-section-nav-link[aria-current] {
92
+ border-bottom-color: var(--sw-color-accent);
93
+ color: var(--sw-color-text);
94
+ }
95
+
96
+ .sw-section-nav-icon {
97
+ display: inline-flex;
98
+ flex: none;
99
+ }
100
+
101
+ ${verticalRules()}
102
+
103
+ @media ${coarsePointerQuery} {
104
+ [data-theme] .sw-section-nav-link { min-height: ${touchTarget}; }
105
+ }
106
+
107
+ @media (forced-colors: active) {
108
+ [data-theme] .sw-section-nav-link { color: LinkText; }
109
+ [data-theme] .sw-section-nav-link[aria-current] { border-color: Highlight; color: CanvasText; }
110
+ }`;
111
+ }
112
+ export function sectionNavClassCatalog() {
113
+ return [
114
+ 'sw-section-nav',
115
+ 'sw-section-nav-list',
116
+ 'sw-section-nav-link',
117
+ 'sw-section-nav-icon',
118
+ ...breakpoints.map(sectionNavVerticalClass),
119
+ ];
120
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The sized column widths, in rem so a header in caption type and a cell in
3
+ * body type agree: `xs` holds a count or a short code, `sm` a short date or
4
+ * an amount, `md` a date with its year, `lg` a date and a time, `xl` a name
5
+ * or a short phrase. A cell's padding is outside the width.
6
+ */
7
+ export declare const tableColumnSizes: {
8
+ readonly xs: 4;
9
+ readonly sm: 6;
10
+ readonly md: 8;
11
+ readonly lg: 12;
12
+ readonly xl: 16;
13
+ };
14
+ export type TableColumnSize = keyof typeof tableColumnSizes;
15
+ /** A column's width: shrink to its content on one line, or a size. */
16
+ export type TableColumnWidth = 'min' | TableColumnSize;
17
+ export declare const tableColumnWidths: readonly TableColumnWidth[];
18
+ export declare function tableColumnWidthClass(width: TableColumnWidth): string;
19
+ export declare function cssTableLayoutClasses(): string;
20
+ export declare function tableLayoutClassCatalog(): string[];
@@ -0,0 +1,59 @@
1
+ /**
2
+ * The sized column widths, in rem so a header in caption type and a cell in
3
+ * body type agree: `xs` holds a count or a short code, `sm` a short date or
4
+ * an amount, `md` a date with its year, `lg` a date and a time, `xl` a name
5
+ * or a short phrase. A cell's padding is outside the width.
6
+ */
7
+ export const tableColumnSizes = {
8
+ xs: 4,
9
+ sm: 6,
10
+ md: 8,
11
+ lg: 12,
12
+ xl: 16,
13
+ };
14
+ export const tableColumnWidths = [
15
+ 'min',
16
+ ...Object.keys(tableColumnSizes),
17
+ ];
18
+ export function tableColumnWidthClass(width) {
19
+ return `sw-table-col-${width}`;
20
+ }
21
+ /*
22
+ * A fixed table sizes its columns from the header row only, so a filter
23
+ * that hides a row moves no column. `min` is the one-percent idiom: an auto
24
+ * table gives the column the least room its content allows, on one line; a
25
+ * fixed table never measures content, so there `min` is no width at all
26
+ * and the column shares what is left. `top` starts every cell of a tall row
27
+ * on its first line.
28
+ */
29
+ export function cssTableLayoutClasses() {
30
+ const sizes = Object.entries(tableColumnSizes)
31
+ .map(([size, rem]) => `.sw-table .${tableColumnWidthClass(size)} { width: ${rem}rem; }`)
32
+ .join('\n');
33
+ return `.sw-table-fixed {
34
+ table-layout: fixed;
35
+ }
36
+
37
+ .sw-table .sw-table-col-min {
38
+ white-space: nowrap;
39
+ width: 1%;
40
+ }
41
+
42
+ .sw-table-fixed .sw-table-col-min {
43
+ width: auto;
44
+ }
45
+
46
+ ${sizes}
47
+
48
+ .sw-table.sw-table-top th,
49
+ .sw-table.sw-table-top td {
50
+ vertical-align: top;
51
+ }`;
52
+ }
53
+ export function tableLayoutClassCatalog() {
54
+ return [
55
+ 'sw-table-fixed',
56
+ 'sw-table-top',
57
+ ...tableColumnWidths.map(tableColumnWidthClass),
58
+ ];
59
+ }
@@ -0,0 +1,2 @@
1
+ export declare function cssTableSortClasses(): string;
2
+ export declare function tableSortClassCatalog(): string[];
@@ -0,0 +1,105 @@
1
+ import { chevronStroke } from './chevron.js';
2
+ import { coarsePointerQuery, touchTarget } from './touch-target.js';
3
+ /*
4
+ * A sortable header's button keeps the header's own text style (caption,
5
+ * semibold, muted): it is the column's name that can be pressed, not a link
6
+ * or a ghost button. The sorted column's name is the text color. The glyph
7
+ * is the stroked chevron Accordion and Select draw: up for ascending, down
8
+ * for descending, and a quieter up-and-down pair on a column that can be
9
+ * sorted but is not. In an end-aligned (numeric) column the glyph goes
10
+ * before the name, so the name's end lines up with the figures under it.
11
+ */
12
+ function glyphRules() {
13
+ const chevron = `content: '';
14
+ ${chevronStroke.replaceAll('\n', '\n ')}
15
+ border-color: currentColor;
16
+ display: block;`;
17
+ return `.sw-table-sort-glyph {
18
+ align-items: center;
19
+ display: inline-flex;
20
+ flex: none;
21
+ flex-direction: column;
22
+ justify-content: center;
23
+ min-height: var(--sw-space-4);
24
+ width: var(--sw-space-2);
25
+ }
26
+
27
+ .sw-table-sort-ascending::before,
28
+ .sw-table-sort-none::before {
29
+ ${chevron}
30
+ margin-top: calc(var(--sw-space-1) / 2);
31
+ transform: rotate(-135deg);
32
+ }
33
+
34
+ .sw-table-sort-descending::after,
35
+ .sw-table-sort-none::after {
36
+ ${chevron}
37
+ margin-bottom: calc(var(--sw-space-1) / 2);
38
+ transform: rotate(45deg);
39
+ }
40
+
41
+ .sw-table-sort-none {
42
+ opacity: var(--sw-quiet-opacity);
43
+ }
44
+
45
+ .sw-table-sort-none::before,
46
+ .sw-table-sort-none::after {
47
+ height: calc(var(--sw-space-2) * 0.75);
48
+ width: calc(var(--sw-space-2) * 0.75);
49
+ }`;
50
+ }
51
+ export function cssTableSortClasses() {
52
+ return `.sw-table-sort {
53
+ align-items: center;
54
+ appearance: none;
55
+ background: transparent;
56
+ border: 0;
57
+ border-radius: var(--sw-radius-sm);
58
+ color: inherit;
59
+ cursor: pointer;
60
+ display: inline-flex;
61
+ font: inherit;
62
+ gap: var(--sw-space-1);
63
+ letter-spacing: inherit;
64
+ /* A step of room for the focus ring, taken back so the name stays on the cell's edge. */
65
+ margin-inline: calc(-1 * var(--sw-space-1));
66
+ min-height: var(--sw-control-xs-min-height);
67
+ padding: 0 var(--sw-space-1);
68
+ text-align: inherit;
69
+ }
70
+
71
+ .sw-table .sw-table-numeric .sw-table-sort,
72
+ .sw-table .sw-table-end .sw-table-sort {
73
+ flex-direction: row-reverse;
74
+ }
75
+
76
+ .sw-table-sort:hover,
77
+ .sw-table th[aria-sort] .sw-table-sort {
78
+ color: var(--sw-color-text);
79
+ }
80
+
81
+ .sw-table-sort:focus-visible {
82
+ outline: var(--sw-focus-ring-width) solid var(--sw-color-accent);
83
+ outline-offset: var(--sw-focus-ring-offset);
84
+ }
85
+
86
+ ${glyphRules()}
87
+
88
+ @media ${coarsePointerQuery} {
89
+ .sw-table-sort { min-height: ${touchTarget}; }
90
+ }
91
+
92
+ @media (forced-colors: active) {
93
+ .sw-table-sort { color: ButtonText; }
94
+ .sw-table-sort-none { opacity: 1; }
95
+ }`;
96
+ }
97
+ export function tableSortClassCatalog() {
98
+ return [
99
+ 'sw-table-sort',
100
+ 'sw-table-sort-glyph',
101
+ 'sw-table-sort-ascending',
102
+ 'sw-table-sort-descending',
103
+ 'sw-table-sort-none',
104
+ ];
105
+ }
@@ -1,5 +1,7 @@
1
1
  import { typographyVariants } from '@scalewing/tokens';
2
2
  import { scrollRegionRules } from './css-scroll-region.js';
3
+ import { cssTableLayoutClasses, tableLayoutClassCatalog, } from './css-table-layout.js';
4
+ import { cssTableSortClasses, tableSortClassCatalog, } from './css-table-sort.js';
3
5
  import { zIndex } from './stacking.js';
4
6
  const caption = typographyVariants.caption;
5
7
  /*
@@ -83,6 +85,10 @@ export function cssTableClasses() {
83
85
  padding: var(--sw-space-1) var(--sw-space-2);
84
86
  }
85
87
 
88
+ ${cssTableLayoutClasses()}
89
+
90
+ ${cssTableSortClasses()}
91
+
86
92
  ${selectedRowRules()}`;
87
93
  }
88
94
  export function tableClassCatalog() {
@@ -95,5 +101,7 @@ export function tableClassCatalog() {
95
101
  'sw-table-sticky',
96
102
  'sw-table-compact',
97
103
  'sw-table-row-selected',
104
+ ...tableLayoutClassCatalog(),
105
+ ...tableSortClassCatalog(),
98
106
  ];
99
107
  }
@@ -1,4 +1,9 @@
1
1
  export declare const stuckCanvasShare = 0.9;
2
- /** The tab strip: a scrollable row of tabs with an accent underline under the current one. */
2
+ /**
3
+ * The tab strip: a scrollable row of tabs with an accent underline under the
4
+ * current one. While labels are scrolled out past an inline edge, that edge
5
+ * draws the scroll region's shade (its scrollbar is hidden), so a phone shows
6
+ * that the strip goes on.
7
+ */
3
8
  export declare function cssTabsClasses(): string;
4
9
  export declare function tabsClassCatalog(): string[];
@@ -1,4 +1,5 @@
1
1
  import { typographyVariants } from '@scalewing/tokens';
2
+ import { scrollShadeRules } from './css-scroll-region.js';
2
3
  import { zIndex } from './stacking.js';
3
4
  const label = typographyVariants.label;
4
5
  /*
@@ -32,7 +33,12 @@ function stickyRules() {
32
33
  }
33
34
  }`;
34
35
  }
35
- /** The tab strip: a scrollable row of tabs with an accent underline under the current one. */
36
+ /**
37
+ * The tab strip: a scrollable row of tabs with an accent underline under the
38
+ * current one. While labels are scrolled out past an inline edge, that edge
39
+ * draws the scroll region's shade (its scrollbar is hidden), so a phone shows
40
+ * that the strip goes on.
41
+ */
36
42
  export function cssTabsClasses() {
37
43
  return `.sw-tabs {
38
44
  border-bottom: 1px solid var(--sw-color-border);
@@ -87,6 +93,8 @@ export function cssTabsClasses() {
87
93
  outline-offset: var(--sw-focus-ring-offset);
88
94
  }
89
95
 
96
+ ${scrollShadeRules('.sw-tabs')}
97
+
90
98
  ${stickyRules()}
91
99
 
92
100
  @media (forced-colors: active) {
@@ -16,11 +16,14 @@ export function cssTooltipClasses() {
16
16
  font-family: var(--sw-font-sans);
17
17
  font-size: ${caption.fontSize}px;
18
18
  line-height: ${caption.lineHeight}px;
19
- inset-block-start: calc(100% + var(--sw-space-1));
20
- inset-inline-start: 0;
21
- max-width: min(18rem, calc(100vw - 2 * var(--sw-space-3)));
19
+ /* The popover layer's inset: 0 would ignore the placed left in right-to-left. */
20
+ inset: auto;
21
+ margin: 0;
22
+ /* On the top layer 100% is the viewport without a classic scrollbar. */
23
+ max-width: min(18rem, calc(100% - 2 * var(--sw-space-2)));
24
+ overflow: visible;
22
25
  padding: var(--sw-space-2);
23
- position: absolute;
26
+ position: fixed;
24
27
  width: max-content;
25
28
  ${zIndex('popup')}
26
29
  }
@@ -28,6 +28,7 @@ import { dataClassCatalog } from './css-data.js';
28
28
  import { segmentedClassCatalog } from './css-segmented.js';
29
29
  import { tableClassCatalog } from './css-table.js';
30
30
  import { chromeClassCatalog } from './css-chrome.js';
31
+ import { sectionNavClassCatalog } from './css-section-nav.js';
31
32
  import { dialogClassCatalog } from './css-dialog.js';
32
33
  import { selectClassCatalog } from './css-select.js';
33
34
  import { splitClassCatalog } from './css-split.js';
@@ -57,6 +58,7 @@ export function utilityClassCatalog() {
57
58
  ...scrollRegionClassCatalog(),
58
59
  ...chartClassCatalog(),
59
60
  ...chromeClassCatalog(),
61
+ ...sectionNavClassCatalog(),
60
62
  ...dialogClassCatalog(),
61
63
  ...accordionClassCatalog(),
62
64
  ...selectClassCatalog(),
@@ -24,3 +24,15 @@ export declare function isOutsideDateRange(value: string, min?: string, max?: st
24
24
  export declare function clampDateOnly(value: string, min?: string, max?: string): string;
25
25
  /** The date on the device's local wall calendar, never converted through UTC. */
26
26
  export declare function todayDateOnly(now?: Date): string;
27
+ /** A span of calendar days, both ends included. */
28
+ export type DateOnlyRange = {
29
+ start: string;
30
+ end: string;
31
+ };
32
+ /** Validates a range: two valid dates, the start not after the end. */
33
+ export declare function assertDateRange(range: DateOnlyRange | undefined): void;
34
+ /**
35
+ * Where a day sits in a range: its start, its end, both (a one-day range),
36
+ * inside it, or out.
37
+ */
38
+ export declare function dayInRange(value: string, range: DateOnlyRange | undefined): 'only' | 'start' | 'end' | 'inside' | null;
package/dist/date-only.js CHANGED
@@ -83,3 +83,27 @@ export function todayDateOnly(now = new Date()) {
83
83
  day: now.getDate(),
84
84
  });
85
85
  }
86
+ /** Validates a range: two valid dates, the start not after the end. */
87
+ export function assertDateRange(range) {
88
+ if (range === undefined)
89
+ return;
90
+ assertDateOnly('range.start', range.start);
91
+ assertDateOnly('range.end', range.end);
92
+ if (range.start > range.end)
93
+ throw new RangeError('range.start must not be after range.end');
94
+ }
95
+ /**
96
+ * Where a day sits in a range: its start, its end, both (a one-day range),
97
+ * inside it, or out.
98
+ */
99
+ export function dayInRange(value, range) {
100
+ if (!range || value < range.start || value > range.end)
101
+ return null;
102
+ if (range.start === range.end)
103
+ return 'only';
104
+ if (value === range.start)
105
+ return 'start';
106
+ if (value === range.end)
107
+ return 'end';
108
+ return 'inside';
109
+ }
package/dist/index.d.ts CHANGED
@@ -4,7 +4,7 @@ export { Accordion } from './components/Accordion.js';
4
4
  export type { AccordionProps, AccordionSize } from './components/Accordion.js';
5
5
  export { Switch, type SwitchProps } from './components/Switch.js';
6
6
  export { DateField, type DateFieldLabels, type DateFieldProps, type WeekStart, } from './components/DateField.js';
7
- export { CalendarButton, type CalendarButtonLabels, type CalendarButtonProps, } from './components/CalendarButton.js';
7
+ export { CalendarButton, type CalendarButtonLabels, type CalendarButtonProps, type CalendarButtonRange, } from './components/CalendarButton.js';
8
8
  export { Checkbox, type CheckboxProps } from './components/Checkbox.js';
9
9
  export { Spinner, type SpinnerProps, type SpinnerSize, } from './components/Spinner.js';
10
10
  export { Progress, type ProgressProps, type ProgressTone, } from './components/Progress.js';
@@ -27,16 +27,18 @@ export { Inline, type InlineProps } from './components/Inline.js';
27
27
  export { Split } from './components/Split.js';
28
28
  export type { SplitProps } from './components/Split.js';
29
29
  export { Nav, type NavProps } from './components/Nav.js';
30
+ export { SectionNav, type SectionNavItem, type SectionNavProps, } from './components/SectionNav.js';
30
31
  export { SegmentedControl, type SegmentedControlProps, type SegmentedControlVariant, type SegmentedItem, } from './components/SegmentedControl.js';
31
32
  export { Select } from './components/Select.js';
32
33
  export type { SelectAction, SelectOption, SelectProps, SelectWidth, } from './components/Select.js';
33
34
  export { Stack, type Align, type Justify, type StackProps, } from './components/Stack.js';
34
- export { Table, TableBody, TableCell, TableHeader, TableRow, type TableBodyProps, type TableCellProps, type TableDensity, type TableHeaderProps, type TableProps, type TableRowProps, } from './components/Table.js';
35
+ export { Table, TableBody, TableCell, TableHeader, TableRow, type TableBodyProps, type TableCellProps, type TableColumnWidth, type TableDensity, type TableHeaderProps, type TableLayout, type TableProps, type TableRowProps, type TableSort, type TableVerticalAlign, } from './components/Table.js';
35
36
  export { Text, type TextAlign, type TextElement, type TextProps, } from './components/Text.js';
36
37
  export { ThemeProvider, useTheme, type ThemeProviderProps, } from './theme/ThemeProvider.js';
37
38
  export { utilityClassCatalog } from './css/stylesheet.js';
38
39
  export type { VisibilityProps } from './visibility-classes.js';
39
- export type { Breakpoint } from './css/breakpoints.js';
40
+ export type { Breakpoint, BreakpointDirection, VisibilityBreakpoint, } from './css/breakpoints.js';
41
+ export { breakpointQuery } from './css/breakpoints.js';
40
42
  export { Separator } from './components/Separator.js';
41
43
  export type { SeparatorOrientation, SeparatorProps, } from './components/Separator.js';
42
44
  export { Grid } from './components/Grid.js';
@@ -44,6 +46,6 @@ export type { GridColumns, GridProps } from './components/Grid.js';
44
46
  export type { GridColumnSpan } from './css/css-grid-span.js';
45
47
  export type { ColumnSpanProps } from './column-span-classes.js';
46
48
  export { DenominationGrid } from './components/DenominationGrid.js';
47
- export type { DenominationGridColumn, DenominationGridLayout, DenominationGridProps, DenominationGridRow, DenominationGridRowRole, DenominationGridTone, } from './components/DenominationGrid.js';
49
+ export type { DenominationGridColumn, DenominationGridLayout, DenominationGridProps, DenominationGridRow, DenominationGridRowRole, DenominationGridTone, DenominationLabelWidth, } from './components/DenominationGrid.js';
48
50
  export { FilterChips } from './components/FilterChips.js';
49
51
  export type { FilterChipOption, FilterChipsProps, } from './components/FilterChips.js';
package/dist/index.js CHANGED
@@ -24,6 +24,7 @@ export { Field } from './components/Field.js';
24
24
  export { Inline } from './components/Inline.js';
25
25
  export { Split } from './components/Split.js';
26
26
  export { Nav } from './components/Nav.js';
27
+ export { SectionNav, } from './components/SectionNav.js';
27
28
  export { SegmentedControl, } from './components/SegmentedControl.js';
28
29
  export { Select } from './components/Select.js';
29
30
  export { Stack, } from './components/Stack.js';
@@ -31,6 +32,7 @@ export { Table, TableBody, TableCell, TableHeader, TableRow, } from './component
31
32
  export { Text, } from './components/Text.js';
32
33
  export { ThemeProvider, useTheme, } from './theme/ThemeProvider.js';
33
34
  export { utilityClassCatalog } from './css/stylesheet.js';
35
+ export { breakpointQuery } from './css/breakpoints.js';
34
36
  export { Separator } from './components/Separator.js';
35
37
  export { Grid } from './components/Grid.js';
36
38
  export { DenominationGrid } from './components/DenominationGrid.js';