@blaze-dev/ui 0.7.0 → 0.8.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.
@@ -4,7 +4,8 @@ export { useModalState, useItemModal } from './use-modal-state.js';
4
4
  export { useDebouncedSearch } from './use-debounced-search.js';
5
5
  export { usePersistedState } from './use-persisted-state.js';
6
6
  export { usePageTitle } from './use-page-title.js';
7
- export { useTheme } from './use-theme.js';
7
+ export { useTheme, DAISY_THEMES, type DaisyTheme } from './use-theme.js';
8
+ export { useClickOutside } from './use-click-outside.js';
8
9
  export { useConfirm, type ConfirmOptions, type ConfirmModalState } from './use-confirm.js';
9
10
  export { useInfiniteScroll } from './use-infinite-scroll.js';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AACrF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AACrF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA"}
@@ -4,7 +4,8 @@ export { useModalState, useItemModal } from './use-modal-state.js';
4
4
  export { useDebouncedSearch } from './use-debounced-search.js';
5
5
  export { usePersistedState } from './use-persisted-state.js';
6
6
  export { usePageTitle } from './use-page-title.js';
7
- export { useTheme } from './use-theme.js';
7
+ export { useTheme, DAISY_THEMES } from './use-theme.js';
8
+ export { useClickOutside } from './use-click-outside.js';
8
9
  export { useConfirm } from './use-confirm.js';
