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.
Files changed (40) hide show
  1. package/gen.js +77 -77
  2. package/package.json +5 -1
  3. package/ui/components/Drawer.jsx +208 -208
  4. package/ui/components/Pagination.jsx +145 -145
  5. package/ui/components/PrivacyBlur.jsx +603 -603
  6. package/utils/index.cjs +5 -0
  7. package/utils/index.js +22 -20
  8. package/utils/utils/duration.js +139 -139
  9. package/utils/utils/oidc.js +214 -214
  10. package/utils/utils/realtime.js +1634 -1634
  11. package/utils/utils/session.cjs +15 -2
  12. package/utils/utils/session.js +67 -58
  13. package/utils/utils/session_manager.cjs +490 -0
  14. package/utils/utils/session_manager.js +549 -0
  15. package/utils/utils/storage.js +393 -393
  16. package/utils/utils/ui.js +111 -111
  17. package/vue/components/Badge.vue +79 -79
  18. package/vue/components/Button.vue +209 -209
  19. package/vue/components/Checkbox.vue +103 -103
  20. package/vue/components/CircularProgress.vue +383 -383
  21. package/vue/components/Divider.vue +94 -94
  22. package/vue/components/Drawer.vue +243 -243
  23. package/vue/components/InfoBadge.vue +223 -223
  24. package/vue/components/Input.vue +341 -341
  25. package/vue/components/LinearProgress.vue +268 -268
  26. package/vue/components/Modal.vue +226 -226
  27. package/vue/components/Pagination.vue +199 -199
  28. package/vue/components/Select.vue +713 -713
  29. package/vue/components/Sidebar.vue +955 -955
  30. package/vue/components/Skeleton.vue +91 -91
  31. package/vue/components/Spinner.vue +263 -263
  32. package/vue/components/StatusTag.vue +89 -89
  33. package/vue/components/TabBar.vue +176 -176
  34. package/vue/components/Table.vue +388 -388
  35. package/vue/components/TimePicker.vue +399 -399
  36. package/vue/components/Toggle.vue +115 -115
  37. package/vue/components/XTable.vue +119 -119
  38. package/vue/composables/useAutoSkeletonRows.ts +71 -71
  39. package/vue/index.d.ts +67 -67
  40. 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/ui.js';
10
- export * from './utils/db.js';
11
-
12
- export { default as uidUtil } from './utils/uid.js';
13
- export { default as realtimeUtil } from './utils/realtime.js';
14
- export { default as tzUtil } from './utils/tz.js';
15
- export { default as oidcUtil } from './utils/oidc.js';
16
- export { default as storageUtil } from './utils/storage.js';
17
- export { default as durationUtil } from './utils/duration.js';
18
- export { default as sessionUtil } from './utils/session.js';
19
- export { default as uiUtil } from './utils/ui.js';
20
- export { default as dbUtil } from './utils/db.js';
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';
@@ -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
+ };