@soleil-se/config-svelte 1.13.0 → 1.15.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 (36) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/actions/resizer.js +6 -0
  3. package/components/Checkbox/Component.svelte +6 -5
  4. package/components/Checkbox/README.md +1 -0
  5. package/components/CheckboxGroup/Component.svelte +7 -5
  6. package/components/CheckboxGroup/README.md +2 -0
  7. package/components/CustomList/Component.svelte +7 -6
  8. package/components/CustomList/README.md +1 -0
  9. package/components/CustomList/internal/SortableItem.svelte +1 -0
  10. package/components/CustomSelector/Component.svelte +6 -4
  11. package/components/CustomSelector/README.md +2 -10
  12. package/components/DropdownSelector/Component.svelte +7 -6
  13. package/components/DropdownSelector/README.md +1 -0
  14. package/components/ImageSelector/Component.svelte +7 -5
  15. package/components/ImageSelector/README.md +13 -0
  16. package/components/InputField/Component.svelte +13 -9
  17. package/components/InputField/README.md +2 -0
  18. package/components/LinkSelector/Component.svelte +12 -10
  19. package/components/LinkSelector/README.md +2 -0
  20. package/components/ListSelector/Component.svelte +4 -3
  21. package/components/ListSelector/README.md +2 -0
  22. package/components/NodeSelector/Component.svelte +8 -5
  23. package/components/NodeSelector/README.md +1 -0
  24. package/components/NumberSpinner/Component.svelte +3 -2
  25. package/components/NumberSpinner/README.md +1 -0
  26. package/components/Panel/Component.svelte +4 -3
  27. package/components/Panel/README.md +2 -0
  28. package/components/RadioGroup/Component.svelte +4 -3
  29. package/components/RadioGroup/README.md +2 -0
  30. package/components/SelectField/Component.svelte +4 -3
  31. package/components/SelectField/README.md +1 -0
  32. package/components/TagSelector/Component.svelte +10 -8
  33. package/components/TagSelector/README.md +1 -0
  34. package/components/TextList/Component.svelte +4 -3
  35. package/components/TextList/README.md +1 -0
  36. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.15.0] - 2022-09-15
9
+
10
+ - Required was not re-evaluated properly in [InputField](./components/InputField), [NodeSelector](./components/NodeSelector) and [TagSelector](./components/TagSelector).
11
+ - Add `show` prop for all components to toggle visibility without re-rendering.
12
+
13
+ ## [1.14.0] - 2022-07-07
14
+
15
+ - Add default slot for [ImageSelector](./components/ImageSelector).
16
+ - Margin fix for [RadioGroup](./components/RadioGroup).
17
+
8
18
  ## [1.13.0] - 2022-06-23
9
19
 
10
20
  - Add `icon` prop to CustomList for setting an icon to the list items.
@@ -45,6 +45,12 @@ const resizer = (element) => {
45
45
  };
46
46
 
47
47
  element.addEventListener('mousedown', startResize, false);
48
+
49
+ document.documentElement.addEventListener('initialized', () => {
50
+ if (targetElement.offsetHeight > targetMinHeight) {
51
+ targetElement.style.height = `${targetElement.scrollHeight + 30}px`;
52
+ }
53
+ });
48
54
  };
49
55
 
50
56
  export default resizer;
@@ -10,6 +10,7 @@
10
10
  export let name;
11
11
  export let disabled = false;
12
12
  export let checked = false;
13
+ export let show = true;
13
14
  export let value;
14
15
  value = name ? values[name] ?? value ?? checked : value;
15
16
 
@@ -24,12 +25,12 @@
24
25
 
25
26
  <!--
26
27
  @component
27
- A checkbox component.
28
+ A checkbox component.
28
29
 
29
- [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/Checkbox/)
30
+ [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/Checkbox/)
30
31
  -->
31
32
 
32
- <div class="form-group {className}">
33
+ <div class="form-group {className}" class:hidden={!show}>
33
34
  <input
34
35
  bind:checked={value}
35
36
  {name}
@@ -55,13 +56,13 @@
55
56
  width: 16px;
56
57
  height: 16px;
57
58
  margin-right: 5px;
59
+ content: '';
58
60
  border: 1px solid #cacece;
59
61
  border-radius: 3px;
60
- content: '';
61
62
  }
62
63
 
