@scalewing/react 1.8.0 → 1.9.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 (77) hide show
  1. package/CHANGELOG.md +140 -0
  2. package/README.md +69 -2
  3. package/dist/anchored-position.d.ts +28 -0
  4. package/dist/anchored-position.js +17 -0
  5. package/dist/calendar-keys.d.ts +19 -0
  6. package/dist/calendar-keys.js +39 -0
  7. package/dist/calendar-labels.d.ts +12 -0
  8. package/dist/calendar-labels.js +32 -0
  9. package/dist/calendar-month.d.ts +36 -0
  10. package/dist/calendar-month.js +111 -0
  11. package/dist/calendar-years.d.ts +14 -0
  12. package/dist/calendar-years.js +20 -0
  13. package/dist/components/Accordion.d.ts +6 -1
  14. package/dist/components/Accordion.js +12 -3
  15. package/dist/components/ActionBar.d.ts +30 -0
  16. package/dist/components/ActionBar.js +13 -0
  17. package/dist/components/Box.d.ts +7 -3
  18. package/dist/components/Box.js +2 -2
  19. package/dist/components/DateField.d.ts +15 -1
  20. package/dist/components/DateField.js +58 -18
  21. package/dist/components/Field.d.ts +5 -1
  22. package/dist/components/Field.js +16 -4
  23. package/dist/components/FieldAdornment.d.ts +20 -0
  24. package/dist/components/FieldAdornment.js +34 -0
  25. package/dist/components/Grid.d.ts +4 -1
  26. package/dist/components/Grid.js +2 -2
  27. package/dist/components/Progress.d.ts +3 -1
  28. package/dist/components/Progress.js +2 -2
  29. package/dist/components/date-field/CalendarDialog.d.ts +26 -0
  30. package/dist/components/date-field/CalendarDialog.js +93 -0
  31. package/dist/components/date-field/CalendarGrid.d.ts +23 -0
  32. package/dist/components/date-field/CalendarGrid.js +36 -0
  33. package/dist/components/date-field/CalendarHeader.d.ts +18 -0
  34. package/dist/components/date-field/CalendarHeader.js +33 -0
  35. package/dist/components/date-field/DateFieldGlyph.d.ts +9 -0
  36. package/dist/components/date-field/DateFieldGlyph.js +15 -0
  37. package/dist/components/date-field/use-anchored-popover.d.ts +8 -0
  38. package/dist/components/date-field/use-anchored-popover.js +61 -0
  39. package/dist/components/date-field/use-date-entry.d.ts +20 -0
  40. package/dist/components/date-field/use-date-entry.js +61 -0
  41. package/dist/components/date-field/use-lang-locale.d.ts +7 -0
  42. package/dist/components/date-field/use-lang-locale.js +17 -0
  43. package/dist/css/css-accordion.js +55 -8
  44. package/dist/css/css-action-bar.d.ts +4 -0
  45. package/dist/css/css-action-bar.js +99 -0
  46. package/dist/css/css-action-menu.js +2 -1
  47. package/dist/css/css-box-border.d.ts +5 -0
  48. package/dist/css/css-box-border.js +24 -0
  49. package/dist/css/css-chrome.js +2 -1
  50. package/dist/css/css-components.js +10 -6
  51. package/dist/css/css-data.js +2 -1
  52. package/dist/css/css-date-field.js +241 -11
  53. package/dist/css/css-denomination-grid.js +2 -1
  54. package/dist/css/css-document.d.ts +2 -0
  55. package/dist/css/css-document.js +2 -1
  56. package/dist/css/css-field.js +61 -1
  57. package/dist/css/css-select.js +2 -1
  58. package/dist/css/css-tooltip.js +2 -1
  59. package/dist/css/stacking.d.ts +10 -0
  60. package/dist/css/stacking.js +47 -0
  61. package/dist/css/stylesheet.js +4 -0
  62. package/dist/date-entry-validity.d.ts +10 -0
  63. package/dist/date-entry-validity.js +16 -0
  64. package/dist/date-entry.d.ts +32 -0
  65. package/dist/date-entry.js +106 -0
  66. package/dist/date-field-labels.d.ts +38 -0
  67. package/dist/date-field-labels.js +22 -0
  68. package/dist/date-field-locale.d.ts +8 -0
  69. package/dist/date-field-locale.js +27 -0
  70. package/dist/date-formatters.d.ts +13 -0
  71. package/dist/date-formatters.js +28 -0
  72. package/dist/date-only.d.ts +23 -0
  73. package/dist/date-only.js +63 -9
  74. package/dist/index.d.ts +5 -3
  75. package/dist/index.js +3 -2
  76. package/dist/styles.css +388 -21
  77. package/package.json +1 -1
