@quaffui/quaff 0.1.0-prealpha → 0.1.0-prealpha10

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 (186) hide show
  1. package/dist/components/avatar/QAvatar.svelte +8 -7
  2. package/dist/components/avatar/QAvatar.svelte.d.ts +4 -4
  3. package/dist/components/avatar/docs.d.ts +1 -1
  4. package/dist/components/avatar/index.scss +4 -1
  5. package/dist/components/avatar/props.d.ts +2 -2
  6. package/dist/components/avatar/props.js +1 -1
  7. package/dist/components/breadcrumbs/QBreadcrumbs.svelte.d.ts +4 -4
  8. package/dist/components/breadcrumbs/QBreadcrumbsEl.svelte.d.ts +4 -4
  9. package/dist/components/breadcrumbs/docs.d.ts +1 -1
  10. package/dist/components/button/QBtn.svelte +23 -9
  11. package/dist/components/button/QBtn.svelte.d.ts +6 -5
  12. package/dist/components/button/docs.d.ts +1 -1
  13. package/dist/components/button/docs.props.js +8 -0
  14. package/dist/components/button/index.scss +23 -3
  15. package/dist/components/button/props.d.ts +7 -2
  16. package/dist/components/card/QCard.svelte +1 -1
  17. package/dist/components/card/QCard.svelte.d.ts +4 -4
  18. package/dist/components/card/QCardActions.svelte +1 -1
  19. package/dist/components/card/QCardActions.svelte.d.ts +4 -4
  20. package/dist/components/card/QCardSection.svelte +1 -1
  21. package/dist/components/card/QCardSection.svelte.d.ts +4 -4
  22. package/dist/components/card/docs.props.js +1 -1
  23. package/dist/components/card/index.scss +4 -1
  24. package/dist/components/checkbox/QCheckbox.svelte.d.ts +4 -4
  25. package/dist/components/checkbox/index.scss +4 -0
  26. package/dist/components/chip/QChip.svelte +8 -2
  27. package/dist/components/chip/QChip.svelte.d.ts +4 -4
  28. package/dist/components/chip/docs.d.ts +1 -1
  29. package/dist/components/chip/docs.props.js +3 -3
  30. package/dist/components/chip/index.scss +4 -1
  31. package/dist/components/chip/props.d.ts +2 -2
  32. package/dist/components/codeBlock/QCodeBlock.svelte +8 -9
  33. package/dist/components/codeBlock/QCodeBlock.svelte.d.ts +5 -7
  34. package/dist/components/dialog/QDialog.svelte +34 -20
  35. package/dist/components/dialog/QDialog.svelte.d.ts +4 -5
  36. package/dist/components/dialog/docs.d.ts +1 -1
  37. package/dist/components/dialog/docs.props.js +10 -2
  38. package/dist/components/dialog/index.scss +150 -3
  39. package/dist/components/drawer/QDrawer.svelte +50 -38
  40. package/dist/components/drawer/QDrawer.svelte.d.ts +5 -4
  41. package/dist/components/drawer/docs.d.ts +1 -1
  42. package/dist/components/drawer/index.scss +14 -9
  43. package/dist/components/drawer/props.d.ts +2 -2
  44. package/dist/components/footer/QFooter.svelte +18 -4
  45. package/dist/components/footer/QFooter.svelte.d.ts +6 -6
  46. package/dist/components/footer/docs.d.ts +1 -1
  47. package/dist/components/footer/index.scss +23 -0
  48. package/dist/components/footer/props.d.ts +4 -4
  49. package/dist/components/header/QHeader.svelte +28 -0
  50. package/dist/components/header/QHeader.svelte.d.ts +24 -0
  51. package/dist/components/header/props.d.ts +15 -0
  52. package/dist/components/header/props.js +1 -0
  53. package/dist/components/icon/QIcon.svelte +11 -13
  54. package/dist/components/icon/QIcon.svelte.d.ts +5 -5
  55. package/dist/components/icon/docs.d.ts +1 -1
  56. package/dist/components/icon/docs.props.js +1 -1
  57. package/dist/components/icon/index.scss +63 -6
  58. package/dist/components/icon/props.d.ts +3 -3
  59. package/dist/components/index.d.ts +3 -1
  60. package/dist/components/index.js +3 -1
  61. package/dist/components/input/QInput.svelte.d.ts +4 -4
  62. package/dist/components/input/docs.d.ts +1 -1
  63. package/dist/components/input/props.d.ts +1 -1
  64. package/dist/components/layout/QLayout.svelte.d.ts +4 -4
  65. package/dist/components/layout/docs.d.ts +1 -1
  66. package/dist/components/layout/index.scss +93 -76
  67. package/dist/components/list/QItem.svelte +1 -1
  68. package/dist/components/list/QItem.svelte.d.ts +4 -4
  69. package/dist/components/list/QItemSection.svelte.d.ts +4 -4
  70. package/dist/components/list/QList.svelte.d.ts +4 -4
  71. package/dist/components/list/docs.d.ts +2 -0
  72. package/dist/components/list/docs.js +11 -0
  73. package/dist/components/list/docs.props.js +1 -1
  74. package/dist/components/list/index.scss +7 -0
  75. package/dist/components/private/ContextReseter.svelte.d.ts +2 -2
  76. package/dist/components/private/QApi.svelte +25 -22
  77. package/dist/components/private/QApi.svelte.d.ts +2 -2
  78. package/dist/components/private/QDocs.svelte +38 -10
  79. package/dist/components/private/QDocs.svelte.d.ts +3 -3
  80. package/dist/components/private/QDocsSection.svelte +2 -2
  81. package/dist/components/private/QDocsSection.svelte.d.ts +2 -2
  82. package/dist/components/progress/QCircularProgress.svelte +4 -3
  83. package/dist/components/progress/QCircularProgress.svelte.d.ts +5 -5
  84. package/dist/components/progress/QLinearProgress.svelte +8 -2
  85. package/dist/components/progress/QLinearProgress.svelte.d.ts +4 -4
  86. package/dist/components/progress/docs.d.ts +2 -0
  87. package/dist/components/progress/docs.js +11 -0
  88. package/dist/components/progress/docs.props.d.ts +8 -0
  89. package/dist/components/progress/docs.props.js +42 -0
  90. package/dist/components/progress/index.scss +15 -0
  91. package/dist/components/progress/props.d.ts +26 -9
  92. package/dist/components/progress/props.js +1 -7
  93. package/dist/components/radio/QRadio.svelte.d.ts +4 -4
  94. package/dist/components/radio/docs.d.ts +1 -1
  95. package/dist/components/railbar/QRailbar.svelte +48 -29
  96. package/dist/components/railbar/QRailbar.svelte.d.ts +5 -5
  97. package/dist/components/railbar/docs.d.ts +2 -0
  98. package/dist/components/railbar/docs.js +11 -0
  99. package/dist/components/railbar/index.scss +39 -0
  100. package/dist/components/railbar/props.d.ts +11 -3
  101. package/dist/components/railbar/props.js +1 -7
  102. package/dist/components/select/QSelect.svelte +6 -4
  103. package/dist/components/select/QSelect.svelte.d.ts +4 -4
  104. package/dist/components/select/docs.d.ts +1 -1
  105. package/dist/components/select/docs.props.js +2 -2
  106. package/dist/components/select/index.scss +8 -2
  107. package/dist/components/select/props.d.ts +1 -1
  108. package/dist/components/separator/QSeparator.svelte +1 -1
  109. package/dist/components/separator/QSeparator.svelte.d.ts +4 -4
  110. package/dist/components/separator/docs.d.ts +2 -0
  111. package/dist/components/separator/docs.js +11 -0
  112. package/dist/components/separator/props.d.ts +1 -1
  113. package/dist/components/table/QTable.svelte.d.ts +4 -4
  114. package/dist/components/table/docs.d.ts +1 -1
  115. package/dist/components/tabs/QTab.svelte +45 -17
  116. package/dist/components/tabs/QTab.svelte.d.ts +5 -7
  117. package/dist/components/tabs/QTabs.svelte +3 -7
  118. package/dist/components/tabs/QTabs.svelte.d.ts +4 -4
  119. package/dist/components/tabs/docs.d.ts +2 -0
  120. package/dist/components/tabs/docs.js +11 -0
  121. package/dist/components/tabs/docs.props.js +3 -11
  122. package/dist/components/tabs/index.scss +40 -9
  123. package/dist/components/toggle/QToggle.svelte.d.ts +4 -4
  124. package/dist/components/toggle/docs.d.ts +1 -1
  125. package/dist/components/toggle/props.d.ts +1 -1
  126. package/dist/components/toggle/props.js +1 -1
  127. package/dist/components/toolbar/QToolbar.svelte +6 -22
  128. package/dist/components/toolbar/QToolbar.svelte.d.ts +7 -5
  129. package/dist/components/toolbar/QToolbarTitle.svelte +10 -0
  130. package/dist/components/toolbar/QToolbarTitle.svelte.d.ts +22 -0
  131. package/dist/components/toolbar/docs.d.ts +2 -0
  132. package/dist/components/toolbar/docs.js +11 -0
  133. package/dist/components/toolbar/docs.props.d.ts +8 -0
  134. package/dist/components/toolbar/docs.props.js +10 -0
  135. package/dist/components/toolbar/index.scss +35 -0
  136. package/dist/components/toolbar/props.d.ts +22 -3
  137. package/dist/components/toolbar/props.js +1 -6
  138. package/dist/components/tooltip/QTooltip.svelte +3 -5
  139. package/dist/components/tooltip/QTooltip.svelte.d.ts +4 -4
  140. package/dist/components/tooltip/docs.d.ts +2 -0
  141. package/dist/components/tooltip/docs.js +11 -0
  142. package/dist/components/tooltip/index.scss +77 -2
  143. package/dist/composables/use-align.js +17 -6
  144. package/dist/composables/use-router-link.js +0 -1
  145. package/dist/composables/use-size.d.ts +8 -10
  146. package/dist/composables/use-size.js +24 -12
  147. package/dist/css/flex.scss +41 -0
  148. package/dist/css/fonts.scss +4 -0
  149. package/dist/css/grid.scss +1 -16
  150. package/dist/css/index.css +1 -0
  151. package/dist/css/index.scss +5 -23
  152. package/dist/css/mixins/field.scss +3 -1
  153. package/dist/css/mixins/menu.scss +3 -1
  154. package/dist/css/mixins.scss +5 -4
  155. package/dist/css/ripple.scss +42 -0
  156. package/dist/css/states.scss +9 -4
  157. package/dist/css/theme/bridge.scss +15 -0
  158. package/dist/css/theme/elevate.scss +57 -0
  159. package/dist/css/theme/page.scss +16 -0
  160. package/dist/css/theme/palette.scss +633 -0
  161. package/dist/css/theme/reset.scss +40 -0
  162. package/dist/css/theme/theme.dark.scss +1 -0
  163. package/dist/css/theme/theme.light.scss +1 -0
  164. package/dist/css/theme/theme.scss +6 -0
  165. package/dist/css/theme/typography.scss +111 -0
  166. package/dist/css/variables-sass.scss +16 -0
  167. package/dist/global.d.ts +0 -1
  168. package/dist/helpers/ripple.d.ts +10 -0
  169. package/dist/helpers/ripple.js +79 -0
  170. package/dist/helpers/version.d.ts +2 -0
  171. package/dist/helpers/version.js +1 -0
  172. package/dist/index.d.ts +2 -1
  173. package/dist/index.js +2 -1
  174. package/dist/stores/QTheme.d.ts +2 -1
  175. package/dist/stores/Quaff.d.ts +6 -5
  176. package/dist/stores/Quaff.js +2 -1
  177. package/dist/utils/dom.d.ts +8 -0
  178. package/dist/utils/dom.js +71 -0
  179. package/dist/utils/events.d.ts +13 -0
  180. package/dist/utils/events.js +13 -0
  181. package/dist/utils/props.d.ts +1 -1
  182. package/dist/utils/props.js +1 -1
  183. package/dist/utils/types.d.ts +3 -0
  184. package/dist/utils/types.json +1 -1
  185. package/dist/utils/watchable.d.ts +1 -0
  186. package/package.json +34 -28
