@nuralyui/iconpicker 0.0.1

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.
Files changed (67) hide show
  1. package/bundle.js +2796 -0
  2. package/bundle.js.gz +0 -0
  3. package/controllers/event.controller.d.ts +38 -0
  4. package/controllers/event.controller.d.ts.map +1 -0
  5. package/controllers/event.controller.js +68 -0
  6. package/controllers/event.controller.js.map +1 -0
  7. package/controllers/index.d.ts +9 -0
  8. package/controllers/index.d.ts.map +1 -0
  9. package/controllers/index.js +9 -0
  10. package/controllers/index.js.map +1 -0
  11. package/controllers/search.controller.d.ts +34 -0
  12. package/controllers/search.controller.d.ts.map +1 -0
  13. package/controllers/search.controller.js +55 -0
  14. package/controllers/search.controller.js.map +1 -0
  15. package/controllers/selection.controller.d.ts +27 -0
  16. package/controllers/selection.controller.d.ts.map +1 -0
  17. package/controllers/selection.controller.js +39 -0
  18. package/controllers/selection.controller.js.map +1 -0
  19. package/icon-picker.component.d.ts +119 -0
  20. package/icon-picker.component.d.ts.map +1 -0
  21. package/icon-picker.component.js +337 -0
  22. package/icon-picker.component.js.map +1 -0
  23. package/icon-picker.constant.d.ts +15 -0
  24. package/icon-picker.constant.d.ts.map +1 -0
  25. package/icon-picker.constant.js +31 -0
  26. package/icon-picker.constant.js.map +1 -0
  27. package/icon-picker.style.d.ts +8 -0
  28. package/icon-picker.style.d.ts.map +1 -0
  29. package/icon-picker.style.js +216 -0
  30. package/icon-picker.style.js.map +1 -0
  31. package/icon-picker.types.d.ts +49 -0
  32. package/icon-picker.types.d.ts.map +1 -0
  33. package/icon-picker.types.js +7 -0
  34. package/icon-picker.types.js.map +1 -0
  35. package/index.d.ts +9 -0
  36. package/index.d.ts.map +1 -0
  37. package/index.js +9 -0
  38. package/index.js.map +1 -0
  39. package/interfaces/icon-picker.interface.d.ts +13 -0
  40. package/interfaces/icon-picker.interface.d.ts.map +1 -0
  41. package/interfaces/icon-picker.interface.js +7 -0
  42. package/interfaces/icon-picker.interface.js.map +1 -0
  43. package/interfaces/index.d.ts +7 -0
  44. package/interfaces/index.d.ts.map +1 -0
  45. package/interfaces/index.js +7 -0
  46. package/interfaces/index.js.map +1 -0
  47. package/package.json +37 -0
  48. package/react.d.ts +14 -0
  49. package/react.d.ts.map +1 -0
  50. package/react.js +21 -0
  51. package/react.js.map +1 -0
  52. package/utils/icon-filter.utils.d.ts +29 -0
  53. package/utils/icon-filter.utils.d.ts.map +1 -0
  54. package/utils/icon-filter.utils.js +96 -0
  55. package/utils/icon-filter.utils.js.map +1 -0
  56. package/utils/icon-loader.utils.d.ts +39 -0
  57. package/utils/icon-loader.utils.d.ts.map +1 -0
  58. package/utils/icon-loader.utils.js +115 -0
  59. package/utils/icon-loader.utils.js.map +1 -0
  60. package/utils/index.d.ts +8 -0
  61. package/utils/index.d.ts.map +1 -0
  62. package/utils/index.js +8 -0
  63. package/utils/index.js.map +1 -0
  64. package/utils/lucide-icons.d.ts +10 -0
  65. package/utils/lucide-icons.d.ts.map +1 -0
  66. package/utils/lucide-icons.js +1624 -0
  67. package/utils/lucide-icons.js.map +1 -0
