@quaffui/quaff 0.1.0-prealpha11 → 0.1.0-prealpha14

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 (204) hide show
  1. package/dist/components/avatar/QAvatar.svelte +2 -2
  2. package/dist/components/avatar/QAvatar.svelte.d.ts +2 -2
  3. package/dist/components/avatar/docs.d.ts +1 -1
  4. package/dist/components/avatar/props.d.ts +3 -2
  5. package/dist/components/breadcrumbs/QBreadcrumbs.svelte +1 -1
  6. package/dist/components/breadcrumbs/QBreadcrumbs.svelte.d.ts +1 -1
  7. package/dist/components/breadcrumbs/QBreadcrumbsEl.svelte +5 -5
  8. package/dist/components/breadcrumbs/QBreadcrumbsEl.svelte.d.ts +1 -1
  9. package/dist/components/breadcrumbs/docs.d.ts +1 -1
  10. package/dist/components/breadcrumbs/props.d.ts +4 -3
  11. package/dist/components/button/QBtn.svelte +14 -10
  12. package/dist/components/button/QBtn.svelte.d.ts +2 -1
  13. package/dist/components/button/docs.d.ts +1 -1
  14. package/dist/components/button/docs.props.js +16 -0
  15. package/dist/components/button/props.d.ts +13 -2
  16. package/dist/components/card/QCard.svelte +2 -2
  17. package/dist/components/card/QCard.svelte.d.ts +1 -1
  18. package/dist/components/card/QCardActions.svelte +2 -2
  19. package/dist/components/card/QCardActions.svelte.d.ts +1 -1
  20. package/dist/components/card/QCardSection.svelte +1 -1
  21. package/dist/components/card/QCardSection.svelte.d.ts +1 -1
  22. package/dist/components/card/docs.d.ts +1 -1
  23. package/dist/components/card/docs.props.js +1 -1
  24. package/dist/components/card/props.d.ts +6 -5
  25. package/dist/components/checkbox/QCheckbox.svelte +1 -1
  26. package/dist/components/checkbox/QCheckbox.svelte.d.ts +1 -1
  27. package/dist/components/checkbox/docs.d.ts +1 -1
  28. package/dist/components/checkbox/props.d.ts +3 -2
  29. package/dist/components/chip/QChip.svelte +26 -10
  30. package/dist/components/chip/QChip.svelte.d.ts +3 -2
  31. package/dist/components/chip/docs.d.ts +1 -1
  32. package/dist/components/chip/docs.props.js +8 -0
  33. package/dist/components/chip/index.scss +18 -1
  34. package/dist/components/chip/props.d.ts +8 -2
  35. package/dist/components/codeBlock/QCodeBlock.svelte +24 -22
  36. package/dist/components/codeBlock/QCodeBlock.svelte.d.ts +0 -1
  37. package/dist/components/codeBlock/props.d.ts +2 -1
  38. package/dist/components/dialog/QDialog.svelte +3 -3
  39. package/dist/components/dialog/QDialog.svelte.d.ts +1 -1
  40. package/dist/components/dialog/docs.d.ts +1 -1
  41. package/dist/components/dialog/docs.props.js +16 -0
  42. package/dist/components/dialog/props.d.ts +3 -2
  43. package/dist/components/drawer/QDrawer.svelte +3 -3
  44. package/dist/components/drawer/QDrawer.svelte.d.ts +2 -2
  45. package/dist/components/drawer/docs.d.ts +1 -1
  46. package/dist/components/drawer/docs.props.js +1 -1
  47. package/dist/components/drawer/props.d.ts +3 -2
  48. package/dist/components/footer/QFooter.svelte +3 -3
  49. package/dist/components/footer/QFooter.svelte.d.ts +2 -2
  50. package/dist/components/footer/docs.d.ts +1 -1
  51. package/dist/components/footer/docs.props.js +4 -4
  52. package/dist/components/footer/props.d.ts +3 -2
  53. package/dist/components/header/QHeader.svelte +2 -2
  54. package/dist/components/header/QHeader.svelte.d.ts +2 -2
  55. package/dist/components/header/docs.props.d.ts +24 -0
  56. package/dist/components/header/docs.props.js +70 -0
  57. package/dist/components/header/props.d.ts +2 -2
  58. package/dist/components/icon/QIcon.svelte +3 -5
  59. package/dist/components/icon/QIcon.svelte.d.ts +3 -2
  60. package/dist/components/icon/docs.d.ts +1 -1
  61. package/dist/components/icon/docs.props.js +4 -4
  62. package/dist/components/icon/props.d.ts +3 -2
  63. package/dist/components/index.d.ts +2 -1
  64. package/dist/components/index.js +2 -1
  65. package/dist/components/input/QInput.svelte +62 -73
  66. package/dist/components/input/QInput.svelte.d.ts +4 -3
  67. package/dist/components/input/docs.d.ts +1 -1
  68. package/dist/components/input/docs.js +1 -7
  69. package/dist/components/input/docs.props.js +5 -13
  70. package/dist/components/input/index.scss +1 -3
  71. package/dist/components/input/props.d.ts +3 -4
  72. package/dist/components/input/props.js +0 -1
  73. package/dist/components/layout/QLayout.svelte +7 -7
  74. package/dist/components/layout/QLayout.svelte.d.ts +5 -4
  75. package/dist/components/layout/docs.d.ts +1 -1
  76. package/dist/components/layout/docs.props.js +7 -7
  77. package/dist/components/layout/index.scss +10 -10
  78. package/dist/components/layout/props.d.ts +3 -2
  79. package/dist/components/list/QItem.svelte +26 -23
  80. package/dist/components/list/QItem.svelte.d.ts +4 -7
  81. package/dist/components/list/QItemSection.svelte +26 -22
  82. package/dist/components/list/QItemSection.svelte.d.ts +1 -1
  83. package/dist/components/list/QList.svelte +9 -10
  84. package/dist/components/list/QList.svelte.d.ts +1 -1
  85. package/dist/components/list/docs.d.ts +1 -1
  86. package/dist/components/list/docs.props.js +43 -27
  87. package/dist/components/list/index.scss +28 -5
  88. package/dist/components/list/props.d.ts +9 -6
  89. package/dist/components/list/props.js +2 -2
  90. package/dist/components/private/QApi.svelte +2 -2
  91. package/dist/components/private/QApi.svelte.d.ts +1 -1
  92. package/dist/components/private/QDocs.svelte +2 -2
  93. package/dist/components/private/QDocs.svelte.d.ts +1 -1
  94. package/dist/components/private/QDocsSection.svelte +1 -2
  95. package/dist/components/progress/QCircularProgress.svelte +10 -5
  96. package/dist/components/progress/QCircularProgress.svelte.d.ts +2 -1
  97. package/dist/components/progress/QLinearProgress.svelte +1 -1
  98. package/dist/components/progress/QLinearProgress.svelte.d.ts +2 -2
  99. package/dist/components/progress/docs.d.ts +1 -1
  100. package/dist/components/progress/docs.props.js +15 -15
  101. package/dist/components/progress/props.d.ts +4 -3
  102. package/dist/components/radio/QRadio.svelte +1 -1
  103. package/dist/components/radio/QRadio.svelte.d.ts +1 -1
  104. package/dist/components/radio/docs.d.ts +1 -1
  105. package/dist/components/radio/docs.props.js +3 -3
  106. package/dist/components/radio/props.d.ts +3 -2
  107. package/dist/components/radio/props.js +1 -1
  108. package/dist/components/railbar/QRailbar.svelte +3 -3
  109. package/dist/components/railbar/QRailbar.svelte.d.ts +2 -2
  110. package/dist/components/railbar/docs.d.ts +1 -1
  111. package/dist/components/railbar/docs.props.js +7 -7
  112. package/dist/components/railbar/props.d.ts +3 -2
  113. package/dist/components/select/QSelect.svelte +90 -94
  114. package/dist/components/select/QSelect.svelte.d.ts +3 -2
  115. package/dist/components/select/docs.d.ts +1 -1
  116. package/dist/components/select/docs.js +1 -7
  117. package/dist/components/select/docs.props.js +4 -12
  118. package/dist/components/select/index.scss +17 -4
  119. package/dist/components/select/props.d.ts +7 -5
  120. package/dist/components/select/props.js +0 -1
  121. package/dist/components/separator/QSeparator.svelte +50 -55
  122. package/dist/components/separator/QSeparator.svelte.d.ts +2 -2
  123. package/dist/components/separator/docs.d.ts +1 -1
  124. package/dist/components/separator/docs.props.js +13 -13
  125. package/dist/components/separator/index.scss +52 -0
  126. package/dist/components/separator/props.d.ts +5 -4
  127. package/dist/components/table/QTable.svelte +3 -5
  128. package/dist/components/table/QTable.svelte.d.ts +3 -3
  129. package/dist/components/table/docs.d.ts +1 -1
  130. package/dist/components/table/docs.props.js +1 -1
  131. package/dist/components/table/props.d.ts +3 -2
  132. package/dist/components/tabs/QTab.svelte +50 -43
  133. package/dist/components/tabs/QTab.svelte.d.ts +2 -2
  134. package/dist/components/tabs/QTabs.svelte +61 -42
  135. package/dist/components/tabs/QTabs.svelte.d.ts +12 -2
  136. package/dist/components/tabs/docs.d.ts +1 -1
  137. package/dist/components/tabs/docs.props.js +2 -2
  138. package/dist/components/tabs/index.scss +33 -23
  139. package/dist/components/tabs/props.d.ts +5 -6
  140. package/dist/components/tabs/props.js +1 -13
  141. package/dist/components/toggle/QToggle.svelte +10 -3
  142. package/dist/components/toggle/QToggle.svelte.d.ts +1 -1
  143. package/dist/components/toggle/docs.d.ts +1 -1
  144. package/dist/components/toggle/props.d.ts +1 -1
  145. package/dist/components/toggle/props.js +1 -1
  146. package/dist/components/toolbar/QToolbar.svelte +2 -2
  147. package/dist/components/toolbar/QToolbar.svelte.d.ts +2 -2
  148. package/dist/components/toolbar/QToolbarTitle.svelte +1 -1
  149. package/dist/components/toolbar/QToolbarTitle.svelte.d.ts +2 -2
  150. package/dist/components/toolbar/docs.d.ts +1 -1
  151. package/dist/components/toolbar/docs.props.js +24 -8
  152. package/dist/components/toolbar/props.d.ts +4 -3
  153. package/dist/components/tooltip/QTooltip.svelte +1 -1
  154. package/dist/components/tooltip/QTooltip.svelte.d.ts +1 -1
  155. package/dist/components/tooltip/docs.d.ts +1 -1
  156. package/dist/components/tooltip/docs.props.js +1 -1
  157. package/dist/components/tooltip/props.d.ts +3 -2
  158. package/dist/components/tooltip/props.js +1 -1
  159. package/dist/composables/index.d.ts +3 -0
  160. package/dist/composables/index.js +3 -1
  161. package/dist/composables/use-align.d.ts +1 -1
  162. package/dist/composables/use-align.js +1 -1
  163. package/dist/composables/use-router-link.d.ts +3 -3
  164. package/dist/composables/use-router-link.js +4 -4
  165. package/dist/composables/use-size.d.ts +1 -1
  166. package/dist/composables/use-size.js +2 -2
  167. package/dist/css/index.css +1 -1
  168. package/dist/css/index.scss +1 -0
  169. package/dist/css/mixins/field-mixins.scss +52 -0
  170. package/dist/css/mixins.scss +3 -4
  171. package/dist/css/ripple.scss +1 -1
  172. package/dist/css/shared/q-field.scss +305 -0
  173. package/dist/css/theme/colors.module.scss +261 -109
  174. package/dist/css/theme/palette.scss +8 -2
  175. package/dist/css/theme/theme.dark.scss +3 -1
  176. package/dist/css/theme/theme.light.scss +3 -1
  177. package/dist/helpers/index.d.ts +1 -1
  178. package/dist/helpers/index.js +1 -1
  179. package/dist/helpers/ripple.d.ts +1 -0
  180. package/dist/helpers/ripple.js +1 -1
  181. package/dist/helpers/version.d.ts +1 -1
  182. package/dist/helpers/version.js +1 -1
  183. package/dist/stores/QTheme.d.ts +8 -7
  184. package/dist/stores/QTheme.js +3 -3
  185. package/dist/stores/Quaff.js +19 -14
  186. package/dist/stores/index.d.ts +2 -0
  187. package/dist/stores/index.js +2 -0
  188. package/dist/utils/clipboard.d.ts +1 -1
  189. package/dist/utils/clipboard.js +1 -2
  190. package/dist/utils/dom.d.ts +1 -0
  191. package/dist/utils/dom.js +4 -0
  192. package/dist/utils/index.d.ts +8 -0
  193. package/dist/utils/index.js +8 -1
  194. package/dist/utils/props.d.ts +2 -2
  195. package/dist/utils/types.d.ts +3 -3
  196. package/dist/utils/types.json +1 -1
  197. package/package.json +22 -23
  198. package/dist/composables/use-index.d.ts +0 -2
  199. package/dist/composables/use-index.js +0 -17
  200. package/dist/css/mixins/field.scss +0 -432
  201. package/dist/helpers/activationHandler.d.ts +0 -9
  202. package/dist/helpers/activationHandler.js +0 -23
  203. package/dist/utils/fields.d.ts +0 -1
  204. package/dist/utils/fields.js +0 -14
