@descope/web-components-ui 1.0.387 → 1.0.388

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.
@@ -0,0 +1,111 @@
1
+ import { createBaseClass } from '../../baseClasses/createBaseClass';
2
+ import { compose } from '../../helpers';
3
+ import { getComponentName } from '../../helpers/componentHelpers';
4
+ import { componentNameValidationMixin, createStyleMixin, draggableMixin } from '../../mixins';
5
+ import { createDynamicDataMixin } from '../../mixins/createDynamicDataMixin';
6
+ import { CheckboxClass } from '../boolean-fields/descope-checkbox/CheckboxClass';
7
+ import { SwitchToggleClass } from '../boolean-fields/descope-switch-toggle/SwitchToggleClass';
8
+
9
+ export const componentName = getComponentName('scopes-list');
10
+ const variants = ['checkbox', 'switch'];
11
+
12
+ const itemRenderer = ({ id, desc, required = false }, _, ref) => {
13
+ const ComponentClass = ref.variant === 'checkbox' ? CheckboxClass : SwitchToggleClass;
14
+
15
+ return `
16
+ <${ComponentClass.componentName}
17
+ bordered="true"
18
+ size=${ref.size}
19
+ label="${desc}"
20
+ data-id="${id}"
21
+ readonly="${required || ref.isReadOnly}"
22
+ required="${required}"
23
+ checked="true"
24
+ ></${ComponentClass.componentName}>
25
+ `;
26
+ };
27
+
28
+ class RawScopesList extends createBaseClass({ componentName, baseSelector: 'div' }) {
29
+ constructor() {
30
+ super();
31
+
32
+ this.attachShadow({ mode: 'open' }).innerHTML = `
33
+ <style>
34
+ :host {
35
+ display: inline-flex;
36
+ }
37
+
38
+ div {
39
+ display: flex;
40
+ flex-direction: column;
41
+ }
42
+
43
+ </style>
44
+ <div></div>
45
+ `;
46
+ }
47
+
48
+ get isReadOnly() {
49
+ return this.getAttribute('readonly') === 'true';
50
+ }
51
+
52
+ get size() {
53
+ return this.getAttribute('size') || 'sm';
54
+ }
55
+
56
+ get value() {
57
+ return Array.from(this.shadowRoot.querySelector('div').children).reduce(
58
+ (acc, el) => ({ ...acc, [el.getAttribute('data-id')]: el.checked }),
59
+ {}
60
+ );
61
+ }
62
+
63
+ get variant() {
64
+ const variant = this.getAttribute('variant');
65
+
66
+ return variants.includes(variant) ? variant : variants[0];
67
+ }
68
+ }
69
+
70
+ export const ScopesListClass = compose(
71
+ createStyleMixin({
72
+ mappings: {
73
+ hostWidth: { selector: () => ':host', property: 'width' },
74
+ hostDirection: [
75
+ { selector: () => ':host', property: 'direction' },
76
+ {
77
+ selector: () => CheckboxClass.componentName,
78
+ property: CheckboxClass.cssVarList.hostDirection,
79
+ },
80
+ {
81
+ selector: () => SwitchToggleClass.componentName,
82
+ property: SwitchToggleClass.cssVarList.hostDirection,
83
+ },
84
+ ],
85
+ gap: { selector: () => 'div', property: 'gap' },
86
+ requiredInputBorderColor: [
87
+ {
88
+ selector: `${CheckboxClass.componentName}[required="true"]`,
89
+ property: CheckboxClass.cssVarList.inputBorderColor,
90
+ },
91
+ {
92
+ selector: `${SwitchToggleClass.componentName}[required="true"]`,
93
+ property: SwitchToggleClass.cssVarList.inputBorderColor,
94
+ },
95
+ ],
96
+ requiredInputValueTextColor: [
97
+ {
98
+ selector: `${CheckboxClass.componentName}[required="true"]`,
99
+ property: CheckboxClass.cssVarList.inputValueTextColor,
100
+ },
101
+ {
102
+ selector: `${SwitchToggleClass.componentName}[required="true"]`,
103
+ property: SwitchToggleClass.cssVarList.knobColor,
104
+ },
105
+ ],
106
+ },
107
+ }),
108
+ createDynamicDataMixin({ itemRenderer, rerenderAttrsList: ['size', 'variant'] }),
109
+ draggableMixin,
110
+ componentNameValidationMixin
111
+ )(RawScopesList);
@@ -0,0 +1,7 @@
1
+ import { componentName, ScopesListClass } from './ScopesListClass';
2
+ import '../descope-list';
3
+ import '../boolean-fields/descope-checkbox';
4
+
5
+ customElements.define(componentName, ScopesListClass);
6
+
7
+ export { ScopesListClass };
package/src/index.cjs.js CHANGED
@@ -52,3 +52,4 @@ export { CalendarClass } from './components/descope-date-field/descope-calendar/
52
52
  export { ListClass } from './components/descope-list/ListClass';