9
10
  export { useInfiniteScroll } from './use-infinite-scroll.js';
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAA6B,MAAM,yBAAyB,CAAA;AACrF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,UAAU,EAA+C,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAA6B,MAAM,yBAAyB,CAAA;AACrF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAmB,MAAM,gBAAgB,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,UAAU,EAA+C,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { type RefObject } from 'react';
2
+ /**
3
+ * Calls `handler` when a click occurs outside the referenced element.
4
+ * Listens on `mousedown` so the handler fires before focus shifts.
5
+ */
6
+ export declare function useClickOutside(ref: RefObject<HTMLElement | null>, handler: () => void): void;
7
+ //# sourceMappingURL=use-click-outside.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-click-outside.d.ts","sourceRoot":"","sources":["../../src/hooks/use-click-outside.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,IAAI,QAWtF"}
@@ -0,0 +1,17 @@
1
+ import { useEffect } from 'react';
2
+ /**
3
+ * Calls `handler` when a click occurs outside the referenced element.
4
+ * Listens on `mousedown` so the handler fires before focus shifts.
5
+ */
6
+ export function useClickOutside(ref, handler) {
7
+ useEffect(() => {
8
+ function onMouseDown(event) {
9
+ if (ref.current && !ref.current.contains(event.target)) {
10
+ handler();
11
+ }
12
+ }
13
+ document.addEventListener('mousedown', onMouseDown);
14
+ return () => document.removeEventListener('mousedown', onMouseDown);
15
+ }, [ref, handler]);
16
+ }
17
+ //# sourceMappingURL=use-click-outside.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-click-outside.js","sourceRoot":"","sources":["../../src/hooks/use-click-outside.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAA;AAEjD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAkC,EAAE,OAAmB;IACrF,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,WAAW,CAAC,KAAiB;YACpC,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE,CAAC;gBAC/D,OAAO,EAAE,CAAA;YACX,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QACnD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;IACrE,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;AACpB,CAAC"}
@@ -1,3 +1,110 @@
1
+ export declare const DAISY_THEMES: readonly [{
2
+ readonly name: "light";
3
+ readonly label: "Light";
4
+ }, {
5
+ readonly name: "dark";
6
+ readonly label: "Dark";
7
+ }, {
8
+ readonly name: "cupcake";
9
+ readonly label: "Cupcake";
10
+ }, {
11
+ readonly name: "bumblebee";
12
+ readonly label: "Bumblebee";
13
+ }, {
14
+ readonly name: "emerald";
15
+ readonly label: "Emerald";
16
+ }, {
17
+ readonly name: "corporate";
18
+ readonly label: "Corporate";
19
+ }, {
20
+ readonly name: "synthwave";
21
+ readonly label: "Synthwave";
22
+ }, {
23
+ readonly name: "retro";
24
+ readonly label: "Retro";
25
+ }, {
26
+ readonly name: "cyberpunk";
27
+ readonly label: "Cyberpunk";
28
+ }, {
29
+ readonly name: "valentine";
30
+ readonly label: "Valentine";
31
+ }, {
32
+ readonly name: "halloween";
33
+ readonly label: "Halloween";
34
+ }, {
35
+ readonly name: "garden";
36
+ readonly label: "Garden";
37
+ }, {
38
+ readonly name: "forest";
39
+ readonly label: "Forest";
40
+ }, {
41
+ readonly name: "aqua";
42
+ readonly label: "Aqua";
43
+ }, {
44
+ readonly name: "lofi";
45
+ readonly label: "Lo-Fi";
46
+ }, {
47
+ readonly name: "pastel";
48
+ readonly label: "Pastel";
49
+ }, {
50
+ readonly name: "fantasy";
51
+ readonly label: "Fantasy";
52
+ }, {
53
+ readonly name: "wireframe";
54
+ readonly label: "Wireframe";
55
+ }, {
56
+ readonly name: "black";
57
+ readonly label: "Black";
58
+ }, {
59
+ readonly name: "luxury";
60
+ readonly label: "Luxury";
61
+ }, {
62
+ readonly name: "dracula";
63
+ readonly label: "Dracula";
64
+ }, {
65
+ readonly name: "cmyk";
66
+ readonly label: "CMYK";
67
+ }, {
68
+ readonly name: "autumn";
69
+ readonly label: "Autumn";
70
+ }, {
71
+ readonly name: "business";
72
+ readonly label: "Business";
73
+ }, {
74
+ readonly name: "acid";
75
+ readonly label: "Acid";
76
+ }, {
77
+ readonly name: "lemonade";
78
+ readonly label: "Lemonade";
79
+ }, {
80
+ readonly name: "night";
81
+ readonly label: "Night";
82
+ }, {
83
+ readonly name: "coffee";
84
+ readonly label: "Coffee";
85
+ }, {
86
+ readonly name: "winter";
87
+ readonly label: "Winter";
88
+ }, {
89
+ readonly name: "dim";
90
+ readonly label: "Dim";
91
+ }, {
92
+ readonly name: "nord";
93
+ readonly label: "Nord";
94
+ }, {
95
+ readonly name: "sunset";
96
+ readonly label: "Sunset";
97
+ }, {
98
+ readonly name: "caramellatte";
99
+ readonly label: "Caramel Latte";
100
+ }, {
101
+ readonly name: "abyss";
102
+ readonly label: "Abyss";
103
+ }, {
104
+ readonly name: "silk";
105
+ readonly label: "Silk";
106
+ }];
107
+ export type DaisyTheme = (typeof DAISY_THEMES)[number]['name'];
1
108
  /**
2
109
  * Manage DaisyUI theme via localStorage and `data-theme` attribute.
3
110
  */
