@budibase/bbui 2.2.12-alpha.7 → 2.2.12-alpha.70

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 (54) hide show
  1. package/dist/bbui.es.js +3 -3
  2. package/dist/bbui.es.js.map +1 -1
  3. package/package.json +4 -3
  4. package/src/Accordion/Accordion.svelte +58 -0
  5. package/src/ActionButton/ActionButton.svelte +2 -3
  6. package/src/ActionMenu/ActionMenu.svelte +1 -2
  7. package/src/Actions/click_outside.js +28 -9
  8. package/src/Actions/position_dropdown.js +85 -53
  9. package/src/Avatar/Avatar.svelte +1 -0
  10. package/src/Button/Button.svelte +8 -4
  11. package/src/Drawer/DrawerContent.svelte +0 -1
  12. package/src/FancyForm/FancyButton.svelte +30 -0
  13. package/src/FancyForm/FancyButtonRadio.svelte +70 -0
  14. package/src/FancyForm/FancyCheckbox.svelte +53 -0
  15. package/src/FancyForm/FancyField.svelte +126 -0
  16. package/src/FancyForm/FancyFieldLabel.svelte +25 -0
  17. package/src/FancyForm/FancyForm.svelte +40 -0
  18. package/src/FancyForm/FancyInput.svelte +77 -0
  19. package/src/FancyForm/FancySelect.svelte +147 -0
  20. package/src/FancyForm/index.js +6 -0
  21. package/src/Form/Core/DatePicker.svelte +1 -1
  22. package/src/Form/Core/EnvDropdown.svelte +276 -0
  23. package/src/Form/Core/Picker.svelte +141 -124
  24. package/src/Form/Core/Select.svelte +3 -0
  25. package/src/Form/Core/Switch.svelte +0 -2
  26. package/src/Form/Core/TextField.svelte +0 -6
  27. package/src/Form/EnvDropdown.svelte +50 -0
  28. package/src/Form/Input.svelte +0 -2
  29. package/src/Form/InputDropdown.svelte +0 -2
  30. package/src/Form/PickerDropdown.svelte +0 -2
  31. package/src/Form/Toggle.svelte +1 -2
  32. package/src/Icon/IconAvatar.svelte +3 -0
  33. package/src/InlineAlert/InlineAlert.svelte +1 -0
  34. package/src/Label/Label.svelte +1 -0
  35. package/src/Layout/Page.svelte +82 -13
  36. package/src/Link/Link.svelte +4 -1
  37. package/src/List/ListItem.svelte +6 -3
  38. package/src/Menu/Item.svelte +0 -2
  39. package/src/Modal/CustomContent.svelte +0 -1
  40. package/src/Modal/Modal.svench +0 -1
  41. package/src/Modal/ModalContent.svelte +4 -4
  42. package/src/Modal/QuizModal.svelte +0 -1
  43. package/src/Popover/Popover.svelte +35 -31
  44. package/src/Popover/Popover.svench +0 -1
  45. package/src/SideNavigation/Item.svelte +0 -2
  46. package/src/Table/StringRenderer.svelte +9 -1
  47. package/src/Table/Table.svelte +30 -19
  48. package/src/Tabs/Tab.svelte +5 -5
  49. package/src/Tags/Tag.svelte +1 -1
  50. package/src/Tags/Tags.svelte +10 -0
  51. package/src/Typography/Heading.svelte +6 -0
  52. package/src/bbui.css +7 -3
  53. package/src/context.js +1 -0
  54. package/src/index.js +5 -0
@@ -30,9 +30,11 @@
30
30
  <Label>{subtitle}</Label>
31
31
  {/if}
32
32
  </div>
33
- <div class="right">
34
- <slot />
35
- </div>
33
+ {#if $$slots.default}
34
+ <div class="right">
35
+ <slot />
36
+ </div>
37
+ {/if}
36
38
  </div>
37
39
 
38
40
  <style>
@@ -45,6 +47,7 @@
45
47
  justify-content: space-between;
46
48
  border: 1px solid var(--spectrum-global-color-gray-300);
47
49
  transition: background 130ms ease-out;
50
+ gap: var(--spacing-m);
48
51
  }
