vanduo-framework 1.1.8

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 (196) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +205 -0
  3. package/css/components/alerts.css +224 -0
  4. package/css/components/avatar.css +275 -0
  5. package/css/components/badges.css +230 -0
  6. package/css/components/breadcrumbs.css +146 -0
  7. package/css/components/button-group.css +82 -0
  8. package/css/components/buttons.css +530 -0
  9. package/css/components/cards.css +304 -0
  10. package/css/components/chips.css +259 -0
  11. package/css/components/code-snippet.css +555 -0
  12. package/css/components/collapsible.css +267 -0
  13. package/css/components/collections.css +253 -0
  14. package/css/components/doc-search.css +464 -0
  15. package/css/components/doc-tabs.css +38 -0
  16. package/css/components/draggable.css +317 -0
  17. package/css/components/dropdown.css +266 -0
  18. package/css/components/footer.css +375 -0
  19. package/css/components/forms.css +1774 -0
  20. package/css/components/image-box.css +279 -0
  21. package/css/components/modals.css +285 -0
  22. package/css/components/navbar.css +530 -0
  23. package/css/components/pagination.css +186 -0
  24. package/css/components/preloader.css +340 -0
  25. package/css/components/progress.css +107 -0
  26. package/css/components/sidenav.css +301 -0
  27. package/css/components/skeleton.css +241 -0
  28. package/css/components/spinner.css +144 -0
  29. package/css/components/tabs.css +327 -0
  30. package/css/components/theme-customizer.css +835 -0
  31. package/css/components/toast.css +357 -0
  32. package/css/components/tooltips.css +270 -0
  33. package/css/core/colors.css +1017 -0
  34. package/css/core/fonts.css +266 -0
  35. package/css/core/grid.css +1699 -0
  36. package/css/core/helpers.css +2202 -0
  37. package/css/core/reset.css +128 -0
  38. package/css/core/tokens.css +213 -0
  39. package/css/core/typography.css +405 -0
  40. package/css/core/vd-aliases.css +47 -0
  41. package/css/effects/parallax.css +113 -0
  42. package/css/icons/icons-all.css +23 -0
  43. package/css/icons/icons.css +25 -0
  44. package/css/utilities/media.css +167 -0
  45. package/css/utilities/print.css +111 -0
  46. package/css/utilities/shadow.css +243 -0
  47. package/css/utilities/table.css +381 -0
  48. package/css/utilities/transforms.css +71 -0
  49. package/css/utilities/transitions.css +87 -0
  50. package/css/vanduo.css +80 -0
  51. package/dist/build-info.json +6 -0
  52. package/dist/fonts/fira-sans/fira-sans-bold.woff2 +0 -0
  53. package/dist/fonts/fira-sans/fira-sans-medium.woff2 +0 -0
  54. package/dist/fonts/fira-sans/fira-sans-regular.woff2 +0 -0
  55. package/dist/fonts/ibm-plex/ibm-plex-sans-bold.woff2 +0 -0
  56. package/dist/fonts/ibm-plex/ibm-plex-sans-medium.woff2 +0 -0
  57. package/dist/fonts/ibm-plex/ibm-plex-sans-regular.woff2 +0 -0
  58. package/dist/fonts/inter/inter-bold.woff2 +0 -0
  59. package/dist/fonts/inter/inter-medium.woff2 +0 -0
  60. package/dist/fonts/inter/inter-regular.woff2 +0 -0
  61. package/dist/fonts/inter/inter-semibold.woff2 +0 -0
  62. package/dist/fonts/jetbrains-mono/jetbrains-mono-bold.woff2 +0 -0
  63. package/dist/fonts/jetbrains-mono/jetbrains-mono-regular.woff2 +0 -0
  64. package/dist/fonts/open-sans/open-sans-bold.woff2 +0 -0
  65. package/dist/fonts/open-sans/open-sans-medium.woff2 +0 -0
  66. package/dist/fonts/open-sans/open-sans-regular.woff2 +0 -0
  67. package/dist/fonts/rubik/rubik-bold.woff2 +0 -0
  68. package/dist/fonts/rubik/rubik-medium.woff2 +0 -0
  69. package/dist/fonts/rubik/rubik-regular.woff2 +0 -0
  70. package/dist/fonts/source-sans/source-sans-bold.woff2 +0 -0
  71. package/dist/fonts/source-sans/source-sans-regular.woff2 +0 -0
  72. package/dist/fonts/source-sans/source-sans-semibold.woff2 +0 -0
  73. package/dist/fonts/titillium-web/titillium-web-bold.woff2 +0 -0
  74. package/dist/fonts/titillium-web/titillium-web-regular.woff2 +0 -0
  75. package/dist/fonts/titillium-web/titillium-web-semibold.woff2 +0 -0
  76. package/dist/fonts/ubuntu/ubuntu-bold.woff2 +0 -0
  77. package/dist/fonts/ubuntu/ubuntu-medium.woff2 +0 -0
  78. package/dist/fonts/ubuntu/ubuntu-regular.woff2 +0 -0
  79. package/dist/icons/phosphor/LICENSE +21 -0
  80. package/dist/icons/phosphor/bold/Phosphor-Bold.ttf +0 -0
  81. package/dist/icons/phosphor/bold/Phosphor-Bold.woff +0 -0
  82. package/dist/icons/phosphor/bold/Phosphor-Bold.woff2 +0 -0
  83. package/dist/icons/phosphor/bold/style.css +4627 -0
  84. package/dist/icons/phosphor/duotone/Phosphor-Duotone.ttf +0 -0
  85. package/dist/icons/phosphor/duotone/Phosphor-Duotone.woff +0 -0
  86. package/dist/icons/phosphor/duotone/Phosphor-Duotone.woff2 +0 -0
  87. package/dist/icons/phosphor/duotone/style.css +12115 -0
  88. package/dist/icons/phosphor/fill/Phosphor-Fill.ttf +0 -0
  89. package/dist/icons/phosphor/fill/Phosphor-Fill.woff +0 -0
  90. package/dist/icons/phosphor/fill/Phosphor-Fill.woff2 +0 -0
  91. package/dist/icons/phosphor/fill/style.css +4627 -0
  92. package/dist/icons/phosphor/light/Phosphor-Light.ttf +0 -0
  93. package/dist/icons/phosphor/light/Phosphor-Light.woff +0 -0
  94. package/dist/icons/phosphor/light/Phosphor-Light.woff2 +0 -0
  95. package/dist/icons/phosphor/light/style.css +4627 -0
  96. package/dist/icons/phosphor/regular/Phosphor.ttf +0 -0
  97. package/dist/icons/phosphor/regular/Phosphor.woff +0 -0
  98. package/dist/icons/phosphor/regular/Phosphor.woff2 +0 -0
  99. package/dist/icons/phosphor/regular/style.css +4627 -0
  100. package/dist/icons/phosphor/thin/Phosphor-Thin.ttf +0 -0
  101. package/dist/icons/phosphor/thin/Phosphor-Thin.woff +0 -0
  102. package/dist/icons/phosphor/thin/Phosphor-Thin.woff2 +0 -0
  103. package/dist/icons/phosphor/thin/style.css +4627 -0
  104. package/dist/vanduo.cjs.js +5569 -0
  105. package/dist/vanduo.cjs.js.map +7 -0
  106. package/dist/vanduo.cjs.min.js +48 -0
  107. package/dist/vanduo.cjs.min.js.map +7 -0
  108. package/dist/vanduo.css +60666 -0
  109. package/dist/vanduo.css.map +1 -0
  110. package/dist/vanduo.esm.js +5548 -0
  111. package/dist/vanduo.esm.js.map +7 -0
  112. package/dist/vanduo.esm.min.js +48 -0
  113. package/dist/vanduo.esm.min.js.map +7 -0
  114. package/dist/vanduo.js +5545 -0
  115. package/dist/vanduo.js.map +7 -0
  116. package/dist/vanduo.min.css +2 -0
  117. package/dist/vanduo.min.css.map +1 -0
  118. package/dist/vanduo.min.js +48 -0
  119. package/dist/vanduo.min.js.map +7 -0
  120. package/fonts/fira-sans/fira-sans-bold.woff2 +0 -0
  121. package/fonts/fira-sans/fira-sans-medium.woff2 +0 -0
  122. package/fonts/fira-sans/fira-sans-regular.woff2 +0 -0
  123. package/fonts/ibm-plex/ibm-plex-sans-bold.woff2 +0 -0
  124. package/fonts/ibm-plex/ibm-plex-sans-medium.woff2 +0 -0
  125. package/fonts/ibm-plex/ibm-plex-sans-regular.woff2 +0 -0
  126. package/fonts/inter/inter-bold.woff2 +0 -0
  127. package/fonts/inter/inter-medium.woff2 +0 -0
  128. package/fonts/inter/inter-regular.woff2 +0 -0
  129. package/fonts/inter/inter-semibold.woff2 +0 -0
  130. package/fonts/jetbrains-mono/jetbrains-mono-bold.woff2 +0 -0
  131. package/fonts/jetbrains-mono/jetbrains-mono-regular.woff2 +0 -0
  132. package/fonts/open-sans/open-sans-bold.woff2 +0 -0
  133. package/fonts/open-sans/open-sans-medium.woff2 +0 -0
  134. package/fonts/open-sans/open-sans-regular.woff2 +0 -0
  135. package/fonts/rubik/rubik-bold.woff2 +0 -0
  136. package/fonts/rubik/rubik-medium.woff2 +0 -0
  137. package/fonts/rubik/rubik-regular.woff2 +0 -0
  138. package/fonts/source-sans/source-sans-bold.woff2 +0 -0
  139. package/fonts/source-sans/source-sans-regular.woff2 +0 -0
  140. package/fonts/source-sans/source-sans-semibold.woff2 +0 -0
  141. package/fonts/titillium-web/titillium-web-bold.woff2 +0 -0
  142. package/fonts/titillium-web/titillium-web-regular.woff2 +0 -0
  143. package/fonts/titillium-web/titillium-web-semibold.woff2 +0 -0
  144. package/fonts/ubuntu/ubuntu-bold.woff2 +0 -0
  145. package/fonts/ubuntu/ubuntu-medium.woff2 +0 -0
  146. package/fonts/ubuntu/ubuntu-regular.woff2 +0 -0
  147. package/icons/phosphor/LICENSE +21 -0
  148. package/icons/phosphor/bold/Phosphor-Bold.ttf +0 -0
  149. package/icons/phosphor/bold/Phosphor-Bold.woff +0 -0
  150. package/icons/phosphor/bold/Phosphor-Bold.woff2 +0 -0
  151. package/icons/phosphor/bold/style.css +4627 -0
  152. package/icons/phosphor/duotone/Phosphor-Duotone.ttf +0 -0
  153. package/icons/phosphor/duotone/Phosphor-Duotone.woff +0 -0
  154. package/icons/phosphor/duotone/Phosphor-Duotone.woff2 +0 -0
  155. package/icons/phosphor/duotone/style.css +12115 -0
  156. package/icons/phosphor/fill/Phosphor-Fill.ttf +0 -0
  157. package/icons/phosphor/fill/Phosphor-Fill.woff +0 -0
  158. package/icons/phosphor/fill/Phosphor-Fill.woff2 +0 -0
  159. package/icons/phosphor/fill/style.css +4627 -0
  160. package/icons/phosphor/light/Phosphor-Light.ttf +0 -0
  161. package/icons/phosphor/light/Phosphor-Light.woff +0 -0
  162. package/icons/phosphor/light/Phosphor-Light.woff2 +0 -0
  163. package/icons/phosphor/light/style.css +4627 -0
  164. package/icons/phosphor/regular/Phosphor.ttf +0 -0
  165. package/icons/phosphor/regular/Phosphor.woff +0 -0
  166. package/icons/phosphor/regular/Phosphor.woff2 +0 -0
  167. package/icons/phosphor/regular/style.css +4627 -0
  168. package/icons/phosphor/thin/Phosphor-Thin.ttf +0 -0
  169. package/icons/phosphor/thin/Phosphor-Thin.woff +0 -0
  170. package/icons/phosphor/thin/Phosphor-Thin.woff2 +0 -0
  171. package/icons/phosphor/thin/style.css +4627 -0
  172. package/js/components/code-snippet.js +639 -0
  173. package/js/components/collapsible.js +226 -0
  174. package/js/components/doc-search.js +936 -0
  175. package/js/components/draggable.js +725 -0
  176. package/js/components/dropdown.js +362 -0
  177. package/js/components/font-switcher.js +253 -0
  178. package/js/components/grid.js +279 -0
  179. package/js/components/image-box.js +372 -0
  180. package/js/components/modals.js +367 -0
  181. package/js/components/navbar.js +264 -0
  182. package/js/components/pagination.js +286 -0
  183. package/js/components/parallax.js +216 -0
  184. package/js/components/preloader.js +183 -0
  185. package/js/components/select.js +444 -0
  186. package/js/components/sidenav.js +303 -0
  187. package/js/components/tabs.js +303 -0
  188. package/js/components/theme-customizer.js +784 -0
  189. package/js/components/theme-switcher.js +183 -0
  190. package/js/components/toast.js +343 -0
  191. package/js/components/tooltips.js +306 -0
  192. package/js/index.js +52 -0
  193. package/js/utils/helpers.js +306 -0
  194. package/js/utils/lifecycle.js +135 -0
  195. package/js/vanduo.js +120 -0
  196. package/package.json +78 -0
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Vanduo Framework - Lifecycle Manager
3
+ * Central registry for component instances and cleanup
4
+ * Prevents memory leaks in SPAs by tracking event listeners
5
+ */
6
+
7
+ (function() {
8
+ 'use strict';
9
+
10
+ /**
11
+ * Lifecycle Manager
12
+ * Simple registry that tracks component instances and their cleanup functions
13
+ */
14
+ const Lifecycle = {
15
+ // Map of element -> { componentName, cleanupFunctions }
16
+ instances: new Map(),
17
+
18
+ /**
19
+ * Register a component instance
20
+ * @param {HTMLElement} element - The DOM element
21
+ * @param {string} componentName - Name of the component
22
+ * @param {Array<Function>} cleanupFns - Functions to call on destroy
23
+ */
24
+ register: function(element, componentName, cleanupFns = []) {
25
+ if (this.instances.has(element)) {
26
+ // Already registered, merge cleanup functions
27
+ const existing = this.instances.get(element);
28
+ existing.cleanup = existing.cleanup.concat(cleanupFns);
29
+ return;
30
+ }
31
+
32
+ this.instances.set(element, {
33
+ component: componentName,
34
+ cleanup: cleanupFns,
35
+ registeredAt: Date.now()
36
+ });
37
+ },
38
+
39
+ /**
40
+ * Unregister a single element and run its cleanup
41
+ * @param {HTMLElement} element - The element to unregister
42
+ */
43
+ unregister: function(element) {
44
+ const instance = this.instances.get(element);
45
+ if (!instance) return;
46
+
47
+ // Run all cleanup functions
48
+ instance.cleanup.forEach(function(fn) {
49
+ try {
50
+ fn();
51
+ } catch (e) {
52
+ console.warn('[Vanduo Lifecycle] Cleanup error:', e);
53
+ }
54
+ });
55
+
56
+ this.instances.delete(element);
57
+ },
58
+
59
+ /**
60
+ * Destroy all instances of a specific component
61
+ * @param {string} componentName - Optional component name filter
62
+ */
63
+ destroyAll: function(componentName) {
64
+ const toRemove = [];
65
+
66
+ this.instances.forEach(function(instance, element) {
67
+ if (!componentName || instance.component === componentName) {
68
+ toRemove.push(element);
69
+ }
70
+ });
71
+
72
+ toRemove.forEach(function(element) {
73
+ Lifecycle.unregister(element);
74
+ });
75
+ },
76
+
77
+ /**
78
+ * Destroy all instances within a specific container
79
+ * Useful for SPAs when navigating between pages
80
+ * @param {HTMLElement} container - Container element
81
+ */
82
+ destroyAllInContainer: function(container) {
83
+ const toRemove = [];
84
+
85
+ this.instances.forEach(function(instance, element) {
86
+ if (container.contains(element)) {
87
+ toRemove.push(element);
88
+ }
89
+ });
90
+
91
+ toRemove.forEach(function(element) {
92
+ Lifecycle.unregister(element);
93
+ });
94
+ },
95
+
96
+ /**
97
+ * Get all registered instances (for debugging)
98
+ * @returns {Array} Array of instance info objects
99
+ */
100
+ getAll: function() {
101
+ const result = [];
102
+ this.instances.forEach(function(instance, element) {
103
+ result.push({
104
+ element: element,
105
+ component: instance.component,
106
+ registeredAt: instance.registeredAt
107
+ });
108
+ });
109
+ return result;
110
+ },
111
+
112
+ /**
113
+ * Check if an element is registered
114
+ * @param {HTMLElement} element - The element to check
115
+ * @returns {boolean}
116
+ */
117
+ has: function(element) {
118
+ return this.instances.has(element);
119
+ }
120
+ };
121
+
122
+ // Auto-cleanup on page unload
123
+ window.addEventListener('beforeunload', function() {
124
+ Lifecycle.destroyAll();
125
+ });
126
+
127
+ // Expose globally
128
+ window.VanduoLifecycle = Lifecycle;
129
+
130
+ // Register with Vanduo framework if available
131
+ if (typeof window.Vanduo !== 'undefined') {
132
+ window.Vanduo.register('lifecycle', Lifecycle);
133
+ }
134
+
135
+ })();
package/js/vanduo.js ADDED
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Vanduo Framework - Main JavaScript File
3
+ * v1.1.6
4
+ */
5
+
6
+ (function() {
7
+ 'use strict';
8
+
9
+ /**
10
+ * Vanduo Framework Object
11
+ */
12
+ const Vanduo = {
13
+ version: '1.1.6',
14
+ components: {},
15
+
16
+ /**
17
+ * Initialize framework
18
+ * Call this after DOM is ready and all components are loaded
19
+ */
20
+ init: function() {
21
+ // Initialize components when DOM is ready
22
+ if (typeof ready !== 'undefined') {
23
+ ready(() => {
24
+ this.initComponents();
25
+ });
26
+ } else {
27
+ // Fallback if helpers.js is not loaded
28
+ if (document.readyState === 'loading') {
29
+ document.addEventListener('DOMContentLoaded', () => {
30
+ this.initComponents();
31
+ });
32
+ } else {
33
+ this.initComponents();
34
+ }
35
+ }
36
+ },
37
+
38
+ /**
39
+ * Initialize all components
40
+ */
41
+ initComponents: function() {
42
+ // Initialize all registered components
43
+ Object.keys(this.components).forEach((name) => {
44
+ const component = this.components[name];
45
+ if (component.init && typeof component.init === 'function') {
46
+ try {
47
+ component.init();
48
+ } catch (e) {
49
+ console.warn('[Vanduo] Failed to initialize component "' + name + '":', e);
50
+ }
51
+ }
52
+ });
53
+
54
+ console.log('Vanduo Framework v1.1.6 initialized');
55
+ },
56
+
57
+ /**
58
+ * Register a component
59
+ * @param {string} name - Component name
60
+ * @param {Object} component - Component object with init method
61
+ */
62
+ register: function(name, component) {
63
+ this.components[name] = component;
64
+ // Note: Components are NOT auto-initialized on registration
65
+ // Call Vanduo.init() explicitly after all components are registered
66
+ },
67
+
68
+ /**
69
+ * Re-initialize a component (useful after dynamic DOM changes)
70
+ * @param {string} name - Component name
71
+ */
72
+ reinit: function(name) {
73
+ var component = this.components[name];
74
+ if (component && component.init && typeof component.init === 'function') {
75
+ try {
76
+ component.init();
77
+ } catch (e) {
78
+ console.warn('[Vanduo] Failed to reinitialize component "' + name + '":', e);
79
+ }
80
+ }
81
+ },
82
+
83
+ /**
84
+ * Destroy all component instances and clean up event listeners
85
+ * Uses lifecycle manager for memory leak prevention
86
+ */
87
+ destroyAll: function() {
88
+ // First, destroy components that have their own destroyAll
89
+ var names = Object.keys(this.components);
90
+ for (var i = 0; i < names.length; i++) {
91
+ var component = this.components[names[i]];
92
+ if (component && component.destroyAll && typeof component.destroyAll === 'function') {
93
+ try {
94
+ component.destroyAll();
95
+ } catch (e) {
96
+ console.warn('[Vanduo] Failed to destroy component "' + names[i] + '":', e);
97
+ }
98
+ }
99
+ }
100
+
101
+ // Then, cleanup any remaining registered elements via lifecycle manager
102
+ if (typeof window.VanduoLifecycle !== 'undefined') {
103
+ window.VanduoLifecycle.destroyAll();
104
+ }
105
+ },
106
+
107
+ /**
108
+ * Get component instance
109
+ * @param {string} name - Component name
110
+ * @returns {Object|null}
111
+ */
112
+ getComponent: function(name) {
113
+ return this.components[name] || null;
114
+ }
115
+ };
116
+
117
+ // Expose to global scope
118
+ window.Vanduo = Vanduo;
119
+
120
+ })();
package/package.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "vanduo-framework",
3
+ "version": "1.1.8",
4
+ "description": "Zero-dependency CSS/JS framework built on Fibonacci/Golden Ratio design system with Open Color integration",
5
+ "keywords": [
6
+ "css",
7
+ "framework",
8
+ "fibonacci",
9
+ "golden-ratio",
10
+ "open-color",
11
+ "dark-mode",
12
+ "accessibility"
13
+ ],
14
+ "homepage": "https://vanduo.dev",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/Nostromo-618/vanduo-framework"
18
+ },
19
+ "license": "MIT",
20
+ "author": "Nostromo-618",
21
+ "type": "module",
22
+ "main": "dist/vanduo.cjs.js",
23
+ "module": "dist/vanduo.esm.js",
24
+ "exports": {
25
+ ".": {
26
+ "import": "./dist/vanduo.esm.js",
27
+ "require": "./dist/vanduo.cjs.js",
28
+ "default": "./dist/vanduo.esm.js"
29
+ },
30
+ "./css": "./dist/vanduo.min.css",
31
+ "./iife": "./dist/vanduo.min.js",
32
+ "./package.json": "./package.json"
33
+ },
34
+ "files": [
35
+ "dist/",
36
+ "css/",
37
+ "js/",
38
+ "fonts/",
39
+ "icons/"
40
+ ],
41
+ "devDependencies": {
42
+ "@eslint/js": "^10.0.1",
43
+ "@playwright/test": "^1.58.2",
44
+ "esbuild": "^0.27.3",
45
+ "eslint": "^10.0.1",
46
+ "husky": "^9.1.7",
47
+ "lightningcss": "^1.31.1",
48
+ "stylelint": "^17.3.0",
49
+ "stylelint-config-standard": "^40.0.0"
50
+ },
51
+ "engines": {
52
+ "node": ">=18.0.0",
53
+ "pnpm": ">=8.0.0"
54
+ },
55
+ "scripts": {
56
+ "build": "node scripts/build.js --minify",
57
+ "dev": "node scripts/build.js",
58
+ "release:assets": "node scripts/upload-release-assets.js",
59
+ "lint": "pnpm run lint:css && pnpm run lint:js",
60
+ "lint:css": "stylelint 'css/**/*.css'",
61
+ "lint:js": "eslint 'js/**/*.js'",
62
+ "lint:fix": "pnpm run lint:css -- --fix && pnpm run lint:js -- --fix",
63
+ "clean": "rm -rf dist",
64
+ "test": "playwright test",
65
+ "test:ui": "playwright test --ui",
66
+ "test:headed": "playwright test --headed",
67
+ "test:debug": "playwright test --debug",
68
+ "test:a11y": "playwright test --grep @a11y",
69
+ "test:e2e": "playwright test --grep @e2e",
70
+ "test:perf": "playwright test --grep @perf",
71
+ "test:mobile": "playwright test --project='*Mobile*'",
72
+ "test:desktop": "playwright test --project='*Desktop*'",
73
+ "test:chromium": "playwright test --project='Chromium*'",
74
+ "test:firefox": "playwright test --project='Firefox*'",
75
+ "test:webkit": "playwright test --project='WebKit*'",
76
+ "report": "playwright show-report"
77
+ }
78
+ }