lapikit 0.5.9 → 0.6.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.
Files changed (234) hide show
  1. package/dist/@types/actions.d.ts +6 -0
  2. package/dist/@types/index.d.ts +1 -0
  3. package/dist/@types/index.js +1 -0
  4. package/dist/@types/props.d.ts +1 -0
  5. package/dist/actions.d.ts +2 -0
  6. package/dist/actions.js +2 -0
  7. package/dist/animations/ripple.d.ts +1 -1
  8. package/dist/animations/ripple.js +36 -23
  9. package/dist/components/app/app.svelte +122 -8
  10. package/dist/components/card/card.svelte +49 -96
  11. package/dist/components/card/card.types.d.ts +22 -2
  12. package/dist/components/card/modules/card-actions.svelte +53 -0
  13. package/dist/components/card/modules/card-actions.svelte.d.ts +4 -0
  14. package/dist/components/card/modules/card-container.svelte +51 -0
  15. package/dist/components/card/modules/card-container.svelte.d.ts +4 -0
  16. package/dist/components/card/modules/card-content.svelte +56 -0
  17. package/dist/components/card/modules/card-content.svelte.d.ts +4 -0
  18. package/dist/components/card/modules/card-media.svelte +52 -0
  19. package/dist/components/card/modules/card-media.svelte.d.ts +4 -0
  20. package/dist/components/card/modules/card-title.svelte +56 -0
  21. package/dist/components/card/modules/card-title.svelte.d.ts +4 -0
  22. package/dist/components/dialog/dialog.svelte +1 -2
  23. package/dist/components/index.d.ts +5 -0
  24. package/dist/components/index.js +5 -0
  25. package/dist/{@legacy/stores/components.d.ts → components/modal/modal.d.ts} +1 -2
  26. package/dist/{@legacy/stores/components.js → components/modal/modal.js} +1 -1
  27. package/dist/components/modal/modal.svelte +1 -1
  28. package/dist/components/textfield/textfield.svelte.d.ts +1 -1
  29. package/dist/constants.d.ts +2 -2
  30. package/dist/constants.js +8 -3
  31. package/dist/utils/components.d.ts +1 -0
  32. package/dist/utils/components.js +16 -0
  33. package/dist/utils/outside.d.ts +1 -0
  34. package/dist/utils/outside.js +5 -0
  35. package/dist/{@legacy/stores → utils}/themes.d.ts +1 -0
  36. package/dist/{@legacy/actions/use-theme.js → utils/themes.js} +4 -1
  37. package/package.json +11 -32
  38. package/dist/@legacy/actions/accordion.svelte.d.ts +0 -9
  39. package/dist/@legacy/actions/index.d.ts +0 -2
  40. package/dist/@legacy/actions/index.js +0 -2
  41. package/dist/@legacy/actions/use-theme.d.ts +0 -1
  42. package/dist/@legacy/assets/icons/arrow-down.svelte +0 -12
  43. package/dist/@legacy/assets/icons/arrow-down.svelte.d.ts +0 -18
  44. package/dist/@legacy/assets/icons/arrow-up.svelte +0 -12
  45. package/dist/@legacy/assets/icons/arrow-up.svelte.d.ts +0 -18
  46. package/dist/@legacy/assets/icons/close-fill.svelte +0 -12
  47. package/dist/@legacy/assets/icons/close-fill.svelte.d.ts +0 -18
  48. package/dist/@legacy/assets/icons/loading-fill.svelte +0 -31
  49. package/dist/@legacy/assets/icons/loading-fill.svelte.d.ts +0 -18
  50. package/dist/@legacy/components/accordion/accordion.css +0 -36
  51. package/dist/@legacy/components/accordion/accordion.svelte +0 -39
  52. package/dist/@legacy/components/accordion/accordion.svelte.d.ts +0 -4
  53. package/dist/@legacy/components/accordion/modules/accordion-item.css +0 -68
  54. package/dist/@legacy/components/accordion/modules/accordion-item.svelte +0 -94
  55. package/dist/@legacy/components/accordion/modules/accordion-item.svelte.d.ts +0 -4
  56. package/dist/@legacy/components/accordion/types.d.ts +0 -33
  57. package/dist/@legacy/components/alert/alert.css +0 -130
  58. package/dist/@legacy/components/alert/alert.svelte +0 -89
  59. package/dist/@legacy/components/alert/alert.svelte.d.ts +0 -4
  60. package/dist/@legacy/components/alert/types.d.ts +0 -28
  61. package/dist/@legacy/components/alert/types.js +0 -1
  62. package/dist/@legacy/components/app/app.css +0 -26
  63. package/dist/@legacy/components/app/app.svelte +0 -79
  64. package/dist/@legacy/components/app/app.svelte.d.ts +0 -4
  65. package/dist/@legacy/components/app/types.d.ts +0 -10
  66. package/dist/@legacy/components/app/types.js +0 -1
  67. package/dist/@legacy/components/appbar/appbar.css +0 -38
  68. package/dist/@legacy/components/appbar/appbar.svelte +0 -40
  69. package/dist/@legacy/components/appbar/appbar.svelte.d.ts +0 -4
  70. package/dist/@legacy/components/appbar/types.d.ts +0 -15
  71. package/dist/@legacy/components/appbar/types.js +0 -1
  72. package/dist/@legacy/components/aspect-ratio/aspect-ratio.css +0 -19
  73. package/dist/@legacy/components/aspect-ratio/aspect-ratio.svelte +0 -25
  74. package/dist/@legacy/components/aspect-ratio/aspect-ratio.svelte.d.ts +0 -4
  75. package/dist/@legacy/components/aspect-ratio/types.d.ts +0 -5
  76. package/dist/@legacy/components/aspect-ratio/types.js +0 -1
  77. package/dist/@legacy/components/avatar/avatar.css +0 -102
  78. package/dist/@legacy/components/avatar/avatar.svelte +0 -46
  79. package/dist/@legacy/components/avatar/avatar.svelte.d.ts +0 -4
  80. package/dist/@legacy/components/avatar/types.d.ts +0 -22
  81. package/dist/@legacy/components/avatar/types.js +0 -1
  82. package/dist/@legacy/components/button/button.css +0 -240
  83. package/dist/@legacy/components/button/button.svelte +0 -102
  84. package/dist/@legacy/components/button/button.svelte.d.ts +0 -4
  85. package/dist/@legacy/components/button/types.d.ts +0 -29
  86. package/dist/@legacy/components/button/types.js +0 -1
  87. package/dist/@legacy/components/card/card.css +0 -105
  88. package/dist/@legacy/components/card/card.svelte +0 -67
  89. package/dist/@legacy/components/card/card.svelte.d.ts +0 -4
  90. package/dist/@legacy/components/card/types.d.ts +0 -20
  91. package/dist/@legacy/components/card/types.js +0 -1
  92. package/dist/@legacy/components/chip/chip.css +0 -224
  93. package/dist/@legacy/components/chip/chip.svelte +0 -131
  94. package/dist/@legacy/components/chip/chip.svelte.d.ts +0 -4
  95. package/dist/@legacy/components/chip/types.d.ts +0 -32
  96. package/dist/@legacy/components/chip/types.js +0 -1
  97. package/dist/@legacy/components/dialog/dialog.css +0 -129
  98. package/dist/@legacy/components/dialog/dialog.svelte +0 -67
  99. package/dist/@legacy/components/dialog/dialog.svelte.d.ts +0 -4
  100. package/dist/@legacy/components/dialog/types.d.ts +0 -24
  101. package/dist/@legacy/components/dialog/types.js +0 -1
  102. package/dist/@legacy/components/dropdown/dropdown.css +0 -13
  103. package/dist/@legacy/components/dropdown/dropdown.svelte +0 -115
  104. package/dist/@legacy/components/dropdown/dropdown.svelte.d.ts +0 -4
  105. package/dist/@legacy/components/dropdown/types.d.ts +0 -26
  106. package/dist/@legacy/components/dropdown/types.js +0 -1
  107. package/dist/@legacy/components/icon/icon.css +0 -78
  108. package/dist/@legacy/components/icon/icon.svelte +0 -49
  109. package/dist/@legacy/components/icon/icon.svelte.d.ts +0 -4
  110. package/dist/@legacy/components/icon/types.d.ts +0 -16
  111. package/dist/@legacy/components/icon/types.js +0 -1
  112. package/dist/@legacy/components/index.d.ts +0 -22
  113. package/dist/@legacy/components/index.js +0 -23
  114. package/dist/@legacy/components/list/list.css +0 -149
  115. package/dist/@legacy/components/list/list.svelte +0 -44
  116. package/dist/@legacy/components/list/list.svelte.d.ts +0 -4
  117. package/dist/@legacy/components/list/modules/list-item.css +0 -67
  118. package/dist/@legacy/components/list/modules/list-item.svelte +0 -76
  119. package/dist/@legacy/components/list/modules/list-item.svelte.d.ts +0 -4
  120. package/dist/@legacy/components/list/types.d.ts +0 -33
  121. package/dist/@legacy/components/list/types.js +0 -1
  122. package/dist/@legacy/components/modal/modal.css +0 -137
  123. package/dist/@legacy/components/modal/modal.svelte +0 -118
  124. package/dist/@legacy/components/modal/modal.svelte.d.ts +0 -4
  125. package/dist/@legacy/components/modal/types.d.ts +0 -26
  126. package/dist/@legacy/components/modal/types.js +0 -1
  127. package/dist/@legacy/components/popover/popover.css +0 -13
  128. package/dist/@legacy/components/popover/popover.svelte +0 -73
  129. package/dist/@legacy/components/popover/popover.svelte.d.ts +0 -4
  130. package/dist/@legacy/components/popover/types.d.ts +0 -20
  131. package/dist/@legacy/components/popover/types.js +0 -1
  132. package/dist/@legacy/components/separator/separator.css +0 -42
  133. package/dist/@legacy/components/separator/separator.svelte +0 -37
  134. package/dist/@legacy/components/separator/separator.svelte.d.ts +0 -4
  135. package/dist/@legacy/components/separator/types.d.ts +0 -15
  136. package/dist/@legacy/components/separator/types.js +0 -1
  137. package/dist/@legacy/components/spacer/spacer.css +0 -3
  138. package/dist/@legacy/components/spacer/spacer.svelte +0 -7
  139. package/dist/@legacy/components/spacer/spacer.svelte.d.ts +0 -4
  140. package/dist/@legacy/components/spacer/types.d.ts +0 -4
  141. package/dist/@legacy/components/spacer/types.js +0 -1
  142. package/dist/@legacy/components/textfield/textfield.css +0 -298
  143. package/dist/@legacy/components/textfield/textfield.svelte +0 -193
  144. package/dist/@legacy/components/textfield/textfield.svelte.d.ts +0 -4
  145. package/dist/@legacy/components/textfield/types.d.ts +0 -37
  146. package/dist/@legacy/components/textfield/types.js +0 -1
  147. package/dist/@legacy/components/toolbar/toolbar.css +0 -106
  148. package/dist/@legacy/components/toolbar/toolbar.svelte +0 -47
  149. package/dist/@legacy/components/toolbar/toolbar.svelte.d.ts +0 -4
  150. package/dist/@legacy/components/toolbar/types.d.ts +0 -27
  151. package/dist/@legacy/components/toolbar/types.js +0 -1
  152. package/dist/@legacy/components/tooltip/tooltip.css +0 -116
  153. package/dist/@legacy/components/tooltip/tooltip.svelte +0 -113
  154. package/dist/@legacy/components/tooltip/tooltip.svelte.d.ts +0 -4
  155. package/dist/@legacy/components/tooltip/types.d.ts +0 -23
  156. package/dist/@legacy/components/tooltip/types.js +0 -1
  157. package/dist/@legacy/index.d.ts +0 -3
  158. package/dist/@legacy/index.js +0 -24
  159. package/dist/@legacy/internal/config/presets.d.ts +0 -149
  160. package/dist/@legacy/internal/config/presets.js +0 -169
  161. package/dist/@legacy/internal/config/variables.d.ts +0 -3
  162. package/dist/@legacy/internal/config/variables.js +0 -3
  163. package/dist/@legacy/internal/core/actions/assets.svelte.d.ts +0 -8
  164. package/dist/@legacy/internal/core/actions/assets.svelte.js +0 -54
  165. package/dist/@legacy/internal/core/actions/dropdown.svelte.d.ts +0 -7
  166. package/dist/@legacy/internal/core/actions/dropdown.svelte.js +0 -148
  167. package/dist/@legacy/internal/core/actions/popover.svelte.d.ts +0 -7
  168. package/dist/@legacy/internal/core/actions/popover.svelte.js +0 -134
  169. package/dist/@legacy/internal/core/actions/tooltip.svelte.d.ts +0 -7
  170. package/dist/@legacy/internal/core/actions/tooltip.svelte.js +0 -131
  171. package/dist/@legacy/internal/core/animations/ripple.d.ts +0 -12
  172. package/dist/@legacy/internal/core/animations/ripple.js +0 -96
  173. package/dist/@legacy/internal/core/bin/ansi.d.ts +0 -40
  174. package/dist/@legacy/internal/core/bin/ansi.js +0 -44
  175. package/dist/@legacy/internal/core/bin/terminal.d.ts +0 -1
  176. package/dist/@legacy/internal/core/bin/terminal.js +0 -12
  177. package/dist/@legacy/internal/core/css.d.ts +0 -1
  178. package/dist/@legacy/internal/core/css.js +0 -16
  179. package/dist/@legacy/internal/core/formatter/component.d.ts +0 -5
  180. package/dist/@legacy/internal/core/formatter/component.js +0 -60
  181. package/dist/@legacy/internal/core/formatter/device.d.ts +0 -5
  182. package/dist/@legacy/internal/core/formatter/device.js +0 -66
  183. package/dist/@legacy/internal/core/formatter/index.d.ts +0 -7
  184. package/dist/@legacy/internal/core/formatter/index.js +0 -35
  185. package/dist/@legacy/internal/core/formatter/style.d.ts +0 -4
  186. package/dist/@legacy/internal/core/formatter/style.js +0 -15
  187. package/dist/@legacy/internal/core/formatter/theme.d.ts +0 -5
  188. package/dist/@legacy/internal/core/formatter/theme.js +0 -44
  189. package/dist/@legacy/internal/core/formatter/typography.d.ts +0 -5
  190. package/dist/@legacy/internal/core/formatter/typography.js +0 -12
  191. package/dist/@legacy/internal/core/minify.d.ts +0 -1
  192. package/dist/@legacy/internal/core/minify.js +0 -10
  193. package/dist/@legacy/internal/core/standard-colors.d.ts +0 -75
  194. package/dist/@legacy/internal/core/standard-colors.js +0 -75
  195. package/dist/@legacy/internal/core/x11-colors.d.ts +0 -4
  196. package/dist/@legacy/internal/core/x11-colors.js +0 -151
  197. package/dist/@legacy/internal/helpers/colors.d.ts +0 -1
  198. package/dist/@legacy/internal/helpers/colors.js +0 -50
  199. package/dist/@legacy/internal/helpers/convert.d.ts +0 -1
  200. package/dist/@legacy/internal/helpers/convert.js +0 -17
  201. package/dist/@legacy/internal/helpers/deep-merge.d.ts +0 -44
  202. package/dist/@legacy/internal/helpers/deep-merge.js +0 -80
  203. package/dist/@legacy/internal/helpers/outside.d.ts +0 -9
  204. package/dist/@legacy/internal/helpers/outside.js +0 -34
  205. package/dist/@legacy/internal/helpers/parser.d.ts +0 -10
  206. package/dist/@legacy/internal/helpers/parser.js +0 -93
  207. package/dist/@legacy/internal/helpers/scroll.d.ts +0 -1
  208. package/dist/@legacy/internal/helpers/scroll.js +0 -5
  209. package/dist/@legacy/internal/plugins/vite.d.ts +0 -8
  210. package/dist/@legacy/internal/plugins/vite.js +0 -33
  211. package/dist/@legacy/internal/types/components.d.ts +0 -14
  212. package/dist/@legacy/internal/types/components.js +0 -1
  213. package/dist/@legacy/internal/types/configuration.d.ts +0 -63
  214. package/dist/@legacy/internal/types/configuration.js +0 -1
  215. package/dist/@legacy/internal/types/index.d.ts +0 -2
  216. package/dist/@legacy/internal/types/index.js +0 -2
  217. package/dist/@legacy/stores/breakpoints.d.ts +0 -6
  218. package/dist/@legacy/stores/breakpoints.js +0 -14
  219. package/dist/@legacy/stores/devices.d.ts +0 -6
  220. package/dist/@legacy/stores/devices.js +0 -9
  221. package/dist/@legacy/stores/index.d.ts +0 -5
  222. package/dist/@legacy/stores/index.js +0 -5
  223. package/dist/@legacy/stores/themes.js +0 -4
  224. package/dist/@legacy/stores/viewport.d.ts +0 -7
  225. package/dist/@legacy/stores/viewport.js +0 -7
  226. package/dist/@legacy/styles/animation.css +0 -33
  227. package/dist/@legacy/styles/keyframes.css +0 -30
  228. package/dist/@legacy/styles/reset.css +0 -133
  229. package/dist/@legacy/styles.css +0 -0
  230. package/dist/@legacy/styles.css.d.ts +0 -4
  231. package/dist/@legacy/themes.css +0 -0
  232. package/dist/@legacy/themes.css.d.ts +0 -4
  233. /package/dist/{@legacy/components/accordion/types.js → @types/actions.js} +0 -0
  234. /package/dist/{@legacy/actions → components/accordion}/accordion.svelte.js +0 -0