@@ -0,0 +1,106 @@
1
+ import { dateFormatter, formatterDate } from './date-formatters.js';
2
+ import { formatDateOnly, isValidDateParts, parseDateOnly, } from './date-only.js';
3
+ const FALLBACK = {
4
+ order: ['month', 'day', 'year'],
5
+ separator: '/',
6
+ };
7
+ function isEntryPart(type) {
8
+ return type === 'day' || type === 'month' || type === 'year';
9
+ }
10
+ /**
11
+ * Reads the numeric field order and separator from `Intl` for `locale`, for
12
+ * example month/day/year with "/" for en-US and day.month.year for de.
13
+ */
14
+ export function dateEntryPattern(locale) {
15
+ const parts = dateFormatter(locale, {
16
+ day: '2-digit',
17
+ month: '2-digit',
18
+ year: 'numeric',
19
+ }).formatToParts(formatterDate({ year: 2023, month: 12, day: 31 }));
20
+ const order = parts.map((part) => part.type).filter(isEntryPart);
21
+ const separator = parts.find((part) => part.type === 'literal')?.value;
22
+ if (order.length !== 3 || new Set(order).size !== 3 || !separator?.trim())
23
+ return FALLBACK;
24
+ return {
25
+ order: [order[0], order[1], order[2]],
26
+ separator: separator.trim(),
27
+ };
28
+ }
29
+ const WIDTH = { day: 2, month: 2, year: 4 };
30
+ /** Zero-padded, Latin digits in the pattern's order; empty for no date. */
31
+ export function formatDateEntry(value, pattern) {
32
+ const parts = parseDateOnly(value);
33
+ if (!parts)
34
+ return '';
35
+ return pattern.order
36
+ .map((part) => String(parts[part]).padStart(WIDTH[part], '0'))
37
+ .join(pattern.separator);
38
+ }
39
+ /** A hint such as "MM/DD/YYYY" from the consumer's per-part letters. */
40
+ export function dateEntryPlaceholder(pattern, letters) {
41
+ return pattern.order.map((part) => letters[part]).join(pattern.separator);
42
+ }
43
+ function splitDigits(text, pattern) {
44
+ const groups = text.match(/\d+/g) ?? [];
45
+ if (groups.length === 3)
46
+ return groups;
47
+ // Eight digits with no separators, as typed on a numeric keypad.
48
+ const digits = groups[0];
49
+ if (groups.length !== 1 || digits?.length !== 8)
50
+ return null;
51
+ let start = 0;
52
+ return pattern.order.map((part) => {
53
+ const group = digits.slice(start, start + WIDTH[part]);
54
+ start += WIDTH[part];
55
+ return group;
56
+ });
57
+ }
58
+ const ISO_ORDER = ['year', 'month', 'day'];
59
+ /** The field order typed text uses: ISO when it starts with four digits. */
60
+ function typedOrder(groups, pattern) {
61
+ return groups[0]?.length === 4 ? ISO_ORDER : pattern.order;
62
+ }
63
+ /**
64
+ * Whether typed text is finished, so a date it forms can be committed while
65
+ * the person is still typing: eight bare digits, or three fields whose last
66
+ * one is at full width (four year digits, two for a trailing day or month).
67
+ * A shorter last field may still grow, as "2024-03-1" on the way to
68
+ * "2024-03-10", so it waits for blur or Enter instead.
69
+ */
70
+ export function isCompleteDateEntry(text, pattern) {
71
+ const groups = text.match(/\d+/g) ?? [];
72
+ if (groups.length === 1)
73
+ return groups[0]?.length === 8;
74
+ if (groups.length !== 3)
75
+ return false;
76
+ const last = typedOrder(groups, pattern)[2];
77
+ return groups[2]?.length === WIDTH[last];
78
+ }
79
+ /**
80
+ * Parses typed text in the pattern's order. Day and month take one or two
81
+ * digits, the year exactly four, and any non-digit run separates fields.
82
+ * Eight bare digits split by field width in the same order (MMDDYYYY for
83
+ * en-US). A four-digit first field reads as ISO year-month-day in every
84
+ * locale, since no locale starts a day or month with four digits. Returns
85
+ * the YYYY-MM-DD value, '' for blank text, or null when it is not a date.
86
+ */
87
+ export function parseDateEntry(text, pattern) {
88
+ const trimmed = text.trim();
89
+ if (trimmed === '')
90
+ return '';
91
+ if (/\p{L}/u.test(trimmed))
92
+ return null;
93
+ const groups = splitDigits(trimmed, pattern);
94
+ if (!groups)
95
+ return null;
96
+ const order = typedOrder(groups, pattern);
97
+ const date = { year: 0, month: 0, day: 0 };
98
+ for (const [index, part] of order.entries()) {
99
+ const digits = groups[index] ?? '';
100
+ const width = part === 'year' ? digits.length === 4 : digits.length <= 2;
101
+ if (!width)
102
+ return null;
103
+ date[part] = Number(digits);
104
+ }
105
+ return isValidDateParts(date) ? formatDateOnly(date) : null;
106
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Words the DateField control speaks or shows on its own. Products pass
3
+ * their translations; month and weekday names come from `Intl` instead.
4
+ */
5
+ export type DateFieldLabels = {
6
+ /**
7
+ * Calendar button name; the field label describes the button. A page with
8
+ * several date fields may pass a distinct name per field.
9
+ */
10
+ chooseDate: string;
11
+ previousMonth: string;
12
+ nextMonth: string;
13
+ /** Month selector name in the calendar header. */
14
+ month: string;
15
+ /** Year selector name in the calendar header. */
16
+ year: string;
17
+ /** Selects today's date and closes the calendar. */
18
+ today: string;
19
+ /** Empties an optional field and closes the calendar. */
20
+ clear: string;
21
+ /**
22
+ * Shown when typed text is not a date; also the entry's form validation
23
+ * message while its text is not a date.
24
+ */
25
+ invalidEntry: string;
26
+ /**
27
+ * The entry's form validation message while its date, typed or given, is
28
+ * outside `min` and `max`.
29
+ */
30
+ outOfRange: string;
31
+ /** Placeholder letters, arranged in the locale's field order. */
32
+ dayPlaceholder: string;
33
+ monthPlaceholder: string;
34
+ yearPlaceholder: string;
35
+ };
36
+ export declare const defaultDateFieldLabels: DateFieldLabels;
37
+ /** Consumer labels over the English defaults; empty strings fail closed. */
38
+ export declare function resolveDateFieldLabels(labels?: Partial<DateFieldLabels>): DateFieldLabels;
@@ -0,0 +1,22 @@
1
+ export const defaultDateFieldLabels = {
2
+ chooseDate: 'Choose date',
3
+ previousMonth: 'Previous month',
4
+ nextMonth: 'Next month',
5
+ month: 'Month',
6
+ year: 'Year',
7
+ today: 'Today',
8
+ clear: 'Clear',
9
+ invalidEntry: 'Enter a valid date.',
10
+ outOfRange: 'Choose a date in the allowed range.',
11
+ dayPlaceholder: 'DD',
12
+ monthPlaceholder: 'MM',
13
+ yearPlaceholder: 'YYYY',
14
+ };
15
+ /** Consumer labels over the English defaults; empty strings fail closed. */
16
+ export function resolveDateFieldLabels(labels = {}) {
17
+ const resolved = { ...defaultDateFieldLabels, ...labels };
18
+ for (const [key, text] of Object.entries(resolved))
19
+ if (typeof text !== 'string' || text.trim() === '')
20
+ throw new RangeError(`labels.${key} must be non-empty text`);
21
+ return resolved;
22
+ }
@@ -0,0 +1,8 @@
1
+ /** Used when neither the `locale` prop nor an ancestor `lang` names one. */
2
+ export declare const DEFAULT_DATE_LOCALE = "en-US";
3
+ /**
4
+ * The locale a date control formats with. An explicit `locale` must be a
5
+ * valid BCP 47 tag, or this throws. Otherwise the nearest `lang` attribute
6
+ * is used when the runtime supports it, then en-US.
7
+ */
8
+ export declare function resolveDateLocale(locale: string | undefined, documentLang: string | null | undefined): string;
@@ -0,0 +1,27 @@
1
+ /** Used when neither the `locale` prop nor an ancestor `lang` names one. */
2
+ export const DEFAULT_DATE_LOCALE = 'en-US';
3
+ function supported(tag) {
4
+ try {
5
+ return Intl.DateTimeFormat.supportedLocalesOf([tag]).length > 0;
6
+ }
7
+ catch {
8
+ return false;
9
+ }
10
+ }
11
+ /**
12
+ * The locale a date control formats with. An explicit `locale` must be a
13
+ * valid BCP 47 tag, or this throws. Otherwise the nearest `lang` attribute
14
+ * is used when the runtime supports it, then en-US.
15
+ */
16
+ export function resolveDateLocale(locale, documentLang) {
17
+ if (locale !== undefined) {
18
+ try {
19
+ return Intl.getCanonicalLocales(locale)[0] ?? DEFAULT_DATE_LOCALE;
20
+ }
21
+ catch {
22
+ throw new RangeError('locale must be a BCP 47 language tag');
23
+ }
24
+ }
25
+ const lang = documentLang?.trim();
26
+ return lang && supported(lang) ? lang : DEFAULT_DATE_LOCALE;
27
+ }
@@ -0,0 +1,13 @@
1
+ import { type DateParts } from './date-only.js';
2
+ /**
3
+ * One shared `Intl.DateTimeFormat` per locale and options, since building
4
+ * one is slow and a calendar formats dozens of dates per render. Every
5
+ * formatter reads UTC, so a cached one never meets a changed device time
6
+ * zone; pair it with `formatterDate`.
7
+ */
8
+ export declare function dateFormatter(locale: string, options: Intl.DateTimeFormatOptions): Intl.DateTimeFormat;
9
+ /**
10
+ * Noon UTC on a calendar date, for `dateFormatter` only. `setUTCFullYear`
11
+ * keeps years below 100 literal instead of mapping them to the 1900s.
12
+ */
13
+ export declare function formatterDate({ year, month, day }: DateParts): Date;
@@ -0,0 +1,28 @@
1
+ const formatters = new Map();
2
+ /**
3
+ * One shared `Intl.DateTimeFormat` per locale and options, since building
4
+ * one is slow and a calendar formats dozens of dates per render. Every
5
+ * formatter reads UTC, so a cached one never meets a changed device time
6
+ * zone; pair it with `formatterDate`.
7
+ */
8
+ export function dateFormatter(locale, options) {
9
+ const key = `${locale}|${JSON.stringify(options)}`;
10
+ let formatter = formatters.get(key);
11
+ if (formatter === undefined) {
12
+ formatter = new Intl.DateTimeFormat(locale, {
13
+ ...options,
14
+ timeZone: 'UTC',
15
+ });
16
+ formatters.set(key, formatter);
17
+ }
18
+ return formatter;
19
+ }
20
+ /**
21
+ * Noon UTC on a calendar date, for `dateFormatter` only. `setUTCFullYear`
22
+ * keeps years below 100 literal instead of mapping them to the 1900s.
23
+ */
24
+ export function formatterDate({ year, month, day }) {
25
+ const date = new Date(Date.UTC(2000, 0, 1, 12));
26
+ date.setUTCFullYear(year, month - 1, day);
27
+ return date;
28
+ }
@@ -1,3 +1,26 @@
1
+ /** A calendar date with no time and no zone. `month` is 1–12. */
2
+ export type DateParts = {
3
+ year: number;
4
+ month: number;
5
+ day: number;
6
+ };
7
+ /** The first and last dates a four-digit YYYY-MM-DD value can hold. */
8
+ export declare const EARLIEST_DATE_ONLY = "0001-01-01";
9
+ export declare const LATEST_DATE_ONLY = "9999-12-31";
10
+ export declare function daysInMonth(year: number, month: number): number;
11
+ export declare function isValidDateParts({ year, month, day }: DateParts): boolean;
12
+ export declare function parseDateOnly(value: string): DateParts | null;
1
13
  export declare function isDateOnly(value: string): boolean;
14
+ export declare function formatDateOnly({ year, month, day }: DateParts): string;
2
15
  export declare function assertDateOnly(name: string, value: string, empty?: boolean): void;
16
+ /** Validates a picker's value and bounds; an empty value means no selection. */
17
+ export declare function assertDateBounds(value: string, min?: string, max?: string): void;
18
+ /** Valid date-only strings compare lexicographically. */
3
19
  export declare function isOutsideDateRange(value: string, min?: string, max?: string): boolean;
20
+ /**
21
+ * Moves a date-only value into `[min, max]` and into the four-digit years.
22
+ * Also accepts a zero-padded year 0 or 10000 string from day arithmetic.
23
+ */
24
+ export declare function clampDateOnly(value: string, min?: string, max?: string): string;
25
+ /** The date on the device's local wall calendar, never converted through UTC. */
26
+ export declare function todayDateOnly(now?: Date): string;
package/dist/date-only.js CHANGED
@@ -1,31 +1,85 @@
1
1
  const DATE_ONLY = /^(\d{4})-(\d{2})-(\d{2})$/;
2
- function daysInMonth(year, month) {
2
+ /** The first and last dates a four-digit YYYY-MM-DD value can hold. */
3
+ export const EARLIEST_DATE_ONLY = '0001-01-01';
4
+ export const LATEST_DATE_ONLY = '9999-12-31';
5
+ export function daysInMonth(year, month) {
3
6
  if (month === 2) {
4
7
  const leap = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
5
8
  return leap ? 29 : 28;
6
9
  }
7
10
  return [4, 6, 9, 11].includes(month) ? 30 : 31;
8
11
  }
9
- export function isDateOnly(value) {
10
- const parts = DATE_ONLY.exec(value);
11
- if (!parts)
12
- return false;
13
- const year = Number(parts[1]);
14
- const month = Number(parts[2]);
15
- const day = Number(parts[3]);
16
- return (year >= 1 &&
12
+ export function isValidDateParts({ year, month, day }) {
13
+ return (Number.isInteger(year) &&
14
+ Number.isInteger(month) &&
15
+ Number.isInteger(day) &&
16
+ year >= 1 &&
17
+ year <= 9999 &&
17
18
  month >= 1 &&
18
19
  month <= 12 &&
19
20
  day >= 1 &&
20
21
  day <= daysInMonth(year, month));
21
22
  }
23
+ export function parseDateOnly(value) {
24
+ const parts = DATE_ONLY.exec(value);
25
+ if (!parts)
26
+ return null;
27
+ const date = {
28
+ year: Number(parts[1]),
29
+ month: Number(parts[2]),
30
+ day: Number(parts[3]),
31
+ };
32
+ return isValidDateParts(date) ? date : null;
33
+ }
34
+ export function isDateOnly(value) {
35
+ return parseDateOnly(value) !== null;
36
+ }
37
+ export function formatDateOnly({ year, month, day }) {
38
+ const yyyy = String(year).padStart(4, '0');
39
+ const mm = String(month).padStart(2, '0');
40
+ const dd = String(day).padStart(2, '0');
41
+ return `${yyyy}-${mm}-${dd}`;
42
+ }
22
43
  export function assertDateOnly(name, value, empty = false) {
23
44
  if (empty && value === '')
24
45
  return;
25
46
  if (!isDateOnly(value))
26
47
  throw new RangeError(`${name} must be a valid YYYY-MM-DD date`);
27
48
  }
49
+ /** Validates a picker's value and bounds; an empty value means no selection. */
50
+ export function assertDateBounds(value, min, max) {
51
+ assertDateOnly('value', value, true);
52
+ if (min !== undefined)
53
+ assertDateOnly('min', min);
54
+ if (max !== undefined)
55
+ assertDateOnly('max', max);
56
+ if (min !== undefined && max !== undefined && min > max)
57
+ throw new RangeError('min must not be after max');
58
+ }
59
+ /** Valid date-only strings compare lexicographically. */
28
60
  export function isOutsideDateRange(value, min, max) {
29
61
  return (value !== '' &&
30
62
  ((min !== undefined && value < min) || (max !== undefined && value > max)));
31
63
  }
64
+ /**
65
+ * Moves a date-only value into `[min, max]` and into the four-digit years.
66
+ * Also accepts a zero-padded year 0 or 10000 string from day arithmetic.
67
+ */
68
+ export function clampDateOnly(value, min = EARLIEST_DATE_ONLY, max = LATEST_DATE_ONLY) {
69
+ const low = min > EARLIEST_DATE_ONLY ? min : EARLIEST_DATE_ONLY;
70
+ const high = max < LATEST_DATE_ONLY ? max : LATEST_DATE_ONLY;
71
+ // A five-digit year sorts before '9999' as text, so length decides first.
72
+ if (value.length > 10 || value > high)
73
+ return high;
74
+ if (value < low)
75
+ return low;
76
+ return value;
77
+ }
78
+ /** The date on the device's local wall calendar, never converted through UTC. */
79
+ export function todayDateOnly(now = new Date()) {
80
+ return formatDateOnly({
81
+ year: now.getFullYear(),
82
+ month: now.getMonth() + 1,
83
+ day: now.getDate(),
84
+ });
85
+ }
package/dist/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  export { ActionMenu, type ActionMenuItem, type ActionMenuProps, } from './components/ActionMenu.js';
2
+ export { ActionBar, type ActionBarProps } from './components/ActionBar.js';
2
3
  export { Accordion } from './components/Accordion.js';
3
- export type { AccordionProps } from './components/Accordion.js';
4
+ export type { AccordionProps, AccordionSize } from './components/Accordion.js';
4
5
  export { Switch, type SwitchProps } from './components/Switch.js';
5
- export { DateField, type DateFieldProps } from './components/DateField.js';
6
+ export { DateField, type DateFieldLabels, type DateFieldProps, type WeekStart, } from './components/DateField.js';
6
7
  export { Checkbox, type CheckboxProps } from './components/Checkbox.js';
7
8
  export { Spinner, type SpinnerProps, type SpinnerSize, } from './components/Spinner.js';
8
9
  export { Progress, type ProgressProps, type ProgressTone, } from './components/Progress.js';
@@ -12,7 +13,7 @@ export { AppHeader, type AppHeaderProps } from './components/AppHeader.js';
12
13
  export { Badge, type BadgeProps, type BadgeSize, type BadgeTone, badgeSizes, badgeTones, } from './components/Badge.js';
13
14
  export { BarChart, type BarChartItem, type BarChartProps, } from './components/BarChart.js';
14
15
  export { Button, type ButtonProps, type ButtonSize, type ButtonVariant, } from './components/Button.js';
15
- export { Box, type BoxElement, type BoxProps } from './components/Box.js';
16
+ export { Box, type BoxBorder, type BoxElement, type BoxProps, } from './components/Box.js';
16
17
  export { ButtonGroup, type ButtonGroupJustify, type ButtonGroupProps, } from './components/ButtonGroup.js';
17
18
  export { Card, type CardProps, type CardVariant } from './components/Card.js';
18
19
  export { Dialog, type DialogProps, type DialogSize, } from './components/Dialog.js';
@@ -34,6 +35,7 @@ export { Text, type TextAlign, type TextElement, type TextProps, } from './compo
34
35
  export { ThemeProvider, useTheme, type ThemeProviderProps, } from './theme/ThemeProvider.js';
35
36
  export { utilityClassCatalog } from './css/stylesheet.js';
36
37
  export type { VisibilityProps } from './visibility-classes.js';
38
+ export type { Breakpoint } from './css/breakpoints.js';
37
39
  export { Separator } from './components/Separator.js';
38
40
  export type { SeparatorOrientation, SeparatorProps, } from './components/Separator.js';
39
41
  export { Grid } from './components/Grid.js';
package/dist/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  export { ActionMenu, } from './components/ActionMenu.js';
2
+ export { ActionBar } from './components/ActionBar.js';
2
3
  export { Accordion } from './components/Accordion.js';
3
4
  export { Switch } from './components/Switch.js';
4
- export { DateField } from './components/DateField.js';
5
+ export { DateField, } from './components/DateField.js';
5
6
  export { Checkbox } from './components/Checkbox.js';
6
7
  export { Spinner, } from './components/Spinner.js';
7
8
  export { Progress, } from './components/Progress.js';
@@ -11,7 +12,7 @@ export { AppHeader } from './components/AppHeader.js';
11
12
  export { Badge, badgeSizes, badgeTones, } from './components/Badge.js';
12
13
  export { BarChart, } from './components/BarChart.js';
13
14
  export { Button, } from './components/Button.js';
14
- export { Box } from './components/Box.js';
15
+ export { Box, } from './components/Box.js';
15
16
  export { ButtonGroup, } from './components/ButtonGroup.js';
16
17
  export { Card } from './components/Card.js';
17
18
  export { Dialog, } from './components/Dialog.js';