@primer/components 0.0.0-2021929114541 → 0.0.0-202192923313

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 (165) hide show
  1. package/CHANGELOG.md +1 -23
  2. package/dist/browser.esm.js +49 -53
  3. package/dist/browser.esm.js.map +1 -1
  4. package/dist/browser.umd.js +46 -50
  5. package/dist/browser.umd.js.map +1 -1
  6. package/lib/ActionList/Item.d.ts +0 -6
  7. package/lib/ActionList/Item.js +1 -5
  8. package/lib/AnchoredOverlay/AnchoredOverlay.d.ts +4 -2
  9. package/lib/Autocomplete/Autocomplete.d.ts +8 -6
  10. package/lib/Autocomplete/AutocompleteInput.d.ts +8 -6
  11. package/lib/Button/Button.d.ts +4 -4
  12. package/lib/Button/ButtonClose.d.ts +21 -21
  13. package/lib/Button/ButtonDanger.d.ts +4 -4
  14. package/lib/Button/ButtonInvisible.d.ts +4 -4
  15. package/lib/Button/ButtonOutline.d.ts +4 -4
  16. package/lib/Button/ButtonPrimary.d.ts +4 -4
  17. package/lib/CircleOcticon.d.ts +19 -19
  18. package/lib/DatePicker/DatePicker.d.ts +48 -0
  19. package/lib/DatePicker/DatePicker.js +106 -0
  20. package/lib/DatePicker/DatePickerAnchor.d.ts +5 -0
  21. package/lib/DatePicker/DatePickerAnchor.js +223 -0
  22. package/lib/DatePicker/DatePickerOverlay.d.ts +3 -0
  23. package/lib/DatePicker/DatePickerOverlay.js +48 -0
  24. package/lib/DatePicker/DatePickerPanel.d.ts +2 -0
  25. package/lib/DatePicker/DatePickerPanel.js +126 -0
  26. package/lib/DatePicker/Day.d.ts +14 -0
  27. package/lib/DatePicker/Day.js +192 -0
  28. package/lib/DatePicker/Month.d.ts +9 -0
  29. package/lib/DatePicker/Month.js +122 -0
  30. package/lib/DatePicker/dateParser.d.ts +11 -0
  31. package/lib/DatePicker/dateParser.js +192 -0
  32. package/lib/DatePicker/index.d.ts +2 -0
  33. package/lib/{experiments.js → DatePicker/index.js} +3 -3
  34. package/lib/DatePicker/useDatePicker.d.ts +89 -0
  35. package/lib/DatePicker/useDatePicker.js +439 -0
  36. package/lib/Dialog.d.ts +21 -21
  37. package/lib/Dropdown.d.ts +82 -82
  38. package/lib/DropdownMenu/DropdownButton.d.ts +23 -23
  39. package/lib/FilterList.d.ts +19 -19
  40. package/lib/Position.d.ts +4 -4
  41. package/lib/SelectMenu/SelectMenu.d.ts +107 -105
  42. package/lib/SelectMenu/SelectMenuItem.d.ts +1 -1
  43. package/lib/SelectMenu/SelectMenuModal.d.ts +1 -1
  44. package/lib/TextInputWithTokens.d.ts +8 -10
  45. package/lib/TextInputWithTokens.js +29 -102
  46. package/lib/Timeline.d.ts +19 -19
  47. package/lib/Token/AvatarToken.d.ts +1 -1
  48. package/lib/Token/IssueLabelToken.d.ts +1 -1
  49. package/lib/Token/Token.d.ts +1 -1
  50. package/lib/Token/Token.js +2 -13
  51. package/lib/Token/TokenBase.js +4 -0
  52. package/lib/Token/_RemoveTokenButton.js +2 -15
  53. package/lib/_TextInputWrapper.js +1 -1
  54. package/lib/hooks/useDebounce.d.ts +2 -0
  55. package/lib/hooks/useDebounce.js +24 -0
  56. package/lib/sx.d.ts +0 -2
  57. package/lib/sx.js +0 -8
  58. package/lib/theme-preval.js +2 -2
  59. package/lib/utils/testing.d.ts +1 -1
  60. package/lib-esm/ActionList/Item.d.ts +0 -6
  61. package/lib-esm/ActionList/Item.js +1 -5
  62. package/lib-esm/AnchoredOverlay/AnchoredOverlay.d.ts +4 -2
  63. package/lib-esm/Autocomplete/Autocomplete.d.ts +8 -6
  64. package/lib-esm/Autocomplete/AutocompleteInput.d.ts +8 -6
  65. package/lib-esm/Button/Button.d.ts +4 -4
  66. package/lib-esm/Button/ButtonClose.d.ts +21 -21
  67. package/lib-esm/Button/ButtonDanger.d.ts +4 -4
  68. package/lib-esm/Button/ButtonInvisible.d.ts +4 -4
  69. package/lib-esm/Button/ButtonOutline.d.ts +4 -4
  70. package/lib-esm/Button/ButtonPrimary.d.ts +4 -4
  71. package/lib-esm/CircleOcticon.d.ts +19 -19
  72. package/lib-esm/DatePicker/DatePicker.d.ts +48 -0
  73. package/lib-esm/DatePicker/DatePicker.js +89 -0
  74. package/lib-esm/DatePicker/DatePickerAnchor.d.ts +5 -0
  75. package/lib-esm/DatePicker/DatePickerAnchor.js +196 -0
  76. package/lib-esm/DatePicker/DatePickerOverlay.d.ts +3 -0
  77. package/lib-esm/DatePicker/DatePickerOverlay.js +29 -0
  78. package/lib-esm/DatePicker/DatePickerPanel.d.ts +2 -0
  79. package/lib-esm/DatePicker/DatePickerPanel.js +100 -0
  80. package/lib-esm/DatePicker/Day.d.ts +14 -0
  81. package/lib-esm/DatePicker/Day.js +169 -0
  82. package/lib-esm/DatePicker/Month.d.ts +9 -0
  83. package/lib-esm/DatePicker/Month.js +98 -0
  84. package/lib-esm/DatePicker/dateParser.d.ts +11 -0
  85. package/lib-esm/DatePicker/dateParser.js +178 -0
  86. package/lib-esm/DatePicker/index.d.ts +2 -0
  87. package/lib-esm/DatePicker/index.js +1 -0
  88. package/lib-esm/DatePicker/useDatePicker.d.ts +89 -0
  89. package/lib-esm/DatePicker/useDatePicker.js +408 -0
  90. package/lib-esm/Dialog.d.ts +21 -21
  91. package/lib-esm/Dropdown.d.ts +82 -82
  92. package/lib-esm/DropdownMenu/DropdownButton.d.ts +23 -23
  93. package/lib-esm/FilterList.d.ts +19 -19
  94. package/lib-esm/Position.d.ts +4 -4
  95. package/lib-esm/SelectMenu/SelectMenu.d.ts +107 -105
  96. package/lib-esm/SelectMenu/SelectMenuItem.d.ts +1 -1
  97. package/lib-esm/SelectMenu/SelectMenuModal.d.ts +1 -1
  98. package/lib-esm/TextInputWithTokens.d.ts +8 -10
  99. package/lib-esm/TextInputWithTokens.js +30 -101
  100. package/lib-esm/Timeline.d.ts +19 -19
  101. package/lib-esm/Token/AvatarToken.d.ts +1 -1
  102. package/lib-esm/Token/IssueLabelToken.d.ts +1 -1
  103. package/lib-esm/Token/Token.d.ts +1 -1
  104. package/lib-esm/Token/Token.js +2 -13
  105. package/lib-esm/Token/TokenBase.js +4 -0
  106. package/lib-esm/Token/_RemoveTokenButton.js +2 -11
  107. package/lib-esm/_TextInputWrapper.js +1 -1
  108. package/lib-esm/hooks/useDebounce.d.ts +2 -0
  109. package/lib-esm/hooks/useDebounce.js +16 -0
  110. package/lib-esm/sx.d.ts +0 -2
  111. package/lib-esm/sx.js +1 -3
  112. package/lib-esm/theme-preval.js +2 -2
  113. package/lib-esm/utils/testing.d.ts +1 -1
  114. package/package.json +14 -14
  115. package/lib/ActionList2/Description.d.ts +0 -6
  116. package/lib/ActionList2/Description.js +0 -53
  117. package/lib/ActionList2/Divider.d.ts +0 -5
  118. package/lib/ActionList2/Divider.js +0 -33
  119. package/lib/ActionList2/Group.d.ts +0 -11
  120. package/lib/ActionList2/Group.js +0 -55
  121. package/lib/ActionList2/Header.d.ts +0 -26
  122. package/lib/ActionList2/Header.js +0 -55
  123. package/lib/ActionList2/Item.d.ts +0 -48
  124. package/lib/ActionList2/Item.js +0 -204
  125. package/lib/ActionList2/List.d.ts +0 -26
  126. package/lib/ActionList2/List.js +0 -56
  127. package/lib/ActionList2/Selection.d.ts +0 -5
  128. package/lib/ActionList2/Selection.js +0 -73
  129. package/lib/ActionList2/Visuals.d.ts +0 -11
  130. package/lib/ActionList2/Visuals.js +0 -90
  131. package/lib/ActionList2/hacks.d.ts +0 -30
  132. package/lib/ActionList2/hacks.js +0 -38
  133. package/lib/ActionList2/index.d.ts +0 -28
  134. package/lib/ActionList2/index.js +0 -42
  135. package/lib/experiments.d.ts +0 -1
  136. package/lib/utils/create-slots.d.ts +0 -17
  137. package/lib/utils/create-slots.js +0 -105
  138. package/lib/utils/use-force-update.d.ts +0 -1
  139. package/lib/utils/use-force-update.js +0 -19
  140. package/lib-esm/ActionList2/Description.d.ts +0 -6
  141. package/lib-esm/ActionList2/Description.js +0 -37
  142. package/lib-esm/ActionList2/Divider.d.ts +0 -5
  143. package/lib-esm/ActionList2/Divider.js +0 -21
  144. package/lib-esm/ActionList2/Group.d.ts +0 -11
  145. package/lib-esm/ActionList2/Group.js +0 -38
  146. package/lib-esm/ActionList2/Header.d.ts +0 -26
  147. package/lib-esm/ActionList2/Header.js +0 -45
  148. package/lib-esm/ActionList2/Item.d.ts +0 -48
  149. package/lib-esm/ActionList2/Item.js +0 -176
  150. package/lib-esm/ActionList2/List.d.ts +0 -26
  151. package/lib-esm/ActionList2/List.js +0 -38
  152. package/lib-esm/ActionList2/Selection.d.ts +0 -5
  153. package/lib-esm/ActionList2/Selection.js +0 -55
  154. package/lib-esm/ActionList2/Visuals.d.ts +0 -11
  155. package/lib-esm/ActionList2/Visuals.js +0 -68
  156. package/lib-esm/ActionList2/hacks.d.ts +0 -30
  157. package/lib-esm/ActionList2/hacks.js +0 -30
  158. package/lib-esm/ActionList2/index.d.ts +0 -28
  159. package/lib-esm/ActionList2/index.js +0 -29
  160. package/lib-esm/experiments.d.ts +0 -1
  161. package/lib-esm/experiments.js +0 -2
  162. package/lib-esm/utils/create-slots.d.ts +0 -17
  163. package/lib-esm/utils/create-slots.js +0 -84
  164. package/lib-esm/utils/use-force-update.d.ts +0 -1
  165. package/lib-esm/utils/use-force-update.js +0 -6
