lapikit 0.7.2 → 0.7.4

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.
Files changed (73) hide show
  1. package/dist/@types/components.d.ts +1 -7
  2. package/dist/@types/dom.d.ts +4 -3
  3. package/dist/@types/props.d.ts +3 -3
  4. package/dist/animations/ripple.js +33 -17
  5. package/dist/components/accordion/accordion.svelte +192 -228
  6. package/dist/components/accordion/accordion.types.d.ts +5 -7
  7. package/dist/components/accordion/modules/accordion-item.svelte +144 -140
  8. package/dist/components/alert/alert.svelte +246 -293
  9. package/dist/components/alert/alert.types.d.ts +5 -5
  10. package/dist/components/app/app.svelte +29 -44
  11. package/dist/components/appbar/appbar.svelte +205 -190
  12. package/dist/components/appbar/appbar.types.d.ts +6 -6
  13. package/dist/components/aspect-ratio/aspect-ratio.svelte +43 -63
  14. package/dist/components/avatar/avatar.svelte +169 -161
  15. package/dist/components/avatar/avatar.types.d.ts +3 -4
  16. package/dist/components/btn/btn.svelte +431 -465
  17. package/dist/components/btn/btn.types.d.ts +5 -6
  18. package/dist/components/card/card.svelte +214 -176
  19. package/dist/components/card/card.types.d.ts +6 -3
  20. package/dist/components/card/modules/card-actions.svelte +11 -35
  21. package/dist/components/card/modules/card-container.svelte +9 -33
  22. package/dist/components/card/modules/card-content.svelte +18 -44
  23. package/dist/components/card/modules/card-media.svelte +10 -34
  24. package/dist/components/card/modules/card-title.svelte +22 -48
  25. package/dist/components/chip/chip.svelte +416 -464
  26. package/dist/components/chip/chip.types.d.ts +5 -5
  27. package/dist/components/dialog/dialog.svelte +174 -171
  28. package/dist/components/dialog/dialog.types.d.ts +6 -6
  29. package/dist/components/dropdown/dropdown.svelte +149 -144
  30. package/dist/components/dropdown/dropdown.types.d.ts +4 -11
  31. package/dist/components/field/field.svelte +474 -0
  32. package/dist/components/field/field.svelte.d.ts +4 -0
  33. package/dist/components/field/field.types.d.ts +46 -0
  34. package/dist/components/field/field.types.js +1 -0
  35. package/dist/components/icon/icon.svelte +67 -96
  36. package/dist/components/icon/icon.types.d.ts +2 -1
  37. package/dist/components/index.d.ts +2 -0
  38. package/dist/components/index.js +1 -0
  39. package/dist/components/list/list.svelte +193 -194
  40. package/dist/components/list/list.types.d.ts +5 -7
  41. package/dist/components/list/modules/list-item.svelte +134 -147
  42. package/dist/components/modal/modal.svelte +239 -222
  43. package/dist/components/modal/modal.types.d.ts +6 -6
  44. package/dist/components/popover/popover.svelte +125 -127
  45. package/dist/components/popover/popover.types.d.ts +4 -11
  46. package/dist/components/separator/separator.svelte +56 -87
  47. package/dist/components/separator/separator.types.d.ts +1 -1
  48. package/dist/components/spacer/spacer.svelte +6 -25
  49. package/dist/components/textfield/textfield.svelte +94 -543
  50. package/dist/components/textfield/textfield.types.d.ts +13 -33
  51. package/dist/components/toolbar/toolbar.svelte +216 -211
  52. package/dist/components/toolbar/toolbar.types.d.ts +8 -9
  53. package/dist/components/tooltip/tooltip.svelte +201 -266
  54. package/dist/components/tooltip/tooltip.types.d.ts +3 -10
  55. package/dist/constants.js +1 -0
  56. package/dist/html-mapped.d.ts +1 -15
  57. package/dist/html-mapped.js +0 -19
  58. package/dist/labs/sheet/sheet.svelte +145 -19
  59. package/dist/labs/sheet/sheet.svelte.d.ts +2 -10
  60. package/dist/labs/sheet/sheet.types.d.ts +16 -0
  61. package/dist/labs/sheet/sheet.types.js +1 -0
  62. package/dist/utils/color.d.ts +2 -2
  63. package/dist/utils/color.js +2 -1
  64. package/dist/utils/components.d.ts +10 -10
  65. package/dist/utils/components.js +16 -75
  66. package/dist/utils/floating.d.ts +58 -0
  67. package/dist/utils/floating.js +131 -0
  68. package/dist/utils/index.d.ts +1 -0
  69. package/dist/utils/index.js +1 -0
  70. package/package.json +3 -3
  71. package/dist/components/dropdown/dropdown.svelte.js +0 -148
  72. package/dist/components/popover/popover.svelte.js +0 -134
  73. package/dist/components/tooltip/tooltip.svelte.js +0 -131
@@ -1,6 +1,6 @@
1
1
  import type { Snippet } from 'svelte';
2
- import type { Component, DensityType, RoundedType, SizeType } from '../../@types';
3
- export type ListVariant = 'filled' | 'outline' | 'text';
2
+ import type { ColorProps, Component, RoundedType, SizeType } from '../../@types';
3
+ export type ListVariant = 'filled' | 'tonal' | 'outline' | 'surface' | 'text' | 'plain';
4
4
  export type ListElement = 'div' | 'nav' | 'ul';
5
5
  export type ListItemElement = 'div' | 'a' | 'button' | 'li';
6
6
  export interface ListProps extends Component {
@@ -8,11 +8,10 @@ export interface ListProps extends Component {
8
8
  is?: ListElement;
9
9
  size?: SizeType;
10
10
  variant?: ListVariant;
11
- density?: DensityType;
11
+ density?: 'dense' | 'compact' | 'default' | 'comfortable' | 'spacious';
12
12
  rounded?: RoundedType | 'full';
13
13
  nav?: boolean;
14
- color?: string;
15
- background?: string;
14
+ color?: string | false;
16
15
  }
17
16
  export interface ListItemProps extends Component {
18
17
  ref?: HTMLElement | null;
@@ -20,8 +19,7 @@ export interface ListItemProps extends Component {
20
19
  href?: string;
21
20
  append?: Snippet;
22
21
  prepend?: Snippet;
23
- color?: string;
24
- background?: string;
22
+ color?: ColorProps;
25
23
  interactive?: boolean;
26
24
  active?: boolean;
27
25
  disabled?: boolean;
@@ -1,191 +1,178 @@
1
1
  <script lang="ts">
2
2
  import { ripple } from '../../../animations';
3
- import { makeComponentProps } from '../../../html-mapped';
4
- import { useClassName, useIsInteractive, useStyles } from '../../../utils';
3
+ import { useComponentAttrs, useIsInteractive } from '../../../utils';
5
4
  import type { ListItemProps } from '../list.types.js';
6
5
 
7
6
  let {
8
7
  ref = $bindable(),
9
8
  is = 'div',
10
9
  children = undefined,
11
- class: className = '',
12
- style: styleAttr = '',
10
+ class: className,
11
+ style: styleAttr,
13
12
  's-class': sClass,
14
13
  's-style': sStyle,
15
14
  append = undefined,
16
15
  prepend = undefined,
17
16
  href = undefined,
18
17
  color = undefined,
19
- background = undefined,
20
- interactive = false,
18
+ interactive,
21
19
  active = false,
22
20
  disabled = false,
23
21
  noRipple = false,
24
22
  ...rest
25
23
  }: ListItemProps = $props();
26
24
 
27
- let { classProps, styleProps, restProps } = $derived(
28
- makeComponentProps(rest as Record<string, unknown>)
25
+ let attrs = $derived(
26
+ useComponentAttrs(
27
+ 'kit-list-item',
28
+ { className, sClass, styleAttr, sStyle, color, active },
29
+ rest
30
+ )
29
31
  );
30
-
31
- let tag = $derived(href ? 'a' : is === 'div' && restProps.onclick ? 'button' : is);
32
- // let isInteractive = $derived(tag !== 'div' && tag !== 'li' && !disabled);
33
- let isInteractive = $derived(useIsInteractive(rest, tag, ['a', 'button'], interactive));
34
-
35
- let componentClass = $derived(
36
- useClassName({
37
- baseClass: 'kit-list-item',
38
- className: `${className ?? ''}`.trim(),
39
- sClass,
40
- classProps
41
- })
42
- );
43
-
44
- let componentStyle = $derived(
45
- useStyles({
46
- styleAttr,
47
- sStyle,
48
- styleProps
49
- })
50
- );
51
-
52
- let resolvedStyle = $derived(
53
- [
54
- componentStyle,
55
- color ? `--kit-list-item-fg:${color && `var(--kit-color-${color})`}` : '',
56
- background ? `--kit-list-item-bg:${background && `var(--kit-color-${background})`}` : ''
57
- ]
58
- .filter(Boolean)
59
- .join('; ')
32
+ let tag = $derived(
33
+ href ? 'a' : is === 'div' && typeof attrs.rest.onclick === 'function' ? 'button' : is
60
34
  );
35
+ let isInteractive = $derived(interactive ?? useIsInteractive(rest, tag, ['a', 'button']));
61
36
  </script>
62
37
 
63
38
  <svelte:element
64
39
  this={tag}
65
40
  bind:this={ref}
66
- class={componentClass}
67
- style={resolvedStyle}
41
+ class={attrs.class}
42
+ style={attrs.style}
68
43
  href={href && !disabled ? href : undefined}
69
- data-active={active}
70
- data-disabled={disabled}
71
- aria-disabled={disabled || undefined}
44
+ type={tag === 'button' ? 'button' : undefined}
72
45
  disabled={tag === 'button' ? disabled : undefined}
73
46
  tabindex={href && disabled ? -1 : undefined}
74
47
  role={tag === 'div' ? 'listitem' : undefined}
75
- data-append={append && true}
76
- data-prepend={prepend && true}
48
+ data-active={active}
49
+ data-disabled={disabled}
77
50
  data-interactive={isInteractive}
51
+ aria-disabled={disabled || undefined}
78
52
  use:ripple={{
79
53
  component: 'list-item',
80
- disabled: noRipple || !isInteractive
54
+ disabled: noRipple || disabled || !isInteractive
81
55
  }}
82
- {...restProps}
56
+ {...attrs.rest}
83
57
  >
84
58
  {#if prepend}
85
- <span class="kit-list-item__prepend">
86
- {@render prepend?.()}
87
- </span>
59
+ <span class="kit-list-item__prepend">{@render prepend()}</span>
88
60
  {/if}
89
61
 
90
- <span class="kit-list-item__content">
91
- {@render children?.()}
92
- </span>
62
+ <span class="kit-list-item__content">{@render children?.()}</span>
93
63
 
94
64
  {#if append}
95
- <span class="kit-list-item__append">
96
- {@render append?.()}
97
- </span>
65
+ <span class="kit-list-item__append">{@render append()}</span>
98
66
  {/if}
99
67
  </svelte:element>
100
68
 
101
- <style>
102
- .kit-list-item {
103
- width: 100%;
104
- min-height: calc(var(--kit-list-item-h) + var(--kit-list-density-offset) / 2);
105
- position: relative;
106
- display: grid;
107
- grid-template-columns: 1fr;
108
- align-items: center;
109
- gap: var(--kit-list-item-gap);
110
- /* border-radius: var(--kit-list-item-radius); */
111
- border: 0;
112
- background: var(--kit-list-item-bg);
113
- color: var(--kit-list-item-fg);
114
- text-decoration: none;
115
- font-size: var(--kit-list-item-font);
116
- }
117
-
118
- .kit-list-item .kit-list-item__prepend,
119
- .kit-list-item:not([data-prepend='true']) .kit-list-item__content {
120
- margin-left: calc(var(--kit-list-item-p) + var(--kit-list-density-offset) / 2);
121
- }
122
- .kit-list-item .kit-list-item__append,
123
- .kit-list-item:not([data-append='true']) .kit-list-item__content {
124
- margin-right: calc(var(--kit-list-item-p) + var(--kit-list-density-offset) / 2);
125
- }
126
- .kit-list-item:not([data-prepend='true']):not([data-append='true']) .kit-list-item__content {
127
- margin-left: calc(var(--kit-list-item-p) + var(--kit-list-density-offset) / 2);
128
- margin-right: calc(var(--kit-list-item-p) + var(--kit-list-density-offset) / 2);
129
- }
130
-
131
- .kit-list-item[data-prepend='true']:not([data-append='true']) {
132
- grid-template-columns: auto minmax(0, 1fr);
133
- }
134
- .kit-list-item[data-append='true']:not([data-prepend='true']) {
135
- grid-template-columns: minmax(0, 1fr) auto;
136
- }
137
- .kit-list-item[data-append='true'][data-prepend='true'] {
138
- grid-template-columns: auto minmax(0, 1fr) auto;
139
- }
140
-
141
- a.kit-list-item {
142
- text-decoration: none;
143
- }
144
-
145
- button.kit-list-item {
146
- appearance: none;
147
- border: 0;
148
- font: inherit;
149
- text-align: inherit;
150
- }
151
-
152
- .kit-list-item[data-interactive='true'][data-disabled='false'] {
153
- cursor: pointer;
154
- }
155
-
156
- .kit-list-item[data-interactive='true'][data-disabled='false']:hover {
157
- background: var(--kit-list-item-hover-bg);
158
- }
159
- .kit-list-item[data-active='true'][data-disabled='false'] {
160
- translate: 0 0;
161
- background: var(--kit-list-item-active-bg);
162
- }
163
- .kit-list-item[data-interactive='true'][data-disabled='false']:active {
164
- translate: 0 0;
165
- background: var(--kit-list-item-active-bg);
166
- }
167
-
168
- .kit-list-item[data-interactive='true'][data-disabled='false']:focus-visible {
169
- outline: 2px solid var(--kit-color-focus);
170
- outline-offset: 2px;
171
- }
172
-
173
- .kit-list-item[data-disabled='true'] {
174
- opacity: var(--kit-disabled-opacity, 0.55);
175
- pointer-events: none;
176
- }
177
-
178
- .kit-list-item__prepend,
179
- .kit-list-item__append,
180
- .kit-list-item__content {
181
- display: inline-flex;
182
- align-items: center;
183
- min-width: 0;
184
- }
185
-
186
- .kit-list-item__content {
187
- overflow: hidden;
188
- text-overflow: ellipsis;
189
- white-space: nowrap;
190
- }
191
- </style>
69
+ <style>:where(.kit-list-item) {
70
+ --kit-list-item-color: initial;
71
+ --kit-list-item-on-color: initial;
72
+ --kit-list-item-active-fg: initial;
73
+ --kit-list-item-active-shade: initial;
74
+ --kit-list-item-hover-fg: initial;
75
+ --kit-list-item-pressed-fg: initial;
76
+ --kit-list-item-bg: var(--kit-list-item-color, var(--kit-color-surface-2));
77
+ --kit-list-item-fg: var(--kit-list-item-on-color, var(--kit-list-item-contrast, var(--kit-color-text)));
78
+ --kit-list-item-ink: var(--kit-list-item-color, var(--kit-color-text));
79
+ --kit-list-item-hover: color-mix(in oklab, var(--kit-list-item-bg), var(--kit-list-item-fg) 8%);
80
+ --kit-list-item-pressed: color-mix(in oklab, var(--kit-list-item-bg), var(--kit-list-item-fg) 14%);
81
+ --kit-list-item-soft: color-mix(in oklab, var(--kit-list-item-bg) 16%, transparent);
82
+ --kit-list-item-border: color-mix(in oklab, var(--kit-list-item-bg), var(--kit-list-item-fg) 20%);
83
+ --kit-list-item-active: color-mix(
84
+ in oklab,
85
+ var(--kit-list-item-color),
86
+ var(--kit-list-item-fg) var(--kit-list-item-active-shade, 14%)
87
+ );
88
+ }
89
+ @supports (color: color(from red srgb-linear r g b)) {
90
+ :where(.kit-list-item) {
91
+ --kit-list-item-contrast: color(from var(--kit-list-item-color) srgb-linear clamp(0, (0.1791 - (0.2126 * r + 0.7152 * g + 0.0722 * b)) * 100000, 1) clamp(0, (0.1791 - (0.2126 * r + 0.7152 * g + 0.0722 * b)) * 100000, 1) clamp(0, (0.1791 - (0.2126 * r + 0.7152 * g + 0.0722 * b)) * 100000, 1)/1);
92
+ }
93
+ }
94
+ :where(.kit-list-item) {
95
+ --kit-list-item-color: var(--kit-list-color);
96
+ --kit-list-item-on-color: var(--kit-list-on-color);
97
+ }
98
+
99
+ .kit-list-item {
100
+ position: relative;
101
+ display: flex;
102
+ align-items: center;
103
+ gap: var(--kit-list-item-gap);
104
+ box-sizing: border-box;
105
+ width: 100%;
106
+ min-height: calc(var(--kit-list-item-h) + var(--kit-list-density-offset) / 2);
107
+ padding-inline: calc(var(--kit-list-item-p) + var(--kit-list-density-offset) / 2);
108
+ border: 0;
109
+ background-color: var(--kit-list-item-bg);
110
+ color: var(--kit-list-item-fg);
111
+ font-size: var(--kit-list-item-font);
112
+ text-decoration: none;
113
+ transition-property: background-color, color;
114
+ transition-duration: var(--kit-animation-component);
115
+ transition-timing-function: ease;
116
+ }
117
+ @media (prefers-reduced-motion: reduce) {
118
+ .kit-list-item {
119
+ transition: none;
120
+ }
121
+ }
122
+
123
+ a.kit-list-item {
124
+ text-decoration: none;
125
+ }
126
+
127
+ button.kit-list-item {
128
+ appearance: none;
129
+ font: inherit;
130
+ text-align: inherit;
131
+ }
132
+
133
+ .kit-list-item__prepend,
134
+ .kit-list-item__append,
135
+ .kit-list-item__content {
136
+ display: inline-flex;
137
+ flex: none;
138
+ align-items: center;
139
+ min-width: 0;
140
+ }
141
+
142
+ .kit-list-item__content {
143
+ flex: 1;
144
+ overflow: hidden;
145
+ text-overflow: ellipsis;
146
+ white-space: nowrap;
147
+ }
148
+
149
+ .kit-list-item[data-active=true] {
150
+ --kit-list-item-bg: var(--kit-list-item-active, var(--kit-color-accent));
151
+ --kit-list-item-fg: var(
152
+ --kit-list-item-active-fg,
153
+ var(--kit-list-item-on-color, var(--kit-list-item-contrast, var(--kit-color-on-accent)))
154
+ );
155
+ }
156
+
157
+ .kit-list-item[data-interactive=true]:not([data-disabled=true]) {
158
+ cursor: pointer;
159
+ }
160
+ .kit-list-item[data-interactive=true]:not([data-disabled=true]):hover {
161
+ background-color: var(--kit-list-item-hover);
162
+ color: var(--kit-list-item-hover-fg, var(--kit-list-item-fg));
163
+ }
164
+ .kit-list-item[data-interactive=true]:not([data-disabled=true]):active {
165
+ background-color: var(--kit-list-item-pressed);
166
+ color: var(--kit-list-item-pressed-fg, var(--kit-list-item-fg));
167
+ }
168
+
169
+ .kit-list-item:not([data-disabled=true]):focus-visible {
170
+ outline: 2px solid var(--kit-color-focus);
171
+ outline-offset: 2px;
172
+ }
173
+
174
+ .kit-list-item[data-disabled=true] {
175
+ opacity: var(--kit-disabled-opacity, 0.55);
176
+ pointer-events: none;
177
+ user-select: none;
178
+ }</style>