@ktnpm_devops/react-component 0.0.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.
- package/LICENSE +21 -0
- package/README.md +143 -0
- package/dist/hooks/useClickOutside.d.ts +5 -0
- package/dist/hooks/useClickOutside.d.ts.map +1 -0
- package/dist/hooks/useEscapeKey.d.ts +3 -0
- package/dist/hooks/useEscapeKey.d.ts.map +1 -0
- package/dist/hooks/useEscapeKey.test.d.ts +2 -0
- package/dist/hooks/useEscapeKey.test.d.ts.map +1 -0
- package/dist/hooks/useResizeObserver.d.ts +10 -0
- package/dist/hooks/useResizeObserver.d.ts.map +1 -0
- package/dist/index.cjs +48 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/index10.cjs +20 -0
- package/dist/index10.cjs.map +1 -0
- package/dist/index10.js +20 -0
- package/dist/index10.js.map +1 -0
- package/dist/index11.cjs +14 -0
- package/dist/index11.cjs.map +1 -0
- package/dist/index11.js +14 -0
- package/dist/index11.js.map +1 -0
- package/dist/index12.cjs +12 -0
- package/dist/index12.cjs.map +1 -0
- package/dist/index12.js +12 -0
- package/dist/index12.js.map +1 -0
- package/dist/index13.cjs +42 -0
- package/dist/index13.cjs.map +1 -0
- package/dist/index13.js +42 -0
- package/dist/index13.js.map +1 -0
- package/dist/index14.cjs +12 -0
- package/dist/index14.cjs.map +1 -0
- package/dist/index14.js +12 -0
- package/dist/index14.js.map +1 -0
- package/dist/index15.cjs +10 -0
- package/dist/index15.cjs.map +1 -0
- package/dist/index15.js +10 -0
- package/dist/index15.js.map +1 -0
- package/dist/index16.cjs +12 -0
- package/dist/index16.cjs.map +1 -0
- package/dist/index16.js +12 -0
- package/dist/index16.js.map +1 -0
- package/dist/index17.cjs +18 -0
- package/dist/index17.cjs.map +1 -0
- package/dist/index17.js +18 -0
- package/dist/index17.js.map +1 -0
- package/dist/index18.cjs +21 -0
- package/dist/index18.cjs.map +1 -0
- package/dist/index18.js +21 -0
- package/dist/index18.js.map +1 -0
- package/dist/index19.cjs +12 -0
- package/dist/index19.cjs.map +1 -0
- package/dist/index19.js +12 -0
- package/dist/index19.js.map +1 -0
- package/dist/index2.cjs +44 -0
- package/dist/index2.cjs.map +1 -0
- package/dist/index2.js +44 -0
- package/dist/index2.js.map +1 -0
- package/dist/index20.cjs +9 -0
- package/dist/index20.cjs.map +1 -0
- package/dist/index20.js +9 -0
- package/dist/index20.js.map +1 -0
- package/dist/index21.cjs +9 -0
- package/dist/index21.cjs.map +1 -0
- package/dist/index21.js +9 -0
- package/dist/index21.js.map +1 -0
- package/dist/index22.cjs +30 -0
- package/dist/index22.cjs.map +1 -0
- package/dist/index22.js +30 -0
- package/dist/index22.js.map +1 -0
- package/dist/index23.cjs +9 -0
- package/dist/index23.cjs.map +1 -0
- package/dist/index23.js +9 -0
- package/dist/index23.js.map +1 -0
- package/dist/index24.cjs +18 -0
- package/dist/index24.cjs.map +1 -0
- package/dist/index24.js +18 -0
- package/dist/index24.js.map +1 -0
- package/dist/index25.cjs +27 -0
- package/dist/index25.cjs.map +1 -0
- package/dist/index25.js +27 -0
- package/dist/index25.js.map +1 -0
- package/dist/index26.cjs +18 -0
- package/dist/index26.cjs.map +1 -0
- package/dist/index26.js +18 -0
- package/dist/index26.js.map +1 -0
- package/dist/index3.cjs +19 -0
- package/dist/index3.cjs.map +1 -0
- package/dist/index3.js +19 -0
- package/dist/index3.js.map +1 -0
- package/dist/index4.cjs +15 -0
- package/dist/index4.cjs.map +1 -0
- package/dist/index4.js +15 -0
- package/dist/index4.js.map +1 -0
- package/dist/index5.cjs +22 -0
- package/dist/index5.cjs.map +1 -0
- package/dist/index5.js +22 -0
- package/dist/index5.js.map +1 -0
- package/dist/index6.cjs +68 -0
- package/dist/index6.cjs.map +1 -0
- package/dist/index6.js +68 -0
- package/dist/index6.js.map +1 -0
- package/dist/index7.cjs +85 -0
- package/dist/index7.cjs.map +1 -0
- package/dist/index7.js +85 -0
- package/dist/index7.js.map +1 -0
- package/dist/index8.cjs +19 -0
- package/dist/index8.cjs.map +1 -0
- package/dist/index8.js +19 -0
- package/dist/index8.js.map +1 -0
- package/dist/index9.cjs +8 -0
- package/dist/index9.cjs.map +1 -0
- package/dist/index9.js +8 -0
- package/dist/index9.js.map +1 -0
- package/dist/primitives/Avatar/Avatar.d.ts +7 -0
- package/dist/primitives/Avatar/Avatar.d.ts.map +1 -0
- package/dist/primitives/Avatar/index.d.ts +3 -0
- package/dist/primitives/Avatar/index.d.ts.map +1 -0
- package/dist/primitives/Badge/Badge.d.ts +6 -0
- package/dist/primitives/Badge/Badge.d.ts.map +1 -0
- package/dist/primitives/Badge/index.d.ts +3 -0
- package/dist/primitives/Badge/index.d.ts.map +1 -0
- package/dist/primitives/Button/Button.d.ts +8 -0
- package/dist/primitives/Button/Button.d.ts.map +1 -0
- package/dist/primitives/Button/index.d.ts +3 -0
- package/dist/primitives/Button/index.d.ts.map +1 -0
- package/dist/primitives/Card/Card.d.ts +7 -0
- package/dist/primitives/Card/Card.d.ts.map +1 -0
- package/dist/primitives/Card/index.d.ts +3 -0
- package/dist/primitives/Card/index.d.ts.map +1 -0
- package/dist/primitives/Input/Input.d.ts +4 -0
- package/dist/primitives/Input/Input.d.ts.map +1 -0
- package/dist/primitives/Input/index.d.ts +3 -0
- package/dist/primitives/Input/index.d.ts.map +1 -0
- package/dist/primitives/Modal/Modal.d.ts +16 -0
- package/dist/primitives/Modal/Modal.d.ts.map +1 -0
- package/dist/primitives/Modal/index.d.ts +3 -0
- package/dist/primitives/Modal/index.d.ts.map +1 -0
- package/dist/primitives/Select/Select.d.ts +4 -0
- package/dist/primitives/Select/Select.d.ts.map +1 -0
- package/dist/primitives/Select/index.d.ts +3 -0
- package/dist/primitives/Select/index.d.ts.map +1 -0
- package/dist/primitives/Table/Table.d.ts +7 -0
- package/dist/primitives/Table/Table.d.ts.map +1 -0
- package/dist/primitives/Table/index.d.ts +3 -0
- package/dist/primitives/Table/index.d.ts.map +1 -0
- package/dist/primitives/Textarea/Textarea.d.ts +4 -0
- package/dist/primitives/Textarea/Textarea.d.ts.map +1 -0
- package/dist/primitives/Textarea/index.d.ts +3 -0
- package/dist/primitives/Textarea/index.d.ts.map +1 -0
- package/dist/style.css +357 -0
- package/dist/test-setup.d.ts +2 -0
- package/dist/test-setup.d.ts.map +1 -0
- package/dist/tokens/index.css +2 -0
- package/dist/tokens/orbit-tokens.css +80 -0
- package/dist/tokens/semantic-tokens.css +77 -0
- package/dist/tokens/tokens.d.ts +42 -0
- package/dist/tokens/tokens.d.ts.map +1 -0
- package/dist/tokens/tokens.test.d.ts +2 -0
- package/dist/tokens/tokens.test.d.ts.map +1 -0
- package/dist/types/index.d.ts +52 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/chartExport.d.ts +11 -0
- package/dist/utils/chartExport.d.ts.map +1 -0
- package/dist/utils/chartExport.test.d.ts +2 -0
- package/dist/utils/chartExport.test.d.ts.map +1 -0
- package/dist/utils/format.d.ts +14 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.test.d.ts +2 -0
- package/dist/utils/format.test.d.ts.map +1 -0
- package/package.json +114 -0
package/dist/index3.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
function useClickOutside(ref, handler) {
|
|
3
|
+
useEffect(() => {
|
|
4
|
+
const listener = (event) => {
|
|
5
|
+
if (!ref.current || ref.current.contains(event.target)) return;
|
|
6
|
+
handler(event);
|
|
7
|
+
};
|
|
8
|
+
document.addEventListener("mousedown", listener);
|
|
9
|
+
document.addEventListener("touchstart", listener);
|
|
10
|
+
return () => {
|
|
11
|
+
document.removeEventListener("mousedown", listener);
|
|
12
|
+
document.removeEventListener("touchstart", listener);
|
|
13
|
+
};
|
|
14
|
+
}, [ref, handler]);
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
useClickOutside
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=index3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index3.js","sources":["../src/hooks/useClickOutside.ts"],"sourcesContent":["import { useEffect, type RefObject } from 'react';\n\n/** Calls `handler` when a click occurs outside the element referenced by `ref`. */\nexport function useClickOutside<T extends HTMLElement>(\n ref: RefObject<T | null>,\n handler: (event: MouseEvent | TouchEvent) => void,\n) {\n useEffect(() => {\n const listener = (event: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(event.target as Node)) return;\n handler(event);\n };\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [ref, handler]);\n}\n"],"names":[],"mappings":";AAGO,SAAS,gBACd,KACA,SACA;AACA,YAAU,MAAM;AACd,UAAM,WAAW,CAAC,UAAmC;AACnD,UAAI,CAAC,IAAI,WAAW,IAAI,QAAQ,SAAS,MAAM,MAAc,EAAG;AAChE,cAAQ,KAAK;AAAA,IACf;AACA,aAAS,iBAAiB,aAAa,QAAQ;AAC/C,aAAS,iBAAiB,cAAc,QAAQ;AAChD,WAAO,MAAM;AACX,eAAS,oBAAoB,aAAa,QAAQ;AAClD,eAAS,oBAAoB,cAAc,QAAQ;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,KAAK,OAAO,CAAC;AACnB;"}
|
package/dist/index4.cjs
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const react = require("react");
|
|
4
|
+
function useEscapeKey(handler, enabled = true) {
|
|
5
|
+
react.useEffect(() => {
|
|
6
|
+
if (!enabled) return;
|
|
7
|
+
const onKeyDown = (e) => {
|
|
8
|
+
if (e.key === "Escape") handler();
|
|
9
|
+
};
|
|
10
|
+
document.addEventListener("keydown", onKeyDown);
|
|
11
|
+
return () => document.removeEventListener("keydown", onKeyDown);
|
|
12
|
+
}, [handler, enabled]);
|
|
13
|
+
}
|
|
14
|
+
exports.useEscapeKey = useEscapeKey;
|
|
15
|
+
//# sourceMappingURL=index4.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index4.cjs","sources":["../src/hooks/useEscapeKey.ts"],"sourcesContent":["import { useEffect } from 'react';\n\n/** Calls `handler` when the Escape key is pressed while `enabled` is true. */\nexport function useEscapeKey(handler: () => void, enabled = true) {\n useEffect(() => {\n if (!enabled) return;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') handler();\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [handler, enabled]);\n}\n"],"names":["useEffect"],"mappings":";;;AAGO,SAAS,aAAa,SAAqB,UAAU,MAAM;AAChEA,QAAAA,UAAU,MAAM;AACd,QAAI,CAAC,QAAS;AACd,UAAM,YAAY,CAAC,MAAqB;AACtC,UAAI,EAAE,QAAQ,SAAU,SAAA;AAAA,IAC1B;AACA,aAAS,iBAAiB,WAAW,SAAS;AAC9C,WAAO,MAAM,SAAS,oBAAoB,WAAW,SAAS;AAAA,EAChE,GAAG,CAAC,SAAS,OAAO,CAAC;AACvB;;"}
|
package/dist/index4.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
function useEscapeKey(handler, enabled = true) {
|
|
3
|
+
useEffect(() => {
|
|
4
|
+
if (!enabled) return;
|
|
5
|
+
const onKeyDown = (e) => {
|
|
6
|
+
if (e.key === "Escape") handler();
|
|
7
|
+
};
|
|
8
|
+
document.addEventListener("keydown", onKeyDown);
|
|
9
|
+
return () => document.removeEventListener("keydown", onKeyDown);
|
|
10
|
+
}, [handler, enabled]);
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
useEscapeKey
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=index4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index4.js","sources":["../src/hooks/useEscapeKey.ts"],"sourcesContent":["import { useEffect } from 'react';\n\n/** Calls `handler` when the Escape key is pressed while `enabled` is true. */\nexport function useEscapeKey(handler: () => void, enabled = true) {\n useEffect(() => {\n if (!enabled) return;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') handler();\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [handler, enabled]);\n}\n"],"names":[],"mappings":";AAGO,SAAS,aAAa,SAAqB,UAAU,MAAM;AAChE,YAAU,MAAM;AACd,QAAI,CAAC,QAAS;AACd,UAAM,YAAY,CAAC,MAAqB;AACtC,UAAI,EAAE,QAAQ,SAAU,SAAA;AAAA,IAC1B;AACA,aAAS,iBAAiB,WAAW,SAAS;AAC9C,WAAO,MAAM,SAAS,oBAAoB,WAAW,SAAS;AAAA,EAChE,GAAG,CAAC,SAAS,OAAO,CAAC;AACvB;"}
|
package/dist/index5.cjs
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const react = require("react");
|
|
4
|
+
function useResizeObserver(ref) {
|
|
5
|
+
const [size, setSize] = react.useState({ width: 0, height: 0 });
|
|
6
|
+
react.useEffect(() => {
|
|
7
|
+
const element = ref.current;
|
|
8
|
+
if (!element) return;
|
|
9
|
+
const observer = new ResizeObserver((entries) => {
|
|
10
|
+
const entry = entries[0];
|
|
11
|
+
if (entry) {
|
|
12
|
+
const { width, height } = entry.contentRect;
|
|
13
|
+
setSize({ width, height });
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
observer.observe(element);
|
|
17
|
+
return () => observer.disconnect();
|
|
18
|
+
}, [ref]);
|
|
19
|
+
return size;
|
|
20
|
+
}
|
|
21
|
+
exports.useResizeObserver = useResizeObserver;
|
|
22
|
+
//# sourceMappingURL=index5.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index5.cjs","sources":["../src/hooks/useResizeObserver.ts"],"sourcesContent":["import { useEffect, useState, type RefObject } from 'react';\n\ninterface Size {\n width: number;\n height: number;\n}\n\n/** Observes the size of the element referenced by `ref` via ResizeObserver. */\nexport function useResizeObserver<T extends HTMLElement>(ref: RefObject<T | null>): Size {\n const [size, setSize] = useState<Size>({ width: 0, height: 0 });\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n const { width, height } = entry.contentRect;\n setSize({ width, height });\n }\n });\n\n observer.observe(element);\n return () => observer.disconnect();\n }, [ref]);\n\n return size;\n}\n"],"names":["useState","useEffect"],"mappings":";;;AAQO,SAAS,kBAAyC,KAAgC;AACvF,QAAM,CAAC,MAAM,OAAO,IAAIA,MAAAA,SAAe,EAAE,OAAO,GAAG,QAAQ,GAAG;AAE9DC,QAAAA,UAAU,MAAM;AACd,UAAM,UAAU,IAAI;AACpB,QAAI,CAAC,QAAS;AAEd,UAAM,WAAW,IAAI,eAAe,CAAC,YAAY;AAC/C,YAAM,QAAQ,QAAQ,CAAC;AACvB,UAAI,OAAO;AACT,cAAM,EAAE,OAAO,OAAA,IAAW,MAAM;AAChC,gBAAQ,EAAE,OAAO,QAAQ;AAAA,MAC3B;AAAA,IACF,CAAC;AAED,aAAS,QAAQ,OAAO;AACxB,WAAO,MAAM,SAAS,WAAA;AAAA,EACxB,GAAG,CAAC,GAAG,CAAC;AAER,SAAO;AACT;;"}
|
package/dist/index5.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { useState, useEffect } from "react";
|
|
2
|
+
function useResizeObserver(ref) {
|
|
3
|
+
const [size, setSize] = useState({ width: 0, height: 0 });
|
|
4
|
+
useEffect(() => {
|
|
5
|
+
const element = ref.current;
|
|
6
|
+
if (!element) return;
|
|
7
|
+
const observer = new ResizeObserver((entries) => {
|
|
8
|
+
const entry = entries[0];
|
|
9
|
+
if (entry) {
|
|
10
|
+
const { width, height } = entry.contentRect;
|
|
11
|
+
setSize({ width, height });
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
observer.observe(element);
|
|
15
|
+
return () => observer.disconnect();
|
|
16
|
+
}, [ref]);
|
|
17
|
+
return size;
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
useResizeObserver
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=index5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index5.js","sources":["../src/hooks/useResizeObserver.ts"],"sourcesContent":["import { useEffect, useState, type RefObject } from 'react';\n\ninterface Size {\n width: number;\n height: number;\n}\n\n/** Observes the size of the element referenced by `ref` via ResizeObserver. */\nexport function useResizeObserver<T extends HTMLElement>(ref: RefObject<T | null>): Size {\n const [size, setSize] = useState<Size>({ width: 0, height: 0 });\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n const { width, height } = entry.contentRect;\n setSize({ width, height });\n }\n });\n\n observer.observe(element);\n return () => observer.disconnect();\n }, [ref]);\n\n return size;\n}\n"],"names":[],"mappings":";AAQO,SAAS,kBAAyC,KAAgC;AACvF,QAAM,CAAC,MAAM,OAAO,IAAI,SAAe,EAAE,OAAO,GAAG,QAAQ,GAAG;AAE9D,YAAU,MAAM;AACd,UAAM,UAAU,IAAI;AACpB,QAAI,CAAC,QAAS;AAEd,UAAM,WAAW,IAAI,eAAe,CAAC,YAAY;AAC/C,YAAM,QAAQ,QAAQ,CAAC;AACvB,UAAI,OAAO;AACT,cAAM,EAAE,OAAO,OAAA,IAAW,MAAM;AAChC,gBAAQ,EAAE,OAAO,QAAQ;AAAA,MAC3B;AAAA,IACF,CAAC;AAED,aAAS,QAAQ,OAAO;AACxB,WAAO,MAAM,SAAS,WAAA;AAAA,EACxB,GAAG,CAAC,GAAG,CAAC;AAER,SAAO;AACT;"}
|
package/dist/index6.cjs
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const truncateWithEllipsis = (value, maxLength = 36) => {
|
|
4
|
+
if (value.length <= maxLength) return value;
|
|
5
|
+
if (maxLength <= 3) return value.slice(0, maxLength);
|
|
6
|
+
return `${value.slice(0, maxLength - 3)}...`;
|
|
7
|
+
};
|
|
8
|
+
const formatNumber = (value, options) => Number.isFinite(value) ? value.toLocaleString(void 0, options) : "0";
|
|
9
|
+
const formatBytes = (value) => {
|
|
10
|
+
if (!Number.isFinite(value) || value === 0) return "0 B";
|
|
11
|
+
const units = ["B", "KB", "MB", "GB", "TB", "PB"];
|
|
12
|
+
let index = 0;
|
|
13
|
+
let current = Math.abs(value);
|
|
14
|
+
while (current >= 1024 && index < units.length - 1) {
|
|
15
|
+
current /= 1024;
|
|
16
|
+
index += 1;
|
|
17
|
+
}
|
|
18
|
+
const formatted = current.toFixed(current >= 10 || index === 0 ? 0 : 1);
|
|
19
|
+
return `${value < 0 ? "-" : ""}${formatted} ${units[index]}`;
|
|
20
|
+
};
|
|
21
|
+
const DATETIME_FORMATTERS = /* @__PURE__ */ new Map();
|
|
22
|
+
const getDateTimeFormatter = (timeZone, withSeconds) => {
|
|
23
|
+
const key = `${timeZone}-${withSeconds ? "s" : "n"}`;
|
|
24
|
+
const cached = DATETIME_FORMATTERS.get(key);
|
|
25
|
+
if (cached) return cached;
|
|
26
|
+
const formatter = new Intl.DateTimeFormat(void 0, {
|
|
27
|
+
year: "numeric",
|
|
28
|
+
month: "2-digit",
|
|
29
|
+
day: "2-digit",
|
|
30
|
+
hour: "2-digit",
|
|
31
|
+
minute: "2-digit",
|
|
32
|
+
second: withSeconds ? "2-digit" : void 0,
|
|
33
|
+
hour12: false,
|
|
34
|
+
timeZone
|
|
35
|
+
});
|
|
36
|
+
DATETIME_FORMATTERS.set(key, formatter);
|
|
37
|
+
return formatter;
|
|
38
|
+
};
|
|
39
|
+
const formatDataTimestamp = (value, options = {}) => {
|
|
40
|
+
const { fallback = "Unknown", withSeconds = false, timeZone = "UTC", showTimeZoneLabel = false } = options;
|
|
41
|
+
if (!value) return fallback;
|
|
42
|
+
const date = new Date(value);
|
|
43
|
+
if (Number.isNaN(date.getTime())) return typeof value === "string" ? value : fallback;
|
|
44
|
+
const formatter = getDateTimeFormatter(timeZone, withSeconds);
|
|
45
|
+
const formatted = formatter.format(date);
|
|
46
|
+
return showTimeZoneLabel ? `${formatted} ${timeZone}` : formatted;
|
|
47
|
+
};
|
|
48
|
+
const formatLocalISOString = (date) => {
|
|
49
|
+
const pad = (n) => `${n}`.padStart(2, "0");
|
|
50
|
+
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;
|
|
51
|
+
};
|
|
52
|
+
const generateUUID = () => {
|
|
53
|
+
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
54
|
+
return crypto.randomUUID();
|
|
55
|
+
}
|
|
56
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
|
|
57
|
+
const r = Math.random() * 16 | 0;
|
|
58
|
+
const v = c === "x" ? r : r & 3 | 8;
|
|
59
|
+
return v.toString(16);
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
exports.formatBytes = formatBytes;
|
|
63
|
+
exports.formatDataTimestamp = formatDataTimestamp;
|
|
64
|
+
exports.formatLocalISOString = formatLocalISOString;
|
|
65
|
+
exports.formatNumber = formatNumber;
|
|
66
|
+
exports.generateUUID = generateUUID;
|
|
67
|
+
exports.truncateWithEllipsis = truncateWithEllipsis;
|
|
68
|
+
//# sourceMappingURL=index6.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index6.cjs","sources":["../src/utils/format.ts"],"sourcesContent":["export const truncateWithEllipsis = (value: string, maxLength = 36) => {\n if (value.length <= maxLength) return value;\n if (maxLength <= 3) return value.slice(0, maxLength);\n return `${value.slice(0, maxLength - 3)}...`;\n};\n\nexport const formatNumber = (value: number, options?: Intl.NumberFormatOptions) =>\n Number.isFinite(value) ? value.toLocaleString(undefined, options) : '0';\n\nexport const formatBytes = (value: number): string => {\n if (!Number.isFinite(value) || value === 0) return '0 B';\n const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n let index = 0;\n let current = Math.abs(value);\n while (current >= 1024 && index < units.length - 1) {\n current /= 1024;\n index += 1;\n }\n const formatted = current.toFixed(current >= 10 || index === 0 ? 0 : 1);\n return `${value < 0 ? '-' : ''}${formatted} ${units[index]}`;\n};\n\ninterface FormatDataTimestampOptions {\n fallback?: string;\n withSeconds?: boolean;\n timeZone?: string;\n showTimeZoneLabel?: boolean;\n}\n\nconst DATETIME_FORMATTERS = new Map<string, Intl.DateTimeFormat>();\n\nconst getDateTimeFormatter = (timeZone: string, withSeconds: boolean) => {\n const key = `${timeZone}-${withSeconds ? 's' : 'n'}`;\n const cached = DATETIME_FORMATTERS.get(key);\n if (cached) return cached;\n const formatter = new Intl.DateTimeFormat(undefined, {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: withSeconds ? '2-digit' : undefined,\n hour12: false,\n timeZone,\n });\n DATETIME_FORMATTERS.set(key, formatter);\n return formatter;\n};\n\nexport const formatDataTimestamp = (\n value: string | null | undefined,\n options: FormatDataTimestampOptions = {},\n): string => {\n const { fallback = 'Unknown', withSeconds = false, timeZone = 'UTC', showTimeZoneLabel = false } =\n options;\n if (!value) return fallback;\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return typeof value === 'string' ? value : fallback;\n const formatter = getDateTimeFormatter(timeZone, withSeconds);\n const formatted = formatter.format(date);\n return showTimeZoneLabel ? `${formatted} ${timeZone}` : formatted;\n};\n\nexport const formatLocalISOString = (date: Date): string => {\n const pad = (n: number) => `${n}`.padStart(2, '0');\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;\n};\n\nexport const generateUUID = (): string => {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n"],"names":[],"mappings":";;AAAO,MAAM,uBAAuB,CAAC,OAAe,YAAY,OAAO;AACrE,MAAI,MAAM,UAAU,UAAW,QAAO;AACtC,MAAI,aAAa,EAAG,QAAO,MAAM,MAAM,GAAG,SAAS;AACnD,SAAO,GAAG,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC;AACzC;AAEO,MAAM,eAAe,CAAC,OAAe,YAC1C,OAAO,SAAS,KAAK,IAAI,MAAM,eAAe,QAAW,OAAO,IAAI;AAE/D,MAAM,cAAc,CAAC,UAA0B;AACpD,MAAI,CAAC,OAAO,SAAS,KAAK,KAAK,UAAU,EAAG,QAAO;AACnD,QAAM,QAAQ,CAAC,KAAK,MAAM,MAAM,MAAM,MAAM,IAAI;AAChD,MAAI,QAAQ;AACZ,MAAI,UAAU,KAAK,IAAI,KAAK;AAC5B,SAAO,WAAW,QAAQ,QAAQ,MAAM,SAAS,GAAG;AAClD,eAAW;AACX,aAAS;AAAA,EACX;AACA,QAAM,YAAY,QAAQ,QAAQ,WAAW,MAAM,UAAU,IAAI,IAAI,CAAC;AACtE,SAAO,GAAG,QAAQ,IAAI,MAAM,EAAE,GAAG,SAAS,IAAI,MAAM,KAAK,CAAC;AAC5D;AASA,MAAM,0CAA0B,IAAA;AAEhC,MAAM,uBAAuB,CAAC,UAAkB,gBAAyB;AACvE,QAAM,MAAM,GAAG,QAAQ,IAAI,cAAc,MAAM,GAAG;AAClD,QAAM,SAAS,oBAAoB,IAAI,GAAG;AAC1C,MAAI,OAAQ,QAAO;AACnB,QAAM,YAAY,IAAI,KAAK,eAAe,QAAW;AAAA,IACnD,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ,cAAc,YAAY;AAAA,IAClC,QAAQ;AAAA,IACR;AAAA,EAAA,CACD;AACD,sBAAoB,IAAI,KAAK,SAAS;AACtC,SAAO;AACT;AAEO,MAAM,sBAAsB,CACjC,OACA,UAAsC,OAC3B;AACX,QAAM,EAAE,WAAW,WAAW,cAAc,OAAO,WAAW,OAAO,oBAAoB,MAAA,IACvF;AACF,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,MAAI,OAAO,MAAM,KAAK,QAAA,CAAS,EAAG,QAAO,OAAO,UAAU,WAAW,QAAQ;AAC7E,QAAM,YAAY,qBAAqB,UAAU,WAAW;AAC5D,QAAM,YAAY,UAAU,OAAO,IAAI;AACvC,SAAO,oBAAoB,GAAG,SAAS,IAAI,QAAQ,KAAK;AAC1D;AAEO,MAAM,uBAAuB,CAAC,SAAuB;AAC1D,QAAM,MAAM,CAAC,MAAc,GAAG,CAAC,GAAG,SAAS,GAAG,GAAG;AACjD,SAAO,GAAG,KAAK,YAAA,CAAa,IAAI,IAAI,KAAK,SAAA,IAAa,CAAC,CAAC,IAAI,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,KAAK,SAAA,CAAU,CAAC,IAAI,IAAI,KAAK,WAAA,CAAY,CAAC,IAAI,IAAI,KAAK,WAAA,CAAY,CAAC;AAC7J;AAEO,MAAM,eAAe,MAAc;AACxC,MAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,YAAY;AAC5E,WAAO,OAAO,WAAA;AAAA,EAChB;AACA,SAAO,uCAAuC,QAAQ,SAAS,CAAC,MAAM;AACpE,UAAM,IAAK,KAAK,OAAA,IAAW,KAAM;AACjC,UAAM,IAAI,MAAM,MAAM,IAAK,IAAI,IAAO;AACtC,WAAO,EAAE,SAAS,EAAE;AAAA,EACtB,CAAC;AACH;;;;;;;"}
|
package/dist/index6.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
const truncateWithEllipsis = (value, maxLength = 36) => {
|
|
2
|
+
if (value.length <= maxLength) return value;
|
|
3
|
+
if (maxLength <= 3) return value.slice(0, maxLength);
|
|
4
|
+
return `${value.slice(0, maxLength - 3)}...`;
|
|
5
|
+
};
|
|
6
|
+
const formatNumber = (value, options) => Number.isFinite(value) ? value.toLocaleString(void 0, options) : "0";
|
|
7
|
+
const formatBytes = (value) => {
|
|
8
|
+
if (!Number.isFinite(value) || value === 0) return "0 B";
|
|
9
|
+
const units = ["B", "KB", "MB", "GB", "TB", "PB"];
|
|
10
|
+
let index = 0;
|
|
11
|
+
let current = Math.abs(value);
|
|
12
|
+
while (current >= 1024 && index < units.length - 1) {
|
|
13
|
+
current /= 1024;
|
|
14
|
+
index += 1;
|
|
15
|
+
}
|
|
16
|
+
const formatted = current.toFixed(current >= 10 || index === 0 ? 0 : 1);
|
|
17
|
+
return `${value < 0 ? "-" : ""}${formatted} ${units[index]}`;
|
|
18
|
+
};
|
|
19
|
+
const DATETIME_FORMATTERS = /* @__PURE__ */ new Map();
|
|
20
|
+
const getDateTimeFormatter = (timeZone, withSeconds) => {
|
|
21
|
+
const key = `${timeZone}-${withSeconds ? "s" : "n"}`;
|
|
22
|
+
const cached = DATETIME_FORMATTERS.get(key);
|
|
23
|
+
if (cached) return cached;
|
|
24
|
+
const formatter = new Intl.DateTimeFormat(void 0, {
|
|
25
|
+
year: "numeric",
|
|
26
|
+
month: "2-digit",
|
|
27
|
+
day: "2-digit",
|
|
28
|
+
hour: "2-digit",
|
|
29
|
+
minute: "2-digit",
|
|
30
|
+
second: withSeconds ? "2-digit" : void 0,
|
|
31
|
+
hour12: false,
|
|
32
|
+
timeZone
|
|
33
|
+
});
|
|
34
|
+
DATETIME_FORMATTERS.set(key, formatter);
|
|
35
|
+
return formatter;
|
|
36
|
+
};
|
|
37
|
+
const formatDataTimestamp = (value, options = {}) => {
|
|
38
|
+
const { fallback = "Unknown", withSeconds = false, timeZone = "UTC", showTimeZoneLabel = false } = options;
|
|
39
|
+
if (!value) return fallback;
|
|
40
|
+
const date = new Date(value);
|
|
41
|
+
if (Number.isNaN(date.getTime())) return typeof value === "string" ? value : fallback;
|
|
42
|
+
const formatter = getDateTimeFormatter(timeZone, withSeconds);
|
|
43
|
+
const formatted = formatter.format(date);
|
|
44
|
+
return showTimeZoneLabel ? `${formatted} ${timeZone}` : formatted;
|
|
45
|
+
};
|
|
46
|
+
const formatLocalISOString = (date) => {
|
|
47
|
+
const pad = (n) => `${n}`.padStart(2, "0");
|
|
48
|
+
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;
|
|
49
|
+
};
|
|
50
|
+
const generateUUID = () => {
|
|
51
|
+
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
52
|
+
return crypto.randomUUID();
|
|
53
|
+
}
|
|
54
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
|
|
55
|
+
const r = Math.random() * 16 | 0;
|
|
56
|
+
const v = c === "x" ? r : r & 3 | 8;
|
|
57
|
+
return v.toString(16);
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
export {
|
|
61
|
+
formatBytes,
|
|
62
|
+
formatDataTimestamp,
|
|
63
|
+
formatLocalISOString,
|
|
64
|
+
formatNumber,
|
|
65
|
+
generateUUID,
|
|
66
|
+
truncateWithEllipsis
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=index6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index6.js","sources":["../src/utils/format.ts"],"sourcesContent":["export const truncateWithEllipsis = (value: string, maxLength = 36) => {\n if (value.length <= maxLength) return value;\n if (maxLength <= 3) return value.slice(0, maxLength);\n return `${value.slice(0, maxLength - 3)}...`;\n};\n\nexport const formatNumber = (value: number, options?: Intl.NumberFormatOptions) =>\n Number.isFinite(value) ? value.toLocaleString(undefined, options) : '0';\n\nexport const formatBytes = (value: number): string => {\n if (!Number.isFinite(value) || value === 0) return '0 B';\n const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n let index = 0;\n let current = Math.abs(value);\n while (current >= 1024 && index < units.length - 1) {\n current /= 1024;\n index += 1;\n }\n const formatted = current.toFixed(current >= 10 || index === 0 ? 0 : 1);\n return `${value < 0 ? '-' : ''}${formatted} ${units[index]}`;\n};\n\ninterface FormatDataTimestampOptions {\n fallback?: string;\n withSeconds?: boolean;\n timeZone?: string;\n showTimeZoneLabel?: boolean;\n}\n\nconst DATETIME_FORMATTERS = new Map<string, Intl.DateTimeFormat>();\n\nconst getDateTimeFormatter = (timeZone: string, withSeconds: boolean) => {\n const key = `${timeZone}-${withSeconds ? 's' : 'n'}`;\n const cached = DATETIME_FORMATTERS.get(key);\n if (cached) return cached;\n const formatter = new Intl.DateTimeFormat(undefined, {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: withSeconds ? '2-digit' : undefined,\n hour12: false,\n timeZone,\n });\n DATETIME_FORMATTERS.set(key, formatter);\n return formatter;\n};\n\nexport const formatDataTimestamp = (\n value: string | null | undefined,\n options: FormatDataTimestampOptions = {},\n): string => {\n const { fallback = 'Unknown', withSeconds = false, timeZone = 'UTC', showTimeZoneLabel = false } =\n options;\n if (!value) return fallback;\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return typeof value === 'string' ? value : fallback;\n const formatter = getDateTimeFormatter(timeZone, withSeconds);\n const formatted = formatter.format(date);\n return showTimeZoneLabel ? `${formatted} ${timeZone}` : formatted;\n};\n\nexport const formatLocalISOString = (date: Date): string => {\n const pad = (n: number) => `${n}`.padStart(2, '0');\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;\n};\n\nexport const generateUUID = (): string => {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n"],"names":[],"mappings":"AAAO,MAAM,uBAAuB,CAAC,OAAe,YAAY,OAAO;AACrE,MAAI,MAAM,UAAU,UAAW,QAAO;AACtC,MAAI,aAAa,EAAG,QAAO,MAAM,MAAM,GAAG,SAAS;AACnD,SAAO,GAAG,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC;AACzC;AAEO,MAAM,eAAe,CAAC,OAAe,YAC1C,OAAO,SAAS,KAAK,IAAI,MAAM,eAAe,QAAW,OAAO,IAAI;AAE/D,MAAM,cAAc,CAAC,UAA0B;AACpD,MAAI,CAAC,OAAO,SAAS,KAAK,KAAK,UAAU,EAAG,QAAO;AACnD,QAAM,QAAQ,CAAC,KAAK,MAAM,MAAM,MAAM,MAAM,IAAI;AAChD,MAAI,QAAQ;AACZ,MAAI,UAAU,KAAK,IAAI,KAAK;AAC5B,SAAO,WAAW,QAAQ,QAAQ,MAAM,SAAS,GAAG;AAClD,eAAW;AACX,aAAS;AAAA,EACX;AACA,QAAM,YAAY,QAAQ,QAAQ,WAAW,MAAM,UAAU,IAAI,IAAI,CAAC;AACtE,SAAO,GAAG,QAAQ,IAAI,MAAM,EAAE,GAAG,SAAS,IAAI,MAAM,KAAK,CAAC;AAC5D;AASA,MAAM,0CAA0B,IAAA;AAEhC,MAAM,uBAAuB,CAAC,UAAkB,gBAAyB;AACvE,QAAM,MAAM,GAAG,QAAQ,IAAI,cAAc,MAAM,GAAG;AAClD,QAAM,SAAS,oBAAoB,IAAI,GAAG;AAC1C,MAAI,OAAQ,QAAO;AACnB,QAAM,YAAY,IAAI,KAAK,eAAe,QAAW;AAAA,IACnD,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ,cAAc,YAAY;AAAA,IAClC,QAAQ;AAAA,IACR;AAAA,EAAA,CACD;AACD,sBAAoB,IAAI,KAAK,SAAS;AACtC,SAAO;AACT;AAEO,MAAM,sBAAsB,CACjC,OACA,UAAsC,OAC3B;AACX,QAAM,EAAE,WAAW,WAAW,cAAc,OAAO,WAAW,OAAO,oBAAoB,MAAA,IACvF;AACF,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,MAAI,OAAO,MAAM,KAAK,QAAA,CAAS,EAAG,QAAO,OAAO,UAAU,WAAW,QAAQ;AAC7E,QAAM,YAAY,qBAAqB,UAAU,WAAW;AAC5D,QAAM,YAAY,UAAU,OAAO,IAAI;AACvC,SAAO,oBAAoB,GAAG,SAAS,IAAI,QAAQ,KAAK;AAC1D;AAEO,MAAM,uBAAuB,CAAC,SAAuB;AAC1D,QAAM,MAAM,CAAC,MAAc,GAAG,CAAC,GAAG,SAAS,GAAG,GAAG;AACjD,SAAO,GAAG,KAAK,YAAA,CAAa,IAAI,IAAI,KAAK,SAAA,IAAa,CAAC,CAAC,IAAI,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,KAAK,SAAA,CAAU,CAAC,IAAI,IAAI,KAAK,WAAA,CAAY,CAAC,IAAI,IAAI,KAAK,WAAA,CAAY,CAAC;AAC7J;AAEO,MAAM,eAAe,MAAc;AACxC,MAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,YAAY;AAC5E,WAAO,OAAO,WAAA;AAAA,EAChB;AACA,SAAO,uCAAuC,QAAQ,SAAS,CAAC,MAAM;AACpE,UAAM,IAAK,KAAK,OAAA,IAAW,KAAM;AACjC,UAAM,IAAI,MAAM,MAAM,IAAK,IAAI,IAAO;AACtC,WAAO,EAAE,SAAS,EAAE;AAAA,EACtB,CAAC;AACH;"}
|
package/dist/index7.cjs
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const ensureString = (value) => value === null || value === void 0 ? "" : String(value);
|
|
4
|
+
const toStringTable = (table) => table.map((row) => row.map((cell) => ensureString(cell)));
|
|
5
|
+
const sanitizeFilename = (value) => {
|
|
6
|
+
const normalized = value.normalize().replace(/[^\p{L}\p{N}]+/gu, "-").replace(/^-+|-+$/g, "").toLowerCase();
|
|
7
|
+
return normalized || "export";
|
|
8
|
+
};
|
|
9
|
+
const buildCsv = (table) => {
|
|
10
|
+
const rows = toStringTable(table);
|
|
11
|
+
return rows.map(
|
|
12
|
+
(row) => row.map((cell) => {
|
|
13
|
+
const escaped = cell.replace(/"/g, '""');
|
|
14
|
+
return /[",\n]/.test(escaped) ? `"${escaped}"` : escaped;
|
|
15
|
+
}).join(",")
|
|
16
|
+
).join("\r\n");
|
|
17
|
+
};
|
|
18
|
+
const triggerDownload = (blob, filename) => {
|
|
19
|
+
const link = document.createElement("a");
|
|
20
|
+
const url = URL.createObjectURL(blob);
|
|
21
|
+
link.href = url;
|
|
22
|
+
link.download = filename;
|
|
23
|
+
document.body.appendChild(link);
|
|
24
|
+
link.click();
|
|
25
|
+
document.body.removeChild(link);
|
|
26
|
+
URL.revokeObjectURL(url);
|
|
27
|
+
};
|
|
28
|
+
const exportTableToCsv = (table, filename) => {
|
|
29
|
+
if (table.length === 0) return;
|
|
30
|
+
const csv = buildCsv(table);
|
|
31
|
+
const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" });
|
|
32
|
+
const finalName = filename.endsWith(".csv") ? filename : `${filename}.csv`;
|
|
33
|
+
triggerDownload(blob, finalName);
|
|
34
|
+
};
|
|
35
|
+
const getChartPngDataUrl = (chart) => chart.getDataURL({ type: "png", pixelRatio: 2, backgroundColor: "#ffffff" });
|
|
36
|
+
const downloadImageDataUrl = (dataUrl, filename) => {
|
|
37
|
+
const link = document.createElement("a");
|
|
38
|
+
link.href = dataUrl;
|
|
39
|
+
link.download = filename;
|
|
40
|
+
document.body.appendChild(link);
|
|
41
|
+
link.click();
|
|
42
|
+
document.body.removeChild(link);
|
|
43
|
+
};
|
|
44
|
+
const buildTableHtml = (table) => {
|
|
45
|
+
const rows = toStringTable(table);
|
|
46
|
+
if (rows.length === 0) return "";
|
|
47
|
+
const [header, ...body] = rows;
|
|
48
|
+
const thead = `<thead><tr>${header.map((c) => `<th>${c}</th>`).join("")}</tr></thead>`;
|
|
49
|
+
const tbody = body.map((r) => `<tr>${r.map((c) => `<td>${c}</td>`).join("")}</tr>`).join("");
|
|
50
|
+
return `<table>${thead}<tbody>${tbody}</tbody></table>`;
|
|
51
|
+
};
|
|
52
|
+
const openPrintWindowWithChart = (title, chartDataUrl, table) => {
|
|
53
|
+
const win = window.open("", "_blank");
|
|
54
|
+
if (!win) return;
|
|
55
|
+
const tableHtml = buildTableHtml(table);
|
|
56
|
+
win.document.write("<!DOCTYPE html>");
|
|
57
|
+
win.document.write(`<html><head><title>${title}</title>`);
|
|
58
|
+
win.document.write(
|
|
59
|
+
"<style>body{font-family:Arial,Helvetica,sans-serif;padding:24px;color:#1f2937;}h1{font-size:20px;margin-bottom:16px;}img{max-width:100%;height:auto;margin-bottom:16px;border:1px solid #e5e7eb;border-radius:12px;}table{border-collapse:collapse;width:100%;}th,td{border:1px solid #d1d5db;padding:8px;text-align:left;font-size:12px;}th{background:#f3f4f6;text-transform:uppercase;letter-spacing:0.05em;font-weight:600;}</style>"
|
|
60
|
+
);
|
|
61
|
+
win.document.write("</head><body>");
|
|
62
|
+
win.document.write(`<h1>${title}</h1>`);
|
|
63
|
+
win.document.write(`<img src="${chartDataUrl}" alt="${title}" />`);
|
|
64
|
+
win.document.write(tableHtml);
|
|
65
|
+
win.document.write("</body></html>");
|
|
66
|
+
win.document.close();
|
|
67
|
+
win.focus();
|
|
68
|
+
setTimeout(() => win.print(), 300);
|
|
69
|
+
};
|
|
70
|
+
const composeFilename = (title, suffix) => {
|
|
71
|
+
const base = sanitizeFilename(title);
|
|
72
|
+
if (suffix && suffix.trim().length > 0) {
|
|
73
|
+
const suffixSanitized = sanitizeFilename(suffix);
|
|
74
|
+
return `${base}-${suffixSanitized}`;
|
|
75
|
+
}
|
|
76
|
+
return base;
|
|
77
|
+
};
|
|
78
|
+
exports.composeFilename = composeFilename;
|
|
79
|
+
exports.downloadImageDataUrl = downloadImageDataUrl;
|
|
80
|
+
exports.exportTableToCsv = exportTableToCsv;
|
|
81
|
+
exports.getChartPngDataUrl = getChartPngDataUrl;
|
|
82
|
+
exports.openPrintWindowWithChart = openPrintWindowWithChart;
|
|
83
|
+
exports.sanitizeFilename = sanitizeFilename;
|
|
84
|
+
exports.toStringTable = toStringTable;
|
|
85
|
+
//# sourceMappingURL=index7.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index7.cjs","sources":["../src/utils/chartExport.ts"],"sourcesContent":["export type TableData = Array<Array<string | number>>;\n\nconst ensureString = (value: string | number): string =>\n value === null || value === undefined ? '' : String(value);\n\nexport const toStringTable = (table: TableData): string[][] =>\n table.map((row) => row.map((cell) => ensureString(cell)));\n\nexport const sanitizeFilename = (value: string): string => {\n const normalized = value\n .normalize()\n .replace(/[^\\p{L}\\p{N}]+/gu, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n return normalized || 'export';\n};\n\nconst buildCsv = (table: TableData): string => {\n const rows = toStringTable(table);\n return rows\n .map((row) =>\n row\n .map((cell) => {\n const escaped = cell.replace(/\"/g, '\"\"');\n return /[\",\\n]/.test(escaped) ? `\"${escaped}\"` : escaped;\n })\n .join(','),\n )\n .join('\\r\\n');\n};\n\nconst triggerDownload = (blob: Blob, filename: string) => {\n const link = document.createElement('a');\n const url = URL.createObjectURL(blob);\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n};\n\nexport const exportTableToCsv = (table: TableData, filename: string) => {\n if (table.length === 0) return;\n const csv = buildCsv(table);\n const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });\n const finalName = filename.endsWith('.csv') ? filename : `${filename}.csv`;\n triggerDownload(blob, finalName);\n};\n\nexport const getChartPngDataUrl = (chart: { getDataURL: (opts: Record<string, unknown>) => string }): string =>\n chart.getDataURL({ type: 'png', pixelRatio: 2, backgroundColor: '#ffffff' });\n\nexport const downloadImageDataUrl = (dataUrl: string, filename: string) => {\n const link = document.createElement('a');\n link.href = dataUrl;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n\nconst buildTableHtml = (table: TableData): string => {\n const rows = toStringTable(table);\n if (rows.length === 0) return '';\n const [header, ...body] = rows;\n const thead = `<thead><tr>${header.map((c) => `<th>${c}</th>`).join('')}</tr></thead>`;\n const tbody = body.map((r) => `<tr>${r.map((c) => `<td>${c}</td>`).join('')}</tr>`).join('');\n return `<table>${thead}<tbody>${tbody}</tbody></table>`;\n};\n\nexport const openPrintWindowWithChart = (title: string, chartDataUrl: string, table: TableData) => {\n const win = window.open('', '_blank');\n if (!win) return;\n const tableHtml = buildTableHtml(table);\n win.document.write('<!DOCTYPE html>');\n win.document.write(`<html><head><title>${title}</title>`);\n win.document.write(\n '<style>body{font-family:Arial,Helvetica,sans-serif;padding:24px;color:#1f2937;}h1{font-size:20px;margin-bottom:16px;}img{max-width:100%;height:auto;margin-bottom:16px;border:1px solid #e5e7eb;border-radius:12px;}table{border-collapse:collapse;width:100%;}th,td{border:1px solid #d1d5db;padding:8px;text-align:left;font-size:12px;}th{background:#f3f4f6;text-transform:uppercase;letter-spacing:0.05em;font-weight:600;}</style>',\n );\n win.document.write('</head><body>');\n win.document.write(`<h1>${title}</h1>`);\n win.document.write(`<img src=\"${chartDataUrl}\" alt=\"${title}\" />`);\n win.document.write(tableHtml);\n win.document.write('</body></html>');\n win.document.close();\n win.focus();\n setTimeout(() => win.print(), 300);\n};\n\nexport const composeFilename = (title: string, suffix?: string) => {\n const base = sanitizeFilename(title);\n if (suffix && suffix.trim().length > 0) {\n const suffixSanitized = sanitizeFilename(suffix);\n return suffixSanitized ? `${base}-${suffixSanitized}` : base;\n }\n return base;\n};\n"],"names":[],"mappings":"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"}
|
package/dist/index7.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
const ensureString = (value) => value === null || value === void 0 ? "" : String(value);
|
|
2
|
+
const toStringTable = (table) => table.map((row) => row.map((cell) => ensureString(cell)));
|
|
3
|
+
const sanitizeFilename = (value) => {
|
|
4
|
+
const normalized = value.normalize().replace(/[^\p{L}\p{N}]+/gu, "-").replace(/^-+|-+$/g, "").toLowerCase();
|
|
5
|
+
return normalized || "export";
|
|
6
|
+
};
|
|
7
|
+
const buildCsv = (table) => {
|
|
8
|
+
const rows = toStringTable(table);
|
|
9
|
+
return rows.map(
|
|
10
|
+
(row) => row.map((cell) => {
|
|
11
|
+
const escaped = cell.replace(/"/g, '""');
|
|
12
|
+
return /[",\n]/.test(escaped) ? `"${escaped}"` : escaped;
|
|
13
|
+
}).join(",")
|
|
14
|
+
).join("\r\n");
|
|
15
|
+
};
|
|
16
|
+
const triggerDownload = (blob, filename) => {
|
|
17
|
+
const link = document.createElement("a");
|
|
18
|
+
const url = URL.createObjectURL(blob);
|
|
19
|
+
link.href = url;
|
|
20
|
+
link.download = filename;
|
|
21
|
+
document.body.appendChild(link);
|
|
22
|
+
link.click();
|
|
23
|
+
document.body.removeChild(link);
|
|
24
|
+
URL.revokeObjectURL(url);
|
|
25
|
+
};
|
|
26
|
+
const exportTableToCsv = (table, filename) => {
|
|
27
|
+
if (table.length === 0) return;
|
|
28
|
+
const csv = buildCsv(table);
|
|
29
|
+
const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" });
|
|
30
|
+
const finalName = filename.endsWith(".csv") ? filename : `${filename}.csv`;
|
|
31
|
+
triggerDownload(blob, finalName);
|
|
32
|
+
};
|
|
33
|
+
const getChartPngDataUrl = (chart) => chart.getDataURL({ type: "png", pixelRatio: 2, backgroundColor: "#ffffff" });
|
|
34
|
+
const downloadImageDataUrl = (dataUrl, filename) => {
|
|
35
|
+
const link = document.createElement("a");
|
|
36
|
+
link.href = dataUrl;
|
|
37
|
+
link.download = filename;
|
|
38
|
+
document.body.appendChild(link);
|
|
39
|
+
link.click();
|
|
40
|
+
document.body.removeChild(link);
|
|
41
|
+
};
|
|
42
|
+
const buildTableHtml = (table) => {
|
|
43
|
+
const rows = toStringTable(table);
|
|
44
|
+
if (rows.length === 0) return "";
|
|
45
|
+
const [header, ...body] = rows;
|
|
46
|
+
const thead = `<thead><tr>${header.map((c) => `<th>${c}</th>`).join("")}</tr></thead>`;
|
|
47
|
+
const tbody = body.map((r) => `<tr>${r.map((c) => `<td>${c}</td>`).join("")}</tr>`).join("");
|
|
48
|
+
return `<table>${thead}<tbody>${tbody}</tbody></table>`;
|
|
49
|
+
};
|
|
50
|
+
const openPrintWindowWithChart = (title, chartDataUrl, table) => {
|
|
51
|
+
const win = window.open("", "_blank");
|
|
52
|
+
if (!win) return;
|
|
53
|
+
const tableHtml = buildTableHtml(table);
|
|
54
|
+
win.document.write("<!DOCTYPE html>");
|
|
55
|
+
win.document.write(`<html><head><title>${title}</title>`);
|
|
56
|
+
win.document.write(
|
|
57
|
+
"<style>body{font-family:Arial,Helvetica,sans-serif;padding:24px;color:#1f2937;}h1{font-size:20px;margin-bottom:16px;}img{max-width:100%;height:auto;margin-bottom:16px;border:1px solid #e5e7eb;border-radius:12px;}table{border-collapse:collapse;width:100%;}th,td{border:1px solid #d1d5db;padding:8px;text-align:left;font-size:12px;}th{background:#f3f4f6;text-transform:uppercase;letter-spacing:0.05em;font-weight:600;}</style>"
|
|
58
|
+
);
|
|
59
|
+
win.document.write("</head><body>");
|
|
60
|
+
win.document.write(`<h1>${title}</h1>`);
|
|
61
|
+
win.document.write(`<img src="${chartDataUrl}" alt="${title}" />`);
|
|
62
|
+
win.document.write(tableHtml);
|
|
63
|
+
win.document.write("</body></html>");
|
|
64
|
+
win.document.close();
|
|
65
|
+
win.focus();
|
|
66
|
+
setTimeout(() => win.print(), 300);
|
|
67
|
+
};
|
|
68
|
+
const composeFilename = (title, suffix) => {
|
|
69
|
+
const base = sanitizeFilename(title);
|
|
70
|
+
if (suffix && suffix.trim().length > 0) {
|
|
71
|
+
const suffixSanitized = sanitizeFilename(suffix);
|
|
72
|
+
return `${base}-${suffixSanitized}`;
|
|
73
|
+
}
|
|
74
|
+
return base;
|
|
75
|
+
};
|
|
76
|
+
export {
|
|
77
|
+
composeFilename,
|
|
78
|
+
downloadImageDataUrl,
|
|
79
|
+
exportTableToCsv,
|
|
80
|
+
getChartPngDataUrl,
|
|
81
|
+
openPrintWindowWithChart,
|
|
82
|
+
sanitizeFilename,
|
|
83
|
+
toStringTable
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=index7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index7.js","sources":["../src/utils/chartExport.ts"],"sourcesContent":["export type TableData = Array<Array<string | number>>;\n\nconst ensureString = (value: string | number): string =>\n value === null || value === undefined ? '' : String(value);\n\nexport const toStringTable = (table: TableData): string[][] =>\n table.map((row) => row.map((cell) => ensureString(cell)));\n\nexport const sanitizeFilename = (value: string): string => {\n const normalized = value\n .normalize()\n .replace(/[^\\p{L}\\p{N}]+/gu, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n return normalized || 'export';\n};\n\nconst buildCsv = (table: TableData): string => {\n const rows = toStringTable(table);\n return rows\n .map((row) =>\n row\n .map((cell) => {\n const escaped = cell.replace(/\"/g, '\"\"');\n return /[\",\\n]/.test(escaped) ? `\"${escaped}\"` : escaped;\n })\n .join(','),\n )\n .join('\\r\\n');\n};\n\nconst triggerDownload = (blob: Blob, filename: string) => {\n const link = document.createElement('a');\n const url = URL.createObjectURL(blob);\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n};\n\nexport const exportTableToCsv = (table: TableData, filename: string) => {\n if (table.length === 0) return;\n const csv = buildCsv(table);\n const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });\n const finalName = filename.endsWith('.csv') ? filename : `${filename}.csv`;\n triggerDownload(blob, finalName);\n};\n\nexport const getChartPngDataUrl = (chart: { getDataURL: (opts: Record<string, unknown>) => string }): string =>\n chart.getDataURL({ type: 'png', pixelRatio: 2, backgroundColor: '#ffffff' });\n\nexport const downloadImageDataUrl = (dataUrl: string, filename: string) => {\n const link = document.createElement('a');\n link.href = dataUrl;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n\nconst buildTableHtml = (table: TableData): string => {\n const rows = toStringTable(table);\n if (rows.length === 0) return '';\n const [header, ...body] = rows;\n const thead = `<thead><tr>${header.map((c) => `<th>${c}</th>`).join('')}</tr></thead>`;\n const tbody = body.map((r) => `<tr>${r.map((c) => `<td>${c}</td>`).join('')}</tr>`).join('');\n return `<table>${thead}<tbody>${tbody}</tbody></table>`;\n};\n\nexport const openPrintWindowWithChart = (title: string, chartDataUrl: string, table: TableData) => {\n const win = window.open('', '_blank');\n if (!win) return;\n const tableHtml = buildTableHtml(table);\n win.document.write('<!DOCTYPE html>');\n win.document.write(`<html><head><title>${title}</title>`);\n win.document.write(\n '<style>body{font-family:Arial,Helvetica,sans-serif;padding:24px;color:#1f2937;}h1{font-size:20px;margin-bottom:16px;}img{max-width:100%;height:auto;margin-bottom:16px;border:1px solid #e5e7eb;border-radius:12px;}table{border-collapse:collapse;width:100%;}th,td{border:1px solid #d1d5db;padding:8px;text-align:left;font-size:12px;}th{background:#f3f4f6;text-transform:uppercase;letter-spacing:0.05em;font-weight:600;}</style>',\n );\n win.document.write('</head><body>');\n win.document.write(`<h1>${title}</h1>`);\n win.document.write(`<img src=\"${chartDataUrl}\" alt=\"${title}\" />`);\n win.document.write(tableHtml);\n win.document.write('</body></html>');\n win.document.close();\n win.focus();\n setTimeout(() => win.print(), 300);\n};\n\nexport const composeFilename = (title: string, suffix?: string) => {\n const base = sanitizeFilename(title);\n if (suffix && suffix.trim().length > 0) {\n const suffixSanitized = sanitizeFilename(suffix);\n return suffixSanitized ? `${base}-${suffixSanitized}` : base;\n }\n return base;\n};\n"],"names":[],"mappings":"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"}
|
package/dist/index8.cjs
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const clsx = require("./index17.cjs");
|
|
5
|
+
const Avatar_module = require("./index26.cjs");
|
|
6
|
+
const Avatar = ({ label, size = "md", className, ...props }) => {
|
|
7
|
+
const initials = label.split(" ").filter(Boolean).map((part) => part[0]).join("").slice(0, 2).toUpperCase();
|
|
8
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
9
|
+
"span",
|
|
10
|
+
{
|
|
11
|
+
className: clsx.clsx(Avatar_module.default.root, Avatar_module.default[size], className),
|
|
12
|
+
"aria-hidden": "true",
|
|
13
|
+
...props,
|
|
14
|
+
children: initials || "?"
|
|
15
|
+
}
|
|
16
|
+
);
|
|
17
|
+
};
|
|
18
|
+
exports.Avatar = Avatar;
|
|
19
|
+
//# sourceMappingURL=index8.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index8.cjs","sources":["../src/primitives/Avatar/Avatar.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport styles from './Avatar.module.css';\n\nexport type AvatarSize = 'sm' | 'md' | 'lg';\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {\n label: string;\n size?: AvatarSize;\n}\n\nexport const Avatar = ({ label, size = 'md', className, ...props }: AvatarProps) => {\n const initials = label\n .split(' ')\n .filter(Boolean)\n .map((part) => part[0])\n .join('')\n .slice(0, 2)\n .toUpperCase();\n\n return (\n <span\n className={clsx(styles.root, styles[size], className)}\n aria-hidden=\"true\"\n {...props}\n >\n {initials || '?'}\n </span>\n );\n};\n"],"names":["jsx","clsx","styles"],"mappings":";;;;;AAUO,MAAM,SAAS,CAAC,EAAE,OAAO,OAAO,MAAM,WAAW,GAAG,YAAyB;AAClF,QAAM,WAAW,MACd,MAAM,GAAG,EACT,OAAO,OAAO,EACd,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,EACrB,KAAK,EAAE,EACP,MAAM,GAAG,CAAC,EACV,YAAA;AAEH,SACEA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,KAAAA,KAAKC,sBAAO,MAAMA,cAAAA,QAAO,IAAI,GAAG,SAAS;AAAA,MACpD,eAAY;AAAA,MACX,GAAG;AAAA,MAEH,UAAA,YAAY;AAAA,IAAA;AAAA,EAAA;AAGnB;;"}
|
package/dist/index8.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { clsx } from "./index17.js";
|
|
3
|
+
import styles from "./index26.js";
|
|
4
|
+
const Avatar = ({ label, size = "md", className, ...props }) => {
|
|
5
|
+
const initials = label.split(" ").filter(Boolean).map((part) => part[0]).join("").slice(0, 2).toUpperCase();
|
|
6
|
+
return /* @__PURE__ */ jsx(
|
|
7
|
+
"span",
|
|
8
|
+
{
|
|
9
|
+
className: clsx(styles.root, styles[size], className),
|
|
10
|
+
"aria-hidden": "true",
|
|
11
|
+
...props,
|
|
12
|
+
children: initials || "?"
|
|
13
|
+
}
|
|
14
|
+
);
|
|
15
|
+
};
|
|
16
|
+
export {
|
|
17
|
+
Avatar
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=index8.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index8.js","sources":["../src/primitives/Avatar/Avatar.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport styles from './Avatar.module.css';\n\nexport type AvatarSize = 'sm' | 'md' | 'lg';\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {\n label: string;\n size?: AvatarSize;\n}\n\nexport const Avatar = ({ label, size = 'md', className, ...props }: AvatarProps) => {\n const initials = label\n .split(' ')\n .filter(Boolean)\n .map((part) => part[0])\n .join('')\n .slice(0, 2)\n .toUpperCase();\n\n return (\n <span\n className={clsx(styles.root, styles[size], className)}\n aria-hidden=\"true\"\n {...props}\n >\n {initials || '?'}\n </span>\n );\n};\n"],"names":[],"mappings":";;;AAUO,MAAM,SAAS,CAAC,EAAE,OAAO,OAAO,MAAM,WAAW,GAAG,YAAyB;AAClF,QAAM,WAAW,MACd,MAAM,GAAG,EACT,OAAO,OAAO,EACd,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,EACrB,KAAK,EAAE,EACP,MAAM,GAAG,CAAC,EACV,YAAA;AAEH,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,KAAK,OAAO,MAAM,OAAO,IAAI,GAAG,SAAS;AAAA,MACpD,eAAY;AAAA,MACX,GAAG;AAAA,MAEH,UAAA,YAAY;AAAA,IAAA;AAAA,EAAA;AAGnB;"}
|
package/dist/index9.cjs
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const clsx = require("./index17.cjs");
|
|
5
|
+
const Badge_module = require("./index18.cjs");
|
|
6
|
+
const Badge = ({ className, variant = "info", ...props }) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: clsx.clsx(Badge_module.default.root, Badge_module.default[variant], className), ...props });
|
|
7
|
+
exports.Badge = Badge;
|
|
8
|
+
//# sourceMappingURL=index9.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index9.cjs","sources":["../src/primitives/Badge/Badge.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport styles from './Badge.module.css';\n\nexport type BadgeVariant = 'success' | 'warning' | 'danger' | 'info';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: BadgeVariant;\n}\n\nexport const Badge = ({ className, variant = 'info', ...props }: BadgeProps) => (\n <span className={clsx(styles.root, styles[variant], className)} {...props} />\n);\n"],"names":["jsx","clsx","styles"],"mappings":";;;;;AASO,MAAM,QAAQ,CAAC,EAAE,WAAW,UAAU,QAAQ,GAAG,YACtDA,2BAAAA,IAAC,UAAK,WAAWC,KAAAA,KAAKC,aAAAA,QAAO,MAAMA,aAAAA,QAAO,OAAO,GAAG,SAAS,GAAI,GAAG,MAAA,CAAO;;"}
|
package/dist/index9.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { clsx } from "./index17.js";
|
|
3
|
+
import styles from "./index18.js";
|
|
4
|
+
const Badge = ({ className, variant = "info", ...props }) => /* @__PURE__ */ jsx("span", { className: clsx(styles.root, styles[variant], className), ...props });
|
|
5
|
+
export {
|
|
6
|
+
Badge
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=index9.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index9.js","sources":["../src/primitives/Badge/Badge.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport styles from './Badge.module.css';\n\nexport type BadgeVariant = 'success' | 'warning' | 'danger' | 'info';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: BadgeVariant;\n}\n\nexport const Badge = ({ className, variant = 'info', ...props }: BadgeProps) => (\n <span className={clsx(styles.root, styles[variant], className)} {...props} />\n);\n"],"names":[],"mappings":";;;AASO,MAAM,QAAQ,CAAC,EAAE,WAAW,UAAU,QAAQ,GAAG,YACtD,oBAAC,UAAK,WAAW,KAAK,OAAO,MAAM,OAAO,OAAO,GAAG,SAAS,GAAI,GAAG,MAAA,CAAO;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type AvatarSize = 'sm' | 'md' | 'lg';
|
|
2
|
+
export interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
3
|
+
label: string;
|
|
4
|
+
size?: AvatarSize;
|
|
5
|
+
}
|
|
6
|
+
export declare const Avatar: ({ label, size, className, ...props }: AvatarProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=Avatar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/primitives/Avatar/Avatar.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,WAAW,WAAY,SAAQ,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,eAAO,MAAM,MAAM,GAAI,sCAA6C,WAAW,4CAkB9E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/primitives/Avatar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type BadgeVariant = 'success' | 'warning' | 'danger' | 'info';
|
|
2
|
+
export interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
3
|
+
variant?: BadgeVariant;
|
|
4
|
+
}
|
|
5
|
+
export declare const Badge: ({ className, variant, ...props }: BadgeProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
//# sourceMappingURL=Badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/primitives/Badge/Badge.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAErE,MAAM,WAAW,UAAW,SAAQ,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;IACvE,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED,eAAO,MAAM,KAAK,GAAI,kCAA2C,UAAU,4CAE1E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/primitives/Badge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';
|
|
2
|
+
export type ButtonSize = 'sm' | 'md' | 'lg';
|
|
3
|
+
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
4
|
+
variant?: ButtonVariant;
|
|
5
|
+
size?: ButtonSize;
|
|
6
|
+
}
|
|
7
|
+
export declare const Button: import('react').ForwardRefExoticComponent<ButtonProps & import('react').RefAttributes<HTMLButtonElement>>;
|
|
8
|
+
//# sourceMappingURL=Button.d.ts.map
|