@@ -0,0 +1,111 @@
1
+ html {
2
+ font-size: var(--size);
3
+ }
4
+
5
+ body {
6
+ font-family: var(--font);
7
+ font-size: 0.875rem;
8
+ line-height: 1.25;
9
+ }
10
+
11
+ h1,
12
+ h2,
13
+ h3,
14
+ h4,
15
+ h5,
16
+ h6 {
17
+ font-weight: 400;
18
+ display: flex;
19
+ align-items: center;
20
+ margin-bottom: 0.5rem;
21
+ line-height: normal;
22
+ }
23
+
24
+ * + h1,
25
+ * + h2,
26
+ * + h3,
27
+ * + h4,
28
+ * + h5,
29
+ * + h6 {
30
+ margin-top: 1rem;
31
+ }
32
+
33
+ h1 {
34
+ font-size: 3.5625rem;
35
+ }
36
+
37
+ h2 {
38
+ font-size: 2.8125rem;
39
+ }
40
+
41
+ h3 {
42
+ font-size: 2.25rem;
43
+ }
44
+
45
+ h4 {
46
+ font-size: 2rem;
47
+ }
48
+
49
+ h5 {
50
+ font-size: 1.75rem;
51
+ }
52
+
53
+ h6 {
54
+ font-size: 1.5rem;
55
+ }
56
+
57
+ h1.small {
58
+ font-size: 3.0625rem;
59
+ }
60
+
61
+ h2.small {
62
+ font-size: 2.3125rem;
63
+ }
64
+
65
+ h3.small {
66
+ font-size: 1.75rem;
67
+ }
68
+
69
+ h4.small {
70
+ font-size: 1.5rem;
71
+ }
72
+
73
+ h5.small {
74
+ font-size: 1.25rem;
75
+ }
76
+
77
+ h6.small {
78
+ font-size: 1rem;
79
+ }
80
+
81
+ h1.large {
82
+ font-size: 4.0625rem;
83
+ }
84
+
85
+ h2.large {
86
+ font-size: 3.3125rem;
87
+ }
88
+
89
+ h3.large {
90
+ font-size: 2.75rem;
91
+ }
92
+
93
+ h4.large {
94
+ font-size: 2.5rem;
95
+ }
96
+
97
+ h5.large {
98
+ font-size: 2.25rem;
99
+ }
100
+
101
+ h6.large {
102
+ font-size: 2rem;
103
+ }
104
+
105
+ p {
106
+ margin: 0.5rem 0;
107
+ }
108
+
109
+ .text-center {
110
+ text-align: center;
111
+ }
@@ -0,0 +1,16 @@
1
+ // Grid variables
2
+ $grid-columns: 12;
3
+ $gutter-xs: 4px;
4
+ $gutter-sm: 8px;
5
+ $gutter-md: 16px;
6
+ $gutter-lg: 24px;
7
+ $gutter-xl: 48px;
8
+
9
+ // Responsive breakpoints
10
+ $breakpoints: (
11
+ xs: 0px,
12
+ sm: 600px,
13
+ md: 960px,
14
+ lg: 1280px,
15
+ xl: 1920px,
16
+ );
package/dist/global.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- declare var __QUAFF_VERSION__: string;
2
1
  declare var __PLATFORM__:
3
2
  | "aix"
4
3
  | "darwin"
@@ -0,0 +1,10 @@
1
+ interface RippleOptions {
2
+ center?: boolean;
3
+ color?: string;
4
+ duration?: number;
5
+ }
6
+ export declare function ripple(el: HTMLElement, options?: RippleOptions): {
7
+ destroy(): void;
8
+ update(newOptions: RippleOptions): void;
9
+ };
10
+ export {};
@@ -0,0 +1,79 @@
1
+ const triggerEvents = ["pointerdown", "touchstart", "keydown"];
2
+ const cancelEvents = ["mouseleave", "dragleave", "touchmove", "touchcancel", "pointerup", "keyup"];
3
+ export function ripple(el, options = {}) {
4
+ function addClasses(center) {
5
+ let shouldBeCentered = center || options.center;
6
+ if (!el.classList.contains("q-ripple--effect")) {
7
+ el.classList.add("q-ripple--effect");
8
+ }
9
+ if (!shouldBeCentered && el.classList.contains("q-ripple--center")) {
10
+ el.classList.remove("q-ripple--center");
11
+ }
12
+ shouldBeCentered && el.classList.add("q-ripple--center");
13
+ }
14
+ function setOptions(options) {
15
+ if (options.duration && options.duration < 0) {
16
+ options.duration = undefined;
17
+ }
18
+ if (options.color) {
19
+ el.style.setProperty("--ripple-color", options.color);
20
+ }
21
+ if (options.duration) {
22
+ el.style.setProperty("--ripple-duration", `${options.duration}ms`);
23
+ }
24
+ }
25
+ addClasses();
26
+ setOptions(options);
27
+ function createRipple(e, center) {
28
+ if (el.hasAttribute("aria-disabled"))
29
+ return;
30
+ if (e instanceof KeyboardEvent) {
31
+ if (!["Enter", "Space"].includes(e.code) || e.repeat) {
32
+ return;
33
+ }
34
+ e.preventDefault();
35
+ const click = new PointerEvent("pointerdown");
36
+ createRipple(click, true);
37
+ return;
38
+ }
39
+ addClasses(center);
40
+ const rect = el.getBoundingClientRect();
41
+ const clientX = window.TouchEvent && e instanceof TouchEvent
42
+ ? e.touches[0].clientX
43
+ : e.clientX;
44
+ const clientY = window.TouchEvent && e instanceof TouchEvent
45
+ ? e.touches[0].clientY
46
+ : e.clientY;
47
+ const x = clientX - rect.left > el.offsetWidth / 2 ? 0 : el.offsetWidth;
48
+ const y = clientY - rect.top > el.offsetHeight / 2 ? 0 : el.offsetHeight;
49
+ const radius = Math.hypot(x - (clientX - rect.left), y - (clientY - rect.top));
50
+ const ripple = document.createElement("div");
51
+ ripple.classList.add("q-ripple");
52
+ ripple.style.left = `${clientX - rect.left - radius}px`;
53
+ ripple.style.top = `${clientY - rect.top - radius}px`;
54
+ ripple.style.width = ripple.style.height = `${radius * 2}px`;
55
+ el.appendChild(ripple);
56
+ function removeRipple() {
57
+ if (ripple === null)
58
+ return;
59
+ ripple.style.opacity = "0";
60
+ setTimeout(() => {
61
+ ripple.remove();
62
+ }, options.duration || 1000);
63
+ cancelEvents.forEach((event) => el.removeEventListener(event, removeRipple));
64
+ }
65
+ cancelEvents.forEach((event) => el.addEventListener(event, removeRipple));
66
+ }
67
+ triggerEvents.forEach((event) => el.addEventListener(event, createRipple, { passive: event === "touchstart" }));
68
+ return {
69
+ destroy() {
70
+ triggerEvents.forEach((event) => {
71
+ el.removeEventListener(event, createRipple);
72
+ });
73
+ },
74
+ update(newOptions) {
75
+ options = newOptions;
76
+ setOptions(newOptions);
77
+ },
78
+ };
79
+ }
@@ -0,0 +1,2 @@
1
+ declare const _default: "0.1.0-prealpha10";
2
+ export default _default;
@@ -0,0 +1 @@
1
+ export default "0.1.0-prealpha10";
package/dist/index.d.ts CHANGED
@@ -1 +1,2 @@
1
- export * from "$components";
1
+ export * from "./components";
2
+ export { Quaff } from "./stores/Quaff.js";
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  // Reexport your entry components here
2
- export * from "$components";
2
+ export * from "./components";
3
+ export { Quaff } from "./stores/Quaff.js";
@@ -1,3 +1,4 @@
1
+ /// <reference types="svelte" />
1
2
  interface IMaterialDynamicColorsThemeColorFormatted {
2
3
  primary: string;
3
4
  "on-primary": string;
@@ -33,7 +34,7 @@ interface IMaterialDynamicColorsThemeFormatted {
33
34
  }
34
35
  type CSSDynamicColor = `${keyof IMaterialDynamicColorsThemeColorFormatted}-${keyof IMaterialDynamicColorsThemeFormatted}`;
35
36
  export declare const QTheme: {
36
- subscribe: (this: void, run: import("svelte/store").Subscriber<Record<"error-dark" | "error-light" | "outline-dark" | "outline-light" | "primary-dark" | "primary-light" | "secondary-dark" | "secondary-light" | "tertiary-dark" | "tertiary-light" | "surface-dark" | "surface-light" | "surface-variant-dark" | "surface-variant-light" | "on-primary-dark" | "on-primary-light" | "primary-container-dark" | "primary-container-light" | "on-primary-container-dark" | "on-primary-container-light" | "on-secondary-dark" | "on-secondary-light" | "secondary-container-dark" | "secondary-container-light" | "on-secondary-container-dark" | "on-secondary-container-light" | "on-tertiary-dark" | "on-tertiary-light" | "tertiary-container-dark" | "tertiary-container-light" | "on-tertiary-container-dark" | "on-tertiary-container-light" | "error-container-dark" | "error-container-light" | "on-error-dark" | "on-error-light" | "on-error-container-dark" | "on-error-container-light" | "background-dark" | "background-light" | "on-background-dark" | "on-background-light" | "on-surface-dark" | "on-surface-light" | "on-surface-variant-dark" | "on-surface-variant-light" | "inverse-on-surface-dark" | "inverse-on-surface-light" | "inverse-surface-dark" | "inverse-surface-light" | "inverse-primary-dark" | "inverse-primary-light" | "shadow-dark" | "shadow-light", string>>, invalidate?: ((value?: Record<"error-dark" | "error-light" | "outline-dark" | "outline-light" | "primary-dark" | "primary-light" | "secondary-dark" | "secondary-light" | "tertiary-dark" | "tertiary-light" | "surface-dark" | "surface-light" | "surface-variant-dark" | "surface-variant-light" | "on-primary-dark" | "on-primary-light" | "primary-container-dark" | "primary-container-light" | "on-primary-container-dark" | "on-primary-container-light" | "on-secondary-dark" | "on-secondary-light" | "secondary-container-dark" | "secondary-container-light" | "on-secondary-container-dark" | "on-secondary-container-light" | "on-tertiary-dark" | "on-tertiary-light" | "tertiary-container-dark" | "tertiary-container-light" | "on-tertiary-container-dark" | "on-tertiary-container-light" | "error-container-dark" | "error-container-light" | "on-error-dark" | "on-error-light" | "on-error-container-dark" | "on-error-container-light" | "background-dark" | "background-light" | "on-background-dark" | "on-background-light" | "on-surface-dark" | "on-surface-light" | "on-surface-variant-dark" | "on-surface-variant-light" | "inverse-on-surface-dark" | "inverse-on-surface-light" | "inverse-surface-dark" | "inverse-surface-light" | "inverse-primary-dark" | "inverse-primary-light" | "shadow-dark" | "shadow-light", string> | undefined) => void) | undefined) => import("svelte/store").Unsubscriber;
37
+ subscribe: (this: void, run: import("svelte/store").Subscriber<Record<"error-dark" | "error-light" | "outline-dark" | "outline-light" | "primary-dark" | "primary-light" | "secondary-dark" | "secondary-light" | "tertiary-dark" | "tertiary-light" | "surface-dark" | "surface-light" | "surface-variant-dark" | "surface-variant-light" | "on-primary-dark" | "on-primary-light" | "primary-container-dark" | "primary-container-light" | "on-primary-container-dark" | "on-primary-container-light" | "on-secondary-dark" | "on-secondary-light" | "secondary-container-dark" | "secondary-container-light" | "on-secondary-container-dark" | "on-secondary-container-light" | "on-tertiary-dark" | "on-tertiary-light" | "tertiary-container-dark" | "tertiary-container-light" | "on-tertiary-container-dark" | "on-tertiary-container-light" | "error-container-dark" | "error-container-light" | "on-error-dark" | "on-error-light" | "on-error-container-dark" | "on-error-container-light" | "background-dark" | "background-light" | "on-background-dark" | "on-background-light" | "on-surface-dark" | "on-surface-light" | "on-surface-variant-dark" | "on-surface-variant-light" | "inverse-on-surface-dark" | "inverse-on-surface-light" | "inverse-surface-dark" | "inverse-surface-light" | "inverse-primary-dark" | "inverse-primary-light" | "shadow-dark" | "shadow-light", string>>, invalidate?: import("svelte/store").Invalidator<Record<"error-dark" | "error-light" | "outline-dark" | "outline-light" | "primary-dark" | "primary-light" | "secondary-dark" | "secondary-light" | "tertiary-dark" | "tertiary-light" | "surface-dark" | "surface-light" | "surface-variant-dark" | "surface-variant-light" | "on-primary-dark" | "on-primary-light" | "primary-container-dark" | "primary-container-light" | "on-primary-container-dark" | "on-primary-container-light" | "on-secondary-dark" | "on-secondary-light" | "secondary-container-dark" | "secondary-container-light" | "on-secondary-container-dark" | "on-secondary-container-light" | "on-tertiary-dark" | "on-tertiary-light" | "tertiary-container-dark" | "tertiary-container-light" | "on-tertiary-container-dark" | "on-tertiary-container-light" | "error-container-dark" | "error-container-light" | "on-error-dark" | "on-error-light" | "on-error-container-dark" | "on-error-container-light" | "background-dark" | "background-light" | "on-background-dark" | "on-background-light" | "on-surface-dark" | "on-surface-light" | "on-surface-variant-dark" | "on-surface-variant-light" | "inverse-on-surface-dark" | "inverse-on-surface-light" | "inverse-surface-dark" | "inverse-surface-light" | "inverse-primary-dark" | "inverse-primary-light" | "shadow-dark" | "shadow-light", string>> | undefined) => import("svelte/store").Unsubscriber;
37
38
  setThemeColors: (from: string) => Promise<void>;
38
39
  updateThemeColor: (color: CSSDynamicColor, newValue: string) => void;
39
40
  apply: () => void;
@@ -1,12 +1,13 @@
1
+ /// <reference types="svelte" />
1
2
  /// <reference types="@sveltejs/kit" />
2
3
  export declare const quaffStore: {
3
4
  subscribe: (this: void, run: import("svelte/store").Subscriber<{
4
5
  version: string;
5
6
  dark: boolean;
6
- }>, invalidate?: ((value?: {
7
+ }>, invalidate?: import("svelte/store").Invalidator<{
7
8
  version: string;
8
9
  dark: boolean;
9
- } | undefined) => void) | undefined) => import("svelte/store").Unsubscriber;
10
+ }> | undefined) => import("svelte/store").Unsubscriber;
10
11
  setDarkMode: (newVal: boolean) => void;
11
12
  toggleDarkMode: () => void;
12
13
  };
