@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.
Files changed (180) hide show
  1. package/README.md +2 -2
  2. package/dist/components/composed/search/GlobalSearchTextField.svelte +176 -0
  3. package/dist/components/composed/search/GlobalSearchTextField.svelte.d.ts +47 -0
  4. package/dist/components/composed/search/SearchBar.svelte +82 -0
  5. package/dist/components/composed/search/SearchBar.svelte.d.ts +33 -0
  6. package/dist/components/composed/search/SearchResults.svelte +100 -0
  7. package/dist/components/composed/search/SearchResults.svelte.d.ts +47 -0
  8. package/{shop → dist/components/composed/shop}/ProductCard.svelte +44 -51
  9. package/dist/components/composed/shop/ProductCard.svelte.d.ts +30 -0
  10. package/{shop → dist/components/composed/shop}/ProductsGrid.svelte +15 -13
  11. package/dist/components/composed/shop/ProductsGrid.svelte.d.ts +44 -0
  12. package/dist/components/layouts/StableDividedSideBarLayout.svelte +189 -0
  13. package/dist/components/layouts/StableDividedSideBarLayout.svelte.d.ts +39 -0
  14. package/dist/components/simple/buttons/Button.svelte +147 -0
  15. package/dist/components/simple/buttons/Button.svelte.d.ts +53 -0
  16. package/dist/components/simple/buttons/DefaultButton.svelte +93 -0
  17. package/dist/components/simple/buttons/DefaultButton.svelte.d.ts +50 -0
  18. package/dist/components/simple/buttons/LinkButton.svelte +78 -0
  19. package/dist/components/simple/buttons/LinkButton.svelte.d.ts +49 -0
  20. package/dist/components/simple/common/Card.svelte +37 -0
  21. package/dist/components/simple/common/Card.svelte.d.ts +40 -0
  22. package/dist/components/simple/common/Gesture.svelte +57 -0
  23. package/{common → dist/components/simple/common}/Gesture.svelte.d.ts +5 -5
  24. package/dist/components/simple/common/IntersectionObserver.svelte +47 -0
  25. package/dist/components/simple/common/IntersectionObserver.svelte.d.ts +24 -0
  26. package/dist/components/simple/common/MediaQuery.svelte +40 -0
  27. package/{common → dist/components/simple/common}/MediaQuery.svelte.d.ts +4 -4
  28. package/dist/components/simple/common/Menu.svelte +120 -0
  29. package/dist/components/simple/common/Menu.svelte.d.ts +36 -0
  30. package/dist/components/simple/common/Playground.svelte +52 -0
  31. package/dist/components/simple/common/Playground.svelte.d.ts +17 -0
  32. package/{common → dist/components/simple/common}/SimpleTable.svelte +4 -4
  33. package/{common → dist/components/simple/common}/SimpleTable.svelte.d.ts +15 -15
  34. package/{common → dist/components/simple/common}/materialDesign.css +1 -1
  35. package/{common → dist/components/simple/common}/scroller.js +4 -2
  36. package/dist/components/simple/dates/Calendar.svelte +115 -0
  37. package/dist/components/simple/dates/Calendar.svelte.d.ts +48 -0
  38. package/{dates → dist/components/simple/dates}/DatePicker.svelte +42 -38
  39. package/dist/components/simple/dates/DatePicker.svelte.d.ts +38 -0
  40. package/{dates → dist/components/simple/dates}/MonthSelector.svelte +11 -15
  41. package/{dates → dist/components/simple/dates}/MonthSelector.svelte.d.ts +10 -10
  42. package/dist/components/simple/dates/TimePickerTextField.svelte +78 -0
  43. package/dist/components/simple/dates/TimePickerTextField.svelte.d.ts +26 -0
  44. package/dist/components/simple/dates/YearSelector.svelte +53 -0
  45. package/{dates → dist/components/simple/dates}/YearSelector.svelte.d.ts +7 -7
  46. package/{dates → dist/components/simple/dates}/utils.d.ts +5 -5
  47. package/{dates → dist/components/simple/dates}/utils.js +68 -48
  48. package/dist/components/simple/dialogs/Dialog.svelte +410 -0
  49. package/dist/components/simple/dialogs/Dialog.svelte.d.ts +30 -0
  50. package/dist/components/simple/forms/Autocomplete.svelte +225 -0
  51. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +70 -0
  52. package/{forms → dist/components/simple/forms}/Checkbox.svelte +4 -5
  53. package/dist/components/simple/forms/Checkbox.svelte.d.ts +28 -0
  54. package/dist/components/simple/forms/FileInput.svelte +92 -0
  55. package/dist/components/simple/forms/FileInput.svelte.d.ts +37 -0
  56. package/dist/components/simple/forms/FileInputList.svelte +135 -0
  57. package/dist/components/simple/forms/FileInputList.svelte.d.ts +30 -0
  58. package/{forms → dist/components/simple/forms}/Switch.svelte +18 -15
  59. package/dist/components/simple/forms/Switch.svelte.d.ts +27 -0
  60. package/{forms → dist/components/simple/forms}/Textarea.svelte +14 -18
  61. package/dist/components/simple/forms/Textarea.svelte.d.ts +39 -0
  62. package/dist/components/simple/forms/Textfield.svelte +324 -0
  63. package/dist/components/simple/forms/Textfield.svelte.d.ts +54 -0
  64. package/{forms → dist/components/simple/forms}/VerticalSwitch.svelte +14 -25
  65. package/dist/components/simple/forms/VerticalSwitch.svelte.d.ts +30 -0
  66. package/{forms → dist/components/simple/forms}/VerticalTextSwitch.svelte +19 -10
  67. package/dist/components/simple/forms/VerticalTextSwitch.svelte.d.ts +28 -0
  68. package/dist/components/simple/lists/SelectableVerticalList.svelte +129 -0
  69. package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +52 -0
  70. package/dist/components/simple/lists/SidebarMenuList.svelte +169 -0
  71. package/dist/components/simple/lists/SidebarMenuList.svelte.d.ts +31 -0
  72. package/{loaders → dist/components/simple/loaders}/CircularLoader.svelte +24 -24
  73. package/dist/components/simple/loaders/CircularLoader.svelte.d.ts +19 -0
  74. package/{loaders → dist/components/simple/loaders}/Skeleton.svelte +27 -19
  75. package/dist/components/simple/loaders/Skeleton.svelte.d.ts +28 -0
  76. package/dist/components/simple/media/AttachmentDownloader.svelte +47 -0
  77. package/dist/components/simple/media/AttachmentDownloader.svelte.d.ts +30 -0
  78. package/dist/components/simple/media/Avatar.svelte +32 -0
  79. package/dist/components/simple/media/Avatar.svelte.d.ts +26 -0
  80. package/{media → dist/components/simple/media}/Carousel.svelte +16 -19
  81. package/dist/components/simple/media/Carousel.svelte.d.ts +26 -0
  82. package/dist/components/simple/media/DescriptiveAvatar.svelte +86 -0
  83. package/dist/components/simple/media/DescriptiveAvatar.svelte.d.ts +35 -0
  84. package/{media → dist/components/simple/media}/Gallery.svelte +39 -44
  85. package/dist/components/simple/media/Gallery.svelte.d.ts +26 -0
  86. package/{media → dist/components/simple/media}/Icon.svelte +1 -0
  87. package/{media → dist/components/simple/media}/Icon.svelte.d.ts +8 -7
  88. package/{media → dist/components/simple/media}/Image.svelte +57 -55
  89. package/dist/components/simple/media/Image.svelte.d.ts +35 -0
  90. package/{media → dist/components/simple/media}/ImageGrid.svelte +15 -17
  91. package/dist/components/simple/media/ImageGrid.svelte.d.ts +35 -0
  92. package/{navigation → dist/components/simple/navigation}/Breadcrumb.svelte +23 -22
  93. package/{navigation → dist/components/simple/navigation}/Breadcrumb.svelte.d.ts +9 -9
  94. package/{navigation → dist/components/simple/navigation}/Chip.svelte +19 -25
  95. package/dist/components/simple/navigation/Chip.svelte.d.ts +30 -0
  96. package/dist/components/simple/navigation/Drawer.svelte +139 -0
  97. package/dist/components/simple/navigation/Drawer.svelte.d.ts +33 -0
  98. package/{navigation → dist/components/simple/navigation}/HeaderMenu.svelte +38 -55
  99. package/dist/components/simple/navigation/HeaderMenu.svelte.d.ts +40 -0
  100. package/dist/components/simple/navigation/Navigator.svelte +89 -0
  101. package/dist/components/simple/navigation/Navigator.svelte.d.ts +33 -0
  102. package/{navigation → dist/components/simple/navigation}/TabSwitcher.svelte +46 -36
  103. package/dist/components/simple/navigation/TabSwitcher.svelte.d.ts +39 -0
  104. package/dist/components/simple/progress/ProgressBar.svelte +37 -0
  105. package/dist/components/simple/progress/ProgressBar.svelte.d.ts +22 -0
  106. package/{timeline → dist/components/simple/timeline}/SimpleTimeLine.svelte +73 -60
  107. package/{timeline → dist/components/simple/timeline}/SimpleTimeLine.svelte.d.ts +17 -17
  108. package/dist/components/simple/typography/Code.svelte +52 -0
  109. package/dist/components/simple/typography/Code.svelte.d.ts +28 -0
  110. package/dist/components/simple/typography/dracula.css +81 -0
  111. package/dist/index.d.ts +44 -0
  112. package/dist/index.js +44 -0
  113. package/{stores → dist/stores}/mediaQuery.d.ts +1 -1
  114. package/{stores → dist/stores}/mediaQuery.js +23 -23
  115. package/dist/utils/keyboarder.d.ts +14 -0
  116. package/dist/utils/keyboarder.js +31 -0
  117. package/dist/utils/teleporter.d.ts +10 -0
  118. package/dist/utils/teleporter.js +35 -0
  119. package/package.json +197 -108
  120. package/buttons/Button.svelte +0 -131
  121. package/buttons/Button.svelte.d.ts +0 -51
  122. package/buttons/ToggleButton.svelte +0 -0
  123. package/buttons/ToggleButton.svelte.d.ts +0 -19
  124. package/common/Card.svelte +0 -46
  125. package/common/Card.svelte.d.ts +0 -39
  126. package/common/Gesture.svelte +0 -65
  127. package/common/IntersectionObserver.svelte +0 -58
  128. package/common/IntersectionObserver.svelte.d.ts +0 -39
  129. package/common/MediaQuery.svelte +0 -30
  130. package/common/Menu.svelte +0 -112
  131. package/common/Menu.svelte.d.ts +0 -36
  132. package/dates/Calendar.svelte +0 -119
  133. package/dates/Calendar.svelte.d.ts +0 -48
  134. package/dates/DatePicker.svelte.d.ts +0 -38
  135. package/dates/TimePickerTextField.svelte +0 -90
  136. package/dates/TimePickerTextField.svelte.d.ts +0 -26
  137. package/dates/YearSelector.svelte +0 -63
  138. package/dialogs/Dialog.svelte +0 -112
  139. package/dialogs/Dialog.svelte.d.ts +0 -25
  140. package/forms/Autocomplete.svelte +0 -236
  141. package/forms/Autocomplete.svelte.d.ts +0 -70
  142. package/forms/Checkbox.svelte.d.ts +0 -28
  143. package/forms/FileInput.svelte +0 -90
  144. package/forms/FileInput.svelte.d.ts +0 -43
  145. package/forms/FileInputList.svelte +0 -123
  146. package/forms/FileInputList.svelte.d.ts +0 -30
  147. package/forms/Switch.svelte.d.ts +0 -27
  148. package/forms/Textarea.svelte.d.ts +0 -39
  149. package/forms/Textfield.svelte +0 -319
  150. package/forms/Textfield.svelte.d.ts +0 -54
  151. package/forms/VerticalSwitch.svelte.d.ts +0 -30
  152. package/forms/VerticalTextSwitch.svelte.d.ts +0 -28
  153. package/loaders/CircularLoader.svelte.d.ts +0 -19
  154. package/loaders/Skeleton.svelte.d.ts +0 -28
  155. package/loaders/sectionType.d.ts +0 -4
  156. package/loaders/sectionType.js +0 -5
  157. package/media/AttachmentDownloader.svelte +0 -60
  158. package/media/AttachmentDownloader.svelte.d.ts +0 -30
  159. package/media/Avatar.svelte +0 -32
  160. package/media/Avatar.svelte.d.ts +0 -26
  161. package/media/Carousel.svelte.d.ts +0 -26
  162. package/media/DescriptiveAvatar.svelte +0 -81
  163. package/media/DescriptiveAvatar.svelte.d.ts +0 -32
  164. package/media/Gallery.svelte.d.ts +0 -26
  165. package/media/Image.svelte.d.ts +0 -34
  166. package/media/ImageGrid.svelte.d.ts +0 -35
  167. package/navigation/Chip.svelte.d.ts +0 -30
  168. package/navigation/Drawer.svelte +0 -140
  169. package/navigation/Drawer.svelte.d.ts +0 -37
  170. package/navigation/HeaderMenu.svelte.d.ts +0 -42
  171. package/navigation/Navigator.svelte +0 -63
  172. package/navigation/Navigator.svelte.d.ts +0 -29
  173. package/navigation/TabSwitcher.svelte.d.ts +0 -35
  174. package/progress/ProgressBar.svelte +0 -36
  175. package/progress/ProgressBar.svelte.d.ts +0 -22
  176. package/shop/ProductCard.svelte.d.ts +0 -30
  177. package/shop/ProductsGrid.svelte.d.ts +0 -44
  178. package/timeline/ScrollTimeLine.svelte +0 -82
  179. package/timeline/ScrollTimeLine.svelte.d.ts +0 -31
  180. /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 = '', title = '', sale = false, saleText = 'SALE', price = undefined, currency = '€', discount = undefined, maxWidth = undefined, maxHeight = undefined, minWidth = undefined, minHeight = undefined, width = undefined, height = undefined;
2
- $: priceLessDiscount = Number((price - discount).toFixed(2));
3
- import Image from '../media/Image.svelte';
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
- <style>
7
- .shadow-lg {
8
- --shadow-color: #000;
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
- >{saleText}</div>
38
+ >
39
+ {saleText}
40
+ </div>
56
41
  {/if}
57
42
  </Image>
58
- <div
59
- style:padding="8px"
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
- style:position="absolute"
67
- style:bottom="19px"
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} {currency}
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} {currency}
67
+ {price}
68
+ {currency}
90
69
  </span>
91
70
  {/if}
92
71
  </div>
93
72
  {/if}
94
- <div
95
- style:position="absolute"
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 {};