@ecopages/radiant-ui 0.1.0-beta.3 → 0.1.0-beta.6
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.
- package/dist/components/ui/autocomplete/autocomplete.css +135 -0
- package/dist/components/ui/autocomplete/autocomplete.d.ts +21 -0
- package/dist/components/ui/autocomplete/autocomplete.script.d.ts +42 -0
- package/dist/components/ui/autocomplete/index.d.ts +2 -0
- package/dist/components/ui/autocomplete/index.js +2 -0
- package/dist/components/ui/autocomplete/index.js.map +7 -0
- package/dist/components/ui/avatar/avatar.css +58 -0
- package/dist/components/ui/avatar/avatar.d.ts +13 -0
- package/dist/components/ui/avatar/index.d.ts +1 -0
- package/dist/components/ui/avatar/index.js +2 -0
- package/dist/components/ui/avatar/index.js.map +7 -0
- package/dist/components/ui/button-group/button-group.css +16 -0
- package/dist/components/ui/button-group/button-group.d.ts +10 -0
- package/dist/components/ui/button-group/index.d.ts +1 -0
- package/dist/components/ui/button-group/index.js +2 -0
- package/dist/components/ui/button-group/index.js.map +7 -0
- package/dist/components/ui/calendar/calendar.css +318 -0
- package/dist/components/ui/calendar/calendar.d.ts +5 -0
- package/dist/components/ui/calendar/calendar.script.d.ts +89 -0
- package/dist/components/ui/calendar/index.d.ts +2 -0
- package/dist/components/ui/calendar/index.js +2 -0
- package/dist/components/ui/calendar/index.js.map +7 -0
- package/dist/components/ui/chip/chip.css +47 -0
- package/dist/components/ui/chip/chip.d.ts +11 -0
- package/dist/components/ui/chip/index.d.ts +1 -0
- package/dist/components/ui/chip/index.js +2 -0
- package/dist/components/ui/chip/index.js.map +7 -0
- package/dist/components/ui/chip-list/chip-list.css +15 -0
- package/dist/components/ui/chip-list/chip-list.d.ts +10 -0
- package/dist/components/ui/chip-list/index.d.ts +1 -0
- package/dist/components/ui/chip-list/index.js +2 -0
- package/dist/components/ui/chip-list/index.js.map +7 -0
- package/dist/components/ui/combobox/combobox.css +42 -80
- package/dist/components/ui/combobox/combobox.d.ts +12 -20
- package/dist/components/ui/combobox/combobox.script.d.ts +15 -14
- package/dist/components/ui/combobox/index.d.ts +2 -1
- package/dist/components/ui/combobox/index.js +1 -1
- package/dist/components/ui/combobox/index.js.map +4 -4
- package/dist/components/ui/date-field/date-field.css +184 -0
- package/dist/components/ui/date-field/date-field.d.ts +10 -0
- package/dist/components/ui/date-field/date-field.script.d.ts +108 -0
- package/dist/components/ui/date-field/index.d.ts +2 -0
- package/dist/components/ui/date-field/index.js +2 -0
- package/dist/components/ui/date-field/index.js.map +7 -0
- package/dist/components/ui/date-range-picker/date-range-picker.css +194 -0
- package/dist/components/ui/date-range-picker/date-range-picker.d.ts +10 -0
- package/dist/components/ui/date-range-picker/date-range-picker.script.d.ts +99 -0
- package/dist/components/ui/date-range-picker/index.d.ts +2 -0
- package/dist/components/ui/date-range-picker/index.js +2 -0
- package/dist/components/ui/date-range-picker/index.js.map +7 -0
- package/dist/components/ui/dialog/dialog.css +1 -1
- package/dist/components/ui/feed/feed.css +169 -5
- package/dist/components/ui/feed/feed.d.ts +54 -11
- package/dist/components/ui/feed/index.d.ts +1 -2
- package/dist/components/ui/feed/index.js +1 -1
- package/dist/components/ui/feed/index.js.map +4 -4
- package/dist/components/ui/field/index.js +1 -1
- package/dist/components/ui/field/index.js.map +3 -3
- package/dist/components/ui/form/form-field.test.d.ts +1 -0
- package/dist/components/ui/form/index.js +1 -1
- package/dist/components/ui/form/index.js.map +3 -3
- package/dist/components/ui/heading/heading.css +107 -0
- package/dist/components/ui/heading/heading.d.ts +30 -0
- package/dist/components/ui/heading/index.d.ts +1 -0
- package/dist/components/ui/heading/index.js +2 -0
- package/dist/components/ui/heading/index.js.map +7 -0
- package/dist/components/ui/headline/headline.css +43 -0
- package/dist/components/ui/headline/headline.d.ts +16 -0
- package/dist/components/ui/headline/index.d.ts +1 -0
- package/dist/components/ui/headline/index.js +2 -0
- package/dist/components/ui/headline/index.js.map +7 -0
- package/dist/components/ui/input/index.js +1 -1
- package/dist/components/ui/input/index.js.map +4 -4
- package/dist/components/ui/input/input.d.ts +8 -1
- package/dist/components/ui/label/index.js +1 -1
- package/dist/components/ui/label/index.js.map +2 -2
- package/dist/components/ui/listbox/index.d.ts +1 -1
- package/dist/components/ui/listbox/index.js +1 -1
- package/dist/components/ui/listbox/index.js.map +4 -4
- package/dist/components/ui/listbox/listbox.css +34 -10
- package/dist/components/ui/listbox/listbox.d.ts +12 -4
- package/dist/components/ui/listbox/listbox.script.d.ts +12 -0
- package/dist/components/ui/menu-button/index.js +1 -1
- package/dist/components/ui/menu-button/index.js.map +4 -4
- package/dist/components/ui/menu-button/menu-button.css +24 -8
- package/dist/components/ui/menu-button/menu-button.script.d.ts +3 -4
- package/dist/components/ui/menubar/index.js +1 -1
- package/dist/components/ui/menubar/index.js.map +4 -4
- package/dist/components/ui/menubar/menubar.css +40 -22
- package/dist/components/ui/menubar/menubar.script.d.ts +6 -1
- package/dist/components/ui/number-field/index.d.ts +2 -0
- package/dist/components/ui/number-field/index.js +2 -0
- package/dist/components/ui/number-field/index.js.map +7 -0
- package/dist/components/ui/number-field/number-field.css +185 -0
- package/dist/components/ui/number-field/number-field.d.ts +43 -0
- package/dist/components/ui/number-field/number-field.script.d.ts +104 -0
- package/dist/components/ui/popover/index.d.ts +4 -0
- package/dist/components/ui/popover/index.js +2 -0
- package/dist/components/ui/popover/index.js.map +7 -0
- package/dist/components/ui/popover/popover.css +132 -0
- package/dist/components/ui/popover/popover.d.ts +15 -0
- package/dist/components/ui/popover/popover.script.d.ts +85 -0
- package/dist/components/ui/select/index.d.ts +3 -0
- package/dist/components/ui/select/index.js +2 -0
- package/dist/components/ui/select/index.js.map +7 -0
- package/dist/components/ui/select/select.css +216 -0
- package/dist/components/ui/select/select.d.ts +54 -0
- package/dist/components/ui/select/select.script.d.ts +106 -0
- package/dist/components/ui/shared/collection-navigation.d.ts +8 -0
- package/dist/components/ui/shared/collection-navigation.test.d.ts +1 -0
- package/dist/components/ui/shared/control-toggle.css +132 -0
- package/dist/components/ui/shared/field-label.d.ts +9 -0
- package/dist/components/ui/shared/floating-position.d.ts +13 -2
- package/dist/components/ui/shared/listbox-popover-behavior.d.ts +47 -0
- package/dist/components/ui/shared/listbox-popover-behavior.test.d.ts +1 -0
- package/dist/components/ui/shared/multi-value.d.ts +4 -0
- package/dist/components/ui/shared/popover-controller.d.ts +35 -0
- package/dist/components/ui/shared/popover-controller.test.d.ts +1 -0
- package/dist/components/ui/shared/popover.css +123 -0
- package/dist/components/ui/shared/portal.d.ts +7 -0
- package/dist/components/ui/shared/portal.test.d.ts +1 -0
- package/dist/components/ui/sidebar/index.js +1 -1
- package/dist/components/ui/sidebar/index.js.map +3 -3
- package/dist/components/ui/slider/index.js +1 -1
- package/dist/components/ui/slider/index.js.map +3 -3
- package/dist/components/ui/slider/slider.script.d.ts +5 -12
- package/dist/components/ui/tag-group/index.d.ts +2 -0
- package/dist/components/ui/tag-group/index.js +2 -0
- package/dist/components/ui/tag-group/index.js.map +7 -0
- package/dist/components/ui/tag-group/tag-group.css +184 -0
- package/dist/components/ui/tag-group/tag-group.d.ts +28 -0
- package/dist/components/ui/tag-group/tag-group.script.d.ts +65 -0
- package/dist/components/ui/textarea/index.js +1 -1
- package/dist/components/ui/textarea/index.js.map +2 -2
- package/dist/components/ui/toc/index.js +1 -1
- package/dist/components/ui/toc/index.js.map +3 -3
- package/dist/components/ui/toc/toc.css +1 -1
- package/dist/components/ui/toc/toc.ssr.test.d.ts +1 -0
- package/dist/components/ui/toc/toc.test.d.ts +1 -0
- package/dist/components/ui/tooltip/index.js +1 -1
- package/dist/components/ui/tooltip/index.js.map +3 -3
- package/dist/index.d.ts +14 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +4 -4
- package/dist/lib/icons/calendar.d.ts +3 -0
- package/dist/lib/icons/chevron-down.d.ts +3 -0
- package/dist/lib/icons/index.d.ts +3 -0
- package/dist/lib/icons/types.d.ts +4 -0
- package/dist/lib/intl/locale.d.ts +3 -0
- package/dist/lib/intl-date/calendar.d.ts +25 -0
- package/dist/lib/intl-date/formatters.d.ts +13 -0
- package/dist/lib/intl-date/index.d.ts +12 -0
- package/dist/lib/intl-date/iso.d.ts +6 -0
- package/dist/lib/intl-date/months.d.ts +12 -0
- package/dist/lib/intl-date/parts.d.ts +15 -0
- package/dist/lib/intl-date/parts.test.d.ts +1 -0
- package/dist/lib/intl-date/segments.d.ts +32 -0
- package/dist/lib/intl-date/segments.test.d.ts +1 -0
- package/dist/lib/intl-date/selection.d.ts +39 -0
- package/dist/lib/intl-date/selection.test.d.ts +1 -0
- package/dist/lib/intl-date/types.d.ts +17 -0
- package/dist/lib/intl-number/format.d.ts +9 -0
- package/dist/lib/intl-number/index.d.ts +2 -0
- package/dist/lib/intl-number/range.d.ts +3 -0
- package/dist/lib/intrinsic.d.ts +13 -0
- package/dist/lib/mask/date-mask.d.ts +29 -0
- package/dist/lib/mask/date-mask.test.d.ts +1 -0
- package/dist/lib/mask/index.d.ts +4 -0
- package/dist/lib/mask/input-mask.d.ts +52 -0
- package/dist/lib/mask/input-mask.test.d.ts +1 -0
- package/dist/lib/text-filter.d.ts +7 -0
- package/dist/lib/text-filter.test.d.ts +1 -0
- package/dist/styles/radiant-ui-core.css +131 -1
- package/dist/styles/radiant-ui.css +142 -1
- package/dist/styles/styles.css +4504 -2395
- package/dist/styles/tailwind.css +142 -1
- package/dist/styles/tokens/typography/default.css +8 -0
- package/package.json +106 -15
- package/dist/components/ui/feed/feed.script.d.ts +0 -22
- package/dist/components/ui/spinbutton/index.d.ts +0 -2
- package/dist/components/ui/spinbutton/index.js +0 -2
- package/dist/components/ui/spinbutton/index.js.map +0 -7
- package/dist/components/ui/spinbutton/spinbutton.css +0 -69
- package/dist/components/ui/spinbutton/spinbutton.d.ts +0 -5
- package/dist/components/ui/spinbutton/spinbutton.script.d.ts +0 -64
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type CalendarSelectionMode, type IsoRange } from './selection';
|
|
2
|
+
import type { CalendarWeek, IntlLocale } from './types';
|
|
3
|
+
export type { CalendarSelectionMode, IsoRange };
|
|
4
|
+
/**
|
|
5
|
+
* Returns the JS weekday index (0 = Sunday) that starts the week for `locale`.
|
|
6
|
+
*
|
|
7
|
+
* @remarks Uses `Intl.Locale.weekInfo` when available; falls back to Monday except en-US.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getWeekStartsOn(locale: IntlLocale): number;
|
|
10
|
+
export type BuildCalendarMonthOptions = {
|
|
11
|
+
locale: IntlLocale;
|
|
12
|
+
selectionMode?: CalendarSelectionMode;
|
|
13
|
+
/** Single mode: selected ISO. Multiple: comma-separated. Range: `start/end`. */
|
|
14
|
+
value?: string;
|
|
15
|
+
/** Active range while selecting (anchor + hover preview). */
|
|
16
|
+
rangeDraft?: {
|
|
17
|
+
anchor: string | null;
|
|
18
|
+
hover: string | null;
|
|
19
|
+
};
|
|
20
|
+
min?: string;
|
|
21
|
+
max?: string;
|
|
22
|
+
today?: Date;
|
|
23
|
+
};
|
|
24
|
+
/** Builds a month grid with leading/trailing days from adjacent months. */
|
|
25
|
+
export declare function buildCalendarMonth(year: number, month: number, options: BuildCalendarMonthOptions): CalendarWeek[];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DateDisplayStyle, IntlLocale } from './types';
|
|
2
|
+
/** Returns a cached `Intl.DateTimeFormat` for the given locale and options. */
|
|
3
|
+
export declare function getDateTimeFormat(locale: IntlLocale, options: Intl.DateTimeFormatOptions): Intl.DateTimeFormat;
|
|
4
|
+
/** Formats a date for display using a `dateStyle` preset. */
|
|
5
|
+
export declare function formatDisplayDate(date: Date, locale: IntlLocale, style?: DateDisplayStyle): string;
|
|
6
|
+
/** Formats the month and year shown in the calendar header. */
|
|
7
|
+
export declare function formatMonthYear(date: Date, locale: IntlLocale): string;
|
|
8
|
+
/** Returns localized narrow weekday labels ordered by the locale's first day of week. */
|
|
9
|
+
export declare function getWeekdayLabels(locale: IntlLocale, weekStartsOn: number): string[];
|
|
10
|
+
/** Formats a date range for display using a `dateStyle` preset. */
|
|
11
|
+
export declare function formatDateRange(start: Date, end: Date, locale: IntlLocale, style?: DateDisplayStyle): string;
|
|
12
|
+
/** Localized label for the "today" shortcut (e.g. "today", "vandaag"). */
|
|
13
|
+
export declare function formatTodayLabel(locale: IntlLocale): string;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { buildCalendarMonth, getWeekStartsOn } from './calendar';
|
|
2
|
+
export type { BuildCalendarMonthOptions, CalendarSelectionMode, IsoRange } from './calendar';
|
|
3
|
+
export { addMonths, getVisibleMonthViews } from './months';
|
|
4
|
+
export type { CalendarMonthView } from './months';
|
|
5
|
+
export { advanceRangeSelection, compareIso, getActiveRangeBounds, getDaySelectionAppearance, isIsoInSpan, normalizeRange, parseIsoRange, parseMultipleIsos, serializeIsoRange, serializeMultipleIsos, toggleMultipleIso, } from './selection';
|
|
6
|
+
export type { DaySelectionAppearance, RangeSelectionDraft } from './selection';
|
|
7
|
+
export { formatDisplayDate, formatDateRange, formatMonthYear, formatTodayLabel, getDateTimeFormat, getWeekdayLabels, } from './formatters';
|
|
8
|
+
export { dateToIso, isoToDate, isIsoInRange } from './iso';
|
|
9
|
+
export { getDatePartOrder, getDateSeparators, parseLocaleDateString } from './parts';
|
|
10
|
+
export { buildDateSegments, clampSegmentValue, getEditableSegmentIndices, incrementSegment, maxSegmentLength, segmentsToDate, } from './segments';
|
|
11
|
+
export type { CalendarDayCell, CalendarWeek, DateDisplayStyle, DateGranularity, DatePartType, IntlLocale, } from './types';
|
|
12
|
+
export type { DateSegmentModel, DateSegmentType } from './segments';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Parses an ISO `YYYY-MM-DD` string into a local-midnight `Date`, or `null` when invalid. */
|
|
2
|
+
export declare function isoToDate(iso: string | null | undefined): Date | null;
|
|
3
|
+
/** Serializes a local calendar date to ISO `YYYY-MM-DD`. */
|
|
4
|
+
export declare function dateToIso(date: Date): string;
|
|
5
|
+
/** Returns true when `iso` falls within optional `min` / `max` bounds (inclusive). */
|
|
6
|
+
export declare function isIsoInRange(iso: string, min?: string, max?: string): boolean;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Zero-based month index with year rollover. */
|
|
2
|
+
export declare function addMonths(year: number, month: number, delta: number): {
|
|
3
|
+
year: number;
|
|
4
|
+
month: number;
|
|
5
|
+
};
|
|
6
|
+
export type CalendarMonthView = {
|
|
7
|
+
year: number;
|
|
8
|
+
month: number;
|
|
9
|
+
offset: number;
|
|
10
|
+
};
|
|
11
|
+
/** Returns consecutive month views starting at `year`/`month`. */
|
|
12
|
+
export declare function getVisibleMonthViews(year: number, month: number, count: number): CalendarMonthView[];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DatePartType, IntlLocale } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Uses `formatToParts()` on a fixed reference date to discover the locale's
|
|
4
|
+
* year/month/day field order (e.g. MDY for en-US, DMY for en-GB, YMD for ja-JP).
|
|
5
|
+
*/
|
|
6
|
+
export declare function getDatePartOrder(locale: IntlLocale): DatePartType[];
|
|
7
|
+
/** Literal separators between numeric date parts for the locale (e.g. `['/']` for en-US). */
|
|
8
|
+
export declare function getDateSeparators(locale: IntlLocale): string[];
|
|
9
|
+
/**
|
|
10
|
+
* Parses a user-typed date string according to locale conventions.
|
|
11
|
+
*
|
|
12
|
+
* Accepts ISO `YYYY-MM-DD`, masked numeric input (`08/21/2002`), locale-ordered
|
|
13
|
+
* numeric input (`9/3/2026`), and text month names (`Aug 21, 2002`).
|
|
14
|
+
*/
|
|
15
|
+
export declare function parseLocaleDateString(input: string | null | undefined, locale: IntlLocale): Date | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { DateGranularity, DatePartType, IntlLocale } from './types';
|
|
2
|
+
export type DateSegmentType = DatePartType | 'literal';
|
|
3
|
+
/** @experimental Segment model reserved for a future segment-editor field. */
|
|
4
|
+
export type DateSegmentModel = {
|
|
5
|
+
type: DateSegmentType;
|
|
6
|
+
/** Visible text for literals; numeric string for editable segments. */
|
|
7
|
+
value: string;
|
|
8
|
+
placeholder: string;
|
|
9
|
+
isPlaceholder: boolean;
|
|
10
|
+
editable: boolean;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Builds locale-ordered date segments from `Intl.DateTimeFormat.prototype.formatToParts()`.
|
|
14
|
+
*
|
|
15
|
+
* @remarks Mirrors the React Aria `DateInput` segment list — literals plus editable fields.
|
|
16
|
+
* @experimental Reserved for a future segment-editor field.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildDateSegments(date: Date | null, locale: IntlLocale, options?: {
|
|
19
|
+
granularity?: DateGranularity;
|
|
20
|
+
placeholderDate?: Date;
|
|
21
|
+
}): DateSegmentModel[];
|
|
22
|
+
/**
|
|
23
|
+
* Converts editable segment values into a local calendar `Date`, or `null` when incomplete.
|
|
24
|
+
*
|
|
25
|
+
* @experimental Reserved for a future segment-editor field.
|
|
26
|
+
*/
|
|
27
|
+
export declare function segmentsToDate(segments: DateSegmentModel[]): Date | null;
|
|
28
|
+
/** @experimental Reserved for a future segment-editor field. */
|
|
29
|
+
export declare function getEditableSegmentIndices(segments: DateSegmentModel[]): number[];
|
|
30
|
+
export declare function maxSegmentLength(type: DatePartType): number;
|
|
31
|
+
export declare function clampSegmentValue(type: DatePartType, raw: string): string;
|
|
32
|
+
export declare function incrementSegment(type: DatePartType, value: string, delta: number): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export type CalendarSelectionMode = 'single' | 'multiple' | 'range';
|
|
2
|
+
export type IsoRange = {
|
|
3
|
+
start: string;
|
|
4
|
+
end: string;
|
|
5
|
+
};
|
|
6
|
+
export type RangeSelectionDraft = {
|
|
7
|
+
anchor: string | null;
|
|
8
|
+
hover: string | null;
|
|
9
|
+
};
|
|
10
|
+
export type DaySelectionAppearance = {
|
|
11
|
+
isSelected: boolean;
|
|
12
|
+
isRangeStart: boolean;
|
|
13
|
+
isRangeEnd: boolean;
|
|
14
|
+
isRangeMiddle: boolean;
|
|
15
|
+
};
|
|
16
|
+
/** Lexicographic compare for ISO `YYYY-MM-DD` strings. */
|
|
17
|
+
export declare function compareIso(a: string, b: string): number;
|
|
18
|
+
export declare function normalizeRange(start: string, end: string): IsoRange;
|
|
19
|
+
export declare function parseIsoRange(value: string | null | undefined): IsoRange | null;
|
|
20
|
+
export declare function serializeIsoRange(range: IsoRange | null): string;
|
|
21
|
+
export declare function parseMultipleIsos(value: string | null | undefined): string[];
|
|
22
|
+
export declare function serializeMultipleIsos(values: Iterable<string>): string;
|
|
23
|
+
export declare function toggleMultipleIso(selected: readonly string[], iso: string): string[];
|
|
24
|
+
export declare function isIsoInSpan(iso: string, range: IsoRange): boolean;
|
|
25
|
+
export declare function getActiveRangeBounds(committed: IsoRange | null, draft: RangeSelectionDraft): IsoRange | null;
|
|
26
|
+
export declare function getDaySelectionAppearance(iso: string, mode: CalendarSelectionMode, options: {
|
|
27
|
+
singleIso?: string;
|
|
28
|
+
multipleIsos?: readonly string[];
|
|
29
|
+
range?: IsoRange | null;
|
|
30
|
+
}): DaySelectionAppearance;
|
|
31
|
+
/**
|
|
32
|
+
* Advances range selection after a day click.
|
|
33
|
+
*
|
|
34
|
+
* First click sets the anchor; second click commits the range.
|
|
35
|
+
*/
|
|
36
|
+
export declare function advanceRangeSelection(committed: IsoRange | null, draft: RangeSelectionDraft, iso: string): {
|
|
37
|
+
committed: IsoRange | null;
|
|
38
|
+
draft: RangeSelectionDraft;
|
|
39
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type IntlLocale = string | string[] | undefined;
|
|
2
|
+
export type DatePartType = 'day' | 'month' | 'year';
|
|
3
|
+
export type DateDisplayStyle = 'short' | 'medium' | 'long' | 'full';
|
|
4
|
+
/** Smallest displayed unit — mirrors React Aria `granularity`. */
|
|
5
|
+
export type DateGranularity = 'day' | 'month' | 'year';
|
|
6
|
+
export type CalendarDayCell = {
|
|
7
|
+
date: Date;
|
|
8
|
+
iso: string;
|
|
9
|
+
inMonth: boolean;
|
|
10
|
+
isToday: boolean;
|
|
11
|
+
isSelected: boolean;
|
|
12
|
+
isDisabled: boolean;
|
|
13
|
+
isRangeStart: boolean;
|
|
14
|
+
isRangeEnd: boolean;
|
|
15
|
+
isRangeMiddle: boolean;
|
|
16
|
+
};
|
|
17
|
+
export type CalendarWeek = CalendarDayCell[];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type NumberFormatOptions = Intl.NumberFormatOptions;
|
|
2
|
+
export { resolveLocale } from '../intl/locale';
|
|
3
|
+
export declare function getNumberFormatter(locale?: string | string[], options?: NumberFormatOptions): Intl.NumberFormat;
|
|
4
|
+
export declare function formatNumber(value: number, locale?: string | string[], options?: NumberFormatOptions): string;
|
|
5
|
+
/**
|
|
6
|
+
* Parses a locale-aware number string. Returns `null` when the input is empty or invalid.
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseNumber(input: string, locale?: string | string[], options?: NumberFormatOptions): number | null;
|
|
9
|
+
export declare function parseFormatOptions(raw?: string): NumberFormatOptions | undefined;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function snapToStep(value: number, min: number, max: number, step: number): number;
|
|
2
|
+
export declare function isWithinRange(value: number, min: number, max: number): boolean;
|
|
3
|
+
export declare function isOnStep(value: number, min: number, step: number): boolean;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { JsxHtmlPropsWithChildren } from '@ecopages/jsx';
|
|
2
|
+
export type IntrinsicTag = keyof HTMLElementTagNameMap;
|
|
3
|
+
export type IntrinsicProps<Tag extends IntrinsicTag> = JsxHtmlPropsWithChildren<{
|
|
4
|
+
as?: Tag;
|
|
5
|
+
}>;
|
|
6
|
+
/**
|
|
7
|
+
* Renders a dynamic intrinsic element via JSX (`<Tag>`), avoiding per-tag switch blocks.
|
|
8
|
+
*
|
|
9
|
+
* @remarks Default tag is `div`; pass `as` on each call site.
|
|
10
|
+
*/
|
|
11
|
+
export declare function Intrinsic<Tag extends IntrinsicTag = 'div'>({ as, children, ...props }: IntrinsicProps<Tag> & {
|
|
12
|
+
as?: Tag;
|
|
13
|
+
}): import("@ecopages/jsx").JsxRenderable;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { DatePartType, IntlLocale } from '@/lib/intl-date/types';
|
|
2
|
+
/** IMask pattern for locale date digits (`0` = digit slot). */
|
|
3
|
+
export type DateMaskPattern = string;
|
|
4
|
+
declare function getNumericPartOrder(locale: IntlLocale): DatePartType[];
|
|
5
|
+
/**
|
|
6
|
+
* Builds a mask pattern from `formatToParts()` (e.g. `00/00/0000` for en-US).
|
|
7
|
+
*
|
|
8
|
+
* Consecutive `0` runs map to month, day, or year in locale order.
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildDateMaskPattern(locale: IntlLocale): DateMaskPattern;
|
|
11
|
+
/** Human-readable placeholder derived from the locale mask (e.g. `mm/dd/yyyy`). */
|
|
12
|
+
export declare function getDefaultDatePlaceholder(locale: IntlLocale): string;
|
|
13
|
+
/** @deprecated Use `getDefaultDatePlaceholder`. */
|
|
14
|
+
export declare function maskPatternToPlaceholder(pattern: DateMaskPattern): string;
|
|
15
|
+
/** Strips non-digits from user input. */
|
|
16
|
+
export declare function extractMaskDigits(value: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Applies `digits` to a mask pattern, inserting literals as needed.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* applyDateMask('08212002', '00/00/0000') // → '08/21/2002'
|
|
22
|
+
*/
|
|
23
|
+
export declare function applyDateMask(digits: string, pattern: DateMaskPattern): string;
|
|
24
|
+
/** Maximum number of digit slots in a mask pattern. */
|
|
25
|
+
export declare function maskDigitCapacity(pattern: DateMaskPattern): number;
|
|
26
|
+
/** Maps masked digits back to year/month/day using the locale field order. */
|
|
27
|
+
export declare function maskedDigitsToParts(digits: string, locale: IntlLocale): Partial<Record<DatePartType, number>> | null;
|
|
28
|
+
export declare function partsToDate(parts: Partial<Record<DatePartType, number>>): Date | null;
|
|
29
|
+
export { getNumericPartOrder };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { applyDateMask, buildDateMaskPattern, extractMaskDigits as extractDateMaskDigits, getDefaultDatePlaceholder, getNumericPartOrder, maskDigitCapacity, maskedDigitsToParts, maskPatternToPlaceholder, partsToDate, } from './date-mask';
|
|
2
|
+
export type { DateMaskPattern } from './date-mask';
|
|
3
|
+
export { applyInputMask, extractMaskDigits, extractMaskInput, formatWithMask, maskDigitSlotCount, maskInputSlotCount, maskToPlaceholder, parseMaskPattern, } from './input-mask';
|
|
4
|
+
export type { MaskDefinitions, MaskInputKind, MaskToken } from './input-mask';
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMask-compatible pattern mask utilities.
|
|
3
|
+
*
|
|
4
|
+
* @see https://imask.js.org/guide.html#masked-pattern
|
|
5
|
+
*
|
|
6
|
+
* Default slot definitions:
|
|
7
|
+
* - `0` — digit
|
|
8
|
+
* - `a` — letter
|
|
9
|
+
* - `*` — any character
|
|
10
|
+
*
|
|
11
|
+
* Other syntax:
|
|
12
|
+
* - `{text}` — fixed value (included in extracted input)
|
|
13
|
+
* - `[…]` — optional section
|
|
14
|
+
* - `\` — escape the next character (e.g. `\0` for a literal zero)
|
|
15
|
+
* - all other characters — fixed literals (`+`, `(`, `-`, …)
|
|
16
|
+
*/
|
|
17
|
+
export type MaskInputKind = 'digit' | 'letter' | 'any';
|
|
18
|
+
export type MaskToken = {
|
|
19
|
+
type: 'literal';
|
|
20
|
+
value: string;
|
|
21
|
+
} | {
|
|
22
|
+
type: 'fixed';
|
|
23
|
+
value: string;
|
|
24
|
+
} | {
|
|
25
|
+
type: 'input';
|
|
26
|
+
definition: string;
|
|
27
|
+
kind: MaskInputKind;
|
|
28
|
+
pattern?: RegExp;
|
|
29
|
+
optional?: boolean;
|
|
30
|
+
};
|
|
31
|
+
export type MaskDefinitions = Record<string, MaskInputKind | RegExp>;
|
|
32
|
+
/** Parses an IMask pattern string into tokens. */
|
|
33
|
+
export declare function parseMaskPattern(pattern: string, definitions?: MaskDefinitions): MaskToken[];
|
|
34
|
+
export declare function maskInputSlotCount(tokens: MaskToken[], options?: {
|
|
35
|
+
requiredOnly?: boolean;
|
|
36
|
+
}): number;
|
|
37
|
+
/** @deprecated Use `maskInputSlotCount`. */
|
|
38
|
+
export declare function maskDigitSlotCount(tokens: MaskToken[]): number;
|
|
39
|
+
/** Placeholder using IMask's default `_` for input slots. */
|
|
40
|
+
export declare function maskToPlaceholder(pattern: string, definitions?: MaskDefinitions): string;
|
|
41
|
+
/** Extracts user-typed characters from a masked value (skips fixed segments and literals). */
|
|
42
|
+
export declare function extractMaskInput(masked: string, tokens: MaskToken[]): string;
|
|
43
|
+
/** @deprecated Use `extractMaskInput`. */
|
|
44
|
+
export declare function extractMaskDigits(masked: string, tokens: MaskToken[]): string;
|
|
45
|
+
/**
|
|
46
|
+
* Formats extracted input characters into a masked display string.
|
|
47
|
+
*
|
|
48
|
+
* Returns `''` when `input` is empty.
|
|
49
|
+
*/
|
|
50
|
+
export declare function formatWithMask(input: string, tokens: MaskToken[]): string;
|
|
51
|
+
/** Normalizes user input to a masked display value. */
|
|
52
|
+
export declare function applyInputMask(raw: string, pattern: string, definitions?: MaskDefinitions): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type TextFilterSensitivity = 'base' | 'accent' | 'case';
|
|
2
|
+
/**
|
|
3
|
+
* Case- and accent-insensitive "contains" matcher for autocomplete filtering.
|
|
4
|
+
*
|
|
5
|
+
* @remarks `base` ignores case; `case` is a literal substring match.
|
|
6
|
+
*/
|
|
7
|
+
export declare function textContains(text: string, query: string, sensitivity?: TextFilterSensitivity): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -157,6 +157,17 @@
|
|
|
157
157
|
.visible {
|
|
158
158
|
visibility: visible;
|
|
159
159
|
}
|
|
160
|
+
.sr-only {
|
|
161
|
+
position: absolute;
|
|
162
|
+
width: 1px;
|
|
163
|
+
height: 1px;
|
|
164
|
+
padding: 0;
|
|
165
|
+
margin: -1px;
|
|
166
|
+
overflow: hidden;
|
|
167
|
+
clip-path: inset(50%);
|
|
168
|
+
white-space: nowrap;
|
|
169
|
+
border-width: 0;
|
|
170
|
+
}
|
|
160
171
|
.absolute {
|
|
161
172
|
position: absolute;
|
|
162
173
|
}
|
|
@@ -184,12 +195,27 @@
|
|
|
184
195
|
max-width: 96rem;
|
|
185
196
|
}
|
|
186
197
|
}
|
|
198
|
+
.m-0 {
|
|
199
|
+
margin: 0px;
|
|
200
|
+
}
|
|
201
|
+
.m-1 {
|
|
202
|
+
margin: var(--spacing-1, var(--space-1));
|
|
203
|
+
}
|
|
204
|
+
.mx-auto {
|
|
205
|
+
margin-inline: auto;
|
|
206
|
+
}
|
|
187
207
|
.mt-1 {
|
|
188
208
|
margin-top: var(--spacing-1, var(--space-1));
|
|
189
209
|
}
|
|
190
210
|
.mt-2 {
|
|
191
211
|
margin-top: var(--spacing-2, var(--space-2));
|
|
192
212
|
}
|
|
213
|
+
.mb-2 {
|
|
214
|
+
margin-bottom: var(--spacing-2, var(--space-2));
|
|
215
|
+
}
|
|
216
|
+
.mb-4 {
|
|
217
|
+
margin-bottom: var(--spacing-4, var(--space-4));
|
|
218
|
+
}
|
|
193
219
|
.block {
|
|
194
220
|
display: block;
|
|
195
221
|
}
|
|
@@ -228,18 +254,42 @@
|
|
|
228
254
|
.h-full {
|
|
229
255
|
height: 100%;
|
|
230
256
|
}
|
|
257
|
+
.max-h-64 {
|
|
258
|
+
max-height: calc(var(--spacing, 0.25rem) * 64);
|
|
259
|
+
}
|
|
260
|
+
.min-h-72 {
|
|
261
|
+
min-height: calc(var(--spacing, 0.25rem) * 72);
|
|
262
|
+
}
|
|
263
|
+
.w-64 {
|
|
264
|
+
width: calc(var(--spacing, 0.25rem) * 64);
|
|
265
|
+
}
|
|
266
|
+
.w-\[calc\(100\%-0\.5rem\)\] {
|
|
267
|
+
width: calc(100% - 0.5rem);
|
|
268
|
+
}
|
|
231
269
|
.w-full {
|
|
232
270
|
width: 100%;
|
|
233
271
|
}
|
|
272
|
+
.max-w-2xl {
|
|
273
|
+
max-width: var(--container-2xl, 42rem);
|
|
274
|
+
}
|
|
234
275
|
.max-w-3xl {
|
|
235
276
|
max-width: var(--container-3xl, 48rem);
|
|
236
277
|
}
|
|
278
|
+
.max-w-4xl {
|
|
279
|
+
max-width: var(--container-4xl, 56rem);
|
|
280
|
+
}
|
|
237
281
|
.max-w-5xl {
|
|
238
282
|
max-width: var(--container-5xl, 64rem);
|
|
239
283
|
}
|
|
284
|
+
.max-w-md {
|
|
285
|
+
max-width: var(--container-md, 28rem);
|
|
286
|
+
}
|
|
240
287
|
.max-w-prose {
|
|
241
288
|
max-width: 65ch;
|
|
242
289
|
}
|
|
290
|
+
.max-w-xl {
|
|
291
|
+
max-width: var(--container-xl, 36rem);
|
|
292
|
+
}
|
|
243
293
|
.min-w-0 {
|
|
244
294
|
min-width: 0px;
|
|
245
295
|
}
|
|
@@ -258,6 +308,9 @@
|
|
|
258
308
|
.flex-col {
|
|
259
309
|
flex-direction: column;
|
|
260
310
|
}
|
|
311
|
+
.flex-wrap {
|
|
312
|
+
flex-wrap: wrap;
|
|
313
|
+
}
|
|
261
314
|
.place-items-center {
|
|
262
315
|
place-items: center;
|
|
263
316
|
}
|
|
@@ -267,6 +320,9 @@
|
|
|
267
320
|
.justify-between {
|
|
268
321
|
justify-content: space-between;
|
|
269
322
|
}
|
|
323
|
+
.justify-center {
|
|
324
|
+
justify-content: center;
|
|
325
|
+
}
|
|
270
326
|
.gap-0\.5 {
|
|
271
327
|
gap: calc(var(--spacing, 0.25rem) * 0.5);
|
|
272
328
|
}
|
|
@@ -285,14 +341,42 @@
|
|
|
285
341
|
.gap-4 {
|
|
286
342
|
gap: var(--spacing-4, var(--space-4));
|
|
287
343
|
}
|
|
344
|
+
.gap-8 {
|
|
345
|
+
gap: var(--spacing-8, var(--space-8));
|
|
346
|
+
}
|
|
347
|
+
.gap-10 {
|
|
348
|
+
gap: calc(var(--spacing, 0.25rem) * 10);
|
|
349
|
+
}
|
|
350
|
+
.gap-inline {
|
|
351
|
+
gap: var(--spacing-inline, var(--space-inline));
|
|
352
|
+
}
|
|
353
|
+
.gap-stack {
|
|
354
|
+
gap: var(--spacing-stack, var(--space-stack));
|
|
355
|
+
}
|
|
356
|
+
:where(.divide-y > :not(:last-child)) {
|
|
357
|
+
--tw-divide-y-reverse: 0;
|
|
358
|
+
border-bottom-style: var(--tw-border-style);
|
|
359
|
+
border-top-style: var(--tw-border-style);
|
|
360
|
+
border-top-width: calc(1px * var(--tw-divide-y-reverse));
|
|
361
|
+
border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
|
|
362
|
+
}
|
|
363
|
+
:where(.divide-border > :not(:last-child)) {
|
|
364
|
+
border-color: var(--color-border, var(--border));
|
|
365
|
+
}
|
|
288
366
|
.truncate {
|
|
289
367
|
overflow: hidden;
|
|
290
368
|
text-overflow: ellipsis;
|
|
291
369
|
white-space: nowrap;
|
|
292
370
|
}
|
|
371
|
+
.overflow-auto {
|
|
372
|
+
overflow: auto;
|
|
373
|
+
}
|
|
293
374
|
.overflow-y-auto {
|
|
294
375
|
overflow-y: auto;
|
|
295
376
|
}
|
|
377
|
+
.rounded-container {
|
|
378
|
+
border-radius: var(--radius-container, var(--radius-container));
|
|
379
|
+
}
|
|
296
380
|
.rounded-control {
|
|
297
381
|
border-radius: var(--radius-control, var(--radius-control));
|
|
298
382
|
}
|
|
@@ -311,29 +395,60 @@
|
|
|
311
395
|
border-bottom-style: var(--tw-border-style);
|
|
312
396
|
border-bottom-width: 1px;
|
|
313
397
|
}
|
|
398
|
+
.border-l-2 {
|
|
399
|
+
border-left-style: var(--tw-border-style);
|
|
400
|
+
border-left-width: 2px;
|
|
401
|
+
}
|
|
314
402
|
.border-border {
|
|
315
403
|
border-color: var(--color-border, var(--border));
|
|
316
404
|
}
|
|
405
|
+
.border-primary {
|
|
406
|
+
border-color: var(--color-primary, var(--primary));
|
|
407
|
+
}
|
|
408
|
+
.bg-background {
|
|
409
|
+
background-color: var(--color-background, var(--background));
|
|
410
|
+
}
|
|
317
411
|
.bg-primary {
|
|
318
412
|
background-color: var(--color-primary, var(--primary));
|
|
319
413
|
}
|
|
320
414
|
.bg-surface {
|
|
321
415
|
background-color: var(--color-surface, var(--surface));
|
|
322
416
|
}
|
|
417
|
+
.bg-surface-container-low {
|
|
418
|
+
background-color: var(--color-surface-container-low, var(--surface-container-low));
|
|
419
|
+
}
|
|
420
|
+
.p-2 {
|
|
421
|
+
padding: var(--spacing-2, var(--space-2));
|
|
422
|
+
}
|
|
323
423
|
.p-4 {
|
|
324
424
|
padding: var(--spacing-4, var(--space-4));
|
|
325
425
|
}
|
|
426
|
+
.p-inset {
|
|
427
|
+
padding: var(--spacing-inset, var(--space-inset));
|
|
428
|
+
}
|
|
326
429
|
.px-4 {
|
|
327
430
|
padding-inline: var(--spacing-4, var(--space-4));
|
|
328
431
|
}
|
|
432
|
+
.px-8 {
|
|
433
|
+
padding-inline: var(--spacing-8, var(--space-8));
|
|
434
|
+
}
|
|
329
435
|
.py-2 {
|
|
330
436
|
padding-block: var(--spacing-2, var(--space-2));
|
|
331
437
|
}
|
|
438
|
+
.py-8 {
|
|
439
|
+
padding-block: var(--spacing-8, var(--space-8));
|
|
440
|
+
}
|
|
441
|
+
.py-16 {
|
|
442
|
+
padding-block: calc(var(--spacing, 0.25rem) * 16);
|
|
443
|
+
}
|
|
332
444
|
.pt-1\.5 {
|
|
333
445
|
padding-top: calc(var(--spacing, 0.25rem) * 1.5);
|
|
334
446
|
}
|
|
447
|
+
.pl-6 {
|
|
448
|
+
padding-left: var(--spacing-6, var(--space-6));
|
|
449
|
+
}
|
|
335
450
|
.text-2xl {
|
|
336
|
-
font-size: var(--text-2xl,
|
|
451
|
+
font-size: var(--text-2xl, var(--text-2xl));
|
|
337
452
|
line-height: var(--tw-leading, var(--text-2xl--line-height, calc(2 / 1.5)));
|
|
338
453
|
}
|
|
339
454
|
.text-base {
|
|
@@ -407,6 +522,12 @@
|
|
|
407
522
|
--tw-duration: 150ms;
|
|
408
523
|
transition-duration: 150ms;
|
|
409
524
|
}
|
|
525
|
+
.first\:pt-0:first-child {
|
|
526
|
+
padding-top: 0px;
|
|
527
|
+
}
|
|
528
|
+
.last\:pb-0:last-child {
|
|
529
|
+
padding-bottom: 0px;
|
|
530
|
+
}
|
|
410
531
|
@media (width >= 40rem) {
|
|
411
532
|
.sm\:p-6 {
|
|
412
533
|
padding: var(--spacing-6, var(--space-6));
|
|
@@ -419,6 +540,9 @@
|
|
|
419
540
|
.md\:hidden {
|
|
420
541
|
display: none;
|
|
421
542
|
}
|
|
543
|
+
.md\:grid-cols-2 {
|
|
544
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
545
|
+
}
|
|
422
546
|
}
|
|
423
547
|
@media (width >= 64rem) {
|
|
424
548
|
.lg\:p-8 {
|
|
@@ -669,6 +793,11 @@
|
|
|
669
793
|
syntax: "*";
|
|
670
794
|
inherits: false;
|
|
671
795
|
}
|
|
796
|
+
@property --tw-divide-y-reverse {
|
|
797
|
+
syntax: "*";
|
|
798
|
+
inherits: false;
|
|
799
|
+
initial-value: 0;
|
|
800
|
+
}
|
|
672
801
|
@property --tw-border-style {
|
|
673
802
|
syntax: "*";
|
|
674
803
|
inherits: false;
|
|
@@ -817,6 +946,7 @@
|
|
|
817
946
|
--tw-rotate-z: initial;
|
|
818
947
|
--tw-skew-x: initial;
|
|
819
948
|
--tw-skew-y: initial;
|
|
949
|
+
--tw-divide-y-reverse: 0;
|
|
820
950
|
--tw-border-style: solid;
|
|
821
951
|
--tw-font-weight: initial;
|
|
822
952
|
--tw-shadow: 0 0 #0000;
|