@primer/components 31.2.0-rc.c285489d → 31.2.0-rc.c53cfd9e

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