@budibase/bbui 0.0.1
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.
- package/LICENSE +375 -0
- package/README.md +42 -0
- package/dist/bbui.es.js +8 -0
- package/dist/bbui.es.js.map +1 -0
- package/package.json +94 -0
- package/src/Accordion/Accordion.svelte +58 -0
- package/src/ActionButton/ActionButton.svelte +132 -0
- package/src/ActionGroup/ActionGroup.svelte +26 -0
- package/src/ActionMenu/ActionMenu.svelte +43 -0
- package/src/Actions/ClickOutside.svench.svx +30 -0
- package/src/Actions/PositionDropdown.svench.svx +81 -0
- package/src/Actions/autoresize_textarea.js +14 -0
- package/src/Actions/click_outside.js +76 -0
- package/src/Actions/position_dropdown.js +116 -0
- package/src/Avatar/Avatar.svelte +63 -0
- package/src/Badge/Badge.svelte +42 -0
- package/src/Banner/Banner.svelte +72 -0
- package/src/Banner/BannerDisplay.svelte +41 -0
- package/src/Button/Button.svelte +118 -0
- package/src/Button/Button.svench +138 -0
- package/src/ButtonGroup/ButtonGroup.svelte +30 -0
- package/src/ClearButton/ClearButton.svelte +19 -0
- package/src/ColorPicker/ColorPicker.svelte +304 -0
- package/src/DetailSummary/DetailSummary.svelte +92 -0
- package/src/Divider/Divider.svelte +28 -0
- package/src/Drawer/Drawer.svelte +113 -0
- package/src/Drawer/Drawer.svench +42 -0
- package/src/Drawer/DrawerContent.svelte +45 -0
- package/src/FancyForm/FancyButton.svelte +30 -0
- package/src/FancyForm/FancyButtonRadio.svelte +70 -0
- package/src/FancyForm/FancyCheckbox.svelte +53 -0
- package/src/FancyForm/FancyField.svelte +126 -0
- package/src/FancyForm/FancyFieldLabel.svelte +25 -0
- package/src/FancyForm/FancyForm.svelte +40 -0
- package/src/FancyForm/FancyInput.svelte +109 -0
- package/src/FancyForm/FancySelect.svelte +147 -0
- package/src/FancyForm/index.js +6 -0
- package/src/Form/Checkbox.svelte +23 -0
- package/src/Form/Combobox.svelte +45 -0
- package/src/Form/Core/Checkbox.svelte +69 -0
- package/src/Form/Core/CheckboxGroup.svelte +68 -0
- package/src/Form/Core/Combobox.svelte +142 -0
- package/src/Form/Core/DatePicker.svelte +265 -0
- package/src/Form/Core/Dropzone.svelte +482 -0
- package/src/Form/Core/EnvDropdown.svelte +276 -0
- package/src/Form/Core/File.svelte +115 -0
- package/src/Form/Core/InputDropdown.svelte +235 -0
- package/src/Form/Core/Multiselect.svelte +99 -0
- package/src/Form/Core/Picker.svelte +314 -0
- package/src/Form/Core/PickerDropdown.svelte +431 -0
- package/src/Form/Core/RadioGroup.svelte +65 -0
- package/src/Form/Core/RichTextField.svelte +42 -0
- package/src/Form/Core/Search.svelte +105 -0
- package/src/Form/Core/Select.svelte +90 -0
- package/src/Form/Core/Slider.svelte +86 -0
- package/src/Form/Core/Stepper.svelte +172 -0
- package/src/Form/Core/Switch.svelte +35 -0
- package/src/Form/Core/TextArea.svelte +78 -0
- package/src/Form/Core/TextField.svelte +115 -0
- package/src/Form/Core/index.js +16 -0
- package/src/Form/DatePicker.svelte +46 -0
- package/src/Form/Dropzone.svelte +44 -0
- package/src/Form/EnvDropdown.svelte +50 -0
- package/src/Form/Field.svelte +42 -0
- package/src/Form/FieldLabel.svelte +32 -0
- package/src/Form/File.svelte +37 -0
- package/src/Form/Input.svelte +45 -0
- package/src/Form/InputDropdown.svelte +53 -0
- package/src/Form/Multiselect.svelte +49 -0
- package/src/Form/PickerDropdown.svelte +131 -0
- package/src/Form/RadioGroup.svelte +42 -0
- package/src/Form/RichTextField.svelte +36 -0
- package/src/Form/Search.svelte +36 -0
- package/src/Form/Select.svelte +67 -0
- package/src/Form/Slider.svelte +24 -0
- package/src/Form/Stepper.svelte +45 -0
- package/src/Form/TextArea.svelte +34 -0
- package/src/Form/Toggle.svelte +22 -0
- package/src/Icon/Icon.svelte +94 -0
- package/src/Icon/IconAvatar.svelte +61 -0
- package/src/IconPicker/IconPicker.svelte +184 -0
- package/src/IconSideNav/IconSideNav.svelte +14 -0
- package/src/IconSideNav/IconSideNavItem.svelte +56 -0
- package/src/InlineAlert/InlineAlert.svelte +63 -0
- package/src/Input/CopyInput.svelte +59 -0
- package/src/Label/Label.svelte +31 -0
- package/src/Layout/Layout.svelte +94 -0
- package/src/Layout/Page.svelte +101 -0
- package/src/Link/Link.svelte +27 -0
- package/src/List/List.svelte +28 -0
- package/src/List/ListItem.svelte +93 -0
- package/src/Markdown/MarkdownEditor.svelte +60 -0
- package/src/Markdown/MarkdownViewer.svelte +70 -0
- package/src/Markdown/SpectrumMDE.svelte +184 -0
- package/src/Menu/Item.svelte +94 -0
- package/src/Menu/Menu.svelte +7 -0
- package/src/Menu/Menu.svench +19 -0
- package/src/Menu/Section.svelte +10 -0
- package/src/Menu/Separator.svelte +1 -0
- package/src/Modal/Content.svelte +6 -0
- package/src/Modal/CustomContent.svelte +37 -0
- package/src/Modal/Modal.svelte +178 -0
- package/src/Modal/Modal.svench +116 -0
- package/src/Modal/ModalContent.svelte +190 -0
- package/src/Modal/QuizModal.svelte +53 -0
- package/src/Notification/Notification.svelte +74 -0
- package/src/Notification/NotificationDisplay.svelte +43 -0
- package/src/Pagination/Pagination.svelte +57 -0
- package/src/Popover/Popover.svelte +95 -0
- package/src/Popover/Popover.svench +120 -0
- package/src/ProgressBar/ProgressBar.svelte +67 -0
- package/src/ProgressCircle/ProgressCircle.svelte +62 -0
- package/src/SideNavigation/Item.svelte +59 -0
- package/src/SideNavigation/Navigation.svelte +12 -0
- package/src/StatusLight/StatusLight.svelte +80 -0
- package/src/Stores/Notifications.svench.svx +78 -0
- package/src/Stores/banner.js +65 -0
- package/src/Stores/notifications.js +84 -0
- package/src/Table/ArrayRenderer.svelte +18 -0
- package/src/Table/AttachmentRenderer.svelte +73 -0
- package/src/Table/BoldRenderer.svelte +15 -0
- package/src/Table/BooleanRenderer.svelte +42 -0
- package/src/Table/CellRenderer.svelte +70 -0
- package/src/Table/CodeRenderer.svelte +14 -0
- package/src/Table/DateTimeRenderer.svelte +29 -0
- package/src/Table/InternalRenderer.svelte +24 -0
- package/src/Table/RelationshipRenderer.svelte +35 -0
- package/src/Table/SelectEditRenderer.svelte +28 -0
- package/src/Table/StringRenderer.svelte +22 -0
- package/src/Table/Table.svelte +657 -0
- package/src/Table/index.js +1 -0
- package/src/Tabs/Tab.svelte +88 -0
- package/src/Tabs/Tabs.svelte +130 -0
- package/src/Tags/Tag.svelte +43 -0
- package/src/Tags/Tags.svelte +17 -0
- package/src/Tooltip/Tooltip.svelte +34 -0
- package/src/Tooltip/TooltipWrapper.svelte +60 -0
- package/src/TreeView/Item.svelte +41 -0
- package/src/TreeView/Tree.svelte +16 -0
- package/src/Typography/Body.svelte +22 -0
- package/src/Typography/Code.svelte +10 -0
- package/src/Typography/Detail.svelte +19 -0
- package/src/Typography/Heading.svelte +24 -0
- package/src/bbui.css +118 -0
- package/src/context.js +4 -0
- package/src/helpers.js +116 -0
- package/src/index.js +109 -0
- package/src/spectrum-icons-rollup.js +31 -0
- package/src/spectrum-icons-vite.js +31 -0
package/src/helpers.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { helpers } from "@budibase/shared-core"
|
|
2
|
+
export const deepGet = helpers.deepGet
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Generates a DOM safe UUID.
|
|
6
|
+
* Starting with a letter is important to make it DOM safe.
|
|
7
|
+
* @return {string} a random DOM safe UUID
|
|
8
|
+
*/
|
|
9
|
+
export function uuid() {
|
|
10
|
+
return "cxxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g, c => {
|
|
11
|
+
const r = (Math.random() * 16) | 0
|
|
12
|
+
const v = c === "x" ? r : (r & 0x3) | 0x8
|
|
13
|
+
return v.toString(16)
|
|
14
|
+
})
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Capitalises a string
|
|
19
|
+
* @param string the string to capitalise
|
|
20
|
+
* @return {string} the capitalised string
|
|
21
|
+
*/
|
|
22
|
+
export const capitalise = string => {
|
|
23
|
+
if (!string) {
|
|
24
|
+
return string
|
|
25
|
+
}
|
|
26
|
+
return string.substring(0, 1).toUpperCase() + string.substring(1)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Computes a short hash of a string
|
|
31
|
+
* @param string the string to compute a hash of
|
|
32
|
+
* @return {string} the hash string
|
|
33
|
+
*/
|
|
34
|
+
export const hashString = string => {
|
|
35
|
+
if (!string) {
|
|
36
|
+
return "0"
|
|
37
|
+
}
|
|
38
|
+
let hash = 0
|
|
39
|
+
for (let i = 0; i < string.length; i++) {
|
|
40
|
+
let char = string.charCodeAt(i)
|
|
41
|
+
hash = (hash << 5) - hash + char
|
|
42
|
+
hash = hash & hash // Convert to 32bit integer
|
|
43
|
+
}
|
|
44
|
+
return hash.toString()
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Sets a key within an object. The key supports dot syntax for retrieving deep
|
|
49
|
+
* fields - e.g. "a.b.c".
|
|
50
|
+
* Exact matches of keys with dots in them take precedence over nested keys of
|
|
51
|
+
* the same path - e.g. setting "a.b" of { "a.b": "foo", a: { b: "bar" } }
|
|
52
|
+
* will override the value "foo" rather than "bar".
|
|
53
|
+
* If a deep path is specified and the parent keys don't exist then these will
|
|
54
|
+
* be created.
|
|
55
|
+
* @param obj the object
|
|
56
|
+
* @param key the key
|
|
57
|
+
* @param value the value
|
|
58
|
+
*/
|
|
59
|
+
export const deepSet = (obj, key, value) => {
|
|
60
|
+
if (!obj || !key) {
|
|
61
|
+
return
|
|
62
|
+
}
|
|
63
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
64
|
+
obj[key] = value
|
|
65
|
+
return
|
|
66
|
+
}
|
|
67
|
+
const split = key.split(".")
|
|
68
|
+
for (let i = 0; i < split.length - 1; i++) {
|
|
69
|
+
const nextKey = split[i]
|
|
70
|
+
if (obj && obj[nextKey] == null) {
|
|
71
|
+
obj[nextKey] = {}
|
|
72
|
+
}
|
|
73
|
+
obj = obj?.[nextKey]
|
|
74
|
+
}
|
|
75
|
+
if (!obj) {
|
|
76
|
+
return
|
|
77
|
+
}
|
|
78
|
+
obj[split[split.length - 1]] = value
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Deeply clones an object. Functions are not supported.
|
|
83
|
+
* @param obj the object to clone
|
|
84
|
+
*/
|
|
85
|
+
export const cloneDeep = obj => {
|
|
86
|
+
if (!obj) {
|
|
87
|
+
return obj
|
|
88
|
+
}
|
|
89
|
+
return JSON.parse(JSON.stringify(obj))
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Copies a value to the clipboard
|
|
94
|
+
* @param value the value to copy
|
|
95
|
+
*/
|
|
96
|
+
export const copyToClipboard = value => {
|
|
97
|
+
return new Promise(res => {
|
|
98
|
+
if (navigator.clipboard && window.isSecureContext) {
|
|
99
|
+
// Try using the clipboard API first
|
|
100
|
+
navigator.clipboard.writeText(value).then(res)
|
|
101
|
+
} else {
|
|
102
|
+
// Fall back to the textarea hack
|
|
103
|
+
let textArea = document.createElement("textarea")
|
|
104
|
+
textArea.value = value
|
|
105
|
+
textArea.style.position = "fixed"
|
|
106
|
+
textArea.style.left = "-9999px"
|
|
107
|
+
textArea.style.top = "-9999px"
|
|
108
|
+
document.body.appendChild(textArea)
|
|
109
|
+
textArea.focus()
|
|
110
|
+
textArea.select()
|
|
111
|
+
document.execCommand("copy")
|
|
112
|
+
textArea.remove()
|
|
113
|
+
res()
|
|
114
|
+
}
|
|
115
|
+
})
|
|
116
|
+
}
|
package/src/index.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import "./bbui.css"
|
|
2
|
+
|
|
3
|
+
// Spectrum icons
|
|
4
|
+
import "@spectrum-css/icon/dist/index-vars.css"
|
|
5
|
+
|
|
6
|
+
// Components
|
|
7
|
+
export { default as Input } from "./Form/Input.svelte"
|
|
8
|
+
export { default as Stepper } from "./Form/Stepper.svelte"
|
|
9
|
+
export { default as TextArea } from "./Form/TextArea.svelte"
|
|
10
|
+
export { default as Select } from "./Form/Select.svelte"
|
|
11
|
+
export { default as Combobox } from "./Form/Combobox.svelte"
|
|
12
|
+
export { default as Dropzone } from "./Form/Dropzone.svelte"
|
|
13
|
+
export { default as Drawer } from "./Drawer/Drawer.svelte"
|
|
14
|
+
export { default as DrawerContent } from "./Drawer/DrawerContent.svelte"
|
|
15
|
+
export { default as Avatar } from "./Avatar/Avatar.svelte"
|
|
16
|
+
export { default as ActionButton } from "./ActionButton/ActionButton.svelte"
|
|
17
|
+
export { default as ActionGroup } from "./ActionGroup/ActionGroup.svelte"
|
|
18
|
+
export { default as ActionMenu } from "./ActionMenu/ActionMenu.svelte"
|
|
19
|
+
export { default as Button } from "./Button/Button.svelte"
|
|
20
|
+
export { default as ButtonGroup } from "./ButtonGroup/ButtonGroup.svelte"
|
|
21
|
+
export { default as ClearButton } from "./ClearButton/ClearButton.svelte"
|
|
22
|
+
export { default as Icon, directions } from "./Icon/Icon.svelte"
|
|
23
|
+
export { default as IconAvatar } from "./Icon/IconAvatar.svelte"
|
|
24
|
+
export { default as Toggle } from "./Form/Toggle.svelte"
|
|
25
|
+
export { default as RadioGroup } from "./Form/RadioGroup.svelte"
|
|
26
|
+
export { default as Checkbox } from "./Form/Checkbox.svelte"
|
|
27
|
+
export { default as InputDropdown } from "./Form/InputDropdown.svelte"
|
|
28
|
+
export { default as PickerDropdown } from "./Form/PickerDropdown.svelte"
|
|
29
|
+
export { default as EnvDropdown } from "./Form/EnvDropdown.svelte"
|
|
30
|
+
export { default as DetailSummary } from "./DetailSummary/DetailSummary.svelte"
|
|
31
|
+
export { default as Popover } from "./Popover/Popover.svelte"
|
|
32
|
+
export { default as ProgressBar } from "./ProgressBar/ProgressBar.svelte"
|
|
33
|
+
export { default as ProgressCircle } from "./ProgressCircle/ProgressCircle.svelte"
|
|
34
|
+
export { default as Label } from "./Label/Label.svelte"
|
|
35
|
+
export { default as Layout } from "./Layout/Layout.svelte"
|
|
36
|
+
export { default as Page } from "./Layout/Page.svelte"
|
|
37
|
+
export { default as Link } from "./Link/Link.svelte"
|
|
38
|
+
export { default as Tooltip } from "./Tooltip/Tooltip.svelte"
|
|
39
|
+
export { default as TooltipWrapper } from "./Tooltip/TooltipWrapper.svelte"
|
|
40
|
+
export { default as Menu } from "./Menu/Menu.svelte"
|
|
41
|
+
export { default as MenuSection } from "./Menu/Section.svelte"
|
|
42
|
+
export { default as MenuSeparator } from "./Menu/Separator.svelte"
|
|
43
|
+
export { default as MenuItem } from "./Menu/Item.svelte"
|
|
44
|
+
export { default as Modal } from "./Modal/Modal.svelte"
|
|
45
|
+
export { default as ModalContent } from "./Modal/ModalContent.svelte"
|
|
46
|
+
export { default as NotificationDisplay } from "./Notification/NotificationDisplay.svelte"
|
|
47
|
+
export { default as Notification } from "./Notification/Notification.svelte"
|
|
48
|
+
export { default as SideNavigation } from "./SideNavigation/Navigation.svelte"
|
|
49
|
+
export { default as SideNavigationItem } from "./SideNavigation/Item.svelte"
|
|
50
|
+
export { default as DatePicker } from "./Form/DatePicker.svelte"
|
|
51
|
+
export { default as Multiselect } from "./Form/Multiselect.svelte"
|
|
52
|
+
export { default as Context } from "./context"
|
|
53
|
+
export { default as Table } from "./Table/Table.svelte"
|
|
54
|
+
export { default as Tabs } from "./Tabs/Tabs.svelte"
|
|
55
|
+
export { default as Tab } from "./Tabs/Tab.svelte"
|
|
56
|
+
export { default as Tags } from "./Tags/Tags.svelte"
|
|
57
|
+
export { default as Tag } from "./Tags/Tag.svelte"
|
|
58
|
+
export { default as TreeView } from "./TreeView/Tree.svelte"
|
|
59
|
+
export { default as TreeItem } from "./TreeView/Item.svelte"
|
|
60
|
+
export { default as Divider } from "./Divider/Divider.svelte"
|
|
61
|
+
export { default as Search } from "./Form/Search.svelte"
|
|
62
|
+
export { default as Pagination } from "./Pagination/Pagination.svelte"
|
|
63
|
+
export { default as Badge } from "./Badge/Badge.svelte"
|
|
64
|
+
export { default as StatusLight } from "./StatusLight/StatusLight.svelte"
|
|
65
|
+
export { default as ColorPicker } from "./ColorPicker/ColorPicker.svelte"
|
|
66
|
+
export { default as IconPicker } from "./IconPicker/IconPicker.svelte"
|
|
67
|
+
export { default as InlineAlert } from "./InlineAlert/InlineAlert.svelte"
|
|
68
|
+
export { default as Banner } from "./Banner/Banner.svelte"
|
|
69
|
+
export { default as CopyInput } from "./Input/CopyInput.svelte"
|
|
70
|
+
export { default as BannerDisplay } from "./Banner/BannerDisplay.svelte"
|
|
71
|
+
export { default as MarkdownEditor } from "./Markdown/MarkdownEditor.svelte"
|
|
72
|
+
export { default as MarkdownViewer } from "./Markdown/MarkdownViewer.svelte"
|
|
73
|
+
export { default as RichTextField } from "./Form/RichTextField.svelte"
|
|
74
|
+
export { default as List } from "./List/List.svelte"
|
|
75
|
+
export { default as ListItem } from "./List/ListItem.svelte"
|
|
76
|
+
export { default as IconSideNav } from "./IconSideNav/IconSideNav.svelte"
|
|
77
|
+
export { default as IconSideNavItem } from "./IconSideNav/IconSideNavItem.svelte"
|
|
78
|
+
export { default as Slider } from "./Form/Slider.svelte"
|
|
79
|
+
export { default as Accordion } from "./Accordion/Accordion.svelte"
|
|
80
|
+
export { default as File } from "./Form/File.svelte"
|
|
81
|
+
|
|
82
|
+
// Renderers
|
|
83
|
+
export { default as BoldRenderer } from "./Table/BoldRenderer.svelte"
|
|
84
|
+
export { default as CodeRenderer } from "./Table/CodeRenderer.svelte"
|
|
85
|
+
export { default as InternalRenderer } from "./Table/InternalRenderer.svelte"
|
|
86
|
+
|
|
87
|
+
// Typography
|
|
88
|
+
export { default as Body } from "./Typography/Body.svelte"
|
|
89
|
+
export { default as Heading } from "./Typography/Heading.svelte"
|
|
90
|
+
export { default as Detail } from "./Typography/Detail.svelte"
|
|
91
|
+
export { default as Code } from "./Typography/Code.svelte"
|
|
92
|
+
|
|
93
|
+
// Core form components to be used elsewhere (standard components)
|
|
94
|
+
export * from "./Form/Core"
|
|
95
|
+
|
|
96
|
+
// Actions
|
|
97
|
+
export { default as autoResizeTextArea } from "./Actions/autoresize_textarea"
|
|
98
|
+
export { default as positionDropdown } from "./Actions/position_dropdown"
|
|
99
|
+
export { default as clickOutside } from "./Actions/click_outside"
|
|
100
|
+
|
|
101
|
+
// Stores
|
|
102
|
+
export { notifications, createNotificationStore } from "./Stores/notifications"
|
|
103
|
+
export { banner, BANNER_TYPES } from "./Stores/banner"
|
|
104
|
+
|
|
105
|
+
// Helpers
|
|
106
|
+
export * as Helpers from "./helpers"
|
|
107
|
+
|
|
108
|
+
// Fancy form components
|
|
109
|
+
export * from "./FancyForm"
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import SpectrumUIIcons from "@spectrum-css/icon/dist/spectrum-css-icons.svg"
|
|
2
|
+
import SpectrumWorkflowIcons from "@adobe/spectrum-css-workflow-icons/dist/spectrum-icons.svg"
|
|
3
|
+
|
|
4
|
+
export default () => {
|
|
5
|
+
loadIconSet("Spectrum UI Icons", SpectrumUIIcons)
|
|
6
|
+
loadIconSet("Spectrum Workflow Icons", SpectrumWorkflowIcons)
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const loadIconSet = (name, markup) => {
|
|
10
|
+
// Parse the SVG
|
|
11
|
+
const parser = new DOMParser()
|
|
12
|
+
try {
|
|
13
|
+
const doc = parser.parseFromString(markup, "image/svg+xml")
|
|
14
|
+
const svg = doc.firstChild
|
|
15
|
+
|
|
16
|
+
// Check a real SVG was parsed
|
|
17
|
+
if (svg && svg.tagName === "svg") {
|
|
18
|
+
// Hide the element
|
|
19
|
+
svg.style.display = "none"
|
|
20
|
+
|
|
21
|
+
// Insert it into the head
|
|
22
|
+
document.head.insertBefore(svg, null)
|
|
23
|
+
} else {
|
|
24
|
+
throw "Invalid tag type for SVG definition"
|
|
25
|
+
}
|
|
26
|
+
} catch (err) {
|
|
27
|
+
// Swallow error, but icons won't work
|
|
28
|
+
console.error(err)
|
|
29
|
+
console.error(`Failed to parse ${name}. Icons won't work.`)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import SpectrumUIIcons from "@spectrum-css/icon/dist/spectrum-css-icons.svg?raw"
|
|
2
|
+
import SpectrumWorkflowIcons from "@adobe/spectrum-css-workflow-icons/dist/spectrum-icons.svg?raw"
|
|
3
|
+
|
|
4
|
+
export default () => {
|
|
5
|
+
loadIconSet("Spectrum UI Icons", SpectrumUIIcons)
|
|
6
|
+
loadIconSet("Spectrum Workflow Icons", SpectrumWorkflowIcons)
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const loadIconSet = (name, markup) => {
|
|
10
|
+
// Parse the SVG
|
|
11
|
+
const parser = new DOMParser()
|
|
12
|
+
try {
|
|
13
|
+
const doc = parser.parseFromString(markup, "image/svg+xml")
|
|
14
|
+
const svg = doc.firstChild
|
|
15
|
+
|
|
16
|
+
// Check a real SVG was parsed
|
|
17
|
+
if (svg && svg.tagName === "svg") {
|
|
18
|
+
// Hide the element
|
|
19
|
+
svg.style.display = "none"
|
|
20
|
+
|
|
21
|
+
// Insert it into the head
|
|
22
|
+
document.head.insertBefore(svg, null)
|
|
23
|
+
} else {
|
|
24
|
+
throw "Invalid tag type for SVG definition"
|
|
25
|
+
}
|
|
26
|
+
} catch (err) {
|
|
27
|
+
// Swallow error, but icons won't work
|
|
28
|
+
console.error(err)
|
|
29
|
+
console.error(`Failed to parse ${name}. Icons won't work.`)
|
|
30
|
+
}
|
|
31
|
+
}
|