noph-ui 0.10.12 → 0.11.0
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 +4 -5
- package/dist/button/Button.svelte +1 -2
- package/dist/button/IconButton.svelte +23 -17
- package/dist/card/Card.svelte +21 -12
- package/dist/chip/FilterChip.svelte +185 -0
- package/dist/chip/FilterChip.svelte.d.ts +4 -0
- package/dist/chip/index.d.ts +1 -1
- package/dist/chip/index.js +1 -1
- package/dist/chip/types.d.ts +10 -1
- package/dist/chip/types.js +1 -1
- package/dist/icons/CheckIcon.svelte +11 -1
- package/dist/icons/CheckIcon.svelte.d.ts +6 -25
- package/dist/icons/CloseIcon.svelte +11 -1
- package/dist/icons/CloseIcon.svelte.d.ts +6 -25
- package/dist/menu/Menu.svelte +1 -2
- package/dist/select/Select.svelte +1 -2
- package/dist/themes/defaultTheme.css +1 -0
- package/dist/tooltip/Tooltip.svelte +1 -2
- package/dist/types.d.ts +2 -0
- package/dist/types.js +2 -0
- package/package.json +2 -2
- package/dist/chip/Chip.svelte +0 -14
- package/dist/chip/Chip.svelte.d.ts +0 -3
- package/dist/utils.d.ts +0 -2
- package/dist/utils.js +0 -7
package/README.md
CHANGED
|
@@ -69,15 +69,14 @@ Beta (No breaking changes expected)
|
|
|
69
69
|
|
|
70
70
|
In progress (Breaking changes expected)
|
|
71
71
|
|
|
72
|
-
- Chips
|
|
72
|
+
- Chips (Docs missing)
|
|
73
73
|
- Dialogs (Fullscreen + Docs missing)
|
|
74
74
|
- Menus (Positioning missing + Docs missing)
|
|
75
|
-
- Navigation
|
|
75
|
+
- Navigation Drawer (Docs missing)
|
|
76
|
+
- Navigation Rail (Badge is missing + Docs missing)
|
|
76
77
|
- Tooltips (Positioning missing)
|
|
77
|
-
- Select
|
|
78
|
+
- Select (iOS issues)
|
|
78
79
|
|
|
79
80
|
Pending
|
|
80
81
|
|
|
81
|
-
- Sliders
|
|
82
|
-
- Switch
|
|
83
82
|
- Tabs
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import Ripple from '../ripple/Ripple.svelte'
|
|
3
3
|
import Tooltip from '../tooltip/Tooltip.svelte'
|
|
4
|
-
import { generateUUIDv4 } from '../utils.js'
|
|
5
4
|
import type { HTMLAnchorAttributes, HTMLButtonAttributes } from 'svelte/elements'
|
|
6
5
|
import type { ButtonProps } from './types.ts'
|
|
7
6
|
|
|
@@ -17,7 +16,7 @@
|
|
|
17
16
|
...attributes
|
|
18
17
|
}: ButtonProps = $props()
|
|
19
18
|
|
|
20
|
-
let tooltipId = $state(title ?
|
|
19
|
+
let tooltipId = $state(title ? crypto.randomUUID() : '')
|
|
21
20
|
|
|
22
21
|
const isButton = (obj: unknown): obj is HTMLButtonAttributes => {
|
|
23
22
|
return (obj as HTMLAnchorAttributes).href === undefined
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import Ripple from '../ripple/Ripple.svelte'
|
|
3
3
|
import Tooltip from '../tooltip/Tooltip.svelte'
|
|
4
|
-
import { generateUUIDv4 } from '../utils.js'
|
|
5
4
|
import type { IconButtonProps } from './types.ts'
|
|
6
|
-
import type {
|
|
5
|
+
import type {
|
|
6
|
+
HTMLAnchorAttributes,
|
|
7
|
+
HTMLButtonAttributes,
|
|
8
|
+
MouseEventHandler,
|
|
9
|
+
} from 'svelte/elements'
|
|
7
10
|
|
|
8
11
|
let {
|
|
9
12
|
variant = 'text',
|
|
@@ -15,10 +18,11 @@
|
|
|
15
18
|
selected = false,
|
|
16
19
|
selectedIcon,
|
|
17
20
|
keepTooltipOnClick,
|
|
21
|
+
onclick,
|
|
18
22
|
...attributes
|
|
19
23
|
}: IconButtonProps = $props()
|
|
20
24
|
|
|
21
|
-
let tooltipId = $state(title ?
|
|
25
|
+
let tooltipId = $state(title ? crypto.randomUUID() : '')
|
|
22
26
|
let selectedState = $state(!toggle || selected)
|
|
23
27
|
let touchEl: HTMLSpanElement | undefined = $state()
|
|
24
28
|
|
|
@@ -28,14 +32,6 @@
|
|
|
28
32
|
const isLink = (obj: unknown): obj is HTMLAnchorAttributes => {
|
|
29
33
|
return (obj as HTMLAnchorAttributes).href !== undefined
|
|
30
34
|
}
|
|
31
|
-
|
|
32
|
-
$effect(() => {
|
|
33
|
-
if (toggle) {
|
|
34
|
-
element?.addEventListener('click', () => {
|
|
35
|
-
selectedState = !selectedState
|
|
36
|
-
})
|
|
37
|
-
}
|
|
38
|
-
})
|
|
39
35
|
</script>
|
|
40
36
|
|
|
41
37
|
{#snippet content()}
|
|
@@ -58,6 +54,12 @@
|
|
|
58
54
|
{...attributes as HTMLButtonAttributes}
|
|
59
55
|
{disabled}
|
|
60
56
|
bind:this={element}
|
|
57
|
+
onclick={(event) => {
|
|
58
|
+
if (toggle) {
|
|
59
|
+
selectedState = !selectedState
|
|
60
|
+
}
|
|
61
|
+
;(onclick as MouseEventHandler<HTMLButtonElement>)?.(event)
|
|
62
|
+
}}
|
|
61
63
|
class={[
|
|
62
64
|
'np-icon-button',
|
|
63
65
|
disabled ? `${variant}-disabled disabled` : `${variant} enabled`,
|
|
@@ -123,8 +125,10 @@
|
|
|
123
125
|
}
|
|
124
126
|
.text-disabled {
|
|
125
127
|
border-radius: var(--np-icon-button-container-shape, var(--np-shape-corner-full));
|
|
126
|
-
height: var(--np-icon-button-container-height, 2.5rem);
|
|
127
|
-
width: var(--np-icon-button-container-width, 2.5rem);
|
|
128
|
+
--_button-height: var(--np-icon-button-container-height, 2.5rem);
|
|
129
|
+
--_button-width: var(--np-icon-button-container-width, 2.5rem);
|
|
130
|
+
height: var(--_button-height);
|
|
131
|
+
width: var(--_button-width);
|
|
128
132
|
--_icon-size: var(--np-icon-button-icon-size);
|
|
129
133
|
}
|
|
130
134
|
.filled-disabled {
|
|
@@ -174,8 +178,10 @@
|
|
|
174
178
|
--np-ripple-pressed-color: var(--np-icon-button-icon-color, var(--np-color-on-surface-variant));
|
|
175
179
|
color: var(--np-icon-button-icon-color, var(--np-color-on-surface-variant));
|
|
176
180
|
border-radius: var(--np-icon-button-container-shape, var(--np-shape-corner-full));
|
|
177
|
-
height: var(--np-icon-button-container-height, 2.5rem);
|
|
178
|
-
width: var(--np-icon-button-container-width, 2.5rem);
|
|
181
|
+
--_button-height: var(--np-icon-button-container-height, 2.5rem);
|
|
182
|
+
--_button-width: var(--np-icon-button-container-width, 2.5rem);
|
|
183
|
+
height: var(--_button-height);
|
|
184
|
+
width: var(--_button-width);
|
|
179
185
|
--_icon-size: var(--np-icon-button-icon-size);
|
|
180
186
|
}
|
|
181
187
|
.text.toggle {
|
|
@@ -253,7 +259,7 @@
|
|
|
253
259
|
}
|
|
254
260
|
.np-touch {
|
|
255
261
|
position: absolute;
|
|
256
|
-
height: max(
|
|
257
|
-
width: max(
|
|
262
|
+
height: max(calc(var(--_button-height, 40px) + 8px), 100%);
|
|
263
|
+
width: max(calc(var(--_button-width, 40px) + 8px), 100%);
|
|
258
264
|
}
|
|
259
265
|
</style>
|
package/dist/card/Card.svelte
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import Ripple from '../ripple/Ripple.svelte'
|
|
3
|
+
import type { FocusEventHandler } from 'svelte/elements'
|
|
3
4
|
import type { CardProps } from './types.ts'
|
|
4
5
|
|
|
5
6
|
let {
|
|
@@ -12,6 +13,8 @@
|
|
|
12
13
|
supportingText,
|
|
13
14
|
action,
|
|
14
15
|
children,
|
|
16
|
+
onblur,
|
|
17
|
+
onfocus,
|
|
15
18
|
...attributes
|
|
16
19
|
}: CardProps = $props()
|
|
17
20
|
|
|
@@ -28,16 +31,6 @@
|
|
|
28
31
|
})
|
|
29
32
|
}
|
|
30
33
|
})
|
|
31
|
-
$effect(() => {
|
|
32
|
-
if (element) {
|
|
33
|
-
element.addEventListener('focus', () => {
|
|
34
|
-
focused = true
|
|
35
|
-
})
|
|
36
|
-
element.addEventListener('blur', () => {
|
|
37
|
-
focused = false
|
|
38
|
-
})
|
|
39
|
-
}
|
|
40
|
-
})
|
|
41
34
|
</script>
|
|
42
35
|
|
|
43
36
|
{#snippet content()}
|
|
@@ -77,6 +70,12 @@
|
|
|
77
70
|
{...attributes}
|
|
78
71
|
bind:this={element}
|
|
79
72
|
aria-disabled={disabled}
|
|
73
|
+
onfocus={(event) => {
|
|
74
|
+
;(onfocus as FocusEventHandler<HTMLDivElement>)?.(event)
|
|
75
|
+
}}
|
|
76
|
+
onblur={(event) => {
|
|
77
|
+
;(onblur as FocusEventHandler<HTMLDivElement>)?.(event)
|
|
78
|
+
}}
|
|
80
79
|
class={[
|
|
81
80
|
'np-card-container',
|
|
82
81
|
`np-card-${variant}`,
|
|
@@ -91,6 +90,14 @@
|
|
|
91
90
|
aria-disabled={disabled}
|
|
92
91
|
{...attributes}
|
|
93
92
|
bind:this={element}
|
|
93
|
+
onfocus={(event) => {
|
|
94
|
+
focused = true
|
|
95
|
+
;(onfocus as FocusEventHandler<HTMLButtonElement>)?.(event)
|
|
96
|
+
}}
|
|
97
|
+
onblur={(event) => {
|
|
98
|
+
focused = false
|
|
99
|
+
;(onblur as FocusEventHandler<HTMLButtonElement>)?.(event)
|
|
100
|
+
}}
|
|
94
101
|
{disabled}
|
|
95
102
|
class={[
|
|
96
103
|
'np-card-container',
|
|
@@ -108,11 +115,13 @@
|
|
|
108
115
|
aria-disabled={disabled}
|
|
109
116
|
tabindex={disabled ? -1 : undefined}
|
|
110
117
|
role="link"
|
|
111
|
-
|
|
118
|
+
onfocus={(event) => {
|
|
112
119
|
focused = true
|
|
120
|
+
;(onfocus as FocusEventHandler<HTMLAnchorElement>)?.(event)
|
|
113
121
|
}}
|
|
114
|
-
|
|
122
|
+
onblur={(event) => {
|
|
115
123
|
focused = false
|
|
124
|
+
;(onblur as FocusEventHandler<HTMLAnchorElement>)?.(event)
|
|
116
125
|
}}
|
|
117
126
|
class={[
|
|
118
127
|
'np-card-container',
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import IconButton from '../button/IconButton.svelte'
|
|
3
|
+
import CheckIcon from '../icons/CheckIcon.svelte'
|
|
4
|
+
import CloseIcon from '../icons/CloseIcon.svelte'
|
|
5
|
+
import Ripple from '../ripple/Ripple.svelte'
|
|
6
|
+
import type { FilterChipProps } from './types.ts'
|
|
7
|
+
|
|
8
|
+
let {
|
|
9
|
+
selected = $bindable(false),
|
|
10
|
+
removable = false,
|
|
11
|
+
elevated = false,
|
|
12
|
+
disabled = false,
|
|
13
|
+
label = '',
|
|
14
|
+
icon,
|
|
15
|
+
...attributes
|
|
16
|
+
}: FilterChipProps = $props()
|
|
17
|
+
|
|
18
|
+
let chipBtn: HTMLButtonElement | undefined = $state()
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<div
|
|
22
|
+
{...attributes}
|
|
23
|
+
class={[
|
|
24
|
+
'np-filter-chip',
|
|
25
|
+
elevated ? 'np-filter-chip-elevated' : 'np-filter-chip-default',
|
|
26
|
+
icon || selected ? 'np-filter-chip-icon' : '',
|
|
27
|
+
selected ? 'np-filter-chip-selected' : '',
|
|
28
|
+
removable ? 'np-filter-chip-removable' : '',
|
|
29
|
+
disabled ? 'np-filter-chip-disabled' : '',
|
|
30
|
+
attributes.class,
|
|
31
|
+
]}
|
|
32
|
+
>
|
|
33
|
+
<button
|
|
34
|
+
bind:this={chipBtn}
|
|
35
|
+
class="np-filter-chip-btn"
|
|
36
|
+
{disabled}
|
|
37
|
+
onclick={() => {
|
|
38
|
+
console.log('click')
|
|
39
|
+
selected = !selected
|
|
40
|
+
}}
|
|
41
|
+
>
|
|
42
|
+
{#if icon && !selected}
|
|
43
|
+
{@render icon()}
|
|
44
|
+
{/if}
|
|
45
|
+
{#if selected}
|
|
46
|
+
<CheckIcon width={18} height={18} />
|
|
47
|
+
{/if}
|
|
48
|
+
<div class="np-chip-label">{label}</div>
|
|
49
|
+
</button>
|
|
50
|
+
{#if !disabled}
|
|
51
|
+
<Ripple forElement={chipBtn} />
|
|
52
|
+
{/if}
|
|
53
|
+
{#if removable}
|
|
54
|
+
<IconButton
|
|
55
|
+
{disabled}
|
|
56
|
+
--np-icon-button-container-height="1.75rem"
|
|
57
|
+
--np-icon-button-container-width="1.75rem"
|
|
58
|
+
--np-icon-button-icon-size="1.125rem"
|
|
59
|
+
onclick={(event: Event) => {
|
|
60
|
+
event.stopPropagation()
|
|
61
|
+
}}
|
|
62
|
+
>
|
|
63
|
+
<CloseIcon />
|
|
64
|
+
</IconButton>
|
|
65
|
+
{/if}
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
<style>
|
|
69
|
+
.np-filter-chip {
|
|
70
|
+
position: relative;
|
|
71
|
+
display: inline-flex;
|
|
72
|
+
align-items: center;
|
|
73
|
+
user-select: none;
|
|
74
|
+
border-radius: var(--np-filter-chip-container-shape, var(--np-shape-corner-small));
|
|
75
|
+
--np-icon-button-icon-color: var(--np-color-on-surface-variant);
|
|
76
|
+
--np-icon-size: 1.125rem;
|
|
77
|
+
}
|
|
78
|
+
.np-filter-chip-btn {
|
|
79
|
+
box-sizing: border-box;
|
|
80
|
+
font-family: inherit;
|
|
81
|
+
background-color: transparent;
|
|
82
|
+
border-width: 0;
|
|
83
|
+
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
|
84
|
+
cursor: pointer;
|
|
85
|
+
display: inline-flex;
|
|
86
|
+
align-items: center;
|
|
87
|
+
padding: 0;
|
|
88
|
+
height: 2rem;
|
|
89
|
+
color: var(--np-color-on-surface-variant);
|
|
90
|
+
fill: currentColor;
|
|
91
|
+
gap: 0.5rem;
|
|
92
|
+
z-index: 1;
|
|
93
|
+
padding-left: 1rem;
|
|
94
|
+
padding-right: 1rem;
|
|
95
|
+
}
|
|
96
|
+
.np-filter-chip-icon .np-filter-chip-btn {
|
|
97
|
+
padding-left: 0.5rem;
|
|
98
|
+
}
|
|
99
|
+
.np-filter-chip-removable {
|
|
100
|
+
padding-right: 2px;
|
|
101
|
+
}
|
|
102
|
+
.np-filter-chip-removable .np-filter-chip-btn {
|
|
103
|
+
padding-right: 2px;
|
|
104
|
+
}
|
|
105
|
+
.np-chip-label {
|
|
106
|
+
line-height: 1.25rem;
|
|
107
|
+
font-size: 0.875rem;
|
|
108
|
+
font-weight: 500;
|
|
109
|
+
}
|
|
110
|
+
.np-filter-chip::before {
|
|
111
|
+
content: '';
|
|
112
|
+
position: absolute;
|
|
113
|
+
inset: 0;
|
|
114
|
+
border-radius: inherit;
|
|
115
|
+
pointer-events: none;
|
|
116
|
+
}
|
|
117
|
+
.np-filter-chip-default::before {
|
|
118
|
+
border-width: 1px;
|
|
119
|
+
border-style: solid;
|
|
120
|
+
border-color: var(--np-filter-chip-outline-color, var(--np-color-outline-variant));
|
|
121
|
+
}
|
|
122
|
+
.np-filter-chip-selected::before {
|
|
123
|
+
border-width: 0;
|
|
124
|
+
background-color: var(--np-color-secondary-container);
|
|
125
|
+
}
|
|
126
|
+
.np-filter-chip-elevated {
|
|
127
|
+
border-width: 0;
|
|
128
|
+
box-shadow: var(--np-elevation-1);
|
|
129
|
+
}
|
|
130
|
+
.np-filter-chip-selected {
|
|
131
|
+
--np-icon-button-icon-color: var(--np-color-on-secondary-container);
|
|
132
|
+
}
|
|
133
|
+
.np-filter-chip-selected .np-filter-chip-btn {
|
|
134
|
+
color: var(--np-color-on-secondary-container);
|
|
135
|
+
}
|
|
136
|
+
.np-filter-chip-btn:focus-visible {
|
|
137
|
+
outline-width: 0;
|
|
138
|
+
}
|
|
139
|
+
.np-filter-chip:has(.np-filter-chip-btn:focus-visible) {
|
|
140
|
+
outline-style: solid;
|
|
141
|
+
outline-color: var(--np-color-primary);
|
|
142
|
+
outline-width: 3px;
|
|
143
|
+
outline-offset: 2px;
|
|
144
|
+
animation: focusAnimation 0.3s ease forwards;
|
|
145
|
+
}
|
|
146
|
+
@keyframes focusAnimation {
|
|
147
|
+
0% {
|
|
148
|
+
outline-width: 3px;
|
|
149
|
+
}
|
|
150
|
+
50% {
|
|
151
|
+
outline-width: 6px;
|
|
152
|
+
}
|
|
153
|
+
100% {
|
|
154
|
+
outline-width: 3px;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.np-filter-chip-disabled .np-filter-chip-btn {
|
|
159
|
+
cursor: default;
|
|
160
|
+
color: var(--np-color-on-surface);
|
|
161
|
+
opacity: 0.38;
|
|
162
|
+
}
|
|
163
|
+
.np-filter-chip-disabled.np-filter-chip-elevated {
|
|
164
|
+
box-shadow: none;
|
|
165
|
+
}
|
|
166
|
+
.np-filter-chip-disabled.np-filter-chip-selected::before {
|
|
167
|
+
opacity: 0.12;
|
|
168
|
+
}
|
|
169
|
+
:not(.np-filter-chip-selected).np-filter-chip-disabled.np-filter-chip-default::after {
|
|
170
|
+
content: '';
|
|
171
|
+
position: absolute;
|
|
172
|
+
inset: 0;
|
|
173
|
+
border-radius: inherit;
|
|
174
|
+
pointer-events: none;
|
|
175
|
+
border-width: 1px;
|
|
176
|
+
border-style: solid;
|
|
177
|
+
border-color: var(--np-color-on-surface);
|
|
178
|
+
opacity: 0.12;
|
|
179
|
+
}
|
|
180
|
+
.np-filter-chip-disabled::before {
|
|
181
|
+
background-color: var(--np-color-on-surface);
|
|
182
|
+
opacity: 0.12;
|
|
183
|
+
border-width: 0;
|
|
184
|
+
}
|
|
185
|
+
</style>
|
package/dist/chip/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default as
|
|
1
|
+
export { default as FilterChip } from './FilterChip.svelte';
|
package/dist/chip/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default as
|
|
1
|
+
export { default as FilterChip } from './FilterChip.svelte';
|
package/dist/chip/types.d.ts
CHANGED
|
@@ -1 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
export interface FilterChipProps extends HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
selected?: boolean;
|
|
5
|
+
removable?: boolean;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
elevated?: boolean;
|
|
8
|
+
label?: string;
|
|
9
|
+
icon?: Snippet;
|
|
10
|
+
}
|
package/dist/chip/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export {};
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
-
<
|
|
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}
|
|
2
12
|
><path d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z" /></svg
|
|
3
13
|
>
|
|
@@ -1,26 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}, {
|
|
5
|
-
[evt: string]: CustomEvent<any>;
|
|
6
|
-
}, {}> & {
|
|
7
|
-
$$bindings?: string | undefined;
|
|
1
|
+
type $$ComponentProps = {
|
|
2
|
+
height?: number;
|
|
3
|
+
width?: number;
|
|
8
4
|
};
|
|
9
|
-
declare const CheckIcon:
|
|
10
|
-
|
|
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
|
-
}
|
|
5
|
+
declare const CheckIcon: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
6
|
+
type CheckIcon = ReturnType<typeof CheckIcon>;
|
|
7
|
+
export default CheckIcon;
|
|
@@ -1,4 +1,14 @@
|
|
|
1
|
-
<
|
|
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}
|
|
2
12
|
><path
|
|
3
13
|
d="m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z"
|
|
4
14
|
/></svg
|
|
@@ -1,26 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}, {
|
|
5
|
-
[evt: string]: CustomEvent<any>;
|
|
6
|
-
}, {}> & {
|
|
7
|
-
$$bindings?: string | undefined;
|
|
1
|
+
type $$ComponentProps = {
|
|
2
|
+
height?: number;
|
|
3
|
+
width?: number;
|
|
8
4
|
};
|
|
9
|
-
declare const CloseIcon:
|
|
10
|
-
|
|
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
|
-
}
|
|
5
|
+
declare const CloseIcon: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
6
|
+
type CloseIcon = ReturnType<typeof CloseIcon>;
|
|
7
|
+
export default CloseIcon;
|
package/dist/menu/Menu.svelte
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { generateUUIDv4 } from '../utils.js'
|
|
3
2
|
import type { MenuProps } from './types.ts'
|
|
4
3
|
|
|
5
4
|
let {
|
|
@@ -75,7 +74,7 @@
|
|
|
75
74
|
{ passive: true },
|
|
76
75
|
)
|
|
77
76
|
} else if (!anchor.style.getPropertyValue('anchor-name')) {
|
|
78
|
-
const generatedId = `--${
|
|
77
|
+
const generatedId = `--${crypto.randomUUID()}`
|
|
79
78
|
element.style.setProperty('position-anchor', generatedId)
|
|
80
79
|
anchor.style.setProperty('anchor-name', generatedId)
|
|
81
80
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import Menu from '../menu/Menu.svelte'
|
|
3
3
|
import { isFirstInvalidControlInForm } from '../text-field/report-validity.js'
|
|
4
|
-
import { generateUUIDv4 } from '../utils.js'
|
|
5
4
|
import type { SelectProps } from './types.ts'
|
|
6
5
|
import Item from '../list/Item.svelte'
|
|
7
6
|
import { tick } from 'svelte'
|
|
@@ -35,7 +34,7 @@
|
|
|
35
34
|
let selectElement: HTMLSelectElement | undefined = $state()
|
|
36
35
|
let menuElement: HTMLDivElement | undefined = $state()
|
|
37
36
|
let field: HTMLDivElement | undefined = $state()
|
|
38
|
-
let menuId = $state(`--select-${
|
|
37
|
+
let menuId = $state(`--select-${crypto.randomUUID()}`)
|
|
39
38
|
let menuOpen = $state(false)
|
|
40
39
|
let selectedLabel = $derived.by<string>(() => {
|
|
41
40
|
return options.find((option) => option.value === value)?.label || ''
|
|
@@ -63,6 +63,7 @@
|
|
|
63
63
|
rgba(0, 0, 0, 0.12) 0px 3px 14px 2px;
|
|
64
64
|
--np-shape-corner-full: 9999px;
|
|
65
65
|
--np-shape-corner-extra-small: 0.25rem;
|
|
66
|
+
--np-shape-corner-small: 0.5rem;
|
|
66
67
|
--np-shape-corner-medium: 0.75rem;
|
|
67
68
|
--np-shape-corner-large: 1rem;
|
|
68
69
|
--np-shape-corner-extra-large: 1.75rem;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { generateUUIDv4 } from '../utils.js'
|
|
3
2
|
import type { TooltipProps } from './types.ts'
|
|
4
3
|
|
|
5
4
|
let {
|
|
@@ -46,7 +45,7 @@
|
|
|
46
45
|
if (anchor && element) {
|
|
47
46
|
if ('anchorName' in document.documentElement.style) {
|
|
48
47
|
const anchorName = anchor.style.getPropertyValue('anchor-name')
|
|
49
|
-
const generatedId = anchorName || `--${
|
|
48
|
+
const generatedId = anchorName || `--${crypto.randomUUID()}`
|
|
50
49
|
element.style.setProperty('position-anchor', generatedId)
|
|
51
50
|
if (!anchorName) {
|
|
52
51
|
anchor.style.setProperty('anchor-name', generatedId)
|
package/dist/types.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export * from './button/types.ts';
|
|
|
2
2
|
export * from './card/types.ts';
|
|
3
3
|
export * from './checkbox/types.ts';
|
|
4
4
|
export * from './chip/types.ts';
|
|
5
|
+
export * from './dialog/types.js';
|
|
5
6
|
export * from './divider/types.js';
|
|
6
7
|
export * from './list/types.ts';
|
|
7
8
|
export * from './menu/types.ts';
|
|
@@ -10,6 +11,7 @@ export * from './navigation-rail/types.ts';
|
|
|
10
11
|
export * from './progress/types.js';
|
|
11
12
|
export * from './radio/types.ts';
|
|
12
13
|
export * from './ripple/types.ts';
|
|
14
|
+
export * from './select/types.js';
|
|
13
15
|
export * from './snackbar/types.ts';
|
|
14
16
|
export * from './text-field/types.ts';
|
|
15
17
|
export * from './tooltip/types.ts';
|
package/dist/types.js
CHANGED
|
@@ -2,6 +2,7 @@ export * from './button/types.ts';
|
|
|
2
2
|
export * from './card/types.ts';
|
|
3
3
|
export * from './checkbox/types.ts';
|
|
4
4
|
export * from './chip/types.ts';
|
|
5
|
+
export * from './dialog/types.js';
|
|
5
6
|
export * from './divider/types.js';
|
|
6
7
|
export * from './list/types.ts';
|
|
7
8
|
export * from './menu/types.ts';
|
|
@@ -10,6 +11,7 @@ export * from './navigation-rail/types.ts';
|
|
|
10
11
|
export * from './progress/types.js';
|
|
11
12
|
export * from './radio/types.ts';
|
|
12
13
|
export * from './ripple/types.ts';
|
|
14
|
+
export * from './select/types.js';
|
|
13
15
|
export * from './snackbar/types.ts';
|
|
14
16
|
export * from './text-field/types.ts';
|
|
15
17
|
export * from './tooltip/types.ts';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "noph-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"homepage": "https://noph.dev",
|
|
6
6
|
"repository": {
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"prettier": "^3.4.2",
|
|
67
67
|
"prettier-plugin-svelte": "^3.3.3",
|
|
68
68
|
"publint": "^0.3.2",
|
|
69
|
-
"svelte": "^5.19.
|
|
69
|
+
"svelte": "^5.19.4",
|
|
70
70
|
"svelte-check": "^4.1.4",
|
|
71
71
|
"typescript": "^5.7.3",
|
|
72
72
|
"typescript-eslint": "^8.22.0",
|
package/dist/chip/Chip.svelte
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
let { ...attributes } = $props()
|
|
3
|
-
</script>
|
|
4
|
-
|
|
5
|
-
<template class="divider {attributes.class}"></template>
|
|
6
|
-
|
|
7
|
-
<style>
|
|
8
|
-
.divider {
|
|
9
|
-
height: 1px;
|
|
10
|
-
width: 100%;
|
|
11
|
-
display: flex;
|
|
12
|
-
background-color: var(--np-color-outline-variant);
|
|
13
|
-
}
|
|
14
|
-
</style>
|
package/dist/utils.d.ts
DELETED
package/dist/utils.js
DELETED