@k2b/ui 0.20.0 → 0.21.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 (51) hide show
  1. package/dist/browser/actions/Button.js +20 -31
  2. package/dist/browser/actions/Button.js.map +1 -1
  3. package/dist/browser/actions/ContextMenu.js +7 -3
  4. package/dist/browser/actions/ContextMenu.js.map +1 -1
  5. package/dist/browser/actions/CopyButton.js +10 -8
  6. package/dist/browser/actions/CopyButton.js.map +1 -1
  7. package/dist/browser/actions/GestureMenu.js +4 -0
  8. package/dist/browser/actions/GestureMenu.js.map +1 -1
  9. package/dist/browser/content/Calendar.js +1951 -565
  10. package/dist/browser/content/Calendar.js.map +1 -1
  11. package/dist/browser/content/calendar-messages.js +83 -0
  12. package/dist/browser/content/calendar-messages.js.map +1 -0
  13. package/dist/browser/content/calendar-month-layout.js +108 -0
  14. package/dist/browser/content/calendar-month-layout.js.map +1 -0
  15. package/dist/browser/content/index.js.map +1 -1
  16. package/dist/browser/inputs/DatePicker.js +46 -10
  17. package/dist/browser/inputs/DatePicker.js.map +1 -1
  18. package/dist/browser/inputs/date-picker.js +24 -0
  19. package/dist/browser/inputs/date-picker.js.map +1 -1
  20. package/dist/browser/intl/messages.js +6 -0
  21. package/dist/browser/intl/messages.js.map +1 -1
  22. package/dist/ssr/actions/Button.js +21 -32
  23. package/dist/ssr/actions/Button.js.map +1 -1
  24. package/dist/ssr/actions/ContextMenu.js +7 -3
  25. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  26. package/dist/ssr/actions/CopyButton.js +9 -7
  27. package/dist/ssr/actions/CopyButton.js.map +1 -1
  28. package/dist/ssr/actions/GestureMenu.js +4 -0
  29. package/dist/ssr/actions/GestureMenu.js.map +1 -1
  30. package/dist/ssr/content/Calendar.js +1223 -105
  31. package/dist/ssr/content/Calendar.js.map +1 -1
  32. package/dist/ssr/content/calendar-messages.js +83 -0
  33. package/dist/ssr/content/calendar-messages.js.map +1 -0
  34. package/dist/ssr/content/calendar-month-layout.js +108 -0
  35. package/dist/ssr/content/calendar-month-layout.js.map +1 -0
  36. package/dist/ssr/content/index.js.map +1 -1
  37. package/dist/ssr/inputs/DatePicker.js +34 -4
  38. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  39. package/dist/ssr/inputs/date-picker.js +24 -0
  40. package/dist/ssr/inputs/date-picker.js.map +1 -1
  41. package/dist/ssr/intl/messages.js +6 -0
  42. package/dist/ssr/intl/messages.js.map +1 -1
  43. package/dist/styles.css +1 -1
  44. package/dist/types/actions/GestureMenu.d.ts +2 -0
  45. package/dist/types/content/Calendar.d.ts +32 -0
  46. package/dist/types/content/calendar-messages.d.ts +41 -0
  47. package/dist/types/content/calendar-month-layout.d.ts +52 -0
  48. package/dist/types/content/index.d.ts +1 -1
  49. package/dist/types/inputs/date-picker.d.ts +7 -0
  50. package/dist/types/intl/messages.d.ts +3 -0
  51. package/package.json +1 -1
