@primer/components 31.0.2-rc.c7dafefb → 31.2.0-rc.25d7c83f

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 (230) hide show
  1. package/.storybook/main.js +7 -9
  2. package/.storybook/preview.js +5 -1
  3. package/CHANGELOG.md +23 -1
  4. package/dist/browser.esm.js +623 -620
  5. package/dist/browser.esm.js.map +1 -1
  6. package/dist/browser.umd.js +164 -161
  7. package/dist/browser.umd.js.map +1 -1
  8. package/docs/content/ActionList2.mdx +354 -0
  9. package/docs/content/FilterList.md +2 -2
  10. package/docs/content/TextInputWithTokens.mdx +114 -0
  11. package/docs/content/getting-started.md +1 -1
  12. package/docs/content/theming.md +23 -0
  13. package/docs/src/@primer/gatsby-theme-doctocat/components/hero.js +1 -3
  14. package/docs/src/@primer/gatsby-theme-doctocat/components/live-preview-wrapper.js +1 -1
  15. package/docs/src/@primer/gatsby-theme-doctocat/live-code-scope.js +17 -0
  16. package/lib/ActionList/Header.js +1 -1
  17. package/lib/ActionList2/Description.d.ts +12 -0
  18. package/lib/ActionList2/Description.js +53 -0
  19. package/lib/ActionList2/Divider.d.ts +5 -0
  20. package/lib/ActionList2/Divider.js +35 -0
  21. package/lib/ActionList2/Group.d.ts +11 -0
  22. package/lib/ActionList2/Group.js +57 -0
  23. package/lib/ActionList2/Header.d.ts +26 -0
  24. package/lib/ActionList2/Header.js +55 -0
  25. package/lib/ActionList2/Item.d.ts +63 -0
  26. package/lib/ActionList2/Item.js +234 -0
  27. package/lib/ActionList2/LinkItem.d.ts +17 -0
  28. package/lib/ActionList2/LinkItem.js +57 -0
  29. package/lib/ActionList2/List.d.ts +26 -0
  30. package/lib/ActionList2/List.js +59 -0
  31. package/lib/ActionList2/Selection.d.ts +5 -0
  32. package/lib/ActionList2/Selection.js +70 -0
  33. package/lib/ActionList2/Visuals.d.ts +9 -0
  34. package/lib/ActionList2/Visuals.js +90 -0
  35. package/lib/ActionList2/index.d.ts +36 -0
  36. package/lib/ActionList2/index.js +47 -0
  37. package/lib/Autocomplete/Autocomplete.d.ts +4 -4
  38. package/lib/Autocomplete/AutocompleteInput.d.ts +4 -4
  39. package/lib/Button/Button.d.ts +5 -5
  40. package/lib/Button/ButtonBase.d.ts +1 -1
  41. package/lib/Button/ButtonClose.d.ts +3 -3
  42. package/lib/Button/ButtonDanger.d.ts +5 -5
  43. package/lib/Button/ButtonInvisible.d.ts +5 -5
  44. package/lib/Button/ButtonOutline.d.ts +5 -5
  45. package/lib/Button/ButtonPrimary.d.ts +5 -5
  46. package/lib/CircleBadge.d.ts +2 -2
  47. package/lib/CircleOcticon.d.ts +4 -4
  48. package/lib/Dialog.d.ts +4 -4
  49. package/lib/Dropdown.d.ts +16 -16
  50. package/lib/DropdownMenu/DropdownButton.d.ts +6 -6
  51. package/lib/FilterList.d.ts +3 -3
  52. package/lib/Flash.d.ts +1 -1
  53. package/lib/Label.d.ts +1 -1
  54. package/lib/Overlay.js +3 -1
  55. package/lib/Portal/Portal.js +3 -2
  56. package/lib/Position.d.ts +4 -4
  57. package/lib/ProgressBar.d.ts +1 -1
  58. package/lib/SelectMenu/SelectMenu.d.ts +24 -24
  59. package/lib/SelectMenu/SelectMenuItem.d.ts +1 -1
  60. package/lib/TextInputWithTokens.d.ts +8 -4
  61. package/lib/TextInputWithTokens.js +61 -8
  62. package/lib/Timeline.d.ts +4 -4
  63. package/lib/Token/AvatarToken.d.ts +1 -1
  64. package/lib/Token/IssueLabelToken.d.ts +1 -1
  65. package/lib/Token/Token.d.ts +1 -1
  66. package/lib/_TextInputWrapper.d.ts +1 -1
  67. package/lib/_TextInputWrapper.js +2 -2
  68. package/lib/__tests__/ActionList2.test.d.ts +1 -0
  69. package/lib/__tests__/ActionList2.test.js +53 -0
  70. package/lib/__tests__/AnchoredOverlay.test.js +4 -2
  71. package/lib/__tests__/KeyPaths.types.test.d.ts +11 -0
  72. package/lib/__tests__/KeyPaths.types.test.js +10 -0
  73. package/lib/__tests__/TextInputWithTokens.test.js +138 -7
  74. package/lib/__tests__/utils/createSlots.test.d.ts +1 -0
  75. package/lib/__tests__/utils/createSlots.test.js +75 -0
  76. package/lib/hooks/useAnchoredPosition.js +3 -2
  77. package/lib/hooks/useCombinedRefs.d.ts +2 -2
  78. package/lib/hooks/useCombinedRefs.js +4 -6
  79. package/lib/hooks/useResizeObserver.js +2 -2
  80. package/lib/stories/ActionList2.stories.js +907 -0
  81. package/lib/stories/TextInput.stories.js +144 -0
  82. package/lib/stories/TextInputWithTokens.stories.js +18 -1
  83. package/lib/stories/Token.stories.js +19 -2
  84. package/lib/sx.d.ts +10 -2
  85. package/lib/sx.js +8 -0
  86. package/lib/theme-preval.js +81 -2
  87. package/lib/theme.d.ts +78 -0
  88. package/lib/theme.js +3 -1
  89. package/lib/unreleased.d.ts +7 -0
  90. package/lib/unreleased.js +18 -0
  91. package/lib/utils/create-slots.d.ts +17 -0
  92. package/lib/utils/create-slots.js +105 -0
  93. package/lib/utils/testing.d.ts +14 -1
  94. package/lib/utils/types/KeyPaths.d.ts +3 -0
  95. package/lib/utils/types/KeyPaths.js +1 -0
  96. package/lib/utils/use-force-update.d.ts +1 -0
  97. package/lib/utils/use-force-update.js +19 -0
  98. package/lib/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  99. package/lib/utils/useIsomorphicLayoutEffect.js +12 -0
  100. package/lib-esm/ActionList/Header.js +1 -1
  101. package/lib-esm/ActionList2/Description.d.ts +12 -0
  102. package/lib-esm/ActionList2/Description.js +37 -0
  103. package/lib-esm/ActionList2/Divider.d.ts +5 -0
  104. package/lib-esm/ActionList2/Divider.js +23 -0
  105. package/lib-esm/ActionList2/Group.d.ts +11 -0
  106. package/lib-esm/ActionList2/Group.js +40 -0
  107. package/lib-esm/ActionList2/Header.d.ts +26 -0
  108. package/lib-esm/ActionList2/Header.js +44 -0
  109. package/lib-esm/ActionList2/Item.d.ts +63 -0
  110. package/lib-esm/ActionList2/Item.js +201 -0
  111. package/lib-esm/ActionList2/LinkItem.d.ts +17 -0
  112. package/lib-esm/ActionList2/LinkItem.js +43 -0
  113. package/lib-esm/ActionList2/List.d.ts +26 -0
  114. package/lib-esm/ActionList2/List.js +37 -0
  115. package/lib-esm/ActionList2/Selection.d.ts +5 -0
  116. package/lib-esm/ActionList2/Selection.js +52 -0
  117. package/lib-esm/ActionList2/Visuals.d.ts +9 -0
  118. package/lib-esm/ActionList2/Visuals.js +68 -0
  119. package/lib-esm/ActionList2/index.d.ts +36 -0
  120. package/lib-esm/ActionList2/index.js +33 -0
  121. package/lib-esm/Autocomplete/Autocomplete.d.ts +4 -4
  122. package/lib-esm/Autocomplete/AutocompleteInput.d.ts +4 -4
  123. package/lib-esm/Button/Button.d.ts +5 -5
  124. package/lib-esm/Button/ButtonBase.d.ts +1 -1
  125. package/lib-esm/Button/ButtonClose.d.ts +3 -3
  126. package/lib-esm/Button/ButtonDanger.d.ts +5 -5
  127. package/lib-esm/Button/ButtonInvisible.d.ts +5 -5
  128. package/lib-esm/Button/ButtonOutline.d.ts +5 -5
  129. package/lib-esm/Button/ButtonPrimary.d.ts +5 -5
  130. package/lib-esm/CircleBadge.d.ts +2 -2
  131. package/lib-esm/CircleOcticon.d.ts +4 -4
  132. package/lib-esm/Dialog.d.ts +4 -4
  133. package/lib-esm/Dropdown.d.ts +16 -16
  134. package/lib-esm/DropdownMenu/DropdownButton.d.ts +6 -6
  135. package/lib-esm/FilterList.d.ts +3 -3
  136. package/lib-esm/Flash.d.ts +1 -1
  137. package/lib-esm/Label.d.ts +1 -1
  138. package/lib-esm/Overlay.js +2 -1
  139. package/lib-esm/Portal/Portal.js +2 -1
  140. package/lib-esm/Position.d.ts +4 -4
  141. package/lib-esm/ProgressBar.d.ts +1 -1
  142. package/lib-esm/SelectMenu/SelectMenu.d.ts +24 -24
  143. package/lib-esm/SelectMenu/SelectMenuItem.d.ts +1 -1
  144. package/lib-esm/TextInputWithTokens.d.ts +8 -4
  145. package/lib-esm/TextInputWithTokens.js +60 -8
  146. package/lib-esm/Timeline.d.ts +4 -4
  147. package/lib-esm/Token/AvatarToken.d.ts +1 -1
  148. package/lib-esm/Token/IssueLabelToken.d.ts +1 -1
  149. package/lib-esm/Token/Token.d.ts +1 -1
  150. package/lib-esm/_TextInputWrapper.d.ts +1 -1
  151. package/lib-esm/_TextInputWrapper.js +2 -2
  152. package/lib-esm/__tests__/ActionList2.test.d.ts +1 -0
  153. package/lib-esm/__tests__/ActionList2.test.js +41 -0
  154. package/lib-esm/__tests__/AnchoredOverlay.test.js +4 -2
  155. package/lib-esm/__tests__/KeyPaths.types.test.d.ts +11 -0
  156. package/lib-esm/__tests__/KeyPaths.types.test.js +3 -0
  157. package/lib-esm/__tests__/TextInputWithTokens.test.js +132 -8
  158. package/lib-esm/__tests__/utils/createSlots.test.d.ts +1 -0
  159. package/lib-esm/__tests__/utils/createSlots.test.js +67 -0
  160. package/lib-esm/hooks/useAnchoredPosition.js +2 -1
  161. package/lib-esm/hooks/useCombinedRefs.d.ts +2 -2
  162. package/lib-esm/hooks/useCombinedRefs.js +3 -2
  163. package/lib-esm/hooks/useResizeObserver.js +2 -2
  164. package/lib-esm/stories/ActionList2.stories.js +796 -0
  165. package/lib-esm/stories/TextInput.stories.js +117 -0
  166. package/lib-esm/stories/TextInputWithTokens.stories.js +14 -0
  167. package/lib-esm/stories/Token.stories.js +14 -1
  168. package/lib-esm/sx.d.ts +10 -2
  169. package/lib-esm/sx.js +3 -1
  170. package/lib-esm/theme-preval.js +81 -2
  171. package/lib-esm/theme.d.ts +78 -0
  172. package/lib-esm/theme.js +2 -1
  173. package/lib-esm/unreleased.d.ts +7 -0
  174. package/lib-esm/unreleased.js +8 -0
  175. package/lib-esm/utils/create-slots.d.ts +17 -0
  176. package/lib-esm/utils/create-slots.js +84 -0
  177. package/lib-esm/utils/testing.d.ts +14 -1
  178. package/lib-esm/utils/types/KeyPaths.d.ts +3 -0
  179. package/lib-esm/utils/types/KeyPaths.js +1 -0
  180. package/lib-esm/utils/use-force-update.d.ts +1 -0
  181. package/lib-esm/utils/use-force-update.js +6 -0
  182. package/lib-esm/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  183. package/lib-esm/utils/useIsomorphicLayoutEffect.js +3 -0
  184. package/migrating.md +1 -1
  185. package/package-lock.json +38098 -45
  186. package/package.json +7 -3
  187. package/script/build +2 -0
  188. package/src/ActionList/Header.tsx +1 -1
  189. package/src/ActionList2/Description.tsx +49 -0
  190. package/src/ActionList2/Divider.tsx +24 -0
  191. package/src/ActionList2/Group.tsx +34 -0
  192. package/src/ActionList2/Header.tsx +58 -0
  193. package/src/ActionList2/Item.tsx +223 -0
  194. package/src/ActionList2/LinkItem.tsx +49 -0
  195. package/src/ActionList2/List.tsx +55 -0
  196. package/src/ActionList2/Selection.tsx +40 -0
  197. package/src/ActionList2/Visuals.tsx +76 -0
  198. package/src/ActionList2/index.ts +39 -0
  199. package/src/Overlay.tsx +2 -1
  200. package/src/Portal/Portal.tsx +2 -1
  201. package/src/TextInputWithTokens.tsx +64 -8
  202. package/src/_TextInputWrapper.tsx +8 -0
  203. package/src/__tests__/ActionList2.test.tsx +47 -0
  204. package/src/__tests__/AnchoredOverlay.test.tsx +2 -2
  205. package/src/__tests__/KeyPaths.types.test.ts +14 -0
  206. package/src/__tests__/TextInputWithTokens.test.tsx +123 -1
  207. package/src/__tests__/__snapshots__/ActionList2.test.tsx.snap +14 -0
  208. package/src/__tests__/__snapshots__/AnchoredOverlay.test.tsx.snap +35 -135
  209. package/src/__tests__/__snapshots__/Autocomplete.test.tsx.snap +7 -0
  210. package/src/__tests__/__snapshots__/TextInput.test.tsx.snap +6 -0
  211. package/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap +463 -0
  212. package/src/__tests__/utils/__snapshots__/createSlots.test.tsx.snap +55 -0
  213. package/src/__tests__/utils/createSlots.test.tsx +74 -0
  214. package/src/hooks/useAnchoredPosition.ts +2 -1
  215. package/src/hooks/useCombinedRefs.ts +3 -3
  216. package/src/hooks/useResizeObserver.ts +2 -2
  217. package/src/stories/ActionList2.stories.tsx +1290 -0
  218. package/src/stories/Button.stories.tsx +1 -1
  219. package/src/stories/TextInput.stories.tsx +113 -0
  220. package/src/stories/TextInputWithTokens.stories.tsx +9 -0
  221. package/src/stories/Token.stories.tsx +12 -1
  222. package/src/sx.ts +17 -2
  223. package/src/theme-preval.js +1 -0
  224. package/src/theme.ts +86 -0
  225. package/src/unreleased.ts +9 -0
  226. package/src/utils/create-slots.tsx +96 -0
  227. package/src/utils/types/KeyPaths.ts +10 -0
  228. package/src/utils/use-force-update.ts +7 -0
  229. package/src/utils/useIsomorphicLayoutEffect.ts +10 -0
  230. package/stats.html +1 -1
