@omnifyjp/ui 2.0.4 → 2.2.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.
- package/dist/{chunk-V3S2AZKJ.js → chunk-2OPOSDEH.js} +3 -3
- package/dist/{chunk-V3S2AZKJ.js.map → chunk-2OPOSDEH.js.map} +1 -1
- package/dist/chunk-7HHL5OFD.js +71 -0
- package/dist/chunk-7HHL5OFD.js.map +1 -0
- package/dist/{chunk-VPTIRPZW.js → chunk-BBFOFRWT.js} +58 -7
- package/dist/chunk-BBFOFRWT.js.map +1 -0
- package/dist/{chunk-4NBDYSSQ.js → chunk-DB42CM3T.js} +3 -3
- package/dist/{chunk-4NBDYSSQ.js.map → chunk-DB42CM3T.js.map} +1 -1
- package/dist/{chunk-4AGNE75K.js → chunk-M22SIS5Z.js} +3 -3
- package/dist/{chunk-4AGNE75K.js.map → chunk-M22SIS5Z.js.map} +1 -1
- package/dist/{chunk-HDTHGIQR.js → chunk-ML2VNJ7R.js} +3 -3
- package/dist/{chunk-HDTHGIQR.js.map → chunk-ML2VNJ7R.js.map} +1 -1
- package/dist/chunk-PMNLM6VF.js +11 -0
- package/dist/chunk-PMNLM6VF.js.map +1 -0
- package/dist/{chunk-ZUBW2ERW.js → chunk-Q5KDFNRD.js} +3 -3
- package/dist/{chunk-ZUBW2ERW.js.map → chunk-Q5KDFNRD.js.map} +1 -1
- package/dist/components/domain/calendar/calendar-event-chip.js +5 -1
- package/dist/components/domain/calendar/calendar-event-chip.js.map +1 -1
- package/dist/components/domain/calendar/calendar-event-sheet.js +6 -3
- package/dist/components/domain/calendar/calendar-event-sheet.js.map +1 -1
- package/dist/components/domain/calendar/calendar-mini.js +7 -4
- package/dist/components/domain/calendar/calendar-mini.js.map +1 -1
- package/dist/components/domain/calendar/calendar-toolbar.js +4 -2
- package/dist/components/domain/calendar/calendar-toolbar.js.map +1 -1
- package/dist/components/inputs/button.d.ts +1 -1
- package/dist/components/inputs/color-picker.js +3 -3
- package/dist/components/inputs/date-picker.js +8 -5
- package/dist/components/inputs/date-picker.js.map +1 -1
- package/dist/components/inputs/input.js +2 -2
- package/dist/components/inputs/password-input.js +3 -3
- package/dist/components/inputs/slug-input.js +3 -3
- package/dist/components/inputs/textarea.js +2 -2
- package/dist/components/inputs/time-picker.js +2 -2
- package/dist/components/navigation/locale-switcher.d.ts +35 -0
- package/dist/components/navigation/locale-switcher.js +7 -0
- package/dist/components/navigation/locale-switcher.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +8 -6
- package/dist/lib/timezone.d.ts +16 -0
- package/dist/lib/timezone.js +3 -0
- package/dist/lib/timezone.js.map +1 -0
- package/dist/providers/ui-provider.d.ts +36 -2
- package/dist/providers/ui-provider.js +1 -1
- package/package.json +11 -11
- package/dist/chunk-VPTIRPZW.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/domain/calendar/calendar-event-sheet.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/domain/calendar/calendar-event-sheet.tsx"],"names":[],"mappings":"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","file":"calendar-event-sheet.js","sourcesContent":["import { format } from 'date-fns';\nimport type { Locale } from 'date-fns';\nimport { Clock, MapPin, Users, Trash2 } from 'lucide-react';\nimport { toZonedTime } from '../../../lib/timezone';\nimport { useDateFnsLocale, useTimezone } from '../../../providers/ui-provider';\nimport { Sheet, SheetContent, SheetHeader, SheetTitle } from '../../overlay/sheet';\nimport { Button } from '../../inputs/button';\nimport { Separator } from '../../display/separator';\nimport { CalendarCategoryBadge } from './calendar-category-badge';\n\n/** Extended event data shape for the detail sheet, including description, location, and attendees. */\nexport interface CalendarEventSheetEvent {\n /** Unique event identifier. */\n id: string;\n /** Display title of the event. */\n title: string;\n /** Optional long description or notes for the event. */\n description?: string;\n /** Event start date/time. */\n start: Date;\n /** Event end date/time. */\n end: Date;\n /** Whether this is an all-day event. */\n allDay?: boolean;\n /** CSS color string for the event. */\n color: string;\n /** Category key (e.g. \"meeting\", \"deadline\") used by CalendarCategoryBadge. */\n category: string;\n /** Optional location string. */\n location?: string;\n /** Optional list of attendee email addresses. */\n attendees?: string[];\n}\n\n/** Localizable labels for the event detail sheet. All have English defaults. */\nexport interface CalendarEventSheetLabels {\n /** Text displayed for all-day events instead of a time range. */\n allDay?: string;\n /** Heading text for the attendees section. */\n attendees?: string;\n /** Label for the delete button. */\n delete?: string;\n}\n\nconst defaultLabels: Required<CalendarEventSheetLabels> = {\n allDay: 'All Day',\n attendees: 'Attendees',\n delete: 'Delete',\n};\n\nexport interface CalendarEventSheetProps {\n /** The event to display, or `null` to render nothing. */\n event: CalendarEventSheetEvent | null;\n /** Whether the sheet is open. */\n open: boolean;\n /** Callback to toggle the sheet open state. */\n onOpenChange: (open: boolean) => void;\n /** Optional callback when the delete button is clicked. Receives the event id. */\n onDelete?: (id: string) => void;\n /** Override display label for the category badge. */\n categoryLabel?: string;\n /** Custom className styles per category key for the CalendarCategoryBadge. */\n categoryStyles?: Record<string, string>;\n /** Localizable UI labels with English defaults. */\n labels?: CalendarEventSheetLabels;\n /** date-fns Locale object for formatting dates. Falls back to UIProvider's `dateFnsLocale`. */\n locale?: Locale;\n}\n\n/**\n * Side sheet that displays full event details including title, category badge,\n * description, date/time, location, attendees, and a delete action.\n * Built on top of the Sheet component.\n *\n * @example\n * ```tsx\n * <CalendarEventSheet\n * event={selectedEvent}\n * open={sheetOpen}\n * onOpenChange={setSheetOpen}\n * onDelete={(id) => removeEvent(id)}\n * />\n * ```\n */\nexport function CalendarEventSheet({\n event,\n open,\n onOpenChange,\n onDelete,\n categoryLabel,\n categoryStyles,\n labels: labelsProp,\n locale: localeProp,\n}: CalendarEventSheetProps) {\n const labels = { ...defaultLabels, ...labelsProp };\n const contextLocale = useDateFnsLocale() as Locale | undefined;\n const locale = localeProp ?? contextLocale;\n const { timezone } = useTimezone();\n\n if (!event) return null;\n\n const localeOpt = locale ? { locale } : undefined;\n const timeDisplay = event.allDay\n ? labels.allDay\n : `${format(toZonedTime(event.start, timezone), 'HH:mm', localeOpt)} - ${format(toZonedTime(event.end, timezone), 'HH:mm', localeOpt)}`;\n\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent className=\"sm:max-w-md\">\n <SheetHeader>\n <SheetTitle>{event.title}</SheetTitle>\n </SheetHeader>\n <div className=\"mt-4 space-y-4\">\n <CalendarCategoryBadge\n category={event.category}\n label={categoryLabel}\n styles={categoryStyles}\n />\n\n {event.description && (\n <p className=\"text-sm text-muted-foreground\">{event.description}</p>\n )}\n\n <Separator />\n\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-3 text-sm\">\n <Clock className=\"w-4 h-4 text-muted-foreground flex-shrink-0\" />\n <div>\n <p className=\"font-medium\">{format(toZonedTime(event.start, timezone), 'EEEE, MMMM d, yyyy', localeOpt)}</p>\n <p className=\"text-muted-foreground\">{timeDisplay}</p>\n </div>\n </div>\n\n {event.location && (\n <div className=\"flex items-center gap-3 text-sm\">\n <MapPin className=\"w-4 h-4 text-muted-foreground flex-shrink-0\" />\n <span>{event.location}</span>\n </div>\n )}\n\n {event.attendees && event.attendees.length > 0 && (\n <div className=\"flex items-start gap-3 text-sm\">\n <Users className=\"w-4 h-4 text-muted-foreground flex-shrink-0 mt-0.5\" />\n <div>\n <p className=\"font-medium mb-1\">{labels.attendees}</p>\n <div className=\"space-y-1\">\n {event.attendees.map(email => (\n <p key={email} className=\"text-muted-foreground\">{email}</p>\n ))}\n </div>\n </div>\n </div>\n )}\n </div>\n\n <Separator />\n\n <div className=\"flex justify-end\">\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => {\n onDelete?.(event.id);\n onOpenChange(false);\n }}\n >\n <Trash2 className=\"w-4 h-4\" />\n {labels.delete}\n </Button>\n </div>\n </div>\n </SheetContent>\n </Sheet>\n );\n}\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { nowInTimezone, toZonedTime } from '../../../chunk-PMNLM6VF.js';
|
|
2
|
+
import { useDateFnsLocale, useTimezone } from '../../../chunk-BBFOFRWT.js';
|
|
2
3
|
import { Checkbox } from '../../../chunk-W477ZR6B.js';
|
|
3
4
|
import { Separator } from '../../../chunk-KCUSO3CK.js';
|
|
4
5
|
import { cn } from '../../../chunk-DGPY4WP3.js';
|
|
5
6
|
import { useMemo } from 'react';
|
|
6
|
-
import { startOfMonth, endOfMonth, startOfWeek, endOfWeek, eachDayOfInterval, format, isSameMonth, isSameDay
|
|
7
|
+
import { startOfMonth, endOfMonth, startOfWeek, endOfWeek, eachDayOfInterval, format, isSameMonth, isSameDay } from 'date-fns';
|
|
7
8
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
8
9
|
|
|
9
10
|
var defaultLabels = {
|
|
@@ -29,6 +30,8 @@ function CalendarMini({
|
|
|
29
30
|
const labels = { ...defaultLabels, ...labelsProp };
|
|
30
31
|
const contextLocale = useDateFnsLocale();
|
|
31
32
|
const locale = localeProp ?? contextLocale;
|
|
33
|
+
const { timezone } = useTimezone();
|
|
34
|
+
const todayInTz = nowInTimezone(timezone);
|
|
32
35
|
const days = useMemo(() => {
|
|
33
36
|
const monthStart = startOfMonth(currentDate);
|
|
34
37
|
const monthEnd = endOfMonth(currentDate);
|
|
@@ -39,13 +42,13 @@ function CalendarMini({
|
|
|
39
42
|
const weekDays = [labels.sun, labels.mon, labels.tue, labels.wed, labels.thu, labels.fri, labels.sat];
|
|
40
43
|
return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
41
44
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
42
|
-
/* @__PURE__ */ jsx("p", { className: "text-sm font-semibold mb-2", children: format(currentDate, "MMMM yyyy", locale ? { locale } : void 0) }),
|
|
45
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-semibold mb-2", children: format(toZonedTime(currentDate, timezone), "MMMM yyyy", locale ? { locale } : void 0) }),
|
|
43
46
|
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-7 gap-0", children: [
|
|
44
47
|
weekDays.map((day) => /* @__PURE__ */ jsx("div", { className: "text-center text-[10px] font-medium text-muted-foreground py-1", children: day }, day)),
|
|
45
48
|
days.map((day) => {
|
|
46
49
|
const inMonth = isSameMonth(day, currentDate);
|
|
47
50
|
const selected = isSameDay(day, selectedDate);
|
|
48
|
-
const today =
|
|
51
|
+
const today = isSameDay(day, todayInTz);
|
|
49
52
|
return /* @__PURE__ */ jsx(
|
|
50
53
|
"button",
|
|
51
54
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/domain/calendar/calendar-mini.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/domain/calendar/calendar-mini.tsx"],"names":[],"mappings":"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","file":"calendar-mini.js","sourcesContent":["import { useMemo } from 'react';\nimport {\n startOfMonth, endOfMonth, startOfWeek, endOfWeek,\n eachDayOfInterval, isSameMonth, isSameDay, format,\n} from 'date-fns';\nimport type { Locale } from 'date-fns';\nimport { cn } from '../../../lib/utils';\nimport { toZonedTime, nowInTimezone } from '../../../lib/timezone';\nimport { useDateFnsLocale, useTimezone } from '../../../providers/ui-provider';\nimport { Checkbox } from '../../inputs/checkbox';\nimport { Separator } from '../../display/separator';\n\n/** A category that can be toggled on/off in the mini calendar's filter section. */\nexport interface CalendarCategory {\n /** Unique key for this category. */\n key: string;\n /** CSS color string used for the category dot. */\n color: string;\n /** Display label for the category. */\n label: string;\n}\n\n/** Localizable labels for the mini calendar. All have English defaults. */\nexport interface CalendarMiniLabels {\n /** Label for Sunday column header. */\n sun?: string;\n /** Label for Monday column header. */\n mon?: string;\n /** Label for Tuesday column header. */\n tue?: string;\n /** Label for Wednesday column header. */\n wed?: string;\n /** Label for Thursday column header. */\n thu?: string;\n /** Label for Friday column header. */\n fri?: string;\n /** Label for Saturday column header. */\n sat?: string;\n /** Heading text for the categories filter section. */\n categories?: string;\n}\n\nconst defaultLabels: Required<CalendarMiniLabels> = {\n sun: 'Sun', mon: 'Mon', tue: 'Tue', wed: 'Wed', thu: 'Thu', fri: 'Fri', sat: 'Sat',\n categories: 'Categories',\n};\n\nexport interface CalendarMiniProps {\n /** The month to display (any date within the target month). */\n currentDate: Date;\n /** The currently selected date, highlighted with primary color. */\n selectedDate: Date;\n /** Callback when a day cell is clicked. */\n onSelectDate: (date: Date) => void;\n /** Optional list of event categories for the filter section. */\n categories?: CalendarCategory[];\n /** Keys of currently enabled categories. */\n enabledCategories?: string[];\n /** Callback when a category checkbox is toggled. */\n onToggleCategory?: (key: string) => void;\n /** Localizable UI labels with English defaults. */\n labels?: CalendarMiniLabels;\n /** date-fns Locale object for formatting the month/year header. Falls back to UIProvider's `dateFnsLocale`. */\n locale?: Locale;\n}\n\n/**\n * Compact month calendar with optional category filters. Designed for sidebar\n * placement in calendar views. Locale-agnostic via the `labels` prop.\n *\n * @example\n * ```tsx\n * <CalendarMini\n * currentDate={new Date()}\n * selectedDate={selectedDate}\n * onSelectDate={setSelectedDate}\n * categories={[{ key: \"meeting\", color: \"#3b82f6\", label: \"Meeting\" }]}\n * enabledCategories={[\"meeting\"]}\n * onToggleCategory={(key) => toggle(key)}\n * />\n * ```\n */\nexport function CalendarMini({\n currentDate,\n selectedDate,\n onSelectDate,\n categories,\n enabledCategories,\n onToggleCategory,\n labels: labelsProp,\n locale: localeProp,\n}: CalendarMiniProps) {\n const labels = { ...defaultLabels, ...labelsProp };\n const contextLocale = useDateFnsLocale() as Locale | undefined;\n const locale = localeProp ?? contextLocale;\n const { timezone } = useTimezone();\n const todayInTz = nowInTimezone(timezone);\n\n const days = useMemo(() => {\n const monthStart = startOfMonth(currentDate);\n const monthEnd = endOfMonth(currentDate);\n const calStart = startOfWeek(monthStart, { weekStartsOn: 0 });\n const calEnd = endOfWeek(monthEnd, { weekStartsOn: 0 });\n return eachDayOfInterval({ start: calStart, end: calEnd });\n }, [currentDate]);\n\n const weekDays = [labels.sun, labels.mon, labels.tue, labels.wed, labels.thu, labels.fri, labels.sat];\n\n return (\n <div className=\"space-y-4\">\n {/* Mini calendar */}\n <div>\n <p className=\"text-sm font-semibold mb-2\">{format(toZonedTime(currentDate, timezone), 'MMMM yyyy', locale ? { locale } : undefined)}</p>\n <div className=\"grid grid-cols-7 gap-0\">\n {weekDays.map(day => (\n <div key={day} className=\"text-center text-[10px] font-medium text-muted-foreground py-1\">\n {day}\n </div>\n ))}\n {days.map(day => {\n const inMonth = isSameMonth(day, currentDate);\n const selected = isSameDay(day, selectedDate);\n const today = isSameDay(day, todayInTz);\n return (\n <button\n key={day.toISOString()}\n type=\"button\"\n onClick={() => onSelectDate(day)}\n className={cn(\n 'w-7 h-7 text-[11px] rounded-full flex items-center justify-center transition-colors',\n !inMonth && 'text-muted-foreground/40',\n inMonth && !selected && 'hover:bg-accent',\n selected && 'bg-primary text-primary-foreground',\n today && !selected && 'font-bold text-primary',\n )}\n >\n {format(day, 'd')}\n </button>\n );\n })}\n </div>\n </div>\n\n {categories && categories.length > 0 && (\n <>\n <Separator />\n {/* Category filters */}\n <div>\n <p className=\"text-sm font-semibold mb-2\">{labels.categories}</p>\n <div className=\"space-y-1.5\">\n {categories.map(cat => (\n <label\n key={cat.key}\n className=\"flex items-center gap-2 py-1 px-1 rounded hover:bg-accent transition-colors cursor-pointer\"\n >\n <Checkbox\n checked={enabledCategories?.includes(cat.key) ?? false}\n onCheckedChange={() => onToggleCategory?.(cat.key)}\n />\n <div className=\"w-2.5 h-2.5 rounded-full\" style={{ backgroundColor: cat.color }} />\n <span className=\"text-sm\">{cat.label}</span>\n </label>\n ))}\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { toZonedTime } from '../../../chunk-PMNLM6VF.js';
|
|
2
|
+
import { useDateFnsLocale, useTimezone } from '../../../chunk-BBFOFRWT.js';
|
|
2
3
|
import { ToggleGroup, ToggleGroupItem } from '../../../chunk-TPBRGO4D.js';
|
|
3
4
|
import '../../../chunk-ORTPKXBI.js';
|
|
4
5
|
import { Button } from '../../../chunk-BOV3Q2JH.js';
|
|
@@ -29,6 +30,7 @@ function CalendarToolbar({
|
|
|
29
30
|
const labels = { ...defaultLabels, ...labelsProp };
|
|
30
31
|
const contextLocale = useDateFnsLocale();
|
|
31
32
|
const locale = localeProp ?? contextLocale;
|
|
33
|
+
const { timezone } = useTimezone();
|
|
32
34
|
const titleFormat = titleFormatProp ?? (view === "day" ? "EEEE, MMMM d, yyyy" : "MMMM yyyy");
|
|
33
35
|
return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-4 flex-wrap", children: [
|
|
34
36
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
@@ -37,7 +39,7 @@ function CalendarToolbar({
|
|
|
37
39
|
/* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon", className: "w-8 h-8", onClick: onPrev, children: /* @__PURE__ */ jsx(ChevronLeft, { className: "w-4 h-4" }) }),
|
|
38
40
|
/* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon", className: "w-8 h-8", onClick: onNext, children: /* @__PURE__ */ jsx(ChevronRight, { className: "w-4 h-4" }) })
|
|
39
41
|
] }),
|
|
40
|
-
/* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold", children: format(currentDate, titleFormat, locale ? { locale } : void 0) })
|
|
42
|
+
/* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold", children: format(toZonedTime(currentDate, timezone), titleFormat, locale ? { locale } : void 0) })
|
|
41
43
|
] }),
|
|
42
44
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
43
45
|
/* @__PURE__ */ jsxs(ToggleGroup, { type: "single", value: view, onValueChange: (val) => val && onViewChange(val), children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/domain/calendar/calendar-toolbar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/domain/calendar/calendar-toolbar.tsx"],"names":[],"mappings":"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","file":"calendar-toolbar.js","sourcesContent":["import { format } from 'date-fns';\nimport type { Locale } from 'date-fns';\nimport { ChevronLeft, ChevronRight, Plus } from 'lucide-react';\nimport { toZonedTime } from '../../../lib/timezone';\nimport { useDateFnsLocale, useTimezone } from '../../../providers/ui-provider';\nimport { Button } from '../../inputs/button';\nimport { ToggleGroup, ToggleGroupItem } from '../../display/toggle-group';\n\n/** Supported calendar view modes. */\nexport type CalendarView = 'month' | 'week' | 'day';\n\n/** Localizable labels for the calendar toolbar. All have English defaults. */\nexport interface CalendarToolbarLabels {\n /** Label for the \"Today\" button. */\n today?: string;\n /** Label for the \"Month\" view toggle. */\n month?: string;\n /** Label for the \"Week\" view toggle. */\n week?: string;\n /** Label for the \"Day\" view toggle. */\n day?: string;\n /** Label for the \"Create Event\" button. */\n createEvent?: string;\n}\n\nconst defaultLabels: Required<CalendarToolbarLabels> = {\n today: 'Today',\n month: 'Month',\n week: 'Week',\n day: 'Day',\n createEvent: 'Create Event',\n};\n\nexport interface CalendarToolbarProps {\n /** The date currently being viewed. Used for the title display. */\n currentDate: Date;\n /** The active calendar view mode. */\n view: CalendarView;\n /** Callback when the user switches between month/week/day views. */\n onViewChange: (view: CalendarView) => void;\n /** Navigate to the previous period. */\n onPrev: () => void;\n /** Navigate to the next period. */\n onNext: () => void;\n /** Navigate to today. */\n onToday: () => void;\n /** Optional callback for the \"Create Event\" button. Button is hidden when omitted. */\n onCreateEvent?: () => void;\n /** Localizable UI labels with English defaults. */\n labels?: CalendarToolbarLabels;\n /** date-fns format string for the title. Defaults to `\"MMMM yyyy\"` or `\"EEEE, MMMM d, yyyy\"` for day view. */\n titleFormat?: string;\n /** date-fns Locale object for formatting the title. Falls back to UIProvider's `dateFnsLocale`. */\n locale?: Locale;\n}\n\n/**\n * Toolbar for calendar views with navigation controls (prev/next/today),\n * view mode toggle (month/week/day), and an optional \"Create Event\" button.\n * Locale-agnostic via the `labels` prop.\n *\n * @example\n * ```tsx\n * <CalendarToolbar\n * currentDate={currentDate}\n * view=\"month\"\n * onViewChange={setView}\n * onPrev={handlePrev}\n * onNext={handleNext}\n * onToday={handleToday}\n * onCreateEvent={() => setDialogOpen(true)}\n * />\n * ```\n */\nexport function CalendarToolbar({\n currentDate,\n view,\n onViewChange,\n onPrev,\n onNext,\n onToday,\n onCreateEvent,\n labels: labelsProp,\n titleFormat: titleFormatProp,\n locale: localeProp,\n}: CalendarToolbarProps) {\n const labels = { ...defaultLabels, ...labelsProp };\n const contextLocale = useDateFnsLocale() as Locale | undefined;\n const locale = localeProp ?? contextLocale;\n const { timezone } = useTimezone();\n\n const titleFormat = titleFormatProp ?? (view === 'day'\n ? 'EEEE, MMMM d, yyyy'\n : 'MMMM yyyy');\n\n return (\n <div className=\"flex items-center justify-between gap-4 flex-wrap\">\n <div className=\"flex items-center gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={onToday}>\n {labels.today}\n </Button>\n <div className=\"flex items-center\">\n <Button variant=\"ghost\" size=\"icon\" className=\"w-8 h-8\" onClick={onPrev}>\n <ChevronLeft className=\"w-4 h-4\" />\n </Button>\n <Button variant=\"ghost\" size=\"icon\" className=\"w-8 h-8\" onClick={onNext}>\n <ChevronRight className=\"w-4 h-4\" />\n </Button>\n </div>\n <h2 className=\"text-lg font-semibold\">{format(toZonedTime(currentDate, timezone), titleFormat, locale ? { locale } : undefined)}</h2>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <ToggleGroup type=\"single\" value={view} onValueChange={val => val && onViewChange(val as CalendarView)}>\n <ToggleGroupItem value=\"month\" size=\"sm\">{labels.month}</ToggleGroupItem>\n <ToggleGroupItem value=\"week\" size=\"sm\">{labels.week}</ToggleGroupItem>\n <ToggleGroupItem value=\"day\" size=\"sm\">{labels.day}</ToggleGroupItem>\n </ToggleGroup>\n {onCreateEvent && (\n <Button size=\"sm\" onClick={onCreateEvent}>\n <Plus className=\"w-4 h-4\" />\n {labels.createEvent}\n </Button>\n )}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -4,7 +4,7 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
4
4
|
import { UIColor } from '../../lib/types.js';
|
|
5
5
|
|
|
6
6
|
declare const buttonVariants: (props?: ({
|
|
7
|
-
variant?: "destructive" | "default" | "secondary" | "outline" | "soft" | "ghost" |
|
|
7
|
+
variant?: "link" | "destructive" | "default" | "secondary" | "outline" | "soft" | "ghost" | null | undefined;
|
|
8
8
|
color?: "primary" | "destructive" | "success" | "warning" | "info" | null | undefined;
|
|
9
9
|
size?: "default" | "xs" | "sm" | "lg" | "xl" | "icon" | null | undefined;
|
|
10
10
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { ColorPicker } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
1
|
+
export { ColorPicker } from '../../chunk-2OPOSDEH.js';
|
|
2
|
+
import '../../chunk-DB42CM3T.js';
|
|
3
3
|
import '../../chunk-YU55YBID.js';
|
|
4
4
|
import '../../chunk-7NMNLY7F.js';
|
|
5
|
-
import '../../chunk-
|
|
5
|
+
import '../../chunk-BBFOFRWT.js';
|
|
6
6
|
import '../../chunk-BOV3Q2JH.js';
|
|
7
7
|
import '../../chunk-DGPY4WP3.js';
|
|
8
8
|
//# sourceMappingURL=color-picker.js.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Popover, PopoverTrigger, PopoverContent } from '../../chunk-7NMNLY7F.js';
|
|
2
|
-
import {
|
|
2
|
+
import { toZonedTime } from '../../chunk-PMNLM6VF.js';
|
|
3
|
+
import { useDateFnsLocale, useTimezone } from '../../chunk-BBFOFRWT.js';
|
|
3
4
|
import { Calendar as Calendar$1 } from '../../chunk-KJAXKHJ2.js';
|
|
4
5
|
import { Button } from '../../chunk-BOV3Q2JH.js';
|
|
5
6
|
import { cn } from '../../chunk-DGPY4WP3.js';
|
|
@@ -17,6 +18,7 @@ function DatePicker({
|
|
|
17
18
|
}) {
|
|
18
19
|
const contextLocale = useDateFnsLocale();
|
|
19
20
|
const locale = localeProp ?? contextLocale;
|
|
21
|
+
const { timezone } = useTimezone();
|
|
20
22
|
return /* @__PURE__ */ jsxs(Popover, { children: [
|
|
21
23
|
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
22
24
|
Button,
|
|
@@ -30,7 +32,7 @@ function DatePicker({
|
|
|
30
32
|
),
|
|
31
33
|
children: [
|
|
32
34
|
/* @__PURE__ */ jsx(Calendar, { className: "mr-2 h-4 w-4" }),
|
|
33
|
-
value ? format(value, "PPP", locale ? { locale } : void 0) : /* @__PURE__ */ jsx("span", { children: placeholder })
|
|
35
|
+
value ? format(toZonedTime(value, timezone), "PPP", locale ? { locale } : void 0) : /* @__PURE__ */ jsx("span", { children: placeholder })
|
|
34
36
|
]
|
|
35
37
|
}
|
|
36
38
|
) }),
|
|
@@ -56,6 +58,7 @@ function DateRangePicker({
|
|
|
56
58
|
}) {
|
|
57
59
|
const contextLocale = useDateFnsLocale();
|
|
58
60
|
const locale = localeProp ?? contextLocale;
|
|
61
|
+
const { timezone } = useTimezone();
|
|
59
62
|
return /* @__PURE__ */ jsxs(Popover, { children: [
|
|
60
63
|
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
61
64
|
Button,
|
|
@@ -70,11 +73,11 @@ function DateRangePicker({
|
|
|
70
73
|
children: [
|
|
71
74
|
/* @__PURE__ */ jsx(Calendar, { className: "mr-2 h-4 w-4" }),
|
|
72
75
|
value?.from ? value.to ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
73
|
-
format(value.from, "PPP", locale ? { locale } : void 0),
|
|
76
|
+
format(toZonedTime(value.from, timezone), "PPP", locale ? { locale } : void 0),
|
|
74
77
|
" -",
|
|
75
78
|
" ",
|
|
76
|
-
format(value.to, "PPP", locale ? { locale } : void 0)
|
|
77
|
-
] }) : format(value.from, "PPP", locale ? { locale } : void 0) : /* @__PURE__ */ jsx("span", { children: placeholder })
|
|
79
|
+
format(toZonedTime(value.to, timezone), "PPP", locale ? { locale } : void 0)
|
|
80
|
+
] }) : format(toZonedTime(value.from, timezone), "PPP", locale ? { locale } : void 0) : /* @__PURE__ */ jsx("span", { children: placeholder })
|
|
78
81
|
]
|
|
79
82
|
}
|
|
80
83
|
) }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/inputs/date-picker.tsx"],"names":["CalendarIcon","Calendar"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/components/inputs/date-picker.tsx"],"names":["CalendarIcon","Calendar"],"mappings":"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","file":"date-picker.js","sourcesContent":["import { format } from \"date-fns\";\nimport { Calendar as CalendarIcon } from \"lucide-react\";\nimport type { Locale } from \"date-fns\";\n\nimport { cn } from \"../../lib/utils\";\nimport { toZonedTime } from \"../../lib/timezone\";\nimport { useDateFnsLocale, useTimezone } from \"../../providers/ui-provider\";\nimport { Button } from \"./button\";\nimport { Calendar } from \"../domain/calendar/calendar\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../overlay/popover\";\n\ninterface DatePickerProps {\n /** Currently selected date. */\n value?: Date;\n /** Callback fired when a date is selected or cleared. */\n onChange?: (date: Date | undefined) => void;\n /** Placeholder text shown when no date is selected. */\n placeholder?: string;\n /** Additional CSS class for the trigger button. */\n className?: string;\n /** Whether the date picker is disabled. */\n disabled?: boolean;\n /** date-fns Locale object for date formatting (e.g., `ja` for Japanese). */\n locale?: Locale;\n}\n\n/**\n * Single date picker with a calendar popover.\n * Displays the selected date formatted with date-fns and opens a calendar on click.\n *\n * @example\n * ```tsx\n * const [date, setDate] = useState<Date>();\n *\n * <DatePicker\n * value={date}\n * onChange={setDate}\n * placeholder=\"Pick a date\"\n * />\n * ```\n */\nexport function DatePicker({\n value,\n onChange,\n placeholder = \"Select date\",\n className,\n disabled,\n locale: localeProp,\n}: DatePickerProps) {\n const contextLocale = useDateFnsLocale() as Locale | undefined;\n const locale = localeProp ?? contextLocale;\n const { timezone } = useTimezone();\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n \"w-full justify-start text-left font-normal\",\n !value && \"text-muted-foreground\",\n className\n )}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\n {value ? format(toZonedTime(value, timezone), \"PPP\", locale ? { locale } : undefined) : <span>{placeholder}</span>}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Calendar\n mode=\"single\"\n selected={value}\n onSelect={onChange}\n autoFocus\n locale={locale}\n />\n </PopoverContent>\n </Popover>\n );\n}\n\ninterface DateRangePickerProps {\n /** Currently selected date range with `from` and optional `to`. */\n value?: { from: Date | undefined; to?: Date | undefined };\n /** Callback fired when the date range changes. */\n onChange?: (range: { from: Date | undefined; to?: Date | undefined } | undefined) => void;\n /** Placeholder text shown when no range is selected. */\n placeholder?: string;\n /** Additional CSS class for the trigger button. */\n className?: string;\n /** Whether the date range picker is disabled. */\n disabled?: boolean;\n /** date-fns Locale object for date formatting (e.g., `ja` for Japanese). */\n locale?: Locale;\n}\n\n/**\n * Date range picker with a two-month calendar popover.\n * Allows selecting a start and end date displayed as a range string.\n *\n * @example\n * ```tsx\n * const [range, setRange] = useState<{ from: Date | undefined; to?: Date }>();\n *\n * <DateRangePicker\n * value={range}\n * onChange={setRange}\n * placeholder=\"Select date range\"\n * />\n * ```\n */\nexport function DateRangePicker({\n value,\n onChange,\n placeholder = \"Select date range\",\n className,\n disabled,\n locale: localeProp,\n}: DateRangePickerProps) {\n const contextLocale = useDateFnsLocale() as Locale | undefined;\n const locale = localeProp ?? contextLocale;\n const { timezone } = useTimezone();\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n \"w-full justify-start text-left font-normal\",\n !value && \"text-muted-foreground\",\n className\n )}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\n {value?.from ? (\n value.to ? (\n <>\n {format(toZonedTime(value.from, timezone), \"PPP\", locale ? { locale } : undefined)} -{\" \"}\n {format(toZonedTime(value.to, timezone), \"PPP\", locale ? { locale } : undefined)}\n </>\n ) : (\n format(toZonedTime(value.from, timezone), \"PPP\", locale ? { locale } : undefined)\n )\n ) : (\n <span>{placeholder}</span>\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Calendar\n mode=\"range\"\n selected={value}\n onSelect={onChange}\n numberOfMonths={2}\n autoFocus\n locale={locale}\n />\n </PopoverContent>\n </Popover>\n );\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { Input, inputVariants } from '../../chunk-
|
|
1
|
+
export { Input, inputVariants } from '../../chunk-DB42CM3T.js';
|
|
2
2
|
import '../../chunk-YU55YBID.js';
|
|
3
|
-
import '../../chunk-
|
|
3
|
+
import '../../chunk-BBFOFRWT.js';
|
|
4
4
|
import '../../chunk-DGPY4WP3.js';
|
|
5
5
|
//# sourceMappingURL=input.js.map
|
|
6
6
|
//# sourceMappingURL=input.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { PasswordInput } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
1
|
+
export { PasswordInput } from '../../chunk-ML2VNJ7R.js';
|
|
2
|
+
import '../../chunk-DB42CM3T.js';
|
|
3
3
|
import '../../chunk-YU55YBID.js';
|
|
4
|
-
import '../../chunk-
|
|
4
|
+
import '../../chunk-BBFOFRWT.js';
|
|
5
5
|
import '../../chunk-DGPY4WP3.js';
|
|
6
6
|
//# sourceMappingURL=password-input.js.map
|
|
7
7
|
//# sourceMappingURL=password-input.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { SlugInput, generateSlug } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
1
|
+
export { SlugInput, generateSlug } from '../../chunk-M22SIS5Z.js';
|
|
2
|
+
import '../../chunk-DB42CM3T.js';
|
|
3
3
|
import '../../chunk-YU55YBID.js';
|
|
4
4
|
import '../../chunk-EYJ7TJIX.js';
|
|
5
|
-
import '../../chunk-
|
|
5
|
+
import '../../chunk-BBFOFRWT.js';
|
|
6
6
|
import '../../chunk-DGPY4WP3.js';
|
|
7
7
|
//# sourceMappingURL=slug-input.js.map
|
|
8
8
|
//# sourceMappingURL=slug-input.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { Textarea } from '../../chunk-
|
|
1
|
+
export { Textarea } from '../../chunk-Q5KDFNRD.js';
|
|
2
2
|
import '../../chunk-YU55YBID.js';
|
|
3
|
-
import '../../chunk-
|
|
3
|
+
import '../../chunk-BBFOFRWT.js';
|
|
4
4
|
import '../../chunk-DGPY4WP3.js';
|
|
5
5
|
//# sourceMappingURL=textarea.js.map
|
|
6
6
|
//# sourceMappingURL=textarea.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Input } from '../../chunk-
|
|
1
|
+
import { Input } from '../../chunk-DB42CM3T.js';
|
|
2
2
|
import '../../chunk-YU55YBID.js';
|
|
3
3
|
import { Popover, PopoverTrigger, PopoverContent } from '../../chunk-7NMNLY7F.js';
|
|
4
|
-
import '../../chunk-
|
|
4
|
+
import '../../chunk-BBFOFRWT.js';
|
|
5
5
|
import { ScrollArea } from '../../chunk-LUYTKHGS.js';
|
|
6
6
|
import { Button } from '../../chunk-BOV3Q2JH.js';
|
|
7
7
|
import { cn } from '../../chunk-DGPY4WP3.js';
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface LocaleSwitcherProps {
|
|
4
|
+
/** Show flag emoji. Default: false */
|
|
5
|
+
showFlag?: boolean;
|
|
6
|
+
/** Show locale label (e.g. "English"). Default: true */
|
|
7
|
+
showLabel?: boolean;
|
|
8
|
+
/** Show locale code (e.g. "EN"). Default: false */
|
|
9
|
+
showCode?: boolean;
|
|
10
|
+
/** Dropdown alignment. Default: "end" */
|
|
11
|
+
align?: 'start' | 'center' | 'end';
|
|
12
|
+
/** Custom flag map. Auto-derived from locale code if not provided. */
|
|
13
|
+
flags?: Record<string, string>;
|
|
14
|
+
/** Button variant. Default: "ghost" */
|
|
15
|
+
variant?: 'ghost' | 'outline' | 'default';
|
|
16
|
+
/** Button size. Default: inferred (icon when no label/code, default otherwise) */
|
|
17
|
+
size?: 'default' | 'sm' | 'icon';
|
|
18
|
+
/** Additional class names for the trigger button. */
|
|
19
|
+
className?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Dropdown locale switcher that reads from UIProvider.
|
|
23
|
+
*
|
|
24
|
+
* Requires `<UIProvider locales={...}>` to be an ancestor.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```tsx
|
|
28
|
+
* <LocaleSwitcher />
|
|
29
|
+
* <LocaleSwitcher showFlag showLabel={false} />
|
|
30
|
+
* <LocaleSwitcher showCode variant="outline" />
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
declare function LocaleSwitcher({ showFlag, showLabel, showCode, align, flags, variant, size, className, }: LocaleSwitcherProps): react_jsx_runtime.JSX.Element | null;
|
|
34
|
+
|
|
35
|
+
export { LocaleSwitcher, type LocaleSwitcherProps };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { LocaleSwitcher } from '../../chunk-7HHL5OFD.js';
|
|
2
|
+
import '../../chunk-DXZZURPN.js';
|
|
3
|
+
import '../../chunk-BBFOFRWT.js';
|
|
4
|
+
import '../../chunk-BOV3Q2JH.js';
|
|
5
|
+
import '../../chunk-DGPY4WP3.js';
|
|
6
|
+
//# sourceMappingURL=locale-switcher.js.map
|
|
7
|
+
//# sourceMappingURL=locale-switcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"locale-switcher.js"}
|
package/dist/index.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMe
|
|
|
30
30
|
export { Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger } from './components/navigation/menubar.js';
|
|
31
31
|
export { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, navigationMenuTriggerStyle } from './components/navigation/navigation-menu.js';
|
|
32
32
|
export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious } from './components/navigation/pagination.js';
|
|
33
|
+
export { LocaleSwitcher, LocaleSwitcherProps } from './components/navigation/locale-switcher.js';
|
|
33
34
|
export { Tabs, TabsContent, TabsList, TabsTrigger } from './components/navigation/tabs.js';
|
|
34
35
|
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from './components/display/accordion.js';
|
|
35
36
|
export { AspectRatio } from './components/display/aspect-ratio.js';
|
|
@@ -58,9 +59,10 @@ export { WorkflowStepper, WorkflowStepperHistoryEntry, WorkflowStepperProps, Wor
|
|
|
58
59
|
export { PermissionDefinition, PermissionGrid, PermissionGridLabels, PermissionGridProps, PermissionModule, buildPermissionId } from './components/domain/rbac/permission-grid.js';
|
|
59
60
|
export { ScopeTree, ScopeTreeBadge, ScopeTreeLabels, ScopeTreeNode, ScopeTreeProps, ScopeTreeSelectedScope } from './components/domain/rbac/scope-tree.js';
|
|
60
61
|
export { ScopeTypeBadge, ScopeTypeBadgeProps, ScopeTypeBadgeStyles } from './components/domain/rbac/scope-type-badge.js';
|
|
61
|
-
export { LocaleCode, LocaleMap, Theme, TranslatableConfig, TranslatableValue, UILocaleConfig, UIProvider, UIProviderProps, resolveTranslatableConfig, useDateFnsLocale, useTheme, useUILocales } from './providers/ui-provider.js';
|
|
62
|
+
export { LocaleCode, LocaleMap, Theme, TranslatableConfig, TranslatableValue, UILocaleConfig, UIProvider, UIProviderProps, resolveTranslatableConfig, useDateFnsLocale, useLocale, useTheme, useTimezone, useUILocales } from './providers/ui-provider.js';
|
|
62
63
|
export { UIColor, UISize, UIVariant } from './lib/types.js';
|
|
63
64
|
export { cn } from './lib/utils.js';
|
|
65
|
+
export { nowInTimezone, toZonedTime } from './lib/timezone.js';
|
|
64
66
|
export { useIsMobile } from './hooks/use-mobile.js';
|
|
65
67
|
import 'class-variance-authority/types';
|
|
66
68
|
import 'react';
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export { Toaster } from './chunk-PYB6RRA5.js';
|
|
|
4
4
|
export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './chunk-CSYH7P6N.js';
|
|
5
5
|
export { useIsMobile } from './chunk-WRCHR4AK.js';
|
|
6
6
|
export { ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger } from './chunk-DEKVLLTL.js';
|
|
7
|
+
export { LocaleSwitcher } from './chunk-7HHL5OFD.js';
|
|
7
8
|
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './chunk-DXZZURPN.js';
|
|
8
9
|
export { Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger } from './chunk-T65EBJUJ.js';
|
|
9
10
|
export { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, navigationMenuTriggerStyle } from './chunk-N5BNNKBR.js';
|
|
@@ -12,17 +13,17 @@ export { Tabs, TabsContent, TabsList, TabsTrigger } from './chunk-PJZ7D36X.js';
|
|
|
12
13
|
export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger } from './chunk-XNUFKQYL.js';
|
|
13
14
|
export { Switch } from './chunk-EAY3QSID.js';
|
|
14
15
|
export { TagInput } from './chunk-I6PJSYBI.js';
|
|
15
|
-
export { Textarea } from './chunk-
|
|
16
|
+
export { Textarea } from './chunk-Q5KDFNRD.js';
|
|
16
17
|
export { FullWidthPageContainer, PageContainer, SplitPageContainer, StandardPageContainer } from './chunk-YN26HHZ4.js';
|
|
17
18
|
export { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from './chunk-YYJVVYFS.js';
|
|
18
|
-
export { PasswordInput } from './chunk-
|
|
19
|
+
export { PasswordInput } from './chunk-ML2VNJ7R.js';
|
|
19
20
|
export { RadioGroup, RadioGroupItem } from './chunk-QGU4BRMO.js';
|
|
20
21
|
export { Rating } from './chunk-N6OUJIQD.js';
|
|
21
22
|
export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue } from './chunk-LTGCKJX7.js';
|
|
22
23
|
export { Slider } from './chunk-S73PGQD5.js';
|
|
23
|
-
export { SlugInput, generateSlug } from './chunk-
|
|
24
|
-
export { ColorPicker } from './chunk-
|
|
25
|
-
export { Input, inputVariants } from './chunk-
|
|
24
|
+
export { SlugInput, generateSlug } from './chunk-M22SIS5Z.js';
|
|
25
|
+
export { ColorPicker } from './chunk-2OPOSDEH.js';
|
|
26
|
+
export { Input, inputVariants } from './chunk-DB42CM3T.js';
|
|
26
27
|
import './chunk-YU55YBID.js';
|
|
27
28
|
export { Combobox, MultiCombobox } from './chunk-3V6NS4EQ.js';
|
|
28
29
|
export { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut } from './chunk-MVYSUWSD.js';
|
|
@@ -40,7 +41,8 @@ export { Alert, AlertDescription, AlertTitle } from './chunk-CNS3OMZ7.js';
|
|
|
40
41
|
export { Progress } from './chunk-NWVMNWOH.js';
|
|
41
42
|
export { Skeleton } from './chunk-GR7T5QHL.js';
|
|
42
43
|
export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from './chunk-VOLR236J.js';
|
|
43
|
-
export {
|
|
44
|
+
export { nowInTimezone, toZonedTime } from './chunk-PMNLM6VF.js';
|
|
45
|
+
export { UIProvider, resolveTranslatableConfig, useDateFnsLocale, useLocale, useTheme, useTimezone, useUILocales } from './chunk-BBFOFRWT.js';
|
|
44
46
|
export { Calendar } from './chunk-KJAXKHJ2.js';
|
|
45
47
|
export { PermissionGrid, buildPermissionId } from './chunk-2BRCVWXR.js';
|
|
46
48
|
export { Checkbox } from './chunk-W477ZR6B.js';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a Date to a "display Date" that shows correct values for the target timezone
|
|
3
|
+
* when passed to date-fns `format()`. Uses native `Intl.DateTimeFormat` — no extra dependencies.
|
|
4
|
+
*
|
|
5
|
+
* The returned Date is NOT a true UTC/epoch-correct Date — it is shifted so that
|
|
6
|
+
* `.getHours()`, `.getMinutes()`, etc. return the values for the target timezone.
|
|
7
|
+
* Use it only for display formatting, never for calculations or persistence.
|
|
8
|
+
*/
|
|
9
|
+
declare function toZonedTime(date: Date, timeZone: string): Date;
|
|
10
|
+
/**
|
|
11
|
+
* Returns a display Date representing "now" in the given timezone.
|
|
12
|
+
* Shorthand for `toZonedTime(new Date(), timeZone)`.
|
|
13
|
+
*/
|
|
14
|
+
declare function nowInTimezone(timeZone: string): Date;
|
|
15
|
+
|
|
16
|
+
export { nowInTimezone, toZonedTime };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"timezone.js"}
|
|
@@ -56,6 +56,21 @@ interface UIProviderProps {
|
|
|
56
56
|
* ```
|
|
57
57
|
*/
|
|
58
58
|
dateFnsLocale?: object;
|
|
59
|
+
/**
|
|
60
|
+
* Callback fired when the active locale changes via `setLocale`.
|
|
61
|
+
* Use this to sync with i18n libraries, localStorage, etc.
|
|
62
|
+
*/
|
|
63
|
+
onLocaleChange?: (locale: LocaleCode) => void;
|
|
64
|
+
/**
|
|
65
|
+
* IANA timezone string (e.g. `'Asia/Tokyo'`).
|
|
66
|
+
* Defaults to the browser's local timezone.
|
|
67
|
+
*/
|
|
68
|
+
timezone?: string;
|
|
69
|
+
/**
|
|
70
|
+
* Callback fired when the timezone changes via `setTimezone`.
|
|
71
|
+
* Use this to sync with backend, localStorage, etc.
|
|
72
|
+
*/
|
|
73
|
+
onTimezoneChange?: (timezone: string) => void;
|
|
59
74
|
}
|
|
60
75
|
/**
|
|
61
76
|
* Root provider for @omnifyjp/ui — handles dark mode and translatable field config.
|
|
@@ -71,7 +86,7 @@ interface UIProviderProps {
|
|
|
71
86
|
* </UIProvider>
|
|
72
87
|
* ```
|
|
73
88
|
*/
|
|
74
|
-
declare function UIProvider({ children, defaultTheme, locales, defaultLocale, fallbackLocale, dateFnsLocale, }: UIProviderProps): react_jsx_runtime.JSX.Element;
|
|
89
|
+
declare function UIProvider({ children, defaultTheme, locales, defaultLocale, fallbackLocale, dateFnsLocale, onLocaleChange, timezone: timezoneProp, onTimezoneChange, }: UIProviderProps): react_jsx_runtime.JSX.Element;
|
|
75
90
|
/** Access theme and setTheme. Must be inside UIProvider. */
|
|
76
91
|
declare function useTheme(): {
|
|
77
92
|
theme: Theme;
|
|
@@ -82,6 +97,25 @@ declare function useTheme(): {
|
|
|
82
97
|
* Returns `undefined` when no `locales` prop was passed to UIProvider.
|
|
83
98
|
*/
|
|
84
99
|
declare function useUILocales(): UILocaleConfig | undefined;
|
|
100
|
+
/**
|
|
101
|
+
* Returns the active locale state and locale config from UIProvider.
|
|
102
|
+
* Must be used inside UIProvider.
|
|
103
|
+
*/
|
|
104
|
+
declare function useLocale(): {
|
|
105
|
+
currentLocale: LocaleCode;
|
|
106
|
+
setLocale: (locale: LocaleCode) => void;
|
|
107
|
+
locales: LocaleMap;
|
|
108
|
+
defaultLocale: LocaleCode;
|
|
109
|
+
fallbackLocale: LocaleCode;
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* Returns the active timezone and setter from UIProvider.
|
|
113
|
+
* Must be used inside UIProvider.
|
|
114
|
+
*/
|
|
115
|
+
declare function useTimezone(): {
|
|
116
|
+
timezone: string;
|
|
117
|
+
setTimezone: (tz: string) => void;
|
|
118
|
+
};
|
|
85
119
|
/**
|
|
86
120
|
* Returns the date-fns `Locale` object from UIProvider.
|
|
87
121
|
* Returns `undefined` when no `dateFnsLocale` prop was passed.
|
|
@@ -93,4 +127,4 @@ declare function useDateFnsLocale(): object | undefined;
|
|
|
93
127
|
*/
|
|
94
128
|
declare function resolveTranslatableConfig(translatable: TranslatableConfig, providerLocales: UILocaleConfig | undefined): UILocaleConfig | undefined;
|
|
95
129
|
|
|
96
|
-
export { type LocaleCode, type LocaleMap, type Theme, type TranslatableConfig, type TranslatableValue, type UILocaleConfig, UIProvider, type UIProviderProps, resolveTranslatableConfig, useDateFnsLocale, useTheme, useUILocales };
|
|
130
|
+
export { type LocaleCode, type LocaleMap, type Theme, type TranslatableConfig, type TranslatableValue, type UILocaleConfig, UIProvider, type UIProviderProps, resolveTranslatableConfig, useDateFnsLocale, useLocale, useTheme, useTimezone, useUILocales };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { UIProvider, resolveTranslatableConfig, useDateFnsLocale, useTheme, useUILocales } from '../chunk-
|
|
1
|
+
export { UIProvider, resolveTranslatableConfig, useDateFnsLocale, useLocale, useTheme, useTimezone, useUILocales } from '../chunk-BBFOFRWT.js';
|
|
2
2
|
//# sourceMappingURL=ui-provider.js.map
|
|
3
3
|
//# sourceMappingURL=ui-provider.js.map
|