@likable-hair/svelte 0.0.77 → 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.
- package/README.md +2 -2
- package/dist/components/composed/search/GlobalSearchTextField.svelte +176 -0
- package/dist/components/composed/search/GlobalSearchTextField.svelte.d.ts +47 -0
- package/dist/components/composed/search/SearchBar.svelte +82 -0
- package/dist/components/composed/search/SearchBar.svelte.d.ts +33 -0
- package/dist/components/composed/search/SearchResults.svelte +100 -0
- package/dist/components/composed/search/SearchResults.svelte.d.ts +47 -0
- package/{shop → dist/components/composed/shop}/ProductCard.svelte +44 -51
- package/dist/components/composed/shop/ProductCard.svelte.d.ts +30 -0
- package/{shop → dist/components/composed/shop}/ProductsGrid.svelte +15 -13
- package/dist/components/composed/shop/ProductsGrid.svelte.d.ts +44 -0
- package/dist/components/layouts/StableDividedSideBarLayout.svelte +189 -0
- package/dist/components/layouts/StableDividedSideBarLayout.svelte.d.ts +39 -0
- package/dist/components/simple/buttons/Button.svelte +147 -0
- package/dist/components/simple/buttons/Button.svelte.d.ts +53 -0
- package/dist/components/simple/buttons/DefaultButton.svelte +93 -0
- package/dist/components/simple/buttons/DefaultButton.svelte.d.ts +50 -0
- package/dist/components/simple/buttons/LinkButton.svelte +78 -0
- package/dist/components/simple/buttons/LinkButton.svelte.d.ts +49 -0
- package/dist/components/simple/common/Card.svelte +37 -0
- package/dist/components/simple/common/Card.svelte.d.ts +40 -0
- package/dist/components/simple/common/Gesture.svelte +57 -0
- package/{common → dist/components/simple/common}/Gesture.svelte.d.ts +5 -5
- package/dist/components/simple/common/IntersectionObserver.svelte +47 -0
- package/dist/components/simple/common/IntersectionObserver.svelte.d.ts +24 -0
- package/dist/components/simple/common/MediaQuery.svelte +40 -0
- package/{common → dist/components/simple/common}/MediaQuery.svelte.d.ts +4 -4
- package/dist/components/simple/common/Menu.svelte +120 -0
- package/dist/components/simple/common/Menu.svelte.d.ts +36 -0
- package/dist/components/simple/common/Playground.svelte +52 -0
- package/dist/components/simple/common/Playground.svelte.d.ts +17 -0
- package/{common → dist/components/simple/common}/SimpleTable.svelte +4 -4
- package/{common → dist/components/simple/common}/SimpleTable.svelte.d.ts +15 -15
- package/{common → dist/components/simple/common}/materialDesign.css +1 -1
- package/{common → dist/components/simple/common}/scroller.js +4 -2
- package/dist/components/simple/dates/Calendar.svelte +115 -0
- package/dist/components/simple/dates/Calendar.svelte.d.ts +48 -0
- package/{dates → dist/components/simple/dates}/DatePicker.svelte +42 -38
- package/dist/components/simple/dates/DatePicker.svelte.d.ts +38 -0
- package/{dates → dist/components/simple/dates}/MonthSelector.svelte +11 -15
- package/{dates → dist/components/simple/dates}/MonthSelector.svelte.d.ts +10 -10
- package/dist/components/simple/dates/TimePickerTextField.svelte +78 -0
- package/dist/components/simple/dates/TimePickerTextField.svelte.d.ts +26 -0
- package/dist/components/simple/dates/YearSelector.svelte +53 -0
- package/{dates → dist/components/simple/dates}/YearSelector.svelte.d.ts +7 -7
- package/{dates → dist/components/simple/dates}/utils.d.ts +5 -5
- package/{dates → dist/components/simple/dates}/utils.js +68 -48
- package/dist/components/simple/dialogs/Dialog.svelte +410 -0
- package/dist/components/simple/dialogs/Dialog.svelte.d.ts +30 -0
- package/dist/components/simple/forms/Autocomplete.svelte +225 -0
- package/dist/components/simple/forms/Autocomplete.svelte.d.ts +70 -0
- package/{forms → dist/components/simple/forms}/Checkbox.svelte +4 -5
- package/dist/components/simple/forms/Checkbox.svelte.d.ts +28 -0
- package/dist/components/simple/forms/FileInput.svelte +92 -0
- package/dist/components/simple/forms/FileInput.svelte.d.ts +37 -0
- package/dist/components/simple/forms/FileInputList.svelte +135 -0
- package/dist/components/simple/forms/FileInputList.svelte.d.ts +30 -0
- package/{forms → dist/components/simple/forms}/Switch.svelte +18 -15
- package/dist/components/simple/forms/Switch.svelte.d.ts +27 -0
- package/{forms → dist/components/simple/forms}/Textarea.svelte +14 -18
- package/dist/components/simple/forms/Textarea.svelte.d.ts +39 -0
- package/dist/components/simple/forms/Textfield.svelte +324 -0
- package/dist/components/simple/forms/Textfield.svelte.d.ts +54 -0
- package/{forms → dist/components/simple/forms}/VerticalSwitch.svelte +14 -25
- package/dist/components/simple/forms/VerticalSwitch.svelte.d.ts +30 -0
- package/{forms → dist/components/simple/forms}/VerticalTextSwitch.svelte +19 -10
- package/dist/components/simple/forms/VerticalTextSwitch.svelte.d.ts +28 -0
- package/dist/components/simple/lists/SelectableVerticalList.svelte +129 -0
- package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +52 -0
- package/dist/components/simple/lists/SidebarMenuList.svelte +169 -0
- package/dist/components/simple/lists/SidebarMenuList.svelte.d.ts +31 -0
- package/{loaders → dist/components/simple/loaders}/CircularLoader.svelte +24 -24
- package/dist/components/simple/loaders/CircularLoader.svelte.d.ts +19 -0
- package/{loaders → dist/components/simple/loaders}/Skeleton.svelte +27 -19
- package/dist/components/simple/loaders/Skeleton.svelte.d.ts +28 -0
- package/dist/components/simple/media/AttachmentDownloader.svelte +47 -0
- package/dist/components/simple/media/AttachmentDownloader.svelte.d.ts +30 -0
- package/dist/components/simple/media/Avatar.svelte +32 -0
- package/dist/components/simple/media/Avatar.svelte.d.ts +26 -0
- package/{media → dist/components/simple/media}/Carousel.svelte +16 -19
- package/dist/components/simple/media/Carousel.svelte.d.ts +26 -0
- package/dist/components/simple/media/DescriptiveAvatar.svelte +86 -0
- package/dist/components/simple/media/DescriptiveAvatar.svelte.d.ts +35 -0
- package/{media → dist/components/simple/media}/Gallery.svelte +39 -44
- package/dist/components/simple/media/Gallery.svelte.d.ts +26 -0
- package/{media → dist/components/simple/media}/Icon.svelte +1 -0
- package/{media → dist/components/simple/media}/Icon.svelte.d.ts +8 -7
- package/{media → dist/components/simple/media}/Image.svelte +57 -55
- package/dist/components/simple/media/Image.svelte.d.ts +35 -0
- package/{media → dist/components/simple/media}/ImageGrid.svelte +15 -17
- package/dist/components/simple/media/ImageGrid.svelte.d.ts +35 -0
- package/{navigation → dist/components/simple/navigation}/Breadcrumb.svelte +23 -22
- package/{navigation → dist/components/simple/navigation}/Breadcrumb.svelte.d.ts +9 -9
- package/{navigation → dist/components/simple/navigation}/Chip.svelte +19 -25
- package/dist/components/simple/navigation/Chip.svelte.d.ts +30 -0
- package/dist/components/simple/navigation/Drawer.svelte +139 -0
- package/dist/components/simple/navigation/Drawer.svelte.d.ts +33 -0
- package/{navigation → dist/components/simple/navigation}/HeaderMenu.svelte +38 -55
- package/dist/components/simple/navigation/HeaderMenu.svelte.d.ts +40 -0
- package/dist/components/simple/navigation/Navigator.svelte +89 -0
- package/dist/components/simple/navigation/Navigator.svelte.d.ts +33 -0
- package/{navigation → dist/components/simple/navigation}/TabSwitcher.svelte +46 -36
- package/dist/components/simple/navigation/TabSwitcher.svelte.d.ts +39 -0
- package/dist/components/simple/progress/ProgressBar.svelte +37 -0
- package/dist/components/simple/progress/ProgressBar.svelte.d.ts +22 -0
- package/{timeline → dist/components/simple/timeline}/SimpleTimeLine.svelte +73 -60
- package/{timeline → dist/components/simple/timeline}/SimpleTimeLine.svelte.d.ts +17 -17
- package/dist/components/simple/typography/Code.svelte +52 -0
- package/dist/components/simple/typography/Code.svelte.d.ts +28 -0
- package/dist/components/simple/typography/dracula.css +81 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.js +44 -0
- package/{stores → dist/stores}/mediaQuery.d.ts +1 -1
- package/{stores → dist/stores}/mediaQuery.js +23 -23
- package/dist/utils/keyboarder.d.ts +14 -0
- package/dist/utils/keyboarder.js +31 -0
- package/dist/utils/teleporter.d.ts +10 -0
- package/dist/utils/teleporter.js +35 -0
- package/package.json +197 -108
- package/buttons/Button.svelte +0 -131
- package/buttons/Button.svelte.d.ts +0 -51
- package/buttons/ToggleButton.svelte +0 -0
- package/buttons/ToggleButton.svelte.d.ts +0 -19
- package/common/Card.svelte +0 -46
- package/common/Card.svelte.d.ts +0 -39
- package/common/Gesture.svelte +0 -65
- package/common/IntersectionObserver.svelte +0 -58
- package/common/IntersectionObserver.svelte.d.ts +0 -39
- package/common/MediaQuery.svelte +0 -30
- package/common/Menu.svelte +0 -112
- package/common/Menu.svelte.d.ts +0 -36
- package/dates/Calendar.svelte +0 -119
- package/dates/Calendar.svelte.d.ts +0 -48
- package/dates/DatePicker.svelte.d.ts +0 -38
- package/dates/TimePickerTextField.svelte +0 -90
- package/dates/TimePickerTextField.svelte.d.ts +0 -26
- package/dates/YearSelector.svelte +0 -63
- package/dialogs/Dialog.svelte +0 -112
- package/dialogs/Dialog.svelte.d.ts +0 -25
- package/forms/Autocomplete.svelte +0 -236
- package/forms/Autocomplete.svelte.d.ts +0 -70
- package/forms/Checkbox.svelte.d.ts +0 -28
- package/forms/FileInput.svelte +0 -90
- package/forms/FileInput.svelte.d.ts +0 -43
- package/forms/FileInputList.svelte +0 -123
- package/forms/FileInputList.svelte.d.ts +0 -30
- package/forms/Switch.svelte.d.ts +0 -27
- package/forms/Textarea.svelte.d.ts +0 -39
- package/forms/Textfield.svelte +0 -319
- package/forms/Textfield.svelte.d.ts +0 -54
- package/forms/VerticalSwitch.svelte.d.ts +0 -30
- package/forms/VerticalTextSwitch.svelte.d.ts +0 -28
- package/loaders/CircularLoader.svelte.d.ts +0 -19
- package/loaders/Skeleton.svelte.d.ts +0 -28
- package/loaders/sectionType.d.ts +0 -4
- package/loaders/sectionType.js +0 -5
- package/media/AttachmentDownloader.svelte +0 -60
- package/media/AttachmentDownloader.svelte.d.ts +0 -30
- package/media/Avatar.svelte +0 -32
- package/media/Avatar.svelte.d.ts +0 -26
- package/media/Carousel.svelte.d.ts +0 -26
- package/media/DescriptiveAvatar.svelte +0 -81
- package/media/DescriptiveAvatar.svelte.d.ts +0 -32
- package/media/Gallery.svelte.d.ts +0 -26
- package/media/Image.svelte.d.ts +0 -34
- package/media/ImageGrid.svelte.d.ts +0 -35
- package/navigation/Chip.svelte.d.ts +0 -30
- package/navigation/Drawer.svelte +0 -140
- package/navigation/Drawer.svelte.d.ts +0 -37
- package/navigation/HeaderMenu.svelte.d.ts +0 -42
- package/navigation/Navigator.svelte +0 -63
- package/navigation/Navigator.svelte.d.ts +0 -29
- package/navigation/TabSwitcher.svelte.d.ts +0 -35
- package/progress/ProgressBar.svelte +0 -36
- package/progress/ProgressBar.svelte.d.ts +0 -22
- package/shop/ProductCard.svelte.d.ts +0 -30
- package/shop/ProductsGrid.svelte.d.ts +0 -44
- package/timeline/ScrollTimeLine.svelte +0 -82
- package/timeline/ScrollTimeLine.svelte.d.ts +0 -31
- /package/{common → dist/components/simple/common}/scroller.d.ts +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Likablehair Svelte component library
|
|
2
2
|
|
|
3
|
-
A simple library that contains svelte components, used by likablehair frontend applications
|
|
3
|
+
A simple library that contains svelte components, used by likablehair frontend applications.
|
|
4
4
|
|
|
5
5
|
## Developer guide
|
|
6
6
|
|
|
@@ -23,4 +23,4 @@ To publish the package make the following steps:
|
|
|
23
23
|
|
|
24
24
|
- edit the package.json version, then commit all the changes
|
|
25
25
|
- run `npm run package`, svelte will generate a package folder with all the necessary stuff inside
|
|
26
|
-
- make sure you're logged in with your npm account, then run `npm publish ./package --access=public`
|
|
26
|
+
- make sure you're logged in with your npm account, then run `npm publish ./package --access=public`
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
<script>import Dialog from "../../simple/dialogs/Dialog.svelte";
|
|
2
|
+
import { createEventDispatcher, onMount } from "svelte";
|
|
3
|
+
import SearchBar from "./SearchBar.svelte";
|
|
4
|
+
import Keyboarder, {} from "../../../utils/keyboarder";
|
|
5
|
+
import SearchResults, {} from "./SearchResults.svelte";
|
|
6
|
+
export let color = "rgb(113 113 122)", searchButtonRingColor = "rgba(24,24,27,.1)", searchButtonHoverRingColor = "rgba(24,24,27,.2)", searchButtonWidth = "100%", searchButtonMaxWidth = "28rem", searchButtonHeight = "2rem", searchButtonBackgroundColor = "white", searchButtonPadding = "0rem 0.75rem 0rem 0.5rem", searchButtonFontSize = ".875rem", searchButtonText = "Search", searchDialogOpened = false, transitionDuration = ".8s", searcher = () => Promise.resolve([]);
|
|
7
|
+
let searchBarInput, searchText = void 0, searchResults = void 0, searchLoading = false;
|
|
8
|
+
let dispatch = createEventDispatcher();
|
|
9
|
+
onMount(() => {
|
|
10
|
+
let handler = (params) => {
|
|
11
|
+
if ((params.meta || params.ctrl) && params.key == "k") {
|
|
12
|
+
toggleSearchDialog();
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
Keyboarder.on(handler);
|
|
16
|
+
return () => {
|
|
17
|
+
Keyboarder.off(handler);
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
function handleKeydown(event) {
|
|
21
|
+
if (event.key == "ArrowDown" || event.key == "ArrowUp")
|
|
22
|
+
event.preventDefault();
|
|
23
|
+
}
|
|
24
|
+
function toggleSearchDialog() {
|
|
25
|
+
searchDialogOpened = !searchDialogOpened;
|
|
26
|
+
if (searchDialogOpened)
|
|
27
|
+
searchBarInput.focus();
|
|
28
|
+
dispatch("toggle-search-dialog", { opened: searchDialogOpened });
|
|
29
|
+
}
|
|
30
|
+
async function search() {
|
|
31
|
+
if (!!searchText) {
|
|
32
|
+
searchLoading = true;
|
|
33
|
+
searchResults = await searcher({
|
|
34
|
+
searchText
|
|
35
|
+
});
|
|
36
|
+
searchLoading = false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<div
|
|
42
|
+
style:--global-search-text-field-ring-color={searchButtonRingColor}
|
|
43
|
+
style:--global-search-text-field-hover-ring-color={searchButtonHoverRingColor}
|
|
44
|
+
style:--global-search-text-field-color={color}
|
|
45
|
+
style:--global-search-text-field-width={searchButtonWidth}
|
|
46
|
+
style:--global-search-text-field-max-width={searchButtonMaxWidth}
|
|
47
|
+
style:--global-search-text-field-height={searchButtonHeight}
|
|
48
|
+
style:--global-search-text-field-background-color={searchButtonBackgroundColor}
|
|
49
|
+
style:--global-search-text-field-padding={searchButtonPadding}
|
|
50
|
+
style:--global-search-text-field-font-size={searchButtonFontSize}
|
|
51
|
+
>
|
|
52
|
+
<slot
|
|
53
|
+
name="search-button"
|
|
54
|
+
{toggleSearchDialog}
|
|
55
|
+
>
|
|
56
|
+
<button
|
|
57
|
+
on:click={toggleSearchDialog}
|
|
58
|
+
class="search-like-button"
|
|
59
|
+
>
|
|
60
|
+
<slot name="search-button-icon">
|
|
61
|
+
<svg
|
|
62
|
+
viewBox="0 0 20 20"
|
|
63
|
+
fill="none"
|
|
64
|
+
aria-hidden="true"
|
|
65
|
+
class="search-icon"
|
|
66
|
+
><path
|
|
67
|
+
stroke-linecap="round"
|
|
68
|
+
stroke-linejoin="round"
|
|
69
|
+
d="M12.01 12a4.25 4.25 0 1 0-6.02-6 4.25 4.25 0 0 0 6.02 6Zm0 0 3.24 3.25"
|
|
70
|
+
/></svg
|
|
71
|
+
>
|
|
72
|
+
</slot>
|
|
73
|
+
<slot name="search-button-text">
|
|
74
|
+
{searchButtonText}
|
|
75
|
+
</slot>
|
|
76
|
+
<slot name="search-button-shortcut">
|
|
77
|
+
<kbd class="shortcut"><kbd class="shortcut">⌘</kbd><kbd class="shortcut">K</kbd></kbd>
|
|
78
|
+
</slot>
|
|
79
|
+
</button>
|
|
80
|
+
</slot>
|
|
81
|
+
<Dialog
|
|
82
|
+
bind:open={searchDialogOpened}
|
|
83
|
+
transition="scale"
|
|
84
|
+
overlayBackdropFilter="blur(2px)"
|
|
85
|
+
transitionDuration={transitionDuration}
|
|
86
|
+
>
|
|
87
|
+
<div
|
|
88
|
+
style:max-width="90vw"
|
|
89
|
+
style:width="600px"
|
|
90
|
+
style:height="500px"
|
|
91
|
+
style:display="flex"
|
|
92
|
+
style:justify-content="center"
|
|
93
|
+
on:click={() => searchDialogOpened = false}
|
|
94
|
+
on:keypress={() => searchDialogOpened = false}
|
|
95
|
+
>
|
|
96
|
+
<div
|
|
97
|
+
on:click|stopPropagation={() => { }}
|
|
98
|
+
on:keypress|stopPropagation={() => { }}
|
|
99
|
+
style:width="100%"
|
|
100
|
+
style:height="fit-content"
|
|
101
|
+
>
|
|
102
|
+
<slot
|
|
103
|
+
name="search-bar"
|
|
104
|
+
searchBarInput
|
|
105
|
+
searchText
|
|
106
|
+
search
|
|
107
|
+
>
|
|
108
|
+
<SearchBar
|
|
109
|
+
bind:input={searchBarInput}
|
|
110
|
+
bind:value={searchText}
|
|
111
|
+
on:input={search}
|
|
112
|
+
on:keydown={handleKeydown}
|
|
113
|
+
></SearchBar>
|
|
114
|
+
</slot>
|
|
115
|
+
{#if !!searchText}
|
|
116
|
+
<slot
|
|
117
|
+
name="search-results"
|
|
118
|
+
searchLoading
|
|
119
|
+
searchResults
|
|
120
|
+
>
|
|
121
|
+
<SearchResults
|
|
122
|
+
margin="-.5rem 0 0 0"
|
|
123
|
+
borderRadius="0 0 .5rem .5rem"
|
|
124
|
+
loading={searchLoading}
|
|
125
|
+
results={searchResults}
|
|
126
|
+
activeKeyboard
|
|
127
|
+
on:select
|
|
128
|
+
></SearchResults>
|
|
129
|
+
</slot>
|
|
130
|
+
{/if}
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
</Dialog>
|
|
134
|
+
</div>
|
|
135
|
+
|
|
136
|
+
<style>
|
|
137
|
+
.search-like-button {
|
|
138
|
+
--global-search-text-field-ring-real-color: var(--global-search-text-field-ring-color);
|
|
139
|
+
box-shadow: inset 0 0 0 1px var(--global-search-text-field-ring-color);
|
|
140
|
+
color: var(--global-search-text-field-color);
|
|
141
|
+
display: flex;
|
|
142
|
+
align-items: center;
|
|
143
|
+
gap: 0.5rem;
|
|
144
|
+
width: var(--global-search-text-field-width);
|
|
145
|
+
max-width: var(--global-search-text-field-max-width);
|
|
146
|
+
height: var(--global-search-text-field-height);
|
|
147
|
+
font-size: var(--global-search-text-field-font-size);
|
|
148
|
+
line-height: 1.5rem;
|
|
149
|
+
background-color: var(--global-search-text-field-background-color);
|
|
150
|
+
border-radius: 9999px;
|
|
151
|
+
padding: var(--global-search-text-field-padding);
|
|
152
|
+
border: 0 solid #e5e7eb;
|
|
153
|
+
cursor: pointer;
|
|
154
|
+
transition-property: box-shadow;
|
|
155
|
+
transition-timing-function: cubic-bezier(0.075, 0.82, 0.165, 1);
|
|
156
|
+
transition-duration: .5s;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.search-like-button:hover {
|
|
160
|
+
box-shadow: inset 0 0 0 1px var(--global-search-text-field-hover-ring-color);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.search-icon {
|
|
164
|
+
height: 1.25rem;
|
|
165
|
+
width: 1.25rem;
|
|
166
|
+
stroke: currentColor;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.shortcut {
|
|
170
|
+
margin-left: auto;
|
|
171
|
+
font-size: 1rem;
|
|
172
|
+
color: var(--global-search-text-field-color);
|
|
173
|
+
text-transform: none;
|
|
174
|
+
font-family: ui-sans-serif,system-ui,-apple-system;
|
|
175
|
+
}
|
|
176
|
+
</style>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import { type Result } from './SearchResults.svelte';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
color?: string | undefined;
|
|
6
|
+
searchButtonRingColor?: string | undefined;
|
|
7
|
+
searchButtonHoverRingColor?: string | undefined;
|
|
8
|
+
searchButtonWidth?: string | undefined;
|
|
9
|
+
searchButtonMaxWidth?: string | undefined;
|
|
10
|
+
searchButtonHeight?: string | undefined;
|
|
11
|
+
searchButtonBackgroundColor?: string | undefined;
|
|
12
|
+
searchButtonPadding?: string | undefined;
|
|
13
|
+
searchButtonFontSize?: string | undefined;
|
|
14
|
+
searchButtonText?: string | undefined;
|
|
15
|
+
searchDialogOpened?: boolean | undefined;
|
|
16
|
+
transitionDuration?: string | undefined;
|
|
17
|
+
searcher?: ((params: {
|
|
18
|
+
searchText: string;
|
|
19
|
+
}) => Promise<Result[] | undefined>) | undefined;
|
|
20
|
+
};
|
|
21
|
+
events: {
|
|
22
|
+
select: CustomEvent<{
|
|
23
|
+
element: import("../../simple/lists/SelectableVerticalList.svelte").Element;
|
|
24
|
+
}>;
|
|
25
|
+
'toggle-search-dialog': CustomEvent<{
|
|
26
|
+
opened: boolean;
|
|
27
|
+
}>;
|
|
28
|
+
} & {
|
|
29
|
+
[evt: string]: CustomEvent<any>;
|
|
30
|
+
};
|
|
31
|
+
slots: {
|
|
32
|
+
'search-button': {
|
|
33
|
+
toggleSearchDialog: () => void;
|
|
34
|
+
};
|
|
35
|
+
'search-button-icon': {};
|
|
36
|
+
'search-button-text': {};
|
|
37
|
+
'search-button-shortcut': {};
|
|
38
|
+
'search-bar': {};
|
|
39
|
+
'search-results': {};
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
export type GlobalSearchTextFieldProps = typeof __propDef.props;
|
|
43
|
+
export type GlobalSearchTextFieldEvents = typeof __propDef.events;
|
|
44
|
+
export type GlobalSearchTextFieldSlots = typeof __propDef.slots;
|
|
45
|
+
export default class GlobalSearchTextField extends SvelteComponentTyped<GlobalSearchTextFieldProps, GlobalSearchTextFieldEvents, GlobalSearchTextFieldSlots> {
|
|
46
|
+
}
|
|
47
|
+
export {};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<script>export let maxWidth = void 0, width = "100%", ringColor = "rgba(24,24,27,.1)", backgroundColor = "rgb(250 250 250/1)", borderRadius = "0.5rem", height = "3rem", padding = "0rem 1rem 0rem 1rem", lineHeight = "1.5rem", fontSize = ".875rem", input = void 0, value = void 0;
|
|
2
|
+
</script>
|
|
3
|
+
|
|
4
|
+
<div
|
|
5
|
+
style:--search-bar-ring-color={ringColor}
|
|
6
|
+
style:--search-bar-background-color={backgroundColor}
|
|
7
|
+
style:--search-bar-border-radius={borderRadius}
|
|
8
|
+
style:--search-bar-height={height}
|
|
9
|
+
style:--search-bar-padding={padding}
|
|
10
|
+
style:--search-bar-line-height={lineHeight}
|
|
11
|
+
style:--search-bar-font-size={fontSize}
|
|
12
|
+
style:max-width={maxWidth}
|
|
13
|
+
style:width={width}
|
|
14
|
+
class="container"
|
|
15
|
+
>
|
|
16
|
+
<slot name="icon">
|
|
17
|
+
<svg
|
|
18
|
+
viewBox="0 0 20 20"
|
|
19
|
+
fill="none"
|
|
20
|
+
aria-hidden="true"
|
|
21
|
+
class="search-icon"
|
|
22
|
+
><path
|
|
23
|
+
stroke-linecap="round"
|
|
24
|
+
stroke-linejoin="round"
|
|
25
|
+
d="M12.01 12a4.25 4.25 0 1 0-6.02-6 4.25 4.25 0 0 0 6.02 6Zm0 0 3.24 3.25"
|
|
26
|
+
/></svg
|
|
27
|
+
>
|
|
28
|
+
</slot>
|
|
29
|
+
<slot name="input">
|
|
30
|
+
<input
|
|
31
|
+
aria-autocomplete="both"
|
|
32
|
+
aria-labelledby="search-content"
|
|
33
|
+
id="search-content"
|
|
34
|
+
autocomplete="off"
|
|
35
|
+
autocorrect="off"
|
|
36
|
+
autocapitalize="off"
|
|
37
|
+
enterkeyhint="search"
|
|
38
|
+
spellcheck="false"
|
|
39
|
+
placeholder="Find something..."
|
|
40
|
+
maxlength="512"
|
|
41
|
+
tabindex="0"
|
|
42
|
+
class="input"
|
|
43
|
+
bind:this={input}
|
|
44
|
+
bind:value={value}
|
|
45
|
+
on:input
|
|
46
|
+
on:change
|
|
47
|
+
on:keydown
|
|
48
|
+
/>
|
|
49
|
+
</slot>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<style>
|
|
53
|
+
.container {
|
|
54
|
+
box-shadow: inset 0 0 0 1px var(--search-bar-ring-color);
|
|
55
|
+
background-color: var(--search-bar-background-color);
|
|
56
|
+
border-radius: var(--search-bar-border-radius);
|
|
57
|
+
height: var(--search-bar-height);
|
|
58
|
+
display: flex;
|
|
59
|
+
align-items: center;
|
|
60
|
+
gap: 0.5rem;
|
|
61
|
+
padding: var(--search-bar-padding);
|
|
62
|
+
box-sizing: border-box;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.input {
|
|
66
|
+
font-size: var(--search-bar-font-size);
|
|
67
|
+
line-height: var(--search-bar-line-height);
|
|
68
|
+
box-sizing: border-box;
|
|
69
|
+
border: 0 solid #e5e7eb;
|
|
70
|
+
outline: 2px solid transparent;
|
|
71
|
+
outline-offset: 2px;
|
|
72
|
+
background-color: transparent;
|
|
73
|
+
color: inherit;
|
|
74
|
+
appearance: none;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.search-icon {
|
|
78
|
+
height: 1.25rem;
|
|
79
|
+
width: 1.25rem;
|
|
80
|
+
stroke: currentColor;
|
|
81
|
+
}
|
|
82
|
+
</style>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
maxWidth?: string | undefined;
|
|
5
|
+
width?: string | undefined;
|
|
6
|
+
ringColor?: string | undefined;
|
|
7
|
+
backgroundColor?: string | undefined;
|
|
8
|
+
borderRadius?: string | undefined;
|
|
9
|
+
height?: string | undefined;
|
|
10
|
+
padding?: string | undefined;
|
|
11
|
+
lineHeight?: string | undefined;
|
|
12
|
+
fontSize?: string | undefined;
|
|
13
|
+
input?: HTMLElement | undefined;
|
|
14
|
+
value?: string | undefined;
|
|
15
|
+
};
|
|
16
|
+
events: {
|
|
17
|
+
input: Event;
|
|
18
|
+
change: Event;
|
|
19
|
+
keydown: KeyboardEvent;
|
|
20
|
+
} & {
|
|
21
|
+
[evt: string]: CustomEvent<any>;
|
|
22
|
+
};
|
|
23
|
+
slots: {
|
|
24
|
+
icon: {};
|
|
25
|
+
input: {};
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
export type SearchBarProps = typeof __propDef.props;
|
|
29
|
+
export type SearchBarEvents = typeof __propDef.events;
|
|
30
|
+
export type SearchBarSlots = typeof __propDef.slots;
|
|
31
|
+
export default class SearchBar extends SvelteComponentTyped<SearchBarProps, SearchBarEvents, SearchBarSlots> {
|
|
32
|
+
}
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
<script context="module"></script>
|
|
2
|
+
|
|
3
|
+
<script>import SelectableVerticalList from "../../simple/lists/SelectableVerticalList.svelte";
|
|
4
|
+
export let maxWidth = void 0, width = "100%", height = void 0, maxHeight = void 0, margin = void 0, backgroundColor = "rgb(255 255 255/1)", noDataText = "Sorry, nothing found", loadingText = "Searching for references ...", borderColor = "rgb(228 228 231/1)", borderRadius = void 0, results = [], loading = false, footer = true, activeKeyboard = false;
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div
|
|
8
|
+
style:--search-results-width={width}
|
|
9
|
+
style:--search-results-max-width={maxWidth}
|
|
10
|
+
style:--search-results-height={height}
|
|
11
|
+
style:--search-results-max-height={maxHeight}
|
|
12
|
+
style:--search-results-margin={margin}
|
|
13
|
+
style:--search-results-background-color={backgroundColor}
|
|
14
|
+
style:--search-results-border-color={borderColor}
|
|
15
|
+
style:--search-results-border-radius={borderRadius}
|
|
16
|
+
class="container"
|
|
17
|
+
>
|
|
18
|
+
{#if loading}
|
|
19
|
+
<div class="loading-container">
|
|
20
|
+
<slot name="loading">
|
|
21
|
+
<span style:font-size=".875rem">{loadingText}</span>
|
|
22
|
+
</slot>
|
|
23
|
+
</div>
|
|
24
|
+
{:else if !results || results.length == 0}
|
|
25
|
+
<div
|
|
26
|
+
class="no-data-container"
|
|
27
|
+
>
|
|
28
|
+
<slot name="no-data">
|
|
29
|
+
<span style:font-size=".875rem">{noDataText}</span>
|
|
30
|
+
</slot>
|
|
31
|
+
</div>
|
|
32
|
+
{:else}
|
|
33
|
+
<div>
|
|
34
|
+
<SelectableVerticalList
|
|
35
|
+
elements={results.map((r) => {
|
|
36
|
+
return {
|
|
37
|
+
title: r.title,
|
|
38
|
+
description: r.subtitle,
|
|
39
|
+
name: r.name,
|
|
40
|
+
data: r.data
|
|
41
|
+
}
|
|
42
|
+
})}
|
|
43
|
+
activeKeyboard={activeKeyboard}
|
|
44
|
+
on:focus
|
|
45
|
+
on:select
|
|
46
|
+
>
|
|
47
|
+
<div
|
|
48
|
+
slot="description"
|
|
49
|
+
let:element
|
|
50
|
+
style:margin-top=".5rem"
|
|
51
|
+
style:opacity="60%"
|
|
52
|
+
>
|
|
53
|
+
{element.description}
|
|
54
|
+
</div>
|
|
55
|
+
</SelectableVerticalList>
|
|
56
|
+
</div>
|
|
57
|
+
{/if}
|
|
58
|
+
{#if footer}
|
|
59
|
+
<div class="footer">
|
|
60
|
+
<slot name="footer">
|
|
61
|
+
<span
|
|
62
|
+
style:font-size=".875rem"
|
|
63
|
+
>
|
|
64
|
+
<span
|
|
65
|
+
style:opacity=".5"
|
|
66
|
+
>Search with</span> ❤️
|
|
67
|
+
</span>
|
|
68
|
+
</slot>
|
|
69
|
+
</div>
|
|
70
|
+
{/if}
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
<style>
|
|
74
|
+
.container {
|
|
75
|
+
width: var(--search-results-width);
|
|
76
|
+
max-width: var(--search-results-max-width);
|
|
77
|
+
height: var(--search-results-height);
|
|
78
|
+
max-height: var(--search-results-max-height);
|
|
79
|
+
background-color: var(--search-results-background-color);
|
|
80
|
+
margin: var(--search-results-margin);
|
|
81
|
+
border-top: 1px solid var(--search-results-border-color);
|
|
82
|
+
border-radius: var(--search-results-border-radius);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.no-data-container, .loading-container {
|
|
86
|
+
display: flex;
|
|
87
|
+
align-items: center;
|
|
88
|
+
justify-content: center;
|
|
89
|
+
padding: 2rem;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.footer {
|
|
93
|
+
border-top: 1px solid var(--search-results-border-color);
|
|
94
|
+
display: flex;
|
|
95
|
+
align-items: center;
|
|
96
|
+
justify-content: flex-end;
|
|
97
|
+
padding: 0 1rem;
|
|
98
|
+
height: 2rem;
|
|
99
|
+
}
|
|
100
|
+
</style>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
export type Result = {
|
|
3
|
+
title: string;
|
|
4
|
+
name: string | number;
|
|
5
|
+
subtitle?: string;
|
|
6
|
+
url?: string;
|
|
7
|
+
data?: Record<string, any>;
|
|
8
|
+
};
|
|
9
|
+
declare const __propDef: {
|
|
10
|
+
props: {
|
|
11
|
+
maxWidth?: string | undefined;
|
|
12
|
+
width?: string | undefined;
|
|
13
|
+
height?: string | undefined;
|
|
14
|
+
maxHeight?: string | undefined;
|
|
15
|
+
margin?: string | undefined;
|
|
16
|
+
backgroundColor?: string | undefined;
|
|
17
|
+
noDataText?: string | undefined;
|
|
18
|
+
loadingText?: string | undefined;
|
|
19
|
+
borderColor?: string | undefined;
|
|
20
|
+
borderRadius?: string | undefined;
|
|
21
|
+
results?: Result[] | undefined;
|
|
22
|
+
loading?: boolean | undefined;
|
|
23
|
+
footer?: boolean | undefined;
|
|
24
|
+
activeKeyboard?: boolean | undefined;
|
|
25
|
+
};
|
|
26
|
+
events: {
|
|
27
|
+
focus: CustomEvent<{
|
|
28
|
+
element: import("../../simple/lists/SelectableVerticalList.svelte").Element;
|
|
29
|
+
}>;
|
|
30
|
+
select: CustomEvent<{
|
|
31
|
+
element: import("../../simple/lists/SelectableVerticalList.svelte").Element;
|
|
32
|
+
}>;
|
|
33
|
+
} & {
|
|
34
|
+
[evt: string]: CustomEvent<any>;
|
|
35
|
+
};
|
|
36
|
+
slots: {
|
|
37
|
+
loading: {};
|
|
38
|
+
'no-data': {};
|
|
39
|
+
footer: {};
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
export type SearchResultsProps = typeof __propDef.props;
|
|
43
|
+
export type SearchResultsEvents = typeof __propDef.events;
|
|
44
|
+
export type SearchResultsSlots = typeof __propDef.slots;
|
|
45
|
+
export default class SearchResults extends SvelteComponentTyped<SearchResultsProps, SearchResultsEvents, SearchResultsSlots> {
|
|
46
|
+
}
|
|
47
|
+
export {};
|
|
@@ -1,29 +1,12 @@
|
|
|
1
|
-
<script>export let image =
|
|
2
|
-
$:
|
|
3
|
-
|
|
1
|
+
<script>export let image = "", title = "", sale = false, saleText = "SALE", price = void 0, currency = "\u20AC", discount = void 0, maxWidth = void 0, maxHeight = void 0, minWidth = void 0, minHeight = void 0, width = void 0, height = void 0;
|
|
2
|
+
$:
|
|
3
|
+
priceLessDiscount = Number(((price || 0) - (discount || 0)).toFixed(2));
|
|
4
|
+
import Image from "../../../media/Image.svelte";
|
|
4
5
|
</script>
|
|
5
6
|
|
|
6
|
-
<
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
--ring-inset: inset;
|
|
10
|
-
--ring-offset-width: 0px;
|
|
11
|
-
--ring-color: rgb(255 255 255/0.1);
|
|
12
|
-
--ring-offset-shadow: var(--ring-inset) 0 0 0 calc(1px + var(--ring-offset-width)) var(--ring-color);
|
|
13
|
-
--ring-shadow: 0 0 #0000;
|
|
14
|
-
--shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
15
|
-
--shadow-colored: 0 10px 15px -3px var(--shadow-color), 0 4px 6px -4px var(--shadow-color);
|
|
16
|
-
box-shadow: var(--ring-offset-shadow, 0 0 #0000), var(--ring-shadow, 0 0 #0000), var(--shadow);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.info {
|
|
20
|
-
height: var(--info-height, 100px);
|
|
21
|
-
}
|
|
22
|
-
</style>
|
|
23
|
-
|
|
24
|
-
<div
|
|
25
|
-
style:width={width}
|
|
26
|
-
style:height={height}
|
|
7
|
+
<div
|
|
8
|
+
style:width
|
|
9
|
+
style:height
|
|
27
10
|
style:max-width={maxWidth}
|
|
28
11
|
style:max-height={maxHeight}
|
|
29
12
|
style:min-width={minWidth}
|
|
@@ -39,7 +22,7 @@ import Image from '../media/Image.svelte';
|
|
|
39
22
|
--border-radius="10px 10px 0px 0px"
|
|
40
23
|
>
|
|
41
24
|
{#if sale}
|
|
42
|
-
<div
|
|
25
|
+
<div
|
|
43
26
|
style:font-weight="600"
|
|
44
27
|
style:font-size="14px"
|
|
45
28
|
style:line-height="20px"
|
|
@@ -52,54 +35,64 @@ import Image from '../media/Image.svelte';
|
|
|
52
35
|
style:position="absolute"
|
|
53
36
|
style:padding-left="8px"
|
|
54
37
|
style:padding-right="8px"
|
|
55
|
-
>
|
|
38
|
+
>
|
|
39
|
+
{saleText}
|
|
40
|
+
</div>
|
|
56
41
|
{/if}
|
|
57
42
|
</Image>
|
|
58
|
-
<div
|
|
59
|
-
style:
|
|
60
|
-
style:position="relative"
|
|
61
|
-
class="info"
|
|
62
|
-
>
|
|
63
|
-
<div style:font-weight="600" >{title}</div>
|
|
43
|
+
<div style:padding="8px" style:position="relative" class="info">
|
|
44
|
+
<div style:font-weight="600">{title}</div>
|
|
64
45
|
{#if (price !== undefined && price !== null) || (discount !== undefined && discount !== null)}
|
|
65
|
-
<div
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
style:right="8px"
|
|
69
|
-
>
|
|
70
|
-
{#if discount !== undefined && discount !== null }
|
|
71
|
-
<span
|
|
46
|
+
<div style:position="absolute" style:bottom="19px" style:right="8px">
|
|
47
|
+
{#if discount !== undefined && discount !== null}
|
|
48
|
+
<span
|
|
72
49
|
style:text-decoration-line="line-through"
|
|
73
50
|
style:font-size=""
|
|
74
51
|
style:letter-spacing="0.025em"
|
|
75
52
|
style:font-weight="400px"
|
|
76
53
|
style:color="rgb(156 163 175)"
|
|
77
54
|
>
|
|
78
|
-
{priceLessDiscount}
|
|
55
|
+
{priceLessDiscount}
|
|
56
|
+
{currency}
|
|
79
57
|
</span>
|
|
80
58
|
{/if}
|
|
81
59
|
|
|
82
|
-
{#if price !== undefined && price !== null
|
|
83
|
-
<span
|
|
60
|
+
{#if price !== undefined && price !== null}
|
|
61
|
+
<span
|
|
84
62
|
style:letter-spacing="0.025em"
|
|
85
63
|
style:font-size="18px"
|
|
86
64
|
style:line-height="28px"
|
|
87
65
|
style:font-weight="600"
|
|
88
66
|
>
|
|
89
|
-
{price}
|
|
67
|
+
{price}
|
|
68
|
+
{currency}
|
|
90
69
|
</span>
|
|
91
70
|
{/if}
|
|
92
71
|
</div>
|
|
93
72
|
{/if}
|
|
94
|
-
<div
|
|
95
|
-
|
|
96
|
-
style:bottom="19px"
|
|
97
|
-
style:left="8px"
|
|
98
|
-
>
|
|
99
|
-
<slot name="sizes">
|
|
100
|
-
|
|
101
|
-
</slot>
|
|
73
|
+
<div style:position="absolute" style:bottom="19px" style:left="8px">
|
|
74
|
+
<slot name="sizes" />
|
|
102
75
|
</div>
|
|
103
76
|
</div>
|
|
104
77
|
</div>
|
|
105
78
|
|
|
79
|
+
<style>
|
|
80
|
+
.shadow-lg {
|
|
81
|
+
--shadow-color: #000;
|
|
82
|
+
--ring-inset: inset;
|
|
83
|
+
--ring-offset-width: 0px;
|
|
84
|
+
--ring-color: rgb(255 255 255/0.1);
|
|
85
|
+
--ring-offset-shadow: var(--ring-inset) 0 0 0
|
|
86
|
+
calc(1px + var(--ring-offset-width)) var(--ring-color);
|
|
87
|
+
--ring-shadow: 0 0 #0000;
|
|
88
|
+
--shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
89
|
+
--shadow-colored: 0 10px 15px -3px var(--shadow-color),
|
|
90
|
+
0 4px 6px -4px var(--shadow-color);
|
|
91
|
+
box-shadow: var(--ring-offset-shadow, 0 0 #0000),
|
|
92
|
+
var(--ring-shadow, 0 0 #0000), var(--shadow);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.info {
|
|
96
|
+
height: var(--info-height, 100px);
|
|
97
|
+
}
|
|
98
|
+
</style>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
image?: string | undefined;
|
|
5
|
+
title?: string | undefined;
|
|
6
|
+
sale?: boolean | undefined;
|
|
7
|
+
saleText?: string | undefined;
|
|
8
|
+
price?: number | undefined;
|
|
9
|
+
currency?: string | undefined;
|
|
10
|
+
discount?: number | undefined;
|
|
11
|
+
maxWidth?: string | undefined;
|
|
12
|
+
maxHeight?: string | undefined;
|
|
13
|
+
minWidth?: string | undefined;
|
|
14
|
+
minHeight?: string | undefined;
|
|
15
|
+
width?: string | undefined;
|
|
16
|
+
height?: string | undefined;
|
|
17
|
+
};
|
|
18
|
+
events: {
|
|
19
|
+
[evt: string]: CustomEvent<any>;
|
|
20
|
+
};
|
|
21
|
+
slots: {
|
|
22
|
+
sizes: {};
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export type ProductCardProps = typeof __propDef.props;
|
|
26
|
+
export type ProductCardEvents = typeof __propDef.events;
|
|
27
|
+
export type ProductCardSlots = typeof __propDef.slots;
|
|
28
|
+
export default class ProductCard extends SvelteComponentTyped<ProductCardProps, ProductCardEvents, ProductCardSlots> {
|
|
29
|
+
}
|
|
30
|
+
export {};
|