49
52
  .list-item:not(:first-child) {
50
53
  border-top: none;
@@ -5,7 +5,6 @@
5
5
  const dispatch = createEventDispatcher()
6
6
  const actionMenu = getContext("actionMenu")
7
7
 
8
- export let dataCy
9
8
  export let icon = undefined
10
9
  export let disabled = undefined
11
10
  export let noClose = false
@@ -35,7 +34,6 @@
35
34
  </script>
36
35
 
37
36
  <li
38
- data-cy={dataCy}
39
37
  on:click|preventDefault={disabled ? null : onClick}
40
38
  class="spectrum-Menu-item"
41
39
  class:is-disabled={disabled}
@@ -26,7 +26,6 @@
26
26
  padding: 40px;
27
27
  background-color: var(--purple);
28
28
  color: white;
29
- font-family: var(--font-sans);
30
29
  font-weight: bold;
31
30
  text-align: center;
32
31
  user-select: none;
@@ -19,7 +19,6 @@
19
19
 
20
20
  <style>
21
21
  p, span {
22
- font-family: var(--font-sans);
23
22
  font-size: var(--font-size-s);
24
23
  }
25
24
 
@@ -23,7 +23,7 @@
23
23
  export let secondaryButtonText = undefined
24
24
  export let secondaryAction = undefined
25
25
  export let secondaryButtonWarning = false
26
- export let dataCy = null
26
+
27
27
  const { hide, cancel } = getContext(Context.Modal)
28
28
  let loading = false
29
29
  $: confirmDisabled = disabled || loading
@@ -63,7 +63,6 @@
63
63
  role="dialog"
64
64
  tabindex="-1"
65
65
  aria-modal="true"
66
- data-cy={dataCy}
67
66
  >
68
67
  <div class="spectrum-Dialog-grid">
69
68
  {#if title || $$slots.header}
@@ -104,7 +103,7 @@
104
103
  {/if}
105
104
 
106
105
  {#if showCancelButton}
107
- <Button group secondary newStyles on:click={close}>
106
+ <Button group secondary on:click={close}>
108
107
  {cancelText}
109
108
  </Button>
110
109
  {/if}
@@ -151,7 +150,8 @@
151
150
  overflow: visible;
152
151
  }
153
152
  .spectrum-Dialog-heading {
154
- font-family: var(--font-sans);
153
+ font-family: var(--font-accent);
154
+ font-weight: 600;
155
155
  }
156
156
  .spectrum-Dialog-heading.noDivider {
157
157
  margin-bottom: 12px;
@@ -42,7 +42,6 @@
42
42
  <style>
43
43
  p {
44
44
  margin: 0;
45
- font-family: var(--font-sans);
46
45
  font-size: var(--font-size-s);
47
46
  }
48
47
  p.error {
@@ -4,24 +4,22 @@
4
4
  import { createEventDispatcher } from "svelte"
5
5
  import positionDropdown from "../Actions/position_dropdown"
6
6
  import clickOutside from "../Actions/click_outside"
7
+ import { fly } from "svelte/transition"
8
+ import { getContext } from "svelte"
9
+ import Context from "../context"
7
10
 
8
11
  const dispatch = createEventDispatcher()
9
12
 
10
13
  export let anchor
11
14
  export let align = "right"
12
15
  export let portalTarget
13
- export let dataCy
14
16
  export let maxWidth
17
+ export let open = false
18
+ export let useAnchorWidth = false
19
+ export let dismissible = true
20
+ export let offset = 5
15
21
 
16
- export let direction = "bottom"
17
- export let showTip = false
18
-
19
- let tipSvg =
20
- '<svg xmlns="http://www.w3.org/svg/2000" width="23" height="12" class="spectrum-Popover-tip" > <path class="spectrum-Popover-tip-triangle" d="M 0.7071067811865476 0 L 11.414213562373096 10.707106781186548 L 22.121320343559645 0" /> </svg>'
21
-
22
- $: tooltipClasses = showTip
23
- ? `spectrum-Popover--withTip spectrum-Popover--${direction}`
24
- : ""
22
+ $: target = portalTarget || getContext(Context.PopoverRoot) || ".spectrum"
25
23
 
26
24
  export const show = () => {
27
25
  dispatch("open")
@@ -35,13 +33,22 @@
35
33
 
36
34
  const handleOutsideClick = e => {
37
35
  if (open) {
38
- e.stopPropagation()
36
+ // Stop propagation if the source is the anchor
37
+ let node = e.target
38
+ let fromAnchor = false
39
+ while (!fromAnchor && node && node.parentNode) {
40
+ fromAnchor = node === anchor
41
+ node = node.parentNode
42
+ }
43
+ if (fromAnchor) {
44
+ e.stopPropagation()
45
+ }
46
+
47
+ // Hide the popover
39
48
  hide()
40
49
  }
41
50
  }
42
51
 
43
- let open = null
44
-
45
52
  function handleEscape(e) {
46
53
  if (open && e.key === "Escape") {
47
54
  hide()
@@ -50,20 +57,25 @@
50
57
  </script>
51
58
 
52
59
  {#if open}
53
- <Portal target={portalTarget}>
60
+ <Portal {target}>
54
61
  <div
55
62
  tabindex="0"
56
- use:positionDropdown={{ anchor, align, maxWidth }}
57
- use:clickOutside={handleOutsideClick}
63
+ use:positionDropdown={{
64
+ anchor,
65
+ align,
66
+ maxWidth,
67
+ useAnchorWidth,
68
+ offset,
69
+ }}
70
+ use:clickOutside={{
71
+ callback: dismissible ? handleOutsideClick : () => {},
72
+ anchor,
73
+ }}
58
74
  on:keydown={handleEscape}
59
- class={"spectrum-Popover is-open " + (tooltipClasses || "")}
75
+ class="spectrum-Popover is-open"
60
76
  role="presentation"
61
- data-cy={dataCy}
77
+ transition:fly|local={{ y: -20, duration: 200 }}
62
78
  >
63
- {#if showTip}
64
- {@html tipSvg}
65
- {/if}
66
-
67
79
  <slot />
68
80
  </div>
69
81
  </Portal>
@@ -73,14 +85,6 @@
73
85
  .spectrum-Popover {
74
86
  min-width: var(--spectrum-global-dimension-size-2000);
75
87
  border-color: var(--spectrum-global-color-gray-300);
76
- }
77
- .spectrum-Popover.is-open.spectrum-Popover--withTip {
78
- margin-top: var(--spacing-xs);
79
- margin-left: var(--spacing-xl);
80
- }
81
- :global(.spectrum-Popover--bottom .spectrum-Popover-tip),
82
- :global(.spectrum-Popover--top .spectrum-Popover-tip) {
83
- left: 90%;
84
- margin-left: calc(var(--spectrum-global-dimension-size-150) * -1);
88
+ overflow: auto;
85
89
  }
86
90
  </style>
@@ -29,7 +29,6 @@
29
29
  font-size: var(--font-size-m);
30
30
  margin: 0 0 var(--spacing-l) 0;
31
31
  font-weight: 600;
32
- font-family: var(--font-sans);
33
32
  }
34
33
 
35
34
  .input-group-column {
@@ -8,7 +8,6 @@
8
8
  export let icon = ""
9
9
  export let selected = false
10
10
  export let disabled = false
11
- export let dataCy
12
11
  export let badge = ""
13
12
  </script>
14
13
 
@@ -17,7 +16,6 @@
17
16
  class:is-selected={selected}
18
17
  class:is-disabled={disabled}
19
18
  on:click
20
- data-cy={dataCy}
21
19
  >
22
20
  {#if heading}
23
21
  <h2 class="spectrum-SideNav-heading" id="nav-heading-{heading}">
@@ -1,8 +1,11 @@
1
1
  <script>
2
2
  export let value
3
+ export let schema
3
4
  </script>
4
5
 
5
- <div>{typeof value === "object" ? JSON.stringify(value) : value}</div>
6
+ <div class:capitalise={schema?.capitalise}>
7
+ {typeof value === "object" ? JSON.stringify(value) : value}
8
+ </div>
6
9
 
7
10
  <style>
8
11
  div {
@@ -10,5 +13,10 @@
10
13
  text-overflow: ellipsis;
11
14
  white-space: nowrap;
12
15
  max-width: var(--max-cell-width);
16
+ width: 0;
17
+ flex: 1 1 auto;
18
+ }
19
+ div.capitalise {
20
+ text-transform: capitalize;
13
21
  }
14
22
  </style>
@@ -21,6 +21,8 @@
21
21
  * template: a HBS or JS binding to use as the value
22
22
  * background: the background color
23
23
  * color: the text color
24
+ * borderLeft: show a left border
25
+ * borderRight: show a right border
24
26
  */
25
27
  export let data = []
26
28
  export let schema = {}
@@ -31,6 +33,7 @@
31
33
  export let allowSelectRows
32
34
  export let allowEditRows = true
33
35
  export let allowEditColumns = true
36
+ export let allowClickRows = true
34
37
  export let selectedRows = []
35
38
  export let customRenderers = []
36
39
  export let disableSorting = false
@@ -270,6 +273,17 @@
270
273
  if (schema[field].align === "Right") {
271
274
  styles[field] += "justify-content: flex-end; text-align: right;"
272
275
  }
276
+ if (schema[field].borderLeft) {
277
+ styles[field] +=
278
+ "border-left: 1px solid var(--spectrum-global-color-gray-200);"
279
+ }
280
+ if (schema[field].borderLeft) {
281
+ styles[field] +=
282
+ "border-right: 1px solid var(--spectrum-global-color-gray-200);"
283
+ }
284
+ if (schema[field].minWidth) {
285
+ styles[field] += `min-width: ${schema[field].minWidth};`
286
+ }
273
287
  })
274
288
  return styles
275
289
  }
@@ -290,7 +304,11 @@
290
304
  </slot>
291
305
  </div>
292
306
  {:else}
293
- <div class="spectrum-Table" style={`${heightStyle}${gridStyle}`}>
307
+ <div
308
+ class="spectrum-Table"
309
+ class:no-scroll={!rowCount}
310
+ style={`${heightStyle}${gridStyle}`}
311
+ >
294
312
  {#if fields.length}
295
313
  <div class="spectrum-Table-head">
296
314
  {#if showEditColumn}
@@ -356,7 +374,7 @@
356
374
  {/if}
357
375
  {#if sortedRows?.length}
358
376
  {#each sortedRows as row, idx}
359
- <div class="spectrum-Table-row">
377
+ <div class="spectrum-Table-row" class:clickable={allowClickRows}>
360
378
  {#if showEditColumn}
361
379
  <div
362
380
  class:noBorderCheckbox={!showHeaderBorder}
@@ -433,10 +451,10 @@
433
451
  /* Wrapper */
434
452
  .wrapper {
435
453
  position: relative;
436
- z-index: 0;
437
454
  --table-bg: var(--spectrum-global-color-gray-50);
438
455
  --table-border: 1px solid var(--spectrum-alias-border-color-mid);
439
456
  --cell-padding: var(--spectrum-global-dimension-size-250);
457
+ overflow: auto;
440
458
  }
441
459
  .wrapper--quiet {
442
460
  --table-bg: var(--spectrum-alias-background-color-transparent);
@@ -460,6 +478,9 @@
460
478
  display: grid;
461
479
  overflow: auto;
462
480
  }
481
+ .spectrum-Table.no-scroll {
482
+ overflow: visible;
483
+ }
463
484
 
464
485
  /* Header */
465
486
  .spectrum-Table-head {
@@ -546,12 +567,13 @@
546
567
  /* Table rows */
547
568
  .spectrum-Table-row {
548
569
  display: contents;
570
+ cursor: auto;
549
571
  }
550
- .spectrum-Table-row:hover .spectrum-Table-cell {
551
- /*background-color: var(--hover-bg) !important;*/
572
+ .spectrum-Table-row.clickable {
573
+ cursor: pointer;
552
574
  }
553
- .spectrum-Table-row:hover .spectrum-Table-cell:after {
554
- background-color: var(--spectrum-alias-highlight-hover);
575
+ .spectrum-Table-row.clickable:hover .spectrum-Table-cell {
576
+ background-color: var(--spectrum-global-color-gray-100);
555
577
  }
556
578
  .wrapper--quiet .spectrum-Table-row {
557
579
  border-left: none;
@@ -584,24 +606,13 @@
584
606
  border-bottom: 1px solid var(--spectrum-alias-border-color-mid);
585
607
  background-color: var(--table-bg);
586
608
  z-index: auto;
609
+ transition: background-color 130ms ease-out;
587
610
  }
588
611
  .spectrum-Table-cell--edit {
589
612
  position: sticky;
590
613
  left: 0;
591
614
  z-index: 2;
592
615
  }
593
- .spectrum-Table-cell:after {
594
- content: "";
595
- position: absolute;
596
- width: 100%;
597
- height: 100%;
598
- background-color: transparent;
599
- top: 0;
600
- left: 0;
601
- pointer-events: none;
602
- transition: background-color
603
- var(--spectrum-global-animation-duration-100, 0.13s) ease-in-out;
604
- }
605
616
 
606
617
  /* Placeholder */
607
618
  .placeholder {
@@ -3,6 +3,7 @@
3
3
  import Portal from "svelte-portal"
4
4
  export let title
5
5
  export let icon = ""
6
+ export let id
6
7
 
7
8
  const dispatch = createEventDispatcher()
8
9
  let selected = getContext("tab")
@@ -31,10 +32,7 @@
31
32
  $: {
32
33
  if ($selected.title === title && tab_internal) {
33
34
  if ($selected.info?.left !== tab_internal.getBoundingClientRect().left) {
34
- $selected = {
35
- ...$selected,
36
- info: tab_internal.getBoundingClientRect(),
37
- }
35
+ setTabInfo()
38
36
  }
39
37
  }
40
38
  }
@@ -50,6 +48,7 @@
50
48
  </script>
51
49
 
52
50
  <div
51
+ {id}
53
52
  bind:this={tab_internal}
54
53
  on:click={onClick}
55
54
  class:is-selected={$selected.title === title}
@@ -82,7 +81,8 @@
82
81
  .spectrum-Tabs-item {
83
82
  color: var(--spectrum-global-color-gray-600);
84
83
  }
85
- .spectrum-Tabs-item.is-selected {
84
+ .spectrum-Tabs-item.is-selected,
85
+ .spectrum-Tabs-item:hover {
86
86
  color: var(--spectrum-global-color-gray-900);
87
87
  }
88
88
  </style>
@@ -37,7 +37,7 @@
37
37
 
38
38
  <style>
39
39
  .spectrum-Tags-item {
40
- margin-top: 0;
41
40
  margin-bottom: 0;
41
+ margin-top: 0;
42
42
  }
43
43
  </style>
@@ -5,3 +5,13 @@
5
5
  <div class="spectrum-Tags" role="list" aria-label="list">
6
6
  <slot />
7
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>
@@ -15,3 +15,9 @@
15
15
  >
16
16
  <slot />
17
17
  </h1>
18
+
19
+ <style>
20
+ h1 {
21
+ font-family: var(--font-accent);
22
+ }
23
+ </style>
package/src/bbui.css CHANGED
@@ -40,12 +40,14 @@
40
40
  --rounded-medium: 8px;
41
41
  --rounded-large: 16px;
42
42
 
43
- --font-sans: Source Sans Pro, -apple-system, BlinkMacSystemFont, Segoe UI, "Inter",
44
- "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji",
45
- "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
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;
46
47
  --font-serif: "Georgia", Cambria, Times New Roman, Times, serif;
47
48
  --font-mono: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New",
48
49
  monospace;
50
+ --spectrum-alias-body-text-font-family: var(--font-sans);
49
51
 
50
52
  font-size: 16px;
51
53
  --font-size-xs: 0.75rem;
@@ -89,6 +91,8 @@
89
91
  --border-light-2: 2px var(--grey-3) solid;
90
92
  --border-blue: 2px var(--blue) solid;
91
93
  --border-transparent: 2px transparent solid;
94
+
95
+ --spectrum-alias-text-color-disabled: var(--spectrum-global-color-gray-600);
92
96
  }
93
97
 
94
98
  a {
package/src/context.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export default {
2
2
  Modal: "bbui-modal",
3
+ PopoverRoot: "bbui-popover-root",
3
4
  }
package/src/index.js CHANGED
@@ -27,6 +27,7 @@ export { default as RadioGroup } from "./Form/RadioGroup.svelte"
27
27
  export { default as Checkbox } from "./Form/Checkbox.svelte"
28
28
  export { default as InputDropdown } from "./Form/InputDropdown.svelte"
29
29
  export { default as PickerDropdown } from "./Form/PickerDropdown.svelte"
30
+ export { default as EnvDropdown } from "./Form/EnvDropdown.svelte"
30
31
  export { default as DetailSummary } from "./DetailSummary/DetailSummary.svelte"
31
32
  export { default as Popover } from "./Popover/Popover.svelte"
32
33
  export { default as ProgressBar } from "./ProgressBar/ProgressBar.svelte"
@@ -75,6 +76,7 @@ export { default as ListItem } from "./List/ListItem.svelte"
75
76
  export { default as IconSideNav } from "./IconSideNav/IconSideNav.svelte"
76
77
  export { default as IconSideNavItem } from "./IconSideNav/IconSideNavItem.svelte"
77
78
  export { default as Slider } from "./Form/Slider.svelte"
79
+ export { default as Accordion } from "./Accordion/Accordion.svelte"
78
80
 
79
81
  // Renderers
80
82
  export { default as BoldRenderer } from "./Table/BoldRenderer.svelte"
@@ -101,3 +103,6 @@ export { banner, BANNER_TYPES } from "./Stores/banner"
101
103
 
102
104
  // Helpers
103
105
  export * as Helpers from "./helpers"
106
+
107
+ // Fancy form components
108
+ export * from "./FancyForm"