@@ -0,0 +1,83 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+
4
+ /**
5
+ * The month view's own strings. They live beside the calendar instead of in the shared catalog, so applications that
6
+ * never render a calendar do not ship them.
7
+ */
8
+ const calendarMessages = i18n.define({
9
+ baseLocale: "en",
10
+ messages: {
11
+ en: {
12
+ calendarMoreEvents: ({
13
+ count
14
+ }) => `+${count} more`,
15
+ calendarMoreEventsOn: ({
16
+ count,
17
+ label
18
+ }) => `${count} more on ${label}`,
19
+ calendarSelectionActions: "Actions for the selected days",
20
+ calendarQuickCreate: "New entry",
21
+ calendarSelectedDays: ({
22
+ start,
23
+ end,
24
+ count
25
+ }) => `${start} – ${end} · ${count} days`,
26
+ calendarOpenDay: "Open day",
27
+ calendarOpenWeek: "Open week",
28
+ calendarOpenWeekNumber: ({
29
+ week
30
+ }) => `Week ${week}, open week`,
31
+ calendarClearSelection: "Clear selection",
32
+ calendarNewEvent: "New event",
33
+ calendarNothingPlanned: "Nothing planned.",
34
+ calendarContinuesFrom: ({
35
+ day,
36
+ month
37
+ }) => `from ${month ? `${month} ` : ""}${day}`,
38
+ calendarContinuesUntil: ({
39
+ day,
40
+ month
41
+ }) => `until ${month ? `${month} ` : ""}${day}`
42
+ },
43
+ de: {
44
+ calendarMoreEvents: ({
45
+ count
46
+ }) => `+${count} weitere`,
47
+ calendarMoreEventsOn: ({
48
+ count,
49
+ label
50
+ }) => `${count} weitere am ${label}`,
51
+ calendarSelectionActions: "Aktionen für die ausgewählten Tage",
52
+ calendarQuickCreate: "Neuer Eintrag",
53
+ calendarSelectedDays: ({
54
+ start,
55
+ end,
56
+ count
57
+ }) => `${start} – ${end} · ${count} Tage`,
58
+ calendarOpenDay: "Tag öffnen",
59
+ calendarOpenWeek: "Woche öffnen",
60
+ calendarOpenWeekNumber: ({
61
+ week
62
+ }) => `KW ${week}, Woche öffnen`,
63
+ calendarClearSelection: "Auswahl aufheben",
64
+ calendarNewEvent: "Neuer Termin",
65
+ calendarNothingPlanned: "Nichts geplant.",
66
+ calendarContinuesFrom: ({
67
+ day,
68
+ month
69
+ }) => `seit ${day}.${month ? ` ${month}` : ""}`,
70
+ calendarContinuesUntil: ({
71
+ day,
72
+ month
73
+ }) => `bis ${day}.${month ? ` ${month}` : ""}`
74
+ }
75
+ }
76
+ });
77
+ /** Resolved from the inherited render locale, like the rest of @k2b/ui. */
78
+ export const useCalendarMessages = () => {
79
+ const locale = useLocale();
80
+ return () => calendarMessages.resolve([locale()]).t;
81
+ };
82
+ export const checkCalendarMessages = () => calendarMessages.check();
83
+ //# sourceMappingURL=calendar-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/calendar-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\n/**\n * The month view's own strings. They live beside the calendar instead of in the shared catalog, so applications that\n * never render a calendar do not ship them.\n */\nconst calendarMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n calendarMoreEvents: ({ count }: { count: number }) => `+${count} more`,\n calendarMoreEventsOn: ({ count, label }: { count: number; label: string }) => `${count} more on ${label}`,\n calendarSelectionActions: \"Actions for the selected days\",\n calendarQuickCreate: \"New entry\",\n calendarSelectedDays: ({ start, end, count }: { start: string; end: string; count: number }) => `${start} – ${end} · ${count} days`,\n calendarOpenDay: \"Open day\",\n calendarOpenWeek: \"Open week\",\n calendarOpenWeekNumber: ({ week }: { week: number }) => `Week ${week}, open week`,\n calendarClearSelection: \"Clear selection\",\n calendarNewEvent: \"New event\",\n calendarNothingPlanned: \"Nothing planned.\",\n calendarContinuesFrom: ({ day, month }: { day: number; month?: string }) => `from ${month ? `${month} ` : \"\"}${day}`,\n calendarContinuesUntil: ({ day, month }: { day: number; month?: string }) => `until ${month ? `${month} ` : \"\"}${day}`,\n },\n de: {\n calendarMoreEvents: ({ count }) => `+${count} weitere`,\n calendarMoreEventsOn: ({ count, label }) => `${count} weitere am ${label}`,\n calendarSelectionActions: \"Aktionen für die ausgewählten Tage\",\n calendarQuickCreate: \"Neuer Eintrag\",\n calendarSelectedDays: ({ start, end, count }) => `${start} – ${end} · ${count} Tage`,\n calendarOpenDay: \"Tag öffnen\",\n calendarOpenWeek: \"Woche öffnen\",\n calendarOpenWeekNumber: ({ week }) => `KW ${week}, Woche öffnen`,\n calendarClearSelection: \"Auswahl aufheben\",\n calendarNewEvent: \"Neuer Termin\",\n calendarNothingPlanned: \"Nichts geplant.\",\n calendarContinuesFrom: ({ day, month }) => `seit ${day}.${month ? ` ${month}` : \"\"}`,\n calendarContinuesUntil: ({ day, month }) => `bis ${day}.${month ? ` ${month}` : \"\"}`,\n },\n },\n});\n\nexport type CalendarMessages = ReturnType<(typeof calendarMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale, like the rest of @k2b/ui. */\nexport const useCalendarMessages = (): (() => CalendarMessages) => {\n const locale = useLocale();\n return () => calendarMessages.resolve([locale()]).t;\n};\n\nexport const checkCalendarMessages = () => calendarMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;;AAE1C;AACA;AACA;AACA;AACA,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;EACnC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,kBAAkB,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,IAAI,KAAK,OAAO;MACtE,oBAAoB,EAAE,CAAC;QAAE,KAAK;QAAE;MAAwC,CAAC,KAAK,GAAG,KAAK,YAAY,KAAK,EAAE;MACzG,wBAAwB,EAAE,+BAA+B;MACzD,mBAAmB,EAAE,WAAW;MAChC,oBAAoB,EAAE,CAAC;QAAE,KAAK;QAAE,GAAG;QAAE;MAAqD,CAAC,KAAK,GAAG,KAAK,MAAM,GAAG,MAAM,KAAK,OAAO;MACnI,eAAe,EAAE,UAAU;MAC3B,gBAAgB,EAAE,WAAW;MAC7B,sBAAsB,EAAE,CAAC;QAAE;MAAuB,CAAC,KAAK,QAAQ,IAAI,aAAa;MACjF,sBAAsB,EAAE,iBAAiB;MACzC,gBAAgB,EAAE,WAAW;MAC7B,sBAAsB,EAAE,kBAAkB;MAC1C,qBAAqB,EAAE,CAAC;QAAE,GAAG;QAAE;MAAuC,CAAC,KAAK,QAAQ,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE;MACpH,sBAAsB,EAAE,CAAC;QAAE,GAAG;QAAE;MAAuC,CAAC,KAAK,SAAS,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,EAAE,GAAG,GAAG;IACtH,CAAC;IACD,EAAE,EAAE;MACF,kBAAkB,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,IAAI,KAAK,UAAU;MACtD,oBAAoB,EAAE,CAAC;QAAE,KAAK;QAAE;MAAM,CAAC,KAAK,GAAG,KAAK,eAAe,KAAK,EAAE;MAC1E,wBAAwB,EAAE,oCAAoC;MAC9D,mBAAmB,EAAE,eAAe;MACpC,oBAAoB,EAAE,CAAC;QAAE,KAAK;QAAE,GAAG;QAAE;MAAM,CAAC,KAAK,GAAG,KAAK,MAAM,GAAG,MAAM,KAAK,OAAO;MACpF,eAAe,EAAE,YAAY;MAC7B,gBAAgB,EAAE,cAAc;MAChC,sBAAsB,EAAE,CAAC;QAAE;MAAK,CAAC,KAAK,MAAM,IAAI,gBAAgB;MAChE,sBAAsB,EAAE,kBAAkB;MAC1C,gBAAgB,EAAE,cAAc;MAChC,sBAAsB,EAAE,iBAAiB;MACzC,qBAAqB,EAAE,CAAC;QAAE,GAAG;QAAE;MAAM,CAAC,KAAK,QAAQ,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,EAAE,GAAG,EAAE,EAAE;MACpF,sBAAsB,EAAE,CAAC;QAAE,GAAG;QAAE;MAAM,CAAC,KAAK,OAAO,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,EAAE,GAAG,EAAE;IACpF;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,mBAAmB,GAAG,MAAgC;EACjE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,OAAO,MAAM,qBAAqB,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,108 @@
1
+ /** One entry of a month week row, with its first and last day as `YYYY-MM-DD` keys. */
2
+
3
+ /** The part of a bar inside one week row, from `startColumn` to `endColumn`, both inclusive. */
4
+
5
+ /**
6
+ * Lays one week row out. Each bar is one piece over the days it covers in the row and keeps one lane on all of them,
7
+ * so a long entry never moves between its days: bars that start earlier come first, a longer bar before a shorter one
8
+ * with the same start, and otherwise the row's own order decides. Every lane is the lowest one free on all its days.
9
+ */
10
+ export const layoutMonthWeek = (dayKeys, entries) => {
11
+ const singles = dayKeys.map(() => []);
12
+ const first = dayKeys[0];
13
+ const last = dayKeys[dayKeys.length - 1];
14
+ if (!first || !last) return {
15
+ bars: [],
16
+ singles
17
+ };
18
+ // Day keys sort as text, so the first day at or after a key is its column.
19
+ const column = key => {
20
+ const index = dayKeys.findIndex(dayKey => dayKey >= key);
21
+ return index < 0 ? dayKeys.length - 1 : index;
22
+ };
23
+ const pieces = [];
24
+ for (const entry of entries) {
25
+ if (entry.lastKey < first || entry.firstKey > last || entry.firstKey > entry.lastKey) continue;
26
+ if (!entry.bar) {
27
+ const index = dayKeys.indexOf(entry.firstKey);
28
+ if (index >= 0) singles[index].push(entry.item);
29
+ continue;
30
+ }
31
+ pieces.push({
32
+ item: entry.item,
33
+ startColumn: column(entry.firstKey),
34
+ endColumn: entry.lastKey >= last ? dayKeys.length - 1 : column(entry.lastKey),
35
+ continuesBefore: entry.firstKey < first,
36
+ continuesAfter: entry.lastKey > last
37
+ });
38
+ }
39
+ const ordered = pieces.map((piece, order) => ({
40
+ piece,
41
+ order
42
+ })).sort((left, right) => left.piece.startColumn - right.piece.startColumn || right.piece.endColumn - right.piece.startColumn - (left.piece.endColumn - left.piece.startColumn) || left.order - right.order);
43
+ const lanes = [];
44
+ const bars = ordered.map(({
45
+ piece
46
+ }) => {
47
+ const overlaps = other => other.startColumn <= piece.endColumn && other.endColumn >= piece.startColumn;
48
+ let lane = lanes.findIndex(taken => !taken.some(overlaps));
49
+ if (lane < 0) lane = lanes.push([]) - 1;
50
+ const bar = {
51
+ ...piece,
52
+ lane
53
+ };
54
+ lanes[lane].push(bar);
55
+ return bar;
56
+ });
57
+ return {
58
+ bars,
59
+ singles
60
+ };
61
+ };
62
+
63
+ /** What one day cell of a week row draws: its entries from row `top` on, and how many it counts as "+N" below them. */
64
+
65
+ /**
66
+ * Fits a week row into cells that have room for `capacity` rows each. A cell whose entries all fit draws them all;
67
+ * otherwise it gives its last row to "+N", which counts every entry of the day that is not drawn, hidden bars included.
68
+ * A bar is drawn only when it fits on every day it covers, so it is never cut off by a count.
69
+ */
70
+ export const fitMonthWeek = (layout, capacity) => {
71
+ const room = Math.max(0, Math.floor(capacity));
72
+ const limits = layout.singles.map(() => room);
73
+ let bars = layout.bars;
74
+ let cells = [];
75
+ // Limits only ever drop from the capacity by one, so this settles after at most one pass per day.
76
+ for (let pass = 0; pass <= limits.length; pass++) {
77
+ bars = layout.bars.filter(bar => {
78
+ for (let day = bar.startColumn; day <= bar.endColumn; day++) if (bar.lane >= (limits[day] ?? 0)) return false;
79
+ return true;
80
+ });
81
+ let changed = false;
82
+ cells = layout.singles.map((singles, day) => {
83
+ const covers = bar => bar.startColumn <= day && day <= bar.endColumn;
84
+ const top = bars.reduce((rows, bar) => covers(bar) ? Math.max(rows, bar.lane + 1) : rows, 0);
85
+ const shown = singles.slice(0, Math.max(0, (limits[day] ?? 0) - top));
86
+ const hiddenBars = layout.bars.filter(bar => covers(bar) && !bars.includes(bar)).length;
87
+ const hidden = singles.length - shown.length + hiddenBars;
88
+ if (hidden > 0 && limits[day] === room && room > 0) {
89
+ limits[day] = room - 1;
90
+ changed = true;
91
+ }
92
+ return {
93
+ top,
94
+ shown,
95
+ hidden
96
+ };
97
+ });
98
+ if (!changed) break;
99
+ }
100
+ return {
101
+ bars,
102
+ cells
103
+ };
104
+ };
105
+
106
+ /** How many rows of `lane` height with `gap` between them fit into `height`. */
107
+ export const monthLaneCapacity = (height, lane, gap) => lane > 0 && height > 0 ? Math.max(0, Math.floor((height + gap) / (lane + gap))) : 0;
108
+ //# sourceMappingURL=calendar-month-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/calendar-month-layout.ts"],"sourcesContent":["/** One entry of a month week row, with its first and last day as `YYYY-MM-DD` keys. */\nexport type MonthEntry<T> = {\n item: T;\n /** The entry's first day, which may lie before the row. */\n firstKey: string;\n /** The entry's last day, which may lie after the row. */\n lastKey: string;\n /** All-day and multi-day entries are bars that keep a lane; the others stack in their day below the bars. */\n bar: boolean;\n};\n\n/** The part of a bar inside one week row, from `startColumn` to `endColumn`, both inclusive. */\nexport type MonthBar<T> = {\n item: T;\n startColumn: number;\n endColumn: number;\n lane: number;\n /** The entry began before this row: the bar's start is torn. */\n continuesBefore: boolean;\n /** The entry goes on after this row: the bar's end is torn. */\n continuesAfter: boolean;\n};\n\nexport type MonthWeekLayout<T> = {\n bars: MonthBar<T>[];\n /** Per column, the entries that are not bars, in the order the row lists them. */\n singles: T[][];\n};\n\n/**\n * Lays one week row out. Each bar is one piece over the days it covers in the row and keeps one lane on all of them,\n * so a long entry never moves between its days: bars that start earlier come first, a longer bar before a shorter one\n * with the same start, and otherwise the row's own order decides. Every lane is the lowest one free on all its days.\n */\nexport const layoutMonthWeek = <T>(dayKeys: readonly string[], entries: readonly MonthEntry<T>[]): MonthWeekLayout<T> => {\n const singles: T[][] = dayKeys.map(() => []);\n const first = dayKeys[0];\n const last = dayKeys[dayKeys.length - 1];\n if (!first || !last) return { bars: [], singles };\n // Day keys sort as text, so the first day at or after a key is its column.\n const column = (key: string) => {\n const index = dayKeys.findIndex((dayKey) => dayKey >= key);\n return index < 0 ? dayKeys.length - 1 : index;\n };\n const pieces: Omit<MonthBar<T>, \"lane\">[] = [];\n for (const entry of entries) {\n if (entry.lastKey < first || entry.firstKey > last || entry.firstKey > entry.lastKey) continue;\n if (!entry.bar) {\n const index = dayKeys.indexOf(entry.firstKey);\n if (index >= 0) singles[index]!.push(entry.item);\n continue;\n }\n pieces.push({\n item: entry.item,\n startColumn: column(entry.firstKey),\n endColumn: entry.lastKey >= last ? dayKeys.length - 1 : column(entry.lastKey),\n continuesBefore: entry.firstKey < first,\n continuesAfter: entry.lastKey > last,\n });\n }\n const ordered = pieces\n .map((piece, order) => ({ piece, order }))\n .sort(\n (left, right) =>\n left.piece.startColumn - right.piece.startColumn ||\n right.piece.endColumn - right.piece.startColumn - (left.piece.endColumn - left.piece.startColumn) ||\n left.order - right.order,\n );\n const lanes: MonthBar<T>[][] = [];\n const bars = ordered.map(({ piece }) => {\n const overlaps = (other: MonthBar<T>) => other.startColumn <= piece.endColumn && other.endColumn >= piece.startColumn;\n let lane = lanes.findIndex((taken) => !taken.some(overlaps));\n if (lane < 0) lane = lanes.push([]) - 1;\n const bar = { ...piece, lane };\n lanes[lane]!.push(bar);\n return bar;\n });\n return { bars, singles };\n};\n\n/** What one day cell of a week row draws: its entries from row `top` on, and how many it counts as \"+N\" below them. */\nexport type MonthCellFit<T> = {\n /** The first row below the bars drawn over this day. */\n top: number;\n shown: T[];\n hidden: number;\n};\n\nexport type MonthWeekFit<T> = {\n /** The bars drawn whole; a bar that does not fit on one of its days is counted on each of them instead. */\n bars: MonthBar<T>[];\n cells: MonthCellFit<T>[];\n};\n\n/**\n * Fits a week row into cells that have room for `capacity` rows each. A cell whose entries all fit draws them all;\n * otherwise it gives its last row to \"+N\", which counts every entry of the day that is not drawn, hidden bars included.\n * A bar is drawn only when it fits on every day it covers, so it is never cut off by a count.\n */\nexport const fitMonthWeek = <T>(layout: MonthWeekLayout<T>, capacity: number): MonthWeekFit<T> => {\n const room = Math.max(0, Math.floor(capacity));\n const limits = layout.singles.map(() => room);\n let bars = layout.bars;\n let cells: MonthCellFit<T>[] = [];\n // Limits only ever drop from the capacity by one, so this settles after at most one pass per day.\n for (let pass = 0; pass <= limits.length; pass++) {\n bars = layout.bars.filter((bar) => {\n for (let day = bar.startColumn; day <= bar.endColumn; day++) if (bar.lane >= (limits[day] ?? 0)) return false;\n return true;\n });\n let changed = false;\n cells = layout.singles.map((singles, day) => {\n const covers = (bar: MonthBar<T>) => bar.startColumn <= day && day <= bar.endColumn;\n const top = bars.reduce((rows, bar) => (covers(bar) ? Math.max(rows, bar.lane + 1) : rows), 0);\n const shown = singles.slice(0, Math.max(0, (limits[day] ?? 0) - top));\n const hiddenBars = layout.bars.filter((bar) => covers(bar) && !bars.includes(bar)).length;\n const hidden = singles.length - shown.length + hiddenBars;\n if (hidden > 0 && limits[day] === room && room > 0) {\n limits[day] = room - 1;\n changed = true;\n }\n return { top, shown, hidden };\n });\n if (!changed) break;\n }\n return { bars, cells };\n};\n\n/** How many rows of `lane` height with `gap` between them fit into `height`. */\nexport const monthLaneCapacity = (height: number, lane: number, gap: number): number =>\n lane > 0 && height > 0 ? Math.max(0, Math.floor((height + gap) / (lane + gap))) : 0;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/index.ts"],"sourcesContent":["export type {\n CalendarAttendee,\n CalendarCustomView,\n CalendarDayBadge,\n CalendarEvent,\n CalendarEventColor,\n CalendarEventRenderContext,\n CalendarEventTimeChange,\n CalendarLabels,\n CalendarProps,\n CalendarRecurrence,\n CalendarResource,\n CalendarView,\n} from \"./Calendar\";\nexport { default as Calendar } from \"./Calendar\";\n\nexport type { ChartKind, ChartLabels, ChartProps, ChartRenderOptions } from \"./Chart\";\nexport { default as Chart } from \"./Chart\";\nexport type { ChartExplorerColumn, ChartExplorerProps } from \"./ChartExplorer\";\nexport { ChartExplorer } from \"./ChartExplorer\";\nexport type { ChartExplorerControlsProps } from \"./ChartExplorerControls\";\nexport { ChartExplorerControls } from \"./ChartExplorerControls\";\nexport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\nexport { ChartSnapshotView } from \"./ChartSnapshotView\";\nexport type { CodeDisplayLanguage, CodeDisplayProps } from \"./CodeDisplay\";\nexport { default as CodeDisplay } from \"./CodeDisplay\";\nexport { type ChartCursor, createChartCursor } from \"./chart-cursor\";\nexport type {\n ChartExplorerCharts,\n ChartExplorerController,\n ChartExplorerData,\n ChartExplorerOptions,\n ChartExplorerRequest,\n ChartExplorerRow,\n ChartExplorerSnapshot,\n} from \"./chart-explorer\";\nexport { createChartExplorer } from \"./chart-explorer\";\nexport type { ChartDatumRef, ChartSelection, ChartTooltip, ChartTooltipFormatter } from \"./chart-inspection\";\nexport type { ChartSnapshot } from \"./chart-snapshot\";\nexport { prepareChartSnapshot } from \"./chart-snapshot\";\nexport type {\n StateTimelineChartOptions,\n StateTimelineDomain,\n StateTimelineInterval,\n StateTimelineRow,\n StateTimelineState,\n} from \"./chart-state-timeline\";\nexport { type CollectionSelection, createCollectionSelection, type SelectionModifiers } from \"./collection-selection\";\nexport type {\n DataTableColumn,\n DataTableControlsProps,\n DataTableFooter,\n DataTableHeaderProps,\n DataTablePanelFooterProps,\n DataTablePanelProps,\n DataTableProps,\n DataTableRenderCell,\n DataTableRenderHeader,\n DataTableSort,\n} from \"./DataTable\";\nexport { default as DataTable } from \"./DataTable\";\nexport type { DocCodeHighlighter, DocCodeProps, DocConcept, DocNoteVariant, DocRow } from \"./Docs\";\nexport { DocCode, DocConceptGrid, DocInlineCode, DocLead, DocNote, DocPage, DocRows, DocSection } from \"./Docs\";\nexport { FileBrowserPanel, type FileBrowserPanelProps, type FileSource, openFileBrowser } from \"./FileBrowser\";\nexport { FileGrid, type FileGridProps } from \"./FileGrid\";\nexport { default as FileTree, type FileTreeActions, type FileTreeEntry, type FileTreeProps } from \"./FileTree\";\nexport {\n canPreviewFile,\n default as FileView,\n type FileViewContent,\n type FileViewFile,\n type FileViewPreviewKind,\n type FileViewProps,\n type FileViewRenderer,\n type FileViewRendererProps,\n formatFileViewSize,\n getFileViewPreviewKind,\n} from \"./FileView\";\nexport type { LightboxAction, LightboxImage } from \"./Lightbox\";\nexport { default as Lightbox } from \"./Lightbox\";\nexport type { LogTableEntry } from \"./LogEntriesTable\";\nexport { default as LogEntriesTable } from \"./LogEntriesTable\";\nexport { default as MarkdownView, type MarkdownRenderOptions, type MarkdownViewProps, renderSafeMarkdown } from \"./MarkdownView\";\nexport type {\n MessageGroupEntry,\n MessageRowAction,\n MessageRowAttachment,\n MessageRowAuthor,\n MessageRowFile,\n MessageRowMedia,\n MessageRowProgress,\n MessageRowProps,\n MessageRowQuote,\n MessageRowReaction,\n MessageRowStatus,\n MessageRowThread,\n MessageSystemRowProps,\n} from \"./MessageRow\";\nexport { MessageRow, MessageSystemRow, startsMessageGroup } from \"./MessageRow\";\nexport {\n type MarkdownInfoBlock,\n type MarkdownInfoBlockRenderInput,\n type MarkdownInfoBlockType,\n markdownInfoBlocks,\n renderMarkdownInfoBlock,\n scanMarkdownInfoBlock,\n} from \"./markdown-info-blocks\";\nexport {\n type MarkdownLinkInput,\n type MarkdownReference,\n type MarkdownReferenceKind,\n type MarkdownReferenceType,\n markdownLinkReference,\n markdownReferenceIcon,\n markdownReferenceType,\n markdownReferenceTypeLabel,\n markStandaloneLinks,\n renderMarkdownLink,\n} from \"./markdown-links\";\nexport { Pagination, type PaginationProps } from \"./Pagination\";\nexport type { PdfPreviewProps, PdfPreviewRequest } from \"./PdfPreview\";\nexport { default as PdfPreview } from \"./PdfPreview\";\nexport type { RangeOption, RangePickerProps } from \"./RangePicker\";\nexport { default as RangePicker } from \"./RangePicker\";\nexport type { StructuredDataPreviewMode, StructuredDataPreviewProps, StructuredDataValue } from \"./StructuredDataPreview\";\nexport { default as StructuredDataPreview, isStructuredDataValue } from \"./StructuredDataPreview\";\nexport type { TimelineColor, TimelineController, TimelineItem, TimelineProps } from \"./Timeline\";\nexport { default as Timeline } from \"./Timeline\";\nexport { VideoPlayer, type VideoPlayerProps } from \"./VideoPlayer\";\nexport type { VirtualFeedController, VirtualFeedProps, VirtualFeedScrollOptions } from \"./VirtualFeed\";\nexport { VirtualFeed } from \"./VirtualFeed\";\nexport type { ZoomPanAction, ZoomPanFullscreen, ZoomPanViewportProps } from \"./ZoomPanViewport\";\nexport { ZoomPanViewport } from \"./ZoomPanViewport\";\n"],"mappings":"AAcA,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAGhD,SAAS,OAAO,IAAI,KAAK,QAAQ,SAAS;AAE1C,SAAS,aAAa,QAAQ,iBAAiB;AAE/C,SAAS,qBAAqB,QAAQ,yBAAyB;AAC/D,SAAS,mBAAmB,QAAuC,uBAAuB;AAC1F,SAAS,iBAAiB,QAAQ,qBAAqB;AAEvD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AACtD,SAA2B,iBAAiB,QAAQ,gBAAgB;AAUpE,SAAS,mBAAmB,QAAQ,kBAAkB;AAGtD,SAAS,oBAAoB,QAAQ,kBAAkB;AAQvD,SAAmC,yBAAyB,QAAiC,wBAAwB;AAarH,SAAS,OAAO,IAAI,SAAS,QAAQ,aAAa;AAElD,SAAS,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,QAAQ,QAAQ;AAC/G,SAAS,gBAAgB,EAA+C,eAAe,QAAQ,eAAe;AAC9G,SAAS,QAAQ,QAA4B,YAAY;AACzD,SAAS,OAAO,IAAI,QAAQ,QAAsE,YAAY;AAC9G,SACE,cAAc,EACd,OAAO,IAAI,QAAQ,EAOnB,kBAAkB,EAClB,sBAAsB,QACjB,YAAY;AAEnB,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAEhD,SAAS,OAAO,IAAI,eAAe,QAAQ,mBAAmB;AAC9D,SAAS,OAAO,IAAI,YAAY,EAAsD,kBAAkB,QAAQ,gBAAgB;AAgBhI,SAAS,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,QAAQ,cAAc;AAC/E,SAIE,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,QAChB,wBAAwB;AAC/B,SAKE,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,QACb,kBAAkB;AACzB,SAAS,UAAU,QAA8B,cAAc;AAE/D,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAEpD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AAEtD,SAAS,OAAO,IAAI,qBAAqB,EAAE,qBAAqB,QAAQ,yBAAyB;AAEjG,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAChD,SAAS,WAAW,QAA+B,eAAe;AAElE,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,eAAe,QAAQ,mBAAmB","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/index.ts"],"sourcesContent":["export type {\n CalendarAttendee,\n CalendarCustomView,\n CalendarDayBadge,\n CalendarEvent,\n CalendarEventColor,\n CalendarEventRenderContext,\n CalendarEventTimeChange,\n CalendarLabels,\n CalendarProps,\n CalendarQuickCreateControls,\n CalendarRecurrence,\n CalendarResource,\n CalendarSelectionControls,\n CalendarView,\n} from \"./Calendar\";\nexport { default as Calendar } from \"./Calendar\";\n\nexport type { ChartKind, ChartLabels, ChartProps, ChartRenderOptions } from \"./Chart\";\nexport { default as Chart } from \"./Chart\";\nexport type { ChartExplorerColumn, ChartExplorerProps } from \"./ChartExplorer\";\nexport { ChartExplorer } from \"./ChartExplorer\";\nexport type { ChartExplorerControlsProps } from \"./ChartExplorerControls\";\nexport { ChartExplorerControls } from \"./ChartExplorerControls\";\nexport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\nexport { ChartSnapshotView } from \"./ChartSnapshotView\";\nexport type { CodeDisplayLanguage, CodeDisplayProps } from \"./CodeDisplay\";\nexport { default as CodeDisplay } from \"./CodeDisplay\";\nexport { type ChartCursor, createChartCursor } from \"./chart-cursor\";\nexport type {\n ChartExplorerCharts,\n ChartExplorerController,\n ChartExplorerData,\n ChartExplorerOptions,\n ChartExplorerRequest,\n ChartExplorerRow,\n ChartExplorerSnapshot,\n} from \"./chart-explorer\";\nexport { createChartExplorer } from \"./chart-explorer\";\nexport type { ChartDatumRef, ChartSelection, ChartTooltip, ChartTooltipFormatter } from \"./chart-inspection\";\nexport type { ChartSnapshot } from \"./chart-snapshot\";\nexport { prepareChartSnapshot } from \"./chart-snapshot\";\nexport type {\n StateTimelineChartOptions,\n StateTimelineDomain,\n StateTimelineInterval,\n StateTimelineRow,\n StateTimelineState,\n} from \"./chart-state-timeline\";\nexport { type CollectionSelection, createCollectionSelection, type SelectionModifiers } from \"./collection-selection\";\nexport type {\n DataTableColumn,\n DataTableControlsProps,\n DataTableFooter,\n DataTableHeaderProps,\n DataTablePanelFooterProps,\n DataTablePanelProps,\n DataTableProps,\n DataTableRenderCell,\n DataTableRenderHeader,\n DataTableSort,\n} from \"./DataTable\";\nexport { default as DataTable } from \"./DataTable\";\nexport type { DocCodeHighlighter, DocCodeProps, DocConcept, DocNoteVariant, DocRow } from \"./Docs\";\nexport { DocCode, DocConceptGrid, DocInlineCode, DocLead, DocNote, DocPage, DocRows, DocSection } from \"./Docs\";\nexport { FileBrowserPanel, type FileBrowserPanelProps, type FileSource, openFileBrowser } from \"./FileBrowser\";\nexport { FileGrid, type FileGridProps } from \"./FileGrid\";\nexport { default as FileTree, type FileTreeActions, type FileTreeEntry, type FileTreeProps } from \"./FileTree\";\nexport {\n canPreviewFile,\n default as FileView,\n type FileViewContent,\n type FileViewFile,\n type FileViewPreviewKind,\n type FileViewProps,\n type FileViewRenderer,\n type FileViewRendererProps,\n formatFileViewSize,\n getFileViewPreviewKind,\n} from \"./FileView\";\nexport type { LightboxAction, LightboxImage } from \"./Lightbox\";\nexport { default as Lightbox } from \"./Lightbox\";\nexport type { LogTableEntry } from \"./LogEntriesTable\";\nexport { default as LogEntriesTable } from \"./LogEntriesTable\";\nexport { default as MarkdownView, type MarkdownRenderOptions, type MarkdownViewProps, renderSafeMarkdown } from \"./MarkdownView\";\nexport type {\n MessageGroupEntry,\n MessageRowAction,\n MessageRowAttachment,\n MessageRowAuthor,\n MessageRowFile,\n MessageRowMedia,\n MessageRowProgress,\n MessageRowProps,\n MessageRowQuote,\n MessageRowReaction,\n MessageRowStatus,\n MessageRowThread,\n MessageSystemRowProps,\n} from \"./MessageRow\";\nexport { MessageRow, MessageSystemRow, startsMessageGroup } from \"./MessageRow\";\nexport {\n type MarkdownInfoBlock,\n type MarkdownInfoBlockRenderInput,\n type MarkdownInfoBlockType,\n markdownInfoBlocks,\n renderMarkdownInfoBlock,\n scanMarkdownInfoBlock,\n} from \"./markdown-info-blocks\";\nexport {\n type MarkdownLinkInput,\n type MarkdownReference,\n type MarkdownReferenceKind,\n type MarkdownReferenceType,\n markdownLinkReference,\n markdownReferenceIcon,\n markdownReferenceType,\n markdownReferenceTypeLabel,\n markStandaloneLinks,\n renderMarkdownLink,\n} from \"./markdown-links\";\nexport { Pagination, type PaginationProps } from \"./Pagination\";\nexport type { PdfPreviewProps, PdfPreviewRequest } from \"./PdfPreview\";\nexport { default as PdfPreview } from \"./PdfPreview\";\nexport type { RangeOption, RangePickerProps } from \"./RangePicker\";\nexport { default as RangePicker } from \"./RangePicker\";\nexport type { StructuredDataPreviewMode, StructuredDataPreviewProps, StructuredDataValue } from \"./StructuredDataPreview\";\nexport { default as StructuredDataPreview, isStructuredDataValue } from \"./StructuredDataPreview\";\nexport type { TimelineColor, TimelineController, TimelineItem, TimelineProps } from \"./Timeline\";\nexport { default as Timeline } from \"./Timeline\";\nexport { VideoPlayer, type VideoPlayerProps } from \"./VideoPlayer\";\nexport type { VirtualFeedController, VirtualFeedProps, VirtualFeedScrollOptions } from \"./VirtualFeed\";\nexport { VirtualFeed } from \"./VirtualFeed\";\nexport type { ZoomPanAction, ZoomPanFullscreen, ZoomPanViewportProps } from \"./ZoomPanViewport\";\nexport { ZoomPanViewport } from \"./ZoomPanViewport\";\n"],"mappings":"AAgBA,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAGhD,SAAS,OAAO,IAAI,KAAK,QAAQ,SAAS;AAE1C,SAAS,aAAa,QAAQ,iBAAiB;AAE/C,SAAS,qBAAqB,QAAQ,yBAAyB;AAC/D,SAAS,mBAAmB,QAAuC,uBAAuB;AAC1F,SAAS,iBAAiB,QAAQ,qBAAqB;AAEvD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AACtD,SAA2B,iBAAiB,QAAQ,gBAAgB;AAUpE,SAAS,mBAAmB,QAAQ,kBAAkB;AAGtD,SAAS,oBAAoB,QAAQ,kBAAkB;AAQvD,SAAmC,yBAAyB,QAAiC,wBAAwB;AAarH,SAAS,OAAO,IAAI,SAAS,QAAQ,aAAa;AAElD,SAAS,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,QAAQ,QAAQ;AAC/G,SAAS,gBAAgB,EAA+C,eAAe,QAAQ,eAAe;AAC9G,SAAS,QAAQ,QAA4B,YAAY;AACzD,SAAS,OAAO,IAAI,QAAQ,QAAsE,YAAY;AAC9G,SACE,cAAc,EACd,OAAO,IAAI,QAAQ,EAOnB,kBAAkB,EAClB,sBAAsB,QACjB,YAAY;AAEnB,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAEhD,SAAS,OAAO,IAAI,eAAe,QAAQ,mBAAmB;AAC9D,SAAS,OAAO,IAAI,YAAY,EAAsD,kBAAkB,QAAQ,gBAAgB;AAgBhI,SAAS,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,QAAQ,cAAc;AAC/E,SAIE,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,QAChB,wBAAwB;AAC/B,SAKE,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,QACb,kBAAkB;AACzB,SAAS,UAAU,QAA8B,cAAc;AAE/D,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAEpD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AAEtD,SAAS,OAAO,IAAI,qBAAqB,EAAE,qBAAqB,QAAQ,yBAAyB;AAEjG,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAChD,SAAS,WAAW,QAA+B,eAAe;AAElE,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,eAAe,QAAQ,mBAAmB","ignoreList":[]}
@@ -39,8 +39,8 @@ import { createEffect, createMemo, createSignal, For, onCleanup, onMount, Show }
39
39
  import { createFieldMeta, Field, fieldControlAria, fieldDescribedBy } from "../internal/field";
