@kws3/ui 4.4.0-alpha.0 → 4.4.0-alpha.2
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/CHANGELOG.mdx +13 -0
- package/controls/Radio.svelte +2 -1
- package/form/index.d.ts +18 -15
- package/form/index.d.ts.map +1 -1
- package/form/index.js +42 -12
- package/package.json +2 -2
- package/styles/DataSort.scss +22 -12
- package/styles/Datepicker.scss +3 -4
- package/styles/Grid.scss +0 -7
- package/styles/Panel.scss +1 -1
- package/styles/Skeleton.scss +2 -2
- package/types/index.d.ts +46 -0
- package/utils/index.d.ts +1 -5
- package/utils/index.d.ts.map +1 -1
- package/utils/index.js +1 -0
package/CHANGELOG.mdx
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
## 4.3.5
|
|
2
|
+
- Fix Radio component value type
|
|
3
|
+
|
|
4
|
+
## 4.3.4
|
|
5
|
+
- Make granular types of form maker generic
|
|
6
|
+
|
|
7
|
+
## 4.3.3
|
|
8
|
+
- More granular types for form maker
|
|
9
|
+
|
|
10
|
+
## 4.3.2
|
|
11
|
+
- Extended typings for form helper
|
|
12
|
+
- Fix typings for ButtonEvent
|
|
13
|
+
|
|
1
14
|
## 4.3.1
|
|
2
15
|
- Include bulma 0.9 as peer dependency
|
|
3
16
|
- Include svelte 4 as peer dependency
|
package/controls/Radio.svelte
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
@component
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
@param {
|
|
5
|
+
@param {any} [value=null] - Value of radio button, Default: `null`
|
|
6
6
|
@param {string} [style=""] - Inline CSS for the Radio button, Default: `""`
|
|
7
7
|
@param {string} [label_style=""] - Inline CSS for Radio label, Default: `""`
|
|
8
8
|
@param {SizeOptions} [size=] - Size of the Radio Button, Default: ``
|
|
@@ -46,6 +46,7 @@ See: https://svelte.dev/docs#bind_group, Default: `null`
|
|
|
46
46
|
*/
|
|
47
47
|
/**
|
|
48
48
|
* Value of radio button
|
|
49
|
+
* @type {any}
|
|
49
50
|
*/
|
|
50
51
|
export let value = null,
|
|
51
52
|
/**
|
package/form/index.d.ts
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
/** @type {import("@kws3/ui/types").MakeForms} */
|
|
2
|
+
export const makeForms: typeof import("@kws3/ui/types").MakeForms;
|
|
3
|
+
/**
|
|
4
|
+
* @param {string} v
|
|
5
|
+
* @returns
|
|
6
|
+
*/
|
|
7
|
+
export function noDigits(v: string): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* @param {string} v
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
export function notEmpty(v: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* @param {string} msg
|
|
15
|
+
* @param {function} fn
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
export function withMsg(msg: string, fn: Function): (v: any, otherFields: object) => string;
|
|
16
19
|
//# sourceMappingURL=index.d.ts.map
|
package/form/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAGA,iDAAiD;AAEjD,kEAME;AAmKF;;;GAGG;AACH,4BAHW,MAAM,WAGoB;AAVrC;;;GAGG;AACH,4BAHW,MAAM,WAG2B;AAQ5C;;;;GAIG;AACH,6BAJW,MAAM,qBAKU,GAAG,eAAmB,MAAM,YACtB"}
|
package/form/index.js
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
import { cloneObject } from "
|
|
1
|
+
import { cloneObject } from "@kws3/ui/utils";
|
|
2
2
|
import { derived, get, writable } from "svelte/store";
|
|
3
3
|
|
|
4
|
+
/** @type {import("@kws3/ui/types").MakeForms} */
|
|
5
|
+
// @ts-ignore
|
|
4
6
|
const makeForms = (items) => {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
if (Array.isArray(items)) {
|
|
8
|
+
return items.map((item) => formMaker(item));
|
|
9
|
+
} else {
|
|
7
10
|
return formMaker(items);
|
|
8
11
|
}
|
|
9
|
-
|
|
10
|
-
let ret = [];
|
|
11
|
-
if (items.length) {
|
|
12
|
-
items.forEach((item) => ret.push(formMaker(item)));
|
|
13
|
-
}
|
|
14
|
-
return ret;
|
|
15
12
|
};
|
|
16
13
|
|
|
14
|
+
/**
|
|
15
|
+
* @param {import("@kws3/ui/types").FormMakerConfig} config
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
17
18
|
const formMaker = (config) => {
|
|
18
19
|
let data = config.data || {};
|
|
19
20
|
let validators = config.validators || {};
|
|
@@ -32,6 +33,12 @@ const formMaker = (config) => {
|
|
|
32
33
|
let fields = Object.keys($formData);
|
|
33
34
|
let res = fields.reduce((o, v) => ((o[v] = false), o), {});
|
|
34
35
|
|
|
36
|
+
/**
|
|
37
|
+
* @param {string} field
|
|
38
|
+
* @param {{ [x: string]: any }} oldData
|
|
39
|
+
* @param {{ [x: string]: any }} newData
|
|
40
|
+
* @returns
|
|
41
|
+
*/
|
|
35
42
|
let compare = (field, oldData, newData) => {
|
|
36
43
|
if (Array.isArray(newData[field])) {
|
|
37
44
|
if (
|
|
@@ -81,6 +88,11 @@ const formMaker = (config) => {
|
|
|
81
88
|
const errors = derived(formData, ($formData, set) => {
|
|
82
89
|
let fields = Object.keys(validators) || [];
|
|
83
90
|
let res = fields.reduce((o, v) => ((o[v] = ""), o), {});
|
|
91
|
+
/**
|
|
92
|
+
* @param {string} field
|
|
93
|
+
* @param {function | function[]} validator
|
|
94
|
+
* @returns
|
|
95
|
+
*/
|
|
84
96
|
let validate = (field, validator) => {
|
|
85
97
|
let message = "";
|
|
86
98
|
if (validator || typeof validator !== "undefined") {
|
|
@@ -122,17 +134,20 @@ const formMaker = (config) => {
|
|
|
122
134
|
Object.values($errors).every((v) => v === "")
|
|
123
135
|
);
|
|
124
136
|
|
|
137
|
+
/** @param {{ [key: string]: any }} newData */
|
|
125
138
|
function update(newData) {
|
|
126
139
|
data = newData;
|
|
127
140
|
reset();
|
|
128
141
|
}
|
|
129
142
|
|
|
143
|
+
/** @param {import("@kws3/ui/types").FormMakerConfig["validators"]} newValidators */
|
|
130
144
|
function setValidators(newValidators) {
|
|
131
145
|
validators = newValidators;
|
|
132
146
|
formData.set(get(formData));
|
|
133
147
|
}
|
|
134
148
|
|
|
135
|
-
|
|
149
|
+
/** @param {Event | null} e */
|
|
150
|
+
function reset(e = null) {
|
|
136
151
|
e && e.preventDefault();
|
|
137
152
|
formData.set(cloneObject(data));
|
|
138
153
|
tracker.set(cloneObject(tracker_data));
|
|
@@ -151,10 +166,25 @@ const formMaker = (config) => {
|
|
|
151
166
|
};
|
|
152
167
|
};
|
|
153
168
|
|
|
169
|
+
/**
|
|
170
|
+
* @param {string} v
|
|
171
|
+
* @returns
|
|
172
|
+
*/
|
|
154
173
|
const notEmpty = (v) => v && v.trim() !== "";
|
|
155
174
|
|
|
175
|
+
/**
|
|
176
|
+
* @param {string} v
|
|
177
|
+
* @returns
|
|
178
|
+
*/
|
|
156
179
|
const noDigits = (v) => !/\d/.test(v);
|
|
157
180
|
|
|
158
|
-
|
|
181
|
+
/**
|
|
182
|
+
* @param {string} msg
|
|
183
|
+
* @param {function} fn
|
|
184
|
+
* @returns
|
|
185
|
+
*/
|
|
186
|
+
const withMsg =
|
|
187
|
+
(msg, fn) => (/** @type {any} */ v, /** @type {object} */ otherFields) =>
|
|
188
|
+
fn(v, otherFields) ? "" : msg;
|
|
159
189
|
|
|
160
|
-
export { makeForms,
|
|
190
|
+
export { makeForms, noDigits, notEmpty, withMsg };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kws3/ui",
|
|
3
|
-
"version": "4.4.0-alpha.
|
|
3
|
+
"version": "4.4.0-alpha.2",
|
|
4
4
|
"description": "UI components for use with Svelte v3 applications.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"svelte": "index.js",
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"typescript": "^5.2.2"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "67ef949462d49fde55b07a24d2a484f9840771dd"
|
|
43
43
|
}
|
package/styles/DataSort.scss
CHANGED
|
@@ -3,22 +3,36 @@
|
|
|
3
3
|
@use "bulma/sass/utilities/derived-variables" as dv;
|
|
4
4
|
@use "bulma/sass/utilities/mixins" as mx;
|
|
5
5
|
|
|
6
|
+
$border-radius: cv.getVar("radius-medium") !default;
|
|
7
|
+
$background: cv.getVar("border") !default;
|
|
8
|
+
$label-background: hsla(
|
|
9
|
+
cv.getVar("scheme-h"),
|
|
10
|
+
cv.getVar("scheme-s"),
|
|
11
|
+
90%,
|
|
12
|
+
1
|
|
13
|
+
) !default;
|
|
14
|
+
$dropdown-text-color: cv.getVar("primary") !default;
|
|
15
|
+
$dropdown-marker-color: cv.getVar("primary") !default;
|
|
16
|
+
|
|
6
17
|
.sorting-filters {
|
|
7
18
|
font-weight: bold;
|
|
8
19
|
margin-top: -1.55rem;
|
|
9
20
|
margin-bottom: 1.5rem;
|
|
21
|
+
.field {
|
|
22
|
+
gap: 0;
|
|
23
|
+
}
|
|
10
24
|
.control {
|
|
11
|
-
background:
|
|
25
|
+
background: $background;
|
|
12
26
|
margin: 0 !important;
|
|
13
27
|
padding: 0.2rem 0;
|
|
14
28
|
&:first-child {
|
|
15
29
|
padding-left: calc(0.625rem - 1px);
|
|
16
|
-
border-radius: 0 0 0
|
|
17
|
-
background:
|
|
30
|
+
border-radius: 0 0 0 $border-radius;
|
|
31
|
+
background: $label-background;
|
|
18
32
|
padding-right: calc(0.625rem - 1px);
|
|
19
33
|
}
|
|
20
34
|
&:last-child {
|
|
21
|
-
border-radius: 0 0
|
|
35
|
+
border-radius: 0 0 $border-radius 0;
|
|
22
36
|
}
|
|
23
37
|
}
|
|
24
38
|
.select {
|
|
@@ -28,7 +42,7 @@
|
|
|
28
42
|
padding-bottom: 0.2rem;
|
|
29
43
|
border: none;
|
|
30
44
|
background: transparent;
|
|
31
|
-
color:
|
|
45
|
+
color: $dropdown-text-color;
|
|
32
46
|
height: auto;
|
|
33
47
|
font-weight: bold;
|
|
34
48
|
&:focus,
|
|
@@ -41,7 +55,7 @@
|
|
|
41
55
|
}
|
|
42
56
|
}
|
|
43
57
|
&::after {
|
|
44
|
-
border-color:
|
|
58
|
+
border-color: $dropdown-marker-color;
|
|
45
59
|
}
|
|
46
60
|
}
|
|
47
61
|
}
|
|
@@ -54,14 +68,10 @@
|
|
|
54
68
|
}
|
|
55
69
|
.control {
|
|
56
70
|
&:first-child {
|
|
57
|
-
border-radius:
|
|
58
|
-
"radius-large"
|
|
59
|
-
)};
|
|
71
|
+
border-radius: $border-radius 0 0 $border-radius;
|
|
60
72
|
}
|
|
61
73
|
&:last-child {
|
|
62
|
-
border-radius: 0
|
|
63
|
-
"radius-large"
|
|
64
|
-
)} 0;
|
|
74
|
+
border-radius: 0 $border-radius $border-radius 0;
|
|
65
75
|
flex-grow: 1;
|
|
66
76
|
flex-shrink: 1;
|
|
67
77
|
.select {
|
package/styles/Datepicker.scss
CHANGED
|
@@ -2,19 +2,18 @@
|
|
|
2
2
|
@use "bulma/sass/utilities/derived-variables" as dv;
|
|
3
3
|
@use "bulma/sass/utilities/functions" as fn;
|
|
4
4
|
|
|
5
|
-
$text: dv.$text !default;
|
|
6
5
|
$kws-theme-colors: dv.$colors !default;
|
|
7
6
|
$kws-datepicker-background: #{cv.getVar("scheme-main-ter")} !default;
|
|
8
|
-
$kws-datepicker-text:
|
|
7
|
+
$kws-datepicker-text: dv.$text !default;
|
|
9
8
|
$kws-datepicker-shadow:
|
|
10
9
|
0 2px 5px rgba(0, 0, 0, 0.3),
|
|
11
10
|
0 0 0 0.0625rem rgba(0, 0, 0, 0.1) !default;
|
|
12
11
|
$kws-datepicker-radius: 0px !default;
|
|
13
12
|
|
|
14
13
|
.flatpickr-calendar {
|
|
15
|
-
$inRangeBg:
|
|
14
|
+
$inRangeBg: fn.bulmaLighten($kws-datepicker-text, 55);
|
|
16
15
|
@if (fn.bulmaColorLuminance($kws-datepicker-text) > 0.55) {
|
|
17
|
-
$inRangeBg:
|
|
16
|
+
$inRangeBg: fn.bulmaDarken($kws-datepicker-text, 55);
|
|
18
17
|
}
|
|
19
18
|
|
|
20
19
|
box-shadow: $kws-datepicker-shadow;
|
package/styles/Grid.scss
CHANGED
|
@@ -73,13 +73,6 @@ $kws-gridView-cell-border-color: #{cv.getVar("table-cell-border-color")} !defaul
|
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
tr.is-selected {
|
|
77
|
-
td {
|
|
78
|
-
color: currentColor !important;
|
|
79
|
-
//border-color: $kws-gridView-cell-border-color !important;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
76
|
tr.is-checked {
|
|
84
77
|
background-color: $kws-gridview-checked-row-background !important;
|
|
85
78
|
td {
|
package/styles/Panel.scss
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@use "bulma/sass/utilities/css-variables" as cv;
|
|
2
2
|
|
|
3
|
-
$kws-panel-heading-background: #{cv.getVar("scheme-main-
|
|
3
|
+
$kws-panel-heading-background: #{cv.getVar("scheme-main-bis")} !default;
|
|
4
4
|
$kws-panel-background: #{cv.getVar("scheme-main")} !default;
|
|
5
5
|
$kws-panel-box-shadow: #{cv.getVar("panel-shadow")} !default;
|
|
6
6
|
$kws-panel-title-color: #{cv.getVar("scheme-invert-bis")} !default;
|
package/styles/Skeleton.scss
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
$kws-theme-colors: dv.$colors !default;
|
|
6
6
|
$text: dv.$text !default;
|
|
7
|
-
$kws-skeleton-color:
|
|
8
|
-
$kws-skeleton-hilight-color:
|
|
7
|
+
$kws-skeleton-color: fn.bulmaLighten(dv.$text, 60%) !default;
|
|
8
|
+
$kws-skeleton-hilight-color: fn.bulmaLighten(dv.$text, 65%) !default;
|
|
9
9
|
|
|
10
10
|
.kws-skeleton {
|
|
11
11
|
width: 100%;
|
package/types/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Readable, Writable } from "svelte/store";
|
|
1
2
|
import type {
|
|
2
3
|
Colors,
|
|
3
4
|
BGColors,
|
|
@@ -130,6 +131,51 @@ export type ButtonTracker = {
|
|
|
130
131
|
error: boolean;
|
|
131
132
|
};
|
|
132
133
|
|
|
134
|
+
export type FormMakerValidators = { [key: string]: Function | Function[] };
|
|
135
|
+
|
|
136
|
+
export type FormMakerReturnFormData<T> = import("svelte/store").Writable<T>;
|
|
137
|
+
|
|
138
|
+
export type FormMakerReturnErrors<T> = import("svelte/store").Readable<{
|
|
139
|
+
[K in keyof T]: string;
|
|
140
|
+
}>;
|
|
141
|
+
|
|
142
|
+
export type FormMakerReturnTouched<T> = import("svelte/store").Readable<{
|
|
143
|
+
[K in keyof T]: boolean;
|
|
144
|
+
}>;
|
|
145
|
+
|
|
146
|
+
export type FormMakerReturnIsValid = import("svelte/store").Readable<boolean>;
|
|
147
|
+
export type FormMakerReturnIsTouched = import("svelte/store").Readable<boolean>;
|
|
148
|
+
export type FormMakerReturnTracker =
|
|
149
|
+
import("svelte/store").Writable<ButtonTracker>;
|
|
150
|
+
|
|
151
|
+
export type FormMakerConfig<T = Record<string, any>> = {
|
|
152
|
+
data: T;
|
|
153
|
+
validators?: FormMakerValidators;
|
|
154
|
+
strictMode?: boolean;
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
export type FormMakerReturn<T> = {
|
|
158
|
+
formData: FormMakerReturnFormData<T>;
|
|
159
|
+
errors: FormMakerReturnErrors<T>;
|
|
160
|
+
touched: FormMakerReturnTouched<T>;
|
|
161
|
+
isValid: FormMakerReturnIsValid;
|
|
162
|
+
isTouched: FormMakerReturnIsTouched;
|
|
163
|
+
tracker: FormMakerReturnTracker;
|
|
164
|
+
update: (newData: { [key: string]: any }) => void;
|
|
165
|
+
reset: (e?: Event | null) => void;
|
|
166
|
+
setValidators: (newValidators: FormMakerValidators) => void;
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
export type CloneObject = <T>(obj: T) => T;
|
|
170
|
+
|
|
171
|
+
// Overloads
|
|
172
|
+
export declare function MakeForms<T extends Record<string, any>>(
|
|
173
|
+
items: FormMakerConfig<T>,
|
|
174
|
+
): FormMakerReturn<T>;
|
|
175
|
+
export declare function MakeForms<T extends Record<string, any>>(
|
|
176
|
+
items: FormMakerConfig<T>[],
|
|
177
|
+
): FormMakerReturn<T>[];
|
|
178
|
+
|
|
133
179
|
declare global {
|
|
134
180
|
interface Navigator {
|
|
135
181
|
readonly userAgentData: {
|
package/utils/index.d.ts
CHANGED
|
@@ -9,11 +9,7 @@ export function truncate(str?: string, len?: number): string;
|
|
|
9
9
|
* @param {string} [input=""] - String to be checked, Default: `""`
|
|
10
10
|
*/
|
|
11
11
|
export function nl2br(input?: string): string;
|
|
12
|
-
|
|
13
|
-
* Clone an Object.
|
|
14
|
-
* @param {object} [obj={}] - Object to be cloned, Default: `{}`
|
|
15
|
-
*/
|
|
16
|
-
export function cloneObject(obj?: object): any;
|
|
12
|
+
export function cloneObject<T>(obj: T): T;
|
|
17
13
|
/**
|
|
18
14
|
* Returns a function, that, as long as it continues to be invoked, will not
|
|
19
15
|
* be triggered. The function will be called after it stops being called for
|
package/utils/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,+BAHW,MAAM,QACN,MAAM,UAIhB;AAED;;;GAGG;AACH,8BAFW,MAAM,UAQhB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,+BAHW,MAAM,QACN,MAAM,UAIhB;AAED;;;GAGG;AACH,8BAFW,MAAM,UAQhB;AAoIe,0CAAiB;AArGjC;;;;;;;;GAQG;AACH,oDAJW,MAAM,WACN,OAAO;;;EA2BjB;AAED;;;GAGG;AACH,+CAFW,MAAM,UAIhB;AAED;;;;GAIG;AACH,qCAFW,MAAM,QAKhB;AAED;;;GAGG;AACH,6BAFW,MAAM,UAKhB;AAED;;;GAGG;AACH,kCAFW,MAAM,UAUhB;AAED;;;;;;;GAOG;AACH,gDAHW,MAAM,QACN,MAAM,UAMhB;AAED;;;;GAIG;AACH,oCAHW,MAAM,QACN,MAAM,UAIhB;AAED;;;;GAIG;AACH,sDAFW,MAAM,QAYhB;AAED;;;;;;GAMG;AACH,6BALW,MAAM,cACN,CAAC,MAAM,EAAE,MAAM,CAAC,eAChB,CAAC,MAAM,EAAE,MAAM,CAAC,GACd,MAAM,CAQlB;AAED;;;;;;GAMG;AACH,yCAJW,CAAC,MAAM,EAAE,MAAM,CAAC,eAChB,CAAC,MAAM,EAAE,MAAM,CAAC,YAU1B;AArKD;;;GAGG;AACH,sBAce"}
|