@budibase/bbui 1.58.13 → 2.0.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.
Files changed (181) hide show
  1. package/LICENSE +375 -0
  2. package/dist/bbui.es.js +14 -0
  3. package/dist/bbui.es.js.map +1 -0
  4. package/package.json +68 -32
  5. package/src/ActionButton/ActionButton.svelte +102 -0
  6. package/src/ActionGroup/ActionGroup.svelte +26 -0
  7. package/src/ActionMenu/ActionMenu.svelte +44 -0
  8. package/src/Actions/autoresize_textarea.js +9 -9
  9. package/src/Actions/click_outside.js +5 -5
  10. package/src/Actions/position_dropdown.js +46 -37
  11. package/src/Avatar/Avatar.svelte +62 -0
  12. package/src/Badge/Badge.svelte +29 -0
  13. package/src/Banner/Banner.svelte +72 -0
  14. package/src/Banner/BannerDisplay.svelte +41 -0
  15. package/src/Button/Button.svelte +102 -200
  16. package/src/ButtonGroup/ButtonGroup.svelte +30 -0
  17. package/src/ClearButton/ClearButton.svelte +19 -0
  18. package/src/ColorPicker/ColorPicker.svelte +297 -0
  19. package/src/DetailSummary/DetailSummary.svelte +83 -0
  20. package/src/Divider/Divider.svelte +28 -0
  21. package/src/Drawer/Drawer.svelte +76 -51
  22. package/src/Drawer/DrawerContent.svelte +46 -0
  23. package/src/Form/Checkbox.svelte +21 -132
  24. package/src/Form/Combobox.svelte +45 -0
  25. package/src/Form/Core/Checkbox.svelte +69 -0
  26. package/src/Form/Core/CheckboxGroup.svelte +68 -0
  27. package/src/Form/Core/Combobox.svelte +142 -0
  28. package/src/Form/Core/DatePicker.svelte +257 -0
  29. package/src/Form/Core/Dropzone.svelte +453 -0
  30. package/src/Form/Core/InputDropdown.svelte +228 -0
  31. package/src/Form/Core/Multiselect.svelte +90 -0
  32. package/src/Form/Core/Picker.svelte +259 -0
  33. package/src/Form/Core/PickerDropdown.svelte +415 -0
  34. package/src/Form/Core/RadioGroup.svelte +48 -0
  35. package/src/Form/Core/RichTextField.svelte +42 -0
  36. package/src/Form/Core/Search.svelte +105 -0
  37. package/src/Form/Core/Select.svelte +75 -0
  38. package/src/Form/Core/Slider.svelte +86 -0
  39. package/src/Form/Core/Stepper.svelte +172 -0
  40. package/src/Form/Core/Switch.svelte +37 -0
  41. package/src/Form/Core/TextArea.svelte +78 -0
  42. package/src/Form/Core/TextField.svelte +119 -0
  43. package/src/Form/Core/index.js +15 -0
  44. package/src/Form/DatePicker.svelte +39 -0
  45. package/src/Form/Dropzone.svelte +42 -0
  46. package/src/Form/Field.svelte +42 -0
  47. package/src/Form/FieldLabel.svelte +32 -0
  48. package/src/Form/Input.svelte +41 -187
  49. package/src/Form/InputDropdown.svelte +55 -0
  50. package/src/Form/Multiselect.svelte +36 -320
  51. package/src/Form/PickerDropdown.svelte +132 -0
  52. package/src/Form/RadioGroup.svelte +42 -0
  53. package/src/Form/RichTextField.svelte +36 -0
  54. package/src/Form/Search.svelte +36 -0
  55. package/src/Form/Select.svelte +48 -88
  56. package/src/Form/Slider.svelte +16 -91
  57. package/src/Form/Stepper.svelte +45 -0
  58. package/src/Form/TextArea.svelte +30 -128
  59. package/src/Form/Toggle.svelte +20 -110
  60. package/src/Icon/Icon.svelte +91 -0
  61. package/src/Icon/IconAvatar.svelte +58 -0
  62. package/src/IconPicker/IconPicker.svelte +177 -0
  63. package/src/IconSideNav/IconSideNav.svelte +14 -0
  64. package/src/IconSideNav/IconSideNavItem.svelte +56 -0
  65. package/src/InlineAlert/InlineAlert.svelte +60 -0
  66. package/src/Label/Label.svelte +29 -0
  67. package/src/Layout/Layout.svelte +94 -0
  68. package/src/Layout/Page.svelte +32 -0
  69. package/src/Link/Link.svelte +24 -0
  70. package/src/List/List.svelte +28 -0
  71. package/src/List/ListItem.svelte +90 -0
  72. package/src/Markdown/MarkdownEditor.svelte +60 -0
  73. package/src/Markdown/MarkdownViewer.svelte +70 -0
  74. package/src/Markdown/SpectrumMDE.svelte +184 -0
  75. package/src/Menu/Item.svelte +96 -0
  76. package/src/Menu/Menu.svelte +7 -0
  77. package/src/Menu/Menu.svench +19 -0
  78. package/src/Menu/Section.svelte +10 -0
  79. package/src/Menu/Separator.svelte +1 -0
  80. package/src/Modal/Content.svelte +0 -11
  81. package/src/Modal/CustomContent.svelte +9 -6
  82. package/src/Modal/Modal.svelte +104 -51
  83. package/src/Modal/ModalContent.svelte +131 -73
  84. package/src/Modal/QuizModal.svelte +16 -17
  85. package/src/Notification/Notification.svelte +70 -0
  86. package/src/Notification/NotificationDisplay.svelte +43 -0
  87. package/src/Pagination/Pagination.svelte +57 -0
  88. package/src/Popover/Popover.svelte +43 -33
  89. package/src/ProgressBar/ProgressBar.svelte +67 -0
  90. package/src/ProgressCircle/ProgressCircle.svelte +62 -0
  91. package/src/SideNavigation/Item.svelte +61 -0
  92. package/src/SideNavigation/Navigation.svelte +12 -0
  93. package/src/StatusLight/StatusLight.svelte +80 -0
  94. package/src/Stores/Notifications.svench.svx +1 -1
  95. package/src/Stores/banner.js +65 -0
  96. package/src/Stores/notifications.js +75 -38
  97. package/src/Table/ArrayRenderer.svelte +17 -0
  98. package/src/Table/AttachmentRenderer.svelte +73 -0
  99. package/src/Table/BoldRenderer.svelte +15 -0
  100. package/src/Table/BooleanRenderer.svelte +42 -0
  101. package/src/Table/CellRenderer.svelte +69 -0
  102. package/src/Table/CodeRenderer.svelte +14 -0
  103. package/src/Table/DateTimeRenderer.svelte +29 -0
  104. package/src/Table/InternalRenderer.svelte +24 -0
  105. package/src/Table/RelationshipRenderer.svelte +40 -0
  106. package/src/Table/SelectEditRenderer.svelte +28 -0
  107. package/src/Table/StringRenderer.svelte +14 -0
  108. package/src/Table/Table.svelte +635 -0
  109. package/src/Table/index.js +1 -0
  110. package/src/Tabs/Tab.svelte +88 -0
  111. package/src/Tabs/Tabs.svelte +130 -0
  112. package/src/Tags/Tag.svelte +43 -0
  113. package/src/Tags/Tags.svelte +7 -0
  114. package/src/Tooltip/Tooltip.svelte +34 -0
  115. package/src/Tooltip/TooltipWrapper.svelte +60 -0
  116. package/src/TreeView/Item.svelte +41 -0
  117. package/src/TreeView/Tree.svelte +16 -0
  118. package/src/Typography/Body.svelte +21 -0
  119. package/src/Typography/Code.svelte +10 -0
  120. package/src/Typography/Detail.svelte +19 -0
  121. package/src/Typography/Heading.svelte +17 -0
  122. package/{dist → src}/bbui.css +2 -99
  123. package/src/context.js +1 -1
  124. package/src/helpers.js +134 -0
  125. package/src/index.js +95 -40
  126. package/src/spectrum-icons-rollup.js +31 -0
  127. package/src/spectrum-icons-vite.js +31 -0
  128. package/dist/dist/bundle.css +0 -42
  129. package/dist/dist/bundle.css.map +0 -64
  130. package/dist/index.js +0 -36193
  131. package/dist/index.mjs +0 -36147
  132. package/src/Button/Close.svelte +0 -59
  133. package/src/Button/Close.svench +0 -36
  134. package/src/Button/TextButton.svelte +0 -128
  135. package/src/Button/TextButton.svench +0 -69
  136. package/src/DatePicker/DatePicker.svelte +0 -45
  137. package/src/DatePicker/DatePicker.svench +0 -17
  138. package/src/DropdownMenu/DropdownMenu.svelte +0 -77
  139. package/src/DropdownMenu/DropdownMenu.svench +0 -161
  140. package/src/Dropzone/Dropzone.svelte +0 -294
  141. package/src/Dropzone/Dropzone.svench +0 -17
  142. package/src/Dropzone/fileTypes.js +0 -5
  143. package/src/Form/Checkbox.svench.svx +0 -67
  144. package/src/Form/DataList.svelte +0 -158
  145. package/src/Form/DataList.svench +0 -57
  146. package/src/Form/Input.svench +0 -62
  147. package/src/Form/Multiselect.svench +0 -63
  148. package/src/Form/Radio.svelte +0 -133
  149. package/src/Form/Radio.svench.svx +0 -64
  150. package/src/Form/RichText.svelte +0 -61
  151. package/src/Form/RichText.svench.svx +0 -40
  152. package/src/Form/Select.svench +0 -62
  153. package/src/Form/Slider.svench +0 -26
  154. package/src/Form/TextArea.svench +0 -30
  155. package/src/Form/Toggle.svench +0 -21
  156. package/src/Icons/Contribution.svelte +0 -14
  157. package/src/Icons/Icon.svelte +0 -36
  158. package/src/Icons/Icon.svench +0 -109
  159. package/src/Icons/icon-paths.js +0 -136
  160. package/src/Links/Home.svelte +0 -51
  161. package/src/Links/Home.svench +0 -19
  162. package/src/List/Items/DetailSummary.svelte +0 -85
  163. package/src/List/Items/DetailSummary.svench +0 -53
  164. package/src/List/Search.svelte +0 -34
  165. package/src/List/Search.svench +0 -8
  166. package/src/Spacer/Spacer.svelte +0 -50
  167. package/src/Spacer/Spacer.svench +0 -51
  168. package/src/Styleguide/Body.svelte +0 -72
  169. package/src/Styleguide/Borders.svench +0 -175
  170. package/src/Styleguide/Budibase-logo.svelte +0 -68
  171. package/src/Styleguide/Color.svench +0 -201
  172. package/src/Styleguide/Heading.svelte +0 -74
  173. package/src/Styleguide/Label.svelte +0 -70
  174. package/src/Styleguide/Logo.svelte +0 -16
  175. package/src/Styleguide/Logo.svench +0 -8
  176. package/src/Styleguide/Spacing.svench +0 -191
  177. package/src/Styleguide/Typography.svench +0 -227
  178. package/src/Switcher/Switcher.svelte +0 -47
  179. package/src/Switcher/Switcher.svench +0 -27
  180. package/src/index.svench.svx +0 -35
  181. package/src/utils/buildStyle.js +0 -14