40
40
  import { returnFocus, ringOnReturn } from "../internal/focus-return";
41
41
  import { useDateConfigLocale } from "../intl/locale";
42
- import { useUiMessages } from "../intl/messages";
43
- import { dateKey, displayDate, filterTimeInput, formatDateOnlyRangeDuration, formatDateTimeValue, inRange, isCompleteTime, isRangeEdge, monthDate, monthNames, normalizeTimeInput, orderedRange, parseDateValue, pickerContext, previewRange, resolveFocusDay, splitDateTime, toDateTimeValue, yearMonth } from "./date-picker";
42
+ import { resolveUiMessages, useUiMessages } from "../intl/messages";
43
+ import { dateKey, displayDate, filterTimeInput, formatDateOnlyRangeDuration, formatDateTimeValue, inRange, isCompleteTime, isRangeEdge, monthDate, monthNames, msUntilNextDay, normalizeTimeInput, orderedRange, parseDateValue, pickerContext, previewRange, resolveFocusDay, splitDateTime, toDateTimeValue, yearMonth } from "./date-picker";
44
44
  import { commitFieldValue, resolveMaybeAccessor } from "./field-contract";
45
45
  const popoverIsOpen = popover => {
46
46
  if (!popover) return false;
@@ -346,13 +346,42 @@ function DatePickerPanel(props) {
346
346
  number: dates.formatDayNumber(day, dateContext)
347
347
  })));