@@ -22,10 +23,10 @@ export declare const Quaff: import("svelte/store").Readable<{
22
23
  quaff: (this: void, run: import("svelte/store").Subscriber<{
23
24
  version: string;
24
25
  dark: boolean;
25
- }>, invalidate?: ((value?: {
26
+ }>, invalidate?: import("svelte/store").Invalidator<{
26
27
  version: string;
27
28
  dark: boolean;
28
- } | undefined) => void) | undefined) => import("svelte/store").Unsubscriber;
29
- page: (this: void, run: import("svelte/store").Subscriber<import("@sveltejs/kit").Page<Record<string, string>, string | null>>, invalidate?: ((value?: import("@sveltejs/kit").Page<Record<string, string>, string | null> | undefined) => void) | undefined) => import("svelte/store").Unsubscriber;
29
+ }> | undefined) => import("svelte/store").Unsubscriber;
30
+ page: (this: void, run: import("svelte/store").Subscriber<import("@sveltejs/kit").Page<Record<string, string>, string | null>>, invalidate?: import("svelte/store").Invalidator<import("@sveltejs/kit").Page<Record<string, string>, string | null>> | undefined) => import("svelte/store").Unsubscriber;
30
31
  };
31
32
  }>;
@@ -1,8 +1,9 @@
1
1
  import { writable, derived } from "svelte/store";
