slicejs-web-framework 4.0.2 → 4.1.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 (73) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +97 -97
  3. package/Slice/Components/Structural/ContextManager/ContextManager.js +422 -422
  4. package/Slice/Components/Structural/ContextManager/ContextManagerDebugger.js +470 -470
  5. package/Slice/Components/Structural/Controller/Controller.js +1406 -1406
  6. package/Slice/Components/Structural/Controller/allowedValuesValidation.js +52 -52
  7. package/Slice/Components/Structural/Debugger/Debugger.html +72 -72
  8. package/Slice/Components/Structural/Debugger/Debugger.js +1505 -1505
  9. package/Slice/Components/Structural/EventManager/EventManager.js +651 -651
  10. package/Slice/Components/Structural/EventManager/EventManagerDebugger.js +985 -985
  11. package/Slice/Components/Structural/LeakInspector/LeakInspector.js +296 -296
  12. package/Slice/Components/Structural/Logger/Log.js +10 -10
  13. package/Slice/Components/Structural/Logger/LogViewer/LogViewer.js +662 -662
  14. package/Slice/Components/Structural/Logger/Logger.js +225 -225
  15. package/Slice/Components/Structural/Router/Router.js +820 -810
  16. package/Slice/Components/Structural/Router/applyRouteMetadata.js +39 -0
  17. package/Slice/Components/Structural/StylesManager/StylesManager.js +82 -82
  18. package/Slice/Components/Structural/StylesManager/ThemeManager/ThemeManager.js +175 -175
  19. package/Slice/Slice.js +711 -710
  20. package/api/framework/devDepsOptimizer.js +335 -335
  21. package/api/framework/express.js +3 -3
  22. package/api/framework/precompressedStatic.js +102 -93
  23. package/api/framework/publicEnvResolver.js +123 -123
  24. package/api/framework/securityMiddleware.js +197 -197
  25. package/api/framework/seo.js +387 -0
  26. package/api/framework/server.js +777 -410
  27. package/api/index.js +14 -4
  28. package/package.json +6 -2
  29. package/sliceConfig.schema.json +122 -122
  30. package/src/App/index.html +69 -69
  31. package/src/App/index.js +20 -20
  32. package/src/App/style.css +11 -11
  33. package/src/Components/AppComponents/AboutSection/AboutSection.css +9 -9
  34. package/src/Components/AppComponents/AboutSection/AboutSection.html +8 -8
  35. package/src/Components/AppComponents/AboutSection/AboutSection.js +12 -12
  36. package/src/Components/AppComponents/AppShell/AppShell.css +10 -10
  37. package/src/Components/AppComponents/AppShell/AppShell.html +4 -4
  38. package/src/Components/AppComponents/AppShell/AppShell.js +36 -36
  39. package/src/Components/AppComponents/HomeSection/HomeSection.css +20 -20
  40. package/src/Components/AppComponents/HomeSection/HomeSection.html +10 -10
  41. package/src/Components/AppComponents/HomeSection/HomeSection.js +19 -19
  42. package/src/Components/components.js +8 -8
  43. package/src/public/Styles/sliceStyles.css +34 -34
  44. package/src/public/Themes/Dark.css +42 -42
  45. package/src/public/Themes/Light.css +31 -31
  46. package/src/public/Themes/Slice.css +47 -47
  47. package/src/public/manifest.json +15 -15
  48. package/src/public/robots.txt +4 -4
  49. package/src/public/sitemap.xml +8 -8
  50. package/src/routes.js +9 -9
  51. package/src/sliceConfig.json +72 -72
  52. package/types/index.d.ts +219 -219
  53. package/.opencode/opencode.json +0 -15
  54. package/Slice/tests/build-bundled-component-without-category.test.js +0 -103
  55. package/Slice/tests/build-js-only-visual-components.test.js +0 -144
  56. package/Slice/tests/build-singleton.test.js +0 -244
  57. package/Slice/tests/bundle-v2-runtime-contract.test.js +0 -747
  58. package/Slice/tests/context-patch-use.test.js +0 -95
  59. package/Slice/tests/destroy-cascade.test.js +0 -215
  60. package/Slice/tests/event-emitters.test.js +0 -79
  61. package/Slice/tests/event-registry.test.js +0 -141
  62. package/Slice/tests/fixtures/real-runtime-loader.mjs +0 -21
  63. package/Slice/tests/leak-orphans.test.js +0 -131
  64. package/Slice/tests/props-allowed-values-validation.test.js +0 -119
  65. package/Slice/tests/public-env-runtime-accessors.test.js +0 -44
  66. package/Slice/tests/public-env-typed-accessors.test.js +0 -66
  67. package/Slice/tests/router-loading-finally.test.js +0 -68
  68. package/api/tests/dev-deps-optimizer.test.js +0 -137
  69. package/api/tests/dev-server-external.test.js +0 -56
  70. package/api/tests/precompressed-static.test.js +0 -119
  71. package/api/tests/public-env-resolver.test.js +0 -193
  72. package/tests/router-build-failure.test.js +0 -125
  73. package/tests/router-emit-ordering.test.js +0 -63