348
348
  });
349
+ // Today in the picker's time zone, the zone its values use. The browser reads
350
+ // the clock again at the next midnight there, when a hidden tab becomes visible
351
+ // again (timers may not fire on time while the device sleeps), and when the
352
+ // date config changes. The mark and its timer share each reading, so neither
353
+ // starts from an old one.
354
+ const [clockCheck, checkClock] = createSignal(undefined, {
355
+ equals: false
356
+ });
357
+ const now = createMemo(() => {
358
+ clockCheck();
359
+ context();
360
+ return new Date();
361
+ });
362
+ const todayKey = createMemo(() => dateKey(now(), context()));
363
+ // The day's name is formatted in the date locale, so "today" joins it in the same language.
364
+ const todayLabel = date => resolveUiMessages(context().locale).todayDate({
365
+ date
366
+ });
367
+ createEffect(() => {
368
+ const timer = window.setTimeout(() => checkClock(), msUntilNextDay(now(), context()));
369
+ onCleanup(() => window.clearTimeout(timer));
370
+ });
371
+ onMount(() => {
372
+ const refresh = () => {
373
+ if (document.visibilityState === "visible") checkClock();
374
+ };
375
+ document.addEventListener("visibilitychange", refresh);
376
+ onCleanup(() => document.removeEventListener("visibilitychange", refresh));
377
+ });
349
378
  let calendar;
