@descope-ui/common 0.0.1

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 (39) hide show
  1. package/.eslintrc.json +18 -0
  2. package/README.md +7 -0
  3. package/package.json +36 -0
  4. package/project.json +7 -0
  5. package/src/baseClasses/baseClasses/createBaseClass.js +66 -0
  6. package/src/baseClasses/baseClasses/createBaseInputClass.js +14 -0
  7. package/src/baseClasses/baseClasses/createCssVarImageClass.js +55 -0
  8. package/src/baseClasses/index.js +3 -0
  9. package/src/componentsHelpers/index.js +95 -0
  10. package/src/componentsMixins/helpers/mixinsHelpers.js +10 -0
  11. package/src/componentsMixins/index.js +1 -0
  12. package/src/componentsMixins/mixins/activableMixin.js +14 -0
  13. package/src/componentsMixins/mixins/changeMixin.js +22 -0
  14. package/src/componentsMixins/mixins/componentNameValidationMixin.js +23 -0
  15. package/src/componentsMixins/mixins/componentsContextMixin.js +12 -0
  16. package/src/componentsMixins/mixins/createDynamicDataMixin.js +100 -0
  17. package/src/componentsMixins/mixins/createProxy.js +58 -0
  18. package/src/componentsMixins/mixins/createStyleMixin/helpers.js +106 -0
  19. package/src/componentsMixins/mixins/createStyleMixin/index.js +167 -0
  20. package/src/componentsMixins/mixins/draggableMixin.js +62 -0
  21. package/src/componentsMixins/mixins/externalInputHelpers.js +93 -0
  22. package/src/componentsMixins/mixins/externalInputMixin.js +170 -0
  23. package/src/componentsMixins/mixins/hoverableMixin.js +13 -0
  24. package/src/componentsMixins/mixins/index.js +14 -0
  25. package/src/componentsMixins/mixins/inputEventsDispatchingMixin.js +76 -0
  26. package/src/componentsMixins/mixins/inputValidationMixin.js +210 -0
  27. package/src/componentsMixins/mixins/lifecycleEventsMixin.js +23 -0
  28. package/src/componentsMixins/mixins/normalizeBooleanAttributesMixin.js +59 -0
  29. package/src/componentsMixins/mixins/portalMixin.js +112 -0
  30. package/src/componentsMixins/mixins/proxyInputMixin.js +242 -0
  31. package/src/constants.js +4 -0
  32. package/src/icons/errorMessageIconBase64.js +1 -0
  33. package/src/sbControls.js +302 -0
  34. package/src/sbHelpers.js +53 -0
  35. package/src/themeHelpers/colorsHelpers.js +94 -0
  36. package/src/themeHelpers/componentsThemeManager.js +45 -0
  37. package/src/themeHelpers/index.js +191 -0
  38. package/src/themeHelpers/resetHelpers.js +144 -0
  39. package/src/utils/index.js +68 -0
