@quaffui/quaff 1.0.0-beta7 → 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.
- package/README.md +2 -0
- package/dist/classes/Quaff.svelte.d.ts +1 -1
- package/dist/components/avatar/QAvatar.svelte +4 -0
- package/dist/components/breadcrumbs/QBreadcrumbs.svelte +28 -5
- package/dist/components/breadcrumbs/QBreadcrumbs.svelte.d.ts +23 -0
- package/dist/components/breadcrumbs/QBreadcrumbsEl.svelte +17 -14
- package/dist/components/button/QBtn.svelte +21 -11
- package/dist/components/card/QCard.svelte +9 -5
- package/dist/components/card/QCardActions.svelte +4 -0
- package/dist/components/card/QCardSection.svelte +2 -0
- package/dist/components/checkbox/QCheckbox.svelte +2 -0
- package/dist/components/chip/QChip.svelte +24 -14
- package/dist/components/codeBlock/QCodeBlock.svelte +8 -0
- package/dist/components/dialog/QDialog.svelte +12 -0
- package/dist/components/drawer/QDrawer.svelte +50 -39
- package/dist/components/expansion-item/QExpansionItem.svelte +16 -2
- package/dist/components/footer/QFooter.svelte +27 -22
- package/dist/components/header/QHeader.svelte +37 -28
- package/dist/components/icon/QIcon.svelte +4 -0
- package/dist/components/input/QInput.svelte +9 -2
- package/dist/components/layout/QLayout.svelte +243 -90
- package/dist/components/layout/QLayout.svelte.d.ts +64 -2
- package/dist/components/list/QItem.svelte +43 -24
- package/dist/components/list/QItem.svelte.d.ts +14 -0
- package/dist/components/list/QItemSection.svelte +16 -12
- package/dist/components/list/QList.svelte +28 -6
- package/dist/components/list/QList.svelte.d.ts +15 -0
- package/dist/components/private/ContextReseter.svelte +2 -3
- package/dist/components/private/QApi.svelte +15 -7
- package/dist/components/private/QDocs.svelte +40 -20
- package/dist/components/private/QDocs.svelte.d.ts +30 -0
- package/dist/components/private/QDocsSection.svelte +11 -7
- package/dist/components/progress/QCircularProgress.svelte +14 -5
- package/dist/components/progress/QLinearProgress.svelte +12 -6
- package/dist/components/radio/QRadio.svelte +2 -0
- package/dist/components/railbar/QRailbar.svelte +36 -35
- package/dist/components/select/QSelect.svelte +32 -23
- package/dist/components/separator/QSeparator.svelte +4 -0
- package/dist/components/switch/QSwitch.svelte +6 -0
- package/dist/components/table/QTable.svelte +23 -13
- package/dist/components/tabs/QTab.svelte +19 -22
- package/dist/components/tabs/QTabs.svelte +59 -32
- package/dist/components/tabs/QTabs.svelte.d.ts +15 -4
- package/dist/components/toolbar/QToolbar.svelte +2 -0
- package/dist/components/toolbar/QToolbarTitle.svelte +2 -0
- package/dist/components/tooltip/QTooltip.svelte +22 -8
- package/dist/components/tooltip/QTooltipBase.svelte +18 -8
- package/dist/css/index.css +1 -1
- package/dist/helpers/version.d.ts +1 -1
- package/dist/helpers/version.js +1 -1
- package/dist/utils/context.d.ts +49 -32
- package/dist/utils/context.js +82 -33
- package/package.json +24 -23
- package/dist/classes/QContext.svelte.d.ts +0 -42
- 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 {
|
|
2
|
+
import { onMount } from "svelte";
|
|
3
3
|
import { QScrollObserver } from "../..";
|
|
4
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
);
|
|
23
|
+
// #region: --- Reactive variables
|
|
24
|
+
let footerEl = $state<HTMLElement>();
|
|
25
|
+
let contentScrollHeight = $state(0);
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
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 = (
|
|
49
|
-
const rightOffset = (
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
96
|
-
rightOffset
|
|
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 {
|
|
2
|
+
import { onMount } from "svelte";
|
|
3
3
|
import { QScrollObserver } from "../..";
|
|
4
|
-
import {
|
|
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
|
-
|
|
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 = (
|
|
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
|
-
|
|
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 (
|
|
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
|
|
88
|
-
rightOffset
|
|
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
|
-
|
|
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>
|