350
379
  // Days that belong to the visible month; the roving tabindex must land on one
351
380
  // of them or the grid becomes unreachable by keyboard after month navigation.
352
381
  const monthDayKeys = createMemo(() => dayRows().flat().filter(day => !day.outside).map(day => day.key));
353
382
  // Remembers where arrow-key navigation left off so Tab returns to that day.
354
383
  const [focusedKey, setFocusedKey] = createSignal();
355
- const defaultFocus = createMemo(() => resolveFocusDay(monthDayKeys(), focusedKey() || props.focusDate?.() || props.selected?.() || dateKey(dates.today(context()), context())));
384
+ const defaultFocus = createMemo(() => resolveFocusDay(monthDayKeys(), focusedKey() || props.focusDate?.() || props.selected?.() || todayKey()));
356
385
  const moveMonth = delta => props.setVisibleMonth(dates.addMonths(props.visibleMonth(), delta, context()));
357
386
  const moveYear = delta => props.setVisibleMonth(monthDate(month().year + delta, month().month, context()));
358
387
  const previousLabel = () => view() === "days" ? messages().previousMonth : messages().previousYear;
@@ -480,6 +509,7 @@ function DatePickerPanel(props) {
480
509
  };
481
510
  const active = () => selected() || isRangeEdge(cell.key, range());
