@likable-hair/svelte 0.0.25 → 0.0.28

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 {};
package/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export { default as Button } from './buttons/Button.svelte';
2
2
  export { default as Card } from './common/Card.svelte';
3
3
  export { default as Gesture } from './common/Gesture.svelte';
4
4
  export { default as IntersectionObserver } from './common/IntersectionObserver.svelte';
5
+ export { default as MediaQuery } from './common/MediaQuery.svelte';
5
6
  export { default as TextField } from './forms/Textfield.svelte';
6
7
  export { default as Skeleton } from './loaders/Skeleton.svelte';
7
8
  export { default as AttachmentDownloader } from './media/AttachmentDownloader.svelte';
@@ -11,7 +12,7 @@ export { default as DescriptiveAvatar } from './media/DescriptiveAvatar.svelte';
11
12
  export { default as Icon } from './media/Icon.svelte';
12
13
  export { default as Image } from './media/Image.svelte';
13
14
  export { default as ImageGrid } from './media/ImageGrid.svelte';
14
- export { default as BreadCrumb } from './navigation/BreadCrumb.svelte';
15
+ export { default as Breadcrumb } from './navigation/Breadcrumb.svelte';
15
16
  export { default as HeaderMenu } from './navigation/HeaderMenu.svelte';
16
17
  export { default as Navigator } from './navigation/Navigator.svelte';
17
18
  export { default as TabSwitcher } from './navigation/TabSwitcher.svelte';
@@ -19,5 +20,6 @@ export { default as Drawer } from './navigation/Drawer.svelte';
19
20
  export { default as ProgressBar } from './progress/ProgressBar.svelte';
20
21
  export { default as ProductCard } from './shop/ProductCard.svelte';
21
22
  export { default as ProductGrid } from './shop/ProductCard.svelte';
23
+ export { default as mediaQueryStore } from './stores/mediaQuery';
22
24
  export { default as ScollTimeLine } from './timeline/ScrollTimeLine.svelte';
23
25
  export { default as SimpleTimeLine } from './timeline/SimpleTimeLine.svelte';
package/index.js CHANGED
@@ -4,6 +4,7 @@ export { default as Button } from './buttons/Button.svelte';
4
4
  export { default as Card } from './common/Card.svelte';
5
5
  export { default as Gesture } from './common/Gesture.svelte';
6
6
  export { default as IntersectionObserver } from './common/IntersectionObserver.svelte';
7
+ export { default as MediaQuery } from './common/MediaQuery.svelte';
7
8
  // forms
8
9
  export { default as TextField } from './forms/Textfield.svelte';
9
10
  // loaders
@@ -17,7 +18,7 @@ export { default as Icon } from './media/Icon.svelte';
17
18
  export { default as Image } from './media/Image.svelte';
18
19
  export { default as ImageGrid } from './media/ImageGrid.svelte';
19
20
  // navigation
20
- export { default as BreadCrumb } from './navigation/BreadCrumb.svelte';
21
+ export { default as Breadcrumb } from './navigation/Breadcrumb.svelte';
21
22
  export { default as HeaderMenu } from './navigation/HeaderMenu.svelte';
22
23
  export { default as Navigator } from './navigation/Navigator.svelte';
23
24
  export { default as TabSwitcher } from './navigation/TabSwitcher.svelte';
@@ -27,6 +28,8 @@ export { default as ProgressBar } from './progress/ProgressBar.svelte';
27
28
  // shop
28
29
  export { default as ProductCard } from './shop/ProductCard.svelte';
29
30
  export { default as ProductGrid } from './shop/ProductCard.svelte';
31
+ // store
32
+ export { default as mediaQueryStore } from './stores/mediaQuery';
30
33
  // timeline
31
34
  export { default as ScollTimeLine } from './timeline/ScrollTimeLine.svelte';
32
35
  export { default as SimpleTimeLine } from './timeline/SimpleTimeLine.svelte';
@@ -21,9 +21,9 @@ declare const __propDef: {
21
21
  };
22
22
  slots: {};
23
23
  };
24
- export declare type BreadCrumbProps = typeof __propDef.props;
25
- export declare type BreadCrumbEvents = typeof __propDef.events;
26
- export declare type BreadCrumbSlots = typeof __propDef.slots;
27
- export default class BreadCrumb extends SvelteComponentTyped<BreadCrumbProps, BreadCrumbEvents, BreadCrumbSlots> {
24
+ export declare type BreadcrumbProps = typeof __propDef.props;
25
+ export declare type BreadcrumbEvents = typeof __propDef.events;
26
+ export declare type BreadcrumbSlots = typeof __propDef.slots;
27
+ export default class Breadcrumb extends SvelteComponentTyped<BreadcrumbProps, BreadcrumbEvents, BreadcrumbSlots> {
28
28
  }
29
29
  export {};
@@ -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.25",
4
+ "version": "0.0.28",
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;