@quaffui/quaff 1.0.0-beta6 → 1.0.0-beta9

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 (55) hide show
  1. package/README.md +2 -0
  2. package/dist/components/avatar/QAvatar.svelte +4 -0
  3. package/dist/components/breadcrumbs/QBreadcrumbs.svelte +28 -5
  4. package/dist/components/breadcrumbs/QBreadcrumbs.svelte.d.ts +23 -0
  5. package/dist/components/breadcrumbs/QBreadcrumbsEl.svelte +17 -14
  6. package/dist/components/button/QBtn.svelte +21 -11
  7. package/dist/components/card/QCard.svelte +9 -5
  8. package/dist/components/card/QCardActions.svelte +4 -0
  9. package/dist/components/card/QCardSection.svelte +2 -0
  10. package/dist/components/checkbox/QCheckbox.svelte +2 -0
  11. package/dist/components/chip/QChip.svelte +24 -14
  12. package/dist/components/codeBlock/QCodeBlock.svelte +8 -0
  13. package/dist/components/dialog/QDialog.svelte +12 -0
  14. package/dist/components/drawer/QDrawer.svelte +50 -39
  15. package/dist/components/expansion-item/QExpansionItem.svelte +16 -2
  16. package/dist/components/footer/QFooter.svelte +27 -22
  17. package/dist/components/header/QHeader.svelte +37 -28
  18. package/dist/components/icon/QIcon.svelte +4 -0
  19. package/dist/components/input/QInput.svelte +9 -2
  20. package/dist/components/layout/QLayout.svelte +243 -90
  21. package/dist/components/layout/QLayout.svelte.d.ts +64 -2
  22. package/dist/components/list/QItem.svelte +43 -24
  23. package/dist/components/list/QItem.svelte.d.ts +14 -0
  24. package/dist/components/list/QItemSection.svelte +16 -12
  25. package/dist/components/list/QList.svelte +28 -6
  26. package/dist/components/list/QList.svelte.d.ts +15 -0
  27. package/dist/components/private/ContextReseter.svelte +2 -3
  28. package/dist/components/private/QApi.svelte +15 -7
  29. package/dist/components/private/QDocs.svelte +40 -20
  30. package/dist/components/private/QDocs.svelte.d.ts +30 -0
  31. package/dist/components/private/QDocsSection.svelte +11 -7
  32. package/dist/components/progress/QCircularProgress.svelte +14 -5
  33. package/dist/components/progress/QLinearProgress.svelte +12 -6
  34. package/dist/components/radio/QRadio.svelte +2 -0
  35. package/dist/components/railbar/QRailbar.svelte +36 -35
  36. package/dist/components/select/QSelect.svelte +32 -23
  37. package/dist/components/separator/QSeparator.svelte +4 -0
  38. package/dist/components/switch/QSwitch.svelte +6 -0
  39. package/dist/components/table/QTable.svelte +23 -13
  40. package/dist/components/tabs/QTab.svelte +19 -22
  41. package/dist/components/tabs/QTabs.svelte +59 -32
  42. package/dist/components/tabs/QTabs.svelte.d.ts +15 -4
  43. package/dist/components/toolbar/QToolbar.svelte +2 -0
  44. package/dist/components/toolbar/QToolbarTitle.svelte +2 -0
  45. package/dist/components/tooltip/QTooltip.svelte +22 -8
  46. package/dist/components/tooltip/QTooltipBase.svelte +18 -8
  47. package/dist/composables/useRouterLink.d.ts +2 -1
  48. package/dist/css/index.css +1 -1
  49. package/dist/helpers/version.d.ts +1 -1
  50. package/dist/helpers/version.js +1 -1
  51. package/dist/utils/context.d.ts +49 -32
  52. package/dist/utils/context.js +82 -33
  53. package/package.json +28 -27
  54. package/dist/classes/QContext.svelte.d.ts +0 -42
  55. package/dist/classes/QContext.svelte.js +0 -63
@@ -5,6 +5,7 @@
5
5
  import { isActivationKey, type QEvent } from "../../utils";
6
6
  import type { QExpansionItemProps } from "./props";
7
7
 
8
+ // #region: --- Props
8
9
  let {
9
10
  value = $bindable(false),
10
11
  label,
@@ -29,7 +30,9 @@
29
30
  onExpandIconClick,
30
31
  ...props
31
32
  }: QExpansionItemProps = $props();
33
+ // #endregion: --- Props
32
34
 
35
+ // #region: --- Non-reactive variables
33
36
  const id = $props.id();