482
511
  const focusable = () => cell.key === defaultFocus();
512
+ const today = () => cell.key === todayKey();
483
513
  return (() => {
484
514
  var _el$40 = _$getNextElement(_tmpl$12);
485
515
  _el$40.addEventListener("pointerleave", () => props.onDayPreview?.(null));
@@ -497,16 +527,20 @@ function DatePickerPanel(props) {
497
527
  _v$11 = focusable() ? "true" : undefined,
498
528
  _v$12 = cell.outside ? "true" : undefined,
499
529
  _v$13 = inRange(cell.key, range()) && !active() ? "true" : undefined,
500
- _v$14 = cell.label,
501
- _v$15 = active(),
502
- _v$16 = focusable() ? 0 : -1;
530
+ _v$14 = today() ? "true" : undefined,
531
+ _v$15 = today() ? "date" : undefined,
532
+ _v$16 = today() ? todayLabel(cell.label) : cell.label,
533
+ _v$17 = active(),
534
+ _v$18 = focusable() ? 0 : -1;
503
535
  _v$10 !== _p$.e && _$setAttribute(_el$40, "data-date-day", _p$.e = _v$10);
504
536
  _v$11 !== _p$.t && _$setAttribute(_el$40, "data-date-focus", _p$.t = _v$11);
505
537
  _v$12 !== _p$.a && _$setAttribute(_el$40, "data-outside", _p$.a = _v$12);
506
538
  _v$13 !== _p$.o && _$setAttribute(_el$40, "data-in-range", _p$.o = _v$13);
507
- _v$14 !== _p$.i && _$setAttribute(_el$40, "aria-label", _p$.i = _v$14);
508
- _v$15 !== _p$.n && _$setAttribute(_el$40, "aria-selected", _p$.n = _v$15);
509
- _v$16 !== _p$.s && _$setAttribute(_el$40, "tabindex", _p$.s = _v$16);
539
+ _v$14 !== _p$.i && _$setAttribute(_el$40, "data-today", _p$.i = _v$14);
540
+ _v$15 !== _p$.n && _$setAttribute(_el$40, "aria-current", _p$.n = _v$15);
541
+ _v$16 !== _p$.s && _$setAttribute(_el$40, "aria-label", _p$.s = _v$16);
542
+ _v$17 !== _p$.h && _$setAttribute(_el$40, "aria-selected", _p$.h = _v$17);
543
+ _v$18 !== _p$.r && _$setAttribute(_el$40, "tabindex", _p$.r = _v$18);
510
544
  return _p$;
511
545
  }, {
512
546
  e: undefined,
@@ -515,7 +549,9 @@ function DatePickerPanel(props) {
515
549
  o: undefined,
516
550
  i: undefined,
517
551
  n: undefined,
518
- s: undefined
552
+ s: undefined,
553
+ h: undefined,
554
+ r: undefined
519
555
  });
520
556
  _$runHydrationEvents();
521
557
  return _el$40;