@leavittsoftware/web 2.16.1 → 2.17.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leavittsoftware/web",
3
- "version": "2.16.1",
3
+ "version": "2.17.0",
4
4
  "license": "Apache-2.0",
5
5
  "description": "",
6
6
  "files": [
@@ -40,5 +40,5 @@
40
40
  "url": "https://github.com/LeavittSoftware/titanium-elements/issues"
41
41
  },
42
42
  "homepage": "https://github.com/LeavittSoftware/titanium-elements/#readme",
43
- "gitHead": "d19181af214c77f77a8d36e3b9bfd50a74eaf864"
43
+ "gitHead": "c58d1e3fef8c8d44458755ee3b6586f045fd5a91"
44
44
  }
@@ -1,8 +1,10 @@
1
+ import { PropertyValues } from 'lit';
1
2
  import { TitaniumSingleSelectBase } from '../../titanium/single-select-base/single-select-base';
2
3
  export type MaterialIconDatabaseEntry = {
3
4
  Id: number;
4
5
  keywords: string;
5
6
  icon: string;
7
+ favorite?: boolean;
6
8
  };
7
9
  /**
8
10
  * Titanium icon picker - a picker for material icons
@@ -15,9 +17,19 @@ export declare class TitaniumIconPicker extends TitaniumSingleSelectBase<Materia
15
17
  accessor label: string;
16
18
  accessor placeholder: string;
17
19
  accessor pathToSelectedText: string;
20
+ /**
21
+ * Optional: A string list of icons names that are presented at the top of the suggestion list.
22
+ */
23
+ accessor favorites: string | undefined;
24
+ /**
25
+ * Optional: A string list of icons names to make available to user. If non provided, all icons will be available
26
+ */
27
+ accessor whitelist: string | undefined;
18
28
  firstUpdated(): Promise<void>;
29
+ update(changed: PropertyValues<this>): void;
19
30
  protected onInputChanged(searchTerm: string): void;
20
31
  protected renderSelectedLeadingInputSlot(entity: MaterialIconDatabaseEntry): import("lit-html").TemplateResult<1>;
32
+ static styles: import("lit").CSSResult[];
21
33
  protected renderSuggestion(entity: MaterialIconDatabaseEntry): import("lit-html").TemplateResult<1>;
22
34
  }
23
35
  //# sourceMappingURL=icon-picker.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { __decorate } from "tslib";
2
- import { html } from 'lit';
2
+ import { css, html } from 'lit';
3
3
  import { property, customElement } from 'lit/decorators.js';
4
4
  import Fuse from 'fuse.js';
5
5
  import { TitaniumSingleSelectBase } from '../../titanium/single-select-base/single-select-base';
@@ -21,14 +21,44 @@ let TitaniumIconPicker = class TitaniumIconPicker extends TitaniumSingleSelectBa
21
21
  #pathToSelectedText_accessor_storage = 'icon';