63
64
  :global(.focus-visible) + &::before {
64
- box-shadow: 0 0 0 0.2rem rgba(66, 139, 202, 0.4);
65
+ box-shadow: 0 0 0 0.2rem rgb(66 139 202 / 40%);
65
66
  }
66
67
 
67
68
  input:checked + &::before {
@@ -10,6 +10,7 @@ export let label;
10
10
  export let name;
11
11
  export let disabled = false;
12
12
  export let checked = false;
13
+ export let show = true;
13
14
  export let value;
14
15
  ```
15
16
 
@@ -10,9 +10,11 @@
10
10
  export let options;
11
11
  export let legend;
12
12
  export let disabled = false;
13
+ export let show = true;
13
14
  export let value = [];
14
15
  value = name ? values[name] || value : value;
15
16
 
17
+
16
18
  let className = '';
17
19
  export { className as class };
18
20
 
@@ -33,10 +35,10 @@
33
35
  @component
34
36
  A checkbox group component.
35
37
 
36
- [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/CheckboxGroup/)
38
+ [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/CheckboxGroup/)
37
39
  -->
38
40
 
39
- <fieldset class="form-group {className}">
41
+ <fieldset class="form-group {className}" class:hidden={!show}>
40
42
  <legend>{legend}</legend>
41
43
  {#each options as option, index}
42
44
  <input
@@ -67,8 +69,8 @@
67
69
 
68
70
  legend {
69
71
  margin-bottom: 7px;
70
- font-weight: bold;
71
72
  font-size: 14px;
73
+ font-weight: bold;
72
74
  border-bottom: 0;
73
75
  }
74
76
 
@@ -84,13 +86,13 @@
84
86
  width: 16px;
85
87
  height: 16px;
86
88
  margin-right: 5px;
89
+ content: '';
87
90
  border: 1px solid #cacece;
88
91
  border-radius: 3px;
89
- content: '';
90
92
  }
91
93
 
92
94
  :global(.focus-visible) + &::before {
93
- box-shadow: 0 0 0 0.2rem rgba(66, 139, 202, 0.4);
95
+ box-shadow: 0 0 0 0.2rem rgb(66 139 202 / 40%);
94
96
  }
95
97
 
96
98
  input:checked + &::before {
@@ -15,6 +15,8 @@ export let options;
15
15
  export let legend;
16
16
  // Disable input, or provide an array of disabled options: ['value1'].
17
17
  export let disabled = false;
18
+ // Show and hide compoment without re-rendering.
19
+ export let show = true;
18
20
  // Used if bound to value.
19
21
  export let value;
20
22
  ```
@@ -1,9 +1,9 @@
1
1
  <script>
2
-
2
+
3
3
  import { createEventDispatcher, onMount } from 'svelte';
4
4
  import { generateId, addGeneratedIds } from '../../utils';
5
5
  import { resizer } from '../../actions';
6
-
6
+
7
7
  import Sortable from './internal/Sortable.svelte';
8
8
  import SortableItem from './internal/SortableItem.svelte';
9
9
  import DataHolder from './internal/DataHolder.svelte';
@@ -17,11 +17,12 @@
17
17
  export let required = false;
18
18
  export let name = undefined;
19
19
  export let disabled = false;
20
+ export let show = true;
20
21
  export let icon;
21
22
 
22
23
  export let value = [];
23
24
  value = name ? values[name] ?? value : value;
24
-
25
+
25
26
  addGeneratedIds(value);
26
27
 
27
28
  const domId = generateId();
@@ -84,10 +85,10 @@
84
85
 
85
86
  <!--
86
87
  @component
87
- Custom list component for adding multiple modal windows containting configuration components and
88
+ Custom list component for adding multiple modal windows containting configuration components and
88
89
  sorting them.
89
90
 
90
- [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/CustomList/)
91
+ [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/CustomList/)
91
92
  -->
92
93
 
93
94
  {#each modals as id, index (id)}
@@ -96,7 +97,7 @@
96
97
  </EditModal>
97
98
  {/each}
98
99
 
99
- <div class="form-group">
100
+ <div class="form-group" class:hidden={!show}>
100
101
  <label for={domId} class="control-label {required ? 'control-label--required' : ''}">
101
102
  {label}
102
103
  </label>
@@ -14,6 +14,7 @@ export let label;
14
14
  export let required = false;
15
15
  export let name = undefined;
16
16
  export let disabled = false;
17
+ export let show = true;
17
18
  export let icon;
18
19
  export let value = [];
19
20
  ```
@@ -36,6 +36,7 @@
36
36
 
37
37
  <style lang="scss">
38
38
  .list-component__item {
39
+ min-height: 26px;
39
40
  padding: 3px;
40
41
  cursor: grab;
41
42
  user-select: none;
@@ -14,6 +14,8 @@
14
14
  export let required = false;
15
15
  export let disabled = false;
16
16
  export let multiple = false;
17
+ export let show = true;
18
+
17
19
  export let value = multiple ? [] : '';
18
20
 
19
21
  value = name ? values[name] ?? value : value;
@@ -29,19 +31,19 @@
29
31
  dispatch('input', value);
30
32
  dispatch('change', value);
31
33
  });
32
-
34
+
33
35
  jQuery(el).val(value).trigger('change');
34
36
  });
35
37
  </script>
36
38
 
37
39
  <!--
38
40
  @component
39
- Wrapper component for Sitevision [Custom selector](https://developer.sitevision.se/docs/webapps/webapps-2/configuration/sitevision-components#h-Customselectorsince91).
41
+ Wrapper component for Sitevision [Custom selector](https://developer.sitevision.se/docs/webapps/webapps-2/configuration/sitevision-components#h-Customselectorsince91).
40
42
 
41
- [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/CustomSelector/)
43
+ [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/CustomSelector/)
42
44
  -->
43
45
 
44
- <div class="form-group {className}">
46
+ <div class="form-group {className}" class:hidden={!show}>
45
47
  <label for={id} class="control-label {required ? 'control-label--required' : ''}">{label}</label>
46
48
  <select
47
49
  {id}
@@ -3,16 +3,7 @@
3
3
  Wrapper component for Sitevision [Custom selector](https://developer.sitevision.se/docs/webapps/webapps-2/configuration/sitevision-components#h-Customselectorsince91).
4
4
 
5
5
  ![CustomSelector](../../images/CustomSelector.png)
6
-
7
- <!-- TOC -->
8
-
9
- - [Props](#props)
10
- - [Example](#example)
11
- - [Standard](#standard)
12
- - [Advanced](#advanced)
13
- - [Slots](#slots)
14
-
15
- <!-- /TOC -->
6
+ ![CustomSelectorMultiple](../../images/CustomSelector_multiple.png)
16
7
 
17
8
  ## Props
18
9
 
@@ -26,6 +17,7 @@ export let placeholder;
26
17
  export let required = false;
27
18
  export let disabled = false;
28
19
  export let multiple = false;
20
+ export let show = true;
29
21
  export let value = '';
30
22
  ```
31
23
 
@@ -12,6 +12,7 @@
12
12
  export let selectable = [];
13
13
  export let required = false;
14
14
  export let disabled = false;
15
+ export let show = true;
15
16
  export let value = '';
16
17
 
17
18
  selectable = Array.isArray(selectable) ? selectable.join(',') : selectable;
@@ -39,7 +40,7 @@
39
40
  .on('sv:loaded', ({ target }) => {
40
41
  setValue(target);
41
42
  });
42
-
43
+
43
44
  /*
44
45
  * The sv:loaded event is only triggered on initial load, if the component rerenders check if any
45
46
  * children are present and set value of select element.
@@ -52,12 +53,12 @@
52
53
 
53
54
  <!--
54
55
  @component
55
- Wrapper component for Sitevision [selects](https://developer.sitevision.se/docs/webapps/webapps-2/configuration/sitevision-components).
56
+ Wrapper component for Sitevision [selects](https://developer.sitevision.se/docs/webapps/webapps-2/configuration/sitevision-components).
56
57
 
57
- [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/DropdownSelector/)
58
+ [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/DropdownSelector/)
58
59
  -->
59
60
 
60
- <div class="form-group {className}" {hidden}>
61
+ <div class="form-group {className}" {hidden} class:hidden={!show}>
61
62
  <label for={id} class="control-label {required ? 'control-label--required' : ''}">{label}</label>
62
63
  <select
63
64
  {id}
@@ -89,11 +90,11 @@
89
90
  }
90
91
 
91
92
  .select2-container.select2-container-disabled .select2-choice {
93
+ cursor: not-allowed;
92
94
  background-color: white;
93
95
  background-image: none;
94
96
  border: 1px solid #ccc;
95
- cursor: not-allowed;
96
- opacity: 70%;
97
+ opacity: 0.7;
97
98
  }
98
99
 
99
100
  .select2-container.select2-container-disabed .select2-choice .select2-arrow {
@@ -26,6 +26,7 @@ export let type = 'metadata';
26
26
  export let selectable = [];
27
27
  export let required = false;
28
28
  export let disabled = false;
29
+ export let show = true;
29
30
  export let value = '';
30
31
  ```
31
32
 
@@ -19,8 +19,9 @@
19
19
  alt = name ? values[`${name}Alt`] ?? alt : alt;
20
20
  export let hideDecorative = false;
21
21
  export let decorative = false;
22
+ export let show;
22
23
  $: decorative = hideDecorative ? false : decorative;
23
-
24
+
24
25
  let imageArchiveAlt = '';
25
26
  let useCustomAlt = !!alt;
26
27
  let customAlt = alt;
@@ -36,7 +37,7 @@
36
37
  if (node) {
37
38
  const response = await fetch(`/rest-api/1/0/${node}/properties`).then((res) => res.json());
38
39
  imageArchiveAlt = response.alt || '';
39
-
40
+
40
41
  setCustomValidity();
41
42
  } else {
42
43
  imageArchiveAlt = '';
@@ -64,10 +65,10 @@
64
65
  @component
65
66
  Custom panel component for selecting an image.
66
67
 
67
- [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/ImageSelector/)
68
+ [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/ImageSelector/)
68
69
  -->
69
70
 
70
- <Panel {heading}>
71
+ <Panel {heading} {show}>
71
72
  <NodeSelector
72
73
  name="{name}Node"
73
74
  label={i18n('selectImage')}
@@ -76,7 +77,7 @@
76
77
  on:change={onChange}
77
78
  {required}
78
79
  />
79
- <div>
80
+ <div class="form-group">
80
81
  {#if !hideDecorative}
81
82
  <Checkbox
82
83
  class="checkbox-group"
@@ -103,6 +104,7 @@
103
104
  />
104
105
  {/if}
105
106
  </div>
107
+ <slot />
106
108
  </Panel>
107
109
 
108
110
  <style>
@@ -10,6 +10,7 @@ Custom panel component for selecting an image.
10
10
  - [Example](#example)
11
11
  - [Standard](#standard)
12
12
  - [Advanced](#advanced)
13
+ - [Slots](#slots)
13
14
 
14
15
  <!-- /TOC -->
15
16
 
@@ -42,6 +43,8 @@ export let node;
42
43
  export let alt;
43
44
  // If image is decorative, since 1.11.0
44
45
  export let decorative = false;
46
+ // Show and hide compoment without re-rendering.
47
+ export let show = true;
45
48
  // If the checkbox for decorative image should be hidden, since 1.11.0
46
49
  export let hideDecorative = false;
47
50
  ```
@@ -75,3 +78,13 @@ export let hideDecorative = false;
75
78
 
76
79
  <ImageSelector bind:node={values.imageNode} bind:alt={values.imageAlt} />
77
80
  ```
81
+
82
+ ## Slots
83
+
84
+ Default slot
85
+
86
+ ```svelte
87
+ <ImageSelector name="image" heading="Bild" />
88
+ <p class="help-block">Some helpful text.</p>
89
+ </ImageSelector>
90
+ ```
@@ -27,15 +27,17 @@
27
27
  export let value = '';
28
28
  /** @type {function} */
29
29
  export let action = prefixHttps;
30
-
30
+ /** @type {boolean} */
31
+ export let show = true;
32
+
31
33
  let className = '';
32
34
  /** @type {string} */
33
35
  export { className as class };
34
-
36
+
35
37
  value = name ? values[name] ?? value : value;
36
38
 
37
39
  $: isTextarea = type === 'textarea';
38
- $: required = required && !disabled && !readonly;
40
+ $: isRequired = required && !disabled && !readonly;
39
41
 
40
42
  const onInput = ({ target }) => {
41
43
  value = type.match(/^(number|range)$/) ? +target.value : target.value;
@@ -46,19 +48,21 @@
46
48
 
47
49
  <!--
48
50
  @component
49
- Component for input fields and textareas.
51
+ Component for input fields and textareas.
50
52
 
51
- [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/InputField/)
53
+ [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/InputField/)
52
54
  -->
53
55
 
54
- <div class="form-group {className}">
55
- <label for={id} class="control-label {required ? 'control-label--required' : ''}">{label}</label>
56
+ <div class="form-group {className}" class:hidden={!show}>
57
+ <label for={id} class="control-label {isRequired ? 'control-label--required' : ''}">
58
+ {label}
59
+ </label>
56
60
  {#if isTextarea}
57
61
  <textarea
58
62
  class="form-control"
63
+ required={isRequired}
59
64
  {id}
60
65
  {name}
61
- {required}
62
66
  {disabled}
63
67
  {readonly}
64
68
  {value}
@@ -69,10 +73,10 @@
69
73
  {:else}
70
74
  <input
71
75
  class="form-control"
76
+ required={isRequired}
72
77
  {id}
73
78
  {name}
74
79
  {type}
75
- {required}
76
80
  {disabled}
77
81
  {readonly}
78
82
  {value}
@@ -32,6 +32,8 @@ export let required = false;
32
32
  export let disabled = false;
33
33
  // If field is readonly.
34
34
  export let readonly = false;
35
+ // Show and hide compoment without re-rendering.
36
+ export let show = true;
35
37
  // Max length of input.
36
38
  export let maxlength = undefined;
37
39
  // Validation pattern.
@@ -1,6 +1,6 @@
1
1
  <script>
2
2
  import { createEventDispatcher } from 'svelte';
3
- import { show, prefixMail, prefixTel } from '../../actions';
3
+ import { show as showAction, prefixMail, prefixTel } from '../../actions';
4
4
  import i18n from './i18n';
5
5
 
6
6
  import Panel from '../Panel';
@@ -17,7 +17,9 @@
17
17
  export let disabled = false;
18
18
  export let required = false;
19
19
  export let types = ['internal', 'external', 'file'];
20
+ export let show;
20
21
  export let value;
22
+
21
23
  value = getSavedValue({ value, name, types });
22
24
 
23
25
  let className = '';
@@ -56,10 +58,10 @@
56
58
  @component
57
59
  Custom panel component for selecting a link.
58
60
 
59
- [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/LinkSelector/)
61
+ [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/LinkSelector/)
60
62
  -->
61
63
 
62
- <Panel {heading} class={className} {required}>
64
+ <Panel {heading} class={className} {required} {show}>
63
65
  <slot name="top" />
64
66
  {#if selectableTypes.length > 1}
65
67
  <div class="sr-legend form-group">
@@ -74,7 +76,7 @@
74
76
  </div>
75
77
  {/if}
76
78
 
77
- <div class="sr-label form-group form-group--internal" use:show={isInternal}>
79
+ <div class="sr-label form-group form-group--internal" use:showAction={isInternal}>
78
80
  <NodeSelector
79
81
  name={name && isInternal ? `${name}Value` : undefined}
80
82
  bind:value={selected.internal}
@@ -85,7 +87,7 @@
85
87
  required={required && isInternal}
86
88
  />
87
89
  </div>
88
- <div class="sr-label form-group form-group--external" use:show={isExternal}>
90
+ <div class="sr-label form-group form-group--external" use:showAction={isExternal}>
89
91
  <InputField
90
92
  name={name && isExternal ? `${name}Value` : undefined}
91
93
  bind:value={selected.external}
@@ -96,7 +98,7 @@
96
98
  required={required && isExternal}
97
99
  />
98
100
  </div>
99
- <div class="sr-label form-group form-group--file" use:show={isFile}>
101
+ <div class="sr-label form-group form-group--file" use:showAction={isFile}>
100
102
  <NodeSelector
101
103
  name={name && isFile ? `${name}Value` : undefined}
102
104
  bind:value={selected.file}
@@ -108,7 +110,7 @@
108
110
  />
109
111
  </div>
110
112
 
111
- <div class="sr-label form-group form-group--mail" use:show={isMail}>
113
+ <div class="sr-label form-group form-group--mail" use:showAction={isMail}>
112
114
  <InputField
113
115
  name={name && isMail ? `${name}Value` : undefined}
114
116
  bind:value={selected.mail}
@@ -119,7 +121,7 @@
119
121
  required={required && isMail}
120
122
  />
121
123
  </div>
122
- <div class="sr-label form-group form-group--tel" use:show={isTel}>
124
+ <div class="sr-label form-group form-group--tel" use:showAction={isTel}>
123
125
  <InputField
124
126
  name={name && isTel ? `${name}Value` : undefined}
125
127
  bind:value={selected.tel}
@@ -148,11 +150,11 @@
148
150
  position: absolute;
149
151
  width: 1px;
150
152
  height: 1px;
151
- margin: -1px;
152
153
  padding: 0;
154
+ margin: -1px;
153
155
  overflow: hidden;
154
- border: 0;
155
156
  clip: rect(0, 0, 0, 0);
157
+ border: 0;
156
158
  }
157
159
 
158
160
  .form-group--external,
@@ -52,6 +52,8 @@ export let name;
52
52
  export let disabled = false;
53
53
  // If control is required.
54
54
  export let required = false;
55
+ // Show and hide compoment without re-rendering.
56
+ export let show = true;
55
57
  // What types of links to be selectable, must provide at least one.
56
58
  export let types = ['internal', 'external', 'file', 'mail', 'tel'];
57
59
  // Used if bound to value.
@@ -12,6 +12,7 @@
12
12
  export let required = false;
13
13
  export let disabled = false;
14
14
  export let sortable = false;
15
+ export let show = true;
15
16
  export let selectable = [];
16
17
  export let value = [];
17
18
 
@@ -45,10 +46,10 @@
45
46
  @component
46
47
  Wrapper for Sitevision [list components](https://developer.sitevision.se/docs/webapps/webapps-2/configuration/sitevision-components#h-Listcomponents).
47
48
 
48
- [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/ListSelector/)
49
+ [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/ListSelector/)
49
50
  -->
50
51
 
51
- <div class="form-group" class:disabled>
52
+ <div class="form-group" class:disabled class:hidden={!show}>
52
53
  <label for={id} class="control-label {required ? 'control-label--required' : ''}">{label}</label>
53
54
  <input
54
55
  {id}
@@ -77,7 +78,7 @@
77
78
  bottom: 0;
78
79
  z-index: 90;
79
80
  width: 100%;
80
- background-color: rgb(255 255 255 / 30%);
81
81
  cursor: not-allowed;
82
+ background-color: rgb(255 255 255 / 30%);
82
83
  }
83
84
  </style>
@@ -36,6 +36,8 @@ export let required = false;
36
36
  export let disabled = false;
37
37
  // If list is sortable, since Sitevision 9.1.
38
38
  export let sortable = false;
39
+ // Show and hide compoment without re-rendering.
40
+ export let show = true;
39
41
  // Selectable types
40
42
  export let selectable = [];
41
43
 
@@ -16,6 +16,7 @@
16
16
  export let removable = true;
17
17
  export let selectable = [];
18
18
  export let value = '';
19
+ export let show = true;
19
20
 
20
21
  selectable = Array.isArray(selectable) ? selectable.join(',') : selectable;
21
22
  value = name ? values[name] ?? value : value;
@@ -23,7 +24,7 @@
23
24
  let className = '';
24
25
  export { className as class };
25
26
 
26
- $: required = required && !disabled && !readonly;
27
+ $: isRequired = required && !disabled && !readonly;
27
28
  $: component = type.endsWith('-selector') ? type : `${type}-selector`;
28
29
 
29
30
  let displayName = value ? value.displayName || value.path : '';
@@ -58,18 +59,20 @@
58
59
  @component
59
60
  Wrapper for Sitevision [input components](https://developer.sitevision.se/docs/webapps/webapps-2/configuration/sitevision-components) used for selecting nodes.
60
61
 
61
- [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/NodeSelector/)
62
+ [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/NodeSelector/)
62
63
  -->
63
64
 
64
- <div class="form-group {className}">
65
- <label for={id} class="control-label {required ? 'control-label--required' : ''}">{label}</label>
65
+ <div class="form-group {className}" class:hidden={!show}>
66
+ <label for={id} class="control-label {isRequired ? 'control-label--required' : ''}">
67
+ {label}
68
+ </label>
66
69
  <input
67
70
  class="form-control"
68
71
  {id}
69
72
  {name}
70
- {required}
71
73
  {disabled}
72
74
  {readonly}
75
+ required={isRequired}
73
76
  data-removable={removable ? '' : undefined}
74
77
  data-component={component}
75
78
  data-types={selectable}
@@ -27,6 +27,7 @@ export let required = false;
27
27
  export let disabled = false;
28
28
  export let readonly = false;
29
29
  export let removable = false;
30
+ export let show = true;
30
31
  export let selectable = [];
31
32
  export let value = '';
32
33
  ```
@@ -13,6 +13,7 @@
13
13
  export let step = 1;
14
14
  export let disabled = false;
15
15
  export let readonly = false;
16
+ export let show = true;
16
17
  export let suffix;
17
18
  export let value = min || 1;
18
19
  value = Number(name ? values[name] ?? value : value);
@@ -43,10 +44,10 @@
43
44
  @component
44
45
  Wrapper for Sitevision [number spinner](https://developer.sitevision.se/docs/webapps/webapps-2/configuration/sitevision-components).
45
46
 
46
- [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/NumberSpinner/)
47
+ [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/NumberSpinner/)
47
48
  -->
48
49
 
49
- <div class="form-group {className}">
50
+ <div class="form-group {className}" class:hidden={!show}>
50
51
  <label for={id} class="control-label">{label}</label>
51
52
  <input
52
53
  {id}
@@ -16,6 +16,7 @@ export let step = 1;
16
16
  export let suffix;
17
17
  export let disabled = false;
18
18
  export let readonly = false;
19
+ export let show = true;
19
20
  export let value = min || 1;
20
21
  export let class = '';
21
22
  ```
@@ -3,16 +3,17 @@
3
3
 
4
4
  export let heading = i18n('settings');
5
5
  export let required = false;
6
+ export let show = true;
6
7
  </script>
7
8
 
8
9
  <!--
9
10
  @component
10
11
  A panel component.
11
12
 
12
- [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/Panel/)
13
+ [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/Panel/)
13
14
  -->
14
15
 
15
- <div class="panel panel-default">
16
+ <div class="panel panel-default" class:hidden={!show}>
16
17
  <input class="sr-only" type="text" tabindex="-1" />
17
18
  <div class="panel-heading">
18
19
  <h1 class="panel-title {required && 'panel-title--required'}">{heading}</h1>
@@ -41,8 +42,8 @@
41
42
  position: relative;
42
43
  top: 1px;
43
44
  margin-left: 5px;
44
- color: #a94442;
45
45
  font-size: 18px;
46
+ color: #a94442;
46
47
  content: '*';
47
48
  }
48
49
  }
@@ -9,6 +9,8 @@
9
9
  export let heading = 'Inställningar';
10
10
  // Marks heading with asterisk to indicate that all fields are required inside
11
11
  export let required = false;
12
+ // Show and hide compoment without re-rendering.
13
+ export let show = true;
12
14
  ```
13
15
 
14
16
  ## Slots
@@ -10,6 +10,7 @@
10
10
  export let options = [];
11
11
  export let legend;
12
12
  export let disabled = false;
13
+ export let show = true;
13
14
  export let value = options[0]?.value ?? options[0] ?? '';
14
15
  value = name ? values[name] ?? value : value;
15
16
 
@@ -28,10 +29,10 @@
28
29
  @component
29
30
  A radio group component.
30
31
 
31
- [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/RadioGroup/)
32
+ [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/RadioGroup/)
32
33
  -->
33
34
 
34
- <fieldset class="form-group">
35
+ <fieldset class="form-group" class:hidden={!show}>
35
36
  <legend>{legend}</legend>
36
37
  {#each options as option, index}
37
38
  <input
@@ -48,8 +49,8 @@
48
49
  {option.label || option}
49
50
  </label>
50
51
  {/each}
52
+ <input type="hidden" {value} {name} />
51
53
  </fieldset>
52
- <input type="hidden" {value} {name} />
53
54
 
54
55
  <style lang="scss">
55
56
  legend {
@@ -14,6 +14,8 @@ export let options;
14
14
  export let legend;
15
15
  // If field is disabled, can be boolean to disable all options, or an array of disabled option values; ['value1'].
16
16
  export let disabled = false;
17
+ // Show and hide compoment without re-rendering.
18
+ export let show = true;
17
19
  // Used if bound to value.
18
20
  export let value = '';
19
21
  ```
@@ -10,6 +10,7 @@
10
10
  export let name;
11
11
  export let required = false;
12
12
  export let disabled = false;
13
+ export let show = true;
13
14
  export let options = [];
14
15
  export let value = '';
15
16
  value = name ? values[name] ?? value : value;
@@ -23,9 +24,9 @@
23
24
  @component
24
25
  A select field component.
25
26
 
26
- [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/SelectField/)
27
+ [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/SelectField/)
27
28
  -->
28
- <div class="form-group">
29
+ <div class="form-group" class:hidden={!show}>
29
30
  <label class="control-label {required ? 'control-label--required' : ''}" for={id}>{label}</label>
30
31
  <!-- svelte-ignore a11y-no-onchange -->
31
32
  <select class="form-control" bind:value {id} {disabled} {required} {name} on:change={onChange}>
@@ -41,6 +42,6 @@
41
42
  <style>
42
43
  .form-control[disabled] {
43
44
  background-color: white;
44
- opacity: 70%;
45
+ opacity: 0.7;
45
46
  }
46
47
  </style>
@@ -10,6 +10,7 @@ export let label;
10
10
  export let name;
11
11
  export let required = false;
12
12
  export let disabled = false;
13
+ export let show = true;
13
14
  export let options = [];
14
15
  export let value = '';
15
16
  ```
@@ -11,7 +11,7 @@
11
11
  export let name;
12
12
  export let required = false;
13
13
  export let disabled = false;
14
-
14
+ export let show = true;
15
15
  export let selectable = [];
16
16
  export let value = '';
17
17
 
@@ -21,7 +21,7 @@
21
21
  let className = '';
22
22
  export { className as class };
23
23
 
24
- $: required = required && !disabled;
24
+ $: isRequired = required && !disabled;
25
25
 
26
26
  const onChange = () => {
27
27
  dispatch('input', value);
@@ -31,7 +31,7 @@
31
31
  onMount(async () => {
32
32
  setupComponent(id).on('change', ({ target }) => {
33
33
  value = target.value.split(',');
34
-
34
+
35
35
  onChange();
36
36
  });
37
37
 
@@ -48,18 +48,20 @@
48
48
  @component
49
49
  Wrapper for Sitevision [tag selector](https://developer.sitevision.se/docs/webapps/webapps-2/configuration/sitevision-components).
50
50
 
51
- [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/TagSelector/)
51
+ [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/TagSelector/)
52
52
  -->
53
53
 
54
- <div class="form-group {className}">
55
- <label for={id} class="control-label {required ? 'control-label--required' : ''}">{label}</label>
54
+ <div class="form-group {className}" class:hidden={!show}>
55
+ <label for={id} class="control-label {isRequired ? 'control-label--required' : ''}">
56
+ {label}
57
+ </label>
56
58
  <input
57
59
  class="form-control"
60
+ required={isRequired}
61
+ data-component="tags-selector"
58
62
  {id}
59
63
  {name}
60
- {required}
61
64
  {disabled}
62
- data-component="tags-selector"
63
65
  {value}
64
66
  />
65
67
  {#if disabled}
@@ -21,6 +21,7 @@ export let label; // Required
21
21
  export let name; // Required
22
22
  export let required = false;
23
23
  export let disabled = false;
24
+ export let show = true;
24
25
  export let value = [];
25
26
  ```
26
27
 
@@ -16,6 +16,7 @@
16
16
  export let required = false;
17
17
  export let name = undefined;
18
18
  export let disabled = false;
19
+ export let show = true;
19
20
  export let value = [];
20
21
  value = name ? values[name] ?? value : value;
21
22
 
@@ -72,10 +73,10 @@
72
73
  @component
73
74
  Custom list component for adding multiple text values and sorting them.
74
75
 
75
- [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/TextList/)
76
+ [README](https://docs.soleilit.se/03.packages/@soleil&svelte-config/components/TextList/)
76
77
  -->
77
78
 
78
- <div class="form-group">
79
+ <div class="form-group" class:hidden={!show}>
79
80
  <label for={id} class="control-label {required ? 'control-label--required' : ''}">{label}</label>
80
81
  <div class="list-component">
81
82
  <div class="list-component__list-wrapper ui-resizable">
@@ -116,7 +117,7 @@
116
117
  bottom: 0;
117
118
  z-index: 90;
118
119
  width: 100%;
119
- background-color: rgba(255, 255, 255, 0.3);
120
120
  cursor: not-allowed;
121
+ background-color: rgb(255 255 255 / 30%);
121
122
  }
122
123
  </style>
@@ -12,6 +12,7 @@ export let label;
12
12
  export let required = false;
13
13
  export let name = undefined;
14
14
  export let disabled = false;
15
+ export let show = true;
15
16
  export let value = [];
16
17
  ```
17
18
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soleil-se/config-svelte",
3
- "version": "1.13.0",
3
+ "version": "1.15.0",
4
4
  "main": "./index.js",
5
5
  "module": "./index.js",
6
6
  "svelte": "./index.js",