package/bundle.js.gz ADDED
Binary file
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Nuraly, Laabidi Aymen
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import { ReactiveController, ReactiveControllerHost } from 'lit';
7
+ import type { IconPickerIcon } from '../icon-picker.types.js';
8
+ interface EventHost extends ReactiveControllerHost {
9
+ dispatchEvent(event: Event): boolean;
10
+ }
11
+ export declare class IconPickerEventController implements ReactiveController {
12
+ host: EventHost;
13
+ constructor(host: EventHost);
14
+ hostConnected(): void;
15
+ hostDisconnected(): void;
16
+ /**
17
+ * Dispatch icon change event
18
+ */
19
+ dispatchChangeEvent(value: string, icon: IconPickerIcon | null): void;
20
+ /**
21
+ * Dispatch search event
22
+ */
23
+ dispatchSearchEvent(query: string): void;
24
+ /**
25
+ * Dispatch clear event
26
+ */
27
+ dispatchClearEvent(): void;
28
+ /**
29
+ * Dispatch open event
30
+ */
31
+ dispatchOpenEvent(): void;
32
+ /**
33
+ * Dispatch close event
34
+ */
35
+ dispatchCloseEvent(): void;
36
+ }
37
+ export {};
38
+ //# sourceMappingURL=event.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.controller.d.ts","sourceRoot":"","sources":["../../../../../src/components/iconpicker/controllers/event.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,KAAK,CAAC;AACjE,OAAO,KAAK,EAAyB,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAErF,UAAU,SAAU,SAAQ,sBAAsB;IAChD,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;CACtC;AAED,qBAAa,yBAA0B,YAAW,kBAAkB;IAClE,IAAI,EAAE,SAAS,CAAC;gBAEJ,IAAI,EAAE,SAAS;IAI3B,aAAa;IAIb,gBAAgB;IAIhB;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI;IAWrE;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAUxC;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAU1B;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAUzB;;OAEG;IACH,kBAAkB,IAAI,IAAI;CAS3B"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Nuraly, Laabidi Aymen
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ export class IconPickerEventController {
7
+ constructor(host) {
8
+ (this.host = host).addController(this);
9
+ }
10
+ hostConnected() {
11
+ // Initialization
12
+ }
13
+ hostDisconnected() {
14
+ // Cleanup
15
+ }
16
+ /**
17
+ * Dispatch icon change event
18
+ */
19
+ dispatchChangeEvent(value, icon) {
20
+ const detail = { value, icon };
21
+ this.host.dispatchEvent(new CustomEvent('nr-icon-picker-change', {
22
+ detail,
23
+ bubbles: true,
24
+ composed: true
25
+ }));
26
+ }
27
+ /**
28
+ * Dispatch search event
29
+ */
30
+ dispatchSearchEvent(query) {
31
+ this.host.dispatchEvent(new CustomEvent('nr-icon-picker-search', {
32
+ detail: { query },
33
+ bubbles: true,
34
+ composed: true
35
+ }));
36
+ }
37
+ /**
38
+ * Dispatch clear event
39
+ */
40
+ dispatchClearEvent() {
41
+ this.host.dispatchEvent(new CustomEvent('nr-icon-picker-clear', {
42
+ detail: {},
43
+ bubbles: true,
44
+ composed: true
45
+ }));
46
+ }
47
+ /**
48
+ * Dispatch open event
49
+ */
50
+ dispatchOpenEvent() {
51
+ this.host.dispatchEvent(new CustomEvent('nr-icon-picker-open', {
52
+ detail: {},
53
+ bubbles: true,
54
+ composed: true
55
+ }));
56
+ }
57
+ /**
58
+ * Dispatch close event
59
+ */
60
+ dispatchCloseEvent() {
61
+ this.host.dispatchEvent(new CustomEvent('nr-icon-picker-close', {
62
+ detail: {},
63
+ bubbles: true,
64
+ composed: true
65
+ }));
66
+ }
67
+ }
68
+ //# sourceMappingURL=event.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.controller.js","sourceRoot":"","sources":["../../../../../src/components/iconpicker/controllers/event.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,OAAO,yBAAyB;IAGpC,YAAY,IAAe;QACzB,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,aAAa;QACX,iBAAiB;IACnB,CAAC;IAED,gBAAgB;QACd,UAAU;IACZ,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,KAAa,EAAE,IAA2B;QAC5D,MAAM,MAAM,GAA0B,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,aAAa,CACrB,IAAI,WAAW,CAAC,uBAAuB,EAAE;YACvC,MAAM;YACN,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;SACf,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,KAAa;QAC/B,IAAI,CAAC,IAAI,CAAC,aAAa,CACrB,IAAI,WAAW,CAAC,uBAAuB,EAAE;YACvC,MAAM,EAAE,EAAE,KAAK,EAAE;YACjB,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;SACf,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,IAAI,CAAC,IAAI,CAAC,aAAa,CACrB,IAAI,WAAW,CAAC,sBAAsB,EAAE;YACtC,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;SACf,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,IAAI,CAAC,IAAI,CAAC,aAAa,CACrB,IAAI,WAAW,CAAC,qBAAqB,EAAE;YACrC,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;SACf,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,IAAI,CAAC,IAAI,CAAC,aAAa,CACrB,IAAI,WAAW,CAAC,sBAAsB,EAAE;YACtC,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;SACf,CAAC,CACH,CAAC;IACJ,CAAC;CACF","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { ReactiveController, ReactiveControllerHost } from 'lit';\nimport type { IconPickerChangeEvent, IconPickerIcon } from '../icon-picker.types.js';\n\ninterface EventHost extends ReactiveControllerHost {\n dispatchEvent(event: Event): boolean;\n}\n\nexport class IconPickerEventController implements ReactiveController {\n host: EventHost;\n\n constructor(host: EventHost) {\n (this.host = host).addController(this);\n }\n\n hostConnected() {\n // Initialization\n }\n\n hostDisconnected() {\n // Cleanup\n }\n\n /**\n * Dispatch icon change event\n */\n dispatchChangeEvent(value: string, icon: IconPickerIcon | null): void {\n const detail: IconPickerChangeEvent = { value, icon };\n this.host.dispatchEvent(\n new CustomEvent('nr-icon-picker-change', {\n detail,\n bubbles: true,\n composed: true\n })\n );\n }\n\n /**\n * Dispatch search event\n */\n dispatchSearchEvent(query: string): void {\n this.host.dispatchEvent(\n new CustomEvent('nr-icon-picker-search', {\n detail: { query },\n bubbles: true,\n composed: true\n })\n );\n }\n\n /**\n * Dispatch clear event\n */\n dispatchClearEvent(): void {\n this.host.dispatchEvent(\n new CustomEvent('nr-icon-picker-clear', {\n detail: {},\n bubbles: true,\n composed: true\n })\n );\n }\n\n /**\n * Dispatch open event\n */\n dispatchOpenEvent(): void {\n this.host.dispatchEvent(\n new CustomEvent('nr-icon-picker-open', {\n detail: {},\n bubbles: true,\n composed: true\n })\n );\n }\n\n /**\n * Dispatch close event\n */\n dispatchCloseEvent(): void {\n this.host.dispatchEvent(\n new CustomEvent('nr-icon-picker-close', {\n detail: {},\n bubbles: true,\n composed: true\n })\n );\n }\n}\n"]}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Nuraly, Laabidi Aymen
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ export { IconPickerSelectionController } from './selection.controller.js';
7
+ export { IconPickerSearchController } from './search.controller.js';
8
+ export { IconPickerEventController } from './event.controller.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/iconpicker/controllers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Nuraly, Laabidi Aymen
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ export { IconPickerSelectionController } from './selection.controller.js';
7
+ export { IconPickerSearchController } from './search.controller.js';
8
+ export { IconPickerEventController } from './event.controller.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/iconpicker/controllers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nexport { IconPickerSelectionController } from './selection.controller.js';\nexport { IconPickerSearchController } from './search.controller.js';\nexport { IconPickerEventController } from './event.controller.js';\n"]}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Nuraly, Laabidi Aymen
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import { ReactiveController, ReactiveControllerHost } from 'lit';
7
+ import type { IconPickerIcon, IconPickerSearchOptions } from '../icon-picker.types.js';
8
+ interface SearchHost extends ReactiveControllerHost {
9
+ allIcons: IconPickerIcon[];
10
+ filteredIcons: IconPickerIcon[];
11
+ searchQuery: string;
12
+ }
13
+ export declare class IconPickerSearchController implements ReactiveController {
14
+ host: SearchHost;
15
+ private debounceTimer;
16
+ private debounceDelay;
17
+ constructor(host: SearchHost, debounceDelay?: number);
18
+ hostConnected(): void;
19
+ hostDisconnected(): void;
20
+ /**
21
+ * Perform search with debouncing
22
+ */
23
+ search(query: string, options?: IconPickerSearchOptions): void;
24
+ /**
25
+ * Perform immediate search without debounce
26
+ */
27
+ performSearch(query: string, options?: IconPickerSearchOptions): void;
28
+ /**
29
+ * Clear search
30
+ */
31
+ clearSearch(): void;
32
+ }
33
+ export {};
34
+ //# sourceMappingURL=search.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.controller.d.ts","sourceRoot":"","sources":["../../../../../src/components/iconpicker/controllers/search.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,KAAK,CAAC;AAEjE,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvF,UAAU,UAAW,SAAQ,sBAAsB;IACjD,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,aAAa,EAAE,cAAc,EAAE,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,0BAA2B,YAAW,kBAAkB;IACnE,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,aAAa,CAAO;gBAEhB,IAAI,EAAE,UAAU,EAAE,aAAa,SAAM;IAKjD,aAAa;IAIb,gBAAgB;IAMhB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,IAAI;IAY9D;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,IAAI;IAarE;;OAEG;IACH,WAAW,IAAI,IAAI;CAKpB"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Nuraly, Laabidi Aymen
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import { IconFilterUtils } from '../utils/index.js';
7
+ export class IconPickerSearchController {
8
+ constructor(host, debounceDelay = 300) {
9
+ this.debounceTimer = null;
10
+ this.debounceDelay = 300;
11
+ (this.host = host).addController(this);
12
+ this.debounceDelay = debounceDelay;
13
+ }
14
+ hostConnected() {
15
+ // Initialization
16
+ }
17
+ hostDisconnected() {
18
+ if (this.debounceTimer) {
19
+ clearTimeout(this.debounceTimer);
20
+ }
21
+ }
22
+ /**
23
+ * Perform search with debouncing
24
+ */
25
+ search(query, options) {
26
+ this.host.searchQuery = query;
27
+ if (this.debounceTimer) {
28
+ clearTimeout(this.debounceTimer);
29
+ }
30
+ this.debounceTimer = window.setTimeout(() => {
31
+ this.performSearch(query, options);
32
+ }, this.debounceDelay);
33
+ }
34
+ /**
35
+ * Perform immediate search without debounce
36
+ */
37
+ performSearch(query, options) {
38
+ if (!query || query.trim() === '') {
39
+ this.host.filteredIcons = [...this.host.allIcons];
40
+ }
41
+ else {
42
+ this.host.filteredIcons = IconFilterUtils.searchAndRank(query, this.host.allIcons, options);
43
+ }
44
+ this.host.requestUpdate();
45
+ }
46
+ /**
47
+ * Clear search
48
+ */
49
+ clearSearch() {
50
+ this.host.searchQuery = '';
51
+ this.host.filteredIcons = [...this.host.allIcons];
52
+ this.host.requestUpdate();
53
+ }
54
+ }
55
+ //# sourceMappingURL=search.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.controller.js","sourceRoot":"","sources":["../../../../../src/components/iconpicker/controllers/search.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AASpD,MAAM,OAAO,0BAA0B;IAKrC,YAAY,IAAgB,EAAE,aAAa,GAAG,GAAG;QAHzC,kBAAa,GAAkB,IAAI,CAAC;QACpC,kBAAa,GAAG,GAAG,CAAC;QAG1B,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,aAAa;QACX,iBAAiB;IACnB,CAAC;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAa,EAAE,OAAiC;QACrD,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAE9B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;YAC1C,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,KAAa,EAAE,OAAiC;QAC5D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,aAAa,CACrD,KAAK,EACL,IAAI,CAAC,IAAI,CAAC,QAAQ,EAClB,OAAO,CACR,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC5B,CAAC;CACF","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { ReactiveController, ReactiveControllerHost } from 'lit';\nimport { IconFilterUtils } from '../utils/index.js';\nimport type { IconPickerIcon, IconPickerSearchOptions } from '../icon-picker.types.js';\n\ninterface SearchHost extends ReactiveControllerHost {\n allIcons: IconPickerIcon[];\n filteredIcons: IconPickerIcon[];\n searchQuery: string;\n}\n\nexport class IconPickerSearchController implements ReactiveController {\n host: SearchHost;\n private debounceTimer: number | null = null;\n private debounceDelay = 300;\n\n constructor(host: SearchHost, debounceDelay = 300) {\n (this.host = host).addController(this);\n this.debounceDelay = debounceDelay;\n }\n\n hostConnected() {\n // Initialization\n }\n\n hostDisconnected() {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n }\n\n /**\n * Perform search with debouncing\n */\n search(query: string, options?: IconPickerSearchOptions): void {\n this.host.searchQuery = query;\n\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n\n this.debounceTimer = window.setTimeout(() => {\n this.performSearch(query, options);\n }, this.debounceDelay);\n }\n\n /**\n * Perform immediate search without debounce\n */\n performSearch(query: string, options?: IconPickerSearchOptions): void {\n if (!query || query.trim() === '') {\n this.host.filteredIcons = [...this.host.allIcons];\n } else {\n this.host.filteredIcons = IconFilterUtils.searchAndRank(\n query,\n this.host.allIcons,\n options\n );\n }\n this.host.requestUpdate();\n }\n\n /**\n * Clear search\n */\n clearSearch(): void {\n this.host.searchQuery = '';\n this.host.filteredIcons = [...this.host.allIcons];\n this.host.requestUpdate();\n }\n}\n"]}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Nuraly, Laabidi Aymen
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import { ReactiveController, ReactiveControllerHost } from 'lit';
7
+ import type { IconPickerHost } from '../interfaces/index.js';
8
+ import type { IconPickerIcon } from '../icon-picker.types.js';
9
+ export declare class IconPickerSelectionController implements ReactiveController {
10
+ host: ReactiveControllerHost & IconPickerHost;
11
+ constructor(host: ReactiveControllerHost & IconPickerHost);
12
+ hostConnected(): void;
13
+ hostDisconnected(): void;
14
+ /**
15
+ * Handle icon selection
16
+ */
17
+ selectIcon(icon: IconPickerIcon): void;
18
+ /**
19
+ * Clear selection
20
+ */
21
+ clearSelection(): void;
22
+ /**
23
+ * Check if an icon is selected
24
+ */
25
+ isSelected(icon: IconPickerIcon): boolean;
26
+ }
27
+ //# sourceMappingURL=selection.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.controller.d.ts","sourceRoot":"","sources":["../../../../../src/components/iconpicker/controllers/selection.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,KAAK,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,qBAAa,6BAA8B,YAAW,kBAAkB;IACtE,IAAI,EAAE,sBAAsB,GAAG,cAAc,CAAC;gBAElC,IAAI,EAAE,sBAAsB,GAAG,cAAc;IAIzD,aAAa;IAIb,gBAAgB;IAIhB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAMtC;;OAEG;IACH,cAAc,IAAI,IAAI;IAMtB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;CAG1C"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Nuraly, Laabidi Aymen
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ export class IconPickerSelectionController {
7
+ constructor(host) {
8
+ (this.host = host).addController(this);
9
+ }
10
+ hostConnected() {
11
+ // Initialization if needed
12
+ }
13
+ hostDisconnected() {
14
+ // Cleanup if needed
15
+ }
16
+ /**
17
+ * Handle icon selection
18
+ */
19
+ selectIcon(icon) {
20
+ this.host.value = icon.name;
21
+ this.host.selectedIcon = icon;
22
+ this.host.requestUpdate();
23
+ }
24
+ /**
25
+ * Clear selection
26
+ */
27
+ clearSelection() {
28
+ this.host.value = '';
29
+ this.host.selectedIcon = null;
30
+ this.host.requestUpdate();
31
+ }
32
+ /**
33
+ * Check if an icon is selected
34
+ */
35
+ isSelected(icon) {
36
+ return this.host.value === icon.name;
37
+ }
38
+ }
39
+ //# sourceMappingURL=selection.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.controller.js","sourceRoot":"","sources":["../../../../../src/components/iconpicker/controllers/selection.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,OAAO,6BAA6B;IAGxC,YAAY,IAA6C;QACvD,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,aAAa;QACX,2BAA2B;IAC7B,CAAC;IAED,gBAAgB;QACd,oBAAoB;IACtB,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAoB;QAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAoB;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC;IACvC,CAAC;CACF","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { ReactiveController, ReactiveControllerHost } from 'lit';\nimport type { IconPickerHost } from '../interfaces/index.js';\nimport type { IconPickerIcon } from '../icon-picker.types.js';\n\nexport class IconPickerSelectionController implements ReactiveController {\n host: ReactiveControllerHost & IconPickerHost;\n\n constructor(host: ReactiveControllerHost & IconPickerHost) {\n (this.host = host).addController(this);\n }\n\n hostConnected() {\n // Initialization if needed\n }\n\n hostDisconnected() {\n // Cleanup if needed\n }\n\n /**\n * Handle icon selection\n */\n selectIcon(icon: IconPickerIcon): void {\n this.host.value = icon.name;\n this.host.selectedIcon = icon;\n this.host.requestUpdate();\n }\n\n /**\n * Clear selection\n */\n clearSelection(): void {\n this.host.value = '';\n this.host.selectedIcon = null;\n this.host.requestUpdate();\n }\n\n /**\n * Check if an icon is selected\n */\n isSelected(icon: IconPickerIcon): boolean {\n return this.host.value === icon.name;\n }\n}\n"]}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Nuraly, Laabidi Aymen
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import { LitElement } from 'lit';
7
+ import '@lit-labs/virtualizer';
8
+ import '../dropdown/dropdown.component.js';
9
+ import '../input/input.component.js';
10
+ import '../icon/icon.component.js';
11
+ import '../button/button.component.js';
12
+ import { IconPickerSize, IconType } from './icon-picker.types.js';
13
+ import type { IconPickerIcon } from './icon-picker.types.js';
14
+ import type { IconPickerHost } from './interfaces/index.js';
15
+ declare const NrIconPickerElement_base: (new (...args: any[]) => import("@nuralyui/common/mixins").DependencyAware) & (new (...args: any[]) => import("@nuralyui/common/mixins").ThemeAware) & (new (...args: any[]) => import("@nuralyui/common/mixins").EventHandlerCapable) & typeof LitElement;
16
+ /**
17
+ * Advanced icon picker component with search, virtual scrolling, and accessibility.
18
+ *
19
+ * Uses Lucide icons (1500+ beautiful icons) and provides an intuitive selection interface with
20
+ * search filtering, keyboard navigation, and multiple display options.
21
+ *
22
+ * @example
23
+ * ```html
24
+ * <!-- Basic usage -->
25
+ * <nr-icon-picker></nr-icon-picker>
26
+ *
27
+ * <!-- With value -->
28
+ * <nr-icon-picker value="heart"></nr-icon-picker>
29
+ *
30
+ * <!-- Custom configuration -->
31
+ * <nr-icon-picker
32
+ * value="star"
33
+ * size="large"
34
+ * placement="top"
35
+ * show-search
36
+ * show-clear>
37
+ * </nr-icon-picker>
38
+ * ```
39
+ *
40
+ * @fires nr-icon-picker-change - Icon selection changed
41
+ * @fires nr-icon-picker-open - Dropdown opened
42
+ * @fires nr-icon-picker-close - Dropdown closed
43
+ * @fires nr-icon-picker-search - Search query changed
44
+ * @fires nr-icon-picker-clear - Selection cleared
45
+ *
46
+ * @cssproperty --icon-picker-dropdown-width - Width of dropdown
47
+ * @cssproperty --icon-picker-icon-size - Size of icon items
48
+ * @cssproperty --icon-picker-selected-bg - Selected icon background
49
+ * @cssproperty --icon-picker-selected-border - Selected icon border
50
+ */
51
+ export declare class NrIconPickerElement extends NrIconPickerElement_base implements IconPickerHost {
52
+ static styles: import("lit").CSSResult;
53
+ requiredComponents: string[];
54
+ private selectionController;
55
+ private searchController;
56
+ private eventController;
57
+ value: string;
58
+ size: IconPickerSize;
59
+ placement: string;
60
+ trigger: string;
61
+ disabled: boolean;
62
+ readonly: boolean;
63
+ placeholder: string;
64
+ iconTypes: IconType[];
65
+ showSearch: boolean;
66
+ showClear: boolean;
67
+ maxVisible: number;
68
+ dropdownOpen: boolean;
69
+ allIcons: IconPickerIcon[];
70
+ filteredIcons: IconPickerIcon[];
71
+ searchQuery: string;
72
+ selectedIcon: IconPickerIcon | null;
73
+ isLoading: boolean;
74
+ connectedCallback(): void;
75
+ /**
76
+ * Load icons from Lucide library
77
+ */
78
+ private loadIcons;
79
+ /**
80
+ * Handle icon selection
81
+ */
82
+ handleIconSelect(icon: IconPickerIcon): void;
83
+ /**
84
+ * Handle search input
85
+ */
86
+ private handleSearchInput;
87
+ /**
88
+ * Handle clear button
89
+ */
90
+ private handleClear;
91
+ /**
92
+ * Handle dropdown open
93
+ */
94
+ private handleDropdownOpen;
95
+ /**
96
+ * Handle dropdown close
97
+ */
98
+ private handleDropdownClose;
99
+ /**
100
+ * Toggle dropdown
101
+ */
102
+ private toggleDropdown;
103
+ /**
104
+ * Render trigger button
105
+ */
106
+ private renderTrigger;
107
+ /**
108
+ * Render icon grid
109
+ */
110
+ private renderIconGrid;
111
+ render(): import("lit-html").TemplateResult<1>;
112
+ }
113
+ declare global {
114
+ interface HTMLElementTagNameMap {
115
+ 'nr-icon-picker': NrIconPickerElement;
116
+ }
117
+ }
118
+ export {};
119
+ //# sourceMappingURL=icon-picker.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-picker.component.d.ts","sourceRoot":"","sources":["../../../../src/components/iconpicker/icon-picker.component.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAC;AAKhD,OAAO,uBAAuB,CAAC;AAI/B,OAAO,mCAAmC,CAAC;AAC3C,OAAO,6BAA6B,CAAC;AACrC,OAAO,2BAA2B,CAAC;AACnC,OAAO,+BAA+B,CAAC;AAIvC,OAAO,EACH,cAAc,EAGd,QAAQ,EAEX,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAmB7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBACa,mBAAoB,SAAQ,wBAA8B,YAAW,cAAc;IAC9F,OAAgB,MAAM,0BAAU;IAEvB,kBAAkB,WAAuD;IAGlF,OAAO,CAAC,mBAAmB,CAA2C;IACtE,OAAO,CAAC,gBAAgB,CAA+D;IACvF,OAAO,CAAC,eAAe,CAAuC;IAGnB,KAAK,SAAgB;IACrB,IAAI,iBAAwB;IAC3C,SAAS,EAAE,MAAM,CAA4B;IAC7C,OAAO,EAAE,MAAM,CAA4B;IAC3B,QAAQ,UAAS;IAChC,QAAQ,UAAS;IAClB,WAAW,SAAuB;IACnC,SAAS,EAAE,QAAQ,EAAE,CAAoB;IACb,UAAU,UAAQ;IACnB,SAAS,UAAQ;IACjB,UAAU,SAAO;IAG9D,YAAY,UAAS;IACrB,QAAQ,EAAE,cAAc,EAAE,CAAM;IAChC,aAAa,EAAE,cAAc,EAAE,CAAM;IACrC,WAAW,SAAgB;IAC3B,YAAY,EAAE,cAAc,GAAG,IAAI,CAAQ;IAC3C,SAAS,UAAS;IAElB,iBAAiB;IAK1B;;OAEG;IACH,OAAO,CAAC,SAAS;IAiBjB;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAM5C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAM3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,aAAa;IA6BrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgEb,MAAM;CAwBhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,mBAAmB,CAAC;KACvC;CACF"}