@wavelengthusaf/web-components 1.9.0 → 1.10.0

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.
@@ -6227,6 +6227,125 @@ if (!customElements.get("wavelength-tooltip")) {
6227
6227
  customElements.define("wavelength-tooltip", WavelengthToolTip);
6228
6228
  }
6229
6229
 
6230
+ // src/web-components/wavelength-menu.template.html
6231
+ var wavelength_menu_template_default = '<style>\n :host {\n display: block;\n --background-color: white;\n --text-color: black;\n --font: Arial, Helvetica, sans-serif;\n --font-size: 12px;\n --border: 0px solid #ccc;\n --padding: 5px;\n --border-radius: 3px;\n --selected-color: #5799ea;\n --disabled-color: #d1d1d1;\n }\n .flex-container {\n overflow-y: scroll;\n height: 125px;\n width: 175px;\n flex-direction: column;\n background-color: var(--background-color);\n border: var(--border);\n border-radius: var(--border-radius);\n padding: var(--padding);\n margin: 5px;\n box-shadow: 4px 5px 7px 4px rgba(0, 0, 0, 0.1);\n }\n .menu-item {\n display: block;\n padding: var(--padding);\n margin: 5px;\n font-size: var(--font-size);\n font-family: var(--font);\n color: var(--text-color);\n background-color: var(--background-color);\n cursor: pointer;\n transition: background-color 0.1s ease;\n border-radius: var(--border-radius);\n }\n .menu-item:hover {\n background-color: #f0f0f0;\n }\n .menu-item.selected {\n background-color: var(--selected-color) !important;\n color: white !important;\n }\n .menu-item:focus {\n background-color: #d1d1d1;\n }\n .menu-item:active {\n background-color: #d1d1d1;\n }\n .menu-item.disabled {\n color: var(--disabled-color);\n background-color: var(--background-color);\n cursor: not-allowed;\n pointer-events: none;\n opacity: 0.6;\n }\n</style>\n<div class="flex-container"></div>\n';
6232
+
6233
+ // src/web-components/wavelength-menu.ts
6234
+ var WavelengthMenu = class extends HTMLElement {
6235
+ constructor() {
6236
+ super();
6237
+ this._items = [];
6238
+ this._selectedIndex = -1;
6239
+ this._selectedId = null;
6240
+ this._onItemClick = (e) => {
6241
+ const menuItem = e.target.closest(".menu-item");
6242
+ if (!menuItem || menuItem.classList.contains("disabled")) return;
6243
+ const index = parseInt(menuItem.getAttribute("data-index") || "-1");
6244
+ const isAlreadySelected = menuItem.classList.contains("selected");
6245
+ const menuItems = this._shadow.querySelectorAll(".menu-item");
6246
+ menuItems.forEach((item) => item.classList.remove("selected"));
6247
+ if (!isAlreadySelected) {
6248
+ menuItem.classList.add("selected");
6249
+ this._selectedIndex = index;
6250
+ this._selectedId = menuItem.getAttribute("data-id");
6251
+ } else {
6252
+ this._selectedIndex = -1;
6253
+ this._selectedId = null;
6254
+ }
6255
+ this._dispatchSelectEvent();
6256
+ };
6257
+ this._shadow = this.attachShadow({ mode: "open" });
6258
+ this._shadow.innerHTML = wavelength_menu_template_default;
6259
+ this._flexContainer = this._shadow.querySelector(".flex-container");
6260
+ try {
6261
+ this._items = JSON.parse(this.getAttribute("items") || "[]");
6262
+ } catch (e) {
6263
+ this._items = [];
6264
+ }
6265
+ }
6266
+ static get observedAttributes() {
6267
+ return ["background-color", "text-color", "font", "font-size", "border", "padding", "border-radius", "selected-color", "items", "disabled-color"];
6268
+ }
6269
+ // Getter for items array.
6270
+ get items() {
6271
+ return this._items;
6272
+ }
6273
+ set items(value) {
6274
+ this._items = Array.isArray(value) ? value : [];
6275
+ this.render();
6276
+ }
6277
+ get value() {
6278
+ return _nullishCoalesce(this._items[this._selectedIndex], () => ( null));
6279
+ }
6280
+ connectedCallback() {
6281
+ this.render();
6282
+ this._flexContainer.addEventListener("click", this._onItemClick);
6283
+ }
6284
+ disconnectedCallback() {
6285
+ this._flexContainer.removeEventListener("click", this._onItemClick);
6286
+ }
6287
+ attributeChangedCallback(name, oldValue, newValue) {
6288
+ if (oldValue === newValue) return;
6289
+ if (name === "items") {
6290
+ try {
6291
+ this._items = JSON.parse(newValue || "[]");
6292
+ } catch (e) {
6293
+ this._items = [];
6294
+ }
6295
+ }
6296
+ this.render();
6297
+ }
6298
+ render() {
6299
+ this._syncStyles();
6300
+ this._renderItems();
6301
+ }
6302
+ _syncStyles() {
6303
+ const styleAttributes = ["background-color", "text-color", "font", "font-size", "border", "padding", "border-radius", "selected-color", "disabled-color"];
6304
+ styleAttributes.forEach((attr) => {
6305
+ const value = this.getAttribute(attr);
6306
+ if (value) {
6307
+ this.style.setProperty(`--${attr}`, value);
6308
+ }
6309
+ });
6310
+ }
6311
+ _renderItems() {
6312
+ if (!this._flexContainer) return;
6313
+ this._flexContainer.innerHTML = "";
6314
+ this._items.forEach((item, index) => {
6315
+ const itemEl = document.createElement("div");
6316
+ itemEl.classList.add("menu-item");
6317
+ itemEl.textContent = item.label || item.toString();
6318
+ const isSelected = this._selectedId ? item.id === this._selectedId : this._selectedIndex === index;
6319
+ if (isSelected) {
6320
+ itemEl.classList.add("selected");
6321
+ }
6322
+ if (item.disabled) {
6323
+ itemEl.classList.add("disabled");
6324
+ itemEl.setAttribute("disabled", "");
6325
+ }
6326
+ if (item.id) {
6327
+ itemEl.id = item.id;
6328
+ itemEl.setAttribute("data-id", item.id);
6329
+ }
6330
+ itemEl.setAttribute("data-index", index.toString());
6331
+ this._flexContainer.appendChild(itemEl);
6332
+ });
6333
+ }
6334
+ _dispatchSelectEvent() {
6335
+ this.dispatchEvent(
6336
+ new CustomEvent("wavelength-menu-select", {
6337
+ detail: this.value,
6338
+ bubbles: true,
6339
+ composed: true
6340
+ })
6341
+ );
6342
+ }
6343
+ };
6344
+ if (!customElements.get("wavelength-menu")) {
6345
+ customElements.define("wavelength-menu", WavelengthMenu);
6346
+ }
6347
+
6348
+
6230
6349
 
