@code-coaching/vuetiful 0.23.0 → 0.23.2

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 (144) hide show
  1. package/dist/style.css +1 -1
  2. package/dist/types/components/VBootstrap.vue.d.ts +1 -1
  3. package/dist/types/components/atoms/VAvatar.vue.d.ts +1 -1
  4. package/dist/types/components/atoms/VLightSwitch.vue.d.ts +2 -2
  5. package/dist/types/components/atoms/index.d.ts +13 -13
  6. package/dist/types/components/index.d.ts +2 -2
  7. package/dist/types/components/molecules/VAlert.vue.d.ts +1 -1
  8. package/dist/types/components/molecules/VCodeBlock.vue.d.ts +2 -2
  9. package/dist/types/components/molecules/VDrawer.vue.d.ts +1 -1
  10. package/dist/types/components/molecules/VListbox/VListbox.vue.d.ts +1 -1
  11. package/dist/types/components/molecules/VRail/VRail.vue.d.ts +1 -1
  12. package/dist/types/components/molecules/VRail/VRailTile.vue.d.ts +1 -1
  13. package/dist/types/components/molecules/index.d.ts +21 -21
  14. package/dist/types/directives/clipboard.d.ts +1 -1
  15. package/dist/types/directives/index.d.ts +1 -1
  16. package/dist/types/index.d.ts +6 -6
  17. package/dist/types/props/props.d.ts +1 -1
  18. package/dist/types/services/dark-mode.service.d.ts +1 -1
  19. package/dist/types/services/drawer.service.d.ts +1 -1
  20. package/dist/types/services/index.d.ts +5 -5
  21. package/dist/types/types/index.d.ts +1 -1
  22. package/dist/types/utils/index.d.ts +2 -2
  23. package/dist/types/utils/theme/theme-switcher.vue.d.ts +23 -63
  24. package/dist/types/utils/theme/theme.service.d.ts +1 -1
  25. package/dist/vuetiful.es.mjs +82 -150
  26. package/dist/vuetiful.umd.js +7 -15
  27. package/package.json +1 -1
  28. package/src/assets/main.css +6 -6
  29. package/src/components/VBootstrap.vue +43 -43
  30. package/src/components/atoms/VAvatar.test.ts +71 -71
  31. package/src/components/atoms/VAvatar.vue +22 -23
  32. package/src/components/atoms/VBadge.test.ts +11 -11
  33. package/src/components/atoms/VBadge.vue +2 -2
  34. package/src/components/atoms/VButton.test.ts +82 -82
  35. package/src/components/atoms/VButton.vue +20 -21
  36. package/src/components/atoms/VChip.test.ts +11 -11
  37. package/src/components/atoms/VChip.vue +3 -3
  38. package/src/components/atoms/VLightSwitch.test.ts +6 -6
  39. package/src/components/atoms/VLightSwitch.vue +26 -31
  40. package/src/components/atoms/VRadio/VRadioDescription.test.ts +13 -13
  41. package/src/components/atoms/VRadio/VRadioDescription.vue +2 -2
  42. package/src/components/atoms/VRadio/VRadioGroup.test.ts +40 -40
  43. package/src/components/atoms/VRadio/VRadioGroup.vue +19 -22
  44. package/src/components/atoms/VRadio/VRadioItem.test.ts +67 -67
  45. package/src/components/atoms/VRadio/VRadioItem.vue +10 -13
  46. package/src/components/atoms/VRadio/VRadioLabel.test.ts +13 -13
  47. package/src/components/atoms/VRadio/VRadioLabel.vue +5 -3
  48. package/src/components/atoms/VSwitch/VSwitch.test.ts +33 -33
  49. package/src/components/atoms/VSwitch/VSwitch.vue +24 -27
  50. package/src/components/atoms/VSwitch/VSwitchDescription.test.ts +13 -13
  51. package/src/components/atoms/VSwitch/VSwitchDescription.vue +2 -2
  52. package/src/components/atoms/VSwitch/VSwitchGroup.test.ts +9 -9
  53. package/src/components/atoms/VSwitch/VSwitchGroup.vue +2 -2
  54. package/src/components/atoms/VSwitch/VSwitchLabel.test.ts +19 -19
  55. package/src/components/atoms/VSwitch/VSwitchLabel.vue +2 -2
  56. package/src/components/atoms/index.ts +13 -13
  57. package/src/components/index.test.ts +3 -3
  58. package/src/components/index.ts +2 -2
  59. package/src/components/molecules/VAccordion/VAccordion.test.ts +11 -17
  60. package/src/components/molecules/VAccordion/VAccordion.vue +3 -3
  61. package/src/components/molecules/VAccordion/VAccordionItem.test.ts +55 -55
  62. package/src/components/molecules/VAccordion/VAccordionItem.vue +9 -22
  63. package/src/components/molecules/VAlert.test.ts +38 -38
  64. package/src/components/molecules/VAlert.vue +25 -47
  65. package/src/components/molecules/VCard/VCard.test.ts +25 -25
  66. package/src/components/molecules/VCard/VCard.vue +13 -15
  67. package/src/components/molecules/VCard/VCardBody.test.ts +14 -14
  68. package/src/components/molecules/VCard/VCardBody.vue +4 -8
  69. package/src/components/molecules/VCard/VCardFooter.test.ts +22 -22
  70. package/src/components/molecules/VCard/VCardFooter.vue +10 -8
  71. package/src/components/molecules/VCard/VCardHeader.test.ts +25 -25
  72. package/src/components/molecules/VCard/VCardHeader.vue +7 -8
  73. package/src/components/molecules/VCodeBlock.test.ts +63 -63
  74. package/src/components/molecules/VCodeBlock.vue +27 -34
  75. package/src/components/molecules/VDrawer.test.ts +5 -5
  76. package/src/components/molecules/VDrawer.vue +10 -10
  77. package/src/components/molecules/VListbox/VListbox.test.ts +53 -53
  78. package/src/components/molecules/VListbox/VListbox.vue +31 -32
  79. package/src/components/molecules/VListbox/VListboxButton.test.ts +13 -13
  80. package/src/components/molecules/VListbox/VListboxButton.vue +5 -5
  81. package/src/components/molecules/VListbox/VListboxItem.test.ts +25 -25
  82. package/src/components/molecules/VListbox/VListboxItem.vue +7 -8
  83. package/src/components/molecules/VListbox/VListboxItems.test.ts +14 -14
  84. package/src/components/molecules/VListbox/VListboxItems.vue +9 -11
  85. package/src/components/molecules/VListbox/VListboxLabel.test.ts +10 -10
  86. package/src/components/molecules/VListbox/VListboxLabel.vue +2 -2
  87. package/src/components/molecules/VPreview.test.ts +26 -26
  88. package/src/components/molecules/VPreview.vue +22 -27
  89. package/src/components/molecules/VRail/VRail.test.ts +5 -5
  90. package/src/components/molecules/VRail/VRail.vue +7 -7
  91. package/src/components/molecules/VRail/VRailTile.test.ts +26 -28
  92. package/src/components/molecules/VRail/VRailTile.vue +13 -11
  93. package/src/components/molecules/VShell.test.ts +5 -5
  94. package/src/components/molecules/VShell.vue +11 -20
  95. package/src/components/molecules/VTabs/VTab.test.ts +48 -52
  96. package/src/components/molecules/VTabs/VTab.vue +13 -17
  97. package/src/components/molecules/VTabs/VTabPanel.test.ts +8 -8
  98. package/src/components/molecules/VTabs/VTabPanel.vue +1 -1
  99. package/src/components/molecules/VTabs/VTabs.test.ts +36 -36
  100. package/src/components/molecules/VTabs/VTabs.vue +18 -22
  101. package/src/components/molecules/index.ts +21 -21
  102. package/src/directives/clipboard.test.ts +9 -9
  103. package/src/directives/clipboard.ts +2 -2
  104. package/src/directives/index.ts +1 -1
  105. package/src/env.d.ts +2 -2
  106. package/src/index.test.ts +6 -6
  107. package/src/index.ts +7 -7
  108. package/src/props/index.ts +1 -1
  109. package/src/props/props.ts +44 -44
  110. package/src/services/dark-mode.service.test.ts +115 -93
  111. package/src/services/dark-mode.service.ts +9 -9
  112. package/src/services/drawer.service.test.ts +21 -21
  113. package/src/services/drawer.service.ts +10 -10
  114. package/src/services/highlight.service.test.ts +12 -12
  115. package/src/services/highlight.service.ts +1 -1
  116. package/src/services/index.ts +5 -5
  117. package/src/services/rail.service.test.ts +7 -7
  118. package/src/services/rail.service.ts +2 -2
  119. package/src/services/settings.service.test.ts +5 -5
  120. package/src/services/settings.service.ts +1 -1
  121. package/src/styles/all.css +7 -7
  122. package/src/styles/elements/buttons.css +1 -1
  123. package/src/styles/elements/forms.css +7 -7
  124. package/src/styles/elements.css +13 -13
  125. package/src/styles/transitions.css +2 -2
  126. package/src/styles/typography.css +5 -5
  127. package/src/themes/theme-rocket.css +10 -10
  128. package/src/themes/theme-sahara.css +13 -13
  129. package/src/themes/theme-seafoam.css +13 -13
  130. package/src/themes/theme-seasonal.css +4 -4
  131. package/src/themes/theme-skeleton.css +7 -7
  132. package/src/themes/theme-vintage.css +12 -12
  133. package/src/themes/theme-vuetiful-0.0.1.css +13 -13
  134. package/src/types/index.ts +46 -46
  135. package/src/types/tailwind.ts +2 -21
  136. package/src/utils/index.test.ts +3 -3
  137. package/src/utils/index.ts +2 -2
  138. package/src/utils/platform/platform.service.test.ts +6 -6
  139. package/src/utils/platform/platform.service.ts +1 -1
  140. package/src/utils/theme/callback.test.ts +6 -6
  141. package/src/utils/theme/remove.test.ts +8 -8
  142. package/src/utils/theme/theme-switcher.vue +58 -131
  143. package/src/utils/theme/theme.service.test.ts +69 -61
  144. package/src/utils/theme/theme.service.ts +19 -20
