@abydahana/iconpicker 1.0.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.
Files changed (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +303 -0
  3. package/dist/core/font-loader.d.ts +2 -0
  4. package/dist/core/font-loader.d.ts.map +1 -0
  5. package/dist/core/font-loader.js +35 -0
  6. package/dist/core/font-loader.js.map +1 -0
  7. package/dist/core/grid.d.ts +26 -0
  8. package/dist/core/grid.d.ts.map +1 -0
  9. package/dist/core/grid.js +101 -0
  10. package/dist/core/grid.js.map +1 -0
  11. package/dist/core/icon-picker.d.ts +29 -0
  12. package/dist/core/icon-picker.d.ts.map +1 -0
  13. package/dist/core/icon-picker.js +314 -0
  14. package/dist/core/icon-picker.js.map +1 -0
  15. package/dist/core/popover.d.ts +17 -0
  16. package/dist/core/popover.d.ts.map +1 -0
  17. package/dist/core/popover.js +96 -0
  18. package/dist/core/popover.js.map +1 -0
  19. package/dist/dom/template.d.ts +18 -0
  20. package/dist/dom/template.d.ts.map +1 -0
  21. package/dist/dom/template.js +121 -0
  22. package/dist/dom/template.js.map +1 -0
  23. package/dist/iconpicker.css +547 -0
  24. package/dist/iconsets/bootstrap.d.ts +3 -0
  25. package/dist/iconsets/bootstrap.d.ts.map +1 -0
  26. package/dist/iconsets/bootstrap.js +2059 -0
  27. package/dist/iconsets/bootstrap.js.map +1 -0
  28. package/dist/iconsets/boxicons.d.ts +3 -0
  29. package/dist/iconsets/boxicons.d.ts.map +1 -0
  30. package/dist/iconsets/boxicons.js +823 -0
  31. package/dist/iconsets/boxicons.js.map +1 -0
  32. package/dist/iconsets/fontawesome.d.ts +3 -0
  33. package/dist/iconsets/fontawesome.d.ts.map +1 -0
  34. package/dist/iconsets/fontawesome.js +1904 -0
  35. package/dist/iconsets/fontawesome.js.map +1 -0
  36. package/dist/iconsets/index.d.ts +10 -0
  37. package/dist/iconsets/index.d.ts.map +1 -0
  38. package/dist/iconsets/index.js +29 -0
  39. package/dist/iconsets/index.js.map +1 -0
  40. package/dist/iconsets/lucide.d.ts +3 -0
  41. package/dist/iconsets/lucide.d.ts.map +1 -0
  42. package/dist/iconsets/lucide.js +1816 -0
  43. package/dist/iconsets/lucide.js.map +1 -0
  44. package/dist/iconsets/mdi.d.ts +3 -0
  45. package/dist/iconsets/mdi.d.ts.map +1 -0
  46. package/dist/iconsets/mdi.js +7457 -0
  47. package/dist/iconsets/mdi.js.map +1 -0
  48. package/dist/iconsets/remix.d.ts +3 -0
  49. package/dist/iconsets/remix.d.ts.map +1 -0
  50. package/dist/iconsets/remix.js +2901 -0
  51. package/dist/iconsets/remix.js.map +1 -0
  52. package/dist/iconsets/tabler.d.ts +3 -0
  53. package/dist/iconsets/tabler.d.ts.map +1 -0
  54. package/dist/iconsets/tabler.js +4888 -0
  55. package/dist/iconsets/tabler.js.map +1 -0
  56. package/dist/index.d.ts +14 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +15 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/themes/aksara.css +72 -0
  61. package/dist/themes/base.css +211 -0
  62. package/dist/themes/bootstrap.css +70 -0
  63. package/dist/themes/default.css +72 -0
  64. package/dist/themes/tailwind.css +112 -0
  65. package/dist/types.d.ts +35 -0
  66. package/dist/types.d.ts.map +1 -0
  67. package/dist/types.js +2 -0
  68. package/dist/types.js.map +1 -0
  69. package/package.json +69 -0
  70. package/src/core/font-loader.ts +38 -0
  71. package/src/core/grid.ts +129 -0
  72. package/src/core/icon-picker.ts +353 -0
  73. package/src/core/popover.ts +113 -0
  74. package/src/dom/template.ts +173 -0
  75. package/src/iconsets/bootstrap.ts +2060 -0
  76. package/src/iconsets/boxicons.ts +824 -0
  77. package/src/iconsets/fontawesome.ts +1905 -0
  78. package/src/iconsets/index.ts +31 -0
  79. package/src/iconsets/lucide.ts +1817 -0
  80. package/src/iconsets/mdi.ts +7458 -0
  81. package/src/iconsets/remix.ts +2902 -0
  82. package/src/iconsets/tabler.ts +4889 -0
  83. package/src/index.ts +18 -0
  84. package/src/themes/aksara.css +72 -0
  85. package/src/themes/base.css +211 -0
  86. package/src/themes/bootstrap.css +70 -0
  87. package/src/themes/default.css +72 -0
  88. package/src/themes/index.css +5 -0
  89. package/src/themes/tailwind.css +112 -0
  90. package/src/types.ts +37 -0
package/src/index.ts ADDED
@@ -0,0 +1,18 @@
1
+ export * from "./types";
2
+ export * from "./core/icon-picker";
3
+ export * from "./core/popover";
4
+ export * from "./core/grid";
5
+ export * from "./core/font-loader";
6
+ export * from "./iconsets/index";
7
+
8
+ import { IconPicker } from "./core/icon-picker";
9
+ import type { IconPickerOptions } from "./types";
10
+
11
+ /**
12
+ * Helper factory function
13
+ */
14
+ export function createIconPicker(target: HTMLElement | string, options?: IconPickerOptions): IconPicker {
15
+ return new IconPicker(target, options);
16
+ }
17
+
18
+ export default IconPicker;
@@ -0,0 +1,72 @@
1
+ /**
2
+ * @abydahana/iconpicker Aksara UI Theme
3
+ */
4
+
5
+ .iconpicker-theme-aksara {
6
+ background-color: var(--aksara-bg-surface, #ffffff);
7
+ color: var(--aksara-text-body, #172033);
8
+ border: var(--aksara-border-width, 1px) solid var(--aksara-border, #d7deea);
9
+ border-radius: var(--aksara-radius-md, 0.75rem);
10
+ box-shadow: var(--aksara-shadow-md, 0 12px 30px rgba(15, 23, 42, 0.1));
11
+ }
12
+
13
+ .iconpicker-theme-aksara .iconpicker-search-input {
14
+ background-color: var(--aksara-bg-body, #fbfcff);
15
+ color: var(--aksara-text-body, #172033);
16
+ border: 1px solid var(--aksara-border, #d7deea);
17
+ border-radius: var(--aksara-radius-sm, 0.5rem);
18
+ }
19
+
20
+ .iconpicker-theme-aksara .iconpicker-search-input:focus {
21
+ border-color: var(--aksara-primary, #2563eb);
22
+ box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15);
23
+ }
24
+
25
+ .iconpicker-theme-aksara .iconpicker-tab {
26
+ color: var(--aksara-text-body-secondary, #64748b);
27
+ border-radius: var(--aksara-radius-xs, 0.25rem);
28
+ }
29
+
30
+ .iconpicker-theme-aksara .iconpicker-tab:hover {
31
+ background-color: var(--aksara-surface-hover, #f4f7fb);
32
+ color: var(--aksara-text-body, #172033);
33
+ }
34
+
35
+ .iconpicker-theme-aksara .iconpicker-tab.is-active {
36
+ background-color: var(--aksara-primary, #2563eb);
37
+ color: #ffffff;
38
+ }
39
+
40
+ .iconpicker-theme-aksara .iconpicker-tab.is-active .iconpicker-tab-count {
41
+ opacity: 0.85;
42
+ }
43
+
44
+ .iconpicker-theme-aksara .iconpicker-item {
45
+ color: var(--aksara-text-body, #172033);
46
+ }
47
+
48
+ .iconpicker-theme-aksara .iconpicker-item:hover {
49
+ background-color: var(--aksara-surface-hover, #f4f7fb);
50
+ border-color: var(--aksara-border, #d7deea);
51
+ }
52
+
53
+ .iconpicker-theme-aksara .iconpicker-item.is-selected {
54
+ background-color: var(--aksara-primary, #2563eb);
55
+ color: #ffffff;
56
+ border-color: var(--aksara-primary, #2563eb);
57
+ }
58
+
59
+ .iconpicker-theme-aksara .iconpicker-footer {
60
+ border-top-color: var(--aksara-border-subtle, #e6ebf3);
61
+ background-color: var(--aksara-bg-body-secondary, #f4f7fb);
62
+ border-bottom-left-radius: var(--aksara-radius-md, 0.75rem);
63
+ border-bottom-right-radius: var(--aksara-radius-md, 0.75rem);
64
+ }
65
+
66
+ .iconpicker-theme-aksara .iconpicker-btn-clear {
67
+ color: var(--aksara-danger, #ef4444);
68
+ }
69
+
70
+ .iconpicker-theme-aksara .iconpicker-btn-clear:hover {
71
+ background-color: rgba(239, 68, 68, 0.1);
72
+ }
@@ -0,0 +1,211 @@
1
+ /**
2
+ * @abydahana/iconpicker Base Styles
3
+ */
4
+
5
+ .iconpicker-popover {
6
+ position: fixed;
7
+ z-index: 99999 !important;
8
+ display: flex;
9
+ flex-direction: column;
10
+ box-sizing: border-box;
11
+ width: 340px;
12
+ max-width: calc(100vw - 20px);
13
+ max-height: 380px;
14
+ user-select: none;
15
+ font-family: inherit;
16
+ font-size: 14px;
17
+ line-height: 1.5;
18
+ animation: iconpickerFadeIn 0.15s ease-out;
19
+ }
20
+
21
+ @keyframes iconpickerFadeIn {
22
+ from {
23
+ opacity: 0;
24
+ transform: translateY(4px) scale(0.98);
25
+ }
26
+ to {
27
+ opacity: 1;
28
+ transform: translateY(0) scale(1);
29
+ }
30
+ }
31
+
32
+ .iconpicker-header {
33
+ display: flex;
34
+ flex-direction: column;
35
+ flex-shrink: 0;
36
+ gap: 8px;
37
+ padding: 10px 12px 8px;
38
+ }
39
+
40
+ .iconpicker-search-wrapper {
41
+ position: relative;
42
+ display: flex;
43
+ align-items: center;
44
+ width: 100%;
45
+ }
46
+
47
+ .iconpicker-search-icon {
48
+ position: absolute;
49
+ left: 10px;
50
+ display: flex;
51
+ align-items: center;
52
+ pointer-events: none;
53
+ opacity: 0.5;
54
+ }
55
+
56
+ .iconpicker-search-input {
57
+ width: 100%;
58
+ box-sizing: border-box;
59
+ height: 34px;
60
+ padding: 6px 30px 6px 32px;
61
+ font-size: 13px;
62
+ border-radius: 6px;
63
+ outline: none;
64
+ transition:
65
+ border-color 0.15s ease,
66
+ box-shadow 0.15s ease;
67
+ }
68
+
69
+ .iconpicker-search-clear {
70
+ position: absolute;
71
+ right: 6px;
72
+ display: flex;
73
+ align-items: center;
74
+ justify-content: center;
75
+ width: 22px;
76
+ height: 22px;
77
+ border: none;
78
+ background: transparent;
79
+ cursor: pointer;
80
+ border-radius: 50%;
81
+ opacity: 0.5;
82
+ transition:
83
+ opacity 0.15s ease,
84
+ background-color 0.15s ease;
85
+ }
86
+
87
+ .iconpicker-search-clear:hover {
88
+ opacity: 1;
89
+ background-color: rgba(0, 0, 0, 0.06);
90
+ }
91
+
92
+ .iconpicker-tabs {
93
+ display: flex;
94
+ align-items: center;
95
+ gap: 4px;
96
+ overflow-x: auto;
97
+ padding-bottom: 2px;
98
+ scrollbar-width: none;
99
+ }
100
+
101
+ .iconpicker-tabs::-webkit-scrollbar {
102
+ display: none;
103
+ }
104
+
105
+ .iconpicker-tab {
106
+ display: inline-flex;
107
+ align-items: center;
108
+ gap: 4px;
109
+ padding: 3px 8px;
110
+ font-size: 11px;
111
+ font-weight: 500;
112
+ border-radius: 4px;
113
+ border: none;
114
+ background: transparent;
115
+ cursor: pointer;
116
+ white-space: nowrap;
117
+ transition:
118
+ background-color 0.15s ease,
119
+ color 0.15s ease;
120
+ }
121
+
122
+ .iconpicker-tab-count {
123
+ font-size: 10px;
124
+ opacity: 0.6;
125
+ }
126
+
127
+ .iconpicker-body {
128
+ position: relative;
129
+ flex: 1 1 auto;
130
+ overflow-y: auto;
131
+ min-height: 180px;
132
+ max-height: 240px;
133
+ padding: 8px 12px;
134
+ }
135
+
136
+ .iconpicker-grid {
137
+ display: grid;
138
+ grid-template-columns: repeat(auto-fill, minmax(36px, 1fr));
139
+ gap: 6px;
140
+ }
141
+
142
+ .iconpicker-item {
143
+ display: flex;
144
+ align-items: center;
145
+ justify-content: center;
146
+ width: 36px;
147
+ height: 36px;
148
+ padding: 0;
149
+ border: 1px solid transparent;
150
+ border-radius: 6px;
151
+ background: transparent;
152
+ cursor: pointer;
153
+ font-size: 18px;
154
+ line-height: 1;
155
+ transition:
156
+ transform 0.1s ease,
157
+ background-color 0.15s ease,
158
+ border-color 0.15s ease;
159
+ }
160
+
161
+ .iconpicker-item:hover {
162
+ transform: scale(1.1);
163
+ }
164
+
165
+ .iconpicker-empty {
166
+ padding: 24px 12px;
167
+ text-align: center;
168
+ font-size: 12px;
169
+ opacity: 0.6;
170
+ }
171
+
172
+ .iconpicker-footer {
173
+ display: flex;
174
+ align-items: center;
175
+ justify-content: space-between;
176
+ flex-shrink: 0;
177
+ padding: 8px 12px;
178
+ border-top-width: 1px;
179
+ border-top-style: solid;
180
+ font-size: 12px;
181
+ }
182
+
183
+ .iconpicker-selected-preview {
184
+ display: flex;
185
+ align-items: center;
186
+ gap: 6px;
187
+ overflow: hidden;
188
+ max-width: 220px;
189
+ }
190
+
191
+ .iconpicker-preview-icon {
192
+ font-size: 16px;
193
+ flex-shrink: 0;
194
+ }
195
+
196
+ .iconpicker-preview-name {
197
+ white-space: nowrap;
198
+ overflow: hidden;
199
+ text-overflow: ellipsis;
200
+ font-size: 12px;
201
+ }
202
+
203
+ .iconpicker-btn-clear {
204
+ border: none;
205
+ background: transparent;
206
+ cursor: pointer;
207
+ font-size: 12px;
208
+ font-weight: 500;
209
+ padding: 3px 8px;
210
+ border-radius: 4px;
211
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @abydahana/iconpicker Bootstrap 5 Theme
3
+ */
4
+
5
+ .iconpicker-theme-bootstrap {
6
+ background-color: var(--bs-body-bg, #ffffff);
7
+ color: var(--bs-body-color, #212529);
8
+ border: var(--bs-border-width, 1px) solid var(--bs-border-color, #dee2e6);
9
+ border-radius: var(--bs-border-radius, 0.375rem);
10
+ box-shadow: var(--bs-box-shadow, 0 0.5rem 1rem rgba(0, 0, 0, 0.15));
11
+ }
12
+
13
+ .iconpicker-theme-bootstrap .iconpicker-search-input {
14
+ background-color: var(--bs-body-bg, #ffffff);
15
+ color: var(--bs-body-color, #212529);
16
+ border: 1px solid var(--bs-border-color, #dee2e6);
17
+ border-radius: var(--bs-border-radius-sm, 0.25rem);
18
+ }
19
+
20
+ .iconpicker-theme-bootstrap .iconpicker-search-input:focus {
21
+ border-color: #86b7fe;
22
+ box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
23
+ }
24
+
25
+ .iconpicker-theme-bootstrap .iconpicker-tab {
26
+ color: var(--bs-secondary-color, #6c757d);
27
+ border-radius: 50rem;
28
+ padding: 2px 10px;
29
+ }
30
+
31
+ .iconpicker-theme-bootstrap .iconpicker-tab:hover {
32
+ background-color: var(--bs-tertiary-bg, #f8f9fa);
33
+ color: var(--bs-body-color, #212529);
34
+ }
35
+
36
+ .iconpicker-theme-bootstrap .iconpicker-tab.is-active {
37
+ background-color: var(--bs-primary, #0d6efd);
38
+ color: #ffffff;
39
+ }
40
+
41
+ .iconpicker-theme-bootstrap .iconpicker-item {
42
+ color: var(--bs-body-color, #212529);
43
+ border-radius: var(--bs-border-radius-sm, 0.25rem);
44
+ }
45
+
46
+ .iconpicker-theme-bootstrap .iconpicker-item:hover {
47
+ background-color: var(--bs-tertiary-bg, #f8f9fa);
48
+ border-color: var(--bs-border-color, #dee2e6);
49
+ }
50
+
51
+ .iconpicker-theme-bootstrap .iconpicker-item.is-selected {
52
+ background-color: var(--bs-primary, #0d6efd);
53
+ color: #ffffff;
54
+ border-color: var(--bs-primary, #0d6efd);
55
+ }
56
+
57
+ .iconpicker-theme-bootstrap .iconpicker-footer {
58
+ border-top-color: var(--bs-border-color, #dee2e6);
59
+ background-color: var(--bs-tertiary-bg, #f8f9fa);
60
+ border-bottom-left-radius: var(--bs-border-radius, 0.375rem);
61
+ border-bottom-right-radius: var(--bs-border-radius, 0.375rem);
62
+ }
63
+
64
+ .iconpicker-theme-bootstrap .iconpicker-btn-clear {
65
+ color: var(--bs-danger, #dc3545);
66
+ }
67
+
68
+ .iconpicker-theme-bootstrap .iconpicker-btn-clear:hover {
69
+ background-color: rgba(220, 53, 69, 0.1);
70
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * @abydahana/iconpicker Default Neutral Theme
3
+ */
4
+
5
+ .iconpicker-theme-default {
6
+ background-color: #ffffff;
7
+ color: #1e293b;
8
+ border: 1px solid #cbd5e1;
9
+ border-radius: 8px;
10
+ box-shadow:
11
+ 0 4px 20px -2px rgba(0, 0, 0, 0.12),
12
+ 0 2px 6px -1px rgba(0, 0, 0, 0.08);
13
+ }
14
+
15
+ .iconpicker-theme-default .iconpicker-search-input {
16
+ background-color: #f8fafc;
17
+ color: #1e293b;
18
+ border: 1px solid #cbd5e1;
19
+ border-radius: 6px;
20
+ }
21
+
22
+ .iconpicker-theme-default .iconpicker-search-input:focus {
23
+ background-color: #ffffff;
24
+ border-color: #3b82f6;
25
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2);
26
+ }
27
+
28
+ .iconpicker-theme-default .iconpicker-tab {
29
+ color: #64748b;
30
+ border-radius: 4px;
31
+ }
32
+
33
+ .iconpicker-theme-default .iconpicker-tab:hover {
34
+ background-color: #f1f5f9;
35
+ color: #0f172a;
36
+ }
37
+
38
+ .iconpicker-theme-default .iconpicker-tab.is-active {
39
+ background-color: #3b82f6;
40
+ color: #ffffff;
41
+ }
42
+
43
+ .iconpicker-theme-default .iconpicker-item {
44
+ color: #334155;
45
+ border-radius: 6px;
46
+ }
47
+
48
+ .iconpicker-theme-default .iconpicker-item:hover {
49
+ background-color: #f1f5f9;
50
+ border-color: #cbd5e1;
51
+ }
52
+
53
+ .iconpicker-theme-default .iconpicker-item.is-selected {
54
+ background-color: #3b82f6;
55
+ color: #ffffff;
56
+ border-color: #3b82f6;
57
+ }
58
+
59
+ .iconpicker-theme-default .iconpicker-footer {
60
+ border-top-color: #f1f5f9;
61
+ background-color: #f8fafc;
62
+ border-bottom-left-radius: 8px;
63
+ border-bottom-right-radius: 8px;
64
+ }
65
+
66
+ .iconpicker-theme-default .iconpicker-btn-clear {
67
+ color: #ef4444;
68
+ }
69
+
70
+ .iconpicker-theme-default .iconpicker-btn-clear:hover {
71
+ background-color: #fee2e2;
72
+ }
@@ -0,0 +1,5 @@
1
+ @import "./base.css";
2
+ @import "./default.css";
3
+ @import "./aksara.css";
4
+ @import "./bootstrap.css";
5
+ @import "./tailwind.css";
@@ -0,0 +1,112 @@
1
+ /**
2
+ * @abydahana/iconpicker Tailwind UI Theme
3
+ */
4
+
5
+ .iconpicker-theme-tailwind {
6
+ background-color: #ffffff;
7
+ color: #0f172a;
8
+ border: 1px solid #e2e8f0;
9
+ border-radius: 0.75rem;
10
+ box-shadow:
11
+ 0 10px 25px -5px rgba(0, 0, 0, 0.1),
12
+ 0 8px 10px -6px rgba(0, 0, 0, 0.1);
13
+ }
14
+
15
+ .iconpicker-theme-tailwind .iconpicker-search-input {
16
+ background-color: #f8fafc;
17
+ color: #0f172a;
18
+ border: 1px solid #e2e8f0;
19
+ border-radius: 0.5rem;
20
+ }
21
+
22
+ .iconpicker-theme-tailwind .iconpicker-search-input:focus {
23
+ background-color: #ffffff;
24
+ border-color: #6366f1;
25
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.2);
26
+ }
27
+
28
+ .iconpicker-theme-tailwind .iconpicker-tab {
29
+ color: #64748b;
30
+ border-radius: 0.375rem;
31
+ font-weight: 500;
32
+ }
33
+
34
+ .iconpicker-theme-tailwind .iconpicker-tab:hover {
35
+ background-color: #f1f5f9;
36
+ color: #0f172a;
37
+ }
38
+
39
+ .iconpicker-theme-tailwind .iconpicker-tab.is-active {
40
+ background-color: #6366f1;
41
+ color: #ffffff;
42
+ }
43
+
44
+ .iconpicker-theme-tailwind .iconpicker-item {
45
+ color: #334155;
46
+ border-radius: 0.5rem;
47
+ }
48
+
49
+ .iconpicker-theme-tailwind .iconpicker-item:hover {
50
+ background-color: #f1f5f9;
51
+ border-color: #cbd5e1;
52
+ }
53
+
54
+ .iconpicker-theme-tailwind .iconpicker-item.is-selected {
55
+ background-color: #6366f1;
56
+ color: #ffffff;
57
+ border-color: #6366f1;
58
+ }
59
+
60
+ .iconpicker-theme-tailwind .iconpicker-footer {
61
+ border-top-color: #f1f5f9;
62
+ background-color: #f8fafc;
63
+ border-bottom-left-radius: 0.75rem;
64
+ border-bottom-right-radius: 0.75rem;
65
+ }
66
+
67
+ .iconpicker-theme-tailwind .iconpicker-btn-clear {
68
+ color: #ef4444;
69
+ }
70
+
71
+ .iconpicker-theme-tailwind .iconpicker-btn-clear:hover {
72
+ background-color: #fee2e2;
73
+ }
74
+
75
+ /* Dark mode auto support for Tailwind theme */
76
+ @media (prefers-color-scheme: dark) {
77
+ .iconpicker-theme-tailwind {
78
+ background-color: #0f172a;
79
+ color: #f8fafc;
80
+ border-color: #1e293b;
81
+ box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.5);
82
+ }
83
+
84
+ .iconpicker-theme-tailwind .iconpicker-search-input {
85
+ background-color: #1e293b;
86
+ color: #f8fafc;
87
+ border-color: #334155;
88
+ }
89
+
90
+ .iconpicker-theme-tailwind .iconpicker-tab {
91
+ color: #94a3b8;
92
+ }
93
+
94
+ .iconpicker-theme-tailwind .iconpicker-tab:hover {
95
+ background-color: #1e293b;
96
+ color: #f8fafc;
97
+ }
98
+
99
+ .iconpicker-theme-tailwind .iconpicker-item {
100
+ color: #cbd5e1;
101
+ }
102
+
103
+ .iconpicker-theme-tailwind .iconpicker-item:hover {
104
+ background-color: #1e293b;
105
+ border-color: #334155;
106
+ }
107
+
108
+ .iconpicker-theme-tailwind .iconpicker-footer {
109
+ border-top-color: #1e293b;
110
+ background-color: #0b1120;
111
+ }
112
+ }
package/src/types.ts ADDED
@@ -0,0 +1,37 @@
1
+ export interface IconItem {
2
+ name: string;
3
+ className: string;
4
+ set: string;
5
+ keywords?: string[];
6
+ }
7
+
8
+ export interface IconSetDefinition {
9
+ id: string;
10
+ title: string;
11
+ prefix: string;
12
+ formatter?: (name: string) => string;
13
+ icons: string[];
14
+ }
15
+
16
+ export type IconPickerTheme = "aksara" | "bootstrap" | "tailwind" | "default";
17
+ export type IconPickerPlacement = "bottom-start" | "bottom-end" | "bottom" | "top-start" | "top-end" | "top" | "auto";
18
+
19
+ export interface IconPickerOptions {
20
+ theme?: IconPickerTheme;
21
+ placement?: IconPickerPlacement;
22
+ iconSets?: (string | IconSetDefinition)[];
23
+ defaultSet?: string;
24
+ searchPlaceholder?: string;
25
+ value?: string;
26
+ container?: HTMLElement | string;
27
+ showTabs?: boolean;
28
+ showFooter?: boolean;
29
+ closeOnSelect?: boolean;
30
+ emptyText?: string;
31
+ itemsPerPage?: number;
32
+ loadFonts?: boolean;
33
+ fontUrls?: Record<string, string>;
34
+ onSelect?: (icon: IconItem) => void;
35
+ onOpen?: () => void;
36
+ onClose?: () => void;
37
+ }