@@ -114,24 +114,6 @@ declare namespace CircleOcticon {
114
114
  slot?: string | undefined;
115
115
  style?: React.CSSProperties | undefined;
116
116
  title?: string | undefined;
117
- bg?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
118
- m?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
119
- mt?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
120
- mr?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
121
- mb?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
122
- ml?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
123
- mx?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
124
- marginX?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
125
- my?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
126
- marginY?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
127
- pt?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
128
- pr?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
129
- pb?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
130
- pl?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
131
- px?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
132
- paddingX?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
133
- py?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
134
- paddingY?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
135
117
  key?: React.Key | null | undefined;
136
118
  defaultChecked?: boolean | undefined;
137
119
  defaultValue?: string | number | readonly string[] | undefined;
@@ -184,7 +166,7 @@ declare namespace CircleOcticon {
184
166
  'aria-describedby'?: string | undefined;
185
167
  'aria-details'?: string | undefined;
186
168
  'aria-disabled'?: boolean | "true" | "false" | undefined;
187
- 'aria-dropeffect'?: "none" | "link" | "copy" | "move" | "execute" | "popup" | undefined;
169
+ 'aria-dropeffect'?: "none" | "link" | "copy" | "execute" | "move" | "popup" | undefined;
188
170
  'aria-errormessage'?: string | undefined;
189
171
  'aria-expanded'?: boolean | "true" | "false" | undefined;
190
172
  'aria-flowto'?: string | undefined;
@@ -382,6 +364,24 @@ declare namespace CircleOcticon {
382
364
  onAnimationIterationCapture?: React.AnimationEventHandler<HTMLDivElement> | undefined;
383
365
  onTransitionEnd?: React.TransitionEventHandler<HTMLDivElement> | undefined;
384
366
  onTransitionEndCapture?: React.TransitionEventHandler<HTMLDivElement> | undefined;
367
+ bg?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
368
+ m?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
369
+ mt?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
370
+ mr?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
371
+ mb?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
372
+ ml?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
373
+ mx?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
374
+ marginX?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
375
+ my?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
376
+ marginY?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
377
+ pt?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
378
+ pr?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
379
+ pb?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
380
+ pl?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
381
+ px?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
382
+ paddingX?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
383
+ py?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
384
+ paddingY?: import("styled-system").ResponsiveValue<string | number | symbol, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
385
385
  borderX?: import("styled-system").ResponsiveValue<import("csstype").Property.Border<import("styled-system").TLengthStyledSystem>, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
386
386
  borderY?: import("styled-system").ResponsiveValue<import("csstype").Property.Border<import("styled-system").TLengthStyledSystem>, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
387
387
  sx?: import("@styled-system/css").SystemStyleObject | undefined;
@@ -0,0 +1,48 @@
1
+ import React from 'react';
2
+ import { OverlayProps } from '../Overlay';
3
+ import { FocusTrapHookSettings } from '../hooks/useFocusTrap';
4
+ import { FocusZoneHookSettings } from '../hooks/useFocusZone';
5
+ import { DatePickerConfiguration, Selection } from './useDatePicker';
6
+ declare type OpenGesture = 'anchor-click' | 'anchor-key-press';
7
+ declare type CloseGesture = 'anchor-click' | 'click-outside' | 'escape';
8
+ export interface DatePickerProps extends DatePickerConfiguration {
9
+ /**
10
+ * An override to the internal ref that will be spread on to the renderAnchor
11
+ */
12
+ anchorRef?: React.RefObject<HTMLElement>;
13
+ /**
14
+ * Settings to apply to the Focus Zone on the internal `Overlay` component.
15
+ */
16
+ focusTrapSettings?: Partial<FocusTrapHookSettings>;
17
+ /**
18
+ * Settings to apply to the Focus Zone on the internal `Overlay` component.
19
+ */
20
+ focusZoneSettings?: Partial<FocusZoneHookSettings>;
21
+ initialValue?: 'today' | Date | string | null;
22
+ iconOnly?: boolean;
23
+ placeholder?: string;
24
+ /**
25
+ * Determines whether the overlay portion of the component should be shown or not
26
+ */
27
+ open?: boolean;
28
+ /**
29
+ * A callback which is called whenever the overlay is currently closed and an "open gesture" is detected.
30
+ */
31
+ onOpen?: (gesture: OpenGesture) => unknown;
32
+ /**
33
+ * A callback which is called whenever the overlay is currently open and a "close gesture" is detected.
34
+ */
35
+ onClose?: (gesture: CloseGesture) => unknown;
36
+ /**
37
+ * Props to be spread on the internal `Overlay` component.
38
+ */
39
+ overlayProps?: Partial<OverlayProps>;
40
+ /**
41
+ * A custom function component used to render the anchor element.
42
+ * Will receive the selected text as `children` prop when an item is activated.
43
+ */
44
+ renderAnchor: <T extends React.HTMLAttributes<HTMLElement>>(props: T) => JSX.Element;
45
+ value?: Selection;
46
+ }
47
+ export declare const DatePicker: React.FC<DatePickerProps>;
48
+ export {};
@@ -0,0 +1,89 @@
1
+ import React, { useRef, useState } from 'react';
2
+ import { DatePickerAnchor } from './DatePickerAnchor';
3
+ import { DatePickerProvider } from './useDatePicker';
4
+ import { DatePickerOverlay } from './DatePickerOverlay';
5
+ export const DatePicker = ({
6
+ anchorVariant,
7
+ anchorRef: externalAnchorRef,
8
+ confirmation,
9
+ confirmUnsavedClose,
10
+ dateFormat,
11
+ disableWeekends,
12
+ focusTrapSettings,
13
+ focusZoneSettings,
14
+ iconPlacement,
15
+ maxDate,
16
+ maxRangeSize,
17
+ maxSelections,
18
+ minDate,
19
+ onOpen: onOpenExternal,
20
+ onClose: onCloseExternal,
21
+ open,
22
+ overlayProps,
23
+ placeholder,
24
+ renderAnchor,
25
+ showInputPrompt,
26
+ value,
27
+ variant,
28
+ view,
29
+ weekStartsOn
30
+ }) => {
31
+ const anchorRef = useRef(null);
32
+ const [isOpen, setIsOpen] = useState(false);
33
+ const datePickerConfiguration = {
34
+ anchorVariant,
35
+ confirmation,
36
+ confirmUnsavedClose,
37
+ dateFormat,
38
+ disableWeekends,
39
+ iconPlacement,
40
+ maxDate: maxDate ? new Date(new Date(maxDate).toDateString()) : maxDate,
41
+ maxRangeSize,
42
+ maxSelections,
43
+ minDate: minDate ? new Date(new Date(minDate).toDateString()) : minDate,
44
+ placeholder,
45
+ showInputPrompt,
46
+ variant,
47
+ view,
48
+ weekStartsOn
49
+ };
50
+
51
+ const onOpen = gesture => {
52
+ setIsOpen(true);
53
+ onOpenExternal === null || onOpenExternal === void 0 ? void 0 : onOpenExternal(gesture);
54
+ };
55
+
56
+ const onClose = gesture => {
57
+ setIsOpen(false);
58
+ onCloseExternal === null || onCloseExternal === void 0 ? void 0 : onCloseExternal(gesture);
59
+ };
60
+
61
+ const toggleIsOpen = () => {
62
+ if (isOpen) {
63
+ setIsOpen(false);
64
+ onCloseExternal === null || onCloseExternal === void 0 ? void 0 : onCloseExternal('anchor-click');
65
+ } else {
66
+ setIsOpen(true);
67
+ onCloseExternal === null || onCloseExternal === void 0 ? void 0 : onCloseExternal('anchor-click');
68
+ }
69
+ };
70
+
71
+ return /*#__PURE__*/React.createElement(DatePickerProvider, {
72
+ configuration: datePickerConfiguration,
73
+ value: value,
74
+ closePicker: () => setIsOpen(false)
75
+ }, /*#__PURE__*/React.createElement(DatePickerAnchor, {
76
+ ref: anchorRef,
77
+ onAction: toggleIsOpen
78
+ }), /*#__PURE__*/React.createElement(DatePickerOverlay, {
79
+ anchorRef: externalAnchorRef !== null && externalAnchorRef !== void 0 ? externalAnchorRef : anchorRef,
80
+ renderAnchor: renderAnchor,
81
+ open: open !== null && open !== void 0 ? open : isOpen,
82
+ onOpen: onOpen,
83
+ onClose: onClose,
84
+ overlayProps: overlayProps,
85
+ focusTrapSettings: focusTrapSettings,
86
+ focusZoneSettings: focusZoneSettings
87
+ }));
88
+ };
89
+ DatePicker.displayName = "DatePicker";
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ export interface DatePickerAnchorProps {
3
+ onAction?: (event?: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>) => void;
4
+ }
5
+ export declare const DatePickerAnchor: React.ForwardRefExoticComponent<DatePickerAnchorProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,196 @@
1
+ import { CalendarIcon } from '@primer/octicons-react';
2
+ import styled from 'styled-components';
3
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
+ import Button, { ButtonInvisible } from '../Button';
5
+ import Text from '../Text';
6
+ import { get } from '../constants';
7
+ import StyledOcticon from '../StyledOcticon';
8
+ import useDatePicker from './useDatePicker';
9
+ import TextInput from '../TextInput';
10
+ import Box from '../Box';
11
+ import { parseDate } from './dateParser';
12
+ const DatePickerAnchorButton = styled(Button).withConfig({
13
+ displayName: "DatePickerAnchor__DatePickerAnchorButton",
14
+ componentId: "sc-8gpb9d-0"
15
+ })(["align-items:center;display:flex;flex-direction:row;justify-content:space-between;max-width:350px;overflow:hidden;& ", " ~ svg{margin-left:", ";}& svg ~ ", "{margin-left:", ";}"], Text, get('space.2'), Text, get('space.2'));
16
+ export const DatePickerAnchor = /*#__PURE__*/React.forwardRef(({
17
+ onAction
18
+ }, ref) => {
19
+ const {
20
+ configuration: {
21
+ anchorVariant,
22
+ iconPlacement,
23
+ placeholder,
24
+ showInputPrompt,
25
+ variant
26
+ },
27
+ disabled,
28
+ formattedDate,
29
+ onDateInput
30
+ } = useDatePicker();
31
+ const [inputValue, setInputValue] = useState(formattedDate);
32
+ const inputRef = useRef(null);
33
+ const [inputValid, setInputValid] = useState(true);
34
+ const keyPressHandler = useCallback(event => {
35
+ if (disabled) {
36
+ return;
37
+ }
38
+
39
+ if ([' ', 'Enter'].includes(event.key)) {
40
+ onAction === null || onAction === void 0 ? void 0 : onAction(event);
41
+ }
42
+ }, [disabled, onAction]);
43
+ const clickHandler = useCallback(event => {
44
+ if (disabled) {
45
+ return;
46
+ }
47
+
48
+ onAction === null || onAction === void 0 ? void 0 : onAction(event);
49
+ }, [disabled, onAction]);
50
+ useEffect(() => {
51
+ if (document.activeElement !== inputRef.current) {
52
+ setInputValue(formattedDate);
53
+ }
54
+ }, [formattedDate]);
55
+ const onInputChangeHandler = useCallback(e => {
56
+ const value = e.currentTarget.value;
57
+ setInputValue(value);
58
+
59
+ if (!value) {
60
+ return;
61
+ }
62
+
63
+ const parsedDate = parseDate(value, variant);
64
+ setInputValid(!!parsedDate);
65
+
66
+ if (parsedDate) {
67
+ onDateInput(parsedDate);
68
+ }
69
+ }, [onDateInput, variant]);
70
+
71
+ const onBlurHandler = () => {
72
+ setInputValue(formattedDate);
73
+ };
74
+
75
+ const inputSx = useMemo(() => {
76
+ let sxObject = {};
77
+
78
+ if (iconPlacement === 'start') {
79
+ sxObject = { ...sxObject,
80
+ pl: 5,
81
+ pr: 2
82
+ };
83
+ } else if (iconPlacement === 'end') {
84
+ sxObject = { ...sxObject,
85
+ pl: 2,
86
+ pr: 5
87
+ };
88
+ }
89
+
90
+ if (showInputPrompt) {
91
+ sxObject = { ...sxObject,
92
+ pt: '20px'
93
+ };
94
+ }
95
+
96
+ if (inputValid) {
97
+ sxObject = { ...sxObject,
98
+ color: 'success.emphasis'
99
+ };
100
+ } else {
101
+ sxObject = { ...sxObject,
102
+ color: 'danger.emphasis'
103
+ };
104
+ }
105
+
106
+ return sxObject;
107
+ }, [iconPlacement, inputValid, showInputPrompt]);
108
+ const inputPrompt = useMemo(() => {
109
+ if (!showInputPrompt) return;
110
+
111
+ switch (variant) {
112
+ case 'single':
113
+ return 'MM/DD/YYYY';
114
+
115
+ case 'multi':
116
+ return 'MM/DD/YYYY, MM/DD/YYYY, ...';
117
+
118
+ case 'range':
119
+ return 'MM/DD/YYYY - MM/DD/YYYY';
120
+
121
+ default:
122
+ return 'MM/DD/YYYY';
123
+ }
124
+ }, [showInputPrompt, variant]);
125
+
126
+ if (anchorVariant === 'input') {
127
+ const calendarButton = side => /*#__PURE__*/React.createElement(ButtonInvisible, {
128
+ onClick: clickHandler,
129
+ sx: {
130
+ width: '32px',
131
+ px: '6px',
132
+ position: 'absolute',
133
+ [side]: '1px',
134
+ top: '1px',
135
+ bottom: '1px'
136
+ }
137
+ }, /*#__PURE__*/React.createElement(StyledOcticon, {
138
+ icon: CalendarIcon
139
+ }));
140
+
141
+ const promptSx = () => {
142
+ let sxObject = {
143
+ position: 'absolute',
144
+ top: '2px',
145
+ fontSize: '11px',
146
+ color: 'fg.subtle'
147
+ };
148
+
149
+ if (iconPlacement === 'start') {
150
+ sxObject = { ...sxObject,
151
+ left: '36px'
152
+ };
153
+ }
154
+
155
+ return sxObject;
156
+ };
157
+
158
+ return /*#__PURE__*/React.createElement(Box, {
159
+ ref: ref,
160
+ sx: {
161
+ position: 'relative',
162
+ display: 'flex',
163
+ flex: 1
164
+ }
165
+ }, iconPlacement === 'start' && calendarButton('left'), showInputPrompt && /*#__PURE__*/React.createElement(Text, {
166
+ sx: promptSx()
167
+ }, inputPrompt), /*#__PURE__*/React.createElement(TextInput, {
168
+ ref: inputRef,
169
+ placeholder: placeholder,
170
+ value: inputValue,
171
+ onChange: onInputChangeHandler,
172
+ sx: inputSx,
173
+ onBlur: onBlurHandler
174
+ }), iconPlacement === 'end' && calendarButton('right'));
175
+ }
176
+
177
+ const calendarIcon = () => /*#__PURE__*/React.createElement(StyledOcticon, {
178
+ icon: CalendarIcon,
179
+ color: "fg.muted",
180
+ sx: {
181
+ my: '2px'
182
+ }
183
+ });
184
+
185
+ return /*#__PURE__*/React.createElement(Box, {
186
+ ref: ref
187
+ }, /*#__PURE__*/React.createElement(DatePickerAnchorButton, {
188
+ onClick: clickHandler,
189
+ onKeyPress: keyPressHandler
190
+ }, iconPlacement === 'start' && calendarIcon(), anchorVariant !== 'icon-only' && /*#__PURE__*/React.createElement(Text, {
191
+ sx: {
192
+ overflow: 'hidden',
193
+ textOverflow: 'ellipsis'
194
+ }
195
+ }, formattedDate), iconPlacement === 'end' && calendarIcon()));
196
+ });
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import { AnchoredOverlayProps } from '../AnchoredOverlay';
3
+ export declare const DatePickerOverlay: React.FC<AnchoredOverlayProps>;
@@ -0,0 +1,29 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
3
+ import React, { useState } from 'react';
4
+ import useDatePicker from './useDatePicker';
5
+ import { AnchoredOverlay } from '../AnchoredOverlay';
6
+ import { DatePickerPanel } from './DatePickerPanel';
7
+ export const DatePickerOverlay = ({
8
+ onClose,
9
+ ...rest
10
+ }) => {
11
+ const {
12
+ onClose: onDatePickerClose
13
+ } = useDatePicker();
14
+ const [suspendFocusTrap, setSuspendFocusTrap] = useState(false);
15
+
16
+ const onOverlayClose = async gesture => {
17
+ if (!suspendFocusTrap) {
18
+ setSuspendFocusTrap(true);
19
+ await onDatePickerClose();
20
+ setSuspendFocusTrap(false);
21
+ onClose === null || onClose === void 0 ? void 0 : onClose(gesture);
22
+ }
23
+ };
24
+
25
+ return /*#__PURE__*/React.createElement(AnchoredOverlay, _extends({
26
+ onClose: onOverlayClose
27
+ }, rest), /*#__PURE__*/React.createElement(DatePickerPanel, null));
28
+ };
29
+ DatePickerOverlay.displayName = "DatePickerOverlay";
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const DatePickerPanel: () => JSX.Element;
@@ -0,0 +1,100 @@
1
+ import { addMonths, subMonths } from 'date-fns';
2
+ import React, { useMemo } from 'react';
3
+ import Box from '../Box';
4
+ import { Month } from './Month';
5
+ import styled from 'styled-components';
6
+ import { get } from '../constants';
7
+ import useDatePicker from './useDatePicker';
8
+ import { ChevronLeftIcon, ChevronRightIcon } from '@primer/octicons-react';
9
+ import StyledOcticon from '../StyledOcticon';
10
+ import Button, { ButtonPrimary } from '../Button';
11
+ const DatePickerPanelContainer = styled(Box).withConfig({
12
+ displayName: "DatePickerPanel__DatePickerPanelContainer",
13
+ componentId: "sc-19upxpo-0"
14
+ })(["align-items:stretch;display:flex;flex-direction:column;"]);
15
+ const DatePickerPanelMonths = styled(Box).withConfig({
16
+ displayName: "DatePickerPanel__DatePickerPanelMonths",
17
+ componentId: "sc-19upxpo-1"
18
+ })(["align-items:flex-start;display:flex;flex-direction:row;gap:", ";padding:", ";position:relative;"], get('space.6'), get('space.3'));
19
+ const DatePickerPanelFooter = styled(Box).withConfig({
20
+ displayName: "DatePickerPanel__DatePickerPanelFooter",
21
+ componentId: "sc-19upxpo-2"
22
+ })(["align-items:flex-start;border-top:1px solid;border-top-color:", ";display:flex;gap:", ";padding-top:12px;padding-bottom:12px;padding-left:", ";padding-right:", ";flex-direction:row;justify-content:space-between;position:relative;"], get('colors.border.default'), get('space.6'), get('space.3'), get('space.3'));
23
+ const ArrowButton = styled(Button).withConfig({
24
+ displayName: "DatePickerPanel__ArrowButton",
25
+ componentId: "sc-19upxpo-3"
26
+ })(["position:absolute;width:40px;height:28px;top:12px;", ";"], props => `${props.side}: ${get('space.3')(props)}`);
27
+ export const DatePickerPanel = () => {
28
+ const {
29
+ configuration,
30
+ saveValue,
31
+ revertValue,
32
+ currentViewingDate,
33
+ goToMonth,
34
+ nextMonth,
35
+ previousMonth
36
+ } = useDatePicker();
37
+ const previousDisabled = useMemo(() => {
38
+ const {
39
+ minDate
40
+ } = configuration;
41
+ if (!minDate) return false;
42
+ const previous = subMonths(currentViewingDate, 1);
43
+
44
+ if (minDate.getFullYear() >= previous.getFullYear() && minDate.getMonth() > previous.getMonth()) {
45
+ return true;
46
+ }
47
+
48
+ return false;
49
+ }, [configuration, currentViewingDate]);
50
+ const nextDisabled = useMemo(() => {
51
+ const {
52
+ maxDate,
53
+ view
54
+ } = configuration;
55
+ if (!maxDate) return false;
56
+ const next = addMonths(currentViewingDate, view === '2-month' ? 2 : 1);
57
+
58
+ if (maxDate.getFullYear() <= next.getFullYear() && maxDate.getMonth() < next.getMonth()) {
59
+ return true;
60
+ }
61
+
62
+ return false;
63
+ }, [configuration, currentViewingDate]);
64
+ return /*#__PURE__*/React.createElement(DatePickerPanelContainer, null, /*#__PURE__*/React.createElement(DatePickerPanelMonths, null, /*#__PURE__*/React.createElement(ArrowButton, {
65
+ variant: "small",
66
+ side: "left",
67
+ onClick: previousMonth,
68
+ disabled: previousDisabled
69
+ }, /*#__PURE__*/React.createElement(StyledOcticon, {
70
+ icon: ChevronLeftIcon,
71
+ color: "fg.muted"
72
+ })), /*#__PURE__*/React.createElement(Month, {
73
+ month: currentViewingDate.getMonth(),
74
+ year: currentViewingDate.getFullYear()
75
+ }), configuration.view === '2-month' && /*#__PURE__*/React.createElement(Month, {
76
+ month: addMonths(currentViewingDate, 1).getMonth(),
77
+ year: addMonths(currentViewingDate, 1).getFullYear()
78
+ }), /*#__PURE__*/React.createElement(ArrowButton, {
79
+ variant: "small",
80
+ side: "right",
81
+ onClick: nextMonth,
82
+ disabled: nextDisabled
83
+ }, /*#__PURE__*/React.createElement(StyledOcticon, {
84
+ icon: ChevronRightIcon,
85
+ color: "fg.muted"
86
+ }))), /*#__PURE__*/React.createElement(DatePickerPanelFooter, null, /*#__PURE__*/React.createElement(Box, null, /*#__PURE__*/React.createElement(Button, {
87
+ variant: "small",
88
+ sx: {
89
+ mr: 1
90
+ },
91
+ onClick: () => revertValue()
92
+ }, "Reset"), /*#__PURE__*/React.createElement(Button, {
93
+ variant: "small",
94
+ onClick: () => goToMonth(new Date())
95
+ }, "Today")), configuration.confirmation && /*#__PURE__*/React.createElement(ButtonPrimary, {
96
+ variant: "small",
97
+ onClick: () => saveValue()
98
+ }, "Apply")));
99
+ };
100
+ DatePickerPanel.displayName = "DatePickerPanel";
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import { FontSizeProps } from 'styled-system';
3
+ import { SystemCommonProps, SystemLayoutProps } from '../constants';
4
+ import { SxProp } from '../sx';
5
+ import { DaySelection } from './useDatePicker';
6
+ export declare type DayProps = {
7
+ blocked?: boolean;
8
+ disabled?: boolean;
9
+ onAction?: (date: Date, event?: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>) => void;
10
+ selected?: DaySelection;
11
+ date: Date;
12
+ } & FontSizeProps & SystemCommonProps & SxProp & SystemLayoutProps;
13
+ export declare const Day: React.FC<DayProps>;
14
+ export declare const BlankDay: import("styled-components").StyledComponent<"div", any, import("styled-system").SpaceProps<Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>, string | number | symbol> & import("styled-system").ColorProps<Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>, string | number | symbol> & import("styled-system").TypographyProps<Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> & import("styled-system").LayoutProps<Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> & import("styled-system").FlexboxProps<Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> & import("styled-system").GridProps<Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> & import("styled-system").BackgroundProps<Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>, import("csstype").Property.Background<import("styled-system").TLengthStyledSystem>> & import("styled-system").BorderProps<Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>, import("csstype").Property.Border<import("styled-system").TLengthStyledSystem>> & import("styled-system").PositionProps<Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> & import("styled-system").ShadowProps<Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> & SxProp, never>;