@@ -0,0 +1,52 @@
1
+ .q-separator__wrapper {
2
+ display: flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+
6
+ &.q-separator--inset__wrapper {
7
+ padding: 0 1rem;
8
+ }
9
+
10
+ &.q-separator--vertical__wrapper {
11
+ height: 100%;
12
+ flex-direction: column;
13
+
14
+ &.q-separator--inset__wrapper {
15
+ padding: 1rem 0;
16
+ }
17
+ }
18
+
19
+ &:not(.q-separator--vertical__wrapper) {
20
+ width: 100%;
21
+ }
22
+
23
+ & > .q-separator {
24
+ background-color: var(--outline);
25
+ border: none;
26
+ flex: 1 1 auto;
27
+
28
+ &--vertical {
29
+ width: var(--q-separator--size, 0.0625rem);
30
+
31
+ @each $space, $val in $spaces {
32
+ @if $space != "none" and $space != "auto" {
33
+ &.q-separator--spacing-#{$space} {
34
+ margin-inline: $val;
35
+ }
36
+ }
37
+ }
38
+ }
39
+
40
+ &:not(&--vertical) {
41
+ height: var(--q-separator--size, 0.0625rem);
42
+
43
+ @each $space, $val in $spaces {
44
+ @if $space != "auto" {
45
+ &.q-separator--spacing-#{$space} {
46
+ margin-block: $val;
47
+ }
48
+ }
49
+ }
50
+ }
51
+ }
52
+ }
@@ -1,6 +1,7 @@
1
- import type { NativeProps } from "../../utils/types";
1
+ import type { NativeProps, QuaffSizes } from "../../utils";
2
+ import type { HTMLAttributes } from "svelte/elements";
2
3
  interface QSeparatorPropsVertical extends NativeProps {
3
- spacing?: "none" | "sm" | "md" | "lg";
4
+ spacing?: QuaffSizes;
4
5
  inset?: boolean;
5
6
  vertical?: true;
6
7
  color?: string;
@@ -8,8 +9,8 @@ interface QSeparatorPropsVertical extends NativeProps {
8
9
  text?: string;
9
10
  textAlign?: "top" | "middle" | "bottom";
10
11
  }
11
- interface QSeparatorPropsHorizontal extends NativeProps {
12
- spacing?: "none" | "sm" | "md" | "lg";
12
+ interface QSeparatorPropsHorizontal extends NativeProps, HTMLAttributes<HTMLDivElement> {
13
+ spacing?: QuaffSizes;
13
14
  inset?: boolean;
14
15
  vertical?: false;
15
16
  color?: string;
@@ -1,7 +1,5 @@
1
- <script>import { createClasses } from "../../utils/props";
2
- import QBtn from "../button/QBtn.svelte";
3
- import QIcon from "../icon/QIcon.svelte";
4
- import QSelect from "../select/QSelect.svelte";
1
+ <script>import { createClasses } from "../../utils";
2
+ import { QIcon, QSelect, QBtn } from "../..";
5
3
  export let columns = [], rows = [], flat = void 0, bordered = void 0, dense = false, userClasses = "";
6
4
  export { userClasses as class };
7
5
  function getField(fieldRaw, row) {
@@ -88,7 +86,7 @@ function setSort(column) {
88
86
  }
89
87
  </script>
90
88
 
91
- <div class={classes}>
89
+ <div class={classes} {...$$restProps}>
92
90
  <table class={classesTable}>
93
91
  <thead>
94
92
  <tr>
@@ -1,14 +1,14 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import type { QTableProps } from "./props";
3
- import type { QTableColumn, QTableRow } from "./props";
2
+ import type { QTableProps, QTableColumn, QTableRow } from "./props";
4
3
  declare const __propDef: {
5
4
  props: {
5
+ [x: string]: any;
6
6
  columns?: QTableColumn[] | undefined;
7
7
  rows?: QTableRow[] | undefined;
8
8
  flat?: QTableProps["flat"];
9
9
  bordered?: QTableProps["bordered"];
10
10
  dense?: QTableProps["dense"];
11
- class?: string | undefined;
11
+ class?: string | null | undefined;
12
12
  };
13
13
  events: {
14
14
  [evt: string]: CustomEvent<any>;
@@ -1,2 +1,2 @@
1
- import type { QComponentDocs } from "../../utils/types";
1
+ import type { QComponentDocs } from "../../utils";
2
2
  export declare let QTableDocs: QComponentDocs;
@@ -34,7 +34,7 @@ export const QTableDocsProps = [
34
34
  {
35
35
  name: "dense",
36
36
  type: "boolean",
37
- optional: false,
37
+ optional: true,
38
38
  clickableType: false,
39
39
  description: "Shows the Table in dense mode (takes up less space).",
40
40
  default: "false",
@@ -1,4 +1,5 @@
1
- import type { NativeProps } from "../../utils/types";
1
+ import type { NativeProps } from "../../utils";
2
+ import type { HTMLAttributes } from "svelte/elements";
2
3
  export type QTableColumn = {
3
4
  name: string;
4
5
  required?: boolean;
@@ -16,7 +17,7 @@ export type QTableSort = {
16
17
  columnField: string | ((row: QTableRow) => string);
17
18
  type: "asc" | "desc";
18
19
  } | null;
19
- export interface QTableProps extends NativeProps {
20
+ export interface QTableProps extends NativeProps, HTMLAttributes<HTMLDivElement> {
20
21
  /**
21
22
  * Column definitions of the table.
22
23
  * @default []
@@ -1,59 +1,61 @@
1
- <script>import { Quaff } from "../../stores/Quaff";
2
- import { getContext, hasContext } from "svelte";
3
- import { createClasses } from "../../utils/props";
4
- import QIcon from "../icon/QIcon.svelte";
5
- import { isRouteActive } from "../../composables/use-router-link";
6
- import { getDirection, isActivationKey, isArrowKey, isTabKey } from "../../utils/events";
7
- import { ripple } from "../../helpers/ripple";
8
- import { getClosestFocusableBlock, getClosestFocusableSibling } from "../../utils/dom";
9
- export let name = void 0, to = void 0, icon = void 0, userClasses = void 0;
1
+ <script>import { QIcon } from "../..";
2
+ import { isRouteActive } from "../../composables";
3
+ import { ripple } from "../../helpers";
4
+ import { Quaff } from "../../stores";
5
+ import {
6
+ createClasses,
7
+ isActivationKey,
8
+ isArrowKey,
9
+ getDirection,
10
+ getClosestFocusableSibling,
11
+ isTabKey,
12
+ getClosestFocusableBlock
13
+ } from "../../utils";
14
+ import { hasContext, getContext, onMount } from "svelte";
15
+ import { get } from "svelte/store";
16
+ export let name, to = void 0, icon = void 0, userClasses = "";
10
17
  export { userClasses as class };
11
- let index = 1;
12
18
  let qTab;
13
- if (!hasContext("QTabCount")) {
19
+ const qTabStore = getContext("qTabStore");
20
+ if (!hasContext("qTabStore")) {
14
21
  console.warn("QTab should be used inside QTabs");
15
22
  }
16
- const variant = getContext("variant");
17
- let indexContext = getContext("QTabCount");
23
+ const isInitallyActive = to !== void 0 ? isRouteActive($Quaff.router, to) : name === $qTabStore.value;
18
24
  $:
19
- if (indexContext) {
20
- index = indexContext.index();
25
+ if (isInitallyActive && qTab) {
26
+ setActive(qTab);
21
27
  }
22
- let activeStore = getContext("activeTab");
23
28
  $:
24
- isActive = to !== void 0 ? isRouteActive($Quaff.router, to) : name === $activeStore.name;
29
+ isActive = name === $qTabStore.value;
25
30
  $:
26
- if (isActive && qTab) {
31
+ if (qTab && isActive && qTab !== $qTabStore.activeEl) {
27
32
  setActive(qTab);
28
33
  }
29
34
  let tag;
30
35
  $:
31
36
  tag = to === void 0 ? "button" : "a";
32
- $:
33
- classes = createClasses([isActive && "active"], {
34
- component: "q-tab",
35
- userClasses
36
- });
37
37
  function setActive(el) {
38
- let rect;
39
- if (variant === "primary") {
40
- rect = el.firstElementChild.getBoundingClientRect();
41
- } else {
42
- rect = el.getBoundingClientRect();
43
- }
44
- let indicatorWidth = variant === "vertical" ? rect.height : rect.width;
45
- let buttonWidth = el.offsetWidth;
46
- if (index !== $activeStore.index) {
47
- $activeStore = {
48
- name,
49
- index,
50
- position: variant === "vertical" ? `${el.offsetTop}px` : variant === "secondary" ? `${el.offsetLeft}px` : `calc(${el.offsetLeft}px + ${buttonWidth}px / 2)`,
51
- size: indicatorWidth
52
- };
53
- }
38
+ const store = get(qTabStore);
39
+ const previousEl = store.activeEl;
40
+ const variant = store.variant;
41
+ const child = variant === "primary" ? el.firstElementChild : { offsetLeft: 0, offsetWidth: 0 };
42
+ const position = variant === "vertical" ? el.offsetTop : el.offsetLeft + child.offsetLeft;
43
+ const size = variant === "vertical" ? el.offsetHeight : child.offsetWidth || el.offsetWidth;
44
+ $qTabStore = {
45
+ variant,
46
+ value: name,
47
+ previousEl,
48
+ activeEl: el,
49
+ utils: {
50
+ size,
51
+ position
52
+ }
53
+ };
54
54
  }
55
55
  function onClick(e) {
56
- setActive(e.target);
56
+ if (!isActive) {
57
+ setActive(e.target);
58
+ }
57
59
  }
58
60
  function onKeydown(e) {
59
61
  if (isActivationKey(e)) {
@@ -83,17 +85,22 @@ function onKeydown(e) {
83
85
  </script>
84
86
 
85
87
  <svelte:element
86
- this={tag}
87
88
  use:ripple
89
+ bind:this={qTab}
90
+ this={tag}
91
+
88
92
  href={to}
89
- class={classes}
90
93
  role={tag === "a" ? "button" : undefined}
91
94
  aria-current={isActive || undefined}
95
+
96
+ class="q-tab {userClasses}"
97
+ class:q-tab--active={isActive}
98
+
92
99
  on:click
93
100
  on:click={onClick}
94
101
  on:keydown={onKeydown}
102
+
95
103
  {...$$restProps}
96
- bind:this={qTab}
97
104
  >
98
105
  <div>
99
106
  {#if icon}
@@ -3,10 +3,10 @@ import type { QTabProps } from "./props";
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  [x: string]: any;
6
- name?: QTabProps["name"];
6
+ name: QTabProps["name"];
7
7
  to?: QTabProps["to"];
8
8
  icon?: QTabProps["icon"];
9
- class?: string | undefined;
9
+ class?: string | null | undefined;
10
10
  };
11
11
  events: {
12
12
  click: MouseEvent;
@@ -1,51 +1,70 @@
1
- <script>import { onMount, setContext } from "svelte";
2
- import { createClasses, createStyles } from "../../utils/props";
3
- import { derived, writable } from "svelte/store";
4
- export let value = void 0, variant = "primary", round = false, userClasses = void 0, userStyles = void 0;
5
- export { userClasses as class, userStyles as style };
6
- let hidden = true;
7
- onMount(() => {
8
- setTimeout(() => {
9
- hidden = false;
10
- }, 200);
11
- });
12
- let QTabCount = 0;
13
- setContext("QTabCount", {
14
- index: () => {
15
- QTabCount += 1;
16
- return QTabCount;
17
- }
1
+ <script context="module"></script>
2
+
3
+ <script>import { movementDirection } from "../../utils";
4
+ import { setContext } from "svelte";
5
+ import { writable } from "svelte/store";
6
+ export let value = void 0, variant = "primary", round = false, userClasses = "";
7
+ export { userClasses as class };
8
+ const cssVars = {
9
+ indicatorPosition: "--indicator-position",
10
+ indicatorSize: "--indicator-size"
11
+ };
12
+ let qTabs;
13
+ const qTabStore = writable({
14
+ value,
15
+ variant,
16
+ previousEl: null,
17
+ activeEl: null,
18
+ utils: { size: 0, position: 0 }
18
19
  });
19
- let activeTabStore = writable({ name: value, index: 0, size: 0, position: 0 });
20
20
  $:
21
- activeTabStore.update(($active) => {
22
- $active.name = value;
23
- return $active;
21
+ qTabStore.update(($store) => {
22
+ $store.value = value;
23
+ return $store;
24
24
  });
25
- setContext("activeTab", activeTabStore);
26
- setContext("variant", variant);
27
25
  $:
28
- value = $activeTabStore.name;
26
+ value = $qTabStore.value;
27
+ setContext("qTabStore", qTabStore);
29
28
  $:
30
- classes = createClasses([variant, round && "rounded", hidden && "hidden-indicator"], {
31
- component: "q-tabs",
32
- userClasses
33
- });
34
- let indicatorWidth = derived(activeTabStore, ($activeTabStore2) => {
35
- return variant === "primary" ? `calc(${$activeTabStore2.size}px + 8px)` : `${$activeTabStore2.size}px`;
36
- });
37
- $:
38
- style = createStyles(
39
- {
40
- "--tab-count": QTabCount || 1,
41
- "--indicator-size": $indicatorWidth,
42
- "--active-tab-index": $activeTabStore.index - 1,
43
- "--indicator-position": $activeTabStore.position
44
- },
45
- userStyles
46
- );
29
+ if ($qTabStore.activeEl) {
30
+ const {
31
+ previousEl,
32
+ activeEl,
33
+ utils: { position, size },
34
+ variant: storeVariant
35
+ } = $qTabStore;
36
+ const tabsSize = storeVariant === "vertical" ? qTabs.offsetHeight : qTabs.offsetWidth;
37
+ const tabSize = size / tabsSize;
38
+ if (!previousEl) {
39
+ qTabs.style.setProperty(cssVars.indicatorSize, `${tabSize}`);
40
+ qTabs.style.setProperty(cssVars.indicatorPosition, `${position}px`);
41
+ } else {
42
+ const comparePositions = movementDirection(previousEl, activeEl);
43
+ let transitionSize;
44
+ if (comparePositions === "next") {
45
+ transitionSize = prepareTransitionSize(storeVariant, previousEl, activeEl);
46
+ } else {
47
+ transitionSize = prepareTransitionSize(storeVariant, activeEl, previousEl);
48
+ qTabs.style.setProperty(cssVars.indicatorPosition, `${position}px`);
49
+ }
50
+ qTabs.style.setProperty(cssVars.indicatorSize, `${transitionSize / tabsSize}`);
51
+ setTimeout(() => {
52
+ qTabs.style.setProperty(cssVars.indicatorPosition, `${position}px`);
53
+ qTabs.style.setProperty(cssVars.indicatorSize, `${tabSize}`);
54
+ }, 250);
55
+ }
56
+ }
57
+ function prepareTransitionSize(storeVariant, fromEl, toEl) {
58
+ const fromElChild = storeVariant === "primary" ? fromEl.firstElementChild : { offsetLeft: 0, offsetWidth: 0 };
59
+ const toElChild = storeVariant === "primary" ? toEl.firstElementChild : { offsetLeft: 0, offsetWidth: 0 };
60
+ return storeVariant === "vertical" ? toEl.offsetTop + toEl.offsetHeight - fromEl.offsetTop : toEl.offsetLeft + toElChild.offsetLeft + (toElChild.offsetWidth || toEl.offsetWidth) - (fromEl.offsetLeft + fromElChild.offsetLeft);
61
+ }
47
62
  </script>
48
63
 
49
- <nav class={classes} {style}>
64
+ <nav
65
+ bind:this={qTabs}
66
+ class="q-tabs q-tabs--{variant} {userClasses}"
67
+ class:q-tabs--rounded={round}
68
+ >
50
69
  <slot />
51
70
  </nav>
@@ -1,12 +1,22 @@
1
1
  import { SvelteComponent } from "svelte";
2
+ export type QTab = HTMLAnchorElement | HTMLButtonElement;
3
+ export type QTabStore = {
4
+ value?: string;
5
+ variant: QTabsProps["variant"];
6
+ previousEl: QTab | null;
7
+ activeEl: QTab | null;
8
+ utils: {
9
+ position: number;
10
+ size: number;
11
+ };
12
+ };
2
13
  import type { QTabsProps } from "./props";
3
14
  declare const __propDef: {
4
15
  props: {
5
16
  value?: QTabsProps["value"];
6
17
  variant?: QTabsProps["variant"];
7
18
  round?: QTabsProps["round"];
8
- class?: string | undefined;
9
- style?: string | undefined;
19
+ class?: string | null | undefined;
10
20
  };
11
21
  events: {
12
22
  [evt: string]: CustomEvent<any>;
@@ -1,2 +1,2 @@
1
- import type { QComponentDocs } from "../../utils/types";
1
+ import type { QComponentDocs } from "../../utils";
2
2
  export declare let QTabsDocs: QComponentDocs;
@@ -10,7 +10,7 @@ export const QTabsDocsProps = [
10
10
  {
11
11
  name: "variant",
12
12
  type: "QTabsVariants",
13
- optional: false,
13
+ optional: true,
14
14
  clickableType: true,
15
15
  description: "",
16
16
  default: "",
@@ -18,7 +18,7 @@ export const QTabsDocsProps = [
18
18
  {
19
19
  name: "round",
20
20
  type: "boolean",
21
- optional: false,
21
+ optional: true,
22
22
  clickableType: false,
23
23
  description: "",
24
24
  default: "",
@@ -7,7 +7,7 @@
7
7
  overflow: auto;
8
8
  scroll-behavior: smooth;
9
9
  border-radius: 0;
10
- border-bottom: solid 0.0625rem var(--outline);
10
+ border-bottom: solid 0.0625rem var(--outline-4);
11
11
  &::-webkit-scrollbar {
12
12
  display: none;
13
13
  }
@@ -15,7 +15,7 @@
15
15
  & > .q-tab {
16
16
  position: relative;
17
17
  box-sizing: border-box;
18
- height: 48px;
18
+ min-height: 3rem;
19
19
  min-width: max-content;
20
20
  display: flex;
21
21
  align-items: center;
@@ -26,6 +26,7 @@
26
26
  border-radius: 0;
27
27
  gap: 0;
28
28
  overflow: hidden;
29
+ @include padding("x", "md");
29
30
 
30
31
  & .q-tab__icon {
31
32
  margin-right: 0.25rem;
@@ -58,49 +59,58 @@
58
59
 
59
60
  &.q-tabs--vertical {
60
61
  flex-direction: column;
61
- min-height: calc(var(--tab-count) * 3rem);
62
62
  width: fit-content;
63
63
  align-items: stretch;
64
64
  border-bottom: unset;
65
- border-right: solid 0.0625rem var(--outline);
65
+ border-right: solid 0.0625rem var(--outline-4);
66
66
 
67
67
  & > .q-tab {
68
68
  @include padding("x", "md");
69
69
  }
70
70
 
71
71
  &::after {
72
- top: var(--indicator-position);
73
- right: 0;
74
- bottom: auto;
75
72
  left: auto;
76
- width: 2px;
77
- height: var(--indicator-size);
73
+ right: 0;
74
+ top: 0;
75
+ bottom: 0;
76
+
77
+ width: 0.125rem;
78
+ height: 100%;
79
+
80
+ transform-origin: top;
81
+
82
+ scale: 1 var(--indicator-size, 0);
83
+ translate: 0 var(--indicator-position, 0);
78
84
  }
79
85
  }
80
86
 
81
87
  &::after {
82
88
  content: "";
83
89
  position: absolute;
84
- top: auto;
85
- right: auto;
90
+ left: 0;
91
+ right: 0;
86
92
  bottom: 0;
87
- left: var(--indicator-position);
88
- width: var(--indicator-size);
89
- height: 2px;
93
+
94
+ width: 100%;
95
+ height: 0.125rem;
96
+
90
97
  border-radius: 0;
91
98
  background: var(--primary);
92
- transition: all 0.3s cubic-bezier(0.77, 0, 0.18, 1);
93
- opacity: 0;
94
- }
95
99
 
96
- &:not(.q-tabs--hidden-indicator)::after {
97
- opacity: 1;
100
+ transform-origin: left;
101
+ transition:
102
+ scale 0.2s cubic-bezier(0.25, 0.92, 0.33, 1),
103
+ translate 0.2s cubic-bezier(0.25, 0.92, 0.33, 1);
104
+
105
+ scale: var(--indicator-size, 0) 1;
106
+ translate: var(--indicator-position, 0) 0;
98
107
  }
99
108
 
100
109
  &.q-tabs--primary::after {
101
- left: var(--indicator-position);
102
- transform: translateX(-50%);
103
- height: 3px;
104
- border-radius: 3px 3px 0px 0px;
110
+ translate: var(--indicator-position, 0) 0;
111
+ scale: var(--indicator-size, 0) 1;
112
+
113
+ height: 0.1875rem;
114
+ border-radius: 0.25rem 0.25rem 0px 0px;
105
115
  }
106
116
  }
@@ -1,14 +1,13 @@
1
- import { type NativeProps } from "../../utils/types";
1
+ import type { HTMLAttributes } from "svelte/elements";
2
+ import type { NativeProps } from "../../utils";
2
3
  export type QTabsVariants = "primary" | "secondary" | "vertical";
3
- export interface QTabsProps extends NativeProps {
4
+ export interface QTabsProps extends NativeProps, HTMLAttributes<HTMLElement> {
4
5
  value?: string;
5
6
  variant?: QTabsVariants;
6
7
  round?: boolean;
7
8
  }
8
- export declare const QTabsPropsDefaults: QTabsProps;
9
- export interface QTabProps extends NativeProps {
10
- name?: string;
9
+ export interface QTabProps extends NativeProps, HTMLAttributes<HTMLElement> {
10
+ name: string;
11
11
  to?: string;
12
12
  icon?: string;
13
13
  }
14
- export declare const QTabPropsDefaults: QTabProps;
@@ -1,13 +1 @@
1
- import { NativePropsDefaults } from "../../utils/types";
2
- export const QTabsPropsDefaults = {
3
- value: undefined,
4
- variant: "primary",
5
- round: false,
6
- ...NativePropsDefaults,
7
- };
8
- export const QTabPropsDefaults = {
9
- name: undefined,
10
- to: undefined,
11
- icon: undefined,
12
- ...NativePropsDefaults,
13
- };
1
+ import "$lib/utils";
@@ -1,5 +1,4 @@
1
- <script>import { createClasses } from "../../utils/props";
2
- import { onMount } from "svelte";
1
+ <script>import { createClasses } from "../../utils";
3
2
  export let value, icon = void 0, label = void 0, leftLabel = void 0, disable = void 0, userClasses = void 0;
4
3
  export { userClasses as class };
5
4
  $:
@@ -18,7 +17,15 @@ function toggle() {
18
17
  }
19
18
  </script>
20
19
 
21
- <div on:click={toggle} class={classes} aria-disabled={disable} {...$$restProps}>
20
+ <div
21
+ on:click={toggle}
22
+ class={classes}
23
+ aria-disabled={disable}
24
+ role="switch"
25
+ aria-checked={value}
26
+ tabindex="0"
27
+ {...$$restProps}
28
+ >
22
29
  <label class={classesInner}>
23
30
  <input bind:checked={value} type="checkbox" disabled={disable} />
24
31
  <span>
@@ -8,7 +8,7 @@ declare const __propDef: {
8
8
  label?: QToggleProps["label"];
9
9
  leftLabel?: QToggleProps["leftLabel"];
10
10
  disable?: QToggleProps["disable"];
11
- class?: string | undefined;
11
+ class?: string | null | undefined;
12
12
  };
13
13
  events: {
14
14
  [evt: string]: CustomEvent<any>;
@@ -1,2 +1,2 @@
1
- import type { QComponentDocs } from "../../utils/types";
1
+ import type { QComponentDocs } from "../../utils";
2
2
  export declare let QToggleDocs: QComponentDocs;
@@ -1,4 +1,4 @@
1
- import { type NativeProps } from "../../utils/types";
1
+ import type { NativeProps } from "../../utils";
2
2
  export interface QToggleProps extends NativeProps {
3
3
  value?: boolean;
4
4
  label?: string;
@@ -1,4 +1,4 @@
1
- import { NativePropsDefaults } from "../../utils/types";
1
+ import { NativePropsDefaults } from "../../utils";
2
2
  export const QTogglePropsDefaults = {
3
3
  value: false,
4
4
  label: undefined,
@@ -1,5 +1,5 @@
1
- <script>import { createClasses, createStyles } from "../../utils/props";
2
- import { useSize } from "../../composables/use-size";
1
+ <script>import { useSize } from "../../composables";
2
+ import { createClasses, createStyles } from "../../utils";
3
3
  export let inset = false, border = false, elevate = false, height = "64px", userClasses = void 0, userStyles = void 0;
4
4
  export { userClasses as class, userStyles as style };
5
5
  $: