noph-ui 0.33.4 → 0.34.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.
@@ -134,7 +134,6 @@
134
134
  {...attributes}
135
135
  autocomplete="off"
136
136
  {variant}
137
- type="text"
138
137
  populated={finalPopulated}
139
138
  bind:clientWidth
140
139
  bind:value
@@ -1,4 +1,4 @@
1
- import type { InputFieldProps } from '../types.ts';
1
+ import type { TextFieldProps } from '../types.ts';
2
2
  import type { Snippet } from 'svelte';
3
3
  export interface AutoCompleteOption {
4
4
  value?: string | number;
@@ -7,13 +7,11 @@ export interface AutoCompleteOption {
7
7
  end?: Snippet;
8
8
  supportingText?: string;
9
9
  }
10
- export interface AutoCompleteProps extends Omit<InputFieldProps, 'clientWidth' | 'clientHeight'> {
10
+ export interface AutoCompleteProps extends Omit<TextFieldProps, 'clientWidth' | 'clientHeight'> {
11
11
  options: AutoCompleteOption[];
12
12
  optionsFilter?: (option: AutoCompleteOption) => boolean;
13
13
  onoptionselect?: (option: AutoCompleteOption, menuElement: HTMLDivElement) => void;
14
14
  clampMenuWidth?: boolean;
15
- showPopover?: () => void;
16
- hidePopover?: () => void;
17
15
  virtualThreshold?: number;
18
16
  menuOpen?: boolean;
19
17
  }
@@ -3,7 +3,7 @@
3
3
  import Ripple from '../ripple/Ripple.svelte'
4
4
  import Tooltip from '../tooltip/Tooltip.svelte'
5
5
  import { onMount } from 'svelte'
6
- import type { HTMLButtonAttributes, MouseEventHandler } from 'svelte/elements'
6
+ import type { HTMLButtonAttributes } from 'svelte/elements'
7
7
  import type { ButtonProps } from './types.ts'
8
8
 
9
9
  let {
@@ -86,6 +86,7 @@
86
86
  size,
87
87
  selected ? 'square' : shape,
88
88
  toggle && 'toggle',
89
+ selected && 'selected',
89
90
  'enabled',
90
91
  variant,
91
92
  pressed && 'pressed',
@@ -110,8 +111,7 @@
110
111
  } else {
111
112
  handlePress()
112
113
  }
113
- // prettier-ignore
114
- ;(attributes.onclick as MouseEventHandler<HTMLButtonElement>)?.(event)
114
+ attributes.onclick?.(event)
115
115
  }}
116
116
  class={[
117
117
  'np-button',
@@ -3,7 +3,7 @@
3
3
  import Ripple from '../ripple/Ripple.svelte'
4
4
  import Tooltip from '../tooltip/Tooltip.svelte'
5
5
  import { onMount } from 'svelte'
6
- import type { HTMLButtonAttributes, MouseEventHandler } from 'svelte/elements'
6
+ import type { HTMLButtonAttributes } from 'svelte/elements'
7
7
  import type { IconButtonProps } from './types.ts'
8
8
 
9
9
  let {
@@ -103,8 +103,7 @@
103
103
  } else {
104
104
  handlePress()
105
105
  }
106
- // prettier-ignore
107
- ;(attributes.onclick as MouseEventHandler<HTMLButtonElement>)?.(event)
106
+ attributes.onclick?.(event)
108
107
  }}
109
108
  class={[
110
109
  'np-icon-button',
@@ -1,58 +1,27 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { HTMLAnchorAttributes, HTMLAttributes, HTMLButtonAttributes } from 'svelte/elements';
3
- interface ButtonButtonProps extends HTMLButtonAttributes {
4
- variant?: 'text' | 'filled' | 'outlined' | 'elevated' | 'tonal';
5
- start?: Snippet | undefined;
6
- end?: Snippet | undefined;
3
+ export type ButtonElement = HTMLButtonElement | HTMLAnchorElement;
4
+ interface BaseButtonProps extends HTMLAttributes<ButtonElement>, Omit<HTMLButtonAttributes, keyof HTMLAttributes<HTMLButtonElement> | 'type'>, Omit<HTMLAnchorAttributes, keyof HTMLAttributes<HTMLAnchorElement> | 'type'> {
7
5
  element?: HTMLElement;
8
6
  disabled?: boolean;
9
7
  loading?: boolean;
10
8
  loadingAriaLabel?: string;
11
- size?: 'xs' | 's' | 'm' | 'l' | 'xl';
12
9
  toggle?: boolean;
13
- shape?: 'round' | 'square';
14
10
  selected?: boolean;
11
+ shape?: 'round' | 'square';
12
+ size?: 'xs' | 's' | 'm' | 'l' | 'xl';
13
+ type?: 'submit' | 'reset' | 'button' | (string & {}) | null;
15
14
  }
16
- interface ButtonAnchorProps extends HTMLAnchorAttributes {
15
+ export interface ButtonProps extends BaseButtonProps {
17
16
  variant?: 'text' | 'filled' | 'outlined' | 'elevated' | 'tonal';
18
17
  start?: Snippet;
19
18
  end?: Snippet;
20
- element?: HTMLElement;
21
- disabled?: boolean;
22
- loading?: boolean;
23
- loadingAriaLabel?: string;
24
- size?: 'xs' | 's' | 'm' | 'l' | 'xl';
25
- toggle?: boolean;
26
- shape?: 'round' | 'square';
27
- selected?: boolean;
28
- }
29
- interface IconButtonButtonProps extends HTMLButtonAttributes {
30
- variant?: 'text' | 'filled' | 'outlined' | 'tonal';
31
- element?: HTMLElement;
32
- toggle?: boolean;
33
- selected?: boolean;
34
- loading?: boolean;
35
- loadingAriaLabel?: string;
36
- selectedIcon?: Snippet;
37
- shape?: 'round' | 'square';
38
- size?: 'xs' | 's' | 'm' | 'l' | 'xl';
39
- width?: 'narrow' | 'wide' | 'default';
40
19
  }
41
- interface IconButtonAnchorProps extends HTMLAnchorAttributes {
20
+ export interface IconButtonProps extends BaseButtonProps {
42
21
  variant?: 'text' | 'filled' | 'outlined' | 'tonal';
43
- element?: HTMLElement;
44
- disabled?: boolean;
45
- loading?: boolean;
46
- loadingAriaLabel?: string;
47
- toggle?: boolean;
48
- selected?: boolean;
49
22
  selectedIcon?: Snippet;
50
- shape?: 'round' | 'square';
51
- size?: 'xs' | 's' | 'm' | 'l' | 'xl';
52
23
  width?: 'narrow' | 'wide' | 'default';
53
24
  }
54
- export type IconButtonProps = IconButtonButtonProps | IconButtonAnchorProps;
55
- export type ButtonProps = ButtonButtonProps | ButtonAnchorProps;
56
25
  export interface SegmentedButtonProps extends HTMLAttributes<HTMLDivElement> {
57
26
  name: string;
58
27
  multiSelect?: boolean;
@@ -1,6 +1,5 @@
1
1
  <script lang="ts">
2
2
  import Ripple from '../ripple/Ripple.svelte'
3
- import type { FocusEventHandler } from 'svelte/elements'
4
3
  import type { CardProps } from './types.ts'
5
4
 
6
5
  let {
@@ -15,6 +14,7 @@
15
14
  children,
16
15
  onfocus,
17
16
  onblur,
17
+ type,
18
18
  ...attributes
19
19
  }: CardProps = $props()
20
20
 
@@ -60,12 +60,12 @@
60
60
  <div class="np-card-action">{@render action()}</div>
61
61
  {/if}
62
62
  </div>
63
- {#if !disabled && attributes.type !== 'text'}
63
+ {#if !disabled && type !== 'text'}
64
64
  <Ripple forceHover={focused} />
65
65
  {/if}
66
66
  {/snippet}
67
67
 
68
- {#if attributes.type === 'text'}
68
+ {#if type === 'text'}
69
69
  <div
70
70
  {...attributes}
71
71
  bind:this={element}
@@ -79,18 +79,19 @@
79
79
  >
80
80
  {@render content()}
81
81
  </div>
82
- {:else if attributes.type === 'button'}
82
+ {:else if type === 'button'}
83
83
  <button
84
84
  aria-disabled={disabled}
85
85
  {...attributes}
86
+ type="button"
86
87
  bind:this={element}
87
88
  onfocus={(event) => {
88
89
  focused = true
89
- ;(onfocus as FocusEventHandler<HTMLButtonElement>)?.(event)
90
+ onfocus?.(event)
90
91
  }}
91
92
  onblur={(event) => {
92
93
  focused = false
93
- ;(onblur as FocusEventHandler<HTMLButtonElement>)?.(event)
94
+ onblur?.(event)
94
95
  }}
95
96
  {disabled}
96
97
  class={[
@@ -102,7 +103,7 @@
102
103
  >
103
104
  {@render content()}
104
105
  </button>
105
- {:else if attributes.type === 'link'}
106
+ {:else if type === 'link'}
106
107
  <a
107
108
  {...attributes}
108
109
  bind:this={element}
@@ -111,11 +112,11 @@
111
112
  role="link"
112
113
  onfocus={(event) => {
113
114
  focused = true
114
- ;(onfocus as FocusEventHandler<HTMLAnchorElement>)?.(event)
115
+ onfocus?.(event)
115
116
  }}
116
117
  onblur={(event) => {
117
118
  focused = false
118
- ;(onblur as FocusEventHandler<HTMLAnchorElement>)?.(event)
119
+ onblur?.(event)
119
120
  }}
120
121
  class={[
121
122
  'np-card-container',
@@ -1,6 +1,7 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { HTMLAnchorAttributes, HTMLAttributes, HTMLButtonAttributes } from 'svelte/elements';
3
- interface TextProps extends HTMLAttributes<HTMLDivElement> {
3
+ export type CardElement = HTMLDivElement | HTMLButtonElement | HTMLAnchorElement;
4
+ export interface CardProps extends HTMLAttributes<CardElement>, Omit<HTMLButtonAttributes, keyof HTMLAttributes<HTMLButtonElement> | 'type'>, Omit<HTMLAnchorAttributes, keyof HTMLAttributes<HTMLAnchorElement> | 'type'> {
4
5
  variant?: 'elevated' | 'filled' | 'outlined';
5
6
  disabled?: boolean;
6
7
  image?: string | null;
@@ -9,29 +10,5 @@ interface TextProps extends HTMLAttributes<HTMLDivElement> {
9
10
  subhead?: string | null;
10
11
  supportingText?: string | null;
11
12
  action?: Snippet<[]>;
12
- type: 'text';
13
+ type: 'text' | 'button' | 'link';
13
14
  }
14
- interface ButtonProps extends HTMLButtonAttributes {
15
- variant?: 'elevated' | 'filled' | 'outlined';
16
- disabled?: boolean;
17
- image?: string | null;
18
- element?: HTMLElement;
19
- headline?: string | null;
20
- subhead?: string | null;
21
- supportingText?: string | null;
22
- action?: Snippet<[]>;
23
- type: 'button';
24
- }
25
- interface AnchorProps extends HTMLAnchorAttributes {
26
- variant?: 'elevated' | 'filled' | 'outlined';
27
- disabled?: boolean;
28
- image?: string | null;
29
- element?: HTMLElement;
30
- headline?: string | null;
31
- subhead?: string | null;
32
- supportingText?: string | null;
33
- action?: Snippet<[]>;
34
- type: 'link';
35
- }
36
- export type CardProps = TextProps | ButtonProps | AnchorProps;
37
- export {};
@@ -1,23 +1,16 @@
1
+ import type { ButtonElement, ButtonProps } from '../button/types.ts';
1
2
  import type { Snippet } from 'svelte';
2
- import type { HTMLAnchorAttributes, HTMLAttributes, HTMLButtonAttributes } from 'svelte/elements';
3
+ import type { HTMLAttributes, MouseEventHandler } from 'svelte/elements';
3
4
  export interface ChipSetProps extends HTMLAttributes<HTMLDivElement> {
4
5
  chipsCount?: number;
5
6
  }
6
- interface AssistChipButtonProps extends HTMLButtonAttributes {
7
+ export interface AssistChipProps extends Omit<ButtonProps, 'variant' | 'start' | 'end' | 'element'> {
7
8
  elevated?: boolean;
8
9
  disabled?: boolean;
9
10
  label?: string;
10
11
  icon?: Snippet;
11
12
  element?: HTMLDivElement;
12
13
  }
13
- interface AssistChipAnchorProps extends HTMLAnchorAttributes {
14
- elevated?: boolean;
15
- disabled?: boolean;
16
- label?: string;
17
- icon?: Snippet;
18
- element?: HTMLDivElement;
19
- }
20
- export type AssistChipProps = AssistChipButtonProps | AssistChipAnchorProps;
21
14
  export interface FilterChipProps extends HTMLAttributes<HTMLDivElement> {
22
15
  selected?: boolean;
23
16
  removable?: boolean;
@@ -31,9 +24,7 @@ export interface FilterChipProps extends HTMLAttributes<HTMLDivElement> {
31
24
  value?: string;
32
25
  group?: (string | number)[] | null;
33
26
  defaultSelected?: boolean | null;
34
- onremove?: (event: MouseEvent & {
35
- currentTarget: EventTarget & HTMLButtonElement;
36
- }) => void;
27
+ onremove?: MouseEventHandler<ButtonElement>;
37
28
  }
38
29
  export interface InputChipProps extends HTMLAttributes<HTMLDivElement> {
39
30
  selected?: boolean;
@@ -44,9 +35,7 @@ export interface InputChipProps extends HTMLAttributes<HTMLDivElement> {
44
35
  element?: HTMLDivElement;
45
36
  name?: string;
46
37
  value?: string | number;
47
- onremove?: (event: MouseEvent & {
48
- currentTarget: EventTarget & HTMLButtonElement;
49
- }) => void;
38
+ onremove?: MouseEventHandler<ButtonElement>;
50
39
  }
51
40
  export interface ChipSetContext {
52
41
  chips: {
@@ -55,4 +44,3 @@ export interface ChipSetContext {
55
44
  value: string | number | undefined;
56
45
  }[];
57
46
  }
58
- export {};
@@ -4,8 +4,6 @@
4
4
 
5
5
  let {
6
6
  element = $bindable(),
7
- showPopover = $bindable(),
8
- hidePopover = $bindable(),
9
7
  quick = false,
10
8
  children,
11
9
  headline,
@@ -18,11 +16,11 @@
18
16
 
19
17
  const uid = $props.id()
20
18
 
21
- showPopover = () => {
19
+ export function showPopover() {
22
20
  element?.showPopover()
23
21
  }
24
22
 
25
- hidePopover = () => {
23
+ export function hidePopover() {
26
24
  element?.hidePopover()
27
25
  }
28
26
  </script>
@@ -1,4 +1,7 @@
1
1
  import type { DialogProps } from './types.ts';
2
- declare const Dialog: import("svelte").Component<DialogProps, {}, "element" | "showPopover" | "hidePopover">;
2
+ declare const Dialog: import("svelte").Component<DialogProps, {
3
+ showPopover: () => void;
4
+ hidePopover: () => void;
5
+ }, "element">;
3
6
  type Dialog = ReturnType<typeof Dialog>;
4
7
  export default Dialog;
@@ -8,6 +8,4 @@ export interface DialogProps extends Omit<HTMLAttributes<HTMLDivElement>, 'popov
8
8
  actions?: Snippet;
9
9
  quick?: boolean;
10
10
  element?: HTMLElement;
11
- showPopover?: () => void;
12
- hidePopover?: () => void;
13
11
  }
@@ -47,4 +47,4 @@
47
47
  writing-mode: horizontal-tb;
48
48
  position: relative;
49
49
  }
50
- </style>
50
+ </style>
@@ -1,7 +1,6 @@
1
1
  <script lang="ts">
2
2
  import Ripple from '../ripple/Ripple.svelte'
3
3
  import { onMount } from 'svelte'
4
- import type { FocusEventHandler } from 'svelte/elements'
5
4
  import type { ItemProps } from './types.ts'
6
5
 
7
6
  let {
@@ -86,11 +85,11 @@
86
85
  type={attributes.type ?? 'button'}
87
86
  onfocus={(event) => {
88
87
  focused = true
89
- ;(onfocus as FocusEventHandler<HTMLButtonElement>)?.(event)
88
+ onfocus?.(event)
90
89
  }}
91
90
  onblur={(event) => {
92
91
  focused = false
93
- ;(onblur as FocusEventHandler<HTMLButtonElement>)?.(event)
92
+ onblur?.(event)
94
93
  }}
95
94
  class={['np-item', selected && 'selected', attributes.class]}
96
95
  bind:this={element}
@@ -105,11 +104,11 @@
105
104
  {...attributes}
106
105
  onfocus={(event) => {
107
106
  focused = true
108
- ;(onfocus as FocusEventHandler<HTMLAnchorElement>)?.(event)
107
+ onfocus?.(event)
109
108
  }}
110
109
  onblur={(event) => {
111
110
  focused = false
112
- ;(onblur as FocusEventHandler<HTMLAnchorElement>)?.(event)
111
+ onblur?.(event)
113
112
  }}
114
113
  class={['np-item', selected && 'selected', attributes.class]}
115
114
  bind:this={element}
@@ -1,4 +1,3 @@
1
- import type { ListItemProps } from './types.ts';
2
- declare const ListItem: import("svelte").Component<ListItemProps, {}, "">;
1
+ declare const ListItem: import("svelte").Component<import("./types.ts").ItemProps, {}, "">;
3
2
  type ListItem = ReturnType<typeof ListItem>;
4
3
  export default ListItem;
@@ -1,37 +1,18 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { HTMLAnchorAttributes, HTMLAttributes, HTMLButtonAttributes } from 'svelte/elements';
3
- interface ButtonProps extends HTMLButtonAttributes {
4
- selected?: boolean;
5
- start?: Snippet;
6
- end?: Snippet;
7
- variant: 'button';
8
- supportingText?: Snippet;
9
- softFocus?: boolean;
10
- lazy?: boolean;
11
- }
12
- interface AnchorProps extends HTMLAnchorAttributes {
13
- selected?: boolean;
14
- start?: Snippet;
15
- end?: Snippet;
16
- disabled?: boolean;
17
- variant: 'link';
18
- supportingText?: Snippet;
19
- softFocus?: boolean;
20
- lazy?: boolean;
21
- }
22
- interface TextProps extends HTMLAttributes<HTMLDivElement> {
3
+ export type ItemElement = HTMLButtonElement | HTMLAnchorElement | HTMLDivElement;
4
+ export interface ItemProps extends HTMLAttributes<ItemElement>, Omit<HTMLButtonAttributes, keyof HTMLAttributes<HTMLButtonElement> | 'type'>, Omit<HTMLAnchorAttributes, keyof HTMLAttributes<HTMLAnchorElement> | 'type'> {
23
5
  selected?: boolean;
24
6
  start?: Snippet;
25
7
  end?: Snippet;
26
8
  disabled?: boolean;
27
- variant?: 'text';
9
+ variant?: 'button' | 'link' | 'text';
28
10
  supportingText?: Snippet;
29
11
  softFocus?: boolean;
30
12
  lazy?: boolean;
13
+ type?: 'submit' | 'reset' | 'button' | null;
31
14
  }
32
- export type ItemProps = ButtonProps | AnchorProps | TextProps;
33
- export type ListItemProps = ButtonProps | AnchorProps | TextProps;
15
+ export type ListItemProps = ItemProps;
34
16
  export interface ListProps extends HTMLAttributes<HTMLUListElement> {
35
17
  element?: HTMLUListElement;
36
18
  }
37
- export {};
@@ -5,8 +5,6 @@
5
5
  let {
6
6
  children,
7
7
  element = $bindable(),
8
- showPopover = $bindable(),
9
- hidePopover = $bindable(),
10
8
  open = $bindable(),
11
9
  style,
12
10
  popover = 'auto',
@@ -19,11 +17,11 @@
19
17
  let clientHeight = $state(0)
20
18
  let innerHeight = $state(0)
21
19
 
22
- showPopover = () => {
20
+ export function showPopover() {
23
21
  element?.showPopover()
24
22
  }
25
23
 
26
- hidePopover = () => {
24
+ export function hidePopover() {
27
25
  element?.hidePopover()
28
26
  }
29
27
  const refreshValues = () => {
@@ -1,4 +1,7 @@
1
1
  import type { MenuProps } from './types.ts';
2
- declare const Menu: import("svelte").Component<MenuProps, {}, "element" | "showPopover" | "hidePopover" | "open">;
2
+ declare const Menu: import("svelte").Component<MenuProps, {
3
+ showPopover: () => void;
4
+ hidePopover: () => void;
5
+ }, "element" | "open">;
3
6
  type Menu = ReturnType<typeof Menu>;
4
7
  export default Menu;
@@ -1,20 +1,15 @@
1
1
  <script lang="ts">
2
2
  import Item from '../list/Item.svelte'
3
- import type { HTMLAnchorAttributes, HTMLButtonAttributes } from 'svelte/elements'
4
3
  import type { MenuItemProps } from './types.ts'
5
4
 
6
5
  let { ...attributes }: MenuItemProps = $props()
7
-
8
- const isButton = (obj: unknown): obj is HTMLButtonAttributes => {
9
- return (obj as HTMLAnchorAttributes).href === undefined
10
- }
11
6
  </script>
12
7
 
13
8
  <li class="np-menu-item" role="menuitem">
14
- {#if isButton(attributes)}
15
- <Item {...attributes} variant="button" />
16
- {:else}
9
+ {#if 'href' in attributes}
17
10
  <Item {...attributes} variant="link" />
11
+ {:else}
12
+ <Item {...attributes} variant="button" />
18
13
  {/if}
19
14
  </li>
20
15
 
@@ -1,27 +1,10 @@
1
+ import type { ItemProps } from '../list/types.ts';
1
2
  import type { Snippet } from 'svelte';
2
- import type { HTMLAnchorAttributes, HTMLAttributes, HTMLButtonAttributes } from 'svelte/elements';
3
+ import type { HTMLAttributes } from 'svelte/elements';
3
4
  export interface MenuProps extends HTMLAttributes<HTMLDivElement> {
4
5
  children: Snippet;
5
6
  anchor?: HTMLElement | undefined;
6
- showPopover?: () => void;
7
- hidePopover?: () => void;
8
7
  element?: HTMLDivElement;
9
8
  open?: boolean;
10
9
  }
11
- interface ButtonProps extends HTMLButtonAttributes {
12
- selected?: boolean;
13
- start?: Snippet;
14
- end?: Snippet;
15
- supportingText?: Snippet;
16
- lazy?: boolean;
17
- }
18
- interface AnchorProps extends HTMLAnchorAttributes {
19
- selected?: boolean;
20
- start?: Snippet;
21
- end?: Snippet;
22
- disabled?: boolean;
23
- supportingText?: Snippet;
24
- lazy?: boolean;
25
- }
26
- export type MenuItemProps = ButtonProps | AnchorProps;
27
- export {};
10
+ export type MenuItemProps = Omit<ItemProps, 'variant' | 'softFocus'>;
@@ -6,17 +6,11 @@ export interface NavigationDrawerProps extends HTMLAttributes<HTMLElement> {
6
6
  element?: HTMLElement;
7
7
  direction?: 'rtl' | 'ltr';
8
8
  }
9
- interface NavigationDrawerItemButton extends HTMLButtonAttributes {
9
+ export type NavigationDrawerItemElement = HTMLButtonElement | HTMLAnchorElement;
10
+ export interface NavigationDrawerItemProps extends HTMLAttributes<NavigationDrawerItemElement>, Omit<HTMLButtonAttributes, keyof HTMLAttributes<HTMLButtonElement> | 'type'>, Omit<HTMLAnchorAttributes, keyof HTMLAttributes<HTMLAnchorElement> | 'type'> {
10
11
  icon?: Snippet;
11
12
  label: string;
12
13
  selected?: boolean;
13
14
  badgeLabelText?: string;
15
+ type?: 'submit' | 'reset' | 'button' | (string & {}) | null;
14
16
  }
15
- interface NavigationDrawerItemLink extends HTMLAnchorAttributes {
16
- icon?: Snippet;
17
- label: string;
18
- selected?: boolean;
19
- badgeLabelText?: string;
20
- }
21
- export type NavigationDrawerItemProps = NavigationDrawerItemButton | NavigationDrawerItemLink;
22
- export {};
@@ -1,15 +1,10 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { HTMLAnchorAttributes, HTMLAttributes, HTMLButtonAttributes } from 'svelte/elements';
3
3
  export type NavigationRailProps = HTMLAttributes<HTMLElement>;
4
- interface NavigationRailItemButton extends HTMLButtonAttributes {
4
+ export type NavigationRailItemElement = HTMLButtonElement | HTMLAnchorElement;
5
+ export interface NavigationRailItemProps extends HTMLAttributes<NavigationRailItemElement>, Omit<HTMLButtonAttributes, keyof HTMLAttributes<HTMLButtonElement> | 'type'>, Omit<HTMLAnchorAttributes, keyof HTMLAttributes<HTMLAnchorElement> | 'type'> {
5
6
  icon: Snippet;
6
7
  label: string;
7
8
  selected?: boolean;
9
+ type?: 'submit' | 'reset' | 'button' | (string & {}) | null;
8
10
  }
9
- interface NavigationRailItemLink extends HTMLAnchorAttributes {
10
- icon: Snippet;
11
- label: string;
12
- selected?: boolean;
13
- }
14
- export type NavigationRailItemProps = NavigationRailItemButton | NavigationRailItemLink;
15
- export {};
@@ -12,8 +12,6 @@
12
12
  onIconClick = () => {
13
13
  element?.hidePopover()
14
14
  },
15
- showPopover = $bindable(),
16
- hidePopover = $bindable(),
17
15
  open = $bindable(false),
18
16
  onbeforetoggle,
19
17
  timeout = 4000,
@@ -25,11 +23,11 @@
25
23
  let timeoutId: number | undefined = $state()
26
24
  const uid = $props.id()
27
25
 
28
- showPopover = () => {
26
+ export function showPopover() {
29
27
  element?.showPopover()
30
28
  }
31
29
 
32
- hidePopover = () => {
30
+ export function hidePopover() {
33
31
  element?.hidePopover()
34
32
  }
35
33
  </script>
@@ -1,4 +1,7 @@
1
1
  import type { SnackbarProps } from './types.ts';
2
- declare const Snackbar: import("svelte").Component<SnackbarProps, {}, "element" | "showPopover" | "hidePopover" | "open">;
2
+ declare const Snackbar: import("svelte").Component<SnackbarProps, {
3
+ showPopover: () => void;
4
+ hidePopover: () => void;
5
+ }, "element" | "open">;
3
6
  type Snackbar = ReturnType<typeof Snackbar>;
4
7
  export default Snackbar;
@@ -8,8 +8,6 @@ export interface SnackbarProps extends HTMLAttributes<HTMLDivElement> {
8
8
  onActionClick?: (event: Event) => void;
9
9
  icon?: Snippet | undefined;
10
10
  onIconClick?: (event: Event) => void;
11
- showPopover?: () => void;
12
- hidePopover?: () => void;
13
11
  timeout?: number;
14
12
  element?: HTMLElement;
15
13
  popover?: 'auto' | 'manual';
@@ -107,8 +107,7 @@
107
107
  bind:value
108
108
  bind:this={inputElement}
109
109
  class="input"
110
- rows={attributes.rows || 2}
111
- ></textarea>
110
+ rows={attributes.rows || 2}></textarea>
112
111
  {:else}
113
112
  <div class="input-wrapper">
114
113
  {#if suffixText}
@@ -1,5 +1,5 @@
1
1
  import type { Snippet } from 'svelte';
2
- import type { HTMLInputAttributes, HTMLTextareaAttributes } from 'svelte/elements';
2
+ import type { HTMLAttributes, HTMLInputAttributes, HTMLTextareaAttributes } from 'svelte/elements';
3
3
  interface FieldProps {
4
4
  label?: string;
5
5
  supportingText?: string;
@@ -19,11 +19,16 @@ interface FieldProps {
19
19
  clientHeight?: number;
20
20
  focused?: boolean;
21
21
  }
22
+ export type TextFieldType = 'text' | 'password' | 'email' | 'number' | 'search' | 'tel' | 'url' | 'datetime-local' | 'date' | 'datetime' | 'time';
23
+ export type TextFieldElement = HTMLInputElement | HTMLTextAreaElement;
22
24
  export interface InputFieldProps extends HTMLInputAttributes, FieldProps {
23
- type?: 'text' | 'password' | 'email' | 'number' | 'search' | 'tel' | 'url' | 'datetime-local' | 'date' | 'datetime' | 'time';
25
+ type?: TextFieldType;
24
26
  }
25
27
  export interface TextAreaFieldProps extends HTMLTextareaAttributes, FieldProps {
26
28
  type: 'textarea';
27
29
  }
28
- export type TextFieldProps = InputFieldProps | TextAreaFieldProps;
30
+ export interface TextFieldProps extends HTMLAttributes<TextFieldElement>, Omit<HTMLInputAttributes, keyof HTMLAttributes<HTMLInputElement> | 'type' | 'value' | 'defaultValue' | 'defaultvalue'>, Omit<HTMLTextareaAttributes, keyof HTMLAttributes<HTMLTextAreaElement> | 'value' | 'defaultValue' | 'defaultvalue'>, FieldProps {
31
+ type?: TextFieldType | 'textarea';
32
+ value?: string;
33
+ }
29
34
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "noph-ui",
3
- "version": "0.33.4",
3
+ "version": "0.34.0",
4
4
  "license": "MIT",
5
5
  "homepage": "https://noph.dev",
6
6
  "repository": {
@@ -10,6 +10,10 @@
10
10
  "author": {
11
11
  "name": "cnolte"
12
12
  },
13
+ "imports": {
14
+ "#lib": "./src/lib/index.js",
15
+ "#lib/*": "./src/lib/*"
16
+ },
13
17
  "keywords": [
14
18
  "svelte",
15
19
  "svelte 5",
@@ -71,27 +75,28 @@
71
75
  "devDependencies": {
72
76
  "@eslint/js": "^10.0.1",
73
77
  "@materialx/material-color-utilities": "^0.4.8",
74
- "@playwright/test": "^1.59.1",
75
- "@sveltejs/adapter-auto": "^7.0.1",
76
- "@sveltejs/kit": "^2.57.1",
77
- "@sveltejs/package": "^2.5.7",
78
- "@sveltejs/vite-plugin-svelte": "^7.0.0",
78
+ "@playwright/test": "^1.61.1",
79
+ "@sveltejs/adapter-vercel": "7.0.0-next.2",
80
+ "@sveltejs/kit": "3.0.0-next.11",
81
+ "@sveltejs/package": "3.0.0-next.3",
82
+ "@sveltejs/vite-plugin-svelte": "7.2.0",
79
83
  "@types/eslint": "^9.6.1",
80
- "eslint": "^10.2.1",
84
+ "eslint": "^10.7.0",
81
85
  "eslint-config-prettier": "^10.1.8",
82
- "eslint-plugin-svelte": "^3.17.1",
83
- "globals": "^17.5.0",
84
- "prettier": "^3.8.3",
85
- "prettier-plugin-svelte": "^3.5.1",
86
- "publint": "^0.3.18",
87
- "svelte": "^5.55.4",
88
- "svelte-check": "^4.4.6",
86
+ "eslint-plugin-svelte": "^3.22.0",
87
+ "globals": "^17.7.0",
88
+ "prettier": "^3.9.6",
89
+ "prettier-plugin-svelte": "^4.1.1",
90
+ "publint": "^0.3.21",
91
+ "svelte": "^5.56.7",
92
+ "svelte-check": "^4.7.3",
89
93
  "typescript": "^6.0.3",
90
- "typescript-eslint": "^8.59.0",
91
- "vite": "8.0.10",
92
- "vitest": "^4.1.5"
94
+ "typescript-eslint": "^8.65.0",
95
+ "vite": "8.1.5",
96
+ "vitest": "^4.1.10"
93
97
  },
94
98
  "svelte": "./dist/index.js",
95
99
  "types": "./dist/index.d.ts",
96
- "type": "module"
100
+ "type": "module",
101
+ "packageManager": "pnpm@11.9.0"
97
102
  }