34
37
  const contentId = `q-expansion-item__content-${id}`;
35
38
  const summaryId = `q-expansion-item__summary-${id}`;
@@ -37,7 +40,13 @@
37
40
  const supportDetailsContent = CSS.supports(
38
41
  "selector(details::details-content)",
39
42
  );
43
+ // #endregion: --- Non-reactive variables
40
44
 
45
+ // #region: --- Reactive variables
46
+ let detailsEl = $state<HTMLDetailsElement>();
47
+ // #endregion: --- Reactive variables
48
+
49
+ // #region: --- Derived values
41
50
  const summaryAttributes = $derived(
42
51
  !supportDetailsContent
43
52
  ? {
@@ -58,15 +67,15 @@
58
67
  : {},
59
68
  );
60
69
 
61
- let detailsEl = $state<HTMLDetailsElement>();
62
-
63
70
  const iconAttributes = $derived({
64
71
  [expandIconToggle ? "icon" : "name"]:
65
72
  expandedIcon && value ? expandedIcon : expandIcon,
66
73
  flat: expandIconToggle || undefined,
67
74
  "aria-label": toggleAriaLabel,
68
75
  });
76
+ // #endregion: --- Derived values
69
77
 
78
+ // #region: --- Effects
70
79
  $effect.pre(() => {
71
80
  if (defaultOpened) {
72
81
  show();
@@ -93,7 +102,9 @@
93
102
  }
94
103
  });
95
104
  });
105
+ // #endregion: --- Effects
96
106
 
107
+ // #region: --- Methods
97
108
  export function toggle() {
98
109
  value = !value;
99
110
  }
@@ -105,7 +116,9 @@
105
116
  export function hide() {
106
117
  value = false;
107
118
  }
119
+ // #endregion: --- Methods
108
120
 
121
+ // #region: --- Functions
109
122
  function preventAndStop<T extends Event>(e: T) {
110
123
  e.preventDefault();
111
124
  e.stopPropagation();
@@ -186,6 +199,7 @@
186
199
  }) as QEvent<MouseEvent, HTMLElement>;
187
200
  onIconClick(clickEvent);
188
201
  }
202
+ // #endregion: --- Functions
189
203
  </script>
190
204
 
