srcdev-nuxt-components 3.0.0 → 4.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 (87) hide show
  1. package/assets/styles/a11y/_utils.css +20 -0
  2. package/assets/styles/a11y/_variables.css +8 -0
  3. package/assets/styles/a11y/index.css +2 -0
  4. package/assets/styles/forms/index.css +2 -0
  5. package/assets/styles/forms/themes/_error.css +77 -0
  6. package/assets/styles/forms/themes/_ghost.css +77 -0
  7. package/assets/styles/forms/themes/_input-action.css +20 -0
  8. package/assets/styles/forms/themes/_primary.css +82 -0
  9. package/assets/styles/forms/themes/_secondary.css +77 -0
  10. package/assets/styles/forms/themes/_success.css +77 -0
  11. package/assets/styles/forms/themes/_tertiary.css +77 -0
  12. package/assets/styles/forms/themes/_warning.css +77 -0
  13. package/assets/styles/forms/themes/index.css +8 -0
  14. package/assets/styles/forms/variables/_sizes.css +82 -0
  15. package/assets/styles/forms/variables/_theme.css +11 -0
  16. package/assets/styles/forms/variables/index.css +2 -0
  17. package/assets/styles/main.css +5 -0
  18. package/assets/styles/typography/index.css +2 -0
  19. package/assets/styles/typography/utils/_font-classes.css +160 -0
  20. package/assets/styles/typography/utils/_weights.css +69 -0
  21. package/assets/styles/typography/utils/index.css +2 -0
  22. package/assets/styles/typography/variables/_colors.css +14 -0
  23. package/assets/styles/typography/variables/_reponsive-font-size.css +10 -0
  24. package/assets/styles/typography/variables/index.css +2 -0
  25. package/assets/styles/utils/_animations.css +42 -0
  26. package/assets/styles/utils/_canvasWidths.css +18 -0
  27. package/assets/styles/utils/_display.css +7 -0
  28. package/assets/styles/utils/_margin-helpers.css +334 -0
  29. package/assets/styles/utils/_padding-helpers.css +308 -0
  30. package/assets/styles/utils/_page.css +24 -0
  31. package/assets/styles/utils/_placement.css +73 -0
  32. package/assets/styles/utils/index.css +7 -0
  33. package/assets/styles/variables/colors/_blue.css +15 -0
  34. package/assets/styles/variables/colors/_gray.css +16 -0
  35. package/assets/styles/variables/colors/_green.css +15 -0
  36. package/assets/styles/variables/colors/_orange.css +15 -0
  37. package/assets/styles/variables/colors/_red.css +15 -0
  38. package/assets/styles/variables/colors/_yellow.css +15 -0
  39. package/assets/styles/variables/colors/colors.css +6 -0
  40. package/assets/styles/variables/components/_accordian.css +7 -0
  41. package/assets/styles/variables/components/_container-glow-core.css +16 -0
  42. package/assets/styles/variables/components/_display-dialog-core.css +35 -0
  43. package/assets/styles/variables/components/_tabs.css +18 -0
  44. package/assets/styles/variables/components/display-prompt-core/_scaffolding.css +57 -0
  45. package/assets/styles/variables/components/display-prompt-core/index.css +2 -0
  46. package/assets/styles/variables/components/display-prompt-core/themes/_error.css +39 -0
  47. package/assets/styles/variables/components/display-prompt-core/themes/_info.css +39 -0
  48. package/assets/styles/variables/components/display-prompt-core/themes/_success.css +39 -0
  49. package/assets/styles/variables/components/display-prompt-core/themes/_warning.css +39 -0
  50. package/assets/styles/variables/components/display-prompt-core/themes/index.css +4 -0
  51. package/assets/styles/variables/components/index.css +5 -0
  52. package/assets/styles/variables/index.css +2 -0
  53. package/components/animated-svg-text/AnimatedSvgText.vue +87 -0
  54. package/components/canvas-switcher/CanvasSwitcher.vue +77 -0
  55. package/components/clip-element/ClipElement.vue +73 -0
  56. package/components/clipped-panels/ClippedPanel.vue +73 -0
  57. package/components/deep-expanding-menu/DeepExpandingMenu.vue +214 -0
  58. package/components/deep-expanding-menu/DeepExpandingMenuOld.vue +218 -0
  59. package/components/display-banner/DisplayBanner.vue +63 -0
  60. package/components/display-details/DisplayDetailsCore.vue +312 -0
  61. package/components/functional/accordian/AccordianCore.vue +138 -0
  62. package/components/functional/display-dialog/DisplayDialogCore.vue +244 -0
  63. package/components/functional/display-dialog/variants/DisplayDialogConfirm.vue +45 -0
  64. package/components/functional/display-dialog/variants/DisplayDialogScrollableContent.vue +49 -0
  65. package/components/functional/pop-over/PopOver.vue +88 -0
  66. package/components/image-galleries/SliderGallery.vue +784 -0
  67. package/components/masonry-grid-ordered/MasonryGridOrdered.vue +158 -0
  68. package/components/presentation/container-glow/ContainerGlowCore.vue +211 -0
  69. package/components/presentation/display-grid/DisplayGridCore.vue +22 -0
  70. package/components/presentation/display-prompt/DisplayPromptCore.vue +150 -0
  71. package/components/presentation/display-prompt/variants/DisplayPromptError.vue +53 -0
  72. package/components/presentation/layout-grids/LayoutGridA.vue +103 -0
  73. package/components/presentation/layout-grids/LayoutGridB.vue +132 -0
  74. package/components/presentation/layout-row/LayoutRow.vue +157 -0
  75. package/components/presentation/masonry-grid/MasonryGrid.vue +62 -0
  76. package/components/presentation/masonry-grid-sorted/MasonryGridSorted.vue +115 -0
  77. package/components/presentation/tabs/TabsCore.vue +308 -0
  78. package/components/responsive-header/NavigationItems.vue +164 -0
  79. package/components/responsive-header/ResponsiveHeader.vue +586 -0
  80. package/components/rotating-carousel/RotatingCarouselImage.vue +200 -0
  81. package/composables/useDialogControls.ts +23 -0
  82. package/composables/useStyleClassPassthrough.ts +35 -0
  83. package/composables/useTabs.ts +201 -0
  84. package/nuxt.config.ts +0 -3
  85. package/package.json +2 -2
  86. package/types/gallery-data.ts +13 -0
  87. package/types/responsiveHeader.ts +38 -0
