@descope/web-components-ui 1.0.62 → 1.0.64

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 (85) hide show
  1. package/dist/cjs/index.cjs.js +95 -21
  2. package/dist/cjs/index.cjs.js.map +1 -1
  3. package/dist/index.esm.js +673 -697
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/umd/447.js +1 -1
  6. package/dist/umd/666.js +37 -0
  7. package/dist/umd/725.js +1 -37
  8. package/dist/umd/descope-button-index-js.js +1 -1
  9. package/dist/umd/descope-checkbox-index-js.js +1 -1
  10. package/dist/umd/descope-container-index-js.js +1 -1
  11. package/dist/umd/descope-date-picker-index-js.js +1 -1
  12. package/dist/umd/descope-divider-index-js.js +1 -1
  13. package/dist/umd/descope-email-field-index-js.js +1 -1
  14. package/dist/umd/descope-link-index-js.js +1 -1
  15. package/dist/umd/descope-loader-linear-index-js.js +1 -1
  16. package/dist/umd/descope-loader-radial-index-js.js +1 -1
  17. package/dist/umd/descope-logo-index-js.js +1 -1
  18. package/dist/umd/descope-number-field-index-js.js +1 -1
  19. package/dist/umd/descope-passcode-descope-passcode-internal-index-js.js +1 -1
  20. package/dist/umd/descope-passcode-index-js.js +1 -1
  21. package/dist/umd/descope-password-field-index-js.js +1 -1
  22. package/dist/umd/descope-switch-toggle-index-js.js +1 -1
  23. package/dist/umd/descope-text-area-index-js.js +1 -1
  24. package/dist/umd/descope-text-field-index-js.js +1 -1
  25. package/dist/umd/descope-text-index-js.js +1 -1
  26. package/dist/umd/index.js +1 -1
  27. package/package.json +1 -1
  28. package/src/baseClasses/BaseInputClass.js +1 -1
  29. package/src/components/descope-button/Button.js +14 -10
  30. package/src/components/descope-checkbox/Checkbox.js +8 -5
  31. package/src/components/descope-container/Container.js +12 -7
  32. package/src/components/descope-date-picker/index.js +3 -3
  33. package/src/components/descope-divider/Divider.js +35 -30
  34. package/src/components/descope-email-field/EmailField.js +3 -3
  35. package/src/components/descope-link/Link.js +19 -27
  36. package/src/components/descope-loader-linear/LoaderLinear.js +12 -7
  37. package/src/components/descope-loader-radial/LoaderRadial.js +5 -5
  38. package/src/components/descope-logo/Logo.js +4 -4
  39. package/src/components/descope-number-field/NumberField.js +3 -3
  40. package/src/components/descope-passcode/Passcode.js +55 -71
  41. package/src/components/descope-passcode/descope-passcode-internal/PasscodeInternal.js +1 -1
  42. package/src/components/descope-password-field/PasswordField.js +3 -3
  43. package/src/components/descope-switch-toggle/SwitchToggle.js +8 -5
  44. package/src/components/descope-text/Text.js +18 -9
  45. package/src/components/descope-text-area/TextArea.js +7 -6
  46. package/src/components/descope-text-field/TextField.js +3 -3
  47. package/src/components/descope-text-field/textFieldMappings.js +3 -5
  48. package/src/constants.js +1 -0
  49. package/src/dev/index.js +2 -2
  50. package/src/{componentsHelpers/createProxy/helpers.js → helpers/componentHelpers.js} +13 -5
  51. package/src/{helpers.js → helpers/index.js} +5 -2
  52. package/src/helpers/themeHelpers/componentsThemeManager.js +40 -0
  53. package/src/{themeHelpers → helpers/themeHelpers}/index.js +56 -21
  54. package/src/index.cjs.js +1 -1
  55. package/src/index.js +5 -5
  56. package/src/index.umd.js +4 -0
  57. package/src/{componentsHelpers/createProxy/index.js → mixins/createProxy.js} +4 -4
  58. package/src/{componentsHelpers → mixins}/createStyleMixin/helpers.js +14 -15
  59. package/src/mixins/createStyleMixin/index.js +109 -0
  60. package/src/{componentsHelpers → mixins}/index.js +2 -6
  61. package/src/theme/components/button.js +2 -2
  62. package/src/theme/components/checkbox.js +2 -1
  63. package/src/theme/components/container.js +2 -2
  64. package/src/theme/components/divider.js +17 -9
  65. package/src/theme/components/link.js +1 -1
  66. package/src/theme/components/loader/loaderLinear.js +1 -1
  67. package/src/theme/components/loader/loaderRadial.js +1 -1
  68. package/src/theme/components/text.js +1 -1
  69. package/src/theme/components/textArea.js +2 -1
  70. package/src/theme/components/textField.js +1 -1
  71. package/src/theme/globals.js +3 -3
  72. package/dist/umd/442.js +0 -1
  73. package/dist/umd/942.js +0 -1
  74. package/dist/umd/descope-combo-index-js.js +0 -1
  75. package/src/components/descope-combo/index.js +0 -27
  76. package/src/componentsHelpers/compose.js +0 -3
  77. package/src/componentsHelpers/createStyleMixin/index.js +0 -114
  78. package/src/componentsHelpers/enforceNestingElementsStylesMixin.js +0 -103
  79. /package/dist/umd/{725.js.LICENSE.txt → 666.js.LICENSE.txt} +0 -0
  80. /package/src/{themeHelpers/processColors.js → helpers/themeHelpers/colorsHelpers.js} +0 -0
  81. /package/src/{componentsHelpers → mixins}/componentNameValidationMixin.js +0 -0
  82. /package/src/{componentsHelpers → mixins}/draggableMixin.js +0 -0
  83. /package/src/{componentsHelpers → mixins}/hoverableMixin.js +0 -0
  84. /package/src/{componentsHelpers → mixins}/inputMixin.js +0 -0
  85. /package/src/{componentsHelpers → mixins}/proxyInputMixin.js +0 -0
