@abstraks-dev/ui-library 1.0.1

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 (158) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +708 -0
  3. package/dist/__tests__/Anchor.test.js +145 -0
  4. package/dist/__tests__/ArrowRight.test.js +91 -0
  5. package/dist/__tests__/Avatar.test.js +123 -0
  6. package/dist/__tests__/Button.test.js +82 -0
  7. package/dist/__tests__/Card.test.js +198 -0
  8. package/dist/__tests__/CheckCircle.test.js +98 -0
  9. package/dist/__tests__/Checkbox.test.js +161 -0
  10. package/dist/__tests__/ChevronDown.test.js +73 -0
  11. package/dist/__tests__/Close.test.js +98 -0
  12. package/dist/__tests__/EditSquare.test.js +99 -0
  13. package/dist/__tests__/Error.test.js +74 -0
  14. package/dist/__tests__/Footer.test.js +66 -0
  15. package/dist/__tests__/Heading.test.js +227 -0
  16. package/dist/__tests__/Hero.test.js +74 -0
  17. package/dist/__tests__/Label.test.js +123 -0
  18. package/dist/__tests__/Loader.test.js +115 -0
  19. package/dist/__tests__/MenuHover.test.js +137 -0
  20. package/dist/__tests__/Paragraph.test.js +93 -0
  21. package/dist/__tests__/PlusCircle.test.js +99 -0
  22. package/dist/__tests__/Radio.test.js +153 -0
  23. package/dist/__tests__/Select.test.js +187 -0
  24. package/dist/__tests__/Tabs.test.js +162 -0
  25. package/dist/__tests__/TextArea.test.js +127 -0
  26. package/dist/__tests__/TextInput.test.js +181 -0
  27. package/dist/__tests__/Toggle.test.js +120 -0
  28. package/dist/__tests__/TrashX.test.js +99 -0
  29. package/dist/__tests__/useHeadingAccessibility.test.js +144 -0
  30. package/dist/components/Anchor.js +131 -0
  31. package/dist/components/Animation.js +129 -0
  32. package/dist/components/AnimationGroup.js +207 -0
  33. package/dist/components/AnimationToggle.js +216 -0
  34. package/dist/components/Avatar.js +153 -0
  35. package/dist/components/Button.js +218 -0
  36. package/dist/components/Card.js +222 -0
  37. package/dist/components/Checkbox.js +305 -0
  38. package/dist/components/Crud.js +564 -0
  39. package/dist/components/DragAndDrop.js +337 -0
  40. package/dist/components/Error.js +206 -0
  41. package/dist/components/Footer.js +99 -0
  42. package/dist/components/Form.js +412 -0
  43. package/dist/components/Header.js +372 -0
  44. package/dist/components/Heading.js +134 -0
  45. package/dist/components/Hero.js +181 -0
  46. package/dist/components/Label.js +256 -0
  47. package/dist/components/Loader.js +302 -0
  48. package/dist/components/MenuHover.js +114 -0
  49. package/dist/components/Paragraph.js +128 -0
  50. package/dist/components/Prompt.js +61 -0
  51. package/dist/components/Radio.js +254 -0
  52. package/dist/components/Select.js +422 -0
  53. package/dist/components/SideMenu.js +313 -0
  54. package/dist/components/Tabs.js +297 -0
  55. package/dist/components/TextArea.js +370 -0
  56. package/dist/components/TextInput.js +286 -0
  57. package/dist/components/Toggle.js +186 -0
  58. package/dist/components/crudFiles/CrudEditBase.js +150 -0
  59. package/dist/components/crudFiles/CrudViewBase.js +39 -0
  60. package/dist/components/crudFiles/crudDevelopment.js +118 -0
  61. package/dist/components/crudFiles/crudEditHandlers.js +50 -0
  62. package/dist/constants/animation.js +30 -0
  63. package/dist/icons/ArrowIcon.js +32 -0
  64. package/dist/icons/ArrowRight.js +33 -0
  65. package/dist/icons/CheckCircle.js +33 -0
  66. package/dist/icons/ChevronDown.js +28 -0
  67. package/dist/icons/Close.js +33 -0
  68. package/dist/icons/EditSquare.js +33 -0
  69. package/dist/icons/Ellipses.js +34 -0
  70. package/dist/icons/Hamburger.js +39 -0
  71. package/dist/icons/LoadingSpinner.js +42 -0
  72. package/dist/icons/PlusCircle.js +33 -0
  73. package/dist/icons/SaveIcon.js +32 -0
  74. package/dist/icons/TrashX.js +33 -0
  75. package/dist/icons/__tests__/CheckCircle.test.js +9 -0
  76. package/dist/icons/__tests__/ChevronDown.test.js +9 -0
  77. package/dist/icons/__tests__/Close.test.js +9 -0
  78. package/dist/icons/__tests__/EditSquare.test.js +9 -0
  79. package/dist/icons/__tests__/PlusCircle.test.js +9 -0
  80. package/dist/icons/__tests__/TrashX.test.js +9 -0
  81. package/dist/icons/index.js +89 -0
  82. package/dist/index.js +332 -0
  83. package/dist/setupTests.js +3 -0
  84. package/dist/styles/_variables.scss +286 -0
  85. package/dist/styles/anchor.scss +40 -0
  86. package/dist/styles/animation-accessibility.scss +96 -0
  87. package/dist/styles/animation-toggle.scss +233 -0
  88. package/dist/styles/animation.scss +3781 -0
  89. package/dist/styles/avatar.scss +285 -0
  90. package/dist/styles/button.scss +430 -0
  91. package/dist/styles/card.scss +210 -0
  92. package/dist/styles/checkbox.scss +160 -0
  93. package/dist/styles/crud.scss +474 -0
  94. package/dist/styles/dragAndDrop.scss +312 -0
  95. package/dist/styles/error.scss +232 -0
  96. package/dist/styles/footer.scss +58 -0
  97. package/dist/styles/form.scss +420 -0
  98. package/dist/styles/grid.scss +29 -0
  99. package/dist/styles/header.scss +276 -0
  100. package/dist/styles/heading.scss +118 -0
  101. package/dist/styles/hero.scss +185 -0
  102. package/dist/styles/htmlElements.scss +20 -0
  103. package/dist/styles/image.scss +9 -0
  104. package/dist/styles/label.scss +340 -0
  105. package/dist/styles/list-item.scss +5 -0
  106. package/dist/styles/loader.scss +354 -0
  107. package/dist/styles/logo.scss +19 -0
  108. package/dist/styles/main.css +9056 -0
  109. package/dist/styles/main.css.map +1 -0
  110. package/dist/styles/main.scss +0 -0
  111. package/dist/styles/menu-hover.scss +30 -0
  112. package/dist/styles/paragraph.scss +88 -0
  113. package/dist/styles/prompt.scss +51 -0
  114. package/dist/styles/radio.scss +202 -0
  115. package/dist/styles/select.scss +363 -0
  116. package/dist/styles/side-menu.scss +334 -0
  117. package/dist/styles/tabs.scss +540 -0
  118. package/dist/styles/text-area.scss +388 -0
  119. package/dist/styles/text-input.scss +171 -0
  120. package/dist/styles/toggle.scss +0 -0
  121. package/dist/styles/unordered-list.scss +8 -0
  122. package/dist/utils/ScrollHandler.js +30 -0
  123. package/dist/utils/accessibility.js +128 -0
  124. package/dist/utils/heroUtils.js +316 -0
  125. package/dist/utils/index.js +104 -0
  126. package/dist/utils/inputValidation.js +29 -0
  127. package/dist/utils/keyboardNavigation.js +536 -0
  128. package/dist/utils/labelUtils.js +708 -0
  129. package/dist/utils/loaderUtils.js +387 -0
  130. package/dist/utils/menuUtils.js +575 -0
  131. package/dist/utils/useHeadingAccessibility.js +298 -0
  132. package/dist/utils/useRadioGroup.js +260 -0
  133. package/dist/utils/useSelectAccessibility.js +426 -0
  134. package/dist/utils/useTabsAccessibility.js +278 -0
  135. package/dist/utils/useTextAreaAccessibility.js +255 -0
  136. package/dist/utils/useTextInputAccessibility.js +295 -0
  137. package/dist/utils/useTypographyAccessibility.js +168 -0
  138. package/dist/utils/useWindowSize.js +32 -0
  139. package/dist/utils/utils/ScrollHandler.js +26 -0
  140. package/dist/utils/utils/accessibility.js +133 -0
  141. package/dist/utils/utils/heroUtils.js +348 -0
  142. package/dist/utils/utils/index.js +9 -0
  143. package/dist/utils/utils/inputValidation.js +22 -0
  144. package/dist/utils/utils/keyboardNavigation.js +664 -0
  145. package/dist/utils/utils/labelUtils.js +772 -0
  146. package/dist/utils/utils/loaderUtils.js +436 -0
  147. package/dist/utils/utils/menuUtils.js +651 -0
  148. package/dist/utils/utils/useHeadingAccessibility.js +334 -0
  149. package/dist/utils/utils/useRadioGroup.js +311 -0
  150. package/dist/utils/utils/useSelectAccessibility.js +498 -0
  151. package/dist/utils/utils/useTabsAccessibility.js +316 -0
  152. package/dist/utils/utils/useTextAreaAccessibility.js +303 -0
  153. package/dist/utils/utils/useTextInputAccessibility.js +338 -0
  154. package/dist/utils/utils/useTypographyAccessibility.js +180 -0
  155. package/dist/utils/utils/useWindowSize.js +26 -0
  156. package/dist/utils/utils/validation.js +131 -0
  157. package/dist/utils/validation.js +139 -0
  158. package/package.json +90 -0
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.validateUrl = exports.validatePhone = exports.validatePasswordStrength = exports.validateField = exports.validateEmail = exports.VALIDATION_PATTERNS = exports.EMAIL_REGEX_STRICT = exports.EMAIL_REGEX = void 0;
7
+ /**
8
+ * Validation utilities for form inputs
9
+ * Contains common validation patterns and functions
10
+ */
11
+
12
+ // Common email validation regex pattern
13
+ // This pattern checks for basic email format: user@domain.extension
14
+ const EMAIL_REGEX = exports.EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
15
+
16
+ // More comprehensive email regex (RFC 5322 compliant, simplified)
17
+ const EMAIL_REGEX_STRICT = exports.EMAIL_REGEX_STRICT = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
18
+
19
+ // Common validation patterns
20
+ const VALIDATION_PATTERNS = exports.VALIDATION_PATTERNS = {
21
+ email: EMAIL_REGEX,
22
+ phone: /^[\+]?[1-9][\d]{0,15}$/,
23
+ url: /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$/,
24
+ postalCode: /^[A-Za-z0-9\s-]{3,10}$/,
25
+ creditCard: /^[0-9]{13,19}$/,
26
+ strongPassword: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/
27
+ };
28
+
29
+ /**
30
+ * Validates an email address
31
+ * @param {string} email - The email address to validate
32
+ * @param {boolean} strict - Whether to use strict RFC 5322 validation
33
+ * @returns {boolean} - True if email is valid
34
+ */
35
+ const validateEmail = (email, strict = false) => {
36
+ if (!email || typeof email !== 'string') {
37
+ return false;
38
+ }
39
+ const pattern = strict ? EMAIL_REGEX_STRICT : EMAIL_REGEX;
40
+ return pattern.test(email.trim());
41
+ };
42
+
43
+ /**
44
+ * Validates a phone number
45
+ * @param {string} phone - The phone number to validate
46
+ * @returns {boolean} - True if phone is valid
47
+ */
48
+ exports.validateEmail = validateEmail;
49
+ const validatePhone = phone => {
50
+ if (!phone || typeof phone !== 'string') {
51
+ return false;
52
+ }
53
+ return VALIDATION_PATTERNS.phone.test(phone.replace(/[\s\-\(\)]/g, ''));
54
+ };
55
+
56
+ /**
57
+ * Validates a URL
58
+ * @param {string} url - The URL to validate
59
+ * @returns {boolean} - True if URL is valid
60
+ */
61
+ exports.validatePhone = validatePhone;
62
+ const validateUrl = url => {
63
+ if (!url || typeof url !== 'string') {
64
+ return false;
65
+ }
66
+ return VALIDATION_PATTERNS.url.test(url.trim());
67
+ };
68
+
69
+ /**
70
+ * Validates password strength
71
+ * @param {string} password - The password to validate
72
+ * @returns {boolean} - True if password meets strength requirements
73
+ */
74
+ exports.validateUrl = validateUrl;
75
+ const validatePasswordStrength = password => {
76
+ if (!password || typeof password !== 'string') {
77
+ return false;
78
+ }
79
+ return VALIDATION_PATTERNS.strongPassword.test(password);
80
+ };
81
+
82
+ /**
83
+ * Generic field validation function
84
+ * @param {string} value - The value to validate
85
+ * @param {Object} rules - Validation rules object
86
+ * @param {string} fieldName - Name of the field for error messages
87
+ * @returns {string|null} - Error message or null if valid
88
+ */
89
+ exports.validatePasswordStrength = validatePasswordStrength;
90
+ const validateField = (value, rules, fieldName) => {
91
+ if (!rules) return null;
92
+
93
+ // Required validation
94
+ if (rules.required && (!value || value.trim() === '')) {
95
+ return `${fieldName} is required`;
96
+ }
97
+
98
+ // Skip other validations if field is empty and not required
99
+ if (!value || value.trim() === '') {
100
+ return null;
101
+ }
102
+
103
+ // Email validation
104
+ if (rules.email && !validateEmail(value, rules.strict)) {
105
+ return 'Please enter a valid email address';
106
+ }
107
+
108
+ // Phone validation
109
+ if (rules.phone && !validatePhone(value)) {
110
+ return 'Please enter a valid phone number';
111
+ }
112
+
113
+ // URL validation
114
+ if (rules.url && !validateUrl(value)) {
115
+ return 'Please enter a valid URL';
116
+ }
117
+
118
+ // Password strength validation
119
+ if (rules.strongPassword && !validatePasswordStrength(value)) {
120
+ return 'Password must contain at least 8 characters with uppercase, lowercase, number, and special character';
121
+ }
122
+
123
+ // Minimum length validation
124
+ if (rules.minLength && value.length < rules.minLength) {
125
+ return `${fieldName} must be at least ${rules.minLength} characters`;
126
+ }
127
+
128
+ // Maximum length validation
129
+ if (rules.maxLength && value.length > rules.maxLength) {
130
+ return `${fieldName} must not exceed ${rules.maxLength} characters`;
131
+ }
132
+
133
+ // Pattern validation
134
+ if (rules.pattern && !rules.pattern.test(value)) {
135
+ return rules.patternMessage || `${fieldName} format is invalid`;
136
+ }
137
+ return null;
138
+ };
139
+ exports.validateField = validateField;
package/package.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "@abstraks-dev/ui-library",
3
+ "version": "1.0.1",
4
+ "description": "User Interface library",
5
+ "main": "dist/index.js",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "scripts": {
10
+ "test": "jest",
11
+ "test:watch": "jest --watch",
12
+ "test:coverage": "jest --coverage",
13
+ "storybook": "concurrently \"npm run build-css:watch\" \"storybook dev -p 6006\"",
14
+ "build-storybook": "storybook build && npm run format-storybook-json",
15
+ "build-storybook:dev": "storybook build --webpack-stats-json --debug-webpack && npm run enhance-build",
16
+ "build-storybook:prod": "storybook build",
17
+ "build": "babel src --out-dir dist --extensions \".js,.jsx\"",
18
+ "postbuild": "cp -R src/styles dist/styles && cp -R src/utils dist/utils && npm run build-css",
19
+ "build-css": "sass src/main.scss dist/styles/main.css",
20
+ "build-css:watch": "sass src/main.scss dist/styles/main.css --watch",
21
+ "build-css:compressed": "sass src/main.scss dist/styles/main.css --style compressed",
22
+ "format-storybook-json": "node scripts/format-storybook-json.js",
23
+ "enhance-build": "node scripts/post-build-enhance.js",
24
+ "debug-info": "node scripts/post-build-enhance.js",
25
+ "release": "auto shipit",
26
+ "changeset": "changeset",
27
+ "version-packages": "changeset version"
28
+ },
29
+ "keywords": [
30
+ "ui",
31
+ "library"
32
+ ],
33
+ "author": "Abstraks",
34
+ "homepage": "https://github.com/Abstraks-co/ui-library",
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "git+https://github.com/Abstraks-co/ui-library.git"
38
+ },
39
+ "registry": "https://www.npmjs.com/~Abstraks-co",
40
+ "license": "ISC",
41
+ "devDependencies": {
42
+ "@babel/cli": "^7.28.0",
43
+ "@babel/preset-env": "^7.28.0",
44
+ "@babel/preset-react": "^7.27.1",
45
+ "@chromatic-com/storybook": "^4.0.1",
46
+ "@storybook/addon-a11y": "^9.0.17",
47
+ "@storybook/addon-docs": "^9.0.17",
48
+ "@storybook/addon-jest": "^9.0.17",
49
+ "@storybook/addon-links": "^9.0.17",
50
+ "@storybook/addon-onboarding": "^9.0.17",
51
+ "@storybook/addon-styling-webpack": "^1.0.1",
52
+ "@storybook/addon-webpack5-compiler-swc": "^3.0.0",
53
+ "@storybook/addons": "^7.6.17",
54
+ "@storybook/react": "^9.0.18",
55
+ "@storybook/react-webpack5": "^9.0.17",
56
+ "@testing-library/jest-dom": "^6.6.3",
57
+ "@testing-library/react": "^16.3.0",
58
+ "@testing-library/user-event": "^14.6.1",
59
+ "auto": "^11.3.0",
60
+ "axe-core": "^4.10.3",
61
+ "concurrently": "^9.2.0",
62
+ "css-loader": "^7.1.2",
63
+ "identity-obj-proxy": "^3.0.0",
64
+ "jest": "^29.7.0",
65
+ "jest-environment-jsdom": "^29.7.0",
66
+ "jsdom": "^26.1.0",
67
+ "postcss": "^8.5.6",
68
+ "postcss-cli": "^11.0.1",
69
+ "postcss-import": "^16.1.1",
70
+ "prop-types": "^15.8.1",
71
+ "sass": "^1.89.2",
72
+ "sass-loader": "^16.0.5",
73
+ "storybook": "^9.0.17",
74
+ "style-loader": "^4.0.0"
75
+ },
76
+ "dependencies": {
77
+ "animate.css": "^4.1.1",
78
+ "libphonenumber-js": "^1.12.10",
79
+ "react-transition-group": "^4.4.5",
80
+ "uuid": "^11.1.0",
81
+ "validator": "^13.15.15"
82
+ },
83
+ "bugs": {
84
+ "url": "https://github.com/Abstraks-co/ui-library/issues"
85
+ },
86
+ "peerDependencies": {
87
+ "react": ">=17.0.0",
88
+ "react-dom": ">=17.0.0"
89
+ }
90
+ }