@@ -0,0 +1,796 @@
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 { ServerIcon, PlusCircleIcon, TypographyIcon, VersionsIcon, SearchIcon, NoteIcon, ProjectIcon, FilterIcon, GearIcon, ArrowRightIcon, ArrowLeftIcon, LinkIcon, LawIcon, StarIcon, GitForkIcon, AlertIcon, TableIcon, PeopleIcon, CalendarIcon, IssueOpenedIcon, NumberIcon, XIcon, RepoIcon } from '@primer/octicons-react';
4
+ import React, { forwardRef } from 'react';
5
+ import styled from 'styled-components';
6
+ import { DndProvider, useDrag, useDrop } from 'react-dnd';
7
+ import { HTML5Backend } from 'react-dnd-html5-backend';
8
+ import { Label, ThemeProvider } from '..';
9
+ import { ActionList as _ActionList } from '../ActionList2';
10
+ import { Header } from '../ActionList/Header';
11
+ import BaseStyles from '../BaseStyles';
12
+ import Avatar from '../Avatar';
13
+ import { ButtonInvisible } from '../Button';
14
+ import TextInput from '../TextInput';
15
+ import Spinner from '../Spinner';
16
+ import Box from '../Box';
17
+ import { AnchoredOverlay } from '../AnchoredOverlay';
18
+ const ActionList = Object.assign(_ActionList, {
19
+ Header
20
+ });
21
+ const meta = {
22
+ title: 'Composite components/ActionList2',
23
+ component: ActionList,
24
+ decorators: [Story => /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(BaseStyles, null, /*#__PURE__*/React.createElement(Story, null)))],
25
+ parameters: {
26
+ controls: {
27
+ disable: true
28
+ }
29
+ }
30
+ };
31
+ export default meta;
32
+ const ErsatzOverlay = styled.div.withConfig({
33
+ displayName: "ActionList2stories__ErsatzOverlay",
34
+ componentId: "f9cezu-0"
35
+ })(["border-radius:12px;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 8px 24px rgba(149,157,165,0.2);overflow:hidden;max-width:", ";"], ({
36
+ maxWidth
37
+ }) => maxWidth || 'none');
38
+ export function SimpleListStory() {
39
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Simple List"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, null, /*#__PURE__*/React.createElement(ActionList.Item, null, "Copy link"), /*#__PURE__*/React.createElement(ActionList.Item, null, "Quote reply"), /*#__PURE__*/React.createElement(ActionList.Item, null, "Edit comment"), /*#__PURE__*/React.createElement(ActionList.Divider, null), /*#__PURE__*/React.createElement(ActionList.Item, {
40
+ variant: "danger"
41
+ }, "Delete file"))));
42
+ }
43
+ SimpleListStory.storyName = 'Simple List';
44
+ export function WithIcon() {
45
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "With Icon"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, null, /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(LinkIcon, null)), "github.com/primer"), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(LawIcon, null)), "MIT License"), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null)), "256 stars"), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(GitForkIcon, null)), "3 forks"), /*#__PURE__*/React.createElement(ActionList.Item, {
46
+ variant: "danger"
47
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(AlertIcon, null)), "4 vulnerabilities"))));
48
+ }
49
+ WithIcon.storyName = 'With Icon';
50
+ const users = [{
51
+ login: 'pksjce',
52
+ name: 'Pavithra Kodmad'
53
+ }, {
54
+ login: 'jfuchs',
55
+ name: 'Jonathan Fuchs'
56
+ }, {
57
+ login: 'colebemis',
58
+ name: 'Cole Bemis'
59
+ }, {
60
+ login: 'mperrotti',
61
+ name: 'Mike Perrotti'
62
+ }, {
63
+ login: 'dgreif',
64
+ name: 'Dusty Greif'
65
+ }, {
66
+ login: 'smockle',
67
+ name: 'Clay Miller'
68
+ }, {
69
+ login: 'siddharthkp',
70
+ name: 'Siddharth Kshetrapal'
71
+ }];
72
+ export function WithAvatar() {
73
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "With Avatar"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, null, users.map(user => /*#__PURE__*/React.createElement(ActionList.Item, {
74
+ key: user.login
75
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(Avatar, {
76
+ src: `https://github.com/${user.login}.png`
77
+ })), user.login)))));
78
+ }
79
+ WithAvatar.storyName = 'With Avatar';
80
+ const labels = [{
81
+ name: 'blocked',
82
+ color: '#86181d',
83
+ description: 'Someone or something is preventing this from moving forward'
84
+ }, {
85
+ name: 'dependencies',
86
+ color: '#0366d6',
87
+ description: 'Pull requests that update a dependency file'
88
+ }, {
89
+ name: 'duplicate',
90
+ color: '#cfd3d7',
91
+ description: 'This issue or pull request already exists'
92
+ }, {
93
+ name: 'good first issue',
94
+ color: '#7057ff',
95
+ description: 'Good for newcomers'
96
+ }];
97
+
98
+ const LabelColor = ({
99
+ color
100
+ }) => /*#__PURE__*/React.createElement(Box, {
101
+ sx: {
102
+ backgroundColor: color,
103
+ width: '14px',
104
+ height: '14px',
105
+ borderRadius: 3
106
+ }
107
+ });
108
+
109
+ LabelColor.displayName = "LabelColor";
110
+ export function WithDescription() {
111
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "With Description & Dividers"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, {
112
+ showDividers: true
113
+ }, users.map(user => /*#__PURE__*/React.createElement(ActionList.Item, {
114
+ key: user.login
115
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(Avatar, {
116
+ src: `https://github.com/${user.login}.png`
117
+ })), user.login, /*#__PURE__*/React.createElement(ActionList.Description, null, user.name))), /*#__PURE__*/React.createElement(ActionList.Divider, null), labels.map((label, index) => /*#__PURE__*/React.createElement(ActionList.Item, {
118
+ key: index
119
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(LabelColor, {
120
+ color: label.color
121
+ })), label.name, /*#__PURE__*/React.createElement(ActionList.Description, {
122
+ variant: "block"
123
+ }, label.description))))));
124
+ }
125
+ WithDescription.storyName = 'With Description & Dividers';
126
+ const projects = [{
127
+ name: 'Primer Backlog',
128
+ scope: 'GitHub'
129
+ }, {
130
+ name: 'Accessibility',
131
+ scope: 'GitHub'
132
+ }, {
133
+ name: 'Octicons',
134
+ scope: 'github/primer'
135
+ }, {
136
+ name: 'Primer React',
137
+ scope: 'github/primer'
138
+ }];
139
+ export function SingleSelectListStory() {
140
+ const [selectedIndex, setSelectedIndex] = React.useState(1);
141
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Single Select List"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, {
142
+ selectionVariant: "single",
143
+ showDividers: true,
144
+ role: "listbox",
145
+ "aria-label": "Select a project"
146
+ }, projects.map((project, index) => /*#__PURE__*/React.createElement(ActionList.Item, {
147
+ key: index,
148
+ role: "option",
149
+ selected: index === selectedIndex,
150
+ onSelect: () => setSelectedIndex(index)
151
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(TableIcon, null)), project.name, /*#__PURE__*/React.createElement(ActionList.Description, {
152
+ variant: "block"
153
+ }, project.scope))))));
154
+ }
155
+ SingleSelectListStory.storyName = 'Single Select';
156
+ export function MultiSelectListStory() {
157
+ const [assignees, setAssignees] = React.useState(users.slice(0, 2));
158
+
159
+ const toggleAssignee = assignee => {
160
+ const assigneeIndex = assignees.findIndex(a => a.login === assignee.login);
161
+ if (assigneeIndex === -1) setAssignees([...assignees, assignee]);else setAssignees(assignees.filter((_, index) => index !== assigneeIndex));
162
+ };
163
+
164
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Multi Select List"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, {
165
+ selectionVariant: "multiple",
166
+ showDividers: true,
167
+ role: "listbox",
168
+ "aria-label": "Select assignees"
169
+ }, users.map(user => /*#__PURE__*/React.createElement(ActionList.Item, {
170
+ role: "option",
171
+ key: user.login,
172
+ selected: Boolean(assignees.find(assignee => assignee.login === user.login)),
173
+ onSelect: () => toggleAssignee(user)
174
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(Avatar, {
175
+ src: `https://github.com/${user.login}.png`
176
+ })), user.login, /*#__PURE__*/React.createElement(ActionList.Description, null, user.name))))));
177
+ }
178
+ MultiSelectListStory.storyName = 'Multi Select';
179
+ export function DisabledStory() {
180
+ const [selectedIndex, setSelectedIndex] = React.useState(0);
181
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Disabled Items"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, {
182
+ selectionVariant: "single",
183
+ showDividers: true,
184
+ role: "listbox",
185
+ "aria-label": "Select a project"
186
+ }, projects.map((project, index) => /*#__PURE__*/React.createElement(ActionList.Item, {
187
+ key: index,
188
+ role: "option",
189
+ selected: index === selectedIndex,
190
+ onSelect: () => setSelectedIndex(index),
191
+ disabled: index === 1
192
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(TableIcon, null)), project.name, /*#__PURE__*/React.createElement(ActionList.Description, {
193
+ variant: "block"
194
+ }, project.scope))))));
195
+ }
196
+ DisabledStory.storyName = 'Disabled Items';
197
+ export function GroupsStory() {
198
+ const [assignees, setAssignees] = React.useState(users.slice(0, 1));
199
+
200
+ const toggleAssignee = assignee => {
201
+ const assigneeIndex = assignees.findIndex(a => a.login === assignee.login);
202
+ if (assigneeIndex === -1) setAssignees([...assignees, assignee]);else setAssignees(assignees.filter((_, index) => index !== assigneeIndex));
203
+ };
204
+
205
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Groups"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, {
206
+ selectionVariant: "multiple",
207
+ showDividers: true,
208
+ role: "listbox",
209
+ "aria-label": "Select reviewers"
210
+ }, /*#__PURE__*/React.createElement(ActionList.Group, {
211
+ title: "Suggestions",
212
+ variant: "filled"
213
+ }, users.slice(0, 2).map(user => /*#__PURE__*/React.createElement(ActionList.Item, {
214
+ key: user.login,
215
+ role: "option",
216
+ selected: Boolean(assignees.find(assignee => assignee.login === user.login)),
217
+ onSelect: () => toggleAssignee(user)
218
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(Avatar, {
219
+ src: `https://github.com/${user.login}.png`
220
+ })), user.login, /*#__PURE__*/React.createElement(ActionList.Description, null, user.name), /*#__PURE__*/React.createElement(ActionList.Description, {
221
+ variant: "block"
222
+ }, "Recently edited these files")))), /*#__PURE__*/React.createElement(ActionList.Group, {
223
+ title: "Everyone",
224
+ variant: "filled"
225
+ }, users.slice(2).map(user => /*#__PURE__*/React.createElement(ActionList.Item, {
226
+ role: "option",
227
+ key: user.login,
228
+ selected: Boolean(assignees.find(assignee => assignee.login === user.login)),
229
+ onSelect: () => toggleAssignee(user)
230
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(Avatar, {
231
+ src: `https://github.com/${user.login}.png`
232
+ })), user.login, /*#__PURE__*/React.createElement(ActionList.Description, null, user.name)))))));
233
+ }
234
+ GroupsStory.storyName = 'Groups';
235
+ export function ActionsStory() {
236
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Actions"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, {
237
+ showDividers: true
238
+ }, /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(ServerIcon, null)), "Open current Codespace", /*#__PURE__*/React.createElement(ActionList.Description, {
239
+ variant: "block"
240
+ }, "Your existing Codespace will be opened to its previous state, and you'll be asked to manually switch to new-branch.")), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(PlusCircleIcon, null)), "Create new Codespace", /*#__PURE__*/React.createElement(ActionList.Description, {
241
+ variant: "block"
242
+ }, "Create a brand new Codespace with a fresh image and checkout this branch.")))));
243
+ }
244
+ ActionsStory.storyName = 'Actions';
245
+ export function ComplexListInsetVariantStory() {
246
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Complex List"), /*#__PURE__*/React.createElement("h2", null, "Inset Variant"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, {
247
+ showDividers: true
248
+ }, /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(TypographyIcon, null)), "Rename"), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(VersionsIcon, null)), "Duplicate", /*#__PURE__*/React.createElement(ActionList.Description, null, "Create a copy")), /*#__PURE__*/React.createElement(ActionList.Group, {
249
+ title: "Live query",
250
+ variant: "filled"
251
+ }, /*#__PURE__*/React.createElement(ActionList.Item, {
252
+ style: {
253
+ color: 'rebeccapurple'
254
+ }
255
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(SearchIcon, null)), "repo:github/memex,github/github")), /*#__PURE__*/React.createElement(ActionList.Divider, null), /*#__PURE__*/React.createElement(ActionList.Group, {
256
+ title: "Layout",
257
+ variant: "subtle"
258
+ }, /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(NoteIcon, null)), "Table", /*#__PURE__*/React.createElement(ActionList.Description, {
259
+ variant: "block"
260
+ }, "Information-dense table optimized for operations across teams")), /*#__PURE__*/React.createElement(ActionList.Item, {
261
+ role: "listitem"
262
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(ProjectIcon, null)), "Board", /*#__PURE__*/React.createElement(ActionList.Description, {
263
+ variant: "block"
264
+ }, "Kanban-style board focused on visual states"))), /*#__PURE__*/React.createElement(ActionList.Divider, null), /*#__PURE__*/React.createElement(ActionList.Group, null, /*#__PURE__*/React.createElement(ActionList.Item, {
265
+ style: {
266
+ fontWeight: 'bold'
267
+ }
268
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(FilterIcon, null)), "Save sort and filters to current view"), /*#__PURE__*/React.createElement(ActionList.Item, {
269
+ style: {
270
+ fontWeight: 'bold'
271
+ }
272
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(FilterIcon, null)), "Save sort and filters to new view")), /*#__PURE__*/React.createElement(ActionList.Divider, null), /*#__PURE__*/React.createElement(ActionList.Group, {
273
+ sx: {
274
+ backgroundColor: 'accent.emphasis'
275
+ }
276
+ }, /*#__PURE__*/React.createElement(ActionList.Item, {
277
+ sx: {
278
+ color: 'white'
279
+ }
280
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, {
281
+ sx: {
282
+ color: 'white'
283
+ }
284
+ }, /*#__PURE__*/React.createElement(GearIcon, null)), "View settings")))));
285
+ }
286
+ ComplexListInsetVariantStory.storyName = 'Complex List — Inset Variant';
287
+ export function ComplexListFullVariantStory() {
288
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Complex List"), /*#__PURE__*/React.createElement("h2", null, "Full Variant"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, {
289
+ variant: "full"
290
+ }, /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(TypographyIcon, null)), "Rename"), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(VersionsIcon, null)), "Duplicate", /*#__PURE__*/React.createElement(ActionList.Description, null, "Create a copy")), /*#__PURE__*/React.createElement(ActionList.Group, {
291
+ title: "Live query",
292
+ variant: "filled"
293
+ }, /*#__PURE__*/React.createElement(ActionList.Item, {
294
+ style: {
295
+ color: 'rebeccapurple'
296
+ }
297
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(SearchIcon, null)), "repo:github/memex,github/github")), /*#__PURE__*/React.createElement(ActionList.Divider, null), /*#__PURE__*/React.createElement(ActionList.Group, {
298
+ title: "Layout",
299
+ variant: "subtle"
300
+ }, /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(NoteIcon, null)), "Table", /*#__PURE__*/React.createElement(ActionList.Description, {
301
+ variant: "block"
302
+ }, "Information-dense table optimized for operations across teams")), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(ProjectIcon, null)), "Board", /*#__PURE__*/React.createElement(ActionList.Description, {
303
+ variant: "block"
304
+ }, "Kanban-style board focused on visual states"))), /*#__PURE__*/React.createElement(ActionList.Divider, null), /*#__PURE__*/React.createElement(ActionList.Group, null, /*#__PURE__*/React.createElement(ActionList.Item, {
305
+ style: {
306
+ fontWeight: 'bold'
307
+ }
308
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(FilterIcon, null)), "Save sort and filters to current view"), /*#__PURE__*/React.createElement(ActionList.Item, {
309
+ style: {
310
+ fontWeight: 'bold'
311
+ }
312
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(FilterIcon, null)), "Save sort and filters to new view")), /*#__PURE__*/React.createElement(ActionList.Divider, null), /*#__PURE__*/React.createElement(ActionList.Group, {
313
+ sx: {
314
+ backgroundColor: 'accent.emphasis'
315
+ }
316
+ }, /*#__PURE__*/React.createElement(ActionList.Item, {
317
+ sx: {
318
+ color: 'white'
319
+ }
320
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, {
321
+ sx: {
322
+ color: 'white'
323
+ }
324
+ }, /*#__PURE__*/React.createElement(GearIcon, null)), "View settings")))));
325
+ }
326
+ ComplexListFullVariantStory.storyName = 'Complex List — Full Variant';
327
+ const ReactRouterLikeLink = /*#__PURE__*/forwardRef(({
328
+ to,
329
+ ...props
330
+ }, ref) => {
331
+ // eslint-disable-next-line jsx-a11y/anchor-has-content
332
+ return /*#__PURE__*/React.createElement("a", _extends({
333
+ ref: ref,
334
+ href: to
335
+ }, props));
336
+ });
337
+ const NextJSLikeLink = /*#__PURE__*/forwardRef(({
338
+ href,
339
+ children
340
+ }, ref) => {
341
+ const child = React.Children.only(children);
342
+ const childProps = {
343
+ ref,
344
+ href
345
+ };
346
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.isValidElement(child) ? /*#__PURE__*/React.cloneElement(child, childProps) : null);
347
+ });
348
+ export function LinkItemStory() {
349
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "List with LinkItem"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, {
350
+ showDividers: true
351
+ }, /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(XIcon, null)), "not a link, just an Item for comparison"), /*#__PURE__*/React.createElement(ActionList.LinkItem, {
352
+ href: "https://github.com/primer"
353
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(LinkIcon, null)), "ActionList.LinkItem"), /*#__PURE__*/React.createElement(ActionList.LinkItem, {
354
+ href: "https://github.com/primer",
355
+ target: "_blank",
356
+ rel: "noopener noreferrer"
357
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(LinkIcon, null)), "ActionList.LinkItem with anchor attributes"), /*#__PURE__*/React.createElement(ActionList.LinkItem, {
358
+ as: ReactRouterLikeLink,
359
+ to: "?path=/story/composite-components-actionlist2--simple-list-story"
360
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(LinkIcon, null)), "as ReactRouterLink"), /*#__PURE__*/React.createElement(NextJSLikeLink, {
361
+ href: "?path=/story/composite-components-actionlist2--simple-list-story"
362
+ }, /*#__PURE__*/React.createElement(ActionList.LinkItem, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(LinkIcon, null)), "NextJS style Link")), /*#__PURE__*/React.createElement(ActionList.LinkItem, {
363
+ href: "?path=/story/composite-components-actionlist2--simple-list-story"
364
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(LinkIcon, null)), "ActionList.LinkItem with everything", /*#__PURE__*/React.createElement(ActionList.Description, {
365
+ variant: "inline"
366
+ }, "inline description"), /*#__PURE__*/React.createElement(ActionList.Description, {
367
+ variant: "block"
368
+ }, "Block description"), /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, "\u2318 + L")))));
369
+ }
370
+ LinkItemStory.storyName = 'List with LinkItem';
371
+ export function DOMPropsStory() {
372
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Simple List"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, null, /*#__PURE__*/React.createElement(ActionList.Item, {
373
+ id: "something",
374
+ onClick: event => alert(`Id is '${event.currentTarget.getAttribute('id')}'`)
375
+ }, "Has an id"))));
376
+ }
377
+ DOMPropsStory.storyName = 'List an item input including DOM props';
378
+ export function CustomItemChildren() {
379
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Custom Item Children"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, null, /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(ArrowRightIcon, null)), /*#__PURE__*/React.createElement(Label, {
380
+ outline: true,
381
+ borderColor: "success.emphasis"
382
+ }, "Choose this one"), /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, /*#__PURE__*/React.createElement(ArrowLeftIcon, null))))));
383
+ }
384
+ CustomItemChildren.storyName = 'Custom Item Children';
385
+ export function SizeStressTestingStory() {
386
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Size Stress Testing"), /*#__PURE__*/React.createElement(ErsatzOverlay, {
387
+ maxWidth: "300px"
388
+ }, /*#__PURE__*/React.createElement(ActionList, {
389
+ showDividers: true
390
+ }, /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(ArrowRightIcon, null)), "Block Description. Long text should wrap", /*#__PURE__*/React.createElement(ActionList.Description, {
391
+ variant: "block"
392
+ }, "This description is long, but it is block so it wraps"), /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, /*#__PURE__*/React.createElement(ArrowLeftIcon, null))), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(ArrowRightIcon, null)), "Inline Description", /*#__PURE__*/React.createElement(ActionList.Description, null, "This description gets truncated because it is inline"), /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, /*#__PURE__*/React.createElement(ArrowLeftIcon, null))), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(ArrowRightIcon, null)), "Really long text without a description should wrap so it wraps", /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, /*#__PURE__*/React.createElement(ArrowLeftIcon, null))))));
393
+ }
394
+ SizeStressTestingStory.storyName = 'Size Stress Testing';
395
+ export function AllCombinations() {
396
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "All Possible Combinations"), /*#__PURE__*/React.createElement("code", null, "dynamic features: L = Leading Visual, I = Inline Description, B = Block Description, T = Trailing Visual"), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement("code", null, "16 possible combinations"), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement(ErsatzOverlay, {
397
+ maxWidth: "300px"
398
+ }, /*#__PURE__*/React.createElement(ActionList, {
399
+ showDividers: true
400
+ }, /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null)), "The everything bagel", /*#__PURE__*/React.createElement(ActionList.Description, {
401
+ variant: "inline"
402
+ }, "inline description"), /*#__PURE__*/React.createElement(ActionList.Description, {
403
+ variant: "block"
404
+ }, "Block description"), /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null))), /*#__PURE__*/React.createElement(ActionList.Item, null, "none of them, only text"), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null)), "only L"), /*#__PURE__*/React.createElement(ActionList.Item, null, "only I", /*#__PURE__*/React.createElement(ActionList.Description, {
405
+ variant: "inline"
406
+ }, "inline description")), /*#__PURE__*/React.createElement(ActionList.Item, null, "only B", /*#__PURE__*/React.createElement(ActionList.Description, {
407
+ variant: "block"
408
+ }, "Block description")), /*#__PURE__*/React.createElement(ActionList.Item, null, "only T", /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null))), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null)), "L + I", /*#__PURE__*/React.createElement(ActionList.Description, {
409
+ variant: "inline"
410
+ }, "inline description")), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null)), "L + B", /*#__PURE__*/React.createElement(ActionList.Description, {
411
+ variant: "block"
412
+ }, "Block description")), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null)), "L + T", /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null))), /*#__PURE__*/React.createElement(ActionList.Item, null, "I + B", /*#__PURE__*/React.createElement(ActionList.Description, {
413
+ variant: "inline"
414
+ }, "inline description"), /*#__PURE__*/React.createElement(ActionList.Description, {
415
+ variant: "block"
416
+ }, "Block description")), /*#__PURE__*/React.createElement(ActionList.Item, null, "I + T", /*#__PURE__*/React.createElement(ActionList.Description, {
417
+ variant: "inline"
418
+ }, "inline description"), /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null))), /*#__PURE__*/React.createElement(ActionList.Item, null, "B + T", /*#__PURE__*/React.createElement(ActionList.Description, {
419
+ variant: "block"
420
+ }, "Block description"), /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null))), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null)), "L + I + B", /*#__PURE__*/React.createElement(ActionList.Description, {
421
+ variant: "inline"
422
+ }, "inline description"), /*#__PURE__*/React.createElement(ActionList.Description, {
423
+ variant: "block"
424
+ }, "Block description")), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null)), "L + I + T", /*#__PURE__*/React.createElement(ActionList.Description, {
425
+ variant: "inline"
426
+ }, "inline description"), /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null))), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null)), "L + B + T", /*#__PURE__*/React.createElement(ActionList.Description, {
427
+ variant: "block"
428
+ }, "Block description"), /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null))), /*#__PURE__*/React.createElement(ActionList.Item, null, "I + B + T", /*#__PURE__*/React.createElement(ActionList.Description, {
429
+ variant: "inline"
430
+ }, "inline description"), /*#__PURE__*/React.createElement(ActionList.Description, {
431
+ variant: "block"
432
+ }, "Block description"), /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, /*#__PURE__*/React.createElement(StarIcon, null))))));
433
+ }
434
+ AllCombinations.storyName = 'All Combinations';
435
+ const teams = [{
436
+ id: '5025661',
437
+ type: 'team',
438
+ slug: 'github/primer-reviewers',
439
+ name: 'Primer Reviewers',
440
+ members: 20
441
+ }, {
442
+ id: '1929972',
443
+ type: 'team',
444
+ slug: 'github/design-infrastructure',
445
+ name: 'Design Infrastructure',
446
+ members: 20
447
+ }];
448
+ export function ConditionalChildren() {
449
+ const potentialReviewers = [...teams, ...users];
450
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Conditional Children"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, {
451
+ showDividers: true
452
+ }, potentialReviewers.map((reviewer, index) => /*#__PURE__*/React.createElement(ActionList.Item, {
453
+ key: index
454
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, reviewer.type === 'team' ? /*#__PURE__*/React.createElement(Avatar, {
455
+ src: `https://avatars.githubusercontent.com/t/${reviewer.id}`
456
+ }) : /*#__PURE__*/React.createElement(Avatar, {
457
+ src: `https://avatars.githubusercontent.com/${reviewer.login}`
458
+ })), reviewer.login || reviewer.slug, reviewer.type === 'team' ? /*#__PURE__*/React.createElement(ActionList.Description, {
459
+ variant: "block"
460
+ }, reviewer.name) : /*#__PURE__*/React.createElement(ActionList.Description, null, reviewer.name), reviewer.type === 'team' && /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, /*#__PURE__*/React.createElement(PeopleIcon, null), reviewer.members))))));
461
+ }
462
+ ConditionalChildren.storyName = 'Conditional Children';
463
+ export function NestedChildren() {
464
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Nested Children"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, {
465
+ showDividers: true
466
+ }, /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("ul", {
467
+ id: "i like extra lists",
468
+ style: {
469
+ paddingInlineStart: 0
470
+ }
471
+ }, users.map(user => /*#__PURE__*/React.createElement(ActionList.Item, {
472
+ key: user.login
473
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(Avatar, {
474
+ src: `https://avatars.githubusercontent.com/${user.login}`
475
+ })), user.login, /*#__PURE__*/React.createElement(ReviewerDescription, {
476
+ user: user
477
+ }))))))));
478
+ }
479
+ NestedChildren.storyName = 'Nested Children';
480
+
481
+ const ReviewerDescription = ({
482
+ user
483
+ }) => {
484
+ const usersRecentlyEditedFile = users.slice(0, 2);
485
+
486
+ if (usersRecentlyEditedFile.find(u => u.login === user.login)) {
487
+ return /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ActionList.Description, null, user.name), /*#__PURE__*/React.createElement(ActionList.Description, {
488
+ variant: "block"
489
+ }, "Recently edited this file"));
490
+ } else {
491
+ return /*#__PURE__*/React.createElement(ActionList.Description, null, user.name);
492
+ }
493
+ };
494
+
495
+ export function ChildWithInternalState() {
496
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Child with internal state - broken"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, {
497
+ showDividers: true
498
+ }, users.map(user => /*#__PURE__*/React.createElement(ActionList.Item, {
499
+ key: user.login
500
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(Avatar, {
501
+ src: `https://avatars.githubusercontent.com/${user.login}`
502
+ })), user.login, /*#__PURE__*/React.createElement(StatefulChild, null, user.name))))));
503
+ }
504
+ ChildWithInternalState.storyName = 'Child with internal state';
505
+
506
+ const StatefulChild = props => {
507
+ const [nameVisible, setNameVisibility] = React.useState(false);
508
+
509
+ const toggle = () => {
510
+ setNameVisibility(!nameVisible);
511
+ };
512
+ /** once description is registered, it cannot be unregistered, only updated. */
513
+
514
+
515
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ButtonInvisible, {
516
+ onClick: toggle,
517
+ sx: {
518
+ fontSize: 0,
519
+ paddingY: 0
520
+ }
521
+ }, nameVisible ? 'Hide name' : 'Show name'), nameVisible && /*#__PURE__*/React.createElement(ActionList.Description, null, props.children));
522
+ };
523
+
524
+ export function ChildWithSideEffects() {
525
+ const user = users[0];
526
+ const [selected, setSelected] = React.useState(true);
527
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Child with side effects"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, {
528
+ selectionVariant: "multiple",
529
+ role: "listbox",
530
+ "aria-label": "Select assignees"
531
+ }, /*#__PURE__*/React.createElement(ActionList.Item, {
532
+ selected: selected,
533
+ onSelect: () => setSelected(!selected),
534
+ role: "option"
535
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(Avatar, {
536
+ src: `https://avatars.githubusercontent.com/${user.login}`
537
+ })), user.login, /*#__PURE__*/React.createElement(SideEffectDescription, null)))));
538
+ }
539
+ ChildWithSideEffects.storyName = 'Child with side effects';
540
+
541
+ const SideEffectDescription = () => {
542
+ const [seconds, setSeconds] = React.useState(0);
543
+ React.useEffect(() => {
544
+ const fn = () => setSeconds(s => s + 1);
545
+
546
+ const interval = window.setInterval(fn, 1000);
547
+ return () => window.clearInterval(interval);
548
+ }, []);
549
+ return /*#__PURE__*/React.createElement(ActionList.Description, null, seconds, " seconds passed");
550
+ };
551
+
552
+ SideEffectDescription.displayName = "SideEffectDescription";
553
+ export function WithSx() {
554
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "With sx prop"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, {
555
+ sx: {
556
+ paddingTop: 4
557
+ }
558
+ }, /*#__PURE__*/React.createElement(ActionList.Item, {
559
+ sx: {
560
+ backgroundColor: 'accent.subtle'
561
+ }
562
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, {
563
+ sx: {
564
+ color: 'accent.emphasis'
565
+ }
566
+ }, /*#__PURE__*/React.createElement(LinkIcon, null)), "github.com/primer", /*#__PURE__*/React.createElement(ActionList.Description, {
567
+ sx: {
568
+ paddingLeft: 4,
569
+ color: 'accent.emphasis'
570
+ }
571
+ }, "all items support sx prop")), /*#__PURE__*/React.createElement(ActionList.Item, null, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(LawIcon, null)), "MIT License"), /*#__PURE__*/React.createElement(ActionList.Item, {
572
+ variant: "danger",
573
+ sx: {
574
+ borderLeft: '2px solid',
575
+ borderColor: 'danger.emphasis',
576
+ borderTopLeftRadius: 0,
577
+ borderBottomLeftRadius: 0
578
+ }
579
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(AlertIcon, null)), "4 vulnerabilities"))));
580
+ }
581
+ WithSx.storyName = 'With sx';
582
+ export function MemexGroupBy() {
583
+ const [selectedIndex, setSelectedIndex] = React.useState(1);
584
+ const options = [{
585
+ text: 'Status',
586
+ icon: /*#__PURE__*/React.createElement(IssueOpenedIcon, null)
587
+ }, {
588
+ text: 'Stage',
589
+ icon: /*#__PURE__*/React.createElement(TableIcon, null)
590
+ }, {
591
+ text: 'Assignee',
592
+ icon: /*#__PURE__*/React.createElement(PeopleIcon, null)
593
+ }, {
594
+ text: 'Team',
595
+ icon: /*#__PURE__*/React.createElement(TypographyIcon, null)
596
+ }, {
597
+ text: 'Estimate',
598
+ icon: /*#__PURE__*/React.createElement(NumberIcon, null)
599
+ }, {
600
+ text: 'Due Date',
601
+ icon: /*#__PURE__*/React.createElement(CalendarIcon, null)
602
+ }];
603
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Memex GroupBy List"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(ActionList, null, /*#__PURE__*/React.createElement(ActionList.Group, {
604
+ title: "Group by",
605
+ selectionVariant: "single"
606
+ }, options.map((option, index) => /*#__PURE__*/React.createElement(ActionList.Item, {
607
+ key: index,
608
+ selected: index === selectedIndex,
609
+ onSelect: () => setSelectedIndex(index)
610
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, option.icon), option.text))), typeof selectedIndex === 'number' && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ActionList.Divider, null), /*#__PURE__*/React.createElement(ActionList.Item, {
611
+ onSelect: () => setSelectedIndex(null)
612
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(XIcon, null)), "Clear Group by")))));
613
+ }
614
+ MemexGroupBy.storyName = 'Memex GroupBy List';
615
+ export function MemexSortable() {
616
+ const [options, setOptions] = React.useState([{
617
+ text: 'Status',
618
+ icon: /*#__PURE__*/React.createElement(IssueOpenedIcon, null),
619
+ selected: true
620
+ }, {
621
+ text: 'Stage',
622
+ icon: /*#__PURE__*/React.createElement(TableIcon, null),
623
+ selected: true
624
+ }, {
625
+ text: 'Assignee',
626
+ icon: /*#__PURE__*/React.createElement(PeopleIcon, null),
627
+ selected: true
628
+ }, {
629
+ text: 'Team',
630
+ icon: /*#__PURE__*/React.createElement(TypographyIcon, null),
631
+ selected: true
632
+ }, {
633
+ text: 'Estimate',
634
+ icon: /*#__PURE__*/React.createElement(NumberIcon, null),
635
+ selected: false
636
+ }, {
637
+ text: 'Due Date',
638
+ icon: /*#__PURE__*/React.createElement(CalendarIcon, null),
639
+ selected: false
640
+ }]);
641
+
642
+ const toggle = text => {
643
+ setOptions(options.map(option => {
644
+ if (option.text === text) option.selected = !option.selected;
645
+ return option;
646
+ }));
647
+ };
648
+
649
+ const reorder = ({
650
+ optionToMove,
651
+ moveAfterOption
652
+ }) => {
653
+ setOptions(currentOptions => {
654
+ const newOptions = [...currentOptions]; // remove option to move
655
+
656
+ const currentPosition = newOptions.findIndex(o => o.text === optionToMove.text);
657
+ newOptions.splice(currentPosition, 1); // add it after the provided element
658
+
659
+ const newPosition = newOptions.findIndex(o => o.text === moveAfterOption.text) + 1;
660
+ newOptions.splice(newPosition, 0, optionToMove);
661
+ return newOptions;
662
+ });
663
+ };
664
+
665
+ const visibleOptions = options.filter(option => option.selected);
666
+ const hiddenOptions = options.filter(option => !option.selected);
667
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Memex Sortable List"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(DndProvider, {
668
+ backend: HTML5Backend
669
+ }, /*#__PURE__*/React.createElement(ActionList, {
670
+ selectionVariant: "multiple"
671
+ }, /*#__PURE__*/React.createElement(ActionList.Group, {
672
+ title: "Visible fields (can be reordered)"
673
+ }, visibleOptions.map(option => /*#__PURE__*/React.createElement(SortableItem, {
674
+ key: option.text,
675
+ option: option,
676
+ onSelect: () => toggle(option.text),
677
+ reorder: reorder
678
+ }))), /*#__PURE__*/React.createElement(ActionList.Group, {
679
+ title: "Hidden fields",
680
+ selectionVariant:
681
+ /** selectionVariant override on Group: disable selection if there are no options */
682
+ hiddenOptions.length ? 'multiple' : false
683
+ }, hiddenOptions.map((option, index) => /*#__PURE__*/React.createElement(ActionList.Item, {
684
+ key: index,
685
+ selected: option.selected,
686
+ onSelect: () => toggle(option.text)
687
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, option.icon), option.text)), hiddenOptions.length === 0 && /*#__PURE__*/React.createElement(ActionList.Item, {
688
+ disabled: true
689
+ }, "No hidden fields"))))));
690
+ }
691
+ MemexSortable.storyName = 'Memex Sortable List';
692
+
693
+ const SortableItem = ({
694
+ option,
695
+ onSelect,
696
+ reorder
697
+ }) => {
698
+ const [{
699
+ isDragging
700
+ }, dragRef] = useDrag(() => ({
701
+ type: 'ITEM',
702
+ item: option,
703
+ collect: monitor => {
704
+ return {
705
+ isDragging: monitor.isDragging()
706
+ };
707
+ }
708
+ }));
709
+ const [{
710
+ isOver
711
+ }, dropRef] = useDrop(() => ({
712
+ accept: 'ITEM',
713
+ collect: monitor => {
714
+ return {
715
+ isOver: monitor.isOver()
716
+ };
717
+ },
718
+ drop: optionDropped => {
719
+ reorder({
720
+ optionToMove: optionDropped,
721
+ moveAfterOption: option
722
+ });
723
+ }
724
+ }));
725
+ return /*#__PURE__*/React.createElement(ActionList.Item, {
726
+ ref: element => dragRef(element) && dropRef(element) // merge refs
727
+ ,
728
+ selected: option.selected,
729
+ onSelect: onSelect,
730
+ sx: {
731
+ opacity: isDragging ? 0.5 : 1,
732
+ boxShadow: isOver ? theme => `0px 2px 0 0px ${theme.colors.accent.emphasis}` : undefined,
733
+ borderRadius: isOver ? 0 : undefined
734
+ }
735
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, option.icon), option.text);
736
+ };
737
+
738
+ SortableItem.displayName = "SortableItem";
739
+ const repos = ['primer/primer-markdown', 'primer/octicons', 'primer/css', 'primer/primer-layout', 'primer/primer-alerts', 'primer/primer-avatars', 'primer/react', 'primer/primitives'];
740
+ export function AsyncListStory() {
741
+ const [results, setResults] = React.useState(repos.slice(0, 6));
742
+ const [loading, setLoading] = React.useState(false);
743
+
744
+ const filter = async event => {
745
+ setLoading(true);
746
+ const filteredResults = await filterSlowly(event.target.value);
747
+ setResults(filteredResults);
748
+ setLoading(false);
749
+ };
750
+
751
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Async List Items"), /*#__PURE__*/React.createElement(ErsatzOverlay, null, /*#__PURE__*/React.createElement(TextInput, {
752
+ onChange: filter,
753
+ placeholder: "Search repositories, showing 6 by default",
754
+ sx: {
755
+ m: 2,
756
+ mb: 0,
757
+ width: 'calc(100% - 16px)'
758
+ }
759
+ }), /*#__PURE__*/React.createElement(ActionList, {
760
+ sx: {
761
+ height: 208,
762
+ overflow: 'auto'
763
+ }
764
+ }, loading ? /*#__PURE__*/React.createElement(Box, {
765
+ sx: {
766
+ display: 'flex',
767
+ justifyContent: 'center',
768
+ pt: 2
769
+ }
770
+ }, /*#__PURE__*/React.createElement(Spinner, null)) : results.map(name => /*#__PURE__*/React.createElement(ActionList.Item, {
771
+ key: name
772
+ }, /*#__PURE__*/React.createElement(ActionList.LeadingVisual, null, /*#__PURE__*/React.createElement(RepoIcon, null)), name)))));
773
+ }
774
+ AsyncListStory.storyName = 'Async List Options';
775
+
776
+ const filterSlowly = async query => {
777
+ // sleep for 1s before returning results
778
+ await new Promise(resolve => setTimeout(resolve, 1000));
779
+ return await repos.filter(name => name.includes(query));
780
+ };
781
+
782
+ export function InsideOverlay() {
783
+ const [open, setOpen] = React.useState(false);
784
+
785
+ const toggle = () => setOpen(!open);
786
+
787
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", null, "Inside Overlay"), /*#__PURE__*/React.createElement(AnchoredOverlay, {
788
+ open: open,
789
+ onOpen: toggle,
790
+ onClose: toggle,
791
+ renderAnchor: props => /*#__PURE__*/React.createElement("button", props, "toggle overlay")
792
+ }, /*#__PURE__*/React.createElement(ActionList, null, /*#__PURE__*/React.createElement(ActionList.Item, null, "Use your arrow keys", /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, "\u2193")), /*#__PURE__*/React.createElement(ActionList.Item, null, "keep going", /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, "\u2193")), /*#__PURE__*/React.createElement(ActionList.Item, null, "more more", /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, "\u2193")), /*#__PURE__*/React.createElement(ActionList.Divider, null), /*#__PURE__*/React.createElement(ActionList.Item, {
793
+ variant: "danger"
794
+ }, "now go up!", /*#__PURE__*/React.createElement(ActionList.TrailingVisual, null, "\u2191")))));
795
+ }
796
+ InsideOverlay.storyName = 'Inside Overlay';