@noxlovette/material 0.1.24 → 0.1.25
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/dist/components/nav/appbar/AppBar.svelte +5 -0
- package/dist/components/nav/appbar/theme.d.ts +3 -0
- package/dist/components/nav/appbar/theme.js +2 -1
- package/dist/components/nav/appbar/types.d.ts +2 -0
- package/dist/components/nav/navbar/Navbar.svelte +7 -4
- package/dist/components/nav/navbar/Navbar.svelte.d.ts +2 -6
- package/dist/components/nav/navbar/theme.d.ts +6 -0
- package/dist/components/nav/navbar/theme.js +2 -1
- package/dist/components/nav/navbar/types.d.ts +2 -0
- package/dist/components/toolbar/Toolbar.svelte +19 -1
- package/dist/components/toolbar/Toolbar.svelte.d.ts +6 -0
- package/dist/components/toolbar/ToolbarButton.svelte +5 -1
- package/dist/components/toolbar/ToolbarButton.svelte.d.ts +4 -1
- package/dist/components/toolbar/ToolbarDivider.svelte +8 -2
- package/dist/components/toolbar/ToolbarGroupItem.svelte +5 -1
- package/dist/components/toolbar/ToolbarGroupItem.svelte.d.ts +1 -0
- package/dist/components/toolbar/theme.d.ts +103 -34
- package/dist/components/toolbar/theme.js +41 -9
- package/dist/components/toolbar/types.d.ts +5 -3
- package/package.json +1 -1
|
@@ -20,6 +20,7 @@ They’re used for branding, screen titles, navigation, and actions.
|
|
|
20
20
|
leading,
|
|
21
21
|
class: className,
|
|
22
22
|
showBack,
|
|
23
|
+
ghost = false,
|
|
23
24
|
...rest
|
|
24
25
|
}: AppBarProps = $props();
|
|
25
26
|
|
|
@@ -31,6 +32,7 @@ They’re used for branding, screen titles, navigation, and actions.
|
|
|
31
32
|
|
|
32
33
|
const {
|
|
33
34
|
base,
|
|
35
|
+
ghost: ghostCls,
|
|
34
36
|
title: titleCLs,
|
|
35
37
|
textContainer,
|
|
36
38
|
subtitle: subtitleCls,
|
|
@@ -58,3 +60,6 @@ They’re used for branding, screen titles, navigation, and actions.
|
|
|
58
60
|
{@render trailing?.()}
|
|
59
61
|
</div>
|
|
60
62
|
</nav>
|
|
63
|
+
{#if ghost}
|
|
64
|
+
<div class={ghostCls()} aria-hidden="true"></div>
|
|
65
|
+
{/if}
|
|
@@ -27,6 +27,7 @@ export declare const appbar: import("tailwind-variants").TVReturnType<{
|
|
|
27
27
|
};
|
|
28
28
|
}, {
|
|
29
29
|
base: string;
|
|
30
|
+
ghost: string;
|
|
30
31
|
textContainer: string;
|
|
31
32
|
title: string;
|
|
32
33
|
subtitle: string;
|
|
@@ -59,6 +60,7 @@ export declare const appbar: import("tailwind-variants").TVReturnType<{
|
|
|
59
60
|
};
|
|
60
61
|
}, {
|
|
61
62
|
base: string;
|
|
63
|
+
ghost: string;
|
|
62
64
|
textContainer: string;
|
|
63
65
|
title: string;
|
|
64
66
|
subtitle: string;
|
|
@@ -91,6 +93,7 @@ export declare const appbar: import("tailwind-variants").TVReturnType<{
|
|
|
91
93
|
};
|
|
92
94
|
}, {
|
|
93
95
|
base: string;
|
|
96
|
+
ghost: string;
|
|
94
97
|
textContainer: string;
|
|
95
98
|
title: string;
|
|
96
99
|
subtitle: string;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { tv } from 'tailwind-variants';
|
|
2
2
|
export const appbar = tv({
|
|
3
3
|
slots: {
|
|
4
|
-
base: 'py-1 fixed top-0 left-0 w-full md:hidden flex z-40 items-center justify-between',
|
|
4
|
+
base: 'h-16 py-1 fixed top-0 left-0 w-full md:hidden flex z-40 items-center justify-between',
|
|
5
|
+
ghost: 'h-16 w-full shrink-0 md:hidden pointer-events-none',
|
|
5
6
|
textContainer: 'flex flex-col items-start gap-0.5 grow',
|
|
6
7
|
title: 'text-md-sys-color-on-surface md-sys-typescale-title-large line-clamp-1 capitalize ',
|
|
7
8
|
subtitle: 'text-md-sys-color-on-surface-variant md-sys-typescale-label-medium',
|
|
@@ -17,4 +17,6 @@ export type AppBarProps = AppbarVariants & HTMLAttributes<HTMLElementTagNameMap[
|
|
|
17
17
|
trailing?: Snippet;
|
|
18
18
|
/** Whether to show a back button in the leading section. */
|
|
19
19
|
showBack?: boolean;
|
|
20
|
+
/** Renders an invisible same-height spacer after the fixed bar so page content isn't obscured. */
|
|
21
|
+
ghost?: boolean;
|
|
20
22
|
};
|
|
@@ -10,13 +10,13 @@ This component takes NavbarItems as its children
|
|
|
10
10
|
@see https://m3.material.io/components/navigation-bar/overview
|
|
11
11
|
-->
|
|
12
12
|
<script lang="ts">
|
|
13
|
-
import type { Snippet } from 'svelte';
|
|
14
|
-
import { navbar } from './theme.js';
|
|
15
13
|
import { NavigationMenu } from 'bits-ui';
|
|
14
|
+
import { navbar } from './theme.js';
|
|
15
|
+
import type { NavBarProps } from './types.js';
|
|
16
16
|
|
|
17
|
-
const { children, fab
|
|
17
|
+
const { children, fab, ghost = false }: NavBarProps = $props();
|
|
18
18
|
|
|
19
|
-
const { base, items, fab: fabCls } = $derived(navbar());
|
|
19
|
+
const { base, items, fab: fabCls, ghost: ghostCls } = $derived(navbar());
|
|
20
20
|
</script>
|
|
21
21
|
|
|
22
22
|
<div class={base()}>
|
|
@@ -31,3 +31,6 @@ This component takes NavbarItems as its children
|
|
|
31
31
|
</NavigationMenu.List>
|
|
32
32
|
</NavigationMenu.Root>
|
|
33
33
|
</div>
|
|
34
|
+
{#if ghost}
|
|
35
|
+
<div class={ghostCls()} aria-hidden="true"></div>
|
|
36
|
+
{/if}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
type $$ComponentProps = {
|
|
3
|
-
children: Snippet;
|
|
4
|
-
fab?: Snippet;
|
|
5
|
-
};
|
|
1
|
+
import type { NavBarProps } from './types.js';
|
|
6
2
|
/**
|
|
7
3
|
* Material 3 Navigation Bar.
|
|
8
4
|
*
|
|
@@ -13,6 +9,6 @@ type $$ComponentProps = {
|
|
|
13
9
|
*
|
|
14
10
|
* @see https://m3.material.io/components/navigation-bar/overview
|
|
15
11
|
*/
|
|
16
|
-
declare const Navbar: import("svelte").Component
|
|
12
|
+
declare const Navbar: import("svelte").Component<NavBarProps, {}, "">;
|
|
17
13
|
type Navbar = ReturnType<typeof Navbar>;
|
|
18
14
|
export default Navbar;
|
|
@@ -3,6 +3,7 @@ export declare const navbar: import("tailwind-variants").TVReturnType<{
|
|
|
3
3
|
[key: string]: import("tailwind-merge").ClassNameValue | {
|
|
4
4
|
base?: import("tailwind-merge").ClassNameValue;
|
|
5
5
|
items?: import("tailwind-merge").ClassNameValue;
|
|
6
|
+
ghost?: import("tailwind-merge").ClassNameValue;
|
|
6
7
|
fab?: import("tailwind-merge").ClassNameValue;
|
|
7
8
|
};
|
|
8
9
|
};
|
|
@@ -11,6 +12,7 @@ export declare const navbar: import("tailwind-variants").TVReturnType<{
|
|
|
11
12
|
[x: string]: import("tailwind-merge").ClassNameValue | {
|
|
12
13
|
base?: import("tailwind-merge").ClassNameValue;
|
|
13
14
|
items?: import("tailwind-merge").ClassNameValue;
|
|
15
|
+
ghost?: import("tailwind-merge").ClassNameValue;
|
|
14
16
|
fab?: import("tailwind-merge").ClassNameValue;
|
|
15
17
|
};
|
|
16
18
|
};
|
|
@@ -18,11 +20,13 @@ export declare const navbar: import("tailwind-variants").TVReturnType<{
|
|
|
18
20
|
base: string;
|
|
19
21
|
items: string;
|
|
20
22
|
fab: string;
|
|
23
|
+
ghost: string;
|
|
21
24
|
}, undefined, {
|
|
22
25
|
[key: string]: {
|
|
23
26
|
[key: string]: import("tailwind-merge").ClassNameValue | {
|
|
24
27
|
base?: import("tailwind-merge").ClassNameValue;
|
|
25
28
|
items?: import("tailwind-merge").ClassNameValue;
|
|
29
|
+
ghost?: import("tailwind-merge").ClassNameValue;
|
|
26
30
|
fab?: import("tailwind-merge").ClassNameValue;
|
|
27
31
|
};
|
|
28
32
|
};
|
|
@@ -30,10 +34,12 @@ export declare const navbar: import("tailwind-variants").TVReturnType<{
|
|
|
30
34
|
base: string;
|
|
31
35
|
items: string;
|
|
32
36
|
fab: string;
|
|
37
|
+
ghost: string;
|
|
33
38
|
}, import("tailwind-variants").TVReturnType<unknown, {
|
|
34
39
|
base: string;
|
|
35
40
|
items: string;
|
|
36
41
|
fab: string;
|
|
42
|
+
ghost: string;
|
|
37
43
|
}, undefined, unknown, unknown, undefined>>;
|
|
38
44
|
export declare const navitem: import("tailwind-variants").TVReturnType<{
|
|
39
45
|
active: {
|
|
@@ -3,7 +3,8 @@ export const navbar = tv({
|
|
|
3
3
|
slots: {
|
|
4
4
|
base: 'shadow-elevation-2 bg-md-sys-color-surface-container relative z-20 flex h-20 fixed bottom-0 w-full left-0 justify-around py-3 md:hidden',
|
|
5
5
|
items: 'flex justify-around w-full',
|
|
6
|
-
fab: 'bottom-24 right-4 absolute'
|
|
6
|
+
fab: 'bottom-24 right-4 absolute',
|
|
7
|
+
ghost: 'h-20 w-full shrink-0 md:hidden pointer-events-none'
|
|
7
8
|
}
|
|
8
9
|
});
|
|
9
10
|
export const navitem = tv({
|
|
@@ -26,4 +26,6 @@ export type NavBarProps = NavBarVariants & HTMLAttributes<HTMLDivElement> & {
|
|
|
26
26
|
children: Snippet;
|
|
27
27
|
/** An optional Floating Action Button snippet. */
|
|
28
28
|
fab?: Snippet;
|
|
29
|
+
/** Renders an invisible same-height spacer after the fixed bar so page content isn't obscured. */
|
|
30
|
+
ghost?: boolean;
|
|
29
31
|
};
|
|
@@ -2,25 +2,43 @@
|
|
|
2
2
|
@component
|
|
3
3
|
Toolbar provides a horizontal (or vertical) container for grouped actions.
|
|
4
4
|
|
|
5
|
+
- variant="floating" — elevated, rounded, inline (default)
|
|
6
|
+
- variant="docked" — full-width, flat, anchored to top/bottom
|
|
7
|
+
- color="standard" — surface-container background
|
|
8
|
+
- color="vibrant" — secondary-container background with inverted toggle selection
|
|
9
|
+
- fab snippet — renders a FAB at the trailing edge (canonical for docked bottom bars)
|
|
10
|
+
|
|
5
11
|
@see https://m3.material.io/components/toolbars
|
|
6
12
|
-->
|
|
7
13
|
<script lang="ts">
|
|
8
14
|
import { Toolbar } from 'bits-ui';
|
|
9
15
|
import clsx from 'clsx';
|
|
16
|
+
import { setContext } from 'svelte';
|
|
10
17
|
import { toolbar } from './theme.js';
|
|
11
18
|
import type { ToolbarProps } from './types.js';
|
|
12
19
|
|
|
13
20
|
let {
|
|
14
21
|
children,
|
|
22
|
+
fab,
|
|
15
23
|
orientation = 'horizontal',
|
|
16
24
|
loop = true,
|
|
25
|
+
variant = 'floating',
|
|
26
|
+
color = 'standard',
|
|
17
27
|
class: className,
|
|
18
28
|
...restProps
|
|
19
29
|
}: ToolbarProps = $props();
|
|
20
30
|
|
|
21
|
-
|
|
31
|
+
setContext('toolbar-color', color);
|
|
32
|
+
setContext('toolbar-orientation', orientation);
|
|
33
|
+
|
|
34
|
+
const cls = $derived(toolbar({ orientation, variant, color }));
|
|
22
35
|
</script>
|
|
23
36
|
|
|
24
37
|
<Toolbar.Root {orientation} {loop} class={cls.root({ class: clsx(className) })} {...restProps}>
|
|
25
38
|
{@render children?.()}
|
|
39
|
+
{#if fab}
|
|
40
|
+
<div class={cls.fabSlot()}>
|
|
41
|
+
{@render fab()}
|
|
42
|
+
</div>
|
|
43
|
+
{/if}
|
|
26
44
|
</Toolbar.Root>
|
|
@@ -3,6 +3,12 @@ import type { ToolbarProps } from './types.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Toolbar provides a horizontal (or vertical) container for grouped actions.
|
|
5
5
|
*
|
|
6
|
+
* - variant="floating" — elevated, rounded, inline (default)
|
|
7
|
+
* - variant="docked" — full-width, flat, anchored to top/bottom
|
|
8
|
+
* - color="standard" — surface-container background
|
|
9
|
+
* - color="vibrant" — secondary-container background with inverted toggle selection
|
|
10
|
+
* - fab snippet — renders a FAB at the trailing edge (canonical for docked bottom bars)
|
|
11
|
+
*
|
|
6
12
|
* @see https://m3.material.io/components/toolbars
|
|
7
13
|
*/
|
|
8
14
|
declare const Toolbar: import("svelte").Component<ToolbarProps, {}, "">;
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component
|
|
3
3
|
An action button within a Toolbar. Non-toggleable.
|
|
4
|
+
Color is inherited from the parent Toolbar via context.
|
|
4
5
|
-->
|
|
5
6
|
<script lang="ts">
|
|
6
7
|
import { Toolbar } from 'bits-ui';
|
|
7
8
|
import clsx from 'clsx';
|
|
9
|
+
import { getContext } from 'svelte';
|
|
8
10
|
import { Icon, Layer } from '../../utils/index.js';
|
|
9
11
|
import { toolbarButton } from './theme.js';
|
|
10
12
|
import type { ToolbarButtonProps } from './types.js';
|
|
13
|
+
import type { ToolbarColor } from './types.js';
|
|
11
14
|
|
|
12
15
|
let {
|
|
13
16
|
iconProps,
|
|
@@ -16,7 +19,8 @@ An action button within a Toolbar. Non-toggleable.
|
|
|
16
19
|
...restProps
|
|
17
20
|
}: ToolbarButtonProps = $props();
|
|
18
21
|
|
|
19
|
-
const
|
|
22
|
+
const color = getContext<ToolbarColor>('toolbar-color') ?? 'standard';
|
|
23
|
+
const { base, icon } = toolbarButton({ color });
|
|
20
24
|
</script>
|
|
21
25
|
|
|
22
26
|
<Toolbar.Button {disabled} class={base({ class: clsx(className) })} {...restProps}>
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { ToolbarButtonProps } from './types.js';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* An action button within a Toolbar. Non-toggleable.
|
|
4
|
+
* Color is inherited from the parent Toolbar via context.
|
|
5
|
+
*/
|
|
3
6
|
declare const ToolbarButton: import("svelte").Component<ToolbarButtonProps, {}, "">;
|
|
4
7
|
type ToolbarButton = ReturnType<typeof ToolbarButton>;
|
|
5
8
|
export default ToolbarButton;
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import { getContext } from 'svelte';
|
|
2
3
|
import { toolbar } from './theme.js';
|
|
3
|
-
|
|
4
|
+
|
|
5
|
+
const orientation = getContext<'horizontal' | 'vertical'>('toolbar-orientation') ?? 'horizontal';
|
|
6
|
+
const cls = toolbar({ orientation });
|
|
7
|
+
|
|
8
|
+
// separator runs perpendicular to the toolbar flow
|
|
9
|
+
const ariaOrientation = orientation === 'horizontal' ? 'vertical' : 'horizontal';
|
|
4
10
|
</script>
|
|
5
11
|
|
|
6
|
-
<div class={cls.divider()} role="separator" aria-orientation=
|
|
12
|
+
<div class={cls.divider()} role="separator" aria-orientation={ariaOrientation}></div>
|
|
@@ -2,13 +2,16 @@
|
|
|
2
2
|
@component
|
|
3
3
|
A toggleable icon button within a ToolbarGroup.
|
|
4
4
|
Selected state is driven by data-[state=on] from Bits UI.
|
|
5
|
+
Color is inherited from the parent Toolbar via context.
|
|
5
6
|
-->
|
|
6
7
|
<script lang="ts">
|
|
7
8
|
import { Toolbar } from 'bits-ui';
|
|
8
9
|
import clsx from 'clsx';
|
|
10
|
+
import { getContext } from 'svelte';
|
|
9
11
|
import { Icon, Layer } from '../../utils/index.js';
|
|
10
12
|
import { toolbarGroupItem } from './theme.js';
|
|
11
13
|
import type { ToolbarGroupItemProps } from './types.js';
|
|
14
|
+
import type { ToolbarColor } from './types.js';
|
|
12
15
|
|
|
13
16
|
let {
|
|
14
17
|
iconProps,
|
|
@@ -18,7 +21,8 @@ Selected state is driven by data-[state=on] from Bits UI.
|
|
|
18
21
|
...restProps
|
|
19
22
|
}: ToolbarGroupItemProps = $props();
|
|
20
23
|
|
|
21
|
-
const
|
|
24
|
+
const color = getContext<ToolbarColor>('toolbar-color') ?? 'standard';
|
|
25
|
+
const { base, icon } = toolbarGroupItem({ color });
|
|
22
26
|
</script>
|
|
23
27
|
|
|
24
28
|
<Toolbar.GroupItem {value} {disabled} class={base({ class: clsx(className) })} {...restProps}>
|
|
@@ -2,6 +2,7 @@ import type { ToolbarGroupItemProps } from './types.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* A toggleable icon button within a ToolbarGroup.
|
|
4
4
|
* Selected state is driven by data-[state=on] from Bits UI.
|
|
5
|
+
* Color is inherited from the parent Toolbar via context.
|
|
5
6
|
*/
|
|
6
7
|
declare const ToolbarGroupItem: import("svelte").Component<ToolbarGroupItemProps, {}, "">;
|
|
7
8
|
type ToolbarGroupItem = ReturnType<typeof ToolbarGroupItem>;
|
|
@@ -6,101 +6,170 @@ export declare const toolbar: import("tailwind-variants").TVReturnType<{
|
|
|
6
6
|
orientation: {
|
|
7
7
|
horizontal: {
|
|
8
8
|
root: string;
|
|
9
|
+
divider: string;
|
|
9
10
|
};
|
|
10
11
|
vertical: {
|
|
11
12
|
root: string;
|
|
13
|
+
divider: string;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
variant: {
|
|
17
|
+
floating: {
|
|
18
|
+
root: string;
|
|
19
|
+
};
|
|
20
|
+
docked: {
|
|
21
|
+
root: string;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
color: {
|
|
25
|
+
standard: {
|
|
26
|
+
root: string;
|
|
27
|
+
};
|
|
28
|
+
vibrant: {
|
|
29
|
+
root: string;
|
|
12
30
|
};
|
|
13
31
|
};
|
|
14
32
|
}, {
|
|
15
33
|
root: string;
|
|
16
34
|
group: string;
|
|
17
35
|
divider: string;
|
|
36
|
+
fabSlot: string;
|
|
18
37
|
}, undefined, {
|
|
19
38
|
orientation: {
|
|
20
39
|
horizontal: {
|
|
21
40
|
root: string;
|
|
41
|
+
divider: string;
|
|
22
42
|
};
|
|
23
43
|
vertical: {
|
|
24
44
|
root: string;
|
|
45
|
+
divider: string;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
variant: {
|
|
49
|
+
floating: {
|
|
50
|
+
root: string;
|
|
51
|
+
};
|
|
52
|
+
docked: {
|
|
53
|
+
root: string;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
color: {
|
|
57
|
+
standard: {
|
|
58
|
+
root: string;
|
|
59
|
+
};
|
|
60
|
+
vibrant: {
|
|
61
|
+
root: string;
|
|
25
62
|
};
|
|
26
63
|
};
|
|
27
64
|
}, {
|
|
28
65
|
root: string;
|
|
29
66
|
group: string;
|
|
30
67
|
divider: string;
|
|
68
|
+
fabSlot: string;
|
|
31
69
|
}, import("tailwind-variants").TVReturnType<{
|
|
32
70
|
orientation: {
|
|
33
71
|
horizontal: {
|
|
34
72
|
root: string;
|
|
73
|
+
divider: string;
|
|
35
74
|
};
|
|
36
75
|
vertical: {
|
|
37
76
|
root: string;
|
|
77
|
+
divider: string;
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
variant: {
|
|
81
|
+
floating: {
|
|
82
|
+
root: string;
|
|
83
|
+
};
|
|
84
|
+
docked: {
|
|
85
|
+
root: string;
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
color: {
|
|
89
|
+
standard: {
|
|
90
|
+
root: string;
|
|
91
|
+
};
|
|
92
|
+
vibrant: {
|
|
93
|
+
root: string;
|
|
38
94
|
};
|
|
39
95
|
};
|
|
40
96
|
}, {
|
|
41
97
|
root: string;
|
|
42
98
|
group: string;
|
|
43
99
|
divider: string;
|
|
100
|
+
fabSlot: string;
|
|
44
101
|
}, undefined, unknown, unknown, undefined>>;
|
|
45
102
|
export declare const toolbarButton: import("tailwind-variants").TVReturnType<{
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
base
|
|
49
|
-
icon?: import("tailwind-merge").ClassNameValue;
|
|
103
|
+
color: {
|
|
104
|
+
standard: {
|
|
105
|
+
base: string;
|
|
50
106
|
};
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
[x: string]: {
|
|
54
|
-
[x: string]: import("tailwind-merge").ClassNameValue | {
|
|
55
|
-
base?: import("tailwind-merge").ClassNameValue;
|
|
56
|
-
icon?: import("tailwind-merge").ClassNameValue;
|
|
107
|
+
vibrant: {
|
|
108
|
+
base: string;
|
|
57
109
|
};
|
|
58
110
|
};
|
|
59
|
-
}
|
|
111
|
+
}, {
|
|
60
112
|
base: string;
|
|
61
113
|
icon: string;
|
|
62
114
|
}, undefined, {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
base
|
|
66
|
-
|
|
115
|
+
color: {
|
|
116
|
+
standard: {
|
|
117
|
+
base: string;
|
|
118
|
+
};
|
|
119
|
+
vibrant: {
|
|
120
|
+
base: string;
|
|
67
121
|
};
|
|
68
122
|
};
|
|
69
|
-
}
|
|
123
|
+
}, {
|
|
70
124
|
base: string;
|
|
71
125
|
icon: string;
|
|
72
|
-
}, import("tailwind-variants").TVReturnType<
|
|
126
|
+
}, import("tailwind-variants").TVReturnType<{
|
|
127
|
+
color: {
|
|
128
|
+
standard: {
|
|
129
|
+
base: string;
|
|
130
|
+
};
|
|
131
|
+
vibrant: {
|
|
132
|
+
base: string;
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
}, {
|
|
73
136
|
base: string;
|
|
74
137
|
icon: string;
|
|
75
138
|
}, undefined, unknown, unknown, undefined>>;
|
|
76
139
|
export declare const toolbarGroupItem: import("tailwind-variants").TVReturnType<{
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
base
|
|
80
|
-
icon?: import("tailwind-merge").ClassNameValue;
|
|
140
|
+
color: {
|
|
141
|
+
standard: {
|
|
142
|
+
base: string;
|
|
81
143
|
};
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
[x: string]: {
|
|
85
|
-
[x: string]: import("tailwind-merge").ClassNameValue | {
|
|
86
|
-
base?: import("tailwind-merge").ClassNameValue;
|
|
87
|
-
icon?: import("tailwind-merge").ClassNameValue;
|
|
144
|
+
vibrant: {
|
|
145
|
+
base: string;
|
|
88
146
|
};
|
|
89
147
|
};
|
|
90
|
-
}
|
|
148
|
+
}, {
|
|
91
149
|
base: string;
|
|
92
150
|
icon: string;
|
|
93
151
|
}, undefined, {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
base
|
|
97
|
-
|
|
152
|
+
color: {
|
|
153
|
+
standard: {
|
|
154
|
+
base: string;
|
|
155
|
+
};
|
|
156
|
+
vibrant: {
|
|
157
|
+
base: string;
|
|
98
158
|
};
|
|
99
159
|
};
|
|
100
|
-
}
|
|
160
|
+
}, {
|
|
101
161
|
base: string;
|
|
102
162
|
icon: string;
|
|
103
|
-
}, import("tailwind-variants").TVReturnType<
|
|
163
|
+
}, import("tailwind-variants").TVReturnType<{
|
|
164
|
+
color: {
|
|
165
|
+
standard: {
|
|
166
|
+
base: string;
|
|
167
|
+
};
|
|
168
|
+
vibrant: {
|
|
169
|
+
base: string;
|
|
170
|
+
};
|
|
171
|
+
};
|
|
172
|
+
}, {
|
|
104
173
|
base: string;
|
|
105
174
|
icon: string;
|
|
106
175
|
}, undefined, unknown, unknown, undefined>>;
|
|
@@ -1,27 +1,59 @@
|
|
|
1
1
|
import { tv } from 'tailwind-variants';
|
|
2
2
|
export const toolbar = tv({
|
|
3
3
|
slots: {
|
|
4
|
-
root: '
|
|
4
|
+
root: 'items-center gap-0.5 px-2',
|
|
5
5
|
group: 'inline-flex items-center gap-0.5',
|
|
6
|
-
divider: '
|
|
6
|
+
divider: 'shrink-0 bg-md-sys-color-outline-variant',
|
|
7
|
+
fabSlot: 'ml-auto flex items-center ps-2'
|
|
7
8
|
},
|
|
8
9
|
variants: {
|
|
9
10
|
orientation: {
|
|
10
|
-
horizontal: { root: 'flex-row' },
|
|
11
|
-
vertical: { root: 'flex-col h-auto w-14' }
|
|
11
|
+
horizontal: { root: 'flex-row', divider: 'mx-1 h-6 w-px' },
|
|
12
|
+
vertical: { root: 'flex-col h-auto w-14 py-2 px-1', divider: 'my-1 h-px w-6' }
|
|
13
|
+
},
|
|
14
|
+
variant: {
|
|
15
|
+
floating: { root: 'inline-flex rounded-2xl shadow-elevation-1 py-1' },
|
|
16
|
+
docked: { root: 'flex w-full rounded-none py-3' }
|
|
17
|
+
},
|
|
18
|
+
color: {
|
|
19
|
+
standard: { root: 'bg-md-sys-color-surface-container' },
|
|
20
|
+
vibrant: { root: 'bg-md-sys-color-secondary-container' }
|
|
12
21
|
}
|
|
13
22
|
},
|
|
14
|
-
defaultVariants: {
|
|
23
|
+
defaultVariants: {
|
|
24
|
+
orientation: 'horizontal',
|
|
25
|
+
variant: 'floating',
|
|
26
|
+
color: 'standard'
|
|
27
|
+
}
|
|
15
28
|
});
|
|
16
29
|
export const toolbarButton = tv({
|
|
17
30
|
slots: {
|
|
18
|
-
base: 'layer-container state-layer before:rounded-full relative inline-flex size-10 items-center justify-center rounded-full
|
|
31
|
+
base: 'layer-container state-layer before:rounded-full relative inline-flex size-10 items-center justify-center rounded-full outline-none transition-colors disabled:cursor-not-allowed disabled:opacity-38',
|
|
19
32
|
icon: 'size-5 text-[20px]'
|
|
20
|
-
}
|
|
33
|
+
},
|
|
34
|
+
variants: {
|
|
35
|
+
color: {
|
|
36
|
+
standard: { base: 'text-md-sys-color-on-surface-variant' },
|
|
37
|
+
vibrant: { base: 'text-md-sys-color-on-secondary-container' }
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
defaultVariants: { color: 'standard' }
|
|
21
41
|
});
|
|
22
42
|
export const toolbarGroupItem = tv({
|
|
23
43
|
slots: {
|
|
24
|
-
base: 'layer-container state-layer before:rounded-full relative inline-flex size-10 items-center justify-center rounded-full
|
|
44
|
+
base: 'layer-container state-layer before:rounded-full relative inline-flex size-10 items-center justify-center rounded-full outline-none transition-colors disabled:cursor-not-allowed disabled:opacity-38',
|
|
25
45
|
icon: 'size-5 text-[20px]'
|
|
26
|
-
}
|
|
46
|
+
},
|
|
47
|
+
variants: {
|
|
48
|
+
color: {
|
|
49
|
+
standard: {
|
|
50
|
+
base: 'text-md-sys-color-on-surface-variant data-[state=on]:bg-md-sys-color-secondary-container data-[state=on]:text-md-sys-color-on-secondary-container'
|
|
51
|
+
},
|
|
52
|
+
vibrant: {
|
|
53
|
+
// inverted: selected uses on-secondary-container as bg so it pops against the secondary-container toolbar
|
|
54
|
+
base: 'text-md-sys-color-on-secondary-container data-[state=on]:bg-md-sys-color-on-secondary-container data-[state=on]:text-md-sys-color-secondary-container'
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
defaultVariants: { color: 'standard' }
|
|
27
59
|
});
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type { IconProps } from '../../utils/index.js';
|
|
2
2
|
import type { ToolbarButtonProps as BitsToolbarButtonProps, ToolbarGroupItemProps as BitsToolbarGroupItemProps, ToolbarGroupProps as BitsToolbarGroupProps, ToolbarRootProps } from 'bits-ui';
|
|
3
3
|
import type { Snippet } from 'svelte';
|
|
4
|
-
import type {
|
|
4
|
+
import type { ToolbarVariants } from './theme.js';
|
|
5
|
+
export type ToolbarColor = 'standard' | 'vibrant';
|
|
5
6
|
export type ToolbarProps = ToolbarVariants & Omit<ToolbarRootProps, 'children' | 'child'> & {
|
|
6
7
|
children?: Snippet;
|
|
8
|
+
fab?: Snippet;
|
|
7
9
|
class?: string;
|
|
8
10
|
};
|
|
9
|
-
export type ToolbarButtonProps =
|
|
11
|
+
export type ToolbarButtonProps = Omit<BitsToolbarButtonProps, 'children' | 'child'> & {
|
|
10
12
|
iconProps: IconProps;
|
|
11
13
|
class?: string;
|
|
12
14
|
};
|
|
@@ -14,7 +16,7 @@ export type ToolbarGroupProps = Omit<BitsToolbarGroupProps, 'children' | 'child'
|
|
|
14
16
|
children?: Snippet;
|
|
15
17
|
class?: string;
|
|
16
18
|
};
|
|
17
|
-
export type ToolbarGroupItemProps =
|
|
19
|
+
export type ToolbarGroupItemProps = Omit<BitsToolbarGroupItemProps, 'children' | 'child'> & {
|
|
18
20
|
iconProps: IconProps;
|
|
19
21
|
class?: string;
|
|
20
22
|
};
|