cynx-lib 1.3.84 → 1.3.85
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/gen.js +77 -77
- package/package.json +5 -1
- package/ui/components/Drawer.jsx +208 -208
- package/ui/components/Pagination.jsx +145 -145
- package/ui/components/PrivacyBlur.jsx +603 -603
- package/utils/index.cjs +5 -0
- package/utils/index.js +22 -20
- package/utils/utils/duration.js +139 -139
- package/utils/utils/oidc.js +214 -214
- package/utils/utils/realtime.js +1634 -1634
- package/utils/utils/session.cjs +15 -2
- package/utils/utils/session.js +67 -58
- package/utils/utils/session_manager.cjs +490 -0
- package/utils/utils/session_manager.js +549 -0
- package/utils/utils/storage.js +393 -393
- package/utils/utils/ui.js +111 -111
- package/vue/components/Badge.vue +79 -79
- package/vue/components/Button.vue +209 -209
- package/vue/components/Checkbox.vue +103 -103
- package/vue/components/CircularProgress.vue +383 -383
- package/vue/components/Divider.vue +94 -94
- package/vue/components/Drawer.vue +243 -243
- package/vue/components/InfoBadge.vue +223 -223
- package/vue/components/Input.vue +341 -341
- package/vue/components/LinearProgress.vue +268 -268
- package/vue/components/Modal.vue +226 -226
- package/vue/components/Pagination.vue +199 -199
- package/vue/components/Select.vue +713 -713
- package/vue/components/Sidebar.vue +955 -955
- package/vue/components/Skeleton.vue +91 -91
- package/vue/components/Spinner.vue +263 -263
- package/vue/components/StatusTag.vue +89 -89
- package/vue/components/TabBar.vue +176 -176
- package/vue/components/Table.vue +388 -388
- package/vue/components/TimePicker.vue +399 -399
- package/vue/components/Toggle.vue +115 -115
- package/vue/components/XTable.vue +119 -119
- package/vue/composables/useAutoSkeletonRows.ts +71 -71
- package/vue/index.d.ts +67 -67
- package/vue/index.js +86 -86
package/utils/index.cjs
CHANGED
|
@@ -32,6 +32,7 @@ __export(index_exports, {
|
|
|
32
32
|
durationUtil: () => import_duration.default,
|
|
33
33
|
oidcUtil: () => import_oidc.default,
|
|
34
34
|
realtimeUtil: () => import_realtime.default,
|
|
35
|
+
sessionManagerUtil: () => import_session_manager.default,
|
|
35
36
|
sessionUtil: () => import_session.default,
|
|
36
37
|
storageUtil: () => import_storage.default,
|
|
37
38
|
tzUtil: () => import_tz.default,
|
|
@@ -46,6 +47,7 @@ __reExport(index_exports, require("./utils/oidc.cjs"), module.exports);
|
|
|
46
47
|
__reExport(index_exports, require("./utils/storage.cjs"), module.exports);
|
|
47
48
|
__reExport(index_exports, require("./utils/duration.cjs"), module.exports);
|
|
48
49
|
__reExport(index_exports, require("./utils/session.cjs"), module.exports);
|
|
50
|
+
__reExport(index_exports, require("./utils/session_manager.cjs"), module.exports);
|
|
49
51
|
__reExport(index_exports, require("./utils/ui.cjs"), module.exports);
|
|
50
52
|
__reExport(index_exports, require("./utils/db.cjs"), module.exports);
|
|
51
53
|
var import_uid = __toESM(require("./utils/uid.cjs"), 1);
|
|
@@ -55,6 +57,7 @@ var import_oidc = __toESM(require("./utils/oidc.cjs"), 1);
|
|
|
55
57
|
var import_storage = __toESM(require("./utils/storage.cjs"), 1);
|
|
56
58
|
var import_duration = __toESM(require("./utils/duration.cjs"), 1);
|
|
57
59
|
var import_session = __toESM(require("./utils/session.cjs"), 1);
|
|
60
|
+
var import_session_manager = __toESM(require("./utils/session_manager.cjs"), 1);
|
|
58
61
|
var import_ui = __toESM(require("./utils/ui.cjs"), 1);
|
|
59
62
|
var import_db = __toESM(require("./utils/db.cjs"), 1);
|
|
60
63
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -63,6 +66,7 @@ var import_db = __toESM(require("./utils/db.cjs"), 1);
|
|
|
63
66
|
durationUtil,
|
|
64
67
|
oidcUtil,
|
|
65
68
|
realtimeUtil,
|
|
69
|
+
sessionManagerUtil,
|
|
66
70
|
sessionUtil,
|
|
67
71
|
storageUtil,
|
|
68
72
|
tzUtil,
|
|
@@ -75,6 +79,7 @@ var import_db = __toESM(require("./utils/db.cjs"), 1);
|
|
|
75
79
|
...require("./utils/storage.cjs"),
|
|
76
80
|
...require("./utils/duration.cjs"),
|
|
77
81
|
...require("./utils/session.cjs"),
|
|
82
|
+
...require("./utils/session_manager.cjs"),
|
|
78
83
|
...require("./utils/ui.cjs"),
|
|
79
84
|
...require("./utils/db.cjs")
|
|
80
85
|
});
|
package/utils/index.js
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
// cynx/utils — shared utility functions
|
|
2
|
-
export * from './utils/uid.js';
|
|
3
|
-
export * from './utils/realtime.js';
|
|
4
|
-
export * from './utils/tz.js';
|
|
5
|
-
export * from './utils/oidc.js';
|
|
6
|
-
export * from './utils/storage.js';
|
|
7
|
-
export * from './utils/duration.js';
|
|
8
|
-
export * from './utils/session.js';
|
|
9
|
-
export * from './utils/
|
|
10
|
-
export * from './utils/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
export { default as
|
|
14
|
-
export { default as
|
|
15
|
-
export { default as
|
|
16
|
-
export { default as
|
|
17
|
-
export { default as
|
|
18
|
-
export { default as
|
|
19
|
-
export { default as
|
|
20
|
-
export { default as
|
|
1
|
+
// cynx/utils — shared utility functions
|
|
2
|
+
export * from './utils/uid.js';
|
|
3
|
+
export * from './utils/realtime.js';
|
|
4
|
+
export * from './utils/tz.js';
|
|
5
|
+
export * from './utils/oidc.js';
|
|
6
|
+
export * from './utils/storage.js';
|
|
7
|
+
export * from './utils/duration.js';
|
|
8
|
+
export * from './utils/session.js';
|
|
9
|
+
export * from './utils/session_manager.js';
|
|
10
|
+
export * from './utils/ui.js';
|
|
11
|
+
export * from './utils/db.js';
|
|
12
|
+
|
|
13
|
+
export { default as uidUtil } from './utils/uid.js';
|
|
14
|
+
export { default as realtimeUtil } from './utils/realtime.js';
|
|
15
|
+
export { default as tzUtil } from './utils/tz.js';
|
|
16
|
+
export { default as oidcUtil } from './utils/oidc.js';
|
|
17
|
+
export { default as storageUtil } from './utils/storage.js';
|
|
18
|
+
export { default as durationUtil } from './utils/duration.js';
|
|
19
|
+
export { default as sessionUtil } from './utils/session.js';
|
|
20
|
+
export { default as sessionManagerUtil } from './utils/session_manager.js';
|
|
21
|
+
export { default as uiUtil } from './utils/ui.js';
|
|
22
|
+
export { default as dbUtil } from './utils/db.js';
|
package/utils/utils/duration.js
CHANGED
|
@@ -1,139 +1,139 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* cynx/utils — Duration Parser and Formatter (duration.js)
|
|
3
|
-
*
|
|
4
|
-
* Universal utility for parsing human-readable duration strings (e.g. '15m', '2h', '3d', '1w', '1mo')
|
|
5
|
-
* into seconds or milliseconds, and formatting durations into short tags or localized labels.
|
|
6
|
-
*
|
|
7
|
-
* Works across Browser and Node.js environments.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Parse a human-readable duration string or number into seconds.
|
|
12
|
-
* Supported units:
|
|
13
|
-
* - s : seconds (e.g. '30s', '45s')
|
|
14
|
-
* - m : minutes (e.g. '1m', '5m', '15m', '30m')
|
|
15
|
-
* - h : hours (e.g. '1h', '5h', '12h', '24h')
|
|
16
|
-
* - d : days (e.g. '1d', '3d', '7d')
|
|
17
|
-
* - w : weeks (e.g. '1w', '2w')
|
|
18
|
-
* - mo : months (e.g. '1mo', '3mo', treated as 30 days)
|
|
19
|
-
*
|
|
20
|
-
* @param {string|number} input
|
|
21
|
-
* @param {number} [minSeconds=60] Minimum allowed seconds
|
|
22
|
-
* @returns {number} Seconds
|
|
23
|
-
*/
|
|
24
|
-
export function parseDurationToSeconds(input, minSeconds = 60) {
|
|
25
|
-
if (input === null || input === undefined || input === '') {
|
|
26
|
-
return minSeconds;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if (typeof input === 'number') {
|
|
30
|
-
if (isNaN(input) || input <= 0) return minSeconds;
|
|
31
|
-
return Math.max(minSeconds, Math.round(input));
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const str = String(input).trim().toLowerCase();
|
|
35
|
-
|
|
36
|
-
// If plain digits string: '300'
|
|
37
|
-
if (/^\d+$/.test(str)) {
|
|
38
|
-
const num = parseInt(str, 10);
|
|
39
|
-
return Math.max(minSeconds, num);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Match number + unit: '15m', '2h', '1mo', '3d', '1w', '45s'
|
|
43
|
-
const match = str.match(/^(\d+(?:\.\d+)?)\s*(mo|w|d|h|m|s)?$/);
|
|
44
|
-
if (!match) {
|
|
45
|
-
return minSeconds;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const val = parseFloat(match[1]);
|
|
49
|
-
const unit = match[2] || 's';
|
|
50
|
-
|
|
51
|
-
let totalSec = 0;
|
|
52
|
-
switch (unit) {
|
|
53
|
-
case 'mo':
|
|
54
|
-
totalSec = val * 30 * 86400; // 30 days
|
|
55
|
-
break;
|
|
56
|
-
case 'w':
|
|
57
|
-
totalSec = val * 7 * 86400; // 7 days
|
|
58
|
-
break;
|
|
59
|
-
case 'd':
|
|
60
|
-
totalSec = val * 86400;
|
|
61
|
-
break;
|
|
62
|
-
case 'h':
|
|
63
|
-
totalSec = val * 3600;
|
|
64
|
-
break;
|
|
65
|
-
case 'm':
|
|
66
|
-
totalSec = val * 60;
|
|
67
|
-
break;
|
|
68
|
-
case 's':
|
|
69
|
-
default:
|
|
70
|
-
totalSec = val;
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
const rounded = Math.round(totalSec);
|
|
75
|
-
return Math.max(minSeconds, rounded);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Parse a human-readable duration string into milliseconds.
|
|
80
|
-
*
|
|
81
|
-
* @param {string|number} val
|
|
82
|
-
* @param {number} [defaultMs=2592000000] Default ms (30 days)
|
|
83
|
-
* @returns {number} Milliseconds
|
|
84
|
-
*/
|
|
85
|
-
export function parseDurationMs(val, defaultMs = 30 * 24 * 60 * 60 * 1000) {
|
|
86
|
-
if (!val || val === 'off' || val === '0' || val === 0) return 0;
|
|
87
|
-
if (typeof val === 'number') return val > 0 ? val : defaultMs;
|
|
88
|
-
const str = String(val).trim().toLowerCase();
|
|
89
|
-
const match = str.match(/^(\d+(?:\.\d+)?)\s*([a-z]+)?$/);
|
|
90
|
-
if (!match) return defaultMs;
|
|
91
|
-
const num = parseFloat(match[1]);
|
|
92
|
-
const unit = match[2] || 'd';
|
|
93
|
-
if (unit.startsWith('s')) return Math.round(num * 1000);
|
|
94
|
-
if (unit.startsWith('m')) return Math.round(num * 60 * 1000);
|
|
95
|
-
if (unit.startsWith('h')) return Math.round(num * 60 * 60 * 1000);
|
|
96
|
-
if (unit.startsWith('d')) return Math.round(num * 24 * 60 * 60 * 1000);
|
|
97
|
-
if (unit.startsWith('w')) return Math.round(num * 7 * 24 * 60 * 60 * 1000);
|
|
98
|
-
return defaultMs;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Format seconds into a short clean tag (e.g. '1m', '5m', '1h', '24h', '1w', '1mo').
|
|
103
|
-
* @param {number} seconds
|
|
104
|
-
* @returns {string} Short duration string
|
|
105
|
-
*/
|
|
106
|
-
export function formatDurationTag(seconds) {
|
|
107
|
-
const s = Number(seconds) || 60;
|
|
108
|
-
if (s >= 2592000 && s % 2592000 === 0) return `${s / 2592000}mo`;
|
|
109
|
-
if (s >= 604800 && s % 604800 === 0) return `${s / 604800}w`;
|
|
110
|
-
if (s >= 86400 && s % 86400 === 0) return `${s / 86400}d`;
|
|
111
|
-
if (s >= 3600 && s % 3600 === 0) return `${s / 3600}h`;
|
|
112
|
-
if (s >= 60 && s % 60 === 0) return `${s / 60}m`;
|
|
113
|
-
return `${s}s`;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Format seconds into human readable label.
|
|
118
|
-
* @param {number} seconds
|
|
119
|
-
* @returns {string} Human readable label
|
|
120
|
-
*/
|
|
121
|
-
export function formatDurationLabel(seconds) {
|
|
122
|
-
const s = Number(seconds) || 60;
|
|
123
|
-
if (s === 60) return '1 мин';
|
|
124
|
-
if (s === 300) return '5 мин';
|
|
125
|
-
if (s === 600) return '10 мин';
|
|
126
|
-
if (s === 1800) return '30 мин';
|
|
127
|
-
if (s === 3600) return '1 час';
|
|
128
|
-
if (s === 18000) return '5 часов';
|
|
129
|
-
if (s === 43200) return '12 часов';
|
|
130
|
-
if (s === 86400) return '24 часа';
|
|
131
|
-
return formatDurationTag(s);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
export default {
|
|
135
|
-
parseDurationToSeconds,
|
|
136
|
-
parseDurationMs,
|
|
137
|
-
formatDurationTag,
|
|
138
|
-
formatDurationLabel,
|
|
139
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* cynx/utils — Duration Parser and Formatter (duration.js)
|
|
3
|
+
*
|
|
4
|
+
* Universal utility for parsing human-readable duration strings (e.g. '15m', '2h', '3d', '1w', '1mo')
|
|
5
|
+
* into seconds or milliseconds, and formatting durations into short tags or localized labels.
|
|
6
|
+
*
|
|
7
|
+
* Works across Browser and Node.js environments.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Parse a human-readable duration string or number into seconds.
|
|
12
|
+
* Supported units:
|
|
13
|
+
* - s : seconds (e.g. '30s', '45s')
|
|
14
|
+
* - m : minutes (e.g. '1m', '5m', '15m', '30m')
|
|
15
|
+
* - h : hours (e.g. '1h', '5h', '12h', '24h')
|
|
16
|
+
* - d : days (e.g. '1d', '3d', '7d')
|
|
17
|
+
* - w : weeks (e.g. '1w', '2w')
|
|
18
|
+
* - mo : months (e.g. '1mo', '3mo', treated as 30 days)
|
|
19
|
+
*
|
|
20
|
+
* @param {string|number} input
|
|
21
|
+
* @param {number} [minSeconds=60] Minimum allowed seconds
|
|
22
|
+
* @returns {number} Seconds
|
|
23
|
+
*/
|
|
24
|
+
export function parseDurationToSeconds(input, minSeconds = 60) {
|
|
25
|
+
if (input === null || input === undefined || input === '') {
|
|
26
|
+
return minSeconds;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (typeof input === 'number') {
|
|
30
|
+
if (isNaN(input) || input <= 0) return minSeconds;
|
|
31
|
+
return Math.max(minSeconds, Math.round(input));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const str = String(input).trim().toLowerCase();
|
|
35
|
+
|
|
36
|
+
// If plain digits string: '300'
|
|
37
|
+
if (/^\d+$/.test(str)) {
|
|
38
|
+
const num = parseInt(str, 10);
|
|
39
|
+
return Math.max(minSeconds, num);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Match number + unit: '15m', '2h', '1mo', '3d', '1w', '45s'
|
|
43
|
+
const match = str.match(/^(\d+(?:\.\d+)?)\s*(mo|w|d|h|m|s)?$/);
|
|
44
|
+
if (!match) {
|
|
45
|
+
return minSeconds;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const val = parseFloat(match[1]);
|
|
49
|
+
const unit = match[2] || 's';
|
|
50
|
+
|
|
51
|
+
let totalSec = 0;
|
|
52
|
+
switch (unit) {
|
|
53
|
+
case 'mo':
|
|
54
|
+
totalSec = val * 30 * 86400; // 30 days
|
|
55
|
+
break;
|
|
56
|
+
case 'w':
|
|
57
|
+
totalSec = val * 7 * 86400; // 7 days
|
|
58
|
+
break;
|
|
59
|
+
case 'd':
|
|
60
|
+
totalSec = val * 86400;
|
|
61
|
+
break;
|
|
62
|
+
case 'h':
|
|
63
|
+
totalSec = val * 3600;
|
|
64
|
+
break;
|
|
65
|
+
case 'm':
|
|
66
|
+
totalSec = val * 60;
|
|
67
|
+
break;
|
|
68
|
+
case 's':
|
|
69
|
+
default:
|
|
70
|
+
totalSec = val;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const rounded = Math.round(totalSec);
|
|
75
|
+
return Math.max(minSeconds, rounded);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Parse a human-readable duration string into milliseconds.
|
|
80
|
+
*
|
|
81
|
+
* @param {string|number} val
|
|
82
|
+
* @param {number} [defaultMs=2592000000] Default ms (30 days)
|
|
83
|
+
* @returns {number} Milliseconds
|
|
84
|
+
*/
|
|
85
|
+
export function parseDurationMs(val, defaultMs = 30 * 24 * 60 * 60 * 1000) {
|
|
86
|
+
if (!val || val === 'off' || val === '0' || val === 0) return 0;
|
|
87
|
+
if (typeof val === 'number') return val > 0 ? val : defaultMs;
|
|
88
|
+
const str = String(val).trim().toLowerCase();
|
|
89
|
+
const match = str.match(/^(\d+(?:\.\d+)?)\s*([a-z]+)?$/);
|
|
90
|
+
if (!match) return defaultMs;
|
|
91
|
+
const num = parseFloat(match[1]);
|
|
92
|
+
const unit = match[2] || 'd';
|
|
93
|
+
if (unit.startsWith('s')) return Math.round(num * 1000);
|
|
94
|
+
if (unit.startsWith('m')) return Math.round(num * 60 * 1000);
|
|
95
|
+
if (unit.startsWith('h')) return Math.round(num * 60 * 60 * 1000);
|
|
96
|
+
if (unit.startsWith('d')) return Math.round(num * 24 * 60 * 60 * 1000);
|
|
97
|
+
if (unit.startsWith('w')) return Math.round(num * 7 * 24 * 60 * 60 * 1000);
|
|
98
|
+
return defaultMs;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Format seconds into a short clean tag (e.g. '1m', '5m', '1h', '24h', '1w', '1mo').
|
|
103
|
+
* @param {number} seconds
|
|
104
|
+
* @returns {string} Short duration string
|
|
105
|
+
*/
|
|
106
|
+
export function formatDurationTag(seconds) {
|
|
107
|
+
const s = Number(seconds) || 60;
|
|
108
|
+
if (s >= 2592000 && s % 2592000 === 0) return `${s / 2592000}mo`;
|
|
109
|
+
if (s >= 604800 && s % 604800 === 0) return `${s / 604800}w`;
|
|
110
|
+
if (s >= 86400 && s % 86400 === 0) return `${s / 86400}d`;
|
|
111
|
+
if (s >= 3600 && s % 3600 === 0) return `${s / 3600}h`;
|
|
112
|
+
if (s >= 60 && s % 60 === 0) return `${s / 60}m`;
|
|
113
|
+
return `${s}s`;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Format seconds into human readable label.
|
|
118
|
+
* @param {number} seconds
|
|
119
|
+
* @returns {string} Human readable label
|
|
120
|
+
*/
|
|
121
|
+
export function formatDurationLabel(seconds) {
|
|
122
|
+
const s = Number(seconds) || 60;
|
|
123
|
+
if (s === 60) return '1 мин';
|
|
124
|
+
if (s === 300) return '5 мин';
|
|
125
|
+
if (s === 600) return '10 мин';
|
|
126
|
+
if (s === 1800) return '30 мин';
|
|
127
|
+
if (s === 3600) return '1 час';
|
|
128
|
+
if (s === 18000) return '5 часов';
|
|
129
|
+
if (s === 43200) return '12 часов';
|
|
130
|
+
if (s === 86400) return '24 часа';
|
|
131
|
+
return formatDurationTag(s);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export default {
|
|
135
|
+
parseDurationToSeconds,
|
|
136
|
+
parseDurationMs,
|
|
137
|
+
formatDurationTag,
|
|
138
|
+
formatDurationLabel,
|
|
139
|
+
};
|