ui-svelte 0.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.
- package/LICENSE +21 -0
- package/README.md +118 -0
- package/dist/charts/ArcChart.svelte +320 -0
- package/dist/charts/ArcChart.svelte.d.ts +26 -0
- package/dist/charts/AreaChart.svelte +495 -0
- package/dist/charts/AreaChart.svelte.d.ts +32 -0
- package/dist/charts/BarChart.svelte +504 -0
- package/dist/charts/BarChart.svelte.d.ts +38 -0
- package/dist/charts/Candlestick.svelte +527 -0
- package/dist/charts/Candlestick.svelte.d.ts +38 -0
- package/dist/charts/LineChart.svelte +365 -0
- package/dist/charts/LineChart.svelte.d.ts +36 -0
- package/dist/charts/PieChart.svelte +311 -0
- package/dist/charts/PieChart.svelte.d.ts +28 -0
- package/dist/charts/css/arc-chart.css +237 -0
- package/dist/charts/css/area-chart.css +289 -0
- package/dist/charts/css/bar-chart.css +167 -0
- package/dist/charts/css/candlestick.css +197 -0
- package/dist/charts/css/line-chart.css +202 -0
- package/dist/charts/css/pie-chart.css +199 -0
- package/dist/control/Audio.svelte +212 -0
- package/dist/control/Audio.svelte.d.ts +8 -0
- package/dist/control/Button.svelte +116 -0
- package/dist/control/Button.svelte.d.ts +22 -0
- package/dist/control/IconButton.svelte +104 -0
- package/dist/control/IconButton.svelte.d.ts +17 -0
- package/dist/control/Record.svelte +430 -0
- package/dist/control/Record.svelte.d.ts +11 -0
- package/dist/control/ToggleTheme.svelte +21 -0
- package/dist/control/ToggleTheme.svelte.d.ts +8 -0
- package/dist/control/Video.svelte +222 -0
- package/dist/control/Video.svelte.d.ts +10 -0
- package/dist/control/css/btn.css +206 -0
- package/dist/control/css/media.css +78 -0
- package/dist/control/css/video.css +58 -0
- package/dist/css/animations.css +27 -0
- package/dist/css/base.css +192 -0
- package/dist/css/utilities.css +136 -0
- package/dist/display/Accordion.svelte +98 -0
- package/dist/display/Accordion.svelte.d.ts +20 -0
- package/dist/display/Alert.svelte +65 -0
- package/dist/display/Alert.svelte.d.ts +15 -0
- package/dist/display/Avatar.svelte +80 -0
- package/dist/display/Avatar.svelte.d.ts +13 -0
- package/dist/display/Badge.svelte +46 -0
- package/dist/display/Badge.svelte.d.ts +11 -0
- package/dist/display/Card.svelte +94 -0
- package/dist/display/Card.svelte.d.ts +21 -0
- package/dist/display/Carousel.svelte +359 -0
- package/dist/display/Carousel.svelte.d.ts +25 -0
- package/dist/display/ChatBox.svelte +249 -0
- package/dist/display/ChatBox.svelte.d.ts +18 -0
- package/dist/display/Chip.svelte +67 -0
- package/dist/display/Chip.svelte.d.ts +17 -0
- package/dist/display/Code.svelte +56 -0
- package/dist/display/Code.svelte.d.ts +9 -0
- package/dist/display/Collapsible.svelte +71 -0
- package/dist/display/Collapsible.svelte.d.ts +15 -0
- package/dist/display/Divider.svelte +32 -0
- package/dist/display/Divider.svelte.d.ts +10 -0
- package/dist/display/Empty.svelte +462 -0
- package/dist/display/Empty.svelte.d.ts +11 -0
- package/dist/display/Icon.svelte +20 -0
- package/dist/display/Icon.svelte.d.ts +11 -0
- package/dist/display/Item.svelte +119 -0
- package/dist/display/Item.svelte.d.ts +24 -0
- package/dist/display/Loading.svelte +8 -0
- package/dist/display/Loading.svelte.d.ts +26 -0
- package/dist/display/Marquee.svelte +164 -0
- package/dist/display/Marquee.svelte.d.ts +21 -0
- package/dist/display/Section.svelte +63 -0
- package/dist/display/Section.svelte.d.ts +16 -0
- package/dist/display/Table.svelte +407 -0
- package/dist/display/Table.svelte.d.ts +32 -0
- package/dist/display/TypeWriter.svelte +23 -0
- package/dist/display/TypeWriter.svelte.d.ts +11 -0
- package/dist/display/User.svelte +0 -0
- package/dist/display/User.svelte.d.ts +26 -0
- package/dist/display/css/accordion.css +98 -0
- package/dist/display/css/alert.css +51 -0
- package/dist/display/css/avatar.css +158 -0
- package/dist/display/css/badge.css +47 -0
- package/dist/display/css/card.css +231 -0
- package/dist/display/css/carousel.css +156 -0
- package/dist/display/css/chat-box.css +188 -0
- package/dist/display/css/chip.css +91 -0
- package/dist/display/css/code.css +19 -0
- package/dist/display/css/collapsible.css +86 -0
- package/dist/display/css/divider.css +54 -0
- package/dist/display/css/empty.css +8 -0
- package/dist/display/css/item.css +149 -0
- package/dist/display/css/listbox.css +24 -0
- package/dist/display/css/marquee.css +138 -0
- package/dist/display/css/section.css +85 -0
- package/dist/display/css/table.css +361 -0
- package/dist/form/Checkbox.svelte +45 -0
- package/dist/form/Checkbox.svelte.d.ts +13 -0
- package/dist/form/ComboBox.svelte +448 -0
- package/dist/form/ComboBox.svelte.d.ts +29 -0
- package/dist/form/CsvField.svelte +389 -0
- package/dist/form/CsvField.svelte.d.ts +21 -0
- package/dist/form/DateField.svelte +292 -0
- package/dist/form/DateField.svelte.d.ts +18 -0
- package/dist/form/Dropzone.svelte +196 -0
- package/dist/form/Dropzone.svelte.d.ts +30 -0
- package/dist/form/ImageCropper.svelte +254 -0
- package/dist/form/ImageCropper.svelte.d.ts +14 -0
- package/dist/form/PasswordField.svelte +170 -0
- package/dist/form/PasswordField.svelte.d.ts +28 -0
- package/dist/form/PhoneField.svelte +485 -0
- package/dist/form/PhoneField.svelte.d.ts +25 -0
- package/dist/form/PinField.svelte +139 -0
- package/dist/form/PinField.svelte.d.ts +17 -0
- package/dist/form/RadioGroup.svelte +70 -0
- package/dist/form/RadioGroup.svelte.d.ts +19 -0
- package/dist/form/Select.svelte +350 -0
- package/dist/form/Select.svelte.d.ts +26 -0
- package/dist/form/Slider.svelte +60 -0
- package/dist/form/Slider.svelte.d.ts +15 -0
- package/dist/form/TextField.svelte +154 -0
- package/dist/form/TextField.svelte.d.ts +31 -0
- package/dist/form/Textarea.svelte +137 -0
- package/dist/form/Textarea.svelte.d.ts +27 -0
- package/dist/form/Toggle.svelte +45 -0
- package/dist/form/Toggle.svelte.d.ts +13 -0
- package/dist/form/css/checkbox.css +46 -0
- package/dist/form/css/combo-box.css +69 -0
- package/dist/form/css/control.css +177 -0
- package/dist/form/css/csv-field.css +0 -0
- package/dist/form/css/date.css +56 -0
- package/dist/form/css/dropzone.css +133 -0
- package/dist/form/css/field.css +17 -0
- package/dist/form/css/image-cropper.css +155 -0
- package/dist/form/css/password.css +35 -0
- package/dist/form/css/radio-group.css +57 -0
- package/dist/form/css/select.css +18 -0
- package/dist/form/css/slider.css +80 -0
- package/dist/form/css/textarea.css +130 -0
- package/dist/form/css/toggle.css +27 -0
- package/dist/form/js/countries.d.ts +13 -0
- package/dist/form/js/countries.js +307 -0
- package/dist/form/js/phone-examples.d.ts +248 -0
- package/dist/form/js/phone-examples.js +247 -0
- package/dist/hooks/use-auth.svelte.d.ts +11 -0
- package/dist/hooks/use-auth.svelte.js +59 -0
- package/dist/hooks/use-chat.svelte.d.ts +40 -0
- package/dist/hooks/use-chat.svelte.js +265 -0
- package/dist/hooks/use-clipboard.svelte.d.ts +9 -0
- package/dist/hooks/use-clipboard.svelte.js +52 -0
- package/dist/hooks/use-fetch.svelte.d.ts +11 -0
- package/dist/hooks/use-fetch.svelte.js +38 -0
- package/dist/hooks/use-form.svelte.d.ts +31 -0
- package/dist/hooks/use-form.svelte.js +110 -0
- package/dist/hooks/use-localstorage.svelte.d.ts +3 -0
- package/dist/hooks/use-localstorage.svelte.js +26 -0
- package/dist/hooks/use-scroll.svelte.d.ts +6 -0
- package/dist/hooks/use-scroll.svelte.js +34 -0
- package/dist/hooks/use-search.svelte.d.ts +49 -0
- package/dist/hooks/use-search.svelte.js +229 -0
- package/dist/hooks/use-table.svelte.d.ts +85 -0
- package/dist/hooks/use-table.svelte.js +362 -0
- package/dist/hooks/use-websocket.svelte.d.ts +18 -0
- package/dist/hooks/use-websocket.svelte.js +79 -0
- package/dist/icons/index.d.ts +132 -0
- package/dist/icons/index.js +132 -0
- package/dist/index.css +115 -0
- package/dist/index.d.ts +76 -0
- package/dist/index.js +76 -0
- package/dist/layout/AppBar.svelte +94 -0
- package/dist/layout/AppBar.svelte.d.ts +17 -0
- package/dist/layout/Footer.svelte +94 -0
- package/dist/layout/Footer.svelte.d.ts +17 -0
- package/dist/layout/FooterLinks.svelte +28 -0
- package/dist/layout/FooterLinks.svelte.d.ts +11 -0
- package/dist/layout/Provider.svelte +52 -0
- package/dist/layout/Provider.svelte.d.ts +10 -0
- package/dist/layout/Scaffold.svelte +46 -0
- package/dist/layout/Scaffold.svelte.d.ts +15 -0
- package/dist/layout/Sidebar.svelte +40 -0
- package/dist/layout/Sidebar.svelte.d.ts +13 -0
- package/dist/layout/css/app-bar.css +35 -0
- package/dist/layout/css/bottom-bar.css +12 -0
- package/dist/layout/css/footer-links.css +17 -0
- package/dist/layout/css/footer.css +35 -0
- package/dist/layout/css/scaffold.css +15 -0
- package/dist/layout/css/sidebar.css +17 -0
- package/dist/navigation/BottomNav.svelte +0 -0
- package/dist/navigation/BottomNav.svelte.d.ts +26 -0
- package/dist/navigation/NavMenu.svelte +254 -0
- package/dist/navigation/SideNav.svelte +249 -0
- package/dist/navigation/Tabs.svelte +79 -0
- package/dist/navigation/Tabs.svelte.d.ts +19 -0
- package/dist/navigation/css/bottom-nav.css +0 -0
- package/dist/navigation/css/nav-menu.css +168 -0
- package/dist/navigation/css/side-nav.css +244 -0
- package/dist/navigation/css/tabs.css +118 -0
- package/dist/overlay/AlertDialog.svelte +0 -0
- package/dist/overlay/AlertDialog.svelte.d.ts +26 -0
- package/dist/overlay/Command.svelte +0 -0
- package/dist/overlay/Command.svelte.d.ts +26 -0
- package/dist/overlay/Drawer.svelte +129 -0
- package/dist/overlay/Drawer.svelte.d.ts +20 -0
- package/dist/overlay/Dropdown.svelte +140 -0
- package/dist/overlay/Modal.svelte +102 -0
- package/dist/overlay/Modal.svelte.d.ts +19 -0
- package/dist/overlay/PopoverStack.svelte +0 -0
- package/dist/overlay/PopoverStack.svelte.d.ts +26 -0
- package/dist/overlay/Toast.svelte +83 -0
- package/dist/overlay/Toast.svelte.d.ts +9 -0
- package/dist/overlay/Tooltip.svelte +140 -0
- package/dist/overlay/Tooltip.svelte.d.ts +12 -0
- package/dist/overlay/css/drawer.css +75 -0
- package/dist/overlay/css/dropdown.css +24 -0
- package/dist/overlay/css/hovercard.css +11 -0
- package/dist/overlay/css/modal.css +51 -0
- package/dist/overlay/css/toast.css +80 -0
- package/dist/overlay/css/tooltip.css +89 -0
- package/dist/stores/i18n.svelte.d.ts +16 -0
- package/dist/stores/i18n.svelte.js +137 -0
- package/dist/stores/theme.svelte.d.ts +5 -0
- package/dist/stores/theme.svelte.js +55 -0
- package/dist/stores/toast.svelte.d.ts +19 -0
- package/dist/stores/toast.svelte.js +38 -0
- package/dist/types.d.ts +75 -0
- package/dist/types.js +1 -0
- package/dist/utils/charts.d.ts +27 -0
- package/dist/utils/charts.js +140 -0
- package/dist/utils/class-names.d.ts +1 -0
- package/dist/utils/class-names.js +3 -0
- package/dist/utils/click-outside.d.ts +3 -0
- package/dist/utils/click-outside.js +9 -0
- package/dist/utils/popover.d.ts +3 -0
- package/dist/utils/popover.js +17 -0
- package/dist/utils/ulid.d.ts +1 -0
- package/dist/utils/ulid.js +22 -0
- package/dist/utils/validate-schema.d.ts +2 -0
- package/dist/utils/validate-schema.js +97 -0
- package/package.json +69 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
const REGEX_CACHE = {
|
|
2
|
+
email: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
|
3
|
+
url: /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)$/,
|
|
4
|
+
phone: /^[+]?[(]?[0-9]{1,4}[)]?[-\s.]?[(]?[0-9]{1,4}[)]?[-\s.]?[0-9]{1,9}$/,
|
|
5
|
+
alphanumeric: /^[a-zA-Z0-9]+$/,
|
|
6
|
+
numeric: /^[0-9]+$/,
|
|
7
|
+
alpha: /^[a-zA-Z]+$/,
|
|
8
|
+
creditCard: /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|(?:2131|1800|35\d{3})\d{11})$/,
|
|
9
|
+
date: /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/
|
|
10
|
+
};
|
|
11
|
+
const isStrongPassword = (password) => {
|
|
12
|
+
return (password.length >= 8 &&
|
|
13
|
+
/[a-z]/.test(password) &&
|
|
14
|
+
/[A-Z]/.test(password) &&
|
|
15
|
+
/[0-9]/.test(password) &&
|
|
16
|
+
/[^a-zA-Z0-9]/.test(password));
|
|
17
|
+
};
|
|
18
|
+
const countWords = (text) => {
|
|
19
|
+
return text
|
|
20
|
+
.trim()
|
|
21
|
+
.split(/\s+/)
|
|
22
|
+
.filter((word) => word.length > 0).length;
|
|
23
|
+
};
|
|
24
|
+
const extractNumber = (rule) => {
|
|
25
|
+
const match = rule.match(/:(\d+)$/);
|
|
26
|
+
return match ? parseInt(match[1], 10) : 0;
|
|
27
|
+
};
|
|
28
|
+
const extractValue = (rule) => {
|
|
29
|
+
const colonIndex = rule.indexOf(':');
|
|
30
|
+
return colonIndex !== -1 ? rule.slice(colonIndex + 1) : '';
|
|
31
|
+
};
|
|
32
|
+
export const validateSchema = (body, rules) => {
|
|
33
|
+
const errors = {};
|
|
34
|
+
for (const [field, fieldRules] of Object.entries(rules)) {
|
|
35
|
+
const value = body[field];
|
|
36
|
+
const strValue = value?.toString() ?? '';
|
|
37
|
+
for (const { rule, message } of fieldRules) {
|
|
38
|
+
let isInvalid = false;
|
|
39
|
+
if (rule === 'required') {
|
|
40
|
+
isInvalid = !value || strValue.trim() === '';
|
|
41
|
+
}
|
|
42
|
+
else if (rule === 'email' && value) {
|
|
43
|
+
isInvalid = !REGEX_CACHE.email.test(strValue);
|
|
44
|
+
}
|
|
45
|
+
else if (rule.startsWith('min:') && value) {
|
|
46
|
+
isInvalid = strValue.length < extractNumber(rule);
|
|
47
|
+
}
|
|
48
|
+
else if (rule.startsWith('max:') && value) {
|
|
49
|
+
isInvalid = strValue.length > extractNumber(rule);
|
|
50
|
+
}
|
|
51
|
+
else if (rule === 'url' && value) {
|
|
52
|
+
isInvalid = !REGEX_CACHE.url.test(strValue);
|
|
53
|
+
}
|
|
54
|
+
else if (rule === 'phone' && value) {
|
|
55
|
+
isInvalid = !REGEX_CACHE.phone.test(strValue);
|
|
56
|
+
}
|
|
57
|
+
else if (rule.startsWith('pattern:') && value) {
|
|
58
|
+
const pattern = extractValue(rule);
|
|
59
|
+
isInvalid = !new RegExp(pattern).test(strValue);
|
|
60
|
+
}
|
|
61
|
+
else if (rule === 'alphanumeric' && value) {
|
|
62
|
+
isInvalid = !REGEX_CACHE.alphanumeric.test(strValue);
|
|
63
|
+
}
|
|
64
|
+
else if (rule === 'numeric' && value) {
|
|
65
|
+
isInvalid = !REGEX_CACHE.numeric.test(strValue);
|
|
66
|
+
}
|
|
67
|
+
else if (rule === 'alpha' && value) {
|
|
68
|
+
isInvalid = !REGEX_CACHE.alpha.test(strValue);
|
|
69
|
+
}
|
|
70
|
+
else if (rule.startsWith('matches:') && value) {
|
|
71
|
+
const matchField = extractValue(rule);
|
|
72
|
+
isInvalid = strValue !== body[matchField]?.toString();
|
|
73
|
+
}
|
|
74
|
+
else if (rule === 'strongPassword' && value) {
|
|
75
|
+
isInvalid = !isStrongPassword(strValue);
|
|
76
|
+
}
|
|
77
|
+
else if (rule === 'creditCard' && value) {
|
|
78
|
+
const cleaned = strValue.replace(/\s/g, '');
|
|
79
|
+
isInvalid = !REGEX_CACHE.creditCard.test(cleaned);
|
|
80
|
+
}
|
|
81
|
+
else if (rule === 'date' && value) {
|
|
82
|
+
isInvalid = !REGEX_CACHE.date.test(strValue) || isNaN(Date.parse(strValue));
|
|
83
|
+
}
|
|
84
|
+
else if (rule.startsWith('minWords:') && value) {
|
|
85
|
+
isInvalid = countWords(strValue) < extractNumber(rule);
|
|
86
|
+
}
|
|
87
|
+
else if (rule.startsWith('maxWords:') && value) {
|
|
88
|
+
isInvalid = countWords(strValue) > extractNumber(rule);
|
|
89
|
+
}
|
|
90
|
+
if (isInvalid) {
|
|
91
|
+
errors[field] = message;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return errors;
|
|
97
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ui-svelte",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"author": {
|
|
5
|
+
"name": "SappsDev",
|
|
6
|
+
"email": "info@sappsdev.com"
|
|
7
|
+
},
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/sappsdev/sappsui_svelte.git"
|
|
11
|
+
},
|
|
12
|
+
"devDependencies": {
|
|
13
|
+
"@sveltejs/adapter-auto": "^6.1.0",
|
|
14
|
+
"@sveltejs/kit": "^2.43.2",
|
|
15
|
+
"@sveltejs/package": "^2.5.4",
|
|
16
|
+
"@sveltejs/vite-plugin-svelte": "^6.2.0",
|
|
17
|
+
"hls.js": "^1.6.15",
|
|
18
|
+
"prettier": "^3.6.2",
|
|
19
|
+
"prettier-plugin-svelte": "^3.4.0",
|
|
20
|
+
"publint": "^0.3.13",
|
|
21
|
+
"shiki": "^3.14.0",
|
|
22
|
+
"svelte": "^5.39.5",
|
|
23
|
+
"svelte-check": "^4.3.2",
|
|
24
|
+
"tailwindcss": "^4.1.14",
|
|
25
|
+
"typescript": "^5.9.2",
|
|
26
|
+
"vite": "^7.1.7"
|
|
27
|
+
},
|
|
28
|
+
"peerDependencies": {
|
|
29
|
+
"shiki": "^3.14.0",
|
|
30
|
+
"svelte": "^5.0.0"
|
|
31
|
+
},
|
|
32
|
+
"exports": {
|
|
33
|
+
".": {
|
|
34
|
+
"types": "./dist/index.d.ts",
|
|
35
|
+
"svelte": "./dist/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./types": "./dist/types.js",
|
|
38
|
+
"./css": "./dist/index.css"
|
|
39
|
+
},
|
|
40
|
+
"css": "./dist/index.css",
|
|
41
|
+
"files": [
|
|
42
|
+
"dist",
|
|
43
|
+
"!dist/**/*.test.*",
|
|
44
|
+
"!dist/**/*.spec.*"
|
|
45
|
+
],
|
|
46
|
+
"homepage": "https://svelte.sappsdev.com",
|
|
47
|
+
"keywords": [
|
|
48
|
+
"svelte"
|
|
49
|
+
],
|
|
50
|
+
"license": "./LICENSE",
|
|
51
|
+
"scripts": {
|
|
52
|
+
"dev": "vite dev",
|
|
53
|
+
"dist": "vite build && bun run prepack",
|
|
54
|
+
"release": "bun run dist && bun publish",
|
|
55
|
+
"preview": "vite preview",
|
|
56
|
+
"prepare": "svelte-kit sync || echo ''",
|
|
57
|
+
"prepack": "svelte-kit sync && svelte-package && publint",
|
|
58
|
+
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
|
59
|
+
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
|
60
|
+
"format": "prettier --write .",
|
|
61
|
+
"lint": "prettier --check ."
|
|
62
|
+
},
|
|
63
|
+
"sideEffects": [
|
|
64
|
+
"**/*.css"
|
|
65
|
+
],
|
|
66
|
+
"svelte": "./dist/index.js",
|
|
67
|
+
"type": "module",
|
|
68
|
+
"types": "./dist/index.d.ts"
|
|
69
|
+
}
|