@@ -1,24 +1,26 @@
1
- import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
- import { Theme } from "./theme.service";
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { Theme } from './theme.service';
3
3
 
4
4
  const localStorageMock = {
5
5
  getItem: vi.fn(),
6
6
  setItem: vi.fn(),
7
7
  };
8
8
 
9
- describe("useTheme", () => {
9
+ describe('useTheme', () => {
10
10
  afterEach(() => {
11
11
  vi.resetModules();
12
12
  });
13
- describe("initializetheme", () => {
14
- describe("given not in browser", () => {
15
- it("should set the theme to the default theme if no theme is stored", async () => {
16
- const platform = await import("../platform/platform.service");
17
- vi.spyOn(platform, "usePlatform").mockReturnValueOnce({ isBrowser: false });
13
+ describe('initializetheme', () => {
14
+ describe('given not in browser', () => {
15
+ it('should set the theme to the default theme if no theme is stored', async () => {
16
+ const platform = await import('../platform/platform.service');
17
+ vi.spyOn(platform, 'usePlatform').mockReturnValueOnce({
18
+ isBrowser: false,
19
+ });
18
20
 
19
- const localStorageSpy = vi.spyOn(window.localStorage, "getItem");
21
+ const localStorageSpy = vi.spyOn(window.localStorage, 'getItem');
20
22
 
21
- const { useTheme } = await import("./theme.service");
23
+ const { useTheme } = await import('./theme.service');
22
24
  const { initializeTheme } = useTheme();
23
25
 
24
26
  initializeTheme();
@@ -27,68 +29,74 @@ describe("useTheme", () => {
27
29
  });
28
30
  });
29
31
 
30
- describe("given in browser", () => {
32
+ describe('given in browser', () => {
31
33
  beforeEach(() => {
32
34
  window.localStorage = localStorageMock as any;
33
35
  });
34
- describe("given no theme is stored", () => {
35
- it("should set the theme to the default theme", async () => {
36
- const platform = await import("../platform/platform.service");
37
- vi.spyOn(platform, "usePlatform").mockReturnValueOnce({ isBrowser: true });
36
+ describe('given no theme is stored', () => {
37
+ it('should set the theme to the default theme', async () => {
38
+ const platform = await import('../platform/platform.service');
39
+ vi.spyOn(platform, 'usePlatform').mockReturnValueOnce({
40
+ isBrowser: true,
41
+ });
38
42
 
39
- const localStorageSpy = vi.spyOn(window.localStorage, "getItem");
43
+ const localStorageSpy = vi.spyOn(window.localStorage, 'getItem');
40
44
 
41
- const { useTheme } = await import("./theme.service");
45
+ const { useTheme } = await import('./theme.service');
42
46
  const { initializeTheme, THEMES, chosenTheme } = useTheme();
43
47
 
44
48
  initializeTheme();
45
49
 
46
- expect(localStorageSpy).toHaveBeenCalledWith("vuetiful-theme");
50
+ expect(localStorageSpy).toHaveBeenCalledWith('vuetiful-theme');
47
51
  expect(chosenTheme.value).toBe(THEMES.VUETIFUL);
48
52
  });
49
53
  });
50
- describe("given a theme is stored", () => {
51
- it("should set the theme to the stored theme", async () => {
52
- const platform = await import("../platform/platform.service");
53
- vi.spyOn(platform, "usePlatform").mockReturnValueOnce({ isBrowser: true });
54
-
55
- const { useTheme } = await import("./theme.service");
54
+ describe('given a theme is stored', () => {
55
+ it('should set the theme to the stored theme', async () => {
56
+ const platform = await import('../platform/platform.service');
57
+ vi.spyOn(platform, 'usePlatform').mockReturnValueOnce({
58
+ isBrowser: true,
59
+ });
60
+
61
+ const { useTheme } = await import('./theme.service');
56
62
  const { initializeTheme, THEMES, chosenTheme } = useTheme();
57
63
 
58
- const localStorageSpy = vi.spyOn(window.localStorage, "getItem");
64
+ const localStorageSpy = vi.spyOn(window.localStorage, 'getItem');
59
65
  localStorageSpy.mockReturnValueOnce(THEMES.ROCKET);
60
66
 
61
67
  initializeTheme();
62
68
 
63
- expect(localStorageSpy).toHaveBeenCalledWith("vuetiful-theme");
69
+ expect(localStorageSpy).toHaveBeenCalledWith('vuetiful-theme');
64
70
  expect(chosenTheme.value).toBe(THEMES.ROCKET);
65
71
  });
66
72
  });
67
73
 
68
- describe("given the theme is not valid", () => {
69
- it("should set the theme to the default theme", async () => {
70
- const platform = await import("../platform/platform.service");
71
- vi.spyOn(platform, "usePlatform").mockReturnValueOnce({ isBrowser: true });
74
+ describe('given the theme is not valid', () => {
75
+ it('should set the theme to the default theme', async () => {
76
+ const platform = await import('../platform/platform.service');
77
+ vi.spyOn(platform, 'usePlatform').mockReturnValueOnce({
78
+ isBrowser: true,
79
+ });
72
80
 
73
- const { useTheme } = await import("./theme.service");
81
+ const { useTheme } = await import('./theme.service');
74
82
  const { initializeTheme, THEMES, chosenTheme } = useTheme();
75
83
 
76
- const localStorageSpy = vi.spyOn(window.localStorage, "getItem");
77
- localStorageSpy.mockReturnValueOnce("invalid-theme");
84
+ const localStorageSpy = vi.spyOn(window.localStorage, 'getItem');
85
+ localStorageSpy.mockReturnValueOnce('invalid-theme');
78
86
 
79
87
  initializeTheme();
80
88
 
81
- expect(localStorageSpy).toHaveBeenCalledWith("vuetiful-theme");
89
+ expect(localStorageSpy).toHaveBeenCalledWith('vuetiful-theme');
82
90
  expect(chosenTheme.value).toBe(THEMES.VUETIFUL);
83
91
  });
84
92
  });
85
93
  });
86
94
  });
87
95
 
88
- describe("loadTheme", () => {
89
- describe("given theme name exists in themes", () => {
90
- it("should set the theme to the given theme", async () => {
91
- const { useTheme } = await import("./theme.service");
96
+ describe('loadTheme', () => {
97
+ describe('given theme name exists in themes', () => {
98
+ it('should set the theme to the given theme', async () => {
99
+ const { useTheme } = await import('./theme.service');
92
100
  const { loadTheme, THEMES, chosenTheme } = useTheme();
93
101
 
94
102
  loadTheme(THEMES.ROCKET);
@@ -96,34 +104,34 @@ describe("useTheme", () => {
96
104
  expect(chosenTheme.value).toBe(THEMES.ROCKET);
97
105
  });
98
106
  });
99
- describe("given theme name does not exist in themes", () => {
100
- it("should set the theme to the default theme", async () => {
101
- const { useTheme } = await import("./theme.service");
107
+ describe('given theme name does not exist in themes', () => {
108
+ it('should set the theme to the default theme', async () => {
109
+ const { useTheme } = await import('./theme.service');
102
110
  const { loadTheme, THEMES, chosenTheme } = useTheme();
103
111
 
104
- loadTheme("invalid-theme");
112
+ loadTheme('invalid-theme');
105
113
 
106
114
  expect(chosenTheme.value).toBe(THEMES.VUETIFUL);
107
115
  });
108
116
  });
109
- describe("given default theme is not in themes", () => {
110
- it("should set the theme to the first theme in the themes object", async () => {
111
- const { useTheme } = await import("./theme.service");
117
+ describe('given default theme is not in themes', () => {
118
+ it('should set the theme to the first theme in the themes object', async () => {
119
+ const { useTheme } = await import('./theme.service');
112
120
  const { loadTheme, THEMES, chosenTheme, overwriteThemes, themes } = useTheme();
113
121
 
114
- const theme: Theme = { name: "fake theme", url: "" };
122
+ const theme: Theme = { name: 'fake theme', url: '' };
115
123
  overwriteThemes([themes.value[1], theme]);
116
124
 
117
- loadTheme("invalid-theme");
125
+ loadTheme('invalid-theme');
118
126
 
119
127
  expect(chosenTheme.value).toBe(themes.value[0].name);
120
128
  });
121
129
  });
122
130
  });
123
131
 
124
- describe("registerAllBuiltInThemes", () => {
125
- it("should register all built in themes", async () => {
126
- const { useTheme } = await import("./theme.service");
132
+ describe('registerAllBuiltInThemes', () => {
133
+ it('should register all built in themes', async () => {
134
+ const { useTheme } = await import('./theme.service');
127
135
  const { registerAllBuiltInThemes, THEMES, themes } = useTheme();
128
136
 
129
137
  registerAllBuiltInThemes();
@@ -132,25 +140,25 @@ describe("useTheme", () => {
132
140
  });
133
141
  });
134
142
 
135
- describe("registerTheme", () => {
136
- it("should register a theme", async () => {
137
- const { useTheme } = await import("./theme.service");
143
+ describe('registerTheme', () => {
144
+ it('should register a theme', async () => {
145
+ const { useTheme } = await import('./theme.service');
138
146
  const { registerTheme } = useTheme();
139
147
 
140
- const theme: Theme = { name: "fake theme", url: "" };
141
- expect(registerTheme(theme.name, "")).toEqual(theme);
148
+ const theme: Theme = { name: 'fake theme', url: '' };
149
+ expect(registerTheme(theme.name, '')).toEqual(theme);
142
150
  });
143
151
  });
144
152
 
145
- describe("saveThemeToStorage", () => {
146
- describe("given the theme does not exist", () => {
147
- it("should not save the theme to storage", async () => {
148
- const { useTheme } = await import("./theme.service");
153
+ describe('saveThemeToStorage', () => {
154
+ describe('given the theme does not exist', () => {
155
+ it('should not save the theme to storage', async () => {
156
+ const { useTheme } = await import('./theme.service');
149
157
  const { saveThemeToStorage } = useTheme();
150
158
 
151
- const localStorageSpy = vi.spyOn(window.localStorage, "setItem");
159
+ const localStorageSpy = vi.spyOn(window.localStorage, 'setItem');
152
160
 
153
- saveThemeToStorage("invalid-theme");
161
+ saveThemeToStorage('invalid-theme');
154
162
 
155
163
  expect(localStorageSpy).not.toHaveBeenCalled();
156
164
  });
@@ -1,5 +1,5 @@
1
- import { readonly, Ref, ref } from "vue";
2
- import { usePlatform } from "../platform/platform.service";
1
+ import { readonly, Ref, ref } from 'vue';
2
+ import { usePlatform } from '../platform/platform.service';
3
3
 
4
4
  const { isBrowser } = usePlatform();
5
5
 
@@ -9,13 +9,13 @@ export interface Theme {
9
9
  }
10
10
 
11
11
  const THEMES = {
12
- VUETIFUL: "vuetiful",
13
- ROCKET: "rocket",
14
- SAHARA: "sahara",
15
- SEAFOAM: "seafoam",
16
- SEASONAL: "seasonal",
17
- SKELETON: "skeleton",
18
- VINTAGE: "vintage",
12
+ VUETIFUL: 'vuetiful',
13
+ ROCKET: 'rocket',
14
+ SAHARA: 'sahara',
15
+ SEAFOAM: 'seafoam',
16
+ SEASONAL: 'seasonal',
17
+ SKELETON: 'skeleton',
18
+ VINTAGE: 'vintage',
19
19
  };
20
20
 
21
21
  const builtInUrl = (name: string): string => {
@@ -43,14 +43,14 @@ const useTheme = () => {
43
43
  if (!theme) return;
44
44
 
45
45
  if (isBrowser) {
46
- localStorage.setItem("vuetiful-theme", theme.name);
47
- document.body.setAttribute("data-theme", theme.name);
46
+ localStorage.setItem('vuetiful-theme', theme.name);
47
+ document.body.setAttribute('data-theme', theme.name);
48
48
  }
49
49
  };
50
50
 
51
51
  const initializeTheme = (callback?: Function): void => {
52
52
  if (isBrowser) {
53
- const storedTheme = localStorage.getItem("vuetiful-theme");
53
+ const storedTheme = localStorage.getItem('vuetiful-theme');
54
54
  if (storedTheme) loadTheme(storedTheme, callback);
55
55
  else loadTheme(defaultTheme, callback);
56
56
  }
@@ -58,27 +58,26 @@ const useTheme = () => {
58
58
 
59
59
  const loadTheme = (themeName: string, callback?: Function) => {
60
60
  let themeToLoad = themes.value.find((t) => t.name === themeName);
61
- if (!themeToLoad)
62
- themeToLoad = themes.value.find((t) => t.name === defaultTheme) || themes.value[0];
61
+ if (!themeToLoad) themeToLoad = themes.value.find((t) => t.name === defaultTheme) || themes.value[0];
63
62
 
64
63
  const theme: Theme = themeToLoad;
65
64
  chosenTheme.value = theme.name;
66
65
 
67
- const existingStyle = document.getElementById("theme");
66
+ const existingStyle = document.getElementById('theme');
68
67
  let themeUrl = theme.url;
69
68
 
70
- const link = document.createElement("link");
71
- link.id = "theme";
69
+ const link = document.createElement('link');
70
+ link.id = 'theme';
72
71
  link.href = themeUrl;
73
- link.type = "text/css";
74
- link.rel = "stylesheet";
72
+ link.type = 'text/css';
73
+ link.rel = 'stylesheet';
75
74
  link.onload = () => {
76
75
  if (existingStyle) existingStyle.remove();
77
76
  saveThemeToStorage(theme.name);
78
77
  if (callback) callback();
79
78
  };
80
79
 
81
- const head = document.querySelector("head");
80
+ const head = document.querySelector('head');
82
81
  if (head) head.appendChild(link);
83
82
  };
84
83