sv5ui 1.4.0 → 1.5.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 (43) hide show
  1. package/README.md +60 -183
  2. package/dist/Checkbox/Checkbox.svelte +2 -11
  3. package/dist/CheckboxGroup/CheckboxGroup.svelte +2 -11
  4. package/dist/FormField/FormField.svelte +2 -6
  5. package/dist/Input/Input.svelte +2 -10
  6. package/dist/PinInput/PinInput.svelte +2 -11
  7. package/dist/RadioGroup/RadioGroup.svelte +2 -11
  8. package/dist/Select/Select.svelte +2 -10
  9. package/dist/SelectMenu/SelectMenu.svelte +2 -10
  10. package/dist/Slider/Slider.svelte +2 -11
  11. package/dist/Switch/Switch.svelte +2 -11
  12. package/dist/Table/Table.svelte +763 -0
  13. package/dist/Table/Table.svelte.d.ts +26 -0
  14. package/dist/Table/index.d.ts +2 -0
  15. package/dist/Table/index.js +1 -0
  16. package/dist/Table/table.types.d.ts +202 -0
  17. package/dist/Table/table.types.js +1 -0
  18. package/dist/Table/table.utils.d.ts +51 -0
  19. package/dist/Table/table.utils.js +166 -0
  20. package/dist/Table/table.variants.d.ts +205 -0
  21. package/dist/Table/table.variants.js +126 -0
  22. package/dist/Textarea/Textarea.svelte +2 -10
  23. package/dist/config.d.ts +3 -0
  24. package/dist/config.js +4 -1
  25. package/dist/hooks/index.d.ts +14 -0
  26. package/dist/hooks/index.js +7 -0
  27. package/dist/hooks/useClickOutside.svelte.d.ts +31 -0
  28. package/dist/hooks/useClickOutside.svelte.js +37 -0
  29. package/dist/hooks/useClipboard.svelte.d.ts +30 -0
  30. package/dist/hooks/useClipboard.svelte.js +45 -0
  31. package/dist/hooks/useDebounce.svelte.d.ts +36 -0
  32. package/dist/hooks/useDebounce.svelte.js +56 -0
  33. package/dist/hooks/useEscapeKeydown.svelte.d.ts +31 -0
  34. package/dist/hooks/useEscapeKeydown.svelte.js +37 -0
  35. package/dist/hooks/useFormField.svelte.d.ts +21 -0
  36. package/dist/hooks/useFormField.svelte.js +17 -0
  37. package/dist/hooks/useInfiniteScroll.svelte.d.ts +57 -0
  38. package/dist/hooks/useInfiniteScroll.svelte.js +69 -0
  39. package/dist/hooks/useMediaQuery.svelte.d.ts +31 -0
  40. package/dist/hooks/useMediaQuery.svelte.js +38 -0
  41. package/dist/index.d.ts +2 -0
  42. package/dist/index.js +3 -0
  43. package/package.json +1 -1
@@ -0,0 +1,31 @@
1
+ export interface UseMediaQueryOptions {
2
+ /**
3
+ * Initial value before the media query is evaluated (SSR-safe).
4
+ * @default false
5
+ */
6
+ initialValue?: boolean;
7
+ }
8
+ export interface UseMediaQueryReturn {
9
+ /** Whether the media query currently matches */
10
+ readonly matches: boolean;
11
+ }
12
+ /**
13
+ * Reactive media query hook. Tracks whether a CSS media query matches.
14
+ *
15
+ * @example
16
+ * ```svelte
17
+ * <script>
18
+ * import { useMediaQuery } from 'sv5ui'
19
+ *
20
+ * const isMobile = useMediaQuery('(max-width: 640px)')
21
+ * const prefersDark = useMediaQuery('(prefers-color-scheme: dark)')
22
+ * </script>
23
+ *
24
+ * {#if isMobile.matches}
25
+ * <MobileLayout />
26
+ * {:else}
27
+ * <DesktopLayout />
28
+ * {/if}
29
+ * ```
30
+ */
31
+ export declare function useMediaQuery(query: string | (() => string), options?: UseMediaQueryOptions): UseMediaQueryReturn;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Reactive media query hook. Tracks whether a CSS media query matches.
3
+ *
4
+ * @example
5
+ * ```svelte
6
+ * <script>
7
+ * import { useMediaQuery } from 'sv5ui'
8
+ *
9
+ * const isMobile = useMediaQuery('(max-width: 640px)')
10
+ * const prefersDark = useMediaQuery('(prefers-color-scheme: dark)')
11
+ * </script>
12
+ *
13
+ * {#if isMobile.matches}
14
+ * <MobileLayout />
15
+ * {:else}
16
+ * <DesktopLayout />
17
+ * {/if}
18
+ * ```
19
+ */
20
+ export function useMediaQuery(query, options = {}) {
21
+ const { initialValue = false } = options;
22
+ const resolveQuery = typeof query === 'function' ? query : () => query;
23
+ let matches = $state(initialValue);
24
+ $effect(() => {
25
+ const mediaQuery = window.matchMedia(resolveQuery());
26
+ matches = mediaQuery.matches;
27
+ function handler(event) {
28
+ matches = event.matches;
29
+ }
30
+ mediaQuery.addEventListener('change', handler);
31
+ return () => mediaQuery.removeEventListener('change', handler);
32
+ });
33
+ return {
34
+ get matches() {
35
+ return matches;
36
+ }
37
+ };
38
+ }
package/dist/index.d.ts CHANGED
@@ -43,6 +43,8 @@ export * from './FileUpload/index.js';
43
43
  export * from './Slider/index.js';
44
44
  export * from './PinInput/index.js';
45
45
  export * from './ThemeModeButton/index.js';
46
+ export * from './Table/index.js';
46
47
  export * from './Toast/index.js';
48
+ export * from './hooks/index.js';
47
49
  export { defineConfig } from './config.js';
48
50
  export type { UIConfig } from './config.js';
package/dist/index.js CHANGED
@@ -44,6 +44,9 @@ export * from './FileUpload/index.js';
44
44
  export * from './Slider/index.js';
45
45
  export * from './PinInput/index.js';
46
46
  export * from './ThemeModeButton/index.js';
47
+ export * from './Table/index.js';
47
48
  export * from './Toast/index.js';
49
+ // Composables
50
+ export * from './hooks/index.js';
48
51
  // Configuration
49
52
  export { defineConfig } from './config.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sv5ui",
3
- "version": "1.4.0",
3
+ "version": "1.5.1",
4
4
  "description": "A modern Svelte 5 UI component library with Tailwind CSS",
5
5
  "author": "ndlabdev",
6
6
  "license": "MIT",