@@ -0,0 +1,144 @@
1
+ export const useHostExternalPadding = (cssVarList) => `
2
+ :host {
3
+ padding: calc(var(${cssVarList.inputOutlineWidth}) + var(${cssVarList.inputOutlineOffset}))
4
+ }
5
+ `;
6
+
7
+ export const resetInputFieldUnderlayingBorder = (name) => `
8
+ ${name}::part(input-field)::after {
9
+ border: none;
10
+ }
11
+ `;
12
+
13
+ export const resetInitialHeight = (name) => `
14
+ ${name}::before {
15
+ height: unset;
16
+ }
17
+ `;
18
+
19
+ export const resetInputElement = (name) => `
20
+ ${name} > input {
21
+ -webkit-mask-image: none;
22
+ min-height: 0;
23
+ box-sizing: border-box;
24
+ }
25
+ `;
26
+
27
+ export const resetInputContainer = (name) => `
28
+ ${name} {
29
+ margin: 0;
30
+ padding: 0;
31
+ width: 100%;
32
+ height: 100%;
33
+ box-sizing: border-box;
34
+ }
35
+ `;
36
+
37
+ export const resetInputField = (name) => `
38
+ ${name}::part(input-field) {
39
+ overflow: hidden;
40
+ padding: 0;
41
+ box-shadow: none;
42
+ }
43
+ `;
44
+
45
+ export const resetInputCursor = (name) => `
46
+ ${name} > label,
47
+ ${name}::part(label),
48
+ ${name}::part(required-indicator) {
49
+ cursor: pointer;
50
+ }
51
+ `;
52
+
53
+ export const resetInputPlaceholder = (name, ele = 'input') => `
54
+ ${name}[disabled] > ${ele}:placeholder-shown,
55
+ ${name}[readonly] > ${ele}:placeholder-shown {
56
+ opacity: 1;
57
+ }
58
+ `;
59
+
60
+ export const resetInputAutoFill = (name, cssVarList) => `
61
+ ${name} input:-webkit-autofill,
62
+ ${name} input:-webkit-autofill::first-line,
63
+ ${name} input:-webkit-autofill:hover,
64
+ ${name} input:-webkit-autofill:active,
65
+ ${name} input:-webkit-autofill:focus {
66
+ -webkit-text-fill-color: var(${cssVarList.inputValueTextColor});
67
+ box-shadow: 0 0 0 var(${cssVarList.inputHeight}) var(${cssVarList.inputBackgroundColor}) inset;
68
+ }
69
+ `;
70
+
71
+ export const resetInputFieldDefaultWidth = () => `
72
+ :host {
73
+ --vaadin-field-default-width: auto;
74
+ box-sizing: border-box;
75
+ }
76
+ `;
77
+
78
+ export const resetInputReadonlyStyle = (name) => `
79
+ ${name}::part(input-field)::after {
80
+ opacity: 0;
81
+ }
82
+ `;
83
+
84
+ export const resetInputFieldInvalidBackgroundColor = (name) => `
85
+ ${name}::part(input-field)::after {
86
+ background: none;
87
+ }
88
+ `;
89
+
90
+ export const resetInputOverrides = (name, cssVarList) => `
91
+ ${resetInputContainer(name)}
92
+ ${resetInputCursor(name)}
93
+ ${resetInputPlaceholder(name)}
94
+ ${resetInputField(name)}
95
+ ${resetInputAutoFill(name, cssVarList)}
96
+ ${resetInputFieldInvalidBackgroundColor(name)}
97
+ ${resetInitialHeight(name)}
98
+ ${resetInputElement(name)}
99
+ ${resetInputFieldUnderlayingBorder(name)}
100
+ `;
101
+
102
+ // This function is used to support RTL correctly for input components.
103
+ // It also fixes the error message to be displayed LTR since we currently
104
+ // don't support RTL for error messages.
105
+ export const resetInputLabelPosition = (name) => `
106
+ :host ::part(error-message) {
107
+ direction: ltr;
108
+ }
109
+ :host([required]) ::part(required-indicator) {
110
+ width: 1em;
111
+ display: inline-flex;
112
+ }
113
+ :host([required]) ::part(required-indicator)::after {
114
+ position: static;
115
+ }
116
+ :host([has-label]) ::part(label) {
117
+ padding-right: 0;
118
+ padding-bottom: 0;
119
+ display: flex;
120
+ width: 100%;
121
+ }
122
+ ${name} [slot="label"] {
123
+ max-width: calc(100% - 1em);
124
+ overflow: hidden;
125
+ text-overflow: ellipsis;
126
+ padding-bottom: 0.5em;
127
+ }
128
+ `;
129
+
130
+ export const inputFloatingLabelStyle = () => {
131
+ return `
132
+ :host([label-type="floating"]) {
133
+ position: relative;
134
+ }
135
+ :host([label-type="floating"][has-label]) [slot="label"] {
136
+ padding: 0;
137
+ }
138
+ :host([label-type="floating"][has-label]) > ::part(label) {
139
+ z-index: 1;
140
+ padding: 0;
141
+ width: auto;
142
+ }
143
+ `;
144
+ };
@@ -0,0 +1,68 @@
1
+ export const kebabCase = (str) =>
2
+ str
3
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
4
+ .replace(/[\s_.]+/g, '-')
5
+ .toLowerCase();
6
+
7
+ export const kebabCaseJoin = (...args) => kebabCase(args.filter((arg) => !!arg).join('-'));
8
+
9
+ export const upperFirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);
10
+
11
+ export const camelCaseJoin = (...args) =>
12
+ args
13
+ .filter(Boolean)
14
+ .map((arg, index) => (index === 0 ? arg : upperFirst(arg)))
15
+ .join('');
16
+
17
+ export const compose =
18
+ (...fns) =>
19
+ (val) =>
20
+ fns.reduceRight((res, fn) => fn(res), val);
21
+
22
+ export const isFunction = (maybeFunc) => typeof maybeFunc === 'function';
23
+
24
+ export const isUrl = (maybeUrl) => {
25
+ try {
26
+ // eslint-disable-next-line no-new
27
+ new URL(maybeUrl);
28
+
29
+ return true;
30
+ } catch (e) {
31
+ return false;
32
+ }
33
+ };
34
+
35
+ /**
36
+ * Compares two arrays unorderedly.
37
+ * @param {Array} arr1 - The first array to compare.
38
+ * @param {Array} arr2 - The second array to compare.
39
+ * @returns {boolean} - Returns true if the arrays are equal unorderedly, false otherwise.
40
+ */
41
+ export const compareArraysUnordered = (arr1, arr2) => {
42
+ if (!Array.isArray(arr1) || !Array.isArray(arr2)) {
43
+ return false;
44
+ }
45
+
46
+ if (arr1.length !== arr2.length) {
47
+ return false;
48
+ }
49
+
50
+ const sortedArr1 = arr1.slice().sort();
51
+ const sortedArr2 = arr2.slice().sort();
52
+
53
+ for (let i = 0; i < sortedArr1.length; i++) {
54
+ if (sortedArr1[i] !== sortedArr2[i]) {
55
+ return false;
56
+ }
57
+ }
58
+
59
+ return true;
60
+ };
61
+
62
+ export const toTitle = (str) =>
63
+ str
64
+ .replace(/([A-Z])/g, ' $1')
65
+ .trim()
66
+ .split(' ')
67
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
68
+ .join(' ');