wini-web-components 2.8.2 → 2.8.4

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 (65) hide show
  1. package/package.json +6 -2
  2. package/src/component/button/button.module.css +210 -0
  3. package/src/component/button/button.tsx +57 -0
  4. package/src/component/calendar/calendar.module.css +153 -0
  5. package/src/component/calendar/calendar.tsx +389 -0
  6. package/src/component/carousel/carousel.css +622 -0
  7. package/src/component/carousel/carousel.tsx +91 -0
  8. package/src/component/checkbox/checkbox.module.css +48 -0
  9. package/src/component/checkbox/checkbox.tsx +80 -0
  10. package/src/component/ck-editor/ck-editor.css +206 -0
  11. package/src/component/ck-editor/ckeditor.tsx +522 -0
  12. package/src/component/component-status.tsx +53 -0
  13. package/src/component/date-time-picker/date-time-picker.module.css +94 -0
  14. package/src/component/date-time-picker/date-time-picker.tsx +663 -0
  15. package/src/component/dialog/dialog.module.css +111 -0
  16. package/src/component/dialog/dialog.tsx +109 -0
  17. package/src/component/import-file/import-file.module.css +83 -0
  18. package/src/component/import-file/import-file.tsx +174 -0
  19. package/src/component/infinite-scroll/infinite-scroll.module.css +34 -0
  20. package/src/component/infinite-scroll/infinite-scroll.tsx +35 -0
  21. package/src/component/input-multi-select/input-multi-select.module.css +121 -0
  22. package/src/component/input-multi-select/input-multi-select.tsx +263 -0
  23. package/src/component/input-otp/input-otp.module.css +41 -0
  24. package/src/component/input-otp/input-otp.tsx +110 -0
  25. package/src/component/number-picker/number-picker.module.css +137 -0
  26. package/src/component/number-picker/number-picker.tsx +107 -0
  27. package/src/component/pagination/pagination.module.css +48 -0
  28. package/src/component/pagination/pagination.tsx +88 -0
  29. package/src/component/popup/popup.css +136 -0
  30. package/src/component/popup/popup.tsx +125 -0
  31. package/src/component/progress-bar/progress-bar.module.css +42 -0
  32. package/src/component/progress-bar/progress-bar.tsx +33 -0
  33. package/src/component/progress-circle/progress-circle.css +0 -0
  34. package/src/component/progress-circle/progress-circle.tsx +25 -0
  35. package/src/component/radio-button/radio-button.module.css +51 -0
  36. package/src/component/radio-button/radio-button.tsx +60 -0
  37. package/src/component/rating/rating.module.css +11 -0
  38. package/src/component/rating/rating.tsx +65 -0
  39. package/src/component/select1/select1.module.css +108 -0
  40. package/src/component/select1/select1.tsx +271 -0
  41. package/src/component/switch/switch.module.css +53 -0
  42. package/src/component/switch/switch.tsx +68 -0
  43. package/src/component/table/table.css +74 -0
  44. package/src/component/table/table.tsx +108 -0
  45. package/src/component/tag/tag.module.css +108 -0
  46. package/src/component/tag/tag.tsx +31 -0
  47. package/src/component/text/text.css +27 -0
  48. package/src/component/text/text.tsx +24 -0
  49. package/src/component/text-area/text-area.module.css +57 -0
  50. package/src/component/text-area/text-area.tsx +65 -0
  51. package/src/component/text-field/text-field.module.css +71 -0
  52. package/src/component/text-field/text-field.tsx +102 -0
  53. package/src/component/toast-noti/toast-noti.css +866 -0
  54. package/src/component/toast-noti/toast-noti.tsx +22 -0
  55. package/src/component/wini-icon/winicon.module.css +110 -0
  56. package/src/component/wini-icon/winicon.tsx +9424 -0
  57. package/src/form/login/view.module.css +80 -0
  58. package/src/form/login/view.tsx +138 -0
  59. package/src/global.d.ts +5 -0
  60. package/src/index.tsx +66 -0
  61. package/src/language/i18n.tsx +143 -0
  62. package/src/skin/layout.css +649 -0
  63. package/src/skin/root.css +294 -0
  64. package/src/skin/typography.css +314 -0
  65. package/src/vite-env.d.ts +1 -0