2
2
  import { page } from "$app/stores";
3
+ import version from "../helpers/version";
3
4
  function quaff() {
4
5
  const { subscribe, set, update } = writable({
5
- version: __QUAFF_VERSION__,
6
+ version,
6
7
  dark: false,
7
8
  //TODO lang: {},
8
9
  //TODO? iconSet: {},
@@ -0,0 +1,8 @@
1
+ import type { Direction } from "./events";
2
+ export declare function getParentElement(el: HTMLElement): HTMLElement;
3
+ export declare function getAllChildren(el: HTMLElement): HTMLElement[];
4
+ export declare function isFocusable(el: HTMLElement): boolean;
5
+ export declare function getFocusableChildren<T extends HTMLElement>(el: T): T[];
6
+ export declare function getClosestFocusableChild(el: HTMLElement): HTMLElement;
7
+ export declare function getClosestFocusableSibling<T extends HTMLElement>(el: T, direction: Direction): HTMLElement;
8
+ export declare function getClosestFocusableBlock(el: HTMLElement, direction: Direction): HTMLElement;
@@ -0,0 +1,71 @@
1
+ export function getParentElement(el) {
2
+ let parent = el.parentNode;
3
+ while (parent && parent.nodeType !== 1) {
4
+ parent = parent.parentNode;
5
+ }
6
+ return parent;
7
+ }
8
+ export function getAllChildren(el) {
9
+ return Array.from(el.querySelectorAll("*"));
10
+ }
11
+ // Focus utils
12
+ const focusableElements = ':is(a, button, input, [tabindex]:not([tabindex="-1"])):not([disabled], [aria-disabled="true"])';
13
+ export function isFocusable(el) {
14
+ return (el.offsetWidth > 0 &&
15
+ el.offsetHeight > 0 &&
16
+ (el.style.opacity === "" || +el.style.opacity > 0) &&
17
+ el.style.display !== "none" &&
18
+ el.tabIndex >= 0);
19
+ }
20
+ export function getFocusableChildren(el) {
21
+ return Array.from(el.querySelectorAll(focusableElements));
22
+ }
23
+ export function getClosestFocusableChild(el) {
24
+ let children = Array.from(el.querySelectorAll(focusableElements));
25
+ const focusableChildren = children.filter(isFocusable);
26
+ return focusableChildren[0] || null;
27
+ }
28
+ export function getClosestFocusableSibling(el, direction) {
29
+ const parent = getParentElement(el);
30
+ const allSiblings = Array.from(parent.childNodes);
31
+ let filtered = allSiblings.filter(isFocusable);
32
+ const indexOfEl = filtered.indexOf(el);
33
+ if (direction === "next") {
34
+ const i = indexOfEl + 1 === filtered.length ? 0 : indexOfEl + 1;
35
+ if (filtered[i].hasAttribute("aria-current")) {
36
+ // The target element is active, it shouldn't have focus
37
+ return i + 1 === filtered.length ? filtered[0] : filtered[i + 1];
38
+ }
39
+ return filtered[i];
40
+ }
41
+ else {
42
+ const i = indexOfEl - 1 === -1 ? filtered.length - 1 : indexOfEl - 1;
43
+ if (filtered[i].hasAttribute("aria-current")) {
44
+ // The target element is active, it shouldn't have focus
45
+ return i - 1 === -1 ? filtered.at(-1) : filtered[i - 1];
46
+ }
47
+ return filtered[i];
48
+ }
49
+ }
50
+ export function getClosestFocusableBlock(el, direction) {
51
+ let parent = getParentElement(el);
52
+ let parentFocusableChildren = getFocusableChildren(parent);
53
+ function getNextFocusableBlock(parentBlock) {
54
+ const grandParent = getParentElement(parentBlock);
55
+ const grandParentChildren = getAllChildren(grandParent);
56
+ const indexOfEl = grandParentChildren.indexOf(el);
57
+ const sliced = direction === "next"
58
+ ? grandParentChildren.slice(indexOfEl)
59
+ : grandParentChildren.slice(0, indexOfEl);
60
+ const filtered = sliced.filter((element) => isFocusable(element) && !parentFocusableChildren.includes(element));
61
+ if (!filtered.length) {
62
+ return getNextFocusableBlock(grandParent);
63
+ }
64
+ return direction === "next" ? filtered[0] : filtered.at(-1);
65
+ }
66
+ let targetBlock = getNextFocusableBlock(parent);
67
+ if (targetBlock.hasAttribute("aria-current")) {
68
+ targetBlock = getClosestFocusableSibling(targetBlock, direction);
69
+ }
70
+ return targetBlock;
71
+ }
@@ -0,0 +1,13 @@
1
+ export type Direction = "previous" | "next";
2
+ export declare function isActivationKey(e: KeyboardEvent): e is KeyboardEvent & {
3
+ code: "Enter" | "Space";
4
+ };
5
+ export declare function isArrowKey(e: KeyboardEvent): e is KeyboardEvent & {
6
+ code: "ArrowUp" | "ArrowDown" | "ArrowLeft" | "ArrowRight";
7
+ };
8
+ export declare function isTabKey(e: KeyboardEvent): e is KeyboardEvent & {
9
+ code: "Tab";
10
+ };
11
+ export declare function getDirection(e: KeyboardEvent & {
12
+ code: "ArrowUp" | "ArrowDown" | "ArrowLeft" | "ArrowRight";
13
+ }): Direction;
@@ -0,0 +1,13 @@
1
+ // Keyboard events
2
+ export function isActivationKey(e) {
3
+ return e.code === "Enter" || e.code === "Space";
4
+ }
5
+ export function isArrowKey(e) {
6
+ return e.code.startsWith("Arrow");
7
+ }
8
+ export function isTabKey(e) {
9
+ return e.code === "Tab";
10
+ }
11
+ export function getDirection(e) {
12
+ return ["ArrowDown", "ArrowRight"].includes(e.code) ? "next" : "previous";
13
+ }
@@ -1,4 +1,4 @@
1
- export declare function createStyles(styleObj: Record<string, string | number | null | undefined>, userStyles?: string): string | null;
1
+ export declare function createStyles(styleObj: Record<string, string | number | boolean | null | undefined>, userStyles?: string): string | null;
2
2
  interface CreateClassesOptions {
3
3
  component?: string;
4
4
  element?: string;
@@ -3,7 +3,7 @@ export function createStyles(styleObj, userStyles) {
3
3
  const stylesArray = Object.entries(styleObj);
4
4
  const toJoin = [];
5
5
  for (let [styleName, styleVal] of stylesArray) {
6
- if (styleVal === undefined || styleVal === null) {
6
+ if (styleVal === undefined || styleVal === null || styleVal === false) {
7
7
  continue;
8
8
  }
9
9
  styleName = convertCase(styleName, "camel", "kebab");
@@ -3,6 +3,9 @@ export interface NativeProps {
3
3
  userStyles?: string;
4
4
  }
5
5
  export declare const NativePropsDefaults: NativeProps;
6
+ export type QuaffSizes = "xs" | "sm" | "md" | "lg" | "xl";
7
+ export type CssUnit = "px" | "%" | "em" | "ex" | "ch" | "rem" | "vw" | "vh" | "vmin" | "vmax";
8
+ export type CssValue = `${number}${CssUnit}`;
6
9
  export interface QComponentDocs {
7
10
  name: string;
8
11
  description: string;
@@ -1 +1 @@
1
- {"QAvatarShapeOptions":"type QAvatarShapeOptions =\r\n | \"circle\"\r\n | \"rounded\"\r\n | \"top-round\"\r\n | \"left-round\"\r\n | \"right-round\"\r\n | \"bottom-round\"\r\n | \"top-left-round\"\r\n | \"top-right-round\"\r\n | \"bottom-left-round\"\r\n | \"bottom-right-round\"","QAvatarSizeOptions":"type QAvatarSizeOptions = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | string","QBreadcrumbsGutterOptions":"type QBreadcrumbsGutterOptions = \"none\" | \"sm\" | \"md\" | \"lg\"","QLayoutEvents":"type QLayoutEvents = \"resize\" | \"scroll\" | \"scrollHeight\"","QSelectOption":"type QSelectOption = string | { label: string, value: string }","QItemSectionTypes":"type QItemSectionTypes =\r\n | \"thumbnail\"\r\n | \"video\"\r\n | \"avatar\"\r\n | \"icon\"\r\n | \"trailingIcon\"\r\n | \"trailingText\"\r\n | \"content\"","QBtnSizeOptions":"type QBtnSizeOptions = \"sm\" | \"md\" | \"lg\" | \"xl\"","QDialogPositionOptions":"type QDialogPositionOptions = \"default\" | \"top\" | \"right\" | \"bottom\" | \"left\"","QDrawerSideOptions":"type QDrawerSideOptions = \"left\" | \"right\"","QDrawerBehaviorOptions":"type QDrawerBehaviorOptions = \"default\" | \"desktop\" | \"mobile\"","QIconSizeOptions":"type QIconSizeOptions = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | string | number","QIconTypeOptions":"type QIconTypeOptions = \"outlined\" | \"sharp\" | \"rounded\"","QLayoutViewOptions":"type QLayoutViewOptions = `${\"l\"|\"h\"}${\"h\"|\"H\"}${\"r\"|\"h\"} ${\"l\"|\"L\"}${\"p\"}${\"r\"|\"R\"} ${\"l\"|\"f\"}${\"f\"|\"F\"}${\"r\"|\"f\"}`","QTableColumn":"type QTableColumn = {\r\n name: string\r\n required?: boolean;\r\n label: string;\r\n align?: \"left\" | \"center\" | \"right\";\r\n field: string | ((row: QTableRow) => string);\r\n format?: (val: string) => string;\r\n sortable?: boolean;\r\n sort?: (a: string, b: string) => number;\r\n};","QTableRow":"type QTableRow = {\r\n [key: string]: string | number\r\n};","QTableSort":"type QTableSort = {\r\n columnField: string | ((row: QTableRow) => string)\r\n type: \"asc\" | \"desc\";\r\n} | null;"}
1
+ {"QAvatarShapeOptions":"type QAvatarShapeOptions =\n | \"circle\"\n | \"rounded\"\n | \"top-round\"\n | \"left-round\"\n | \"right-round\"\n | \"bottom-round\"\n | \"top-left-round\"\n | \"top-right-round\"\n | \"bottom-left-round\"\n | \"bottom-right-round\"","QAvatarSizeOptions":"type QAvatarSizeOptions = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | string","QBreadcrumbsGutterOptions":"type QBreadcrumbsGutterOptions = \"none\" | \"sm\" | \"md\" | \"lg\"","QLayoutEvents":"type QLayoutEvents = \"resize\" | \"scroll\" | \"scrollHeight\"","QSelectOption":"type QSelectOption = string | { label: string, value: string }","QItemSectionTypes":"type QItemSectionTypes =\n | \"thumbnail\"\n | \"video\"\n | \"avatar\"\n | \"toggle\"\n | \"icon\"\n | \"trailingIcon\"\n | \"trailingText\"\n | \"content\"","QBtnSizeOptions":"type QBtnSizeOptions = \"sm\" | \"md\" | \"lg\" | \"xl\"","QDialogPositionOptions":"type QDialogPositionOptions = \"default\" | \"top\" | \"right\" | \"bottom\" | \"left\"","QDrawerSideOptions":"type QDrawerSideOptions = \"left\" | \"right\"","QDrawerBehaviorOptions":"type QDrawerBehaviorOptions = \"default\" | \"desktop\" | \"mobile\"","QIconSizeOptions":"type QIconSizeOptions = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | string | number","QIconTypeOptions":"type QIconTypeOptions = \"outlined\" | \"sharp\" | \"rounded\"","QLayoutViewOptions":"type QLayoutViewOptions = `${\"l\"|\"h\"}${\"h\"|\"H\"}${\"r\"|\"h\"} ${\"l\"|\"L\"}${\"p\"}${\"r\"|\"R\"} ${\"l\"|\"f\"}${\"f\"|\"F\"}${\"r\"|\"f\"}`","QTableColumn":"type QTableColumn = {\n name: string\n required?: boolean;\n label: string;\n align?: \"left\" | \"center\" | \"right\";\n field: string | ((row: QTableRow) => string);\n format?: (val: string) => string;\n sortable?: boolean;\n sort?: (a: string, b: string) => number;\n};","QTableRow":"type QTableRow = {\n [key: string]: string | number\n};","QTableSort":"type QTableSort = {\n columnField: string | ((row: QTableRow) => string)\n type: \"asc\" | \"desc\";\n} | null;","QCardFillColors":"type QCardFillColors = \"primary\" | \"secondary\" | \"tertiary\"","QChipSizeOptions":"type QChipSizeOptions = \"sm\" | \"md\" | \"lg\"","QTabsVariants":"type QTabsVariants = \"primary\" | \"secondary\" | \"vertical\""}
@@ -1,2 +1,3 @@
1
+ /// <reference types="svelte" />
1
2
  import { Readable, Writable } from "svelte/store";
2
3
  export declare function watchable<T>(value: T): readonly [Writable<T>, Readable<T | null>];
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@quaffui/quaff",
3
- "version": "0.1.0-prealpha",
3
+ "version": "0.1.0-prealpha10",
4
4
  "scripts": {
5
5
  "dev": "vite dev",
6
6
  "open": "vite dev --open",
7
- "build": "vite build && npm run package",
7
+ "build": "vite build && npm run package && npm run build:css",
8
+ "build:css": "vite build --config vite.config.scss.ts",
8
9
  "preview": "vite preview",
9
10
  "package": "svelte-kit sync && svelte-package && publint",
10
- "prepublishOnly": "npm run package",
11
+ "prepublishOnly": "npm run build",
11
12
  "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
12
13
  "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
13
14
  "test:unit": "vitest",
@@ -20,7 +21,8 @@
20
21
  ".": {
21
22
  "types": "./dist/index.d.ts",
22
23
  "svelte": "./dist/index.js"
23
- }
24
+ },
25
+ "./css/*": "./dist/css/*"
24
26
  },
25
27
  "files": [
26
28
  "dist",
@@ -28,39 +30,43 @@
28
30
  "!dist/**/*.spec.*"
29
31
  ],
30
32
  "peerDependencies": {
31
- "svelte": "^3.54.0"
33
+ "svelte": "^4.0.0"
32
34
  },
33
35
  "devDependencies": {
34
- "@sveltejs/adapter-auto": "^2.0.0",
35
- "@sveltejs/kit": "^1.5.0",
36
- "@sveltejs/package": "^2.0.0",
37
- "@types/node": "^20.3.1",
36
+ "@fontsource/material-symbols-outlined": "^5.0.6",
37
+ "@fontsource/material-symbols-rounded": "^5.0.6",
38
+ "@fontsource/material-symbols-sharp": "^5.0.6",
39
+ "@fontsource/roboto": "^5.0.7",
40
+ "@sveltejs/adapter-auto": "^2.1.0",
41
+ "@sveltejs/kit": "^1.22.4",
42
+ "@sveltejs/package": "^2.2.0",
43
+ "@types/node": "^20.4.6",
38
44
  "@types/prettier": "^2.7.3",
39
45
  "@types/prismjs": "^1.26.0",
40
- "@typescript-eslint/eslint-plugin": "^5.45.0",
41
- "@typescript-eslint/parser": "^5.45.0",
42
- "eslint": "^8.28.0",
43
- "eslint-config-prettier": "^8.5.0",
44
- "eslint-plugin-svelte": "^2.26.0",
45
- "prettier": "^2.8.0",
46
- "prettier-plugin-svelte": "^2.8.1",
47
- "publint": "^0.1.9",
48
- "sass": "^1.62.1",
49
- "svelte": "^3.54.0",
50
- "svelte-check": "^3.0.1",
46
+ "@typescript-eslint/eslint-plugin": "^6.2.1",
47
+ "@typescript-eslint/parser": "^6.2.1",
48
+ "eslint": "^8.46.0",
49
+ "eslint-config-prettier": "^8.9.0",
50
+ "eslint-plugin-svelte": "^2.32.4",
51
+ "prettier": "^3.0.0",
52
+ "prettier-plugin-svelte": "^3.0.3",
53
+ "publint": "^0.2.0",
54
+ "sass": "^1.64.2",
55
+ "svelte": "^4.1.2",
56
+ "svelte-check": "^3.4.6",
51
57
  "ts-node": "^10.9.1",
52
- "tslib": "^2.4.1",
53
- "typescript": "^5.0.0",
54
- "vite": "^4.3.0",
55
- "vitest": "^0.25.3"
58
+ "tslib": "^2.6.1",
59
+ "typescript": "^5.1.6",
60
+ "vite": "^4.4.8",
61
+ "vitest": "^0.34.1"
56
62
  },
57
63
  "svelte": "./dist/index.js",
58
64
  "types": "./dist/index.d.ts",
59
65
  "type": "module",
60
66
  "dependencies": {
61
- "beercss": "^3.2.6",
62
- "material-dynamic-colors": "^0.1.7",
63
- "prism-svelte": "0.5.0",
64
- "prismjs": "^1.29.0"
67
+ "beercss": "^3.2.13",
68
+ "highlight.js": "^11.8.0",
69
+ "material-dynamic-colors": "^1.0.1",
70
+ "svelte-highlight": "^7.3.0"
65
71
  }
66
72
  }