@budibase/bbui 3.3.6 → 3.4.0
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/dist/bbui.mjs +4689 -4700
- package/package.json +3 -3
- package/src/Actions/{click_outside.js → click_outside.ts} +66 -20
- package/src/Actions/position_dropdown.ts +26 -20
- package/src/Form/Core/Combobox.svelte +8 -2
- package/src/Form/Core/Picker.svelte +68 -41
- package/src/Form/Core/Search.svelte +8 -8
- package/src/Form/Core/Select.svelte +46 -31
- package/src/Form/Core/TextField.svelte +18 -11
- package/src/Form/Field.svelte +7 -7
- package/src/Form/Input.svelte +9 -10
- package/src/Form/Select.svelte +38 -30
- package/src/Icon/Icon.svelte +3 -17
- package/src/Link/Link.svelte +2 -2
- package/src/Popover/Popover.svelte +22 -13
- package/src/StatusLight/StatusLight.svelte +20 -20
- package/src/Tooltip/AbsTooltip.svelte +15 -29
- package/src/constants.ts +23 -0
- package/src/index.ts +4 -4
- package/src/Popover/Popover.svench +0 -120
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
<script>
|
|
1
|
+
<script lang="ts">
|
|
2
2
|
import "@spectrum-css/textfield/dist/index-vars.css"
|
|
3
3
|
import { createEventDispatcher, onMount, tick } from "svelte"
|
|
4
4
|
|
|
5
5
|
export let value = null
|
|
6
|
-
export let placeholder =
|
|
6
|
+
export let placeholder: string | undefined = undefined
|
|
7
7
|
export let type = "text"
|
|
8
8
|
export let disabled = false
|
|
9
9
|
export let id = null
|
|
10
10
|
export let readonly = false
|
|
11
11
|
export let updateOnChange = true
|
|
12
12
|
export let quiet = false
|
|
13
|
-
export let align
|
|
13
|
+
export let align: "left" | "right" | "center" | undefined = undefined
|
|
14
14
|
export let autofocus = false
|
|
15
|
-
export let autocomplete
|
|
15
|
+
export let autocomplete: boolean | undefined
|
|
16
16
|
|
|
17
17
|
const dispatch = createEventDispatcher()
|
|
18
18
|
|
|
19
|
-
let field
|
|
19
|
+
let field: any
|
|
20
20
|
let focus = false
|
|
21
21
|
|
|
22
|
-
const updateValue = newValue => {
|
|
22
|
+
const updateValue = (newValue: any) => {
|
|
23
23
|
if (readonly || disabled) {
|
|
24
24
|
return
|
|
25
25
|
}
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
focus = true
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
const onBlur = event => {
|
|
40
|
+
const onBlur = (event: any) => {
|
|
41
41
|
if (readonly || disabled) {
|
|
42
42
|
return
|
|
43
43
|
}
|
|
@@ -45,14 +45,14 @@
|
|
|
45
45
|
updateValue(event.target.value)
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
const onInput = event => {
|
|
48
|
+
const onInput = (event: any) => {
|
|
49
49
|
if (readonly || !updateOnChange || disabled) {
|
|
50
50
|
return
|
|
51
51
|
}
|
|
52
52
|
updateValue(event.target.value)
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
const updateValueOnEnter = event => {
|
|
55
|
+
const updateValueOnEnter = (event: any) => {
|
|
56
56
|
if (readonly || disabled) {
|
|
57
57
|
return
|
|
58
58
|
}
|
|
@@ -61,13 +61,20 @@
|
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
const getInputMode = type => {
|
|
64
|
+
const getInputMode = (type: any) => {
|
|
65
65
|
if (type === "bigint") {
|
|
66
66
|
return "numeric"
|
|
67
67
|
}
|
|
68
68
|
return type === "number" ? "decimal" : "text"
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
+
$: autocompleteValue =
|
|
72
|
+
typeof autocomplete === "boolean"
|
|
73
|
+
? autocomplete
|
|
74
|
+
? "on"
|
|
75
|
+
: "off"
|
|
76
|
+
: undefined
|
|
77
|
+
|
|
71
78
|
onMount(async () => {
|
|
72
79
|
if (disabled) return
|
|
73
80
|
focus = autofocus
|
|
@@ -104,7 +111,7 @@
|
|
|
104
111
|
class="spectrum-Textfield-input"
|
|
105
112
|
style={align ? `text-align: ${align};` : ""}
|
|
106
113
|
inputmode={getInputMode(type)}
|
|
107
|
-
{
|
|
114
|
+
autocomplete={autocompleteValue}
|
|
108
115
|
/>
|
|
109
116
|
</div>
|
|
110
117
|
|
package/src/Form/Field.svelte
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
<script>
|
|
1
|
+
<script lang="ts">
|
|
2
2
|
import "@spectrum-css/fieldlabel/dist/index-vars.css"
|
|
3
3
|
import FieldLabel from "./FieldLabel.svelte"
|
|
4
4
|
import Icon from "../Icon/Icon.svelte"
|
|
5
5
|
|
|
6
|
-
export let id =
|
|
7
|
-
export let label =
|
|
8
|
-
export let labelPosition = "above"
|
|
9
|
-
export let error =
|
|
10
|
-
export let helpText =
|
|
11
|
-
export let tooltip =
|
|
6
|
+
export let id: string | undefined = undefined
|
|
7
|
+
export let label: string | undefined = undefined
|
|
8
|
+
export let labelPosition: string = "above"
|
|
9
|
+
export let error: string | undefined = undefined
|
|
10
|
+
export let helpText: string | undefined = undefined
|
|
11
|
+
export let tooltip: string | undefined = undefined
|
|
12
12
|
</script>
|
|
13
13
|
|
|
14
14
|
<div class="spectrum-Form-item" class:above={labelPosition === "above"}>
|
package/src/Form/Input.svelte
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
<script>
|
|
1
|
+
<script lang="ts">
|
|
2
2
|
import Field from "./Field.svelte"
|
|
3
3
|
import TextField from "./Core/TextField.svelte"
|
|
4
4
|
import { createEventDispatcher } from "svelte"
|
|
5
5
|
|
|
6
|
-
export let value =
|
|
7
|
-
export let label =
|
|
6
|
+
export let value: any = undefined
|
|
7
|
+
export let label: string | undefined = undefined
|
|
8
8
|
export let labelPosition = "above"
|
|
9
|
-
export let placeholder =
|
|
9
|
+
export let placeholder: string | undefined = undefined
|
|
10
10
|
export let type = "text"
|
|
11
11
|
export let disabled = false
|
|
12
12
|
export let readonly = false
|
|
13
|
-
export let error =
|
|
13
|
+
export let error: string | undefined = undefined
|
|
14
14
|
export let updateOnChange = true
|
|
15
15
|
export let quiet = false
|
|
16
|
-
export let autofocus
|
|
17
|
-
export let autocomplete
|
|
18
|
-
export let helpText =
|
|
16
|
+
export let autofocus: boolean | undefined = undefined
|
|
17
|
+
export let autocomplete: boolean | undefined = undefined
|
|
18
|
+
export let helpText: string | undefined = undefined
|
|
19
19
|
|
|
20
20
|
const dispatch = createEventDispatcher()
|
|
21
|
-
const onChange = e => {
|
|
21
|
+
const onChange = (e: any) => {
|
|
22
22
|
value = e.detail
|
|
23
23
|
dispatch("change", e.detail)
|
|
24
24
|
}
|
|
@@ -27,7 +27,6 @@
|
|
|
27
27
|
<Field {helpText} {label} {labelPosition} {error}>
|
|
28
28
|
<TextField
|
|
29
29
|
{updateOnChange}
|
|
30
|
-
{error}
|
|
31
30
|
{disabled}
|
|
32
31
|
{readonly}
|
|
33
32
|
{value}
|
package/src/Form/Select.svelte
CHANGED
|
@@ -1,44 +1,54 @@
|
|
|
1
|
-
<script>
|
|
1
|
+
<script lang="ts" context="module">
|
|
2
|
+
type O = any
|
|
3
|
+
type V = any
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<script lang="ts">
|
|
2
7
|
import Field from "./Field.svelte"
|
|
3
8
|
import Select from "./Core/Select.svelte"
|
|
4
9
|
import { createEventDispatcher } from "svelte"
|
|
10
|
+
import { PopoverAlignment } from "../constants"
|
|
5
11
|
|
|
6
|
-
export let value =
|
|
7
|
-
export let label = undefined
|
|
8
|
-
export let disabled = false
|
|
9
|
-
export let readonly = false
|
|
10
|
-
export let labelPosition = "above"
|
|
11
|
-
export let error =
|
|
12
|
-
export let placeholder = "Choose an option"
|
|
13
|
-
export let options = []
|
|
14
|
-
export let getOptionLabel = option
|
|
15
|
-
|
|
16
|
-
export let
|
|
17
|
-
|
|
18
|
-
export let
|
|
12
|
+
export let value: V | undefined = undefined
|
|
13
|
+
export let label: string | undefined = undefined
|
|
14
|
+
export let disabled: boolean = false
|
|
15
|
+
export let readonly: boolean = false
|
|
16
|
+
export let labelPosition: string = "above"
|
|
17
|
+
export let error: string | undefined = undefined
|
|
18
|
+
export let placeholder: string | boolean = "Choose an option"
|
|
19
|
+
export let options: O[] = []
|
|
20
|
+
export let getOptionLabel = (option: O, _index?: number) =>
|
|
21
|
+
extractProperty(option, "label")
|
|
22
|
+
export let getOptionValue = (option: O, _index?: number) =>
|
|
23
|
+
extractProperty(option, "value")
|
|
24
|
+
export let getOptionSubtitle = (option: O, _index?: number) =>
|
|
25
|
+
option?.subtitle
|
|
26
|
+
export let getOptionIcon = (option: O, _index?: number) => option?.icon
|
|
27
|
+
export let getOptionColour = (option: O, _index?: number) => option?.colour
|
|
19
28
|
export let useOptionIconImage = false
|
|
20
|
-
export let isOptionEnabled
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
export let
|
|
24
|
-
export let
|
|
25
|
-
export let
|
|
26
|
-
export let
|
|
27
|
-
export let
|
|
28
|
-
export let
|
|
29
|
-
export let
|
|
30
|
-
export let
|
|
31
|
-
export let
|
|
29
|
+
export let isOptionEnabled:
|
|
30
|
+
| ((_option: O, _index?: number) => boolean)
|
|
31
|
+
| undefined = undefined
|
|
32
|
+
export let quiet: boolean = false
|
|
33
|
+
export let autoWidth: boolean = false
|
|
34
|
+
export let sort: boolean = false
|
|
35
|
+
export let tooltip: string | undefined = undefined
|
|
36
|
+
export let autocomplete: boolean = false
|
|
37
|
+
export let customPopoverHeight: string | undefined = undefined
|
|
38
|
+
export let align: PopoverAlignment | undefined = PopoverAlignment.Left
|
|
39
|
+
export let footer: string | undefined = undefined
|
|
40
|
+
export let helpText: string | undefined = undefined
|
|
41
|
+
export let compare: any = undefined
|
|
32
42
|
export let onOptionMouseenter = () => {}
|
|
33
43
|
export let onOptionMouseleave = () => {}
|
|
34
44
|
|
|
35
45
|
const dispatch = createEventDispatcher()
|
|
36
|
-
const onChange = e => {
|
|
46
|
+
const onChange = (e: CustomEvent<any>) => {
|
|
37
47
|
value = e.detail
|
|
38
48
|
dispatch("change", e.detail)
|
|
39
49
|
}
|
|
40
50
|
|
|
41
|
-
const extractProperty = (value, property) => {
|
|
51
|
+
const extractProperty = (value: any, property: any) => {
|
|
42
52
|
if (value && typeof value === "object") {
|
|
43
53
|
return value[property]
|
|
44
54
|
}
|
|
@@ -49,7 +59,6 @@
|
|
|
49
59
|
<Field {helpText} {label} {labelPosition} {error} {tooltip}>
|
|
50
60
|
<Select
|
|
51
61
|
{quiet}
|
|
52
|
-
{error}
|
|
53
62
|
{disabled}
|
|
54
63
|
{readonly}
|
|
55
64
|
{value}
|
|
@@ -68,7 +77,6 @@
|
|
|
68
77
|
{isOptionEnabled}
|
|
69
78
|
{autocomplete}
|
|
70
79
|
{customPopoverHeight}
|
|
71
|
-
{tag}
|
|
72
80
|
{compare}
|
|
73
81
|
{onOptionMouseenter}
|
|
74
82
|
{onOptionMouseleave}
|
package/src/Icon/Icon.svelte
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
TooltipPosition,
|
|
5
|
-
TooltipType,
|
|
6
|
-
} from "../Tooltip/AbsTooltip.svelte"
|
|
2
|
+
import AbsTooltip from "../Tooltip/AbsTooltip.svelte"
|
|
3
|
+
import { TooltipPosition, TooltipType } from "../constants"
|
|
7
4
|
|
|
8
5
|
export let name: string = "Add"
|
|
6
|
+
export let size: "XS" | "S" | "M" | "L" | "XL" = "M"
|
|
9
7
|
export let hidden: boolean = false
|
|
10
|
-
export let size = "M"
|
|
11
8
|
export let hoverable: boolean = false
|
|
12
9
|
export let disabled: boolean = false
|
|
13
10
|
export let color: string | undefined = undefined
|
|
@@ -81,17 +78,6 @@
|
|
|
81
78
|
color: var(--spectrum-global-color-gray-500) !important;
|
|
82
79
|
pointer-events: none !important;
|
|
83
80
|
}
|
|
84
|
-
|
|
85
|
-
.tooltip {
|
|
86
|
-
position: absolute;
|
|
87
|
-
pointer-events: none;
|
|
88
|
-
left: 50%;
|
|
89
|
-
bottom: calc(100% + 4px);
|
|
90
|
-
transform: translateX(-50%);
|
|
91
|
-
text-align: center;
|
|
92
|
-
z-index: 1;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
81
|
.spectrum-Icon--sizeXS {
|
|
96
82
|
width: var(--spectrum-global-dimension-size-150);
|
|
97
83
|
height: var(--spectrum-global-dimension-size-150);
|
package/src/Link/Link.svelte
CHANGED
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
export let primary = false
|
|
10
10
|
export let secondary = false
|
|
11
11
|
export let overBackground = false
|
|
12
|
-
export let target
|
|
13
|
-
export let download
|
|
12
|
+
export let target = undefined
|
|
13
|
+
export let download = undefined
|
|
14
14
|
export let disabled = false
|
|
15
15
|
export let tooltip = null
|
|
16
16
|
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
<script context="module" lang="ts">
|
|
2
|
+
export interface PopoverAPI {
|
|
3
|
+
show: () => void
|
|
4
|
+
hide: () => void
|
|
5
|
+
}
|
|
6
|
+
</script>
|
|
7
|
+
|
|
1
8
|
<script lang="ts">
|
|
2
9
|
import "@spectrum-css/popover/dist/index-vars.css"
|
|
3
|
-
// @ts-expect-error no types for the version of svelte-portal we're on.
|
|
4
10
|
import Portal from "svelte-portal"
|
|
5
11
|
import { createEventDispatcher, getContext, onDestroy } from "svelte"
|
|
6
12
|
import positionDropdown, {
|
|
@@ -10,12 +16,10 @@
|
|
|
10
16
|
import { fly } from "svelte/transition"
|
|
11
17
|
import Context from "../context"
|
|
12
18
|
import type { KeyboardEventHandler } from "svelte/elements"
|
|
13
|
-
|
|
14
|
-
const dispatch = createEventDispatcher<{ open: void; close: void }>()
|
|
19
|
+
import { PopoverAlignment } from "../constants"
|
|
15
20
|
|
|
16
21
|
export let anchor: HTMLElement
|
|
17
|
-
export let align:
|
|
18
|
-
"right"
|
|
22
|
+
export let align: PopoverAlignment = PopoverAlignment.Right
|
|
19
23
|
export let portalTarget: string | undefined = undefined
|
|
20
24
|
export let minWidth: number | undefined = undefined
|
|
21
25
|
export let maxWidth: number | undefined = undefined
|
|
@@ -26,19 +30,24 @@
|
|
|
26
30
|
export let offset = 4
|
|
27
31
|
export let customHeight: string | undefined = undefined
|
|
28
32
|
export let animate = true
|
|
29
|
-
export let
|
|
30
|
-
export let
|
|
33
|
+
export let customZIndex: number | undefined = undefined
|
|
34
|
+
export let handlePositionUpdate: UpdateHandler | undefined = undefined
|
|
31
35
|
export let showPopover = true
|
|
32
36
|
export let clickOutsideOverride = false
|
|
33
37
|
export let resizable = true
|
|
34
38
|
export let wrap = false
|
|
35
39
|
|
|
40
|
+
const dispatch = createEventDispatcher<{ open: void; close: void }>()
|
|
36
41
|
const animationDuration = 260
|
|
37
42
|
|
|
38
43
|
let timeout: ReturnType<typeof setTimeout>
|
|
39
44
|
let blockPointerEvents = false
|
|
40
45
|
|
|
41
|
-
|
|
46
|
+
// Portal library lacks types, so we have to type this as any even though it's
|
|
47
|
+
// actually a string
|
|
48
|
+
$: target = (portalTarget ||
|
|
49
|
+
getContext(Context.PopoverRoot) ||
|
|
50
|
+
".spectrum") as any
|
|
42
51
|
$: {
|
|
43
52
|
// Disable pointer events for the initial part of the animation, because we
|
|
44
53
|
// fly from top to bottom and initially can be positioned under the cursor,
|
|
@@ -118,7 +127,7 @@
|
|
|
118
127
|
minWidth,
|
|
119
128
|
useAnchorWidth,
|
|
120
129
|
offset,
|
|
121
|
-
customUpdate:
|
|
130
|
+
customUpdate: handlePositionUpdate,
|
|
122
131
|
resizable,
|
|
123
132
|
wrap,
|
|
124
133
|
}}
|
|
@@ -128,11 +137,11 @@
|
|
|
128
137
|
}}
|
|
129
138
|
on:keydown={handleEscape}
|
|
130
139
|
class="spectrum-Popover is-open"
|
|
131
|
-
class:
|
|
140
|
+
class:customZIndex
|
|
132
141
|
class:hidden={!showPopover}
|
|
133
142
|
class:blockPointerEvents
|
|
134
143
|
role="presentation"
|
|
135
|
-
style="height: {customHeight}; --
|
|
144
|
+
style="height: {customHeight}; --customZIndex: {customZIndex};"
|
|
136
145
|
transition:fly|local={{
|
|
137
146
|
y: -20,
|
|
138
147
|
duration: animate ? animationDuration : 0,
|
|
@@ -162,7 +171,7 @@
|
|
|
162
171
|
opacity: 0;
|
|
163
172
|
pointer-events: none;
|
|
164
173
|
}
|
|
165
|
-
.
|
|
166
|
-
z-index: var(--
|
|
174
|
+
.customZIndex {
|
|
175
|
+
z-index: var(--customZIndex) !important;
|
|
167
176
|
}
|
|
168
177
|
</style>
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
<script>
|
|
1
|
+
<script lang="ts">
|
|
2
2
|
import "@spectrum-css/statuslight"
|
|
3
3
|
|
|
4
|
-
export let size = "M"
|
|
5
|
-
export let celery = false
|
|
6
|
-
export let yellow = false
|
|
7
|
-
export let fuchsia = false
|
|
8
|
-
export let indigo = false
|
|
9
|
-
export let seafoam = false
|
|
10
|
-
export let chartreuse = false
|
|
11
|
-
export let magenta = false
|
|
12
|
-
export let purple = false
|
|
13
|
-
export let neutral = false
|
|
14
|
-
export let info = false
|
|
15
|
-
export let positive = false
|
|
16
|
-
export let notice = false
|
|
17
|
-
export let negative = false
|
|
18
|
-
export let disabled = false
|
|
19
|
-
export let active = false
|
|
20
|
-
export let color =
|
|
21
|
-
export let square = false
|
|
22
|
-
export let hoverable = false
|
|
4
|
+
export let size: string = "M"
|
|
5
|
+
export let celery: boolean = false
|
|
6
|
+
export let yellow: boolean = false
|
|
7
|
+
export let fuchsia: boolean = false
|
|
8
|
+
export let indigo: boolean = false
|
|
9
|
+
export let seafoam: boolean = false
|
|
10
|
+
export let chartreuse: boolean = false
|
|
11
|
+
export let magenta: boolean = false
|
|
12
|
+
export let purple: boolean = false
|
|
13
|
+
export let neutral: boolean = false
|
|
14
|
+
export let info: boolean = false
|
|
15
|
+
export let positive: boolean = false
|
|
16
|
+
export let notice: boolean = false
|
|
17
|
+
export let negative: boolean = false
|
|
18
|
+
export let disabled: boolean = false
|
|
19
|
+
export let active: boolean = false
|
|
20
|
+
export let color: string | undefined = undefined
|
|
21
|
+
export let square: boolean = false
|
|
22
|
+
export let hoverable: boolean = false
|
|
23
23
|
</script>
|
|
24
24
|
|
|
25
25
|
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
|
@@ -1,38 +1,24 @@
|
|
|
1
|
-
<script
|
|
2
|
-
export const TooltipPosition = {
|
|
3
|
-
Top: "top",
|
|
4
|
-
Right: "right",
|
|
5
|
-
Bottom: "bottom",
|
|
6
|
-
Left: "left",
|
|
7
|
-
}
|
|
8
|
-
export const TooltipType = {
|
|
9
|
-
Default: "default",
|
|
10
|
-
Info: "info",
|
|
11
|
-
Positive: "positive",
|
|
12
|
-
Negative: "negative",
|
|
13
|
-
}
|
|
14
|
-
</script>
|
|
15
|
-
|
|
16
|
-
<script>
|
|
1
|
+
<script lang="ts">
|
|
17
2
|
import Portal from "svelte-portal"
|
|
18
3
|
import { fade } from "svelte/transition"
|
|
19
4
|
import "@spectrum-css/tooltip/dist/index-vars.css"
|
|
20
5
|
import { onDestroy } from "svelte"
|
|
6
|
+
import { TooltipPosition, TooltipType } from "../constants"
|
|
21
7
|
|
|
22
|
-
export let position = TooltipPosition.Top
|
|
23
|
-
export let type = TooltipType.Default
|
|
24
|
-
export let text = ""
|
|
25
|
-
export let fixed = false
|
|
26
|
-
export let color =
|
|
27
|
-
export let noWrap = false
|
|
8
|
+
export let position: TooltipPosition = TooltipPosition.Top
|
|
9
|
+
export let type: TooltipType = TooltipType.Default
|
|
10
|
+
export let text: string = ""
|
|
11
|
+
export let fixed: boolean = false
|
|
12
|
+
export let color: string | undefined = undefined
|
|
13
|
+
export let noWrap: boolean = false
|
|
28
14
|
|
|
29
|
-
let wrapper
|
|
15
|
+
let wrapper: HTMLElement | undefined
|
|
30
16
|
let hovered = false
|
|
31
|
-
let left
|
|
32
|
-
let top
|
|
17
|
+
let left: number | undefined
|
|
18
|
+
let top: number | undefined
|
|
33
19
|
let visible = false
|
|
34
|
-
let timeout
|
|
35
|
-
let interval
|
|
20
|
+
let timeout: ReturnType<typeof setTimeout> | undefined
|
|
21
|
+
let interval: ReturnType<typeof setInterval> | undefined
|
|
36
22
|
|
|
37
23
|
$: {
|
|
38
24
|
if (hovered || fixed) {
|
|
@@ -49,8 +35,8 @@
|
|
|
49
35
|
const updateTooltipPosition = () => {
|
|
50
36
|
const node = wrapper?.children?.[0]
|
|
51
37
|
if (!node) {
|
|
52
|
-
left =
|
|
53
|
-
top =
|
|
38
|
+
left = undefined
|
|
39
|
+
top = undefined
|
|
54
40
|
return
|
|
55
41
|
}
|
|
56
42
|
const bounds = node.getBoundingClientRect()
|
package/src/constants.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export enum PopoverAlignment {
|
|
2
|
+
Left = "left",
|
|
3
|
+
Right = "right",
|
|
4
|
+
LeftOutside = "left-outside",
|
|
5
|
+
RightOutside = "right-outside",
|
|
6
|
+
Center = "center",
|
|
7
|
+
RightContextMenu = "right-context-menu",
|
|
8
|
+
LeftContextMenu = "left-context-menu",
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export enum TooltipPosition {
|
|
12
|
+
Top = "top",
|
|
13
|
+
Right = "right",
|
|
14
|
+
Bottom = "bottom",
|
|
15
|
+
Left = "left",
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export enum TooltipType {
|
|
19
|
+
Default = "default",
|
|
20
|
+
Info = "info",
|
|
21
|
+
Positive = "positive",
|
|
22
|
+
Negative = "negative",
|
|
23
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import "./bbui.css"
|
|
2
|
-
|
|
3
|
-
// Spectrum icons
|
|
4
2
|
import "@spectrum-css/icon/dist/index-vars.css"
|
|
5
3
|
|
|
4
|
+
// Constants
|
|
5
|
+
export * from "./constants"
|
|
6
|
+
|
|
6
7
|
// Form components
|
|
7
8
|
export { default as Input } from "./Form/Input.svelte"
|
|
8
9
|
export { default as Stepper } from "./Form/Stepper.svelte"
|
|
@@ -45,7 +46,7 @@ export { default as ClearButton } from "./ClearButton/ClearButton.svelte"
|
|
|
45
46
|
export { default as Icon } from "./Icon/Icon.svelte"
|
|
46
47
|
export { default as IconAvatar } from "./Icon/IconAvatar.svelte"
|
|
47
48
|
export { default as DetailSummary } from "./DetailSummary/DetailSummary.svelte"
|
|
48
|
-
export { default as Popover } from "./Popover/Popover.svelte"
|
|
49
|
+
export { default as Popover, type PopoverAPI } from "./Popover/Popover.svelte"
|
|
49
50
|
export { default as ProgressBar } from "./ProgressBar/ProgressBar.svelte"
|
|
50
51
|
export { default as ProgressCircle } from "./ProgressCircle/ProgressCircle.svelte"
|
|
51
52
|
export { default as Label } from "./Label/Label.svelte"
|
|
@@ -92,7 +93,6 @@ export { default as IconSideNav } from "./IconSideNav/IconSideNav.svelte"
|
|
|
92
93
|
export { default as IconSideNavItem } from "./IconSideNav/IconSideNavItem.svelte"
|
|
93
94
|
export { default as Accordion } from "./Accordion/Accordion.svelte"
|
|
94
95
|
export { default as AbsTooltip } from "./Tooltip/AbsTooltip.svelte"
|
|
95
|
-
export { TooltipPosition, TooltipType } from "./Tooltip/AbsTooltip.svelte"
|
|
96
96
|
|
|
97
97
|
// Renderers
|
|
98
98
|
export { default as BoldRenderer } from "./Table/BoldRenderer.svelte"
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { View } from "svench";
|
|
3
|
-
import Popover from "./Popover.svelte";
|
|
4
|
-
import Button from "../Button/Button.svelte";
|
|
5
|
-
import TextButton from "../Button/TextButton.svelte";
|
|
6
|
-
import Icon from "../Icons/Icon.svelte";
|
|
7
|
-
import Input from "../Form/Input.svelte";
|
|
8
|
-
import Select from "../Form/Select.svelte";
|
|
9
|
-
|
|
10
|
-
let anchorRight;
|
|
11
|
-
let anchorLeft;
|
|
12
|
-
let dropdownRight;
|
|
13
|
-
let dropdownLeft;
|
|
14
|
-
|
|
15
|
-
const options = ["Column 1", "Column 2", "Super cool column"];
|
|
16
|
-
const option1s = ["Is", "Is not", "Contains" , "Does not contain"];
|
|
17
|
-
|
|
18
|
-
</script>
|
|
19
|
-
|
|
20
|
-
<style>
|
|
21
|
-
.button-group {
|
|
22
|
-
margin-top: var(--spacing-l);
|
|
23
|
-
display: flex;
|
|
24
|
-
justify-content: flex-end;
|
|
25
|
-
gap: var(--spacing-s);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
h6 {
|
|
29
|
-
font-size: var(--font-size-m);
|
|
30
|
-
margin: 0 0 var(--spacing-l) 0;
|
|
31
|
-
font-weight: 600;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
.input-group-column {
|
|
35
|
-
display: flex;
|
|
36
|
-
flex-direction: column;
|
|
37
|
-
gap: var(--spacing-s);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.input-group-row {
|
|
41
|
-
display: grid;
|
|
42
|
-
grid-template-columns: [boolean-start] 60px [boolean-end property-start] 120px [property-end opererator-start] 110px [operator-end value-start] auto [value-end menu-start] 32px [menu-end];
|
|
43
|
-
gap: var(--spacing-s);
|
|
44
|
-
margin-bottom: var(--spacing-l);
|
|
45
|
-
align-items: center;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
p {
|
|
49
|
-
margin:0;
|
|
50
|
-
font-size: var(--font-size-xs);
|
|
51
|
-
}
|
|
52
|
-
</style>
|
|
53
|
-
|
|
54
|
-
<View name="Simple popover">
|
|
55
|
-
<div bind:this={anchorLeft}>
|
|
56
|
-
<Button text on:click={dropdownLeft.show}>
|
|
57
|
-
<Icon name="view" />
|
|
58
|
-
Add View
|
|
59
|
-
</Button>
|
|
60
|
-
</div>
|
|
61
|
-
<Popover bind:this={dropdownLeft} anchor={anchorLeft} align="left">
|
|
62
|
-
<h6>Add New View</h6>
|
|
63
|
-
<Input thin placeholder="Enter your name" />
|
|
64
|
-
<div class="button-group">
|
|
65
|
-
<Button secondary on:click={() => alert('Clicked!')}>Cancel</Button>
|
|
66
|
-
<Button primary on:click={() => alert('Clicked!')}>Add New View</Button>
|
|
67
|
-
</div>
|
|
68
|
-
</Popover>
|
|
69
|
-
</View>
|
|
70
|
-
|
|
71
|
-
<View name="Stacked columns">
|
|
72
|
-
<div bind:this={anchorRight}>
|
|
73
|
-
<Button text on:click={dropdownRight.show}>
|
|
74
|
-
<Icon name="addrow" />
|
|
75
|
-
Add Row
|
|
76
|
-
</Button>
|
|
77
|
-
</div>
|
|
78
|
-
<Popover bind:this={dropdownRight} anchor={anchorRight}>
|
|
79
|
-
<h6>Add New Row</h6>
|
|
80
|
-
<div class="input-group-column">
|
|
81
|
-
<Input thin placeholder="Enter your string" />
|
|
82
|
-
<Input thin placeholder="Enter your string" />
|
|
83
|
-
<Input thin placeholder="Enter your string" />
|
|
84
|
-
</div>
|
|
85
|
-
<div class="button-group">
|
|
86
|
-
<Button secondary on:click={() => alert('Clicked!')}>Cancel</Button>
|
|
87
|
-
<Button primary on:click={() => alert('Clicked!')}>Add New Row</Button>
|
|
88
|
-
</div>
|
|
89
|
-
</Popover>
|
|
90
|
-
</View>
|
|
91
|
-
|
|
92
|
-
<View name="Multiple inputs in a row">
|
|
93
|
-
<div bind:this={anchorLeft}>
|
|
94
|
-
<Button text on:click={dropdownLeft.show}>
|
|
95
|
-
<Icon name="filter" />
|
|
96
|
-
Add Filter
|
|
97
|
-
</Button>
|
|
98
|
-
</div>
|
|
99
|
-
<Popover bind:this={dropdownLeft} anchor={anchorLeft} align="left">
|
|
100
|
-
<h6>Add New Filter</h6>
|
|
101
|
-
<div class="input-group-row">
|
|
102
|
-
<p>Where</p>
|
|
103
|
-
<Select secondary thin name="Test">
|
|
104
|
-
{#each options as option}
|
|
105
|
-
<option value={option}>{option}</option>
|
|
106
|
-
{/each}
|
|
107
|
-
</Select>
|
|
108
|
-
<Select secondary thin name="Test">
|
|
109
|
-
{#each option1s as option1}
|
|
110
|
-
<option value={option1}>{option1}</option>
|
|
111
|
-
{/each}
|
|
112
|
-
</Select>
|
|
113
|
-
<Input thin placeholder="Enter your name" />
|
|
114
|
-
<Button text on:click={() => alert('Clicked!')}>
|
|
115
|
-
<Icon name="close" />
|
|
116
|
-
</Button>
|
|
117
|
-
</div>
|
|
118
|
-
<Button text on:click={() => alert('Clicked!')}>Add Filter</Button>
|
|
119
|
-
</Popover>
|
|
120
|
-
</View>
|