@panneau/ui 0.0.0-stage → 5.0.0-alpha.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 (209) hide show
  1. package/README.md +57 -2
  2. package/dist/alert/Alert.css +78 -0
  3. package/dist/alert/Alert.d.ts +30 -0
  4. package/dist/alert/Alert.d.ts.map +1 -0
  5. package/dist/alert/Alert.js +64 -0
  6. package/dist/alert/Alert.js.map +1 -0
  7. package/dist/alert/Alert.module.js +30 -0
  8. package/dist/alert/Alert.module.js.map +1 -0
  9. package/dist/badge/Badge.css +60 -0
  10. package/dist/badge/Badge.d.ts +15 -0
  11. package/dist/badge/Badge.d.ts.map +1 -0
  12. package/dist/badge/Badge.js +21 -0
  13. package/dist/badge/Badge.js.map +1 -0
  14. package/dist/badge/Badge.module.js +22 -0
  15. package/dist/badge/Badge.module.js.map +1 -0
  16. package/dist/button/Button.css +112 -0
  17. package/dist/button/Button.d.ts +26 -0
  18. package/dist/button/Button.d.ts.map +1 -0
  19. package/dist/button/Button.js +39 -0
  20. package/dist/button/Button.js.map +1 -0
  21. package/dist/button/Button.module.js +28 -0
  22. package/dist/button/Button.module.js.map +1 -0
  23. package/dist/card/Card.css +50 -0
  24. package/dist/card/Card.d.ts +20 -0
  25. package/dist/card/Card.d.ts.map +1 -0
  26. package/dist/card/Card.js +38 -0
  27. package/dist/card/Card.js.map +1 -0
  28. package/dist/card/Card.module.js +18 -0
  29. package/dist/card/Card.module.js.map +1 -0
  30. package/dist/checkbox/Checkbox.css +79 -0
  31. package/dist/checkbox/Checkbox.d.ts +11 -0
  32. package/dist/checkbox/Checkbox.d.ts.map +1 -0
  33. package/dist/checkbox/Checkbox.js +43 -0
  34. package/dist/checkbox/Checkbox.js.map +1 -0
  35. package/dist/checkbox/Checkbox.module.js +16 -0
  36. package/dist/checkbox/Checkbox.module.js.map +1 -0
  37. package/dist/checkbox/ChoiceChrome.d.ts +15 -0
  38. package/dist/checkbox/ChoiceChrome.d.ts.map +1 -0
  39. package/dist/checkbox/ChoiceChrome.js +36 -0
  40. package/dist/checkbox/ChoiceChrome.js.map +1 -0
  41. package/dist/combo-box/ComboBox.css +26 -0
  42. package/dist/combo-box/ComboBox.d.ts +30 -0
  43. package/dist/combo-box/ComboBox.d.ts.map +1 -0
  44. package/dist/combo-box/ComboBox.js +106 -0
  45. package/dist/combo-box/ComboBox.js.map +1 -0
  46. package/dist/combo-box/ComboBox.module.js +14 -0
  47. package/dist/combo-box/ComboBox.module.js.map +1 -0
  48. package/dist/date-picker/DatePicker.css +135 -0
  49. package/dist/date-picker/DatePicker.d.ts +12 -0
  50. package/dist/date-picker/DatePicker.d.ts.map +1 -0
  51. package/dist/date-picker/DatePicker.js +93 -0
  52. package/dist/date-picker/DatePicker.js.map +1 -0
  53. package/dist/date-picker/DatePicker.module.js +30 -0
  54. package/dist/date-picker/DatePicker.module.js.map +1 -0
  55. package/dist/dialog/Dialog.css +126 -0
  56. package/dist/dialog/Dialog.d.ts +31 -0
  57. package/dist/dialog/Dialog.d.ts.map +1 -0
  58. package/dist/dialog/Dialog.js +61 -0
  59. package/dist/dialog/Dialog.js.map +1 -0
  60. package/dist/dialog/Dialog.module.js +30 -0
  61. package/dist/dialog/Dialog.module.js.map +1 -0
  62. package/dist/disclosure/Disclosure.css +54 -0
  63. package/dist/disclosure/Disclosure.d.ts +20 -0
  64. package/dist/disclosure/Disclosure.d.ts.map +1 -0
  65. package/dist/disclosure/Disclosure.js +43 -0
  66. package/dist/disclosure/Disclosure.js.map +1 -0
  67. package/dist/disclosure/Disclosure.module.js +22 -0
  68. package/dist/disclosure/Disclosure.module.js.map +1 -0
  69. package/dist/field/Field.css +145 -0
  70. package/dist/field/Field.module.js +30 -0
  71. package/dist/field/Field.module.js.map +1 -0
  72. package/dist/field/FieldParts.d.ts +32 -0
  73. package/dist/field/FieldParts.d.ts.map +1 -0
  74. package/dist/field/FieldParts.js +56 -0
  75. package/dist/field/FieldParts.js.map +1 -0
  76. package/dist/field/Fieldset.d.ts +22 -0
  77. package/dist/field/Fieldset.d.ts.map +1 -0
  78. package/dist/field/Fieldset.js +50 -0
  79. package/dist/field/Fieldset.js.map +1 -0
  80. package/dist/icon/Icon.css +5 -0
  81. package/dist/icon/Icon.d.ts +31 -0
  82. package/dist/icon/Icon.d.ts.map +1 -0
  83. package/dist/icon/Icon.js +29 -0
  84. package/dist/icon/Icon.js.map +1 -0
  85. package/dist/icon/Icon.module.js +8 -0
  86. package/dist/icon/Icon.module.js.map +1 -0
  87. package/dist/icon-button/IconButton.css +9 -0
  88. package/dist/icon-button/IconButton.d.ts +15 -0
  89. package/dist/icon-button/IconButton.d.ts.map +1 -0
  90. package/dist/icon-button/IconButton.js +26 -0
  91. package/dist/icon-button/IconButton.js.map +1 -0
  92. package/dist/icon-button/IconButton.module.js +12 -0
  93. package/dist/icon-button/IconButton.module.js.map +1 -0
  94. package/dist/index.d.ts +32 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +29 -0
  97. package/dist/intl/messages.d.ts +2 -0
  98. package/dist/intl/messages.d.ts.map +1 -0
  99. package/dist/intl/messages.js +1 -0
  100. package/dist/intl/usePanneauIntl.d.ts +7 -0
  101. package/dist/intl/usePanneauIntl.d.ts.map +1 -0
  102. package/dist/intl/usePanneauIntl.js +22 -0
  103. package/dist/intl/usePanneauIntl.js.map +1 -0
  104. package/dist/locales/index.d.ts +15 -0
  105. package/dist/locales/index.d.ts.map +1 -0
  106. package/dist/locales/index.js +21 -0
  107. package/dist/locales/index.js.map +1 -0
  108. package/dist/menu/Menu.d.ts +27 -0
  109. package/dist/menu/Menu.d.ts.map +1 -0
  110. package/dist/menu/Menu.js +57 -0
  111. package/dist/menu/Menu.js.map +1 -0
  112. package/dist/number-input/NumberInput.css +57 -0
  113. package/dist/number-input/NumberInput.d.ts +21 -0
  114. package/dist/number-input/NumberInput.d.ts.map +1 -0
  115. package/dist/number-input/NumberInput.js +82 -0
  116. package/dist/number-input/NumberInput.js.map +1 -0
  117. package/dist/number-input/NumberInput.module.js +16 -0
  118. package/dist/number-input/NumberInput.module.js.map +1 -0
  119. package/dist/popover/Popover.css +32 -0
  120. package/dist/popover/Popover.d.ts +18 -0
  121. package/dist/popover/Popover.d.ts.map +1 -0
  122. package/dist/popover/Popover.js +41 -0
  123. package/dist/popover/Popover.js.map +1 -0
  124. package/dist/popover/Popover.module.js +14 -0
  125. package/dist/popover/Popover.module.js.map +1 -0
  126. package/dist/radio-group/RadioGroup.css +83 -0
  127. package/dist/radio-group/RadioGroup.d.ts +12 -0
  128. package/dist/radio-group/RadioGroup.d.ts.map +1 -0
  129. package/dist/radio-group/RadioGroup.js +61 -0
  130. package/dist/radio-group/RadioGroup.js.map +1 -0
  131. package/dist/radio-group/RadioGroup.module.js +20 -0
  132. package/dist/radio-group/RadioGroup.module.js.map +1 -0
  133. package/dist/root/PanneauRoot.css +251 -0
  134. package/dist/root/PanneauRoot.d.ts +34 -0
  135. package/dist/root/PanneauRoot.d.ts.map +1 -0
  136. package/dist/root/PanneauRoot.js +84 -0
  137. package/dist/root/PanneauRoot.js.map +1 -0
  138. package/dist/root/PanneauRoot.module.js +12 -0
  139. package/dist/root/PanneauRoot.module.js.map +1 -0
  140. package/dist/select/ListBox.css +104 -0
  141. package/dist/select/ListBox.module.js +32 -0
  142. package/dist/select/ListBox.module.js.map +1 -0
  143. package/dist/select/Select.d.ts +45 -0
  144. package/dist/select/Select.d.ts.map +1 -0
  145. package/dist/select/Select.js +136 -0
  146. package/dist/select/Select.js.map +1 -0
  147. package/dist/spinner/Spinner.css +40 -0
  148. package/dist/spinner/Spinner.d.ts +11 -0
  149. package/dist/spinner/Spinner.d.ts.map +1 -0
  150. package/dist/spinner/Spinner.js +25 -0
  151. package/dist/spinner/Spinner.js.map +1 -0
  152. package/dist/spinner/Spinner.module.js +18 -0
  153. package/dist/spinner/Spinner.module.js.map +1 -0
  154. package/dist/switch/Switch.css +69 -0
  155. package/dist/switch/Switch.d.ts +11 -0
  156. package/dist/switch/Switch.d.ts.map +1 -0
  157. package/dist/switch/Switch.js +33 -0
  158. package/dist/switch/Switch.js.map +1 -0
  159. package/dist/switch/Switch.module.js +15 -0
  160. package/dist/switch/Switch.module.js.map +1 -0
  161. package/dist/tabs/Tabs.css +83 -0
  162. package/dist/tabs/Tabs.d.ts +27 -0
  163. package/dist/tabs/Tabs.d.ts.map +1 -0
  164. package/dist/tabs/Tabs.js +141 -0
  165. package/dist/tabs/Tabs.js.map +1 -0
  166. package/dist/tabs/Tabs.module.js +16 -0
  167. package/dist/tabs/Tabs.module.js.map +1 -0
  168. package/dist/text-area/TextArea.css +8 -0
  169. package/dist/text-area/TextArea.d.ts +11 -0
  170. package/dist/text-area/TextArea.d.ts.map +1 -0
  171. package/dist/text-area/TextArea.js +41 -0
  172. package/dist/text-area/TextArea.js.map +1 -0
  173. package/dist/text-area/TextArea.module.js +8 -0
  174. package/dist/text-area/TextArea.module.js.map +1 -0
  175. package/dist/text-input/TextInput.d.ts +17 -0
  176. package/dist/text-input/TextInput.d.ts.map +1 -0
  177. package/dist/text-input/TextInput.js +61 -0
  178. package/dist/text-input/TextInput.js.map +1 -0
  179. package/dist/theme/bootstrap.d.ts +8 -0
  180. package/dist/theme/bootstrap.d.ts.map +1 -0
  181. package/dist/theme/bootstrap.js +61 -0
  182. package/dist/theme/bootstrap.js.map +1 -0
  183. package/dist/theme/theme.d.ts +23 -0
  184. package/dist/theme/theme.d.ts.map +1 -0
  185. package/dist/theme/theme.js +30 -0
  186. package/dist/theme/theme.js.map +1 -0
  187. package/dist/time-input/TimeInput.d.ts +8 -0
  188. package/dist/time-input/TimeInput.d.ts.map +1 -0
  189. package/dist/time-input/TimeInput.js +45 -0
  190. package/dist/time-input/TimeInput.js.map +1 -0
  191. package/dist/toast/Toast.css +109 -0
  192. package/dist/toast/Toast.d.ts +39 -0
  193. package/dist/toast/Toast.d.ts.map +1 -0
  194. package/dist/toast/Toast.js +152 -0
  195. package/dist/toast/Toast.js.map +1 -0
  196. package/dist/toast/Toast.module.js +30 -0
  197. package/dist/toast/Toast.module.js.map +1 -0
  198. package/dist/tooltip/Tooltip.css +25 -0
  199. package/dist/tooltip/Tooltip.d.ts +19 -0
  200. package/dist/tooltip/Tooltip.d.ts.map +1 -0
  201. package/dist/tooltip/Tooltip.js +29 -0
  202. package/dist/tooltip/Tooltip.js.map +1 -0
  203. package/dist/tooltip/Tooltip.module.js +12 -0
  204. package/dist/tooltip/Tooltip.module.js.map +1 -0
  205. package/dist/utils/cx.d.ts +3 -0
  206. package/dist/utils/cx.d.ts.map +1 -0
  207. package/dist/utils/cx.js +9 -0
  208. package/dist/utils/cx.js.map +1 -0
  209. package/package.json +48 -5