@@ -0,0 +1,6 @@
1
+ export type AccordionOptions = {
2
+ multiple?: boolean;
3
+ readOnly?: boolean;
4
+ };
5
+ /**Modal */
6
+ export type ModalState = boolean | 'persistent';
@@ -4,3 +4,4 @@ export * from './props.js';
4
4
  export * from './events.js';
5
5
  export * from './animations.js';
6
6
  export * from './core.js';
7
+ export * from './actions.js';
@@ -4,3 +4,4 @@ export * from './props.js';
4
4
  export * from './events.js';
5
5
  export * from './animations.js';
6
6
  export * from './core.js';
7
+ export * from './actions.js';
@@ -1,3 +1,4 @@
1
1
  export type PropValue = string | boolean | number | null | undefined;
2
2
  export type SizeType = 'default' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
3
3
  export type RoundedType = 0 | '0' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
+ export type DensityType = 'none' | 'compact' | 'default' | 'comfortable';
@@ -0,0 +1,2 @@
1
+ export * from './utils/themes.js';
2
+ export * from './components/accordion/accordion.svelte.js';
@@ -0,0 +1,2 @@
1
+ export * from './utils/themes.js';
2
+ export * from './components/accordion/accordion.svelte.js';
@@ -1,4 +1,4 @@
1
- import type { RippleProps } from '../utils/types';
1
+ import type { RippleProps } from '../@types';
2
2
  export declare function ripple(el: HTMLElement, options?: RippleProps): {
3
3
  destroy(): void;
4
4
  update(newOptions: RippleProps): void;
@@ -1,7 +1,17 @@
1
1
  const triggerEvents = ['pointerdown', 'touchstart', 'keydown'];
2
2
  const cancelEvents = ['mouseleave', 'dragleave', 'touchmove', 'touchcancel', 'pointerup', 'keyup'];
3
+ function resolveDuration(options) {
4
+ return options.duration && options.duration > 0 ? options.duration : undefined;
5
+ }
6
+ function getCoords(e) {
7
+ if (window.TouchEvent && e instanceof TouchEvent) {
8
+ return { x: e.touches[0].clientX, y: e.touches[0].clientY };
9
+ }
10
+ return { x: e.clientX, y: e.clientY };
11
+ }
3
12
  export function ripple(el, options = {}) {
4
13
  const rippleContainer = document.createElement('div');
14
+ const activeRipples = new Set();
5
15
  addClasses();
6
16
  setOptions(options);
7
17
  function isAriaDisabled() {
@@ -19,24 +29,22 @@ export function ripple(el, options = {}) {
19
29
  rippleContainer.classList.add('kit-ripple--center');
20
30
  }
21
31
  }
22
- function setOptions(options) {
23
- if (options.disabled || isAriaDisabled()) {
32
+ function setOptions(newOptions) {
33
+ if (newOptions.disabled || isAriaDisabled()) {
24
34
  rippleContainer.remove();
25
35
  }
26
36
  else {
27
37
  el.appendChild(rippleContainer);
28
38
  }
29
- if (options.duration && options.duration < 0) {
30
- options.duration = undefined;
39
+ if (newOptions.component) {
40
+ rippleContainer.style.setProperty('--system-ripple-radius', `var(--kit-${newOptions.component}-radius)`);
31
41
  }
32
- if (options.component) {
33
- rippleContainer.style.setProperty('--system-ripple-radius', `var(--${options.component}-shape)`);
42
+ if (newOptions.color) {
43
+ rippleContainer.style.setProperty('--system-ripple-color', newOptions.color);
34
44
  }
35
- if (options.color) {
36
- rippleContainer.style.setProperty('--system-ripple-color', options.color);
37
- }
38
- if (options.duration) {
39
- rippleContainer.style.setProperty('--system-animation-ripple-duration', `${options.duration}ms`);
45
+ const duration = resolveDuration(newOptions);
46
+ if (duration) {
47
+ rippleContainer.style.setProperty('--system-animation-ripple-duration', `${duration}ms`);
40
48
  }
41
49
  }
42
50
  function createRipple(e, center) {
@@ -54,12 +62,7 @@ export function ripple(el, options = {}) {
54
62
  }
55
63
  addClasses(center);
56
64
  const rect = el.getBoundingClientRect();
57
- const clientX = window.TouchEvent && e instanceof TouchEvent
58
- ? e.touches[0].clientX
59
- : e.clientX;
60
- const clientY = window.TouchEvent && e instanceof TouchEvent
61
- ? e.touches[0].clientY
62
- : e.clientY;
65
+ const { x: clientX, y: clientY } = getCoords(e);
63
66
  const x = clientX - rect.left > el.offsetWidth / 2 ? 0 : el.offsetWidth;
64
67
  const y = clientY - rect.top > el.offsetHeight / 2 ? 0 : el.offsetHeight;
65
68
  const radius = Math.hypot(x - (clientX - rect.left), y - (clientY - rect.top));
@@ -69,16 +72,23 @@ export function ripple(el, options = {}) {
69
72
  ripple.style.top = `${clientY - rect.top - radius}px`;
70
73
  ripple.style.width = ripple.style.height = `${radius * 2}px`;
71
74
  rippleContainer.appendChild(ripple);
72
- function removeRipple() {
73
- if (ripple === null) {
74
- return;
75
+ let timeoutId;
76
+ function cleanup() {
77
+ if (timeoutId) {
78
+ clearTimeout(timeoutId);
75
79
  }
80
+ cancelEvents.forEach((event) => el.removeEventListener(event, removeRipple));
81
+ ripple.remove();
82
+ }
83
+ function removeRipple() {
76
84
  ripple.style.opacity = '0';
77
- setTimeout(() => {
78
- ripple.remove();
79
- }, options.duration || 1000);
80
85
  cancelEvents.forEach((event) => el.removeEventListener(event, removeRipple));
86
+ timeoutId = setTimeout(() => {
87
+ ripple.remove();
88
+ activeRipples.delete(cleanup);
89
+ }, resolveDuration(options) || 1000);
81
90
  }
91
+ activeRipples.add(cleanup);
82
92
  cancelEvents.forEach((event) => el.addEventListener(event, removeRipple, { passive: true }));
83
93
  }
84
94
  triggerEvents.forEach((event) => el.addEventListener(event, createRipple, { passive: event === 'touchstart' }));
@@ -87,6 +97,9 @@ export function ripple(el, options = {}) {
87
97
  triggerEvents.forEach((event) => {
88
98
  el.removeEventListener(event, createRipple);
89
99
  });
100
+ activeRipples.forEach((cleanup) => cleanup());
101
+ activeRipples.clear();
102
+ rippleContainer.remove();
90
103
  },
91
104
  update(newOptions) {
92
105
  options = newOptions;
@@ -10,6 +10,7 @@
10
10
  .kit-application {
11
11
  color-scheme: light;
12
12
 
13
+ /* Hue vars — used by components for dynamic semantic color calculations */
13
14
  --kit-h-neutral: 220;
14
15
  --kit-h-success: 145;
15
16
  --kit-h-warning: 35;
@@ -28,19 +29,135 @@
28
29
 
29
30
  --kit-accent: hsl(220 90% 56%);
30
31
 
32
+ --kit-focus: hsl(35, 90%, 56%);
33
+
34
+ /* Layout */
31
35
  --kit-radius-1: 8px;
32
36
  --kit-radius-2: 12px;
33
37
  --kit-space-1: 6px;
34
38
  --kit-space-2: 10px;
35
39
  --kit-space-3: 14px;
36
-
37
- --kit-focus: hsl(35, 90%, 56%);
38
-
39
40
  --kit-disabled-opacity: 0.55;
40
-
41
41
  --kit-font:
42
42
  ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
43
43
  'Segoe UI Symbol', 'Noto Color Emoji';
44
+
45
+ /* ─── Color tokens (light mode defaults) ─────────────────────────── */
46
+
47
+ /* Backgrounds */
48
+ --kit-color-bg: hsl(0 0% 100%);
49
+ --kit-color-bg-secondary: hsl(240 15% 96.5%);
50
+ --kit-color-bg-tertiary: hsl(240 10% 93%);
51
+
52
+ /* Surfaces — elevated layers (cards, sheets, popovers) */
53
+ --kit-color-surface: hsl(0 0% 100%);
54
+ --kit-color-surface-raised: hsl(0 0% 100%);
55
+
56
+ /* Labels — text hierarchy */
57
+ --kit-color-label: hsl(222 20% 10%);
58
+ --kit-color-label-secondary: hsl(220 10% 40%);
59
+ --kit-color-label-tertiary: hsl(220 8% 58%);
60
+ --kit-color-label-quaternary: hsl(220 5% 76%);
61
+
62
+ /* Fills — control & input backgrounds */
63
+ --kit-color-fill: hsl(240 4% 91%);
64
+ --kit-color-fill-secondary: hsl(240 8% 93%);
65
+ --kit-color-fill-tertiary: hsl(240 11% 95%);
66
+
67
+ /* Separator */
68
+ --kit-color-separator: hsl(220 16% 88%);
69
+
70
+ /* Semantic */
71
+ --kit-color-accent: hsl(220 90% 56%);
72
+ --kit-color-success: hsl(145 50% 38%);
73
+ --kit-color-warning: hsl(35 80% 45%);
74
+ --kit-color-danger: hsl(5 65% 48%);
75
+ --kit-color-info: hsl(205 60% 42%);
76
+ --kit-color-focus: hsl(35 90% 56%);
77
+
78
+ /* ─── Backward-compat aliases (removed once components are updated) ─ */
79
+ /* --kit-bg: var(--kit-color-bg);
80
+ --kit-fg: var(--kit-color-label);
81
+ --kit-muted: var(--kit-color-label-tertiary);
82
+ --kit-surface-1: var(--kit-color-surface);
83
+ --kit-surface-2: var(--kit-color-bg-secondary);
84
+ --kit-surface-3: var(--kit-color-bg-tertiary);
85
+ --kit-border: var(--kit-color-separator);
86
+ --kit-accent: var(--kit-color-accent);
87
+ --kit-focus: var(--kit-color-focus); */
88
+ }
89
+
90
+ .kit-application {
91
+ --kit-shape-none: 0;
92
+ --kit-shape-xs: 4px;
93
+ --kit-shape-sm: 6px;
94
+ --kit-shape-md: 10px;
95
+ --kit-shape-lg: 14px;
96
+ --kit-shape-xl: 18px;
97
+
98
+ --kit-space-compact: 6px;
99
+ --kit-space-default: 10px;
100
+ --kit-space-comfortable: 14px;
101
+ }
102
+
103
+ /* Light — explicit override (same values as defaults, forces color-scheme) */
104
+ .light {
105
+ color-scheme: light;
106
+
107
+ --kit-color-bg: hsl(0 0% 100%);
108
+ --kit-color-bg-secondary: hsl(240 15% 96.5%);
109
+ --kit-color-bg-tertiary: hsl(240 10% 93%);
110
+
111
+ --kit-color-surface: hsl(0 0% 100%);
112
+ --kit-color-surface-raised: hsl(0 0% 100%);
113
+
114
+ --kit-color-label: hsl(222 20% 10%);
115
+ --kit-color-label-secondary: hsl(220 10% 40%);
116
+ --kit-color-label-tertiary: hsl(220 8% 58%);
117
+ --kit-color-label-quaternary: hsl(220 5% 76%);
118
+
119
+ --kit-color-fill: hsl(240 4% 91%);
120
+ --kit-color-fill-secondary: hsl(240 8% 93%);
121
+ --kit-color-fill-tertiary: hsl(240 11% 95%);
122
+
123
+ --kit-color-separator: hsl(220 16% 88%);
124
+
125
+ --kit-color-accent: hsl(220 90% 56%);
126
+ --kit-color-success: hsl(145 50% 38%);
127
+ --kit-color-warning: hsl(35 80% 45%);
128
+ --kit-color-danger: hsl(5 65% 48%);
129
+ --kit-color-info: hsl(205 60% 42%);
130
+ --kit-color-focus: hsl(35 90% 56%);
131
+ }
132
+
133
+ /* Dark */
134
+ .dark {
135
+ color-scheme: dark;
136
+
137
+ --kit-color-bg: hsl(240 3% 11%);
138
+ --kit-color-bg-secondary: hsl(240 2% 17.5%);
139
+ --kit-color-bg-tertiary: hsl(240 1.5% 23%);
140
+
141
+ --kit-color-surface: hsl(240 2% 19%);
142
+ --kit-color-surface-raised: hsl(240 1.5% 25%);
143
+
144
+ --kit-color-label: hsl(0 0% 100%);
145
+ --kit-color-label-secondary: hsl(240 3% 56%);
146
+ --kit-color-label-tertiary: hsl(240 2.5% 38%);
147
+ --kit-color-label-quaternary: hsl(240 1.5% 25%);
148
+
149
+ --kit-color-fill: hsl(240 2.5% 28%);
150
+ --kit-color-fill-secondary: hsl(240 2.5% 24%);
151
+ --kit-color-fill-tertiary: hsl(240 2% 20%);
152
+
153
+ --kit-color-separator: hsl(240 2% 26%);
154
+
155
+ --kit-color-accent: hsl(220 85% 65%);
156
+ --kit-color-success: hsl(145 50% 50%);
157
+ --kit-color-warning: hsl(35 85% 58%);
158
+ --kit-color-danger: hsl(5 70% 60%);
159
+ --kit-color-info: hsl(205 65% 58%);
160
+ --kit-color-focus: hsl(35 90% 62%);
44
161
  }
45
162
 
46
163
  :global(.outline) {
@@ -59,13 +176,10 @@
59
176
  position: absolute;
60
177
  border-radius: 50%;
61
178
  pointer-events: none;
62
- -webkit-transition: 0.6s;
63
179
  transition: 0.6s;
64
- -webkit-animation: animation-l-ripple var(--system-animation-ripple-duration, 0.4s)
65
- cubic-bezier(0.4, 0, 0.2, 1);
66
180
  animation: animation-l-ripple var(--system-animation-ripple-duration, 0.4s)
67
181
  cubic-bezier(0.4, 0, 0.2, 1);
68
- border-radius: var(--system-ripple-radius);
182
+ border-radius: 50%;
69
183
  }
70
184
 
71
185
  :global(.kit-ripple--center) {
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { useClassName, useStyles } from '../../utils';
2
+ import { useClassName, useIsInteractive, useStyles } from '../../utils';
3
3
  import { makeComponentProps } from '../../html-mapped';
4
4
  import { ripple } from '../../animations';
5
5
  import type { CardProps } from './card.types.js';
@@ -21,45 +21,20 @@
21
21
  active = false,
22
22
  disabled = false,
23
23
  noRipple,
24
+ color,
25
+ background,
24
26
  ...rest
25
27
  }: CardProps = $props();
26
28
 
27
- let safeVariant = $derived(
28
- variant === 'filled' || variant === 'outline' || variant === 'text' ? variant : 'filled'
29
- );
30
-
31
- let safeDensity = $derived(
32
- density === 'compact' || density === 'default' || density === 'comfortable'
33
- ? density
34
- : 'default'
35
- );
36
-
37
- let safeIs = $derived(
38
- is === 'div' ||
39
- is === 'article' ||
40
- is === 'section' ||
41
- is === 'aside' ||
42
- is === 'a' ||
43
- is === 'button'
44
- ? is
45
- : 'article'
46
- );
47
- let tag = $derived((href && 'a') || safeIs || 'article');
48
- let hasEventHandler = $derived(
49
- typeof rest.onclick === 'function' ||
50
- typeof rest.onpointerdown === 'function' ||
51
- typeof rest.onkeydown === 'function'
52
- );
53
- let isInteractive = $derived(interactive || tag === 'a' || tag === 'button' || hasEventHandler);
29
+ let tag = $derived((href && 'a') || is);
30
+ let isInteractive = $derived(useIsInteractive(rest, tag, ['a', 'button'], interactive));
54
31
  let isDisabled = $derived(!!disabled);
55
32
  let resolvedHref = $derived(tag === 'a' && !isDisabled ? href : undefined);
56
33
  let resolvedType = $derived(tag === 'button' ? (type ?? 'button') : undefined);
57
34
  let resolvedDisabled = $derived(tag === 'button' ? isDisabled : undefined);
58
35
  let resolvedTabIndex = $derived(tag === 'a' && isDisabled ? -1 : undefined);
59
36
 
60
- let { classProps, styleProps, restProps } = $derived(
61
- makeComponentProps(rest as Record<string, unknown>)
62
- );
37
+ let { classProps, styleProps, restProps } = $derived(makeComponentProps(rest));
63
38
 
64
39
  let componentClass = $derived(
65
40
  useClassName({
@@ -88,8 +63,8 @@
88
63
  type={resolvedType}
89
64
  disabled={resolvedDisabled}
90
65
  tabindex={resolvedTabIndex}
91
- data-variant={safeVariant}
92
- data-density={safeDensity}
66
+ data-variant={variant}
67
+ data-density={density}
93
68
  data-rounded={rounded}
94
69
  data-interactive={isInteractive}
95
70
  data-active={active}
@@ -99,9 +74,11 @@
99
74
  component: 'card',
100
75
  disabled: noRipple || disabled || !isInteractive
101
76
  }}
77
+ style:--kit-card-fg={color && `var(--kit-color-${color})`}
78
+ style:--kit-card-bg={background && `var(--kit-color-${background})`}
102
79
  {...restProps}
103
80
  >
104
- {#if safeVariant === 'outline'}
81
+ {#if variant === 'outline'}
105
82
  <span class="outline"></span>
106
83
  {/if}
107
84
 
@@ -110,25 +87,15 @@
110
87
 
111
88
  <style>
112
89
  .kit-card {
113
- --kit-card-bg: var(--kit-surface-2);
114
- --kit-card-fg: var(--kit-fg);
115
- --kit-card-bd: var(--kit-border);
116
- --kit-card-radius: var(--kit-radius-2);
117
- --kit-card-padding-compact: var(--kit-space-1);
118
- --kit-card-padding-default: var(--kit-space-2);
119
- --kit-card-padding-comfortable: var(--kit-space-3);
120
- --kit-card-hover-bg: color-mix(in oklab, var(--kit-card-bg), var(--kit-card-fg) 6%);
121
- --kit-card-active-bg: color-mix(in oklab, var(--kit-card-bg), var(--kit-card-fg) 10%);
122
-
123
90
  display: flex;
91
+ position: relative;
124
92
  flex-direction: column;
125
- gap: var(--kit-space-2);
93
+ gap: var(--kit-card-gap);
126
94
  background: var(--kit-card-bg);
127
95
  color: var(--kit-card-fg);
128
- border: 0;
129
96
  border-radius: var(--kit-card-radius);
97
+ border: 0;
130
98
  box-sizing: border-box;
131
- position: relative;
132
99
  transition:
133
100
  background 140ms ease,
134
101
  color 140ms ease,
@@ -148,53 +115,72 @@
148
115
  text-align: inherit;
149
116
  }
150
117
 
118
+ /**
119
+ * rounded
120
+ * @link ...
121
+ */
151
122
  .kit-card[data-rounded='0'] {
152
- --kit-card-radius: 0;
123
+ --kit-card-radius: var(--kit-shape-none);
153
124
  }
154
125
  .kit-card[data-rounded='xs'] {
155
- --kit-card-radius: 4px;
126
+ --kit-card-radius: var(--kit-shape-xs);
156
127
  }
157
128
  .kit-card[data-rounded='sm'] {
158
- --kit-card-radius: 6px;
129
+ --kit-card-radius: var(--kit-shape-sm);
159
130
  }
160
131
  .kit-card[data-rounded='md'] {
161
- --kit-card-radius: 10px;
132
+ --kit-card-radius: var(--kit-shape-md);
162
133
  }
163
134
  .kit-card[data-rounded='lg'] {
164
- --kit-card-radius: 14px;
135
+ --kit-card-radius: var(--kit-shape-lg);
165
136
  }
166
137
  .kit-card[data-rounded='xl'] {
167
- --kit-card-radius: 18px;
138
+ --kit-card-radius: var(--kit-shape-xl);
168
139
  }
169
140
 
141
+ /**
142
+ * density
143
+ * @link https://lapikit.dev/docs/components/card#density
144
+ */
145
+ .kit-card[data-density='none'] {
146
+ padding: 0;
147
+ }
170
148
  .kit-card[data-density='compact'] {
171
- padding: var(--kit-card-padding-compact);
149
+ --kit-card-gap: var(--kit-space-compact);
150
+ padding: var(--kit-space-compact);
172
151
  }
173
152
  .kit-card[data-density='default'] {
174
- padding: var(--kit-card-padding-default);
153
+ --kit-card-gap: var(--kit-space-default);
154
+ padding: var(--kit-space-default);
175
155
  }
176
156
  .kit-card[data-density='comfortable'] {
177
- padding: var(--kit-card-padding-comfortable);
157
+ --kit-card-gap: var(--kit-space-comfortable);
158
+ padding: var(--kit-space-comfortable);
178
159
  }
179
160
 
161
+ /**
162
+ * variant
163
+ * @link https://lapikit.dev/docs/components/card#variants
164
+ */
180
165
  .kit-card[data-variant='filled'] {
181
- --kit-card-bg: var(--kit-accent);
182
- --kit-card-fg: white;
166
+ --kit-card-bg: var(--kit-color-surface);
167
+ --kit-card-fg: var(--kit-color-label);
168
+
183
169
  --kit-card-hover-bg: color-mix(in oklab, var(--kit-card-bg), black 10%);
184
170
  --kit-card-active-bg: color-mix(in oklab, var(--kit-card-bg), black 16%);
185
171
  }
186
-
187
172
  .kit-card[data-variant='outline'] {
188
173
  --kit-card-bg: transparent;
189
- --kit-card-fg: var(--kit-accent);
190
- --kit-card-bd: var(--kit-accent);
174
+ --kit-card-fg: var(--kit-color-label);
175
+ --kit-card-bd: var(--kit-card-fg);
176
+
191
177
  --kit-card-hover-bg: color-mix(in oklab, var(--kit-card-fg), transparent 80%);
192
178
  --kit-card-active-bg: color-mix(in oklab, var(--kit-card-fg), transparent 92%);
193
179
  }
194
-
195
180
  .kit-card[data-variant='text'] {
196
181
  --kit-card-bg: transparent;
197
- --kit-card-fg: var(--kit-accent);
182
+ --kit-card-fg: var(--kit-color-label);
183
+
198
184
  --kit-card-hover-bg: color-mix(in oklab, var(--kit-card-fg), transparent 80%);
199
185
  --kit-card-active-bg: color-mix(in oklab, var(--kit-card-fg), transparent 92%);
200
186
  }
@@ -238,37 +224,4 @@
238
224
  .kit-card .outline {
239
225
  --outline-color: var(--kit-card-bd);
240
226
  }
241
-
242
- .kit-card__media {
243
- overflow: hidden;
244
- border-radius: calc(var(--kit-card-radius) - 2px);
245
- }
246
-
247
- .kit-card__header {
248
- font-weight: 600;
249
- line-height: 1.3;
250
- }
251
-
252
- .kit-card__body {
253
- display: block;
254
- line-height: 1.45;
255
- }
256
-
257
- .kit-card__footer {
258
- display: flex;
259
- align-items: center;
260
- justify-content: space-between;
261
- gap: var(--kit-space-2);
262
- flex-wrap: wrap;
263
- }
264
-
265
- .kit-card__footer-content {
266
- color: var(--kit-muted);
267
- }
268
-
269
- .kit-card__actions {
270
- display: inline-flex;
271
- align-items: center;
272
- gap: var(--kit-space-1);
273
- }
274
227
  </style>
@@ -1,14 +1,34 @@
1
- import type { Component, RoundedType } from '../../@types';
1
+ import type { Component, DensityType, RoundedType } from '../../@types';
2
2
  export interface CardProps extends Component {
3
3
  ref?: HTMLElement | null;
4
4
  is?: 'div' | 'article' | 'section' | 'aside' | 'a' | 'button';
5
5
  href?: string;
6
6
  type?: 'button' | 'submit' | 'reset';
7
7
  variant?: 'filled' | 'outline' | 'text';
8
- density?: 'compact' | 'default' | 'comfortable';
8
+ density?: DensityType;
9
9
  rounded?: RoundedType;
10
10
  interactive?: boolean;
11
11
  active?: boolean;
12
12
  disabled?: boolean;
13
13
  noRipple?: boolean;
14
14
  }
15
+ export interface CardTitleProps extends Component {
16
+ ref?: HTMLElement | null;
17
+ is?: 'div' | 'p' | 'span' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
18
+ }
19
+ export interface CardContentProps extends Component {
20
+ ref?: HTMLElement | null;
21
+ is?: 'div' | 'p' | 'span' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
22
+ }
23
+ export interface CardMediaProps extends Component {
24
+ ref?: HTMLElement | null;
25
+ is?: 'div' | 'span';
26
+ }
27
+ export interface CardContainerProps extends Component {
28
+ ref?: HTMLElement | null;
29
+ is?: 'div' | 'span';
30
+ }
31
+ export interface CardActionsProps extends Component {
32
+ ref?: HTMLElement | null;
33
+ is?: 'div' | 'span';
34
+ }
@@ -0,0 +1,53 @@
1
+ <script lang="ts">
2
+ import type { CardActionsProps } from '../card.types';
3
+ import { makeComponentProps } from '../../../html-mapped';
4
+ import { useClassName, useStyles } from '../../../utils';
5
+
6
+ let {
7
+ ref = $bindable(),
8
+ is = 'div',
9
+ children,
10
+ class: className = '',
11
+ style: styleAttr = '',
12
+ 's-class': sClass,
13
+ 's-style': sStyle,
14
+ ...rest
15
+ }: CardActionsProps = $props();
16
+
17
+ let { classProps, styleProps, restProps } = $derived(makeComponentProps(rest));
18
+
19
+ let componentClass = $derived(
20
+ useClassName({
21
+ baseClass: 'kit-card-actions',
22
+ className: `${className ?? ''}`.trim(),
23
+ sClass,
24
+ classProps
25
+ })
26
+ );
27
+
28
+ let componentStyle = $derived(
29
+ useStyles({
30
+ styleAttr,
31
+ sStyle,
32
+ styleProps
33
+ })
34
+ );
35
+ </script>
36
+
37
+ <svelte:element
38
+ this={is}
39
+ bind:this={ref}
40
+ class={componentClass}
41
+ style={componentStyle}
42
+ {...restProps}
43
+ >
44
+ {@render children?.()}
45
+ </svelte:element>
46
+
47
+ <style>
48
+ .kit-card-actions {
49
+ display: inline-flex;
50
+ align-items: center;
51
+ gap: var(--kit-space-1);
52
+ }
53
+ </style>
@@ -0,0 +1,4 @@
1
+ import type { CardActionsProps } from '../card.types';
2
+ declare const CardActions: import("svelte").Component<CardActionsProps, {}, "ref">;
3
+ type CardActions = ReturnType<typeof CardActions>;
4
+ export default CardActions;