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

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
@@ -2,12 +2,12 @@
2
2
  import "@spectrum-css/picker/dist/index-vars.css"
3
3
  import "@spectrum-css/popover/dist/index-vars.css"
4
4
  import "@spectrum-css/menu/dist/index-vars.css"
5
- import { fly } from "svelte/transition"
6
5
  import { createEventDispatcher } from "svelte"
7
6
  import clickOutside from "../../Actions/click_outside"
8
7
  import Search from "./Search.svelte"
9
8
  import Icon from "../../Icon/Icon.svelte"
10
9
  import StatusLight from "../../StatusLight/StatusLight.svelte"
10
+ import Popover from "../../Popover/Popover.svelte"
11
11
 
12
12
  export let id = null
13
13
  export let disabled = false
@@ -33,7 +33,10 @@
33
33
  export let sort = false
34
34
 
35
35
  const dispatch = createEventDispatcher()
36
+
36
37
  let searchTerm = null
38
+ let button
39
+ let popover
37
40
 
38
41
  $: sortedOptions = getSortedOptions(options, getOptionLabel, sort)
39
42
  $: filteredOptions = getFilteredOptions(
@@ -42,7 +45,9 @@
42
45
  getOptionLabel
43
46
  )
44
47
 
45
- const onClick = () => {
48
+ const onClick = e => {
49
+ e.preventDefault()
50
+ e.stopPropagation()
46
51
  dispatch("click")
47
52
  if (readonly) {
48
53
  return
@@ -76,77 +81,119 @@
76
81
  }
77
82
  </script>
78
83
 
79
- <div use:clickOutside={() => (open = false)}>
80
- <button
81
- {id}
82
- class="spectrum-Picker spectrum-Picker--sizeM"
83
- class:spectrum-Picker--quiet={quiet}
84
- {disabled}
85
- class:is-invalid={!!error}
86
- class:is-open={open}
87
- aria-haspopup="listbox"
88
- on:click={onClick}
89
- >
90
- {#if fieldIcon}
91
- <span class="option-extra">
92
- <Icon name={fieldIcon} />
93
- </span>
94
- {/if}
95
- {#if fieldColour}
96
- <span class="option-extra">
97
- <StatusLight square color={fieldColour} />
98
- </span>
99
- {/if}
100
- <span
101
- class="spectrum-Picker-label"
102
- class:is-placeholder={isPlaceholder}
103
- class:auto-width={autoWidth}
104
- >
105
- {fieldText}
84
+ <button
85
+ {id}
86
+ class="spectrum-Picker spectrum-Picker--sizeM"
87
+ class:spectrum-Picker--quiet={quiet}
88
+ {disabled}
89
+ class:is-invalid={!!error}
90
+ class:is-open={open}
91
+ aria-haspopup="listbox"
92
+ on:click={onClick}
93
+ bind:this={button}
94
+ >
95
+ {#if fieldIcon}
96
+ <span class="option-extra icon">
97
+ <Icon size="S" name={fieldIcon} />
106
98
  </span>
107
- {#if error}
108
- <svg
109
- class="spectrum-Icon spectrum-Icon--sizeM spectrum-Picker-validationIcon"
110
- focusable="false"
111
- aria-hidden="true"
112
- aria-label="Folder"
113
- >
114
- <use xlink:href="#spectrum-icon-18-Alert" />
115
- </svg>
116
- {/if}
99
+ {/if}
100
+ {#if fieldColour}
101
+ <span class="option-extra">
102
+ <StatusLight square color={fieldColour} />
103
+ </span>
104
+ {/if}
105
+ <span
106
+ class="spectrum-Picker-label"
107
+ class:is-placeholder={isPlaceholder}
108
+ class:auto-width={autoWidth}
109
+ >
110
+ {fieldText}
111
+ </span>
112
+ {#if error}
117
113
  <svg
118
- class="spectrum-Icon spectrum-UIIcon-ChevronDown100 spectrum-Picker-menuIcon"
114
+ class="spectrum-Icon spectrum-Icon--sizeM spectrum-Picker-validationIcon"
119
115
  focusable="false"
120
116
  aria-hidden="true"
117
+ aria-label="Folder"
121
118
  >
122
- <use xlink:href="#spectrum-css-icon-Chevron100" />
119
+ <use xlink:href="#spectrum-icon-18-Alert" />
123
120
  </svg>
124
- </button>
125
- {#if open}
126
- <div
127
- transition:fly|local={{ y: -20, duration: 200 }}
128
- class="spectrum-Popover spectrum-Popover--bottom spectrum-Picker-popover is-open"
129
- class:auto-width={autoWidth}
130
- >
131
- {#if autocomplete}
132
- <Search
133
- value={searchTerm}
134
- on:change={event => (searchTerm = event.detail)}
135
- {disabled}
136
- placeholder="Search"
137
- />
121
+ {/if}
122
+ <svg
123
+ class="spectrum-Icon spectrum-UIIcon-ChevronDown100 spectrum-Picker-menuIcon"
124
+ focusable="false"
125
+ aria-hidden="true"
126
+ >
127
+ <use xlink:href="#spectrum-css-icon-Chevron100" />
128
+ </svg>
129
+ </button>
130
+
131
+ <Popover
132
+ anchor={button}
133
+ align="left"
134
+ bind:this={popover}
135
+ {open}
136
+ on:close={() => (open = false)}
137
+ useAnchorWidth={!autoWidth}
138
+ maxWidth={autoWidth ? 400 : null}
139
+ >
140
+ <div
141
+ class="popover-content"
142
+ class:auto-width={autoWidth}
143
+ use:clickOutside={() => (open = false)}
144
+ >
145
+ {#if autocomplete}
146
+ <Search
147
+ value={searchTerm}
148
+ on:change={event => (searchTerm = event.detail)}
149
+ {disabled}
150
+ placeholder="Search"
151
+ />
152
+ {/if}
153
+ <ul class="spectrum-Menu" role="listbox">
154
+ {#if placeholderOption}
155
+ <li
156
+ class="spectrum-Menu-item placeholder"
157
+ class:is-selected={isPlaceholder}
158
+ role="option"
159
+ aria-selected="true"
160
+ tabindex="0"
161
+ on:click={() => onSelectOption(null)}
162
+ >
163
+ <span class="spectrum-Menu-itemLabel">{placeholderOption}</span>
164
+ <svg
165
+ class="spectrum-Icon spectrum-UIIcon-Checkmark100 spectrum-Menu-checkmark spectrum-Menu-itemIcon"
166
+ focusable="false"
167
+ aria-hidden="true"
168
+ >
169
+ <use xlink:href="#spectrum-css-icon-Checkmark100" />
170
+ </svg>
171
+ </li>
138
172
  {/if}
139
- <ul class="spectrum-Menu" role="listbox">
140
- {#if placeholderOption}
173
+ {#if filteredOptions.length}
174
+ {#each filteredOptions as option, idx}
141
175
  <li
142
- class="spectrum-Menu-item placeholder"
143
- class:is-selected={isPlaceholder}
176
+ class="spectrum-Menu-item"
177
+ class:is-selected={isOptionSelected(getOptionValue(option, idx))}
144
178
  role="option"
145
179
  aria-selected="true"
146
180
  tabindex="0"
147
- on:click={() => onSelectOption(null)}
181
+ on:click={() => onSelectOption(getOptionValue(option, idx))}
182
+ class:is-disabled={!isOptionEnabled(option)}
148
183
  >
149
- <span class="spectrum-Menu-itemLabel">{placeholderOption}</span>
184
+ {#if getOptionIcon(option, idx)}
185
+ <span class="option-extra icon">
186
+ <Icon size="S" name={getOptionIcon(option, idx)} />
187
+ </span>
188
+ {/if}
189
+ {#if getOptionColour(option, idx)}
190
+ <span class="option-extra">
191
+ <StatusLight square color={getOptionColour(option, idx)} />
192
+ </span>
193
+ {/if}
194
+ <span class="spectrum-Menu-itemLabel">
195
+ {getOptionLabel(option, idx)}
196
+ </span>
150
197
  <svg
151
198
  class="spectrum-Icon spectrum-UIIcon-Checkmark100 spectrum-Menu-checkmark spectrum-Menu-itemIcon"
152
199
  focusable="false"
@@ -155,61 +202,13 @@
155
202
  <use xlink:href="#spectrum-css-icon-Checkmark100" />
156
203
  </svg>
157
204
  </li>
158
- {/if}
159
- {#if filteredOptions.length}
160
- {#each filteredOptions as option, idx}
161
- <li
162
- class="spectrum-Menu-item"
163
- class:is-selected={isOptionSelected(getOptionValue(option, idx))}
164
- role="option"
165
- aria-selected="true"
166
- tabindex="0"
167
- on:click={() => onSelectOption(getOptionValue(option, idx))}
168
- class:is-disabled={!isOptionEnabled(option)}
169
- >
170
- {#if getOptionIcon(option, idx)}
171
- <span class="option-extra">
172
- <Icon name={getOptionIcon(option, idx)} />
173
- </span>
174
- {/if}
175
- {#if getOptionColour(option, idx)}
176
- <span class="option-extra">
177
- <StatusLight square color={getOptionColour(option, idx)} />
178
- </span>
179
- {/if}
180
- <span class="spectrum-Menu-itemLabel">
181
- {getOptionLabel(option, idx)}
182
- </span>
183
- <svg
184
- class="spectrum-Icon spectrum-UIIcon-Checkmark100 spectrum-Menu-checkmark spectrum-Menu-itemIcon"
185
- focusable="false"
186
- aria-hidden="true"
187
- >
188
- <use xlink:href="#spectrum-css-icon-Checkmark100" />
189
- </svg>
190
- </li>
191
- {/each}
192
- {/if}
193
- </ul>
194
- </div>
195
- {/if}
196
- </div>
205
+ {/each}
206
+ {/if}
207
+ </ul>
208
+ </div>
209
+ </Popover>
197
210
 
198
211
  <style>
199
- .spectrum-Popover {
200
- max-height: 240px;
201
- z-index: 999;
202
- top: 100%;
203
- }
204
- .spectrum-Popover:not(.auto-width) {
205
- width: 100%;
206
- }
207
- .spectrum-Popover.auto-width :global(.spectrum-Menu-itemLabel) {
208
- max-width: 400px;
209
- white-space: nowrap;
210
- overflow: hidden;
211
- text-overflow: ellipsis;
212
- }
213
212
  .spectrum-Picker {
214
213
  width: 100%;
215
214
  box-shadow: none;
@@ -229,9 +228,6 @@
229
228
  .spectrum-Picker-label.auto-width.is-placeholder {
230
229
  padding-right: 2px;
231
230
  }
232
- .auto-width .spectrum-Menu-item {
233
- padding-right: var(--spacing-xl);
234
- }
235
231
 
236
232
  /* Icon and colour alignment */
237
233
  .spectrum-Menu-checkmark {
@@ -241,27 +237,48 @@
241
237
  .option-extra {
242
238
  padding-right: 8px;
243
239
  }
240
+ .option-extra.icon {
241
+ margin: 0 -1px;
242
+ }
243
+
244
+ /* Popover */
245
+ .popover-content {
246
+ display: contents;
247
+ }
248
+ .popover-content.auto-width .spectrum-Menu-itemLabel {
249
+ white-space: nowrap;
250
+ overflow: hidden;
251
+ text-overflow: ellipsis;
252
+ }
253
+ .popover-content:not(.auto-width) .spectrum-Menu-itemLabel {
254
+ width: 0;
255
+ flex: 1 1 auto;
256
+ }
257
+ .popover-content.auto-width .spectrum-Menu-item {
258
+ padding-right: var(--spacing-xl);
259
+ }
260
+ .spectrum-Menu-item.is-disabled {
261
+ pointer-events: none;
262
+ }
244
263
 
245
- .spectrum-Popover :global(.spectrum-Search) {
264
+ /* Search styles inside popover */
265
+ .popover-content :global(.spectrum-Search) {
246
266
  margin-top: -1px;
247
267
  margin-left: -1px;
248
268
  width: calc(100% + 2px);
249
269
  }
250
- .spectrum-Popover :global(.spectrum-Search input) {
270
+ .popover-content :global(.spectrum-Search input) {
251
271
  height: auto;
252
272
  border-bottom-left-radius: 0;
253
273
  border-bottom-right-radius: 0;
254
274
  padding-top: var(--spectrum-global-dimension-size-100);
255
275
  padding-bottom: var(--spectrum-global-dimension-size-100);
256
276
  }
257
- .spectrum-Popover :global(.spectrum-Search .spectrum-ClearButton) {
277
+ .popover-content :global(.spectrum-Search .spectrum-ClearButton) {
258
278
  right: 1px;
259
279
  top: 2px;
260
280
  }
261
- .spectrum-Popover :global(.spectrum-Search .spectrum-Textfield-icon) {
281
+ .popover-content :global(.spectrum-Search .spectrum-Textfield-icon) {
262
282
  top: 9px;
263
283
  }
264
- .spectrum-Menu-item.is-disabled {
265
- pointer-events: none;
266
- }
267
284
  </style>
@@ -18,8 +18,11 @@
18
18
  export let autoWidth = false
19
19
  export let autocomplete = false
20
20
  export let sort = false
21
+
21
22
  const dispatch = createEventDispatcher()
23
+
22
24
  let open = false
25
+
23
26
  $: fieldText = getFieldText(value, options, placeholder)
24
27
  $: fieldIcon = getFieldAttribute(getOptionIcon, value, options)
25
28
  $: fieldColour = getFieldAttribute(getOptionColour, value, options)
@@ -6,7 +6,6 @@
6
6
  export let id = null
7
7
  export let text = null
8
8
  export let disabled = false
9
- export let dataCy = null
10
9
 
11
10
  const dispatch = createEventDispatcher()
12
11
  const onChange = event => {
@@ -16,7 +15,6 @@
16
15
 
17
16
  <div class="spectrum-Switch spectrum-Switch--emphasized">
18
17
  <input
19
- data-cy={dataCy}
20
18
  checked={value}
21
19
  {disabled}
22
20
  on:change={onChange}
@@ -11,7 +11,6 @@
11
11
  export let readonly = false
12
12
  export let updateOnChange = true
13
13
  export let quiet = false
14
- export let dataCy
15
14
  export let align
16
15
  export let autofocus = false
17
16
 
@@ -89,7 +88,6 @@
89
88
  {disabled}
90
89
  {readonly}
91
90
  {id}
92
- data-cy={dataCy}
93
91
  value={value || ""}
94
92
  placeholder={placeholder || ""}
95
93
  on:click
@@ -112,8 +110,4 @@
112
110
  .spectrum-Textfield {
113
111
  width: 100%;
114
112
  }
115
- input:disabled {
116
- color: var(--spectrum-global-color-gray-600) !important;
117
- -webkit-text-fill-color: var(--spectrum-global-color-gray-600) !important;
118
- }
119
113
  </style>
@@ -0,0 +1,50 @@
1
+ <script>
2
+ import Field from "./Field.svelte"
3
+ import EnvDropdown from "./Core/EnvDropdown.svelte"
4
+ import { createEventDispatcher } from "svelte"
5
+
6
+ export let value = null
7
+ export let label = null
8
+ export let labelPosition = "above"
9
+ export let placeholder = null
10
+ export let type = "text"
11
+ export let disabled = false
12
+ export let readonly = false
13
+ export let error = null
14
+ export let updateOnChange = true
15
+ export let quiet = false
16
+ export let autofocus
17
+ export let variables
18
+ export let showModal
19
+ export let environmentVariablesEnabled
20
+ export let handleUpgradePanel
21
+ const dispatch = createEventDispatcher()
22
+ const onChange = e => {
23
+ value = e.detail
24
+ dispatch("change", e.detail)
25
+ }
26
+ </script>
27
+
28
+ <Field {label} {labelPosition} {error}>
29
+ <EnvDropdown
30
+ {updateOnChange}
31
+ {error}
32
+ {disabled}
33
+ {readonly}
34
+ {value}
35
+ {placeholder}
36
+ {type}
37
+ {quiet}
38
+ {autofocus}
39
+ {variables}
40
+ {showModal}
41
+ {environmentVariablesEnabled}
42
+ {handleUpgradePanel}
43
+ on:change={onChange}
44
+ on:click
45
+ on:input
46
+ on:blur
47
+ on:focus
48
+ on:keyup
49
+ />
50
+ </Field>
@@ -13,7 +13,6 @@
13
13
  export let error = null
14
14
  export let updateOnChange = true
15
15
  export let quiet = false
16
- export let dataCy
17
16
  export let autofocus
18
17
 
19
18
  const dispatch = createEventDispatcher()
@@ -25,7 +24,6 @@
25
24
 
26
25
  <Field {label} {labelPosition} {error}>
27
26
  <TextField
28
- {dataCy}
29
27
  {updateOnChange}
30
28
  {error}
31
29
  {disabled}
@@ -14,7 +14,6 @@
14
14
  export let error = null
15
15
  export let updateOnChange = true
16
16
  export let quiet = false
17
- export let dataCy
18
17
  export let autofocus
19
18
  export let options = []
20
19
 
@@ -32,7 +31,6 @@
32
31
 
33
32
  <Field {label} {labelPosition} {error}>
34
33
  <InputDropdown
35
- {dataCy}
36
34
  {updateOnChange}
37
35
  {error}
38
36
  {disabled}
@@ -21,7 +21,6 @@
21
21
  export let getSecondaryOptionColour = () => {}
22
22
  export let getSecondaryOptionIcon = () => {}
23
23
  export let quiet = false
24
- export let dataCy
25
24
  export let autofocus
26
25
  export let primaryOptions = []
27
26
  export let secondaryOptions = []
@@ -98,7 +97,6 @@
98
97
  <PickerDropdown
99
98
  {searchTerm}
100
99
  {autocomplete}
101
- {dataCy}
102
100
  {error}
103
101
  {disabled}
104
102
  {readonly}
@@ -9,7 +9,6 @@
9
9
  export let text = null
10
10
  export let disabled = false
11
11
  export let error = null
12
- export let dataCy = null
13
12
 
14
13
  const dispatch = createEventDispatcher()
15
14
  const onChange = e => {
@@ -19,5 +18,5 @@
19
18
  </script>
20
19
 
21
20
  <Field {label} {labelPosition} {error}>
22
- <Switch {dataCy} {error} {disabled} {text} {value} on:change={onChange} />
21
+ <Switch {error} {disabled} {text} {value} on:change={onChange} />
23
22
  </Field>
@@ -19,6 +19,7 @@
19
19
  .icon {
20
20
  width: 28px;
21
21
  height: 28px;
22
+ flex: 0 0 28px;
22
23
  display: grid;
23
24
  place-items: center;
24
25
  border-radius: 50%;
@@ -34,6 +35,7 @@
34
35
  .icon.size--S {
35
36
  width: 22px;
36
37
  height: 22px;
38
+ flex: 0 0 22px;
37
39
  }
38
40
  .icon.size--S :global(.spectrum-Icon) {
39
41
  width: 16px;
@@ -46,6 +48,7 @@
46
48
  .icon.size--L {
47
49
  width: 40px;
48
50
  height: 40px;
51
+ flex: 0 0 40px;
49
52
  }
50
53
  .icon.size--L :global(.spectrum-Icon) {
51
54
  width: 28px;
@@ -56,5 +56,6 @@
56
56
  --spectrum-semantic-positive-icon-color: #2d9d78;
57
57
  --spectrum-semantic-negative-icon-color: #e34850;
58
58
  min-width: 100px;
59
+ margin: 0;
59
60
  }
60
61
  </style>
@@ -21,6 +21,7 @@
21
21
  label {
22
22
  padding: 0;
23
23
  white-space: nowrap;
24
+ color: var(--spectrum-global-color-gray-600);
24
25
  }
25
26
 
26
27
  .muted {
@@ -1,32 +1,101 @@
1
1
  <script>
2
+ import { setContext } from "svelte"
3
+ import clickOutside from "../Actions/click_outside"
4
+
2
5
  export let wide = false
3
- export let maxWidth = "80ch"
6
+ export let narrow = false
4
7
  export let noPadding = false
8
+
9
+ let sidePanelVisble = false
10
+
11
+ setContext("side-panel", {
12
+ open: () => (sidePanelVisble = true),
13
+ close: () => (sidePanelVisble = false),
14
+ })
5
15
  </script>
6
16
 
7
- <div style="--max-width: {maxWidth}" class:wide class:noPadding>
8
- <slot />
17
+ <div class="page">
18
+ <div class="main">
19
+ <div class="content" class:wide class:noPadding class:narrow>
20
+ <slot />
21
+ <div class="fix-scroll-padding" />
22
+ </div>
23
+ </div>
24
+ <div
25
+ id="side-panel"
26
+ class:visible={sidePanelVisble}
27
+ use:clickOutside={() => {
28
+ sidePanelVisble = false
29
+ }}
30
+ >
31
+ <slot name="side-panel" />
32
+ </div>
9
33
  </div>
10
34
 
11
35
  <style>
12
- div {
36
+ .page {
37
+ position: relative;
38
+ }
39
+ .page,
40
+ .main {
41
+ display: flex;
42
+ flex-direction: row;
43
+ justify-content: flex-start;
44
+ align-items: stretch;
45
+ flex: 1 1 auto;
46
+ overflow-x: hidden;
47
+ }
48
+ .main {
49
+ overflow: auto;
50
+ }
51
+ .content {
13
52
  display: flex;
14
53
  flex-direction: column;
15
54
  justify-content: flex-start;
16
55
  align-items: stretch;
17
- max-width: var(--max-width);
56
+ max-width: 1080px;
18
57
  margin: 0 auto;
19
- padding: calc(var(--spacing-xl) * 2);
20
- min-height: calc(100% - var(--spacing-xl) * 4);
58
+ flex: 1 1 auto;
59
+ padding: 50px 50px 0 50px;
60
+ z-index: 1;
21
61
  }
22
-
23
- .wide {
62
+ .fix-scroll-padding {
63
+ content: "";
64
+ display: block;
65
+ flex: 0 0 50px;
66
+ }
67
+ .content.wide {
24
68
  max-width: none;
25
- margin: 0;
69
+ }
70
+ .content.narrow {
71
+ max-width: 840px;
72
+ }
73
+ #side-panel {
74
+ position: absolute;
75
+ right: 0;
76
+ top: 0;
77
+ padding: 24px;
78
+ background: var(--background);
79
+ border-left: var(--border-light);
80
+ width: 320px;
81
+ max-width: calc(100vw - 48px - 48px);
82
+ overflow: auto;
83
+ overflow-x: hidden;
84
+ transform: translateX(100%);
85
+ transition: transform 130ms ease-out;
86
+ height: calc(100% - 48px);
87
+ z-index: 2;
88
+ }
89
+ #side-panel.visible {
90
+ transform: translateX(0);
26
91
  }
27
92
 
28
- .noPadding {
29
- padding: 0px;
30
- margin: 0px;
93
+ @media (max-width: 640px) {
94
+ .content {
95
+ padding: 24px;
96
+ max-width: calc(100vw - 48px) !important;
97
+ width: calc(100vw - 48px) !important;
98
+ overflow: auto;
99
+ }
31
100
  }
32
101
  </style>
@@ -1,5 +1,6 @@
1
1
  <script>
2
2
  import "@spectrum-css/link/dist/index-vars.css"
3
+ import { createEventDispatcher } from "svelte"
3
4
 
4
5
  export let href = "#"
5
6
  export let size = "M"
@@ -9,10 +10,12 @@
9
10
  export let overBackground = false
10
11
  export let target
11
12
  export let download
13
+
14
+ const dispatch = createEventDispatcher()
12
15
  </script>
13
16
 
14
17
  <a
15
- on:click
18
+ on:click={e => dispatch("click") && e.stopPropagation()}
16
19
  {href}
17
20
  {target}
18
21
  {download}