53
53
  export { ListItemClass } from './components/descope-list/ListItemClass';
54
54
  export { AppsListClass } from './components/descope-apps-list/AppsListClass';
55
+ export { ScopesListClass } from './components/descope-scopes-list/ScopesListClass';
package/src/index.js CHANGED
@@ -44,6 +44,7 @@ export * from './components/descope-code-snippet';
44
44
  export * from './components/descope-radio-group';
45
45
  export * from './components/descope-list';
46
46
  export * from './components/descope-apps-list';
47
+ export * from './components/descope-scopes-list';
47
48
 
48
49
  export {
49
50
  globalsThemeToStyle,
@@ -75,18 +75,14 @@ export const createDynamicDataMixin =
75
75
  init() {
76
76
  super.init?.();
77
77
 
78
- if (rerenderAttrsList.length) {
79
- observeAttributes(
80
- this,
81
- (attrs) => {
82
- if (attrs.includes('data')) this.#handleDataAttr();
83
- if (attrs.some((attr) => attr !== 'data')) this.#renderItems();
84
- },
85
- { includeAttrs: [...rerenderAttrsList, 'data'] }
86
- );
87
- } else {
88
- this.#renderItems();
89
- }
78
+ observeAttributes(
79
+ this,
80
+ (attrs) => {
81
+ if (attrs.includes('data')) this.#handleDataAttr();
82
+ else this.#renderItems();
83
+ },
84
+ { includeAttrs: [...rerenderAttrsList, 'data'] }
85
+ );
90
86
  }
91
87
 
92
88
  #handleDataAttr() {
@@ -95,25 +91,10 @@ export const createDynamicDataMixin =
95
91
  if (!dataAttr) return;
96
92
 
97
93
  try {
98
- this.#data = JSON.parse(dataAttr);
94
+ this.data = JSON.parse(dataAttr);
99
95
  } catch (e) {
100
96
  // eslint-disable-next-line no-console
101
97
  console.warn('Invalid JSON data', dataAttr);
102
98
  }
103
99
  }
104
-
105
- attributeChangedCallback(name, oldValue, newValue) {
106
- super.attributeChangedCallback?.(name, oldValue, newValue);
107
-
108
- if (newValue === oldValue) return;
109
-
110
- if (name === 'data') {
111
- try {
112
- this.data = JSON.parse(newValue);
113
- } catch (e) {
114
- // eslint-disable-next-line no-console
115
- console.warn('Invalid JSON data', newValue);
116
- }
117
- }
118
- }
119
100
  };
@@ -25,14 +25,7 @@ const checkbox = {
25
25
  [vars.inputBorderStyle]: refs.borderStyle,
26
26
  [vars.inputBackgroundColor]: refs.backgroundColor,
27
27
  [vars.inputSize]: checkboxSize,
28
-
29
- _checked: {
30
- [vars.inputValueTextColor]: refs.valueTextColor,
31
- },
32
-
33
- _disabled: {
34
- [vars.labelTextColor]: refs.labelTextColor,
35
- },
28
+ [vars.inputValueTextColor]: refs.valueTextColor,
36
29
  };
37
30
 
38
31
  export default checkbox;
@@ -46,6 +46,7 @@ import * as dateField from './dateField';
46
46
  import * as list from './list/list';
47
47
  import * as listItem from './list/listItem';
48
48
  import * as appsList from './appsList';
49
+ import * as scopesList from './scopesList';
49
50
 
50
51
  const components = {
51
52
  button,
@@ -97,6 +98,7 @@ const components = {
97
98
  list,
98
99
  listItem,
99
100
  appsList,
101
+ scopesList,
100
102
  };
101
103
 
102
104
  const theme = Object.keys(components).reduce(
@@ -0,0 +1,15 @@
1
+ import { ScopesListClass } from '../../components/descope-scopes-list/ScopesListClass';
2
+ import theme, { vars as inputVars } from './inputWrapper';
3
+
4
+ export const vars = ScopesListClass.cssVarList;
5
+
6
+ const scopesList = {
7
+ [vars.requiredInputBorderColor]: theme._disabled[inputVars.borderColor],
8
+ [vars.requiredInputValueTextColor]: theme._disabled[inputVars.valueTextColor],
9
+ [vars.hostWidth]: '280px',
10
+ _fullWidth: {
11
+ [vars.hostWidth]: '100%',
12
+ },
13
+ };
14
+
15
+ export default scopesList;