@@ -0,0 +1,15 @@
1
+ :root {
2
+ --blue-0: #e7f5ff;
3
+ --blue-1: #d0ebff;
4
+ --blue-2: #a5d8ff;
5
+ --blue-3: #74c0fc;
6
+ --blue-4: #4dabf7;
7
+ --blue-5: #339af0;
8
+ --blue-6: #228be6;
9
+ --blue-7: #1c7ed6;
10
+ --blue-8: #1971c2;
11
+ --blue-9: #1864ab;
12
+ --blue-10: #145591;
13
+ --blue-11: #114678;
14
+ --blue-12: #0e01cd;
15
+ }
@@ -0,0 +1,16 @@
1
+ :root {
2
+ --gray-00: #ffffff;
3
+ --gray-0: #f8f9fa;
4
+ --gray-1: #f1f3f5;
5
+ --gray-2: #e9ecef;
6
+ --gray-3: #dee2e6;
7
+ --gray-4: #ced4da;
8
+ --gray-5: #adb5bd;
9
+ --gray-6: #868e96;
10
+ --gray-7: #495057;
11
+ --gray-8: #343a40;
12
+ --gray-9: #212529;
13
+ --gray-10: #16191d;
14
+ --gray-11: #0d0f12;
15
+ --gray-12: #030507;
16
+ }
@@ -0,0 +1,15 @@
1
+ :root {
2
+ --green-0: #ebfbee;
3
+ --green-1: #d3f9d8;
4
+ --green-2: #b2f2bb;
5
+ --green-3: #8ce99a;
6
+ --green-4: #69db7c;
7
+ --green-5: #51cf66;
8
+ --green-6: #40c057;
9
+ --green-7: #37b24d;
10
+ --green-8: #2f9e44;
11
+ --green-9: #2b8a3e;
12
+ --green-10: #237032;
13
+ --green-11: #1b5727;
14
+ --green-12: #017f18;
15
+ }
@@ -0,0 +1,15 @@
1
+ :root {
2
+ --orange-0: #fff4e6;
3
+ --orange-1: #ffe8cc;
4
+ --orange-2: #ffd8a8;
5
+ --orange-3: #ffc078;
6
+ --orange-4: #ffa94d;
7
+ --orange-5: #ff922b;
8
+ --orange-6: #ff7400;
9
+ --orange-7: #f76707;
10
+ --orange-8: #e8590c;
11
+ --orange-9: #d9480f;
12
+ --orange-10: #bf400d;
13
+ --orange-11: #99330b;
14
+ --orange-12: #c23903;
15
+ }
@@ -0,0 +1,15 @@
1
+ :root {
2
+ --red-0: #fff5f5;
3
+ --red-1: #ffe3e3;
4
+ --red-2: #ffc9c9;
5
+ --red-3: #ffa8a8;
6
+ --red-4: #ff8787;
7
+ --red-5: #ff6b6b;
8
+ --red-6: #fa5252;
9
+ --red-7: #f03e3e;
10
+ --red-8: #e03131;
11
+ --red-9: #ff0b0b;
12
+ --red-10: #b02525;
13
+ --red-11: #962020;
14
+ --red-12: #cc0000;
15
+ }
@@ -0,0 +1,15 @@
1
+ :root {
2
+ --yellow-0: #fff9db;
3
+ --yellow-1: #fff3bf;
4
+ --yellow-2: #ffec99;
5
+ --yellow-3: #ffe066;
6
+ --yellow-4: #ffd43b;
7
+ --yellow-5: #fcc419;
8
+ --yellow-6: #fab005;
9
+ --yellow-7: #f59f00;
10
+ --yellow-8: #f08c00;
11
+ --yellow-9: #e67700;
12
+ --yellow-10: #b35c00;
13
+ --yellow-11: #804200;
14
+ --yellow-12: #663500;
15
+ }
@@ -0,0 +1,6 @@
1
+ @import './_red.css';
2
+ @import './_green.css';
3
+ @import './_blue.css';
4
+ @import './_orange.css';
5
+ @import './_gray.css';
6
+ @import './_yellow.css';
@@ -0,0 +1,7 @@
1
+ :root {
2
+ --accordian-panel-border: 0.1rem solid light-dark(var(--gray-3), var(--gray-6));
3
+ --accordian-panel-border-radius: 0.4rem;
4
+ --accordian-panel-mbe: 1.6rem;
5
+
6
+ --accordion-trigger-bg: light-dark(var(--gray-3), var(--gray-6));
7
+ }
@@ -0,0 +1,16 @@
1
+ .container-glow-wrapper {
2
+ --container-bg-colour: light-dark(hsl(250, 18%, 93%), hsl(246 44% 7%));
3
+ --container-border-colour: hsl(280 10% 50% / 1);
4
+ --card: light-dark(white, hsl(246 44% 7%));
5
+ --container-border-width: 2px;
6
+ --container-border-radius: 12px;
7
+ --gradient: conic-gradient(
8
+ from 180deg at 50% 70%,
9
+ hsla(0, 0%, 98%, 1) 0deg,
10
+ #eec32d 72.0000010728836deg,
11
+ #fc0303 144.0000021457672deg,
12
+ #709ab9 216.00000858306885deg,
13
+ #4dffbf 288.0000042915344deg,
14
+ hsla(0, 0%, 98%, 1) 1turn
15
+ );
16
+ }
@@ -0,0 +1,35 @@
1
+ .display-dialog-core {
2
+ --dialog-border: 0.1rem solid light-dark(var(--gray-8), var(--gray-0));
3
+ --dialog-outline: 0.1rem solid light-dark(var(--gray-8), var(--gray-0));
4
+ --dialog-border-radius: 0.4rem;
5
+
6
+ --dialog-inner-background: light-dark(var(--gray-0), var(--gray-9));
7
+
8
+ /*
9
+ * Header styles
10
+ */
11
+ --dialog-header-padding: 0 1.2rem;
12
+
13
+ --dialog-header-button-margin: 0;
14
+ --dialog-header-button-padding: 0.4rem;
15
+ --dialog-header-button-border-radius: 50%;
16
+
17
+ --dialog-header-button-border: 1px solid transparent;
18
+ --dialog-header-button-outline: 1px solid transparent;
19
+
20
+ --dialog-header-button-border-hover: 1px solid light-dark(var(--gray-8), var(--gray-0));
21
+ --dialog-header-button-outline-hover: 1px solid light-dark(var(--gray-8), var(--gray-0));
22
+
23
+ --dialog-header-button-icon-color: light-dark(var(--gray-8), var(--gray-0));
24
+ --dialog-header-button-icon-font-size: 1.4rem;
25
+
26
+ /*
27
+ * Header styles
28
+ */
29
+ --dialog-content-padding: 1.2rem;
30
+
31
+ /*
32
+ * Footerer styles
33
+ */
34
+ --dialog-footer-padding: 1.2rem;
35
+ }
@@ -0,0 +1,18 @@
1
+ :root {
2
+ --tabs-default-text: light-dark(var(--gray-12), var(--gray-0));
3
+ --tabs-active-bg: light-dark(var(--gray-12), var(--gray-0));
4
+ --tabs-active-text: light-dark(var(--gray-0), var(--gray-12));
5
+ --tabs-active-indicator: var(--green-6);
6
+ --tabs-hovered-bg: light-dark(var(--gray-7), var(--gray-3));
7
+ --tabs-hovered-text: light-dark(var(--gray-0), var(--gray-12));
8
+ --tabs-border-bottom: 0px solid var(--green-6);
9
+
10
+ --tabs-content-border: 0.1rem solid var(--green-6);
11
+ --tabs-content-outline: 0.1rem solid var(--green-12);
12
+ --tabs-content-bg: light-dark(var(--gray-1), var(--gray-8));
13
+
14
+ --tabs-content-start-start-radius: 0;
15
+ --tabs-content-start-end-radius: 0;
16
+ --tabs-content-end-start-radius: 1rem;
17
+ --tabs-content-end-end-radius: 1rem;
18
+ }
@@ -0,0 +1,57 @@
1
+ :root {
2
+ /*
3
+ * Wrapper styles
4
+ */
5
+ --display-prompt-wrapper-border-radius: 0.5rem;
6
+
7
+ /*
8
+ * Inner styles
9
+ */
10
+ --display-prompt-inner-margin: 0 0 0 0.7rem;
11
+ --display-prompt-inner-padding: 1rem 1.5rem;
12
+ --display-prompt-inner-gap: 1.6rem;
13
+ --display-prompt-inner-border-radius: 0.2rem;
14
+
15
+ /*
16
+ * Icon styles
17
+ */
18
+ --display-prompt-icon-size: 3rem;
19
+ --display-prompt-icon-weight: normal;
20
+
21
+ /*
22
+ * Title styles
23
+ */
24
+ --display-prompt-inner-content-gap: 1rem;
25
+ --display-prompt-content-margin: 0;
26
+ --display-prompt-content-padding: 0.2rem;
27
+
28
+ /*
29
+ * Title styles
30
+ */
31
+ --display-prompt-content-title-font-size: var(--step-2);
32
+ --display-prompt-content-title-font-weight: bold;
33
+ --display-prompt-content-title-line-height: 1.3;
34
+ --display-prompt-content-title-margin: 0;
35
+ --display-prompt-content-title-padding: 0;
36
+
37
+ /*
38
+ * Text styles
39
+ */
40
+ --display-prompt-content-text-font-size: var(--step-2);
41
+ --display-prompt-content-text-font-weight: normal;
42
+ --display-prompt-content-text-line-height: 1.3;
43
+ --display-prompt-content-title-margin: 0;
44
+ --display-prompt-content-title-padding: 0;
45
+
46
+ /*
47
+ * Button styles
48
+ */
49
+ --display-prompt-button-border-radius: 50%;
50
+ --display-prompt-button-margin: 1rem;
51
+ --display-prompt-button-padding: 0.5rem;
52
+
53
+ /*
54
+ * Button styles
55
+ */
56
+ --display-prompt-button-icon-font-size: var(--step-2);
57
+ }
@@ -0,0 +1,2 @@
1
+ @import './_scaffolding.css';
2
+ @import './themes';
@@ -0,0 +1,39 @@
1
+ [data-prompt-theme='error'] {
2
+ /*
3
+ * Wrapper styles
4
+ */
5
+ --display-prompt-wrapper-background-color: var(--red-8);
6
+ --display-prompt-wrapper-border: 0.1rem solid var(--red-8);
7
+ --display-prompt-wrapper-outline: 0.1rem solid var(--red-5);
8
+
9
+ /*
10
+ * Inner styles
11
+ */
12
+ --display-prompt-inner-background-color: var(--red-0);
13
+
14
+ /*
15
+ * Icon styles
16
+ */
17
+ --display-prompt-icon-color: var(--red-8);
18
+
19
+ /*
20
+ * Title styles
21
+ */
22
+ --display-prompt-content-title-color: var(--red-8);
23
+
24
+ /*
25
+ * Text styles
26
+ */
27
+ --display-prompt-content-text-color: var(--red-8);
28
+
29
+ /*
30
+ * Button styles
31
+ */
32
+ --display-prompt-button-border: 0.1rem solid var(--red-8);
33
+ --display-prompt-button-outline: 0.1rem solid var(--red-8);
34
+
35
+ /*
36
+ * Button styles
37
+ */
38
+ --display-prompt-button-icon-color: var(--red-8);
39
+ }
@@ -0,0 +1,39 @@
1
+ [data-prompt-theme='info'] {
2
+ /*
3
+ * Wrapper styles
4
+ */
5
+ --display-prompt-wrapper-background-color: var(--blue-8);
6
+ --display-prompt-wrapper-border: 0.1rem solid var(--blue-8);
7
+ --display-prompt-wrapper-outline: 0.1rem solid var(--blue-5);
8
+
9
+ /*
10
+ * Inner styles
11
+ */
12
+ --display-prompt-inner-background-color: var(--blue-0);
13
+
14
+ /*
15
+ * Icon styles
16
+ */
17
+ --display-prompt-icon-color: var(--blue-8);
18
+
19
+ /*
20
+ * Title styles
21
+ */
22
+ --display-prompt-content-title-color: var(--blue-8);
23
+
24
+ /*
25
+ * Text styles
26
+ */
27
+ --display-prompt-content-text-color: var(--blue-8);
28
+
29
+ /*
30
+ * Button styles
31
+ */
32
+ --display-prompt-button-border: 0.1rem solid var(--blue-8);
33
+ --display-prompt-button-outline: 0.1rem solid var(--blue-8);
34
+
35
+ /*
36
+ * Button styles
37
+ */
38
+ --display-prompt-button-icon-color: var(--blue-8);
39
+ }
@@ -0,0 +1,39 @@
1
+ [data-prompt-theme='success'] {
2
+ /*
3
+ * Wrapper styles
4
+ */
5
+ --display-prompt-wrapper-background-color: var(--green-8);
6
+ --display-prompt-wrapper-border: 0.1rem solid var(--green-8);
7
+ --display-prompt-wrapper-outline: 0.1rem solid var(--green-5);
8
+
9
+ /*
10
+ * Inner styles
11
+ */
12
+ --display-prompt-inner-background-color: var(--green-0);
13
+
14
+ /*
15
+ * Icon styles
16
+ */
17
+ --display-prompt-icon-color: var(--green-8);
18
+
19
+ /*
20
+ * Title styles
21
+ */
22
+ --display-prompt-content-title-color: var(--green-8);
23
+
24
+ /*
25
+ * Text styles
26
+ */
27
+ --display-prompt-content-text-color: var(--green-8);
28
+
29
+ /*
30
+ * Button styles
31
+ */
32
+ --display-prompt-button-border: 0.1rem solid var(--green-8);
33
+ --display-prompt-button-outline: 0.1rem solid var(--green-8);
34
+
35
+ /*
36
+ * Button styles
37
+ */
38
+ --display-prompt-button-icon-color: var(--green-8);
39
+ }
@@ -0,0 +1,39 @@
1
+ [data-prompt-theme='warning'] {
2
+ /*
3
+ * Wrapper styles
4
+ */
5
+ --display-prompt-wrapper-background-color: var(--orange-8);
6
+ --display-prompt-wrapper-border: 0.1rem solid var(--orange-8);
7
+ --display-prompt-wrapper-outline: 0.1rem solid var(--orange-5);
8
+
9
+ /*
10
+ * Inner styles
11
+ */
12
+ --display-prompt-inner-background-color: var(--orange-0);
13
+
14
+ /*
15
+ * Icon styles
16
+ */
17
+ --display-prompt-icon-color: var(--orange-8);
18
+
19
+ /*
20
+ * Title styles
21
+ */
22
+ --display-prompt-content-title-color: var(--orange-8);
23
+
24
+ /*
25
+ * Text styles
26
+ */
27
+ --display-prompt-content-text-color: var(--orange-8);
28
+
29
+ /*
30
+ * Button styles
31
+ */
32
+ --display-prompt-button-border: 0.1rem solid var(--orange-8);
33
+ --display-prompt-button-outline: 0.1rem solid var(--orange-8);
34
+
35
+ /*
36
+ * Button styles
37
+ */
38
+ --display-prompt-button-icon-color: var(--orange-8);
39
+ }
@@ -0,0 +1,4 @@
1
+ @import './_error';
2
+ @import './_success';
3
+ @import './_warning';
4
+ @import './_info';
@@ -0,0 +1,5 @@
1
+ @import './_accordian';
2
+ @import './_tabs';
3
+ @import './display-prompt-core';
4
+ @import './_display-dialog-core';
5
+ @import './_container-glow-core.css';
@@ -0,0 +1,2 @@
1
+ @import './colors/colors.css';
2
+ @import './components';
@@ -0,0 +1,87 @@
1
+ <template>
2
+ <div class="animated-svg-text" :class="[elementClasses]">
3
+ <slot name="text"></slot>
4
+ </div>
5
+ </template>
6
+
7
+ <script setup lang="ts">
8
+ const props = defineProps({
9
+ styleClassPassthrough: {
10
+ type: Array as PropType<string[]>,
11
+ default: () => [],
12
+ },
13
+ });
14
+
15
+ const { elementClasses, resetElementClasses } = useStyleClassPassthrough(props.styleClassPassthrough);
16
+
17
+ watch(
18
+ () => props.styleClassPassthrough,
19
+ () => {
20
+ resetElementClasses(props.styleClassPassthrough);
21
+ }
22
+ );
23
+ </script>
24
+
25
+ <style lang="css">
26
+
27
+ @keyframes animatedSvgText {
28
+ 0% {
29
+ fill: transparent;
30
+ stroke-dashoffset: var(--_animated-svg-text-stroke-dasharray);
31
+ stroke-width: 0.3;
32
+ }
33
+ 70% {
34
+ fill: transparent;
35
+ stroke-width: 0.3;
36
+ }
37
+ 100% {
38
+ fill: var(--_animated-svg-fill-color);
39
+ stroke-dashoffset: 0;
40
+ stroke-width: 0;
41
+ }
42
+ }
43
+
44
+ html {
45
+
46
+ &[data-color-scheme='light'] {
47
+ .animated-svg-text {
48
+ --_animated-svg-text-color: var(--_animated-svg-text-stroke-light);
49
+ --_animated-svg-fill-color: var(--_animated-svg-text-fill-light);
50
+ }
51
+ }
52
+ &[data-color-scheme='dark'] {
53
+ .animated-svg-text {
54
+ --_animated-svg-text-color: var(--_animated-svg-text-stroke-dark);
55
+ --_animated-svg-fill-color: var(--_animated-svg-text-fill-dark);
56
+ }
57
+ }
58
+ &[data-color-scheme='auto'] {
59
+ .animated-svg-text {
60
+ @media (prefers-color-scheme: light) {
61
+ --_animated-svg-text-color: var(--_animated-svg-text-stroke-light);
62
+ --_animated-svg-fill-color: var(--_animated-svg-text-fill-light);
63
+ }
64
+
65
+ @media (prefers-color-scheme: dark) {
66
+ --_animated-svg-text-color: var(--_animated-svg-text-stroke-dark);
67
+ --_animated-svg-fill-color: var(--_animated-svg-text-fill-dark);
68
+ }
69
+ }
70
+ }
71
+
72
+ .animated-svg-text {
73
+
74
+ --_animated-svg-text-color: var(--_animated-svg-text-stroke-light):
75
+ --_animated-svg-fill-color: var(--_animated-svg-text-fill-light);
76
+
77
+ svg path {
78
+ stroke: var(--_animated-svg-text-color);
79
+ stroke-width: 0.3;
80
+ stroke-dasharray: var(--_animated-svg-text-stroke-dasharray);
81
+ stroke-dashoffset: var(--_animated-svg-text-stroke-dasharray);
82
+ animation: animatedSvgText var(--_animated-svg-animation-duration) linear 1 forwards;
83
+ }
84
+ }
85
+
86
+ }
87
+ </style>
@@ -0,0 +1,77 @@
1
+ <template>
2
+ <div class="canvas-switcher">
3
+ <p>Canvas switcher</p>
4
+ <ul class="canvas-switcher mbe-20">
5
+ <li>
6
+ <button type="button" @click.stop.prevent="updateCanvas('mobileCanvas')">
7
+ <Icon name="ic:baseline-phone-iphone" class="icon" :class="[{ current: canvasName === 'mobileCanvas' }]" />
8
+ </button>
9
+ </li>
10
+ <li>
11
+ <button type="button" @click.stop.prevent="updateCanvas('tabletCanvas')">
12
+ <Icon name="ic:baseline-tablet-mac" class="icon" :class="[{ current: canvasName === 'tabletCanvas' }]" />
13
+ </button>
14
+ </li>
15
+ <li>
16
+ <button type="button" @click.stop.prevent="updateCanvas('laptopCanvas')">
17
+ <Icon name="ic:baseline-laptop-mac" class="icon" :class="[{ current: canvasName === 'laptopCanvas' }]" />
18
+ </button>
19
+ </li>
20
+ <li>
21
+ <button type="button" @click.stop.prevent="updateCanvas('desktopCanvas')">
22
+ <Icon name="ic:outline-desktop-mac" class="icon" :class="[{ current: canvasName === 'desktopCanvas' }]" />
23
+ </button>
24
+ </li>
25
+ </ul>
26
+ </div>
27
+ </template>
28
+
29
+ <script setup lang="ts">
30
+ import type { MediaCanvas } from '@/types/types.canvasName';
31
+
32
+ const canvasName = defineModel<MediaCanvas>('canvasName');
33
+
34
+ const updateCanvas = (setCanvas: MediaCanvas) => {
35
+ canvasName.value = setCanvas;
36
+ };
37
+ </script>
38
+
39
+ <style lang="css">
40
+ .canvas-switcher {
41
+ display: flex;
42
+ align-items: center;
43
+ gap: 20px;
44
+
45
+ ul {
46
+ display: flex;
47
+ gap: 10px;
48
+ list-style-type: none;
49
+ margin: 0;
50
+ padding: 0;
51
+
52
+ li {
53
+ button {
54
+ all: unset;
55
+ display: flex;
56
+ align-items: center;
57
+ justify-content: center;
58
+ padding: 5px;
59
+ border: 0px solid light-dark(var(--gray-10), var(--gray-2));
60
+ border-radius: 4px;
61
+ cursor: pointer;
62
+
63
+ .icon {
64
+ color: light-dark(var(--gray-10), var(--gray-2));
65
+
66
+ width: 24px;
67
+ height: 24px;
68
+
69
+ &.current {
70
+ color: light-dark(var(--green-10), var(--green-4));
71
+ }
72
+ }
73
+ }
74
+ }
75
+ }
76
+ }
77
+ </style>
@@ -0,0 +1,73 @@
1
+ <template>
2
+ <div class="clip-element-wrapper" ref="container" :class="elementClasses">
3
+ <div class="clipped-element" :style="`--_clip-path: inset(${clipOffset}px 0 0 0)`" ref="clipElement">
4
+ <slot name="default"></slot>
5
+ </div>
6
+ </div>
7
+ </template>
8
+
9
+ <script lang="ts" setup>
10
+
11
+ const props = defineProps({
12
+ maxClip: {
13
+ type: Number,
14
+ default: 100,
15
+ },
16
+ styleClassPassthrough: {
17
+ type: Array as PropType<string[]>,
18
+ default: () => [],
19
+ },
20
+ });
21
+
22
+ const { elementClasses } = useStyleClassPassthrough(props.styleClassPassthrough);
23
+
24
+
25
+ const container = ref(null);
26
+ const clipElement = ref<HTMLDivElement | null>(null);
27
+ const clipOffset = ref(0);
28
+
29
+ const updateClip = () => {
30
+
31
+ if (clipElement.value) {
32
+
33
+ const topPosition = Math.floor(clipElement.value.getBoundingClientRect().top);
34
+
35
+ if (topPosition < props.maxClip && topPosition > 0) {
36
+ clipOffset.value = props.maxClip - topPosition;
37
+ }
38
+ else if (topPosition < 0) {
39
+ clipOffset.value = props.maxClip + Math.abs(topPosition);
40
+ }
41
+ else if (topPosition > props.maxClip) {
42
+ clipOffset.value = 0;
43
+ }
44
+ }
45
+ };
46
+
47
+ onMounted(() => {
48
+
49
+ if (import.meta.client) {
50
+ updateClip(); // Initial check
51
+ window.addEventListener('scroll', updateClip, { passive: true });
52
+ }
53
+
54
+ });
55
+
56
+ onBeforeUnmount(() => {
57
+ window.removeEventListener('scroll', updateClip);
58
+ });
59
+
60
+
61
+ </script>
62
+
63
+ <style lang="css">
64
+ .clip-element-wrapper {
65
+ position: relative;
66
+ overflow: hidden;
67
+ }
68
+ .clipped-element {
69
+ width: 100%;
70
+ clip-path: var(--_clip-path);
71
+ display: block;
72
+ }
73
+ </style>