@kupola/kupola 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +330 -286
  3. package/adapters/axios.d.ts +34 -0
  4. package/adapters/axios.js +122 -0
  5. package/adapters/navios-http.d.ts +110 -0
  6. package/adapters/navios-http.js +151 -0
  7. package/css/components-ext.css +157 -0
  8. package/css/components.css +69 -0
  9. package/css/theme-dark.css +5 -5
  10. package/css/utilities.css +119 -1
  11. package/dist/css/accessibility.css +119 -0
  12. package/dist/css/animations.css +224 -0
  13. package/dist/css/brand-themes.css +300 -0
  14. package/dist/css/colors_and_type.css +441 -0
  15. package/dist/css/components-ext.css +4165 -0
  16. package/dist/css/components.css +1483 -0
  17. package/dist/css/kupola.css +1 -12
  18. package/dist/css/kupola.min.css +1 -0
  19. package/dist/css/responsive.css +697 -0
  20. package/dist/css/scaffold.css +145 -0
  21. package/dist/css/states.css +316 -0
  22. package/dist/css/theme-dark.css +296 -0
  23. package/dist/css/theme-light.css +296 -0
  24. package/dist/css/utilities.css +171 -0
  25. package/dist/icons.svg +284 -0
  26. package/dist/kupola.cjs.js +17409 -257
  27. package/dist/kupola.cjs.js.map +1 -1
  28. package/dist/kupola.css +9000 -0
  29. package/dist/kupola.esm.js +17183 -7597
  30. package/dist/kupola.esm.js.map +1 -1
  31. package/dist/kupola.min.css +1 -0
  32. package/dist/kupola.min.js +2 -0
  33. package/dist/kupola.min.js.map +1 -0
  34. package/dist/kupola.umd.js +17415 -257
  35. package/dist/kupola.umd.js.map +1 -1
  36. package/dist/plugins/vite-plugin-kupola.js +120 -0
  37. package/dist/types/kupola.d.ts +421 -323
  38. package/js/calendar.js +334 -25
  39. package/js/carousel.js +182 -48
  40. package/js/collapse.js +148 -34
  41. package/js/color-picker.js +416 -108
  42. package/js/component.js +8 -19
  43. package/js/countdown.js +9 -8
  44. package/js/data-bind.js +73 -16
  45. package/js/datepicker.js +488 -110
  46. package/js/depends.js +710 -0
  47. package/js/dialog.js +4 -2
  48. package/js/drawer.js +172 -8
  49. package/js/dropdown.js +272 -17
  50. package/js/dynamic-tags.js +156 -40
  51. package/js/fileupload.js +9 -8
  52. package/js/form.js +280 -254
  53. package/js/global-events.js +281 -188
  54. package/js/heatmap.js +10 -7
  55. package/js/i18n.js +18 -10
  56. package/js/icons.js +141 -161
  57. package/js/image-preview.js +146 -2
  58. package/js/initializer.js +151 -71
  59. package/js/kupola-core.js +123 -45
  60. package/js/kupola-lifecycle.js +13 -11
  61. package/js/message.js +8 -1
  62. package/js/modal.js +207 -59
  63. package/js/notification.js +8 -1
  64. package/js/numberinput.js +9 -8
  65. package/js/pagination.js +263 -0
  66. package/js/registry.js +29 -12
  67. package/js/select.js +482 -27
  68. package/js/slide-captcha.js +11 -2
  69. package/js/slider.js +442 -25
  70. package/js/statcard.js +9 -7
  71. package/js/table.js +1210 -0
  72. package/js/tag.js +268 -14
  73. package/js/theme-standalone.js +88 -0
  74. package/js/theme.js +14 -43
  75. package/js/timepicker.js +335 -66
  76. package/js/tooltip.js +317 -86
  77. package/js/utils.js +6 -2
  78. package/js/validation.js +6 -2
  79. package/js/virtual-list.js +11 -7
  80. package/js/web-components.js +288 -0
  81. package/package.json +81 -67
  82. package/plugins/vite-plugin-kupola.js +120 -0
  83. package/scripts/build-css.cjs +113 -0
  84. package/scripts/build-svg-sprite.cjs +107 -0
  85. package/types/kupola.d.ts +421 -323
  86. package/CHANGELOG.md +0 -130
  87. package/INTEGRATION.md +0 -440
  88. package/PROJECT_SUMMARY.md +0 -312
  89. package/SKILL.md +0 -572
  90. package/dist/utils/utils/Kupola.cs +0 -77
  91. package/dist/utils/utils/Kupola.java +0 -104
  92. package/dist/utils/utils/kupola.go +0 -120
  93. package/dist/utils/utils/kupola.js +0 -63
  94. package/dist/utils/utils/kupola.py +0 -1392
  95. package/dist/utils/utils/kupola.rb +0 -69
  96. package/js/composition-api.js +0 -458
  97. package/js/error-handler.js +0 -181
  98. package/js/http.js +0 -419
  99. package/js/kupola-devtools.js +0 -598
  100. package/js/performance.js +0 -250
  101. package/js/router.js +0 -396
  102. package/js/security.js +0 -189
  103. package/js/test-utils.js +0 -251
  104. package/templates/base.html +0 -30
  105. package/templates/base_dashboard.html +0 -99
  106. package/utils/Kupola.cs +0 -77
  107. package/utils/Kupola.java +0 -104
  108. package/utils/kupola.go +0 -120
  109. package/utils/kupola.js +0 -63
  110. package/utils/kupola.py +0 -1392
  111. package/utils/kupola.rb +0 -69
