@datability/8ui 0.1.69 → 1.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/.prettierrc +8 -0
- package/.vscode/extensions.json +6 -0
- package/README.md +66 -18
- package/declaration.d.ts +10 -0
- package/docker-compose.yml +20 -0
- package/eslint.config.js +23 -0
- package/index.html +13 -0
- package/package.json +37 -36
- package/public/vite.svg +1 -0
- package/src/App.tsx +370 -0
- package/src/components/blackdrop/index.tsx +18 -0
- package/src/components/blackdrop/index.type.ts +7 -0
- package/src/components/button/index.tsx +44 -0
- package/src/components/button/index.type.ts +13 -0
- package/src/components/chip/index.tsx +39 -0
- package/src/components/chip/index.type.ts +12 -0
- package/src/components/context.tsx +26 -0
- package/src/components/divider/index.tsx +13 -0
- package/src/components/index.ts +62 -0
- package/{dist/components/Input/InputAutoComplete → src/components/input/input-auto-complete}/index.scss +1 -1
- package/src/components/input/input-auto-complete/index.tsx +140 -0
- package/src/components/input/input-auto-complete/index.type.tsx +13 -0
- package/src/components/input/input-base/index.tsx +39 -0
- package/src/components/input/input-base/index.type.tsx +13 -0
- package/src/components/input/input-basic/index.tsx +47 -0
- package/src/components/input/input-basic/index.type.tsx +8 -0
- package/src/components/input/input-checkbox/index.tsx +69 -0
- package/src/components/input/input-checkbox/index.type.tsx +11 -0
- package/src/components/input/input-date/index.tsx +354 -0
- package/src/components/input/input-date/index.type.tsx +11 -0
- package/src/components/input/input-date-range/index.tsx +284 -0
- package/src/components/input/input-date-range/index.type.tsx +11 -0
- package/src/components/input/input-date-time/index.tsx +367 -0
- package/src/components/input/input-date-time/index.type.tsx +11 -0
- package/src/components/input/input-number/index.tsx +118 -0
- package/src/components/input/input-number/index.type.tsx +11 -0
- package/src/components/input/input-password/index.tsx +60 -0
- package/src/components/input/input-password/index.type.tsx +8 -0
- package/src/components/input/input-radio/index.tsx +72 -0
- package/src/components/input/input-radio/index.type.tsx +12 -0
- package/{dist/components/Input/InputSelect → src/components/input/input-select}/index.scss +1 -1
- package/src/components/input/input-select/index.tsx +113 -0
- package/src/components/input/input-select/index.type.tsx +15 -0
- package/{dist/components/InputNonContext/InputSwitch → src/components/input/input-switch}/index.scss +1 -1
- package/src/components/input/input-switch/index.tsx +44 -0
- package/src/components/input/input-switch/index.type.tsx +4 -0
- package/src/components/input/input-textarea/index.tsx +48 -0
- package/src/components/input/input-textarea/index.type.tsx +10 -0
- package/src/components/menu/index.tsx +136 -0
- package/src/components/menu/index.type.ts +8 -0
- package/{dist/components/Modal → src/components/modal}/index.scss +0 -0
- package/src/components/modal/index.tsx +99 -0
- package/src/components/modal/index.type.tsx +8 -0
- package/src/index.scss +44 -0
- package/src/index.ts +62 -0
- package/src/logoDownload.svg +3 -0
- package/src/main.tsx +9 -0
- package/tsconfig.app.json +28 -0
- package/tsconfig.json +42 -0
- package/tsconfig.node.json +29 -0
- package/vite.config.d.ts +2 -0
- package/vite.config.ts +35 -0
- package/dist/components/Blackdrop/index.d.ts +0 -5
- package/dist/components/Blackdrop/index.js +0 -11
- package/dist/components/Blackdrop/index.js.map +0 -1
- package/dist/components/Blackdrop/index.type.d.ts +0 -6
- package/dist/components/Blackdrop/index.type.js +0 -2
- package/dist/components/Blackdrop/index.type.js.map +0 -1
- package/dist/components/Button/index.d.ts +0 -5
- package/dist/components/Button/index.js +0 -16
- package/dist/components/Button/index.js.map +0 -1
- package/dist/components/Button/index.type.d.ts +0 -12
- package/dist/components/Button/index.type.js +0 -2
- package/dist/components/Button/index.type.js.map +0 -1
- package/dist/components/Chip/index.d.ts +0 -5
- package/dist/components/Chip/index.js +0 -18
- package/dist/components/Chip/index.js.map +0 -1
- package/dist/components/Chip/index.type.d.ts +0 -9
- package/dist/components/Chip/index.type.js +0 -2
- package/dist/components/Chip/index.type.js.map +0 -1
- package/dist/components/Divider/index.d.ts +0 -4
- package/dist/components/Divider/index.js +0 -10
- package/dist/components/Divider/index.js.map +0 -1
- package/dist/components/Input/InputAutoComplete/index.d.ts +0 -5
- package/dist/components/Input/InputAutoComplete/index.js +0 -68
- package/dist/components/Input/InputAutoComplete/index.js.map +0 -1
- package/dist/components/Input/InputAutoComplete/index.type.d.ts +0 -12
- package/dist/components/Input/InputAutoComplete/index.type.js +0 -2
- package/dist/components/Input/InputAutoComplete/index.type.js.map +0 -1
- package/dist/components/Input/InputBase/index.d.ts +0 -5
- package/dist/components/Input/InputBase/index.js +0 -23
- package/dist/components/Input/InputBase/index.js.map +0 -1
- package/dist/components/Input/InputBase/index.type.d.ts +0 -9
- package/dist/components/Input/InputBase/index.type.js +0 -2
- package/dist/components/Input/InputBase/index.type.js.map +0 -1
- package/dist/components/Input/InputBasic/index.d.ts +0 -5
- package/dist/components/Input/InputBasic/index.js +0 -16
- package/dist/components/Input/InputBasic/index.js.map +0 -1
- package/dist/components/Input/InputBasic/index.type.d.ts +0 -10
- package/dist/components/Input/InputBasic/index.type.js +0 -2
- package/dist/components/Input/InputBasic/index.type.js.map +0 -1
- package/dist/components/Input/InputCheckbox/index.d.ts +0 -5
- package/dist/components/Input/InputCheckbox/index.js +0 -19
- package/dist/components/Input/InputCheckbox/index.js.map +0 -1
- package/dist/components/Input/InputCheckbox/index.type.d.ts +0 -11
- package/dist/components/Input/InputCheckbox/index.type.js +0 -2
- package/dist/components/Input/InputCheckbox/index.type.js.map +0 -1
- package/dist/components/Input/InputDate/index.d.ts +0 -23
- package/dist/components/Input/InputDate/index.js +0 -190
- package/dist/components/Input/InputDate/index.js.map +0 -1
- package/dist/components/Input/InputDate/index.type.d.ts +0 -11
- package/dist/components/Input/InputDate/index.type.js +0 -2
- package/dist/components/Input/InputDate/index.type.js.map +0 -1
- package/dist/components/Input/InputDateRange/index.d.ts +0 -5
- package/dist/components/Input/InputDateRange/index.js +0 -137
- package/dist/components/Input/InputDateRange/index.js.map +0 -1
- package/dist/components/Input/InputDateRange/index.type.d.ts +0 -11
- package/dist/components/Input/InputDateRange/index.type.js +0 -2
- package/dist/components/Input/InputDateRange/index.type.js.map +0 -1
- package/dist/components/Input/InputDateTime/index.d.ts +0 -5
- package/dist/components/Input/InputDateTime/index.js +0 -185
- package/dist/components/Input/InputDateTime/index.js.map +0 -1
- package/dist/components/Input/InputDateTime/index.type.d.ts +0 -11
- package/dist/components/Input/InputDateTime/index.type.js +0 -2
- package/dist/components/Input/InputDateTime/index.type.js.map +0 -1
- package/dist/components/Input/InputNumber/index.d.ts +0 -5
- package/dist/components/Input/InputNumber/index.js +0 -78
- package/dist/components/Input/InputNumber/index.js.map +0 -1
- package/dist/components/Input/InputNumber/index.type.d.ts +0 -10
- package/dist/components/Input/InputNumber/index.type.js +0 -2
- package/dist/components/Input/InputNumber/index.type.js.map +0 -1
- package/dist/components/Input/InputPassword/index.d.ts +0 -5
- package/dist/components/Input/InputPassword/index.js +0 -21
- package/dist/components/Input/InputPassword/index.js.map +0 -1
- package/dist/components/Input/InputPassword/index.type.d.ts +0 -8
- package/dist/components/Input/InputPassword/index.type.js +0 -2
- package/dist/components/Input/InputPassword/index.type.js.map +0 -1
- package/dist/components/Input/InputRadio/index.d.ts +0 -5
- package/dist/components/Input/InputRadio/index.js +0 -31
- package/dist/components/Input/InputRadio/index.js.map +0 -1
- package/dist/components/Input/InputRadio/index.type.d.ts +0 -12
- package/dist/components/Input/InputRadio/index.type.js +0 -2
- package/dist/components/Input/InputRadio/index.type.js.map +0 -1
- package/dist/components/Input/InputSelect/index.d.ts +0 -5
- package/dist/components/Input/InputSelect/index.js +0 -45
- package/dist/components/Input/InputSelect/index.js.map +0 -1
- package/dist/components/Input/InputSelect/index.type.d.ts +0 -14
- package/dist/components/Input/InputSelect/index.type.js +0 -2
- package/dist/components/Input/InputSelect/index.type.js.map +0 -1
- package/dist/components/Input/InputTextarea/index.d.ts +0 -5
- package/dist/components/Input/InputTextarea/index.js +0 -16
- package/dist/components/Input/InputTextarea/index.js.map +0 -1
- package/dist/components/Input/InputTextarea/index.type.d.ts +0 -10
- package/dist/components/Input/InputTextarea/index.type.js +0 -2
- package/dist/components/Input/InputTextarea/index.type.js.map +0 -1
- package/dist/components/InputNonContext/InputSwitch/index.d.ts +0 -5
- package/dist/components/InputNonContext/InputSwitch/index.js +0 -19
- package/dist/components/InputNonContext/InputSwitch/index.js.map +0 -1
- package/dist/components/InputNonContext/InputSwitch/index.type.d.ts +0 -6
- package/dist/components/InputNonContext/InputSwitch/index.type.js +0 -2
- package/dist/components/InputNonContext/InputSwitch/index.type.js.map +0 -1
- package/dist/components/Menu/index.d.ts +0 -5
- package/dist/components/Menu/index.js +0 -103
- package/dist/components/Menu/index.js.map +0 -1
- package/dist/components/Menu/index.type.d.ts +0 -11
- package/dist/components/Menu/index.type.js +0 -2
- package/dist/components/Menu/index.type.js.map +0 -1
- package/dist/components/Modal/index.d.ts +0 -5
- package/dist/components/Modal/index.js +0 -83
- package/dist/components/Modal/index.js.map +0 -1
- package/dist/components/Modal/index.type.d.ts +0 -7
- package/dist/components/Modal/index.type.js +0 -2
- package/dist/components/Modal/index.type.js.map +0 -1
- package/dist/components/context.d.ts +0 -8
- package/dist/components/context.js +0 -12
- package/dist/components/context.js.map +0 -1
- package/dist/components/index.d.ts +0 -41
- package/dist/components/index.js +0 -21
- package/dist/components/index.js.map +0 -1
- /package/{dist → src}/components/assets/closed.svg +0 -0
- /package/{dist/components/assets/expandArrow.svg → src/components/assets/expand-arrow.svg} +0 -0
- /package/{dist/components/assets/visibilityOff.svg → src/components/assets/visibility-off.svg} +0 -0
- /package/{dist → src}/components/assets/visibility.svg +0 -0
- /package/{dist/components/Blackdrop → src/components/blackdrop}/index.scss +0 -0
- /package/{dist/components/Button → src/components/button}/index.scss +0 -0
- /package/{dist/components/Chip → src/components/chip}/index.scss +0 -0
- /package/{dist/components/Divider → src/components/divider}/index.scss +0 -0
- /package/{dist/components/Input → src/components/input}/extend.scss +0 -0
- /package/{dist/components/Input/InputBase → src/components/input/input-base}/index.scss +0 -0
- /package/{dist/components/Input/InputBasic → src/components/input/input-basic}/index.scss +0 -0
- /package/{dist/components/Input/InputCheckbox → src/components/input/input-checkbox}/index.scss +0 -0
- /package/{dist/components/Input/InputDate → src/components/input/input-date}/index.scss +0 -0
- /package/{dist/components/Input/InputDateRange → src/components/input/input-date-range}/index.scss +0 -0
- /package/{dist/components/Input/InputDateTime → src/components/input/input-date-time}/index.scss +0 -0
- /package/{dist/components/Input/InputNumber → src/components/input/input-number}/index.scss +0 -0
- /package/{dist/components/Input/InputPassword → src/components/input/input-password}/index.scss +0 -0
- /package/{dist/components/Input/InputRadio → src/components/input/input-radio}/index.scss +0 -0
- /package/{dist/components/Input/InputTextarea → src/components/input/input-textarea}/index.scss +0 -0
- /package/{dist/components/Menu → src/components/menu}/index.scss +0 -0
package/.prettierrc
ADDED
package/README.md
CHANGED
|
@@ -1,25 +1,73 @@
|
|
|
1
|
-
|
|
2
|
-
<div align="center">
|
|
3
|
-
<img src="https://s3.ap-southeast-1.amazonaws.com/datability.info/logo-datability.svg" alt="Logo" width="350">
|
|
4
|
-
<br />
|
|
5
|
-
<br />
|
|
6
|
-
<h1>Datability UI</h1>
|
|
7
|
-
</div>
|
|
1
|
+
# React + TypeScript + Vite
|
|
8
2
|
|
|
9
|
-
|
|
3
|
+
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
|
|
10
4
|
|
|
11
|
-
|
|
5
|
+
Currently, two official plugins are available:
|
|
12
6
|
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[](https://www.npmjs.com/package/@datability/8ui)
|
|
7
|
+
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh
|
|
8
|
+
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
|
|
16
9
|
|
|
17
|
-
|
|
10
|
+
## React Compiler
|
|
18
11
|
|
|
19
|
-
|
|
20
|
-
...
|
|
12
|
+
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
|
|
21
13
|
|
|
22
|
-
|
|
23
|
-
...
|
|
14
|
+
## Expanding the ESLint configuration
|
|
24
15
|
|
|
25
|
-
|
|
16
|
+
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
|
|
17
|
+
|
|
18
|
+
```js
|
|
19
|
+
export default defineConfig([
|
|
20
|
+
globalIgnores(['dist']),
|
|
21
|
+
{
|
|
22
|
+
files: ['**/*.{ts,tsx}'],
|
|
23
|
+
extends: [
|
|
24
|
+
// Other configs...
|
|
25
|
+
|
|
26
|
+
// Remove tseslint.configs.recommended and replace with this
|
|
27
|
+
tseslint.configs.recommendedTypeChecked,
|
|
28
|
+
// Alternatively, use this for stricter rules
|
|
29
|
+
tseslint.configs.strictTypeChecked,
|
|
30
|
+
// Optionally, add this for stylistic rules
|
|
31
|
+
tseslint.configs.stylisticTypeChecked,
|
|
32
|
+
|
|
33
|
+
// Other configs...
|
|
34
|
+
],
|
|
35
|
+
languageOptions: {
|
|
36
|
+
parserOptions: {
|
|
37
|
+
project: ['./tsconfig.node.json', './tsconfig.app.json'],
|
|
38
|
+
tsconfigRootDir: import.meta.dirname,
|
|
39
|
+
},
|
|
40
|
+
// other options...
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
])
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
|
|
47
|
+
|
|
48
|
+
```js
|
|
49
|
+
// eslint.config.js
|
|
50
|
+
import reactX from 'eslint-plugin-react-x'
|
|
51
|
+
import reactDom from 'eslint-plugin-react-dom'
|
|
52
|
+
|
|
53
|
+
export default defineConfig([
|
|
54
|
+
globalIgnores(['dist']),
|
|
55
|
+
{
|
|
56
|
+
files: ['**/*.{ts,tsx}'],
|
|
57
|
+
extends: [
|
|
58
|
+
// Other configs...
|
|
59
|
+
// Enable lint rules for React
|
|
60
|
+
reactX.configs['recommended-typescript'],
|
|
61
|
+
// Enable lint rules for React DOM
|
|
62
|
+
reactDom.configs.recommended,
|
|
63
|
+
],
|
|
64
|
+
languageOptions: {
|
|
65
|
+
parserOptions: {
|
|
66
|
+
project: ['./tsconfig.node.json', './tsconfig.app.json'],
|
|
67
|
+
tsconfigRootDir: import.meta.dirname,
|
|
68
|
+
},
|
|
69
|
+
// other options...
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
])
|
|
73
|
+
```
|
package/declaration.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
services:
|
|
2
|
+
frontend:
|
|
3
|
+
container_name: npm-fe
|
|
4
|
+
image: node:20
|
|
5
|
+
volumes:
|
|
6
|
+
- .:/workdir
|
|
7
|
+
working_dir: /workdir
|
|
8
|
+
ports:
|
|
9
|
+
- 4000:3000
|
|
10
|
+
# command: >
|
|
11
|
+
# bash -c "
|
|
12
|
+
# npm install &&
|
|
13
|
+
# npm run dev
|
|
14
|
+
# "
|
|
15
|
+
command: >
|
|
16
|
+
bash -c "
|
|
17
|
+
npm install &&
|
|
18
|
+
npm run build &&
|
|
19
|
+
npm run preview
|
|
20
|
+
"
|
package/eslint.config.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import js from '@eslint/js'
|
|
2
|
+
import globals from 'globals'
|
|
3
|
+
import reactHooks from 'eslint-plugin-react-hooks'
|
|
4
|
+
import reactRefresh from 'eslint-plugin-react-refresh'
|
|
5
|
+
import tseslint from 'typescript-eslint'
|
|
6
|
+
import { defineConfig, globalIgnores } from 'eslint/config'
|
|
7
|
+
|
|
8
|
+
export default defineConfig([
|
|
9
|
+
globalIgnores(['dist']),
|
|
10
|
+
{
|
|
11
|
+
files: ['**/*.{ts,tsx}'],
|
|
12
|
+
extends: [
|
|
13
|
+
js.configs.recommended,
|
|
14
|
+
tseslint.configs.recommended,
|
|
15
|
+
reactHooks.configs.flat.recommended,
|
|
16
|
+
reactRefresh.configs.vite,
|
|
17
|
+
],
|
|
18
|
+
languageOptions: {
|
|
19
|
+
ecmaVersion: 2020,
|
|
20
|
+
globals: globals.browser,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
])
|
package/index.html
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
<title>8ui</title>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div id="root"></div>
|
|
11
|
+
<script type="module" src="/src/main.tsx"></script>
|
|
12
|
+
</body>
|
|
13
|
+
</html>
|
package/package.json
CHANGED
|
@@ -1,46 +1,47 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@datability/8ui",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": {
|
|
7
|
+
"types": "./dist/types/index.d.ts",
|
|
8
|
+
"import": "./dist/index.es.js",
|
|
9
|
+
"require": "./dist/index.umd.js"
|
|
10
|
+
},
|
|
11
|
+
"./dist/index.css": "./dist/index.css",
|
|
12
|
+
"./style.css": "./dist/index.css"
|
|
13
|
+
},
|
|
10
14
|
"scripts": {
|
|
11
|
-
"
|
|
15
|
+
"dev": "vite",
|
|
16
|
+
"build": "vite build && npm run cp-scss && npm run cp-scss-2 && npm run cp-svg",
|
|
17
|
+
"lint": "eslint .",
|
|
18
|
+
"preview": "vite preview",
|
|
12
19
|
"cp-svg": "copyfiles -u 1 src/components/**/*.svg dist/",
|
|
13
20
|
"cp-scss": "copyfiles -u 1 src/components/**/*.scss dist/",
|
|
14
|
-
"cp-scss-2": "copyfiles -u 1 src/components/**/**/*.scss dist/"
|
|
15
|
-
"build": "rm -rf dist/ && tsc && npm run cp-scss && npm run cp-scss-2 && npm run cp-svg"
|
|
21
|
+
"cp-scss-2": "copyfiles -u 1 src/components/**/**/*.scss dist/"
|
|
16
22
|
},
|
|
17
|
-
"
|
|
18
|
-
"/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"prettier": "^3.2.5",
|
|
24
|
-
"react-scripts": "^5.0.1",
|
|
25
|
-
"sass": "^1.77.0",
|
|
26
|
-
"sass-loader": "^14.2.1"
|
|
23
|
+
"peerDependencies": {
|
|
24
|
+
"@hookform/resolvers": "^5.2.2",
|
|
25
|
+
"react": "^19.2.0",
|
|
26
|
+
"react-dom": "^19.2.0",
|
|
27
|
+
"react-hook-form": "^7.71.1",
|
|
28
|
+
"zod": "^4.3.6"
|
|
27
29
|
},
|
|
28
30
|
"devDependencies": {
|
|
29
|
-
"@
|
|
30
|
-
"@types/
|
|
31
|
-
"react": "^
|
|
32
|
-
"react-dom": "^
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
]
|
|
31
|
+
"@eslint/js": "^9.39.1",
|
|
32
|
+
"@types/node": "^24.10.1",
|
|
33
|
+
"@types/react": "^19.2.5",
|
|
34
|
+
"@types/react-dom": "^19.2.3",
|
|
35
|
+
"@vitejs/plugin-react": "^5.1.1",
|
|
36
|
+
"copyfiles": "^2.4.1",
|
|
37
|
+
"eslint": "^9.39.1",
|
|
38
|
+
"eslint-plugin-react-hooks": "^7.0.1",
|
|
39
|
+
"eslint-plugin-react-refresh": "^0.4.24",
|
|
40
|
+
"globals": "^16.5.0",
|
|
41
|
+
"sass": "^1.97.3",
|
|
42
|
+
"typescript": "~5.9.3",
|
|
43
|
+
"typescript-eslint": "^8.46.4",
|
|
44
|
+
"vite": "^7.2.4",
|
|
45
|
+
"vite-plugin-dts": "^4.5.4"
|
|
45
46
|
}
|
|
46
47
|
}
|
package/public/vite.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
package/src/App.tsx
ADDED
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
import { useState } from "react"
|
|
2
|
+
import {
|
|
3
|
+
Blackdrop,
|
|
4
|
+
Button,
|
|
5
|
+
Chip,
|
|
6
|
+
Divider,
|
|
7
|
+
Input,
|
|
8
|
+
InputNumber,
|
|
9
|
+
InputAutoComplete,
|
|
10
|
+
InputCheckbox,
|
|
11
|
+
InputPassword,
|
|
12
|
+
InputRadio,
|
|
13
|
+
InputSelect,
|
|
14
|
+
InputTextarea,
|
|
15
|
+
InputSwitch,
|
|
16
|
+
Menu,
|
|
17
|
+
Modal,
|
|
18
|
+
InputDate,
|
|
19
|
+
InputDateTime,
|
|
20
|
+
InputDateRange,
|
|
21
|
+
} from "./index"
|
|
22
|
+
import { DBuiProvider } from "./components/context"
|
|
23
|
+
import "./index.scss"
|
|
24
|
+
import LogoSVG from "./logoDownload.svg"
|
|
25
|
+
import { FormProvider, useForm } from "react-hook-form"
|
|
26
|
+
import z from "zod"
|
|
27
|
+
import { zodResolver } from "@hookform/resolvers/zod"
|
|
28
|
+
|
|
29
|
+
function App() {
|
|
30
|
+
const [isOpenBlackDrop, setIsOpenBackDrop] = useState(false)
|
|
31
|
+
const [isOpenModal, setIsOpenModal] = useState(false)
|
|
32
|
+
const [isLoading, setIsLoading] = useState(false)
|
|
33
|
+
|
|
34
|
+
const schema = z.object({
|
|
35
|
+
input: z.string().min(1, "too short"),
|
|
36
|
+
inputNumber: z.number().min(0, "not enough").max(2000, "too much"),
|
|
37
|
+
inputPhoneNumber: z.string().min(10, "too short").max(10, "too long"),
|
|
38
|
+
inputNumberMinus: z.number().min(-2000, "not enough").max(0, "too much"),
|
|
39
|
+
inputCheckbox: z.array(z.string()).min(1, "Please select at least one option"),
|
|
40
|
+
inputPassword: z.string().min(1, "Please enter"),
|
|
41
|
+
inputRadio: z.string().min(1, "Please enter"),
|
|
42
|
+
inputTextarea: z.string().min(1, "Please enter"),
|
|
43
|
+
inputSwitch: z.string(),
|
|
44
|
+
inputSelect: z.string().min(1, "Please select"),
|
|
45
|
+
inputAutoComplete: z.array(z.string()).min(1, "Please select").max(1),
|
|
46
|
+
inputAutoCompleteMultiple: z.array(z.string()).min(1, "Please select"),
|
|
47
|
+
inputDate: z.string().min(1, "Please enter"),
|
|
48
|
+
inputDateRange: z.array(z.string()).min(2, "Please select"),
|
|
49
|
+
inputDateTime: z.string().min(1, "Please enter"),
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
type FormValues = z.infer<typeof schema>
|
|
53
|
+
const methods = useForm<FormValues>({
|
|
54
|
+
defaultValues: {
|
|
55
|
+
input: "",
|
|
56
|
+
inputNumber: 0,
|
|
57
|
+
inputPhoneNumber: "",
|
|
58
|
+
inputNumberMinus: -0,
|
|
59
|
+
inputCheckbox: [],
|
|
60
|
+
inputPassword: "",
|
|
61
|
+
inputRadio: "",
|
|
62
|
+
inputTextarea: "",
|
|
63
|
+
inputSwitch: "",
|
|
64
|
+
inputSelect: "",
|
|
65
|
+
inputAutoComplete: [],
|
|
66
|
+
inputAutoCompleteMultiple: [],
|
|
67
|
+
inputDate: "",
|
|
68
|
+
inputDateRange: ["", ""], // ['2025-01-01', "2025-01-02"]
|
|
69
|
+
inputDateTime: "", // '2025-01-01T00:00',
|
|
70
|
+
},
|
|
71
|
+
mode: "onSubmit",
|
|
72
|
+
resolver: zodResolver(schema),
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
const onSubmit = (data: FormValues) => {
|
|
76
|
+
console.log("Submit", data)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return (
|
|
80
|
+
<DBuiProvider>
|
|
81
|
+
<FormProvider {...methods}>
|
|
82
|
+
<form onSubmit={methods.handleSubmit(onSubmit)}>
|
|
83
|
+
<div className="column">
|
|
84
|
+
<div className="column align-center">
|
|
85
|
+
<h1>Button</h1>
|
|
86
|
+
<div className="row gap-sm">
|
|
87
|
+
<Button name="Button" type="submit" />
|
|
88
|
+
<Button name="Button" disabled />
|
|
89
|
+
<Button name="Button" endIcon={LogoSVG} />
|
|
90
|
+
<Button
|
|
91
|
+
name="Asyc Action"
|
|
92
|
+
isLoading={isLoading}
|
|
93
|
+
onClick={() => {
|
|
94
|
+
console.log("!Click")
|
|
95
|
+
setIsLoading(true)
|
|
96
|
+
setTimeout(() => {
|
|
97
|
+
setIsLoading(false)
|
|
98
|
+
}, 2000)
|
|
99
|
+
}}
|
|
100
|
+
/>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<br />
|
|
105
|
+
<Divider />
|
|
106
|
+
|
|
107
|
+
<div className="column align-center">
|
|
108
|
+
<h1>Divider</h1>
|
|
109
|
+
<div className="row gap-sm">
|
|
110
|
+
<Divider />
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
<br />
|
|
115
|
+
<Divider />
|
|
116
|
+
|
|
117
|
+
<div className="column align-center">
|
|
118
|
+
<h1>Blackdrop</h1>
|
|
119
|
+
<div className="row gap-sm">
|
|
120
|
+
<Button name="Open" onClick={() => setIsOpenBackDrop(true)} />
|
|
121
|
+
<Blackdrop open={isOpenBlackDrop} onClose={() => setIsOpenBackDrop(false)}>
|
|
122
|
+
<Button name="Close" onClick={() => setIsOpenBackDrop(false)} />
|
|
123
|
+
<Button
|
|
124
|
+
name="TEST print console"
|
|
125
|
+
onClick={(e) => {
|
|
126
|
+
e.stopPropagation()
|
|
127
|
+
console.log("TEST")
|
|
128
|
+
}}
|
|
129
|
+
/>
|
|
130
|
+
</Blackdrop>
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
|
|
134
|
+
<br />
|
|
135
|
+
<Divider />
|
|
136
|
+
|
|
137
|
+
<div className="column align-center">
|
|
138
|
+
<h1>Chip</h1>
|
|
139
|
+
<div className="row gap-sm">
|
|
140
|
+
<Chip label="Chip" />
|
|
141
|
+
<Chip label="Chip" icon={LogoSVG} />
|
|
142
|
+
<Chip label="Chip" onDelete={() => console.log("delete")} />
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<br />
|
|
147
|
+
<Divider />
|
|
148
|
+
|
|
149
|
+
<div className="column align-center">
|
|
150
|
+
<h1>Input</h1>
|
|
151
|
+
<div className="row gap-sm">
|
|
152
|
+
<Input name="input" label="Input" placeholder="placeholder" require />
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
155
|
+
|
|
156
|
+
<div className="column align-center">
|
|
157
|
+
<h1>Input Number</h1>
|
|
158
|
+
<div className="row gap-sm">
|
|
159
|
+
<InputNumber require name="inputNumber" label="Input Number" placeholder="placeholder" />
|
|
160
|
+
<InputNumber
|
|
161
|
+
require
|
|
162
|
+
name="inputPhoneNumber"
|
|
163
|
+
label="Input Phone Number"
|
|
164
|
+
placeholder="placeholder"
|
|
165
|
+
isPhoneNumber
|
|
166
|
+
/>
|
|
167
|
+
<InputNumber
|
|
168
|
+
require
|
|
169
|
+
name="inputNumberMinus"
|
|
170
|
+
label="Input Phone Number"
|
|
171
|
+
placeholder="placeholder"
|
|
172
|
+
isAvailableMinus
|
|
173
|
+
/>
|
|
174
|
+
</div>
|
|
175
|
+
</div>
|
|
176
|
+
|
|
177
|
+
<div className="column align-center">
|
|
178
|
+
<h1>Input Checkbox</h1>
|
|
179
|
+
<div className="row gap-sm">
|
|
180
|
+
<InputCheckbox
|
|
181
|
+
require
|
|
182
|
+
name="inputCheckbox"
|
|
183
|
+
label="Input Checkbox"
|
|
184
|
+
options={[
|
|
185
|
+
{ label: "Mac", value: "mac" },
|
|
186
|
+
{ label: "Win", value: "win" },
|
|
187
|
+
]}
|
|
188
|
+
/>
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
|
|
192
|
+
<div className="column align-center">
|
|
193
|
+
<h1>Input Password</h1>
|
|
194
|
+
<div className="row gap-sm">
|
|
195
|
+
<InputPassword name="inputPassword" label="Input Password" require />
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
|
|
199
|
+
<div className="column align-center">
|
|
200
|
+
<h1>Input Radio</h1>
|
|
201
|
+
<div className="row gap-sm">
|
|
202
|
+
<InputRadio
|
|
203
|
+
name="inputRadio"
|
|
204
|
+
label="Input Password"
|
|
205
|
+
options={[
|
|
206
|
+
{
|
|
207
|
+
label: "Mac",
|
|
208
|
+
value: "mac",
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
label: "Win",
|
|
212
|
+
value: "win",
|
|
213
|
+
},
|
|
214
|
+
]}
|
|
215
|
+
require
|
|
216
|
+
/>
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
219
|
+
|
|
220
|
+
<div className="column align-center">
|
|
221
|
+
<h1>Input Textarea</h1>
|
|
222
|
+
<div className="row gap-sm">
|
|
223
|
+
<InputTextarea name="inputTextarea" label="Input Textarea" require />
|
|
224
|
+
</div>
|
|
225
|
+
</div>
|
|
226
|
+
|
|
227
|
+
<div className="column align-center">
|
|
228
|
+
<h1>Input Switch</h1>
|
|
229
|
+
<div className="row gap-sm">
|
|
230
|
+
<InputSwitch name="inputSwitch" />
|
|
231
|
+
</div>
|
|
232
|
+
</div>
|
|
233
|
+
|
|
234
|
+
<div className="column align-center">
|
|
235
|
+
<h1>Input Select</h1>
|
|
236
|
+
<div className="row gap-sm">
|
|
237
|
+
<InputSelect
|
|
238
|
+
placeholder="placeholder"
|
|
239
|
+
name="inputSelect"
|
|
240
|
+
label="Input Select"
|
|
241
|
+
require
|
|
242
|
+
options={[
|
|
243
|
+
{
|
|
244
|
+
label: "Mac",
|
|
245
|
+
value: "MAC",
|
|
246
|
+
},
|
|
247
|
+
{ label: "Win", value: "WIN" },
|
|
248
|
+
]}
|
|
249
|
+
/>
|
|
250
|
+
</div>
|
|
251
|
+
</div>
|
|
252
|
+
|
|
253
|
+
<div className="column align-center">
|
|
254
|
+
<h1>Input AutoComplete</h1>
|
|
255
|
+
<div className="row gap-sm">
|
|
256
|
+
<InputAutoComplete
|
|
257
|
+
name="inputAutoComplete"
|
|
258
|
+
label="Input AutoComplete"
|
|
259
|
+
require
|
|
260
|
+
options={[
|
|
261
|
+
{ label: "Mac", value: "MAC" },
|
|
262
|
+
{ label: "Win", value: "WIN" },
|
|
263
|
+
]}
|
|
264
|
+
/>
|
|
265
|
+
<InputAutoComplete
|
|
266
|
+
name="inputAutoCompleteMultiple"
|
|
267
|
+
label="Input AutoComplete Multiple"
|
|
268
|
+
require
|
|
269
|
+
options={[
|
|
270
|
+
{ label: "Mac", value: "MAC" },
|
|
271
|
+
{ label: "Win", value: "WIN" },
|
|
272
|
+
]}
|
|
273
|
+
isMultiple
|
|
274
|
+
/>
|
|
275
|
+
</div>
|
|
276
|
+
</div>
|
|
277
|
+
|
|
278
|
+
<div className="column align-center">
|
|
279
|
+
<h1>Input Date</h1>
|
|
280
|
+
<div className="row gap-sm">
|
|
281
|
+
<InputDate name="inputDate" label="Input Date" disabled isHideClearIcon={false} />
|
|
282
|
+
<InputDate name="inputDate" label="Input Date" require isHideClearIcon={false} />
|
|
283
|
+
<InputDate name="inputDate" label="Input Date" placeholder="placeholder" isHideClearIcon={false} />
|
|
284
|
+
<InputDate
|
|
285
|
+
name="inputDate"
|
|
286
|
+
label="Input Date"
|
|
287
|
+
fullWidth
|
|
288
|
+
isHideClearIcon={false}
|
|
289
|
+
minYear={2560}
|
|
290
|
+
maxYear={2570}
|
|
291
|
+
/>
|
|
292
|
+
</div>
|
|
293
|
+
</div>
|
|
294
|
+
|
|
295
|
+
<div className="column align-center">
|
|
296
|
+
<h1>Input Date Range</h1>
|
|
297
|
+
<div className="row gap-sm">
|
|
298
|
+
<InputDateRange name="inputDateRange" label="Input Date Range" fullWidth isHideClearIcon={false} />
|
|
299
|
+
</div>
|
|
300
|
+
</div>
|
|
301
|
+
|
|
302
|
+
<div className="column align-center">
|
|
303
|
+
<h1>Input Date Time</h1>
|
|
304
|
+
<div className="row gap-sm">
|
|
305
|
+
<InputDateTime name="inputDateTime" label="Input Date Time" disabled />
|
|
306
|
+
<InputDateTime name="inputDateTime" label="Input Date Time" require />
|
|
307
|
+
<InputDateTime name="inputDateTime" label="Input Date Time" placeholder="placeholder" />
|
|
308
|
+
<InputDateTime name="inputDateTime" label="Input Date Time" fullWidth isHideClearIcon={false} />
|
|
309
|
+
</div>
|
|
310
|
+
</div>
|
|
311
|
+
|
|
312
|
+
<br />
|
|
313
|
+
<Divider />
|
|
314
|
+
|
|
315
|
+
<div className="column align-center">
|
|
316
|
+
<h1>Menu</h1>
|
|
317
|
+
<div className="row gap-sm">
|
|
318
|
+
<Menu trigger={() => <Button name="Click" />}>
|
|
319
|
+
{({ close }) =>
|
|
320
|
+
[
|
|
321
|
+
{
|
|
322
|
+
label:
|
|
323
|
+
"ExportExportExportExportExportExportExportExportExportExportExportExportExportExportExportExportExportExportExportExportExportExport",
|
|
324
|
+
onClick: () => {
|
|
325
|
+
console.log("Click Export!")
|
|
326
|
+
close()
|
|
327
|
+
},
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
label: "Export",
|
|
331
|
+
onClick: () => {
|
|
332
|
+
console.log("Click Export!")
|
|
333
|
+
close()
|
|
334
|
+
},
|
|
335
|
+
},
|
|
336
|
+
].map((data, index) => {
|
|
337
|
+
return (
|
|
338
|
+
<p key={index} onClick={() => data.onClick()}>
|
|
339
|
+
{data.label}
|
|
340
|
+
</p>
|
|
341
|
+
)
|
|
342
|
+
})
|
|
343
|
+
}
|
|
344
|
+
</Menu>
|
|
345
|
+
</div>
|
|
346
|
+
</div>
|
|
347
|
+
|
|
348
|
+
<br />
|
|
349
|
+
<Divider />
|
|
350
|
+
|
|
351
|
+
<div className="column align-center">
|
|
352
|
+
<h1>Modal</h1>
|
|
353
|
+
<div className="row gap-sm">
|
|
354
|
+
<Button name="Open" onClick={() => setIsOpenModal(true)} />
|
|
355
|
+
<Modal id="modalTest" open={isOpenModal} onClose={() => setIsOpenModal(false)}>
|
|
356
|
+
<div>
|
|
357
|
+
<h4>Modal Parent</h4>
|
|
358
|
+
<p>Description</p>
|
|
359
|
+
</div>
|
|
360
|
+
</Modal>
|
|
361
|
+
</div>
|
|
362
|
+
</div>
|
|
363
|
+
</div>
|
|
364
|
+
</form>
|
|
365
|
+
</FormProvider>
|
|
366
|
+
</DBuiProvider>
|
|
367
|
+
)
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
export default App
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Lib
|
|
2
|
+
import React, { type JSX } from "react"
|
|
3
|
+
|
|
4
|
+
// Images
|
|
5
|
+
|
|
6
|
+
// Include in project
|
|
7
|
+
import "./index.scss"
|
|
8
|
+
import type { PropsBlackdrop } from "./index.type"
|
|
9
|
+
|
|
10
|
+
const Blackdrop: React.FC<PropsBlackdrop> = ({ children, open, onClose }): JSX.Element => {
|
|
11
|
+
return (
|
|
12
|
+
<div className="DBui-blackdrop" data-hidden={!open} onClick={onClose}>
|
|
13
|
+
{children}
|
|
14
|
+
</div>
|
|
15
|
+
)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export default Blackdrop
|