@@ -1,20 +1,20 @@
1
1
  import {
2
- getComponentName,
3
2
  createStyleMixin,
4
3
  draggableMixin,
5
4
  createProxy,
6
5
  proxyInputMixin,
7
- compose,
8
6
  componentNameValidationMixin
9
- } from '../../componentsHelpers';
10
- import { matchHostStyle } from '../../componentsHelpers/createStyleMixin/helpers';
7
+ } from '../../mixins';
8
+ import { compose } from '../../helpers';
9
+ import { getComponentName } from '../../helpers/componentHelpers';
11
10
 
12
11
  export const componentName = getComponentName('text-area');
13
12
 
14
13
  const selectors = {
15
14
  label: '::part(label)',
16
15
  input: '::part(input-field)',
17
- required: '::part(required-indicator)::after'
16
+ required: '::part(required-indicator)::after',
17
+ host: () => ':host'
18
18
  };
19
19
 
20
20
  let overrides = ``;
@@ -25,7 +25,7 @@ const TextArea = compose(
25
25
  resize: { selector: '> textarea' },
26
26
  color: { selector: selectors.label },
27
27
  cursor: {},
28
- width: matchHostStyle(),
28
+ width: { selector: selectors.host },
29
29
  backgroundColor: { selector: selectors.input },
30
30
  borderWidth: { selector: selectors.input },
31
31
  borderStyle: { selector: selectors.input },
@@ -55,6 +55,7 @@ overrides = `
55
55
 
56
56
  vaadin-text-area {
57
57
  margin: 0;
58
+ width: 100%;
58
59
  }
59
60
  vaadin-text-area > label,
60
61
  vaadin-text-area::part(input-field) {
@@ -1,13 +1,13 @@
1
1
  import {
2
- getComponentName,
3
2
  createStyleMixin,
4
3
  draggableMixin,
5
4
  createProxy,
6
5
  proxyInputMixin,
7
- compose,
8
6
  componentNameValidationMixin
9
- } from '../../componentsHelpers';
7
+ } from '../../mixins';
10
8
  import textFieldMappings from '../descope-text-field/textFieldMappings';
9
+ import { compose } from '../../helpers';
10
+ import { getComponentName } from '../../helpers/componentHelpers';
11
11
 
12
12
  export const componentName = getComponentName('text-field');
13
13
 
@@ -1,17 +1,15 @@
1
- import { matchHostStyle } from '../../componentsHelpers/createStyleMixin/helpers';
2
-
3
1
  const selectors = {
4
2
  label: '::part(label)',
5
3
  input: '::part(input-field)',
6
4
  readOnlyInput: '[readonly]::part(input-field)::after',
7
- placeholder: '> input:placeholder-shown'
5
+ placeholder: '> input:placeholder-shown',
6
+ host: () => ':host'
8
7
  };
9
8
 
10
9
  export default {
11
- color: { selector: selectors.input },
12
10
  backgroundColor: { selector: selectors.input },
13
11
  color: { selector: selectors.input },
14
- width: matchHostStyle({}),
12
+ width: { selector: selectors.host },
15
13
  borderColor: [
16
14
  { selector: selectors.input },
17
15
  { selector: selectors.readOnlyInput }
package/src/constants.js CHANGED
@@ -1 +1,2 @@
1
1
  export const DESCOPE_PREFIX = 'descope';
2
+ export const CSS_SELECTOR_SPECIFIER_MULTIPLY = 3
package/src/dev/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export {default as defaultTheme} from '../theme';
2
- export { themeToStyle } from '../themeHelpers';
1
+ export { default as defaultTheme } from '../theme';
2
+ export { themeToStyle } from '../helpers/themeHelpers';
@@ -1,3 +1,6 @@
1
+ import { kebabCaseJoin } from '.';
2
+ import { DESCOPE_PREFIX } from '../constants';
3
+
1
4
  const observeAttributes = (
2
5
  ele,
3
6
  callback,
@@ -50,12 +53,17 @@ export const syncAttrs = (ele1, ele2, options) => {
50
53
  observeAttributes(ele2, createSyncAttrsCb(ele2, ele1), options);
51
54
  };
52
55
 
56
+ export const getComponentName = (name) => kebabCaseJoin(DESCOPE_PREFIX, name);
57
+
58
+ export const getCssVarName = (...args) =>
59
+ `--${kebabCaseJoin(...args.filter((arg) => !!arg))}`;
60
+
53
61
  export const forwardAttrs = (source, dest, options = {}) => {
54
- observeAttributes(
55
- source,
56
- createSyncAttrsCb(source, dest, options.mapAttrs),
57
- options
58
- );
62
+ observeAttributes(
63
+ source,
64
+ createSyncAttrsCb(source, dest, options.mapAttrs),
65
+ options
66
+ );
59
67
  };
60
68
 
61
69
  export const forwardProps = (src, target, props = []) => {
@@ -1,3 +1,4 @@
1
+
1
2
  export const kebabCase = (str) =>
2
3
  str
3
4
  .replace(/([a-z])([A-Z])/g, '$1-$2')
@@ -6,5 +7,7 @@ export const kebabCase = (str) =>
6
7
 
7
8
  export const kebabCaseJoin = (...args) => kebabCase(args.join('-'));
8
9
 
9
- export const getCssVarName = (...args) =>
10
- `--${kebabCaseJoin(...args.filter((arg) => !!arg))}`;
10
+ export const compose = (...fns) =>
11
+ (val) =>
12
+ fns.reduceRight((res, fn) => fn(res), val);
13
+
@@ -0,0 +1,40 @@
1
+
2
+ class ComponentsThemeManager {
3
+ static mountOnPropName = 'DescopeThemeManager';
4
+
5
+ #themes = {};
6
+
7
+ #currentThemeName = 'light';
8
+
9
+ #callbacks = new Set();
10
+
11
+ #notify() {
12
+ this.#callbacks.forEach(cb => cb?.());
13
+ };
14
+
15
+ get currentThemeName() {
16
+ return this.#currentThemeName;
17
+ }
18
+
19
+ set currentThemeName(themeName) {
20
+ this.#currentThemeName = themeName;
21
+ this.#notify();
22
+ }
23
+
24
+ get currentTheme() {
25
+ return this.#themes[this.currentThemeName];
26
+ }
27
+
28
+ onCurrentThemeChange(cb) {
29
+ this.#callbacks.add(cb);
30
+
31
+ return () => { this.#callbacks.delete(cb); };
32
+ };
33
+
34
+ set themes(themes) {
35
+ this.#themes = themes;
36
+ this.#notify();
37
+ }
38
+ }
39
+
40
+ export const componentsThemeManager = new ComponentsThemeManager()
@@ -1,8 +1,8 @@
1
1
  import merge from 'lodash.merge';
2
2
  import set from 'lodash.set';
3
- import { DESCOPE_PREFIX } from '../constants';
4
- import { getCssVarName, kebabCase } from '../helpers';
5
- import { getComponentName } from '../componentsHelpers';
3
+ import { DESCOPE_PREFIX } from '../../constants';
4
+ import { kebabCase } from '..';
5
+ import { getComponentName, getCssVarName } from '../componentHelpers';
6
6
 
7
7
  const getVarName = (path) => getCssVarName(DESCOPE_PREFIX, ...path);
8
8
 
@@ -32,9 +32,9 @@ export const getThemeRefs = (theme, prefix) =>
32
32
  export const globalsThemeToStyle = (theme, themeName = '') => `
33
33
  *[data-theme="${themeName}"] {
34
34
  ${Object.entries(themeToCSSVarsObj(theme)).reduce(
35
- (acc, entry) => (acc += `${entry.join(':')};\n`),
36
- ''
37
- )}
35
+ (acc, entry) => (acc += `${entry.join(':')};\n`),
36
+ ''
37
+ )}
38
38
  }
