@likable-hair/svelte 0.0.24 → 0.0.27

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.
@@ -0,0 +1,30 @@
1
+ <script >import mediaQuery from "../stores/mediaQuery";
2
+ $: xsAndDown = $mediaQuery.xs;
3
+ $: sAndDown = $mediaQuery.s || $mediaQuery.xs;
4
+ $: mAndDown = $mediaQuery.s || $mediaQuery.xs || $mediaQuery.m;
5
+ $: lAndDown = $mediaQuery.s || $mediaQuery.xs || $mediaQuery.m || $mediaQuery.l;
6
+ $: xlAndDown = $mediaQuery.s || $mediaQuery.xs || $mediaQuery.m || $mediaQuery.l || $mediaQuery.xl;
7
+ $: xlAndUp = $mediaQuery.xl;
8
+ $: lAndUp = $mediaQuery.xl || $mediaQuery.l;
9
+ $: mAndUp = $mediaQuery.xl || $mediaQuery.l || $mediaQuery.m;
10
+ $: sAndUp = $mediaQuery.xl || $mediaQuery.l || $mediaQuery.m || $mediaQuery.s || $mediaQuery.xs;
11
+ $: xsAndUp = $mediaQuery.xl || $mediaQuery.l || $mediaQuery.m || $mediaQuery.s || $mediaQuery.xs;
12
+ </script>
13
+
14
+ <slot
15
+ xs={$mediaQuery.xs}
16
+ s={$mediaQuery.s}
17
+ m={$mediaQuery.m}
18
+ l={$mediaQuery.l}
19
+ xl={$mediaQuery.xl}
20
+ xsAndDown={xsAndDown}
21
+ sAndDown={sAndDown}
22
+ mAndDown={mAndDown}
23
+ lAndDown={lAndDown}
24
+ xlAndDown={xlAndDown}
25
+ xlAndUp={xlAndUp}
26
+ lAndUp={lAndUp}
27
+ mAndUp={mAndUp}
28
+ sAndUp={sAndUp}
29
+ xsAndUp={xsAndUp}
30
+ ></slot>
@@ -0,0 +1,32 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {};
4
+ events: {
5
+ [evt: string]: CustomEvent<any>;
6
+ };
7
+ slots: {
8
+ default: {
9
+ xs: boolean;
10
+ s: boolean;
11
+ m: boolean;
12
+ l: boolean;
13
+ xl: boolean;
14
+ xsAndDown: boolean;
15
+ sAndDown: boolean;
16
+ mAndDown: boolean;
17
+ lAndDown: boolean;
18
+ xlAndDown: boolean;
19
+ xlAndUp: boolean;
20
+ lAndUp: boolean;
21
+ mAndUp: boolean;
22
+ sAndUp: boolean;
23
+ xsAndUp: boolean;
24
+ };
25
+ };
26
+ };
27
+ export declare type MediaQueryProps = typeof __propDef.props;
28
+ export declare type MediaQueryEvents = typeof __propDef.events;
29
+ export declare type MediaQuerySlots = typeof __propDef.slots;
30
+ export default class MediaQuery extends SvelteComponentTyped<MediaQueryProps, MediaQueryEvents, MediaQuerySlots> {
31
+ }
32
+ export {};
@@ -3,6 +3,7 @@ export declare type Item = {
3
3
  title: string;
4
4
  name: string;
5
5
  url?: string;
6
+ detail?: object;
6
7
  };