@@ -0,0 +1,135 @@
1
+ .panneau-control-DKgKDX.panneau-control-DKgKDX {
2
+ padding-inline-end: 0;
3
+ }
4
+
5
+ .panneau-input-wYghuH {
6
+ display: flex;
7
+ flex: 1 1 auto;
8
+ align-items: center;
9
+ min-width: 0;
10
+ overflow-x: auto;
11
+ white-space: nowrap;
12
+ font-variant-numeric: tabular-nums;
13
+ }
14
+
15
+ .panneau-segment-hRUT-e {
16
+ padding: 0 0.0625rem;
17
+ border-radius: var(--panneau-radius-sm);
18
+ outline: none;
19
+ caret-color: transparent;
20
+ }
21
+
22
+ .panneau-segment-hRUT-e[data-type='literal'] {
23
+ padding: 0;
24
+ color: var(--panneau-color-text-muted);
25
+ }
26
+
27
+ .panneau-segment-hRUT-e[data-placeholder] {
28
+ color: var(--panneau-color-text-muted);
29
+ }
30
+
31
+ .panneau-segment-hRUT-e[data-focused] {
32
+ color: var(--panneau-color-accent-text);
33
+ background-color: var(--panneau-color-accent);
34
+ }
35
+
36
+ .panneau-button-SywO8u {
37
+ display: flex;
38
+ align-items: center;
39
+ justify-content: center;
40
+ align-self: stretch;
41
+ width: 2.25rem;
42
+ padding: 0;
43
+ color: var(--panneau-color-text-muted);
44
+ cursor: pointer;
45
+ background: transparent;
46
+ border: 0;
47
+ border-inline-start: var(--panneau-border-width) solid var(--panneau-color-border);
48
+ }
49
+
50
+ .panneau-button-SywO8u[data-hovered] {
51
+ color: var(--panneau-color-text);
52
+ background-color: var(--panneau-color-hover);
53
+ }
54
+
55
+ .panneau-button-SywO8u[data-focus-visible] {
56
+ outline: var(--panneau-focus-width) solid var(--panneau-color-focus);
57
+ outline-offset: -2px;
58
+ }
59
+
60
+ .panneau-calendar-F3LtsQ {
61
+ width: max-content;
62
+ max-width: 100%;
63
+ }
64
+
65
+ .panneau-header-p4dCKF {
66
+ display: flex;
67
+ align-items: center;
68
+ justify-content: space-between;
69
+ gap: var(--panneau-space-2);
70
+ margin-bottom: var(--panneau-space-2);
71
+ }
72
+
73
+ .panneau-heading-V16FH- {
74
+ margin: 0;
75
+ font-size: var(--panneau-font-size-md);
76
+ font-weight: var(--panneau-font-weight-bold);
77
+ text-transform: capitalize;
78
+ }
79
+
80
+ .panneau-grid-eanFoG {
81
+ border-collapse: collapse;
82
+ }
83
+
84
+ .panneau-weekday-DwEU9E {
85
+ padding-bottom: var(--panneau-space-1);
86
+ font-size: var(--panneau-font-size-xs);
87
+ font-weight: var(--panneau-font-weight-medium);
88
+ color: var(--panneau-color-text-muted);
89
+ }
90
+
91
+ .panneau-cell-WCk0GL {
92
+ display: flex;
93
+ align-items: center;
94
+ justify-content: center;
95
+ width: 2.25rem;
96
+ height: 2.25rem;
97
+ font-size: var(--panneau-font-size-md);
98
+ font-variant-numeric: tabular-nums;
99
+ cursor: pointer;
100
+ border-radius: var(--panneau-radius-md);
101
+ outline: none;
102
+ }
103
+
104
+ .panneau-cell-WCk0GL[data-outside-month] {
105
+ display: none;
106
+ }
107
+
108
+ .panneau-cell-WCk0GL[data-hovered] {
109
+ background-color: var(--panneau-color-hover);
110
+ }
111
+
112
+ .panneau-cell-WCk0GL[data-selected] {
113
+ color: var(--panneau-color-accent-text);
114
+ background-color: var(--panneau-color-accent);
115
+ }
116
+
117
+ .panneau-cell-WCk0GL[data-today]:not([data-selected]) {
118
+ font-weight: var(--panneau-font-weight-bold);
119
+ box-shadow: inset 0 0 0 1px var(--panneau-color-border-control);
120
+ }
121
+
122
+ .panneau-cell-WCk0GL[data-disabled],
123
+ .panneau-cell-WCk0GL[data-unavailable] {
124
+ cursor: not-allowed;
125
+ opacity: 0.4;
126
+ }
127
+
128
+ .panneau-cell-WCk0GL[data-focus-visible] {
129
+ outline: var(--panneau-focus-width) solid var(--panneau-color-focus);
130
+ outline-offset: 1px;
131
+ }
132
+
133
+ .panneau-time-3Ejhhf {
134
+ margin-top: var(--panneau-space-3);
135
+ }
@@ -0,0 +1,12 @@
1
+ import { type DatePickerProps as AriaDatePickerProps, type DateValue } from 'react-aria-components';
2
+ import { type FieldChromeProps } from '../field/FieldParts';
3
+ export interface DatePickerProps extends Omit<AriaDatePickerProps<DateValue>, 'className' | 'style' | 'children' | 'isInvalid' | 'validate'>, FieldChromeProps {
4
+ controlClassName?: string;
5
+ popoverClassName?: string;
6
+ }
7
+ /**
8
+ * A date, or a date and time with `granularity="minute"`, typed segment by segment in the order of
9
+ * the locale, or picked in a calendar. Values are `@internationalized/date` objects.
10
+ */
11
+ export declare function DatePicker({ label, description, errors, isRequired, isReadOnly, className, labelClassName, descriptionClassName, errorsClassName, controlClassName, popoverClassName, ...props }: DatePickerProps): import("react").JSX.Element;
12
+ //# sourceMappingURL=DatePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.d.ts","sourceRoot":"","sources":["../../src/date-picker/DatePicker.tsx"],"names":[],"mappings":"AACA,OAAO,EAEH,KAAK,eAAe,IAAI,mBAAmB,EAU3C,KAAK,SAAS,EAIjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACH,KAAK,gBAAgB,EAKxB,MAAM,qBAAqB,CAAC;AAO7B,MAAM,WAAW,eACb,SACI,IAAI,CACA,mBAAmB,CAAC,SAAS,CAAC,EAC9B,WAAW,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,CAChE,EACD,gBAAgB;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACvB,KAAK,EACL,WAAW,EACX,MAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,GAAG,KAAK,EACX,EAAE,eAAe,+BA0DjB"}
@@ -0,0 +1,93 @@
1
+ import { cx } from "../utils/cx.js";
2
+ import { Icon } from "../icon/Icon.js";
3
+ import Field_module_default from "../field/Field.module.js";
4
+ import { FieldDescription, FieldErrors, FieldLabel } from "../field/FieldParts.js";
5
+ import Popover_module_default from "../popover/Popover.module.js";
6
+ import { PopoverSurface } from "../popover/Popover.js";
7
+ import DatePicker_module_default from "./DatePicker.module.js";
8
+ import { CalendarDays, ChevronLeft, ChevronRight } from "lucide-react";
9
+ import { Button, Calendar, CalendarCell, CalendarGrid, CalendarGridBody, CalendarGridHeader, CalendarHeaderCell, DateInput, DatePicker, DateSegment, Dialog, Group, Heading } from "react-aria-components";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ //#region src/date-picker/DatePicker.tsx
12
+ /**
13
+ * A date, or a date and time with `granularity="minute"`, typed segment by segment in the order of
14
+ * the locale, or picked in a calendar. Values are `@internationalized/date` objects.
15
+ */
16
+ function DatePicker$1({ label, description, errors = [], isRequired, isReadOnly, className, labelClassName, descriptionClassName, errorsClassName, controlClassName, popoverClassName, ...props }) {
17
+ const invalid = errors.length > 0;
18
+ return /* @__PURE__ */ jsxs(DatePicker, {
19
+ ...props,
20
+ isRequired,
21
+ isReadOnly,
22
+ isInvalid: invalid,
23
+ validationBehavior: "aria",
24
+ className: cx(Field_module_default.field, className),
25
+ children: [
26
+ /* @__PURE__ */ jsx(FieldLabel, {
27
+ isRequired,
28
+ className: labelClassName,
29
+ children: label
30
+ }),
31
+ /* @__PURE__ */ jsxs(Group, {
32
+ className: cx(Field_module_default.control, DatePicker_module_default.control, controlClassName),
33
+ "data-readonly": isReadOnly || void 0,
34
+ children: [/* @__PURE__ */ jsx(DateInput, {
35
+ className: DatePicker_module_default.input,
36
+ children: (segment) => /* @__PURE__ */ jsx(DateSegment, {
37
+ segment,
38
+ className: DatePicker_module_default.segment
39
+ })
40
+ }), isReadOnly !== true ? /* @__PURE__ */ jsx(Button, {
41
+ className: DatePicker_module_default.button,
42
+ children: /* @__PURE__ */ jsx(Icon, { icon: CalendarDays })
43
+ }) : null]
44
+ }),
45
+ /* @__PURE__ */ jsx(FieldDescription, {
46
+ className: descriptionClassName,
47
+ children: description
48
+ }),
49
+ /* @__PURE__ */ jsx(FieldErrors, {
50
+ errors,
51
+ className: errorsClassName
52
+ }),
53
+ /* @__PURE__ */ jsx(PopoverSurface, {
54
+ className: popoverClassName,
55
+ children: /* @__PURE__ */ jsx(Dialog, {
56
+ className: Popover_module_default.dialog,
57
+ children: /* @__PURE__ */ jsxs(Calendar, {
58
+ className: DatePicker_module_default.calendar,
59
+ children: [/* @__PURE__ */ jsxs("header", {
60
+ className: DatePicker_module_default.header,
61
+ children: [
62
+ /* @__PURE__ */ jsx(Button, {
63
+ slot: "previous",
64
+ className: DatePicker_module_default.button,
65
+ children: /* @__PURE__ */ jsx(Icon, { icon: ChevronLeft })
66
+ }),
67
+ /* @__PURE__ */ jsx(Heading, { className: DatePicker_module_default.heading }),
68
+ /* @__PURE__ */ jsx(Button, {
69
+ slot: "next",
70
+ className: DatePicker_module_default.button,
71
+ children: /* @__PURE__ */ jsx(Icon, { icon: ChevronRight })
72
+ })
73
+ ]
74
+ }), /* @__PURE__ */ jsxs(CalendarGrid, {
75
+ className: DatePicker_module_default.grid,
76
+ children: [/* @__PURE__ */ jsx(CalendarGridHeader, { children: (day) => /* @__PURE__ */ jsx(CalendarHeaderCell, {
77
+ className: DatePicker_module_default.weekday,
78
+ children: day
79
+ }) }), /* @__PURE__ */ jsx(CalendarGridBody, { children: (date) => /* @__PURE__ */ jsx(CalendarCell, {
80
+ date,
81
+ className: DatePicker_module_default.cell
82
+ }) })]
83
+ })]
84
+ })
85
+ })
86
+ })
87
+ ]
88
+ });
89
+ }
90
+ //#endregion
91
+ export { DatePicker$1 as DatePicker };
92
+
93
+ //# sourceMappingURL=DatePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.js","names":["DatePicker","AriaDatePicker","fieldStyles","styles","popoverStyles"],"sources":["../../src/date-picker/DatePicker.tsx"],"sourcesContent":["import { CalendarDays, ChevronLeft, ChevronRight } from 'lucide-react';\nimport {\n DatePicker as AriaDatePicker,\n type DatePickerProps as AriaDatePickerProps,\n Button,\n Calendar,\n CalendarCell,\n CalendarGrid,\n CalendarGridBody,\n CalendarGridHeader,\n CalendarHeaderCell,\n DateInput,\n DateSegment,\n type DateValue,\n Dialog,\n Group,\n Heading,\n} from 'react-aria-components';\n\nimport {\n type FieldChromeProps,\n FieldDescription,\n FieldErrors,\n FieldLabel,\n fieldStyles,\n} from '../field/FieldParts';\nimport { Icon } from '../icon/Icon';\nimport { PopoverSurface } from '../popover/Popover';\nimport popoverStyles from '../popover/Popover.module.css';\nimport { cx } from '../utils/cx';\nimport styles from './DatePicker.module.css';\n\nexport interface DatePickerProps\n extends\n Omit<\n AriaDatePickerProps<DateValue>,\n 'className' | 'style' | 'children' | 'isInvalid' | 'validate'\n >,\n FieldChromeProps {\n controlClassName?: string;\n popoverClassName?: string;\n}\n\n/**\n * A date, or a date and time with `granularity=\"minute\"`, typed segment by segment in the order of\n * the locale, or picked in a calendar. Values are `@internationalized/date` objects.\n */\nexport function DatePicker({\n label,\n description,\n errors = [],\n isRequired,\n isReadOnly,\n className,\n labelClassName,\n descriptionClassName,\n errorsClassName,\n controlClassName,\n popoverClassName,\n ...props\n}: DatePickerProps) {\n const invalid = errors.length > 0;\n return (\n <AriaDatePicker\n {...props}\n isRequired={isRequired}\n isReadOnly={isReadOnly}\n isInvalid={invalid}\n validationBehavior=\"aria\"\n className={cx(fieldStyles.field, className)}\n >\n <FieldLabel isRequired={isRequired} className={labelClassName}>\n {label}\n </FieldLabel>\n <Group\n className={cx(fieldStyles.control, styles.control, controlClassName)}\n data-readonly={isReadOnly || undefined}\n >\n <DateInput className={styles.input}>\n {(segment) => <DateSegment segment={segment} className={styles.segment} />}\n </DateInput>\n {isReadOnly !== true ? (\n <Button className={styles.button}>\n <Icon icon={CalendarDays} />\n </Button>\n ) : null}\n </Group>\n <FieldDescription className={descriptionClassName}>{description}</FieldDescription>\n <FieldErrors errors={errors} className={errorsClassName} />\n <PopoverSurface className={popoverClassName}>\n <Dialog className={popoverStyles.dialog}>\n <Calendar className={styles.calendar}>\n <header className={styles.header}>\n <Button slot=\"previous\" className={styles.button}>\n <Icon icon={ChevronLeft} />\n </Button>\n <Heading className={styles.heading} />\n <Button slot=\"next\" className={styles.button}>\n <Icon icon={ChevronRight} />\n </Button>\n </header>\n <CalendarGrid className={styles.grid}>\n <CalendarGridHeader>\n {(day) => (\n <CalendarHeaderCell className={styles.weekday}>\n {day}\n </CalendarHeaderCell>\n )}\n </CalendarGridHeader>\n <CalendarGridBody>\n {(date) => <CalendarCell date={date} className={styles.cell} />}\n </CalendarGridBody>\n </CalendarGrid>\n </Calendar>\n </Dialog>\n </PopoverSurface>\n </AriaDatePicker>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AA+CA,SAAgBA,aAAW,EACvB,OACA,aACA,SAAS,CAAA,GACT,YACA,YACA,WACA,gBACA,sBACA,iBACA,kBACA,kBACA,GAAG,SACa;CAChB,MAAM,UAAU,OAAO,SAAS;CAChC,OACI,qBAACC,YAAD;EACI,GAAI;EACQ;EACA;EACZ,WAAW;EACX,oBAAmB;EACnB,WAAW,GAAGC,qBAAY,OAAO,SAAS;EAN9C,UAAA;GAQI,oBAAC,YAAD;IAAwB;IAAY,WAAW;IAC1C,UAAA;GACO,CAAA;GACZ,qBAAC,OAAD;IACI,WAAW,GAAGA,qBAAY,SAASC,0BAAO,SAAS,gBAAgB;IACnE,iBAAe,cAAc,KAAA;IAFjC,UAAA,CAII,oBAAC,WAAD;KAAW,WAAWA,0BAAO;KACvB,WAAA,YAAY,oBAAC,aAAD;MAAsB;MAAS,WAAWA,0BAAO;KAAQ,CAAA;IAChE,CAAA,GACV,eAAe,OACZ,oBAAC,QAAD;KAAQ,WAAWA,0BAAO;KACtB,UAAA,oBAAC,MAAD,EAAM,MAAM,aAAa,CAAA;IACrB,CAAA,IACR,IACD;;GACP,oBAAC,kBAAD;IAAkB,WAAW;IAAuB,UAAA;GAA8B,CAAA;GAClF,oBAAC,aAAD;IAAqB;IAAQ,WAAW;GAAgB,CAAA;GACxD,oBAAC,gBAAD;IAAgB,WAAW;IACvB,UAAA,oBAAC,QAAD;KAAQ,WAAWC,uBAAc;KAC7B,UAAA,qBAAC,UAAD;MAAU,WAAWD,0BAAO;MAA5B,UAAA,CACI,qBAAC,UAAD;OAAQ,WAAWA,0BAAO;OAA1B,UAAA;QACI,oBAAC,QAAD;SAAQ,MAAK;SAAW,WAAWA,0BAAO;SACtC,UAAA,oBAAC,MAAD,EAAM,MAAM,YAAY,CAAA;QACpB,CAAA;QACR,oBAAC,SAAD,EAAS,WAAWA,0BAAO,QAAQ,CAAA;QACnC,oBAAC,QAAD;SAAQ,MAAK;SAAO,WAAWA,0BAAO;SAClC,UAAA,oBAAC,MAAD,EAAM,MAAM,aAAa,CAAA;QACrB,CAAA;OACJ;MACR,CAAA,GAAA,qBAAC,cAAD;OAAc,WAAWA,0BAAO;OAAhC,UAAA,CACI,oBAAC,oBAAD,EAAA,WACM,QACE,oBAAC,oBAAD;QAAoB,WAAWA,0BAAO;QACjC,UAAA;OACe,CAAA,EAER,CAAA,GACpB,oBAAC,kBAAD,EAAA,WACM,SAAS,oBAAC,cAAD;QAAoB;QAAM,WAAWA,0BAAO;OAAK,CAAA,EAC9C,CAAA,CACR;MACR,CAAA,CAAA;;IACN,CAAA;GACI,CAAA;EACJ;;AAExB"}
@@ -0,0 +1,30 @@
1
+ import "./DatePicker.css";
2
+ //#region src/date-picker/DatePicker.module.css
3
+ var control = "panneau-control-DKgKDX";
4
+ var input = "panneau-input-wYghuH";
5
+ var segment = "panneau-segment-hRUT-e";
6
+ var button = "panneau-button-SywO8u";
7
+ var calendar = "panneau-calendar-F3LtsQ";
8
+ var header = "panneau-header-p4dCKF";
9
+ var heading = "panneau-heading-V16FH-";
10
+ var grid = "panneau-grid-eanFoG";
11
+ var weekday = "panneau-weekday-DwEU9E";
12
+ var cell = "panneau-cell-WCk0GL";
13
+ var time = "panneau-time-3Ejhhf";
14
+ var DatePicker_module_default = {
15
+ control,
16
+ input,
17
+ segment,
18
+ button,
19
+ calendar,
20
+ header,
21
+ heading,
22
+ grid,
23
+ weekday,
24
+ cell,
25
+ time
26
+ };
27
+ //#endregion
28
+ export { button, calendar, cell, control, DatePicker_module_default as default, grid, header, heading, input, segment, time, weekday };
29
+
30
+ //# sourceMappingURL=DatePicker.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.module.js","names":[],"sources":["../../src/date-picker/DatePicker.module.css"],"sourcesContent":[".control.control {\n padding-inline-end: 0;\n}\n\n.input {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n min-width: 0;\n overflow-x: auto;\n white-space: nowrap;\n font-variant-numeric: tabular-nums;\n}\n\n.segment {\n padding: 0 0.0625rem;\n border-radius: var(--panneau-radius-sm);\n outline: none;\n caret-color: transparent;\n}\n\n.segment[data-type='literal'] {\n padding: 0;\n color: var(--panneau-color-text-muted);\n}\n\n.segment[data-placeholder] {\n color: var(--panneau-color-text-muted);\n}\n\n.segment[data-focused] {\n color: var(--panneau-color-accent-text);\n background-color: var(--panneau-color-accent);\n}\n\n.button {\n display: flex;\n align-items: center;\n justify-content: center;\n align-self: stretch;\n width: 2.25rem;\n padding: 0;\n color: var(--panneau-color-text-muted);\n cursor: pointer;\n background: transparent;\n border: 0;\n border-inline-start: var(--panneau-border-width) solid var(--panneau-color-border);\n}\n\n.button[data-hovered] {\n color: var(--panneau-color-text);\n background-color: var(--panneau-color-hover);\n}\n\n.button[data-focus-visible] {\n outline: var(--panneau-focus-width) solid var(--panneau-color-focus);\n outline-offset: -2px;\n}\n\n.calendar {\n width: max-content;\n max-width: 100%;\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--panneau-space-2);\n margin-bottom: var(--panneau-space-2);\n}\n\n.heading {\n margin: 0;\n font-size: var(--panneau-font-size-md);\n font-weight: var(--panneau-font-weight-bold);\n text-transform: capitalize;\n}\n\n.grid {\n border-collapse: collapse;\n}\n\n.weekday {\n padding-bottom: var(--panneau-space-1);\n font-size: var(--panneau-font-size-xs);\n font-weight: var(--panneau-font-weight-medium);\n color: var(--panneau-color-text-muted);\n}\n\n.cell {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.25rem;\n height: 2.25rem;\n font-size: var(--panneau-font-size-md);\n font-variant-numeric: tabular-nums;\n cursor: pointer;\n border-radius: var(--panneau-radius-md);\n outline: none;\n}\n\n.cell[data-outside-month] {\n display: none;\n}\n\n.cell[data-hovered] {\n background-color: var(--panneau-color-hover);\n}\n\n.cell[data-selected] {\n color: var(--panneau-color-accent-text);\n background-color: var(--panneau-color-accent);\n}\n\n.cell[data-today]:not([data-selected]) {\n font-weight: var(--panneau-font-weight-bold);\n box-shadow: inset 0 0 0 1px var(--panneau-color-border-control);\n}\n\n.cell[data-disabled],\n.cell[data-unavailable] {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.cell[data-focus-visible] {\n outline: var(--panneau-focus-width) solid var(--panneau-color-focus);\n outline-offset: 1px;\n}\n\n.time {\n margin-top: var(--panneau-space-3);\n}\n"],"mappings":""}
@@ -0,0 +1,126 @@
1
+ .panneau-overlay-nLaR62 {
2
+ position: fixed;
3
+ inset: 0;
4
+ z-index: var(--panneau-z-overlay);
5
+ display: flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ min-height: 100dvh;
9
+ padding: var(--panneau-space-4);
10
+ background-color: var(--panneau-color-backdrop);
11
+ }
12
+
13
+ .panneau-overlay-nLaR62[data-entering] {
14
+ animation: panneau-fade-wJ4pz5 var(--panneau-duration) ease-out;
15
+ }
16
+
17
+ .panneau-overlay-nLaR62[data-exiting] {
18
+ animation: panneau-fade-wJ4pz5 var(--panneau-duration) ease-in reverse;
19
+ }
20
+
21
+ .panneau-modal-Ucsou3 {
22
+ display: flex;
23
+ width: 100%;
24
+ max-width: 32rem;
25
+ max-height: calc(100dvh - 2 * var(--panneau-space-4));
26
+ outline: none;
27
+ }
28
+
29
+ .panneau-sm-pQA1LI {
30
+ max-width: 24rem;
31
+ }
32
+
33
+ .panneau-lg-YG9jfw {
34
+ max-width: 48rem;
35
+ }
36
+
37
+ .panneau-modal-Ucsou3[data-entering] {
38
+ animation: panneau-rise-13o1zo var(--panneau-duration) ease-out;
39
+ }
40
+
41
+ .panneau-dialog-Q-k-Yw {
42
+ display: flex;
43
+ flex-direction: column;
44
+ width: 100%;
45
+ max-height: inherit;
46
+ color: var(--panneau-color-text);
47
+ background-color: var(--panneau-color-surface-raised);
48
+ border-radius: var(--panneau-radius-lg);
49
+ box-shadow: var(--panneau-shadow-lg);
50
+ outline: none;
51
+ }
52
+
53
+ .panneau-header-rSdjF8 {
54
+ display: flex;
55
+ align-items: flex-start;
56
+ gap: var(--panneau-space-3);
57
+ padding: var(--panneau-space-4) var(--panneau-space-4) 0 var(--panneau-space-5);
58
+ }
59
+
60
+ .panneau-title-JCRwmh {
61
+ flex: 1 1 auto;
62
+ min-width: 0;
63
+ padding-top: var(--panneau-space-1);
64
+ font-size: var(--panneau-font-size-lg);
65
+ font-weight: var(--panneau-font-weight-bold);
66
+ line-height: var(--panneau-line-height-tight);
67
+ overflow-wrap: anywhere;
68
+ }
69
+
70
+ .panneau-body-HZoCzz {
71
+ flex: 1 1 auto;
72
+ min-height: 0;
73
+ padding: var(--panneau-space-3) var(--panneau-space-5) var(--panneau-space-4);
74
+ overflow-y: auto;
75
+ }
76
+
77
+ .panneau-footer-zpq7M7 {
78
+ display: flex;
79
+ flex-wrap: wrap;
80
+ justify-content: flex-end;
81
+ gap: var(--panneau-space-2);
82
+ padding: var(--panneau-space-3) var(--panneau-space-5) var(--panneau-space-4);
83
+ border-top: var(--panneau-border-width) solid var(--panneau-color-border);
84
+ }
85
+
86
+ /* Phones: the dialog is a sheet at the bottom, with full-width buttons. */
87
+ @media (max-width: 30rem) {
88
+ .panneau-overlay-nLaR62 {
89
+ align-items: flex-end;
90
+ padding: 0;
91
+ }
92
+
93
+ .panneau-modal-Ucsou3,
94
+ .panneau-sm-pQA1LI,
95
+ .panneau-lg-YG9jfw {
96
+ max-width: none;
97
+ max-height: calc(100dvh - var(--panneau-space-8));
98
+ }
99
+
100
+ .panneau-dialog-Q-k-Yw {
101
+ border-end-start-radius: 0;
102
+ border-end-end-radius: 0;
103
+ padding-bottom: env(safe-area-inset-bottom);
104
+ }
105
+
106
+ .panneau-footer-zpq7M7 {
107
+ flex-direction: column-reverse;
108
+ }
109
+
110
+ .panneau-footer-zpq7M7 > * {
111
+ width: 100%;
112
+ }
113
+ }
114
+
115
+ @keyframes panneau-fade-wJ4pz5 {
116
+ from {
117
+ opacity: 0;
118
+ }
119
+ }
120
+
121
+ @keyframes panneau-rise-13o1zo {
122
+ from {
123
+ opacity: 0;
124
+ transform: translateY(0.5rem);
125
+ }
126
+ }
@@ -0,0 +1,31 @@
1
+ import type { ReactNode } from 'react';
2
+ import { type ModalOverlayProps } from 'react-aria-components';
3
+ export interface DialogProps extends Pick<ModalOverlayProps, 'isOpen' | 'defaultOpen' | 'onOpenChange' | 'isKeyboardDismissDisabled'> {
4
+ /** Heading of the dialog, which also labels it. */
5
+ title: ReactNode;
6
+ /** Content, or a function that gets `close()`. */
7
+ children?: ReactNode | ((close: () => void) => ReactNode);
8
+ /** Buttons at the bottom, or a function that gets `close()`. */
9
+ footer?: ReactNode | ((close: () => void) => ReactNode);
10
+ /**
11
+ * Closes on a click outside and shows a close button. Defaults to true. Turn it off for dialogs
12
+ * that need an answer.
13
+ */
14
+ isDismissable?: boolean;
15
+ /** `alertdialog` for confirmations and interruptions. Defaults to `dialog`. */
16
+ role?: 'dialog' | 'alertdialog';
17
+ size?: 'sm' | 'md' | 'lg';
18
+ className?: string;
19
+ overlayClassName?: string;
20
+ headerClassName?: string;
21
+ bodyClassName?: string;
22
+ footerClassName?: string;
23
+ }
24
+ /**
25
+ * A modal dialog. Controlled with `isOpen` and `onOpenChange`, or inside a `DialogTrigger` with
26
+ * its button as the first child. It traps focus, closes with Escape, and returns focus when it
27
+ * closes. On phones, it opens as a sheet at the bottom of the screen.
28
+ */
29
+ export declare function Dialog({ title, children, footer, isDismissable, role, size, className, overlayClassName, headerClassName, bodyClassName, footerClassName, ...props }: DialogProps): import("react").JSX.Element | null;
30
+ export { DialogTrigger } from 'react-aria-components';
31
+ //# sourceMappingURL=Dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../src/dialog/Dialog.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAKH,KAAK,iBAAiB,EACzB,MAAM,uBAAuB,CAAC;AAS/B,MAAM,WAAW,WAAY,SAAQ,IAAI,CACrC,iBAAiB,EACjB,QAAQ,GAAG,aAAa,GAAG,cAAc,GAAG,2BAA2B,CAC1E;IACG,mDAAmD;IACnD,KAAK,EAAE,SAAS,CAAC;IACjB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,SAAS,CAAC,CAAC;IAC1D,gEAAgE;IAChE,MAAM,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,SAAS,CAAC,CAAC;IACxD;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;IAChC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,EACnB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,aAAoB,EACpB,IAAe,EACf,IAAW,EACX,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,GAAG,KAAK,EACX,EAAE,WAAW,sCA6Cb;AAED,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { cx } from "../utils/cx.js";
2
+ import { messages } from "../intl/messages.js";
3
+ import { usePanneauIntl } from "../intl/usePanneauIntl.js";
4
+ import { usePortalContainer } from "../root/PanneauRoot.js";
5
+ import { IconButton } from "../icon-button/IconButton.js";
6
+ import Dialog_module_default from "./Dialog.module.js";
7
+ import { X } from "lucide-react";
8
+ import { Dialog, DialogTrigger, Heading, Modal, ModalOverlay } from "react-aria-components";
9
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
10
+ //#region src/dialog/Dialog.tsx
11
+ /**
12
+ * A modal dialog. Controlled with `isOpen` and `onOpenChange`, or inside a `DialogTrigger` with
13
+ * its button as the first child. It traps focus, closes with Escape, and returns focus when it
14
+ * closes. On phones, it opens as a sheet at the bottom of the screen.
15
+ */
16
+ function Dialog$1({ title, children, footer, isDismissable = true, role = "dialog", size = "md", className, overlayClassName, headerClassName, bodyClassName, footerClassName, ...props }) {
17
+ const intl = usePanneauIntl();
18
+ const container = usePortalContainer();
19
+ if (container === null) return null;
20
+ return /* @__PURE__ */ jsx(ModalOverlay, {
21
+ ...props,
22
+ isDismissable,
23
+ className: cx(Dialog_module_default.overlay, overlayClassName),
24
+ UNSTABLE_portalContainer: container,
25
+ children: /* @__PURE__ */ jsx(Modal, {
26
+ className: cx(Dialog_module_default.modal, Dialog_module_default[size]),
27
+ children: /* @__PURE__ */ jsx(Dialog, {
28
+ role,
29
+ className: cx(Dialog_module_default.dialog, className),
30
+ children: ({ close }) => /* @__PURE__ */ jsxs(Fragment, { children: [
31
+ /* @__PURE__ */ jsxs("div", {
32
+ className: cx(Dialog_module_default.header, headerClassName),
33
+ children: [/* @__PURE__ */ jsx(Heading, {
34
+ slot: "title",
35
+ className: Dialog_module_default.title,
36
+ children: title
37
+ }), isDismissable ? /* @__PURE__ */ jsx(IconButton, {
38
+ icon: X,
39
+ size: "sm",
40
+ label: intl.formatMessage(messages.close),
41
+ showTooltip: false,
42
+ onPress: close
43
+ }) : null]
44
+ }),
45
+ /* @__PURE__ */ jsx("div", {
46
+ className: cx(Dialog_module_default.body, bodyClassName),
47
+ children: typeof children === "function" ? children(close) : children
48
+ }),
49
+ footer !== void 0 && footer !== null ? /* @__PURE__ */ jsx("div", {
50
+ className: cx(Dialog_module_default.footer, footerClassName),
51
+ children: typeof footer === "function" ? footer(close) : footer
52
+ }) : null
53
+ ] })
54
+ })
55
+ })
56
+ });
57
+ }
58
+ //#endregion
59
+ export { Dialog$1 as Dialog, DialogTrigger };
60
+
61
+ //# sourceMappingURL=Dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.js","names":["Dialog","styles","AriaDialog","_Fragment"],"sources":["../../src/dialog/Dialog.tsx"],"sourcesContent":["import { X } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport {\n Dialog as AriaDialog,\n Heading,\n Modal,\n ModalOverlay,\n type ModalOverlayProps,\n} from 'react-aria-components';\n\nimport { IconButton } from '../icon-button/IconButton';\nimport { messages } from '../intl/messages';\nimport { usePanneauIntl } from '../intl/usePanneauIntl';\nimport { usePortalContainer } from '../root/PanneauRoot';\nimport { cx } from '../utils/cx';\nimport styles from './Dialog.module.css';\n\nexport interface DialogProps extends Pick<\n ModalOverlayProps,\n 'isOpen' | 'defaultOpen' | 'onOpenChange' | 'isKeyboardDismissDisabled'\n> {\n /** Heading of the dialog, which also labels it. */\n title: ReactNode;\n /** Content, or a function that gets `close()`. */\n children?: ReactNode | ((close: () => void) => ReactNode);\n /** Buttons at the bottom, or a function that gets `close()`. */\n footer?: ReactNode | ((close: () => void) => ReactNode);\n /**\n * Closes on a click outside and shows a close button. Defaults to true. Turn it off for dialogs\n * that need an answer.\n */\n isDismissable?: boolean;\n /** `alertdialog` for confirmations and interruptions. Defaults to `dialog`. */\n role?: 'dialog' | 'alertdialog';\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n overlayClassName?: string;\n headerClassName?: string;\n bodyClassName?: string;\n footerClassName?: string;\n}\n\n/**\n * A modal dialog. Controlled with `isOpen` and `onOpenChange`, or inside a `DialogTrigger` with\n * its button as the first child. It traps focus, closes with Escape, and returns focus when it\n * closes. On phones, it opens as a sheet at the bottom of the screen.\n */\nexport function Dialog({\n title,\n children,\n footer,\n isDismissable = true,\n role = 'dialog',\n size = 'md',\n className,\n overlayClassName,\n headerClassName,\n bodyClassName,\n footerClassName,\n ...props\n}: DialogProps) {\n const intl = usePanneauIntl();\n const container = usePortalContainer();\n if (container === null) {\n return null;\n }\n return (\n <ModalOverlay\n {...props}\n isDismissable={isDismissable}\n className={cx(styles.overlay, overlayClassName)}\n UNSTABLE_portalContainer={container}\n >\n <Modal className={cx(styles.modal, styles[size])}>\n <AriaDialog role={role} className={cx(styles.dialog, className)}>\n {({ close }) => (\n <>\n <div className={cx(styles.header, headerClassName)}>\n <Heading slot=\"title\" className={styles.title}>\n {title}\n </Heading>\n {isDismissable ? (\n <IconButton\n icon={X}\n size=\"sm\"\n label={intl.formatMessage(messages.close)}\n showTooltip={false}\n onPress={close}\n />\n ) : null}\n </div>\n <div className={cx(styles.body, bodyClassName)}>\n {typeof children === 'function' ? children(close) : children}\n </div>\n {footer !== undefined && footer !== null ? (\n <div className={cx(styles.footer, footerClassName)}>\n {typeof footer === 'function' ? footer(close) : footer}\n </div>\n ) : null}\n </>\n )}\n </AriaDialog>\n </Modal>\n </ModalOverlay>\n );\n}\n\nexport { DialogTrigger } from 'react-aria-components';\n"],"mappings":";;;;;;;;;;;;;;;AA+CA,SAAgBA,SAAO,EACnB,OACA,UACA,QACA,gBAAgB,MAChB,OAAO,UACP,OAAO,MACP,WACA,kBACA,iBACA,eACA,iBACA,GAAG,SACS;CACZ,MAAM,OAAO,eAAe;CAC5B,MAAM,YAAY,mBAAmB;CACrC,IAAI,cAAc,MACd,OAAO;CAEX,OACI,oBAAC,cAAD;EACI,GAAI;EACW;EACf,WAAW,GAAGC,sBAAO,SAAS,gBAAgB;EAC9C,0BAA0B;EAE1B,UAAA,oBAAC,OAAD;GAAO,WAAW,GAAGA,sBAAO,OAAOA,sBAAO,KAAK;GAC3C,UAAA,oBAACC,QAAD;IAAkB;IAAM,WAAW,GAAGD,sBAAO,QAAQ,SAAS;IACxD,WAAA,EAAE,YACA,qBAAAE,UAAA,EAAA,UAAA;KACI,qBAAC,OAAD;MAAK,WAAW,GAAGF,sBAAO,QAAQ,eAAe;MAAjD,UAAA,CACI,oBAAC,SAAD;OAAS,MAAK;OAAQ,WAAWA,sBAAO;OACnC,UAAA;MACI,CAAA,GACR,gBACG,oBAAC,YAAD;OACI,MAAM;OACN,MAAK;OACL,OAAO,KAAK,cAAc,SAAS,KAAK;OACxC,aAAa;OACb,SAAS;MAAM,CAAA,IAEnB,IACH;;KACL,oBAAC,OAAD;MAAK,WAAW,GAAGA,sBAAO,MAAM,aAAa;MACxC,UAAA,OAAO,aAAa,aAAa,SAAS,KAAK,IAAI;KACnD,CAAA;KACJ,WAAW,KAAA,KAAa,WAAW,OAChC,oBAAC,OAAD;MAAK,WAAW,GAAGA,sBAAO,QAAQ,eAAe;MAC5C,UAAA,OAAO,WAAW,aAAa,OAAO,KAAK,IAAI;KAC/C,CAAA,IACL;IACR,EAAA,CAAA;GAEI,CAAA;EACT,CAAA;CACG,CAAA;AAEtB"}
@@ -0,0 +1,30 @@
1
+ import "./Dialog.css";
2
+ //#region src/dialog/Dialog.module.css
3
+ var overlay = "panneau-overlay-nLaR62";
4
+ var fade = "panneau-fade-wJ4pz5";
5
+ var modal = "panneau-modal-Ucsou3";
6
+ var sm = "panneau-sm-pQA1LI";
7
+ var lg = "panneau-lg-YG9jfw";
8
+ var rise = "panneau-rise-13o1zo";
9
+ var dialog = "panneau-dialog-Q-k-Yw";
10
+ var header = "panneau-header-rSdjF8";
11
+ var title = "panneau-title-JCRwmh";
12
+ var body = "panneau-body-HZoCzz";
13
+ var footer = "panneau-footer-zpq7M7";
14
+ var Dialog_module_default = {
15
+ overlay,
16
+ fade,
17
+ modal,
18
+ sm,
19
+ lg,
20
+ rise,
21
+ dialog,
22
+ header,
23
+ title,
24
+ body,
25
+ footer
26
+ };
27
+ //#endregion
28
+ export { body, Dialog_module_default as default, dialog, fade, footer, header, lg, modal, overlay, rise, sm, title };
29
+
30
+ //# sourceMappingURL=Dialog.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.module.js","names":[],"sources":["../../src/dialog/Dialog.module.css"],"sourcesContent":[".overlay {\n position: fixed;\n inset: 0;\n z-index: var(--panneau-z-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100dvh;\n padding: var(--panneau-space-4);\n background-color: var(--panneau-color-backdrop);\n}\n\n.overlay[data-entering] {\n animation: fade var(--panneau-duration) ease-out;\n}\n\n.overlay[data-exiting] {\n animation: fade var(--panneau-duration) ease-in reverse;\n}\n\n.modal {\n display: flex;\n width: 100%;\n max-width: 32rem;\n max-height: calc(100dvh - 2 * var(--panneau-space-4));\n outline: none;\n}\n\n.sm {\n max-width: 24rem;\n}\n\n.lg {\n max-width: 48rem;\n}\n\n.modal[data-entering] {\n animation: rise var(--panneau-duration) ease-out;\n}\n\n.dialog {\n display: flex;\n flex-direction: column;\n width: 100%;\n max-height: inherit;\n color: var(--panneau-color-text);\n background-color: var(--panneau-color-surface-raised);\n border-radius: var(--panneau-radius-lg);\n box-shadow: var(--panneau-shadow-lg);\n outline: none;\n}\n\n.header {\n display: flex;\n align-items: flex-start;\n gap: var(--panneau-space-3);\n padding: var(--panneau-space-4) var(--panneau-space-4) 0 var(--panneau-space-5);\n}\n\n.title {\n flex: 1 1 auto;\n min-width: 0;\n padding-top: var(--panneau-space-1);\n font-size: var(--panneau-font-size-lg);\n font-weight: var(--panneau-font-weight-bold);\n line-height: var(--panneau-line-height-tight);\n overflow-wrap: anywhere;\n}\n\n.body {\n flex: 1 1 auto;\n min-height: 0;\n padding: var(--panneau-space-3) var(--panneau-space-5) var(--panneau-space-4);\n overflow-y: auto;\n}\n\n.footer {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--panneau-space-2);\n padding: var(--panneau-space-3) var(--panneau-space-5) var(--panneau-space-4);\n border-top: var(--panneau-border-width) solid var(--panneau-color-border);\n}\n\n/* Phones: the dialog is a sheet at the bottom, with full-width buttons. */\n@media (max-width: 30rem) {\n .overlay {\n align-items: flex-end;\n padding: 0;\n }\n\n .modal,\n .sm,\n .lg {\n max-width: none;\n max-height: calc(100dvh - var(--panneau-space-8));\n }\n\n .dialog {\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n padding-bottom: env(safe-area-inset-bottom);\n }\n\n .footer {\n flex-direction: column-reverse;\n }\n\n .footer > * {\n width: 100%;\n }\n}\n\n@keyframes fade {\n from {\n opacity: 0;\n }\n}\n\n@keyframes rise {\n from {\n opacity: 0;\n transform: translateY(0.5rem);\n }\n}\n"],"mappings":""}
@@ -0,0 +1,54 @@
1
+ .panneau-disclosure-WME8SS {
2
+ display: flex;
3
+ flex-direction: column;
4
+ min-width: 0;
5
+ }
6
+
7
+ .panneau-trigger-0Jo--Y {
8
+ display: flex;
9
+ align-items: center;
10
+ gap: var(--panneau-space-2);
11
+ width: 100%;
12
+ min-height: var(--panneau-control-height);
13
+ padding: 0;
14
+ font-size: var(--panneau-font-size-lg);
15
+ font-weight: var(--panneau-font-weight-bold);
16
+ text-align: start;
17
+ color: var(--panneau-color-text);
18
+ cursor: pointer;
19
+ background: transparent;
20
+ border: 0;
21
+ border-radius: var(--panneau-radius-sm);
22
+ }
23
+
24
+ .panneau-trigger-0Jo--Y[data-focus-visible] {
25
+ outline: var(--panneau-focus-width) solid var(--panneau-color-focus);
26
+ outline-offset: 2px;
27
+ }
28
+
29
+ .panneau-chevron-1tYsh0 {
30
+ color: var(--panneau-color-text-muted);
31
+ transition: transform var(--panneau-duration);
32
+ }
33
+
34
+ .panneau-disclosure-WME8SS[data-expanded] .panneau-chevron-1tYsh0 {
35
+ transform: rotate(90deg);
36
+ }
37
+
38
+ .panneau-title-DSKeDu {
39
+ flex: 1 1 auto;
40
+ min-width: 0;
41
+ }
42
+
43
+ .panneau-panel-heR-bQ {
44
+ min-width: 0;
45
+ }
46
+
47
+ .panneau-panelContent-FQV3Na {
48
+ padding-top: var(--panneau-space-3);
49
+ }
50
+
51
+ .panneau-heading-pnG2s2 {
52
+ margin: 0;
53
+ font: inherit;
54
+ }
@@ -0,0 +1,20 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface DisclosureProps {
3
+ /** Title of the button that expands and collapses the content. */
4
+ title: ReactNode;
5
+ /** Content after the title, in the button: a count of errors. */
6
+ titleEnd?: ReactNode;
7
+ /** Heading level of the title. Defaults to 3. */
8
+ headingLevel?: 2 | 3 | 4 | 5 | 6;
9
+ children?: ReactNode;
10
+ isExpanded?: boolean;
11
+ defaultExpanded?: boolean;
12
+ onExpandedChange?: (isExpanded: boolean) => void;
13
+ id?: string;
14
+ className?: string;
15
+ triggerClassName?: string;
16
+ panelClassName?: string;
17
+ }
18
+ /** A section whose content can be collapsed under its title. */
19
+ export declare function Disclosure({ title, titleEnd, headingLevel, children, className, triggerClassName, panelClassName, ...props }: DisclosureProps): import("react").JSX.Element;
20
+ //# sourceMappingURL=Disclosure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Disclosure.d.ts","sourceRoot":"","sources":["../../src/disclosure/Disclosure.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAYvC,MAAM,WAAW,eAAe;IAC5B,kEAAkE;IAClE,KAAK,EAAE,SAAS,CAAC;IACjB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,iDAAiD;IACjD,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,gEAAgE;AAChE,wBAAgB,UAAU,CAAC,EACvB,KAAK,EACL,QAAQ,EACR,YAAgB,EAChB,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,GAAG,KAAK,EACX,EAAE,eAAe,+BAejB"}