39
39
  `;
40
40
 
@@ -42,10 +42,20 @@ const componentsThemeToStyleObj = (componentsTheme) =>
42
42
  transformTheme(componentsTheme, [], (path, val) => {
43
43
  const [component, ...restPath] = path;
44
44
  const property = restPath.pop();
45
+ const componentName = getComponentName(component);
46
+
47
+ // we need a support for portal components theme (e.g. overlay)
48
+ // this allows us to generate those themes under different sections
49
+ // if the theme has root level attribute that starts with #
50
+ // we are generating a new theme
51
+ let themeName = 'theme'
52
+
53
+ if (restPath[0] && restPath[0].startsWith('#')) {
54
+ themeName = restPath.shift();
55
+ }
45
56
 
46
57
  // do not start with underscore -> key:value, must have 2 no underscore attrs in a row
47
58
  // starts with underscore -> attribute selector
48
-
49
59
  const attrsSelector = restPath.reduce((acc, section, idx) => {
50
60
  if (section.startsWith('_'))
51
61
  return (acc += `[${kebabCase(section.replace(/^_/, ''))}="true"]`);
@@ -65,30 +75,53 @@ const componentsThemeToStyleObj = (componentsTheme) =>
65
75
  .join('')}"]`);
66
76
  }, '');
67
77
 