@@ -0,0 +1,60 @@
1
+ <script>
2
+ import "@spectrum-css/inlinealert/dist/index-vars.css"
3
+ import Button from "../Button/Button.svelte"
4
+
5
+ export let type = "info"
6
+ export let header = ""
7
+ export let message = ""
8
+ export let onConfirm = undefined
9
+ export let buttonText = ""
10
+
11
+ $: icon = selectIcon(type)
12
+ // if newlines used, convert them to different elements
13
+ $: split = message.split("\n")
14
+
15
+ function selectIcon(alertType) {
16
+ switch (alertType) {
17
+ case "error":
18
+ case "negative":
19
+ return "Alert"
20
+ case "success":
21
+ return "CheckmarkCircle"
22
+ case "help":
23
+ return "Help"
24
+ default:
25
+ return "Info"
26
+ }
27
+ }
28
+ </script>
29
+
30
+ <div class="spectrum-InLineAlert spectrum-InLineAlert--{type}">
31
+ <svg
32
+ class="spectrum-Icon spectrum-Icon--sizeM spectrum-InLineAlert-icon"
33
+ focusable="false"
34
+ aria-hidden="true"
35
+ >
36
+ <use xlink:href="#spectrum-icon-18-{icon}" />
37
+ </svg>
38
+ <div class="spectrum-InLineAlert-header">{header}</div>
39
+ {#each split as splitMsg}
40
+ <div class="spectrum-InLineAlert-content">{splitMsg}</div>
41
+ {/each}
42
+ {#if onConfirm}
43
+ <div class="spectrum-InLineAlert-footer button">
44
+ <Button secondary on:click={onConfirm}>{buttonText || "OK"}</Button>
45
+ </div>
46
+ {/if}
47
+ </div>
48
+
49
+ <style>
50
+ .button {
51
+ margin-top: 10px;
52
+ }
53
+ .spectrum-InLineAlert {
54
+ --spectrum-semantic-negative-border-color: #e34850;
55
+ --spectrum-semantic-positive-border-color: #2d9d78;
56
+ --spectrum-semantic-positive-icon-color: #2d9d78;
57
+ --spectrum-semantic-negative-icon-color: #e34850;
58
+ min-width: 100px;
59
+ }
60
+ </style>
@@ -0,0 +1,29 @@
1
+ <script>
2
+ import "@spectrum-css/fieldlabel/dist/index-vars.css"
3
+ import TooltipWrapper from "../Tooltip/TooltipWrapper.svelte"
4
+
5
+ export let size = "M"
6
+ export let tooltip = ""
7
+ export let muted
8
+ </script>
9
+
10
+ <TooltipWrapper {tooltip} {size}>
11
+ <label
12
+ class:muted
13
+ for=""
14
+ class={`spectrum-FieldLabel spectrum-FieldLabel--size${size}`}
15
+ >
16
+ <slot />
17
+ </label>
18
+ </TooltipWrapper>
19
+
20
+ <style>
21
+ label {
22
+ padding: 0;
23
+ white-space: nowrap;
24
+ }
25
+
26
+ .muted {
27
+ opacity: 0.5;
28
+ }
29
+ </style>
@@ -0,0 +1,94 @@
1
+ <script>
2
+ export let horizontal = false
3
+ export let paddingX = "M"
4
+ export let paddingY = "M"
5
+ export let noPadding = false
6
+ export let gap = "M"
7
+ export let noGap = false
8
+ export let alignContent = "normal"
9
+ export let justifyItems = "stretch"
10
+ </script>
11
+
12
+ <div
13
+ style="align-content:{alignContent};justify-items:{justifyItems};"
14
+ class:horizontal
15
+ class="container paddingX-{!noPadding && paddingX} paddingY-{!noPadding &&
16
+ paddingY} gap-{!noGap && gap}"
17
+ >
18
+ <slot />
19
+ </div>
20
+
21
+ <style>
22
+ .container {
23
+ display: grid;
24
+ grid-template-columns: 1fr;
25
+ position: relative;
26
+ }
27
+ .paddingX-S {
28
+ padding-left: var(--spacing-s);
29
+ padding-right: var(--spacing-s);
30
+ }
31
+ .paddingX-M {
32
+ padding-left: var(--spacing-m);
33
+ padding-right: var(--spacing-m);
34
+ }
35
+ .paddingX-L {
36
+ padding-left: var(--spacing-l);
37
+ padding-right: var(--spacing-l);
38
+ }
39
+ .paddingX-XL {
40
+ padding-left: var(--spacing-xl);
41
+ padding-right: var(--spacing-xl);
42
+ }
43
+ .paddingX-XXL {
44
+ padding-left: var(--spectrum-alias-grid-gutter-large);
45
+ padding-right: var(--spectrum-alias-grid-gutter-large);
46
+ }
47
+ .paddingY-S {
48
+ padding-top: var(--spacing-s);
49
+ padding-bottom: var(--spacing-s);
50
+ }
51
+ .paddingY-M {
52
+ padding-top: var(--spacing-m);
53
+ padding-bottom: var(--spacing-m);
54
+ }
55
+ .paddingY-L {
56
+ padding-top: var(--spacing-l);
57
+ padding-bottom: var(--spacing-l);
58
+ }
59
+ .paddingY-XL {
60
+ padding-top: var(--spacing-xl);
61
+ padding-bottom: var(--spacing-xl);
62
+ }
63
+ .paddingY-XXL {
64
+ padding-top: var(--spectrum-alias-grid-gutter-large);
65
+ padding-bottom: var(--spectrum-alias-grid-gutter-large);
66
+ }
67
+ .gap-XXS {
68
+ grid-gap: var(--spacing-xs);
69
+ }
70
+ .gap-XS {
71
+ grid-gap: var(--spacing-s);
72
+ }
73
+ .gap-S {
74
+ grid-gap: var(--spectrum-alias-grid-gutter-xsmall);
75
+ }
76
+ .gap-M {
77
+ grid-gap: var(--spectrum-alias-grid-gutter-small);
78
+ }
79
+ .gap-L {
80
+ grid-gap: var(--spectrum-alias-grid-gutter-medium);
81
+ }
82
+ .gap-XL {
83
+ grid-gap: var(--spectrum-alias-grid-gutter-large);
84
+ }
85
+ .horizontal.gap-S :global(*) + :global(*) {
86
+ margin-left: var(--spectrum-alias-grid-gutter-xsmall);
87
+ }
88
+ .horizontal.gap-M :global(*) + :global(*) {
89
+ margin-left: var(--spectrum-alias-grid-gutter-small);
90
+ }
91
+ .horizontal.gap-L :global(*) + :global(*) {
92
+ margin-left: var(--spectrum-alias-grid-gutter-medium);
93
+ }
94
+ </style>
@@ -0,0 +1,32 @@
1
+ <script>
2
+ export let wide = false
3
+ export let maxWidth = "80ch"
4
+ export let noPadding = false
5
+ </script>
6
+
7
+ <div style="--max-width: {maxWidth}" class:wide class:noPadding>
8
+ <slot />
9
+ </div>
10
+
11
+ <style>
12
+ div {
13
+ display: flex;
14
+ flex-direction: column;
15
+ justify-content: flex-start;
16
+ align-items: stretch;
17
+ max-width: var(--max-width);
18
+ margin: 0 auto;
19
+ padding: calc(var(--spacing-xl) * 2);
20
+ min-height: calc(100% - var(--spacing-xl) * 4);
21
+ }
22
+
23
+ .wide {
24
+ max-width: none;
25
+ margin: 0;
26
+ }
27
+
28
+ .noPadding {
29
+ padding: 0px;
30
+ margin: 0px;
31
+ }
32
+ </style>
@@ -0,0 +1,24 @@
1
+ <script>
2
+ import "@spectrum-css/link/dist/index-vars.css"
3
+
4
+ export let href = "#"
5
+ export let size = "M"
6
+ export let quiet = false
7
+ export let primary = false
8
+ export let secondary = false
9
+ export let overBackground = false
10
+ export let target
11
+ export let download
12
+ </script>
13
+
14
+ <a
15
+ on:click
16
+ {href}
17
+ {target}
18
+ {download}
19
+ class:spectrum-Link--primary={primary}
20
+ class:spectrum-Link--secondary={secondary}
21
+ class:spectrum-Link--overBackground={overBackground}
22
+ class:spectrum-Link--quiet={quiet}
23
+ class="spectrum-Link spectrum-Link--size{size}"><slot /></a
24
+ >
@@ -0,0 +1,28 @@
1
+ <script>
2
+ import Detail from "../Typography/Detail.svelte"
3
+
4
+ export let title = null
5
+ </script>
6
+
7
+ <div>
8
+ {#if title}
9
+ <div class="title">
10
+ <Detail>{title}</Detail>
11
+ </div>
12
+ {/if}
13
+ <div class="list-items">
14
+ <slot />
15
+ </div>
16
+ </div>
17
+
18
+ <style>
19
+ .title {
20
+ margin-bottom: 6px;
21
+ }
22
+ .list-items {
23
+ display: flex;
24
+ flex-direction: column;
25
+ justify-content: flex-start;
26
+ align-items: stretch;
27
+ }
28
+ </style>
@@ -0,0 +1,90 @@
1
+ <script>
2
+ import Body from "../Typography/Body.svelte"
3
+ import IconAvatar from "../Icon/IconAvatar.svelte"
4
+ import Label from "../Label/Label.svelte"
5
+ import Avatar from "../Avatar/Avatar.svelte"
6
+
7
+ export let icon = null
8
+ export let iconBackground = null
9
+ export let iconColor = null
10
+ export let avatar = false
11
+ export let title = null
12
+ export let subtitle = null
13
+ export let hoverable = false
14
+
15
+ $: initials = avatar ? title?.[0] : null
16
+ </script>
17
+
18
+ <div class="list-item" class:hoverable on:click>
19
+ <div class="left">
20
+ {#if icon}
21
+ <IconAvatar {icon} color={iconColor} background={iconBackground} />
22
+ {/if}
23
+ {#if avatar}
24
+ <Avatar {initials} />
25
+ {/if}
26
+ {#if title}
27
+ <Body>{title}</Body>
28
+ {/if}
29
+ {#if subtitle}
30
+ <Label>{subtitle}</Label>
31
+ {/if}
32
+ </div>
33
+ <div class="right">
34
+ <slot />
35
+ </div>
36
+ </div>
37
+
38
+ <style>
39
+ .list-item {
40
+ padding: 0 16px;
41
+ height: 56px;
42
+ background: var(--spectrum-global-color-gray-50);
43
+ display: flex;
44
+ flex-direction: row;
45
+ justify-content: space-between;
46
+ border: 1px solid var(--spectrum-global-color-gray-300);
47
+ transition: background 130ms ease-out;
48
+ }
49
+ .list-item:not(:first-child) {
50
+ border-top: none;
51
+ }
52
+ .list-item:first-child {
53
+ border-top-left-radius: 4px;
54
+ border-top-right-radius: 4px;
55
+ }
56
+ .list-item:last-child {
57
+ border-bottom-left-radius: 4px;
58
+ border-bottom-right-radius: 4px;
59
+ }
60
+ .hoverable:hover {
61
+ cursor: pointer;
62
+ background: var(--spectrum-global-color-gray-75);
63
+ }
64
+ .left,
65
+ .right {
66
+ display: flex;
67
+ flex-direction: row;
68
+ align-items: center;
69
+ gap: var(--spacing-xl);
70
+ }
71
+ .left {
72
+ width: 0;
73
+ flex: 1 1 auto;
74
+ }
75
+ .right {
76
+ flex: 0 0 auto;
77
+ }
78
+ .list-item :global(.spectrum-Icon),
79
+ .list-item :global(.spectrum-Avatar) {
80
+ flex: 0 0 auto;
81
+ }
82
+ .list-item :global(.spectrum-Body) {
83
+ color: var(--spectrum-global-color-gray-900);
84
+ }
85
+ .list-item :global(.spectrum-Body) {
86
+ white-space: nowrap;
87
+ overflow: hidden;
88
+ text-overflow: ellipsis;
89
+ }
90
+ </style>
@@ -0,0 +1,60 @@
1
+ <script>
2
+ import SpectrumMDE from "./SpectrumMDE.svelte"
3
+ import { createEventDispatcher } from "svelte"
4
+
5
+ export let value = null
6
+ export let height = null
7
+ export let placeholder = null
8
+ export let id = null
9
+ export let fullScreenOffset = 0
10
+ export let disabled = false
11
+ export let easyMDEOptions
12
+
13
+ const dispatch = createEventDispatcher()
14
+
15
+ let latestValue
16
+ let mde
17
+
18
+ // Ensure the value is updated if the value prop changes outside the editor's
19
+ // control
20
+ $: checkValue(value)
21
+ $: mde?.codemirror.on("change", debouncedUpdate)
22
+
23
+ const checkValue = val => {
24
+ if (mde && val !== latestValue) {
25
+ mde.value(val)
26
+ }
27
+ }
28
+
29
+ const debounce = (fn, interval) => {
30
+ let timeout
31
+ return () => {
32
+ clearTimeout(timeout)
33
+ timeout = setTimeout(fn, interval)
34
+ }
35
+ }
36
+
37
+ const update = () => {
38
+ latestValue = mde.value()
39
+ dispatch("change", latestValue)
40
+ }
41
+
42
+ // Debounce the update function to avoid spamming it constantly
43
+ const debouncedUpdate = debounce(update, 250)
44
+ </script>
45
+
46
+ {#key height}
47
+ <SpectrumMDE
48
+ bind:mde
49
+ scroll={true}
50
+ {height}
51
+ {id}
52
+ {fullScreenOffset}
53
+ {disabled}
54
+ easyMDEOptions={{
55
+ initialValue: value,
56
+ placeholder,
57
+ ...easyMDEOptions,
58
+ }}
59
+ />
60
+ {/key}
@@ -0,0 +1,70 @@
1
+ <script>
2
+ import SpectrumMDE from "./SpectrumMDE.svelte"
3
+
4
+ export let value
5
+ export let height
6
+
7
+ let mde
8
+
9
+ // Keep the value up to date
10
+ $: mde && mde.value(value || "")
11
+ $: {
12
+ if (mde && !mde.isPreviewActive()) {
13
+ mde.togglePreview()
14
+ }
15
+ }
16
+ </script>
17
+
18
+ <div class="markdown-viewer" style="height:{height};">
19
+ <SpectrumMDE
20
+ bind:mde
21
+ scroll={false}
22
+ easyMDEOptions={{
23
+ initialValue: value,
24
+ toolbar: false,
25
+ }}
26
+ />
27
+ </div>
28
+
29
+ <style>
30
+ .markdown-viewer {
31
+ overflow: auto;
32
+ }
33
+ /* Remove padding, borders and background colors */
34
+ .markdown-viewer :global(.editor-preview) {
35
+ padding: 0;
36
+ border: none;
37
+ background: transparent;
38
+ }
39
+ .markdown-viewer :global(.CodeMirror) {
40
+ border: none;
41
+ background: transparent;
42
+ padding: 0;
43
+ }
44
+ .markdown-viewer :global(.EasyMDEContainer) {
45
+ background: transparent;
46
+ }
47
+ /* Hide the actual code editor */
48
+ .markdown-viewer :global(.CodeMirror-scroll) {
49
+ display: none;
50
+ }
51
+ /*Hide the scrollbar*/
52
+ .markdown-viewer :global(.CodeMirror-vscrollbar) {
53
+ display: none !important;
54
+ }
55
+ /*Position relatively so we only consume whatever space we need */
56
+ .markdown-viewer :global(.editor-preview-full) {
57
+ position: relative;
58
+ }
59
+ /* Remove margin on the first and last components to fully trim the preview */
60
+ .markdown-viewer :global(.editor-preview-full > :first-child) {
61
+ margin-top: 0;
62
+ }
63
+ .markdown-viewer :global(.editor-preview-full > :last-child) {
64
+ margin-bottom: 0;
65
+ }
66
+ /* Code blocks in preview */
67
+ .markdown-viewer :global(.editor-preview-full pre) {
68
+ background: var(--spectrum-global-color-gray-200);
69
+ }
70
+ </style>
@@ -0,0 +1,184 @@
1
+ <script>
2
+ import EasyMDE from "easymde"
3
+ import "easymde/dist/easymde.min.css"
4
+ import { onMount } from "svelte"
5
+
6
+ export let height = null
7
+ export let scroll = true
8
+ export let easyMDEOptions = null
9
+ export let mde = null
10
+ export let id = null
11
+ export let fullScreenOffset = null
12
+ export let disabled = false
13
+
14
+ let element
15
+
16
+ onMount(() => {
17
+ height = height || "200px"
18
+ mde = new EasyMDE({
19
+ element,
20
+ spellChecker: false,
21
+ status: false,
22
+ unorderedListStyle: "-",
23
+ maxHeight: scroll ? height : undefined,
24
+ minHeight: scroll ? undefined : height,
25
+ ...easyMDEOptions,
26
+ })
27
+
28
+ // Revert the editor when we unmount
29
+ return () => {
30
+ mde.toTextArea()
31
+ }
32
+ })
33
+
34
+ $: styleString = getStyleString(fullScreenOffset)
35
+
36
+ const getStyleString = offset => {
37
+ let string = ""
38
+ string += `--fullscreen-offset-x:${offset?.x || "0px"};`
39
+ string += `--fullscreen-offset-y:${offset?.y || "0px"};`
40
+ return string
41
+ }
42
+ </script>
43
+
44
+ <div class:disabled style={styleString}>
45
+ <textarea disabled {id} bind:this={element} />
46
+ </div>
47
+
48
+ <style>
49
+ /* Disabled styles */
50
+ .disabled :global(textarea) {
51
+ display: none;
52
+ }
53
+ .disabled :global(.CodeMirror-cursor) {
54
+ display: none;
55
+ }
56
+ .disabled :global(.EasyMDEContainer) {
57
+ pointer-events: none;
58
+ }
59
+ .disabled :global(.editor-toolbar button i) {
60
+ color: var(--spectrum-global-color-gray-400);
61
+ }
62
+ .disabled :global(.CodeMirror) {
63
+ color: var(--spectrum-global-color-gray-600);
64
+ }
65
+
66
+ /* Toolbar container */
67
+ :global(.EasyMDEContainer .editor-toolbar) {
68
+ background: var(--spectrum-global-color-gray-50);
69
+ border-top: 1px solid var(--spectrum-alias-border-color);
70
+ border-left: 1px solid var(--spectrum-alias-border-color);
71
+ border-right: 1px solid var(--spectrum-alias-border-color);
72
+ }
73
+ /* Main code mirror instance and default color */
74
+ :global(.EasyMDEContainer .CodeMirror) {
75
+ border: 1px solid var(--spectrum-alias-border-color);
76
+ background: var(--spectrum-global-color-gray-50);
77
+ color: var(--spectrum-alias-text-color);
78
+ }
79
+ /* Toolbar button active state */
80
+ :global(.EasyMDEContainer .editor-toolbar button.active) {
81
+ background: var(--spectrum-global-color-gray-200);
82
+ border-color: var(--spectrum-global-color-gray-400);
83
+ }
84
+ /* Toolbar button hover state */
85
+ :global(.EasyMDEContainer .editor-toolbar button:hover) {
86
+ background: var(--spectrum-global-color-gray-200);
87
+ border-color: var(--spectrum-global-color-gray-400);
88
+ }
89
+ /* Toolbar button color */
90
+ :global(.EasyMDEContainer .editor-toolbar button i) {
91
+ color: var(--spectrum-global-color-gray-800);
92
+ }
93
+ /* Separator between toolbar buttons*/
94
+ :global(.EasyMDEContainer .editor-toolbar i.separator) {
95
+ border-color: var(--spectrum-global-color-gray-300);
96
+ }
97
+ /* Cursor */
98
+ :global(.EasyMDEContainer .CodeMirror-cursor) {
99
+ border-color: var(--spectrum-alias-text-color);
100
+ }
101
+ /* Text selections */
102
+ :global(.EasyMDEContainer .CodeMirror-selectedtext) {
103
+ background: var(--spectrum-global-color-gray-400) !important;
104
+ }
105
+ /* Background of lines containing selected text */
106
+ :global(.EasyMDEContainer .CodeMirror-selected) {
107
+ background: var(--spectrum-global-color-gray-400) !important;
108
+ }
109
+ /* Color of text for images and links */
110
+ :global(.EasyMDEContainer .cm-s-easymde .cm-link) {
111
+ color: var(--spectrum-global-color-gray-600);
112
+ }
113
+ /* Color of URL for images and links */
114
+ :global(.EasyMDEContainer .cm-s-easymde .cm-url) {
115
+ color: var(--spectrum-global-color-gray-500);
116
+ }
117
+ /* Full preview window */
118
+ :global(.EasyMDEContainer .editor-preview) {
119
+ background: var(--spectrum-global-color-gray-50);
120
+ }
121
+ /* Side by side preview window */
122
+ :global(.EasyMDEContainer .editor-preview) {
123
+ border: 1px solid var(--spectrum-alias-border-color);
124
+ }
125
+ /* Code blocks in editor */
126
+ :global(.EasyMDEContainer .cm-s-easymde .cm-comment) {
127
+ background: var(--spectrum-global-color-gray-100);
128
+ }
129
+ /* Code blocks in preview */
130
+ :global(.EasyMDEContainer pre) {
131
+ background: var(--spectrum-global-color-gray-100);
132
+ padding: 4px;
133
+ border-radius: 4px;
134
+ }
135
+ :global(.EasyMDEContainer code) {
136
+ color: #e83e8c;
137
+ }
138
+ :global(.EasyMDEContainer pre code) {
139
+ color: var(--spectrum-alias-text-color);
140
+ }
141
+ /* Block quotes */
142
+ :global(.EasyMDEContainer blockquote) {
143
+ border-left: 4px solid var(--spectrum-global-color-gray-400);
144
+ color: var(--spectrum-global-color-gray-700);
145
+ margin-left: 0;
146
+ padding-left: 20px;
147
+ }
148
+ /* HR's */
149
+ :global(.EasyMDEContainer hr) {
150
+ background-color: var(--spectrum-global-color-gray-300);
151
+ border: none;
152
+ height: 2px;
153
+ }
154
+ /* Tables */
155
+ :global(.EasyMDEContainer td, .EasyMDEContainer th) {
156
+ border-color: var(--spectrum-alias-border-color) !important;
157
+ }
158
+ /* Links */
159
+ :global(.EasyMDEContainer a) {
160
+ color: var(--primaryColor);
161
+ }
162
+ :global(.EasyMDEContainer a:hover) {
163
+ color: var(--primaryColorHover);
164
+ }
165
+ /* Allow full screen offset */
166
+ :global(.EasyMDEContainer .editor-toolbar.fullscreen) {
167
+ left: var(--fullscreen-offset-x);
168
+ top: var(--fullscreen-offset-y);
169
+ }
170
+ :global(.EasyMDEContainer .CodeMirror-fullscreen) {
171
+ left: var(--fullscreen-offset-x);
172
+ top: calc(50px + var(--fullscreen-offset-y));
173
+ }
174
+
175
+ :global(.EasyMDEContainer .CodeMirror-fullscreen.CodeMirror-sided) {
176
+ width: calc((100% - var(--fullscreen-offset-x)) / 2) !important;
177
+ }
178
+
179
+ :global(.EasyMDEContainer .editor-preview-side) {
180
+ left: calc(50% + (var(--fullscreen-offset-x) / 2));
181
+ top: calc(50px + var(--fullscreen-offset-y));
182
+ width: calc((100% - var(--fullscreen-offset-x)) / 2) !important;
183
+ }
184
+ </style>