cpk-ui 0.7.0 → 0.8.0-beta.1

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 (52) hide show
  1. package/README.md +15 -14
  2. package/components/modals/AlertDialog/AlertDialog.d.ts +11 -5
  3. package/components/modals/AlertDialog/AlertDialog.d.ts.map +1 -1
  4. package/components/modals/AlertDialog/AlertDialog.js +46 -36
  5. package/components/uis/Button/Button.d.ts.map +1 -1
  6. package/components/uis/Button/Button.js +16 -13
  7. package/components/uis/Calendar/Calendar.d.ts +6 -0
  8. package/components/uis/Calendar/Calendar.d.ts.map +1 -0
  9. package/components/uis/Calendar/Calendar.js +482 -0
  10. package/components/uis/Calendar/CalendarDay.d.ts +21 -0
  11. package/components/uis/Calendar/CalendarDay.d.ts.map +1 -0
  12. package/components/uis/Calendar/CalendarDay.js +172 -0
  13. package/components/uis/Calendar/CalendarHeader.d.ts +22 -0
  14. package/components/uis/Calendar/CalendarHeader.d.ts.map +1 -0
  15. package/components/uis/Calendar/CalendarHeader.js +40 -0
  16. package/components/uis/Calendar/CalendarPage.d.ts +46 -0
  17. package/components/uis/Calendar/CalendarPage.d.ts.map +1 -0
  18. package/components/uis/Calendar/CalendarPage.js +34 -0
  19. package/components/uis/Calendar/CalendarPager.d.ts +11 -0
  20. package/components/uis/Calendar/CalendarPager.d.ts.map +1 -0
  21. package/components/uis/Calendar/CalendarPager.js +115 -0
  22. package/components/uis/Calendar/CalendarPager.web.d.ts +11 -0
  23. package/components/uis/Calendar/CalendarPager.web.d.ts.map +1 -0
  24. package/components/uis/Calendar/CalendarPager.web.js +72 -0
  25. package/components/uis/Calendar/CalendarWeekRow.d.ts +20 -0
  26. package/components/uis/Calendar/CalendarWeekRow.d.ts.map +1 -0
  27. package/components/uis/Calendar/CalendarWeekRow.js +64 -0
  28. package/components/uis/Calendar/CalendarWeekdayRow.d.ts +24 -0
  29. package/components/uis/Calendar/CalendarWeekdayRow.d.ts.map +1 -0
  30. package/components/uis/Calendar/CalendarWeekdayRow.js +45 -0
  31. package/components/uis/Calendar/intl.d.ts +18 -0
  32. package/components/uis/Calendar/intl.d.ts.map +1 -0
  33. package/components/uis/Calendar/intl.js +146 -0
  34. package/components/uis/Calendar/palette.d.ts +10 -0
  35. package/components/uis/Calendar/palette.d.ts.map +1 -0
  36. package/components/uis/Calendar/palette.js +93 -0
  37. package/components/uis/Calendar/types.d.ts +286 -0
  38. package/components/uis/Calendar/types.d.ts.map +1 -0
  39. package/components/uis/Calendar/types.js +1 -0
  40. package/components/uis/Calendar/useCalendarState.d.ts +66 -0
  41. package/components/uis/Calendar/useCalendarState.d.ts.map +1 -0
  42. package/components/uis/Calendar/useCalendarState.js +211 -0
  43. package/components/uis/Calendar/utils.d.ts +114 -0
  44. package/components/uis/Calendar/utils.d.ts.map +1 -0
  45. package/components/uis/Calendar/utils.js +429 -0
  46. package/components/uis/ParallaxHeader/ParallaxHeader.d.ts +44 -0
  47. package/components/uis/ParallaxHeader/ParallaxHeader.d.ts.map +1 -0
  48. package/components/uis/ParallaxHeader/ParallaxHeader.js +142 -0
  49. package/index.d.ts +2 -0
  50. package/index.d.ts.map +1 -1
  51. package/index.js +2 -0
  52. package/package.json +2 -1