package/js/data-bind.js CHANGED
@@ -1,3 +1,25 @@
1
+ /**
2
+ * Kupola Data Bind — Reactive data binding, event bus, and state management.
3
+ * Provides KupolaDataBind (Proxy-based binding), KupolaEventBus, KupolaStore, and ref().
4
+ * @module kupola/data-bind
5
+ */
6
+
7
+ /**
8
+ * Basic HTML sanitizer — removes <script>, <iframe>, <object>, <embed>, and on* event attributes.
9
+ * @param {string} html
10
+ * @returns {string}
11
+ */
12
+ function sanitizeHtml(html) {
13
+ if (!html) return '';
14
+ const str = String(html);
15
+ return str
16
+ .replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '')
17
+ .replace(/<iframe\b[^<]*(?:(?!<\/iframe>)<[^<]*)*<\/iframe>/gi, '')
18
+ .replace(/<object\b[^<]*(?:(?!<\/object>)<[^<]*)*<\/object>/gi, '')
19
+ .replace(/<embed\b[^>]*\/?>/gi, '')
20
+ .replace(/\bon\w+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi, '');
21
+ }
22
+
1
23
  class TrieNode {
2
24
  constructor() {
3
25
  this.children = {};
@@ -399,8 +421,9 @@ class KupolaDataBind {
399
421
  }
400
422
  break;
401
423
  case 'html':
402
- if (element.innerHTML !== String(value ?? '')) {
403
- element.innerHTML = value ?? '';
424
+ const sanitized = sanitizeHtml(value);
425
+ if (element.innerHTML !== sanitized) {
426
+ element.innerHTML = sanitized;
404
427
  }
405
428
  break;
406
429
  case 'value':
@@ -1258,29 +1281,63 @@ class KupolaEventBus {
1258
1281
  }
1259
1282
  }
1260
1283
 
1284
+ // ============================================================
1285
+ // Lightweight ref() — standalone reactive primitive
1286
+ // ============================================================
1287
+
1288
+ function ref(initialValue = null) {
1289
+ const refObj = {
1290
+ _value: initialValue,
1291
+ _subscribers: new Set()
1292
+ };
1293
+
1294
+ Object.defineProperty(refObj, 'value', {
1295
+ configurable: true,
1296
+ enumerable: true,
1297
+ get() { return refObj._value; },
1298
+ set(newValue) {
1299
+ if (newValue !== refObj._value) {
1300
+ refObj._value = newValue;
1301
+ refObj._subscribers.forEach(sub => sub(newValue));
1302
+ }
1303
+ }
1304
+ });
1305
+
1306
+ return refObj;
1307
+ }
1308
+
1309
+ /** @type {KupolaDataBind} Global data binding instance */
1261
1310
  const kupolaData = new KupolaDataBind();
1311
+ /** @type {KupolaEventBus} Global event bus instance */
1262
1312
  const kupolaEvents = new KupolaEventBus();
1313
+ /** @type {KupolaStoreManager} Global store manager instance */
1263
1314
  const kupolaStoreManager = new KupolaStoreManager();
1264
1315
 
1316
+ /** Create a named reactive store with state, getters, mutations, and actions. */
1265
1317
  function createStore(name, options) {
1266
1318
  return kupolaStoreManager.createStore(name, options);
1267
1319
  }
1268
1320
 
1321
+ /** Get a previously created store by name. */
1269
1322
  function getStore(name) {
1270
1323
  return kupolaStoreManager.getStore(name);
1271
1324
  }
1272
1325
 
1273
- document.addEventListener('DOMContentLoaded', () => {
1274
- kupolaData.loadPersisted();
1275
- kupolaData.bind();
1276
- });
1277
-
1278
- window.KupolaDataBind = KupolaDataBind;
1279
- window.KupolaEventBus = KupolaEventBus;
1280
- window.KupolaStore = KupolaStore;
1281
- window.KupolaStoreManager = KupolaStoreManager;
1282
- window.kupolaData = kupolaData;
1283
- window.kupolaEvents = kupolaEvents;
1284
- window.kupolaStoreManager = kupolaStoreManager;
1285
- window.createStore = createStore;
1286
- window.getStore = getStore;
1326
+ export { TrieNode, PathTrie, REACTIVE_SYMBOLS };
1327
+ export { KupolaDataBind, KupolaEventBus, KupolaStore, KupolaStoreManager };
1328
+ export { kupolaData, kupolaEvents, kupolaStoreManager };
1329
+ export { createStore, getStore };
1330
+ export { ref };
1331
+
1332
+ if (typeof window !== 'undefined') {
1333
+ window.KupolaDataBind = KupolaDataBind;
1334
+ window.KupolaEventBus = KupolaEventBus;
1335
+ window.KupolaStore = KupolaStore;
1336
+ window.KupolaStoreManager = KupolaStoreManager;
1337
+ window.kupolaData = kupolaData;
1338
+ window.kupolaEvents = kupolaEvents;
1339
+ window.kupolaStoreManager = kupolaStoreManager;
1340
+ window.createStore = createStore;
1341
+ window.getStore = getStore;
1342
+ window.kupolaRef = ref;
1343
+ }