@@ -1,52 +1,52 @@
1
- const hasOwn = (obj, key) => Object.prototype.hasOwnProperty.call(obj || {}, key);
2
-
3
- const formatValueForLog = (value) => {
4
- if (typeof value === 'string') {
5
- return `'${value}'`;
6
- }
7
-
8
- if (value === undefined) return 'undefined';
9
-
10
- try {
11
- return JSON.stringify(value);
12
- } catch (_) {
13
- return String(value);
14
- }
15
- };
16
-
17
- const collectInvalidAllowedValueProps = (staticProps, providedProps) => {
18
- const invalid = [];
19
- const safeProvidedProps = providedProps || {};
20
-
21
- Object.entries(staticProps || {}).forEach(([propName, config]) => {
22
- const allowedValues = config?.allowedValues;
23
- if (!Array.isArray(allowedValues) || allowedValues.length === 0) {
24
- return;
25
- }
26
-
27
- if (!hasOwn(safeProvidedProps, propName)) {
28
- return;
29
- }
30
-
31
- const value = safeProvidedProps[propName];
32
- const isAllowed = allowedValues.some((allowedValue) => allowedValue === value);
33
- if (!isAllowed) {
34
- invalid.push({
35
- propName,
36
- value,
37
- allowedValues
38
- });
39
- }
40
- });
41
-
42
- return invalid;
43
- };
44
-
45
- const formatAllowedValuesForLog = (allowedValues) => {
46
- if (!Array.isArray(allowedValues) || allowedValues.length === 0) {
47
- return '[]';
48
- }
49
- return `[${allowedValues.map((value) => formatValueForLog(value)).join(', ')}]`;
50
- };
51
-
52
- export { collectInvalidAllowedValueProps, formatAllowedValuesForLog };
1
+ const hasOwn = (obj, key) => Object.prototype.hasOwnProperty.call(obj || {}, key);
2
+
3
+ const formatValueForLog = (value) => {
4
+ if (typeof value === 'string') {
5
+ return `'${value}'`;
6
+ }
7
+
8
+ if (value === undefined) return 'undefined';
9
+
10
+ try {
11
+ return JSON.stringify(value);
12
+ } catch (_) {
13
+ return String(value);
14
+ }
15
+ };
16
+
17
+ const collectInvalidAllowedValueProps = (staticProps, providedProps) => {
18
+ const invalid = [];
19
+ const safeProvidedProps = providedProps || {};
20
+
21
+ Object.entries(staticProps || {}).forEach(([propName, config]) => {
22
+ const allowedValues = config?.allowedValues;
23
+ if (!Array.isArray(allowedValues) || allowedValues.length === 0) {
24
+ return;
25
+ }
26
+
27
+ if (!hasOwn(safeProvidedProps, propName)) {
28
+ return;
29
+ }
30
+
31
+ const value = safeProvidedProps[propName];
32
+ const isAllowed = allowedValues.some((allowedValue) => allowedValue === value);
33
+ if (!isAllowed) {
34
+ invalid.push({
35
+ propName,
36
+ value,
37
+ allowedValues
38
+ });
39
+ }
40
+ });
41
+
42
+ return invalid;
43
+ };
44
+
45
+ const formatAllowedValuesForLog = (allowedValues) => {
46
+ if (!Array.isArray(allowedValues) || allowedValues.length === 0) {
47
+ return '[]';
48
+ }
49
+ return `[${allowedValues.map((value) => formatValueForLog(value)).join(', ')}]`;
50
+ };
51
+
52
+ export { collectInvalidAllowedValueProps, formatAllowedValuesForLog };
@@ -1,73 +1,73 @@
1
- <div id="debugger-container">
2
- <div class="debugger-header">
3
- <div class="header-content">
4
- <div class="component-info">
5
- <div class="component-icon">🔍</div>
6
- <div class="component-details">
7
- <div class="component-name">Component Inspector</div>
8
- <div class="component-id">Ready to debug</div>
9
- </div>
10
- </div>
11
- <div class="header-actions">
12
- <button class="minimize-btn" title="Minimize">−</button>
13
- <button id="close-debugger" title="Close">×</button>
14
- </div>
15
- </div>
16
- </div>
17
-
18
- <div class="debugger-content">
19
- <div class="tabs-container">
20
- <div class="tab-nav">
21
- <button class="tab-btn active" data-tab="props">📋 Props</button>
22
- <button class="tab-btn" data-tab="info">â„šī¸ Info</button>
23
- </div>
24
- </div>
25
-
26
- <div class="tab-content">
27
- <div class="tab-pane active" id="props-tab">
28
- <div class="props-container"></div>
29
- <div class="props-actions">
30
- <div class="action-buttons">
31
- <button class="action-btn primary" id="apply-changes">✅ Apply Changes</button>
32
- <button class="action-btn secondary" id="reset-values">🔄 Reset Values</button>
33
- </div>
34
- <div class="actions-note">
35
- <small>💡 Press Enter on any input to apply changes automatically</small>
36
- </div>
37
- </div>
38
- </div>
39
-
40
- <div class="tab-pane" id="info-tab">
41
- <div class="info-container">
42
- <div class="info-list"></div>
43
- </div>
44
- </div>
45
- </div>
46
- </div>
47
-
48
- <!-- Modal para editar objetos/funciones -->
49
- <div class="editor-modal" id="editor-modal">
50
- <div class="modal-content">
51
- <div class="modal-header">
52
- <h3 id="modal-title">Edit Property</h3>
53
- <button class="modal-close" id="modal-close">×</button>
54
- </div>
55
- <div class="modal-body">
56
- <div class="editor-type-selector">
57
- <button class="type-btn active" data-type="json">📋 JSON</button>
58
- <button class="type-btn" data-type="function">⚡ Function</button>
59
- </div>
60
- <div class="editor-container">
61
- <textarea id="property-editor" spellcheck="false"></textarea>
62
- </div>
63
- <div class="editor-footer">
64
- <div class="validation-message"></div>
65
- </div>
66
- </div>
67
- <div class="modal-actions">
68
- <button class="modal-btn cancel" id="modal-cancel">Cancel</button>
69
- <button class="modal-btn save" id="modal-save">Save Changes</button>
70
- </div>
71
- </div>
72
- </div>
1
+ <div id="debugger-container">
2
+ <div class="debugger-header">
3
+ <div class="header-content">
4
+ <div class="component-info">
5
+ <div class="component-icon">🔍</div>
6
+ <div class="component-details">
7
+ <div class="component-name">Component Inspector</div>
8
+ <div class="component-id">Ready to debug</div>
9
+ </div>
10
+ </div>
11
+ <div class="header-actions">
12
+ <button class="minimize-btn" title="Minimize">−</button>
13
+ <button id="close-debugger" title="Close">×</button>
14
+ </div>
15
+ </div>
16
+ </div>
17
+
18
+ <div class="debugger-content">
19
+ <div class="tabs-container">
20
+ <div class="tab-nav">
21
+ <button class="tab-btn active" data-tab="props">📋 Props</button>
22
+ <button class="tab-btn" data-tab="info">â„šī¸ Info</button>
23
+ </div>
24
+ </div>
25
+
26
+ <div class="tab-content">
27
+ <div class="tab-pane active" id="props-tab">
28
+ <div class="props-container"></div>
29
+ <div class="props-actions">
30
+ <div class="action-buttons">
31
+ <button class="action-btn primary" id="apply-changes">✅ Apply Changes</button>
32
+ <button class="action-btn secondary" id="reset-values">🔄 Reset Values</button>
33
+ </div>
34
+ <div class="actions-note">
35
+ <small>💡 Press Enter on any input to apply changes automatically</small>
36
+ </div>
37
+ </div>
38
+ </div>
39
+
40
+ <div class="tab-pane" id="info-tab">
41
+ <div class="info-container">
42
+ <div class="info-list"></div>
43
+ </div>
44
+ </div>
45
+ </div>
46
+ </div>
47
+
48
+ <!-- Modal para editar objetos/funciones -->
49
+ <div class="editor-modal" id="editor-modal">
50
+ <div class="modal-content">
51
+ <div class="modal-header">
52
+ <h3 id="modal-title">Edit Property</h3>
53
+ <button class="modal-close" id="modal-close">×</button>
54
+ </div>
55
+ <div class="modal-body">
56
+ <div class="editor-type-selector">
57
+ <button class="type-btn active" data-type="json">📋 JSON</button>
58
+ <button class="type-btn" data-type="function">⚡ Function</button>
59
+ </div>
60
+ <div class="editor-container">
61
+ <textarea id="property-editor" spellcheck="false"></textarea>
62
+ </div>
63
+ <div class="editor-footer">
64
+ <div class="validation-message"></div>
65
+ </div>
66
+ </div>
67
+ <div class="modal-actions">
68
+ <button class="modal-btn cancel" id="modal-cancel">Cancel</button>
69
+ <button class="modal-btn save" id="modal-save">Save Changes</button>
70
+ </div>
71
+ </div>
72
+ </div>
73
73
  </div>