6231
6350
 
6232
6351
 
@@ -6248,7 +6367,7 @@ if (!customElements.get("wavelength-tooltip")) {
6248
6367
 
6249
6368
 
6250
6369
 
6251
- exports.BaseWavelengthInput = BaseWavelengthInput; exports.BaseWavelengthMultiSelectAutocomplete = BaseWavelengthMultiSelectAutocomplete; exports.ChildDataTable = ChildDataTable; exports.SampleComponent = SampleComponent; exports.WavelengthBanner = WavelengthBanner; exports.WavelengthButton = WavelengthButton; exports.WavelengthCheckbox = WavelengthCheckbox; exports.WavelengthDatePicker = WavelengthDatePicker; exports.WavelengthDropdown = WavelengthDropdown; exports.WavelengthFileDropZone = WavelengthFileDropZone; exports.WavelengthForm = WavelengthForm; exports.WavelengthInput = WavelengthInput; exports.WavelengthManyPlanes = WavelengthManyPlanes; exports.WavelengthMultiSelectAutocomplete = WavelengthMultiSelectAutocomplete; exports.WavelengthNavBar = WavelengthNavBar; exports.WavelengthNotificationPanel = WavelengthNotificationPanel; exports.WavelengthPlaneTrail = WavelengthPlaneTrail; exports.WavelengthProgressBar = WavelengthProgressBar; exports.WavelengthSnackbar = WavelengthSnackbar; exports.WavelengthTitleBar = WavelengthTitleBar; exports.WavelengthToolTip = WavelengthToolTip;
6370
+ exports.BaseWavelengthInput = BaseWavelengthInput; exports.BaseWavelengthMultiSelectAutocomplete = BaseWavelengthMultiSelectAutocomplete; exports.ChildDataTable = ChildDataTable; exports.SampleComponent = SampleComponent; exports.WavelengthBanner = WavelengthBanner; exports.WavelengthButton = WavelengthButton; exports.WavelengthCheckbox = WavelengthCheckbox; exports.WavelengthDatePicker = WavelengthDatePicker; exports.WavelengthDropdown = WavelengthDropdown; exports.WavelengthFileDropZone = WavelengthFileDropZone; exports.WavelengthForm = WavelengthForm; exports.WavelengthInput = WavelengthInput; exports.WavelengthManyPlanes = WavelengthManyPlanes; exports.WavelengthMenu = WavelengthMenu; exports.WavelengthMultiSelectAutocomplete = WavelengthMultiSelectAutocomplete; exports.WavelengthNavBar = WavelengthNavBar; exports.WavelengthNotificationPanel = WavelengthNotificationPanel; exports.WavelengthPlaneTrail = WavelengthPlaneTrail; exports.WavelengthProgressBar = WavelengthProgressBar; exports.WavelengthSnackbar = WavelengthSnackbar; exports.WavelengthTitleBar = WavelengthTitleBar; exports.WavelengthToolTip = WavelengthToolTip;
6252
6371
  /*! Bundled license information:
6253
6372
 
6254
6373
  react/cjs/react.production.min.js:
@@ -2265,4 +2265,25 @@ declare class WavelengthToolTip extends HTMLElement {
2265
2265
  updateComponent(): void;
2266
2266
  }
2267
2267
 
2268
- export { BaseWavelengthInput, BaseWavelengthMultiSelectAutocomplete, type CheckboxElements, ChildDataTable, SampleComponent, WavelengthBanner, WavelengthButton, WavelengthCheckbox, WavelengthDatePicker, WavelengthDropdown, WavelengthFileDropZone, WavelengthForm, WavelengthInput, WavelengthManyPlanes, WavelengthMultiSelectAutocomplete, WavelengthNavBar, WavelengthNotificationPanel, WavelengthPlaneTrail, WavelengthProgressBar, WavelengthSnackbar, WavelengthTitleBar, WavelengthToolTip };
2268
+ declare class WavelengthMenu extends HTMLElement {
2269
+ static get observedAttributes(): string[];
2270
+ private _items;
2271
+ private _selectedIndex;
2272
+ private _selectedId;
2273
+ private _flexContainer;
2274
+ private _shadow;
2275
+ constructor();
2276
+ get items(): any[];
2277
+ set items(value: any[]);
2278
+ get value(): any;
2279
+ connectedCallback(): void;
2280
+ disconnectedCallback(): void;
2281
+ attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
2282
+ render(): void;
2283
+ private _syncStyles;
2284
+ private _renderItems;
2285
+ private _onItemClick;
2286
+ private _dispatchSelectEvent;
2287
+ }
2288
+
2289
+ export { BaseWavelengthInput, BaseWavelengthMultiSelectAutocomplete, type CheckboxElements, ChildDataTable, SampleComponent, WavelengthBanner, WavelengthButton, WavelengthCheckbox, WavelengthDatePicker, WavelengthDropdown, WavelengthFileDropZone, WavelengthForm, WavelengthInput, WavelengthManyPlanes, WavelengthMenu, WavelengthMultiSelectAutocomplete, WavelengthNavBar, WavelengthNotificationPanel, WavelengthPlaneTrail, WavelengthProgressBar, WavelengthSnackbar, WavelengthTitleBar, WavelengthToolTip };
@@ -2265,4 +2265,25 @@ declare class WavelengthToolTip extends HTMLElement {
2265
2265
  updateComponent(): void;
2266
2266
  }
2267
2267
 
2268
- export { BaseWavelengthInput, BaseWavelengthMultiSelectAutocomplete, type CheckboxElements, ChildDataTable, SampleComponent, WavelengthBanner, WavelengthButton, WavelengthCheckbox, WavelengthDatePicker, WavelengthDropdown, WavelengthFileDropZone, WavelengthForm, WavelengthInput, WavelengthManyPlanes, WavelengthMultiSelectAutocomplete, WavelengthNavBar, WavelengthNotificationPanel, WavelengthPlaneTrail, WavelengthProgressBar, WavelengthSnackbar, WavelengthTitleBar, WavelengthToolTip };
2268
+ declare class WavelengthMenu extends HTMLElement {
2269
+ static get observedAttributes(): string[];
2270
+ private _items;
2271
+ private _selectedIndex;
2272
+ private _selectedId;
2273
+ private _flexContainer;
2274
+ private _shadow;
2275
+ constructor();
2276
+ get items(): any[];
2277
+ set items(value: any[]);
2278
+ get value(): any;
2279
+ connectedCallback(): void;
2280
+ disconnectedCallback(): void;
2281
+ attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
2282
+ render(): void;
2283
+ private _syncStyles;
2284
+ private _renderItems;
2285
+ private _onItemClick;
2286
+ private _dispatchSelectEvent;
2287
+ }
2288
+
2289
+ export { BaseWavelengthInput, BaseWavelengthMultiSelectAutocomplete, type CheckboxElements, ChildDataTable, SampleComponent, WavelengthBanner, WavelengthButton, WavelengthCheckbox, WavelengthDatePicker, WavelengthDropdown, WavelengthFileDropZone, WavelengthForm, WavelengthInput, WavelengthManyPlanes, WavelengthMenu, WavelengthMultiSelectAutocomplete, WavelengthNavBar, WavelengthNotificationPanel, WavelengthPlaneTrail, WavelengthProgressBar, WavelengthSnackbar, WavelengthTitleBar, WavelengthToolTip };
package/dist/esm/index.js CHANGED
@@ -6226,6 +6226,124 @@ var WavelengthToolTip = class extends HTMLElement {
6226
6226
  if (!customElements.get("wavelength-tooltip")) {
6227
6227
  customElements.define("wavelength-tooltip", WavelengthToolTip);
6228
6228
  }
6229
+
6230
+ // src/web-components/wavelength-menu.template.html
6231
+ var wavelength_menu_template_default = '<style>\n :host {\n display: block;\n --background-color: white;\n --text-color: black;\n --font: Arial, Helvetica, sans-serif;\n --font-size: 12px;\n --border: 0px solid #ccc;\n --padding: 5px;\n --border-radius: 3px;\n --selected-color: #5799ea;\n --disabled-color: #d1d1d1;\n }\n .flex-container {\n overflow-y: scroll;\n height: 125px;\n width: 175px;\n flex-direction: column;\n background-color: var(--background-color);\n border: var(--border);\n border-radius: var(--border-radius);\n padding: var(--padding);\n margin: 5px;\n box-shadow: 4px 5px 7px 4px rgba(0, 0, 0, 0.1);\n }\n .menu-item {\n display: block;\n padding: var(--padding);\n margin: 5px;\n font-size: var(--font-size);\n font-family: var(--font);\n color: var(--text-color);\n background-color: var(--background-color);\n cursor: pointer;\n transition: background-color 0.1s ease;\n border-radius: var(--border-radius);\n }\n .menu-item:hover {\n background-color: #f0f0f0;\n }\n .menu-item.selected {\n background-color: var(--selected-color) !important;\n color: white !important;\n }\n .menu-item:focus {\n background-color: #d1d1d1;\n }\n .menu-item:active {\n background-color: #d1d1d1;\n }\n .menu-item.disabled {\n color: var(--disabled-color);\n background-color: var(--background-color);\n cursor: not-allowed;\n pointer-events: none;\n opacity: 0.6;\n }\n</style>\n<div class="flex-container"></div>\n';
6232
+
6233
+ // src/web-components/wavelength-menu.ts
6234
+ var WavelengthMenu = class extends HTMLElement {
6235
+ constructor() {
6236
+ super();
6237
+ this._items = [];
6238
+ this._selectedIndex = -1;
6239
+ this._selectedId = null;
6240
+ this._onItemClick = (e) => {
6241
+ const menuItem = e.target.closest(".menu-item");
6242
+ if (!menuItem || menuItem.classList.contains("disabled")) return;
6243
+ const index = parseInt(menuItem.getAttribute("data-index") || "-1");
6244
+ const isAlreadySelected = menuItem.classList.contains("selected");
6245
+ const menuItems = this._shadow.querySelectorAll(".menu-item");
6246
+ menuItems.forEach((item) => item.classList.remove("selected"));
6247
+ if (!isAlreadySelected) {
6248
+ menuItem.classList.add("selected");
6249
+ this._selectedIndex = index;
6250
+ this._selectedId = menuItem.getAttribute("data-id");
6251
+ } else {
6252
+ this._selectedIndex = -1;
6253
+ this._selectedId = null;
6254
+ }
6255
+ this._dispatchSelectEvent();
6256
+ };
6257
+ this._shadow = this.attachShadow({ mode: "open" });
6258
+ this._shadow.innerHTML = wavelength_menu_template_default;
6259
+ this._flexContainer = this._shadow.querySelector(".flex-container");
6260
+ try {
6261
+ this._items = JSON.parse(this.getAttribute("items") || "[]");
6262
+ } catch (e) {
6263
+ this._items = [];
6264
+ }
6265
+ }
6266
+ static get observedAttributes() {
6267
+ return ["background-color", "text-color", "font", "font-size", "border", "padding", "border-radius", "selected-color", "items", "disabled-color"];
6268
+ }
6269
+ // Getter for items array.
6270
+ get items() {
6271
+ return this._items;
6272
+ }
6273
+ set items(value) {
6274
+ this._items = Array.isArray(value) ? value : [];
6275
+ this.render();
6276
+ }
6277
+ get value() {
6278
+ return this._items[this._selectedIndex] ?? null;
6279
+ }
6280
+ connectedCallback() {
6281
+ this.render();
6282
+ this._flexContainer.addEventListener("click", this._onItemClick);
6283
+ }
6284
+ disconnectedCallback() {
6285
+ this._flexContainer.removeEventListener("click", this._onItemClick);
6286
+ }
6287
+ attributeChangedCallback(name, oldValue, newValue) {
6288
+ if (oldValue === newValue) return;
6289
+ if (name === "items") {
6290
+ try {
6291
+ this._items = JSON.parse(newValue || "[]");
6292
+ } catch (e) {
6293
+ this._items = [];
6294
+ }
6295
+ }
6296
+ this.render();
6297
+ }
6298
+ render() {
6299
+ this._syncStyles();
6300
+ this._renderItems();
6301
+ }
6302
+ _syncStyles() {
6303
+ const styleAttributes = ["background-color", "text-color", "font", "font-size", "border", "padding", "border-radius", "selected-color", "disabled-color"];
6304
+ styleAttributes.forEach((attr) => {
6305
+ const value = this.getAttribute(attr);
6306
+ if (value) {
6307
+ this.style.setProperty(`--${attr}`, value);
6308
+ }
6309
+ });
6310
+ }
6311
+ _renderItems() {
6312
+ if (!this._flexContainer) return;
6313
+ this._flexContainer.innerHTML = "";
6314
+ this._items.forEach((item, index) => {
6315
+ const itemEl = document.createElement("div");
6316
+ itemEl.classList.add("menu-item");
6317
+ itemEl.textContent = item.label || item.toString();
6318
+ const isSelected = this._selectedId ? item.id === this._selectedId : this._selectedIndex === index;
6319
+ if (isSelected) {
6320
+ itemEl.classList.add("selected");
6321
+ }
6322
+ if (item.disabled) {
6323
+ itemEl.classList.add("disabled");
6324
+ itemEl.setAttribute("disabled", "");
6325
+ }
6326
+ if (item.id) {
6327
+ itemEl.id = item.id;
6328
+ itemEl.setAttribute("data-id", item.id);
6329
+ }
6330
+ itemEl.setAttribute("data-index", index.toString());
6331
+ this._flexContainer.appendChild(itemEl);
6332
+ });
6333
+ }
6334
+ _dispatchSelectEvent() {
6335
+ this.dispatchEvent(
6336
+ new CustomEvent("wavelength-menu-select", {
6337
+ detail: this.value,
6338
+ bubbles: true,
6339
+ composed: true
6340
+ })
6341
+ );
6342
+ }
6343
+ };
6344
+ if (!customElements.get("wavelength-menu")) {
6345
+ customElements.define("wavelength-menu", WavelengthMenu);
6346
+ }
6229
6347
  export {
6230
6348
  BaseWavelengthInput,
6231
6349
  BaseWavelengthMultiSelectAutocomplete,
@@ -6240,6 +6358,7 @@ export {
6240
6358
  WavelengthForm,
6241
6359
  WavelengthInput,
6242
6360
  WavelengthManyPlanes,
6361
+ WavelengthMenu,
6243
6362
  WavelengthMultiSelectAutocomplete,
6244
6363
  WavelengthNavBar,
6245
6364
  WavelengthNotificationPanel,
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@wavelengthusaf/web-components",
3
3
  "author": "563 EWS - Wavelength",
4
4
  "license": "MIT",
5
- "version": "1.9.0",
5
+ "version": "1.10.0",
6
6
  "description": "Common component library used by Wavelength developers (NATIVE WEB COMPONENTS)",
7
7
  "main": "/dist/cjs/index.cjs",
8
8
  "module": "/dist/esm/index.js",