68
- let selector = `${getComponentName(component)}${attrsSelector}`;
78
+ let selector = `:host${attrsSelector ? `(${attrsSelector})` : ''}`;
69
79
 
70
80
  return {
71
- [selector]: {
72
- [property]: val
81
+ [componentName]: {
82
+ [themeName]: {
83
+ [selector]: {
84
+ [property]: val
85
+ }
86
+ }
73
87
  }
74
88
  };
75
89
  });
76
90
 
77
- export const componentsThemeToStyle = (componentsTheme, themeName = '') =>
78
- Object.entries(componentsThemeToStyleObj(componentsTheme)).reduce(
91
+
92
+ export const createComponentsTheme = (componentsTheme) => {
93
+ const styleObj = componentsThemeToStyleObj(componentsTheme);
94
+
95
+ return Object.keys(styleObj).reduce(
96
+ (acc, componentName) => {
97
+ const componentThemes = styleObj[componentName];
98
+
99
+ return Object.assign(acc, {
100
+ [componentName]: Object.keys(componentThemes)
101
+ .reduce((acc, theme) =>
102
+ Object.assign(acc, { [theme]: componentsThemeToStyle(componentThemes[theme]) }),
103
+ {})
104
+ })
105
+ },
106
+ {}
107
+ );
108
+ }
109
+
110
+ const componentsThemeToStyle = (componentsTheme) =>
111
+ Object.entries(componentsTheme).reduce(
79
112
  (acc, [selector, vars]) =>
80
- (acc += `*[data-theme="${themeName}"] ${selector} { \n${Object.entries(
81
- vars
82
- )
83
- .map(([key, val]) => `${key}: ${val}`)
84
- .join(';\n')} \n}\n\n`),
113
+ (acc += `${selector} { \n${Object.entries(
114
+ vars
115
+ )
116
+ .map(([key, val]) => `${key}: ${val}`)
117
+ .join(';\n')} \n}\n\n`),
85
118
  ''
86
119
  );
87
120
 
88
- export const themeToStyle = ({ globals, components }, themeName) => `
89
- ${globalsThemeToStyle(globals, themeName)}
90
- ${componentsThemeToStyle(components, themeName)}
91
- `;
121
+ export const themeToStyle = ({ globals, components }, themeName) => ({
122
+ globals: globalsThemeToStyle(globals, themeName),
123
+ components: createComponentsTheme(components)
124
+ });
92
125
 
93
126
  const useVar = (varName) => `var(${varName})`;
94
127
 
@@ -107,3 +140,5 @@ export const createHelperVars = (theme, prefix) => {
107
140
 
108
141
  return [res.theme, res.useVars, res.vars];
109
142
  };
143
+
144
+ export { componentsThemeManager } from './componentsThemeManager'
package/src/index.cjs.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // CJS is used by screen-renderer-service, we cannot load vaadin there,
2
2
  // so we are exporting only the css generation stuff
3
- export * from './themeHelpers';
3
+ export * from './helpers/themeHelpers';
package/src/index.js CHANGED
@@ -2,7 +2,6 @@ import './components/descope-button';
2
2
  import './components/descope-checkbox';
3
3
  import './components/descope-loader-linear';
4
4
  import './components/descope-loader-radial';
5
- import './components/descope-combo';
6
5
  import './components/descope-container';
7
6
  import './components/descope-date-picker';
8
7
  import './components/descope-divider';
@@ -19,8 +18,9 @@ import './components/descope-text-field';
19
18
 
20
19
  export {
21
20
  globalsThemeToStyle,
22
- componentsThemeToStyle,
23
- themeToStyle
24
- } from './themeHelpers';
25
- export { genColor } from './themeHelpers/processColors';
21
+ createComponentsTheme,
22
+ themeToStyle,
23
+ componentsThemeManager
24
+ } from './helpers/themeHelpers';
25
+ export { genColor } from './helpers/themeHelpers/colorsHelpers';
26
26
  export { default as defaultTheme } from './theme';