22
22
  get pathToSelectedText() { return this.#pathToSelectedText_accessor_storage; }
23
23
  set pathToSelectedText(value) { this.#pathToSelectedText_accessor_storage = value; }
24
- #iconDatabase;
24
+ #favorites_accessor_storage;
25
+ /**
26
+ * Optional: A string list of icons names that are presented at the top of the suggestion list.
27
+ */
28
+ get favorites() { return this.#favorites_accessor_storage; }
29
+ set favorites(value) { this.#favorites_accessor_storage = value; }
30
+ #whitelist_accessor_storage;
31
+ /**
32
+ * Optional: A string list of icons names to make available to user. If non provided, all icons will be available
33
+ */
34
+ get whitelist() { return this.#whitelist_accessor_storage; }
35
+ set whitelist(value) { this.#whitelist_accessor_storage = value; }
36
+ #iconDatabase = [];
25
37
  async firstUpdated() {
26
- this.#iconDatabase = MaterialSymbols.map((icon, i) => ({
38
+ this.#iconDatabase = this.#generateDatabase();
39
+ this.defaultSuggestions = this.#generateSuggestions();
40
+ }
41
+ update(changed) {
42
+ if (changed.has('favorites') || changed.has('whitelist')) {
43
+ this.#iconDatabase = this.#generateDatabase();
44
+ this.defaultSuggestions = this.#generateSuggestions();
45
+ }
46
+ super.update(changed);
47
+ }
48
+ #generateDatabase() {
49
+ const whitelist = this.whitelist?.split(',');
50
+ const favoriteIcons = this.favorites?.split(',');
51
+ return MaterialSymbols.filter((icon) => whitelist?.some((w) => icon === w) ?? true)
52
+ .map((icon, i) => ({
27
53
  Id: i + 1,
28
54
  icon: icon,
29
55
  keywords: icon,
30
- }));
31
- this.defaultSuggestions = this.#iconDatabase.slice(0, 50);
56
+ favorite: favoriteIcons?.some((o) => o === icon),
57
+ }))
58
+ .sort((a, b) => (b.favorite ? 1 : 0) - (a.favorite ? 1 : 0) || a.icon.localeCompare(b.icon));
59
+ }
60
+ #generateSuggestions() {
61
+ return this.#iconDatabase?.slice(0, 50);
32
62
  }
33
63
  #doSearchDebouncer = new Debouncer((searchTerm) => this.#doSearch(searchTerm));
34
64
  #abortController = new AbortController();
@@ -55,12 +85,45 @@ let TitaniumIconPicker = class TitaniumIconPicker extends TitaniumSingleSelectBa
55
85
  renderSelectedLeadingInputSlot(entity) {
56
86
  return html ` <md-icon slot="leading-icon">${entity.icon}</md-icon> `;
57
87
  }
88
+ static { this.styles = [
89
+ ...TitaniumSingleSelectBase.styles,
90
+ css `
91
+ md-menu-item[inert] {
92
+ --md-menu-item-bottom-space: 4px;
93
+ --md-menu-item-top-space: 4px;
94
+ --md-menu-item-two-line-container-height: 50px;
95
+ background-color: var(--md-sys-color-surface-container-high);
96
+ --md-menu-item-supporting-text-size: 12px;
97
+ }
98
+ `,
99
+ ]; }
58
100
  renderSuggestion(entity) {
59
- return html `<md-menu-item .item=${entity} ?selected=${this.selected?.Id === entity.Id}>
60
- <slot name="trailing-icon" slot="trailing-icon"></slot>
61
- <span slot="headline">${entity.icon}</span>
62
- <md-icon slot="start">${entity.icon}</md-icon>
63
- </md-menu-item>`;
101
+ const favorites = this.defaultSuggestions.filter((o) => o.favorite);
102
+ const nonFavorites = this.defaultSuggestions.filter((o) => !o.favorite);
103
+ return html `
104
+ ${!this.searchTerm && favorites?.length && favorites.at(0) === entity
105
+ ? html `<md-menu-item inert>
106
+ <md-icon slot="end">favorite</md-icon>
107
+ <div slot="headline">Favorite icon${favorites.length === 1 ? '' : 's'}</div>
108
+ <div slot="supporting-text">${favorites.length} most commonly used icon${favorites.length === 1 ? '' : 's'}</div>
109
+ </md-menu-item>`
110
+ : ''}
111
+ ${!this.searchTerm && nonFavorites.at(0) === entity
112
+ ? html `
113
+ <md-menu-item inert>
114
+ <md-icon slot="end">sort_by_alpha</md-icon>
115
+ <div slot="headline">All icons</div>
116
+ <div slot="supporting-text">Showing ${nonFavorites.length} of ${this.#iconDatabase.length - favorites.length}</div>
117
+ </md-menu-item>
118
+ `
119
+ : ''}
120
+
121
+ <md-menu-item .item=${entity} ?selected=${this.selected?.Id === entity.Id}>
122
+ <slot name="trailing-icon" slot="trailing-icon"></slot>
123
+ <span slot="headline">${entity.icon}</span>
124
+ <md-icon slot="start">${entity.icon}</md-icon>
125
+ </md-menu-item>
126
+ `;
64
127
  }
65
128
  };
66
129
  __decorate([
@@ -72,6 +135,12 @@ __decorate([
72
135
  __decorate([
73
136
  property({ type: String })
74
137
  ], TitaniumIconPicker.prototype, "pathToSelectedText", null);
138
+ __decorate([
139
+ property({ type: String })
140
+ ], TitaniumIconPicker.prototype, "favorites", null);
141
+ __decorate([
142
+ property({ type: String })
143
+ ], TitaniumIconPicker.prototype, "whitelist", null);
75
144
  TitaniumIconPicker = __decorate([
76
145
  customElement('titanium-icon-picker')
77
146
  ], TitaniumIconPicker);
@@ -1 +1 @@
1
- {"version":3,"file":"icon-picker.js","sourceRoot":"","sources":["icon-picker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"icon-picker.js","sourceRoot":"","sources":["icon-picker.ts"],"names":[],"mappings":"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"}