@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 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
@@ -2,7 +2,7 @@
2
2
  @component
3
3
 
4
4
 
5
- @param {object} [value=null] - Value of radio button, Default: `null`
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
- /// <reference types="svelte" />
2
- export function makeForms(items: any): any[] | {
3
- formData: import("svelte/store").Writable<any>;
4
- errors: import("svelte/store").Readable<any>;
5
- touched: import("svelte/store").Readable<any>;
6
- isValid: import("svelte/store").Readable<boolean>;
7
- isTouched: import("svelte/store").Readable<any>;
8
- tracker: import("svelte/store").Writable<any>;
9
- update: (newData: any) => void;
10
- reset: (e: any) => void;
11
- setValidators: (newValidators: any) => void;
12
- };
13
- export function notEmpty(v: any): boolean;
14
- export function noDigits(v: any): boolean;
15
- export function withMsg(msg: any, fn: any): (v: any, otherFields: any) => any;
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":";AAGA;;;;;;;;;;EAWC;AA2ID,0CAA4C;AAE5C,0CAAqC;AAErC,8EAA8E"}
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 "../utils/index";
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
- var res = Array.isArray(items);
6
- if (!res) {
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
- function reset(e) {
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
- const withMsg = (msg, fn) => (v, otherFields) => fn(v, otherFields) ? "" : msg;
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, notEmpty, noDigits, withMsg };
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.0",
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": "e3c45d2a5ae11ab2c88777a26d3cf80a78f09689"
42
+ "gitHead": "67ef949462d49fde55b07a24d2a484f9840771dd"
43
43
  }
@@ -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: cv.getVar("border");
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 #{cv.getVar("radius-medium")};
17
- background: darken(dv.$border, 5%);
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 #{cv.getVar("radius-medium")} 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: #{cv.getVar("primary")};
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: #{cv.getVar("primary")};
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: #{cv.getVar("radius-large")} 0 0 #{cv.getVar(
58
- "radius-large"
59
- )};
71
+ border-radius: $border-radius 0 0 $border-radius;
60
72
  }
61
73
  &:last-child {
62
- border-radius: 0 #{cv.getVar("radius-large")} #{cv.getVar(
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 {
@@ -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: $text !default;
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: lighten($kws-datepicker-text, 55);
14
+ $inRangeBg: fn.bulmaLighten($kws-datepicker-text, 55);
16
15
  @if (fn.bulmaColorLuminance($kws-datepicker-text) > 0.55) {
17
- $inRangeBg: darken($kws-datepicker-text, 55);
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-ter")} !default;
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;
@@ -4,8 +4,8 @@
4
4
 
5
5
  $kws-theme-colors: dv.$colors !default;
6
6
  $text: dv.$text !default;
7
- $kws-skeleton-color: lighten($text, 60%) !default;
8
- $kws-skeleton-hilight-color: lighten($text, 65%) !default;
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
@@ -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;AAED;;;GAGG;AACH,kCAFW,MAAM,OAIhB;AAsBD;;;;;;;;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"}
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"}
package/utils/index.js CHANGED
@@ -21,6 +21,7 @@ export function nl2br(input = "") {
21
21
 
22
22
  /**
23
23
  * Clone an Object.
24
+ * @type {import("@kws3/ui/types").CloneObject}
24
25
  * @param {object} [obj={}] - Object to be cloned, Default: `{}`
25
26
  */
26
27
  export function cloneObject(obj) {