@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.
- package/bundle.js +2796 -0
- package/bundle.js.gz +0 -0
- package/controllers/event.controller.d.ts +38 -0
- package/controllers/event.controller.d.ts.map +1 -0
- package/controllers/event.controller.js +68 -0
- package/controllers/event.controller.js.map +1 -0
- package/controllers/index.d.ts +9 -0
- package/controllers/index.d.ts.map +1 -0
- package/controllers/index.js +9 -0
- package/controllers/index.js.map +1 -0
- package/controllers/search.controller.d.ts +34 -0
- package/controllers/search.controller.d.ts.map +1 -0
- package/controllers/search.controller.js +55 -0
- package/controllers/search.controller.js.map +1 -0
- package/controllers/selection.controller.d.ts +27 -0
- package/controllers/selection.controller.d.ts.map +1 -0
- package/controllers/selection.controller.js +39 -0
- package/controllers/selection.controller.js.map +1 -0
- package/icon-picker.component.d.ts +119 -0
- package/icon-picker.component.d.ts.map +1 -0
- package/icon-picker.component.js +337 -0
- package/icon-picker.component.js.map +1 -0
- package/icon-picker.constant.d.ts +15 -0
- package/icon-picker.constant.d.ts.map +1 -0
- package/icon-picker.constant.js +31 -0
- package/icon-picker.constant.js.map +1 -0
- package/icon-picker.style.d.ts +8 -0
- package/icon-picker.style.d.ts.map +1 -0
- package/icon-picker.style.js +216 -0
- package/icon-picker.style.js.map +1 -0
- package/icon-picker.types.d.ts +49 -0
- package/icon-picker.types.d.ts.map +1 -0
- package/icon-picker.types.js +7 -0
- package/icon-picker.types.js.map +1 -0
- package/index.d.ts +9 -0
- package/index.d.ts.map +1 -0
- package/index.js +9 -0
- package/index.js.map +1 -0
- package/interfaces/icon-picker.interface.d.ts +13 -0
- package/interfaces/icon-picker.interface.d.ts.map +1 -0
- package/interfaces/icon-picker.interface.js +7 -0
- package/interfaces/icon-picker.interface.js.map +1 -0
- package/interfaces/index.d.ts +7 -0
- package/interfaces/index.d.ts.map +1 -0
- package/interfaces/index.js +7 -0
- package/interfaces/index.js.map +1 -0
- package/package.json +37 -0
- package/react.d.ts +14 -0
- package/react.d.ts.map +1 -0
- package/react.js +21 -0
- package/react.js.map +1 -0
- package/utils/icon-filter.utils.d.ts +29 -0
- package/utils/icon-filter.utils.d.ts.map +1 -0
- package/utils/icon-filter.utils.js +96 -0
- package/utils/icon-filter.utils.js.map +1 -0
- package/utils/icon-loader.utils.d.ts +39 -0
- package/utils/icon-loader.utils.d.ts.map +1 -0
- package/utils/icon-loader.utils.js +115 -0
- package/utils/icon-loader.utils.js.map +1 -0
- package/utils/index.d.ts +8 -0
- package/utils/index.d.ts.map +1 -0
- package/utils/index.js +8 -0
- package/utils/index.js.map +1 -0
- package/utils/lucide-icons.d.ts +10 -0
- package/utils/lucide-icons.d.ts.map +1 -0
- package/utils/lucide-icons.js +1624 -0
- 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"}
|