@@ -0,0 +1,211 @@
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
+ import { AccessibilityInfo, AppState } from 'react-native';
3
+ import { addDays, addMonths, fromDayKey, isSameDay, localNoon, startOfWeek, toDateKeyInput, toDayKey, } from './utils';
4
+ /**
5
+ * Controlled first: the prop wins whenever it is not `undefined`, and the internal
6
+ * state is only used as the uncontrolled fallback.
7
+ */
8
+ export function useControllable(controlled, initial) {
9
+ const [internal, setInternal] = useState(initial);
10
+ const isControlled = controlled !== undefined;
11
+ const setValue = useCallback((next) => {
12
+ if (!isControlled) {
13
+ setInternal(next);
14
+ }
15
+ }, [isControlled]);
16
+ return [isControlled ? controlled : internal, setValue];
17
+ }
18
+ /**
19
+ * "Today" as a local noon date that re-arms itself at local midnight and also
20
+ * refreshes when the app returns to the foreground, so a device that slept through
21
+ * midnight still moves the highlight.
22
+ */
23
+ export function useToday(explicit) {
24
+ const [now, setNow] = useState(() => new Date());
25
+ useEffect(() => {
26
+ if (explicit !== undefined) {
27
+ return;
28
+ }
29
+ let timerId;
30
+ const refresh = () => {
31
+ setNow((previous) => {
32
+ const next = new Date();
33
+ return isSameDay(previous, next) ? previous : next;
34
+ });
35
+ };
36
+ const armMidnightTimer = () => {
37
+ const midnight = new Date();
38
+ midnight.setHours(24, 0, 0, 500);
39
+ timerId = setTimeout(() => {
40
+ refresh();
41
+ armMidnightTimer();
42
+ }, Math.max(midnight.getTime() - Date.now(), 0));
43
+ };
44
+ armMidnightTimer();
45
+ const subscription = AppState.addEventListener('change', (state) => {
46
+ if (state === 'active') {
47
+ refresh();
48
+ }
49
+ });
50
+ return () => {
51
+ if (timerId) {
52
+ clearTimeout(timerId);
53
+ }
54
+ subscription.remove();
55
+ };
56
+ }, [explicit]);
57
+ const source = typeof explicit === 'string' ? fromDayKey(explicit) : (explicit ?? now);
58
+ return useMemo(() => localNoon(source.getFullYear(), source.getMonth(), source.getDate()), [source]);
59
+ }
60
+ /** Every spring and timing in the component collapses to duration 0 when this is on. */
61
+ export function useReduceMotion() {
62
+ const [reduceMotion, setReduceMotion] = useState(false);
63
+ const currentRef = useRef(false);
64
+ useEffect(() => {
65
+ let mounted = true;
66
+ // Only ever schedules a render when the setting actually differs.
67
+ const apply = (enabled) => {
68
+ if (!mounted || currentRef.current === enabled) {
69
+ return;
70
+ }
71
+ currentRef.current = enabled;
72
+ setReduceMotion(enabled);
73
+ };
74
+ AccessibilityInfo.isReduceMotionEnabled()
75
+ .then(apply)
76
+ .catch(() => undefined);
77
+ const subscription = AccessibilityInfo.addEventListener('reduceMotionChanged', apply);
78
+ return () => {
79
+ mounted = false;
80
+ subscription.remove();
81
+ };
82
+ }, []);
83
+ return reduceMotion;
84
+ }
85
+ let disabledVersionSeq = 0;
86
+ /**
87
+ * Precedence, first match wins:
88
+ * `marker.disabled` → `disabledDates` → `minDate`/`maxDate` → `isDateDisabled`.
89
+ * Range checks are lexicographic string compares, which are allocation free and
90
+ * timezone proof because `yyyy-MM-dd` sorts chronologically.
91
+ */
92
+ export function useDisabledState(args) {
93
+ const { minDate, maxDate, disabledDates, isDateDisabled } = args;
94
+ const minKey = minDate == null ? null : toDateKeyInput(minDate);
95
+ const maxKey = maxDate == null ? null : toDateKeyInput(maxDate);
96
+ const disabledSet = useMemo(() => {
97
+ if (!disabledDates) {
98
+ return null;
99
+ }
100
+ return Array.isArray(disabledDates)
101
+ ? new Set(disabledDates)
102
+ : disabledDates;
103
+ }, [disabledDates]);
104
+ const version = useMemo(() => {
105
+ disabledVersionSeq += 1;
106
+ return disabledVersionSeq;
107
+ }, [minKey, maxKey, disabledSet, isDateDisabled]);
108
+ const resolver = useCallback((day, marker) => {
109
+ if (marker?.disabled === true) {
110
+ return true;
111
+ }
112
+ if (disabledSet?.has(day.key)) {
113
+ return true;
114
+ }
115
+ if (minKey !== null && day.key < minKey) {
116
+ return true;
117
+ }
118
+ if (maxKey !== null && day.key > maxKey) {
119
+ return true;
120
+ }
121
+ if (isDateDisabled) {
122
+ return isDateDisabled(day.date, day.key);
123
+ }
124
+ return false;
125
+ }, [disabledSet, isDateDisabled, maxKey, minKey]);
126
+ return { resolver, version, minKey, maxKey };
127
+ }
128
+ /**
129
+ * One handler covers the whole grid. Moving past a page edge simply targets a day
130
+ * outside the mounted page, and the caller pages to it while keeping focus.
131
+ */
132
+ export function resolveKeyboardAction(args) {
133
+ const { key, shiftKey, focusedKey, weekStart, isRTL, mode } = args;
134
+ const focused = fromDayKey(focusedKey);
135
+ const horizontal = isRTL ? -1 : 1;
136
+ const move = (date) => ({
137
+ type: 'move',
138
+ key: toDayKey(date),
139
+ });
140
+ switch (key) {
141
+ case 'ArrowLeft':
142
+ return move(addDays(focused, -horizontal));
143
+ case 'ArrowRight':
144
+ return move(addDays(focused, horizontal));
145
+ case 'ArrowUp':
146
+ return move(addDays(focused, -7));
147
+ case 'ArrowDown':
148
+ return move(addDays(focused, 7));
149
+ case 'Home':
150
+ return move(startOfWeek(focused, weekStart));
151
+ case 'End':
152
+ return move(addDays(startOfWeek(focused, weekStart), 6));
153
+ case 'PageUp':
154
+ return shiftKey
155
+ ? move(addMonths(focused, -12))
156
+ : move(mode === 'week' ? addDays(focused, -7) : addMonths(focused, -1));
157
+ case 'PageDown':
158
+ return shiftKey
159
+ ? move(addMonths(focused, 12))
160
+ : move(mode === 'week' ? addDays(focused, 7) : addMonths(focused, 1));
161
+ case 'Enter':
162
+ case ' ':
163
+ case 'Spacebar':
164
+ return { type: 'select' };
165
+ default:
166
+ return null;
167
+ }
168
+ }
169
+ const isShallowEqual = (a, b) => {
170
+ if (a === b) {
171
+ return true;
172
+ }
173
+ if (!a || !b) {
174
+ return false;
175
+ }
176
+ const aKeys = Object.keys(a);
177
+ const bKeys = Object.keys(b);
178
+ if (aKeys.length !== bKeys.length) {
179
+ return false;
180
+ }
181
+ for (const key of aKeys) {
182
+ if (a[key] !==
183
+ b[key]) {
184
+ return false;
185
+ }
186
+ }
187
+ return true;
188
+ };
189
+ /**
190
+ * Keeps the previous object for as long as a SHALLOW value compare says nothing
191
+ * changed.
192
+ *
193
+ * `labels`, `styles` and `formatters` are written as inline object literals at
194
+ * almost every call site — `labels={{today: t('calendar.today')}}` is the only
195
+ * way to localize the component — and a fresh identity there invalidates
196
+ * `chrome`, which re-renders all 42 day cells on every parent render. `palette`
197
+ * already compared by value for exactly this reason; these three did not.
198
+ *
199
+ * One level deep only. A caller writing `styles={{dayText: {fontWeight: '600'}}}`
200
+ * fully inline still allocates a new nested object every render and still pays;
201
+ * hoist the inner style object or wrap it in `useMemo`.
202
+ */
203
+ export function useShallowStable(value) {
204
+ const ref = useRef(value);
205
+ return useMemo(() => {
206
+ if (!isShallowEqual(ref.current, value)) {
207
+ ref.current = value;
208
+ }
209
+ return ref.current;
210
+ }, [value]);
211
+ }
@@ -0,0 +1,114 @@
1
+ import type { CalendarDateKey, CalendarDayModel, CalendarFormatters, CalendarMarker, CalendarMetrics, CalendarMonthKey, CalendarPageKey, CalendarSizeType, CalendarViewMode, WeekStart } from './types';
2
+ export declare const clamp: (value: number, min: number, max: number) => number;
3
+ /**
4
+ * Every calendar `Date` in this component is anchored at LOCAL NOON.
5
+ * Local midnight does not exist in zones whose DST transition happens at 00:00
6
+ * (America/Santiago, America/Havana, …) and noon is more than 11 hours away from
7
+ * every real world transition, so no shift can move a date to another calendar day.
8
+ */
9
+ export declare const localNoon: (year: number, month0: number, day: number) => Date;
10
+ export declare const toDayKey: (date: Date) => CalendarDateKey;
11
+ export declare const toMonthKey: (date: Date) => CalendarMonthKey;
12
+ export declare const isMonthKey: (key: string) => boolean;
13
+ /** Field wise construction. Never `new Date('2026-08-24')`, which ECMA-262 parses as UTC. */
14
+ export declare const fromDayKey: (key: CalendarDateKey) => Date;
15
+ export declare const fromMonthKey: (key: CalendarMonthKey) => Date;
16
+ /** Field arithmetic, so month, year and DST boundaries normalize correctly. */
17
+ export declare const addDays: (date: Date, amount: number) => Date;
18
+ export declare const daysInMonth: (date: Date) => number;
19
+ export declare const startOfMonth: (date: Date) => Date;
20
+ export declare const addMonths: (date: Date, amount: number) => Date;
21
+ export declare const startOfWeek: (date: Date, weekStart: WeekStart) => Date;
22
+ /** The year is compared. Comparing only month and date highlights the same day of any year. */
23
+ export declare const isSameDay: (a: Date, b: Date) => boolean;
24
+ /**
25
+ * Safe because both dates are local noon: a DST shift of one hour is 0.042 days,
26
+ * which `Math.round` can never turn into a different day count.
27
+ */
28
+ export declare const diffInCalendarDays: (a: Date, b: Date) => number;
29
+ export declare const weeksInMonth: (date: Date, weekStart: WeekStart) => number;
30
+ /**
31
+ * ISO 8601 numbering when `weekStart` is Monday, otherwise the
32
+ * "the week containing Jan 1 is week 1" convention that US/KR/JP calendars show.
33
+ */
34
+ export declare const getWeekNumber: (date: Date, weekStart: WeekStart) => number;
35
+ export declare const regionOf: (locale: string) => string;
36
+ export declare const resolveWeekStart: (locale: string) => WeekStart;
37
+ /** Accepts a `Date` or an already canonical key and always answers with a day key. */
38
+ export declare const toDateKeyInput: (value: Date | CalendarDateKey) => CalendarDateKey;
39
+ /**
40
+ * Resolves a page anchor to the first rendered day of that page.
41
+ * Month pages anchor on the first of the month, week pages on the week start.
42
+ */
43
+ export declare const pageFirstDate: (pageKey: CalendarPageKey, mode: CalendarViewMode, weekStart: WeekStart) => Date;
44
+ /** The last day that logically belongs to a page, ignoring the out of month padding. */
45
+ export declare const pageLastDate: (pageKey: CalendarPageKey, mode: CalendarViewMode, weekStart: WeekStart, monthsToShow: number) => Date;
46
+ export declare const toPageKey: (date: Date, mode: CalendarViewMode, weekStart: WeekStart) => CalendarPageKey;
47
+ export declare const normalizePageKey: (value: Date | CalendarPageKey, mode: CalendarViewMode, weekStart: WeekStart, monthsToShow: number) => CalendarPageKey;
48
+ /** Steps a page anchor by `delta` pages: months in month mode, weeks in week mode. */
49
+ export declare const addPages: (pageKey: CalendarPageKey, delta: number, mode: CalendarViewMode, weekStart: WeekStart, monthsToShow: number) => CalendarPageKey;
50
+ export declare function buildMonthGrid(month: Date, weekStart: WeekStart, fixedWeeks: boolean, showWeekNumbers: boolean): readonly CalendarDayModel[];
51
+ export declare function buildWeekGrid(anchor: Date, weekStart: WeekStart, showWeekNumbers: boolean): readonly CalendarDayModel[];
52
+ /**
53
+ * One rendered week. Frozen and cached, so a row can be compared by identity alone
54
+ * and the parallel label arrays never have to be re-sliced during a render.
55
+ */
56
+ export type CalendarGridRow = Readonly<{
57
+ weekIndex: number;
58
+ weekNumber: number;
59
+ days: readonly CalendarDayModel[];
60
+ dayLabels: readonly string[];
61
+ a11yLabels: readonly string[];
62
+ }>;
63
+ export type CalendarGrid = Readonly<{
64
+ days: readonly CalendarDayModel[];
65
+ rows: readonly CalendarGridRow[];
66
+ rowCount: number;
67
+ firstKey: CalendarDateKey;
68
+ lastKey: CalendarDateKey;
69
+ }>;
70
+ export type CalendarGridRequest = {
71
+ pageKey: CalendarPageKey;
72
+ mode: CalendarViewMode;
73
+ weekStart: WeekStart;
74
+ fixedWeeks: boolean;
75
+ showWeekNumbers: boolean;
76
+ locale: string;
77
+ formatters: CalendarFormatters;
78
+ formattersId: string;
79
+ };
80
+ /**
81
+ * Module level LRU. Re-visiting a page (swiping back and forth) is a `Map.get`,
82
+ * so `Intl.DateTimeFormat#format` runs at most once per (page, locale) pair.
83
+ */
84
+ export declare function getCalendarGrid(request: CalendarGridRequest): CalendarGrid;
85
+ /** Test seam. Keeps the LRU from leaking state between test files. */
86
+ export declare const clearCalendarGridCache: () => void;
87
+ /**
88
+ * True when the row's 7 keys contain `key`.
89
+ * Keys are sorted and consecutive, so this is two string compares, never a scan.
90
+ */
91
+ export declare const rowHasKey: (days: readonly CalendarDayModel[], key: string | null) => boolean;
92
+ /** Identity first, then a shallow value compare so a rebuilt but equal marker still bails. */
93
+ export declare function isSameMarker(a?: CalendarMarker, b?: CalendarMarker): boolean;
94
+ type Rgb = {
95
+ r: number;
96
+ g: number;
97
+ b: number;
98
+ };
99
+ export declare function parseColor(color: string): Rgb | null;
100
+ /** WCAG relative luminance, or `null` when the colour cannot be parsed. */
101
+ export declare function relativeLuminance(color: string): number | null;
102
+ /**
103
+ * Picks the readable label colour for a background.
104
+ * The 0.45 threshold makes a saturated yellow resolve to the dark label.
105
+ */
106
+ export declare function readableTextOn(background: string, light: string, dark: string): string;
107
+ /**
108
+ * There is no measure pass in the vertical axis: every value below is a pure
109
+ * function of `size` and the device font scale, so the grid height is identical
110
+ * for every month and a swipe causes zero layout thrash.
111
+ */
112
+ export declare function resolveMetrics(size: CalendarSizeType, fontScale: number, maxFontSizeMultiplier: number): CalendarMetrics;
113
+ export {};
114
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/components/uis/Calendar/utils.ts"],"names":[],"mappings":"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"}