@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.
Files changed (149) hide show
  1. package/LICENSE +375 -0
  2. package/README.md +42 -0
  3. package/dist/bbui.es.js +8 -0
  4. package/dist/bbui.es.js.map +1 -0
  5. package/package.json +94 -0
  6. package/src/Accordion/Accordion.svelte +58 -0
  7. package/src/ActionButton/ActionButton.svelte +132 -0
  8. package/src/ActionGroup/ActionGroup.svelte +26 -0
  9. package/src/ActionMenu/ActionMenu.svelte +43 -0
  10. package/src/Actions/ClickOutside.svench.svx +30 -0
  11. package/src/Actions/PositionDropdown.svench.svx +81 -0
  12. package/src/Actions/autoresize_textarea.js +14 -0
  13. package/src/Actions/click_outside.js +76 -0
  14. package/src/Actions/position_dropdown.js +116 -0
  15. package/src/Avatar/Avatar.svelte +63 -0
  16. package/src/Badge/Badge.svelte +42 -0
  17. package/src/Banner/Banner.svelte +72 -0
  18. package/src/Banner/BannerDisplay.svelte +41 -0
  19. package/src/Button/Button.svelte +118 -0
  20. package/src/Button/Button.svench +138 -0
  21. package/src/ButtonGroup/ButtonGroup.svelte +30 -0
  22. package/src/ClearButton/ClearButton.svelte +19 -0
  23. package/src/ColorPicker/ColorPicker.svelte +304 -0
  24. package/src/DetailSummary/DetailSummary.svelte +92 -0
  25. package/src/Divider/Divider.svelte +28 -0
  26. package/src/Drawer/Drawer.svelte +113 -0
  27. package/src/Drawer/Drawer.svench +42 -0
  28. package/src/Drawer/DrawerContent.svelte +45 -0
  29. package/src/FancyForm/FancyButton.svelte +30 -0
  30. package/src/FancyForm/FancyButtonRadio.svelte +70 -0
  31. package/src/FancyForm/FancyCheckbox.svelte +53 -0
  32. package/src/FancyForm/FancyField.svelte +126 -0
  33. package/src/FancyForm/FancyFieldLabel.svelte +25 -0
  34. package/src/FancyForm/FancyForm.svelte +40 -0
  35. package/src/FancyForm/FancyInput.svelte +109 -0
  36. package/src/FancyForm/FancySelect.svelte +147 -0
  37. package/src/FancyForm/index.js +6 -0
  38. package/src/Form/Checkbox.svelte +23 -0
  39. package/src/Form/Combobox.svelte +45 -0
  40. package/src/Form/Core/Checkbox.svelte +69 -0
  41. package/src/Form/Core/CheckboxGroup.svelte +68 -0
  42. package/src/Form/Core/Combobox.svelte +142 -0
  43. package/src/Form/Core/DatePicker.svelte +265 -0
  44. package/src/Form/Core/Dropzone.svelte +482 -0
  45. package/src/Form/Core/EnvDropdown.svelte +276 -0
  46. package/src/Form/Core/File.svelte +115 -0
  47. package/src/Form/Core/InputDropdown.svelte +235 -0
  48. package/src/Form/Core/Multiselect.svelte +99 -0
  49. package/src/Form/Core/Picker.svelte +314 -0
  50. package/src/Form/Core/PickerDropdown.svelte +431 -0
  51. package/src/Form/Core/RadioGroup.svelte +65 -0
  52. package/src/Form/Core/RichTextField.svelte +42 -0
  53. package/src/Form/Core/Search.svelte +105 -0
  54. package/src/Form/Core/Select.svelte +90 -0
  55. package/src/Form/Core/Slider.svelte +86 -0
  56. package/src/Form/Core/Stepper.svelte +172 -0
  57. package/src/Form/Core/Switch.svelte +35 -0
  58. package/src/Form/Core/TextArea.svelte +78 -0
  59. package/src/Form/Core/TextField.svelte +115 -0
  60. package/src/Form/Core/index.js +16 -0
  61. package/src/Form/DatePicker.svelte +46 -0
  62. package/src/Form/Dropzone.svelte +44 -0
  63. package/src/Form/EnvDropdown.svelte +50 -0
  64. package/src/Form/Field.svelte +42 -0
  65. package/src/Form/FieldLabel.svelte +32 -0
  66. package/src/Form/File.svelte +37 -0
  67. package/src/Form/Input.svelte +45 -0
  68. package/src/Form/InputDropdown.svelte +53 -0
  69. package/src/Form/Multiselect.svelte +49 -0
  70. package/src/Form/PickerDropdown.svelte +131 -0
  71. package/src/Form/RadioGroup.svelte +42 -0
  72. package/src/Form/RichTextField.svelte +36 -0
  73. package/src/Form/Search.svelte +36 -0
  74. package/src/Form/Select.svelte +67 -0
  75. package/src/Form/Slider.svelte +24 -0
  76. package/src/Form/Stepper.svelte +45 -0
  77. package/src/Form/TextArea.svelte +34 -0
  78. package/src/Form/Toggle.svelte +22 -0
  79. package/src/Icon/Icon.svelte +94 -0
  80. package/src/Icon/IconAvatar.svelte +61 -0
  81. package/src/IconPicker/IconPicker.svelte +184 -0
  82. package/src/IconSideNav/IconSideNav.svelte +14 -0
  83. package/src/IconSideNav/IconSideNavItem.svelte +56 -0
  84. package/src/InlineAlert/InlineAlert.svelte +63 -0
  85. package/src/Input/CopyInput.svelte +59 -0
  86. package/src/Label/Label.svelte +31 -0
  87. package/src/Layout/Layout.svelte +94 -0
  88. package/src/Layout/Page.svelte +101 -0
  89. package/src/Link/Link.svelte +27 -0
  90. package/src/List/List.svelte +28 -0
  91. package/src/List/ListItem.svelte +93 -0
  92. package/src/Markdown/MarkdownEditor.svelte +60 -0
  93. package/src/Markdown/MarkdownViewer.svelte +70 -0
  94. package/src/Markdown/SpectrumMDE.svelte +184 -0
  95. package/src/Menu/Item.svelte +94 -0
  96. package/src/Menu/Menu.svelte +7 -0
  97. package/src/Menu/Menu.svench +19 -0
  98. package/src/Menu/Section.svelte +10 -0
  99. package/src/Menu/Separator.svelte +1 -0
  100. package/src/Modal/Content.svelte +6 -0
  101. package/src/Modal/CustomContent.svelte +37 -0
  102. package/src/Modal/Modal.svelte +178 -0
  103. package/src/Modal/Modal.svench +116 -0
  104. package/src/Modal/ModalContent.svelte +190 -0
  105. package/src/Modal/QuizModal.svelte +53 -0
  106. package/src/Notification/Notification.svelte +74 -0
  107. package/src/Notification/NotificationDisplay.svelte +43 -0
  108. package/src/Pagination/Pagination.svelte +57 -0
  109. package/src/Popover/Popover.svelte +95 -0
  110. package/src/Popover/Popover.svench +120 -0
  111. package/src/ProgressBar/ProgressBar.svelte +67 -0
  112. package/src/ProgressCircle/ProgressCircle.svelte +62 -0
  113. package/src/SideNavigation/Item.svelte +59 -0
  114. package/src/SideNavigation/Navigation.svelte +12 -0
  115. package/src/StatusLight/StatusLight.svelte +80 -0
  116. package/src/Stores/Notifications.svench.svx +78 -0
  117. package/src/Stores/banner.js +65 -0
  118. package/src/Stores/notifications.js +84 -0
  119. package/src/Table/ArrayRenderer.svelte +18 -0
  120. package/src/Table/AttachmentRenderer.svelte +73 -0
  121. package/src/Table/BoldRenderer.svelte +15 -0
  122. package/src/Table/BooleanRenderer.svelte +42 -0
  123. package/src/Table/CellRenderer.svelte +70 -0
  124. package/src/Table/CodeRenderer.svelte +14 -0
  125. package/src/Table/DateTimeRenderer.svelte +29 -0
  126. package/src/Table/InternalRenderer.svelte +24 -0
  127. package/src/Table/RelationshipRenderer.svelte +35 -0
  128. package/src/Table/SelectEditRenderer.svelte +28 -0
  129. package/src/Table/StringRenderer.svelte +22 -0
  130. package/src/Table/Table.svelte +657 -0
  131. package/src/Table/index.js +1 -0
  132. package/src/Tabs/Tab.svelte +88 -0
  133. package/src/Tabs/Tabs.svelte +130 -0
  134. package/src/Tags/Tag.svelte +43 -0
  135. package/src/Tags/Tags.svelte +17 -0
  136. package/src/Tooltip/Tooltip.svelte +34 -0
  137. package/src/Tooltip/TooltipWrapper.svelte +60 -0
  138. package/src/TreeView/Item.svelte +41 -0
  139. package/src/TreeView/Tree.svelte +16 -0
  140. package/src/Typography/Body.svelte +22 -0
  141. package/src/Typography/Code.svelte +10 -0
  142. package/src/Typography/Detail.svelte +19 -0
  143. package/src/Typography/Heading.svelte +24 -0
  144. package/src/bbui.css +118 -0
  145. package/src/context.js +4 -0
  146. package/src/helpers.js +116 -0
  147. package/src/index.js +109 -0
  148. package/src/spectrum-icons-rollup.js +31 -0
  149. 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
+ }