noph-ui 0.44.0 → 0.45.1
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 +10 -1
- package/dist/animation.d.ts +2 -0
- package/dist/animation.js +33 -0
- package/dist/app-bar/AppBar.svelte +230 -0
- package/dist/app-bar/AppBar.svelte.d.ts +4 -0
- package/dist/app-bar/index.d.ts +1 -0
- package/dist/app-bar/index.js +1 -0
- package/dist/app-bar/types.d.ts +13 -0
- package/dist/app-bar/types.js +1 -0
- package/dist/autocomplete/AutoComplete.svelte +10 -11
- package/dist/autocomplete/AutoComplete.svelte.d.ts +1 -1
- package/dist/autocomplete/types.d.ts +1 -1
- package/dist/badge/Badge.svelte +6 -1
- package/dist/badge/types.d.ts +0 -1
- package/dist/button/Button.svelte +5 -15
- package/dist/button/IconButton.svelte +5 -15
- package/dist/button/SegmentedButton.svelte +15 -1
- package/dist/button/SplitButton.svelte +75 -0
- package/dist/button/SplitButton.svelte.d.ts +4 -0
- package/dist/button/index.d.ts +1 -0
- package/dist/button/index.js +1 -0
- package/dist/button/types.d.ts +17 -4
- package/dist/card/types.d.ts +1 -1
- package/dist/checkbox/Checkbox.svelte +47 -58
- package/dist/chip/AssistChip.svelte +5 -5
- package/dist/chip/ChipSet.svelte +3 -11
- package/dist/chip/FilterChip.svelte +33 -27
- package/dist/chip/InputChip.svelte +13 -2
- package/dist/chip/SuggestionChip.svelte +29 -0
- package/dist/chip/SuggestionChip.svelte.d.ts +4 -0
- package/dist/chip/index.d.ts +1 -0
- package/dist/chip/index.js +1 -0
- package/dist/chip/types.d.ts +16 -9
- package/dist/date-picker/Calendar.svelte +1 -1
- package/dist/date-picker/DatePickerDialog.svelte +23 -11
- package/dist/date-picker/DatePickerDialog.svelte.d.ts +4 -1
- package/dist/date-picker/DateRangePicker.svelte +40 -10
- package/dist/date-picker/DateRangePicker.svelte.d.ts +4 -1
- package/dist/date-picker/DockedDatePicker.svelte +13 -10
- package/dist/date-picker/DockedDatePicker.svelte.d.ts +4 -1
- package/dist/date-picker/DockedDateTimePicker.svelte +13 -7
- package/dist/date-picker/DockedDateTimePicker.svelte.d.ts +4 -1
- package/dist/date-picker/SelectionList.svelte +6 -32
- package/dist/date-picker/SelectionList.svelte.d.ts +2 -12
- package/dist/date-picker/TimeColumn.svelte +4 -29
- package/dist/date-picker/exitVisibility.svelte.d.ts +5 -0
- package/dist/date-picker/exitVisibility.svelte.js +23 -0
- package/dist/date-picker/optionList.d.ts +4 -0
- package/dist/date-picker/optionList.js +31 -0
- package/dist/date-picker/types.d.ts +11 -4
- package/dist/dialog/Dialog.svelte +55 -68
- package/dist/dialog/Dialog.svelte.d.ts +3 -3
- package/dist/dialog/types.d.ts +4 -3
- package/dist/fab/ExtendedFab.svelte +255 -0
- package/dist/fab/ExtendedFab.svelte.d.ts +5 -0
- package/dist/fab/Fab.svelte +211 -0
- package/dist/fab/Fab.svelte.d.ts +5 -0
- package/dist/fab/FabMenu.svelte +207 -0
- package/dist/fab/FabMenu.svelte.d.ts +7 -0
- package/dist/fab/index.d.ts +3 -0
- package/dist/fab/index.js +3 -0
- package/dist/fab/types.d.ts +34 -0
- package/dist/fab/types.js +1 -0
- package/dist/icons/ArrowBackIcon.svelte +13 -0
- package/dist/icons/ArrowBackIcon.svelte.d.ts +7 -0
- package/dist/icons/ChevronDownIcon.svelte +3 -0
- package/dist/icons/ChevronDownIcon.svelte.d.ts +26 -0
- package/dist/icons/SearchIcon.svelte +15 -0
- package/dist/icons/SearchIcon.svelte.d.ts +7 -0
- package/dist/icons/index.d.ts +3 -0
- package/dist/icons/index.js +3 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +6 -0
- package/dist/internal/focus-ring.css +12 -0
- package/dist/loading-indicator/shapes.js +0 -7
- package/dist/menu/Menu.svelte +12 -7
- package/dist/menu/Menu.svelte.d.ts +2 -2
- package/dist/menu/types.d.ts +0 -2
- package/dist/navigation-bar/NavigationBar.svelte +59 -0
- package/dist/navigation-bar/NavigationBar.svelte.d.ts +4 -0
- package/dist/navigation-bar/NavigationBarItem.svelte +239 -0
- package/dist/navigation-bar/NavigationBarItem.svelte.d.ts +5 -0
- package/dist/navigation-bar/index.d.ts +2 -0
- package/dist/navigation-bar/index.js +2 -0
- package/dist/navigation-bar/types.d.ts +19 -0
- package/dist/navigation-bar/types.js +1 -0
- package/dist/navigation-drawer/NavigationDrawer.svelte +107 -76
- package/dist/navigation-drawer/NavigationDrawer.svelte.d.ts +4 -1
- package/dist/navigation-drawer/NavigationDrawerItem.svelte +10 -3
- package/dist/navigation-drawer/types.d.ts +3 -1
- package/dist/navigation-rail/NavigationRailItem.svelte +16 -0
- package/dist/navigation-rail/types.d.ts +3 -0
- package/dist/popover.svelte.d.ts +5 -0
- package/dist/popover.svelte.js +22 -0
- package/dist/press.svelte.d.ts +6 -0
- package/dist/press.svelte.js +32 -0
- package/dist/radio/Radio.svelte +26 -7
- package/dist/radio/types.d.ts +3 -0
- package/dist/search/Search.svelte +391 -0
- package/dist/search/Search.svelte.d.ts +5 -0
- package/dist/search/index.d.ts +1 -0
- package/dist/search/index.js +1 -0
- package/dist/search/types.d.ts +19 -0
- package/dist/search/types.js +1 -0
- package/dist/select/Select.svelte +48 -87
- package/dist/sheet/Sheet.svelte +235 -0
- package/dist/sheet/Sheet.svelte.d.ts +7 -0
- package/dist/sheet/index.d.ts +1 -0
- package/dist/sheet/index.js +1 -0
- package/dist/sheet/types.d.ts +11 -0
- package/dist/sheet/types.js +1 -0
- package/dist/slider/Slider.svelte +118 -30
- package/dist/slider/types.d.ts +3 -0
- package/dist/snackbar/Snackbar.svelte +32 -35
- package/dist/snackbar/Snackbar.svelte.d.ts +2 -2
- package/dist/snackbar/types.d.ts +3 -2
- package/dist/switch/Switch.svelte +51 -20
- package/dist/switch/types.d.ts +3 -0
- package/dist/tabs/Tab.svelte +4 -12
- package/dist/tabs/Tabs.svelte +5 -5
- package/dist/text-field/TextField.svelte +2 -4
- package/dist/toolbar/Toolbar.svelte +121 -0
- package/dist/toolbar/Toolbar.svelte.d.ts +4 -0
- package/dist/toolbar/index.d.ts +1 -0
- package/dist/toolbar/index.js +1 -0
- package/dist/toolbar/types.d.ts +8 -0
- package/dist/toolbar/types.js +1 -0
- package/dist/tooltip/RichTooltip.svelte +18 -12
- package/dist/tooltip/RichTooltip.svelte.d.ts +2 -2
- package/dist/tooltip/Tooltip.svelte +22 -11
- package/dist/tooltip/Tooltip.svelte.d.ts +4 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.js +6 -0
- package/package.json +13 -13
- package/dist/date-picker/enterAnimation.d.ts +0 -1
- package/dist/date-picker/enterAnimation.js +0 -10
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import CloseIcon from '../icons/CloseIcon.svelte'
|
|
3
|
+
import { arrowKeyNav, rovingTabindex } from '../keyboard-nav.js'
|
|
4
|
+
import { popoverController, syncOpenEffect } from '../popover.svelte.js'
|
|
5
|
+
import { PRESS_DURATION } from '../press.svelte.js'
|
|
6
|
+
import { onMount } from 'svelte'
|
|
7
|
+
import { MediaQuery } from 'svelte/reactivity'
|
|
8
|
+
import Fab from './Fab.svelte'
|
|
9
|
+
import type { FabMenuProps } from './types.js'
|
|
10
|
+
|
|
11
|
+
let {
|
|
12
|
+
label = 'Actions',
|
|
13
|
+
icon,
|
|
14
|
+
closeIcon,
|
|
15
|
+
children,
|
|
16
|
+
variant = 'primary-container',
|
|
17
|
+
size = 's',
|
|
18
|
+
placement = 'block-start',
|
|
19
|
+
closeOnSelect = true,
|
|
20
|
+
open = $bindable(false),
|
|
21
|
+
element = $bindable(),
|
|
22
|
+
...attributes
|
|
23
|
+
}: FabMenuProps = $props()
|
|
24
|
+
|
|
25
|
+
const uid = $props.id()
|
|
26
|
+
const menuId = `np-fab-menu-${uid}`
|
|
27
|
+
const anchorName = `--np-fab-menu-${uid}`
|
|
28
|
+
|
|
29
|
+
let menuElement: HTMLDivElement | undefined = $state()
|
|
30
|
+
const reducedMotion = new MediaQuery('(prefers-reduced-motion: reduce)', false)
|
|
31
|
+
|
|
32
|
+
const ITEMS = 'button, a[href], [role="menuitem"]'
|
|
33
|
+
const attach = rovingTabindex(ITEMS)
|
|
34
|
+
const arrowHandler = $derived(
|
|
35
|
+
arrowKeyNav(ITEMS, placement.startsWith('inline') ? 'horizontal' : 'vertical'),
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
const controller = popoverController(() => menuElement)
|
|
39
|
+
|
|
40
|
+
export const show = () => controller.show()
|
|
41
|
+
|
|
42
|
+
export const close = () => {
|
|
43
|
+
clearTimeout(closeTimeout)
|
|
44
|
+
controller.close()
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
let closeTimeout: ReturnType<typeof setTimeout>
|
|
48
|
+
|
|
49
|
+
const closeAfterPress = () => {
|
|
50
|
+
if (reducedMotion.current) {
|
|
51
|
+
close()
|
|
52
|
+
return
|
|
53
|
+
}
|
|
54
|
+
clearTimeout(closeTimeout)
|
|
55
|
+
closeTimeout = setTimeout(close, PRESS_DURATION)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
onMount(() => {
|
|
59
|
+
return () => {
|
|
60
|
+
clearTimeout(closeTimeout)
|
|
61
|
+
}
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
syncOpenEffect(
|
|
65
|
+
() => menuElement,
|
|
66
|
+
() => open,
|
|
67
|
+
show,
|
|
68
|
+
close,
|
|
69
|
+
)
|
|
70
|
+
</script>
|
|
71
|
+
|
|
72
|
+
{#snippet triggerIcon()}
|
|
73
|
+
<span class="np-fab-menu-icons" aria-hidden="true">
|
|
74
|
+
<span class="np-fab-menu-icon" class:np-fab-menu-icon-away={open}>
|
|
75
|
+
{#if icon}{@render icon()}{/if}
|
|
76
|
+
</span>
|
|
77
|
+
<span class="np-fab-menu-icon" class:np-fab-menu-icon-away={!open}>
|
|
78
|
+
{#if closeIcon}{@render closeIcon()}{:else}<CloseIcon />{/if}
|
|
79
|
+
</span>
|
|
80
|
+
</span>
|
|
81
|
+
{/snippet}
|
|
82
|
+
|
|
83
|
+
<div
|
|
84
|
+
{...attributes}
|
|
85
|
+
bind:this={element}
|
|
86
|
+
style="anchor-name: {anchorName}; {attributes.style ?? ''}"
|
|
87
|
+
class={['np-fab-menu', `np-fab-menu-${placement}`, attributes.class]}
|
|
88
|
+
>
|
|
89
|
+
<Fab
|
|
90
|
+
{variant}
|
|
91
|
+
{size}
|
|
92
|
+
{label}
|
|
93
|
+
shape={open ? 'square' : 'round'}
|
|
94
|
+
command="toggle-popover"
|
|
95
|
+
commandfor={menuId}
|
|
96
|
+
aria-haspopup="menu"
|
|
97
|
+
aria-expanded={open}
|
|
98
|
+
class="np-fab-menu-trigger"
|
|
99
|
+
icon={triggerIcon}
|
|
100
|
+
/>
|
|
101
|
+
|
|
102
|
+
<div
|
|
103
|
+
bind:this={menuElement}
|
|
104
|
+
id={menuId}
|
|
105
|
+
style="position-anchor: {anchorName}"
|
|
106
|
+
popover="auto"
|
|
107
|
+
role="menu"
|
|
108
|
+
tabindex="-1"
|
|
109
|
+
aria-label={label}
|
|
110
|
+
class="np-fab-menu-list"
|
|
111
|
+
{@attach attach}
|
|
112
|
+
onkeydown={arrowHandler}
|
|
113
|
+
onclick={(event) => {
|
|
114
|
+
if (!closeOnSelect) return
|
|
115
|
+
const target = event.target as HTMLElement
|
|
116
|
+
if (target.closest(ITEMS)) closeAfterPress()
|
|
117
|
+
}}
|
|
118
|
+
ontoggle={(event) => {
|
|
119
|
+
open = event.newState === 'open'
|
|
120
|
+
}}
|
|
121
|
+
>
|
|
122
|
+
{@render children?.()}
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
|
|
126
|
+
<style>
|
|
127
|
+
.np-fab-menu {
|
|
128
|
+
position: relative;
|
|
129
|
+
display: inline-flex;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.np-fab-menu-icons {
|
|
133
|
+
display: grid;
|
|
134
|
+
}
|
|
135
|
+
.np-fab-menu-icon {
|
|
136
|
+
grid-area: 1 / 1;
|
|
137
|
+
display: flex;
|
|
138
|
+
}
|
|
139
|
+
.np-fab-menu-icon-away {
|
|
140
|
+
opacity: 0;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
144
|
+
.np-fab-menu-icon {
|
|
145
|
+
transition:
|
|
146
|
+
opacity var(--np-motion-expressive-fast-effects),
|
|
147
|
+
rotate var(--np-motion-expressive-default-spatial);
|
|
148
|
+
}
|
|
149
|
+
.np-fab-menu-icon-away {
|
|
150
|
+
rotate: -45deg;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.np-fab-menu-list {
|
|
155
|
+
position: absolute;
|
|
156
|
+
margin: 0;
|
|
157
|
+
padding: 0;
|
|
158
|
+
border: none;
|
|
159
|
+
background: none;
|
|
160
|
+
flex-direction: column;
|
|
161
|
+
align-items: flex-end;
|
|
162
|
+
gap: 0.5rem;
|
|
163
|
+
overflow: visible;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.np-fab-menu-list:popover-open {
|
|
167
|
+
display: flex;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.np-fab-menu-block-start .np-fab-menu-list {
|
|
171
|
+
position-area: block-start;
|
|
172
|
+
margin-block-end: 0.75rem;
|
|
173
|
+
flex-direction: column-reverse;
|
|
174
|
+
}
|
|
175
|
+
.np-fab-menu-block-end .np-fab-menu-list {
|
|
176
|
+
position-area: block-end;
|
|
177
|
+
margin-block-start: 0.75rem;
|
|
178
|
+
}
|
|
179
|
+
.np-fab-menu-inline-start .np-fab-menu-list {
|
|
180
|
+
position-area: inline-start;
|
|
181
|
+
margin-inline-end: 0.75rem;
|
|
182
|
+
flex-direction: row-reverse;
|
|
183
|
+
align-items: center;
|
|
184
|
+
}
|
|
185
|
+
.np-fab-menu-inline-end .np-fab-menu-list {
|
|
186
|
+
position-area: inline-end;
|
|
187
|
+
margin-inline-start: 0.75rem;
|
|
188
|
+
flex-direction: row;
|
|
189
|
+
align-items: center;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
193
|
+
.np-fab-menu-list:popover-open > :global(*) {
|
|
194
|
+
--_stagger-window: 210ms;
|
|
195
|
+
--_delay: calc((sibling-index() - 1) / sibling-count() * var(--_stagger-window));
|
|
196
|
+
animation: np-fab-menu-item-in var(--np-motion-expressive-default-spatial) both;
|
|
197
|
+
animation-delay: var(--_delay);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
@keyframes np-fab-menu-item-in {
|
|
202
|
+
from {
|
|
203
|
+
opacity: 0;
|
|
204
|
+
translate: 0 0.5rem;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
</style>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ButtonElement } from '../button/types.js';
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import type { HTMLAnchorAttributes, HTMLAttributes, HTMLButtonAttributes } from 'svelte/elements';
|
|
4
|
+
export type FabElement = ButtonElement;
|
|
5
|
+
interface BaseFabProps extends HTMLAttributes<FabElement>, Omit<HTMLButtonAttributes, keyof HTMLAttributes<HTMLButtonElement> | 'type'>, Omit<HTMLAnchorAttributes, keyof HTMLAttributes<HTMLAnchorElement> | 'type'> {
|
|
6
|
+
element?: FabElement;
|
|
7
|
+
variant?: 'primary' | 'secondary' | 'tertiary' | 'primary-container' | 'secondary-container' | 'tertiary-container';
|
|
8
|
+
size?: 's' | 'm' | 'l';
|
|
9
|
+
shape?: 'round' | 'square';
|
|
10
|
+
lowered?: boolean;
|
|
11
|
+
disabled?: boolean | null;
|
|
12
|
+
type?: 'submit' | 'reset' | 'button' | (string & {}) | null;
|
|
13
|
+
}
|
|
14
|
+
export interface FabProps extends BaseFabProps {
|
|
15
|
+
icon?: Snippet;
|
|
16
|
+
label?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ExtendedFabProps extends BaseFabProps {
|
|
19
|
+
icon?: Snippet;
|
|
20
|
+
label?: string;
|
|
21
|
+
collapsed?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface FabMenuProps extends HTMLAttributes<HTMLDivElement> {
|
|
24
|
+
label?: string;
|
|
25
|
+
icon?: Snippet;
|
|
26
|
+
closeIcon?: Snippet;
|
|
27
|
+
variant?: FabProps['variant'];
|
|
28
|
+
size?: FabProps['size'];
|
|
29
|
+
placement?: 'block-start' | 'block-end' | 'inline-start' | 'inline-end';
|
|
30
|
+
open?: boolean;
|
|
31
|
+
closeOnSelect?: boolean;
|
|
32
|
+
element?: HTMLDivElement;
|
|
33
|
+
}
|
|
34
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
let {
|
|
3
|
+
height = 24,
|
|
4
|
+
width = 24,
|
|
5
|
+
}: {
|
|
6
|
+
height?: number
|
|
7
|
+
width?: number
|
|
8
|
+
} = $props()
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<svg xmlns="http://www.w3.org/2000/svg" {height} viewBox="0 -960 960 960" {width}
|
|
12
|
+
><path d="m313-440 224 224-57 56-320-320 320-320 57 56-224 224h487v80H313Z" /></svg
|
|
13
|
+
>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export default ChevronDownIcon;
|
|
2
|
+
type ChevronDownIcon = SvelteComponent<{
|
|
3
|
+
[x: string]: never;
|
|
4
|
+
}, {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
}, {}> & {
|
|
7
|
+
$$bindings?: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
declare const ChevronDownIcon: $$__sveltets_2_IsomorphicComponent<{
|
|
10
|
+
[x: string]: never;
|
|
11
|
+
}, {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
}, {}, {}, string>;
|
|
14
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
15
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
16
|
+
$$bindings?: Bindings;
|
|
17
|
+
} & Exports;
|
|
18
|
+
(internal: unknown, props: {
|
|
19
|
+
$$events?: Events;
|
|
20
|
+
$$slots?: Slots;
|
|
21
|
+
}): Exports & {
|
|
22
|
+
$set?: any;
|
|
23
|
+
$on?: any;
|
|
24
|
+
};
|
|
25
|
+
z_$$bindings?: Bindings;
|
|
26
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
let {
|
|
3
|
+
height = 24,
|
|
4
|
+
width = 24,
|
|
5
|
+
}: {
|
|
6
|
+
height?: number
|
|
7
|
+
width?: number
|
|
8
|
+
} = $props()
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<svg xmlns="http://www.w3.org/2000/svg" {height} viewBox="0 -960 960 960" {width}
|
|
12
|
+
><path
|
|
13
|
+
d="M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Z"
|
|
14
|
+
/></svg
|
|
15
|
+
>
|
package/dist/icons/index.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
export { default as ArrowBackIcon } from './ArrowBackIcon.svelte';
|
|
1
2
|
export { default as ArrowDropDownIcon } from './ArrowDropDownIcon.svelte';
|
|
2
3
|
export { default as CalendarToday } from './CalendarToday.svelte';
|
|
3
4
|
export { default as CheckIcon } from './CheckIcon.svelte';
|
|
5
|
+
export { default as ChevronDownIcon } from './ChevronDownIcon.svelte';
|
|
4
6
|
export { default as ChevronLeftIcon } from './ChevronLeftIcon.svelte';
|
|
5
7
|
export { default as ChevronRightIcon } from './ChevronRightIcon.svelte';
|
|
6
8
|
export { default as CloseIcon } from './CloseIcon.svelte';
|
|
7
9
|
export { default as EditCalendarIcon } from './EditCalendarIcon.svelte';
|
|
8
10
|
export { default as Icon } from './Icon.svelte';
|
|
11
|
+
export { default as SearchIcon } from './SearchIcon.svelte';
|
package/dist/icons/index.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
export { default as ArrowBackIcon } from './ArrowBackIcon.svelte';
|
|
1
2
|
export { default as ArrowDropDownIcon } from './ArrowDropDownIcon.svelte';
|
|
2
3
|
export { default as CalendarToday } from './CalendarToday.svelte';
|
|
3
4
|
export { default as CheckIcon } from './CheckIcon.svelte';
|
|
5
|
+
export { default as ChevronDownIcon } from './ChevronDownIcon.svelte';
|
|
4
6
|
export { default as ChevronLeftIcon } from './ChevronLeftIcon.svelte';
|
|
5
7
|
export { default as ChevronRightIcon } from './ChevronRightIcon.svelte';
|
|
6
8
|
export { default as CloseIcon } from './CloseIcon.svelte';
|
|
7
9
|
export { default as EditCalendarIcon } from './EditCalendarIcon.svelte';
|
|
8
10
|
export { default as Icon } from './Icon.svelte';
|
|
11
|
+
export { default as SearchIcon } from './SearchIcon.svelte';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export * from './app-bar/index.js';
|
|
1
2
|
export * from './autocomplete/index.js';
|
|
2
3
|
export * from './badge/index.js';
|
|
3
4
|
export * from './button/index.js';
|
|
@@ -7,18 +8,23 @@ export * from './chip/index.js';
|
|
|
7
8
|
export * from './date-picker/index.js';
|
|
8
9
|
export * from './dialog/index.js';
|
|
9
10
|
export * from './divider/index.js';
|
|
11
|
+
export * from './fab/index.js';
|
|
10
12
|
export * from './list/index.js';
|
|
11
13
|
export * from './loading-indicator/index.js';
|
|
12
14
|
export * from './menu/index.js';
|
|
15
|
+
export * from './navigation-bar/index.js';
|
|
13
16
|
export * from './navigation-drawer/index.js';
|
|
14
17
|
export * from './navigation-rail/index.js';
|
|
15
18
|
export * from './progress/index.js';
|
|
16
19
|
export * from './radio/index.js';
|
|
17
20
|
export * from './ripple/index.js';
|
|
21
|
+
export * from './search/index.js';
|
|
18
22
|
export * from './select/index.js';
|
|
23
|
+
export * from './sheet/index.js';
|
|
19
24
|
export * from './slider/index.js';
|
|
20
25
|
export * from './snackbar/index.js';
|
|
21
26
|
export * from './switch/index.js';
|
|
22
27
|
export * from './tabs/index.js';
|
|
23
28
|
export * from './text-field/index.js';
|
|
29
|
+
export * from './toolbar/index.js';
|
|
24
30
|
export * from './tooltip/index.js';
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export * from './app-bar/index.js';
|
|
1
2
|
export * from './autocomplete/index.js';
|
|
2
3
|
export * from './badge/index.js';
|
|
3
4
|
export * from './button/index.js';
|
|
@@ -7,18 +8,23 @@ export * from './chip/index.js';
|
|
|
7
8
|
export * from './date-picker/index.js';
|
|
8
9
|
export * from './dialog/index.js';
|
|
9
10
|
export * from './divider/index.js';
|
|
11
|
+
export * from './fab/index.js';
|
|
10
12
|
export * from './list/index.js';
|
|
11
13
|
export * from './loading-indicator/index.js';
|
|
12
14
|
export * from './menu/index.js';
|
|
15
|
+
export * from './navigation-bar/index.js';
|
|
13
16
|
export * from './navigation-drawer/index.js';
|
|
14
17
|
export * from './navigation-rail/index.js';
|
|
15
18
|
export * from './progress/index.js';
|
|
16
19
|
export * from './radio/index.js';
|
|
17
20
|
export * from './ripple/index.js';
|
|
21
|
+
export * from './search/index.js';
|
|
18
22
|
export * from './select/index.js';
|
|
23
|
+
export * from './sheet/index.js';
|
|
19
24
|
export * from './slider/index.js';
|
|
20
25
|
export * from './snackbar/index.js';
|
|
21
26
|
export * from './switch/index.js';
|
|
22
27
|
export * from './tabs/index.js';
|
|
23
28
|
export * from './text-field/index.js';
|
|
29
|
+
export * from './toolbar/index.js';
|
|
24
30
|
export * from './tooltip/index.js';
|
|
@@ -24,3 +24,15 @@
|
|
|
24
24
|
outline-width: 3px;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
+
|
|
28
|
+
.np-focus-ring:focus-visible {
|
|
29
|
+
outline-style: solid;
|
|
30
|
+
outline-color: var(--np-color-secondary);
|
|
31
|
+
outline-width: 3px;
|
|
32
|
+
outline-offset: 2px;
|
|
33
|
+
}
|
|
34
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
35
|
+
.np-focus-ring:focus-visible {
|
|
36
|
+
animation: focusAnimation var(--np-motion-expressive-slow-effects) forwards;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -7,19 +7,12 @@ const decode = (encoded) => {
|
|
|
7
7
|
return radii;
|
|
8
8
|
};
|
|
9
9
|
export const SHAPES = [
|
|
10
|
-
// MaterialShapes.SoftBurst
|
|
11
10
|
'2zl30r3533bb3ik3pq3se3s33oh3gs39u33v30a2zn31b3693co3k53qk3sk3ro3n53fb38k32t2zz2zr32037h3e23ls3r83sm3r43lj3dv37c31y2zr30032w38p3fi3ne3rq3sj3qf3jw3ch3653192zm30b33y39z3h03oo3s53sd3pk3ib3b534z30q2zl30r3533bb3ik3pq3se3s33oh3gs39u33v30a2zn31b3693co3k53qk3sk3ro3n53fb38k32t2zz2zr32037h3e23ls3r83sm3r43lj3dv37c31y2zr30032w38p3fi3ne3rq3sj3qf3jw3ch3653192zm30b33y39z3h03oo3s53sd3pk3ib3b534z30q',
|
|
12
|
-
// MaterialShapes.Cookie9Sided
|
|
13
11
|
'3ne3kp3hr3g53fr3gl3iq3m33ot3qq3rw3sa3rz3qx3p33mg3jc3hi3gz3hn3jn3my3pp3rn3st3t73sv3rs3pw3n73jz3i23hg3i23jz3n73pw3rs3sv3t73st3rn3pp3my3jn3hn3gz3hi3jc3mg3p33qx3rz3sa3rw3qq3ot3m33iq3gl3fr3g53hr3kp3ne3pb3qg3qw3qm3pm3nv3lc3i13fk3eg3ei3fr3ie3lc3nh3ov3pk3pk3ou3ne3l83i93fb3dr3df3e83gb3jh3lz3nr3os3p53os3nr3lz3jh3gb3e83df3dr3fb3i93l83ne3ou3pk3pk3ov3nh3lc3ie3fr3ei3eg3fk3i13lc3nv3pm3qm3qw3qg3pb',
|
|
14
|
-
// MaterialShapes.Pentagon
|
|
15
12
|
'3ng3lh3jw3im3ho3h23gq3gq3h03hl3ih3jp3l93n63ph3s73vc3y23zz41241e40z3zr3xr3uz3se3q73od3mx3lt3l13kk3kf3kk3l13lt3mx3od3q73se3uz3xr3zr40z41e4123zz3y23vc3s73ph3n63l93jp3ih3hl3h03gq3gq3h23ho3im3jw3lh3ng3pp3rf3se3sp3sb3r93pg3mx3jm3gc3dh3b138z37935u34r33x33e33533533f33y34s35w37b3913b43df3f93gk3hb3hl3hb3gk3f93df3b439137b35w34s33y33f33533533e33x34r35u37938z3b13dh3gc3jm3mx3pg3r93sb3sp3se3rf3pp',
|
|
16
|
-
// MaterialShapes.Pill
|
|
17
13
|
'3t53rz3qr3pj3o93mz3lo3kd3j13hp3gd3f13dq3cp3by3bj3be3bj3by3cp3dq3f13gd3hp3j13kd3lo3mz3o93pj3qr3rz3t53ua3vd3wc3wu3xm3yg3z83zx40k41341j41x42842f42k42l42k42f42841x41j41340k3zx3z83yg3xm3wu3wc3vd3ua3t53rz3qr3pj3o93mz3lo3kd3j13hp3gd3f13dq3cp3by3bj3be3bj3by3cp3dq3f13gd3hp3j13kd3lo3mz3o93pj3qr3rz3t53ua3vd3wc3wu3xm3yg3z83zx40k41341j41x42842f42k42l42k42f42841x41j41340k3zx3z83yg3xm3wu3wc3vd3ua',
|
|
18
|
-
// MaterialShapes.Sunny
|
|
19
14
|
'3t63sa3pe3l73hi3ea3bj3973893973bj3ea3hi3l73pe3sa3t63sa3pe3l73hi3ea3bj3973893973bj3ea3hi3l73pe3sa3t63sa3pe3l73hi3ea3bj3973893973bj3ea3hi3l73pe3sa3t63sa3pe3l73hi3ea3bj3973893973bj3ea3hi3l73pe3sa3t63sa3pe3l73hi3ea3bj3973893973bj3ea3hi3l73pe3sa3t63sa3pe3l73hi3ea3bj3973893973bj3ea3hi3l73pe3sa3t63sa3pe3l73hi3ea3bj3973893973bj3ea3hi3l73pe3sa3t63sa3pe3l73hi3ea3bj3973893973bj3ea3hi3l73pe3sa',
|
|
20
|
-
// MaterialShapes.Cookie4Sided
|
|
21
15
|
'2yr2z530a32b35g39l3ea3iv3mz3qk3tm3w53y73zr40v41j41r41i40u3zr3y63w43tk3qi3mw3it3e739j35f32a3092z42yr2z530a32b35g39l3ea3iv3mz3qk3tm3w53y73zr40v41j41r41i40u3zr3y63w43tk3qi3mw3it3e739j35f32a3092z42yr2z530a32b35g39l3ea3iv3mz3qk3tm3w53y73zr40v41j41r41i40u3zr3y63w43tk3qi3mw3it3e739j35f32a3092z42yr2z530a32b35g39l3ea3iv3mz3qk3tm3w53y73zr40v41j41r41i40u3zr3y63w43tk3qi3mw3it3e739j35f32a3092z4',
|
|
22
|
-
// MaterialShapes.Oval
|
|
23
16
|
'3ec3bw39m37i35k33s32630q2zg2yb2xc2wj2vv2vd2uz2ur2up2ur2uz2vd2vv2wj2xc2yb2zg30q32633s35k37i39m3bw3ec3gx3jn3mi3ph3sj3vn3yr41t44r47j4a14c84e14fd4g64gg4g64fd4e14c84a147j44r41t3yr3vn3sj3ph3mi3jn3gx3ec3bw39m37i35k33s32630q2zg2yb2xc2wj2vv2vd2uz2ur2up2ur2uz2vd2vv2wj2xc2yb2zg30q32633s35k37i39m3bw3ec3gx3jn3mi3ph3sj3vn3yr41t44r47j4a14c84e14fd4g64gg4g64fd4e14c84a147j44r41t3yr3vn3sj3ph3mi3jn3gx',
|
|
24
17
|
].map(decode);
|
|
25
18
|
export const CIRCLE = decode('3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so3so');
|
package/dist/menu/Menu.svelte
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { arrowKeyNav, rovingTabindex } from '../keyboard-nav.js'
|
|
3
|
+
import { popoverController, syncOpenEffect } from '../popover.svelte.js'
|
|
3
4
|
import type { MenuProps } from './types.js'
|
|
4
5
|
|
|
5
6
|
const MENU_ITEM_SELECTOR = '[role="menuitem"]'
|
|
@@ -21,13 +22,17 @@
|
|
|
21
22
|
let contentHeight = $state(0)
|
|
22
23
|
let innerHeight = $state(0)
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
element?.showPopover()
|
|
26
|
-
}
|
|
25
|
+
const controller = popoverController(() => element)
|
|
27
26
|
|
|
28
|
-
export const
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
export const show = () => controller.show()
|
|
28
|
+
export const close = () => controller.close()
|
|
29
|
+
|
|
30
|
+
syncOpenEffect(
|
|
31
|
+
() => element,
|
|
32
|
+
() => open,
|
|
33
|
+
show,
|
|
34
|
+
close,
|
|
35
|
+
)
|
|
31
36
|
|
|
32
37
|
const calculateTransformOrigin = (anchorRect: DOMRect, menuRect: DOMRect) => {
|
|
33
38
|
const pivot = (anchorStart: number, anchorEnd: number, menuStart: number, menuEnd: number) => {
|
|
@@ -82,7 +87,7 @@
|
|
|
82
87
|
}}
|
|
83
88
|
>
|
|
84
89
|
<div {@attach attach} bind:clientHeight={contentHeight} class="np-menu" role="none">
|
|
85
|
-
{@render children()}
|
|
90
|
+
{@render children?.()}
|
|
86
91
|
</div>
|
|
87
92
|
</div>
|
|
88
93
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { MenuProps } from './types.ts';
|
|
2
2
|
declare const Menu: import("svelte").Component<MenuProps, {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
show: () => void;
|
|
4
|
+
close: () => void;
|
|
5
5
|
}, "element" | "open">;
|
|
6
6
|
type Menu = ReturnType<typeof Menu>;
|
|
7
7
|
export default Menu;
|
package/dist/menu/types.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { ItemProps } from '../list/types.js';
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
3
2
|
import type { HTMLAttributes } from 'svelte/elements';
|
|
4
3
|
export interface MenuProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
|
-
children: Snippet;
|
|
6
4
|
anchor?: HTMLElement | undefined;
|
|
7
5
|
element?: HTMLDivElement;
|
|
8
6
|
open?: boolean;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { arrowKeyNav, rovingTabindex } from '../keyboard-nav.js'
|
|
3
|
+
import type { NavigationBarProps } from './types.js'
|
|
4
|
+
|
|
5
|
+
let {
|
|
6
|
+
children,
|
|
7
|
+
arrangement = 'equal-weight',
|
|
8
|
+
element = $bindable(),
|
|
9
|
+
onkeydown: userKeydown,
|
|
10
|
+
...attributes
|
|
11
|
+
}: NavigationBarProps = $props()
|
|
12
|
+
|
|
13
|
+
const attach = rovingTabindex('.np-navigation-bar-item')
|
|
14
|
+
const arrowHandler = arrowKeyNav('.np-navigation-bar-item', 'horizontal')
|
|
15
|
+
|
|
16
|
+
const handleKeydown = (event: KeyboardEvent & { currentTarget: EventTarget & HTMLElement }) => {
|
|
17
|
+
userKeydown?.(event)
|
|
18
|
+
if (!event.defaultPrevented) arrowHandler(event)
|
|
19
|
+
}
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<nav
|
|
23
|
+
{...attributes}
|
|
24
|
+
{@attach attach}
|
|
25
|
+
bind:this={element}
|
|
26
|
+
class={[
|
|
27
|
+
'np-navigation-bar',
|
|
28
|
+
arrangement === 'centered' && 'np-navigation-bar-centered',
|
|
29
|
+
attributes.class,
|
|
30
|
+
]}
|
|
31
|
+
onkeydown={handleKeydown}
|
|
32
|
+
>
|
|
33
|
+
{@render children?.()}
|
|
34
|
+
</nav>
|
|
35
|
+
|
|
36
|
+
<style>
|
|
37
|
+
.np-navigation-bar {
|
|
38
|
+
display: flex;
|
|
39
|
+
justify-content: space-around;
|
|
40
|
+
align-items: stretch;
|
|
41
|
+
box-sizing: border-box;
|
|
42
|
+
width: 100%;
|
|
43
|
+
min-height: 5rem;
|
|
44
|
+
padding-block: 0.75rem;
|
|
45
|
+
padding-inline: 0.5rem;
|
|
46
|
+
background-color: var(--np-navigation-bar-container-color, var(--np-color-surface-container));
|
|
47
|
+
padding-bottom: max(0.75rem, env(safe-area-inset-bottom));
|
|
48
|
+
z-index: 8;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.np-navigation-bar-centered {
|
|
52
|
+
justify-content: center;
|
|
53
|
+
gap: 0.5rem;
|
|
54
|
+
}
|
|
55
|
+
:global(.np-navigation-bar-centered .np-navigation-bar-item.np-navigation-bar-item) {
|
|
56
|
+
flex: 0 0 auto;
|
|
57
|
+
min-width: 0;
|
|
58
|
+
}
|
|
59
|
+
</style>
|