191
205
  {#snippet labelSnippet()}
@@ -1,14 +1,10 @@
1
1
  <script lang="ts">
2
- import { getContext, onMount, untrack } from "svelte";
2
+ import { onMount } from "svelte";
3
3
  import { QScrollObserver } from "../..";
4
- import { QContext } from "../../classes/QContext.svelte";
5
- import { QLayoutCtxName } from "../../utils";
6
- import type { QLayoutProps } from "../layout/props";
7
- import type { AppbarContext } from "../layout/QLayout.svelte";
4
+ import { footerCtx } from "../layout/QLayout.svelte";
8
5
  import type { QFooterProps } from "./props";
9
6
 
10
- let footerEl = $state<HTMLElement>();
11
-
7
+ // #region: --- Props
12
8
  let {
13
9
  value = $bindable(true),
14
10
  bordered = false,
@@ -18,44 +14,52 @@
18
14
  children,
19
15
  ...props
20
16
  }: QFooterProps = $props();
17
+ // #endregion: --- Props
21
18
 
19
+ // #region: --- Non-reactive variables
22
20
  const uid = $props.id();
21
+ // #endregion: --- Non-reactive variables
23
22
 
24
- const footerContext = QContext.get<AppbarContext>(QLayoutCtxName.footer);
25
- const layoutView = getContext<{ value: NonNullable<QLayoutProps["view"]> }>(
26
- QLayoutCtxName.view,
27
- );
23
+ // #region: --- Reactive variables
24
+ let footerEl = $state<HTMLElement>();
25
+ let contentScrollHeight = $state(0);
28
26
 
29
- if (!footerContext || !layoutView) {
30
- throw new Error("QFooter should be used inside QLayout");
31
- }
27
+ const footerContext = footerCtx.assertGet(
28
+ "QFooter should be used inside QLayout",
29
+ );
30
+ // #endregion: --- Reactive variables
32
31
 
32
+ // #region: --- Derived values
33
33
  const scroll = $derived(
34
34
  reveal
35
35
  ? new QScrollObserver(`.q-footer--${uid} ~ .q-layout__content`)
36
36
  : undefined,
37
37
  );
38
- let contentScrollHeight = $state(0);
39
38
 
40
39
  const offset = $derived(scroll ? scroll.position + height : undefined);
41
- // Collapse the footer `${reavealOffset}px` above the bottom of layout content when scrolling up
40
+
41
+ // Collapse the footer `${revealOffset}px` above the bottom of layout content when scrolling up
42
42
  const collapsed = $derived(
43
43
  reveal &&
44
44
  scroll?.direction === "up" &&
45
45
  offset! + revealOffset < contentScrollHeight,
46
46
  );
47
47
 
48
- const leftOffset = () => layoutView.value.charAt(8) === "l";
49
- const rightOffset = () => layoutView.value.charAt(10) === "r";
48
+ const leftOffset = $derived(footerContext.view.charAt(8) === "l");
49
+ const rightOffset = $derived(footerContext.view.charAt(10) === "r");
50
+ // #endregion: --- Derived values
50
51
 
52
+ // #region: --- Effects
51
53
  $effect.pre(() => {
52
- untrack(() => footerContext).updateEntries({
54
+ footerCtx.updateEntries({
53
55
  height,
54
56
  collapsed,
55
57
  ready: true,
56
58
  });
57
59
  });
60
+ // #endregion: --- Effects
58
61
 
62
+ // #region: --- Lifecycle
59
63
  onMount(() => {
60
64
  // Calculating the layout content's height
61
65
  const content = document.querySelector(
@@ -73,13 +77,14 @@
73
77
  }, 100);
74
78
 
75
79
  return () => {
76
- footerContext.updateEntries({
80
+ footerCtx.updateEntries({
77
81
  height: 0,
78
82
  collapsed: false,
79
83
  ready: false,
80
84
  });
81
85
  };
82
86
  });
87
+ // #endregion: --- Lifecycle
83
88
  </script>
84
89
 
85
90
  {#if value}
@@ -92,8 +97,8 @@
92
97
  `q-footer--${uid}`,
93
98
  collapsed && "q-footer--collapsed",
94
99
  bordered && "q-footer--bordered",
95
- leftOffset() && "q-footer--offset-left",
96
- rightOffset() && "q-footer--offset-right",
100
+ leftOffset && "q-footer--offset-left",
101
+ rightOffset && "q-footer--offset-right",
97
102
  ]}
98
103
  style:--footer-height="{height}px"
99
104
  data-quaff
@@ -1,12 +1,22 @@
1
1
  <script lang="ts">
2
- import { getContext, onMount, untrack } from "svelte";
2
+ import { onMount } from "svelte";
3
3
  import { QScrollObserver } from "../..";
4
- import { QContext } from "../../classes/QContext.svelte";
5
- import { QLayoutCtxName } from "../../utils";
6
- import type { AppbarContext } from "../layout/QLayout.svelte";
7
- import type { QLayoutProps } from "../layout/props";
4
+ import { headerCtx } from "../layout/QLayout.svelte";
8
5
  import type { QHeaderProps } from "./props";
9
6
 
7
+ // #region: --- Non-reactive variables
8
+ const uid = $props.id();
9
+ // #endregion: --- Non-reactive variables
10
+
11
+ // #region: --- Reactive variables
12
+ let headerEl = $state<HTMLElement>();
13
+
14
+ const headerContext = headerCtx.assertGet(
15
+ "QHeader should be used inside QLayout",
16
+ );
17
+ // #endregion: --- Reactive variables
18
+
19
+ // #region: --- Props
10
20
  let {
11
21
  elevated = false,
12
22
  inset = false,
@@ -17,41 +27,38 @@
17
27
  children,
18
28
  ...props
19
29
  }: QHeaderProps = $props();
30
+ // #endregion: --- Props
20
31
 
21
- const uid = $props.id();
22
-
23
- let headerEl = $state<HTMLElement>();
24
-
25
- const headerContext = QContext.get<AppbarContext>(QLayoutCtxName.header);
26
- const layoutView = getContext<{ value: NonNullable<QLayoutProps["view"]> }>(
27
- QLayoutCtxName.view,
28
- );
29
- if (!headerContext || !layoutView) {
30
- throw new Error("QHeader should be used inside QLayout");
31
- }
32
-
32
+ // #region: --- Derived values
33
33
  const scroll = $derived(
34
34
  reveal
35
35
  ? new QScrollObserver(`.q-header--${uid} ~ .q-layout__content`)
36
36
  : undefined,
37
37
  );
38
+
38
39
  const offset = $derived(scroll ? scroll.position - height : undefined);
40
+
39
41
  // Collapse the header `${reavealOffset}px` below the top of layout content when scrolling down
40
42
  const collapsed = $derived(
41
43
  reveal && scroll?.direction === "down" && offset! - revealOffset > 0,
42
44
  );
43
45
 
44
- const leftOffset = () => layoutView.value.charAt(0) === "l";
45
- const rightOffset = () => layoutView.value.charAt(2) === "r";
46
+ const leftOffset = $derived(headerContext.view.charAt(0) === "l");
46
47
 
48
+ const rightOffset = $derived(headerContext.view.charAt(2) === "r");
49
+ // #endregion: --- Derived values
50
+
51
+ // #region: --- Effects
47
52
  $effect.pre(() => {
48
- untrack(() => headerContext).updateEntries({
53
+ headerCtx.updateEntries({
49
54
  height,
50
55
  collapsed,
51
56
  ready: true,
52
57
  });
53
58
  });
59
+ // #endregion: --- Effects
54
60
 
61
+ // #region: --- Lifecycle
55
62
  onMount(() => {
56
63
  if (headerContext) {
57
64
  setTimeout(() => {
@@ -62,16 +69,18 @@
62
69
  }
63
70
 
64
71
  return () => {
65
- if (headerContext && headerEl) {
72
+ if (headerEl) {
66
73
  headerEl.style.transition = "none";
67
- headerContext.updateEntries({
68
- height: 0,
69
- collapsed: false,
70
- ready: false,
71
- });
72
74
  }
75
+
76
+ headerCtx.updateEntries({
77
+ height: 0,
78
+ collapsed: false,
79
+ ready: false,
80
+ });
73
81
  };
74
82
  });
83
+ // #endregion: --- Lifecycle
75
84
  </script>
76
85
 
77
86
  <header
@@ -84,8 +93,8 @@
84
93
  elevated && "q-header--elevated",
85
94
  bordered && "q-header--bordered",
86
95
  collapsed && "q-header--collapsed",
87
- leftOffset() && "q-header--offset-left",
88
- rightOffset() && "q-header--offset-right",
96
+ leftOffset && "q-header--offset-left",
97
+ rightOffset && "q-header--offset-right",
89
98
  inset && "q-header--inset",
90
99
  ]}
91
100
  style:--header-height="{height}px"
@@ -2,6 +2,7 @@
2
2
  import { useSize } from "../../composables";
3
3
  import type { QIconProps } from "./props";
4
4
 
5
+ // #region: --- Props
5
6
  let {
6
7
  size = "md",
7
8
  name,
@@ -14,7 +15,9 @@
14
15
  children,
15
16
  ...props
16
17
  }: QIconProps = $props();
18
+ // #endregion: --- Props
17
19
 
20
+ // #region: --- Derived values
18
21
  const qSize = $derived(useSize(size, "q-icon"));
19
22
 
20
23
  const parsedColor = $derived(
@@ -27,6 +30,7 @@
27
30
  });
28
31
 
29
32
  const typeClass = $derived(`q-icon--${type}`);
33
+ // #endregion: --- Derived values
30
34
  </script>
31
35
 
32
36
  <i
@@ -1,14 +1,16 @@
1
1
  <script lang="ts">
2
2
  import type { QEvent } from "../../utils";
3
+ import type { QInputProps } from "./props";
3
4
 
4
5
  type QInputFocusEvent = QEvent<FocusEvent, HTMLDivElement>;
5
6
 
7
+ // #region: --- Reactive variables
6
8
  let focus = $state(false);
7
9
 
8
10
  let snippetPrependWidth = $state(0);
11
+ // #endregion: --- Reactive variables
9
12
 
10
- import type { QInputProps } from "../input/props";
11
-
13
+ // #region: --- Props
12
14
  let {
13
15
  dense = false,
14
16
  disable = false,
@@ -26,9 +28,13 @@
26
28
  value = $bindable(),
27
29
  ...props
28
30
  }: QInputProps = $props();
31
+ // #endregion: --- Props
29
32
 
33
+ // #region: --- Derived values
30
34
  const active = $derived(value || focus);
35
+ // #endregion: --- Derived values
31
36
 
37
+ // #region: --- Functions
32
38
  function onFocus(e: QInputFocusEvent) {
33
39
  focus = true;
34
40
  props.onfocus?.(e);
@@ -38,6 +44,7 @@
38
44
  focus = false;
39
45
  props.onblur?.(e);
40
46
  }
47
+ // #endregion: --- Functions
41
48
 
42
49
  // q-field here, q-input in classes
43
50
  </script>