@descope/web-components-ui 1.0.187 → 1.0.189

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/dist/index.esm.js CHANGED
@@ -6945,6 +6945,64 @@ const componentName$2 = getComponentName('button-selection-group');
6945
6945
 
6946
6946
  const customMixin = (superclass) =>
6947
6947
  class ButtonSelectionGroupMixinClass extends superclass {
6948
+ // eslint-disable-next-line class-methods-use-this
6949
+ #renderItem = ({ value, label }) =>
6950
+ `<descope-button-selection-group-item value="${value}">${label}</descope-button-selection-group-item>`;
6951
+
6952
+ #data;
6953
+
6954
+ get renderItem() {
6955
+ return this.#renderItem;
6956
+ }
6957
+
6958
+ set renderItem(renderFn) {
6959
+ this.#renderItem = renderFn;
6960
+ this.renderItems();
6961
+ }
6962
+
6963
+ get data() {
6964
+ if (this.#data) return this.#data;
6965
+
6966
+ try {
6967
+ const data = JSON.parse(this.getAttribute('data'));
6968
+ if (this.isValidDataType(data)) {
6969
+ return data;
6970
+ }
6971
+ } catch (e) {
6972
+ // eslint-disable-next-line no-console
6973
+ console.error('could not parse data string from attribute "data" - ', e.message);
6974
+ }
6975
+
6976
+ return [];
6977
+ }
6978
+
6979
+ set data(data) {
6980
+ if (this.isValidDataType(data)) {
6981
+ this.#data = data;
6982
+ this.renderItems();
6983
+ }
6984
+ }
6985
+
6986
+ // eslint-disable-next-line class-methods-use-this
6987
+ isValidDataType(data) {
6988
+ const isValid = Array.isArray(data);
6989
+ if (!isValid) {
6990
+ // eslint-disable-next-line no-console
6991
+ console.error('data must be an array, received:', data);
6992
+ }
6993
+
6994
+ return isValid;
6995
+ }
6996
+
6997
+ getItemsTemplate() {
6998
+ return this.data?.reduce?.((acc, item) => acc + (this.renderItem?.(item || {}) || ''), '');
6999
+ }
7000
+
7001
+ renderItems() {
7002
+ const template = this.getItemsTemplate();
7003
+ if (template) this.innerHTML = this.getItemsTemplate();
7004
+ }
7005
+
6948
7006
  init() {
6949
7007
  super.init?.();
6950
7008
  const template = document.createElement('template');
@@ -6964,6 +7022,10 @@ const customMixin = (superclass) =>
6964
7022
  this.inputElement = this.shadowRoot.querySelector(componentName$3);
6965
7023
 
6966
7024
  forwardAttrs(this, this.inputElement, { includeAttrs: ['size', 'default-value'] });
7025
+
7026
+ this.renderItems();
7027
+
7028
+ observeAttributes(this, this.renderItems.bind(this), { includeAttrs: ['data'] });
6967
7029
  }
6968
7030
  };
6969
7031