@osdk/react-components 0.3.0-main-20260408031518 → 0.3.0-main-20260408113649

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 (31) hide show
  1. package/CHANGELOG.md +6 -4
  2. package/build/browser/action-form/fields/DateCalendar.js +18 -15
  3. package/build/browser/action-form/fields/DateCalendar.js.map +1 -1
  4. package/build/browser/action-form/fields/DateCalendar.module.css +4 -4
  5. package/build/browser/action-form/fields/FilePickerField.js +4 -3
  6. package/build/browser/action-form/fields/FilePickerField.js.map +1 -1
  7. package/build/browser/action-form/fields/FilePickerField.module.css +1 -1
  8. package/build/browser/styles.css +5 -5
  9. package/build/cjs/DateCalendar-D4APPCSE.cjs +70 -0
  10. package/build/cjs/DateCalendar-D4APPCSE.cjs.map +1 -0
  11. package/build/cjs/{DateCalendar-QWGFKD6J.css → DateCalendar-NF65B4VD.css} +5 -5
  12. package/build/cjs/DateCalendar-NF65B4VD.css.map +1 -0
  13. package/build/cjs/{chunk-UZ2E5NRX.cjs → chunk-A57T2BLC.cjs} +2 -2
  14. package/build/cjs/chunk-A57T2BLC.cjs.map +1 -0
  15. package/build/cjs/public/experimental.cjs +6 -5
  16. package/build/cjs/public/experimental.cjs.map +1 -1
  17. package/build/cjs/public/experimental.css +5 -5
  18. package/build/cjs/public/experimental.css.map +1 -1
  19. package/build/esm/action-form/fields/DateCalendar.js +18 -15
  20. package/build/esm/action-form/fields/DateCalendar.js.map +1 -1
  21. package/build/esm/action-form/fields/DateCalendar.module.css +4 -4
  22. package/build/esm/action-form/fields/FilePickerField.js +4 -3
  23. package/build/esm/action-form/fields/FilePickerField.js.map +1 -1
  24. package/build/esm/action-form/fields/FilePickerField.module.css +1 -1
  25. package/build/types/action-form/fields/DateCalendar.d.ts.map +1 -1
  26. package/build/types/action-form/fields/FilePickerField.d.ts.map +1 -1
  27. package/package.json +5 -5
  28. package/build/cjs/DateCalendar-QWGFKD6J.css.map +0 -1
  29. package/build/cjs/DateCalendar-R44GMN3O.cjs +0 -67
  30. package/build/cjs/DateCalendar-R44GMN3O.cjs.map +0 -1
  31. package/build/cjs/chunk-UZ2E5NRX.cjs.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @osdk/react-components
2
2
 
3
- ## 0.3.0-main-20260408031518
3
+ ## 0.3.0-main-20260408113649
4
4
 
5
5
  ### Minor Changes
6
6
 
@@ -9,14 +9,16 @@
9
9
 
10
10
  ### Patch Changes
11
11
 
12
+ - 236a88b: Downgrade react-day-picker from v9 to ^8.10.0
12
13
  - 79b001e: Add FilePickerField component for attachment and media reference form fields
14
+ - b2b512e: Address FilePickerField PR review comments: memoize computed values, add aria-label, rename CSS token, add keyboard interaction tests
13
15
  - Updated dependencies [f8b9f12]
14
16
  - Updated dependencies [bcf359f]
15
17
  - Updated dependencies [51ccca8]
16
18
  - Updated dependencies [fb85818]
17
- - @osdk/client@2.9.0-main-20260408031518
18
- - @osdk/react@0.11.0-main-20260408031518
19
- - @osdk/api@2.9.0-main-20260408031518
19
+ - @osdk/client@2.9.0-main-20260408113649
20
+ - @osdk/react@0.11.0-main-20260408113649
21
+ - @osdk/api@2.9.0-main-20260408113649
20
22
 
21
23
  ## 0.2.0
22
24
 
@@ -14,27 +14,27 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import React, { useMemo } from "react";
17
+ import React, { useCallback, useMemo } from "react";
18
18
  import { DayPicker } from "react-day-picker";
19
19
  import styles from "./DateCalendar.module.css.js";
20
20
  const CLASS_NAMES = {
21
21
  root: styles.calendar,
22
22
  months: styles.calendarMonths,
23
- month_grid: styles.calendarMonthGrid,
24
- weekday: styles.calendarWeekday,
25
- day: styles.calendarDay,
26
- day_button: styles.calendarDayButton,
27
- selected: styles.calendarSelected,
28
- today: styles.calendarToday,
29
- outside: styles.calendarOutside,
30
- disabled: styles.calendarDisabled,
31
- hidden: styles.calendarHidden,
23
+ table: styles.calendarMonthGrid,
24
+ head_cell: styles.calendarWeekday,
25
+ cell: styles.calendarDay,
26
+ day: styles.calendarDayButton,
27
+ day_selected: styles.calendarSelected,
28
+ day_today: styles.calendarToday,
29
+ day_outside: styles.calendarOutside,
30
+ day_disabled: styles.calendarDisabled,
31
+ day_hidden: styles.calendarHidden,
32
32
  nav: styles.calendarNav,
33
- button_previous: styles.calendarNavButton,
34
- button_next: styles.calendarNavButton,
35
- month_caption: styles.calendarMonthCaption,
33
+ nav_button_previous: styles.calendarNavButton,
34
+ nav_button_next: styles.calendarNavButton,
35
+ caption: styles.calendarMonthCaption,
36
36
  caption_label: styles.calendarCaptionLabel,
37
- chevron: styles.calendarChevron
37
+ nav_icon: styles.calendarChevron
38
38
  };
