@descope/web-components-ui 1.0.367 → 1.0.368
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index.esm.js +429 -424
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/index.js +2 -0
package/dist/index.esm.js
CHANGED
@@ -11877,6 +11877,383 @@ const RadioGroupClass = compose(
|
|
11877
11877
|
customElements.define(componentName$4, RadioGroupClass);
|
11878
11878
|
customElements.define(componentName$5, RadioButtonClass);
|
11879
11879
|
|
11880
|
+
const activeableMixin = (superclass) =>
|
11881
|
+
class ActiveableMixinClass extends superclass {
|
11882
|
+
init() {
|
11883
|
+
super.init?.();
|
11884
|
+
|
11885
|
+
this.baseElement.addEventListener('mousedown', (e) => {
|
11886
|
+
e.preventDefault();
|
11887
|
+
this.setAttribute('active', 'true');
|
11888
|
+
window.addEventListener('mouseup', () => this.removeAttribute('active'), {
|
11889
|
+
once: true,
|
11890
|
+
});
|
11891
|
+
});
|
11892
|
+
}
|
11893
|
+
};
|
11894
|
+
|
11895
|
+
const componentName$3 = getComponentName('list-item');
|
11896
|
+
|
11897
|
+
const customMixin$1 = (superclass) =>
|
11898
|
+
class ListItemMixinClass extends superclass {
|
11899
|
+
constructor() {
|
11900
|
+
super();
|
11901
|
+
|
11902
|
+
this.attachShadow({ mode: 'open' }).innerHTML = `
|
11903
|
+
<style>
|
11904
|
+
/*css*/
|
11905
|
+
slot {
|
11906
|
+
width: 100%;
|
11907
|
+
display: flex;
|
11908
|
+
overflow: hidden;
|
11909
|
+
box-sizing: border-box;
|
11910
|
+
}
|
11911
|
+
:host {
|
11912
|
+
display: block;
|
11913
|
+
}
|
11914
|
+
|
11915
|
+
/*!css*/
|
11916
|
+
</style>
|
11917
|
+
<slot></slot>
|
11918
|
+
`;
|
11919
|
+
}
|
11920
|
+
};
|
11921
|
+
|
11922
|
+
const ListItemClass = compose(
|
11923
|
+
createStyleMixin({
|
11924
|
+
mappings: {
|
11925
|
+
padding: {},
|
11926
|
+
backgroundColor: {},
|
11927
|
+
borderColor: {},
|
11928
|
+
borderStyle: {},
|
11929
|
+
borderWidth: {},
|
11930
|
+
borderRadius: {},
|
11931
|
+
outline: {},
|
11932
|
+
cursor: {},
|
11933
|
+
gap: {},
|
11934
|
+
maxWidth: { selector: () => ':host' },
|
11935
|
+
alignItems: {},
|
11936
|
+
flexDirection: {},
|
11937
|
+
transition: {},
|
11938
|
+
},
|
11939
|
+
}),
|
11940
|
+
draggableMixin,
|
11941
|
+
componentNameValidationMixin,
|
11942
|
+
customMixin$1,
|
11943
|
+
activeableMixin
|
11944
|
+
)(createBaseClass({ componentName: componentName$3, baseSelector: 'slot' }));
|
11945
|
+
|
11946
|
+
const componentName$2 = getComponentName('list');
|
11947
|
+
|
11948
|
+
class RawList extends createBaseClass({ componentName: componentName$2, baseSelector: '.wrapper' }) {
|
11949
|
+
static get observedAttributes() {
|
11950
|
+
return ['variant'];
|
11951
|
+
}
|
11952
|
+
|
11953
|
+
constructor() {
|
11954
|
+
super();
|
11955
|
+
|
11956
|
+
this.attachShadow({ mode: 'open' }).innerHTML = `
|
11957
|
+
<style>
|
11958
|
+
/*css*/
|
11959
|
+
.wrapper {
|
11960
|
+
overflow: auto;
|
11961
|
+
display: grid;
|
11962
|
+
max-height: 100%;
|
11963
|
+
width: 100%;
|
11964
|
+
}
|
11965
|
+
|
11966
|
+
:host {
|
11967
|
+
display: inline-flex;
|
11968
|
+
width: 100%;
|
11969
|
+
}
|
11970
|
+
slot[name="empty-state"] {
|
11971
|
+
justify-content: center;
|
11972
|
+
align-items: center;
|
11973
|
+
display: flex;
|
11974
|
+
flex-grow: 1;
|
11975
|
+
}
|
11976
|
+
|
11977
|
+
:host slot[name="empty-state"] {
|
11978
|
+
display: none;
|
11979
|
+
}
|
11980
|
+
:host([empty]) slot[name="empty-state"] {
|
11981
|
+
display: flex;
|
11982
|
+
}
|
11983
|
+
::slotted(:not([slot])) {
|
11984
|
+
width: 100%;
|
11985
|
+
}
|
11986
|
+
/*!css*/
|
11987
|
+
</style>
|
11988
|
+
|
11989
|
+
<div class="wrapper">
|
11990
|
+
<slot></slot>
|
11991
|
+
<slot name="empty-state">
|
11992
|
+
No item...
|
11993
|
+
</slot>
|
11994
|
+
</div>
|
11995
|
+
`;
|
11996
|
+
}
|
11997
|
+
|
11998
|
+
get items() {
|
11999
|
+
return this.shadowRoot.querySelector('slot').assignedElements();
|
12000
|
+
}
|
12001
|
+
|
12002
|
+
#handleEmptyState() {
|
12003
|
+
if (this.items.length === 0) {
|
12004
|
+
this.setAttribute('empty', 'true');
|
12005
|
+
} else {
|
12006
|
+
this.removeAttribute('empty');
|
12007
|
+
}
|
12008
|
+
}
|
12009
|
+
|
12010
|
+
get variant() {
|
12011
|
+
return this.getAttribute('variant') || 'list';
|
12012
|
+
}
|
12013
|
+
|
12014
|
+
#handleItemsVariant() {
|
12015
|
+
this.items.forEach((item) => {
|
12016
|
+
let listItem = item;
|
12017
|
+
if (listItem.localName !== ListItemClass.componentName) {
|
12018
|
+
listItem = item.querySelector(ListItemClass.componentName);
|
12019
|
+
}
|
12020
|
+
|
12021
|
+
const listItemVariant = this.variant === 'tiles' ? 'tile' : 'row';
|
12022
|
+
listItem.setAttribute('variant', listItemVariant);
|
12023
|
+
});
|
12024
|
+
}
|
12025
|
+
|
12026
|
+
init() {
|
12027
|
+
super.init?.();
|
12028
|
+
|
12029
|
+
// we want new items to get the size
|
12030
|
+
observeChildren(this, () => {
|
12031
|
+
this.#handleEmptyState();
|
12032
|
+
this.#handleItemsVariant();
|
12033
|
+
});
|
12034
|
+
}
|
12035
|
+
|
12036
|
+
attributeChangedCallback(name, oldValue, newValue) {
|
12037
|
+
super.attributeChangedCallback?.(name, oldValue, newValue);
|
12038
|
+
|
12039
|
+
if (newValue === oldValue) return;
|
12040
|
+
|
12041
|
+
if (name === 'variant') {
|
12042
|
+
this.#handleItemsVariant();
|
12043
|
+
}
|
12044
|
+
}
|
12045
|
+
}
|
12046
|
+
|
12047
|
+
const ListClass = compose(
|
12048
|
+
createStyleMixin({
|
12049
|
+
mappings: {
|
12050
|
+
hostWidth: { selector: () => ':host', property: 'width' },
|
12051
|
+
maxHeight: { selector: () => ':host' },
|
12052
|
+
minHeight: {},
|
12053
|
+
verticalPadding: [{ property: 'padding-top' }, { property: 'padding-bottom' }],
|
12054
|
+
horizontalPadding: [{ property: 'padding-left' }, { property: 'padding-right' }],
|
12055
|
+
hostDirection: { selector: () => ':host', property: 'direction' },
|
12056
|
+
fontFamily: {},
|
12057
|
+
gap: {},
|
12058
|
+
|
12059
|
+
backgroundColor: {},
|
12060
|
+
borderRadius: {},
|
12061
|
+
borderColor: {},
|
12062
|
+
borderStyle: {},
|
12063
|
+
borderWidth: {},
|
12064
|
+
|
12065
|
+
boxShadow: {},
|
12066
|
+
gridTemplateColumns: {},
|
12067
|
+
maxItemsWidth: { selector: () => '::slotted(:not([slot]))', property: 'max-width' },
|
12068
|
+
minItemsWidth: { selector: () => '::slotted(:not([slot]))', property: 'min-width' },
|
12069
|
+
itemsHorizontalAlign: { selector: () => '::slotted(*)', property: 'justify-self' },
|
12070
|
+
emptyStateTextColor: { selector: () => 'slot[name="empty-state"]', property: 'color' },
|
12071
|
+
emptyStateTextFontFamily: {
|
12072
|
+
selector: () => 'slot[name="empty-state"]',
|
12073
|
+
property: 'font-family',
|
12074
|
+
},
|
12075
|
+
},
|
12076
|
+
}),
|
12077
|
+
draggableMixin,
|
12078
|
+
componentNameValidationMixin
|
12079
|
+
)(RawList);
|
12080
|
+
|
12081
|
+
customElements.define(componentName$2, ListClass);
|
12082
|
+
customElements.define(componentName$3, ListItemClass);
|
12083
|
+
|
12084
|
+
const defaultValidateSchema = () => true;
|
12085
|
+
const defaultItemRenderer = (item) => `<pre>${JSON.stringify(item, null, 4)}</pre>`;
|
12086
|
+
|
12087
|
+
const createTemplate = (templateString) => {
|
12088
|
+
const template = document.createElement('template');
|
12089
|
+
template.innerHTML = templateString;
|
12090
|
+
|
12091
|
+
return template;
|
12092
|
+
};
|
12093
|
+
|
12094
|
+
const getTemplateContent = (templateOrString) => {
|
12095
|
+
if (typeof templateOrString === 'string') {
|
12096
|
+
return createTemplate(templateOrString).content;
|
12097
|
+
}
|
12098
|
+
|
12099
|
+
if (templateOrString instanceof HTMLTemplateElement) {
|
12100
|
+
return templateOrString.content;
|
12101
|
+
}
|
12102
|
+
|
12103
|
+
// eslint-disable-next-line no-console
|
12104
|
+
console.error('Invalid template', templateOrString);
|
12105
|
+
return null;
|
12106
|
+
};
|
12107
|
+
|
12108
|
+
const createDynamicDataMixin =
|
12109
|
+
({
|
12110
|
+
itemRenderer = defaultItemRenderer,
|
12111
|
+
validateSchema = defaultValidateSchema,
|
12112
|
+
slotName,
|
12113
|
+
rerenderAttrsList = [],
|
12114
|
+
}) =>
|
12115
|
+
(superclass) =>
|
12116
|
+
class DynamicDataMixinClass extends superclass {
|
12117
|
+
#data = [];
|
12118
|
+
|
12119
|
+
// eslint-disable-next-line class-methods-use-this
|
12120
|
+
#validateSchema(data) {
|
12121
|
+
if (!validateSchema) return true;
|
12122
|
+
|
12123
|
+
const validation = validateSchema(data);
|
12124
|
+
if (validation === true) return true;
|
12125
|
+
|
12126
|
+
// eslint-disable-next-line no-console
|
12127
|
+
console.error('Data schema validation failed', validation || '');
|
12128
|
+
|
12129
|
+
return false;
|
12130
|
+
}
|
12131
|
+
|
12132
|
+
#removeOldItems() {
|
12133
|
+
const selector = slotName ? `*[slot="${slotName}"]` : ':not([slot])';
|
12134
|
+
this.baseElement.querySelectorAll(selector).forEach((item) => item.remove());
|
12135
|
+
}
|
12136
|
+
|
12137
|
+
#renderItems() {
|
12138
|
+
this.#removeOldItems();
|
12139
|
+
this.data.forEach((item, index) => {
|
12140
|
+
const content = getTemplateContent(itemRenderer(item, index, this));
|
12141
|
+
this.baseElement.appendChild(content?.cloneNode(true));
|
12142
|
+
});
|
12143
|
+
}
|
12144
|
+
|
12145
|
+
set data(value) {
|
12146
|
+
if (this.#validateSchema(value)) {
|
12147
|
+
this.#data = value;
|
12148
|
+
this.#renderItems();
|
12149
|
+
}
|
12150
|
+
}
|
12151
|
+
|
12152
|
+
get data() {
|
12153
|
+
return this.#data;
|
12154
|
+
}
|
12155
|
+
|
12156
|
+
init() {
|
12157
|
+
super.init?.();
|
12158
|
+
|
12159
|
+
if (rerenderAttrsList.length) {
|
12160
|
+
observeAttributes(this, () => this.#renderItems(), { includeAttrs: rerenderAttrsList });
|
12161
|
+
} else {
|
12162
|
+
this.#renderItems();
|
12163
|
+
}
|
12164
|
+
}
|
12165
|
+
};
|
12166
|
+
|
12167
|
+
const componentName$1 = getComponentName('apps-list');
|
12168
|
+
|
12169
|
+
const limitAbbreviation = (str, limit = 3) =>
|
12170
|
+
str
|
12171
|
+
.trim()
|
12172
|
+
.split(' ')
|
12173
|
+
.splice(0, limit)
|
12174
|
+
.map((s) => s[0]?.toUpperCase())
|
12175
|
+
.join('');
|
12176
|
+
|
12177
|
+
const itemRenderer = ({ name, icon, url }, _, ref) => `
|
12178
|
+
<a href="${url}" target="_blank" title="${url}">
|
12179
|
+
<descope-list-item>
|
12180
|
+
<descope-avatar
|
12181
|
+
img="${icon}"
|
12182
|
+
display-name="${name}"
|
12183
|
+
abbr=${limitAbbreviation(name)}
|
12184
|
+
size=${ref.size}
|
12185
|
+
></descope-avatar>
|
12186
|
+
<descope-text
|
12187
|
+
variant="body1"
|
12188
|
+
mode="primary"
|
12189
|
+
>${name}</descope-text>
|
12190
|
+
</descope-list-item>
|
12191
|
+
</a>
|
12192
|
+
`;
|
12193
|
+
|
12194
|
+
const customMixin = (superclass) =>
|
12195
|
+
class AppsListMixinClass extends superclass {
|
12196
|
+
get size() {
|
12197
|
+
return this.getAttribute('size') || 'sm';
|
12198
|
+
}
|
12199
|
+
};
|
12200
|
+
|
12201
|
+
const AppsListClass = compose(
|
12202
|
+
createStyleMixin({
|
12203
|
+
mappings: {
|
12204
|
+
maxHeight: { selector: () => ':host' },
|
12205
|
+
minHeight: { selector: () => ':host' },
|
12206
|
+
hostDirection: { selector: () => ':host', property: 'direction' },
|
12207
|
+
itemsFontWeight: {
|
12208
|
+
selector: TextClass.componentName,
|
12209
|
+
property: TextClass.cssVarList.fontWeight,
|
12210
|
+
},
|
12211
|
+
itemsFontSize: {
|
12212
|
+
selector: TextClass.componentName,
|
12213
|
+
property: TextClass.cssVarList.fontSize,
|
12214
|
+
},
|
12215
|
+
itemsTextAlign: {
|
12216
|
+
selector: TextClass.componentName,
|
12217
|
+
property: TextClass.cssVarList.textAlign,
|
12218
|
+
},
|
12219
|
+
},
|
12220
|
+
}),
|
12221
|
+
createDynamicDataMixin({ itemRenderer, rerenderAttrsList: ['size'] }),
|
12222
|
+
draggableMixin,
|
12223
|
+
componentNameValidationMixin,
|
12224
|
+
customMixin
|
12225
|
+
)(
|
12226
|
+
createProxy({
|
12227
|
+
slots: ['empty-state'],
|
12228
|
+
wrappedEleName: 'descope-list',
|
12229
|
+
excludeAttrsSync: ['tabindex', 'class'],
|
12230
|
+
componentName: componentName$1,
|
12231
|
+
style: () => `
|
12232
|
+
:host {
|
12233
|
+
width: 100%;
|
12234
|
+
display: inline-flex;
|
12235
|
+
}
|
12236
|
+
|
12237
|
+
descope-text::part(text-wrapper) {
|
12238
|
+
display: -webkit-box;
|
12239
|
+
-webkit-line-clamp: 2;
|
12240
|
+
-webkit-box-orient: vertical;
|
12241
|
+
overflow: hidden;
|
12242
|
+
}
|
12243
|
+
|
12244
|
+
a {
|
12245
|
+
text-decoration: none;
|
12246
|
+
}
|
12247
|
+
|
12248
|
+
descope-text {
|
12249
|
+
${TextClass.cssVarList.hostDirection}: var(${AppsListClass.cssVarList.hostDirection});
|
12250
|
+
}
|
12251
|
+
`,
|
12252
|
+
})
|
12253
|
+
);
|
12254
|
+
|
12255
|
+
customElements.define(componentName$1, AppsListClass);
|
12256
|
+
|
11880
12257
|
const getVarName = (path) => getCssVarName(DESCOPE_PREFIX, ...path);
|
11881
12258
|
|
11882
12259
|
// lodash.set alternative
|
@@ -12444,7 +12821,7 @@ var button$1 = /*#__PURE__*/Object.freeze({
|
|
12444
12821
|
vars: vars$L
|
12445
12822
|
});
|
12446
12823
|
|
12447
|
-
const componentName
|
12824
|
+
const componentName = getComponentName('input-wrapper');
|
12448
12825
|
const globalRefs$u = getThemeRefs(globals);
|
12449
12826
|
|
12450
12827
|
const [theme$1, refs, vars$K] = createHelperVars(
|
@@ -12553,7 +12930,7 @@ const [theme$1, refs, vars$K] = createHelperVars(
|
|
12553
12930
|
backgroundColor: globalRefs$u.colors.surface.main,
|
12554
12931
|
},
|
12555
12932
|
},
|
12556
|
-
componentName
|
12933
|
+
componentName
|
12557
12934
|
);
|
12558
12935
|
|
12559
12936
|
var inputWrapper = /*#__PURE__*/Object.freeze({
|
@@ -14358,262 +14735,61 @@ const radioGroup = {
|
|
14358
14735
|
[vars$5.buttonsSpacing]: 'space-between',
|
14359
14736
|
},
|
14360
14737
|
|
14361
|
-
_disabled: {
|
14362
|
-
[vars$5.itemsLabelColor]: globalRefs$4.colors.surface.light,
|
14363
|
-
},
|
14364
|
-
};
|
14365
|
-
|
14366
|
-
var radioGroup$1 = /*#__PURE__*/Object.freeze({
|
14367
|
-
__proto__: null,
|
14368
|
-
default: radioGroup,
|
14369
|
-
radioGroup: radioGroup,
|
14370
|
-
vars: vars$5
|
14371
|
-
});
|
14372
|
-
|
14373
|
-
const vars$4 = RadioButtonClass.cssVarList;
|
14374
|
-
const globalRefs$3 = getThemeRefs(globals);
|
14375
|
-
|
14376
|
-
const radioButton = {
|
14377
|
-
[vars$4.fontFamily]: refs.fontFamily,
|
14378
|
-
[vars$4.radioSize]: 'calc(1em + 6px)',
|
14379
|
-
[vars$4.radioMargin]: 'auto 4px',
|
14380
|
-
[vars$4.radioCheckedSize]: `calc(var(${vars$4.radioSize})/5)`,
|
14381
|
-
[vars$4.radioCheckedColor]: globalRefs$3.colors.surface.light,
|
14382
|
-
[vars$4.radioBackgroundColor]: globalRefs$3.colors.surface.light,
|
14383
|
-
[vars$4.radioBorderColor]: 'none',
|
14384
|
-
[vars$4.radioBorderWidth]: 0,
|
14385
|
-
|
14386
|
-
_checked: {
|
14387
|
-
[vars$4.radioBackgroundColor]: globalRefs$3.colors.surface.contrast,
|
14388
|
-
},
|
14389
|
-
|
14390
|
-
_hover: {
|
14391
|
-
cursor: 'pointer',
|
14392
|
-
},
|
14393
|
-
|
14394
|
-
size: {
|
14395
|
-
xs: {
|
14396
|
-
[vars$4.fontSize]: '12px',
|
14397
|
-
},
|
14398
|
-
sm: {
|
14399
|
-
[vars$4.fontSize]: '14px',
|
14400
|
-
},
|
14401
|
-
md: {
|
14402
|
-
[vars$4.fontSize]: '16px',
|
14403
|
-
},
|
14404
|
-
lg: {
|
14405
|
-
[vars$4.fontSize]: '18px',
|
14406
|
-
},
|
14407
|
-
},
|
14408
|
-
};
|
14409
|
-
|
14410
|
-
var radioButton$1 = /*#__PURE__*/Object.freeze({
|
14411
|
-
__proto__: null,
|
14412
|
-
default: radioButton,
|
14413
|
-
radioButton: radioButton,
|
14414
|
-
vars: vars$4
|
14415
|
-
});
|
14416
|
-
|
14417
|
-
const activeableMixin = (superclass) =>
|
14418
|
-
class ActiveableMixinClass extends superclass {
|
14419
|
-
init() {
|
14420
|
-
super.init?.();
|
14421
|
-
|
14422
|
-
this.baseElement.addEventListener('mousedown', (e) => {
|
14423
|
-
e.preventDefault();
|
14424
|
-
this.setAttribute('active', 'true');
|
14425
|
-
window.addEventListener('mouseup', () => this.removeAttribute('active'), {
|
14426
|
-
once: true,
|
14427
|
-
});
|
14428
|
-
});
|
14429
|
-
}
|
14430
|
-
};
|
14431
|
-
|
14432
|
-
const componentName$2 = getComponentName('list-item');
|
14433
|
-
|
14434
|
-
const customMixin$1 = (superclass) =>
|
14435
|
-
class ListItemMixinClass extends superclass {
|
14436
|
-
constructor() {
|
14437
|
-
super();
|
14438
|
-
|
14439
|
-
this.attachShadow({ mode: 'open' }).innerHTML = `
|
14440
|
-
<style>
|
14441
|
-
/*css*/
|
14442
|
-
slot {
|
14443
|
-
width: 100%;
|
14444
|
-
display: flex;
|
14445
|
-
overflow: hidden;
|
14446
|
-
box-sizing: border-box;
|
14447
|
-
}
|
14448
|
-
:host {
|
14449
|
-
display: block;
|
14450
|
-
}
|
14451
|
-
|
14452
|
-
/*!css*/
|
14453
|
-
</style>
|
14454
|
-
<slot></slot>
|
14455
|
-
`;
|
14456
|
-
}
|
14457
|
-
};
|
14458
|
-
|
14459
|
-
const ListItemClass = compose(
|
14460
|
-
createStyleMixin({
|
14461
|
-
mappings: {
|
14462
|
-
padding: {},
|
14463
|
-
backgroundColor: {},
|
14464
|
-
borderColor: {},
|
14465
|
-
borderStyle: {},
|
14466
|
-
borderWidth: {},
|
14467
|
-
borderRadius: {},
|
14468
|
-
outline: {},
|
14469
|
-
cursor: {},
|
14470
|
-
gap: {},
|
14471
|
-
maxWidth: { selector: () => ':host' },
|
14472
|
-
alignItems: {},
|
14473
|
-
flexDirection: {},
|
14474
|
-
transition: {},
|
14475
|
-
},
|
14476
|
-
}),
|
14477
|
-
draggableMixin,
|
14478
|
-
componentNameValidationMixin,
|
14479
|
-
customMixin$1,
|
14480
|
-
activeableMixin
|
14481
|
-
)(createBaseClass({ componentName: componentName$2, baseSelector: 'slot' }));
|
14482
|
-
|
14483
|
-
const componentName$1 = getComponentName('list');
|
14484
|
-
|
14485
|
-
class RawList extends createBaseClass({ componentName: componentName$1, baseSelector: '.wrapper' }) {
|
14486
|
-
static get observedAttributes() {
|
14487
|
-
return ['variant'];
|
14488
|
-
}
|
14489
|
-
|
14490
|
-
constructor() {
|
14491
|
-
super();
|
14492
|
-
|
14493
|
-
this.attachShadow({ mode: 'open' }).innerHTML = `
|
14494
|
-
<style>
|
14495
|
-
/*css*/
|
14496
|
-
.wrapper {
|
14497
|
-
overflow: auto;
|
14498
|
-
display: grid;
|
14499
|
-
max-height: 100%;
|
14500
|
-
width: 100%;
|
14501
|
-
}
|
14502
|
-
|
14503
|
-
:host {
|
14504
|
-
display: inline-flex;
|
14505
|
-
width: 100%;
|
14506
|
-
}
|
14507
|
-
slot[name="empty-state"] {
|
14508
|
-
justify-content: center;
|
14509
|
-
align-items: center;
|
14510
|
-
display: flex;
|
14511
|
-
flex-grow: 1;
|
14512
|
-
}
|
14513
|
-
|
14514
|
-
:host slot[name="empty-state"] {
|
14515
|
-
display: none;
|
14516
|
-
}
|
14517
|
-
:host([empty]) slot[name="empty-state"] {
|
14518
|
-
display: flex;
|
14519
|
-
}
|
14520
|
-
::slotted(:not([slot])) {
|
14521
|
-
width: 100%;
|
14522
|
-
}
|
14523
|
-
/*!css*/
|
14524
|
-
</style>
|
14525
|
-
|
14526
|
-
<div class="wrapper">
|
14527
|
-
<slot></slot>
|
14528
|
-
<slot name="empty-state">
|
14529
|
-
No item...
|
14530
|
-
</slot>
|
14531
|
-
</div>
|
14532
|
-
`;
|
14533
|
-
}
|
14534
|
-
|
14535
|
-
get items() {
|
14536
|
-
return this.shadowRoot.querySelector('slot').assignedElements();
|
14537
|
-
}
|
14538
|
-
|
14539
|
-
#handleEmptyState() {
|
14540
|
-
if (this.items.length === 0) {
|
14541
|
-
this.setAttribute('empty', 'true');
|
14542
|
-
} else {
|
14543
|
-
this.removeAttribute('empty');
|
14544
|
-
}
|
14545
|
-
}
|
14546
|
-
|
14547
|
-
get variant() {
|
14548
|
-
return this.getAttribute('variant') || 'list';
|
14549
|
-
}
|
14550
|
-
|
14551
|
-
#handleItemsVariant() {
|
14552
|
-
this.items.forEach((item) => {
|
14553
|
-
let listItem = item;
|
14554
|
-
if (listItem.localName !== ListItemClass.componentName) {
|
14555
|
-
listItem = item.querySelector(ListItemClass.componentName);
|
14556
|
-
}
|
14557
|
-
|
14558
|
-
const listItemVariant = this.variant === 'tiles' ? 'tile' : 'row';
|
14559
|
-
listItem.setAttribute('variant', listItemVariant);
|
14560
|
-
});
|
14561
|
-
}
|
14562
|
-
|
14563
|
-
init() {
|
14564
|
-
super.init?.();
|
14565
|
-
|
14566
|
-
// we want new items to get the size
|
14567
|
-
observeChildren(this, () => {
|
14568
|
-
this.#handleEmptyState();
|
14569
|
-
this.#handleItemsVariant();
|
14570
|
-
});
|
14571
|
-
}
|
14738
|
+
_disabled: {
|
14739
|
+
[vars$5.itemsLabelColor]: globalRefs$4.colors.surface.light,
|
14740
|
+
},
|
14741
|
+
};
|
14572
14742
|
|
14573
|
-
|
14574
|
-
|
14743
|
+
var radioGroup$1 = /*#__PURE__*/Object.freeze({
|
14744
|
+
__proto__: null,
|
14745
|
+
default: radioGroup,
|
14746
|
+
radioGroup: radioGroup,
|
14747
|
+
vars: vars$5
|
14748
|
+
});
|
14575
14749
|
|
14576
|
-
|
14750
|
+
const vars$4 = RadioButtonClass.cssVarList;
|
14751
|
+
const globalRefs$3 = getThemeRefs(globals);
|
14577
14752
|
|
14578
|
-
|
14579
|
-
|
14580
|
-
|
14581
|
-
|
14582
|
-
}
|
14753
|
+
const radioButton = {
|
14754
|
+
[vars$4.fontFamily]: refs.fontFamily,
|
14755
|
+
[vars$4.radioSize]: 'calc(1em + 6px)',
|
14756
|
+
[vars$4.radioMargin]: 'auto 4px',
|
14757
|
+
[vars$4.radioCheckedSize]: `calc(var(${vars$4.radioSize})/5)`,
|
14758
|
+
[vars$4.radioCheckedColor]: globalRefs$3.colors.surface.light,
|
14759
|
+
[vars$4.radioBackgroundColor]: globalRefs$3.colors.surface.light,
|
14760
|
+
[vars$4.radioBorderColor]: 'none',
|
14761
|
+
[vars$4.radioBorderWidth]: 0,
|
14583
14762
|
|
14584
|
-
|
14585
|
-
|
14586
|
-
|
14587
|
-
hostWidth: { selector: () => ':host', property: 'width' },
|
14588
|
-
maxHeight: { selector: () => ':host' },
|
14589
|
-
minHeight: {},
|
14590
|
-
verticalPadding: [{ property: 'padding-top' }, { property: 'padding-bottom' }],
|
14591
|
-
horizontalPadding: [{ property: 'padding-left' }, { property: 'padding-right' }],
|
14592
|
-
hostDirection: { selector: () => ':host', property: 'direction' },
|
14593
|
-
fontFamily: {},
|
14594
|
-
gap: {},
|
14763
|
+
_checked: {
|
14764
|
+
[vars$4.radioBackgroundColor]: globalRefs$3.colors.surface.contrast,
|
14765
|
+
},
|
14595
14766
|
|
14596
|
-
|
14597
|
-
|
14598
|
-
|
14599
|
-
borderStyle: {},
|
14600
|
-
borderWidth: {},
|
14767
|
+
_hover: {
|
14768
|
+
cursor: 'pointer',
|
14769
|
+
},
|
14601
14770
|
|
14602
|
-
|
14603
|
-
|
14604
|
-
|
14605
|
-
minItemsWidth: { selector: () => '::slotted(:not([slot]))', property: 'min-width' },
|
14606
|
-
itemsHorizontalAlign: { selector: () => '::slotted(*)', property: 'justify-self' },
|
14607
|
-
emptyStateTextColor: { selector: () => 'slot[name="empty-state"]', property: 'color' },
|
14608
|
-
emptyStateTextFontFamily: {
|
14609
|
-
selector: () => 'slot[name="empty-state"]',
|
14610
|
-
property: 'font-family',
|
14611
|
-
},
|
14771
|
+
size: {
|
14772
|
+
xs: {
|
14773
|
+
[vars$4.fontSize]: '12px',
|
14612
14774
|
},
|
14613
|
-
|
14614
|
-
|
14615
|
-
|
14616
|
-
|
14775
|
+
sm: {
|
14776
|
+
[vars$4.fontSize]: '14px',
|
14777
|
+
},
|
14778
|
+
md: {
|
14779
|
+
[vars$4.fontSize]: '16px',
|
14780
|
+
},
|
14781
|
+
lg: {
|
14782
|
+
[vars$4.fontSize]: '18px',
|
14783
|
+
},
|
14784
|
+
},
|
14785
|
+
};
|
14786
|
+
|
14787
|
+
var radioButton$1 = /*#__PURE__*/Object.freeze({
|
14788
|
+
__proto__: null,
|
14789
|
+
default: radioButton,
|
14790
|
+
radioButton: radioButton,
|
14791
|
+
vars: vars$4
|
14792
|
+
});
|
14617
14793
|
|
14618
14794
|
const globalRefs$2 = getThemeRefs(globals);
|
14619
14795
|
|
@@ -14621,7 +14797,7 @@ const compVars = ListClass.cssVarList;
|
|
14621
14797
|
|
14622
14798
|
const [helperTheme, helperRefs, helperVars] = createHelperVars(
|
14623
14799
|
{ shadowColor: '#00000020' },
|
14624
|
-
componentName$
|
14800
|
+
componentName$2
|
14625
14801
|
);
|
14626
14802
|
|
14627
14803
|
const { shadowColor } = helperRefs;
|
@@ -14714,177 +14890,6 @@ var listItem = /*#__PURE__*/Object.freeze({
|
|
14714
14890
|
vars: vars$2
|
14715
14891
|
});
|
14716
14892
|
|
14717
|
-
const defaultValidateSchema = () => true;
|
14718
|
-
const defaultItemRenderer = (item) => `<pre>${JSON.stringify(item, null, 4)}</pre>`;
|
14719
|
-
|
14720
|
-
const createTemplate = (templateString) => {
|
14721
|
-
const template = document.createElement('template');
|
14722
|
-
template.innerHTML = templateString;
|
14723
|
-
|
14724
|
-
return template;
|
14725
|
-
};
|
14726
|
-
|
14727
|
-
const getTemplateContent = (templateOrString) => {
|
14728
|
-
if (typeof templateOrString === 'string') {
|
14729
|
-
return createTemplate(templateOrString).content;
|
14730
|
-
}
|
14731
|
-
|
14732
|
-
if (templateOrString instanceof HTMLTemplateElement) {
|
14733
|
-
return templateOrString.content;
|
14734
|
-
}
|
14735
|
-
|
14736
|
-
// eslint-disable-next-line no-console
|
14737
|
-
console.error('Invalid template', templateOrString);
|
14738
|
-
return null;
|
14739
|
-
};
|
14740
|
-
|
14741
|
-
const createDynamicDataMixin =
|
14742
|
-
({
|
14743
|
-
itemRenderer = defaultItemRenderer,
|
14744
|
-
validateSchema = defaultValidateSchema,
|
14745
|
-
slotName,
|
14746
|
-
rerenderAttrsList = [],
|
14747
|
-
}) =>
|
14748
|
-
(superclass) =>
|
14749
|
-
class DynamicDataMixinClass extends superclass {
|
14750
|
-
#data = [];
|
14751
|
-
|
14752
|
-
// eslint-disable-next-line class-methods-use-this
|
14753
|
-
#validateSchema(data) {
|
14754
|
-
if (!validateSchema) return true;
|
14755
|
-
|
14756
|
-
const validation = validateSchema(data);
|
14757
|
-
if (validation === true) return true;
|
14758
|
-
|
14759
|
-
// eslint-disable-next-line no-console
|
14760
|
-
console.error('Data schema validation failed', validation || '');
|
14761
|
-
|
14762
|
-
return false;
|
14763
|
-
}
|
14764
|
-
|
14765
|
-
#removeOldItems() {
|
14766
|
-
const selector = slotName ? `*[slot="${slotName}"]` : ':not([slot])';
|
14767
|
-
this.baseElement.querySelectorAll(selector).forEach((item) => item.remove());
|
14768
|
-
}
|
14769
|
-
|
14770
|
-
#renderItems() {
|
14771
|
-
this.#removeOldItems();
|
14772
|
-
this.data.forEach((item, index) => {
|
14773
|
-
const content = getTemplateContent(itemRenderer(item, index, this));
|
14774
|
-
this.baseElement.appendChild(content?.cloneNode(true));
|
14775
|
-
});
|
14776
|
-
}
|
14777
|
-
|
14778
|
-
set data(value) {
|
14779
|
-
if (this.#validateSchema(value)) {
|
14780
|
-
this.#data = value;
|
14781
|
-
this.#renderItems();
|
14782
|
-
}
|
14783
|
-
}
|
14784
|
-
|
14785
|
-
get data() {
|
14786
|
-
return this.#data;
|
14787
|
-
}
|
14788
|
-
|
14789
|
-
init() {
|
14790
|
-
super.init?.();
|
14791
|
-
|
14792
|
-
if (rerenderAttrsList.length) {
|
14793
|
-
observeAttributes(this, () => this.#renderItems(), { includeAttrs: rerenderAttrsList });
|
14794
|
-
} else {
|
14795
|
-
this.#renderItems();
|
14796
|
-
}
|
14797
|
-
}
|
14798
|
-
};
|
14799
|
-
|
14800
|
-
const componentName = getComponentName('apps-list');
|
14801
|
-
|
14802
|
-
const limitAbbreviation = (str, limit = 3) =>
|
14803
|
-
str
|
14804
|
-
.trim()
|
14805
|
-
.split(' ')
|
14806
|
-
.splice(0, limit)
|
14807
|
-
.map((s) => s[0]?.toUpperCase())
|
14808
|
-
.join('');
|
14809
|
-
|
14810
|
-
const itemRenderer = ({ name, icon, url }, _, ref) => `
|
14811
|
-
<a href="${url}" target="_blank" title="${url}">
|
14812
|
-
<descope-list-item>
|
14813
|
-
<descope-avatar
|
14814
|
-
img="${icon}"
|
14815
|
-
display-name="${name}"
|
14816
|
-
abbr=${limitAbbreviation(name)}
|
14817
|
-
size=${ref.size}
|
14818
|
-
></descope-avatar>
|
14819
|
-
<descope-text
|
14820
|
-
variant="body1"
|
14821
|
-
mode="primary"
|
14822
|
-
>${name}</descope-text>
|
14823
|
-
</descope-list-item>
|
14824
|
-
</a>
|
14825
|
-
`;
|
14826
|
-
|
14827
|
-
const customMixin = (superclass) =>
|
14828
|
-
class AppsListMixinClass extends superclass {
|
14829
|
-
get size() {
|
14830
|
-
return this.getAttribute('size') || 'sm';
|
14831
|
-
}
|
14832
|
-
};
|
14833
|
-
|
14834
|
-
const AppsListClass = compose(
|
14835
|
-
createStyleMixin({
|
14836
|
-
mappings: {
|
14837
|
-
maxHeight: { selector: () => ':host' },
|
14838
|
-
minHeight: { selector: () => ':host' },
|
14839
|
-
hostDirection: { selector: () => ':host', property: 'direction' },
|
14840
|
-
itemsFontWeight: {
|
14841
|
-
selector: TextClass.componentName,
|
14842
|
-
property: TextClass.cssVarList.fontWeight,
|
14843
|
-
},
|
14844
|
-
itemsFontSize: {
|
14845
|
-
selector: TextClass.componentName,
|
14846
|
-
property: TextClass.cssVarList.fontSize,
|
14847
|
-
},
|
14848
|
-
itemsTextAlign: {
|
14849
|
-
selector: TextClass.componentName,
|
14850
|
-
property: TextClass.cssVarList.textAlign,
|
14851
|
-
},
|
14852
|
-
},
|
14853
|
-
}),
|
14854
|
-
createDynamicDataMixin({ itemRenderer, rerenderAttrsList: ['size'] }),
|
14855
|
-
draggableMixin,
|
14856
|
-
componentNameValidationMixin,
|
14857
|
-
customMixin
|
14858
|
-
)(
|
14859
|
-
createProxy({
|
14860
|
-
slots: ['empty-state'],
|
14861
|
-
wrappedEleName: 'descope-list',
|
14862
|
-
excludeAttrsSync: ['tabindex', 'class'],
|
14863
|
-
componentName,
|
14864
|
-
style: () => `
|
14865
|
-
:host {
|
14866
|
-
width: 100%;
|
14867
|
-
display: inline-flex;
|
14868
|
-
}
|
14869
|
-
|
14870
|
-
descope-text::part(text-wrapper) {
|
14871
|
-
display: -webkit-box;
|
14872
|
-
-webkit-line-clamp: 2;
|
14873
|
-
-webkit-box-orient: vertical;
|
14874
|
-
overflow: hidden;
|
14875
|
-
}
|
14876
|
-
|
14877
|
-
a {
|
14878
|
-
text-decoration: none;
|
14879
|
-
}
|
14880
|
-
|
14881
|
-
descope-text {
|
14882
|
-
${TextClass.cssVarList.hostDirection}: var(${AppsListClass.cssVarList.hostDirection});
|
14883
|
-
}
|
14884
|
-
`,
|
14885
|
-
})
|
14886
|
-
);
|
14887
|
-
|
14888
14893
|
const vars$1 = AppsListClass.cssVarList;
|
14889
14894
|
const globalRefs = getThemeRefs(globals);
|
14890
14895
|
|
@@ -15031,5 +15036,5 @@ const darkTheme = merge({}, defaultTheme, {
|
|
15031
15036
|
},
|
15032
15037
|
});
|
15033
15038
|
|
15034
|
-
export { AvatarClass, BadgeClass, ButtonClass, ButtonMultiSelectionGroupClass, ButtonSelectionGroupClass, CheckboxClass, CodeSnippetClass, ComboBoxClass, ContainerClass, DividerClass, EmailFieldClass, EnrichedTextClass, GridClass, IconClass, ImageClass, LinkClass, LoaderLinearClass, LoaderRadialClass, LogoClass, MappingsFieldClass, ModalClass, MultiSelectComboBoxClass, NewPasswordClass, NotificationClass, NotpImageClass, NumberFieldClass, PasscodeClass, PasswordClass, PhoneFieldClass, PhoneFieldInputBoxClass, PolicyValidationClass, RadioGroupClass, RecaptchaClass, SamlGroupMappingsClass, SwitchToggleClass, TextAreaClass, TextClass, TextFieldClass, TotpImageClass, UploadFileClass, UserAttributeClass, UserAuthMethodClass, componentsThemeManager, createComponentsTheme, darkTheme, defaultTheme, genColor, globalsThemeToStyle, themeToStyle, themeVars };
|
15039
|
+
export { AppsListClass, AvatarClass, BadgeClass, ButtonClass, ButtonMultiSelectionGroupClass, ButtonSelectionGroupClass, CheckboxClass, CodeSnippetClass, ComboBoxClass, ContainerClass, DividerClass, EmailFieldClass, EnrichedTextClass, GridClass, IconClass, ImageClass, LinkClass, ListClass, LoaderLinearClass, LoaderRadialClass, LogoClass, MappingsFieldClass, ModalClass, MultiSelectComboBoxClass, NewPasswordClass, NotificationClass, NotpImageClass, NumberFieldClass, PasscodeClass, PasswordClass, PhoneFieldClass, PhoneFieldInputBoxClass, PolicyValidationClass, RadioGroupClass, RecaptchaClass, SamlGroupMappingsClass, SwitchToggleClass, TextAreaClass, TextClass, TextFieldClass, TotpImageClass, UploadFileClass, UserAttributeClass, UserAuthMethodClass, componentsThemeManager, createComponentsTheme, darkTheme, defaultTheme, genColor, globalsThemeToStyle, themeToStyle, themeVars };
|
15035
15040
|
//# sourceMappingURL=index.esm.js.map
|