@@ -1 +1 @@
1
- {"version":3,"file":"use-theme.d.ts","sourceRoot":"","sources":["../../src/hooks/use-theme.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,QAAQ,CAAC,YAAY,SAAS;;kCAU/B,MAAM;EAapB"}
1
+ {"version":3,"file":"use-theme.d.ts","sourceRoot":"","sources":["../../src/hooks/use-theme.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCf,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA;AAE9D;;GAEG;AACH,wBAAgB,QAAQ,CAAC,YAAY,SAAS;;kCAU/B,MAAM;EAapB"}
@@ -1,4 +1,41 @@
1
1
  import { useCallback, useState } from 'react';
2
+ export const DAISY_THEMES = [
3
+ { name: 'light', label: 'Light' },
4
+ { name: 'dark', label: 'Dark' },
5
+ { name: 'cupcake', label: 'Cupcake' },
6
+ { name: 'bumblebee', label: 'Bumblebee' },
7
+ { name: 'emerald', label: 'Emerald' },
8
+ { name: 'corporate', label: 'Corporate' },
9
+ { name: 'synthwave', label: 'Synthwave' },
10
+ { name: 'retro', label: 'Retro' },
11
+ { name: 'cyberpunk', label: 'Cyberpunk' },
12
+ { name: 'valentine', label: 'Valentine' },
13
+ { name: 'halloween', label: 'Halloween' },
14
+ { name: 'garden', label: 'Garden' },
15
+ { name: 'forest', label: 'Forest' },
16
+ { name: 'aqua', label: 'Aqua' },
17
+ { name: 'lofi', label: 'Lo-Fi' },
18
+ { name: 'pastel', label: 'Pastel' },
19
+ { name: 'fantasy', label: 'Fantasy' },
20
+ { name: 'wireframe', label: 'Wireframe' },
21
+ { name: 'black', label: 'Black' },
22
+ { name: 'luxury', label: 'Luxury' },
23
+ { name: 'dracula', label: 'Dracula' },
24
+ { name: 'cmyk', label: 'CMYK' },
25
+ { name: 'autumn', label: 'Autumn' },
26
+ { name: 'business', label: 'Business' },
27
+ { name: 'acid', label: 'Acid' },
28
+ { name: 'lemonade', label: 'Lemonade' },
29
+ { name: 'night', label: 'Night' },
30
+ { name: 'coffee', label: 'Coffee' },
31
+ { name: 'winter', label: 'Winter' },
32
+ { name: 'dim', label: 'Dim' },
33
+ { name: 'nord', label: 'Nord' },
34
+ { name: 'sunset', label: 'Sunset' },
35
+ { name: 'caramellatte', label: 'Caramel Latte' },
36
+ { name: 'abyss', label: 'Abyss' },
37
+ { name: 'silk', label: 'Silk' },
38
+ ];
2
39
  /**
3
40
  * Manage DaisyUI theme via localStorage and `data-theme` attribute.
4
41
  */
@@ -1 +1 @@
1
- {"version":3,"file":"use-theme.js","sourceRoot":"","sources":["../../src/hooks/use-theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE7C;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,YAAY,GAAG,MAAM;IAC5C,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE;QAC3C,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,YAAY,CAAA;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,YAAY,CAAA;QACrB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,QAAgB,EAAE,EAAE;QACnB,aAAa,CAAC,QAAQ,CAAC,CAAA;QACvB,IAAI,CAAC;YACH,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;IAC/D,CAAC,EACD,EAAE,CACH,CAAA;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAW,CAAA;AACrC,CAAC"}
1
+ {"version":3,"file":"use-theme.js","sourceRoot":"","sources":["../../src/hooks/use-theme.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -28,7 +28,8 @@ export { useModalState, useItemModal } from './hooks/use-modal-state.js';
28
28
  export { useDebouncedSearch } from './hooks/use-debounced-search.js';
29
29
  export { usePersistedState } from './hooks/use-persisted-state.js';
30
30
  export { usePageTitle } from './hooks/use-page-title.js';
31
- export { useTheme } from './hooks/use-theme.js';
31
+ export { useTheme, DAISY_THEMES, type DaisyTheme } from './hooks/use-theme.js';
32
+ export { useClickOutside } from './hooks/use-click-outside.js';
32
33
  export { useConfirm, type ConfirmOptions, type ConfirmModalState } from './hooks/use-confirm.js';
33
34
  export { useInfiniteScroll } from './hooks/use-infinite-scroll.js';
34
35
  export { FormField } from './forms/form-field.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAA;AAG9D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAClG,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAGnE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACjH,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAG/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAC3F,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAGlE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAA;AAG9D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAClG,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAGnE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACjH,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAG/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAC3F,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAGlE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA"}
package/dist/index.js CHANGED
@@ -33,7 +33,8 @@ export { useModalState, useItemModal } from './hooks/use-modal-state.js';
33
33
  export { useDebouncedSearch } from './hooks/use-debounced-search.js';
34
34
  export { usePersistedState } from './hooks/use-persisted-state.js';
35
35
  export { usePageTitle } from './hooks/use-page-title.js';
36
- export { useTheme } from './hooks/use-theme.js';
36
+ export { useTheme, DAISY_THEMES } from './hooks/use-theme.js';
37
+ export { useClickOutside } from './hooks/use-click-outside.js';
37
38
  export { useConfirm } from './hooks/use-confirm.js';
38
39
  export { useInfiniteScroll } from './hooks/use-infinite-scroll.js';
39
40
  // Forms
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAgC,MAAM,WAAW,CAAA;AAE9D,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAA8B,MAAM,8BAA8B,CAAA;AAClG,OAAO,EAAE,UAAU,EAAwB,MAAM,2BAA2B,CAAA;AAC5E,OAAO,EAAE,YAAY,EAA0B,MAAM,6BAA6B,CAAA;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAEnE,OAAO;AACP,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACjH,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAE/D,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,QAAQ;AACR,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAA6B,MAAM,+BAA+B,CAAA;AAC3F,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAA+C,MAAM,wBAAwB,CAAA;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAElE,QAAQ;AACR,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAgC,MAAM,WAAW,CAAA;AAE9D,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAA8B,MAAM,8BAA8B,CAAA;AAClG,OAAO,EAAE,UAAU,EAAwB,MAAM,2BAA2B,CAAA;AAC5E,OAAO,EAAE,YAAY,EAA0B,MAAM,6BAA6B,CAAA;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAEnE,OAAO;AACP,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACjH,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAE/D,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,QAAQ;AACR,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAA6B,MAAM,+BAA+B,CAAA;AAC3F,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAmB,MAAM,sBAAsB,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,UAAU,EAA+C,MAAM,wBAAwB,CAAA;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAElE,QAAQ;AACR,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** Returns true if a hex color (e.g. "#ff9900") is perceptually light. */
2
+ export declare function isLightHexColor(hex: string): boolean;
3
+ //# sourceMappingURL=color-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-utils.d.ts","sourceRoot":"","sources":["../../src/utils/color-utils.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMpD"}
@@ -0,0 +1,9 @@
1
+ /** Returns true if a hex color (e.g. "#ff9900") is perceptually light. */
2
+ export function isLightHexColor(hex) {
3
+ const h = hex.replace('#', '');
4
+ const r = parseInt(h.substring(0, 2), 16);
5
+ const g = parseInt(h.substring(2, 4), 16);
6
+ const b = parseInt(h.substring(4, 6), 16);
7
+ return (r * 299 + g * 587 + b * 114) / 1000 > 155;
8
+ }
9
+ //# sourceMappingURL=color-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-utils.js","sourceRoot":"","sources":["../../src/utils/color-utils.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC9B,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACzC,OAAO,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG,CAAA;AACnD,CAAC"}
@@ -0,0 +1,15 @@
1
+ export type SearchableItem = {
2
+ title: string;
3
+ keywords?: string[];
4
+ };
5
+ export type SearchResult<T extends SearchableItem> = {
6
+ item: T;
7
+ score: number;
8
+ };
9
+ export declare function fuzzySearch<T extends SearchableItem>(items: T[], query: string, minScore?: number): SearchResult<T>[];
10
+ export type HighlightSegment = {
11
+ text: string;
12
+ highlight: boolean;
13
+ };
14
+ export declare function getHighlightSegments(title: string, query: string): HighlightSegment[];
15
+ //# sourceMappingURL=fuzzy-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzzy-search.d.ts","sourceRoot":"","sources":["../../src/utils/fuzzy-search.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,cAAc,IAAI;IACnD,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAmDD,wBAAgB,WAAW,CAAC,CAAC,SAAS,cAAc,EAClD,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,EACb,QAAQ,SAAM,GACb,YAAY,CAAC,CAAC,CAAC,EAAE,CAOnB;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAoCrF"}
@@ -0,0 +1,89 @@
1
+ function normalizeStr(str) {
2
+ return str.toLowerCase().trim();
3
+ }
4
+ function getAcronym(title) {
5
+ return title
6
+ .split(/\s+/)
7
+ .map((word) => word[0])
8
+ .join('')
9
+ .toLowerCase();
10
+ }
11
+ function scoreMatch(item, query) {
12
+ const normalizedQuery = normalizeStr(query);
13
+ const normalizedTitle = normalizeStr(item.title);
14
+ if (normalizedTitle === normalizedQuery)
15
+ return 1.0;
16
+ if (normalizedTitle.startsWith(normalizedQuery))
17
+ return 0.9;
18
+ const words = normalizedTitle.split(/\s+/);
19
+ const queryWords = normalizedQuery.split(/\s+/);
20
+ const allWordPrefixMatch = queryWords.every((qw) => words.some((w) => w.startsWith(qw)));
21
+ if (allWordPrefixMatch && queryWords.length > 0)
22
+ return 0.8;
23
+ const acronym = getAcronym(item.title);
24
+ if (acronym.startsWith(normalizedQuery))
25
+ return 0.7;
26
+ if (item.keywords?.some((kw) => normalizeStr(kw).includes(normalizedQuery)))
27
+ return 0.6;
28
+ if (normalizedTitle.includes(normalizedQuery))
29
+ return 0.55;
30
+ let titleIdx = 0;
31
+ let queryIdx = 0;
32
+ let matched = 0;
33
+ while (titleIdx < normalizedTitle.length && queryIdx < normalizedQuery.length) {
34
+ if (normalizedTitle[titleIdx] === normalizedQuery[queryIdx]) {
35
+ matched++;
36
+ queryIdx++;
37
+ }
38
+ titleIdx++;
39
+ }
40
+ if (queryIdx === normalizedQuery.length) {
41
+ const density = matched / titleIdx;
42
+ return 0.3 + density * 0.2;
43
+ }
44
+ return 0;
45
+ }
46
+ export function fuzzySearch(items, query, minScore = 0.3) {
47
+ if (!query.trim())
48
+ return [];
49
+ return items
50
+ .map((item) => ({ item, score: scoreMatch(item, query) }))
51
+ .filter((result) => result.score >= minScore)
52
+ .sort((a, b) => b.score - a.score);
53
+ }
54
+ export function getHighlightSegments(title, query) {
55
+ if (!query.trim())
56
+ return [{ text: title, highlight: false }];
57
+ const lower = title.toLowerCase();
58
+ const q = query.toLowerCase().trim();
59
+ const idx = lower.indexOf(q);
60
+ if (idx !== -1) {
61
+ const segments = [];
62
+ if (idx > 0)
63
+ segments.push({ text: title.slice(0, idx), highlight: false });
64
+ segments.push({ text: title.slice(idx, idx + q.length), highlight: true });
65
+ if (idx + q.length < title.length)
66
+ segments.push({ text: title.slice(idx + q.length), highlight: false });
67
+ return segments;
68
+ }
69
+ const segments = [];
70
+ let queryIdx = 0;
71
+ let currentText = '';
72
+ let currentHighlight = false;
73
+ for (let i = 0; i < title.length; i++) {
74
+ const isMatch = queryIdx < q.length && title[i].toLowerCase() === q[queryIdx];
75
+ if (isMatch)
76
+ queryIdx++;
77
+ if (isMatch !== currentHighlight && currentText) {
78
+ segments.push({ text: currentText, highlight: currentHighlight });
79
+ currentText = '';
80
+ }
81
+ currentText += title[i];
82
+ currentHighlight = isMatch;
83
+ }
84
+ if (currentText) {
85
+ segments.push({ text: currentText, highlight: currentHighlight });
86
+ }
87
+ return segments;
88
+ }
89
+ //# sourceMappingURL=fuzzy-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzzy-search.js","sourceRoot":"","sources":["../../src/utils/fuzzy-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function readImageAsDataUrl(file: File): Promise<string>;
2
+ //# sourceMappingURL=image-upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-upload.d.ts","sourceRoot":"","sources":["../../src/utils/image-upload.ts"],"names":[],"mappings":"AAGA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAepE"}
@@ -0,0 +1,17 @@
1
+ const MAX_FILE_SIZE = 300_000;
2
+ const ALLOWED_TYPES = ['image/png', 'image/jpeg', 'image/gif', 'image/webp'];
3
+ export async function readImageAsDataUrl(file) {
4
+ if (!ALLOWED_TYPES.includes(file.type)) {
5
+ throw new Error('Please select a PNG, JPEG, GIF, or WebP image.');
6
+ }
7
+ if (file.size > MAX_FILE_SIZE) {
8
+ throw new Error('Image must be under 300KB. Please use a smaller image.');
9
+ }
10
+ const reader = new FileReader();
11
+ return new Promise((resolve, reject) => {
12
+ reader.onload = () => resolve(reader.result);
13
+ reader.onerror = reject;
14
+ reader.readAsDataURL(file);
15
+ });
16
+ }
17
+ //# sourceMappingURL=image-upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-upload.js","sourceRoot":"","sources":["../../src/utils/image-upload.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,OAAO,CAAA;AAC7B,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;AAE5E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAU;IACjD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;IACnE,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,GAAG,aAAa,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;IAC3E,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAA;IAC/B,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAgB,CAAC,CAAA;QACtD,MAAM,CAAC,OAAO,GAAG,MAAM,CAAA;QACvB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -1,2 +1,5 @@
1
- export { formatDateShort, formatDateLong, formatDateTime, formatTime, formatRelativeTime, formatTimeBetween, formatDateForInput, formatDateTimeForInput, formatFullTimestamp, formatCompactTimestamp, formatMonthDay, formatDateRange, formatWeekdayLong, formatTimeWithSeconds, formatDuration, } from './date-utils.js';
1
+ export { formatDateShort, formatDateLong, formatDateTime, formatTime, formatRelativeTime, formatTimeBetween, formatDateForInput, formatDateTimeForInput, formatFullTimestamp, formatCompactTimestamp, formatMonthDay, formatDateRange, formatWeekdayLong, formatTimeWithSeconds, formatDuration, timeAgo, formatElapsedTime, } from './date-utils.js';
2
+ export { fuzzySearch, getHighlightSegments, type SearchableItem, type SearchResult, type HighlightSegment, } from './fuzzy-search.js';
3
+ export { readImageAsDataUrl } from './image-upload.js';
4
+ export { isLightHexColor } from './color-utils.js';
2
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,GACf,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,OAAO,EACP,iBAAiB,GAClB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA"}
@@ -1,2 +1,5 @@
1
- export { formatDateShort, formatDateLong, formatDateTime, formatTime, formatRelativeTime, formatTimeBetween, formatDateForInput, formatDateTimeForInput, formatFullTimestamp, formatCompactTimestamp, formatMonthDay, formatDateRange, formatWeekdayLong, formatTimeWithSeconds, formatDuration, } from './date-utils.js';
1
+ export { formatDateShort, formatDateLong, formatDateTime, formatTime, formatRelativeTime, formatTimeBetween, formatDateForInput, formatDateTimeForInput, formatFullTimestamp, formatCompactTimestamp, formatMonthDay, formatDateRange, formatWeekdayLong, formatTimeWithSeconds, formatDuration, timeAgo, formatElapsedTime, } from './date-utils.js';
2
+ export { fuzzySearch, getHighlightSegments, } from './fuzzy-search.js';
3
+ export { readImageAsDataUrl } from './image-upload.js';
4
+ export { isLightHexColor } from './color-utils.js';
2
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,GACf,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,OAAO,EACP,iBAAiB,GAClB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,WAAW,EACX,oBAAoB,GAIrB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "type": "git",
5
5
  "url": "https://github.com/blaze-it/ui"
6
6
  },
7
- "version": "0.7.0",
7
+ "version": "0.8.0",
8
8
  "private": false,
9
9
  "description": "Shared React + DaisyUI component library for Blaze projects",
10
10
  "type": "module",