@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
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { getContext, onMount, createEventDispatcher } from "svelte"
|
|
3
|
+
import Portal from "svelte-portal"
|
|
4
|
+
export let title
|
|
5
|
+
export let icon = ""
|
|
6
|
+
export let id
|
|
7
|
+
|
|
8
|
+
const dispatch = createEventDispatcher()
|
|
9
|
+
let selected = getContext("tab")
|
|
10
|
+
let tab_internal
|
|
11
|
+
let tabInfo
|
|
12
|
+
|
|
13
|
+
const setTabInfo = () => {
|
|
14
|
+
// If the tabs are being rendered inside a component which uses
|
|
15
|
+
// a svelte transition to enter, then this initial getBoundingClientRect
|
|
16
|
+
// will return an incorrect position.
|
|
17
|
+
// We just need to get this off the main thread to fix this, by using
|
|
18
|
+
// a 0ms timeout.
|
|
19
|
+
setTimeout(() => {
|
|
20
|
+
tabInfo = tab_internal?.getBoundingClientRect()
|
|
21
|
+
if (tabInfo && $selected.title === title) {
|
|
22
|
+
$selected.info = tabInfo
|
|
23
|
+
}
|
|
24
|
+
}, 0)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
onMount(() => {
|
|
28
|
+
setTabInfo()
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
//Ensure that the underline is in the correct location
|
|
32
|
+
$: {
|
|
33
|
+
if ($selected.title === title && tab_internal) {
|
|
34
|
+
if ($selected.info?.left !== tab_internal.getBoundingClientRect().left) {
|
|
35
|
+
setTabInfo()
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const onClick = () => {
|
|
41
|
+
$selected = {
|
|
42
|
+
...$selected,
|
|
43
|
+
title,
|
|
44
|
+
info: tab_internal.getBoundingClientRect(),
|
|
45
|
+
}
|
|
46
|
+
dispatch("click")
|
|
47
|
+
}
|
|
48
|
+
</script>
|
|
49
|
+
|
|
50
|
+
<div
|
|
51
|
+
{id}
|
|
52
|
+
bind:this={tab_internal}
|
|
53
|
+
on:click={onClick}
|
|
54
|
+
class:is-selected={$selected.title === title}
|
|
55
|
+
class="spectrum-Tabs-item"
|
|
56
|
+
class:emphasized={$selected.title === title && $selected.emphasized}
|
|
57
|
+
tabindex="0"
|
|
58
|
+
>
|
|
59
|
+
{#if icon}
|
|
60
|
+
<svg
|
|
61
|
+
class="spectrum-Icon spectrum-Icon--sizeM"
|
|
62
|
+
focusable="false"
|
|
63
|
+
aria-hidden="true"
|
|
64
|
+
aria-label="Folder"
|
|
65
|
+
>
|
|
66
|
+
<use xlink:href="#spectrum-icon-18-{icon}" />
|
|
67
|
+
</svg>
|
|
68
|
+
{/if}
|
|
69
|
+
<span class="spectrum-Tabs-itemLabel">{title}</span>
|
|
70
|
+
</div>
|
|
71
|
+
{#if $selected.title === title}
|
|
72
|
+
<Portal target=".spectrum-Tabs-content-{$selected.id}">
|
|
73
|
+
<slot />
|
|
74
|
+
</Portal>
|
|
75
|
+
{/if}
|
|
76
|
+
|
|
77
|
+
<style>
|
|
78
|
+
.emphasized {
|
|
79
|
+
color: var(--spectrum-global-color-blue-600);
|
|
80
|
+
}
|
|
81
|
+
.spectrum-Tabs-item {
|
|
82
|
+
color: var(--spectrum-global-color-gray-600);
|
|
83
|
+
}
|
|
84
|
+
.spectrum-Tabs-item.is-selected,
|
|
85
|
+
.spectrum-Tabs-item:hover {
|
|
86
|
+
color: var(--spectrum-global-color-gray-900);
|
|
87
|
+
}
|
|
88
|
+
</style>
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import "@spectrum-css/tabs/dist/index-vars.css"
|
|
3
|
+
import { writable } from "svelte/store"
|
|
4
|
+
import { onMount, setContext, createEventDispatcher } from "svelte"
|
|
5
|
+
|
|
6
|
+
export let selected
|
|
7
|
+
export let vertical = false
|
|
8
|
+
export let noPadding = false
|
|
9
|
+
// added as a separate option as noPadding is used for vertical padding
|
|
10
|
+
export let noHorizPadding = false
|
|
11
|
+
export let quiet = false
|
|
12
|
+
export let emphasized = false
|
|
13
|
+
export let onTop = false
|
|
14
|
+
export let size = "M"
|
|
15
|
+
|
|
16
|
+
let thisSelected = undefined
|
|
17
|
+
|
|
18
|
+
let _id = id()
|
|
19
|
+
const tab = writable({ title: selected, id: _id, emphasized })
|
|
20
|
+
setContext("tab", tab)
|
|
21
|
+
|
|
22
|
+
let container
|
|
23
|
+
|
|
24
|
+
const dispatch = createEventDispatcher()
|
|
25
|
+
|
|
26
|
+
$: {
|
|
27
|
+
if (thisSelected !== selected) {
|
|
28
|
+
thisSelected = selected
|
|
29
|
+
dispatch("select", thisSelected)
|
|
30
|
+
} else if ($tab.title !== thisSelected) {
|
|
31
|
+
thisSelected = $tab.title
|
|
32
|
+
selected = $tab.title
|
|
33
|
+
dispatch("select", thisSelected)
|
|
34
|
+
}
|
|
35
|
+
if ($tab.title !== thisSelected) {
|
|
36
|
+
tab.update(state => {
|
|
37
|
+
state.title = thisSelected
|
|
38
|
+
return state
|
|
39
|
+
})
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
let top, left, width, height
|
|
44
|
+
$: calculateIndicatorLength($tab)
|
|
45
|
+
$: calculateIndicatorOffset($tab)
|
|
46
|
+
|
|
47
|
+
function calculateIndicatorLength() {
|
|
48
|
+
if (!vertical) {
|
|
49
|
+
width = $tab.info?.width + "px"
|
|
50
|
+
height = $tab.info?.height
|
|
51
|
+
} else {
|
|
52
|
+
height = $tab.info?.height + 4 + "px"
|
|
53
|
+
width = $tab.info?.width
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function calculateIndicatorOffset() {
|
|
58
|
+
if (!vertical) {
|
|
59
|
+
left = $tab.info?.left - container?.getBoundingClientRect().left + "px"
|
|
60
|
+
} else {
|
|
61
|
+
top = $tab.info?.top - container?.getBoundingClientRect().top + "px"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
onMount(() => {
|
|
66
|
+
calculateIndicatorLength()
|
|
67
|
+
calculateIndicatorOffset()
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
function id() {
|
|
71
|
+
return "_" + Math.random().toString(36).slice(2, 9)
|
|
72
|
+
}
|
|
73
|
+
</script>
|
|
74
|
+
|
|
75
|
+
<div
|
|
76
|
+
bind:this={container}
|
|
77
|
+
class:spectrum-Tabs--quiet={quiet}
|
|
78
|
+
class:noHorizPadding
|
|
79
|
+
class:onTop
|
|
80
|
+
class:spectrum-Tabs--vertical={vertical}
|
|
81
|
+
class:spectrum-Tabs--horizontal={!vertical}
|
|
82
|
+
class="spectrum-Tabs spectrum-Tabs--size{size}"
|
|
83
|
+
>
|
|
84
|
+
<slot />
|
|
85
|
+
{#if $tab.info}
|
|
86
|
+
<div
|
|
87
|
+
class="spectrum-Tabs-selectionIndicator"
|
|
88
|
+
class:emphasized
|
|
89
|
+
style="width: {width}; height: {height}; left: {left}; top: {top};"
|
|
90
|
+
/>
|
|
91
|
+
{/if}
|
|
92
|
+
</div>
|
|
93
|
+
|
|
94
|
+
<div
|
|
95
|
+
class="spectrum-Tabs-content spectrum-Tabs-content-{_id}"
|
|
96
|
+
class:noPadding
|
|
97
|
+
/>
|
|
98
|
+
|
|
99
|
+
<style>
|
|
100
|
+
.spectrum-Tabs--quiet {
|
|
101
|
+
border-bottom: none !important;
|
|
102
|
+
}
|
|
103
|
+
.spectrum-Tabs {
|
|
104
|
+
padding-left: var(--spacing-xl);
|
|
105
|
+
padding-right: var(--spacing-xl);
|
|
106
|
+
position: relative;
|
|
107
|
+
border-bottom-color: var(--spectrum-global-color-gray-200);
|
|
108
|
+
}
|
|
109
|
+
.spectrum-Tabs-content {
|
|
110
|
+
margin-top: var(--spectrum-global-dimension-static-size-150);
|
|
111
|
+
}
|
|
112
|
+
.spectrum-Tabs-selectionIndicator {
|
|
113
|
+
transition: all 200ms;
|
|
114
|
+
background-color: var(--spectrum-global-color-gray-900);
|
|
115
|
+
}
|
|
116
|
+
.spectrum-Tabs-selectionIndicator.emphasized {
|
|
117
|
+
background-color: var(--spectrum-global-color-blue-400);
|
|
118
|
+
}
|
|
119
|
+
.spectrum-Tabs--horizontal .spectrum-Tabs-selectionIndicator {
|
|
120
|
+
}
|
|
121
|
+
.noHorizPadding {
|
|
122
|
+
padding: 0;
|
|
123
|
+
}
|
|
124
|
+
.noPadding {
|
|
125
|
+
margin: 0;
|
|
126
|
+
}
|
|
127
|
+
.onTop {
|
|
128
|
+
z-index: 100;
|
|
129
|
+
}
|
|
130
|
+
</style>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import "@spectrum-css/tags/dist/index-vars.css"
|
|
3
|
+
import Avatar from "../Avatar/Avatar.svelte"
|
|
4
|
+
import ClearButton from "../ClearButton/ClearButton.svelte"
|
|
5
|
+
|
|
6
|
+
export let icon = ""
|
|
7
|
+
export let avatar = ""
|
|
8
|
+
export let invalid = false
|
|
9
|
+
export let disabled = false
|
|
10
|
+
export let closable = false
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<div
|
|
14
|
+
class:is-invalid={invalid}
|
|
15
|
+
class:is-disabled={disabled}
|
|
16
|
+
class="spectrum-Tags-item"
|
|
17
|
+
role="listitem"
|
|
18
|
+
>
|
|
19
|
+
{#if avatar}
|
|
20
|
+
<Avatar url={avatar} />
|
|
21
|
+
{/if}
|
|
22
|
+
{#if icon}
|
|
23
|
+
<svg
|
|
24
|
+
class="spectrum-Icon spectrum-Icon--sizeS"
|
|
25
|
+
focusable="false"
|
|
26
|
+
aria-hidden="true"
|
|
27
|
+
aria-label="Tag"
|
|
28
|
+
>
|
|
29
|
+
<use xlink:href="#spectrum-icon-24-{icon}" />
|
|
30
|
+
</svg>
|
|
31
|
+
{/if}
|
|
32
|
+
<span class="spectrum-Tags-itemLabel"><slot /></span>
|
|
33
|
+
{#if closable}
|
|
34
|
+
<ClearButton on:click />
|
|
35
|
+
{/if}
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<style>
|
|
39
|
+
.spectrum-Tags-item {
|
|
40
|
+
margin-bottom: 0;
|
|
41
|
+
margin-top: 0;
|
|
42
|
+
}
|
|
43
|
+
</style>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import "@spectrum-css/tags/dist/index-vars.css"
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<div class="spectrum-Tags" role="list" aria-label="list">
|
|
6
|
+
<slot />
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
<style>
|
|
10
|
+
.spectrum-Tags {
|
|
11
|
+
margin-top: -8px;
|
|
12
|
+
margin-left: -4px;
|
|
13
|
+
}
|
|
14
|
+
.spectrum-Tags :global(.spectrum-Tags-item) {
|
|
15
|
+
margin: 8px 0 0 4px !important;
|
|
16
|
+
}
|
|
17
|
+
</style>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import "@spectrum-css/tooltip/dist/index-vars.css"
|
|
3
|
+
|
|
4
|
+
export let direction = "top"
|
|
5
|
+
export let text = ""
|
|
6
|
+
export let textWrapping = false
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<!-- Showing / Hiding a text wrapped tooltip should be handled outside the component -->
|
|
10
|
+
{#if textWrapping}
|
|
11
|
+
<span class="spectrum-Tooltip spectrum-Tooltip--{direction} is-open tooltip">
|
|
12
|
+
<span class="spectrum-Tooltip-label">{text}</span>
|
|
13
|
+
<span class="spectrum-Tooltip-tip" />
|
|
14
|
+
</span>
|
|
15
|
+
{:else}
|
|
16
|
+
<!-- The default show on hover tooltip does not support text wrapping -->
|
|
17
|
+
<span class="u-tooltip-showOnHover tooltip">
|
|
18
|
+
<slot />
|
|
19
|
+
<div class={`spectrum-Tooltip spectrum-Tooltip--${direction}`}>
|
|
20
|
+
<span class="spectrum-Tooltip-label">{text}</span>
|
|
21
|
+
<span class="spectrum-Tooltip-tip" />
|
|
22
|
+
</div>
|
|
23
|
+
</span>
|
|
24
|
+
{/if}
|
|
25
|
+
|
|
26
|
+
<style>
|
|
27
|
+
.tooltip {
|
|
28
|
+
pointer-events: none;
|
|
29
|
+
background: var(--spectrum-global-color-gray-500);
|
|
30
|
+
}
|
|
31
|
+
.spectrum-Tooltip-tip {
|
|
32
|
+
border-top-color: var(--spectrum-global-color-gray-500);
|
|
33
|
+
}
|
|
34
|
+
</style>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import Tooltip from "./Tooltip.svelte"
|
|
3
|
+
import Icon from "../Icon/Icon.svelte"
|
|
4
|
+
|
|
5
|
+
export let tooltip = ""
|
|
6
|
+
export let size = "M"
|
|
7
|
+
export let disabled = true
|
|
8
|
+
|
|
9
|
+
let showTooltip = false
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<div class:container={!!tooltip}>
|
|
13
|
+
<slot />
|
|
14
|
+
{#if tooltip}
|
|
15
|
+
<div class="icon-container">
|
|
16
|
+
<div
|
|
17
|
+
class="icon"
|
|
18
|
+
class:icon-small={size === "M" || size === "S"}
|
|
19
|
+
on:mouseover={() => (showTooltip = true)}
|
|
20
|
+
on:mouseleave={() => (showTooltip = false)}
|
|
21
|
+
on:focus
|
|
22
|
+
>
|
|
23
|
+
<Icon name="InfoOutline" size="S" {disabled} />
|
|
24
|
+
</div>
|
|
25
|
+
{#if showTooltip}
|
|
26
|
+
<div class="tooltip">
|
|
27
|
+
<Tooltip textWrapping={true} direction={"bottom"} text={tooltip} />
|
|
28
|
+
</div>
|
|
29
|
+
{/if}
|
|
30
|
+
</div>
|
|
31
|
+
{/if}
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<style>
|
|
35
|
+
.container {
|
|
36
|
+
display: flex;
|
|
37
|
+
align-items: center;
|
|
38
|
+
}
|
|
39
|
+
.icon-container {
|
|
40
|
+
position: relative;
|
|
41
|
+
display: flex;
|
|
42
|
+
justify-content: center;
|
|
43
|
+
margin-left: 5px;
|
|
44
|
+
margin-right: 5px;
|
|
45
|
+
}
|
|
46
|
+
.tooltip {
|
|
47
|
+
position: absolute;
|
|
48
|
+
display: flex;
|
|
49
|
+
justify-content: center;
|
|
50
|
+
top: 15px;
|
|
51
|
+
z-index: 200;
|
|
52
|
+
width: 160px;
|
|
53
|
+
}
|
|
54
|
+
.icon {
|
|
55
|
+
transform: scale(0.75);
|
|
56
|
+
}
|
|
57
|
+
.icon-small {
|
|
58
|
+
margin-bottom: -2px;
|
|
59
|
+
}
|
|
60
|
+
</style>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
export let selected = false
|
|
3
|
+
export let open = false
|
|
4
|
+
export let href = false
|
|
5
|
+
export let title
|
|
6
|
+
export let icon
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<li
|
|
10
|
+
class:is-selected={selected}
|
|
11
|
+
class:is-open={open}
|
|
12
|
+
class="spectrum-TreeView-item"
|
|
13
|
+
>
|
|
14
|
+
<a on:click class="spectrum-TreeView-itemLink" {href}>
|
|
15
|
+
{#if $$slots.default}
|
|
16
|
+
<svg
|
|
17
|
+
class="spectrum-Icon spectrum-UIIcon-ChevronRight100 spectrum-TreeView-itemIndicator"
|
|
18
|
+
focusable="false"
|
|
19
|
+
aria-hidden="true"
|
|
20
|
+
>
|
|
21
|
+
<use xlink:href="#spectrum-css-icon-Chevron100" />
|
|
22
|
+
</svg>
|
|
23
|
+
{/if}
|
|
24
|
+
{#if icon}
|
|
25
|
+
<svg
|
|
26
|
+
class="spectrum-TreeView-itemIcon spectrum-Icon spectrum-Icon--sizeM"
|
|
27
|
+
focusable="false"
|
|
28
|
+
aria-hidden="true"
|
|
29
|
+
aria-label="Layers"
|
|
30
|
+
>
|
|
31
|
+
<use xlink:href="#spectrum-icon-18-{icon}" />
|
|
32
|
+
</svg>
|
|
33
|
+
{/if}
|
|
34
|
+
<span class="spectrum-TreeView-itemLabel">{title}</span>
|
|
35
|
+
</a>
|
|
36
|
+
{#if $$slots.default}
|
|
37
|
+
<ul class="spectrum-TreeView">
|
|
38
|
+
<slot />
|
|
39
|
+
</ul>
|
|
40
|
+
{/if}
|
|
41
|
+
</li>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import "@spectrum-css/treeview/dist/index-vars.css"
|
|
3
|
+
|
|
4
|
+
export let quiet = false
|
|
5
|
+
export let standalone = true
|
|
6
|
+
export let width = "250px"
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<ul
|
|
10
|
+
class:spectrum-TreeView--standalone={standalone}
|
|
11
|
+
class:spectrum-TreeView--quiet={quiet}
|
|
12
|
+
class="spectrum-TreeView"
|
|
13
|
+
style="width: {width}"
|
|
14
|
+
>
|
|
15
|
+
<slot />
|
|
16
|
+
</ul>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import "@spectrum-css/typography/dist/index-vars.css"
|
|
3
|
+
|
|
4
|
+
export let size = "M"
|
|
5
|
+
export let serif = false
|
|
6
|
+
export let weight = null
|
|
7
|
+
export let textAlign = null
|
|
8
|
+
export let color = null
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<p
|
|
12
|
+
data-testid="typography-body"
|
|
13
|
+
style={`
|
|
14
|
+
${weight ? `font-weight:${weight};` : ""}
|
|
15
|
+
${textAlign ? `text-align:${textAlign};` : ""}
|
|
16
|
+
${color ? `color:${color};` : ""}
|
|
17
|
+
`}
|
|
18
|
+
class="spectrum-Body spectrum-Body--size{size}"
|
|
19
|
+
class:spectrum-Body--serif={serif}
|
|
20
|
+
>
|
|
21
|
+
<slot />
|
|
22
|
+
</p>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import "@spectrum-css/typography/dist/index-vars.css"
|
|
3
|
+
|
|
4
|
+
export let size = "M"
|
|
5
|
+
export let serif = false
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<p
|
|
9
|
+
class="spectrum-Detail spectrum-Detail--size{size}"
|
|
10
|
+
class:spectrum-Detail--serif={serif}
|
|
11
|
+
>
|
|
12
|
+
<slot />
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
<style>
|
|
16
|
+
p {
|
|
17
|
+
font-weight: 600;
|
|
18
|
+
}
|
|
19
|
+
</style>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import "@spectrum-css/typography/dist/index-vars.css"
|
|
3
|
+
|
|
4
|
+
// Sizes
|
|
5
|
+
export let size = "M"
|
|
6
|
+
export let textAlign
|
|
7
|
+
export let noPadding = false
|
|
8
|
+
export let weight = "default" // light, heavy, default
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<h1
|
|
12
|
+
data-testid="typography-heading"
|
|
13
|
+
style={textAlign ? `text-align:${textAlign}` : ``}
|
|
14
|
+
class:noPadding
|
|
15
|
+
class="spectrum-Heading spectrum-Heading--size{size} spectrum-Heading--{weight}"
|
|
16
|
+
>
|
|
17
|
+
<slot />
|
|
18
|
+
</h1>
|
|
19
|
+
|
|
20
|
+
<style>
|
|
21
|
+
h1 {
|
|
22
|
+
font-family: var(--font-accent);
|
|
23
|
+
}
|
|
24
|
+
</style>
|
package/src/bbui.css
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--background: #ffffff;
|
|
3
|
+
--ink: #000000;
|
|
4
|
+
|
|
5
|
+
--grey-1: #fafafa;
|
|
6
|
+
--grey-2: #f5f5f5;
|
|
7
|
+
--grey-3: #eeeeee;
|
|
8
|
+
--grey-4: #e0e0e0;
|
|
9
|
+
--grey-5: #bdbdbd;
|
|
10
|
+
--grey-6: #9e9e9e;
|
|
11
|
+
--grey-7: #757575;
|
|
12
|
+
--grey-8: #616161;
|
|
13
|
+
--grey-9: #424242;
|
|
14
|
+
|
|
15
|
+
--blue-light: #f1f4fc;
|
|
16
|
+
--blue: #4285f4;
|
|
17
|
+
--blue-dark: #2f4c9b;
|
|
18
|
+
|
|
19
|
+
--red-light: #ffe6e6;
|
|
20
|
+
--red: #e26d69;
|
|
21
|
+
--red-dark: #800400;
|
|
22
|
+
|
|
23
|
+
--yellow-light: #fff7e6;
|
|
24
|
+
--yellow: #ffd26a;
|
|
25
|
+
--yellow-dark: #805900;
|
|
26
|
+
|
|
27
|
+
--orange-light: #fff0e6;
|
|
28
|
+
--orange: #f0955a;
|
|
29
|
+
--orange-dark: #803300;
|
|
30
|
+
|
|
31
|
+
--green-light: #e6ffeb;
|
|
32
|
+
--green: #84c991;
|
|
33
|
+
--green-dark: #008017;
|
|
34
|
+
|
|
35
|
+
--purple-light: #e9e6ff;
|
|
36
|
+
--purple: #806fde;
|
|
37
|
+
--purple-dark: #130080;
|
|
38
|
+
|
|
39
|
+
--rounded-small: 4px;
|
|
40
|
+
--rounded-medium: 8px;
|
|
41
|
+
--rounded-large: 16px;
|
|
42
|
+
|
|
43
|
+
--font-sans: "Source Sans Pro", -apple-system, BlinkMacSystemFont, Segoe UI, "Inter",
|
|
44
|
+
"Helvetica Neue", Arial, "Noto Sans", sans-serif;
|
|
45
|
+
--font-accent: "Source Sans Pro", -apple-system, BlinkMacSystemFont, Segoe UI, "Inter",
|
|
46
|
+
"Helvetica Neue", Arial, "Noto Sans", sans-serif;
|
|
47
|
+
--font-serif: "Georgia", Cambria, Times New Roman, Times, serif;
|
|
48
|
+
--font-mono: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New",
|
|
49
|
+
monospace;
|
|
50
|
+
--spectrum-alias-body-text-font-family: var(--font-sans);
|
|
51
|
+
|
|
52
|
+
font-size: 16px;
|
|
53
|
+
--font-size-xs: 0.75rem;
|
|
54
|
+
--font-size-s: 0.875rem;
|
|
55
|
+
--font-size-m: 1rem;
|
|
56
|
+
--font-size-l: 1.15rem;
|
|
57
|
+
--font-size-xl: 1.3rem;
|
|
58
|
+
|
|
59
|
+
--heading-font-size-xs: 0.875rem;
|
|
60
|
+
--heading-font-size-s: 1.12rem;
|
|
61
|
+
--heading-font-size-m: 1.5rem;
|
|
62
|
+
--heading-font-size-l: 2.6rem;
|
|
63
|
+
--heading-font-size-xl: 3rem;
|
|
64
|
+
|
|
65
|
+
--font-render: optimizeLegibility;
|
|
66
|
+
--font-smooth: antialiased;
|
|
67
|
+
|
|
68
|
+
--spacing-xs: 0.25rem;
|
|
69
|
+
--spacing-s: 0.5rem;
|
|
70
|
+
--spacing-m: 0.75rem;
|
|
71
|
+
--spacing-l: 1rem;
|
|
72
|
+
--spacing-xl: 1.25rem;
|
|
73
|
+
|
|
74
|
+
--layout-xs: 1.25rem;
|
|
75
|
+
--layout-s: 1.5rem;
|
|
76
|
+
--layout-m: 2rem;
|
|
77
|
+
--layout-l: 3rem;
|
|
78
|
+
--layout-xl: 4rem;
|
|
79
|
+
|
|
80
|
+
--border-radius-xs: 0.125rem;
|
|
81
|
+
--border-radius-s: 0.35rem;
|
|
82
|
+
--border-radius-m: 0.5rem;
|
|
83
|
+
--border-radius-l: 1rem;
|
|
84
|
+
--border-radius-xl: 100rem;
|
|
85
|
+
|
|
86
|
+
--border-black: 2px var(--ink) solid;
|
|
87
|
+
--border-dark: 2px var(--grey-7) solid;
|
|
88
|
+
--border-grey: 1px var(--grey-4) solid;
|
|
89
|
+
--border-grey-2: 2px var(--grey-4) solid;
|
|
90
|
+
--border-light: 1px var(--grey-3) solid;
|
|
91
|
+
--border-light-2: 2px var(--grey-3) solid;
|
|
92
|
+
--border-blue: 2px var(--blue) solid;
|
|
93
|
+
--border-transparent: 2px transparent solid;
|
|
94
|
+
|
|
95
|
+
--spectrum-alias-text-color-disabled: var(--spectrum-global-color-gray-600);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
a {
|
|
99
|
+
text-decoration: none;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* Custom theme additions */
|
|
103
|
+
.spectrum--darkest {
|
|
104
|
+
--drop-shadow: rgba(0, 0, 0, 0.6);
|
|
105
|
+
--spectrum-global-color-blue-100: rgb(28, 33, 43);
|
|
106
|
+
}
|
|
107
|
+
.spectrum--dark {
|
|
108
|
+
--drop-shadow: rgba(0, 0, 0, 0.3);
|
|
109
|
+
--spectrum-global-color-blue-100: rgb(42, 47, 57);
|
|
110
|
+
}
|
|
111
|
+
.spectrum--light {
|
|
112
|
+
--drop-shadow: rgba(0, 0, 0, 0.075);
|
|
113
|
+
--spectrum-global-color-blue-100: rgb(240, 245, 255);
|
|
114
|
+
}
|
|
115
|
+
.spectrum--lightest {
|
|
116
|
+
--drop-shadow: rgba(0, 0, 0, 0.05);
|
|
117
|
+
--spectrum-global-color-blue-100: rgb(240, 244, 255);
|
|
118
|
+
}
|
package/src/context.js
ADDED