@bexis2/bexis2-core-ui 0.2.31 → 0.3.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 (102) hide show
  1. package/README.md +9 -1
  2. package/dist/TableView.svelte +1 -1
  3. package/dist/components/CodeEditor/CodeEditor.svelte +2 -1
  4. package/dist/components/File/FileIcon.svelte +45 -45
  5. package/dist/components/File/FileInfo.svelte +13 -13
  6. package/dist/components/ListView.svelte +5 -5
  7. package/dist/components/Table/Table.svelte +87 -25
  8. package/dist/components/Table/TableFilter.svelte +1 -1
  9. package/dist/components/form/Checkbox.svelte +13 -13
  10. package/dist/components/form/CheckboxKvPList.svelte +16 -16
  11. package/dist/components/form/CheckboxList.svelte +10 -10
  12. package/dist/components/form/DateInput.svelte +14 -14
  13. package/dist/components/form/DropdownKvP.svelte +54 -54
  14. package/dist/components/form/DropdownKvP.svelte.d.ts +2 -2
  15. package/dist/components/form/MultiSelect.svelte +5 -6
  16. package/dist/components/form/MultiSelect.svelte.d.ts +2 -2
  17. package/dist/components/form/NumberInput.svelte +15 -15
  18. package/dist/components/form/TextArea.svelte +14 -14
  19. package/dist/components/form/TextInput.svelte +15 -15
  20. package/dist/components/page/Alert.svelte +28 -28
  21. package/dist/components/page/BackToTop.svelte +30 -30
  22. package/dist/components/page/Docs.svelte +22 -22
  23. package/dist/components/page/ErrorMessage.svelte +8 -8
  24. package/dist/components/page/Footer.svelte +5 -5
  25. package/dist/components/page/Header.svelte +5 -5
  26. package/dist/components/page/HelpPopUp.svelte +30 -30
  27. package/dist/components/page/Notification.svelte +39 -1
  28. package/dist/components/page/Page.svelte +1 -2
  29. package/dist/components/page/PageCaller.js +19 -19
  30. package/dist/components/page/Spinner.svelte +14 -14
  31. package/dist/components/page/breadcrumb/Breadcrumb.svelte +6 -2
  32. package/dist/components/page/menu/MenuDataCaller.js +10 -10
  33. package/dist/css/core.ui.postcss +17 -17
  34. package/dist/css/themes/theme-bexis2.css +96 -96
  35. package/dist/css/themes/theme-crimson.css +101 -101
  36. package/dist/css/themes/theme-gold-nouveau.css +140 -140
  37. package/dist/css/themes/theme-hamlindigo.css +112 -112
  38. package/dist/css/themes/theme-modern.css +127 -127
  39. package/dist/css/themes/theme-rocket.css +119 -119
  40. package/dist/css/themes/theme-sahara.css +128 -128
  41. package/dist/css/themes/theme-seafoam.css +122 -122
  42. package/dist/css/themes/theme-seasonal.css +115 -115
  43. package/dist/css/themes/theme-skeleton.css +118 -118
  44. package/dist/css/themes/theme-vintage.css +125 -125
  45. package/dist/models/Models.d.ts +3 -0
  46. package/dist/services/BaseCaller.js +16 -16
  47. package/dist/stores/apiStores.js +2 -0
  48. package/dist/stores/pageStores.d.ts +1 -4
  49. package/dist/stores/pageStores.js +3 -41
  50. package/dist/themes/theme-bexis2.d.ts +2 -0
  51. package/dist/themes/theme-bexis2.js +99 -0
  52. package/package.json +4 -2
  53. package/src/lib/TableView.svelte +1 -1
  54. package/src/lib/components/CodeEditor/CodeEditor.svelte +2 -1
  55. package/src/lib/components/ListView.svelte +11 -11
  56. package/src/lib/components/Table/Table.svelte +107 -26
  57. package/src/lib/components/Table/TableFilter.svelte +2 -1
  58. package/src/lib/components/Table/filter.ts +141 -141
  59. package/src/lib/components/{File → file}/FileIcon.svelte +45 -45
  60. package/src/lib/components/{File → file}/FileInfo.svelte +13 -13
  61. package/src/lib/components/{File → file}/FileUploader.svelte +3 -4
  62. package/src/lib/components/form/Checkbox.svelte +24 -24
  63. package/src/lib/components/form/CheckboxKvPList.svelte +29 -29
  64. package/src/lib/components/form/CheckboxList.svelte +21 -21
  65. package/src/lib/components/form/DateInput.svelte +27 -27
  66. package/src/lib/components/form/DropdownKvP.svelte +54 -54
  67. package/src/lib/components/form/MultiSelect.svelte +5 -6
  68. package/src/lib/components/form/NumberInput.svelte +30 -30
  69. package/src/lib/components/form/TextArea.svelte +28 -28
  70. package/src/lib/components/form/TextInput.svelte +28 -28
  71. package/src/lib/components/page/Alert.svelte +41 -41
  72. package/src/lib/components/page/BackToTop.svelte +30 -30
  73. package/src/lib/components/page/Docs.svelte +46 -46
  74. package/src/lib/components/page/ErrorMessage.svelte +10 -10
  75. package/src/lib/components/page/Footer.svelte +18 -18
  76. package/src/lib/components/page/Header.svelte +18 -18
  77. package/src/lib/components/page/HelpPopUp.svelte +72 -72
  78. package/src/lib/components/page/Notification.svelte +56 -1
  79. package/src/lib/components/page/Page.svelte +3 -4
  80. package/src/lib/components/page/PageCaller.js +19 -19
  81. package/src/lib/components/page/Spinner.svelte +20 -20
  82. package/src/lib/components/page/breadcrumb/Breadcrumb.svelte +8 -6
  83. package/src/lib/components/page/menu/MenuDataCaller.js +10 -10
  84. package/src/lib/css/core.ui.postcss +17 -17
  85. package/src/lib/css/themes/theme-bexis2.css +96 -96
  86. package/src/lib/css/themes/theme-crimson.css +101 -101
  87. package/src/lib/css/themes/theme-gold-nouveau.css +140 -140
  88. package/src/lib/css/themes/theme-hamlindigo.css +112 -112
  89. package/src/lib/css/themes/theme-modern.css +127 -127
  90. package/src/lib/css/themes/theme-rocket.css +119 -119
  91. package/src/lib/css/themes/theme-sahara.css +128 -128
  92. package/src/lib/css/themes/theme-seafoam.css +122 -122
  93. package/src/lib/css/themes/theme-seasonal.css +115 -115
  94. package/src/lib/css/themes/theme-skeleton.css +118 -118
  95. package/src/lib/css/themes/theme-vintage.css +125 -125
  96. package/src/lib/models/Models.ts +9 -6
  97. package/src/lib/models/Page.ts +40 -40
  98. package/src/lib/services/Api.ts +55 -55
  99. package/src/lib/services/BaseCaller.js +16 -16
  100. package/src/lib/stores/apiStores.ts +34 -31
  101. package/src/lib/stores/pageStores.ts +11 -53
  102. package/src/lib/themes/theme-bexis2.ts +103 -0
