@magmonium/one 0.4.55 → 0.4.57
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/assets/i18n/af.json +103 -47
- package/assets/i18n/am.json +111 -59
- package/assets/i18n/ar.json +84 -59
- package/assets/i18n/as.json +105 -50
- package/assets/i18n/az.json +106 -50
- package/assets/i18n/ba.json +94 -45
- package/assets/i18n/be.json +105 -49
- package/assets/i18n/bg.json +99 -43
- package/assets/i18n/bn.json +104 -54
- package/assets/i18n/br.json +91 -43
- package/assets/i18n/brx.json +97 -29
- package/assets/i18n/bs.json +100 -43
- package/assets/i18n/ca.json +103 -47
- package/assets/i18n/ceb.json +99 -40
- package/assets/i18n/cnr.json +83 -43
- package/assets/i18n/co.json +105 -47
- package/assets/i18n/cs.json +98 -43
- package/assets/i18n/cy.json +83 -48
- package/assets/i18n/da.json +89 -35
- package/assets/i18n/de.json +75 -53
- package/assets/i18n/doi.json +107 -45
- package/assets/i18n/el.json +93 -44
- package/assets/i18n/en.json +2 -1
- package/assets/i18n/eo.json +98 -44
- package/assets/i18n/es.json +59 -46
- package/assets/i18n/et.json +97 -42
- package/assets/i18n/eu.json +106 -48
- package/assets/i18n/fa.json +79 -43
- package/assets/i18n/fi.json +91 -37
- package/assets/i18n/fr.json +78 -53
- package/assets/i18n/fy.json +96 -43
- package/assets/i18n/ga.json +89 -45
- package/assets/i18n/gd.json +84 -47
- package/assets/i18n/gl.json +95 -45
- package/assets/i18n/gu.json +103 -52
- package/assets/i18n/ha.json +93 -45
- package/assets/i18n/haw.json +95 -45
- package/assets/i18n/he.json +84 -34
- package/assets/i18n/hi.json +84 -61
- package/assets/i18n/hmn.json +88 -38
- package/assets/i18n/hr.json +100 -43
- package/assets/i18n/hu.json +90 -45
- package/assets/i18n/hy.json +106 -51
- package/assets/i18n/id.json +77 -31
- package/assets/i18n/ie.json +78 -24
- package/assets/i18n/ig.json +88 -40
- package/assets/i18n/ilo.json +86 -29
- package/assets/i18n/is.json +89 -44
- package/assets/i18n/it.json +69 -48
- package/assets/i18n/iw.json +85 -38
- package/assets/i18n/ja.json +67 -48
- package/assets/i18n/jw.json +81 -34
- package/assets/i18n/ka.json +93 -43
- package/assets/i18n/kk.json +87 -42
- package/assets/i18n/km.json +85 -41
- package/assets/i18n/kn.json +105 -51
- package/assets/i18n/ko.json +68 -51
- package/assets/i18n/kok.json +104 -42
- package/assets/i18n/ks.json +94 -27
- package/assets/i18n/ku.json +84 -40
- package/assets/i18n/ky.json +84 -41
- package/assets/i18n/la.json +81 -37
- package/assets/i18n/lb.json +80 -39
- package/assets/i18n/lo.json +81 -39
- package/assets/i18n/lt.json +82 -43
- package/assets/i18n/lv.json +81 -42
- package/assets/i18n/ma.json +93 -28
- package/assets/i18n/mai.json +98 -35
- package/assets/i18n/me.json +67 -20
- package/assets/i18n/mg.json +82 -39
- package/assets/i18n/mi.json +86 -42
- package/assets/i18n/mk.json +81 -40
- package/assets/i18n/ml.json +98 -42
- package/assets/i18n/mn.json +81 -40
- package/assets/i18n/mni.json +92 -27
- package/assets/i18n/mr.json +100 -44
- package/assets/i18n/ms.json +77 -35
- package/assets/i18n/mt.json +79 -37
- package/assets/i18n/my.json +80 -39
- package/assets/i18n/ne.json +76 -35
- package/assets/i18n/nl.json +80 -47
- package/assets/i18n/no.json +71 -30
- package/assets/i18n/ny.json +100 -37
- package/assets/i18n/or.json +105 -49
- package/assets/i18n/pa.json +100 -45
- package/assets/i18n/pl.json +65 -45
- package/assets/i18n/ps.json +75 -33
- package/assets/i18n/pt.json +61 -44
- package/assets/i18n/rm.json +71 -26
- package/assets/i18n/ro.json +74 -34
- package/assets/i18n/ru.json +62 -45
- package/assets/i18n/sa.json +98 -36
- package/assets/i18n/sat.json +98 -37
- package/assets/i18n/sc.json +70 -25
- package/assets/i18n/sd.json +95 -31
- package/assets/i18n/si.json +72 -34
- package/assets/i18n/sk.json +71 -31
- package/assets/i18n/sl.json +70 -32
- package/assets/i18n/sm.json +71 -30
- package/assets/i18n/sn.json +66 -25
- package/assets/i18n/so.json +66 -26
- package/assets/i18n/sq.json +95 -39
- package/assets/i18n/sr.json +68 -29
- package/assets/i18n/st.json +68 -27
- package/assets/i18n/su.json +64 -24
- package/assets/i18n/sv.json +66 -25
- package/assets/i18n/sw.json +60 -20
- package/assets/i18n/ta.json +92 -42
- package/assets/i18n/te.json +95 -39
- package/assets/i18n/tg.json +69 -31
- package/assets/i18n/th.json +65 -27
- package/assets/i18n/tl.json +86 -26
- package/assets/i18n/tr.json +63 -46
- package/assets/i18n/uk.json +64 -26
- package/assets/i18n/ur.json +93 -33
- package/assets/i18n/uz.json +64 -25
- package/assets/i18n/vi.json +64 -26
- package/assets/i18n/xh.json +65 -25
- package/assets/i18n/yi.json +66 -28
- package/assets/i18n/yo.json +65 -26
- package/assets/i18n/zh.json +71 -37
- package/assets/i18n/zu.json +63 -25
- package/fesm2022/{magmonium-one-base-dropdown-Tf6PltuH.mjs → magmonium-one-base-dropdown-BgLka4oB.mjs} +5 -5
- package/fesm2022/{magmonium-one-base-dropdown-Tf6PltuH.mjs.map → magmonium-one-base-dropdown-BgLka4oB.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-checkbox-CbEdjmtz.mjs → magmonium-one-checkbox-CyVd_a7p.mjs} +2 -2
- package/fesm2022/{magmonium-one-checkbox-CbEdjmtz.mjs.map → magmonium-one-checkbox-CyVd_a7p.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-directives-C_i3gUFT.mjs → magmonium-one-directives-Dbe0pfCf.mjs} +2 -2
- package/fesm2022/magmonium-one-directives-Dbe0pfCf.mjs.map +1 -0
- package/fesm2022/{magmonium-one-file.service-Bo06pU3_.mjs → magmonium-one-file.service-D39FjShR.mjs} +2 -1
- package/fesm2022/magmonium-one-file.service-D39FjShR.mjs.map +1 -0
- package/fesm2022/{magmonium-one-group-C7alQqSj.mjs → magmonium-one-group-BPhM2IIa.mjs} +2 -2
- package/fesm2022/{magmonium-one-group-C7alQqSj.mjs.map → magmonium-one-group-BPhM2IIa.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-image-editor-DHlktZ6z.mjs → magmonium-one-image-editor-CKx7BRVF.mjs} +2 -2
- package/fesm2022/{magmonium-one-image-editor-DHlktZ6z.mjs.map → magmonium-one-image-editor-CKx7BRVF.mjs.map} +1 -1
- package/fesm2022/magmonium-one-input-DqHPorA1.mjs.map +1 -1
- package/fesm2022/{magmonium-one-label-B95NhEzQ.mjs → magmonium-one-label-B8WJHiU4.mjs} +12 -2
- package/fesm2022/magmonium-one-label-B8WJHiU4.mjs.map +1 -0
- package/fesm2022/{magmonium-one-menu-DmZJi88Y.mjs → magmonium-one-menu-CxswmD0O.mjs} +2 -2
- package/fesm2022/{magmonium-one-menu-DmZJi88Y.mjs.map → magmonium-one-menu-CxswmD0O.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-multi-range-BnWtK-O0.mjs → magmonium-one-multi-range-mv5rz3uW.mjs} +3 -3
- package/fesm2022/{magmonium-one-multi-range-BnWtK-O0.mjs.map → magmonium-one-multi-range-mv5rz3uW.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-otp-BOiv-9eT.mjs → magmonium-one-otp-BlP0t9w1.mjs} +2 -2
- package/fesm2022/{magmonium-one-otp-BOiv-9eT.mjs.map → magmonium-one-otp-BlP0t9w1.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-password-Bsv1wUIJ.mjs → magmonium-one-password-CTnJ9M7d.mjs} +2 -2
- package/fesm2022/{magmonium-one-password-Bsv1wUIJ.mjs.map → magmonium-one-password-CTnJ9M7d.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-radio-BsQv0Wof.mjs → magmonium-one-radio-BanML2y5.mjs} +2 -2
- package/fesm2022/{magmonium-one-radio-BsQv0Wof.mjs.map → magmonium-one-radio-BanML2y5.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-range-DPR659yG.mjs → magmonium-one-range-B_3WiQR7.mjs} +5 -3
- package/fesm2022/magmonium-one-range-B_3WiQR7.mjs.map +1 -0
- package/fesm2022/{magmonium-one-selector-CXZMCqmO.mjs → magmonium-one-selector-Do0PsJBx.mjs} +2 -2
- package/fesm2022/{magmonium-one-selector-CXZMCqmO.mjs.map → magmonium-one-selector-Do0PsJBx.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-text-Bo4XPBXB.mjs → magmonium-one-text-DDA0gCOd.mjs} +4 -2
- package/fesm2022/magmonium-one-text-DDA0gCOd.mjs.map +1 -0
- package/fesm2022/magmonium-one.mjs +422 -99
- package/fesm2022/magmonium-one.mjs.map +1 -1
- package/package.json +1 -1
- package/types/magmonium-one.d.ts +132 -3
- package/fesm2022/magmonium-one-directives-C_i3gUFT.mjs.map +0 -1
- package/fesm2022/magmonium-one-file.service-Bo06pU3_.mjs.map +0 -1
- package/fesm2022/magmonium-one-label-B95NhEzQ.mjs.map +0 -1
- package/fesm2022/magmonium-one-range-DPR659yG.mjs.map +0 -1
- package/fesm2022/magmonium-one-text-Bo4XPBXB.mjs.map +0 -1
package/assets/i18n/zu.json
CHANGED
|
@@ -47,6 +47,8 @@
|
|
|
47
47
|
"antigua-and-barbuda": "i-Antigua ne-Barbuda",
|
|
48
48
|
"api-service": "Isevisi ye-API",
|
|
49
49
|
"app": "uhlelo lokusebenza",
|
|
50
|
+
"app-color": "Iro yeApp",
|
|
51
|
+
"app-color-suggestions": "Iro iro ngokusebenza",
|
|
50
52
|
"app-country-blocked": "Upho lwethu akwazi ngendlela yokuba.",
|
|
51
53
|
"app-country-blocked-named": "<appName> ayitholakali ezweni lakini.",
|
|
52
54
|
"app-description": "Incazelo Yohlelo Lokusebenza",
|
|
@@ -54,10 +56,12 @@
|
|
|
54
56
|
"app-link": "Isixhumanisi sohlelo lokusebenza",
|
|
55
57
|
"app-metrics": "Izinkomba ze-app",
|
|
56
58
|
"app-name": "Igama Lohlelo Lokusebenza",
|
|
57
|
-
"app-not-available": "
|
|
58
|
-
"app-repo-install-github-app": "
|
|
59
|
+
"app-not-available": "Okuthengiwe",
|
|
60
|
+
"app-repo-install-github-app": "Install Githew",
|
|
59
61
|
"app-repo-not-design-source": "Zulu repository ni app bina design. Glua leegi.",
|
|
62
|
+
"app-repo-not-installed": "The Magmium GitHub App not installed on that repository",
|
|
60
63
|
"app-repo-taken": "Zulu: Repozisiya yenu ibonakale ngempela ephumelele",
|
|
64
|
+
"app-repo-unconfigured": "No GitHub App configured",
|
|
61
65
|
"app-repo-unreachable": "GitHub iyaxhula — app may have been uninstalled or the repository deleted",
|
|
62
66
|
"app-repo-url-invalid": "Zulu: Lokho iye GitHub repository URL",
|
|
63
67
|
"app-root-monorepo": "I-App Root (Monorepo)",
|
|
@@ -76,15 +80,18 @@
|
|
|
76
80
|
"assets": "Izimpahla",
|
|
77
81
|
"associated-wallets": "Ama-Wallet Ahambisanayo",
|
|
78
82
|
"audience-anyone-hint": "Ngokusetshenziswa noma kule",
|
|
79
|
-
"audience-everyone-except
|
|
80
|
-
"audience-
|
|
83
|
+
"audience-everyone-except": "Abaphakathi abathandathu",
|
|
84
|
+
"audience-everyone-except-hint": "Zulu: Mawhoeli omnye omnye okusign inye, bali ngumntu nezigaba ophakathi kwakho",
|
|
85
|
+
"audience-locked": "ngokuthi app",
|
|
81
86
|
"audience-only-me": "Ngiyabonga",
|
|
82
|
-
"audience-only-me-hint": "
|
|
83
|
-
"audience-only-these": "
|
|
84
|
-
"audience-only-these-hint": "
|
|
85
|
-
"audience-people": "
|
|
86
|
-
"audience-
|
|
87
|
-
"audience-
|
|
87
|
+
"audience-only-me-hint": "Kanti ngokuthengisa",
|
|
88
|
+
"audience-only-these": "kepha ezi",
|
|
89
|
+
"audience-only-these-hint": "Niy + abantu nezigaba elichweki",
|
|
90
|
+
"audience-people": "abantu",
|
|
91
|
+
"audience-picker": "abathengi",
|
|
92
|
+
"audience-search-people": "Themba imithetho",
|
|
93
|
+
"audience-who-can-see": "Ungathi kutheni?",
|
|
94
|
+
"audience-your-groups": "I-group yako",
|
|
88
95
|
"aug": "Agasti",
|
|
89
96
|
"august": "Agasti",
|
|
90
97
|
"australia": "i-Australia",
|
|
@@ -95,7 +102,7 @@
|
|
|
95
102
|
"azerbaijan": "i-Azerbaijan",
|
|
96
103
|
"b": "b.",
|
|
97
104
|
"back": "Emuva",
|
|
98
|
-
"back-to-store": "
|
|
105
|
+
"back-to-store": "Kwaba ekuqondeni",
|
|
99
106
|
"background": "Ingemuva",
|
|
100
107
|
"background-color": "Umbala Ongemuva",
|
|
101
108
|
"bahamas": "i-Bahamas",
|
|
@@ -154,6 +161,7 @@
|
|
|
154
161
|
"checking": "Ukuxhumanisa",
|
|
155
162
|
"chile": "i-Chile",
|
|
156
163
|
"china": "i-China",
|
|
164
|
+
"choose-file": "Chonakala file",
|
|
157
165
|
"christmas-island": "i-Christmas Island",
|
|
158
166
|
"clear-all": "Sula Konke",
|
|
159
167
|
"cocos-keeling-islands": "i-Cocos (Keeling) Islands",
|
|
@@ -164,9 +172,10 @@
|
|
|
164
172
|
"comment-and-like-as-you": "Ukuxhumana kanye nokwazi",
|
|
165
173
|
"comments": "Amazwana",
|
|
166
174
|
"comoros": "i-Comoros",
|
|
175
|
+
"company": "company",
|
|
167
176
|
"configuration": "Ukucushwa",
|
|
168
177
|
"configure": "iqala",
|
|
169
|
-
"confirm": "
|
|
178
|
+
"confirm": "Kukhula",
|
|
170
179
|
"confirm-logout": "Qinisekisa Phuma",
|
|
171
180
|
"confirm-password": "Qinisekisa iphasiwedi",
|
|
172
181
|
"confirm-sell-order": "Qinisekisa Thengisa i-oda",
|
|
@@ -176,7 +185,7 @@
|
|
|
176
185
|
"copied": "Kukopishiwe",
|
|
177
186
|
"copied-to-clipboard": "Ikopishelwe ebhodini lokunamathisela!",
|
|
178
187
|
"copy": "Phinda",
|
|
179
|
-
"copy-to-clipboard-failed": "
|
|
188
|
+
"copy-to-clipboard-failed": "Ungaphezuliswa e clipboard",
|
|
180
189
|
"costa-rica": "i-Costa Rica",
|
|
181
190
|
"country": "Izwe",
|
|
182
191
|
"cover": "Ikhava",
|
|
@@ -221,20 +230,27 @@
|
|
|
221
230
|
"distribution-path": "Umzila Wokusabalalisa",
|
|
222
231
|
"div-yield": "I-Div. Veza",
|
|
223
232
|
"djibouti": "i-Djibouti",
|
|
233
|
+
"doc-action-bold": "Mota",
|
|
234
|
+
"doc-action-code": "Code block",
|
|
224
235
|
"doc-action-heading": "umlambo",
|
|
225
236
|
"doc-action-italic": "italic",
|
|
226
237
|
"doc-action-link": "link",
|
|
227
238
|
"doc-action-list": "Isibalo",
|
|
228
|
-
"doc-action-quote": "
|
|
239
|
+
"doc-action-quote": "ukuxoxa",
|
|
229
240
|
"doc-action-strike": "strikethrough",
|
|
230
|
-
"doc-action-table": "
|
|
231
|
-
"doc-ai-accept": "
|
|
232
|
-
"doc-ai-answer": "
|
|
241
|
+
"doc-action-table": "Indawo",
|
|
242
|
+
"doc-ai-accept": "Kubuyela",
|
|
243
|
+
"doc-ai-answer": "Jawabu",
|
|
233
244
|
"doc-ai-drop": "Susa",
|
|
234
245
|
"doc-ai-fix": "Lungisa amaphutha",
|
|
235
|
-
"doc-ai-instruction": "
|
|
236
|
-
"doc-ai-outline-confirm": "
|
|
246
|
+
"doc-ai-instruction": "Thuthukisa ibhokisi",
|
|
247
|
+
"doc-ai-outline-confirm": "Lungiseka kwakho",
|
|
248
|
+
"doc-ai-outline-drop": "Beka",
|
|
249
|
+
"doc-ai-preview-banner": "Ukubuka kuqala kwesiphakamiso — idokhumenti lakho lihlala lingashintshi uze wamukele.",
|
|
237
250
|
"doc-ai-proposal-fix": "Idokhumende elilungisiwe lilindele ekubukeni kuqala.",
|
|
251
|
+
"doc-problem-dangling-link": "Le link ayivali i-URL yayo.",
|
|
252
|
+
"doc-problem-stacked-marker": "Izimpawu zokufomatha zibekwe phezu komunye nomunye.",
|
|
253
|
+
"doc-problem-table-width": "Lo mugqa unenani elihlukile lemaseli kunesihloko sethebula.",
|
|
238
254
|
"dominica": "i-Dominica",
|
|
239
255
|
"dominican-republic": "i-Dominican Republic",
|
|
240
256
|
"done": "Kwenziwe",
|
|
@@ -308,7 +324,6 @@
|
|
|
308
324
|
"get-started-help": "Faka i-imeyili yakho noma igama lomsebenzisi ukuze uqhubeke",
|
|
309
325
|
"ghana": "i-Ghana",
|
|
310
326
|
"gibraltar": "i-Gibraltar",
|
|
311
|
-
"github-secrets-to-configure": "Izimfihlo ze-GitHub okufanele uzilungiselele",
|
|
312
327
|
"global": "Jikelele",
|
|
313
328
|
"go-back": "Buyela emuva",
|
|
314
329
|
"go-to-slide": "Iya kusilayidi <$number>",
|
|
@@ -327,7 +342,7 @@
|
|
|
327
342
|
"heard-island-and-mcdonald-islands": "I-Heard & McDonald Island",
|
|
328
343
|
"here-you-can-find-details-about-the-application-and-its-features": "Lapha ungathola imininingwane mayelana nohlelo lokusebenza nezici zalo",
|
|
329
344
|
"hide-replies": "Fihla izimpendulo",
|
|
330
|
-
"higher-risk-profile-with-weakening-metrics": "Iphrofayili Yengozi Ephakeme
|
|
345
|
+
"higher-risk-profile-with-weakening-metrics": "Iphrofayili Yengozi Ephakeme Nge-Metrics Ewehlayo",
|
|
331
346
|
"historical-performance": "Ukusebenza Komlando",
|
|
332
347
|
"honduras": "i-Honduras",
|
|
333
348
|
"hong-kong": "i-Hong Kong SAR China",
|
|
@@ -421,6 +436,7 @@
|
|
|
421
436
|
"login-sign-up-help": "Ngena ngemvume Bhalisa Usizo",
|
|
422
437
|
"login-with-a-new-user": "+ Ngena ngemvume ngomsebenzisi omusha",
|
|
423
438
|
"logo": "Logo",
|
|
439
|
+
"logo-glyph-upload": "Layisha i-SVG",
|
|
424
440
|
"logout": "Phuma",
|
|
425
441
|
"loss": "Ukulahlekelwa",
|
|
426
442
|
"luxembourg": "i-Luxembourg",
|
|
@@ -441,7 +457,7 @@
|
|
|
441
457
|
"march": "Mashi",
|
|
442
458
|
"mark-all-read": "Maka konke kufundiwe",
|
|
443
459
|
"market-overview": "Uhlolojikelele lwemakethe",
|
|
444
|
-
"market-overview-desc": "
|
|
460
|
+
"market-overview-desc": "Inhlonipho yomhlophe indyeni (sektor ne Nifty)",
|
|
445
461
|
"marshall-islands": "i-Marshall Islands",
|
|
446
462
|
"martinique": "i-Martinique",
|
|
447
463
|
"mauritania": "i-Mauritania",
|
|
@@ -484,6 +500,7 @@
|
|
|
484
500
|
"name": "Igama",
|
|
485
501
|
"namibia": "i-Namibia",
|
|
486
502
|
"nauru": "i-Nauru",
|
|
503
|
+
"nav-browse-into": "Bonisa izinto",
|
|
487
504
|
"nav-empty-text": "Lesi sigaba asinazo izinto noma amawijethi amisiwe okwamanje.",
|
|
488
505
|
"nearest-point": "Iphuzu eliseduze",
|
|
489
506
|
"nepal": "i-Nepal",
|
|
@@ -493,7 +510,7 @@
|
|
|
493
510
|
"new-password": "Iphasiwedi entsha",
|
|
494
511
|
"new-zealand": "i-New Zealand",
|
|
495
512
|
"newest": "Okusha kakhulu",
|
|
496
|
-
"next": "
|
|
513
|
+
"next": "kodwa",
|
|
497
514
|
"next-slide": "Isilayidi esilandelayo",
|
|
498
515
|
"nicaragua": "i-Nicaragua",
|
|
499
516
|
"niger": "i-Niger",
|
|
@@ -522,9 +539,14 @@
|
|
|
522
539
|
"northern-mariana-islands": "i-Northern Mariana Islands",
|
|
523
540
|
"norway": "i-Norway",
|
|
524
541
|
"not-a-valid-email": "Akuyona i-imeyili evumelekile",
|
|
542
|
+
"not-a-valid-hex-color": "Umbala we-hex awusebenzi",
|
|
543
|
+
"not-a-valid-iban": "IBAN engavumelekile",
|
|
544
|
+
"not-a-valid-pattern": "Ifomethi engavumelekile",
|
|
545
|
+
"not-a-valid-phone": "Umhla omhle umsebenzisi",
|
|
546
|
+
"not-a-valid-postal-code": "Ikhodi yeposi engenakwenzeka",
|
|
525
547
|
"not-a-valid-url": "Akuyona i-URL evumelekile",
|
|
526
548
|
"not-available": "Ayitholakali",
|
|
527
|
-
"not-now": "
|
|
549
|
+
"not-now": "Akukho manje",
|
|
528
550
|
"notifications": "Izaziso",
|
|
529
551
|
"nov": "Novemba",
|
|
530
552
|
"november": "Novemba",
|
|
@@ -535,6 +557,7 @@
|
|
|
535
557
|
"oman": "i-Oman",
|
|
536
558
|
"open": "kuvulekile",
|
|
537
559
|
"open-app": "Vula uhlelo lokusebenza",
|
|
560
|
+
"or-try-new-user": "Noma, zama Umsebenzisi Omusha!",
|
|
538
561
|
"other": "okunye",
|
|
539
562
|
"otp-invalid-resend": "I-OTP engavumelekile. Sicela ufake kabusha noma ucele ikhodi entsha.",
|
|
540
563
|
"otp-verification": "Ukuqinisekiswa kwe-OTP",
|
|
@@ -550,17 +573,32 @@
|
|
|
550
573
|
"panama": "i-Panama",
|
|
551
574
|
"papua-new-guinea": "i-Papua New Guinea",
|
|
552
575
|
"paraguay": "i-Paraguay",
|
|
576
|
+
"password": "Iphasiwedi",
|
|
553
577
|
"password-invalid": "Le phasiwedi ayivumelekile. Sicela uthayiphe kabusha noma usethe kabusha.",
|
|
578
|
+
"passwords-are-not-matching": "Amaphasiwedi awahambelani!!",
|
|
579
|
+
"pattern": "Iphethini",
|
|
580
|
+
"pattern-example-does-not-match": "Isibonelo asifani",
|
|
581
|
+
"pattern-example-matches": "Ixeshe match",
|
|
582
|
+
"pattern-is-not-valid": "Ukubonisa akusebenzi",
|
|
583
|
+
"pattern-message": "Umyalezo wesifanekiso",
|
|
584
|
+
"pattern-message-required": "Izinhlelo eziningi zidinga uxhumano lwe-field",
|
|
585
|
+
"pattern-name": "Isu ye pattern",
|
|
586
|
+
"pattern-untested": "Thayipha iphethini nesibonelo",
|
|
587
|
+
"patterns": "Amaphetheni",
|
|
554
588
|
"pending-requests": "Izicelo Ezilindile",
|
|
555
589
|
"pending-with-me": "Ilindile Nami",
|
|
556
|
-
"perf-snapshot": "
|
|
590
|
+
"perf-snapshot": "Isithombe Sokusetshenziswa",
|
|
557
591
|
"performance-history": "Umlando Wokusebenza",
|
|
592
|
+
"permission-denied": "Kudingeka imvume",
|
|
593
|
+
"permission-denied-body": "Kudingeka ukuba unendima ye <role> ukuze uyenze lokhu.",
|
|
558
594
|
"permission-details": "Imininingwane yezimvume",
|
|
559
595
|
"peru": "i-Peru",
|
|
560
596
|
"philippines": "i-Philippines",
|
|
597
|
+
"pick-a-pattern": "Khetha iphatheni",
|
|
561
598
|
"pinned": "Kuphiniwe",
|
|
562
599
|
"pitcairn-islands": "i-Pitcairn Islands",
|
|
563
600
|
"please-select": "Sicela ukhethe",
|
|
601
|
+
"plugin-screen-not-found": "Le app ayiniki plugin enelo gama",
|
|
564
602
|
"poland": "i-Poland",
|
|
565
603
|
"portfolio": "Iphothifoliyo",
|
|
566
604
|
"portfolio-analysis": "Ukuhlaziywa kwephothifoliyo",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { c as TranslatePipe, l as TranslateService } from "./magmonium-one-size-converter-BOLtxL8d.mjs";
|
|
2
|
-
import { t as SelectorDirective } from "./magmonium-one-selector-
|
|
3
|
-
import { t as LabelComponent } from "./magmonium-one-label-
|
|
2
|
+
import { t as SelectorDirective } from "./magmonium-one-selector-Do0PsJBx.mjs";
|
|
3
|
+
import { t as LabelComponent } from "./magmonium-one-label-B8WJHiU4.mjs";
|
|
4
4
|
import { t as ButtonComponent } from "./magmonium-one-button-B1KCA8KO.mjs";
|
|
5
5
|
import { t as assetOptions } from "./magmonium-one-options-asset-By4-vPVk.mjs";
|
|
6
|
-
import "./magmonium-one-directives-
|
|
6
|
+
import "./magmonium-one-directives-Dbe0pfCf.mjs";
|
|
7
7
|
import { t as BaseInputComponent } from "./magmonium-one-base-input-KRWQalNW.mjs";
|
|
8
8
|
import { t as TextOutputComponent } from "./magmonium-one-text-output-Dkx0i1iu.mjs";
|
|
9
|
-
import { t as TextInputComponent } from "./magmonium-one-text-
|
|
9
|
+
import { t as TextInputComponent } from "./magmonium-one-text-DDA0gCOd.mjs";
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
11
|
import { ChangeDetectionStrategy, Component, Directive, ElementRef, computed, effect, inject, input, inputBinding, linkedSignal, model, output, outputBinding, signal, viewChild } from "@angular/core";
|
|
12
12
|
var DropdownBoxComponent = class DropdownBoxComponent {
|
|
@@ -603,4 +603,4 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
603
603
|
});
|
|
604
604
|
export { DROPDOWN_IMPORTS as n, DROPDOWN_TEMPLATE as r, BaseDropdownComponent as t };
|
|
605
605
|
|
|
606
|
-
//# sourceMappingURL=magmonium-one-base-dropdown-
|
|
606
|
+
//# sourceMappingURL=magmonium-one-base-dropdown-BgLka4oB.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"magmonium-one-base-dropdown-Tf6PltuH.mjs","names":[],"sources":["../../../../libs/one/src/lib/shared/ui/input/ui/dropdown/dropdown-box.ts","../../../../libs/one/src/lib/shared/ui/input/ui/dropdown/base-dropdown.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { TranslatePipe } from '../../../../pipe/translate';\nimport { DropdownOption, DropdownValue } from '../../model/input';\n\n@Component({\n selector: 'm-dropdown-box',\n imports: [TranslatePipe],\n template: `\n <ul class=\"dropdown-box\" role=\"listbox\">\n @for (option of options(); track option.value; let i = $index) {\n @let selectedState = isSelected(option.value);\n <li\n class=\"dropdown-box__option\"\n [class.dropdown-box__option--selected]=\"selectedState\"\n [class.dropdown-box__option--disabled]=\"option.disabled\"\n [class.dropdown-box__option--active]=\"i === activeIndex()\"\n [style.--m-dropdown-option-depth]=\"option.depth\"\n role=\"option\"\n [attr.aria-selected]=\"selectedState\"\n [attr.data-value]=\"option.value\"\n (click)=\"selectOption(option)\"\n (keydown.enter)=\"selectOption(option)\"\n tabindex=\"0\"\n >\n <!-- A group header is a row, never a choice: no box to tick. -->\n @if (multiple() && !option.disabled) {\n <input\n type=\"checkbox\"\n class=\"dropdown-box__checkbox\"\n [checked]=\"selectedState\"\n tabindex=\"-1\"\n (click)=\"$event.preventDefault()\"\n />\n }\n @if (option.noTranslate) {\n {{ option.label }}\n } @else {\n {{ option.label | translate }}\n }\n </li>\n } @empty {\n <li class=\"dropdown-box__empty\">\n {{ 'no-results-found' | translate }}\n </li>\n }\n </ul>\n `,\n styleUrl: './dropdown-box.sass',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DropdownBoxComponent {\n readonly options = input<DropdownOption<DropdownValue>[]>([]);\n /** The values ticked, as a list whichever Field drew the panel. */\n readonly selected = input<readonly DropdownValue[]>([]);\n readonly multiple = input<boolean>(false);\n readonly activeIndex = input<number>(-1);\n readonly action = output<DropdownOption<DropdownValue>>();\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n // Keep the keyboard-active option in view as ↑/↓ walk a scrolled list.\n constructor() {\n effect(() => {\n const index = this.activeIndex();\n if (index < 0) return;\n this.host.nativeElement\n .querySelectorAll('.dropdown-box__option')\n [index]?.scrollIntoView?.({ block: 'nearest' });\n });\n }\n\n protected readonly isSelected = (value: DropdownValue): boolean =>\n this.selected().includes(value);\n\n // Only emit a selection event for enabled options.\n protected readonly selectOption = (\n option: DropdownOption<DropdownValue>\n ): void => {\n if (option.disabled) return;\n this.action.emit(option);\n };\n}\n","import {\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n inputBinding,\n linkedSignal,\n model,\n outputBinding,\n Signal,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ValidationError, WithOptionalFieldTree } from '@angular/forms/signals';\nimport { LabelComponent } from '../label';\nimport { TextOutputComponent } from '../../../text-output';\nimport { BaseInputComponent } from '../../lib/base-input';\nimport { Button } from '../../../button/type/button';\nimport { ButtonComponent } from '../../../button/ui/button';\nimport { TranslateService } from '../../../../services';\nimport { SelectorConfig, SelectorDirective } from '../../../../directives';\nimport { Direction } from '../../../../directives/selector/selector-type';\nimport { DropdownBoxComponent } from './dropdown-box';\nimport {\n DropdownInput,\n DropdownOption,\n DropdownValue,\n TextInput,\n} from '../../model/input';\nimport { TextInputComponent } from '../text/text';\nimport { assetOptions } from '../../lib/options-asset';\n\n/** The trigger both option Fields draw: a searchable text input and a chevron. */\nexport const DROPDOWN_TEMPLATE = `\n @if (config(); as dropdown) {\n @if (dropdown.label) {\n <m-label\n [for]=\"dropdown.name ?? ''\"\n [placeholder]=\"dropdown.label\"\n [params]=\"dropdown.params\"\n [required]=\"required()\"\n [disabled]=\"disabled()\"\n />\n }\n <div\n class=\"trigger-wrap\"\n #wrapper\n [mSelector]=\"selectorConfig()\"\n [disabled]=\"disabled() || readonly() || !!config()?.readonly\"\n (opened)=\"onOpened()\"\n (closed)=\"onClosed()\"\n (focusin)=\"isFocused.set(true)\"\n (focusout)=\"isFocused.set(false)\"\n >\n <m-text-input\n [config]=\"triggerInputConfig()\"\n [value]=\"displayValue()\"\n [disabled]=\"disabled()\"\n [invalid]=\"invalid()\"\n [hideErrors]=\"true\"\n [(touched)]=\"touched\"\n [focused]=\"focused()\"\n (valueChange)=\"onInput($event)\"\n (click)=\"preventToggleWhenOpen($event)\"\n (keydown.space)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onEnter($event)\"\n (keydown.arrowdown)=\"onArrow($event, 1)\"\n (keydown.arrowup)=\"onArrow($event, -1)\"\n (keydown.tab)=\"$event.stopPropagation()\"\n />\n <m-button [disabled]=\"disabled()\" [config]=\"chevron()\" />\n </div>\n @if (showErrors()) {\n @for (error of errors(); track $index) {\n <m-text-output\n variant=\"footer\"\n color=\"error\"\n [label]=\"error.message\"\n />\n }\n }\n }\n`;\n\nexport const DROPDOWN_IMPORTS = [\n LabelComponent,\n TextOutputComponent,\n TextInputComponent,\n ButtonComponent,\n SelectorDirective,\n];\n\n/**\n * Everything a Dropdown and a Multiselect share: the options, the search, the\n * keyboard walk and the panel. What differs is only what the Field holds — one\n * value or a list — so a subclass says which values are selected and what a\n * pick does to them.\n */\n@Directive()\nexport abstract class BaseDropdownComponent extends BaseInputComponent<DropdownInput> {\n public override config = input<Partial<DropdownInput> | undefined>();\n public override required = input<boolean>(false);\n public override disabled = input<boolean>(false);\n public override invalid = input<boolean>(false);\n public override touched = model<boolean>(false);\n public override focused = input<boolean>(false);\n public override errors = input<readonly WithOptionalFieldTree<ValidationError>[]>(\n []\n );\n public override showErrors = computed(() => this.touched() && this.invalid());\n\n readonly options = input<\n DropdownOption<DropdownValue>[] | Signal<DropdownOption<DropdownValue>[]>\n >();\n readonly dir = input<Direction>();\n readonly toggle = model(false);\n readonly searchTerm = signal('');\n readonly isFocused = signal(false);\n readonly chevron = computed(\n () =>\n <Button>{\n icon: this.toggle() ? 'chevron-up' : 'chevron-down',\n one: true,\n variant: 'ghost',\n // In-Field control, never the form's submit — without this the Button\n // reads as the submit control and greys out while the form is invalid.\n type: 'button',\n // Chevron tracks the trigger's border like the text input's own icon:\n // red while the Field shows errors, focus tint while focused, border at rest.\n color: this.showErrors()\n ? 'error'\n : this.isFocused()\n ? 'focus'\n : 'border',\n // The trigger input is the Field's tab stop; the chevron only repeats\n // what clicking that input already does, so Tab walks past it.\n tabindex: -1,\n }\n );\n\n /** The values the Field holds now, as a list whichever kind it is. */\n protected abstract readonly selectedValues: Signal<readonly DropdownValue[]>;\n /** Whether the panel ticks rows and stays open across picks. */\n protected abstract readonly multiple: boolean;\n /** What picking `option` does to the Field's value. */\n protected abstract selectOption(option: DropdownOption<DropdownValue>): void;\n\n protected readonly triggerInputConfig = computed(() => {\n const dropdown = this.config() as DropdownInput | undefined;\n return <Partial<TextInput>>{\n name: dropdown?.name,\n icon: dropdown?.icon,\n one: dropdown?.one,\n placeholder: this.placeholderText(),\n readonly: this.readonly() || !!dropdown?.readonly,\n };\n });\n\n protected readonly dropdownOptions = computed(\n (): DropdownOption<DropdownValue>[] => {\n const runtimeOptions = this.options();\n const source =\n runtimeOptions ?? (this.config() as DropdownInput | undefined)?.options;\n if (typeof source === 'function') return source();\n if (source?.length) return source;\n return this.assetOptions();\n }\n );\n\n private readonly translateService = inject(TranslateService);\n\n protected readonly assetOptions = assetOptions(\n () => (this.config() as DropdownInput | undefined)?.optionsAsset\n );\n\n /** An option's text: authored as it stands, a key translated. */\n private readonly optionLabel = (\n option?: DropdownOption<DropdownValue>\n ): string => {\n if (!option?.label) return '';\n return option.noTranslate\n ? option.label\n : this.translateService.translate(option.label);\n };\n\n protected readonly filteredOptions = computed(\n (): DropdownOption<DropdownValue>[] => {\n const search = this.searchTerm().toLowerCase();\n if (!search) return this.dropdownOptions();\n return this.dropdownOptions().filter((o) => {\n const label = this.optionLabel(o).toLowerCase();\n return (\n label.includes(search) ||\n String(o.value).toLowerCase().includes(search)\n );\n });\n }\n );\n\n /** The option ↑/↓ point at while the panel is open; -1 is none. Reset as the search narrows the list. */\n protected readonly activeIndex = linkedSignal<\n DropdownOption<DropdownValue>[],\n number\n >({\n source: this.filteredOptions,\n computation: (options) =>\n this.searchTerm() ? this.nextEnabled(options, -1, 1) : -1,\n });\n\n /** The enabled option `step` rows past `from`, wrapping; `from` itself when none. */\n private readonly nextEnabled = (\n options: DropdownOption<DropdownValue>[],\n from: number,\n step: 1 | -1\n ): number => {\n for (let i = 1; i <= options.length; i++) {\n const index =\n (((from + step * i) % options.length) + options.length) %\n options.length;\n if (!options[index].disabled) return index;\n }\n return from;\n };\n\n /** One pick reads as its option's label, several as a count. */\n private readonly selectionLabel = computed((): string => {\n const values = this.selectedValues();\n if (values.length === 0) return '';\n if (values.length === 1) {\n return this.optionLabel(\n this.dropdownOptions().find((o) => o.value === values[0])\n );\n }\n const translation = this.translateService.translate(\n `selected?count=${values.length}`\n );\n return translation.includes('selected')\n ? `${values.length} Selected`\n : translation;\n });\n\n protected readonly displayValue = computed((): string =>\n this.toggle() ? this.searchTerm() : this.selectionLabel()\n );\n\n protected readonly placeholderText = computed((): string => {\n if (this.toggle()) {\n const label = this.selectionLabel();\n if (label) return label;\n }\n const placeholder = (this.config() as DropdownInput | undefined)\n ?.placeholder;\n return placeholder ? this.translateService.translate(placeholder) : '';\n });\n\n private readonly wrapperRef =\n viewChild<ElementRef<HTMLDivElement>>('wrapper');\n\n protected readonly selectorConfig = computed<\n SelectorConfig<DropdownBoxComponent>\n >(() => ({\n component: DropdownBoxComponent,\n base: 'm-dropdown-input',\n matchTriggerWidth: true,\n toggle: true,\n dir: this.dir(),\n bindings: [\n inputBinding('options', this.filteredOptions),\n inputBinding('selected', this.selectedValues),\n inputBinding('multiple', () => this.multiple),\n inputBinding('activeIndex', this.activeIndex),\n outputBinding<DropdownOption<DropdownValue>>('action', (option) =>\n this.selectOption(option)\n ),\n ],\n }));\n\n /** Shuts the panel after a pick, the way a click on the trigger would. */\n protected readonly closePanel = (): void => {\n this.toggle.set(false);\n this.searchTerm.set('');\n setTimeout(() => this.wrapperRef()?.nativeElement.click(), 0);\n };\n\n protected readonly onOpened = (): void => {\n this.toggle.set(true);\n this.searchTerm.set('');\n const current = this.selectedValues()[0];\n this.activeIndex.set(\n this.filteredOptions().findIndex((o) => o.value === current)\n );\n };\n\n // Focus stays in the trigger input (it is the search box), so ↑/↓ move the\n // active option rather than DOM focus. Closed, ArrowDown bubbles on to\n // SelectorDirective, which opens the panel.\n protected readonly onArrow = (event: Event, step: 1 | -1): void => {\n if (!this.toggle()) return;\n event.preventDefault();\n this.activeIndex.update((index) =>\n this.nextEnabled(this.filteredOptions(), index, step)\n );\n };\n\n // Enter never reaches SelectorDirective (it would toggle the panel); open,\n // it picks the active option.\n protected readonly onEnter = (event: Event): void => {\n event.stopPropagation();\n if (!this.toggle()) return;\n event.preventDefault();\n const option = this.filteredOptions()[this.activeIndex()];\n if (option && !option.disabled) this.selectOption(option);\n };\n\n protected readonly onClosed = (): void => {\n this.toggle.set(false);\n this.searchTerm.set('');\n };\n\n protected readonly onInput = (value: string): void => {\n this.searchTerm.set(value);\n };\n\n protected readonly preventToggleWhenOpen = (event: Event): void => {\n if (this.toggle() || this.readonly() || this.config()?.readonly) {\n event.stopPropagation();\n }\n };\n}\n"],"mappings":";;;;;;;;;;;AA0DA,IAAa,uBAAb,MAAa,qBAAoB;CACtB,UAAU,MAAuC,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAEpD,WAAW,MAAgC,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAC9C,WAAW,MAAe,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAChC,cAAc,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CAC/B,SAAS,OAAM;CAEP,OAAO,OAAgC,UAAU;CAGlE,cAAA;EACE,aAAY;GACV,MAAM,QAAQ,KAAK,YAAW;GAC9B,IAAI,QAAQ,GAAG;GACf,KAAK,KAAK,cACP,iBAAiB,uBAAuB,CAAC,CACzC,MAAM,EAAE,iBAAiB,EAAE,OAAO,UAAS,CAAE;EAClD,CAAC;CACH;CAEmB,cAAc,UAC/B,KAAK,SAAQ,CAAE,CAAC,SAAS,KAAK;CAGb,gBACjB,WACQ;EACR,IAAI,OAAO,UAAU;EACrB,KAAK,OAAO,KAAK,MAAM;CACzB;CA9BW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAoB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAApB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAoB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA,EAAA,QAAA,SAAA;EAAA,UAAA;EAAA,UA3CrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCT,UAAA;EAAA,QAAA,CAAA,syDAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MAxCS;GAAa,MAAA;EAAA,CAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AA4CZ,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAoB,YAAA,CAAA;EA9ChC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAgB,SACjB,CAAC,aAAa;GAAC,UACd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCT,iBAEgB,wBAAwB;GAAM,QAAA,CAAA,syDAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBjD,MAAa,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDjC,MAAa,mBAAmB;CAC9B;CACA;CACA;CACA;CACA;AACD;AASD,IAAsB,wBAAtB,MAAsB,8BAA8B,mBAAiC;CACnE,SAAS,MAA2C,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CACpD,WAAW,MAAe,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAChC,WAAW,MAAe,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAChC,UAAU,MAAe,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAC/B,UAAU,MAAe,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAC/B,UAAU,MAAe,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAC/B,SAAS,MACvB,CAAA,GACD,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CACe,aAAa,eAAe,KAAK,QAAO,KAAM,KAAK,QAAO,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAEpE,UAAU,MAEhB,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CACM,MAAM,MAAkB,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CACxB,SAAS,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CACrB,aAAa,OAAO,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CACvB,YAAY,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CACzB,UAAU,gBAEP;EACN,MAAM,KAAK,OAAM,IAAK,eAAe;EACrC,KAAK;EACL,SAAS;EAGT,MAAM;EAGN,OAAO,KAAK,WAAU,IAClB,UACA,KAAK,UAAS,IACZ,UACA;EAGN,UAAU;CACX,IACJ,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CASkB,qBAAqB,eAAc;EACpD,MAAM,WAAW,KAAK,OAAM;EAC5B,OAA2B;GACzB,MAAM,UAAU;GAChB,MAAM,UAAU;GAChB,KAAK,UAAU;GACf,aAAa,KAAK,gBAAe;GACjC,UAAU,KAAK,SAAQ,KAAM,CAAC,CAAC,UAAU;EAC1C;CACH,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,qBAAA,CAAA,+BAAA,CAAA,CAAA;CAEiB,kBAAkB,eACG;EAEpC,MAAM,SADiB,KAAK,QAE1B,KAAmB,KAAK,OAAM,CAAgC,EAAE;EAClE,IAAI,OAAO,WAAW,YAAY,OAAO,OAAM;EAC/C,IAAI,QAAQ,QAAQ,OAAO;EAC3B,OAAO,KAAK,aAAY;CAC1B,GACD,GAAA,YAAA,CAAA,EAAA,WAAA,kBAAA,CAAA,+BAAA,CAAA,CAAA;CAEgB,mBAAmB,OAAO,gBAAgB;CAExC,eAAe,mBACzB,KAAK,OAAM,CAAgC,EAAE,YAAY;CAIjD,eACf,WACU;EACV,IAAI,CAAC,QAAQ,OAAO,OAAO;EAC3B,OAAO,OAAO,cACV,OAAO,QACP,KAAK,iBAAiB,UAAU,OAAO,KAAK;CAClD;CAEmB,kBAAkB,eACG;EACpC,MAAM,SAAS,KAAK,WAAU,CAAE,CAAC,YAAW;EAC5C,IAAI,CAAC,QAAQ,OAAO,KAAK,gBAAe;EACxC,OAAO,KAAK,gBAAe,CAAE,CAAC,QAAQ,MAAK;GAEzC,OADc,KAAK,YAAY,CAAC,CAAC,CAAC,YAEhC,CAAA,CAAM,SAAS,MAAM,KACrB,OAAO,EAAE,KAAK,CAAC,CAAC,YAAW,CAAE,CAAC,SAAS,MAAM;EAEjD,CAAC;CACH,GACD,GAAA,YAAA,CAAA,EAAA,WAAA,kBAAA,CAAA,+BAAA,CAAA,CAAA;CAGkB,cAAc,aAAY;EAAA,GAAA,YAAA,EAAA,WAAA,cAAA,+BAAA,CAAA;EAI3C,QAAQ,KAAK;EACb,cAAc,YACZ,KAAK,WAAU,IAAK,KAAK,YAAY,SAAS,IAAI,CAAC,IAAI;CAAE,CAAA;CAI5C,eACf,SACA,MACA,SACU;EACV,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,KAAK;GACxC,MAAM,UACD,OAAO,OAAO,KAAK,QAAQ,SAAU,QAAQ,UAChD,QAAQ;GACV,IAAI,CAAC,QAAQ,MAAM,CAAC,UAAU,OAAO;EACvC;EACA,OAAO;CACT;CAGiB,iBAAiB,eAAsB;EACtD,MAAM,SAAS,KAAK,eAAc;EAClC,IAAI,OAAO,WAAW,GAAG,OAAO;EAChC,IAAI,OAAO,WAAW,GACpB,OAAO,KAAK,YACV,KAAK,gBAAe,CAAE,CAAC,MAAM,MAAM,EAAE,UAAU,OAAO,EAAE,CAAC;EAG7D,MAAM,cAAc,KAAK,iBAAiB,UACxC,kBAAkB,OAAO,QAAQ;EAEnC,OAAO,YAAY,SAAS,UAAU,IAClC,GAAG,OAAO,OAAM,aAChB;CACN,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CAEiB,eAAe,eAChC,KAAK,OAAM,IAAK,KAAK,WAAU,IAAK,KAAK,eAAc,GACxD,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAEkB,kBAAkB,eAAsB;EACzD,IAAI,KAAK,OAAM,GAAI;GACjB,MAAM,QAAQ,KAAK,eAAc;GACjC,IAAI,OAAO,OAAO;EACpB;EACA,MAAM,cAAe,KAAK,OAAM,CAAgC,EAC5D;EACJ,OAAO,cAAc,KAAK,iBAAiB,UAAU,WAAW,IAAI;CACtE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,kBAAA,CAAA,+BAAA,CAAA,CAAA;CAEe,aACf,UAAsC,WAAU,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAE/B,iBAAiB,gBAE3B;EACP,WAAW;EACX,MAAM;EACN,mBAAmB;EACnB,QAAQ;EACR,KAAK,KAAK,IAAG;EACb,UAAU;GACR,aAAa,WAAW,KAAK,eAAe;GAC5C,aAAa,YAAY,KAAK,cAAc;GAC5C,aAAa,kBAAkB,KAAK,QAAQ;GAC5C,aAAa,eAAe,KAAK,WAAW;GAC5C,cAA6C,WAAW,WACtD,KAAK,aAAa,MAAM,CAAC;EAE5B;CACF,IAAE,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CAGgB,mBAAwB;EACzC,KAAK,OAAO,IAAI,KAAK;EACrB,KAAK,WAAW,IAAI,EAAE;EACtB,iBAAiB,KAAK,WAAU,CAAE,EAAE,cAAc,MAAK,GAAI,CAAC;CAC9D;CAEmB,iBAAsB;EACvC,KAAK,OAAO,IAAI,IAAI;EACpB,KAAK,WAAW,IAAI,EAAE;EACtB,MAAM,UAAU,KAAK,eAAc,CAAE,CAAC;EACtC,KAAK,YAAY,IACf,KAAK,gBAAe,CAAE,CAAC,WAAW,MAAM,EAAE,UAAU,OAAO,CAAC;CAEhE;CAKmB,WAAW,OAAc,SAAsB;EAChE,IAAI,CAAC,KAAK,OAAM,GAAI;EACpB,MAAM,eAAc;EACpB,KAAK,YAAY,QAAQ,UACvB,KAAK,YAAY,KAAK,gBAAe,GAAI,OAAO,IAAI,CAAC;CAEzD;CAImB,WAAW,UAAsB;EAClD,MAAM,gBAAe;EACrB,IAAI,CAAC,KAAK,OAAM,GAAI;EACpB,MAAM,eAAc;EACpB,MAAM,SAAS,KAAK,gBAAe,CAAE,CAAC,KAAK,YAAW;EACtD,IAAI,UAAU,CAAC,OAAO,UAAU,KAAK,aAAa,MAAM;CAC1D;CAEmB,iBAAsB;EACvC,KAAK,OAAO,IAAI,KAAK;EACrB,KAAK,WAAW,IAAI,EAAE;CACxB;CAEmB,WAAW,UAAuB;EACnD,KAAK,WAAW,IAAI,KAAK;CAC3B;CAEmB,yBAAyB,UAAsB;EAChE,IAAI,KAAK,OAAM,KAAM,KAAK,SAAQ,KAAM,KAAK,OAAM,CAAE,EAAE,UACrD,MAAM,gBAAe;CAEzB;CApOoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAqB,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAArB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAqB,cAAA;EAAA,QAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,KAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA;GAAA,SAAA;GAAA,QAAA;EAAA;EAAA,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAAA,CAAA,SAAA;GAAA,aAAA;GAAA,UAAA;EAAA,CAAA;EAAA,iBAAA;EAAA,UAAA;CAAA,CAAA;;AAArB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAqB,YAAA,CAAA,EAD1C,MAAA,UA8JyC,CAAA;CAAA,gBAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,GAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,eAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,KAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,GAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,cAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,WAAS,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;CAAA;AAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"magmonium-one-base-dropdown-BgLka4oB.mjs","names":[],"sources":["../../../../libs/one/src/lib/shared/ui/input/ui/dropdown/dropdown-box.ts","../../../../libs/one/src/lib/shared/ui/input/ui/dropdown/base-dropdown.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { TranslatePipe } from '../../../../pipe/translate';\nimport { DropdownOption, DropdownValue } from '../../model/input';\n\n@Component({\n selector: 'm-dropdown-box',\n imports: [TranslatePipe],\n template: `\n <ul class=\"dropdown-box\" role=\"listbox\">\n @for (option of options(); track option.value; let i = $index) {\n @let selectedState = isSelected(option.value);\n <li\n class=\"dropdown-box__option\"\n [class.dropdown-box__option--selected]=\"selectedState\"\n [class.dropdown-box__option--disabled]=\"option.disabled\"\n [class.dropdown-box__option--active]=\"i === activeIndex()\"\n [style.--m-dropdown-option-depth]=\"option.depth\"\n role=\"option\"\n [attr.aria-selected]=\"selectedState\"\n [attr.data-value]=\"option.value\"\n (click)=\"selectOption(option)\"\n (keydown.enter)=\"selectOption(option)\"\n tabindex=\"0\"\n >\n <!-- A group header is a row, never a choice: no box to tick. -->\n @if (multiple() && !option.disabled) {\n <input\n type=\"checkbox\"\n class=\"dropdown-box__checkbox\"\n [checked]=\"selectedState\"\n tabindex=\"-1\"\n (click)=\"$event.preventDefault()\"\n />\n }\n @if (option.noTranslate) {\n {{ option.label }}\n } @else {\n {{ option.label | translate }}\n }\n </li>\n } @empty {\n <li class=\"dropdown-box__empty\">\n {{ 'no-results-found' | translate }}\n </li>\n }\n </ul>\n `,\n styleUrl: './dropdown-box.sass',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DropdownBoxComponent {\n readonly options = input<DropdownOption<DropdownValue>[]>([]);\n /** The values ticked, as a list whichever Field drew the panel. */\n readonly selected = input<readonly DropdownValue[]>([]);\n readonly multiple = input<boolean>(false);\n readonly activeIndex = input<number>(-1);\n readonly action = output<DropdownOption<DropdownValue>>();\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n // Keep the keyboard-active option in view as ↑/↓ walk a scrolled list.\n constructor() {\n effect(() => {\n const index = this.activeIndex();\n if (index < 0) return;\n this.host.nativeElement\n .querySelectorAll('.dropdown-box__option')\n [index]?.scrollIntoView?.({ block: 'nearest' });\n });\n }\n\n protected readonly isSelected = (value: DropdownValue): boolean =>\n this.selected().includes(value);\n\n // Only emit a selection event for enabled options.\n protected readonly selectOption = (\n option: DropdownOption<DropdownValue>\n ): void => {\n if (option.disabled) return;\n this.action.emit(option);\n };\n}\n","import {\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n inputBinding,\n linkedSignal,\n model,\n outputBinding,\n Signal,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ValidationError, WithOptionalFieldTree } from '@angular/forms/signals';\nimport { LabelComponent } from '../label';\nimport { TextOutputComponent } from '../../../text-output';\nimport { BaseInputComponent } from '../../lib/base-input';\nimport { Button } from '../../../button/type/button';\nimport { ButtonComponent } from '../../../button/ui/button';\nimport { TranslateService } from '../../../../services';\nimport { SelectorConfig, SelectorDirective } from '../../../../directives';\nimport { Direction } from '../../../../directives/selector/selector-type';\nimport { DropdownBoxComponent } from './dropdown-box';\nimport {\n DropdownInput,\n DropdownOption,\n DropdownValue,\n TextInput,\n} from '../../model/input';\nimport { TextInputComponent } from '../text/text';\nimport { assetOptions } from '../../lib/options-asset';\n\n/** The trigger both option Fields draw: a searchable text input and a chevron. */\nexport const DROPDOWN_TEMPLATE = `\n @if (config(); as dropdown) {\n @if (dropdown.label) {\n <m-label\n [for]=\"dropdown.name ?? ''\"\n [placeholder]=\"dropdown.label\"\n [params]=\"dropdown.params\"\n [required]=\"required()\"\n [disabled]=\"disabled()\"\n />\n }\n <div\n class=\"trigger-wrap\"\n #wrapper\n [mSelector]=\"selectorConfig()\"\n [disabled]=\"disabled() || readonly() || !!config()?.readonly\"\n (opened)=\"onOpened()\"\n (closed)=\"onClosed()\"\n (focusin)=\"isFocused.set(true)\"\n (focusout)=\"isFocused.set(false)\"\n >\n <m-text-input\n [config]=\"triggerInputConfig()\"\n [value]=\"displayValue()\"\n [disabled]=\"disabled()\"\n [invalid]=\"invalid()\"\n [hideErrors]=\"true\"\n [(touched)]=\"touched\"\n [focused]=\"focused()\"\n (valueChange)=\"onInput($event)\"\n (click)=\"preventToggleWhenOpen($event)\"\n (keydown.space)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onEnter($event)\"\n (keydown.arrowdown)=\"onArrow($event, 1)\"\n (keydown.arrowup)=\"onArrow($event, -1)\"\n (keydown.tab)=\"$event.stopPropagation()\"\n />\n <m-button [disabled]=\"disabled()\" [config]=\"chevron()\" />\n </div>\n @if (showErrors()) {\n @for (error of errors(); track $index) {\n <m-text-output\n variant=\"footer\"\n color=\"error\"\n [label]=\"error.message\"\n />\n }\n }\n }\n`;\n\nexport const DROPDOWN_IMPORTS = [\n LabelComponent,\n TextOutputComponent,\n TextInputComponent,\n ButtonComponent,\n SelectorDirective,\n];\n\n/**\n * Everything a Dropdown and a Multiselect share: the options, the search, the\n * keyboard walk and the panel. What differs is only what the Field holds — one\n * value or a list — so a subclass says which values are selected and what a\n * pick does to them.\n */\n@Directive()\nexport abstract class BaseDropdownComponent extends BaseInputComponent<DropdownInput> {\n public override config = input<Partial<DropdownInput> | undefined>();\n public override required = input<boolean>(false);\n public override disabled = input<boolean>(false);\n public override invalid = input<boolean>(false);\n public override touched = model<boolean>(false);\n public override focused = input<boolean>(false);\n public override errors = input<readonly WithOptionalFieldTree<ValidationError>[]>(\n []\n );\n public override showErrors = computed(() => this.touched() && this.invalid());\n\n readonly options = input<\n DropdownOption<DropdownValue>[] | Signal<DropdownOption<DropdownValue>[]>\n >();\n readonly dir = input<Direction>();\n readonly toggle = model(false);\n readonly searchTerm = signal('');\n readonly isFocused = signal(false);\n readonly chevron = computed(\n () =>\n <Button>{\n icon: this.toggle() ? 'chevron-up' : 'chevron-down',\n one: true,\n variant: 'ghost',\n // In-Field control, never the form's submit — without this the Button\n // reads as the submit control and greys out while the form is invalid.\n type: 'button',\n // Chevron tracks the trigger's border like the text input's own icon:\n // red while the Field shows errors, focus tint while focused, border at rest.\n color: this.showErrors()\n ? 'error'\n : this.isFocused()\n ? 'focus'\n : 'border',\n // The trigger input is the Field's tab stop; the chevron only repeats\n // what clicking that input already does, so Tab walks past it.\n tabindex: -1,\n }\n );\n\n /** The values the Field holds now, as a list whichever kind it is. */\n protected abstract readonly selectedValues: Signal<readonly DropdownValue[]>;\n /** Whether the panel ticks rows and stays open across picks. */\n protected abstract readonly multiple: boolean;\n /** What picking `option` does to the Field's value. */\n protected abstract selectOption(option: DropdownOption<DropdownValue>): void;\n\n protected readonly triggerInputConfig = computed(() => {\n const dropdown = this.config() as DropdownInput | undefined;\n return <Partial<TextInput>>{\n name: dropdown?.name,\n icon: dropdown?.icon,\n one: dropdown?.one,\n placeholder: this.placeholderText(),\n readonly: this.readonly() || !!dropdown?.readonly,\n };\n });\n\n protected readonly dropdownOptions = computed(\n (): DropdownOption<DropdownValue>[] => {\n const runtimeOptions = this.options();\n const source =\n runtimeOptions ?? (this.config() as DropdownInput | undefined)?.options;\n if (typeof source === 'function') return source();\n if (source?.length) return source;\n return this.assetOptions();\n }\n );\n\n private readonly translateService = inject(TranslateService);\n\n protected readonly assetOptions = assetOptions(\n () => (this.config() as DropdownInput | undefined)?.optionsAsset\n );\n\n /** An option's text: authored as it stands, a key translated. */\n private readonly optionLabel = (\n option?: DropdownOption<DropdownValue>\n ): string => {\n if (!option?.label) return '';\n return option.noTranslate\n ? option.label\n : this.translateService.translate(option.label);\n };\n\n protected readonly filteredOptions = computed(\n (): DropdownOption<DropdownValue>[] => {\n const search = this.searchTerm().toLowerCase();\n if (!search) return this.dropdownOptions();\n return this.dropdownOptions().filter((o) => {\n const label = this.optionLabel(o).toLowerCase();\n return (\n label.includes(search) ||\n String(o.value).toLowerCase().includes(search)\n );\n });\n }\n );\n\n /** The option ↑/↓ point at while the panel is open; -1 is none. Reset as the search narrows the list. */\n protected readonly activeIndex = linkedSignal<\n DropdownOption<DropdownValue>[],\n number\n >({\n source: this.filteredOptions,\n computation: (options) =>\n this.searchTerm() ? this.nextEnabled(options, -1, 1) : -1,\n });\n\n /** The enabled option `step` rows past `from`, wrapping; `from` itself when none. */\n private readonly nextEnabled = (\n options: DropdownOption<DropdownValue>[],\n from: number,\n step: 1 | -1\n ): number => {\n for (let i = 1; i <= options.length; i++) {\n const index =\n (((from + step * i) % options.length) + options.length) %\n options.length;\n if (!options[index].disabled) return index;\n }\n return from;\n };\n\n /** One pick reads as its option's label, several as a count. */\n private readonly selectionLabel = computed((): string => {\n const values = this.selectedValues();\n if (values.length === 0) return '';\n if (values.length === 1) {\n return this.optionLabel(\n this.dropdownOptions().find((o) => o.value === values[0])\n );\n }\n const translation = this.translateService.translate(\n `selected?count=${values.length}`\n );\n return translation.includes('selected')\n ? `${values.length} Selected`\n : translation;\n });\n\n protected readonly displayValue = computed((): string =>\n this.toggle() ? this.searchTerm() : this.selectionLabel()\n );\n\n protected readonly placeholderText = computed((): string => {\n if (this.toggle()) {\n const label = this.selectionLabel();\n if (label) return label;\n }\n const placeholder = (this.config() as DropdownInput | undefined)\n ?.placeholder;\n return placeholder ? this.translateService.translate(placeholder) : '';\n });\n\n private readonly wrapperRef =\n viewChild<ElementRef<HTMLDivElement>>('wrapper');\n\n protected readonly selectorConfig = computed<\n SelectorConfig<DropdownBoxComponent>\n >(() => ({\n component: DropdownBoxComponent,\n base: 'm-dropdown-input',\n matchTriggerWidth: true,\n toggle: true,\n dir: this.dir(),\n bindings: [\n inputBinding('options', this.filteredOptions),\n inputBinding('selected', this.selectedValues),\n inputBinding('multiple', () => this.multiple),\n inputBinding('activeIndex', this.activeIndex),\n outputBinding<DropdownOption<DropdownValue>>('action', (option) =>\n this.selectOption(option)\n ),\n ],\n }));\n\n /** Shuts the panel after a pick, the way a click on the trigger would. */\n protected readonly closePanel = (): void => {\n this.toggle.set(false);\n this.searchTerm.set('');\n setTimeout(() => this.wrapperRef()?.nativeElement.click(), 0);\n };\n\n protected readonly onOpened = (): void => {\n this.toggle.set(true);\n this.searchTerm.set('');\n const current = this.selectedValues()[0];\n this.activeIndex.set(\n this.filteredOptions().findIndex((o) => o.value === current)\n );\n };\n\n // Focus stays in the trigger input (it is the search box), so ↑/↓ move the\n // active option rather than DOM focus. Closed, ArrowDown bubbles on to\n // SelectorDirective, which opens the panel.\n protected readonly onArrow = (event: Event, step: 1 | -1): void => {\n if (!this.toggle()) return;\n event.preventDefault();\n this.activeIndex.update((index) =>\n this.nextEnabled(this.filteredOptions(), index, step)\n );\n };\n\n // Enter never reaches SelectorDirective (it would toggle the panel); open,\n // it picks the active option.\n protected readonly onEnter = (event: Event): void => {\n event.stopPropagation();\n if (!this.toggle()) return;\n event.preventDefault();\n const option = this.filteredOptions()[this.activeIndex()];\n if (option && !option.disabled) this.selectOption(option);\n };\n\n protected readonly onClosed = (): void => {\n this.toggle.set(false);\n this.searchTerm.set('');\n };\n\n protected readonly onInput = (value: string): void => {\n this.searchTerm.set(value);\n };\n\n protected readonly preventToggleWhenOpen = (event: Event): void => {\n if (this.toggle() || this.readonly() || this.config()?.readonly) {\n event.stopPropagation();\n }\n };\n}\n"],"mappings":"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"}
|
package/fesm2022/{magmonium-one-checkbox-CbEdjmtz.mjs → magmonium-one-checkbox-CyVd_a7p.mjs}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as __exportAll } from "./magmonium-one-rolldown-runtime-DpJrqANO.mjs";
|
|
2
|
-
import { t as LabelComponent } from "./magmonium-one-label-
|
|
2
|
+
import { t as LabelComponent } from "./magmonium-one-label-B8WJHiU4.mjs";
|
|
3
3
|
import { t as toAttrBool } from "./magmonium-one-attribute-value-BobQXKUK.mjs";
|
|
4
4
|
import { t as TextOutputComponent } from "./magmonium-one-text-output-Dkx0i1iu.mjs";
|
|
5
5
|
import { t as BaseCheckboxInputComponent } from "./magmonium-one-base-checkbox-bwMjlhHR.mjs";
|
|
@@ -362,4 +362,4 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
362
362
|
});
|
|
363
363
|
export { checkbox_exports as n, PLACED_CHECKBOX as r, CheckboxInputComponent as t };
|
|
364
364
|
|
|
365
|
-
//# sourceMappingURL=magmonium-one-checkbox-
|
|
365
|
+
//# sourceMappingURL=magmonium-one-checkbox-CyVd_a7p.mjs.map
|
package/fesm2022/{magmonium-one-checkbox-CbEdjmtz.mjs.map → magmonium-one-checkbox-CyVd_a7p.mjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"magmonium-one-checkbox-
|
|
1
|
+
{"version":3,"file":"magmonium-one-checkbox-CyVd_a7p.mjs","names":[],"sources":["../../../../libs/one/src/lib/shared/ui/input/lib/placed-checkbox.token.ts","../../../../libs/one/src/lib/shared/ui/input/ui/checkbox/checkbox.ts"],"sourcesContent":["import { InjectionToken, Signal } from '@angular/core';\nimport { DropdownOption } from '../model/input';\n\n/**\n * An `m-checkbox` placed between a SectionFormItem's tags as one option of its\n * CheckboxGroup (libs/one ADR 0039). Provided by the checkbox itself so the\n * item can collect its children without importing the checkbox chunk it only\n * lazy-loads. `undefined` until the checkbox names a `value`.\n */\nexport type PlacedCheckbox = {\n readonly option: Signal<DropdownOption | undefined>;\n};\n\nexport const PLACED_CHECKBOX = new InjectionToken<PlacedCheckbox>(\n 'PLACED_CHECKBOX'\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n ModelSignal,\n} from '@angular/core';\nimport { BaseCheckboxInputComponent } from './base-checkbox';\nimport { LabelComponent } from '../label';\nimport { TextOutputComponent } from '../../../text-output';\nimport { ValidationError, WithOptionalFieldTree } from '@angular/forms/signals';\nimport { DropdownOption, Input } from '../../model/input';\nimport {\n PLACED_CHECKBOX,\n PlacedCheckbox,\n} from '../../lib/placed-checkbox.token';\nimport { toAttrBool } from '../../../../functions/config/attribute-value';\n\n@Component({\n selector: 'm-checkbox',\n template: `\n @if (config(); as checkbox) {\n <div class=\"checkbox\">\n <input\n [checked]=\"checked()\"\n #inputElement\n [class.error]=\"showErrors()\"\n [disabled]=\"disabled()\"\n (change)=\"onChange($event)\"\n type=\"checkbox\"\n [id]=\"checkbox.name\"\n />\n @if (labelText(); as text) {\n <m-label\n [for]=\"checkbox.name\"\n [placeholder]=\"text\"\n [params]=\"checkbox.params\"\n [noTranslate]=\"isNoTranslate()\"\n [required]=\"required()\"\n [disabled]=\"disabled()\"\n />\n }\n </div>\n @if (showErrors()) {\n @for (error of errors(); track $index) {\n <m-text-output\n variant=\"footer\"\n color=\"error\"\n [label]=\"error.message\"\n />\n }\n }\n }\n `,\n imports: [LabelComponent, TextOutputComponent],\n styleUrl: './checkbox.sass',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: PLACED_CHECKBOX, useExisting: CheckboxInputComponent },\n ],\n})\nexport class CheckboxInputComponent\n extends BaseCheckboxInputComponent\n implements PlacedCheckbox\n{\n public override value = undefined;\n public override checked = model<boolean>(false) as ModelSignal<boolean>;\n public override config = input<Partial<Input> | undefined>();\n public override required = input<boolean>(false);\n public override disabled = input<boolean>(false);\n public override invalid = input<boolean>(false);\n public override touched = model<boolean>(false);\n public override focused = input<boolean>(false);\n public override errors = input<readonly WithOptionalFieldTree<ValidationError>[]>(\n []\n );\n public override showErrors = computed(() => this.touched() && this.invalid());\n\n // What a checkbox placed inside a CheckboxGroup's SectionFormItem says about\n // the option it stands for, written on its own tag (ADR 0010, ADR 0039).\n // `value` is the attribute because it is the option's value; the member is\n // named apart because FormCheckboxControl pins `value` itself to undefined —\n // a checkbox control's value is `checked`.\n /* eslint-disable @angular-eslint/no-input-rename */\n public readonly optionValue = input<string | undefined>(undefined, {\n alias: 'value',\n });\n /* eslint-enable @angular-eslint/no-input-rename */\n public readonly label = input<string | undefined>();\n public readonly noTranslate = input<boolean | string | undefined>();\n\n protected readonly labelText = computed(\n () => this.label() ?? this.config()?.label\n );\n protected readonly isNoTranslate = computed(\n () => toAttrBool(this.noTranslate()) === true\n );\n\n public readonly option = computed((): DropdownOption | undefined => {\n const value = this.optionValue();\n if (!value) return undefined;\n return {\n value,\n label: this.label() ?? value,\n disabled: this.disabled() || undefined,\n noTranslate: this.isNoTranslate() || undefined,\n };\n });\n\n protected onChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.setValue(target?.checked ?? false);\n }\n}\n"],"mappings":"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"}
|
package/fesm2022/{magmonium-one-directives-C_i3gUFT.mjs → magmonium-one-directives-Dbe0pfCf.mjs}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { U as IS_DESIGN_MODE, a as resolveSpacing } from "./magmonium-one-size-converter-BOLtxL8d.mjs";
|
|
2
|
-
import "./magmonium-one-selector-
|
|
2
|
+
import "./magmonium-one-selector-Do0PsJBx.mjs";
|
|
3
3
|
import "./magmonium-one-m-ref-BdP7Kzhk.mjs";
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import { Directive, ElementRef, HostListener, InjectionToken, Input, Renderer2, afterRenderEffect, booleanAttribute, computed, effect, inject, input, model, output, signal } from "@angular/core";
|
|
@@ -1282,4 +1282,4 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
1282
1282
|
});
|
|
1283
1283
|
export { ToolTipDirective as a, DragListItemDirective as c, MarginDirective as d, PaddingDirective as f, PositionDirective as i, DragListDirective as l, stringToColor as n, FileUploadDirective as o, SPACING_INWARD as p, HighlightDirective as r, AutosizeDirective as s, MHeroColorDirective as t, DraggableDirective as u };
|
|
1284
1284
|
|
|
1285
|
-
//# sourceMappingURL=magmonium-one-directives-
|
|
1285
|
+
//# sourceMappingURL=magmonium-one-directives-Dbe0pfCf.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"magmonium-one-directives-Dbe0pfCf.mjs","names":[],"sources":["../../../../libs/one/src/lib/shared/directives/spacing/spacing.ts","../../../../libs/one/src/lib/shared/directives/draggable/lib/function/position.ts","../../../../libs/one/src/lib/shared/directives/draggable/lib/function/cursor.ts","../../../../libs/one/src/lib/shared/directives/draggable/draggable.ts","../../../../libs/one/src/lib/shared/directives/drag-list/drag-list.ts","../../../../libs/one/src/lib/shared/directives/drag-list/drag-list-item.ts","../../../../libs/one/src/lib/shared/directives/autosize/autosize.ts","../../../../libs/one/src/lib/shared/directives/file-upload/file-upload.ts","../../../../libs/one/src/lib/shared/directives/tooltip/tooltip.ts","../../../../libs/one/src/lib/shared/directives/position/position.ts","../../../../libs/one/src/lib/shared/ui/table/lib/directives/highlight.ts","../../../../libs/one/src/lib/shared/functions/string/color.ts","../../../../libs/one/src/lib/shared/directives/color/m-hero-color.directive.ts"],"sourcesContent":["import {\n computed,\n Directive,\n inject,\n InjectionToken,\n input,\n} from '@angular/core';\nimport { resolveSpacing } from '../../functions/size/size-converter';\n\ntype SpacingValue = number | string | undefined | null;\n\n/**\n * Which of the two spacings a primitive takes inward rather than on its host.\n * Provided in a component's own `providers`, so the directive on that host\n * reads it from the same element and nowhere else.\n *\n * `padding` — the primitive draws a box of its own inside the host (a Card's\n * header, main and footer) and pads that box from `--m-padding-inline` /\n * `--m-padding-block` in place of its built-in padding. Padding the host too\n * would pad it twice.\n *\n * `margin` — the primitive stretches to its container's width, so a margin on\n * the host pushes it past the edge. It reads `--m-margin-inline` and narrows\n * itself instead.\n */\nexport type SpacingInward = { padding?: boolean; margin?: boolean };\n\nexport const SPACING_INWARD = new InjectionToken<SpacingInward>(\n 'SPACING_INWARD'\n);\n\n// A blank axis is unset, not a value: an inspector form hands back every\n// untouched text field as `''`, and `??` alone would let it blank the\n// shorthand the User did type.\nconst isBlank = (value: SpacingValue): boolean =>\n value === undefined ||\n value === null ||\n (typeof value === 'string' && value.trim() === '');\n\nconst axis = (own: SpacingValue, shorthand: SpacingValue): string | undefined =>\n resolveSpacing(isBlank(own) ? shorthand : own);\n\n/**\n * Space inside any element. A bare number is `em`, any other CSS length\n * passes through; the axis inputs win over the shorthand on their own axis.\n * Always writes the resolved lengths as `--m-padding-inline` /\n * `--m-padding-block`, and pads the host itself unless the host takes padding\n * inward (`SPACING_INWARD`).\n */\n@Directive({\n selector: '[mPadding],[mPaddingX],[mPaddingY]',\n host: {\n class: 'm-padded',\n '[style.--m-padding-inline]': 'inline()',\n '[style.--m-padding-block]': 'block()',\n '[style.padding-inline]': 'inward ? null : inline()',\n '[style.padding-block]': 'inward ? null : block()',\n },\n})\nexport class PaddingDirective {\n readonly mPadding = input<SpacingValue>(undefined);\n readonly mPaddingX = input<SpacingValue>(undefined);\n readonly mPaddingY = input<SpacingValue>(undefined);\n\n protected readonly inward = !!inject(SPACING_INWARD, {\n self: true,\n optional: true,\n })?.padding;\n\n protected readonly inline = computed(() =>\n axis(this.mPaddingX(), this.mPadding())\n );\n protected readonly block = computed(() =>\n axis(this.mPaddingY(), this.mPadding())\n );\n}\n\n/**\n * Space around any element, on `PaddingDirective`'s scale. Writes\n * `--m-margin-inline` / `--m-margin-block` always; the block margin is set on\n * the host always, the inline one only when the host does not take it inward\n * (`SPACING_INWARD`) — a full-width host narrows by it instead.\n */\n@Directive({\n selector: '[mMargin],[mMarginX],[mMarginY]',\n host: {\n class: 'm-spaced',\n '[style.--m-margin-inline]': 'inline()',\n '[style.--m-margin-block]': 'block()',\n '[style.margin-inline]': 'inward ? null : inline()',\n '[style.margin-block]': 'block()',\n },\n})\nexport class MarginDirective {\n readonly mMargin = input<SpacingValue>(undefined);\n readonly mMarginX = input<SpacingValue>(undefined);\n readonly mMarginY = input<SpacingValue>(undefined);\n\n protected readonly inward = !!inject(SPACING_INWARD, {\n self: true,\n optional: true,\n })?.margin;\n\n protected readonly inline = computed(() =>\n axis(this.mMarginX(), this.mMargin())\n );\n protected readonly block = computed(() =>\n axis(this.mMarginY(), this.mMargin())\n );\n}\n","import { Draggable } from '../../type';\nimport { Position } from '../../../../type/screen/position';\n\nfunction isWithinBoundary(\n value: number,\n draggable: Draggable,\n axis: 'x' | 'y'\n): boolean {\n const maxVal =\n draggable.max?.[axis] ??\n (axis === 'x' ? window.innerWidth : window.innerHeight);\n const minVal = draggable.min?.[axis] ?? 0;\n return value <= maxVal && value >= minVal;\n}\n\nexport function getNewPosition(\n draggable: Draggable,\n event: MouseEvent | TouchEvent,\n delta: Position\n): Position {\n let { x, y } = draggable.position;\n\n const isTouch = 'touches' in event;\n const touch = isTouch ? event.touches[0] || event.changedTouches[0] : null;\n const screenX = touch ? touch.screenX : (event as MouseEvent).screenX;\n const screenY = touch ? touch.screenY : (event as MouseEvent).screenY;\n\n if (draggable.direction !== 'y') {\n const dx = screenX - (delta.x ?? 0);\n if (isWithinBoundary(dx, draggable, 'x')) {\n x = dx;\n }\n }\n\n if (draggable.direction !== 'x') {\n const dy = screenY - (delta.y ?? 0);\n if (isWithinBoundary(dy, draggable, 'y')) {\n y = dy;\n }\n }\n\n return { x, y };\n}\n","import { Draggable } from '../../type';\n\nexport function getCursor({ direction }: Draggable) {\n switch (direction) {\n case 'x':\n return 'ew-resize';\n case 'y':\n return 'ns-resize';\n default:\n return 'move';\n }\n}\n","import { computed, Directive, HostListener, Input, model, input, output } from '@angular/core';\nimport { Draggable, DraggableState } from './type';\nimport { getCursor, getNewPosition } from './lib';\n// The type's own file rather than the shared barrel: that barrel reaches every\n// UI slice, so a directive importing it is a cycle back into the components\n// that declare this directive — and a half-initialised cycle leaves\n// `DraggableDirective` undefined in whichever of them is evaluated first.\nimport { Position } from '../../type/screen/position';\n\n/** Buttons/links inside a handle must keep their click — not start a drag. */\nconst INTERACTIVE_SELECTOR =\n 'button, a, input, textarea, select, [role=\"button\"], [contenteditable=\"true\"]';\n\nconst shouldIgnorePointer = (target: HTMLElement): boolean =>\n target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.tagName === 'SELECT' ||\n target.isContentEditable ||\n !!target.closest(INTERACTIVE_SELECTOR);\n\n@Directive({\n selector: '[mDraggable]',\n host: {\n '[class.draggable]': \"mDraggable()?.direction !== 'none'\",\n '[class.dragging]': 'this.state.dragging',\n '[style.position]':\n \"mDraggable()?.direction !== 'none' ? (mDraggable()?.positionType ?? 'absolute') : null\",\n '[style.top.px]':\n \"mDraggable()?.direction !== 'none' && mDraggable()?.direction !== 'x' ? mDraggable()?.position?.y : null\",\n '[style.left.px]':\n \"mDraggable()?.direction !== 'none' && mDraggable()?.direction !== 'y' ? mDraggable()?.position?.x : null\",\n '[style.cursor]': \"mDraggable()?.direction !== 'none' ? cursor() : null\",\n },\n})\nexport class DraggableDirective {\n mDraggable = model.required<Draggable>();\n handleSelector = input<string>();\n\n /**\n * The bounds, read at drag time and never written into `mDraggable`.\n *\n * They used to be merged in by a setter, which lost them the moment a parent\n * replaced its Draggable — a `linkedSignal` recomputed from the value the\n * drag itself writes back, which is what both Ranges do. Angular memoizes an\n * inline object literal in a template, so `[min]=\"{ x: 0, y: 3 }\"` is the\n * same reference on the next pass and its setter never fires again to put\n * the bound back. The config then had no `max`, `isWithinBoundary` fell\n * through to `window.innerWidth`, and the thumb slid off the track.\n *\n * A bound is what the caller says the drag may not pass, not state the drag\n * mutates — so it stays an input and the two never share an object.\n */\n readonly min = input<Position | undefined>(undefined);\n readonly max = input<Position | undefined>(undefined);\n\n readonly dragStart = output<void>();\n readonly dragEnd = output<void>();\n\n protected readonly cursor = computed(() => getCursor(this.mDraggable()));\n protected state = <DraggableState>{\n dragging: false,\n delta: { x: 0, y: 0 },\n };\n\n @Input() set pos(position: Position) {\n this.mDraggable.update((config) => ({\n ...config,\n position,\n }));\n }\n\n /**\n * The config a move is clamped against: the bounds on the tag win, and a\n * caller that carries them inside its own Draggable keeps working.\n */\n private readonly bounded = (config: Draggable): Draggable => ({\n ...config,\n min: this.min() ?? config.min,\n max: this.max() ?? config.max,\n });\n\n @HostListener('mousedown', ['$event'])\n protected handleMouseDown(event: MouseEvent) {\n const target = event.target as HTMLElement;\n if (\n this.mDraggable()?.direction === 'none' ||\n shouldIgnorePointer(target)\n ) {\n return;\n }\n const selector = this.handleSelector();\n if (selector && !target.closest(selector)) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n this.state.dragging = true;\n this.dragStart.emit();\n const { screenX, screenY } = event;\n const { x, y } = this.mDraggable()?.position ?? {};\n this.state.delta.x = screenX - (x ?? 0);\n this.state.delta.y = screenY - (y ?? 0);\n }\n\n @HostListener('window:mousemove', ['$event'])\n protected handleMouseMove(event: MouseEvent): void {\n if (!this.state.dragging) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.mDraggable.update((config) => ({\n ...config,\n position: getNewPosition(this.bounded(config), event, this.state.delta),\n }));\n }\n\n @HostListener('window:mouseup', ['$event'])\n protected handleMouseUp(event: MouseEvent): void {\n if (!this.state.dragging) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n this.state.dragging = false;\n this.dragEnd.emit();\n }\n\n @HostListener('touchstart', ['$event'])\n protected handleTouchStart(event: TouchEvent) {\n const target = event.target as HTMLElement;\n if (\n this.mDraggable()?.direction === 'none' ||\n shouldIgnorePointer(target)\n ) {\n return;\n }\n const selector = this.handleSelector();\n if (selector && !target.closest(selector)) {\n return;\n }\n event.stopPropagation();\n this.state.dragging = true;\n this.dragStart.emit();\n const touch = event.touches[0];\n const { screenX, screenY } = touch;\n const { x, y } = this.mDraggable()?.position ?? {};\n this.state.delta.x = screenX - (x ?? 0);\n this.state.delta.y = screenY - (y ?? 0);\n }\n\n @HostListener('window:touchmove', ['$event'])\n protected handleTouchMove(event: TouchEvent): void {\n if (!this.state.dragging) {\n return;\n }\n if (event.cancelable) {\n event.preventDefault();\n }\n event.stopPropagation();\n this.mDraggable.update((config) => ({\n ...config,\n position: getNewPosition(this.bounded(config), event, this.state.delta),\n }));\n }\n\n @HostListener('window:touchend', ['$event'])\n protected handleTouchEnd(event: TouchEvent): void {\n if (!this.state.dragging) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n this.state.dragging = false;\n this.dragEnd.emit();\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n signal,\n} from '@angular/core';\n\nexport interface DragListReorder {\n from: number;\n to: number;\n}\n\n/**\n * Container side of HTML5 drag-to-reorder. Put on the element wrapping the\n * items, pair with [mDragListItem] on each item. Emits (reordered) with\n * {from, to} — the consumer owns the array move. Auto-scrolls any scrollable\n * ancestor (and the viewport) while the pointer is within 150px of its edge.\n * With removeOnDragOut, dropping an item outside the container emits\n * (removed) with its index — the consumer owns the actual removal.\n */\n@Directive({\n selector: '[mDragList]',\n host: {\n '(dragover)': 'onContainerDragOver($event)',\n },\n})\nexport class DragListDirective implements OnDestroy {\n readonly removeOnDragOut = input(false, { transform: booleanAttribute });\n\n readonly reordered = output<DragListReorder>();\n readonly removed = output<number>();\n\n readonly draggedIndex = signal<number | null>(null);\n readonly dragOverIndex = signal<number | null>(null);\n\n readonly #elementRef = inject(ElementRef);\n\n #scrollAnimationFrameId: number | null = null;\n #dragPointerX = 0;\n #dragPointerY = 0;\n #scrollContainers: HTMLElement[] = [];\n\n readonly startDrag = (index: number, clientX: number, clientY: number): void => {\n this.draggedIndex.set(index);\n this.#dragPointerX = clientX;\n this.#dragPointerY = clientY;\n this.#startScrollLoop();\n };\n\n readonly trackPointer = (clientX: number, clientY: number): void => {\n // Firefox reports client coords 0 on drag events — ignore those samples.\n if (clientX !== 0 || clientY !== 0) {\n this.#dragPointerX = clientX;\n this.#dragPointerY = clientY;\n }\n };\n\n readonly endDrag = (): void => {\n this.draggedIndex.set(null);\n this.dragOverIndex.set(null);\n this.#stopScrollLoop();\n };\n\n // Called on dragend — fires only when no drop() consumed the drag (drop on\n // an item clears draggedIndex first). Pointer outside the container at\n // release means the item was dragged out.\n readonly dragEnded = (event: DragEvent): void => {\n const from = this.draggedIndex();\n if (from !== null && this.removeOnDragOut() && this.#isPointerOutside(event)) {\n this.endDrag();\n this.removed.emit(from);\n return;\n }\n this.endDrag();\n };\n\n readonly #isPointerOutside = (event: DragEvent): boolean => {\n const x = event.clientX || this.#dragPointerX;\n const y = event.clientY || this.#dragPointerY;\n const rect = (this.#elementRef.nativeElement as HTMLElement).getBoundingClientRect();\n return x < rect.left || x > rect.right || y < rect.top || y > rect.bottom;\n };\n\n readonly drop = (index: number): void => {\n const from = this.draggedIndex();\n this.endDrag();\n if (from !== null && from !== index) {\n this.reordered.emit({ from, to: index });\n }\n };\n\n protected readonly onContainerDragOver = (event: DragEvent): void => {\n event.preventDefault();\n this.trackPointer(event.clientX, event.clientY);\n };\n\n readonly #getScrollContainers = (): HTMLElement[] => {\n const list: HTMLElement[] = [];\n let el: HTMLElement | null = this.#elementRef.nativeElement;\n while (el && el !== document.body) {\n const style = window.getComputedStyle(el);\n const overflowY = style.overflowY || style.overflow;\n const isScrollable =\n overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'hidden';\n if (isScrollable && el.scrollHeight > el.clientHeight) {\n list.push(el);\n }\n el = el.parentElement;\n }\n list.push(document.documentElement);\n return list;\n };\n\n readonly #startScrollLoop = (): void => {\n this.#stopScrollLoop();\n this.#scrollContainers = this.#getScrollContainers();\n\n window.addEventListener('dragover', this.#onGlobalDragOver, true);\n window.addEventListener('drag', this.#onGlobalDrag, true);\n\n const loop = (): void => {\n if (this.draggedIndex() === null) {\n this.#stopScrollLoop();\n return;\n }\n\n for (const container of this.#scrollContainers) {\n const isRoot = container === document.documentElement;\n const rect = container.getBoundingClientRect();\n const topThreshold = isRoot ? 150 : rect.top + 150;\n const bottomThreshold = isRoot\n ? window.innerHeight - 150\n : rect.bottom - 150;\n\n if (this.#dragPointerY < topThreshold) {\n const diff = topThreshold - this.#dragPointerY;\n const speed = Math.min(25, Math.max(2, Math.floor(diff / 4)));\n if (isRoot) {\n window.scrollBy(0, -speed);\n } else {\n container.scrollTop -= speed;\n }\n } else if (this.#dragPointerY > bottomThreshold) {\n const diff = this.#dragPointerY - bottomThreshold;\n const speed = Math.min(25, Math.max(2, Math.floor(diff / 4)));\n if (isRoot) {\n window.scrollBy(0, speed);\n } else {\n container.scrollTop += speed;\n }\n }\n }\n\n this.#scrollAnimationFrameId = requestAnimationFrame(loop);\n };\n\n this.#scrollAnimationFrameId = requestAnimationFrame(loop);\n };\n\n readonly #stopScrollLoop = (): void => {\n window.removeEventListener('dragover', this.#onGlobalDragOver, true);\n window.removeEventListener('drag', this.#onGlobalDrag, true);\n if (this.#scrollAnimationFrameId !== null) {\n cancelAnimationFrame(this.#scrollAnimationFrameId);\n this.#scrollAnimationFrameId = null;\n }\n this.#scrollContainers = [];\n };\n\n // Global listeners: dragover fires reliably everywhere once preventDefault'd,\n // drag covers browsers that skip dragover outside drop targets.\n readonly #onGlobalDragOver = (event: DragEvent): void => {\n event.preventDefault();\n this.trackPointer(event.clientX, event.clientY);\n };\n\n readonly #onGlobalDrag = (event: DragEvent): void => {\n this.trackPointer(event.clientX, event.clientY);\n };\n\n ngOnDestroy(): void {\n this.#stopScrollLoop();\n }\n}\n","import { computed, Directive, ElementRef, inject, input } from '@angular/core';\nimport { DragListDirective } from './drag-list';\n\n/**\n * Item side of HTML5 drag-to-reorder. Put on each repeated element inside an\n * [mDragList] container, bound to the item's index: [mDragListItem]=\"i\".\n * Adds `is-dragging` on the dragged item and `is-drag-over` on the current\n * drop target — style them in the consumer.\n */\n@Directive({\n selector: '[mDragListItem]',\n host: {\n draggable: 'true',\n '[class.is-dragging]': 'isDragging()',\n '[class.is-drag-over]': 'isDragOver()',\n '(dragstart)': 'onDragStart($event)',\n '(dragover)': 'onDragOver($event)',\n '(dragenter)': 'onDragEnter()',\n '(dragleave)': 'onDragLeave()',\n '(dragend)': 'onDragEnd($event)',\n '(drop)': 'onDrop($event)',\n '(drag)': 'onDrag($event)',\n },\n})\nexport class DragListItemDirective {\n readonly mDragListItem = input.required<number>();\n\n readonly #list = inject(DragListDirective);\n readonly #elementRef = inject(ElementRef);\n\n protected readonly isDragging = computed(\n () => this.#list.draggedIndex() === this.mDragListItem()\n );\n protected readonly isDragOver = computed(\n () => this.#list.dragOverIndex() === this.mDragListItem()\n );\n\n protected readonly onDragStart = (event: DragEvent): void => {\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', this.mDragListItem().toString());\n this.#setDragGhost(event);\n }\n this.#list.startDrag(this.mDragListItem(), event.clientX, event.clientY);\n };\n\n // Replaces the browser's flat snapshot ghost with a lifted, tilted clone so\n // the item visibly \"picks up\". Clone keeps _ngcontent attributes, so the\n // consumer's scoped styles still apply to it.\n readonly #setDragGhost = (event: DragEvent): void => {\n const host = this.#elementRef.nativeElement as HTMLElement;\n const rect = host.getBoundingClientRect();\n const padding = 24;\n\n const ghost = host.cloneNode(true) as HTMLElement;\n ghost.style.width = `${rect.width}px`;\n ghost.style.margin = '0';\n ghost.style.transform = 'rotate(2.5deg) scale(1.04)';\n ghost.style.boxShadow = '0 16px 40px rgba(0, 0, 0, 0.4)';\n ghost.style.opacity = '0.95';\n\n // Wrapper gives the rotation and shadow room to render without clipping;\n // must be in the document (offscreen) for setDragImage to rasterize it.\n const wrapper = document.createElement('div');\n wrapper.style.position = 'fixed';\n wrapper.style.top = '-10000px';\n wrapper.style.left = '-10000px';\n wrapper.style.padding = `${padding}px`;\n wrapper.style.pointerEvents = 'none';\n wrapper.appendChild(ghost);\n document.body.appendChild(wrapper);\n\n event.dataTransfer?.setDragImage(\n wrapper,\n event.clientX - rect.left + padding,\n event.clientY - rect.top + padding\n );\n\n // Browser rasterizes the ghost synchronously within dragstart — safe to\n // drop the DOM node right after.\n setTimeout(() => wrapper.remove(), 0);\n };\n\n protected readonly onDrag = (event: DragEvent): void => {\n this.#list.trackPointer(event.clientX, event.clientY);\n };\n\n protected readonly onDragOver = (event: DragEvent): void => {\n if (this.#list.draggedIndex() === this.mDragListItem()) return;\n event.preventDefault();\n this.#list.trackPointer(event.clientX, event.clientY);\n };\n\n protected readonly onDragEnter = (): void => {\n if (this.#list.draggedIndex() === this.mDragListItem()) return;\n this.#list.dragOverIndex.set(this.mDragListItem());\n };\n\n protected readonly onDragLeave = (): void => {\n if (this.#list.dragOverIndex() === this.mDragListItem()) {\n this.#list.dragOverIndex.set(null);\n }\n };\n\n protected readonly onDragEnd = (event: DragEvent): void => {\n this.#list.dragEnded(event);\n };\n\n protected readonly onDrop = (event: DragEvent): void => {\n event.preventDefault();\n this.#list.drop(this.mDragListItem());\n };\n}\n","import {\n AfterViewChecked,\n Directive,\n ElementRef,\n HostListener,\n inject,\n} from '@angular/core';\nimport { IS_DESIGN_MODE } from '../../config/tokens';\n\n@Directive({\n selector: '[mAutosize]',\n})\nexport class AutosizeDirective implements AfterViewChecked {\n readonly _el = inject(ElementRef);\n\n // DesignMode: the canvas runs change detection on every hover, select and\n // drag, and each pass re-measured the field — collapsing it to `0px` and\n // growing it back — so the editor's overlay chased a box that kept\n // resizing and flickered. On the canvas the field keeps its intrinsic\n // `rows` height and is never resized.\n readonly #isDesignMode = !!inject(IS_DESIGN_MODE, { optional: true });\n\n // What the height was last measured against. Outside the canvas, change\n // detection still runs on every hover, select and drag; re-measuring on each\n // pass collapsed the field to `0px` for a moment, which clamps the scrollTop\n // of any scrolling ancestor — the panel jumped and the field flickered. Only\n // a new value or a new width can change the height, so nothing else measures.\n #measuredValue: string | null = null;\n #measuredWidth = -1;\n\n @HostListener('input', [])\n @HostListener('window:resize', [])\n onInput(): void {\n if (!this.#isDesignMode) this.#adjust();\n }\n\n ngAfterViewChecked(): void {\n if (this.#isDesignMode) return;\n if (this._el.nativeElement.offsetParent != null) setTimeout(this.#adjust);\n }\n\n // `0px`, not `auto`, as the height the text is measured against. `auto` is an\n // indefinite cross size, so any ancestor that stretches its children —\n // `.m-section__body` is `align-items: stretch`, and a Screen nests those —\n // resolves it to the stretched box, and `scrollHeight` then reports that\n // box rather than the text in it. Written back on every `ngAfterViewChecked`,\n // that ratchets the field up to whatever caps the chain: inside a Modal, the\n // pop-up's own `max-height`, at which point the field *is* the modal and the\n // Screen around it is scrolled out of reach. `0px` is definite, so nothing\n // stretches it and `scrollHeight` is the content alone.\n #adjust = (): void => {\n const el = this._el.nativeElement as HTMLTextAreaElement;\n const width = el.clientWidth;\n if (el.value === this.#measuredValue && width === this.#measuredWidth) {\n return;\n }\n this.#measuredValue = el.value;\n this.#measuredWidth = width;\n el.style.overflow = 'hidden';\n el.style.height = '0px';\n el.style.height = `${el.scrollHeight}px`;\n };\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n inject,\n input,\n output,\n} from '@angular/core';\n\nexport interface FileUploadConfig {\n accept?: string[];\n multiple?: boolean;\n maxSize?: number;\n /** Picks a folder and answers every file inside it; `accept` is ignored. */\n directory?: boolean;\n}\n\nexport interface FileUploadEvent {\n files: File[];\n}\n\n@Directive({\n selector: '[mFileUpload]',\n host: {\n '[style.cursor]': '\"pointer\"',\n },\n})\nexport class FileUploadDirective {\n mFileUpload = input<FileUploadConfig>({});\n readonly fileSelect = output<FileUploadEvent>();\n\n private readonly elementRef = inject(ElementRef);\n private fileInput: HTMLInputElement | null = null;\n\n @HostListener('click')\n protected openFilePicker(): void {\n if (!this.fileInput) {\n this.fileInput = document.createElement('input');\n this.fileInput.type = 'file';\n this.fileInput.style.display = 'none';\n this.fileInput.addEventListener('change', this.onFileChange);\n this.elementRef.nativeElement.appendChild(this.fileInput);\n }\n\n const config = this.mFileUpload();\n this.fileInput.accept = config.accept?.join(',') ?? '*';\n this.fileInput.multiple = config.multiple ?? false;\n this.fileInput.click();\n }\n\n private readonly onFileChange = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n\n if (files.length === 0) return;\n\n const config = this.mFileUpload();\n const maxSize = config.maxSize;\n\n const validFiles = maxSize ? files.filter((f) => f.size <= maxSize) : files;\n\n if (validFiles.length > 0) {\n this.fileSelect.emit({ files: validFiles });\n }\n\n input.value = '';\n };\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n inject,\n input,\n OnDestroy,\n} from '@angular/core';\n\n@Directive({\n selector: '[mToolTip]',\n})\nexport class ToolTipDirective implements OnDestroy {\n mToolTip = input<string>('');\n\n private readonly elementRef = inject(ElementRef);\n private tooltipElement: HTMLElement | null = null;\n\n @HostListener('mouseenter')\n protected showTooltip(): void {\n const text = this.mToolTip();\n if (!text) return;\n\n this.tooltipElement = document.createElement('div');\n this.tooltipElement.textContent = text;\n Object.assign(this.tooltipElement.style, {\n position: 'fixed',\n background: 'rgba(0, 0, 0, 0.8)',\n color: '#fff',\n padding: '4px 8px',\n borderRadius: '4px',\n fontSize: '12px',\n zIndex: '10000',\n pointerEvents: 'none',\n whiteSpace: 'nowrap',\n });\n\n document.body.appendChild(this.tooltipElement);\n this.positionTooltip();\n }\n\n @HostListener('mouseleave')\n protected hideTooltip(): void {\n this.removeTooltip();\n }\n\n ngOnDestroy(): void {\n this.removeTooltip();\n }\n\n private positionTooltip(): void {\n if (!this.tooltipElement) return;\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const tooltipRect = this.tooltipElement.getBoundingClientRect();\n this.tooltipElement.style.left = `${rect.left + rect.width / 2 - tooltipRect.width / 2}px`;\n this.tooltipElement.style.top = `${rect.top - tooltipRect.height - 6}px`;\n }\n\n private removeTooltip(): void {\n this.tooltipElement?.remove();\n this.tooltipElement = null;\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n inject,\n signal,\n} from '@angular/core';\n\ntype Direction = 'above' | 'below' | 'left' | 'right';\n\n@Directive({\n selector: '[mPosition]',\n host: {\n '[class.m-pos--above]': 'direction() === \"above\"',\n '[class.m-pos--below]': 'direction() === \"below\"',\n '[class.m-pos--left]': 'direction() === \"left\"',\n '[class.m-pos--right]': 'direction() === \"right\"',\n },\n})\nexport class PositionDirective {\n private readonly el = inject(ElementRef<HTMLElement>);\n protected readonly direction = signal<Direction>('below');\n\n @HostListener('mouseenter')\n detect(): void {\n const rect = this.el.nativeElement.getBoundingClientRect();\n const spaces: Record<Direction, number> = {\n below: window.innerHeight - rect.bottom,\n above: rect.top,\n right: window.innerWidth - rect.right,\n left: rect.left,\n };\n const best = (Object.entries(spaces) as [Direction, number][]).reduce(\n (best, [dir, space]) => (space > best.space ? { dir, space } : best),\n { dir: 'below' as Direction, space: spaces.below }\n );\n this.direction.set(best.dir);\n }\n}\n","import {\n afterRenderEffect,\n Directive,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\n\n@Directive({\n selector: '[mHighlight]',\n})\nexport class HighlightDirective {\n readonly mHighlight = input<string>('');\n readonly mHighlightText = input<string>('');\n\n private readonly el = inject(ElementRef);\n\n constructor() {\n afterRenderEffect(() => {\n const query = this.mHighlight().trim();\n const text = this.mHighlightText();\n if (!query) {\n this.el.nativeElement.innerHTML = this.escapeHtml(text);\n return;\n }\n const escaped = query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(`(${escaped})`, 'gi');\n this.el.nativeElement.innerHTML = this.escapeHtml(text).replace(\n regex,\n '<mark class=\"m-table__highlight\">$1</mark>'\n );\n });\n }\n\n private readonly escapeHtml = (str: string): string =>\n String(str ?? '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"');\n}\n","/**\n * Generates a consistent HSL color based on the input string.\n * Used for wallet backgrounds and other items where visual consistency is needed.\n */\nexport function stringToColor(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = (Math.imul(31, hash) + str.charCodeAt(i)) | 0;\n }\n\n // Use hash to generate H, S, L\n const h = Math.abs(hash) % 360;\n const s = 65 + (Math.abs(hash >> 8) % 20); // 65-85% saturation for vibrancy\n const l = 45 + (Math.abs(hash >> 16) % 15); // 45-60% lightness for readability\n\n return `hsl(${h}, ${s}%, ${l}%)`;\n}\n","import {\n Directive,\n ElementRef,\n inject,\n input,\n effect,\n Renderer2,\n} from '@angular/core';\nimport { stringToColor } from '../../functions/string/color';\n\n@Directive({\n selector: '[mHeroColor]',\n})\nexport class MHeroColorDirective {\n /** The string to generate the color from (e.g., coin name, wallet name) */\n mHeroColor = input.required<string>();\n\n /** The CSS variable name to set (defaults to --hero-accent-color) */\n mHeroColorVar = input<string>('--hero-accent-color');\n\n #el = inject(ElementRef);\n #renderer = inject(Renderer2);\n\n constructor() {\n effect(() => {\n const source = this.mHeroColor();\n const varName = this.mHeroColorVar();\n\n if (source) {\n const color = stringToColor(source);\n this.#renderer.setStyle(this.#el.nativeElement, varName, color);\n }\n });\n }\n}\n"],"mappings":";;;;;AA2BA,MAAa,iBAAiB,IAAI,eAChC,gBAAgB;AAMlB,MAAM,WAAW,UACf,UAAU,UACV,UAAU,QACT,OAAO,UAAU,YAAY,MAAM,KAAI,MAAO;AAEjD,MAAM,QAAQ,KAAmB,cAC/B,eAAe,QAAQ,GAAG,IAAI,YAAY,GAAG;AAmB/C,IAAa,mBAAb,MAAa,iBAAgB;CAClB,WAAW,MAAoB,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CACzC,YAAY,MAAoB,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CAC1C,YAAY,MAAoB,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CAEhC,SAAS,CAAC,CAAC,OAAO,gBAAgB;EACnD,MAAM;EACN,UAAU;CACX,CAAA,CAAC,EAAE;CAEe,SAAS,eAC1B,KAAK,KAAK,UAAS,GAAI,KAAK,SAAQ,CAAE,GACvC,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CACkB,QAAQ,eACzB,KAAK,KAAK,UAAS,GAAI,KAAK,SAAQ,CAAE,GACvC,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAfU,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAgB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAhB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAgB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,MAAA;GAAA,YAAA;IAAA,4BAAA;IAAA,2BAAA;IAAA,wBAAA;IAAA,uBAAA;GAAA;GAAA,gBAAA;EAAA;EAAA,UAAA;CAAA,CAAA;;AAAhB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAgB,YAAA,CAAA;EAV5B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,MAAM;IACJ,OAAO;IACP,8BAA8B;IAC9B,6BAA6B;IAC7B,0BAA0B;IAC1B,yBAAyB;GAC1B;EACF,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCD,IAAa,kBAAb,MAAa,gBAAe;CACjB,UAAU,MAAoB,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CACxC,WAAW,MAAoB,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CACzC,WAAW,MAAoB,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAE/B,SAAS,CAAC,CAAC,OAAO,gBAAgB;EACnD,MAAM;EACN,UAAU;CACX,CAAA,CAAC,EAAE;CAEe,SAAS,eAC1B,KAAK,KAAK,SAAQ,GAAI,KAAK,QAAO,CAAE,GACrC,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CACkB,QAAQ,eACzB,KAAK,KAAK,SAAQ,GAAI,KAAK,QAAO,CAAE,GACrC,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAfU,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAe,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAf,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAe,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,MAAA;GAAA,YAAA;IAAA,2BAAA;IAAA,0BAAA;IAAA,uBAAA;IAAA,sBAAA;GAAA;GAAA,gBAAA;EAAA;EAAA,UAAA;CAAA,CAAA;;AAAf,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAe,YAAA,CAAA;EAV3B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,MAAM;IACJ,OAAO;IACP,6BAA6B;IAC7B,4BAA4B;IAC5B,yBAAyB;IACzB,wBAAwB;GACzB;EACF,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzFD,SAAS,iBACP,OACA,WACA,MAAe;CAEf,MAAM,SACJ,UAAU,MAAM,UACf,SAAS,MAAM,OAAO,aAAa,OAAO;CAC7C,MAAM,SAAS,UAAU,MAAM,SAAS;CACxC,OAAO,SAAS,UAAU,SAAS;AACrC;AAEA,SAAgB,eACd,WACA,OACA,OAAe;CAEf,IAAI,EAAE,GAAG,MAAM,UAAU;CAGzB,MAAM,QADU,aAAa,QACL,MAAM,QAAQ,MAAM,MAAM,eAAe,KAAK;CACtE,MAAM,UAAU,QAAQ,MAAM,UAAW,MAAqB;CAC9D,MAAM,UAAU,QAAQ,MAAM,UAAW,MAAqB;CAE9D,IAAI,UAAU,cAAc,KAAK;EAC/B,MAAM,KAAK,WAAW,MAAM,KAAK;EACjC,IAAI,iBAAiB,IAAI,WAAW,GAAG,GACrC,IAAI;CAER;CAEA,IAAI,UAAU,cAAc,KAAK;EAC/B,MAAM,KAAK,WAAW,MAAM,KAAK;EACjC,IAAI,iBAAiB,IAAI,WAAW,GAAG,GACrC,IAAI;CAER;CAEA,OAAO;EAAE;EAAG;CAAC;AACf;ACxCA,SAAgB,UAAU,EAAE,aAAsB;CAChD,QAAQ,WAAR;EACE,KAAK,KACH,OAAO;EACT,KAAK,KACH,OAAO;EACT,SACE,OAAO;CACX;AACF;ACDA,MAAM,uBACJ;AAEF,MAAM,uBAAuB,WAC3B,OAAO,YAAY,WACnB,OAAO,YAAY,cACnB,OAAO,YAAY,YACnB,OAAO,qBACP,CAAC,CAAC,OAAO,QAAQ,oBAAoB;AAgBvC,IAAa,qBAAb,MAAa,mBAAkB;CAC7B,aAAa,MAAM,SAAqB,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CACxC,iBAAiB,MAAe,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CAgBvB,MAAM,MAA4B,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CAC5C,MAAM,MAA4B,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CAE5C,YAAY,OAAM;CAClB,UAAU,OAAM;CAEN,SAAS,eAAe,UAAU,KAAK,WAAU,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAC9D,QAAwB;EAChC,UAAU;EACV,OAAO;GAAE,GAAG;GAAG,GAAG;EAAC;CACpB;CAED,IAAa,IAAI,UAAkB;EACjC,KAAK,WAAW,QAAQ,YAAY;GAClC,GAAG;GACH;EACD,EAAC;CACJ;CAMiB,WAAW,YAAkC;EAC5D,GAAG;EACH,KAAK,KAAK,IAAG,KAAM,OAAO;EAC1B,KAAK,KAAK,IAAG,KAAM,OAAO;CAC3B;CAGS,gBAAgB,OAAiB;EACzC,MAAM,SAAS,MAAM;EACrB,IACE,KAAK,WAAU,CAAE,EAAE,cAAc,UACjC,oBAAoB,MAAM,GAE1B;EAEF,MAAM,WAAW,KAAK,eAAc;EACpC,IAAI,YAAY,CAAC,OAAO,QAAQ,QAAQ,GACtC;EAEF,MAAM,gBAAe;EACrB,MAAM,eAAc;EACpB,KAAK,MAAM,WAAW;EACtB,KAAK,UAAU,KAAI;EACnB,MAAM,EAAE,SAAS,YAAY;EAC7B,MAAM,EAAE,GAAG,MAAM,KAAK,WAAU,CAAE,EAAE,YAAY,CAAA;EAChD,KAAK,MAAM,MAAM,IAAI,WAAW,KAAK;EACrC,KAAK,MAAM,MAAM,IAAI,WAAW,KAAK;CACvC;CAGU,gBAAgB,OAAiB;EACzC,IAAI,CAAC,KAAK,MAAM,UACd;EAEF,MAAM,eAAc;EACpB,MAAM,gBAAe;EACrB,KAAK,WAAW,QAAQ,YAAY;GAClC,GAAG;GACH,UAAU,eAAe,KAAK,QAAQ,MAAM,GAAG,OAAO,KAAK,MAAM,KAAK;EACvE,EAAC;CACJ;CAGU,cAAc,OAAiB;EACvC,IAAI,CAAC,KAAK,MAAM,UACd;EAEF,MAAM,gBAAe;EACrB,MAAM,eAAc;EACpB,KAAK,MAAM,WAAW;EACtB,KAAK,QAAQ,KAAI;CACnB;CAGU,iBAAiB,OAAiB;EAC1C,MAAM,SAAS,MAAM;EACrB,IACE,KAAK,WAAU,CAAE,EAAE,cAAc,UACjC,oBAAoB,MAAM,GAE1B;EAEF,MAAM,WAAW,KAAK,eAAc;EACpC,IAAI,YAAY,CAAC,OAAO,QAAQ,QAAQ,GACtC;EAEF,MAAM,gBAAe;EACrB,KAAK,MAAM,WAAW;EACtB,KAAK,UAAU,KAAI;EAEnB,MAAM,EAAE,SAAS,YADH,MAAM,QAAQ;EAE5B,MAAM,EAAE,GAAG,MAAM,KAAK,WAAU,CAAE,EAAE,YAAY,CAAA;EAChD,KAAK,MAAM,MAAM,IAAI,WAAW,KAAK;EACrC,KAAK,MAAM,MAAM,IAAI,WAAW,KAAK;CACvC;CAGU,gBAAgB,OAAiB;EACzC,IAAI,CAAC,KAAK,MAAM,UACd;EAEF,IAAI,MAAM,YACR,MAAM,eAAc;EAEtB,MAAM,gBAAe;EACrB,KAAK,WAAW,QAAQ,YAAY;GAClC,GAAG;GACH,UAAU,eAAe,KAAK,QAAQ,MAAM,GAAG,OAAO,KAAK,MAAM,KAAK;EACvE,EAAC;CACJ;CAGU,eAAe,OAAiB;EACxC,IAAI,CAAC,KAAK,MAAM,UACd;EAEF,MAAM,gBAAe;EACrB,MAAM,eAAc;EACpB,KAAK,MAAM,WAAW;EACtB,KAAK,QAAQ,KAAI;CACnB;CA7IW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAkB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAlB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAkB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,gBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,KAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,KAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,KAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA;GAAA,YAAA;GAAA,WAAA;GAAA,SAAA;EAAA;EAAA,MAAA;GAAA,WAAA;IAAA,aAAA;IAAA,oBAAA;IAAA,kBAAA;IAAA,cAAA;IAAA,oBAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,kBAAA;IAAA,kBAAA;IAAA,gBAAA;IAAA,iBAAA;IAAA,gBAAA;GAAA;EAAA;EAAA,UAAA;CAAA,CAAA;;AAAlB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkB,YAAA,CAAA;EAd9B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,MAAM;IACJ,qBAAqB;IACrB,oBAAoB;IACpB,oBACE;IACF,kBACE;IACF,mBACE;IACF,kBAAkB;GACnB;EACF,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BE,KAAA,CAAA,EAAA,MAAA,MAAA,CAAA;;GAiBA,MAAA;GAAa,MAAA,CAAA,aAAa,CAAC,QAAQ,CAAC;;;GAuBpC,MAAA;GAAa,MAAA,CAAA,oBAAoB,CAAC,QAAQ,CAAC;;;GAa3C,MAAA;GAAa,MAAA,CAAA,kBAAkB,CAAC,QAAQ,CAAC;;;GAWzC,MAAA;GAAa,MAAA,CAAA,cAAc,CAAC,QAAQ,CAAC;;;GAuBrC,MAAA;GAAa,MAAA,CAAA,oBAAoB,CAAC,QAAQ,CAAC;;;GAe3C,MAAA;GAAa,MAAA,CAAA,mBAAmB,CAAC,QAAQ,CAAC;;;;ACxI7C,IAAa,oBAAb,MAAa,kBAAiB;CACnB,kBAAkB,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,kBAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAE5D,YAAY,OAAM;CAClB,UAAU,OAAM;CAEhB,eAAe,OAAsB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAC1C,gBAAgB,OAAsB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAE3C,cAAc,OAAO,UAAU;CAExC,0BAAyC;CACzC,gBAAgB;CAChB,gBAAgB;CAChB,oBAAmC,CAAA;CAE1B,aAAa,OAAe,SAAiB,YAAyB;EAC7E,KAAK,aAAa,IAAI,KAAK;EAC3B,KAAK,gBAAgB;EACrB,KAAK,gBAAgB;EACrB,KAAK,iBAAgB;CACvB;CAES,gBAAgB,SAAiB,YAAyB;EAEjE,IAAI,YAAY,KAAK,YAAY,GAAG;GAClC,KAAK,gBAAgB;GACrB,KAAK,gBAAgB;EACvB;CACF;CAES,gBAAqB;EAC5B,KAAK,aAAa,IAAI,IAAI;EAC1B,KAAK,cAAc,IAAI,IAAI;EAC3B,KAAK,gBAAe;CACtB;CAKS,aAAa,UAA0B;EAC9C,MAAM,OAAO,KAAK,aAAY;EAC9B,IAAI,SAAS,QAAQ,KAAK,gBAAe,KAAM,KAAK,kBAAkB,KAAK,GAAG;GAC5E,KAAK,QAAO;GACZ,KAAK,QAAQ,KAAK,IAAI;GACtB;EACF;EACA,KAAK,QAAO;CACd;CAES,qBAAqB,UAA6B;EACzD,MAAM,IAAI,MAAM,WAAW,KAAK;EAChC,MAAM,IAAI,MAAM,WAAW,KAAK;EAChC,MAAM,OAAQ,KAAK,YAAY,cAA8B,sBAAqB;EAClF,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,SAAS,IAAI,KAAK,OAAO,IAAI,KAAK;CACrE;CAES,QAAQ,UAAuB;EACtC,MAAM,OAAO,KAAK,aAAY;EAC9B,KAAK,QAAO;EACZ,IAAI,SAAS,QAAQ,SAAS,OAC5B,KAAK,UAAU,KAAK;GAAE;GAAM,IAAI;EAAK,CAAE;CAE3C;CAEmB,uBAAuB,UAA0B;EAClE,MAAM,eAAc;EACpB,KAAK,aAAa,MAAM,SAAS,MAAM,OAAO;CAChD;CAES,6BAA2C;EAClD,MAAM,OAAsB,CAAA;EAC5B,IAAI,KAAyB,KAAK,YAAY;EAC9C,OAAO,MAAM,OAAO,SAAS,MAAM;GACjC,MAAM,QAAQ,OAAO,iBAAiB,EAAE;GACxC,MAAM,YAAY,MAAM,aAAa,MAAM;GAG3C,KADE,cAAc,UAAU,cAAc,YAAY,cAAc,aAC9C,GAAG,eAAe,GAAG,cACvC,KAAK,KAAK,EAAE;GAEd,KAAK,GAAG;EACV;EACA,KAAK,KAAK,SAAS,eAAe;EAClC,OAAO;CACT;CAES,yBAA8B;EACrC,KAAK,gBAAe;EACpB,KAAK,oBAAoB,KAAK,qBAAoB;EAElD,OAAO,iBAAiB,YAAY,KAAK,mBAAmB,IAAI;EAChE,OAAO,iBAAiB,QAAQ,KAAK,eAAe,IAAI;EAExD,MAAM,aAAkB;GACtB,IAAI,KAAK,aAAY,MAAO,MAAM;IAChC,KAAK,gBAAe;IACpB;GACF;GAEA,KAAK,MAAM,aAAa,KAAK,mBAAmB;IAC9C,MAAM,SAAS,cAAc,SAAS;IACtC,MAAM,OAAO,UAAU,sBAAqB;IAC5C,MAAM,eAAe,SAAS,MAAM,KAAK,MAAM;IAC/C,MAAM,kBAAkB,SACpB,OAAO,cAAc,MACrB,KAAK,SAAS;IAElB,IAAI,KAAK,gBAAgB,cAAc;KACrC,MAAM,OAAO,eAAe,KAAK;KACjC,MAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,CAAC,CAAC,CAAC;KAC5D,IAAI,QACF,OAAO,SAAS,GAAG,CAAC,KAAK;UAEzB,UAAU,aAAa;IAE3B,OAAO,IAAI,KAAK,gBAAgB,iBAAiB;KAC/C,MAAM,OAAO,KAAK,gBAAgB;KAClC,MAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,CAAC,CAAC,CAAC;KAC5D,IAAI,QACF,OAAO,SAAS,GAAG,KAAK;UAExB,UAAU,aAAa;IAE3B;GACF;GAEA,KAAK,0BAA0B,sBAAsB,IAAI;EAC3D;EAEA,KAAK,0BAA0B,sBAAsB,IAAI;CAC3D;CAES,wBAA6B;EACpC,OAAO,oBAAoB,YAAY,KAAK,mBAAmB,IAAI;EACnE,OAAO,oBAAoB,QAAQ,KAAK,eAAe,IAAI;EAC3D,IAAI,KAAK,4BAA4B,MAAM;GACzC,qBAAqB,KAAK,uBAAuB;GACjD,KAAK,0BAA0B;EACjC;EACA,KAAK,oBAAoB,CAAA;CAC3B;CAIS,qBAAqB,UAA0B;EACtD,MAAM,eAAc;EACpB,KAAK,aAAa,MAAM,SAAS,MAAM,OAAO;CAChD;CAES,iBAAiB,UAA0B;EAClD,KAAK,aAAa,MAAM,SAAS,MAAM,OAAO;CAChD;CAEA,cAAW;EACT,KAAK,gBAAe;CACtB;CA5JW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAiB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAjB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAiB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,iBAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,SAAA;GAAA,WAAA;GAAA,SAAA;EAAA;EAAA,MAAA,EAAA,WAAA,EAAA,YAAA,8BAAA,EAAA;EAAA,UAAA;CAAA,CAAA;;AAAjB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA;EAN7B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,MAAM,EACJ,cAAc,8BACf;EACF,CAAA;;;;;;;;;;;;;;;;;;;;;ACLD,IAAa,wBAAb,MAAa,sBAAqB;CACvB,gBAAgB,MAAM,SAAkB,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAExC,QAAQ,OAAO,iBAAiB;CAChC,cAAc,OAAO,UAAU;CAErB,aAAa,eACxB,KAAK,MAAM,aAAY,MAAO,KAAK,cAAa,GACvD,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CACkB,aAAa,eACxB,KAAK,MAAM,cAAa,MAAO,KAAK,cAAa,GACxD,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAEkB,eAAe,UAA0B;EAC1D,IAAI,MAAM,cAAc;GACtB,MAAM,aAAa,gBAAgB;GACnC,MAAM,aAAa,QAAQ,cAAc,KAAK,cAAa,CAAE,CAAC,SAAQ,CAAE;GACxE,KAAK,cAAc,KAAK;EAC1B;EACA,KAAK,MAAM,UAAU,KAAK,cAAa,GAAI,MAAM,SAAS,MAAM,OAAO;CACzE;CAKS,iBAAiB,UAA0B;EAClD,MAAM,OAAO,KAAK,YAAY;EAC9B,MAAM,OAAO,KAAK,sBAAqB;EACvC,MAAM,UAAU;EAEhB,MAAM,QAAQ,KAAK,UAAU,IAAI;EACjC,MAAM,MAAM,QAAQ,GAAG,KAAK,MAAK;EACjC,MAAM,MAAM,SAAS;EACrB,MAAM,MAAM,YAAY;EACxB,MAAM,MAAM,YAAY;EACxB,MAAM,MAAM,UAAU;EAItB,MAAM,UAAU,SAAS,cAAc,KAAK;EAC5C,QAAQ,MAAM,WAAW;EACzB,QAAQ,MAAM,MAAM;EACpB,QAAQ,MAAM,OAAO;EACrB,QAAQ,MAAM,UAAU,GAAG,QAAO;EAClC,QAAQ,MAAM,gBAAgB;EAC9B,QAAQ,YAAY,KAAK;EACzB,SAAS,KAAK,YAAY,OAAO;EAEjC,MAAM,cAAc,aAClB,SACA,MAAM,UAAU,KAAK,OAAO,SAC5B,MAAM,UAAU,KAAK,MAAM,OAAO;EAKpC,iBAAiB,QAAQ,OAAM,GAAI,CAAC;CACtC;CAEmB,UAAU,UAA0B;EACrD,KAAK,MAAM,aAAa,MAAM,SAAS,MAAM,OAAO;CACtD;CAEmB,cAAc,UAA0B;EACzD,IAAI,KAAK,MAAM,aAAY,MAAO,KAAK,cAAa,GAAI;EACxD,MAAM,eAAc;EACpB,KAAK,MAAM,aAAa,MAAM,SAAS,MAAM,OAAO;CACtD;CAEmB,oBAAyB;EAC1C,IAAI,KAAK,MAAM,aAAY,MAAO,KAAK,cAAa,GAAI;EACxD,KAAK,MAAM,cAAc,IAAI,KAAK,cAAa,CAAE;CACnD;CAEmB,oBAAyB;EAC1C,IAAI,KAAK,MAAM,cAAa,MAAO,KAAK,cAAa,GACnD,KAAK,MAAM,cAAc,IAAI,IAAI;CAErC;CAEmB,aAAa,UAA0B;EACxD,KAAK,MAAM,UAAU,KAAK;CAC5B;CAEmB,UAAU,UAA0B;EACrD,MAAM,eAAc;EACpB,KAAK,MAAM,KAAK,KAAK,cAAa,CAAE;CACtC;CAvFW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAqB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAArB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAqB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,eAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,MAAA;GAAA,YAAA,EAAA,aAAA,OAAA;GAAA,WAAA;IAAA,aAAA;IAAA,YAAA;IAAA,aAAA;IAAA,aAAA;IAAA,WAAA;IAAA,QAAA;IAAA,QAAA;GAAA;GAAA,YAAA;IAAA,qBAAA;IAAA,sBAAA;GAAA;EAAA;EAAA,UAAA;CAAA,CAAA;;AAArB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAqB,YAAA,CAAA;EAfjC,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,MAAM;IACJ,WAAW;IACX,uBAAuB;IACvB,wBAAwB;IACxB,eAAe;IACf,cAAc;IACd,eAAe;IACf,eAAe;IACf,aAAa;IACb,UAAU;IACV,UAAU;GACX;EACF,CAAA;;;;;;;;;;;ACXD,IAAa,oBAAb,MAAa,kBAAiB;CACnB,MAAM,OAAO,UAAU;CAOvB,gBAAgB,CAAC,CAAC,OAAO,gBAAgB,EAAE,UAAU,KAAI,CAAE;CAOpE,iBAAgC;CAChC,iBAAiB;CAIjB,UAAO;EACL,IAAI,CAAC,KAAK,eAAe,KAAK,QAAO;CACvC;CAEA,qBAAkB;EAChB,IAAI,KAAK,eAAe;EACxB,IAAI,KAAK,IAAI,cAAc,gBAAgB,MAAM,WAAW,KAAK,OAAO;CAC1E;CAWA,gBAAqB;EACnB,MAAM,KAAK,KAAK,IAAI;EACpB,MAAM,QAAQ,GAAG;EACjB,IAAI,GAAG,UAAU,KAAK,kBAAkB,UAAU,KAAK,gBACrD;EAEF,KAAK,iBAAiB,GAAG;EACzB,KAAK,iBAAiB;EACtB,GAAG,MAAM,WAAW;EACpB,GAAG,MAAM,SAAS;EAClB,GAAG,MAAM,SAAS,GAAG,GAAG,aAAY;CACtC;CAjDW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAiB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAjB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAiB,cAAA;EAAA,UAAA;EAAA,MAAA,EAAA,WAAA;GAAA,SAAA;GAAA,iBAAA;EAAA,EAAA;EAAA,UAAA;CAAA,CAAA;;AAAjB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA;EAH7B,MAAA;EAAU,MAAA,CAAA,EACT,UAAU,cACX,CAAA;;;EAmBE,MAAA;EAAa,MAAA,CAAA,SAAS,CAAA,CAAE;;EACxB,MAAA;EAAa,MAAA,CAAA,iBAAiB,CAAA,CAAE;;;ACJnC,IAAa,sBAAb,MAAa,oBAAmB;CAC9B,cAAc,MAAwB,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CAChC,aAAa,OAAM;CAEX,aAAa,OAAO,UAAU;CACvC,YAAqC;CAGnC,iBAAc;EACtB,IAAI,CAAC,KAAK,WAAW;GACnB,KAAK,YAAY,SAAS,cAAc,OAAO;GAC/C,KAAK,UAAU,OAAO;GACtB,KAAK,UAAU,MAAM,UAAU;GAC/B,KAAK,UAAU,iBAAiB,UAAU,KAAK,YAAY;GAC3D,KAAK,WAAW,cAAc,YAAY,KAAK,SAAS;EAC1D;EAEA,MAAM,SAAS,KAAK,YAAW;EAC/B,KAAK,UAAU,SAAS,OAAO,QAAQ,KAAK,GAAG,KAAK;EACpD,KAAK,UAAU,WAAW,OAAO,YAAY;EAC7C,KAAK,UAAU,MAAK;CACtB;CAEiB,gBAAgB,UAAsB;EACrD,MAAM,QAAQ,MAAM;EACpB,MAAM,QAAQ,MAAM,KAAK,MAAM,SAAS,CAAA,CAAE;EAE1C,IAAI,MAAM,WAAW,GAAG;EAGxB,MAAM,UADS,KAAK,YACJ,CAAA,CAAO;EAEvB,MAAM,aAAa,UAAU,MAAM,QAAQ,MAAM,EAAE,QAAQ,OAAO,IAAI;EAEtE,IAAI,WAAW,SAAS,GACtB,KAAK,WAAW,KAAK,EAAE,OAAO,WAAU,CAAE;EAG5C,MAAM,QAAQ;CAChB;CAvCW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAmB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAnB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAmB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,aAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,SAAA,EAAA,YAAA,aAAA;EAAA,MAAA;GAAA,WAAA,EAAA,SAAA,mBAAA;GAAA,YAAA,EAAA,gBAAA,cAAA;EAAA;EAAA,UAAA;CAAA,CAAA;;AAAnB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAN/B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,MAAM,EACJ,kBAAkB,cACnB;EACF,CAAA;;;;;;;;;;;;;;;;GAQE,MAAA;GAAa,MAAA,CAAA,OAAO;;;;ACtBvB,IAAa,mBAAb,MAAa,iBAAgB;CAC3B,WAAW,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAEX,aAAa,OAAO,UAAU;CACvC,iBAAqC;CAGnC,cAAW;EACnB,MAAM,OAAO,KAAK,SAAQ;EAC1B,IAAI,CAAC,MAAM;EAEX,KAAK,iBAAiB,SAAS,cAAc,KAAK;EAClD,KAAK,eAAe,cAAc;EAClC,OAAO,OAAO,KAAK,eAAe,OAAO;GACvC,UAAU;GACV,YAAY;GACZ,OAAO;GACP,SAAS;GACT,cAAc;GACd,UAAU;GACV,QAAQ;GACR,eAAe;GACf,YAAY;EACb,CAAA;EAED,SAAS,KAAK,YAAY,KAAK,cAAc;EAC7C,KAAK,gBAAe;CACtB;CAGU,cAAW;EACnB,KAAK,cAAa;CACpB;CAEA,cAAW;EACT,KAAK,cAAa;CACpB;CAEQ,kBAAe;EACrB,IAAI,CAAC,KAAK,gBAAgB;EAC1B,MAAM,OAAO,KAAK,WAAW,cAAc,sBAAqB;EAChE,MAAM,cAAc,KAAK,eAAe,sBAAqB;EAC7D,KAAK,eAAe,MAAM,OAAO,GAAG,KAAK,OAAO,KAAK,QAAQ,IAAI,YAAY,QAAQ,EAAC;EACtF,KAAK,eAAe,MAAM,MAAM,GAAG,KAAK,MAAM,YAAY,SAAS,EAAC;CACtE;CAEQ,gBAAa;EACnB,KAAK,gBAAgB,OAAM;EAC3B,KAAK,iBAAiB;CACxB;CAjDW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAgB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAhB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAgB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,UAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,MAAA,EAAA,WAAA;GAAA,cAAA;GAAA,cAAA;EAAA,EAAA;EAAA,UAAA;CAAA,CAAA;;AAAhB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAgB,YAAA,CAAA;EAH5B,MAAA;EAAU,MAAA,CAAA,EACT,UAAU,aACX,CAAA;;;;;;;;;;;;GAOE,MAAA;GAAa,MAAA,CAAA,YAAY;;;GAuBzB,MAAA;GAAa,MAAA,CAAA,YAAY;;;;ACtB5B,IAAa,oBAAb,MAAa,kBAAiB;CACX,KAAK,OAAO,UAAuB;CACjC,YAAY,OAAkB,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CAGzD,SAAM;EACJ,MAAM,OAAO,KAAK,GAAG,cAAc,sBAAqB;EACxD,MAAM,SAAoC;GACxC,OAAO,OAAO,cAAc,KAAK;GACjC,OAAO,KAAK;GACZ,OAAO,OAAO,aAAa,KAAK;GAChC,MAAM,KAAK;EACZ;EACD,MAAM,OAAQ,OAAO,QAAQ,MAAM,CAA2B,CAAC,QAC5D,MAAM,CAAC,KAAK,WAAY,QAAQ,KAAK,QAAQ;GAAE;GAAK;EAAK,IAAK,MAC/D;GAAE,KAAK;GAAsB,OAAO,OAAO;EAAK,CAAE;EAEpD,KAAK,UAAU,IAAI,KAAK,GAAG;CAC7B;CAlBW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAiB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAjB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAiB,cAAA;EAAA,UAAA;EAAA,MAAA;GAAA,WAAA,EAAA,cAAA,WAAA;GAAA,YAAA;IAAA,sBAAA;IAAA,sBAAA;IAAA,qBAAA;IAAA,sBAAA;GAAA;EAAA;EAAA,UAAA;CAAA,CAAA;;AAAjB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA;EAT7B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,MAAM;IACJ,wBAAwB;IACxB,wBAAwB;IACxB,uBAAuB;IACvB,wBAAwB;GACzB;EACF,CAAA;;;EAKE,MAAA;EAAa,MAAA,CAAA,YAAY;;;ACZ5B,IAAa,qBAAb,MAAa,mBAAkB;CACpB,aAAa,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAC9B,iBAAiB,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CAE1B,KAAK,OAAO,UAAU;CAEvC,cAAA;EACE,wBAAuB;GACrB,MAAM,QAAQ,KAAK,WAAU,CAAE,CAAC,KAAI;GACpC,MAAM,OAAO,KAAK,eAAc;GAChC,IAAI,CAAC,OAAO;IACV,KAAK,GAAG,cAAc,YAAY,KAAK,WAAW,IAAI;IACtD;GACF;GACA,MAAM,UAAU,MAAM,QAAQ,uBAAuB,MAAM;GAC3D,MAAM,QAAQ,IAAI,OAAO,IAAI,QAAO,IAAK,IAAI;GAC7C,KAAK,GAAG,cAAc,YAAY,KAAK,WAAW,IAAI,CAAC,CAAC,QACtD,OACA,8CAA4C;EAEhD,CAAC;CACH;CAEiB,cAAc,QAC7B,OAAO,OAAO,EAAE,CAAC,CACd,QAAQ,MAAM,OAAO,CAAC,CACtB,QAAQ,MAAM,MAAM,CAAC,CACrB,QAAQ,MAAM,MAAM,CAAC,CACrB,QAAQ,MAAM,QAAQ;CA5BhB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAkB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAlB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAkB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,gBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;CAAA,CAAA;;AAAlB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkB,YAAA,CAAA;EAH9B,MAAA;EAAU,MAAA,CAAA,EACT,UAAU,eACX,CAAA;;;;;;;;;;;;;;;;;;;;;;ACND,SAAgB,cAAc,KAAW;CACvC,IAAI,OAAO;CACX,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAC9B,OAAQ,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,WAAW,CAAC,IAAK;CAQrD,OAAO,OAJG,KAAK,IAAI,IAAI,IAAI,IAIZ,IAHL,KAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,GAGjB,KAFX,KAAM,KAAK,IAAI,QAAQ,EAAE,IAAI,GAEX;AAC9B;ACHA,IAAa,sBAAb,MAAa,oBAAmB;CAE9B,aAAa,MAAM,SAAkB,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAGrC,gBAAgB,MAAc,uBAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAEpD,MAAM,OAAO,UAAU;CACvB,YAAY,OAAO,SAAS;CAE5B,cAAA;EACE,aAAY;GACV,MAAM,SAAS,KAAK,WAAU;GAC9B,MAAM,UAAU,KAAK,cAAa;GAElC,IAAI,QAAQ;IACV,MAAM,QAAQ,cAAc,MAAM;IAClC,KAAK,UAAU,SAAS,KAAK,IAAI,eAAe,SAAS,KAAK;GAChE;EACF,CAAC;CACH;CApBW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAmB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAnB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAmB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;CAAA,CAAA;;AAAnB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAH/B,MAAA;EAAU,MAAA,CAAA,EACT,UAAU,eACX,CAAA"}
|
package/fesm2022/{magmonium-one-file.service-Bo06pU3_.mjs → magmonium-one-file.service-D39FjShR.mjs}
RENAMED
|
@@ -23,6 +23,7 @@ var FileService = class FileService {
|
|
|
23
23
|
input.type = "file";
|
|
24
24
|
input.accept = config?.accept?.join(",") ?? "*";
|
|
25
25
|
input.multiple = config?.multiple ?? false;
|
|
26
|
+
input.webkitdirectory = config?.directory ?? false;
|
|
26
27
|
input.style.display = "none";
|
|
27
28
|
input.addEventListener("change", () => {
|
|
28
29
|
const files = Array.from(input.files ?? []);
|
|
@@ -62,4 +63,4 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
62
63
|
});
|
|
63
64
|
export { FileService as t };
|
|
64
65
|
|
|
65
|
-
//# sourceMappingURL=magmonium-one-file.service-
|
|
66
|
+
//# sourceMappingURL=magmonium-one-file.service-D39FjShR.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"magmonium-one-file.service-D39FjShR.mjs","names":[],"sources":["../../../../libs/one/src/lib/shared/services/file.service.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport {\n FileUploadConfig,\n FileUploadEvent,\n} from '../directives/file-upload/file-upload';\n\nexport type { FileUploadConfig, FileUploadEvent };\n\ntype PickerWindow = Window & {\n showDirectoryPicker?: (options?: {\n mode?: 'read' | 'readwrite';\n }) => Promise<{ name: string }>;\n};\n\nexport type FolderPickResult = {\n name: string;\n handle: unknown;\n};\n\n@Injectable({ providedIn: 'root' })\nexport class FileService {\n folderPickSupported(): boolean {\n return (\n typeof window !== 'undefined' &&\n typeof (window as PickerWindow).showDirectoryPicker === 'function'\n );\n }\n\n async pickFolder(): Promise<FolderPickResult | undefined> {\n const picker = (window as PickerWindow).showDirectoryPicker;\n if (!picker) return undefined;\n try {\n const handle = await picker({ mode: 'read' });\n return { name: handle.name, handle };\n } catch {\n return undefined;\n }\n }\n\n async getFiles(config?: FileUploadConfig): Promise<FileUploadEvent> {\n return new Promise((resolve) => {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = config?.accept?.join(',') ?? '*';\n input.multiple = config?.multiple ?? false;\n input.webkitdirectory = config?.directory ?? false;\n input.style.display = 'none';\n\n input.addEventListener('change', () => {\n const files = Array.from(input.files ?? []);\n const maxSize = config?.maxSize;\n const validFiles = maxSize\n ? files.filter((f) => f.size <= maxSize)\n : files;\n resolve({ files: validFiles });\n input.remove();\n });\n\n document.body.appendChild(input);\n input.click();\n });\n }\n}\n"],"mappings":";;AAoBA,IAAa,cAAb,MAAa,YAAW;CACtB,sBAAmB;EACjB,OACE,OAAO,WAAW,eAClB,OAAQ,OAAwB,wBAAwB;CAE5D;CAEA,MAAM,aAAU;EACd,MAAM,SAAU,OAAwB;EACxC,IAAI,CAAC,QAAQ,OAAO;EACpB,IAAI;GACF,MAAM,SAAS,MAAM,OAAO,EAAE,MAAM,OAAM,CAAE;GAC5C,OAAO;IAAE,MAAM,OAAO;IAAM;GAAM;EACpC,QAAQ;GACN;EACF;CACF;CAEA,MAAM,SAAS,QAAyB;EACtC,OAAO,IAAI,SAAS,YAAW;GAC7B,MAAM,QAAQ,SAAS,cAAc,OAAO;GAC5C,MAAM,OAAO;GACb,MAAM,SAAS,QAAQ,QAAQ,KAAK,GAAG,KAAK;GAC5C,MAAM,WAAW,QAAQ,YAAY;GACrC,MAAM,kBAAkB,QAAQ,aAAa;GAC7C,MAAM,MAAM,UAAU;GAEtB,MAAM,iBAAiB,gBAAe;IACpC,MAAM,QAAQ,MAAM,KAAK,MAAM,SAAS,CAAA,CAAE;IAC1C,MAAM,UAAU,QAAQ;IAIxB,QAAQ,EAAE,OAHS,UACf,MAAM,QAAQ,MAAM,EAAE,QAAQ,OAAO,IACrC,MACuB,CAAE;IAC7B,MAAM,OAAM;GACd,CAAC;GAED,SAAS,KAAK,YAAY,KAAK;GAC/B,MAAM,MAAK;EACb,CAAC;CACH;CAzCW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAW,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAX,OAAA,QAAA,GAAA,sBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAW,YADE;CAAM,CAAA;;AACnB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAW,YAAA,CAAA;EADvB,MAAA;EAAW,MAAA,CAAA,EAAE,YAAY,OAAM,CAAE"}
|