39
39
  export default function DateCalendar({
40
40
  dateSelected,
@@ -57,10 +57,13 @@ export default function DateCalendar({
57
57
  }
58
58
  return matchers;
59
59
  }, [min, max]);
60
+ const handleSelect = useCallback(day => {
61
+ onSelect(day);
62
+ }, [onSelect]);
60
63
  return /*#__PURE__*/React.createElement(DayPicker, {
61
64
  mode: "single",
62
65
  selected: dateSelected,
63
- onSelect: onSelect,
66
+ onSelect: handleSelect,
64
67
  disabled: disabled,
65
68
  defaultMonth: dateSelected,
66
69
  classNames: CLASS_NAMES,
@@ -1 +1 @@
1
- {"version":3,"file":"DateCalendar.js","names":["React","useMemo","DayPicker","styles","CLASS_NAMES","root","calendar","months","calendarMonths","month_grid","calendarMonthGrid","weekday","calendarWeekday","day","calendarDay","day_button","calendarDayButton","selected","calendarSelected","today","calendarToday","outside","calendarOutside","disabled","calendarDisabled","hidden","calendarHidden","nav","calendarNav","button_previous","calendarNavButton","button_next","month_caption","calendarMonthCaption","caption_label","calendarCaptionLabel","chevron","calendarChevron","DateCalendar","dateSelected","onSelect","min","max","footer","matchers","push","before","after","createElement","mode","defaultMonth","classNames"],"sources":["DateCalendar.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useMemo } from \"react\";\nimport type {\n ClassNames,\n DateAfter,\n DateBefore,\n Matcher,\n} from \"react-day-picker\";\nimport { DayPicker } from \"react-day-picker\";\nimport styles from \"./DateCalendar.module.css\";\n\nconst CLASS_NAMES: Partial<ClassNames> = {\n root: styles.calendar,\n months: styles.calendarMonths,\n month_grid: styles.calendarMonthGrid,\n weekday: styles.calendarWeekday,\n day: styles.calendarDay,\n day_button: styles.calendarDayButton,\n selected: styles.calendarSelected,\n today: styles.calendarToday,\n outside: styles.calendarOutside,\n disabled: styles.calendarDisabled,\n hidden: styles.calendarHidden,\n nav: styles.calendarNav,\n button_previous: styles.calendarNavButton,\n button_next: styles.calendarNavButton,\n month_caption: styles.calendarMonthCaption,\n caption_label: styles.calendarCaptionLabel,\n chevron: styles.calendarChevron,\n};\n\nexport interface DateCalendarProps {\n dateSelected: Date | undefined;\n onSelect: (date: Date | undefined) => void;\n min?: Date;\n max?: Date;\n footer?: React.ReactNode;\n}\n\nexport default function DateCalendar({\n dateSelected,\n onSelect,\n min,\n max,\n footer,\n}: DateCalendarProps): React.ReactElement {\n const disabled = useMemo((): Matcher[] => {\n const matchers: Matcher[] = [];\n if (min != null) {\n const before: DateBefore = { before: min };\n matchers.push(before);\n }\n if (max != null) {\n const after: DateAfter = { after: max };\n matchers.push(after);\n }\n return matchers;\n }, [min, max]);\n\n return (\n <DayPicker\n mode=\"single\"\n selected={dateSelected}\n onSelect={onSelect}\n disabled={disabled}\n defaultMonth={dateSelected}\n classNames={CLASS_NAMES}\n footer={footer}\n />\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AAOtC,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,OAAOC,MAAM,MAAM,2BAA2B;AAE9C,MAAMC,WAAgC,GAAG;EACvCC,IAAI,EAAEF,MAAM,CAACG,QAAQ;EACrBC,MAAM,EAAEJ,MAAM,CAACK,cAAc;EAC7BC,UAAU,EAAEN,MAAM,CAACO,iBAAiB;EACpCC,OAAO,EAAER,MAAM,CAACS,eAAe;EAC/BC,GAAG,EAAEV,MAAM,CAACW,WAAW;EACvBC,UAAU,EAAEZ,MAAM,CAACa,iBAAiB;EACpCC,QAAQ,EAAEd,MAAM,CAACe,gBAAgB;EACjCC,KAAK,EAAEhB,MAAM,CAACiB,aAAa;EAC3BC,OAAO,EAAElB,MAAM,CAACmB,eAAe;EAC/BC,QAAQ,EAAEpB,MAAM,CAACqB,gBAAgB;EACjCC,MAAM,EAAEtB,MAAM,CAACuB,cAAc;EAC7BC,GAAG,EAAExB,MAAM,CAACyB,WAAW;EACvBC,eAAe,EAAE1B,MAAM,CAAC2B,iBAAiB;EACzCC,WAAW,EAAE5B,MAAM,CAAC2B,iBAAiB;EACrCE,aAAa,EAAE7B,MAAM,CAAC8B,oBAAoB;EAC1CC,aAAa,EAAE/B,MAAM,CAACgC,oBAAoB;EAC1CC,OAAO,EAAEjC,MAAM,CAACkC;AAClB,CAAC;AAUD,eAAe,SAASC,YAAYA,CAAC;EACnCC,YAAY;EACZC,QAAQ;EACRC,GAAG;EACHC,GAAG;EACHC;AACiB,CAAC,EAAsB;EACxC,MAAMpB,QAAQ,GAAGtB,OAAO,CAAC,MAAiB;IACxC,MAAM2C,QAAmB,GAAG,EAAE;IAC9B,IAAIH,GAAG,IAAI,IAAI,EAAE;MAEfG,QAAQ,CAACC,IAAI,CADc;QAAEC,MAAM,EAAEL;MAAI,CACrB,CAAC;IACvB;IACA,IAAIC,GAAG,IAAI,IAAI,EAAE;MAEfE,QAAQ,CAACC,IAAI,CADY;QAAEE,KAAK,EAAEL;MAAI,CACnB,CAAC;IACtB;IACA,OAAOE,QAAQ;EACjB,CAAC,EAAE,CAACH,GAAG,EAAEC,GAAG,CAAC,CAAC;EAEd,oBACE1C,KAAA,CAAAgD,aAAA,CAAC9C,SAAS;IACR+C,IAAI,EAAC,QAAQ;IACbhC,QAAQ,EAAEsB,YAAa;IACvBC,QAAQ,EAAEA,QAAS;IACnBjB,QAAQ,EAAEA,QAAS;IACnB2B,YAAY,EAAEX,YAAa;IAC3BY,UAAU,EAAE/C,WAAY;IACxBuC,MAAM,EAAEA;EAAO,CAChB,CAAC;AAEN","ignoreList":[]}
1
+ {"version":3,"file":"DateCalendar.js","names":["React","useCallback","useMemo","DayPicker","styles","CLASS_NAMES","root","calendar","months","calendarMonths","table","calendarMonthGrid","head_cell","calendarWeekday","cell","calendarDay","day","calendarDayButton","day_selected","calendarSelected","day_today","calendarToday","day_outside","calendarOutside","day_disabled","calendarDisabled","day_hidden","calendarHidden","nav","calendarNav","nav_button_previous","calendarNavButton","nav_button_next","caption","calendarMonthCaption","caption_label","calendarCaptionLabel","nav_icon","calendarChevron","DateCalendar","dateSelected","onSelect","min","max","footer","disabled","matchers","push","before","after","handleSelect","createElement","mode","selected","defaultMonth","classNames"],"sources":["DateCalendar.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useCallback, useMemo } from \"react\";\nimport type {\n ClassNames,\n DateAfter,\n DateBefore,\n Matcher,\n SelectSingleEventHandler,\n} from \"react-day-picker\";\nimport { DayPicker } from \"react-day-picker\";\nimport styles from \"./DateCalendar.module.css\";\n\nconst CLASS_NAMES: ClassNames = {\n root: styles.calendar,\n months: styles.calendarMonths,\n table: styles.calendarMonthGrid,\n head_cell: styles.calendarWeekday,\n cell: styles.calendarDay,\n day: styles.calendarDayButton,\n day_selected: styles.calendarSelected,\n day_today: styles.calendarToday,\n day_outside: styles.calendarOutside,\n day_disabled: styles.calendarDisabled,\n day_hidden: styles.calendarHidden,\n nav: styles.calendarNav,\n nav_button_previous: styles.calendarNavButton,\n nav_button_next: styles.calendarNavButton,\n caption: styles.calendarMonthCaption,\n caption_label: styles.calendarCaptionLabel,\n nav_icon: styles.calendarChevron,\n};\n\nexport interface DateCalendarProps {\n dateSelected: Date | undefined;\n onSelect: (date: Date | undefined) => void;\n min?: Date;\n max?: Date;\n footer?: React.ReactNode;\n}\n\nexport default function DateCalendar({\n dateSelected,\n onSelect,\n min,\n max,\n footer,\n}: DateCalendarProps): React.ReactElement {\n const disabled = useMemo((): Matcher[] => {\n const matchers: Matcher[] = [];\n if (min != null) {\n const before: DateBefore = { before: min };\n matchers.push(before);\n }\n if (max != null) {\n const after: DateAfter = { after: max };\n matchers.push(after);\n }\n return matchers;\n }, [min, max]);\n\n const handleSelect = useCallback<SelectSingleEventHandler>(\n (day) => {\n onSelect(day);\n },\n [onSelect],\n );\n\n return (\n <DayPicker\n mode=\"single\"\n selected={dateSelected}\n onSelect={handleSelect}\n disabled={disabled}\n defaultMonth={dateSelected}\n classNames={CLASS_NAMES}\n footer={footer}\n />\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAQnD,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,OAAOC,MAAM,MAAM,2BAA2B;AAE9C,MAAMC,WAAuB,GAAG;EAC9BC,IAAI,EAAEF,MAAM,CAACG,QAAQ;EACrBC,MAAM,EAAEJ,MAAM,CAACK,cAAc;EAC7BC,KAAK,EAAEN,MAAM,CAACO,iBAAiB;EAC/BC,SAAS,EAAER,MAAM,CAACS,eAAe;EACjCC,IAAI,EAAEV,MAAM,CAACW,WAAW;EACxBC,GAAG,EAAEZ,MAAM,CAACa,iBAAiB;EAC7BC,YAAY,EAAEd,MAAM,CAACe,gBAAgB;EACrCC,SAAS,EAAEhB,MAAM,CAACiB,aAAa;EAC/BC,WAAW,EAAElB,MAAM,CAACmB,eAAe;EACnCC,YAAY,EAAEpB,MAAM,CAACqB,gBAAgB;EACrCC,UAAU,EAAEtB,MAAM,CAACuB,cAAc;EACjCC,GAAG,EAAExB,MAAM,CAACyB,WAAW;EACvBC,mBAAmB,EAAE1B,MAAM,CAAC2B,iBAAiB;EAC7CC,eAAe,EAAE5B,MAAM,CAAC2B,iBAAiB;EACzCE,OAAO,EAAE7B,MAAM,CAAC8B,oBAAoB;EACpCC,aAAa,EAAE/B,MAAM,CAACgC,oBAAoB;EAC1CC,QAAQ,EAAEjC,MAAM,CAACkC;AACnB,CAAC;AAUD,eAAe,SAASC,YAAYA,CAAC;EACnCC,YAAY;EACZC,QAAQ;EACRC,GAAG;EACHC,GAAG;EACHC;AACiB,CAAC,EAAsB;EACxC,MAAMC,QAAQ,GAAG3C,OAAO,CAAC,MAAiB;IACxC,MAAM4C,QAAmB,GAAG,EAAE;IAC9B,IAAIJ,GAAG,IAAI,IAAI,EAAE;MAEfI,QAAQ,CAACC,IAAI,CADc;QAAEC,MAAM,EAAEN;MAAI,CACrB,CAAC;IACvB;IACA,IAAIC,GAAG,IAAI,IAAI,EAAE;MAEfG,QAAQ,CAACC,IAAI,CADY;QAAEE,KAAK,EAAEN;MAAI,CACnB,CAAC;IACtB;IACA,OAAOG,QAAQ;EACjB,CAAC,EAAE,CAACJ,GAAG,EAAEC,GAAG,CAAC,CAAC;EAEd,MAAMO,YAAY,GAAGjD,WAAW,CAC7Be,GAAG,IAAK;IACPyB,QAAQ,CAACzB,GAAG,CAAC;EACf,CAAC,EACD,CAACyB,QAAQ,CACX,CAAC;EAED,oBACEzC,KAAA,CAAAmD,aAAA,CAAChD,SAAS;IACRiD,IAAI,EAAC,QAAQ;IACbC,QAAQ,EAAEb,YAAa;IACvBC,QAAQ,EAAES,YAAa;IACvBL,QAAQ,EAAEA,QAAS;IACnBS,YAAY,EAAEd,YAAa;IAC3Be,UAAU,EAAElD,WAAY;IACxBuC,MAAM,EAAEA;EAAO,CAChB,CAAC;AAEN","ignoreList":[]}
@@ -51,7 +51,7 @@
51
51
  }
52
52
  }
53
53
 
54
- .calendarSelected .calendarDayButton {
54
+ .calendarDayButton.calendarSelected {
55
55
  background: var(--osdk-datetime-calendar-selected-bg);
56
56
  color: var(--osdk-datetime-calendar-selected-color);
57
57
 
@@ -60,15 +60,15 @@
60
60
  }
61
61
  }
62
62
 
63
- .calendarToday .calendarDayButton {
63
+ .calendarDayButton.calendarToday {
64
64
  font-weight: var(--osdk-datetime-calendar-today-font-weight);
65
65
  }
66
66
 
67
- .calendarOutside .calendarDayButton {
67
+ .calendarDayButton.calendarOutside {
68
68
  color: var(--osdk-datetime-calendar-outside-color);
69
69
  }
70
70
 
71
- .calendarDisabled .calendarDayButton {
71
+ .calendarDayButton.calendarDisabled {
72
72
  color: var(--osdk-datetime-calendar-disabled-color);
73
73
  cursor: default;
74
74
 
@@ -17,7 +17,7 @@
17
17
  import { Button } from "@base-ui/react/button";
18
18
  import { Cross } from "@blueprintjs/icons";
19
19
  import classnames from "classnames";
20
- import React, { memo, useCallback, useRef } from "react";
20
+ import React, { memo, useCallback, useMemo, useRef } from "react";
21
21
  import styles from "./FilePickerField.module.css.js";
22
22
  export const FilePickerField = /*#__PURE__*/memo(function ({
23
23
  id,
@@ -60,9 +60,9 @@ export const FilePickerField = /*#__PURE__*/memo(function ({
60
60
  openFileDialog();
61
61
  }
62
62
  }, [openFileDialog]);
63
- const displayText = getDisplayText(value);
63
+ const displayText = useMemo(() => getDisplayText(value), [value]);
64
64
  const hasValue = displayText != null;
65
- const acceptString = normalizeAccept(accept);
65
+ const acceptString = useMemo(() => normalizeAccept(accept), [accept]);
66
66
  return (
67
67
  /*#__PURE__*/
68
68
  // The entire component is a single tab stop (tabIndex={0}).
@@ -75,6 +75,7 @@ export const FilePickerField = /*#__PURE__*/memo(function ({
75
75
  className: styles.osdkFilePickerTrigger,
76
76
  tabIndex: 0,
77
77
  role: "button",
78
+ "aria-label": "Choose file",
78
79
  onClick: openFileDialog,
79
80
  onKeyDown: handleKeyDown
80
81
  }, /*#__PURE__*/React.createElement("input", {
@@ -1 +1 @@
1
- {"version":3,"file":"FilePickerField.js","names":["Button","Cross","classnames","React","memo","useCallback","useRef","styles","FilePickerField","id","value","onChange","isMulti","accept","maxSize","_maxSize","text","buttonText","inputRef","openFileDialog","current","click","handleInputChange","event","files","target","length","Array","from","handleClear","stopPropagation","preventDefault","handleKeyDown","key","displayText","getDisplayText","hasValue","acceptString","normalizeAccept","createElement","className","osdkFilePickerTrigger","tabIndex","role","onClick","onKeyDown","ref","type","osdkFilePickerHiddenInput","multiple","osdkFilePickerText","osdkFilePickerPlaceholder","osdkFilePickerClear","osdkFilePickerBrowse","undefined","isArray","join","map","f","name"],"sources":["FilePickerField.tsx"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport { Cross } from \"@blueprintjs/icons\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useRef } from \"react\";\nimport type { FilePickerProps } from \"../FormFieldApi.js\";\nimport styles from \"./FilePickerField.module.css\";\n\nexport const FilePickerField: React.FC<FilePickerProps> = memo(\n function FilePickerFieldFn({\n id,\n value,\n onChange,\n isMulti,\n accept,\n // TODO: implement maxSize validation in a follow-up\n maxSize: _maxSize,\n text = \"No file chosen\",\n buttonText = \"Browse\",\n }): React.ReactElement {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const openFileDialog = useCallback(() => {\n inputRef.current?.click();\n }, []);\n\n const handleInputChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files;\n if (files == null || files.length === 0) {\n onChange?.(null);\n return;\n }\n\n if (isMulti) {\n onChange?.(Array.from(files));\n } else {\n onChange?.(files[0] ?? null);\n }\n },\n [onChange, isMulti],\n );\n\n const handleClear = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation();\n event.preventDefault();\n onChange?.(null);\n if (inputRef.current != null) {\n inputRef.current.value = \"\";\n }\n },\n [onChange],\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openFileDialog();\n }\n },\n [openFileDialog],\n );\n\n const displayText = getDisplayText(value);\n const hasValue = displayText != null;\n const acceptString = normalizeAccept(accept);\n return (\n // The entire component is a single tab stop (tabIndex={0}).\n // Text and Browse are <span>s (not buttons) so they don't create\n // extra tab stops — clicks on them bubble up to the container's onClick.\n // The clear button is the only inner interactive element and gets its\n // own tab stop so keyboard users can clear the selection.\n <div\n id={id}\n className={styles.osdkFilePickerTrigger}\n tabIndex={0}\n role=\"button\"\n onClick={openFileDialog}\n onKeyDown={handleKeyDown}\n >\n <input\n ref={inputRef}\n type=\"file\"\n className={styles.osdkFilePickerHiddenInput}\n multiple={isMulti}\n accept={acceptString}\n onChange={handleInputChange}\n aria-hidden=\"true\"\n tabIndex={-1}\n />\n <span\n className={classnames(\n styles.osdkFilePickerText,\n !hasValue && styles.osdkFilePickerPlaceholder,\n )}\n >\n {displayText ?? text}\n </span>\n {hasValue && (\n // stopPropagation + preventDefault prevent the click from\n // bubbling to the container's onClick which opens the file dialog.\n <Button\n className={styles.osdkFilePickerClear}\n onClick={handleClear}\n aria-label=\"Clear selection\"\n >\n <Cross />\n </Button>\n )}\n <span className={styles.osdkFilePickerBrowse}>{buttonText}</span>\n </div>\n );\n },\n);\n\nfunction normalizeAccept(\n accept: string | string[] | undefined,\n): string | undefined {\n if (accept == null) {\n return undefined;\n }\n return Array.isArray(accept) ? accept.join(\",\") : accept;\n}\n\nfunction getDisplayText(value: File | File[] | null): string | undefined {\n if (value == null) {\n return undefined;\n }\n if (Array.isArray(value)) {\n return value.map((f) => f.name).join(\", \");\n }\n return value.name;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FilePickerField.js","names":["Button","Cross","classnames","React","memo","useCallback","useMemo","useRef","styles","FilePickerField","id","value","onChange","isMulti","accept","maxSize","_maxSize","text","buttonText","inputRef","openFileDialog","current","click","handleInputChange","event","files","target","length","Array","from","handleClear","stopPropagation","preventDefault","handleKeyDown","key","displayText","getDisplayText","hasValue","acceptString","normalizeAccept","createElement","className","osdkFilePickerTrigger","tabIndex","role","onClick","onKeyDown","ref","type","osdkFilePickerHiddenInput","multiple","osdkFilePickerText","osdkFilePickerPlaceholder","osdkFilePickerClear","osdkFilePickerBrowse","undefined","isArray","join","map","f","name"],"sources":["FilePickerField.tsx"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport { Cross } from \"@blueprintjs/icons\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo, useRef } from \"react\";\nimport type { FilePickerProps } from \"../FormFieldApi.js\";\nimport styles from \"./FilePickerField.module.css\";\n\nexport const FilePickerField: React.FC<FilePickerProps> = memo(\n function FilePickerFieldFn({\n id,\n value,\n onChange,\n isMulti,\n accept,\n // TODO: implement maxSize validation in a follow-up\n maxSize: _maxSize,\n text = \"No file chosen\",\n buttonText = \"Browse\",\n }): React.ReactElement {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const openFileDialog = useCallback(() => {\n inputRef.current?.click();\n }, []);\n\n const handleInputChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files;\n if (files == null || files.length === 0) {\n onChange?.(null);\n return;\n }\n\n if (isMulti) {\n onChange?.(Array.from(files));\n } else {\n onChange?.(files[0] ?? null);\n }\n },\n [onChange, isMulti],\n );\n\n const handleClear = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation();\n event.preventDefault();\n onChange?.(null);\n if (inputRef.current != null) {\n inputRef.current.value = \"\";\n }\n },\n [onChange],\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openFileDialog();\n }\n },\n [openFileDialog],\n );\n\n const displayText = useMemo(() => getDisplayText(value), [value]);\n const hasValue = displayText != null;\n const acceptString = useMemo(\n () => normalizeAccept(accept),\n [accept],\n );\n return (\n // The entire component is a single tab stop (tabIndex={0}).\n // Text and Browse are <span>s (not buttons) so they don't create\n // extra tab stops — clicks on them bubble up to the container's onClick.\n // The clear button is the only inner interactive element and gets its\n // own tab stop so keyboard users can clear the selection.\n <div\n id={id}\n className={styles.osdkFilePickerTrigger}\n tabIndex={0}\n role=\"button\"\n aria-label=\"Choose file\"\n onClick={openFileDialog}\n onKeyDown={handleKeyDown}\n >\n <input\n ref={inputRef}\n type=\"file\"\n className={styles.osdkFilePickerHiddenInput}\n multiple={isMulti}\n accept={acceptString}\n onChange={handleInputChange}\n aria-hidden=\"true\"\n tabIndex={-1}\n />\n <span\n className={classnames(\n styles.osdkFilePickerText,\n !hasValue && styles.osdkFilePickerPlaceholder,\n )}\n >\n {displayText ?? text}\n </span>\n {hasValue && (\n // stopPropagation + preventDefault prevent the click from\n // bubbling to the container's onClick which opens the file dialog.\n <Button\n className={styles.osdkFilePickerClear}\n onClick={handleClear}\n aria-label=\"Clear selection\"\n >\n <Cross />\n </Button>\n )}\n <span className={styles.osdkFilePickerBrowse}>{buttonText}</span>\n </div>\n );\n },\n);\n\nfunction normalizeAccept(\n accept: string | string[] | undefined,\n): string | undefined {\n if (accept == null) {\n return undefined;\n }\n return Array.isArray(accept) ? accept.join(\",\") : accept;\n}\n\nfunction getDisplayText(value: File | File[] | null): string | undefined {\n if (value == null) {\n return undefined;\n }\n if (Array.isArray(value)) {\n return value.map((f) => f.name).join(\", \");\n }\n return value.name;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -19,7 +19,7 @@
19
19
  display: flex;
20
20
  align-items: center;
21
21
  width: 100%;
22
- height: var(--osdk-file-picker-trigger-min-height);
22
+ height: var(--osdk-file-picker-trigger-height);
23
23
  border: var(--osdk-file-picker-trigger-border);
24
24
  border-radius: var(--osdk-file-picker-trigger-border-radius);
25
25
  background: var(--osdk-file-picker-trigger-bg);
@@ -227,7 +227,7 @@
227
227
  }
228
228
  }
229
229
 
230
- .DateCalendar-module__calendarSelected___I-1tOp-J .DateCalendar-module__calendarDayButton___SoPcp9U0 {
230
+ .DateCalendar-module__calendarDayButton___SoPcp9U0.DateCalendar-module__calendarSelected___I-1tOp-J {
231
231
  background: var(--osdk-datetime-calendar-selected-bg);
232
232
  color: var(--osdk-datetime-calendar-selected-color);
233
233
 
@@ -236,15 +236,15 @@
236
236
  }
237
237
  }
238
238
 
239
- .DateCalendar-module__calendarToday___laVEjkhA .DateCalendar-module__calendarDayButton___SoPcp9U0 {
239
+ .DateCalendar-module__calendarDayButton___SoPcp9U0.DateCalendar-module__calendarToday___laVEjkhA {
240
240
  font-weight: var(--osdk-datetime-calendar-today-font-weight);
241
241
  }
242
242
 
243
- .DateCalendar-module__calendarOutside___uEAuOUjF .DateCalendar-module__calendarDayButton___SoPcp9U0 {
243
+ .DateCalendar-module__calendarDayButton___SoPcp9U0.DateCalendar-module__calendarOutside___uEAuOUjF {
244
244
  color: var(--osdk-datetime-calendar-outside-color);
245
245
  }
246
246
 
247
- .DateCalendar-module__calendarDisabled___4FOd5zD2 .DateCalendar-module__calendarDayButton___SoPcp9U0 {
247
+ .DateCalendar-module__calendarDayButton___SoPcp9U0.DateCalendar-module__calendarDisabled___4FOd5zD2 {
248
248
  color: var(--osdk-datetime-calendar-disabled-color);
249
249
  cursor: default;
250
250
 
@@ -403,7 +403,7 @@
403
403
  display: flex;
404
404
  align-items: center;
405
405
  width: 100%;
406
- height: var(--osdk-file-picker-trigger-min-height);
406
+ height: var(--osdk-file-picker-trigger-height);
407
407
  border: var(--osdk-file-picker-trigger-border);
408
408
  border-radius: var(--osdk-file-picker-trigger-border-radius);
409
409
  background: var(--osdk-file-picker-trigger-bg);
@@ -0,0 +1,70 @@
1
+ 'use strict';
2
+
3
+ var chunkA57T2BLC_cjs = require('./chunk-A57T2BLC.cjs');
4
+ require('./chunk-HMQTYQEX.cjs');
5
+ var React = require('react');
6
+ var reactDayPicker = require('react-day-picker');
7
+
8
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
+
10
+ var React__default = /*#__PURE__*/_interopDefault(React);
11
+
12
+ var CLASS_NAMES = {
13
+ root: chunkA57T2BLC_cjs.DateCalendar_default.calendar,
14
+ months: chunkA57T2BLC_cjs.DateCalendar_default.calendarMonths,
15
+ table: chunkA57T2BLC_cjs.DateCalendar_default.calendarMonthGrid,
16
+ head_cell: chunkA57T2BLC_cjs.DateCalendar_default.calendarWeekday,
17
+ cell: chunkA57T2BLC_cjs.DateCalendar_default.calendarDay,
18
+ day: chunkA57T2BLC_cjs.DateCalendar_default.calendarDayButton,
19
+ day_selected: chunkA57T2BLC_cjs.DateCalendar_default.calendarSelected,
20
+ day_today: chunkA57T2BLC_cjs.DateCalendar_default.calendarToday,
21
+ day_outside: chunkA57T2BLC_cjs.DateCalendar_default.calendarOutside,
22
+ day_disabled: chunkA57T2BLC_cjs.DateCalendar_default.calendarDisabled,
23
+ day_hidden: chunkA57T2BLC_cjs.DateCalendar_default.calendarHidden,
24
+ nav: chunkA57T2BLC_cjs.DateCalendar_default.calendarNav,
25
+ nav_button_previous: chunkA57T2BLC_cjs.DateCalendar_default.calendarNavButton,
26
+ nav_button_next: chunkA57T2BLC_cjs.DateCalendar_default.calendarNavButton,
27
+ caption: chunkA57T2BLC_cjs.DateCalendar_default.calendarMonthCaption,
28
+ caption_label: chunkA57T2BLC_cjs.DateCalendar_default.calendarCaptionLabel,
29
+ nav_icon: chunkA57T2BLC_cjs.DateCalendar_default.calendarChevron
30
+ };
31
+ function DateCalendar({
32
+ dateSelected,
33
+ onSelect,
34
+ min,
35
+ max,
36
+ footer
37
+ }) {
38
+ const disabled = React.useMemo(() => {
39
+ const matchers = [];
40
+ if (min != null) {
41
+ const before = {
42
+ before: min
43
+ };
44
+ matchers.push(before);
45
+ }
46
+ if (max != null) {
47
+ const after = {
48
+ after: max
49
+ };
50
+ matchers.push(after);
51
+ }
52
+ return matchers;
53
+ }, [min, max]);
54
+ const handleSelect = React.useCallback((day) => {
55
+ onSelect(day);
56
+ }, [onSelect]);
57
+ return /* @__PURE__ */ React__default.default.createElement(reactDayPicker.DayPicker, {
58
+ mode: "single",
59
+ selected: dateSelected,
60
+ onSelect: handleSelect,
61
+ disabled,
62
+ defaultMonth: dateSelected,
63
+ classNames: CLASS_NAMES,
64
+ footer
65
+ });
66
+ }
67
+
68
+ module.exports = DateCalendar;
69
+ //# sourceMappingURL=DateCalendar-D4APPCSE.cjs.map
70
+ //# sourceMappingURL=DateCalendar-D4APPCSE.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/action-form/fields/DateCalendar.tsx"],"names":["DateCalendar_default","useMemo","useCallback","React","DayPicker"],"mappings":";;;;;;;;;;;AAmBA,IAAM,WAAc,GAAA;AAAA,EAClB,MAAMA,sCAAO,CAAA,QAAA;AAAA,EACb,QAAQA,sCAAO,CAAA,cAAA;AAAA,EACf,OAAOA,sCAAO,CAAA,iBAAA;AAAA,EACd,WAAWA,sCAAO,CAAA,eAAA;AAAA,EAClB,MAAMA,sCAAO,CAAA,WAAA;AAAA,EACb,KAAKA,sCAAO,CAAA,iBAAA;AAAA,EACZ,cAAcA,sCAAO,CAAA,gBAAA;AAAA,EACrB,WAAWA,sCAAO,CAAA,aAAA;AAAA,EAClB,aAAaA,sCAAO,CAAA,eAAA;AAAA,EACpB,cAAcA,sCAAO,CAAA,gBAAA;AAAA,EACrB,YAAYA,sCAAO,CAAA,cAAA;AAAA,EACnB,KAAKA,sCAAO,CAAA,WAAA;AAAA,EACZ,qBAAqBA,sCAAO,CAAA,iBAAA;AAAA,EAC5B,iBAAiBA,sCAAO,CAAA,iBAAA;AAAA,EACxB,SAASA,sCAAO,CAAA,oBAAA;AAAA,EAChB,eAAeA,sCAAO,CAAA,oBAAA;AAAA,EACtB,UAAUA,sCAAO,CAAA;AACnB,CAAA;AACe,SAAR,YAA8B,CAAA;AAAA,EACnC,YAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF,CAAG,EAAA;AACD,EAAM,MAAA,QAAA,GAAWC,cAAQ,MAAM;AAC7B,IAAA,MAAM,WAAW,EAAC;AAClB,IAAA,IAAI,OAAO,IAAM,EAAA;AACf,MAAA,MAAM,MAAS,GAAA;AAAA,QACb,MAAQ,EAAA;AAAA,OACV;AACA,MAAA,QAAA,CAAS,KAAK,MAAM,CAAA;AAAA;AAEtB,IAAA,IAAI,OAAO,IAAM,EAAA;AACf,MAAA,MAAM,KAAQ,GAAA;AAAA,QACZ,KAAO,EAAA;AAAA,OACT;AACA,MAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA;AAErB,IAAO,OAAA,QAAA;AAAA,GACN,EAAA,CAAC,GAAK,EAAA,GAAG,CAAC,CAAA;AACb,EAAM,MAAA,YAAA,GAAeC,kBAAY,CAAO,GAAA,KAAA;AACtC,IAAA,QAAA,CAAS,GAAG,CAAA;AAAA,GACd,EAAG,CAAC,QAAQ,CAAC,CAAA;AACb,EAAoB,uBAAAC,sBAAA,CAAM,cAAcC,wBAAW,EAAA;AAAA,IACjD,IAAM,EAAA,QAAA;AAAA,IACN,QAAU,EAAA,YAAA;AAAA,IACV,QAAU,EAAA,YAAA;AAAA,IACV,QAAA;AAAA,IACA,YAAc,EAAA,YAAA;AAAA,IACd,UAAY,EAAA,WAAA;AAAA,IACZ;AAAA,GACD,CAAA;AACH","file":"DateCalendar-D4APPCSE.cjs","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useCallback, useMemo } from \"react\";\nimport { DayPicker } from \"react-day-picker\";\nimport styles from \"./DateCalendar.module.css\";\nconst CLASS_NAMES = {\n root: styles.calendar,\n months: styles.calendarMonths,\n table: styles.calendarMonthGrid,\n head_cell: styles.calendarWeekday,\n cell: styles.calendarDay,\n day: styles.calendarDayButton,\n day_selected: styles.calendarSelected,\n day_today: styles.calendarToday,\n day_outside: styles.calendarOutside,\n day_disabled: styles.calendarDisabled,\n day_hidden: styles.calendarHidden,\n nav: styles.calendarNav,\n nav_button_previous: styles.calendarNavButton,\n nav_button_next: styles.calendarNavButton,\n caption: styles.calendarMonthCaption,\n caption_label: styles.calendarCaptionLabel,\n nav_icon: styles.calendarChevron\n};\nexport default function DateCalendar({\n dateSelected,\n onSelect,\n min,\n max,\n footer\n}) {\n const disabled = useMemo(() => {\n const matchers = [];\n if (min != null) {\n const before = {\n before: min\n };\n matchers.push(before);\n }\n if (max != null) {\n const after = {\n after: max\n };\n matchers.push(after);\n }\n return matchers;\n }, [min, max]);\n const handleSelect = useCallback(day => {\n onSelect(day);\n }, [onSelect]);\n return /*#__PURE__*/React.createElement(DayPicker, {\n mode: \"single\",\n selected: dateSelected,\n onSelect: handleSelect,\n disabled: disabled,\n defaultMonth: dateSelected,\n classNames: CLASS_NAMES,\n footer: footer\n });\n}"]}
@@ -42,20 +42,20 @@
42
42
  background: var(--osdk-datetime-calendar-day-active-bg);
43
43
  }
44
44
  }
45
- .calendarSelected .calendarDayButton {
45
+ .calendarDayButton.calendarSelected {
46
46
  background: var(--osdk-datetime-calendar-selected-bg);
47
47
  color: var(--osdk-datetime-calendar-selected-color);
48
48
  &:hover {
49
49
  background: var(--osdk-datetime-calendar-selected-hover-bg);
50
50
  }
51
51
  }
52
- .calendarToday .calendarDayButton {
52
+ .calendarDayButton.calendarToday {
53
53
  font-weight: var(--osdk-datetime-calendar-today-font-weight);
54
54
  }
55
- .calendarOutside .calendarDayButton {
55
+ .calendarDayButton.calendarOutside {
56
56
  color: var(--osdk-datetime-calendar-outside-color);
57
57
  }
58
- .calendarDisabled .calendarDayButton {
58
+ .calendarDayButton.calendarDisabled {
59
59
  color: var(--osdk-datetime-calendar-disabled-color);
60
60
  cursor: default;
61
61
  &:hover {
@@ -110,4 +110,4 @@
110
110
  width: var(--osdk-datetime-calendar-fallback-width);
111
111
  height: var(--osdk-datetime-calendar-fallback-height);
112
112
  }
113
- /*# sourceMappingURL=DateCalendar-QWGFKD6J.css.map */
113
+ /*# sourceMappingURL=DateCalendar-NF65B4VD.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/action-form/fields/DateCalendar.module.css"],"sourcesContent":["/* DateCalendar — DayPicker classNames */\n\n.calendar {\n position: relative;\n width: 100%;\n font-family: var(--osdk-datetime-calendar-font-family);\n font-size: var(--osdk-datetime-calendar-font-size);\n}\n\n.calendarMonths {\n display: flex;\n}\n\n.calendarMonthGrid {\n width: 100%;\n border-collapse: collapse;\n}\n\n.calendarWeekday {\n padding: var(--osdk-datetime-calendar-gap);\n font-size: var(--osdk-datetime-calendar-weekday-font-size);\n color: var(--osdk-datetime-calendar-weekday-color);\n text-align: center;\n width: var(--osdk-datetime-calendar-cell-size);\n}\n\n.calendarDay {\n padding: var(--osdk-datetime-calendar-gap);\n text-align: center;\n}\n\n.calendarDayButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--osdk-datetime-calendar-cell-size);\n height: var(--osdk-datetime-calendar-cell-size);\n border: none;\n background: transparent;\n cursor: pointer;\n border-radius: var(--osdk-datetime-calendar-day-border-radius);\n font: inherit;\n color: inherit;\n\n &:hover {\n background: var(--osdk-datetime-calendar-day-hover-bg);\n }\n\n &:active {\n background: var(--osdk-datetime-calendar-day-active-bg);\n }\n}\n\n.calendarDayButton.calendarSelected {\n background: var(--osdk-datetime-calendar-selected-bg);\n color: var(--osdk-datetime-calendar-selected-color);\n\n &:hover {\n background: var(--osdk-datetime-calendar-selected-hover-bg);\n }\n}\n\n.calendarDayButton.calendarToday {\n font-weight: var(--osdk-datetime-calendar-today-font-weight);\n}\n\n.calendarDayButton.calendarOutside {\n color: var(--osdk-datetime-calendar-outside-color);\n}\n\n.calendarDayButton.calendarDisabled {\n color: var(--osdk-datetime-calendar-disabled-color);\n cursor: default;\n\n &:hover {\n background: transparent;\n }\n}\n\n.calendarHidden {\n visibility: hidden;\n}\n\n/* Calendar navigation */\n.calendarNav {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n pointer-events: none;\n}\n\n.calendarNavButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--osdk-datetime-calendar-nav-button-size);\n height: var(--osdk-datetime-calendar-nav-button-size);\n border: none;\n background: transparent;\n cursor: pointer;\n border-radius: var(--osdk-datetime-calendar-nav-button-border-radius);\n padding: 0;\n pointer-events: auto;\n\n &:hover {\n background: var(--osdk-datetime-calendar-nav-button-hover-bg);\n }\n}\n\n.calendarMonthCaption {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: var(--osdk-datetime-calendar-nav-button-size);\n}\n\n.calendarCaptionLabel {\n font-size: var(--osdk-datetime-calendar-caption-font-size);\n font-weight: var(--osdk-datetime-calendar-caption-font-weight);\n}\n\n.calendarChevron {\n width: var(--osdk-datetime-calendar-chevron-size);\n height: var(--osdk-datetime-calendar-chevron-size);\n fill: currentColor;\n}\n\n/* Calendar fallback / loading */\n.calendarFallback {\n width: var(--osdk-datetime-calendar-fallback-width);\n height: var(--osdk-datetime-calendar-fallback-height);\n}\n"],"mappings":";AAEA,CAAC;AACC,YAAU;AACV,SAAO;AACP,eAAa,IAAI;AACjB,aAAW,IAAI;AACjB;AAEA,CAAC;AACC,WAAS;AACX;AAEA,CAAC;AACC,SAAO;AACP,mBAAiB;AACnB;AAEA,CAAC;AACC,WAAS,IAAI;AACb,aAAW,IAAI;AACf,SAAO,IAAI;AACX,cAAY;AACZ,SAAO,IAAI;AACb;AAEA,CAAC;AACC,WAAS,IAAI;AACb,cAAY;AACd;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,SAAO,IAAI;AACX,UAAQ,IAAI;AACZ,UAAQ;AACR,cAAY;AACZ,UAAQ;AACR,iBAAe,IAAI;AACnB,QAAM;AACN,SAAO;AAEP,GAAC;AACC,gBAAY,IAAI;AAClB;AAEA,GAAC;AACC,gBAAY,IAAI;AAClB;AACF;AAEA,CAtBC,iBAsBiB,CAAC;AACjB,cAAY,IAAI;AAChB,SAAO,IAAI;AAEX,GAAC;AACC,gBAAY,IAAI;AAClB;AACF;AAEA,CA/BC,iBA+BiB,CAAC;AACjB,eAAa,IAAI;AACnB;AAEA,CAnCC,iBAmCiB,CAAC;AACjB,SAAO,IAAI;AACb;AAEA,CAvCC,iBAuCiB,CAAC;AACjB,SAAO,IAAI;AACX,UAAQ;AAER,GAAC;AACC,gBAAY;AACd;AACF;AAEA,CAAC;AACC,cAAY;AACd;AAGA,CAAC;AACC,YAAU;AACV,OAAK;AACL,QAAM;AACN,SAAO;AACP,WAAS;AACT,mBAAiB;AACjB,eAAa;AACb,kBAAgB;AAClB;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,SAAO,IAAI;AACX,UAAQ,IAAI;AACZ,UAAQ;AACR,cAAY;AACZ,UAAQ;AACR,iBAAe,IAAI;AACnB,WAAS;AACT,kBAAgB;AAEhB,GAAC;AACC,gBAAY,IAAI;AAClB;AACF;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,cAAY,IAAI;AAClB;AAEA,CAAC;AACC,aAAW,IAAI;AACf,eAAa,IAAI;AACnB;AAEA,CAAC;AACC,SAAO,IAAI;AACX,UAAQ,IAAI;AACZ,QAAM;AACR;AAGA,CAAC;AACC,SAAO,IAAI;AACX,UAAQ,IAAI;AACd;","names":[]}
@@ -4,5 +4,5 @@
4
4
  var DateCalendar_default = {};
5
5
 
6
6
  exports.DateCalendar_default = DateCalendar_default;
7
- //# sourceMappingURL=chunk-UZ2E5NRX.cjs.map
8
- //# sourceMappingURL=chunk-UZ2E5NRX.cjs.map
7
+ //# sourceMappingURL=chunk-A57T2BLC.cjs.map
8
+ //# sourceMappingURL=chunk-A57T2BLC.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/action-form/fields/DateCalendar.module.css"],"names":[],"mappings":";;;AAAA,IAAA,oBAAA,GAAA","file":"chunk-A57T2BLC.cjs","sourcesContent":["/* DateCalendar — DayPicker classNames */\n\n.calendar {\n position: relative;\n width: 100%;\n font-family: var(--osdk-datetime-calendar-font-family);\n font-size: var(--osdk-datetime-calendar-font-size);\n}\n\n.calendarMonths {\n display: flex;\n}\n\n.calendarMonthGrid {\n width: 100%;\n border-collapse: collapse;\n}\n\n.calendarWeekday {\n padding: var(--osdk-datetime-calendar-gap);\n font-size: var(--osdk-datetime-calendar-weekday-font-size);\n color: var(--osdk-datetime-calendar-weekday-color);\n text-align: center;\n width: var(--osdk-datetime-calendar-cell-size);\n}\n\n.calendarDay {\n padding: var(--osdk-datetime-calendar-gap);\n text-align: center;\n}\n\n.calendarDayButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--osdk-datetime-calendar-cell-size);\n height: var(--osdk-datetime-calendar-cell-size);\n border: none;\n background: transparent;\n cursor: pointer;\n border-radius: var(--osdk-datetime-calendar-day-border-radius);\n font: inherit;\n color: inherit;\n\n &:hover {\n background: var(--osdk-datetime-calendar-day-hover-bg);\n }\n\n &:active {\n background: var(--osdk-datetime-calendar-day-active-bg);\n }\n}\n\n.calendarDayButton.calendarSelected {\n background: var(--osdk-datetime-calendar-selected-bg);\n color: var(--osdk-datetime-calendar-selected-color);\n\n &:hover {\n background: var(--osdk-datetime-calendar-selected-hover-bg);\n }\n}\n\n.calendarDayButton.calendarToday {\n font-weight: var(--osdk-datetime-calendar-today-font-weight);\n}\n\n.calendarDayButton.calendarOutside {\n color: var(--osdk-datetime-calendar-outside-color);\n}\n\n.calendarDayButton.calendarDisabled {\n color: var(--osdk-datetime-calendar-disabled-color);\n cursor: default;\n\n &:hover {\n background: transparent;\n }\n}\n\n.calendarHidden {\n visibility: hidden;\n}\n\n/* Calendar navigation */\n.calendarNav {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n pointer-events: none;\n}\n\n.calendarNavButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--osdk-datetime-calendar-nav-button-size);\n height: var(--osdk-datetime-calendar-nav-button-size);\n border: none;\n background: transparent;\n cursor: pointer;\n border-radius: var(--osdk-datetime-calendar-nav-button-border-radius);\n padding: 0;\n pointer-events: auto;\n\n &:hover {\n background: var(--osdk-datetime-calendar-nav-button-hover-bg);\n }\n}\n\n.calendarMonthCaption {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: var(--osdk-datetime-calendar-nav-button-size);\n}\n\n.calendarCaptionLabel {\n font-size: var(--osdk-datetime-calendar-caption-font-size);\n font-weight: var(--osdk-datetime-calendar-caption-font-weight);\n}\n\n.calendarChevron {\n width: var(--osdk-datetime-calendar-chevron-size);\n height: var(--osdk-datetime-calendar-chevron-size);\n fill: currentColor;\n}\n\n/* Calendar fallback / loading */\n.calendarFallback {\n width: var(--osdk-datetime-calendar-fallback-width);\n height: var(--osdk-datetime-calendar-fallback-height);\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkMRRRZN44_cjs = require('../chunk-MRRRZN44.cjs');
4
- var chunkUZ2E5NRX_cjs = require('../chunk-UZ2E5NRX.cjs');
4
+ var chunkA57T2BLC_cjs = require('../chunk-A57T2BLC.cjs');
5
5
  var chunkHMQTYQEX_cjs = require('../chunk-HMQTYQEX.cjs');
6
6
  var button = require('@base-ui/react/button');
7
7
  var classnames14 = require('classnames');
@@ -8745,11 +8745,11 @@ var CustomField = /* @__PURE__ */ React76.memo(function CustomFieldFn({
8745
8745
 
8746
8746
  // src/action-form/fields/DatetimePickerField.module.css
8747
8747
  var DatetimePickerField_default = {};
8748
- var DateCalendarLazy = /* @__PURE__ */ React76__default.default.lazy(() => import('../DateCalendar-R44GMN3O.cjs'));
8748
+ var DateCalendarLazy = /* @__PURE__ */ React76__default.default.lazy(() => import('../DateCalendar-D4APPCSE.cjs'));
8749
8749
  function LazyDateCalendar(props) {
8750
8750
  return /* @__PURE__ */ React76__default.default.createElement(React76.Suspense, {
8751
8751
  fallback: /* @__PURE__ */ React76__default.default.createElement("div", {
8752
- className: chunkUZ2E5NRX_cjs.DateCalendar_default.calendarFallback
8752
+ className: chunkA57T2BLC_cjs.DateCalendar_default.calendarFallback
8753
8753
  })
8754
8754
  }, /* @__PURE__ */ React76__default.default.createElement(DateCalendarLazy, props));
8755
8755
  }
@@ -9040,9 +9040,9 @@ var FilePickerField = /* @__PURE__ */ React76.memo(function FilePickerFieldFn({
9040
9040
  openFileDialog();
9041
9041
  }
9042
9042
  }, [openFileDialog]);
9043
- const displayText = getDisplayText(value);
9043
+ const displayText = React76.useMemo(() => getDisplayText(value), [value]);
9044
9044
  const hasValue = displayText != null;
9045
- const acceptString = normalizeAccept(accept);
9045
+ const acceptString = React76.useMemo(() => normalizeAccept(accept), [accept]);
9046
9046
  return (
9047
9047
  // The entire component is a single tab stop (tabIndex={0}).
9048
9048
  // Text and Browse are <span>s (not buttons) so they don't create
@@ -9054,6 +9054,7 @@ var FilePickerField = /* @__PURE__ */ React76.memo(function FilePickerFieldFn({
9054
9054
  className: FilePickerField_default.osdkFilePickerTrigger,
9055
9055
  tabIndex: 0,
9056
9056
  role: "button",
9057
+ "aria-label": "Choose file",
9057
9058
  onClick: openFileDialog,
9058
9059
  onKeyDown: handleKeyDown
9059
9060
  }, /* @__PURE__ */ React76__default.default.createElement("input", {