7
8
  declare const __propDef: {
8
9
  props: {
@@ -2,9 +2,7 @@
2
2
  </script>
3
3
 
4
4
  <script >import { onMount } from 'svelte';
5
- export let tabs = [];
6
- export let selected = undefined;
7
- export let mandatory = true;
5
+ export let tabs = [], selected = undefined, mandatory = true, width = undefined, color = "rgb(51 65 85)", bookmarkColor = undefined;
8
6
  let tabButtons = {};
9
7
  onMount(() => {
10
8
  if (mandatory && !selected && tabs.length > 0)
@@ -28,14 +26,16 @@ function setBookmarkPosition() {
28
26
  <div
29
27
  style:position="relative"
30
28
  style:display="flex"
31
- class="tab-switcher-container"
29
+ style:width={width}
32
30
  >
33
31
  {#each tabs as tab}
34
32
  <div
33
+ style:-webkit-tap-highlight-color="rgba(0,0,0,0)"
35
34
  style:cursor="pointer"
36
35
  style:margin-left="12px"
37
36
  style:margin-right="12px"
38
37
  style:padding="8px"
38
+ style:--tab-switcher-color={color}
39
39
  class:selected-tab={tab.name == selected}
40
40
  on:click={() => handleTabClick(tab)}
41
41
  bind:this={tabButtons[tab.name]}
@@ -46,27 +46,26 @@ function setBookmarkPosition() {
46
46
  <span
47
47
  style:left={bookmarkLeft + 'px'}
48
48
  style:width={bookmarkWidth + 'px'}
49
+ style:--tab-switcher-bookmark-color={bookmarkColor || color}
49
50
  class="bookmark"
50
51
  ></span>
51
- <span class="horizontal-guide"></span>
52
+ <span
53
+ style:width={width}
54
+ class="horizontal-guide"
55
+ ></span>
52
56
  </div>
53
57
 
54
58
  <style>
55
- .tab-switcher-container {
56
- width: var(--width)
57
- }
58
-
59
59
  .selected-tab {
60
- color: var(--color, rgb(51 65 85));
60
+ color: var(--tab-switcher-color, rgb(51 65 85));
61
61
  }
62
62
 
63
63
  .horizontal-guide {
64
64
  position: absolute;
65
- width: var(--width, 100%);
66
65
  z-index: 5;
67
66
  bottom: 0px;
68
67
  height: 1px;
69
- background-color: var(--color, rgb(51 65 85));
68
+ background-color: var(--tab-switcher-color, rgb(51 65 85));
70
69
  opacity: 20%;
71
70
  }
72
71
 
@@ -76,7 +75,7 @@ function setBookmarkPosition() {
76
75
  height: 2px;
77
76
  border-radius: 0.125rem;
78
77
  z-index: 10;
79
- background-color: var(--bookmark-color, var(--color, rgb(51 65 85)));
78
+ background-color: var(--tab-switcher-bookmark-color, var(--tab-switcher-color, rgb(51 65 85)));
80
79
  transition: left 400ms, width 400ms;
81
80
  }
82
81
 
@@ -9,6 +9,9 @@ declare const __propDef: {
9
9
  tabs?: Tab[];
10
10
  selected?: string;
11
11
  mandatory?: boolean;
12
+ width?: string;
13
+ color?: string;
14
+ bookmarkColor?: string;
12
15
  };
13
16
  events: {
14
17
  [evt: string]: CustomEvent<any>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@likable-hair/svelte",
3
3
  "description": "A Svelte component for likablehair",
4
- "version": "0.0.24",
4
+ "version": "0.0.27",
5
5
  "devDependencies": {
6
6
  "@sveltejs/adapter-auto": "next",
7
7
  "@sveltejs/kit": "next",
@@ -28,6 +28,7 @@
28
28
  "./common/Card.svelte": "./common/Card.svelte",
29
29
  "./common/Gesture.svelte": "./common/Gesture.svelte",
30
30
  "./common/IntersectionObserver.svelte": "./common/IntersectionObserver.svelte",
31
+ "./common/MediaQuery.svelte": "./common/MediaQuery.svelte",
31
32
  "./common/materialDesign.css": "./common/materialDesign.css",
32
33
  "./dates/Calendar.svelte": "./dates/Calendar.svelte",
33
34
  "./dates/utils": "./dates/utils.js",
@@ -50,6 +51,7 @@
50
51
  "./progress/ProgressBar.svelte": "./progress/ProgressBar.svelte",
51
52
  "./shop/ProductCard.svelte": "./shop/ProductCard.svelte",
52
53
  "./shop/ProductsGrid.svelte": "./shop/ProductsGrid.svelte",
54
+ "./stores/mediaQuery": "./stores/mediaQuery.js",
53
55
  "./timeline/ScrollTimeLine.svelte": "./timeline/ScrollTimeLine.svelte",
54
56
  "./timeline/SimpleTimeLine.svelte": "./timeline/SimpleTimeLine.svelte"
55
57
  },
@@ -0,0 +1,9 @@
1
+ export declare type DeviceDimension = {
2
+ xs: boolean;
3
+ s: boolean;
4
+ m: boolean;
5
+ l: boolean;
6
+ xl: boolean;
7
+ };
8
+ declare const _default: import("svelte/store").Readable<DeviceDimension>;
9
+ export default _default;
@@ -0,0 +1,154 @@
1
+ /*
2
+ 320px — 425px: Mobile devices
3
+ 426px — 768px: iPads, Tablets
4
+ 769px — 1024px: Small screens, laptops
5
+ 1025px — 1440px: Desktops, large screens
6
+ 1441px and more —  Extra large screens, TV
7
+ */
8
+ import { readable } from "svelte/store";
9
+ import { browser } from "$app/env";
10
+ // 0px — 425px: Mobile devices
11
+ function handleMatchOnXsQuery(event) {
12
+ if (event.matches) {
13
+ return {
14
+ xs: true,
15
+ s: false,
16
+ m: false,
17
+ l: false,
18
+ xl: false
19
+ };
20
+ }
21
+ }
22
+ // 426px — 768px: iPads, Tablets
23
+ function handleMatchOnSQuery(event) {
24
+ if (event.matches) {
25
+ return {
26
+ xs: false,
27
+ s: true,
28
+ m: false,
29
+ l: false,
30
+ xl: false
31
+ };
32
+ }
33
+ }
34
+ // 769px — 1024px: Small screens, laptops
35
+ function handleMatchOnMQuery(event) {
36
+ if (event.matches) {
37
+ return {
38
+ xs: false,
39
+ s: false,
40
+ m: true,
41
+ l: false,
42
+ xl: false
43
+ };
44
+ }
45
+ }
46
+ // 1025px — 1440px: Desktops, large screens
47
+ function handleMatchOnLQuery(event) {
48
+ if (event.matches) {
49
+ return {
50
+ xs: false,
51
+ s: false,
52
+ m: false,
53
+ l: true,
54
+ xl: false
55
+ };
56
+ }
57
+ }
58
+ // 1441px and more —  Extra large screens, TV
59
+ function handleMatchOnXlQuery(event) {
60
+ if (event.matches) {
61
+ return {
62
+ xs: false,
63
+ s: false,
64
+ m: false,
65
+ l: false,
66
+ xl: true
67
+ };
68
+ }
69
+ }
70
+ function getDeviceDimensionFromWidth(width) {
71
+ let dimension = {
72
+ xs: false,
73
+ s: false,
74
+ m: false,
75
+ l: false,
76
+ xl: false
77
+ };
78
+ if (width <= 425) {
79
+ dimension.xs = true;
80
+ }
81
+ else if (width <= 768) {
82
+ dimension.s = true;
83
+ }
84
+ else if (width <= 1024) {
85
+ dimension.m = true;
86
+ }
87
+ else if (width <= 1440) {
88
+ dimension.l = true;
89
+ }
90
+ else {
91
+ dimension.xl = true;
92
+ }
93
+ return dimension;
94
+ }
95
+ let defaultDimension = {
96
+ xs: false,
97
+ s: false,
98
+ m: true,
99
+ l: false,
100
+ xl: false
101
+ };
102
+ if (browser) {
103
+ defaultDimension = getDeviceDimensionFromWidth(window.innerWidth);
104
+ }
105
+ export default readable(defaultDimension, set => {
106
+ let mqlXs, mqlS, mqlM, mqlL, mqlXl;
107
+ let listenerXs = (e) => {
108
+ const results = handleMatchOnXsQuery(e);
109
+ if (!!results)
110
+ set(results);
111
+ };
112
+ let listenerS = (e) => {
113
+ const results = handleMatchOnSQuery(e);
114
+ if (!!results)
115
+ set(results);
116
+ };
117
+ let listenerM = (e) => {
118
+ const results = handleMatchOnMQuery(e);
119
+ if (!!results)
120
+ set(results);
121
+ };
122
+ let listenerL = (e) => {
123
+ const results = handleMatchOnLQuery(e);
124
+ if (!!results)
125
+ set(results);
126
+ };
127
+ let listenerXl = (e) => {
128
+ const results = handleMatchOnXlQuery(e);
129
+ if (!!results)
130
+ set(results);
131
+ };
132
+ if (browser) {
133
+ set(getDeviceDimensionFromWidth(window.innerWidth));
134
+ mqlXs = window.matchMedia("(max-width: 425px)");
135
+ mqlXs.addEventListener("change", listenerXs);
136
+ mqlS = window.matchMedia("(min-width: 426px) and (max-width: 768px)");
137
+ mqlS.addEventListener("change", listenerS);
138
+ mqlM = window.matchMedia("(min-width: 769px) and (max-width: 1024px)");
139
+ mqlM.addEventListener("change", listenerM);
140
+ mqlL = window.matchMedia("(min-width: 1025px) and (max-width: 1440px)");
141
+ mqlL.addEventListener("change", listenerL);
142
+ mqlXl = window.matchMedia("(min-width: 1441px)");
143
+ mqlXl.addEventListener("change", listenerXl);
144
+ }
145
+ return () => {
146
+ if (browser) {
147
+ mqlXs.removeEventListener("change", listenerXs);
148
+ mqlS.removeEventListener("change", listenerS);
149
+ mqlM.removeEventListener("change", listenerM);
150
+ mqlL.removeEventListener("change", listenerL);
151
+ mqlXl.removeEventListener("change", listenerXl);
152
+ }
153
+ };
154
+ });
@@ -32,7 +32,11 @@ import Icon from '../media/Icon.svelte';
32
32
  style:justify-content={singleSided || index % 2 == 0 ? 'start' : 'flex-end'}
33
33
  class="time-line-body"
34
34
  >
35
- <slot name="item" item={item}>
35
+ <slot
36
+ name="item"
37
+ item={item}
38
+ alignment={!singleSided && index % 2 == 0 ? 'right' : 'left'}
39
+ >
36
40
  {#if !!item.from || !!item.to || $$slots.times}
37
41
  <div
38
42
  style:padding={singleSided || index % 2 == 0 ? "0px 20px 0px 0px" : "0px 0px 0px 20px"}
@@ -61,7 +65,11 @@ import Icon from '../media/Icon.svelte';
61
65
  </div>
62
66
  {/if}
63
67
  <div class="time-line-infos">
64
- <slot name="infos" item={item}>
68
+ <slot
69
+ name="infos"
70
+ item={item}
71
+ alignment={!singleSided && index % 2 == 0 ? 'right' : 'left'}
72
+ >
65
73
  {#if !!item.title}
66
74
  <div
67
75
  style:text-align={singleSided || index % 2 == 0 ? 'left' : 'right'}
@@ -74,7 +82,11 @@ import Icon from '../media/Icon.svelte';
74
82
  class="time-line-description"
75
83
  >{item.description}</div>
76
84
  {/if}
77
- <slot name="infos-append" item={item}></slot>
85
+ <slot
86
+ name="infos-append"
87
+ item={item}
88
+ alignment={!singleSided && index % 2 == 0 ? 'right' : 'left'}
89
+ ></slot>
78
90
  </slot>
79
91
  </div>
80
92
  </slot>
@@ -29,15 +29,18 @@ declare const __propDef: {
29
29
  slots: {
30
30
  item: {
31
31
  item: TimeLineItem;
32
+ alignment: string;
32
33
  };
33
34
  times: {
34
35
  item: TimeLineItem;
35
36
  };
36
37
  infos: {
37
38
  item: TimeLineItem;
39
+ alignment: string;
38
40
  };
39
41
  'infos-append': {
40
42
  item: TimeLineItem;
43
+ alignment: string;
41
44
  };
42
45
  circle: {
43
46
  item: TimeLineItem;