package/package.json CHANGED
@@ -1,11 +1,14 @@
1
1
  {
2
2
  "name": "wini-web-components",
3
- "version": "2.8.2",
3
+ "version": "2.8.4",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.esm.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "files": [
8
- "dist"
8
+ "dist",
9
+ "src",
10
+ "styles",
11
+ "*.css"
9
12
  ],
10
13
  "scripts": {
11
14
  "build": "tsc && vite build",
@@ -38,6 +41,7 @@
38
41
  "globals": "^15.15.0",
39
42
  "path": "^0.12.7",
40
43
  "sass": "^1.85.1",
44
+ "tsup": "^8.4.0",
41
45
  "typescript": "^5.8.2",
42
46
  "typescript-eslint": "^8.24.1",
43
47
  "url": "^0.11.4",
@@ -0,0 +1,210 @@
1
+ .button-container {
2
+ padding: 0.4rem 1.2rem;
3
+ border-radius: 0.8rem;
4
+ gap: 0.8rem;
5
+ justify-content: center;
6
+ color: var(--neutral-text-subtitle-color, #61616B);
7
+ width: fit-content;
8
+ border: 1px solid transparent;
9
+ outline: none;
10
+ }
11
+
12
+ .button-container[class~="border"] {
13
+ border: var(--neutral-bolder-border);
14
+ }
15
+
16
+ .button-container[class~="dashed"] {
17
+ border-style: dashed;
18
+ color: hsla(hue, saturation, lightness, alpha);
19
+ }
20
+
21
+ .button-container[class~="size64"] {
22
+ padding: 1.9rem 2.4rem;
23
+ }
24
+
25
+ .button-container[class~="size56"] {
26
+ padding: 1.5rem 2rem;
27
+ }
28
+
29
+ .button-container[class~="size48"] {
30
+ padding: 1.1rem 2rem;
31
+ }
32
+
33
+ .button-container[class~="size40"] {
34
+ padding: 0.8rem 1.6rem;
35
+ }
36
+
37
+ .button-container[class~="size24"] {
38
+ padding: 0.3rem 0.8rem;
39
+ }
40
+
41
+ .button-container>.button-label {
42
+ color: inherit;
43
+ font: inherit;
44
+ font-size: inherit;
45
+ font-family: inherit;
46
+ line-height: inherit;
47
+ font-weight: inherit;
48
+ text-align: inherit;
49
+ letter-spacing: inherit;
50
+ text-decoration: inherit;
51
+ font-style: inherit;
52
+ }
53
+
54
+ button[class~="button-grey"],
55
+ a[class~="button-grey"] {
56
+ background-color: var(--neutral-main-background-color) !important;
57
+ border-color: var(--neutral-main-background-color) !important;
58
+ }
59
+
60
+ button[class~="button-grey"] *,
61
+ a[class~="button-grey"] * {
62
+ color: var(--neutral-text-subtitle-color) !important;
63
+ --color: var(--neutral-text-subtitle-color) !important;
64
+ }
65
+
66
+ button[class~="button-primary"],
67
+ a[class~="button-primary"] {
68
+ background-color: var(--primary-main-color) !important;
69
+ border-color: var(--primary-main-color) !important;
70
+ }
71
+
72
+ button[class~="button-primary"] *,
73
+ a[class~="button-primary"] * {
74
+ color: var(--neutral-text-stable-color) !important;
75
+ --color: var(--neutral-text-stable-color) !important;
76
+ }
77
+
78
+ button[class~="button-neutral"],
79
+ a[class~="button-neutral"] {
80
+ border-color: var(--neutral-bolder-border-color) !important;
81
+ }
82
+
83
+ button[class~="button-neutral"] *,
84
+ a[class~="button-neutral"] * {
85
+ color: var(--neutral-text-subtitle-color) !important;
86
+ --color: var(--neutral-text-subtitle-color) !important;
87
+ }
88
+
89
+ button[class~="button-neutral"],
90
+ a[class~="button-neutral"] {
91
+ border-color: var(--neutral-bolder-border-color) !important;
92
+ }
93
+
94
+ button[class~="button-black"] *,
95
+ a[class~="button-black"] * {
96
+ color: var(--neutral-text-title-reverse-color) !important;
97
+ --color: var(--neutral-text-title-reverse-color) !important;
98
+ }
99
+
100
+ button[class~="button-black"],
101
+ a[class~="button-black"] {
102
+ background-color: var(--neutral-absolute-reverse-background-color) !important;
103
+ border-color: var(--neutral-bolder-reverse-border-color) !important;
104
+ }
105
+
106
+ button[class~="button-white"] *,
107
+ a[class~="button-white"] * {
108
+ color: var(--neutral-text-title-reverse-color) !important;
109
+ --color: var(--neutral-text-title-reverse-color) !important;
110
+ }
111
+
112
+ button[class~="button-white"],
113
+ a[class~="button-white"] {
114
+ background-color: var(--neutral-absolute-background-color) !important;
115
+ border-color: var(--neutral-bolder-border-color) !important;
116
+ }
117
+
118
+ button[class~="button-infor"] *,
119
+ a[class~="button-infor"] * {
120
+ color: var(--infor-main-color) !important;
121
+ --color: var(--infor-main-color) !important;
122
+ }
123
+
124
+ button[class~="button-warning"],
125
+ a[class~="button-warning"] {
126
+ border-color: var(--warning-main-color) !important;
127
+ }
128
+
129
+ button[class~="button-warning"] *,
130
+ a[class~="button-warning"] * {
131
+ color: var(--warning-main-color) !important;
132
+ --color: var(--warning-main-color) !important;
133
+ }
134
+
135
+ button[class~="button-error"],
136
+ a[class~="button-error"] {
137
+ border-color: var(--error-main-color) !important;
138
+ }
139
+
140
+ button[class~="button-error"] *,
141
+ a[class~="button-error"] * {
142
+ color: var(--error-main-color) !important;
143
+ --color: var(--error-main-color) !important;
144
+ }
145
+
146
+ button[class~="button-success"],
147
+ a[class~="button-success"] {
148
+ border-color: var(--success-main-color) !important;
149
+ }
150
+
151
+ button[class~="button-success"] *,
152
+ a[class~="button-success"] * {
153
+ color: var(--success-main-color) !important;
154
+ --color: var(--success-main-color) !important;
155
+ }
156
+
157
+ button[class~="button-infor-main"],
158
+ a[class~="button-infor-main"] {
159
+ background-color: var(--infor-main-color) !important;
160
+ border: var(--infor-main-color) !important;
161
+ }
162
+
163
+ button[class~="button-warning-main"],
164
+ a[class~="button-warning-main"] {
165
+ background-color: var(--warning-main-color) !important;
166
+ border: var(--warning-main-color) !important;
167
+ }
168
+
169
+ button[class~="button-error-main"],
170
+ a[class~="button-error-main"] {
171
+ background-color: var(--error-main-color) !important;
172
+ border: var(--error-main-color) !important;
173
+ }
174
+
175
+ button[class~="button-success-main"],
176
+ a[class~="button-success-main"] {
177
+ background-color: var(--success-main-color) !important;
178
+ border-color: var(--success-main-color) !important;
179
+ }
180
+
181
+ button[class~="button-infor-main"] *,
182
+ a[class~="button-infor-main"] *,
183
+ button[class~="button-warning-main"] *,
184
+ a[class~="button-warning-main"] *,
185
+ button[class~="button-error-main"] *,
186
+ a[class~="button-error-main"] *,
187
+ button[class~="button-success-main"] *,
188
+ a[class~="button-success-main"] * {
189
+ color: var(--neutral-text-stable-color) !important;
190
+ --color: var(--neutral-text-stable-color) !important;
191
+ }
192
+
193
+ button.button-container:hover {
194
+ opacity: 0.86;
195
+ }
196
+
197
+ button.button-container:focus {
198
+ box-shadow: 0px 4px 20px 0px #0000001A inset;
199
+ }
200
+
201
+ .button-container:disabled {
202
+ pointer-events: none;
203
+ background-color: var(--neutral-disable-background-color, #dddde1) !important;
204
+ border-color: var(--neutral-bolder-border-color, #D7D7DB) !important;
205
+ }
206
+
207
+ .button-container:disabled * {
208
+ color: var(--neutral-text-disabled-color) !important;
209
+ --color: var(--neutral-text-disabled-color) !important;
210
+ }
@@ -0,0 +1,57 @@
1
+ import React, { CSSProperties, ReactNode, useEffect, useRef } from 'react';
2
+ import { Text } from '../text/text';
3
+ import styles from './button.module.css'
4
+
5
+ interface ButtonProps {
6
+ id?: string,
7
+ label: string,
8
+ prefix?: ReactNode,
9
+ suffix?: ReactNode,
10
+ disabled?: boolean,
11
+ linkTo?: string,
12
+ target?: string,
13
+ style?: CSSProperties,
14
+ type?: "button" | "reset" | "submit",
15
+ /**
16
+ * default: size32: button-text-3 \
17
+ * recommend: size64: button-text-1 | size56: button-text-1 | size48: button-text-1 | size40: button-text-3 | size32: button-text-3 | size24: button-text-5 \
18
+ * status button: button-primary | button-infor | button-warning | button-error | button-success | button-grey | button-neutral | button-infor-main | button-warning-main | button-error-main | button-success-main
19
+ * */
20
+ className?: string,
21
+ onClick?: React.MouseEventHandler<HTMLButtonElement | HTMLAnchorElement>
22
+ }
23
+
24
+ export function Button(props: ButtonProps) {
25
+ const btnRef = useRef<HTMLButtonElement>(null)
26
+
27
+ useEffect(() => {
28
+ if (btnRef.current) {
29
+ switch (props.type) {
30
+ case "submit":
31
+ function handleSubmit(ev: any) {
32
+ switch (ev.key.toLowerCase()) {
33
+ case "enter":
34
+ btnRef.current!.click()
35
+ break;
36
+ default:
37
+ break;
38
+ }
39
+ }
40
+ window.addEventListener("keydown", handleSubmit)
41
+ return () => { window.removeEventListener("keydown", handleSubmit) }
42
+ default:
43
+ break;
44
+ }
45
+ }
46
+ }, [props.type, btnRef.current])
47
+
48
+ return props.linkTo ? <a id={props.id} href={props.disabled ? undefined : props.linkTo} target={props.target} className={`${styles['button-container']} row ${props.className ?? "button-text-3"}`} style={props.style} onClick={props.onClick}>
49
+ {props.prefix}
50
+ <Text maxLine={1} className={styles['button-label']}>{props.label}</Text>
51
+ {props.suffix}
52
+ </a> : <button ref={btnRef} id={props.id} type={props.type ?? "button"} disabled={props.disabled} className={`${styles['button-container']} row ${props.className ?? "button-text-3"}`} style={props.style} onClick={props.onClick}>
53
+ {props.prefix}
54
+ <Text maxLine={1} className={styles['button-label']}>{props.label}</Text>
55
+ {props.suffix}
56
+ </button>
57
+ }
@@ -0,0 +1,153 @@
1
+ .calendar-container {
2
+ background-color: var(--neutral-absolute-background-color);
3
+ border-radius: 0.8rem;
4
+ align-items: stretch;
5
+ border: var(--neutral-main-border);
6
+ width: fit-content;
7
+ }
8
+
9
+ .calendar-sidebar-options {
10
+ padding: 0.8rem 2.4rem 0.8rem 0;
11
+ border-right: var(--neutral-main-border);
12
+ }
13
+
14
+ .calendar-sidebar-options>.calendar-sidebar-option-buttton {
15
+ color: var(--neutral-text-title-color);
16
+ padding: 0.8rem 1.6rem;
17
+ }
18
+
19
+ .picker-time-container {
20
+ border-left: var(--neutral-main-border);
21
+ height: 34.2rem;
22
+ align-items: center;
23
+ }
24
+
25
+ .picker-time-container>div[class*="heading-7"]:first-child {
26
+ width: 100%;
27
+ padding: 1.2rem 1.6rem;
28
+ border-bottom: var(--neutral-main-border);
29
+ text-align: center;
30
+ }
31
+
32
+ .picker-time-container div[class*="scroll-picker-"] {
33
+ flex: 1;
34
+ height: 100%;
35
+ gap: 0.4rem;
36
+ padding: 0.4rem 0;
37
+ overflow: hidden auto;
38
+ scrollbar-width: thin;
39
+ }
40
+
41
+ .picker-time-container .scroll-picker-minutes {
42
+ border-left: var(--neutral-main-border);
43
+ border-right: var(--neutral-main-border);
44
+ }
45
+
46
+ .picker-time-container div[class*="scroll-picker-"]>button {
47
+ width: 5.6rem;
48
+ padding: 0.4rem 0;
49
+ }
50
+
51
+ .picker-time-container div[class*="scroll-picker-"]>button.selected {
52
+ background-color: var(--primary-background);
53
+ color: var(--primary-main-color);
54
+ }
55
+
56
+ .picker-date-header {
57
+ padding: 1.2rem 1.6rem;
58
+ gap: 1.2rem;
59
+ background-color: transparent !important;
60
+ border-bottom: var(--neutral-main-border);
61
+ justify-content: space-between;
62
+ }
63
+
64
+ .picker-date-header>span {
65
+ width: 100%;
66
+ max-width: 15rem;
67
+ flex: 1;
68
+ text-align: center;
69
+ cursor: pointer;
70
+ border-radius: 0.8rem;
71
+ }
72
+
73
+ .picker-date-header>span:hover {
74
+ background-color: var(--neutral-hover-background-color);
75
+ }
76
+
77
+ .picker-date-header>button {
78
+ width: 1.6rem;
79
+ height: 1.6rem;
80
+ display: flex;
81
+ align-items: center;
82
+ justify-content: center;
83
+ }
84
+
85
+ .picker-date-header>button>svg {
86
+ font-size: 1.4rem;
87
+ color: var(--neutral-text-title-color);
88
+ pointer-events: none;
89
+ }
90
+
91
+ .picker-date-body {
92
+ padding: 1.2rem 1.6rem;
93
+ width: 31.2rem;
94
+ flex-wrap: wrap;
95
+ gap: 0.8rem 0;
96
+ }
97
+
98
+ .picker-date-body>div {
99
+ height: 3.2rem;
100
+ padding: 0 0.4rem;
101
+ display: flex;
102
+ }
103
+
104
+ .picker-date-body>div>* {
105
+ border: 1px solid transparent;
106
+ justify-content: center;
107
+ height: 100%;
108
+ width: 100%;
109
+ }
110
+
111
+ .date-picker-circle {
112
+ width: calc(100% / 7);
113
+ }
114
+
115
+ .date-picker-circle>* {
116
+ border-radius: 50%;
117
+ }
118
+
119
+ .month-picker-circle,
120
+ .year-picker-circle {
121
+ width: calc(100% / 3);
122
+ }
123
+
124
+ .month-picker-circle>*,
125
+ .year-picker-circle>* {
126
+ border-radius: 2.4rem;
127
+ }
128
+
129
+ .picker-date-body>.in-range {
130
+ background-color: var(--neutral-main-background-color);
131
+ }
132
+
133
+ .picker-date-body:has(>.in-range, >.end-range)>.start-range {
134
+ background-image: linear-gradient(to right, transparent 50%, var(--neutral-main-background-color) 50%);
135
+ }
136
+
137
+ .end-range {
138
+ background-image: linear-gradient(to left, transparent 50%, var(--neutral-main-background-color) 50%) !important;
139
+ }
140
+
141
+ .picker-date-body>.today>* {
142
+ border-color: var(--primary-main-color)
143
+ }
144
+
145
+ .picker-date-body>.selected>* {
146
+ background-color: var(--primary-main-color);
147
+ color: var(--neutral-absolute-background-color);
148
+ }
149
+
150
+ .picker-date-body>.invalid {
151
+ opacity: 0.24 !important;
152
+ pointer-events: none !important;
153
+ }