package/src/index.umd.js CHANGED
@@ -1,3 +1,5 @@
1
+ const { componentsThemeManager } = require("./helpers/themeHelpers/componentsThemeManager");
2
+
1
3
  const components = import.meta.webpackContext('./components', {
2
4
  recursive: true,
3
5
  regExp: /index.js$/,
@@ -14,3 +16,5 @@ module.exports = components.keys().reduce((acc, key) => {
14
16
 
15
17
  return acc;
16
18
  }, {});
19
+
20
+ module.exports.componentsThemeManager = componentsThemeManager
@@ -1,7 +1,7 @@
1
- import compose from '../compose';
2
- import { DescopeBaseClass } from '../../baseClasses/DescopeBaseClass';
3
- import { hoverableMixin } from '../hoverableMixin';
4
- import { syncAttrs, forwardProps } from './helpers';
1
+ import { DescopeBaseClass } from '../baseClasses/DescopeBaseClass';
2
+ import { compose } from '../helpers';
3
+ import { forwardProps, syncAttrs } from '../helpers/componentHelpers';
4
+ import { hoverableMixin } from './hoverableMixin';
5
5
 
6
6
  export const createProxy = ({
7
7
  componentName,
@@ -1,4 +1,5 @@
1
- import { getCssVarName, kebabCase } from '../../helpers';
1
+ import { kebabCase } from '../../helpers';
2
+ import { getCssVarName } from '../../helpers/componentHelpers';
2
3
 
3
4
  const createCssVarFallback = (first, ...rest) =>
4
5
  `var(${first}${rest.length ? ` , ${createCssVarFallback(...rest)}` : ''})`;
@@ -9,11 +10,10 @@ const createCssSelector = (
9
10
  ) =>
10
11
  typeof relativeSelectorOrSelectorFn === 'function'
11
12
  ? relativeSelectorOrSelectorFn(baseSelector)
12
- : `${baseSelector}${
13
- /^[A-Za-z]/.test(relativeSelectorOrSelectorFn)
14
- ? ` ${relativeSelectorOrSelectorFn}`
15
- : relativeSelectorOrSelectorFn
16
- }`;
13
+ : `${baseSelector}${/^[A-Za-z]/.test(relativeSelectorOrSelectorFn)
14
+ ? ` ${relativeSelectorOrSelectorFn}`
15
+ : relativeSelectorOrSelectorFn
16
+ }`;
17
17
 
18
18
  class StyleBuilder {
19
19
  constructor() {
@@ -34,9 +34,9 @@ class StyleBuilder {
34
34
  toString() {
35
35
  return Array.from(this.styleMap.entries()).reduce(
36
36
  (style, [selector, propValArr]) =>
37
- (style += `${selector} { \n${propValArr
38
- .map(({ property, value }) => `${property}: ${value}`)
39
- .join(';\n')} \n}\n\n`),
37
+ (style += `${selector} { \n${propValArr
38
+ .map(({ property, value }) => `${property}: ${value}`)
39
+ .join(';\n')} \n}\n\n`),
40
40
  ''
41
41
  );
42
42
  }
@@ -82,9 +82,8 @@ export const createCssVarsList = (componentName, mappings) =>
82
82
  {}
83
83
  );
84
84
 
85
- // match the host selector with the inner element selector
86
- // e.g. when we want to set the same size for the host & the inner element this can be useful
87
- export const matchHostStyle = (mappingObj = {}) => [
88
- mappingObj,
89
- { ...mappingObj, selector: () => `:host${mappingObj.selector || ''}` }
90
- ];
85
+ // on some cases we need a selector to be more specific than another
86
+ // for this we have this fn that generate a class selector multiple times
87
+ export const createClassSelectorSpecifier = (className, numOfRepeats) => Array(numOfRepeats)
88
+ .fill(`.${className}`)
89
+ .join('')
@@ -0,0 +1,109 @@
1
+ import { CSS_SELECTOR_SPECIFIER_MULTIPLY } from '../../constants';
2
+ import { kebabCaseJoin } from '../../helpers';
3
+ import { getCssVarName } from '../../helpers/componentHelpers';
4
+ import { componentsThemeManager } from '../../helpers/themeHelpers/componentsThemeManager';
5
+ import { createStyle, createCssVarsList, createClassSelectorSpecifier } from './helpers';
6
+
7
+ export const createStyleMixin =
8
+ ({ mappings = {} }) =>
9
+ (superclass) => {
10
+ const styleAttributes = Object.keys(mappings).map((key) =>
11
+ kebabCaseJoin('st', key)
12
+ );
13
+ return class CustomStyleMixinClass extends superclass {
14
+ static get observedAttributes() {
15
+ const superAttrs = superclass.observedAttributes || [];
16
+ return [...superAttrs, ...styleAttributes];
17
+ }
18
+
19
+ static get cssVarList() {
20
+ return createCssVarsList(superclass.componentName, {
21
+ ...mappings,
22
+ });
23
+ }
24
+
25
+ #overrideStyleEle = null;
26
+ #themeStyleEle = null;
27
+ #disconnectThemeManager
28
+
29
+ constructor() {
30
+ super();
31
+
32
+ this.classList.add(superclass.componentName)
33
+
34
+ this.#createComponentStyle();
35
+ this.#createComponentTheme();
36
+ this.#createAttrOverrideStyle();
37
+ }
38
+
39
+ get componentTheme() {
40
+ return componentsThemeManager.currentTheme?.[superclass.componentName] || ''
41
+ }
42
+
43
+ onComponentThemeChange() {
44
+ this.#themeStyleEle.innerHTML = this.componentTheme.theme
45
+ }
46
+
47
+ #createComponentTheme() {
48
+ this.#themeStyleEle = document.createElement('style');
49
+ this.#themeStyleEle.id = 'style-mixin-component-theme';
50
+ this.shadowRoot.prepend(this.#themeStyleEle);
51
+ this.#disconnectThemeManager = componentsThemeManager.onCurrentThemeChange(this.onComponentThemeChange.bind(this))
52
+ this.onComponentThemeChange()
53
+ }
54
+
55
+ #createAttrOverrideStyle() {
56
+ this.#overrideStyleEle = document.createElement('style');
57
+ this.#overrideStyleEle.id = 'style-mixin-overrides';
58
+
59
+ const classSpecifier = createClassSelectorSpecifier(superclass.componentName, CSS_SELECTOR_SPECIFIER_MULTIPLY);
60
+ this.#overrideStyleEle.innerText = `:host(${classSpecifier}) {}`;
61
+ this.shadowRoot.append(this.#overrideStyleEle);
62
+ }
63
+
64
+ #updateAttrOverrideStyle(attrName, value) {
65
+ const style = this.#overrideStyleEle.sheet?.cssRules[0].style;
66
+ const varName = getCssVarName(
67
+ superclass.componentName,
68
+ attrName.replace(/^st-/, '')
69
+ );
70
+
71
+ if (value) style?.setProperty(varName, value);
72
+ else style?.removeProperty(varName);
73
+ }
74
+
75
+ #createComponentStyle() {
76
+ const themeStyle = document.createElement('style');
77
+ themeStyle.id = 'style-mixin-component';
78
+ themeStyle.innerHTML = createStyle(
79
+ superclass.componentName,
80
+ this.baseSelector,
81
+ mappings
82
+ );
83
+ this.shadowRoot.prepend(themeStyle);
84
+ }
85
+
86
+ attributeChangedCallback(attrName, oldValue, newValue) {
87
+ super.attributeChangedCallback?.(attrName, oldValue, newValue);
88
+
89
+ if (styleAttributes.includes(attrName)) {
90
+ this.#updateAttrOverrideStyle(attrName, newValue);
91
+ }
92
+ }
93
+
94
+ connectedCallback() {
95
+ super.connectedCallback?.();
96
+ if (this.shadowRoot.isConnected) {
97
+ Array.from(this.attributes).forEach((attr) => {
98
+ if (styleAttributes.includes(attr.nodeName)) {
99
+ this.#updateAttrOverrideStyle(attr.nodeName, attr.value);
100
+ }
101
+ });
102
+ }
103
+ }
104
+
105
+ disconnectedCallback() {
106
+ this.#disconnectThemeManager?.();
107
+ }
108
+ };
109
+ };
@@ -1,11 +1,7 @@
1
- import { DESCOPE_PREFIX } from '../constants';
2
- import { kebabCaseJoin } from '../helpers';
3
-
4
- export const getComponentName = (name) => kebabCaseJoin(DESCOPE_PREFIX, name);
5
-
6
1
  export { createStyleMixin } from './createStyleMixin';
7
2
  export { draggableMixin } from './draggableMixin';
8
3
  export { createProxy } from './createProxy';
9
4
  export { proxyInputMixin } from './proxyInputMixin';
10
5
  export { componentNameValidationMixin } from './componentNameValidationMixin';
11
- export { default as compose } from './compose'
6
+ export { hoverableMixin } from './hoverableMixin';
7
+ export { inputMixin } from './inputMixin'
@@ -1,5 +1,5 @@
1
1
  import globals from '../globals';
2
- import { getThemeRefs, createHelperVars } from '../../themeHelpers';
2
+ import { getThemeRefs, createHelperVars } from '../../helpers/themeHelpers';
3
3
  import Button, { componentName } from '../../components/descope-button/Button';
4
4
 
5
5
  const globalRefs = getThemeRefs(globals);
@@ -17,7 +17,7 @@ const [helperTheme, helperRefs] = createHelperVars({ mode }, componentName);
17
17
 
18
18
  const button = {
19
19
  ...helperTheme,
20
-
20
+ [vars.width]: 'fit-content',
21
21
  size: {
22
22
  xs: {
23
23
  [vars.height]: '10px',
@@ -3,7 +3,8 @@ import Checkbox from '../../components/descope-checkbox/Checkbox';
3
3
  const vars = Checkbox.cssVarList;
4
4
 
5
5
  const checkbox = {
6
- [vars.cursor]: 'pointer'
6
+ [vars.cursor]: 'pointer',
7
+ [vars.width]: 'fit-content'
7
8
  };
8
9
 
9
10
  export default checkbox;
@@ -1,5 +1,5 @@
1
1
  import globals from "../globals";
2
- import { getThemeRefs, createHelperVars } from "../../themeHelpers";
2
+ import { getThemeRefs, createHelperVars } from "../../helpers/themeHelpers";
3
3
  import Container from "../../components/descope-container/Container";
4
4
 
5
5
  const globalRefs = getThemeRefs(globals);
@@ -27,7 +27,7 @@ const [helperTheme, helperRefs, helperVars] =
27
27
 
28
28
  const container = {
29
29
  ...helperTheme,
30
- [vars.display]: 'flex',
30
+ [vars.width]: '100%',
31
31
  verticalPadding: {
32
32
  sm: { [vars.verticalPadding]: '5px' },
33
33
  md: { [vars.verticalPadding]: '10px' },
@@ -1,26 +1,34 @@
1
- import Divider from '../../components/descope-divider/Divider';
1
+ import Divider, { componentName } from '../../components/descope-divider/Divider';
2
+ import { createHelperVars } from '../../helpers/themeHelpers';
2
3
 
3
4
  const vars = Divider.cssVarList;
4
5
 
6
+ const thickness = '2px'
7
+ const textPaddingSize = '10px'
8
+ const [helperTheme, helperRefs] = createHelperVars({ thickness, textPaddingSize }, componentName);
9
+
10
+
5
11
  const divider = {
12
+ ...helperTheme,
6
13
  [vars.alignItems]: 'center',
7
- [vars.height]: '2px',
14
+ [vars.dividerHeight]: helperRefs.thickness,
8
15
  [vars.backgroundColor]: 'currentColor',
9
16
  [vars.opacity]: '0.2',
10
- [vars.padding]: '0 10px',
17
+ [vars.textPadding]: `0 ${helperRefs.textPaddingSize}`,
11
18
  [vars.width]: '100%',
12
19
  [vars.flexDirection]: 'row',
13
20
  [vars.alignSelf]: 'strech',
14
21
  [vars.textWidth]: 'fit-content',
22
+ [vars.maxTextWidth]: 'calc(100% - 100px)',
15
23
  _vertical: {
16
- [vars.width]: '2px',
17
- [vars.padding]: '10px 0',
24
+ [vars.padding]: `0 calc(${thickness} * 3)`,
25
+ [vars.width]: 'fit-content',
26
+ [vars.textPadding]: `${helperRefs.textPaddingSize} 0`,
18
27
  [vars.flexDirection]: 'column',
19
28
  [vars.minHeight]: '200px',
20
- [vars.textWidth]: 'max-content'
21
- },
22
- _italic: {
23
- [vars.fontStyle]: 'italic'
29
+ [vars.textWidth]: 'fit-content',
30
+ [vars.dividerWidth]: helperRefs.thickness,
31
+ [vars.maxTextWidth]: '100%',
24
32
  }
25
33
  };
26
34
 
@@ -1,5 +1,5 @@
1
1
  import globals from '../globals';
2
- import { getThemeRefs } from '../../themeHelpers';
2
+ import { getThemeRefs } from '../../helpers/themeHelpers';
3
3
  import Link from '../../components/descope-link/Link';
4
4
 
5
5
  const globalRefs = getThemeRefs(globals);
@@ -1,5 +1,5 @@
1
1
  import LoaderLinear from '../../../components/descope-loader-linear/LoaderLinear';
2
- import { getThemeRefs } from '../../../themeHelpers';
2
+ import { getThemeRefs } from '../../../helpers/themeHelpers';
3
3
  import globals from '../../globals';
4
4
 
5
5
  const globalRefs = getThemeRefs(globals);
@@ -1,5 +1,5 @@
1
1
  import LoaderRadial from '../../../components/descope-loader-radial/LoaderRadial';
2
- import { getThemeRefs } from '../../../themeHelpers';
2
+ import { getThemeRefs } from '../../../helpers/themeHelpers';
3
3
  import globals from '../../globals';
4
4
 
5
5
  const globalRefs = getThemeRefs(globals);
@@ -1,5 +1,5 @@
1
1
  import globals from '../globals';
2
- import { getThemeRefs } from '../../themeHelpers';
2
+ import { getThemeRefs } from '../../helpers/themeHelpers';
3
3
  import Text from '../../components/descope-text/Text';
4
4
 
5
5
  const globalRefs = getThemeRefs(globals);
@@ -1,11 +1,12 @@
1
1
  import globals from '../globals';
2
- import { getThemeRefs } from '../../themeHelpers';
2
+ import { getThemeRefs } from '../../helpers/themeHelpers';
3
3
  import TextArea from '../../components/descope-text-area/TextArea';
4
4
 
5
5
  const globalRefs = getThemeRefs(globals);
6
6
  const vars = TextArea.cssVarList;
7
7
 
8
8
  const textArea = {
9
+ [vars.width]: '100%',
9
10
  [vars.color]: globalRefs.colors.primary.main,
10
11
  [vars.backgroundColor]: globalRefs.colors.surface.light,
11
12
  [vars.resize]: 'vertical',