@@ -1,24 +1,24 @@
1
- <script lang="ts">
2
- import InputContainer from './InputContainer.svelte';
3
-
4
- export let id: string = '';
5
- export let label: string = '';
6
- export let checked: boolean = false;
7
-
8
- export let valid: boolean;
9
- export let invalid: boolean;
10
- export let required: boolean;
11
- export let feedback: [];
12
- </script>
13
-
14
- <InputContainer {label} {feedback} {required}>
15
- <input
16
- {id}
17
- class="input variant-form-material"
18
- type="checkbox"
19
- class:input-success={valid}
20
- class:input-error={invalid}
21
- bind:checked
22
- on:input
23
- />
24
- </InputContainer>
1
+ <script lang="ts">
2
+ import InputContainer from './InputContainer.svelte';
3
+
4
+ export let id: string = '';
5
+ export let label: string = '';
6
+ export let checked: boolean = false;
7
+
8
+ export let valid: boolean;
9
+ export let invalid: boolean;
10
+ export let required: boolean;
11
+ export let feedback: [];
12
+ </script>
13
+
14
+ <InputContainer {label} {feedback} {required}>
15
+ <input
16
+ {id}
17
+ class="input variant-form-material"
18
+ type="checkbox"
19
+ class:input-success={valid}
20
+ class:input-error={invalid}
21
+ bind:checked
22
+ on:input
23
+ />
24
+ </InputContainer>
@@ -1,29 +1,29 @@
1
- <script lang="ts">
2
- import InputContainer from './InputContainer.svelte';
3
-
4
- export let id;
5
- export let source;
6
- export let target;
7
- export let title;
8
- export let description = '';
9
- export let key;
10
- export let help = false;
11
-
12
- let required = false;
13
- let feedback: [];
14
- </script>
15
-
16
- <InputContainer {id} label={title} {feedback} {required} {help}>
17
- {#each source as item}
18
- <label class="flex items-center space-x-2" for={key}>
19
- <input
20
- class="checkbox"
21
- type="checkbox"
22
- bind:group={target}
23
- checked={item.key}
24
- value={item.key}
25
- />
26
- <p>{item.value}</p>
27
- </label>
28
- {/each}
29
- </InputContainer>
1
+ <script lang="ts">
2
+ import InputContainer from './InputContainer.svelte';
3
+
4
+ export let id;
5
+ export let source;
6
+ export let target;
7
+ export let title;
8
+ export let description = '';
9
+ export let key;
10
+ export let help = false;
11
+
12
+ let required = false;
13
+ let feedback: [];
14
+ </script>
15
+
16
+ <InputContainer {id} label={title} {feedback} {required} {help}>
17
+ {#each source as item}
18
+ <label class="flex items-center space-x-2" for={key}>
19
+ <input
20
+ class="checkbox"
21
+ type="checkbox"
22
+ bind:group={target}
23
+ checked={item.key}
24
+ value={item.key}
25
+ />
26
+ <p>{item.value}</p>
27
+ </label>
28
+ {/each}
29
+ </InputContainer>
@@ -1,21 +1,21 @@
1
- <script lang="ts">
2
- import InputContainer from './InputContainer.svelte';
3
-
4
- export let source;
5
- export let target;
6
- export let title;
7
- export let description = '';
8
- export let key;
9
-
10
- let required = false;
11
- let feedback: [];
12
- </script>
13
-
14
- <InputContainer label={title} {feedback} {required}>
15
- {#each source as item}
16
- <label class="flex items-center space-x-2" for={key}>
17
- <input class="checkbox" type="checkbox" bind:group={target} value={item} />
18
- <p>{item}</p>
19
- </label>
20
- {/each}
21
- </InputContainer>
1
+ <script lang="ts">
2
+ import InputContainer from './InputContainer.svelte';
3
+
4
+ export let source;
5
+ export let target;
6
+ export let title;
7
+ export let description = '';
8
+ export let key;
9
+
10
+ let required = false;
11
+ let feedback: [];
12
+ </script>
13
+
14
+ <InputContainer label={title} {feedback} {required}>
15
+ {#each source as item}
16
+ <label class="flex items-center space-x-2" for={key}>
17
+ <input class="checkbox" type="checkbox" bind:group={target} value={item} />
18
+ <p>{item}</p>
19
+ </label>
20
+ {/each}
21
+ </InputContainer>
@@ -1,27 +1,27 @@
1
- <script lang="ts">
2
- import InputContainer from './InputContainer.svelte';
3
-
4
- export let id: string = '';
5
- export let label: string = '';
6
- export let value: string = '';
7
-
8
- export let valid: boolean = false;
9
- export let invalid: boolean = false;
10
- export let required: boolean = false;
11
- export let feedback: string[] = [''];
12
- export let help = false;
13
- export let disabled: boolean = false;
14
- </script>
15
-
16
- <InputContainer {id} {label} {feedback} {required} {help}>
17
- <input
18
- {id}
19
- class="input variant-form-material"
20
- type="date"
21
- class:input-success={valid}
22
- class:input-error={invalid}
23
- bind:value
24
- on:input
25
- {disabled}
26
- />
27
- </InputContainer>
1
+ <script lang="ts">
2
+ import InputContainer from './InputContainer.svelte';
3
+
4
+ export let id: string = '';
5
+ export let label: string = '';
6
+ export let value: string = '';
7
+
8
+ export let valid: boolean = false;
9
+ export let invalid: boolean = false;
10
+ export let required: boolean = false;
11
+ export let feedback: string[] = [''];
12
+ export let help = false;
13
+ export let disabled: boolean = false;
14
+ </script>
15
+
16
+ <InputContainer {id} {label} {feedback} {required} {help}>
17
+ <input
18
+ {id}
19
+ class="input variant-form-material"
20
+ type="date"
21
+ class:input-success={valid}
22
+ class:input-error={invalid}
23
+ bind:value
24
+ on:input
25
+ {disabled}
26
+ />
27
+ </InputContainer>
@@ -1,54 +1,54 @@
1
- <script>
2
- import InputContainer from './InputContainer.svelte';
3
-
4
- export let id;
5
- export let source;
6
- export let target;
7
- export let title;
8
- export let valid = false;
9
- export let invalid = false;
10
- export let feedback = [''];
11
- export let required = false;
12
- export let complexTarget = false;
13
- export let help = false;
14
-
15
- $: selected = null;
16
-
17
- $: updatedSelectedValue(target);
18
- $: updatedTarget(selected);
19
-
20
- function updatedSelectedValue(selection) {
21
- if (selection != null) {
22
- if (complexTarget) {
23
- selected = selection.id;
24
- } else {
25
- selected = selection;
26
- }
27
- }
28
- }
29
-
30
- function updatedTarget(id) {
31
- if (complexTarget) {
32
- target = source.find((opt) => opt.id === id);
33
- } else {
34
- target = id;
35
- }
36
- }
37
- </script>
38
-
39
- <InputContainer {id} label={title} {feedback} {required} {help}>
40
- <select
41
- {id}
42
- class="select variant-form-material"
43
- class:input-success={valid}
44
- class:input-error={invalid}
45
- bind:value={selected}
46
- on:change
47
- on:select
48
- >
49
- <option value={null}>-- Please select --</option>
50
- {#each source as e}
51
- <option value={e.id}>{e.text}</option>
52
- {/each}
53
- </select>
54
- </InputContainer>
1
+ <script>
2
+ import InputContainer from './InputContainer.svelte';
3
+
4
+ export let id;
5
+ export let source;
6
+ export let target;
7
+ export let title;
8
+ export let valid = false;
9
+ export let invalid = false;
10
+ export let feedback = [''];
11
+ export let required = false;
12
+ export let complexTarget = false;
13
+ export let help = false;
14
+
15
+ $: selected = null;
16
+
17
+ $: updatedSelectedValue(target);
18
+ $: updatedTarget(selected);
19
+
20
+ function updatedSelectedValue(selection) {
21
+ if (selection != null) {
22
+ if (complexTarget) {
23
+ selected = selection.id;
24
+ } else {
25
+ selected = selection;
26
+ }
27
+ }
28
+ }
29
+
30
+ function updatedTarget(id) {
31
+ if (complexTarget) {
32
+ target = source.find((opt) => opt.id === id);
33
+ } else {
34
+ target = id;
35
+ }
36
+ }
37
+ </script>
38
+
39
+ <InputContainer {id} label={title} {feedback} {required} {help}>
40
+ <select
41
+ {id}
42
+ class="select variant-form-material"
43
+ class:input-success={valid}
44
+ class:input-error={invalid}
45
+ bind:value={selected}
46
+ on:change
47
+ on:select
48
+ >
49
+ <option value={null}>-- Please select --</option>
50
+ {#each source as e}
51
+ <option value={e.id}>{e.text}</option>
52
+ {/each}
53
+ </select>
54
+ </InputContainer>
@@ -23,7 +23,6 @@
23
23
  export let clearable = true;
24
24
  export let disabled = false;
25
25
 
26
-
27
26
  let isLoaded = false;
28
27
 
29
28
  $: value = null;
@@ -78,11 +77,11 @@
78
77
  }
79
78
 
80
79
  onMount(async () => {
81
- //console.log("OnMount", target)
82
- if(complexSource && complexTarget) // after on mount a setValue is needed when data is complex
83
- {
84
- setValue(target);
85
- }
80
+ //console.log("OnMount", target)
81
+ if (complexSource && complexTarget) {
82
+ // after on mount a setValue is needed when data is complex
83
+ setValue(target);
84
+ }
86
85
  });
87
86
 
88
87
  function setValue(t) {
@@ -1,30 +1,30 @@
1
- <script lang="ts">
2
- import InputContainer from './InputContainer.svelte';
3
- import { helpStore } from '$store/pageStores';
4
-
5
- export let id: string = '';
6
- export let label: string = '';
7
- export let value: string = '';
8
-
9
- export let valid: boolean = false;
10
- export let invalid: boolean = false;
11
- export let required: boolean = false;
12
- export let feedback: string[] = [''];
13
- export let placeholder: string = '';
14
- export let help: boolean = false;
15
- export let disabled: boolean = false;
16
- </script>
17
-
18
- <InputContainer {id} {label} {feedback} {required} {help}>
19
- <input
20
- {id}
21
- class="input variant-form-material"
22
- type="number"
23
- class:input-success={valid}
24
- class:input-error={invalid}
25
- bind:value
26
- on:input
27
- {placeholder}
28
- {disabled}
29
- />
30
- </InputContainer>
1
+ <script lang="ts">
2
+ import InputContainer from './InputContainer.svelte';
3
+ import { helpStore } from '$store/pageStores';
4
+
5
+ export let id: string = '';
6
+ export let label: string = '';
7
+ export let value: string = '';
8
+
9
+ export let valid: boolean = false;
10
+ export let invalid: boolean = false;
11
+ export let required: boolean = false;
12
+ export let feedback: string[] = [''];
13
+ export let placeholder: string = '';
14
+ export let help: boolean = false;
15
+ export let disabled: boolean = false;
16
+ </script>
17
+
18
+ <InputContainer {id} {label} {feedback} {required} {help}>
19
+ <input
20
+ {id}
21
+ class="input variant-form-material"
22
+ type="number"
23
+ class:input-success={valid}
24
+ class:input-error={invalid}
25
+ bind:value
26
+ on:input
27
+ {placeholder}
28
+ {disabled}
29
+ />
30
+ </InputContainer>
@@ -1,28 +1,28 @@
1
- <script lang="ts">
2
- import InputContainer from './InputContainer.svelte';
3
-
4
- export let id: string = '';
5
- export let label: string = '';
6
- export let value: string = '';
7
-
8
- export let valid: boolean = false;
9
- export let invalid: boolean = false;
10
- export let required: boolean = false;
11
- export let feedback: string[] = [''];
12
- export let placeholder: string = '';
13
- export let help: boolean = false;
14
- export let disabled: boolean = false;
15
- </script>
16
-
17
- <InputContainer {id} {label} {feedback} {required} {help}>
18
- <textarea
19
- {id}
20
- class="textarea variant-form-material"
21
- class:input-success={valid}
22
- class:input-error={invalid}
23
- bind:value
24
- on:input
25
- {placeholder}
26
- {disabled}
27
- />
28
- </InputContainer>
1
+ <script lang="ts">
2
+ import InputContainer from './InputContainer.svelte';
3
+
4
+ export let id: string = '';
5
+ export let label: string = '';
6
+ export let value: string = '';
7
+
8
+ export let valid: boolean = false;
9
+ export let invalid: boolean = false;
10
+ export let required: boolean = false;
11
+ export let feedback: string[] = [''];
12
+ export let placeholder: string = '';
13
+ export let help: boolean = false;
14
+ export let disabled: boolean = false;
15
+ </script>
16
+
17
+ <InputContainer {id} {label} {feedback} {required} {help}>
18
+ <textarea
19
+ {id}
20
+ class="textarea variant-form-material"
21
+ class:input-success={valid}
22
+ class:input-error={invalid}
23
+ bind:value
24
+ on:input
25
+ {placeholder}
26
+ {disabled}
27
+ />
28
+ </InputContainer>
@@ -1,28 +1,28 @@
1
- <script lang="ts">
2
- import InputContainer from './InputContainer.svelte';
3
-
4
- export let id: string = '';
5
- export let label: string = '';
6
- export let value: string = '';
7
- export let valid: boolean = false;
8
- export let invalid: boolean = false;
9
- export let required: boolean = false;
10
- export let feedback: string[] = [''];
11
- export let placeholder: string = '';
12
- export let help: boolean = false;
13
- export let disabled: boolean = false;
14
- </script>
15
-
16
- <InputContainer {id} {label} {feedback} {required} {help}>
17
- <input
18
- {id}
19
- class="input variant-form-material"
20
- type="text"
21
- class:input-success={valid}
22
- class:input-error={invalid}
23
- bind:value
24
- on:input
25
- {placeholder}
26
- {disabled}
27
- />
28
- </InputContainer>
1
+ <script lang="ts">
2
+ import InputContainer from './InputContainer.svelte';
3
+
4
+ export let id: string = '';
5
+ export let label: string = '';
6
+ export let value: string = '';
7
+ export let valid: boolean = false;
8
+ export let invalid: boolean = false;
9
+ export let required: boolean = false;
10
+ export let feedback: string[] = [''];
11
+ export let placeholder: string = '';
12
+ export let help: boolean = false;
13
+ export let disabled: boolean = false;
14
+ </script>
15
+
16
+ <InputContainer {id} {label} {feedback} {required} {help}>
17
+ <input
18
+ {id}
19
+ class="input variant-form-material"
20
+ type="text"
21
+ class:input-success={valid}
22
+ class:input-error={invalid}
23
+ bind:value
24
+ on:input
25
+ {placeholder}
26
+ {disabled}
27
+ />
28
+ </InputContainer>
@@ -1,41 +1,41 @@
1
- <script lang="ts">
2
- import Fa from 'svelte-fa';
3
-
4
- import { faXmark } from '@fortawesome/free-solid-svg-icons';
5
-
6
- import { fade } from 'svelte/transition';
7
-
8
- export let title: string = '';
9
- export let message: string = '';
10
- export let cssClass: string = '';
11
- export let deleteBtn: boolean = true;
12
-
13
- $: show = true;
14
- </script>
15
-
16
- {#if show}
17
- <aside class="alert {cssClass}" transition:fade|local={{ duration: 100 }}>
18
- <!-- Icon -->
19
- <!-- <div>(icon)</div> -->
20
- <!-- Message -->
21
- <div class="alert-message">
22
- {#if title}
23
- <h3 class="h3">{title}</h3>
24
- {/if}
25
- <p>
26
- {message}
27
- <slot />
28
- </p>
29
- </div>
30
- <!-- Actions -->
31
- <div class="alert-actions">
32
- <slot name="actions" />
33
-
34
- {#if deleteBtn}
35
- <button class="btn hover:text-primary-100" on:click={() => (show = false)}>
36
- <Fa icon={faXmark} />
37
- </button>
38
- {/if}
39
- </div>
40
- </aside>
41
- {/if}
1
+ <script lang="ts">
2
+ import Fa from 'svelte-fa';
3
+
4
+ import { faXmark } from '@fortawesome/free-solid-svg-icons';
5
+
6
+ import { fade } from 'svelte/transition';
7
+
8
+ export let title: string = '';
9
+ export let message: string = '';
10
+ export let cssClass: string = '';
11
+ export let deleteBtn: boolean = true;
12
+
13
+ $: show = true;
14
+ </script>
15
+
16
+ {#if show}
17
+ <aside class="alert {cssClass}" transition:fade|local={{ duration: 100 }}>
18
+ <!-- Icon -->
19
+ <!-- <div>(icon)</div> -->
20
+ <!-- Message -->
21
+ <div class="alert-message">
22
+ {#if title}
23
+ <h3 class="h3">{title}</h3>
24
+ {/if}
25
+ <p>
26
+ {message}
27
+ <slot />
28
+ </p>
29
+ </div>
30
+ <!-- Actions -->
31
+ <div class="alert-actions">
32
+ <slot name="actions" />
33
+
34
+ {#if deleteBtn}
35
+ <button class="btn hover:text-primary-100" on:click={() => (show = false)}>
36
+ <Fa icon={faXmark} />
37
+ </button>
38
+ {/if}
39
+ </div>
40
+ </aside>
41
+ {/if}
@@ -1,30 +1,30 @@
1
- <script>
2
- export let showOnPx = 150;
3
- let hidden = true;
4
-
5
- function goTop() {
6
- document.body.scrollIntoView();
7
- }
8
-
9
- function scrollContainer() {
10
- return document.documentElement || document.body;
11
- }
12
-
13
- function handleOnScroll() {
14
- if (!scrollContainer()) {
15
- return;
16
- }
17
-
18
- if (scrollContainer().scrollTop > showOnPx) {
19
- hidden = false;
20
- } else {
21
- hidden = true;
22
- }
23
- }
24
- </script>
25
-
26
- <svelte:window on:scroll={handleOnScroll} />
27
-
28
- <div class="w-full items-center">
29
- <button class="btn ring back-to-top" on:click={goTop} class:hidden>Back to top</button>
30
- </div>
1
+ <script>
2
+ export let showOnPx = 150;
3
+ let hidden = true;
4
+
5
+ function goTop() {
6
+ document.body.scrollIntoView();
7
+ }
8
+
9
+ function scrollContainer() {
10
+ return document.documentElement || document.body;
11
+ }
12
+
13
+ function handleOnScroll() {
14
+ if (!scrollContainer()) {
15
+ return;
16
+ }
17
+
18
+ if (scrollContainer().scrollTop > showOnPx) {
19
+ hidden = false;
20
+ } else {
21
+ hidden = true;
22
+ }
23
+ }
24
+ </script>
25
+
26
+ <svelte:window on:scroll={handleOnScroll} />
27
+
28
+ <div class="w-full items-center">
29
+ <button class="btn ring back-to-top" on:click={goTop} class:hidden>Back to top</button>
30
+ </div>