srasm 0.0.0 → 0.0.3
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.
- package/dist/index.cjs +159 -0
- package/dist/index.d.cts +42 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.js +122 -0
- package/package.json +23 -32
- package/dist/assets/index-DcNG4owL.js +0 -1951
- package/dist/assets/index-DrIpgKtZ.css +0 -1
- package/dist/index.html +0 -16
- package/dist/vite.svg +0 -1
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// src/index.ts
|
|
30
|
+
var index_exports = {};
|
|
31
|
+
__export(index_exports, {
|
|
32
|
+
createStateStore: () => createStateStore,
|
|
33
|
+
logClick: () => logClick
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(index_exports);
|
|
36
|
+
|
|
37
|
+
// src/context/createStateStore.ts
|
|
38
|
+
var import_react = __toESM(require("react"), 1);
|
|
39
|
+
|
|
40
|
+
// src/utils/deepEqual.ts
|
|
41
|
+
function deepEqual(obj1, obj2) {
|
|
42
|
+
if (obj1 === obj2) return true;
|
|
43
|
+
if (typeof obj1 !== "object" || typeof obj2 !== "object" || obj1 === null || obj2 === null) {
|
|
44
|
+
return Object.is(obj1, obj2);
|
|
45
|
+
}
|
|
46
|
+
const keys1 = Object.keys(obj1);
|
|
47
|
+
const keys2 = Object.keys(obj2);
|
|
48
|
+
if (keys1.length !== keys2.length) return false;
|
|
49
|
+
for (const key of keys1) {
|
|
50
|
+
if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// src/context/createStateStore.ts
|
|
58
|
+
var import_with_selector = require("use-sync-external-store/with-selector");
|
|
59
|
+
function createStateStore(initialSlices) {
|
|
60
|
+
let storeState = { ...initialSlices };
|
|
61
|
+
const sliceListeners = /* @__PURE__ */ new Map();
|
|
62
|
+
const getSliceListeners = (k) => {
|
|
63
|
+
let set = sliceListeners.get(k);
|
|
64
|
+
if (!set) {
|
|
65
|
+
set = /* @__PURE__ */ new Set();
|
|
66
|
+
sliceListeners.set(k, set);
|
|
67
|
+
}
|
|
68
|
+
return set;
|
|
69
|
+
};
|
|
70
|
+
const subscribeSlice = (key, listener) => {
|
|
71
|
+
const set = getSliceListeners(key);
|
|
72
|
+
set.add(listener);
|
|
73
|
+
return () => set.delete(listener);
|
|
74
|
+
};
|
|
75
|
+
const emitSlice = (key) => {
|
|
76
|
+
getSliceListeners(key).forEach((l) => l());
|
|
77
|
+
};
|
|
78
|
+
const updateSlice = (key, payload, useDeepEqualCheck) => {
|
|
79
|
+
const current = storeState[key];
|
|
80
|
+
let next = current;
|
|
81
|
+
if (typeof payload === "function") {
|
|
82
|
+
next = payload(current);
|
|
83
|
+
if (Object.is(current, next)) return;
|
|
84
|
+
if (useDeepEqualCheck && deepEqual(current, next)) return;
|
|
85
|
+
} else {
|
|
86
|
+
if (typeof current === "object" && current !== null && typeof payload === "object" && payload !== null) {
|
|
87
|
+
next = { ...current, ...payload };
|
|
88
|
+
if (useDeepEqualCheck && deepEqual(current, next)) return;
|
|
89
|
+
} else {
|
|
90
|
+
if (Object.is(current, payload)) return;
|
|
91
|
+
if (useDeepEqualCheck && deepEqual(current, payload)) return;
|
|
92
|
+
next = payload;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (!Object.is(storeState[key], next)) {
|
|
96
|
+
storeState = { ...storeState, [key]: next };
|
|
97
|
+
emitSlice(key);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
function useSRASM(slice, selector, options) {
|
|
101
|
+
const selected = (0, import_with_selector.useSyncExternalStoreWithSelector)(
|
|
102
|
+
(listener) => subscribeSlice(slice, listener),
|
|
103
|
+
() => storeState[slice],
|
|
104
|
+
() => initialSlices[slice],
|
|
105
|
+
selector ?? ((s) => s),
|
|
106
|
+
options?.isEqual ?? Object.is
|
|
107
|
+
);
|
|
108
|
+
const setState = (0, import_react.useCallback)(
|
|
109
|
+
(payload) => updateSlice(slice, payload, !!options?.useDeepEqualCheck),
|
|
110
|
+
[slice, options?.useDeepEqualCheck]
|
|
111
|
+
);
|
|
112
|
+
return { state: selected, setState };
|
|
113
|
+
}
|
|
114
|
+
function useSRASMAsync(slice, fetcher, tags = []) {
|
|
115
|
+
const { state, setState } = useSRASM(slice);
|
|
116
|
+
const [loading, setLoading] = import_react.default.useState(false);
|
|
117
|
+
const [error, setError] = import_react.default.useState(null);
|
|
118
|
+
const fetchData = (0, import_react.useCallback)(async () => {
|
|
119
|
+
setLoading(true);
|
|
120
|
+
setError(null);
|
|
121
|
+
try {
|
|
122
|
+
const data = await fetcher();
|
|
123
|
+
setState(data);
|
|
124
|
+
} catch (err) {
|
|
125
|
+
setError(err);
|
|
126
|
+
} finally {
|
|
127
|
+
setLoading(false);
|
|
128
|
+
}
|
|
129
|
+
}, [slice, fetcher, setState]);
|
|
130
|
+
import_react.default.useEffect(() => {
|
|
131
|
+
fetchData();
|
|
132
|
+
}, [JSON.stringify(tags)]);
|
|
133
|
+
return {
|
|
134
|
+
data: state,
|
|
135
|
+
loading,
|
|
136
|
+
error,
|
|
137
|
+
refetch: fetchData
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
const SRASMProvider = ({
|
|
141
|
+
children
|
|
142
|
+
}) => {
|
|
143
|
+
return children;
|
|
144
|
+
};
|
|
145
|
+
return { SRASMProvider, useSRASM, useSRASMAsync };
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// src/ml/globalLogs.ts
|
|
149
|
+
var logClick = (event) => {
|
|
150
|
+
const key = "click_events";
|
|
151
|
+
const existing = JSON.parse(localStorage.getItem(key) || "[]");
|
|
152
|
+
existing.push(event);
|
|
153
|
+
localStorage.setItem(key, JSON.stringify(existing));
|
|
154
|
+
};
|
|
155
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
156
|
+
0 && (module.exports = {
|
|
157
|
+
createStateStore,
|
|
158
|
+
logClick
|
|
159
|
+
});
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Creates a state store with the given initial state slices.
|
|
5
|
+
* The state store is used by the `useSRASM` hook to provide a strongly-typed
|
|
6
|
+
* way of accessing and updating the state.
|
|
7
|
+
*
|
|
8
|
+
* @param {Slices} initialSlices The initial state slices to be used by the state store.
|
|
9
|
+
* @return {{ SRASMProvider: React.FC<{ children: React.ReactNode; relevantCode?: { fileName: string; code: string }[] | undefined; additionalSlices?: any[] | undefined }>; useSRASM: <K extends SliceKey, Selected = Slices[K]>(slice: K, selector?: (s: Slices[K]) => Selected, options?: { useDeepEqualCheck?: boolean; isEqual?: (a: Selected, b: Selected) => boolean; }) => useSRASMReturn }}
|
|
10
|
+
* The returned object contains the `SRASMProvider` context provider component and the `useSRASM` hook.
|
|
11
|
+
* The `SRASMProvider` component should be used to wrap your application, providing the necessary state and error handling to SRASM components.
|
|
12
|
+
* The `useSRASM` hook can be used by your React components to access and update the state.
|
|
13
|
+
*/
|
|
14
|
+
declare function createStateStore<Slices extends Record<string, any>>(initialSlices: Slices): {
|
|
15
|
+
SRASMProvider: ({ children, }: {
|
|
16
|
+
children: React.ReactNode;
|
|
17
|
+
}) => React.ReactElement<{
|
|
18
|
+
children: React.ReactNode;
|
|
19
|
+
}>;
|
|
20
|
+
useSRASM: <K extends keyof Slices, Selected = Slices[K]>(slice: K, selector?: (s: Slices[K]) => Selected, options?: {
|
|
21
|
+
useDeepEqualCheck?: boolean;
|
|
22
|
+
isEqual?: (a: Selected, b: Selected) => boolean;
|
|
23
|
+
}) => {
|
|
24
|
+
state: any;
|
|
25
|
+
setState: (payload: Partial<Slices[K]> | ((prev: Slices[K]) => Partial<Slices[K]>)) => void;
|
|
26
|
+
};
|
|
27
|
+
useSRASMAsync: <K extends keyof Slices>(slice: K, fetcher: () => Promise<Slices[K]>, tags?: any[]) => {
|
|
28
|
+
data: any;
|
|
29
|
+
loading: boolean;
|
|
30
|
+
error: any;
|
|
31
|
+
refetch: () => Promise<void>;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
type ClickEvent = {
|
|
36
|
+
itemId: string;
|
|
37
|
+
categoryId: string;
|
|
38
|
+
ts: number;
|
|
39
|
+
};
|
|
40
|
+
declare const logClick: (event: ClickEvent) => void;
|
|
41
|
+
|
|
42
|
+
export { type ClickEvent, createStateStore, logClick };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Creates a state store with the given initial state slices.
|
|
5
|
+
* The state store is used by the `useSRASM` hook to provide a strongly-typed
|
|
6
|
+
* way of accessing and updating the state.
|
|
7
|
+
*
|
|
8
|
+
* @param {Slices} initialSlices The initial state slices to be used by the state store.
|
|
9
|
+
* @return {{ SRASMProvider: React.FC<{ children: React.ReactNode; relevantCode?: { fileName: string; code: string }[] | undefined; additionalSlices?: any[] | undefined }>; useSRASM: <K extends SliceKey, Selected = Slices[K]>(slice: K, selector?: (s: Slices[K]) => Selected, options?: { useDeepEqualCheck?: boolean; isEqual?: (a: Selected, b: Selected) => boolean; }) => useSRASMReturn }}
|
|
10
|
+
* The returned object contains the `SRASMProvider` context provider component and the `useSRASM` hook.
|
|
11
|
+
* The `SRASMProvider` component should be used to wrap your application, providing the necessary state and error handling to SRASM components.
|
|
12
|
+
* The `useSRASM` hook can be used by your React components to access and update the state.
|
|
13
|
+
*/
|
|
14
|
+
declare function createStateStore<Slices extends Record<string, any>>(initialSlices: Slices): {
|
|
15
|
+
SRASMProvider: ({ children, }: {
|
|
16
|
+
children: React.ReactNode;
|
|
17
|
+
}) => React.ReactElement<{
|
|
18
|
+
children: React.ReactNode;
|
|
19
|
+
}>;
|
|
20
|
+
useSRASM: <K extends keyof Slices, Selected = Slices[K]>(slice: K, selector?: (s: Slices[K]) => Selected, options?: {
|
|
21
|
+
useDeepEqualCheck?: boolean;
|
|
22
|
+
isEqual?: (a: Selected, b: Selected) => boolean;
|
|
23
|
+
}) => {
|
|
24
|
+
state: any;
|
|
25
|
+
setState: (payload: Partial<Slices[K]> | ((prev: Slices[K]) => Partial<Slices[K]>)) => void;
|
|
26
|
+
};
|
|
27
|
+
useSRASMAsync: <K extends keyof Slices>(slice: K, fetcher: () => Promise<Slices[K]>, tags?: any[]) => {
|
|
28
|
+
data: any;
|
|
29
|
+
loading: boolean;
|
|
30
|
+
error: any;
|
|
31
|
+
refetch: () => Promise<void>;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
type ClickEvent = {
|
|
36
|
+
itemId: string;
|
|
37
|
+
categoryId: string;
|
|
38
|
+
ts: number;
|
|
39
|
+
};
|
|
40
|
+
declare const logClick: (event: ClickEvent) => void;
|
|
41
|
+
|
|
42
|
+
export { type ClickEvent, createStateStore, logClick };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// src/context/createStateStore.ts
|
|
2
|
+
import React, { useCallback } from "react";
|
|
3
|
+
|
|
4
|
+
// src/utils/deepEqual.ts
|
|
5
|
+
function deepEqual(obj1, obj2) {
|
|
6
|
+
if (obj1 === obj2) return true;
|
|
7
|
+
if (typeof obj1 !== "object" || typeof obj2 !== "object" || obj1 === null || obj2 === null) {
|
|
8
|
+
return Object.is(obj1, obj2);
|
|
9
|
+
}
|
|
10
|
+
const keys1 = Object.keys(obj1);
|
|
11
|
+
const keys2 = Object.keys(obj2);
|
|
12
|
+
if (keys1.length !== keys2.length) return false;
|
|
13
|
+
for (const key of keys1) {
|
|
14
|
+
if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// src/context/createStateStore.ts
|
|
22
|
+
import { useSyncExternalStoreWithSelector } from "use-sync-external-store/with-selector";
|
|
23
|
+
function createStateStore(initialSlices) {
|
|
24
|
+
let storeState = { ...initialSlices };
|
|
25
|
+
const sliceListeners = /* @__PURE__ */ new Map();
|
|
26
|
+
const getSliceListeners = (k) => {
|
|
27
|
+
let set = sliceListeners.get(k);
|
|
28
|
+
if (!set) {
|
|
29
|
+
set = /* @__PURE__ */ new Set();
|
|
30
|
+
sliceListeners.set(k, set);
|
|
31
|
+
}
|
|
32
|
+
return set;
|
|
33
|
+
};
|
|
34
|
+
const subscribeSlice = (key, listener) => {
|
|
35
|
+
const set = getSliceListeners(key);
|
|
36
|
+
set.add(listener);
|
|
37
|
+
return () => set.delete(listener);
|
|
38
|
+
};
|
|
39
|
+
const emitSlice = (key) => {
|
|
40
|
+
getSliceListeners(key).forEach((l) => l());
|
|
41
|
+
};
|
|
42
|
+
const updateSlice = (key, payload, useDeepEqualCheck) => {
|
|
43
|
+
const current = storeState[key];
|
|
44
|
+
let next = current;
|
|
45
|
+
if (typeof payload === "function") {
|
|
46
|
+
next = payload(current);
|
|
47
|
+
if (Object.is(current, next)) return;
|
|
48
|
+
if (useDeepEqualCheck && deepEqual(current, next)) return;
|
|
49
|
+
} else {
|
|
50
|
+
if (typeof current === "object" && current !== null && typeof payload === "object" && payload !== null) {
|
|
51
|
+
next = { ...current, ...payload };
|
|
52
|
+
if (useDeepEqualCheck && deepEqual(current, next)) return;
|
|
53
|
+
} else {
|
|
54
|
+
if (Object.is(current, payload)) return;
|
|
55
|
+
if (useDeepEqualCheck && deepEqual(current, payload)) return;
|
|
56
|
+
next = payload;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (!Object.is(storeState[key], next)) {
|
|
60
|
+
storeState = { ...storeState, [key]: next };
|
|
61
|
+
emitSlice(key);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
function useSRASM(slice, selector, options) {
|
|
65
|
+
const selected = useSyncExternalStoreWithSelector(
|
|
66
|
+
(listener) => subscribeSlice(slice, listener),
|
|
67
|
+
() => storeState[slice],
|
|
68
|
+
() => initialSlices[slice],
|
|
69
|
+
selector ?? ((s) => s),
|
|
70
|
+
options?.isEqual ?? Object.is
|
|
71
|
+
);
|
|
72
|
+
const setState = useCallback(
|
|
73
|
+
(payload) => updateSlice(slice, payload, !!options?.useDeepEqualCheck),
|
|
74
|
+
[slice, options?.useDeepEqualCheck]
|
|
75
|
+
);
|
|
76
|
+
return { state: selected, setState };
|
|
77
|
+
}
|
|
78
|
+
function useSRASMAsync(slice, fetcher, tags = []) {
|
|
79
|
+
const { state, setState } = useSRASM(slice);
|
|
80
|
+
const [loading, setLoading] = React.useState(false);
|
|
81
|
+
const [error, setError] = React.useState(null);
|
|
82
|
+
const fetchData = useCallback(async () => {
|
|
83
|
+
setLoading(true);
|
|
84
|
+
setError(null);
|
|
85
|
+
try {
|
|
86
|
+
const data = await fetcher();
|
|
87
|
+
setState(data);
|
|
88
|
+
} catch (err) {
|
|
89
|
+
setError(err);
|
|
90
|
+
} finally {
|
|
91
|
+
setLoading(false);
|
|
92
|
+
}
|
|
93
|
+
}, [slice, fetcher, setState]);
|
|
94
|
+
React.useEffect(() => {
|
|
95
|
+
fetchData();
|
|
96
|
+
}, [JSON.stringify(tags)]);
|
|
97
|
+
return {
|
|
98
|
+
data: state,
|
|
99
|
+
loading,
|
|
100
|
+
error,
|
|
101
|
+
refetch: fetchData
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
const SRASMProvider = ({
|
|
105
|
+
children
|
|
106
|
+
}) => {
|
|
107
|
+
return children;
|
|
108
|
+
};
|
|
109
|
+
return { SRASMProvider, useSRASM, useSRASMAsync };
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// src/ml/globalLogs.ts
|
|
113
|
+
var logClick = (event) => {
|
|
114
|
+
const key = "click_events";
|
|
115
|
+
const existing = JSON.parse(localStorage.getItem(key) || "[]");
|
|
116
|
+
existing.push(event);
|
|
117
|
+
localStorage.setItem(key, JSON.stringify(existing));
|
|
118
|
+
};
|
|
119
|
+
export {
|
|
120
|
+
createStateStore,
|
|
121
|
+
logClick
|
|
122
|
+
};
|
package/package.json
CHANGED
|
@@ -1,43 +1,38 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "srasm",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.3",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"files": [
|
|
6
|
+
"files": [
|
|
7
|
+
"dist",
|
|
8
|
+
"README.md",
|
|
9
|
+
"LICENSE"
|
|
10
|
+
],
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.js",
|
|
15
|
+
"require": "./dist/index.cjs"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
7
18
|
"scripts": {
|
|
8
19
|
"dev": "vite",
|
|
9
|
-
"build": "
|
|
20
|
+
"build": "tsup",
|
|
21
|
+
"prepublishOnly": "npm run build",
|
|
10
22
|
"lint": "eslint .",
|
|
11
23
|
"preview": "vite preview",
|
|
12
|
-
"debug": " npx eslint . --debug"
|
|
13
|
-
"prepublishOnly": "npm run build"
|
|
24
|
+
"debug": " npx eslint . --debug"
|
|
14
25
|
},
|
|
15
26
|
"dependencies": {
|
|
16
|
-
"@langchain/core": "^1.1.0",
|
|
17
|
-
"@langchain/openai": "^1.1.3",
|
|
18
|
-
"@tailwindcss/vite": "^4.1.17",
|
|
19
|
-
"@tensorflow/tfjs": "^4.22.0",
|
|
20
|
-
"axios": "^1.13.2",
|
|
21
27
|
"clsx": "^2.1.1",
|
|
22
|
-
"
|
|
23
|
-
"langchain": "^1.1.1",
|
|
24
|
-
"lucide-react": "^0.555.0",
|
|
25
|
-
"postcss": "^8.5.6",
|
|
26
|
-
"rc-tree": "^5.13.1",
|
|
27
|
-
"react": "^19.2.0",
|
|
28
|
-
"react-d3-tree": "^3.6.6",
|
|
29
|
-
"react-dom": "^19.2.0",
|
|
30
|
-
"react-hot-toast": "^2.6.0",
|
|
31
|
-
"react-markdown": "^10.1.0",
|
|
32
|
-
"react-router-dom": "^7.9.6",
|
|
28
|
+
"react": ">=18",
|
|
33
29
|
"react-virtuoso": "^4.16.1",
|
|
34
|
-
"rehype-highlight": "^7.0.2",
|
|
35
|
-
"remark-gfm": "^4.0.1",
|
|
36
|
-
"tailwindcss": "^4.1.18",
|
|
37
30
|
"use-sync-external-store": "^1.6.0"
|
|
38
31
|
},
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"react": ">=18"
|
|
34
|
+
},
|
|
39
35
|
"devDependencies": {
|
|
40
|
-
"@tailwindcss/postcss": "^4.1.18",
|
|
41
36
|
"@testing-library/dom": "^10.4.1",
|
|
42
37
|
"@testing-library/react": "^16.3.1",
|
|
43
38
|
"@types/bun": "latest",
|
|
@@ -45,13 +40,9 @@
|
|
|
45
40
|
"@types/react": "^19.2.2",
|
|
46
41
|
"@types/react-dom": "^19.2.2",
|
|
47
42
|
"@types/use-sync-external-store": "^1.5.0",
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"jsdom": "^27.0.1",
|
|
52
|
-
"typescript": "~5.9.3",
|
|
53
|
-
"vite": "^7.2.2",
|
|
54
|
-
"vitest": "^4.0.16"
|
|
43
|
+
"esbuild": "^0.27.2",
|
|
44
|
+
"tsup": "^8.5.1",
|
|
45
|
+
"typescript": "~5.9.3"
|
|
55
46
|
},
|
|
56
47
|
"module": "index.ts"
|
|
57
48
|
}
|