@patternfly/react-docs 7.6.0-prerelease.6 → 7.6.0-prerelease.8

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 (163) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/package.json +12 -13
  3. package/patternfly-docs/generated/components/about-modal/react.js +149 -0
  4. package/patternfly-docs/generated/components/accordion/react.js +262 -0
  5. package/patternfly-docs/generated/components/action-list/react.js +144 -0
  6. package/patternfly-docs/generated/components/alert/react-demos.js +56 -0
  7. package/patternfly-docs/generated/components/alert/react.js +1433 -0
  8. package/patternfly-docs/generated/components/avatar/react.js +166 -0
  9. package/patternfly-docs/generated/components/back-to-top/react-demos.js +60 -0
  10. package/patternfly-docs/generated/components/back-to-top/react.js +77 -0
  11. package/patternfly-docs/generated/components/backdrop/react.js +64 -0
  12. package/patternfly-docs/generated/components/background-image/react.js +62 -0
  13. package/patternfly-docs/generated/components/badge/react.js +97 -0
  14. package/patternfly-docs/generated/components/banner/react-demos.js +57 -0
  15. package/patternfly-docs/generated/components/banner/react.js +148 -0
  16. package/patternfly-docs/generated/components/brand/react.js +142 -0
  17. package/patternfly-docs/generated/components/breadcrumb/react.js +206 -0
  18. package/patternfly-docs/generated/components/button/react-demos.js +57 -0
  19. package/patternfly-docs/generated/components/button/react.js +826 -0
  20. package/patternfly-docs/generated/components/card/react-demos.js +201 -0
  21. package/patternfly-docs/generated/components/card/react.js +1015 -0
  22. package/patternfly-docs/generated/components/charts/area-chart/-Victory.js +1350 -0
  23. package/patternfly-docs/generated/components/charts/bar-chart/-Victory.js +1334 -0
  24. package/patternfly-docs/generated/components/charts/box-plot-chart/-Victory.js +1282 -0
  25. package/patternfly-docs/generated/components/charts/bullet-chart/-Victory.js +848 -0
  26. package/patternfly-docs/generated/components/charts/colors-for-charts/-Victory.js +192 -0
  27. package/patternfly-docs/generated/components/charts/donut-chart/-Victory.js +426 -0
  28. package/patternfly-docs/generated/components/charts/donut-utilization-chart/-Victory.js +804 -0
  29. package/patternfly-docs/generated/components/charts/legends/-Victory.js +3230 -0
  30. package/patternfly-docs/generated/components/charts/line-chart/-Victory.js +1178 -0
  31. package/patternfly-docs/generated/components/charts/line-chart/ECharts.js +525 -0
  32. package/patternfly-docs/generated/components/charts/patterns/-Victory.js +3382 -0
  33. package/patternfly-docs/generated/components/charts/pie-chart/-Victory.js +377 -0
  34. package/patternfly-docs/generated/components/charts/resize-observer/-Victory.js +2475 -0
  35. package/patternfly-docs/generated/components/charts/sankey-chart/ECharts.js +538 -0
  36. package/patternfly-docs/generated/components/charts/scatter-chart/-Victory.js +1551 -0
  37. package/patternfly-docs/generated/components/charts/skeletons/-Victory.js +4115 -0
  38. package/patternfly-docs/generated/components/charts/sparkline-chart/-Victory.js +955 -0
  39. package/patternfly-docs/generated/components/charts/stack-chart/-Victory.js +1173 -0
  40. package/patternfly-docs/generated/components/charts/threshold-chart/-Victory.js +1166 -0
  41. package/patternfly-docs/generated/components/charts/tooltips/-Victory.js +413 -0
  42. package/patternfly-docs/generated/components/chip/react-deprecated.js +323 -0
  43. package/patternfly-docs/generated/components/clipboard-copy/react.js +373 -0
  44. package/patternfly-docs/generated/components/code-block/react.js +148 -0
  45. package/patternfly-docs/generated/components/code-editor/react.js +659 -0
  46. package/patternfly-docs/generated/components/compass/react-demos.js +147 -0
  47. package/patternfly-docs/generated/components/compass/react.js +440 -0
  48. package/patternfly-docs/generated/components/content/react.js +248 -0
  49. package/patternfly-docs/generated/components/data-list/react-demos.js +90 -0
  50. package/patternfly-docs/generated/components/data-list/react.js +709 -0
  51. package/patternfly-docs/generated/components/date-and-time/calendar-month/react.js +283 -0
  52. package/patternfly-docs/generated/components/date-and-time/date-and-time-picker/react-demos.js +64 -0
  53. package/patternfly-docs/generated/components/date-and-time/date-picker/react-demos.js +83 -0
  54. package/patternfly-docs/generated/components/date-and-time/date-picker/react.js +395 -0
  55. package/patternfly-docs/generated/components/date-and-time/time-picker/react.js +241 -0
  56. package/patternfly-docs/generated/components/description-list/react-demos.js +58 -0
  57. package/patternfly-docs/generated/components/description-list/react.js +743 -0
  58. package/patternfly-docs/generated/components/divider/react.js +126 -0
  59. package/patternfly-docs/generated/components/drag-and-drop/react-demos.js +351 -0
  60. package/patternfly-docs/generated/components/drag-and-drop/react-deprecated.js +184 -0
  61. package/patternfly-docs/generated/components/drag-and-drop/react.js +137 -0
  62. package/patternfly-docs/generated/components/drawer/react.js +598 -0
  63. package/patternfly-docs/generated/components/dual-list-selector/react-deprecated.js +772 -0
  64. package/patternfly-docs/generated/components/dual-list-selector/react.js +594 -0
  65. package/patternfly-docs/generated/components/empty-state/react.js +199 -0
  66. package/patternfly-docs/generated/components/expandable-section/react-demos.js +65 -0
  67. package/patternfly-docs/generated/components/expandable-section/react.js +408 -0
  68. package/patternfly-docs/generated/components/file-upload/multiple-file-upload/react-demos.js +52 -0
  69. package/patternfly-docs/generated/components/file-upload/multiple-file-upload/react.js +398 -0
  70. package/patternfly-docs/generated/components/file-upload/simple-file-upload/react.js +749 -0
  71. package/patternfly-docs/generated/components/forms/checkbox/react.js +222 -0
  72. package/patternfly-docs/generated/components/forms/form/react.js +1106 -0
  73. package/patternfly-docs/generated/components/forms/form-select/react.js +208 -0
  74. package/patternfly-docs/generated/components/forms/radio/react.js +212 -0
  75. package/patternfly-docs/generated/components/forms/text-area/react.js +160 -0
  76. package/patternfly-docs/generated/components/forms/text-input/react.js +216 -0
  77. package/patternfly-docs/generated/components/helper-text/react-demos.js +180 -0
  78. package/patternfly-docs/generated/components/helper-text/react.js +164 -0
  79. package/patternfly-docs/generated/components/hero/react.js +88 -0
  80. package/patternfly-docs/generated/components/hint/react.js +169 -0
  81. package/patternfly-docs/generated/components/icon/react.js +215 -0
  82. package/patternfly-docs/generated/components/input-group/react.js +182 -0
  83. package/patternfly-docs/generated/components/jump-links/react-demos.js +154 -0
  84. package/patternfly-docs/generated/components/jump-links/react.js +212 -0
  85. package/patternfly-docs/generated/components/label/react-demos.js +57 -0
  86. package/patternfly-docs/generated/components/label/react.js +417 -0
  87. package/patternfly-docs/generated/components/list/react.js +175 -0
  88. package/patternfly-docs/generated/components/login-page/react.js +587 -0
  89. package/patternfly-docs/generated/components/masthead/react-demos.js +79 -0
  90. package/patternfly-docs/generated/components/masthead/react.js +291 -0
  91. package/patternfly-docs/generated/components/menus/application-launcher/react-demos.js +769 -0
  92. package/patternfly-docs/generated/components/menus/context-selector/react-demos.js +665 -0
  93. package/patternfly-docs/generated/components/menus/custom-menus/react-demos.js +187 -0
  94. package/patternfly-docs/generated/components/menus/dropdown/react-templates.js +163 -0
  95. package/patternfly-docs/generated/components/menus/dropdown/react.js +998 -0
  96. package/patternfly-docs/generated/components/menus/menu/react.js +1540 -0
  97. package/patternfly-docs/generated/components/menus/menu-toggle/react.js +747 -0
  98. package/patternfly-docs/generated/components/menus/options-menu/react-demos.js +508 -0
  99. package/patternfly-docs/generated/components/menus/select/react-templates.js +257 -0
  100. package/patternfly-docs/generated/components/menus/select/react.js +998 -0
  101. package/patternfly-docs/generated/components/modal/react-deprecated.js +554 -0
  102. package/patternfly-docs/generated/components/modal/react.js +597 -0
  103. package/patternfly-docs/generated/components/navigation/react-demos.js +356 -0
  104. package/patternfly-docs/generated/components/navigation/react.js +409 -0
  105. package/patternfly-docs/generated/components/notification-badge/react.js +196 -0
  106. package/patternfly-docs/generated/components/notification-drawer/react-demos.js +107 -0
  107. package/patternfly-docs/generated/components/notification-drawer/react.js +394 -0
  108. package/patternfly-docs/generated/components/number-input/react.js +210 -0
  109. package/patternfly-docs/generated/components/overflow-menu/react.js +274 -0
  110. package/patternfly-docs/generated/components/page/react-demos.js +149 -0
  111. package/patternfly-docs/generated/components/page/react.js +1352 -0
  112. package/patternfly-docs/generated/components/pagination/react.js +492 -0
  113. package/patternfly-docs/generated/components/panel/react.js +236 -0
  114. package/patternfly-docs/generated/components/popover/react.js +390 -0
  115. package/patternfly-docs/generated/components/progress/react-demos.js +59 -0
  116. package/patternfly-docs/generated/components/progress/react.js +283 -0
  117. package/patternfly-docs/generated/components/progress-stepper/react-demos.js +45 -0
  118. package/patternfly-docs/generated/components/progress-stepper/react.js +219 -0
  119. package/patternfly-docs/generated/components/search-input/react-demos.js +113 -0
  120. package/patternfly-docs/generated/components/search-input/react.js +263 -0
  121. package/patternfly-docs/generated/components/sidebar/react.js +236 -0
  122. package/patternfly-docs/generated/components/simple-list/react.js +200 -0
  123. package/patternfly-docs/generated/components/skeleton/react-demos.js +44 -0
  124. package/patternfly-docs/generated/components/skeleton/react.js +122 -0
  125. package/patternfly-docs/generated/components/skip-to-content/react.js +73 -0
  126. package/patternfly-docs/generated/components/slider/react.js +309 -0
  127. package/patternfly-docs/generated/components/spinner/react.js +111 -0
  128. package/patternfly-docs/generated/components/switch/react.js +163 -0
  129. package/patternfly-docs/generated/components/table/react-demos.js +355 -0
  130. package/patternfly-docs/generated/components/table/react-deprecated.js +1350 -0
  131. package/patternfly-docs/generated/components/table/react.js +3241 -0
  132. package/patternfly-docs/generated/components/tabs/react-demos.js +108 -0
  133. package/patternfly-docs/generated/components/tabs/react.js +1359 -0
  134. package/patternfly-docs/generated/components/text-input-group/react-demos.js +152 -0
  135. package/patternfly-docs/generated/components/text-input-group/react.js +278 -0
  136. package/patternfly-docs/generated/components/tile/react-deprecated.js +242 -0
  137. package/patternfly-docs/generated/components/timestamp/react.js +283 -0
  138. package/patternfly-docs/generated/components/title/react.js +94 -0
  139. package/patternfly-docs/generated/components/toggle-group/react.js +299 -0
  140. package/patternfly-docs/generated/components/toolbar/react-demos.js +66 -0
  141. package/patternfly-docs/generated/components/toolbar/react.js +932 -0
  142. package/patternfly-docs/generated/components/tooltip/react.js +241 -0
  143. package/patternfly-docs/generated/components/tree-view/react.js +429 -0
  144. package/patternfly-docs/generated/components/truncate/react.js +211 -0
  145. package/patternfly-docs/generated/components/wizard/react-demos.js +87 -0
  146. package/patternfly-docs/generated/components/wizard/react-deprecated.js +788 -0
  147. package/patternfly-docs/generated/components/wizard/react.js +986 -0
  148. package/patternfly-docs/generated/developer-guides/open-ui-automation/react.js +285 -0
  149. package/patternfly-docs/generated/foundations-and-styles/layouts/bullseye/react.js +70 -0
  150. package/patternfly-docs/generated/foundations-and-styles/layouts/flex/react.js +506 -0
  151. package/patternfly-docs/generated/foundations-and-styles/layouts/gallery/react.js +94 -0
  152. package/patternfly-docs/generated/foundations-and-styles/layouts/grid/react.js +272 -0
  153. package/patternfly-docs/generated/foundations-and-styles/layouts/level/react.js +87 -0
  154. package/patternfly-docs/generated/foundations-and-styles/layouts/split/react.js +124 -0
  155. package/patternfly-docs/generated/foundations-and-styles/layouts/stack/react.js +112 -0
  156. package/patternfly-docs/generated/index.js +1769 -0
  157. package/patternfly-docs/generated/patterns/card-view/react-demos.js +78 -0
  158. package/patternfly-docs/generated/patterns/filters/react-demos.js +141 -0
  159. package/patternfly-docs/generated/patterns/password-generator/react-demos.js +51 -0
  160. package/patternfly-docs/generated/patterns/password-strength/react-demos.js +61 -0
  161. package/patternfly-docs/generated/patterns/primary-detail/react-demos.js +124 -0
  162. package/patternfly-docs/generated/patterns/right-to-left/react-demos.js +81 -0
  163. package/LICENSE +0 -21
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ import { AutoLinkHeader, Example, Link as PatternflyThemeLink } from '@patternfly/documentation-framework/components';
3
+ import { Fragment, useEffect, useRef, useState } from 'react';
4
+ import { Modal as ModalDeprecated, ModalVariant as ModalVariantDeprecated } from '@patternfly/react-core/deprecated';
5
+ import RhUiInformationFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-information-fill-icon';
6
+ const pageData = {
7
+ "id": "Label",
8
+ "section": "components",
9
+ "subsection": "",
10
+ "deprecated": false,
11
+ "template": false,
12
+ "beta": false,
13
+ "demo": false,
14
+ "newImplementationLink": false,
15
+ "source": "react-demos",
16
+ "tabName": null,
17
+ "slug": "/components/label/react-demos",
18
+ "sourceLink": "https://github.com/patternfly/patternfly-react/blob/main/packages/react-core/src/demos/LabelGroupDemos.md",
19
+ "relPath": "packages/react-core/src/demos/LabelGroupDemos.md",
20
+ "examples": [
21
+ "Editable labels with add dropdown",
22
+ "Editable labels with add modal"
23
+ ]
24
+ };
25
+ pageData.liveContext = {
26
+ Fragment,
27
+ useEffect,
28
+ useRef,
29
+ useState,
30
+ ModalDeprecated,
31
+ ModalVariantDeprecated,
32
+ RhUiInformationFillIcon
33
+ };
34
+ pageData.examples = {
35
+ 'Editable labels with add dropdown': props =>
36
+ <Example {...pageData} {...props} {...{"code":"import { useEffect, useRef, useState } from 'react';\nimport { LabelGroup, Label, LabelColor, Menu, MenuContent, MenuList, MenuItem, Popper } from '@patternfly/react-core';\n\nexport const LabelGroupEditableAddDropdown: React.FunctionComponent = () => {\n const toggleRef = useRef<HTMLDivElement>(undefined);\n const menuRef = useRef<HTMLDivElement>(undefined);\n const containerRef = useRef<HTMLDivElement>(undefined);\n\n const [idIndex, setIdIndex] = useState<number>(3);\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [labels, setLabels] = useState<any>([\n { name: 'Label 1', id: 0 },\n { name: 'Label 2', id: 1 },\n {\n name: 'Label 3',\n props: {\n isEditable: true,\n editableProps: {\n 'aria-label': 'Editable label with text Label 3'\n }\n },\n id: 2\n }\n ]);\n\n const onClose = (labelId: string) => {\n setLabels(labels.filter((l: any) => l.id !== labelId));\n };\n\n const onEdit = (nextText: string, index: number) => {\n const copy = [...labels];\n const updatedProps = {\n ...labels[index].props,\n editableProps: { 'aria-label': `Editable label with text ${nextText}` }\n };\n\n copy[index] = { name: nextText, props: updatedProps, id: labels[index].id };\n setLabels(copy);\n };\n\n const onAdd = (labelText: string) => {\n setLabels([\n {\n name: labelText,\n id: idIndex\n },\n ...labels\n ]);\n setIdIndex(idIndex + 1);\n setIsOpen(!isOpen);\n };\n\n const handleMenuKeys = (event: KeyboardEvent) => {\n if (isOpen && menuRef.current.contains(event.target as Node)) {\n if (event.key === 'Escape' || event.key === 'Tab') {\n setIsOpen(!isOpen);\n toggleRef.current.focus();\n }\n }\n };\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n isOpen &&\n !(menuRef.current.contains(event.target as Node) || toggleRef.current.contains(event.target as Node))\n ) {\n setIsOpen(false);\n }\n };\n\n useEffect(() => {\n window.addEventListener('keydown', handleMenuKeys);\n window.addEventListener('click', handleClickOutside);\n return () => {\n window.removeEventListener('keydown', handleMenuKeys);\n window.removeEventListener('click', handleClickOutside);\n };\n }, [isOpen, menuRef]);\n\n const onToggleClick = () => {\n setTimeout(() => {\n if (menuRef.current) {\n const firstElement = menuRef.current.querySelector('li > button:not(:disabled)');\n firstElement && (firstElement as HTMLElement).focus();\n }\n }, 0);\n setIsOpen(!isOpen);\n };\n\n const menu = (\n <Menu ref={menuRef} onSelect={(_ev, itemId) => onAdd(itemId.toString())}>\n <MenuContent>\n <MenuList>\n <MenuItem itemId=\"Label text 1\">Label text 1</MenuItem>\n <MenuItem itemId=\"Label text 2\">Label text 2</MenuItem>\n <MenuItem itemId=\"Label text 3\">Label text 3</MenuItem>\n <MenuItem itemId=\"Label text 4\">Label text 4</MenuItem>\n </MenuList>\n </MenuContent>\n </Menu>\n );\n\n const toggle = (\n <div ref={toggleRef}>\n <Label variant=\"overflow\" onClick={onToggleClick}>\n Add label\n </Label>\n </div>\n );\n\n return (\n <div ref={containerRef}>\n <LabelGroup\n categoryName=\"Label group 1\"\n numLabels={5}\n isEditable\n addLabelControl={\n <Popper trigger={toggle} triggerRef={toggleRef} popper={menu} popperRef={menuRef} isVisible={isOpen} />\n }\n >\n {labels.map((label, index) => (\n <Label\n key={label.id}\n id={label.id}\n color={LabelColor.blue}\n onClose={() => onClose(label.id)}\n onEditCancel={(_event, prevText) => onEdit(prevText, index)}\n onEditComplete={(_event, newText) => onEdit(newText, index)}\n {...label.props}\n >\n {label.name}\n </Label>\n ))}\n </LabelGroup>\n </div>\n );\n};\n","title":"Editable labels with add dropdown","lang":"ts","className":""}}>
37
+
38
+ </Example>,
39
+ 'Editable labels with add modal': props =>
40
+ <Example {...pageData} {...props} {...{"code":"import { useEffect, useRef, useState } from 'react';\nimport {\n LabelGroup,\n Label,\n LabelColor,\n Button,\n Form,\n FormGroup,\n TextInput,\n Menu,\n MenuContent,\n MenuList,\n MenuItem,\n MenuToggle,\n Radio,\n Popper\n} from '@patternfly/react-core';\nimport { Modal as ModalDeprecated, ModalVariant as ModalVariantDeprecated } from '@patternfly/react-core/deprecated';\nimport RhUiInformationFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-information-fill-icon';\n\nexport const LabelGroupEditableAddModal: React.FunctionComponent = () => {\n const [isModalOpen, setModalOpen] = useState<boolean>(false);\n const [idIndex, setIdIndex] = useState<number>(7);\n const [labelText, setLabelText] = useState<string>('');\n const [color, setColor] = useState<string>();\n const [icon, setIcon] = useState<any>();\n const [labelType, setLabelType] = useState<string>('filled');\n const [isClosable, setIsCloseable] = useState<boolean>(false);\n const [isEditable, setIsEditable] = useState<boolean>(false);\n const labelInputRef = useRef(null);\n\n const [isColorOpen, setIsColorOpen] = useState<boolean>(false);\n const colorMenuRef = useRef<HTMLDivElement>(null);\n const colorContainerRef = useRef<HTMLDivElement>(null);\n const colorToggleRef = useRef<HTMLButtonElement>(null);\n\n const [isIconOpen, setIsIconOpen] = useState<boolean>(false);\n const iconMenuRef = useRef<HTMLDivElement>(null);\n const iconContainerRef = useRef<HTMLDivElement>(null);\n const iconToggleRef = useRef<HTMLButtonElement>(null);\n\n const [labels, setLabels] = useState<any>([\n { name: 'Label 1', id: 4 },\n { name: 'Label 2', id: 5 },\n {\n name: 'Label 3',\n props: {\n isEditable: true,\n editableProps: {\n 'aria-label': 'Editable label with text Label 3'\n }\n },\n id: 6\n }\n ]);\n\n const onClose = (labelId: string) => {\n setLabels(labels.filter((l: any) => l.id !== labelId));\n };\n\n const onEdit = (nextText: string, index: number) => {\n const copy = [...labels];\n const updatedProps = {\n ...labels[index].props,\n editableProps: { 'aria-label': `Editable label with text ${nextText}` }\n };\n\n copy[index] = { name: nextText, props: updatedProps, id: labels[index].id };\n setLabels(copy);\n };\n\n const onAdd = () => {\n let labelIcon: any;\n if (icon === 'Info circle icon') {\n labelIcon = <RhUiInformationFillIcon />;\n }\n\n setLabels([\n {\n name: labelText || 'New Label',\n props: {\n color: color ? color.toLowerCase() : 'gray',\n icon: labelIcon,\n variant: labelType || 'filled',\n ...(!isClosable && isClosable !== undefined && { onClose: null }),\n isEditable: isEditable !== undefined ? isEditable : true,\n ...(isEditable && {\n editableProps: {\n 'aria-label': `Editable label with text ${labelText || 'New Label'}`\n }\n })\n },\n id: idIndex\n },\n ...labels\n ]);\n setModalOpen(!isModalOpen);\n setIdIndex(idIndex + 1);\n setLabelText('');\n setColor('');\n setIcon(null);\n setLabelType('filled');\n setIsCloseable(false);\n setIsEditable(false);\n };\n\n const handleModalToggle = (_event: KeyboardEvent | React.MouseEvent) => {\n setModalOpen(!isModalOpen);\n };\n\n useEffect(() => {\n if (isModalOpen && labelInputRef && labelInputRef.current) {\n (labelInputRef.current as HTMLInputElement).focus();\n }\n }, [isModalOpen]);\n\n const handleMenuKeys = (event: KeyboardEvent) => {\n if (isColorOpen && colorMenuRef?.current?.contains(event.target as Node)) {\n if (event.key === 'Escape' || event.key === 'Tab') {\n setIsColorOpen(!isColorOpen);\n colorToggleRef?.current?.focus();\n }\n }\n if (isIconOpen && iconMenuRef?.current?.contains(event.target as Node)) {\n if (event.key === 'Escape' || event.key === 'Tab') {\n setIsIconOpen(!isIconOpen);\n iconToggleRef?.current?.focus();\n }\n }\n };\n\n const handleClickOutside = (event: MouseEvent) => {\n if (isColorOpen && !colorMenuRef?.current?.contains(event.target as Node)) {\n setIsColorOpen(false);\n }\n if (isIconOpen && !iconMenuRef?.current?.contains(event.target as Node)) {\n setIsIconOpen(false);\n }\n };\n\n useEffect(() => {\n window.addEventListener('keydown', handleMenuKeys);\n window.addEventListener('click', handleClickOutside);\n return () => {\n window.removeEventListener('keydown', handleMenuKeys);\n window.removeEventListener('click', handleClickOutside);\n };\n }, [isColorOpen, isIconOpen, colorMenuRef, iconMenuRef]);\n\n const onColorToggleClick = (ev: React.MouseEvent) => {\n ev.stopPropagation(); // Stop handleClickOutside from handling\n setTimeout(() => {\n if (colorMenuRef.current) {\n const firstElement = colorMenuRef.current.querySelector('li > button:not(:disabled)');\n firstElement && (firstElement as HTMLElement).focus();\n }\n }, 0);\n setIsColorOpen(!isColorOpen);\n };\n\n const colorToggle = (\n <MenuToggle ref={colorToggleRef} onClick={onColorToggleClick} isExpanded={isColorOpen}>\n {color || 'Select'}\n </MenuToggle>\n );\n\n const colorMenu = (\n <Menu\n ref={colorMenuRef}\n activeItemId={color}\n onSelect={(_ev, itemId) => {\n setColor(itemId?.toString());\n colorToggleRef?.current?.focus();\n setIsColorOpen(false);\n }}\n selected={color}\n >\n <MenuContent>\n <MenuList>\n <MenuItem itemId=\"Gray\">Gray</MenuItem>\n <MenuItem itemId=\"Blue\">Blue</MenuItem>\n <MenuItem itemId=\"Green\">Green</MenuItem>\n <MenuItem itemId=\"Orange\">Orange</MenuItem>\n <MenuItem itemId=\"Red\">Red</MenuItem>\n <MenuItem itemId=\"Purple\">Purple</MenuItem>\n <MenuItem itemId=\"Teal\">Teal</MenuItem>\n </MenuList>\n </MenuContent>\n </Menu>\n );\n\n const onIconToggleClick = (ev: React.MouseEvent) => {\n ev.stopPropagation(); // Stop handleClickOutside from handling\n setTimeout(() => {\n if (iconMenuRef.current) {\n const firstElement = iconMenuRef.current.querySelector('li > button:not(:disabled)');\n firstElement && (firstElement as HTMLElement).focus();\n }\n }, 0);\n setIsIconOpen(!isIconOpen);\n };\n\n const iconToggle = (\n <MenuToggle ref={iconToggleRef} onClick={onIconToggleClick} isExpanded={isIconOpen} icon={icon}>\n {icon ? '' : 'Select'}\n </MenuToggle>\n );\n\n const iconMenu = (\n <Menu\n ref={iconMenuRef}\n activeItemId={icon}\n onSelect={(_ev, itemId) => {\n setIcon(itemId?.toString());\n iconToggleRef?.current?.focus();\n setIsIconOpen(false);\n }}\n selected={icon}\n >\n <MenuContent>\n <MenuList>\n <MenuItem itemId=\"No icon\">No icon</MenuItem>\n <MenuItem itemId=\"Info circle icon\">\n <RhUiInformationFillIcon />\n Info circle icon\n </MenuItem>\n </MenuList>\n </MenuContent>\n </Menu>\n );\n\n return (\n <div>\n <LabelGroup\n categoryName=\"Label group 1\"\n numLabels={5}\n isEditable\n addLabelControl={\n <Label variant=\"overflow\" onClick={handleModalToggle}>\n Add label\n </Label>\n }\n >\n {labels.map((label: { name: string; id: string; props: any }, index: number) => (\n <Label\n key={label.id}\n id={label.id}\n color={LabelColor.blue}\n onClose={() => onClose(label.id)}\n onEditCancel={(_event, prevText) => onEdit(prevText, index)}\n onEditComplete={(_event, newText) => onEdit(newText, index)}\n {...label.props}\n >\n {label.name}\n </Label>\n ))}\n </LabelGroup>\n <ModalDeprecated\n variant={ModalVariantDeprecated.small}\n title=\"Add Label\"\n isOpen={isModalOpen}\n onClose={handleModalToggle}\n actions={[\n <Button key=\"create\" variant=\"primary\" form=\"create-label-form\" onClick={onAdd}>\n Save\n </Button>,\n <Button key=\"cancel\" variant=\"link\" onClick={handleModalToggle}>\n Cancel\n </Button>\n ]}\n >\n <Form id=\"create-label-form\">\n <FormGroup label=\"Label text\" fieldId=\"create-label-form-label-text\">\n <TextInput\n type=\"text\"\n id=\"create-label-form-label-text\"\n name=\"create-label-form-label-text\"\n value={labelText}\n onChange={(_event: React.FormEvent<HTMLInputElement>, value: string) => setLabelText(value)}\n ref={labelInputRef}\n />\n </FormGroup>\n <FormGroup label=\"Color\" fieldId=\"create-label-form-color\">\n <div ref={colorContainerRef}>\n <Popper\n trigger={colorToggle}\n triggerRef={colorToggleRef}\n popper={colorMenu}\n popperRef={colorMenuRef}\n appendTo={colorContainerRef.current as HTMLElement}\n isVisible={isColorOpen}\n />\n </div>\n </FormGroup>\n <FormGroup label=\"Icon\" fieldId=\"create-label-form-icon\">\n <div ref={iconContainerRef}>\n <Popper\n trigger={iconToggle}\n triggerRef={iconToggleRef}\n popper={iconMenu}\n popperRef={iconMenuRef}\n appendTo={iconContainerRef.current as HTMLElement}\n isVisible={isIconOpen}\n />\n </div>\n </FormGroup>\n <FormGroup label=\"Label type\" fieldId=\"create-label-form-label-type\">\n <Radio\n isChecked={labelType === 'filled'}\n name=\"filled-label\"\n onChange={() => setLabelType('filled')}\n label=\"Filled\"\n id=\"radio-filled\"\n value=\"check1\"\n />\n <Radio\n isChecked={labelType === 'outline'}\n name=\"outline-label\"\n onChange={() => setLabelType('outline')}\n label=\"Outlined\"\n id=\"radio-outline\"\n value=\"check2\"\n />\n </FormGroup>\n <FormGroup label=\"Dismissable\" fieldId=\"create-label-form-dismissable\">\n <Radio\n isChecked={isClosable === true}\n name=\"closeable-label\"\n onChange={() => setIsCloseable(true)}\n label=\"Yes\"\n id=\"radio-closable\"\n value=\"check1\"\n />\n <Radio\n isChecked={isClosable === false}\n name=\"not-closeable-label\"\n onChange={() => setIsCloseable(false)}\n label=\"No\"\n id=\"radio-not-closable\"\n value=\"check2\"\n />\n </FormGroup>\n <FormGroup label=\"Editable\" fieldId=\"create-label-form-editable\">\n <Radio\n isChecked={isEditable === true}\n name=\"editable-label\"\n onChange={() => setIsEditable(true)}\n label=\"Yes\"\n id=\"radio-editable\"\n value=\"check3\"\n />\n <Radio\n isChecked={isEditable === false}\n name=\"not-editable-label\"\n onChange={() => setIsEditable(false)}\n label=\"No\"\n id=\"radio-not-editable\"\n value=\"check4\"\n />\n </FormGroup>\n </Form>\n </ModalDeprecated>\n </div>\n );\n};\n","title":"Editable labels with add modal","lang":"ts","className":""}}>
41
+
42
+ </Example>
43
+ };
44
+
45
+ const Component = () => (
46
+ <React.Fragment>
47
+ <AutoLinkHeader {...{"id":"demos","headingLevel":"h2","className":"ws-title ws-h2"}}>
48
+ {`Demos`}
49
+ </AutoLinkHeader>
50
+ {React.createElement(pageData.examples["Editable labels with add dropdown"])}
51
+ {React.createElement(pageData.examples["Editable labels with add modal"])}
52
+ </React.Fragment>
53
+ );
54
+ Component.displayName = 'ComponentsLabelReactDemosDocs';
55
+ Component.pageData = pageData;
56
+
57
+ export default Component;