@africode/core 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/AFRICODE_FRAMEWORK_GUIDE.md +707 -0
  2. package/LICENSE +623 -0
  3. package/README.md +442 -0
  4. package/bin/africode.js +73 -0
  5. package/bin/africode.js.1758507140 +343 -0
  6. package/bin/cli.ts +83 -0
  7. package/bin/create-africode.js +158 -0
  8. package/bin/scaffold.ts +219 -0
  9. package/components/accordion.js +183 -0
  10. package/components/alert.js +131 -0
  11. package/components/auth.js +172 -0
  12. package/components/avatar.js +117 -0
  13. package/components/badge.js +104 -0
  14. package/components/base.d.ts +139 -0
  15. package/components/base.js +184 -0
  16. package/components/button.js +164 -0
  17. package/components/card.js +137 -0
  18. package/components/cultural-card.js +243 -0
  19. package/components/divider.js +83 -0
  20. package/components/dropdown.js +171 -0
  21. package/components/error-boundary.js +155 -0
  22. package/components/form.js +131 -0
  23. package/components/grid.js +273 -0
  24. package/components/hero.js +138 -0
  25. package/components/icon.js +36 -0
  26. package/components/index.js +57 -0
  27. package/components/input.js +256 -0
  28. package/components/kanga-card.js +185 -0
  29. package/components/language-switcher.js +108 -0
  30. package/components/loader.js +80 -0
  31. package/components/modal.js +262 -0
  32. package/components/motion.js +84 -0
  33. package/components/navbar.js +236 -0
  34. package/components/pattern-showcase.js +225 -0
  35. package/components/progress.js +134 -0
  36. package/components/react.js +111 -0
  37. package/components/section.js +54 -0
  38. package/components/select.js +322 -0
  39. package/components/sidebar.js +180 -0
  40. package/components/skeleton.js +85 -0
  41. package/components/table.js +181 -0
  42. package/components/tabs.js +202 -0
  43. package/components/theme-toggle.js +82 -0
  44. package/components/toast.js +139 -0
  45. package/components/tooltip.js +167 -0
  46. package/core/a2ui-schema-manager.js +344 -0
  47. package/core/a2ui.js +431 -0
  48. package/core/bun-runtime.js +799 -0
  49. package/core/cli/commands/add.js +23 -0
  50. package/core/cli/commands/audit.js +58 -0
  51. package/core/cli/commands/build.js +137 -0
  52. package/core/cli/commands/create-plugin.js +241 -0
  53. package/core/cli/commands/dev.js +228 -0
  54. package/core/cli/commands/lint.js +23 -0
  55. package/core/cli/commands/test.js +34 -0
  56. package/core/cli/migrator.js +71 -0
  57. package/core/cli/ui.js +46 -0
  58. package/core/compliance.js +628 -0
  59. package/core/config.js +263 -0
  60. package/core/db-advanced.js +481 -0
  61. package/core/db.js +284 -0
  62. package/core/enhanced-hmr.js +404 -0
  63. package/core/errors.js +222 -0
  64. package/core/file-router.js +290 -0
  65. package/core/heartbeat.js +64 -0
  66. package/core/hmr-client.js +204 -0
  67. package/core/hmr.js +196 -0
  68. package/core/html.d.ts +116 -0
  69. package/core/html.js +160 -0
  70. package/core/hydration.js +52 -0
  71. package/core/lipa-namba-journey.js +572 -0
  72. package/core/motion.js +106 -0
  73. package/core/nida-cig-middleware.js +455 -0
  74. package/core/patterns.d.ts +124 -0
  75. package/core/patterns.js +833 -0
  76. package/core/plugins/index.js +312 -0
  77. package/core/router.js +387 -0
  78. package/core/sdk-client.js +62 -0
  79. package/core/sdk.d.ts +133 -0
  80. package/core/sdk.js +123 -0
  81. package/core/seo.js +76 -0
  82. package/core/server/auth-endpoints.js +339 -0
  83. package/core/server/auth.js +180 -0
  84. package/core/server/csrf.js +206 -0
  85. package/core/server/db.js +39 -0
  86. package/core/server/middleware.js +324 -0
  87. package/core/server/rate-limit.js +238 -0
  88. package/core/server/render.js +69 -0
  89. package/core/server/router.js +120 -0
  90. package/core/shim.js +28 -0
  91. package/core/state.d.ts +86 -0
  92. package/core/state.js +242 -0
  93. package/core/store.d.ts +122 -0
  94. package/core/store.js +61 -0
  95. package/core/validation.d.ts +233 -0
  96. package/core/validation.js +590 -0
  97. package/core/websocket.js +639 -0
  98. package/dist/africode.js +2905 -0
  99. package/dist/africode.js.map +61 -0
  100. package/dist/build-info.json +23 -0
  101. package/dist/components.js +2888 -0
  102. package/dist/components.js.map +58 -0
  103. package/dist/styles/africanity.css +322 -0
  104. package/dist/styles/typography.css +141 -0
  105. package/docs/IDE-Guide.md +50 -0
  106. package/package.json +110 -0
  107. package/src/index.ts +196 -0
  108. package/styles/africanity.css +322 -0
  109. package/styles/typography.css +141 -0
  110. package/templates/starter/.env.example +15 -0
  111. package/templates/starter/africode.config.js +40 -0
  112. package/templates/starter/package.json +14 -0
  113. package/templates/starter/src/pages/index.html +46 -0
  114. package/templates/starter/src/pages/index.js +32 -0
  115. package/templates/starter/src/styles/main.css +4 -0
  116. package/templates/starter-3d/.env.example +7 -0
  117. package/templates/starter-3d/africode.config.js +29 -0
  118. package/templates/starter-3d/components/af-model-viewer.js +125 -0
  119. package/templates/starter-3d/package.json +15 -0
  120. package/templates/starter-3d/src/pages/index.html +46 -0
  121. package/templates/starter-3d/src/pages/index.js +50 -0
  122. package/templates/starter-3d/src/styles/main.css +4 -0
  123. package/templates/starter-react/.env.example +15 -0
  124. package/templates/starter-react/africode.config.js +40 -0
  125. package/templates/starter-react/package.json +16 -0
  126. package/templates/starter-react/src/pages/index.html +46 -0
  127. package/templates/starter-react/src/pages/index.js +68 -0
  128. package/templates/starter-react/src/styles/main.css +4 -0
  129. package/templates/starter-tailwind/.env.example +15 -0
  130. package/templates/starter-tailwind/africode.config.js +40 -0
  131. package/templates/starter-tailwind/package.json +20 -0
  132. package/templates/starter-tailwind/src/pages/index.html +46 -0
  133. package/templates/starter-tailwind/src/pages/index.js +37 -0
  134. package/templates/starter-tailwind/src/styles/main.css +4 -0
  135. package/templates/starter-tailwind/src/styles/tailwind.css +1 -0
  136. package/templates/starter-tailwind/src/tailwind-loader.js +30 -0
@@ -0,0 +1,2888 @@
1
+ var So=Object.defineProperty;var Qo=(t)=>t;function Go(t,n){this[t]=Qo.bind(null,n)}var Q=(t,n)=>{for(var o in n)So(t,o,{get:n[o],enumerable:!0,configurable:!0,set:Go.bind(n,o)})};var x=(t,n)=>()=>(t&&(n=t(t=0)),n);class wn{constructor(t){this.content=t}toString(){return this.content}valueOf(){return this.content}}function yn(t){if(typeof t!=="string")return t;let n={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};return t.replace(/[&<>"']/g,(o)=>n[o])}function Zn(t){if(t instanceof wn)return t.toString();if(Array.isArray(t))return t.map((n)=>Zn(n)).join("");if(t===null||t===void 0||t===!1)return"";if(typeof t==="function")return yn(String(t));return yn(String(t))}function R(t,...n){let o="";for(let b=0;b<n.length;b++)o+=t[b],o+=Zn(n[b]);return o+=t[t.length-1],new wn(o)}var cn=()=>{};function _(t,n){if(!customElements.get(t))customElements.define(t,n)}var c;var S=x(()=>{cn();c=class c extends HTMLElement{constructor(){super();this.attachShadow({mode:"open"});let t=this.render;if(t&&typeof t==="function")this.render=()=>{try{t.call(this),this.removeAttribute("has-error")}catch(n){console.error(`[AfriCode] Rendering error in <${this.localName}>:`,n),this.setAttribute("has-error","true"),this.shadowRoot.innerHTML=`
2
+ <style>
3
+ .af-local-error {
4
+ padding: 1rem;
5
+ border: 1px dashed rgba(220, 20, 60, 0.4);
6
+ border-radius: 4px;
7
+ color: #DC143C;
8
+ font-family: 'Inter', system-ui, sans-serif;
9
+ font-size: 0.85rem;
10
+ display: flex;
11
+ align-items: center;
12
+ gap: 8px;
13
+ background: rgba(220, 20, 60, 0.05);
14
+ }
15
+ </style>
16
+ <div class="af-local-error">
17
+ <span aria-hidden="true">⚠️</span>
18
+ <span>Failed to render</span>
19
+ </div>
20
+ `,this.emit("af-component-error",{component:this.localName,message:n.message,stack:n.stack})}}}connectedCallback(){}static styleCache=new Map;static globalSheets=[];static injectGlobalSheet(t){if(!(t instanceof CSSStyleSheet)){console.error("[AfriCode] injectGlobalSheet requires a CSSStyleSheet instance.");return}if(!c.globalSheets.includes(t))c.globalSheets.push(t)}async loadStyles(){if(c.styleCache.has("/styles/africanity.css")){this.shadowRoot.adoptedStyleSheets=[c.styleCache.get("/styles/africanity.css"),...c.globalSheets];return}try{let o=await(await fetch("/styles/africanity.css")).text(),b=new CSSStyleSheet;b.replaceSync(o),c.styleCache.set("/styles/africanity.css",b),this.shadowRoot.adoptedStyleSheets=[b,...c.globalSheets]}catch(n){console.warn("AfriCode: Failed to load core styles",n)}}spacing(t){return`var(--space-${t})`}createElement(t,{classes:n=[],attributes:o={},text:b=""}={}){let l=document.createElement(t);if(n.length)l.classList.add(...n);if(Object.entries(o).forEach(([a,f])=>l.setAttribute(a,f)),b)l.textContent=b;return l}emit(t,n){this.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0,composed:!0}))}}});var en={};Q(en,{default:()=>Jo,AfriButton:()=>Lt});var Lt,Jo;var sn=x(()=>{S();Lt=class Lt extends c{static get observedAttributes(){return["variant","size","theme","disabled","loading","icon","aria-label"]}constructor(){super();this.render()}connectedCallback(){this.shadowRoot.querySelector("button")?.addEventListener("click",(n)=>{if(this.hasAttribute("disabled")||this.hasAttribute("loading")){n.preventDefault();return}this.emit("af-click",{originalEvent:n})})}attributeChangedCallback(){this.render()}render(){let t=this.getAttribute("variant")||"primary",n=this.getAttribute("size")||"md",o=this.getAttribute("theme")||"tanzania",b=this.hasAttribute("disabled"),l=this.hasAttribute("loading"),a=this.getAttribute("icon"),f=this.getAttribute("aria-label"),h={tanzania:{primary:"#1EB53A",accent:"#FCD116",text:"#FFFFFF"},maasai:{primary:"#FF0000",accent:"#8B0000",text:"#FFFFFF"},ndebele:{primary:"#4169E1",accent:"#FFD700",text:"#FFFFFF"},ocean:{primary:"#00A3DD",accent:"#0077BE",text:"#FFFFFF"}},r=h[o]||h.tanzania;this.shadowRoot.innerHTML=`
21
+ <style>
22
+ :host {
23
+ display: inline-block;
24
+ }
25
+
26
+ button {
27
+ font-family: 'Inter', system-ui, sans-serif;
28
+ font-weight: 600;
29
+ border: none;
30
+ border-radius: 5px;
31
+ cursor: pointer;
32
+ display: inline-flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ gap: 8px;
36
+ transition: all 200ms ease-out;
37
+ position: relative;
38
+ overflow: hidden;
39
+ }
40
+
41
+ /* Sizes */
42
+ .size-sm { padding: 5px 13px; font-size: 13px; }
43
+ .size-md { padding: 8px 21px; font-size: 15px; }
44
+ .size-lg { padding: 13px 34px; font-size: 17px; }
45
+
46
+ /* Variants */
47
+ .variant-primary {
48
+ background: ${r.primary};
49
+ color: ${r.text};
50
+ }
51
+ .variant-primary:hover:not(:disabled) {
52
+ filter: brightness(1.1);
53
+ transform: translateY(-2px);
54
+ box-shadow: 0 4px 12px rgba(0,0,0,0.2);
55
+ }
56
+
57
+ .variant-secondary {
58
+ background: transparent;
59
+ color: ${r.primary};
60
+ border: 2px solid ${r.primary};
61
+ }
62
+ .variant-secondary:hover:not(:disabled) {
63
+ background: ${r.primary};
64
+ color: ${r.text};
65
+ }
66
+
67
+ .variant-ghost {
68
+ background: transparent;
69
+ color: ${r.primary};
70
+ }
71
+ .variant-ghost:hover:not(:disabled) {
72
+ background: rgba(0,0,0,0.05);
73
+ }
74
+
75
+ .variant-gradient {
76
+ background: linear-gradient(135deg, ${r.primary} 0%, ${r.accent} 100%);
77
+ color: ${r.text};
78
+ }
79
+ .variant-gradient:hover:not(:disabled) {
80
+ transform: translateY(-2px);
81
+ box-shadow: 0 6px 20px rgba(0,0,0,0.25);
82
+ }
83
+
84
+ /* States */
85
+ button:disabled {
86
+ opacity: 0.5;
87
+ cursor: not-allowed;
88
+ }
89
+
90
+ button:active:not(:disabled) {
91
+ transform: translateY(0);
92
+ }
93
+
94
+ /* Loading spinner */
95
+ .spinner {
96
+ width: 16px;
97
+ height: 16px;
98
+ border: 2px solid transparent;
99
+ border-top-color: currentColor;
100
+ border-radius: 50%;
101
+ animation: spin 0.8s linear infinite;
102
+ }
103
+
104
+ @keyframes spin {
105
+ to { transform: rotate(360deg); }
106
+ }
107
+
108
+ /* Icon */
109
+ .icon {
110
+ font-size: 1.1em;
111
+ }
112
+ </style>
113
+
114
+ <button
115
+ class="variant-${t} size-${n}"
116
+ ${b?"disabled":""}
117
+ ${f?`aria-label="${f}"`:""}
118
+ ${l?'aria-busy="true"':""}
119
+ >
120
+ ${l?'<span class="spinner"></span>':""}
121
+ ${a&&!l?`<span class="icon">${a}</span>`:""}
122
+ <slot></slot>
123
+ </button>
124
+ `}};_("af-button",Lt);Jo=Lt});var zn={};Q(zn,{default:()=>Lo,AfriCard:()=>Ft});var Ft,Lo;var t0=x(()=>{S();Ft=class Ft extends c{static get observedAttributes(){return["theme","variant","clickable","image"]}constructor(){super();this.render()}connectedCallback(){if(this.hasAttribute("clickable"))this.shadowRoot.querySelector(".card").addEventListener("click",()=>{this.emit("af-click")})}attributeChangedCallback(){this.render()}render(){let t=this.getAttribute("theme")||"default",n=this.getAttribute("variant")||"elevated",o=this.hasAttribute("clickable"),b=this.getAttribute("image"),l={default:{accent:"#333",border:"#eee"},tanzania:{accent:"#1EB53A",border:"#1EB53A"},maasai:{accent:"#FF0000",border:"#8B0000"},ndebele:{accent:"#4169E1",border:"#4169E1"}},f={elevated:"box-shadow: 0 2px 12px rgba(0,0,0,0.1);",outlined:`border: 2px solid ${(l[t]||l.default).border};`,flat:"background: #f8f9fa;"};this.shadowRoot.innerHTML=html`
125
+ <style>
126
+ :host {
127
+ display: block;
128
+ font-family: var(--font-body, 'Inter', sans-serif);
129
+ }
130
+
131
+ .card {
132
+ background: var(--glass-bg, rgba(15, 23, 42, 0.7));
133
+ backdrop-filter: blur(var(--glass-blur, 12px));
134
+ border: 1px solid var(--glass-border, rgba(255, 255, 255, 0.1));
135
+ border-radius: var(--radius-lg, 16px);
136
+ overflow: hidden;
137
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
138
+ position: relative;
139
+ ${o?"cursor: pointer;":""}
140
+ }
141
+
142
+ .card::before {
143
+ content: '';
144
+ position: absolute;
145
+ inset: 0;
146
+ background: radial-gradient(circle at top left, rgba(255,255,255,0.05), transparent);
147
+ pointer-events: none;
148
+ }
149
+
150
+ ${o?`
151
+ .card:hover {
152
+ transform: translateY(-8px);
153
+ border-color: rgba(252, 209, 22, 0.4);
154
+ box-shadow: 0 20px 40px rgba(0,0,0,0.4);
155
+ }
156
+ `:""}
157
+
158
+ .card-image {
159
+ width: 100%;
160
+ height: 200px;
161
+ object-fit: cover;
162
+ border-bottom: 1px solid var(--glass-border);
163
+ }
164
+
165
+ .card-body {
166
+ padding: 32px;
167
+ }
168
+
169
+ ::slotted(h1), ::slotted(h2), ::slotted(h3), ::slotted(h4) {
170
+ margin: 0 0 12px 0;
171
+ font-family: 'Outfit', sans-serif;
172
+ font-weight: 700;
173
+ color: var(--text-primary, #fff);
174
+ letter-spacing: -0.02em;
175
+ }
176
+
177
+ ::slotted(p) {
178
+ margin: 0;
179
+ color: var(--text-muted, #94a3b8);
180
+ line-height: 1.6;
181
+ font-size: 0.95rem;
182
+ }
183
+
184
+ .card-footer {
185
+ padding: 20px 32px;
186
+ background: rgba(0,0,0,0.2);
187
+ border-top: 1px solid var(--glass-border);
188
+ }
189
+ </style>
190
+
191
+ <article class="card">
192
+ ${b?`<img class="card-image" src="${b}" alt="" />`:""}
193
+ <div class="card-body">
194
+ <slot></slot>
195
+ </div>
196
+ ${this.querySelector('[slot="footer"]')?`
197
+ <div class="card-footer">
198
+ <slot name="footer"></slot>
199
+ </div>
200
+ `:""}
201
+ </article>
202
+ `}};_("af-card",Ft);Lo=Ft});function An(t){if(Bt.has(t))return Bt.get(t);let o=new Proxy(t,{get(b,l,a){let f=Reflect.get(b,l,a);if(f!==null&&typeof f==="object")return An(f);return f},set(b,l,a,f){let h=Reflect.get(b,l,f);if(h!==a){let r=Reflect.set(b,l,a,f);if(r)n0(f,a,h,l);return r}return!0},deleteProperty(b,l){let a=Reflect.get(b,l),f=Reflect.deleteProperty(b,l);if(f){let h=Bt.get(b);n0(h,void 0,a,l)}return f}});return Bt.set(t,o),o}function Rt(t,n){if(!mt.has(t))mt.set(t,new Set);let o=mt.get(t);return o.add(n),()=>{o.delete(n)}}function n0(t,n,o,b){let l=mt.get(t);if(!l)return;l.forEach((a)=>{try{a(n,o,b)}catch(f){console.error("[AfriCode State] Subscriber error:",f)}})}var mt,Bt;var Et=x(()=>{mt=new WeakMap,Bt=new WeakMap});var Fo,Ht;var Dt=x(()=>{Et();Fo={theme:"light",language:"en",ui:{sidebarCollapsed:!1,theme:"dark",activePage:"home"},user:{name:"Guest",permissions:[]},config:{animationsEnabled:!0,soundEnabled:!1}},Ht=An(Fo)});var o0={};Q(o0,{default:()=>Bo,AfriNavbar:()=>Ot});var Ot,Bo;var b0=x(()=>{S();Dt();Et();Ot=class Ot extends c{static get observedAttributes(){return["theme","logo","sticky"]}constructor(){super();this._isOpen=!1,this._unsubscribe=null,this.render()}connectedCallback(){super.connectedCallback(),this.shadowRoot.querySelector(".menu-toggle")?.addEventListener("click",()=>{this._isOpen=!this._isOpen;let t=this.shadowRoot.querySelector(".nav-links"),n=this.shadowRoot.querySelector(".menu-toggle");if(t)t.classList.toggle("open",this._isOpen);if(n)n.classList.toggle("open",this._isOpen),n.setAttribute("aria-expanded",String(this._isOpen))})}disconnectedCallback(){if(this._unsubscribe)this._unsubscribe()}attributeChangedCallback(){this.render()}render(){let t=this.getAttribute("theme")||"dark",n=this.getAttribute("logo")||"AfriCode",o=this.hasAttribute("sticky");this.shadowRoot.innerHTML=`
203
+ <style>
204
+ :host {
205
+ display: block;
206
+ --nav-height: 80px;
207
+ }
208
+
209
+ nav {
210
+ height: var(--nav-height);
211
+ display: flex;
212
+ align-items: center;
213
+ justify-content: space-between;
214
+ padding-inline: 5%;
215
+ background: var(--glass-bg);
216
+ backdrop-filter: blur(12px);
217
+ -webkit-backdrop-filter: blur(12px);
218
+ border-bottom: 1px solid var(--glass-border);
219
+ position: fixed;
220
+ top: 0;
221
+ inset-inline: 0;
222
+ z-index: 1000;
223
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
224
+ }
225
+
226
+ .logo-container {
227
+ display: flex;
228
+ align-items: center;
229
+ gap: 12px;
230
+ text-decoration: none;
231
+ z-index: 1002;
232
+ }
233
+
234
+ .logo-mark {
235
+ width: 32px;
236
+ height: 32px;
237
+ background: linear-gradient(135deg, var(--afri-green, #1eb53a), var(--afri-gold, #fcd116));
238
+ border-radius: 8px;
239
+ display: flex;
240
+ align-items: center;
241
+ justify-content: center;
242
+ font-weight: 900;
243
+ color: black;
244
+ font-size: 1rem;
245
+ }
246
+
247
+ .logo-text {
248
+ font-family: 'Outfit', 'Space Grotesk', sans-serif;
249
+ font-size: 1.5rem;
250
+ font-weight: 800;
251
+ color: var(--text-primary);
252
+ letter-spacing: -0.02em;
253
+ }
254
+
255
+ .nav-links {
256
+ display: flex;
257
+ gap: 32px;
258
+ align-items: center;
259
+ list-style: none;
260
+ margin: 0;
261
+ padding: 0;
262
+ }
263
+
264
+ .nav-links ::slotted(a) {
265
+ color: var(--text-muted);
266
+ text-decoration: none;
267
+ font-size: 0.95rem;
268
+ font-weight: 500;
269
+ transition: all 0.2s ease;
270
+ position: relative;
271
+ padding: 8px 0;
272
+ }
273
+
274
+ .nav-links ::slotted(a:hover),
275
+ .nav-links ::slotted(a.active) {
276
+ color: var(--text-primary);
277
+ }
278
+
279
+ .nav-links ::slotted(a)::after {
280
+ content: '';
281
+ position: absolute;
282
+ bottom: 0;
283
+ left: 50%;
284
+ width: 0;
285
+ height: 2px;
286
+ background: var(--afri-gold, #fcd116);
287
+ transition: all 0.3s ease;
288
+ transform: translateX(-50%);
289
+ }
290
+
291
+ .nav-links ::slotted(a:hover)::after,
292
+ .nav-links ::slotted(a.active)::after {
293
+ width: 100%;
294
+ }
295
+
296
+ /* Mobile Toggle */
297
+ .menu-toggle {
298
+ display: none;
299
+ flex-direction: column;
300
+ gap: 6px;
301
+ background: none;
302
+ border: none;
303
+ cursor: pointer;
304
+ z-index: 1002;
305
+ padding: 8px;
306
+ }
307
+
308
+ .menu-toggle span {
309
+ width: 24px;
310
+ height: 2px;
311
+ background: var(--text-primary);
312
+ border-radius: 2px;
313
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
314
+ }
315
+
316
+ /* Mobile State */
317
+ .menu-toggle.open span:nth-child(1) { transform: translateY(8px) rotate(45deg); }
318
+ .menu-toggle.open span:nth-child(2) { opacity: 0; transform: translateX(-10px); }
319
+ .menu-toggle.open span:nth-child(3) { transform: translateY(-8px) rotate(-45deg); }
320
+
321
+ @media (max-width: 768px) {
322
+ .menu-toggle {
323
+ display: flex;
324
+ }
325
+
326
+ .nav-links {
327
+ position: fixed;
328
+ top: 0;
329
+ left: 0;
330
+ width: 100%;
331
+ height: 100vh;
332
+ background: var(--bg-base, #020617);
333
+ flex-direction: column;
334
+ justify-content: center;
335
+ align-items: center;
336
+ gap: 24px;
337
+ opacity: 0;
338
+ visibility: hidden;
339
+ transform: translateY(-20px);
340
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
341
+ z-index: 1001;
342
+ }
343
+
344
+ .nav-links.open {
345
+ opacity: 1;
346
+ visibility: visible;
347
+ transform: translateY(0);
348
+ }
349
+
350
+ .nav-links ::slotted(a) {
351
+ font-size: 1.5rem;
352
+ font-weight: 700;
353
+ }
354
+ }
355
+ </style>
356
+
357
+ <nav>
358
+ <a href="/" class="logo-container">
359
+ <div class="logo-mark">A</div>
360
+ <span class="logo-text">${n}</span>
361
+ </a>
362
+
363
+ <button
364
+ class="menu-toggle"
365
+ aria-label="Toggle menu"
366
+ aria-controls="nav-links"
367
+ aria-expanded="${this._isOpen}"
368
+ >
369
+ <span></span>
370
+ <span></span>
371
+ <span></span>
372
+ </button>
373
+
374
+ <div id="nav-links" class="nav-links ${this._isOpen?"open":""}">
375
+ <slot></slot>
376
+ </div>
377
+ </nav>
378
+ `}};_("af-navbar",Ot);Bo=Ot});var k,qn,$,V=(t)=>{switch(typeof t){case"undefined":return $.undefined;case"string":return $.string;case"number":return Number.isNaN(t)?$.nan:$.number;case"boolean":return $.boolean;case"function":return $.function;case"bigint":return $.bigint;case"symbol":return $.symbol;case"object":if(Array.isArray(t))return $.array;if(t===null)return $.null;if(t.then&&typeof t.then==="function"&&t.catch&&typeof t.catch==="function")return $.promise;if(typeof Map<"u"&&t instanceof Map)return $.map;if(typeof Set<"u"&&t instanceof Set)return $.set;if(typeof Date<"u"&&t instanceof Date)return $.date;return $.object;default:return $.unknown}};var xt=x(()=>{(function(t){t.assertEqual=(l)=>{};function n(l){}t.assertIs=n;function o(l){throw Error()}t.assertNever=o,t.arrayToEnum=(l)=>{let a={};for(let f of l)a[f]=f;return a},t.getValidEnumValues=(l)=>{let a=t.objectKeys(l).filter((h)=>typeof l[l[h]]!=="number"),f={};for(let h of a)f[h]=l[h];return t.objectValues(f)},t.objectValues=(l)=>{return t.objectKeys(l).map(function(a){return l[a]})},t.objectKeys=typeof Object.keys==="function"?(l)=>Object.keys(l):(l)=>{let a=[];for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f))a.push(f);return a},t.find=(l,a)=>{for(let f of l)if(a(f))return f;return},t.isInteger=typeof Number.isInteger==="function"?(l)=>Number.isInteger(l):(l)=>typeof l==="number"&&Number.isFinite(l)&&Math.floor(l)===l;function b(l,a=" | "){return l.map((f)=>typeof f==="string"?`'${f}'`:f).join(a)}t.joinValues=b,t.jsonStringifyReplacer=(l,a)=>{if(typeof a==="bigint")return a.toString();return a}})(k||(k={}));(function(t){t.mergeShapes=(n,o)=>{return{...n,...o}}})(qn||(qn={}));$=k.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"])});var g,mo=(t)=>{return JSON.stringify(t,null,2).replace(/"([^"]+)":/g,"$1:")},m;var Wt=x(()=>{xt();g=k.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);m=class m extends Error{get errors(){return this.issues}constructor(t){super();this.issues=[],this.addIssue=(o)=>{this.issues=[...this.issues,o]},this.addIssues=(o=[])=>{this.issues=[...this.issues,...o]};let n=new.target.prototype;if(Object.setPrototypeOf)Object.setPrototypeOf(this,n);else this.__proto__=n;this.name="ZodError",this.issues=t}format(t){let n=t||function(l){return l.message},o={_errors:[]},b=(l)=>{for(let a of l.issues)if(a.code==="invalid_union")a.unionErrors.map(b);else if(a.code==="invalid_return_type")b(a.returnTypeError);else if(a.code==="invalid_arguments")b(a.argumentsError);else if(a.path.length===0)o._errors.push(n(a));else{let f=o,h=0;while(h<a.path.length){let r=a.path[h];if(h!==a.path.length-1)f[r]=f[r]||{_errors:[]};else f[r]=f[r]||{_errors:[]},f[r]._errors.push(n(a));f=f[r],h++}}};return b(this),o}static assert(t){if(!(t instanceof m))throw Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,k.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(t=(n)=>n.message){let n={},o=[];for(let b of this.issues)if(b.path.length>0){let l=b.path[0];n[l]=n[l]||[],n[l].push(t(b))}else o.push(t(b));return{formErrors:o,fieldErrors:n}}get formErrors(){return this.flatten()}};m.create=(t)=>{return new m(t)}});var Ro=(t,n)=>{let o;switch(t.code){case g.invalid_type:if(t.received===$.undefined)o="Required";else o=`Expected ${t.expected}, received ${t.received}`;break;case g.invalid_literal:o=`Invalid literal value, expected ${JSON.stringify(t.expected,k.jsonStringifyReplacer)}`;break;case g.unrecognized_keys:o=`Unrecognized key(s) in object: ${k.joinValues(t.keys,", ")}`;break;case g.invalid_union:o="Invalid input";break;case g.invalid_union_discriminator:o=`Invalid discriminator value. Expected ${k.joinValues(t.options)}`;break;case g.invalid_enum_value:o=`Invalid enum value. Expected ${k.joinValues(t.options)}, received '${t.received}'`;break;case g.invalid_arguments:o="Invalid function arguments";break;case g.invalid_return_type:o="Invalid function return type";break;case g.invalid_date:o="Invalid date";break;case g.invalid_string:if(typeof t.validation==="object")if("includes"in t.validation){if(o=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position==="number")o=`${o} at one or more positions greater than or equal to ${t.validation.position}`}else if("startsWith"in t.validation)o=`Invalid input: must start with "${t.validation.startsWith}"`;else if("endsWith"in t.validation)o=`Invalid input: must end with "${t.validation.endsWith}"`;else k.assertNever(t.validation);else if(t.validation!=="regex")o=`Invalid ${t.validation}`;else o="Invalid";break;case g.too_small:if(t.type==="array")o=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`;else if(t.type==="string")o=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`;else if(t.type==="number")o=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`;else if(t.type==="bigint")o=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`;else if(t.type==="date")o=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`;else o="Invalid input";break;case g.too_big:if(t.type==="array")o=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`;else if(t.type==="string")o=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`;else if(t.type==="number")o=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`;else if(t.type==="bigint")o=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`;else if(t.type==="date")o=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`;else o="Invalid input";break;case g.custom:o="Invalid input";break;case g.invalid_intersection_types:o="Intersection results could not be merged";break;case g.not_multiple_of:o=`Number must be a multiple of ${t.multipleOf}`;break;case g.not_finite:o="Number must be finite";break;default:o=n.defaultError,k.assertNever(t)}return{message:o}},p;var En=x(()=>{Wt();xt();p=Ro});function Do(t){l0=t}function ot(){return l0}var l0;var dt=x(()=>{En();l0=p});function v(t,n){let o=ot(),b=Yt({issueData:n,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,o,o===p?void 0:p].filter((l)=>!!l)});t.common.issues.push(b)}class F{constructor(){this.value="valid"}dirty(){if(this.value==="valid")this.value="dirty"}abort(){if(this.value!=="aborted")this.value="aborted"}static mergeArray(t,n){let o=[];for(let b of n){if(b.status==="aborted")return E;if(b.status==="dirty")t.dirty();o.push(b.value)}return{status:t.value,value:o}}static async mergeObjectAsync(t,n){let o=[];for(let b of n){let l=await b.key,a=await b.value;o.push({key:l,value:a})}return F.mergeObjectSync(t,o)}static mergeObjectSync(t,n){let o={};for(let b of n){let{key:l,value:a}=b;if(l.status==="aborted")return E;if(a.status==="aborted")return E;if(l.status==="dirty")t.dirty();if(a.status==="dirty")t.dirty();if(l.value!=="__proto__"&&(typeof a.value<"u"||b.alwaysSet))o[l.value]=a.value}return{status:t.value,value:o}}}var Yt=(t)=>{let{data:n,path:o,errorMaps:b,issueData:l}=t,a=[...o,...l.path||[]],f={...l,path:a};if(l.message!==void 0)return{...l,path:a,message:l.message};let h="",r=b.filter((A)=>!!A).slice().reverse();for(let A of r)h=A(f,{data:n,defaultError:h}).message;return{...l,path:a,message:h}},Oo,E,e=(t)=>({status:"dirty",value:t}),B=(t)=>({status:"valid",value:t}),Ut=(t)=>t.status==="aborted",jt=(t)=>t.status==="dirty",P=(t)=>t.status==="valid",bt=(t)=>typeof Promise<"u"&&t instanceof Promise;var Hn=x(()=>{dt();En();Oo=[];E=Object.freeze({status:"aborted"})});var a0=()=>{};var q;var f0=x(()=>{(function(t){t.errToObj=(n)=>typeof n==="string"?{message:n}:n||{},t.toString=(n)=>typeof n==="string"?n:n?.message})(q||(q={}))});class U{constructor(t,n,o,b){this._cachedPath=[],this.parent=t,this.data=n,this._path=o,this._key=b}get path(){if(!this._cachedPath.length)if(Array.isArray(this._key))this._cachedPath.push(...this._path,...this._key);else this._cachedPath.push(...this._path,this._key);return this._cachedPath}}function Y(t){if(!t)return{};let{errorMap:n,invalid_type_error:o,required_error:b,description:l}=t;if(n&&(o||b))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);if(n)return{errorMap:n,description:l};return{errorMap:(f,h)=>{let{message:r}=t;if(f.code==="invalid_enum_value")return{message:r??h.defaultError};if(typeof h.data>"u")return{message:r??b??h.defaultError};if(f.code!=="invalid_type")return{message:h.defaultError};return{message:r??o??h.defaultError}},description:l}}class M{get description(){return this._def.description}_getType(t){return V(t.data)}_getOrReturnCtx(t,n){return n||{common:t.parent.common,data:t.data,parsedType:V(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new F,ctx:{common:t.parent.common,data:t.data,parsedType:V(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){let n=this._parse(t);if(bt(n))throw Error("Synchronous parse encountered promise.");return n}_parseAsync(t){let n=this._parse(t);return Promise.resolve(n)}parse(t,n){let o=this.safeParse(t,n);if(o.success)return o.data;throw o.error}safeParse(t,n){let o={common:{issues:[],async:n?.async??!1,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:V(t)},b=this._parseSync({data:t,path:o.path,parent:o});return h0(o,b)}"~validate"(t){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:V(t)};if(!this["~standard"].async)try{let o=this._parseSync({data:t,path:[],parent:n});return P(o)?{value:o.value}:{issues:n.common.issues}}catch(o){if(o?.message?.toLowerCase()?.includes("encountered"))this["~standard"].async=!0;n.common={issues:[],async:!0}}return this._parseAsync({data:t,path:[],parent:n}).then((o)=>P(o)?{value:o.value}:{issues:n.common.issues})}async parseAsync(t,n){let o=await this.safeParseAsync(t,n);if(o.success)return o.data;throw o.error}async safeParseAsync(t,n){let o={common:{issues:[],contextualErrorMap:n?.errorMap,async:!0},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:V(t)},b=this._parse({data:t,path:o.path,parent:o}),l=await(bt(b)?b:Promise.resolve(b));return h0(o,l)}refine(t,n){let o=(b)=>{if(typeof n==="string"||typeof n>"u")return{message:n};else if(typeof n==="function")return n(b);else return n};return this._refinement((b,l)=>{let a=t(b),f=()=>l.addIssue({code:g.custom,...o(b)});if(typeof Promise<"u"&&a instanceof Promise)return a.then((h)=>{if(!h)return f(),!1;else return!0});if(!a)return f(),!1;else return!0})}refinement(t,n){return this._refinement((o,b)=>{if(!t(o))return b.addIssue(typeof n==="function"?n(o,b):n),!1;else return!0})}_refinement(t){return new j({schema:this,typeName:H.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:(n)=>this["~validate"](n)}}optional(){return d.create(this,this._def)}nullable(){return u.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return W.create(this)}promise(){return nt.create(this,this._def)}or(t){return gt.create([this,t],this._def)}and(t){return $t.create(this,t,this._def)}transform(t){return new j({...Y(this._def),schema:this,typeName:H.ZodEffects,effect:{type:"transform",transform:t}})}default(t){let n=typeof t==="function"?t:()=>t;return new _t({...Y(this._def),innerType:this,defaultValue:n,typeName:H.ZodDefault})}brand(){return new Nt({typeName:H.ZodBranded,type:this,...Y(this._def)})}catch(t){let n=typeof t==="function"?t:()=>t;return new At({...Y(this._def),innerType:this,catchValue:n,typeName:H.ZodCatch})}describe(t){return new this.constructor({...this._def,description:t})}pipe(t){return Gt.create(this,t)}readonly(){return qt.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}function $0(t){let n="[0-5]\\d";if(t.precision)n=`${n}\\.\\d{${t.precision}}`;else if(t.precision==null)n=`${n}(\\.\\d+)?`;let o=t.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${n})${o}`}function so(t){return new RegExp(`^${$0(t)}$`)}function v0(t){let n=`${g0}T${$0(t)}`,o=[];if(o.push(t.local?"Z?":"Z"),t.offset)o.push("([+-]\\d{2}:?\\d{2})");return n=`${n}(${o.join("|")})`,new RegExp(`^${n}$`)}function zo(t,n){if((n==="v4"||!n)&&io.test(t))return!0;if((n==="v6"||!n)&&To.test(t))return!0;return!1}function tb(t,n){if(!Ko.test(t))return!1;try{let[o]=t.split(".");if(!o)return!1;let b=o.replace(/-/g,"+").replace(/_/g,"/").padEnd(o.length+(4-o.length%4)%4,"="),l=JSON.parse(atob(b));if(typeof l!=="object"||l===null)return!1;if("typ"in l&&l?.typ!=="JWT")return!1;if(!l.alg)return!1;if(n&&l.alg!==n)return!1;return!0}catch{return!1}}function nb(t,n){if((n==="v4"||!n)&&Po.test(t))return!0;if((n==="v6"||!n)&&Co.test(t))return!0;return!1}function ob(t,n){let o=(t.toString().split(".")[1]||"").length,b=(n.toString().split(".")[1]||"").length,l=o>b?o:b,a=Number.parseInt(t.toFixed(l).replace(".","")),f=Number.parseInt(n.toFixed(l).replace(".",""));return a%f/10**l}function lt(t){if(t instanceof G){let n={};for(let o in t.shape){let b=t.shape[o];n[o]=d.create(lt(b))}return new G({...t._def,shape:()=>n})}else if(t instanceof W)return new W({...t._def,type:lt(t.element)});else if(t instanceof d)return d.create(lt(t.unwrap()));else if(t instanceof u)return u.create(lt(t.unwrap()));else if(t instanceof K)return K.create(t.items.map((n)=>lt(n)));else return t}function Yn(t,n){let o=V(t),b=V(n);if(t===n)return{valid:!0,data:t};else if(o===$.object&&b===$.object){let l=k.objectKeys(n),a=k.objectKeys(t).filter((h)=>l.indexOf(h)!==-1),f={...t,...n};for(let h of a){let r=Yn(t[h],n[h]);if(!r.valid)return{valid:!1};f[h]=r.data}return{valid:!0,data:f}}else if(o===$.array&&b===$.array){if(t.length!==n.length)return{valid:!1};let l=[];for(let a=0;a<t.length;a++){let f=t[a],h=n[a],r=Yn(f,h);if(!r.valid)return{valid:!1};l.push(r.data)}return{valid:!0,data:l}}else if(o===$.date&&b===$.date&&+t===+n)return{valid:!0,data:t};else return{valid:!1}}function w0(t,n){return new Z({values:t,typeName:H.ZodEnum,...Y(n)})}function r0(t,n){let o=typeof t==="function"?t(n):typeof t==="string"?{message:t}:t;return typeof o==="string"?{message:o}:o}function c0(t,n={},o){if(t)return z.create().superRefine((b,l)=>{let a=t(b);if(a instanceof Promise)return a.then((f)=>{if(!f){let h=r0(n,b),r=h.fatal??o??!0;l.addIssue({code:"custom",...h,fatal:r})}});if(!a){let f=r0(n,b),h=f.fatal??o??!0;l.addIssue({code:"custom",...f,fatal:h})}return});return z.create()}var h0=(t,n)=>{if(P(n))return{success:!0,data:n.value};else{if(!t.common.issues.length)throw Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let o=new m(t.common.issues);return this._error=o,this._error}}}},Wo,Uo,jo,Vo,No,Ko,po,Io,uo="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",xn,io,Po,To,Co,yo,Zo,g0="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",eo,O,C,y,ft,s,Mt,ht,rt,z,T,N,kt,W,G,gt,I=(t)=>{if(t instanceof vt)return I(t.schema);else if(t instanceof j)return I(t.innerType());else if(t instanceof wt)return[t.value];else if(t instanceof Z)return t.options;else if(t instanceof ct)return k.objectValues(t.enum);else if(t instanceof _t)return I(t._def.innerType);else if(t instanceof ht)return[void 0];else if(t instanceof rt)return[null];else if(t instanceof d)return[void 0,...I(t.unwrap())];else if(t instanceof u)return[null,...I(t.unwrap())];else if(t instanceof Nt)return I(t.unwrap());else if(t instanceof qt)return I(t.unwrap());else if(t instanceof At)return I(t._def.innerType);else return[]},Vt,$t,K,Xt,St,tt,at,vt,wt,Z,ct,nt,j,d,u,_t,At,Qt,bb,Nt,Gt,qt,lb,H,ab=(t,n={message:`Input not instance of ${t.name}`})=>c0((o)=>o instanceof t,n),_0,A0,fb,hb,q0,rb,gb,$b,vb,wb,cb,_b,Ab,qb,Eb,Hb,xb,Yb,Mb,kb,Xb,Sb,Qb,Gb,Jb,Lb,Fb,Bb,mb,Rb,Db,Ob,Wb,db,Ub=()=>_0().optional(),jb=()=>A0().optional(),Vb=()=>q0().optional(),Nb,Kb;var E0=x(()=>{Wt();dt();f0();Hn();xt();Wo=/^c[^\s-]{8,}$/i,Uo=/^[0-9a-z]+$/,jo=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Vo=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,No=/^[a-z0-9_-]{21}$/i,Ko=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,po=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,Io=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,io=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Po=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,To=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Co=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,yo=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Zo=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,eo=new RegExp(`^${g0}$`);O=class O extends M{_parse(t){if(this._def.coerce)t.data=String(t.data);if(this._getType(t)!==$.string){let l=this._getOrReturnCtx(t);return v(l,{code:g.invalid_type,expected:$.string,received:l.parsedType}),E}let o=new F,b=void 0;for(let l of this._def.checks)if(l.kind==="min"){if(t.data.length<l.value)b=this._getOrReturnCtx(t,b),v(b,{code:g.too_small,minimum:l.value,type:"string",inclusive:!0,exact:!1,message:l.message}),o.dirty()}else if(l.kind==="max"){if(t.data.length>l.value)b=this._getOrReturnCtx(t,b),v(b,{code:g.too_big,maximum:l.value,type:"string",inclusive:!0,exact:!1,message:l.message}),o.dirty()}else if(l.kind==="length"){let a=t.data.length>l.value,f=t.data.length<l.value;if(a||f){if(b=this._getOrReturnCtx(t,b),a)v(b,{code:g.too_big,maximum:l.value,type:"string",inclusive:!0,exact:!0,message:l.message});else if(f)v(b,{code:g.too_small,minimum:l.value,type:"string",inclusive:!0,exact:!0,message:l.message});o.dirty()}}else if(l.kind==="email"){if(!Io.test(t.data))b=this._getOrReturnCtx(t,b),v(b,{validation:"email",code:g.invalid_string,message:l.message}),o.dirty()}else if(l.kind==="emoji"){if(!xn)xn=new RegExp(uo,"u");if(!xn.test(t.data))b=this._getOrReturnCtx(t,b),v(b,{validation:"emoji",code:g.invalid_string,message:l.message}),o.dirty()}else if(l.kind==="uuid"){if(!Vo.test(t.data))b=this._getOrReturnCtx(t,b),v(b,{validation:"uuid",code:g.invalid_string,message:l.message}),o.dirty()}else if(l.kind==="nanoid"){if(!No.test(t.data))b=this._getOrReturnCtx(t,b),v(b,{validation:"nanoid",code:g.invalid_string,message:l.message}),o.dirty()}else if(l.kind==="cuid"){if(!Wo.test(t.data))b=this._getOrReturnCtx(t,b),v(b,{validation:"cuid",code:g.invalid_string,message:l.message}),o.dirty()}else if(l.kind==="cuid2"){if(!Uo.test(t.data))b=this._getOrReturnCtx(t,b),v(b,{validation:"cuid2",code:g.invalid_string,message:l.message}),o.dirty()}else if(l.kind==="ulid"){if(!jo.test(t.data))b=this._getOrReturnCtx(t,b),v(b,{validation:"ulid",code:g.invalid_string,message:l.message}),o.dirty()}else if(l.kind==="url")try{new URL(t.data)}catch{b=this._getOrReturnCtx(t,b),v(b,{validation:"url",code:g.invalid_string,message:l.message}),o.dirty()}else if(l.kind==="regex"){if(l.regex.lastIndex=0,!l.regex.test(t.data))b=this._getOrReturnCtx(t,b),v(b,{validation:"regex",code:g.invalid_string,message:l.message}),o.dirty()}else if(l.kind==="trim")t.data=t.data.trim();else if(l.kind==="includes"){if(!t.data.includes(l.value,l.position))b=this._getOrReturnCtx(t,b),v(b,{code:g.invalid_string,validation:{includes:l.value,position:l.position},message:l.message}),o.dirty()}else if(l.kind==="toLowerCase")t.data=t.data.toLowerCase();else if(l.kind==="toUpperCase")t.data=t.data.toUpperCase();else if(l.kind==="startsWith"){if(!t.data.startsWith(l.value))b=this._getOrReturnCtx(t,b),v(b,{code:g.invalid_string,validation:{startsWith:l.value},message:l.message}),o.dirty()}else if(l.kind==="endsWith"){if(!t.data.endsWith(l.value))b=this._getOrReturnCtx(t,b),v(b,{code:g.invalid_string,validation:{endsWith:l.value},message:l.message}),o.dirty()}else if(l.kind==="datetime"){if(!v0(l).test(t.data))b=this._getOrReturnCtx(t,b),v(b,{code:g.invalid_string,validation:"datetime",message:l.message}),o.dirty()}else if(l.kind==="date"){if(!eo.test(t.data))b=this._getOrReturnCtx(t,b),v(b,{code:g.invalid_string,validation:"date",message:l.message}),o.dirty()}else if(l.kind==="time"){if(!so(l).test(t.data))b=this._getOrReturnCtx(t,b),v(b,{code:g.invalid_string,validation:"time",message:l.message}),o.dirty()}else if(l.kind==="duration"){if(!po.test(t.data))b=this._getOrReturnCtx(t,b),v(b,{validation:"duration",code:g.invalid_string,message:l.message}),o.dirty()}else if(l.kind==="ip"){if(!zo(t.data,l.version))b=this._getOrReturnCtx(t,b),v(b,{validation:"ip",code:g.invalid_string,message:l.message}),o.dirty()}else if(l.kind==="jwt"){if(!tb(t.data,l.alg))b=this._getOrReturnCtx(t,b),v(b,{validation:"jwt",code:g.invalid_string,message:l.message}),o.dirty()}else if(l.kind==="cidr"){if(!nb(t.data,l.version))b=this._getOrReturnCtx(t,b),v(b,{validation:"cidr",code:g.invalid_string,message:l.message}),o.dirty()}else if(l.kind==="base64"){if(!yo.test(t.data))b=this._getOrReturnCtx(t,b),v(b,{validation:"base64",code:g.invalid_string,message:l.message}),o.dirty()}else if(l.kind==="base64url"){if(!Zo.test(t.data))b=this._getOrReturnCtx(t,b),v(b,{validation:"base64url",code:g.invalid_string,message:l.message}),o.dirty()}else k.assertNever(l);return{status:o.value,value:t.data}}_regex(t,n,o){return this.refinement((b)=>t.test(b),{validation:n,code:g.invalid_string,...q.errToObj(o)})}_addCheck(t){return new O({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",...q.errToObj(t)})}url(t){return this._addCheck({kind:"url",...q.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",...q.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",...q.errToObj(t)})}nanoid(t){return this._addCheck({kind:"nanoid",...q.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",...q.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",...q.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",...q.errToObj(t)})}base64(t){return this._addCheck({kind:"base64",...q.errToObj(t)})}base64url(t){return this._addCheck({kind:"base64url",...q.errToObj(t)})}jwt(t){return this._addCheck({kind:"jwt",...q.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",...q.errToObj(t)})}cidr(t){return this._addCheck({kind:"cidr",...q.errToObj(t)})}datetime(t){if(typeof t==="string")return this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:t});return this._addCheck({kind:"datetime",precision:typeof t?.precision>"u"?null:t?.precision,offset:t?.offset??!1,local:t?.local??!1,...q.errToObj(t?.message)})}date(t){return this._addCheck({kind:"date",message:t})}time(t){if(typeof t==="string")return this._addCheck({kind:"time",precision:null,message:t});return this._addCheck({kind:"time",precision:typeof t?.precision>"u"?null:t?.precision,...q.errToObj(t?.message)})}duration(t){return this._addCheck({kind:"duration",...q.errToObj(t)})}regex(t,n){return this._addCheck({kind:"regex",regex:t,...q.errToObj(n)})}includes(t,n){return this._addCheck({kind:"includes",value:t,position:n?.position,...q.errToObj(n?.message)})}startsWith(t,n){return this._addCheck({kind:"startsWith",value:t,...q.errToObj(n)})}endsWith(t,n){return this._addCheck({kind:"endsWith",value:t,...q.errToObj(n)})}min(t,n){return this._addCheck({kind:"min",value:t,...q.errToObj(n)})}max(t,n){return this._addCheck({kind:"max",value:t,...q.errToObj(n)})}length(t,n){return this._addCheck({kind:"length",value:t,...q.errToObj(n)})}nonempty(t){return this.min(1,q.errToObj(t))}trim(){return new O({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new O({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new O({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find((t)=>t.kind==="datetime")}get isDate(){return!!this._def.checks.find((t)=>t.kind==="date")}get isTime(){return!!this._def.checks.find((t)=>t.kind==="time")}get isDuration(){return!!this._def.checks.find((t)=>t.kind==="duration")}get isEmail(){return!!this._def.checks.find((t)=>t.kind==="email")}get isURL(){return!!this._def.checks.find((t)=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find((t)=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find((t)=>t.kind==="uuid")}get isNANOID(){return!!this._def.checks.find((t)=>t.kind==="nanoid")}get isCUID(){return!!this._def.checks.find((t)=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find((t)=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find((t)=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find((t)=>t.kind==="ip")}get isCIDR(){return!!this._def.checks.find((t)=>t.kind==="cidr")}get isBase64(){return!!this._def.checks.find((t)=>t.kind==="base64")}get isBase64url(){return!!this._def.checks.find((t)=>t.kind==="base64url")}get minLength(){let t=null;for(let n of this._def.checks)if(n.kind==="min"){if(t===null||n.value>t)t=n.value}return t}get maxLength(){let t=null;for(let n of this._def.checks)if(n.kind==="max"){if(t===null||n.value<t)t=n.value}return t}};O.create=(t)=>{return new O({checks:[],typeName:H.ZodString,coerce:t?.coerce??!1,...Y(t)})};C=class C extends M{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce)t.data=Number(t.data);if(this._getType(t)!==$.number){let l=this._getOrReturnCtx(t);return v(l,{code:g.invalid_type,expected:$.number,received:l.parsedType}),E}let o=void 0,b=new F;for(let l of this._def.checks)if(l.kind==="int"){if(!k.isInteger(t.data))o=this._getOrReturnCtx(t,o),v(o,{code:g.invalid_type,expected:"integer",received:"float",message:l.message}),b.dirty()}else if(l.kind==="min"){if(l.inclusive?t.data<l.value:t.data<=l.value)o=this._getOrReturnCtx(t,o),v(o,{code:g.too_small,minimum:l.value,type:"number",inclusive:l.inclusive,exact:!1,message:l.message}),b.dirty()}else if(l.kind==="max"){if(l.inclusive?t.data>l.value:t.data>=l.value)o=this._getOrReturnCtx(t,o),v(o,{code:g.too_big,maximum:l.value,type:"number",inclusive:l.inclusive,exact:!1,message:l.message}),b.dirty()}else if(l.kind==="multipleOf"){if(ob(t.data,l.value)!==0)o=this._getOrReturnCtx(t,o),v(o,{code:g.not_multiple_of,multipleOf:l.value,message:l.message}),b.dirty()}else if(l.kind==="finite"){if(!Number.isFinite(t.data))o=this._getOrReturnCtx(t,o),v(o,{code:g.not_finite,message:l.message}),b.dirty()}else k.assertNever(l);return{status:b.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,q.toString(n))}gt(t,n){return this.setLimit("min",t,!1,q.toString(n))}lte(t,n){return this.setLimit("max",t,!0,q.toString(n))}lt(t,n){return this.setLimit("max",t,!1,q.toString(n))}setLimit(t,n,o,b){return new C({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:o,message:q.toString(b)}]})}_addCheck(t){return new C({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:q.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:q.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:q.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:q.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:q.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:q.toString(n)})}finite(t){return this._addCheck({kind:"finite",message:q.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:q.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:q.toString(t)})}get minValue(){let t=null;for(let n of this._def.checks)if(n.kind==="min"){if(t===null||n.value>t)t=n.value}return t}get maxValue(){let t=null;for(let n of this._def.checks)if(n.kind==="max"){if(t===null||n.value<t)t=n.value}return t}get isInt(){return!!this._def.checks.find((t)=>t.kind==="int"||t.kind==="multipleOf"&&k.isInteger(t.value))}get isFinite(){let t=null,n=null;for(let o of this._def.checks)if(o.kind==="finite"||o.kind==="int"||o.kind==="multipleOf")return!0;else if(o.kind==="min"){if(n===null||o.value>n)n=o.value}else if(o.kind==="max"){if(t===null||o.value<t)t=o.value}return Number.isFinite(n)&&Number.isFinite(t)}};C.create=(t)=>{return new C({checks:[],typeName:H.ZodNumber,coerce:t?.coerce||!1,...Y(t)})};y=class y extends M{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce)try{t.data=BigInt(t.data)}catch{return this._getInvalidInput(t)}if(this._getType(t)!==$.bigint)return this._getInvalidInput(t);let o=void 0,b=new F;for(let l of this._def.checks)if(l.kind==="min"){if(l.inclusive?t.data<l.value:t.data<=l.value)o=this._getOrReturnCtx(t,o),v(o,{code:g.too_small,type:"bigint",minimum:l.value,inclusive:l.inclusive,message:l.message}),b.dirty()}else if(l.kind==="max"){if(l.inclusive?t.data>l.value:t.data>=l.value)o=this._getOrReturnCtx(t,o),v(o,{code:g.too_big,type:"bigint",maximum:l.value,inclusive:l.inclusive,message:l.message}),b.dirty()}else if(l.kind==="multipleOf"){if(t.data%l.value!==BigInt(0))o=this._getOrReturnCtx(t,o),v(o,{code:g.not_multiple_of,multipleOf:l.value,message:l.message}),b.dirty()}else k.assertNever(l);return{status:b.value,value:t.data}}_getInvalidInput(t){let n=this._getOrReturnCtx(t);return v(n,{code:g.invalid_type,expected:$.bigint,received:n.parsedType}),E}gte(t,n){return this.setLimit("min",t,!0,q.toString(n))}gt(t,n){return this.setLimit("min",t,!1,q.toString(n))}lte(t,n){return this.setLimit("max",t,!0,q.toString(n))}lt(t,n){return this.setLimit("max",t,!1,q.toString(n))}setLimit(t,n,o,b){return new y({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:o,message:q.toString(b)}]})}_addCheck(t){return new y({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:q.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:q.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:q.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:q.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:q.toString(n)})}get minValue(){let t=null;for(let n of this._def.checks)if(n.kind==="min"){if(t===null||n.value>t)t=n.value}return t}get maxValue(){let t=null;for(let n of this._def.checks)if(n.kind==="max"){if(t===null||n.value<t)t=n.value}return t}};y.create=(t)=>{return new y({checks:[],typeName:H.ZodBigInt,coerce:t?.coerce??!1,...Y(t)})};ft=class ft extends M{_parse(t){if(this._def.coerce)t.data=Boolean(t.data);if(this._getType(t)!==$.boolean){let o=this._getOrReturnCtx(t);return v(o,{code:g.invalid_type,expected:$.boolean,received:o.parsedType}),E}return B(t.data)}};ft.create=(t)=>{return new ft({typeName:H.ZodBoolean,coerce:t?.coerce||!1,...Y(t)})};s=class s extends M{_parse(t){if(this._def.coerce)t.data=new Date(t.data);if(this._getType(t)!==$.date){let l=this._getOrReturnCtx(t);return v(l,{code:g.invalid_type,expected:$.date,received:l.parsedType}),E}if(Number.isNaN(t.data.getTime())){let l=this._getOrReturnCtx(t);return v(l,{code:g.invalid_date}),E}let o=new F,b=void 0;for(let l of this._def.checks)if(l.kind==="min"){if(t.data.getTime()<l.value)b=this._getOrReturnCtx(t,b),v(b,{code:g.too_small,message:l.message,inclusive:!0,exact:!1,minimum:l.value,type:"date"}),o.dirty()}else if(l.kind==="max"){if(t.data.getTime()>l.value)b=this._getOrReturnCtx(t,b),v(b,{code:g.too_big,message:l.message,inclusive:!0,exact:!1,maximum:l.value,type:"date"}),o.dirty()}else k.assertNever(l);return{status:o.value,value:new Date(t.data.getTime())}}_addCheck(t){return new s({...this._def,checks:[...this._def.checks,t]})}min(t,n){return this._addCheck({kind:"min",value:t.getTime(),message:q.toString(n)})}max(t,n){return this._addCheck({kind:"max",value:t.getTime(),message:q.toString(n)})}get minDate(){let t=null;for(let n of this._def.checks)if(n.kind==="min"){if(t===null||n.value>t)t=n.value}return t!=null?new Date(t):null}get maxDate(){let t=null;for(let n of this._def.checks)if(n.kind==="max"){if(t===null||n.value<t)t=n.value}return t!=null?new Date(t):null}};s.create=(t)=>{return new s({checks:[],coerce:t?.coerce||!1,typeName:H.ZodDate,...Y(t)})};Mt=class Mt extends M{_parse(t){if(this._getType(t)!==$.symbol){let o=this._getOrReturnCtx(t);return v(o,{code:g.invalid_type,expected:$.symbol,received:o.parsedType}),E}return B(t.data)}};Mt.create=(t)=>{return new Mt({typeName:H.ZodSymbol,...Y(t)})};ht=class ht extends M{_parse(t){if(this._getType(t)!==$.undefined){let o=this._getOrReturnCtx(t);return v(o,{code:g.invalid_type,expected:$.undefined,received:o.parsedType}),E}return B(t.data)}};ht.create=(t)=>{return new ht({typeName:H.ZodUndefined,...Y(t)})};rt=class rt extends M{_parse(t){if(this._getType(t)!==$.null){let o=this._getOrReturnCtx(t);return v(o,{code:g.invalid_type,expected:$.null,received:o.parsedType}),E}return B(t.data)}};rt.create=(t)=>{return new rt({typeName:H.ZodNull,...Y(t)})};z=class z extends M{constructor(){super(...arguments);this._any=!0}_parse(t){return B(t.data)}};z.create=(t)=>{return new z({typeName:H.ZodAny,...Y(t)})};T=class T extends M{constructor(){super(...arguments);this._unknown=!0}_parse(t){return B(t.data)}};T.create=(t)=>{return new T({typeName:H.ZodUnknown,...Y(t)})};N=class N extends M{_parse(t){let n=this._getOrReturnCtx(t);return v(n,{code:g.invalid_type,expected:$.never,received:n.parsedType}),E}};N.create=(t)=>{return new N({typeName:H.ZodNever,...Y(t)})};kt=class kt extends M{_parse(t){if(this._getType(t)!==$.undefined){let o=this._getOrReturnCtx(t);return v(o,{code:g.invalid_type,expected:$.void,received:o.parsedType}),E}return B(t.data)}};kt.create=(t)=>{return new kt({typeName:H.ZodVoid,...Y(t)})};W=class W extends M{_parse(t){let{ctx:n,status:o}=this._processInputParams(t),b=this._def;if(n.parsedType!==$.array)return v(n,{code:g.invalid_type,expected:$.array,received:n.parsedType}),E;if(b.exactLength!==null){let a=n.data.length>b.exactLength.value,f=n.data.length<b.exactLength.value;if(a||f)v(n,{code:a?g.too_big:g.too_small,minimum:f?b.exactLength.value:void 0,maximum:a?b.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:b.exactLength.message}),o.dirty()}if(b.minLength!==null){if(n.data.length<b.minLength.value)v(n,{code:g.too_small,minimum:b.minLength.value,type:"array",inclusive:!0,exact:!1,message:b.minLength.message}),o.dirty()}if(b.maxLength!==null){if(n.data.length>b.maxLength.value)v(n,{code:g.too_big,maximum:b.maxLength.value,type:"array",inclusive:!0,exact:!1,message:b.maxLength.message}),o.dirty()}if(n.common.async)return Promise.all([...n.data].map((a,f)=>{return b.type._parseAsync(new U(n,a,n.path,f))})).then((a)=>{return F.mergeArray(o,a)});let l=[...n.data].map((a,f)=>{return b.type._parseSync(new U(n,a,n.path,f))});return F.mergeArray(o,l)}get element(){return this._def.type}min(t,n){return new W({...this._def,minLength:{value:t,message:q.toString(n)}})}max(t,n){return new W({...this._def,maxLength:{value:t,message:q.toString(n)}})}length(t,n){return new W({...this._def,exactLength:{value:t,message:q.toString(n)}})}nonempty(t){return this.min(1,t)}};W.create=(t,n)=>{return new W({type:t,minLength:null,maxLength:null,exactLength:null,typeName:H.ZodArray,...Y(n)})};G=class G extends M{constructor(){super(...arguments);this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let t=this._def.shape(),n=k.objectKeys(t);return this._cached={shape:t,keys:n},this._cached}_parse(t){if(this._getType(t)!==$.object){let r=this._getOrReturnCtx(t);return v(r,{code:g.invalid_type,expected:$.object,received:r.parsedType}),E}let{status:o,ctx:b}=this._processInputParams(t),{shape:l,keys:a}=this._getCached(),f=[];if(!(this._def.catchall instanceof N&&this._def.unknownKeys==="strip")){for(let r in b.data)if(!a.includes(r))f.push(r)}let h=[];for(let r of a){let A=l[r],X=b.data[r];h.push({key:{status:"valid",value:r},value:A._parse(new U(b,X,b.path,r)),alwaysSet:r in b.data})}if(this._def.catchall instanceof N){let r=this._def.unknownKeys;if(r==="passthrough")for(let A of f)h.push({key:{status:"valid",value:A},value:{status:"valid",value:b.data[A]}});else if(r==="strict"){if(f.length>0)v(b,{code:g.unrecognized_keys,keys:f}),o.dirty()}else if(r==="strip");else throw Error("Internal ZodObject error: invalid unknownKeys value.")}else{let r=this._def.catchall;for(let A of f){let X=b.data[A];h.push({key:{status:"valid",value:A},value:r._parse(new U(b,X,b.path,A)),alwaysSet:A in b.data})}}if(b.common.async)return Promise.resolve().then(async()=>{let r=[];for(let A of h){let X=await A.key,L=await A.value;r.push({key:X,value:L,alwaysSet:A.alwaysSet})}return r}).then((r)=>{return F.mergeObjectSync(o,r)});else return F.mergeObjectSync(o,h)}get shape(){return this._def.shape()}strict(t){return q.errToObj,new G({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(n,o)=>{let b=this._def.errorMap?.(n,o).message??o.defaultError;if(n.code==="unrecognized_keys")return{message:q.errToObj(t).message??b};return{message:b}}}:{}})}strip(){return new G({...this._def,unknownKeys:"strip"})}passthrough(){return new G({...this._def,unknownKeys:"passthrough"})}extend(t){return new G({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new G({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:H.ZodObject})}setKey(t,n){return this.augment({[t]:n})}catchall(t){return new G({...this._def,catchall:t})}pick(t){let n={};for(let o of k.objectKeys(t))if(t[o]&&this.shape[o])n[o]=this.shape[o];return new G({...this._def,shape:()=>n})}omit(t){let n={};for(let o of k.objectKeys(this.shape))if(!t[o])n[o]=this.shape[o];return new G({...this._def,shape:()=>n})}deepPartial(){return lt(this)}partial(t){let n={};for(let o of k.objectKeys(this.shape)){let b=this.shape[o];if(t&&!t[o])n[o]=b;else n[o]=b.optional()}return new G({...this._def,shape:()=>n})}required(t){let n={};for(let o of k.objectKeys(this.shape))if(t&&!t[o])n[o]=this.shape[o];else{let l=this.shape[o];while(l instanceof d)l=l._def.innerType;n[o]=l}return new G({...this._def,shape:()=>n})}keyof(){return w0(k.objectKeys(this.shape))}};G.create=(t,n)=>{return new G({shape:()=>t,unknownKeys:"strip",catchall:N.create(),typeName:H.ZodObject,...Y(n)})};G.strictCreate=(t,n)=>{return new G({shape:()=>t,unknownKeys:"strict",catchall:N.create(),typeName:H.ZodObject,...Y(n)})};G.lazycreate=(t,n)=>{return new G({shape:t,unknownKeys:"strip",catchall:N.create(),typeName:H.ZodObject,...Y(n)})};gt=class gt extends M{_parse(t){let{ctx:n}=this._processInputParams(t),o=this._def.options;function b(l){for(let f of l)if(f.result.status==="valid")return f.result;for(let f of l)if(f.result.status==="dirty")return n.common.issues.push(...f.ctx.common.issues),f.result;let a=l.map((f)=>new m(f.ctx.common.issues));return v(n,{code:g.invalid_union,unionErrors:a}),E}if(n.common.async)return Promise.all(o.map(async(l)=>{let a={...n,common:{...n.common,issues:[]},parent:null};return{result:await l._parseAsync({data:n.data,path:n.path,parent:a}),ctx:a}})).then(b);else{let l=void 0,a=[];for(let h of o){let r={...n,common:{...n.common,issues:[]},parent:null},A=h._parseSync({data:n.data,path:n.path,parent:r});if(A.status==="valid")return A;else if(A.status==="dirty"&&!l)l={result:A,ctx:r};if(r.common.issues.length)a.push(r.common.issues)}if(l)return n.common.issues.push(...l.ctx.common.issues),l.result;let f=a.map((h)=>new m(h));return v(n,{code:g.invalid_union,unionErrors:f}),E}}get options(){return this._def.options}};gt.create=(t,n)=>{return new gt({options:t,typeName:H.ZodUnion,...Y(n)})};Vt=class Vt extends M{_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==$.object)return v(n,{code:g.invalid_type,expected:$.object,received:n.parsedType}),E;let o=this.discriminator,b=n.data[o],l=this.optionsMap.get(b);if(!l)return v(n,{code:g.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[o]}),E;if(n.common.async)return l._parseAsync({data:n.data,path:n.path,parent:n});else return l._parseSync({data:n.data,path:n.path,parent:n})}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,o){let b=new Map;for(let l of n){let a=I(l.shape[t]);if(!a.length)throw Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let f of a){if(b.has(f))throw Error(`Discriminator property ${String(t)} has duplicate value ${String(f)}`);b.set(f,l)}}return new Vt({typeName:H.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:b,...Y(o)})}};$t=class $t extends M{_parse(t){let{status:n,ctx:o}=this._processInputParams(t),b=(l,a)=>{if(Ut(l)||Ut(a))return E;let f=Yn(l.value,a.value);if(!f.valid)return v(o,{code:g.invalid_intersection_types}),E;if(jt(l)||jt(a))n.dirty();return{status:n.value,value:f.data}};if(o.common.async)return Promise.all([this._def.left._parseAsync({data:o.data,path:o.path,parent:o}),this._def.right._parseAsync({data:o.data,path:o.path,parent:o})]).then(([l,a])=>b(l,a));else return b(this._def.left._parseSync({data:o.data,path:o.path,parent:o}),this._def.right._parseSync({data:o.data,path:o.path,parent:o}))}};$t.create=(t,n,o)=>{return new $t({left:t,right:n,typeName:H.ZodIntersection,...Y(o)})};K=class K extends M{_parse(t){let{status:n,ctx:o}=this._processInputParams(t);if(o.parsedType!==$.array)return v(o,{code:g.invalid_type,expected:$.array,received:o.parsedType}),E;if(o.data.length<this._def.items.length)return v(o,{code:g.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),E;if(!this._def.rest&&o.data.length>this._def.items.length)v(o,{code:g.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty();let l=[...o.data].map((a,f)=>{let h=this._def.items[f]||this._def.rest;if(!h)return null;return h._parse(new U(o,a,o.path,f))}).filter((a)=>!!a);if(o.common.async)return Promise.all(l).then((a)=>{return F.mergeArray(n,a)});else return F.mergeArray(n,l)}get items(){return this._def.items}rest(t){return new K({...this._def,rest:t})}};K.create=(t,n)=>{if(!Array.isArray(t))throw Error("You must pass an array of schemas to z.tuple([ ... ])");return new K({items:t,typeName:H.ZodTuple,rest:null,...Y(n)})};Xt=class Xt extends M{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:n,ctx:o}=this._processInputParams(t);if(o.parsedType!==$.object)return v(o,{code:g.invalid_type,expected:$.object,received:o.parsedType}),E;let b=[],l=this._def.keyType,a=this._def.valueType;for(let f in o.data)b.push({key:l._parse(new U(o,f,o.path,f)),value:a._parse(new U(o,o.data[f],o.path,f)),alwaysSet:f in o.data});if(o.common.async)return F.mergeObjectAsync(n,b);else return F.mergeObjectSync(n,b)}get element(){return this._def.valueType}static create(t,n,o){if(n instanceof M)return new Xt({keyType:t,valueType:n,typeName:H.ZodRecord,...Y(o)});return new Xt({keyType:O.create(),valueType:t,typeName:H.ZodRecord,...Y(n)})}};St=class St extends M{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:n,ctx:o}=this._processInputParams(t);if(o.parsedType!==$.map)return v(o,{code:g.invalid_type,expected:$.map,received:o.parsedType}),E;let b=this._def.keyType,l=this._def.valueType,a=[...o.data.entries()].map(([f,h],r)=>{return{key:b._parse(new U(o,f,o.path,[r,"key"])),value:l._parse(new U(o,h,o.path,[r,"value"]))}});if(o.common.async){let f=new Map;return Promise.resolve().then(async()=>{for(let h of a){let r=await h.key,A=await h.value;if(r.status==="aborted"||A.status==="aborted")return E;if(r.status==="dirty"||A.status==="dirty")n.dirty();f.set(r.value,A.value)}return{status:n.value,value:f}})}else{let f=new Map;for(let h of a){let{key:r,value:A}=h;if(r.status==="aborted"||A.status==="aborted")return E;if(r.status==="dirty"||A.status==="dirty")n.dirty();f.set(r.value,A.value)}return{status:n.value,value:f}}}};St.create=(t,n,o)=>{return new St({valueType:n,keyType:t,typeName:H.ZodMap,...Y(o)})};tt=class tt extends M{_parse(t){let{status:n,ctx:o}=this._processInputParams(t);if(o.parsedType!==$.set)return v(o,{code:g.invalid_type,expected:$.set,received:o.parsedType}),E;let b=this._def;if(b.minSize!==null){if(o.data.size<b.minSize.value)v(o,{code:g.too_small,minimum:b.minSize.value,type:"set",inclusive:!0,exact:!1,message:b.minSize.message}),n.dirty()}if(b.maxSize!==null){if(o.data.size>b.maxSize.value)v(o,{code:g.too_big,maximum:b.maxSize.value,type:"set",inclusive:!0,exact:!1,message:b.maxSize.message}),n.dirty()}let l=this._def.valueType;function a(h){let r=new Set;for(let A of h){if(A.status==="aborted")return E;if(A.status==="dirty")n.dirty();r.add(A.value)}return{status:n.value,value:r}}let f=[...o.data.values()].map((h,r)=>l._parse(new U(o,h,o.path,r)));if(o.common.async)return Promise.all(f).then((h)=>a(h));else return a(f)}min(t,n){return new tt({...this._def,minSize:{value:t,message:q.toString(n)}})}max(t,n){return new tt({...this._def,maxSize:{value:t,message:q.toString(n)}})}size(t,n){return this.min(t,n).max(t,n)}nonempty(t){return this.min(1,t)}};tt.create=(t,n)=>{return new tt({valueType:t,minSize:null,maxSize:null,typeName:H.ZodSet,...Y(n)})};at=class at extends M{constructor(){super(...arguments);this.validate=this.implement}_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==$.function)return v(n,{code:g.invalid_type,expected:$.function,received:n.parsedType}),E;function o(f,h){return Yt({data:f,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,ot(),p].filter((r)=>!!r),issueData:{code:g.invalid_arguments,argumentsError:h}})}function b(f,h){return Yt({data:f,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,ot(),p].filter((r)=>!!r),issueData:{code:g.invalid_return_type,returnTypeError:h}})}let l={errorMap:n.common.contextualErrorMap},a=n.data;if(this._def.returns instanceof nt){let f=this;return B(async function(...h){let r=new m([]),A=await f._def.args.parseAsync(h,l).catch((J)=>{throw r.addIssue(o(h,J)),r}),X=await Reflect.apply(a,this,A);return await f._def.returns._def.type.parseAsync(X,l).catch((J)=>{throw r.addIssue(b(X,J)),r})})}else{let f=this;return B(function(...h){let r=f._def.args.safeParse(h,l);if(!r.success)throw new m([o(h,r.error)]);let A=Reflect.apply(a,this,r.data),X=f._def.returns.safeParse(A,l);if(!X.success)throw new m([b(A,X.error)]);return X.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new at({...this._def,args:K.create(t).rest(T.create())})}returns(t){return new at({...this._def,returns:t})}implement(t){return this.parse(t)}strictImplement(t){return this.parse(t)}static create(t,n,o){return new at({args:t?t:K.create([]).rest(T.create()),returns:n||T.create(),typeName:H.ZodFunction,...Y(o)})}};vt=class vt extends M{get schema(){return this._def.getter()}_parse(t){let{ctx:n}=this._processInputParams(t);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};vt.create=(t,n)=>{return new vt({getter:t,typeName:H.ZodLazy,...Y(n)})};wt=class wt extends M{_parse(t){if(t.data!==this._def.value){let n=this._getOrReturnCtx(t);return v(n,{received:n.data,code:g.invalid_literal,expected:this._def.value}),E}return{status:"valid",value:t.data}}get value(){return this._def.value}};wt.create=(t,n)=>{return new wt({value:t,typeName:H.ZodLiteral,...Y(n)})};Z=class Z extends M{_parse(t){if(typeof t.data!=="string"){let n=this._getOrReturnCtx(t),o=this._def.values;return v(n,{expected:k.joinValues(o),received:n.parsedType,code:g.invalid_type}),E}if(!this._cache)this._cache=new Set(this._def.values);if(!this._cache.has(t.data)){let n=this._getOrReturnCtx(t),o=this._def.values;return v(n,{received:n.data,code:g.invalid_enum_value,options:o}),E}return B(t.data)}get options(){return this._def.values}get enum(){let t={};for(let n of this._def.values)t[n]=n;return t}get Values(){let t={};for(let n of this._def.values)t[n]=n;return t}get Enum(){let t={};for(let n of this._def.values)t[n]=n;return t}extract(t,n=this._def){return Z.create(t,{...this._def,...n})}exclude(t,n=this._def){return Z.create(this.options.filter((o)=>!t.includes(o)),{...this._def,...n})}};Z.create=w0;ct=class ct extends M{_parse(t){let n=k.getValidEnumValues(this._def.values),o=this._getOrReturnCtx(t);if(o.parsedType!==$.string&&o.parsedType!==$.number){let b=k.objectValues(n);return v(o,{expected:k.joinValues(b),received:o.parsedType,code:g.invalid_type}),E}if(!this._cache)this._cache=new Set(k.getValidEnumValues(this._def.values));if(!this._cache.has(t.data)){let b=k.objectValues(n);return v(o,{received:o.data,code:g.invalid_enum_value,options:b}),E}return B(t.data)}get enum(){return this._def.values}};ct.create=(t,n)=>{return new ct({values:t,typeName:H.ZodNativeEnum,...Y(n)})};nt=class nt extends M{unwrap(){return this._def.type}_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==$.promise&&n.common.async===!1)return v(n,{code:g.invalid_type,expected:$.promise,received:n.parsedType}),E;let o=n.parsedType===$.promise?n.data:Promise.resolve(n.data);return B(o.then((b)=>{return this._def.type.parseAsync(b,{path:n.path,errorMap:n.common.contextualErrorMap})}))}};nt.create=(t,n)=>{return new nt({type:t,typeName:H.ZodPromise,...Y(n)})};j=class j extends M{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===H.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){let{status:n,ctx:o}=this._processInputParams(t),b=this._def.effect||null,l={addIssue:(a)=>{if(v(o,a),a.fatal)n.abort();else n.dirty()},get path(){return o.path}};if(l.addIssue=l.addIssue.bind(l),b.type==="preprocess"){let a=b.transform(o.data,l);if(o.common.async)return Promise.resolve(a).then(async(f)=>{if(n.value==="aborted")return E;let h=await this._def.schema._parseAsync({data:f,path:o.path,parent:o});if(h.status==="aborted")return E;if(h.status==="dirty")return e(h.value);if(n.value==="dirty")return e(h.value);return h});else{if(n.value==="aborted")return E;let f=this._def.schema._parseSync({data:a,path:o.path,parent:o});if(f.status==="aborted")return E;if(f.status==="dirty")return e(f.value);if(n.value==="dirty")return e(f.value);return f}}if(b.type==="refinement"){let a=(f)=>{let h=b.refinement(f,l);if(o.common.async)return Promise.resolve(h);if(h instanceof Promise)throw Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return f};if(o.common.async===!1){let f=this._def.schema._parseSync({data:o.data,path:o.path,parent:o});if(f.status==="aborted")return E;if(f.status==="dirty")n.dirty();return a(f.value),{status:n.value,value:f.value}}else return this._def.schema._parseAsync({data:o.data,path:o.path,parent:o}).then((f)=>{if(f.status==="aborted")return E;if(f.status==="dirty")n.dirty();return a(f.value).then(()=>{return{status:n.value,value:f.value}})})}if(b.type==="transform")if(o.common.async===!1){let a=this._def.schema._parseSync({data:o.data,path:o.path,parent:o});if(!P(a))return E;let f=b.transform(a.value,l);if(f instanceof Promise)throw Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:f}}else return this._def.schema._parseAsync({data:o.data,path:o.path,parent:o}).then((a)=>{if(!P(a))return E;return Promise.resolve(b.transform(a.value,l)).then((f)=>({status:n.value,value:f}))});k.assertNever(b)}};j.create=(t,n,o)=>{return new j({schema:t,typeName:H.ZodEffects,effect:n,...Y(o)})};j.createWithPreprocess=(t,n,o)=>{return new j({schema:n,effect:{type:"preprocess",transform:t},typeName:H.ZodEffects,...Y(o)})};d=class d extends M{_parse(t){if(this._getType(t)===$.undefined)return B(void 0);return this._def.innerType._parse(t)}unwrap(){return this._def.innerType}};d.create=(t,n)=>{return new d({innerType:t,typeName:H.ZodOptional,...Y(n)})};u=class u extends M{_parse(t){if(this._getType(t)===$.null)return B(null);return this._def.innerType._parse(t)}unwrap(){return this._def.innerType}};u.create=(t,n)=>{return new u({innerType:t,typeName:H.ZodNullable,...Y(n)})};_t=class _t extends M{_parse(t){let{ctx:n}=this._processInputParams(t),o=n.data;if(n.parsedType===$.undefined)o=this._def.defaultValue();return this._def.innerType._parse({data:o,path:n.path,parent:n})}removeDefault(){return this._def.innerType}};_t.create=(t,n)=>{return new _t({innerType:t,typeName:H.ZodDefault,defaultValue:typeof n.default==="function"?n.default:()=>n.default,...Y(n)})};At=class At extends M{_parse(t){let{ctx:n}=this._processInputParams(t),o={...n,common:{...n.common,issues:[]}},b=this._def.innerType._parse({data:o.data,path:o.path,parent:{...o}});if(bt(b))return b.then((l)=>{return{status:"valid",value:l.status==="valid"?l.value:this._def.catchValue({get error(){return new m(o.common.issues)},input:o.data})}});else return{status:"valid",value:b.status==="valid"?b.value:this._def.catchValue({get error(){return new m(o.common.issues)},input:o.data})}}removeCatch(){return this._def.innerType}};At.create=(t,n)=>{return new At({innerType:t,typeName:H.ZodCatch,catchValue:typeof n.catch==="function"?n.catch:()=>n.catch,...Y(n)})};Qt=class Qt extends M{_parse(t){if(this._getType(t)!==$.nan){let o=this._getOrReturnCtx(t);return v(o,{code:g.invalid_type,expected:$.nan,received:o.parsedType}),E}return{status:"valid",value:t.data}}};Qt.create=(t)=>{return new Qt({typeName:H.ZodNaN,...Y(t)})};bb=Symbol("zod_brand");Nt=class Nt extends M{_parse(t){let{ctx:n}=this._processInputParams(t),o=n.data;return this._def.type._parse({data:o,path:n.path,parent:n})}unwrap(){return this._def.type}};Gt=class Gt extends M{_parse(t){let{status:n,ctx:o}=this._processInputParams(t);if(o.common.async)return(async()=>{let l=await this._def.in._parseAsync({data:o.data,path:o.path,parent:o});if(l.status==="aborted")return E;if(l.status==="dirty")return n.dirty(),e(l.value);else return this._def.out._parseAsync({data:l.value,path:o.path,parent:o})})();else{let b=this._def.in._parseSync({data:o.data,path:o.path,parent:o});if(b.status==="aborted")return E;if(b.status==="dirty")return n.dirty(),{status:"dirty",value:b.value};else return this._def.out._parseSync({data:b.value,path:o.path,parent:o})}}static create(t,n){return new Gt({in:t,out:n,typeName:H.ZodPipeline})}};qt=class qt extends M{_parse(t){let n=this._def.innerType._parse(t),o=(b)=>{if(P(b))b.value=Object.freeze(b.value);return b};return bt(n)?n.then((b)=>o(b)):o(n)}unwrap(){return this._def.innerType}};qt.create=(t,n)=>{return new qt({innerType:t,typeName:H.ZodReadonly,...Y(n)})};lb={object:G.lazycreate};(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly"})(H||(H={}));_0=O.create,A0=C.create,fb=Qt.create,hb=y.create,q0=ft.create,rb=s.create,gb=Mt.create,$b=ht.create,vb=rt.create,wb=z.create,cb=T.create,_b=N.create,Ab=kt.create,qb=W.create,Eb=G.create,Hb=G.strictCreate,xb=gt.create,Yb=Vt.create,Mb=$t.create,kb=K.create,Xb=Xt.create,Sb=St.create,Qb=tt.create,Gb=at.create,Jb=vt.create,Lb=wt.create,Fb=Z.create,Bb=ct.create,mb=nt.create,Rb=j.create,Db=d.create,Ob=u.create,Wb=j.createWithPreprocess,db=Gt.create,Nb={string:(t)=>O.create({...t,coerce:!0}),number:(t)=>C.create({...t,coerce:!0}),boolean:(t)=>ft.create({...t,coerce:!0}),bigint:(t)=>y.create({...t,coerce:!0}),date:(t)=>s.create({...t,coerce:!0})},Kb=E});var w={};Q(w,{void:()=>Ab,util:()=>k,unknown:()=>cb,union:()=>xb,undefined:()=>$b,tuple:()=>kb,transformer:()=>Rb,symbol:()=>gb,string:()=>_0,strictObject:()=>Hb,setErrorMap:()=>Do,set:()=>Qb,record:()=>Xb,quotelessJson:()=>mo,promise:()=>mb,preprocess:()=>Wb,pipeline:()=>db,ostring:()=>Ub,optional:()=>Db,onumber:()=>jb,oboolean:()=>Vb,objectUtil:()=>qn,object:()=>Eb,number:()=>A0,nullable:()=>Ob,null:()=>vb,never:()=>_b,nativeEnum:()=>Bb,nan:()=>fb,map:()=>Sb,makeIssue:()=>Yt,literal:()=>Lb,lazy:()=>Jb,late:()=>lb,isValid:()=>P,isDirty:()=>jt,isAsync:()=>bt,isAborted:()=>Ut,intersection:()=>Mb,instanceof:()=>ab,getParsedType:()=>V,getErrorMap:()=>ot,function:()=>Gb,enum:()=>Fb,effect:()=>Rb,discriminatedUnion:()=>Yb,defaultErrorMap:()=>p,datetimeRegex:()=>v0,date:()=>rb,custom:()=>c0,coerce:()=>Nb,boolean:()=>q0,bigint:()=>hb,array:()=>qb,any:()=>wb,addIssueToContext:()=>v,ZodVoid:()=>kt,ZodUnknown:()=>T,ZodUnion:()=>gt,ZodUndefined:()=>ht,ZodType:()=>M,ZodTuple:()=>K,ZodTransformer:()=>j,ZodSymbol:()=>Mt,ZodString:()=>O,ZodSet:()=>tt,ZodSchema:()=>M,ZodRecord:()=>Xt,ZodReadonly:()=>qt,ZodPromise:()=>nt,ZodPipeline:()=>Gt,ZodParsedType:()=>$,ZodOptional:()=>d,ZodObject:()=>G,ZodNumber:()=>C,ZodNullable:()=>u,ZodNull:()=>rt,ZodNever:()=>N,ZodNativeEnum:()=>ct,ZodNaN:()=>Qt,ZodMap:()=>St,ZodLiteral:()=>wt,ZodLazy:()=>vt,ZodIssueCode:()=>g,ZodIntersection:()=>$t,ZodFunction:()=>at,ZodFirstPartyTypeKind:()=>H,ZodError:()=>m,ZodEnum:()=>Z,ZodEffects:()=>j,ZodDiscriminatedUnion:()=>Vt,ZodDefault:()=>_t,ZodDate:()=>s,ZodCatch:()=>At,ZodBranded:()=>Nt,ZodBoolean:()=>ft,ZodBigInt:()=>y,ZodArray:()=>W,ZodAny:()=>z,Schema:()=>M,ParseStatus:()=>F,OK:()=>B,NEVER:()=>Kb,INVALID:()=>E,EMPTY_PATH:()=>Oo,DIRTY:()=>e,BRAND:()=>bb});var Mn=x(()=>{dt();Hn();a0();xt();E0();Wt()});var H0=x(()=>{Mn();Mn()});function kn(t){if(t===null||typeof t!=="object")return t;if(Array.isArray(t))return t.map(kn);let n={};for(let o of Object.keys(t))n[o]=kn(t[o]);return n}var pb,wa;var x0=x(()=>{pb={validation:{trimStrings:!1,emptyAsNullDefault:!1},security:{csrf:{enabled:!0,excludePaths:[],sameSite:"Strict",secure:!1},rateLimit:{enabled:!0,windowMs:60000,maxRequests:60,excludePaths:[]}},hooks:{onValidationError:null,onSecurityViolation:null,onRateLimit:null,onDatabaseError:null,onRequest:null}},wa=kn(pb)});class Jt{static validate(t,n){try{return{success:!0,data:t.parse(n)}}catch(o){if(o instanceof w.ZodError){let b={};return o.errors.forEach((l)=>{let a=l.path.join(".");b[a]=l.message}),{success:!1,errors:b}}return{success:!1,errors:{general:"Validation failed"}}}}static validateField(t,n){try{return t.parse(n),{success:!0}}catch(o){if(o instanceof w.ZodError)return{success:!1,error:o.errors[0]?.message||"Invalid value"};return{success:!1,error:"Validation failed"}}}static getFieldError(t,n){if(t.success)return null;return t.errors?.[n]||null}static hasFieldError(t,n){return!!this.getFieldError(t,n)}}var Y0,i;var Xn=x(()=>{H0();x0();Y0={login:w.object({email:w.string().min(1,"Email is required").email("Please enter a valid email address"),password:w.string().min(8,"Password must be at least 8 characters").regex(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/,"Password must contain at least one uppercase letter, one lowercase letter, and one number")}),register:w.object({name:w.string().min(2,"Name must be at least 2 characters").max(50,"Name must be less than 50 characters").regex(/^[a-zA-Z\s'-]+$/,"Name can only contain letters, spaces, hyphens, and apostrophes"),email:w.string().min(1,"Email is required").email("Please enter a valid email address"),password:w.string().min(8,"Password must be at least 8 characters").regex(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])/,"Password must contain uppercase, lowercase, number, and special character"),confirmPassword:w.string()}).refine((t)=>t.password===t.confirmPassword,{message:"Passwords don't match",path:["confirmPassword"]}),auth:{register:w.object({action:w.literal("register"),email:w.string().min(1,"Email is required").email("Please enter a valid email address"),username:w.string().min(3,"Username must be at least 3 characters").max(30,"Username must be less than 30 characters"),password:w.string().min(8,"Password must be at least 8 characters"),full_name:w.string().min(2,"Full name is required").max(100,"Full name is too long")}),login:w.object({action:w.literal("login"),email:w.string().min(1,"Email is required").email("Please enter a valid email address"),password:w.string().min(8,"Password must be at least 8 characters")}),logout:w.object({action:w.literal("logout")}),action:w.discriminatedUnion("action",[w.object({action:w.literal("register")}).merge(w.object({email:w.string().min(1,"Email is required").email("Please enter a valid email address"),username:w.string().min(3,"Username must be at least 3 characters").max(30,"Username must be less than 30 characters"),password:w.string().min(8,"Password must be at least 8 characters"),full_name:w.string().min(2,"Full name is required").max(100,"Full name is too long")})),w.object({action:w.literal("login")}).merge(w.object({email:w.string().min(1,"Email is required").email("Please enter a valid email address"),password:w.string().min(8,"Password must be at least 8 characters")})),w.object({action:w.literal("logout")})])},contact:w.object({name:w.string().min(2,"Name must be at least 2 characters").max(100,"Name is too long"),email:w.string().email("Please enter a valid email address"),message:w.string().min(10,"Message must be at least 10 characters").max(1000,"Message is too long")}),email:w.string().min(1,"Email is required").email("Please enter a valid email address"),password:w.string().min(8,"Password must be at least 8 characters").regex(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/,"Password must contain uppercase, lowercase, and number"),phone:w.string().regex(/^[\+]?[1-9][\d]{0,15}$/,"Please enter a valid phone number"),url:w.string().min(1,"URL is required").url("Please enter a valid URL"),required:w.string().min(1,"This field is required"),positiveNumber:w.number().positive("Must be a positive number"),integer:w.number().int("Must be a whole number"),futureDate:w.date().min(new Date,"Date must be in the future"),imageFile:w.instanceof(File).refine((t)=>t.size<=5242880,"File size must be less than 5MB").refine((t)=>["image/jpeg","image/png","image/gif","image/webp"].includes(t.type),"File must be a JPEG, PNG, GIF, or WebP image"),userProfile:w.object({full_name:w.string().min(2,"Full name must be at least 2 characters").max(100,"Full name is too long").optional(),bio:w.string().max(500,"Bio must be less than 500 characters").nullable().optional(),avatar_url:w.string().url("Please enter a valid URL").nullable().optional(),theme:w.enum(["africanity","dark","light","system"]).optional(),language:w.string().min(2).max(10).optional()}),project:w.object({name:w.string().min(1,"Project name is required").max(100,"Project name is too long"),description:w.string().max(1000,"Description is too long").nullable().optional(),repository_url:w.string().url("Please enter a valid repository URL").nullable().optional(),demo_url:w.string().url("Please enter a valid demo URL").nullable().optional(),tags:w.array(w.string()).optional(),is_public:w.boolean().optional()})};i={required:(t="This field is required")=>w.string().min(1,t),email:(t="Please enter a valid email address")=>w.string().email(t),minLength:(t,n)=>w.string().min(t,n||`Must be at least ${t} characters`),maxLength:(t,n)=>w.string().max(t,n||`Must be less than ${t} characters`),pattern:(t,n)=>w.string().regex(t,n),numeric:(t="Must be a number")=>w.string().regex(/^\d+$/,t),phone:(t="Please enter a valid phone number")=>w.string().regex(/^[\+]?[1-9][\d]{0,15}$/,t),url:(t="Please enter a valid URL")=>w.string().min(1,"URL is required").url(t)}});var M0={};Q(M0,{default:()=>Ib,AfriInput:()=>Kt});var Kt,Ib;var k0=x(()=>{S();Xn();Kt=class Kt extends c{static get observedAttributes(){return["type","name","label","placeholder","error","helper","theme","icon","required","aria-label","aria-describedby","validation"]}constructor(){super();this._uniqueId=Math.random().toString(36).substr(2,9),this.render()}get value(){return this.shadowRoot.querySelector("input")?.value||""}set value(t){let n=this.shadowRoot.querySelector("input");if(n)n.value=t}connectedCallback(){this._attachInputListeners(),this.loadStyles()}attributeChangedCallback(){this.render(),this._attachInputListeners()}_attachInputListeners(){let t=this.shadowRoot.querySelector("input");if(!t)return;t.addEventListener("input",(n)=>{if(this.emit("af-input",{value:n.target.value}),this.hasAttribute("error"))this.removeAttribute("error")}),t.addEventListener("blur",()=>{this.emit("af-blur",{value:this.value}),this._validateInput()})}_setupValidation(){if(!this.getAttribute("validation"))return;let n=this.shadowRoot.querySelector("input");if(!n)return;n.addEventListener("input",()=>{if(this.hasAttribute("error"))this.removeAttribute("error")})}_validateInput(){let t=this.shadowRoot.querySelector("input");if(!t)return;let n=this.getAttribute("validation"),o=t.value;if(this.hasAttribute("required")&&!o.trim()){this.setAttribute("error","This field is required");return}if(n&&o.trim()){let l=this._getValidationSchema(n);if(l){let a=Jt.validateField(l,o);if(!a.success)this.setAttribute("error",a.error);else this.removeAttribute("error")}}}_getValidationSchema(t){let n={email:i.email(),password:i.password(),phone:i.phone(),url:i.url(),required:i.required()};if(t.includes(":")){let[o,b]=t.split(":"),l=parseInt(b);switch(o){case"minLength":return i.minLength(l);case"maxLength":return i.maxLength(l);case"pattern":return i.pattern(new RegExp(b),"Invalid format")}}return n[t]||null}attributeChangedCallback(){this.render()}render(){let t=this.getAttribute("type")||"text",n=this.getAttribute("name")||"",o=this.getAttribute("label")||"",b=this.getAttribute("placeholder")||"",l=this.getAttribute("error")||"",a=this.getAttribute("helper")||"",f=this.getAttribute("theme")||"tanzania",h=this.getAttribute("icon")||"",r=this.hasAttribute("required"),A=this.getAttribute("aria-label"),X=this.getAttribute("aria-describedby"),L={tanzania:{focus:"#1EB53A",error:"#DC3545"},maasai:{focus:"#FF0000",error:"#8B0000"},ndebele:{focus:"#4169E1",error:"#DC143C"}},J=L[f]||L.tanzania,D=[];if(l)D.push(`error-${this._uniqueId}`);else if(a)D.push(`helper-${this._uniqueId}`);if(X)D.push(...X.split(" "));let vn=D.length>0?`aria-describedby="${D.join(" ")}"`:"";this.shadowRoot.innerHTML=`
379
+ <style>
380
+ :host {
381
+ display: block;
382
+ font-family: 'Inter', system-ui, sans-serif;
383
+ }
384
+
385
+ .input-wrapper {
386
+ position: relative;
387
+ }
388
+
389
+ label {
390
+ display: block;
391
+ font-weight: 500;
392
+ margin-bottom: 5px;
393
+ color: #333;
394
+ font-size: 14px;
395
+ }
396
+
397
+ .required-star {
398
+ color: ${J.error};
399
+ margin-left: 2px;
400
+ }
401
+
402
+ .input-container {
403
+ position: relative;
404
+ display: flex;
405
+ align-items: center;
406
+ }
407
+
408
+ input {
409
+ width: 100%;
410
+ padding: 10px 13px;
411
+ ${h?"padding-left: 40px;":""}
412
+ font-size: 15px;
413
+ border: 2px solid #ddd;
414
+ border-radius: 5px;
415
+ transition: all 200ms ease;
416
+ font-family: inherit;
417
+ box-sizing: border-box;
418
+ }
419
+
420
+ input:focus {
421
+ outline: none;
422
+ border-color: ${l?J.error:J.focus};
423
+ box-shadow: 0 0 0 3px ${l?J.error+"20":J.focus+"20"};
424
+ }
425
+
426
+ input.has-error {
427
+ border-color: ${J.error};
428
+ }
429
+
430
+ .icon {
431
+ position: absolute;
432
+ left: 13px;
433
+ color: #888;
434
+ font-size: 16px;
435
+ pointer-events: none;
436
+ }
437
+
438
+ .helper-text {
439
+ font-size: 12px;
440
+ margin-top: 4px;
441
+ color: #666;
442
+ }
443
+
444
+ .error-text {
445
+ font-size: 12px;
446
+ margin-top: 4px;
447
+ color: ${J.error};
448
+ }
449
+ </style>
450
+
451
+ <div class="input-wrapper">
452
+ ${o?`<label for="input-${this._uniqueId}">${o}${r?'<span class="required-star">*</span>':""}</label>`:""}
453
+ <div class="input-container">
454
+ ${h?`<span class="icon">${h}</span>`:""}
455
+ <input
456
+ id="input-${this._uniqueId}"
457
+ name="${n}"
458
+ type="${t}"
459
+ placeholder="${b}"
460
+ class="${l?"has-error":""}"
461
+ ${r?"required":""}
462
+ ${A?`aria-label="${A}"`:""}
463
+ ${l?'aria-invalid="true"':""}
464
+ ${vn}
465
+ />
466
+ </div>
467
+ ${l?`<div id="error-${this._uniqueId}" class="error-text" role="alert">${l}</div>`:""}
468
+ ${a&&!l?`<div id="helper-${this._uniqueId}" class="helper-text">${a}</div>`:""}
469
+ </div>
470
+ `}};_("af-input",Kt);Ib=Kt});var X0={};Q(X0,{default:()=>ub,AfriAlert:()=>pt});var pt,ub;var S0=x(()=>{S();pt=class pt extends c{static get observedAttributes(){return["type","title","dismissible"]}constructor(){super();this.render()}connectedCallback(){this.shadowRoot.querySelector(".close-btn")?.addEventListener("click",()=>{this.remove(),this.emit("af-dismiss")})}attributeChangedCallback(){this.render()}render(){let t=this.getAttribute("type")||"info",n=this.getAttribute("title")||"",o=this.hasAttribute("dismissible"),b={success:{bg:"#d4edda",border:"#1EB53A",text:"#155724",icon:"✓"},warning:{bg:"#fff3cd",border:"#FCD116",text:"#856404",icon:"⚠"},error:{bg:"#f8d7da",border:"#DC3545",text:"#721c24",icon:"✕"},info:{bg:"#d1ecf1",border:"#00A3DD",text:"#0c5460",icon:"ℹ"}},l=b[t]||b.info;this.shadowRoot.innerHTML=`
471
+ <style>
472
+ :host {
473
+ display: block;
474
+ font-family: 'Inter', system-ui, sans-serif;
475
+ }
476
+
477
+ .alert {
478
+ padding: 13px 21px;
479
+ border-radius: 5px;
480
+ border-left: 4px solid ${l.border};
481
+ background: ${l.bg};
482
+ color: ${l.text};
483
+ display: flex;
484
+ align-items: flex-start;
485
+ gap: 13px;
486
+ animation: slideIn 300ms ease-out;
487
+ }
488
+
489
+ @keyframes slideIn {
490
+ from {
491
+ opacity: 0;
492
+ transform: translateY(-10px);
493
+ }
494
+ to {
495
+ opacity: 1;
496
+ transform: translateY(0);
497
+ }
498
+ }
499
+
500
+ .icon {
501
+ font-size: 18px;
502
+ flex-shrink: 0;
503
+ width: 24px;
504
+ height: 24px;
505
+ display: flex;
506
+ align-items: center;
507
+ justify-content: center;
508
+ background: ${l.border};
509
+ color: white;
510
+ border-radius: 50%;
511
+ }
512
+
513
+ .content {
514
+ flex: 1;
515
+ }
516
+
517
+ .title {
518
+ font-weight: 600;
519
+ margin-bottom: 3px;
520
+ }
521
+
522
+ .close-btn {
523
+ background: none;
524
+ border: none;
525
+ font-size: 18px;
526
+ cursor: pointer;
527
+ color: ${l.text};
528
+ opacity: 0.7;
529
+ padding: 0;
530
+ line-height: 1;
531
+ }
532
+
533
+ .close-btn:hover {
534
+ opacity: 1;
535
+ }
536
+
537
+ ::slotted(*) {
538
+ margin: 0;
539
+ }
540
+ </style>
541
+
542
+ <div class="alert" role="alert">
543
+ <span class="icon">${l.icon}</span>
544
+ <div class="content">
545
+ ${n?`<div class="title">${n}</div>`:""}
546
+ <slot></slot>
547
+ </div>
548
+ ${o?'<button class="close-btn" aria-label="Dismiss">×</button>':""}
549
+ </div>
550
+ `}};_("af-alert",pt);ub=pt});var Q0={};Q(Q0,{AfriGrid:()=>Sn});function ib(t,n){let{sidebarSide:o="left",sidebarWidth:b="280px",minWidth:l="280px",gap:a="24px",columns:f,rows:h,align:r="stretch",justify:A="stretch",dense:X=!1}=n,L=X?"dense":"",J=`
551
+ align-items: ${r};
552
+ justify-items: ${A};
553
+ gap: ${a};
554
+ `;switch(t){case"sidebar":return o==="right"?`display: grid; grid-template-columns: 1fr ${b}; ${J}`:`display: grid; grid-template-columns: ${b} 1fr; ${J}`;case"holy-grail":return`
555
+ display: grid;
556
+ grid-template-columns: ${b} 1fr ${b};
557
+ grid-template-rows: auto 1fr auto;
558
+ ${J}
559
+ `;case"bento":return`
560
+ display: grid;
561
+ grid-template-columns: repeat(12, 1fr);
562
+ grid-auto-rows: minmax(120px, auto);
563
+ grid-auto-flow: row ${L};
564
+ ${J}
565
+ `;case"masonry":return`
566
+ display: grid;
567
+ grid-template-columns: repeat(auto-fill, minmax(${l}, 1fr));
568
+ grid-template-rows: masonry;
569
+ grid-auto-flow: row ${L};
570
+ ${J}
571
+ `;case"auto":default:{let D=f?`repeat(${f}, 1fr)`:`repeat(auto-fit, minmax(${l}, 1fr))`,vn=h?`repeat(${h}, 1fr)`:"auto";return`
572
+ display: grid;
573
+ grid-template-columns: ${D};
574
+ ${h?`grid-template-rows: ${vn};`:""}
575
+ grid-auto-flow: row ${L};
576
+ ${J}
577
+ `}}}var Sn;var G0=x(()=>{S();Sn=class Sn extends c{static get observedAttributes(){return["min-width","gap","columns","rows","layout","align","justify","dense","sidebar-side","sidebar-width"]}attributeChangedCallback(){if(this.isConnected)this.render()}_getAttrs(){return{minWidth:this.getAttribute("min-width")||"280px",gap:this.getAttribute("gap")||"24px",columns:this.getAttribute("columns")||null,rows:this.getAttribute("rows")||null,layout:this.getAttribute("layout")||"auto",align:this.getAttribute("align")||"stretch",justify:this.getAttribute("justify")||"stretch",dense:this.hasAttribute("dense"),sidebarSide:this.getAttribute("sidebar-side")||"left",sidebarWidth:this.getAttribute("sidebar-width")||"280px"}}_buildResponsiveBreakpoints(t){if(t.layout!=="auto"&&t.layout!=="masonry")return"";return`
578
+ @media (max-width: 768px) {
579
+ .grid {
580
+ grid-template-columns: repeat(auto-fit, minmax(min(${t.minWidth}, 100%), 1fr));
581
+ }
582
+ }
583
+ @media (max-width: 480px) {
584
+ .grid {
585
+ grid-template-columns: 1fr;
586
+ }
587
+ }
588
+ `}_buildSidebarResponsive(t){if(t.layout!=="sidebar"&&t.layout!=="holy-grail")return"";return`
589
+ @media (max-width: 768px) {
590
+ .grid {
591
+ grid-template-columns: 1fr;
592
+ }
593
+ }
594
+ `}render(){let t=this._getAttrs(),n=ib(t.layout,t),o=this._buildResponsiveBreakpoints(t)+this._buildSidebarResponsive(t);this.shadowRoot.innerHTML=R`
595
+ <style>
596
+ :host {
597
+ display: block;
598
+ width: 100%;
599
+ box-sizing: border-box;
600
+ }
601
+
602
+ .grid {
603
+ ${n}
604
+ width: 100%;
605
+ box-sizing: border-box;
606
+ }
607
+
608
+ /* Slotted children base styles */
609
+ ::slotted(*) {
610
+ min-width: 0; /* Prevent overflow in grid context */
611
+ }
612
+
613
+ ${o}
614
+ </style>
615
+
616
+ <div
617
+ class="grid"
618
+ role="list"
619
+ part="grid"
620
+ aria-label="${this.getAttribute("aria-label")||"Grid layout"}"
621
+ >
622
+ <slot></slot>
623
+ </div>
624
+ `}connectedCallback(){this.render(),this._setupResizeObserver()}disconnectedCallback(){if(this._resizeObserver)this._resizeObserver.disconnect()}_setupResizeObserver(){if(typeof ResizeObserver>"u")return;let t=this.offsetWidth;this._resizeObserver=new ResizeObserver((n)=>{for(let o of n){let b=o.contentRect.width;if(Math.abs(b-t)>10)t=b,this.emit("af-grid-resize",{width:b,height:o.contentRect.height,layout:this.getAttribute("layout")||"auto"})}}),this._resizeObserver.observe(this)}setLayout(t){this.setAttribute("layout",t)}setColumns(t){this.setAttribute("columns",String(t))}setDense(t){if(t)this.setAttribute("dense","");else this.removeAttribute("dense")}};_("af-grid",Sn)});var J0={};Q(J0,{AfriSection:()=>Qn});var Qn;var L0=x(()=>{S();Qn=class Qn extends c{render(){let t=this.getAttribute("variant")||"default",n=this.getAttribute("title");this.shadowRoot.innerHTML=R`
625
+ <style>
626
+ :host { display: block; width: 100%; }
627
+ .section {
628
+ padding: 100px 5%;
629
+ max-width: var(--page-max-width, 1280px);
630
+ margin: 0 auto;
631
+ }
632
+ .section-header {
633
+ text-align: center;
634
+ margin-bottom: 60px;
635
+ }
636
+ .section-header h2 {
637
+ font-size: 3rem;
638
+ font-family: 'Outfit', sans-serif;
639
+ margin: 0;
640
+ color: var(--text-primary);
641
+ }
642
+
643
+ :host([variant="muted"]) { background: var(--bg-surface, rgba(30, 41, 59, 0.3)); }
644
+ :host([variant="brand"]) {
645
+ background: linear-gradient(135deg, var(--bg-base) 0%, var(--bg-surface) 100%);
646
+ border-top: 1px solid var(--glass-border);
647
+ border-bottom: 1px solid var(--glass-border);
648
+ }
649
+ </style>
650
+ <section class="section">
651
+ ${n?R`
652
+ <div class="section-header">
653
+ <h2>${n}</h2>
654
+ </div>
655
+ `:""}
656
+ <slot></slot>
657
+ </section>
658
+ `}connectedCallback(){this.render()}};_("af-section",Qn)});var F0={};Q(F0,{default:()=>Pb,AfriIcon:()=>It});var It,Pb;var B0=x(()=>{S();It=class It extends c{static get observedAttributes(){return["name","size"]}connectedCallback(){this.render()}render(){let t=this.getAttribute("name")||"circle",n=this.getAttribute("size")||"24",b={check:'<path d="M20 6L9 17l-5-5" />',x:'<path d="M18 6L6 18M6 6l12 12" />',"arrow-right":'<path d="M5 12h14M12 5l7 7-7 7" />',menu:'<path d="M3 12h18M3 6h18M3 18h18" />',search:'<circle cx="11" cy="11" r="8" /><path d="M21 21l-4.35-4.35" />'}[t]||"";this.shadowRoot.innerHTML=`
659
+ <style>
660
+ :host { display: inline-flex; vertical-align: middle; }
661
+ svg { width: ${n}px; height: ${n}px; stroke: currentColor; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
662
+ </style>
663
+ <svg viewBox="0 0 24 24">${b}</svg>
664
+ `}};_("af-icon",It);Pb=It});var m0={};Q(m0,{default:()=>Tb,AfriAccordion:()=>ut});var ut,Tb;var R0=x(()=>{S();ut=class ut extends c{static get observedAttributes(){return["theme","multiple"]}constructor(){super();this._openItems=new Set,this._uniqueId=Math.random().toString(36).substr(2,9),this.render()}connectedCallback(){this._setupAccordion()}_setupAccordion(){this.shadowRoot.querySelectorAll(".accordion-header").forEach((n,o)=>{n.addEventListener("click",()=>{this._toggleItem(o)})})}_toggleItem(t){let n=this.hasAttribute("multiple");if(this._openItems.has(t))this._openItems.delete(t);else{if(!n)this._openItems.clear();this._openItems.add(t)}this.render(),this._setupAccordion(),this.emit("af-toggle",{index:t,open:this._openItems.has(t)})}attributeChangedCallback(){this.render(),this._setupAccordion()}render(){let t=this.getAttribute("theme")||"tanzania",n=this.querySelector('[slot="items"]'),o=n?Array.from(n.children):[],b={tanzania:{accent:"#1EB53A"},maasai:{accent:"#FF0000"},ndebele:{accent:"#4169E1"}},l=b[t]||b.tanzania;this.shadowRoot.innerHTML=`
665
+ <style>
666
+ :host {
667
+ display: block;
668
+ font-family: 'Inter', system-ui, sans-serif;
669
+ }
670
+
671
+ .accordion {
672
+ border-radius: 8px;
673
+ overflow: hidden;
674
+ box-shadow: 0 2px 8px rgba(0,0,0,0.1);
675
+ }
676
+
677
+ .accordion-item {
678
+ border-bottom: 1px solid #eee;
679
+ }
680
+
681
+ .accordion-item:last-child {
682
+ border-bottom: none;
683
+ }
684
+
685
+ .accordion-header {
686
+ width: 100%;
687
+ padding: 16px 21px;
688
+ background: white;
689
+ border: none;
690
+ text-align: left;
691
+ font-family: inherit;
692
+ font-size: 15px;
693
+ font-weight: 600;
694
+ color: #333;
695
+ cursor: pointer;
696
+ display: flex;
697
+ justify-content: space-between;
698
+ align-items: center;
699
+ transition: all 200ms ease;
700
+ }
701
+
702
+ .accordion-header:hover {
703
+ background: #f8f9fa;
704
+ }
705
+
706
+ .accordion-header.active {
707
+ color: ${l.accent};
708
+ }
709
+
710
+ .accordion-icon {
711
+ font-size: 12px;
712
+ transition: transform 300ms ease;
713
+ }
714
+
715
+ .accordion-header.active .accordion-icon {
716
+ transform: rotate(180deg);
717
+ }
718
+
719
+ .accordion-content {
720
+ max-height: 0;
721
+ overflow: hidden;
722
+ background: #fafafa;
723
+ transition: max-height 300ms ease-out;
724
+ }
725
+
726
+ .accordion-content.open {
727
+ max-height: 500px;
728
+ }
729
+
730
+ .accordion-body {
731
+ padding: 16px 21px;
732
+ color: #555;
733
+ line-height: 1.6;
734
+ }
735
+
736
+ ::slotted([slot="items"]) {
737
+ display: none;
738
+ }
739
+ </style>
740
+
741
+ <div class="accordion">
742
+ ${o.map((a,f)=>{let h=this._openItems.has(f),r=`accordion-header-${this._uniqueId}-${f}`,A=`accordion-panel-${this._uniqueId}-${f}`;return`
743
+ <div class="accordion-item">
744
+ <button
745
+ class="accordion-header ${h?"active":""}"
746
+ aria-expanded="${h}"
747
+ aria-controls="${A}"
748
+ id="${r}"
749
+ >
750
+ <span>${a.getAttribute("title")||`Item ${f+1}`}</span>
751
+ <span class="accordion-icon">▼</span>
752
+ </button>
753
+ <div
754
+ class="accordion-content ${h?"open":""}"
755
+ id="${A}"
756
+ role="region"
757
+ aria-labelledby="${r}"
758
+ >
759
+ <div class="accordion-body">
760
+ ${a.innerHTML}
761
+ </div>
762
+ </div>
763
+ </div>
764
+ `}).join("")}
765
+ </div>
766
+ <slot name="items"></slot>
767
+ `}};_("af-accordion",ut);Tb=ut});var D0={};Q(D0,{default:()=>Cb,AfriHero:()=>it});var it,Cb;var O0=x(()=>{S();cn();Dt();Et();it=class it extends c{static get observedAttributes(){return["title","subtitle","pattern","overlay"]}connectedCallback(){super.connectedCallback(),this.render(),this.loadStyles()}render(){let t=this.getAttribute("title")||"AfriCode",n=this.getAttribute("subtitle")||"",o=this.getAttribute("pattern")||"",b=this.getAttribute("variant")||"default";this.shadowRoot.innerHTML=`
768
+ <style>
769
+ :host {
770
+ display: flex;
771
+ flex-direction: column;
772
+ align-items: center;
773
+ justify-content: center;
774
+ text-align: center;
775
+ padding: 120px 5%;
776
+ min-height: 60vh;
777
+ background: var(--bg-base, #020617);
778
+ color: var(--text-main, white);
779
+ position: relative;
780
+ overflow: hidden;
781
+ }
782
+
783
+ .content {
784
+ position: relative;
785
+ z-index: 10;
786
+ max-width: 900px;
787
+ opacity: 0;
788
+ transform: translateY(20px);
789
+ animation: fadeInUp 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards;
790
+ }
791
+
792
+ @keyframes fadeInUp {
793
+ to { opacity: 1; transform: translateY(0); }
794
+ }
795
+
796
+ h1 {
797
+ font-family: 'Outfit', 'Space Grotesk', sans-serif;
798
+ font-size: clamp(3rem, 8vw, 5rem);
799
+ font-weight: 900;
800
+ line-height: 1.1;
801
+ margin-bottom: 24px;
802
+ letter-spacing: -0.04em;
803
+ background: linear-gradient(135deg, var(--text-main, #fff) 30%, var(--text-muted, rgba(255,255,255,0.5)) 100%);
804
+ -webkit-background-clip: text;
805
+ -webkit-text-fill-color: transparent;
806
+ }
807
+
808
+ p {
809
+ font-family: 'Inter', sans-serif;
810
+ font-size: clamp(1.1rem, 2vw, 1.5rem);
811
+ color: var(--text-secondary, #94a3b8);
812
+ line-height: 1.5;
813
+ margin-bottom: 40px;
814
+ max-width: 700px;
815
+ margin-left: auto;
816
+ margin-right: auto;
817
+ }
818
+
819
+ /* Visual Accents */
820
+ .aura {
821
+ position: absolute;
822
+ inset: 0;
823
+ background: radial-gradient(circle at 50% -20%, rgba(30,181,58,0.15), transparent 70%);
824
+ z-index: 1;
825
+ }
826
+
827
+ .mesh {
828
+ position: absolute;
829
+ inset: 0;
830
+ background-image: radial-gradient(rgba(255,255,255,0.03) 1px, transparent 1px);
831
+ background-size: 40px 40px;
832
+ z-index: 2;
833
+ }
834
+
835
+ ${o?`
836
+ .pattern-bg {
837
+ position: absolute;
838
+ inset: 0;
839
+ background-image: url('${o}');
840
+ background-size: cover;
841
+ background-position: center;
842
+ opacity: 0.15;
843
+ z-index: 1;
844
+ }
845
+ `:""}
846
+
847
+ ::slotted([slot="actions"]) {
848
+ display: flex;
849
+ gap: 16px;
850
+ justify-content: center;
851
+ flex-wrap: wrap;
852
+ }
853
+ </style>
854
+
855
+ <div class="aura"></div>
856
+ <div class="mesh"></div>
857
+ ${o?'<div class="pattern-bg"></div>':""}
858
+
859
+ <div class="content">
860
+ <h1>${t}</h1>
861
+ ${n?`<p>${n}</p>`:""}
862
+ <div class="actions">
863
+ <slot name="actions"></slot>
864
+ </div>
865
+ <slot></slot>
866
+ </div>
867
+ `}};_("af-hero",it);Cb=it});var W0={};Q(W0,{default:()=>yb,AfriTable:()=>Pt});var Pt,yb;var d0=x(()=>{S();Pt=class Pt extends c{static get observedAttributes(){return["theme","striped","hoverable"]}constructor(){super();this._columns=[],this._data=[],this._sortColumn=null,this._sortDirection="asc",this.render()}set columns(t){this._columns=t,this.render()}set data(t){this._data=t,this.render()}attributeChangedCallback(){this.render()}_handleSort(t){if(this._sortColumn===t)this._sortDirection=this._sortDirection==="asc"?"desc":"asc";else this._sortColumn=t,this._sortDirection="asc";this.emit("af-sort",{column:t,direction:this._sortDirection}),this.render()}_getSortedData(){if(!this._sortColumn)return this._data;return[...this._data].sort((t,n)=>{let o=t[this._sortColumn],b=n[this._sortColumn],l=this._sortDirection==="asc"?1:-1;if(typeof o==="number")return(o-b)*l;return String(o).localeCompare(String(b))*l})}render(){let t=this.getAttribute("theme")||"tanzania",n=this.hasAttribute("striped"),o=this.hasAttribute("hoverable"),b={tanzania:{header:"#1EB53A",text:"#FFFFFF",accent:"#FCD116"},maasai:{header:"#8B0000",text:"#FFFFFF",accent:"#FF0000"},ndebele:{header:"#4169E1",text:"#FFFFFF",accent:"#FFD700"}},l=b[t]||b.tanzania,a=this._getSortedData();this.shadowRoot.innerHTML=`
868
+ <style>
869
+ :host {
870
+ display: block;
871
+ font-family: 'Inter', system-ui, sans-serif;
872
+ }
873
+
874
+ .table-container {
875
+ overflow-x: auto;
876
+ border-radius: 8px;
877
+ box-shadow: 0 2px 8px rgba(0,0,0,0.1);
878
+ }
879
+
880
+ table {
881
+ width: 100%;
882
+ border-collapse: collapse;
883
+ background: white;
884
+ }
885
+
886
+ th {
887
+ background: ${l.header};
888
+ color: ${l.text};
889
+ padding: 13px;
890
+ text-align: left;
891
+ font-weight: 600;
892
+ cursor: pointer;
893
+ user-select: none;
894
+ white-space: nowrap;
895
+ }
896
+
897
+ th:hover {
898
+ filter: brightness(1.1);
899
+ }
900
+
901
+ th .sort-icon {
902
+ margin-left: 5px;
903
+ opacity: 0.7;
904
+ }
905
+
906
+ td {
907
+ padding: 13px;
908
+ border-bottom: 1px solid #eee;
909
+ }
910
+
911
+ ${n?`
912
+ tbody tr:nth-child(even) {
913
+ background: #f8f9fa;
914
+ }
915
+ `:""}
916
+
917
+ ${o?`
918
+ tbody tr:hover {
919
+ background: ${l.accent}20;
920
+ }
921
+ `:""}
922
+
923
+ .empty-state {
924
+ text-align: center;
925
+ padding: 34px;
926
+ color: #888;
927
+ }
928
+ </style>
929
+
930
+ <div class="table-container">
931
+ <table>
932
+ <thead>
933
+ <tr>
934
+ ${this._columns.map((f)=>`
935
+ <th data-column="${f.key}">
936
+ ${f.label}
937
+ <span class="sort-icon">
938
+ ${this._sortColumn===f.key?this._sortDirection==="asc"?"↑":"↓":"↕"}
939
+ </span>
940
+ </th>
941
+ `).join("")}
942
+ </tr>
943
+ </thead>
944
+ <tbody>
945
+ ${a.length?a.map((f)=>`
946
+ <tr>
947
+ ${this._columns.map((h)=>`<td>${f[h.key]??""}</td>`).join("")}
948
+ </tr>
949
+ `).join(""):`
950
+ <tr>
951
+ <td colspan="${this._columns.length}" class="empty-state">No data available</td>
952
+ </tr>
953
+ `}
954
+ </tbody>
955
+ </table>
956
+ </div>
957
+ `,this.shadowRoot.querySelectorAll("th").forEach((f)=>{f.addEventListener("click",()=>{this._handleSort(f.dataset.column)})})}};_("af-table",Pt);yb=Pt});var U0={};Q(U0,{default:()=>Zb,AfriModal:()=>Tt});var Tt,Zb;var j0=x(()=>{S();Tt=class Tt extends c{static get observedAttributes(){return["open","theme","size","aria-label","aria-labelledby"]}constructor(){super();this.render()}connectedCallback(){this._setupListeners()}_setupListeners(){this.shadowRoot.querySelector(".backdrop")?.addEventListener("click",(t)=>{if(t.target.classList.contains("backdrop"))this.close()}),this.shadowRoot.querySelector(".close-btn")?.addEventListener("click",()=>{this.close()}),document.addEventListener("keydown",(t)=>{if(t.key==="Escape"&&this.hasAttribute("open"))this.close()}),this.shadowRoot.addEventListener("keydown",(t)=>{if(t.key==="Tab"&&this.hasAttribute("open"))this._handleTabKey(t)})}_getFocusableElements(){let t=this.shadowRoot.querySelector(".modal"),n='button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',o=Array.from(t?.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')||[]),b=Array.from(this.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'));return[...o,...b]}_focusFirstFocusableElement(){let t=this._getFocusableElements();if(t.length>0)t[0].focus();else this.shadowRoot.querySelector(".close-btn")?.focus()}_handleTabKey(t){let n=this._getFocusableElements();if(n.length===0){t.preventDefault();return}let o=n[0],b=n[n.length-1];if(t.shiftKey){if(document.activeElement===o)t.preventDefault(),b.focus()}else if(document.activeElement===b)t.preventDefault(),o.focus()}open(){this.setAttribute("open",""),document.body.style.overflow="hidden",this._previousFocus=document.activeElement,this._focusFirstFocusableElement(),this.emit("af-open")}close(){if(this.removeAttribute("open"),document.body.style.overflow="",this._previousFocus&&this._previousFocus.focus)this._previousFocus.focus();this.emit("af-close")}attributeChangedCallback(t,n,o){if(this.render(),t==="open")this._setupListeners()}render(){let t=this.hasAttribute("open"),n=this.getAttribute("theme")||"tanzania",o=this.getAttribute("size")||"md",b={tanzania:{accent:"#1EB53A"},maasai:{accent:"#FF0000"},ndebele:{accent:"#4169E1"}},l=b[n]||b.tanzania,a={sm:"400px",md:"560px",lg:"720px",full:"95vw"},f=this.getAttribute("aria-label"),h=this.getAttribute("aria-labelledby")||"modal-title";this.shadowRoot.innerHTML=`
958
+ <style>
959
+ :host {
960
+ font-family: 'Inter', system-ui, sans-serif;
961
+ }
962
+
963
+ .backdrop {
964
+ position: fixed;
965
+ inset: 0;
966
+ background: rgba(0, 0, 0, 0.5);
967
+ display: ${t?"flex":"none"};
968
+ align-items: center;
969
+ justify-content: center;
970
+ z-index: 10000;
971
+ animation: fadeIn 200ms ease-out;
972
+ padding: 21px;
973
+ }
974
+
975
+ @keyframes fadeIn {
976
+ from { opacity: 0; }
977
+ to { opacity: 1; }
978
+ }
979
+
980
+ .modal {
981
+ background: white;
982
+ border-radius: 8px;
983
+ width: 100%;
984
+ max-width: ${a[o]||a.md};
985
+ max-height: 90vh;
986
+ overflow: hidden;
987
+ display: flex;
988
+ flex-direction: column;
989
+ animation: slideUp 300ms ease-out;
990
+ box-shadow: 0 10px 40px rgba(0,0,0,0.3);
991
+ }
992
+
993
+ @keyframes slideUp {
994
+ from {
995
+ opacity: 0;
996
+ transform: translateY(20px);
997
+ }
998
+ to {
999
+ opacity: 1;
1000
+ transform: translateY(0);
1001
+ }
1002
+ }
1003
+
1004
+ .modal-header {
1005
+ padding: 13px 21px;
1006
+ border-bottom: 1px solid #eee;
1007
+ display: flex;
1008
+ align-items: center;
1009
+ justify-content: space-between;
1010
+ }
1011
+
1012
+ .modal-header ::slotted(*) {
1013
+ margin: 0;
1014
+ font-size: 18px;
1015
+ font-weight: 600;
1016
+ }
1017
+
1018
+ .close-btn {
1019
+ background: none;
1020
+ border: none;
1021
+ font-size: 24px;
1022
+ cursor: pointer;
1023
+ color: #666;
1024
+ padding: 0;
1025
+ line-height: 1;
1026
+ }
1027
+
1028
+ .close-btn:hover {
1029
+ color: ${l.accent};
1030
+ }
1031
+
1032
+ .modal-body {
1033
+ padding: 21px;
1034
+ overflow-y: auto;
1035
+ flex: 1;
1036
+ }
1037
+
1038
+ .modal-footer {
1039
+ padding: 13px 21px;
1040
+ border-top: 1px solid #eee;
1041
+ display: flex;
1042
+ gap: 8px;
1043
+ justify-content: flex-end;
1044
+ }
1045
+ </style>
1046
+
1047
+ <div class="backdrop">
1048
+ <div class="modal" role="dialog" aria-modal="true" ${f?`aria-label="${f}"`:`aria-labelledby="${h}"`}>
1049
+ <div class="modal-header">
1050
+ <slot name="header" id="modal-title"></slot>
1051
+ <button class="close-btn" aria-label="Close modal">×</button>
1052
+ </div>
1053
+ <div class="modal-body">
1054
+ <slot></slot>
1055
+ </div>
1056
+ <div class="modal-footer">
1057
+ <slot name="footer"></slot>
1058
+ </div>
1059
+ </div>
1060
+ </div>
1061
+ `}};_("af-modal",Tt);Zb=Tt});var V0={};Q(V0,{default:()=>eb,AfriTabs:()=>Ct});var Ct,eb;var N0=x(()=>{S();Ct=class Ct extends c{static get observedAttributes(){return["theme"]}constructor(){super();this._activeTab=0,this.render()}connectedCallback(){this._setupTabs(),this.addEventListener("keydown",this._handleKeydown.bind(this))}_handleKeydown(t){let n=this.querySelector('[slot="tabs"]'),o=n?Array.from(n.children):[];if(o.length===0)return;switch(t.key){case"ArrowLeft":t.preventDefault(),this._activeTab=this._activeTab>0?this._activeTab-1:o.length-1,this.render(),this._setupTabs(),this._focusActiveTab();break;case"ArrowRight":t.preventDefault(),this._activeTab=this._activeTab<o.length-1?this._activeTab+1:0,this.render(),this._setupTabs(),this._focusActiveTab();break;case"Home":t.preventDefault(),this._activeTab=0,this.render(),this._setupTabs(),this._focusActiveTab();break;case"End":t.preventDefault(),this._activeTab=o.length-1,this.render(),this._setupTabs(),this._focusActiveTab();break}}_focusActiveTab(){let t=this.shadowRoot.querySelectorAll(".tab-button");if(t[this._activeTab])t[this._activeTab].focus()}_setupTabs(){this.shadowRoot.querySelectorAll(".tab-button").forEach((n,o)=>{n.addEventListener("click",()=>{this._activeTab=o,this.render(),this._setupTabs(),this.emit("af-tab-change",{index:o,tab:n.textContent})})})}attributeChangedCallback(){this.render(),this._setupTabs()}render(){let t=this.getAttribute("theme")||"tanzania",n=this.querySelector('[slot="tabs"]'),o=n?Array.from(n.children):[],b={tanzania:{active:"#1EB53A",text:"#FFFFFF"},maasai:{active:"#FF0000",text:"#FFFFFF"},ndebele:{active:"#4169E1",text:"#FFFFFF"}},l=b[t]||b.tanzania;this.shadowRoot.innerHTML=`
1062
+ <style>
1063
+ :host {
1064
+ display: block;
1065
+ font-family: 'Inter', system-ui, sans-serif;
1066
+ }
1067
+
1068
+ .tabs-container {
1069
+ border-radius: 8px;
1070
+ overflow: hidden;
1071
+ box-shadow: 0 2px 8px rgba(0,0,0,0.1);
1072
+ }
1073
+
1074
+ .tab-list {
1075
+ display: flex;
1076
+ background: #f5f5f5;
1077
+ border-bottom: 2px solid #eee;
1078
+ overflow-x: auto;
1079
+ }
1080
+
1081
+ .tab-button {
1082
+ padding: 13px 21px;
1083
+ background: none;
1084
+ border: none;
1085
+ font-family: inherit;
1086
+ font-size: 14px;
1087
+ font-weight: 500;
1088
+ color: #666;
1089
+ cursor: pointer;
1090
+ white-space: nowrap;
1091
+ transition: all 200ms ease;
1092
+ border-bottom: 2px solid transparent;
1093
+ margin-bottom: -2px;
1094
+ }
1095
+
1096
+ .tab-button:hover {
1097
+ color: ${l.active};
1098
+ background: rgba(0,0,0,0.03);
1099
+ }
1100
+
1101
+ .tab-button.active {
1102
+ color: ${l.active};
1103
+ border-bottom-color: ${l.active};
1104
+ background: white;
1105
+ }
1106
+
1107
+ .tab-panels {
1108
+ background: white;
1109
+ padding: 21px;
1110
+ }
1111
+
1112
+ .tab-panel {
1113
+ display: none;
1114
+ }
1115
+
1116
+ .tab-panel.active {
1117
+ display: block;
1118
+ animation: fadeIn 200ms ease-out;
1119
+ }
1120
+
1121
+ @keyframes fadeIn {
1122
+ from { opacity: 0; }
1123
+ to { opacity: 1; }
1124
+ }
1125
+
1126
+ ::slotted([slot="tabs"]) {
1127
+ display: none;
1128
+ }
1129
+ </style>
1130
+
1131
+ <div class="tabs-container">
1132
+ <div class="tab-list" role="tablist">
1133
+ ${o.map((a,f)=>`
1134
+ <button class="tab-button ${f===this._activeTab?"active":""}"
1135
+ role="tab"
1136
+ aria-selected="${f===this._activeTab}"
1137
+ aria-controls="panel-${f}"
1138
+ tabindex="${f===this._activeTab?"0":"-1"}"
1139
+ id="tab-${f}">
1140
+ ${a.getAttribute("label")||`Tab ${f+1}`}
1141
+ </button>
1142
+ `).join("")}
1143
+ </div>
1144
+ <div class="tab-panels">
1145
+ ${o.map((a,f)=>`
1146
+ <div class="tab-panel ${f===this._activeTab?"active":""}"
1147
+ role="tabpanel"
1148
+ id="panel-${f}"
1149
+ aria-labelledby="tab-${f}">
1150
+ ${a.innerHTML}
1151
+ </div>
1152
+ `).join("")}
1153
+ </div>
1154
+ </div>
1155
+ <slot name="tabs"></slot>
1156
+ `}};_("af-tabs",Ct);eb=Ct});var K0={};Q(K0,{default:()=>sb,AfriSidebar:()=>yt});var yt,sb;var p0=x(()=>{S();Dt();Et();yt=class yt extends c{static get observedAttributes(){return["position"]}constructor(){super();this._unsubscribe=null}connectedCallback(){super.connectedCallback(),this._unsubscribe=Rt(()=>{this.updateUI()}),this.render()}disconnectedCallback(){if(this._unsubscribe)this._unsubscribe()}updateUI(){let t=Ht.ui.sidebarCollapsed,n=this.shadowRoot.querySelector(".sidebar"),o=this.shadowRoot.querySelector(".sidebar-title"),b=this.shadowRoot.getElementById("toggle"),l=this.shadowRoot.querySelector(".sidebar-content");if(n)n.style.width=t?"60px":"260px";if(o)o.style.opacity=t?"0":"1";if(l)l.style.padding=t?"12px":"20px";if(b)b.innerHTML=t?"→":"← Collapse"}render(){let t=this.getAttribute("position")||"left",n=Ht.ui.sidebarCollapsed;this.shadowRoot.innerHTML=`
1157
+ <style>
1158
+ :host {
1159
+ display: block;
1160
+ position: fixed;
1161
+ top: 0;
1162
+ ${t}: 0;
1163
+ height: 100vh;
1164
+ z-index: 900;
1165
+ font-family: 'Inter', system-ui, sans-serif;
1166
+ }
1167
+
1168
+ .sidebar {
1169
+ width: ${n?"60px":"260px"};
1170
+ height: 100%;
1171
+ background: #121212;
1172
+ border-${t==="left"?"right":"left"}: 1px solid #1e1e1e;
1173
+ display: flex;
1174
+ flex-direction: column;
1175
+ transition: width 0.3s var(--ease-drum, ease);
1176
+ overflow: hidden;
1177
+ }
1178
+
1179
+ .sidebar-header {
1180
+ padding: 20px;
1181
+ border-bottom: 1px solid #1e1e1e;
1182
+ display: flex;
1183
+ align-items: center;
1184
+ gap: 12px;
1185
+ }
1186
+
1187
+ .sidebar-logo {
1188
+ width: 32px;
1189
+ height: 32px;
1190
+ background: linear-gradient(135deg, #1EB53A, #FCD116);
1191
+ border-radius: 8px;
1192
+ flex-shrink: 0;
1193
+ }
1194
+
1195
+ .sidebar-title {
1196
+ font-weight: 700;
1197
+ font-size: 1.1rem;
1198
+ color: #FCD116;
1199
+ white-space: nowrap;
1200
+ opacity: ${n?0:1};
1201
+ transition: opacity 0.2s;
1202
+ }
1203
+
1204
+ .sidebar-content {
1205
+ flex: 1;
1206
+ padding: ${n?"12px":"20px"};
1207
+ overflow-y: auto;
1208
+ }
1209
+
1210
+ .sidebar-footer {
1211
+ padding: 16px;
1212
+ border-top: 1px solid #1e1e1e;
1213
+ }
1214
+
1215
+ .toggle-btn {
1216
+ width: 100%;
1217
+ padding: 10px;
1218
+ background: #1e1e1e;
1219
+ border: none;
1220
+ border-radius: 8px;
1221
+ color: #a0a0a0;
1222
+ cursor: pointer;
1223
+ font-size: 0.85rem;
1224
+ transition: all 0.2s;
1225
+ }
1226
+
1227
+ .toggle-btn:hover {
1228
+ background: #2a2a2a;
1229
+ color: #1EB53A;
1230
+ }
1231
+
1232
+ /* Slotted Content Styles */
1233
+ ::slotted(a), ::slotted(button) {
1234
+ display: flex;
1235
+ align-items: center;
1236
+ gap: 12px;
1237
+ padding: 12px 16px;
1238
+ color: #a0a0a0;
1239
+ text-decoration: none;
1240
+ border-radius: 8px;
1241
+ margin-bottom: 4px;
1242
+ transition: all 0.2s;
1243
+ }
1244
+
1245
+ ::slotted(a:hover), ::slotted(button:hover) {
1246
+ background: #1e1e1e;
1247
+ color: #1EB53A;
1248
+ }
1249
+ </style>
1250
+
1251
+ <aside class="sidebar">
1252
+ <div class="sidebar-header">
1253
+ <div class="sidebar-logo"></div>
1254
+ <span class="sidebar-title">AfriCode</span>
1255
+ </div>
1256
+ <nav class="sidebar-content">
1257
+ <slot></slot>
1258
+ </nav>
1259
+ <div class="sidebar-footer">
1260
+ <button class="toggle-btn" id="toggle">
1261
+ ${n?"→":"← Collapse"}
1262
+ </button>
1263
+ </div>
1264
+ </aside>
1265
+ `,this.shadowRoot.getElementById("toggle").addEventListener("click",()=>{actions.toggleSidebar()})}};_("af-sidebar",yt);sb=yt});var I0={};Q(I0,{default:()=>zb,AfriDropdown:()=>Zt});var Zt,zb;var u0=x(()=>{S();Zt=class Zt extends c{static get observedAttributes(){return["label","open"]}constructor(){super();this._open=!1,this.render()}toggle(){if(this._open=!this._open,this._open)this.setAttribute("open","");else this.removeAttribute("open");this.render()}close(){this._open=!1,this.removeAttribute("open"),this.render()}connectedCallback(){document.addEventListener("click",(t)=>{if(!this.contains(t.target))this.close()}),this.addEventListener("keydown",this._handleKeydown.bind(this))}_handleKeydown(t){let n=this.shadowRoot.getElementById("trigger");switch(t.key){case"Enter":case" ":t.preventDefault(),this.toggle();break;case"Escape":if(this._open)t.preventDefault(),this.close(),n.focus();break;case"ArrowDown":if(!this._open)t.preventDefault(),this.toggle();break}}render(){let t=this.getAttribute("label")||"Menu",n=this.hasAttribute("open");this.shadowRoot.innerHTML=`
1266
+ <style>
1267
+ :host {
1268
+ display: inline-block;
1269
+ position: relative;
1270
+ font-family: 'Inter', system-ui, sans-serif;
1271
+ }
1272
+
1273
+ .dropdown-trigger {
1274
+ display: flex;
1275
+ align-items: center;
1276
+ gap: 8px;
1277
+ padding: 10px 16px;
1278
+ background: #1e1e1e;
1279
+ border: 1px solid #2a2a2a;
1280
+ border-radius: 8px;
1281
+ color: #ffffff;
1282
+ font-size: 0.9rem;
1283
+ cursor: pointer;
1284
+ transition: all 0.2s;
1285
+ }
1286
+
1287
+ .dropdown-trigger:hover {
1288
+ border-color: #1EB53A;
1289
+ }
1290
+
1291
+ .dropdown-arrow {
1292
+ transition: transform 0.2s;
1293
+ ${n?"transform: rotate(180deg);":""}
1294
+ }
1295
+
1296
+ .dropdown-menu {
1297
+ position: absolute;
1298
+ top: 100%;
1299
+ left: 0;
1300
+ min-width: 180px;
1301
+ margin-top: 4px;
1302
+ background: #121212;
1303
+ border: 1px solid #1e1e1e;
1304
+ border-radius: 8px;
1305
+ box-shadow: 0 10px 40px rgba(0,0,0,0.5);
1306
+ opacity: ${n?1:0};
1307
+ visibility: ${n?"visible":"hidden"};
1308
+ transform: translateY(${n?0:"-10px"});
1309
+ transition: all 0.2s ease;
1310
+ z-index: 1000;
1311
+ overflow: hidden;
1312
+ }
1313
+
1314
+ ::slotted(a), ::slotted(button), ::slotted(div) {
1315
+ display: block;
1316
+ padding: 12px 16px;
1317
+ color: #a0a0a0;
1318
+ text-decoration: none;
1319
+ border: none;
1320
+ background: none;
1321
+ width: 100%;
1322
+ text-align: left;
1323
+ font-size: 0.9rem;
1324
+ cursor: pointer;
1325
+ transition: all 0.15s;
1326
+ }
1327
+
1328
+ ::slotted(a:hover), ::slotted(button:hover), ::slotted(div:hover) {
1329
+ background: #1e1e1e;
1330
+ color: #1EB53A;
1331
+ }
1332
+
1333
+ ::slotted(hr) {
1334
+ border: none;
1335
+ border-top: 1px solid #1e1e1e;
1336
+ margin: 4px 0;
1337
+ }
1338
+ </style>
1339
+
1340
+ <button class="dropdown-trigger" id="trigger" aria-expanded="${n}" aria-haspopup="menu">
1341
+ ${t}
1342
+ <span class="dropdown-arrow" aria-hidden="true">▼</span>
1343
+ </button>
1344
+ <div class="dropdown-menu" role="menu" ${n?"":'aria-hidden="true"'}>
1345
+ <slot></slot>
1346
+ </div>
1347
+ `,this.shadowRoot.getElementById("trigger").addEventListener("click",(o)=>{o.stopPropagation(),this.toggle()})}};_("af-dropdown",Zt);zb=Zt});var i0={};Q(i0,{default:()=>tl,AfriSelect:()=>et});var et,tl;var P0=x(()=>{S();et=class et extends c{static get observedAttributes(){return["label","placeholder","theme","error","required","aria-label","aria-describedby"]}constructor(){super();this._uniqueId=Math.random().toString(36).substr(2,9),this._isOpen=!1,this._selectedIndex=-1,this._options=[],this.render()}get value(){return this._selectedIndex>=0?this._options[this._selectedIndex]?.value:""}connectedCallback(){this._options=Array.from(this.querySelectorAll("option")).map((t)=>({value:t.value,label:t.textContent})),this.render(),this._setupListeners()}_setupListeners(){let t=this.shadowRoot.querySelector(".select-trigger"),n=this.shadowRoot.querySelector(".select-dropdown");t?.addEventListener("click",()=>{this._toggleDropdown()}),t?.addEventListener("keydown",(o)=>{this._handleKeydown(o)}),this.shadowRoot.querySelectorAll(".select-option").forEach((o,b)=>{o.addEventListener("click",()=>{this._selectOption(b)})}),document.addEventListener("click",(o)=>{if(!this.contains(o.target)&&this._isOpen)this._closeDropdown()})}_toggleDropdown(){this._isOpen=!this._isOpen;let t=this.shadowRoot.querySelector(".select-trigger"),n=this.shadowRoot.querySelector(".select-dropdown");if(n?.classList.toggle("open",this._isOpen),t?.classList.toggle("open",this._isOpen),this._isOpen)t?.setAttribute("aria-expanded","true"),n?.setAttribute("aria-hidden","false");else t?.setAttribute("aria-expanded","false"),n?.setAttribute("aria-hidden","true")}_closeDropdown(){this._isOpen=!1;let t=this.shadowRoot.querySelector(".select-trigger"),n=this.shadowRoot.querySelector(".select-dropdown");n?.classList.remove("open"),t?.classList.remove("open"),t?.setAttribute("aria-expanded","false"),n?.setAttribute("aria-hidden","true")}_selectOption(t){this._selectedIndex=t,this._closeDropdown(),this.render(),this._setupListeners(),this.emit("af-change",{value:this.value,label:this._options[t].label})}_handleKeydown(t){let n=this.shadowRoot.querySelector(".select-trigger");switch(t.key){case"Enter":case" ":t.preventDefault(),this._toggleDropdown();break;case"Escape":if(this._isOpen)t.preventDefault(),this._closeDropdown(),n.focus();break;case"ArrowDown":if(!this._isOpen)t.preventDefault(),this._toggleDropdown();else t.preventDefault(),this._navigateOptions(1);break;case"ArrowUp":if(this._isOpen)t.preventDefault(),this._navigateOptions(-1);break}}_navigateOptions(t){let n=this.shadowRoot.querySelectorAll(".select-option");if(n.length===0)return;let o=this._selectedIndex+t;if(o<0)o=n.length-1;if(o>=n.length)o=0;this._selectedIndex=o,this.render(),this._setupListeners(),this.shadowRoot.querySelector(".select-option.selected")?.scrollIntoView({block:"nearest"})}attributeChangedCallback(){this.render(),this._setupListeners()}render(){let t=this.getAttribute("label")||"",n=this.getAttribute("placeholder")||"Select an option",o=this.getAttribute("theme")||"tanzania",b=this.getAttribute("error")||"",l=this.hasAttribute("required"),a=this.getAttribute("aria-label"),f=this.getAttribute("aria-describedby"),h={tanzania:{focus:"#1EB53A",error:"#DC3545"},maasai:{focus:"#FF0000",error:"#8B0000"},ndebele:{focus:"#4169E1",error:"#DC143C"}},r=h[o]||h.tanzania,A=[];if(b)A.push(`error-${this._uniqueId}`);if(f)A.push(...f.split(" "));let X=A.length>0?`aria-describedby="${A.join(" ")}"`:"",L=this._selectedIndex>=0?this._options[this._selectedIndex]?.label:n;this.shadowRoot.innerHTML=`
1348
+ <style>
1349
+ :host {
1350
+ display: block;
1351
+ font-family: 'Inter', system-ui, sans-serif;
1352
+ position: relative;
1353
+ }
1354
+
1355
+ label {
1356
+ display: block;
1357
+ font-weight: 500;
1358
+ margin-bottom: 5px;
1359
+ color: #333;
1360
+ font-size: 14px;
1361
+ }
1362
+
1363
+ .required-star {
1364
+ color: ${r.error};
1365
+ margin-left: 2px;
1366
+ }
1367
+
1368
+ .select-container {
1369
+ position: relative;
1370
+ }
1371
+
1372
+ .select-trigger {
1373
+ width: 100%;
1374
+ padding: 10px 40px 10px 13px;
1375
+ font-size: 15px;
1376
+ border: 2px solid ${b?r.error:"#ddd"};
1377
+ border-radius: 5px;
1378
+ background: white;
1379
+ cursor: pointer;
1380
+ text-align: left;
1381
+ font-family: inherit;
1382
+ transition: all 200ms ease;
1383
+ color: ${this._selectedIndex>=0?"#333":"#888"};
1384
+ }
1385
+
1386
+ .select-trigger:focus,
1387
+ .select-trigger.open {
1388
+ outline: none;
1389
+ border-color: ${b?r.error:r.focus};
1390
+ box-shadow: 0 0 0 3px ${b?r.error+"20":r.focus+"20"};
1391
+ }
1392
+
1393
+ .select-arrow {
1394
+ position: absolute;
1395
+ right: 13px;
1396
+ top: 50%;
1397
+ transform: translateY(-50%);
1398
+ pointer-events: none;
1399
+ transition: transform 200ms ease;
1400
+ }
1401
+
1402
+ .select-trigger.open + .select-arrow {
1403
+ transform: translateY(-50%) rotate(180deg);
1404
+ }
1405
+
1406
+ .select-dropdown {
1407
+ position: absolute;
1408
+ top: 100%;
1409
+ left: 0;
1410
+ right: 0;
1411
+ background: white;
1412
+ border: 2px solid #ddd;
1413
+ border-radius: 5px;
1414
+ margin-top: 4px;
1415
+ max-height: 0;
1416
+ overflow: hidden;
1417
+ opacity: 0;
1418
+ transition: all 200ms ease;
1419
+ z-index: 1000;
1420
+ box-shadow: 0 4px 12px rgba(0,0,0,0.15);
1421
+ }
1422
+
1423
+ .select-dropdown.open {
1424
+ max-height: 200px;
1425
+ overflow-y: auto;
1426
+ opacity: 1;
1427
+ }
1428
+
1429
+ .select-option {
1430
+ padding: 10px 13px;
1431
+ cursor: pointer;
1432
+ transition: background 150ms ease;
1433
+ }
1434
+
1435
+ .select-option:hover {
1436
+ background: ${r.focus}15;
1437
+ }
1438
+
1439
+ .select-option.selected {
1440
+ background: ${r.focus};
1441
+ color: white;
1442
+ }
1443
+
1444
+ .error-text {
1445
+ font-size: 12px;
1446
+ margin-top: 4px;
1447
+ color: ${r.error};
1448
+ }
1449
+
1450
+ ::slotted(option) {
1451
+ display: none;
1452
+ }
1453
+ </style>
1454
+
1455
+ ${t?`<label for="select-${this._uniqueId}">${t}${l?'<span class="required-star">*</span>':""}</label>`:""}
1456
+ <div class="select-container">
1457
+ <button type="button"
1458
+ id="select-${this._uniqueId}"
1459
+ class="select-trigger ${this._isOpen?"open":""}"
1460
+ aria-expanded="${this._isOpen}"
1461
+ aria-haspopup="listbox"
1462
+ ${a?`aria-label="${a}"`:""}
1463
+ ${b?'aria-invalid="true"':""}
1464
+ ${X}>
1465
+ ${L}
1466
+ </button>
1467
+ <span class="select-arrow" aria-hidden="true">▼</span>
1468
+ <div class="select-dropdown ${this._isOpen?"open":""}"
1469
+ role="listbox"
1470
+ aria-hidden="${!this._isOpen}">
1471
+ ${this._options.map((J,D)=>`
1472
+ <div class="select-option ${D===this._selectedIndex?"selected":""}"
1473
+ data-index="${D}"
1474
+ role="option"
1475
+ aria-selected="${D===this._selectedIndex}">
1476
+ ${J.label}
1477
+ </div>
1478
+ `).join("")}
1479
+ </div>
1480
+ </div>
1481
+ ${b?`<div id="error-${this._uniqueId}" class="error-text" role="alert">${b}</div>`:""}
1482
+ <slot></slot>
1483
+ `}};_("af-select",et);tl=et});var T0={};Q(T0,{default:()=>nl,AfriForm:()=>st});var st,nl;var C0=x(()=>{S();Xn();st=class st extends c{static get observedAttributes(){return["action","method","error","success","schema"]}constructor(){super();this.handleSubmit=this.handleSubmit.bind(this)}connectedCallback(){this.render(),this.shadowRoot.querySelector("form").addEventListener("submit",this.handleSubmit),this.loadStyles()}async handleSubmit(t){t.preventDefault();let n=t.target,o=this.querySelector('[type="submit"]')||this.shadowRoot.querySelector('button[type="submit"]'),b=this.getAttribute("schema"),l=b?this._getSchema(b):null,a=this.getAttribute("action"),f=this.getAttribute("method")||"GET",h=new FormData(n),r=Object.fromEntries(h.entries());if(Array.from(this.querySelectorAll("af-input")).forEach((X)=>{let L=X.getAttribute("name");if(L)r[L]=X.value}),l){let X=Jt.validate(l,r);if(!X.success){this._showValidationErrors(X.errors),this.emit("af-validation-error",{errors:X.errors});return}}if(!a)return;if(o){var A=o.textContent;o.textContent="Wait...",o.disabled=!0}try{let X=await fetch(a,{method:f,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(X.ok)this.emit("success",await X.json()),this.setAttribute("success","Form submitted successfully!"),this.removeAttribute("error");else{let L=await X.text();this.emit("error",L),this.setAttribute("error",L),this.removeAttribute("success")}}catch(X){this.emit("error",X.message),this.setAttribute("error",X.message),this.removeAttribute("success")}finally{if(o)o.textContent=A,o.disabled=!1}}_getSchema(t){return Y0[t]||null}_showValidationErrors(t){this.shadowRoot.querySelectorAll(".field-error").forEach((n)=>n.remove()),Object.entries(t).forEach(([n,o])=>{let b=this.querySelector(`[name="${n}"]`);if(b)if(b.tagName==="AF-INPUT")b.setAttribute("error",o);else{let l=document.createElement("div");l.className="field-error",l.textContent=o,l.style.color="red",l.style.fontSize="12px",l.style.marginTop="4px",b.parentNode.insertBefore(l,b.nextSibling)}})}};_("af-form",st);nl=st});var y0={};Q(y0,{default:()=>ol,AfriTooltip:()=>zt});var zt,ol;var Z0=x(()=>{S();zt=class zt extends c{static get observedAttributes(){return["text","position"]}constructor(){super();this._tooltipId=`af-tooltip-${Math.random().toString(36).substr(2,9)}`,this.render()}connectedCallback(){this._setupTooltipListeners()}attributeChangedCallback(){this.render(),this._setupTooltipListeners()}_setupTooltipListeners(){let t=this.shadowRoot.querySelector(".tooltip-trigger"),n=this.shadowRoot.querySelector(".tooltip-content");if(!t||!n)return;t.addEventListener("focus",()=>{n.style.opacity="1",n.style.visibility="visible",n.setAttribute("aria-hidden","false")}),t.addEventListener("blur",()=>{n.style.opacity="0",n.style.visibility="hidden",n.setAttribute("aria-hidden","true")}),t.addEventListener("mouseenter",()=>{n.style.opacity="1",n.style.visibility="visible",n.setAttribute("aria-hidden","false")}),t.addEventListener("mouseleave",()=>{n.style.opacity="0",n.style.visibility="hidden",n.setAttribute("aria-hidden","true")})}render(){let t=this.getAttribute("text")||"Tooltip",n=this.getAttribute("position")||"top",o={top:`
1484
+ bottom: 100%;
1485
+ left: 50%;
1486
+ transform: translateX(-50%) translateY(-8px);
1487
+ `,bottom:`
1488
+ top: 100%;
1489
+ left: 50%;
1490
+ transform: translateX(-50%) translateY(8px);
1491
+ `,left:`
1492
+ right: 100%;
1493
+ top: 50%;
1494
+ transform: translateY(-50%) translateX(-8px);
1495
+ `,right:`
1496
+ left: 100%;
1497
+ top: 50%;
1498
+ transform: translateY(-50%) translateX(8px);
1499
+ `};this.shadowRoot.innerHTML=`
1500
+ <style>
1501
+ :host {
1502
+ display: inline-block;
1503
+ position: relative;
1504
+ font-family: 'Inter', system-ui, sans-serif;
1505
+ }
1506
+
1507
+ .tooltip-trigger {
1508
+ display: inline-block;
1509
+ cursor: help;
1510
+ }
1511
+
1512
+ .tooltip-content {
1513
+ position: absolute;
1514
+ ${o[n]}
1515
+ padding: 8px 12px;
1516
+ background: #1e1e1e;
1517
+ border: 1px solid #2a2a2a;
1518
+ border-radius: 6px;
1519
+ color: #ffffff;
1520
+ font-size: 0.85rem;
1521
+ white-space: nowrap;
1522
+ opacity: 0;
1523
+ visibility: hidden;
1524
+ transition: all 0.2s ease;
1525
+ z-index: 1000;
1526
+ box-shadow: 0 4px 20px rgba(0,0,0,0.4);
1527
+ }
1528
+
1529
+ .tooltip-trigger:hover + .tooltip-content,
1530
+ .tooltip-trigger:focus + .tooltip-content,
1531
+ .tooltip-content:hover {
1532
+ opacity: 1;
1533
+ visibility: visible;
1534
+ }
1535
+
1536
+ /* Arrow */
1537
+ .tooltip-content::after {
1538
+ content: '';
1539
+ position: absolute;
1540
+ border: 6px solid transparent;
1541
+ ${n==="top"?`
1542
+ top: 100%;
1543
+ left: 50%;
1544
+ transform: translateX(-50%);
1545
+ border-top-color: #1e1e1e;
1546
+ `:""}
1547
+ ${n==="bottom"?`
1548
+ bottom: 100%;
1549
+ left: 50%;
1550
+ transform: translateX(-50%);
1551
+ border-bottom-color: #1e1e1e;
1552
+ `:""}
1553
+ ${n==="left"?`
1554
+ left: 100%;
1555
+ top: 50%;
1556
+ transform: translateY(-50%);
1557
+ border-left-color: #1e1e1e;
1558
+ `:""}
1559
+ ${n==="right"?`
1560
+ right: 100%;
1561
+ top: 50%;
1562
+ transform: translateY(-50%);
1563
+ border-right-color: #1e1e1e;
1564
+ `:""}
1565
+ }
1566
+ </style>
1567
+
1568
+ <span class="tooltip-trigger" tabindex="0" aria-describedby="${this._tooltipId}">
1569
+ <slot></slot>
1570
+ </span>
1571
+ <div class="tooltip-content" id="${this._tooltipId}" role="tooltip" aria-hidden="true">${t}</div>
1572
+ `}};_("af-tooltip",zt);ol=zt});var e0={};Q(e0,{default:()=>bl,AfriToast:()=>tn});var tn,bl;var s0=x(()=>{S();tn=class tn extends c{static get observedAttributes(){return["type","message","duration"]}constructor(){super();this.render()}show(t,n="info",o=4000){if(this.setAttribute("message",t),this.setAttribute("type",n),this.render(),this.shadowRoot.querySelector(".toast").classList.add("show"),o>0)setTimeout(()=>this.hide(),o)}hide(){this.shadowRoot.querySelector(".toast").classList.remove("show"),setTimeout(()=>this.emit("af-toast-close"),300)}render(){let t=this.getAttribute("type")||"info",n=this.getAttribute("message")||"",o={success:"✓",error:"✗",warning:"⚠",info:"ℹ"},b={success:"#1EB53A",error:"#EF3340",warning:"#FCD116",info:"#00A3DD"};this.shadowRoot.innerHTML=`
1573
+ <style>
1574
+ :host {
1575
+ position: fixed;
1576
+ bottom: 20px;
1577
+ right: 20px;
1578
+ z-index: 9999;
1579
+ font-family: 'Inter', system-ui, sans-serif;
1580
+ }
1581
+
1582
+ .toast {
1583
+ display: flex;
1584
+ align-items: center;
1585
+ gap: 12px;
1586
+ padding: 16px 20px;
1587
+ background: #121212;
1588
+ border: 1px solid #1e1e1e;
1589
+ border-left: 4px solid ${b[t]};
1590
+ border-radius: 8px;
1591
+ box-shadow: 0 10px 40px rgba(0,0,0,0.5);
1592
+ transform: translateX(120%);
1593
+ opacity: 0;
1594
+ transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
1595
+ }
1596
+
1597
+ .toast.show {
1598
+ transform: translateX(0);
1599
+ opacity: 1;
1600
+ }
1601
+
1602
+ .toast-icon {
1603
+ width: 28px;
1604
+ height: 28px;
1605
+ border-radius: 50%;
1606
+ background: ${b[t]}20;
1607
+ color: ${b[t]};
1608
+ display: flex;
1609
+ align-items: center;
1610
+ justify-content: center;
1611
+ font-size: 14px;
1612
+ font-weight: bold;
1613
+ }
1614
+
1615
+ .toast-content {
1616
+ flex: 1;
1617
+ }
1618
+
1619
+ .toast-message {
1620
+ color: #ffffff;
1621
+ font-size: 0.95rem;
1622
+ }
1623
+
1624
+ .toast-close {
1625
+ background: none;
1626
+ border: none;
1627
+ color: #606060;
1628
+ cursor: pointer;
1629
+ padding: 4px;
1630
+ font-size: 18px;
1631
+ line-height: 1;
1632
+ }
1633
+
1634
+ .toast-close:hover {
1635
+ color: #ffffff;
1636
+ }
1637
+ </style>
1638
+
1639
+ <div class="toast">
1640
+ <span class="toast-icon">${o[t]}</span>
1641
+ <div class="toast-content">
1642
+ <div class="toast-message">${n}</div>
1643
+ </div>
1644
+ <button class="toast-close" id="close">×</button>
1645
+ </div>
1646
+ `,this.shadowRoot.getElementById("close")?.addEventListener("click",()=>this.hide())}};_("af-toast",tn);bl=tn});var z0={};Q(z0,{default:()=>ll,AfriBadge:()=>nn});var nn,ll;var to=x(()=>{S();nn=class nn extends c{static get observedAttributes(){return["variant","size","removable"]}constructor(){super();this.render()}connectedCallback(){this.shadowRoot.querySelector(".remove-btn")?.addEventListener("click",()=>{this.emit("af-remove"),this.remove()})}attributeChangedCallback(){this.render()}render(){let t=this.getAttribute("variant")||"default",n=this.getAttribute("size")||"md",o=this.hasAttribute("removable"),b={default:{bg:"#e9ecef",text:"#495057"},success:{bg:"#d4edda",text:"#155724"},warning:{bg:"#fff3cd",text:"#856404"},error:{bg:"#f8d7da",text:"#721c24"},info:{bg:"#d1ecf1",text:"#0c5460"},tanzania:{bg:"#1EB53A",text:"#FFFFFF"},maasai:{bg:"#FF0000",text:"#FFFFFF"},ndebele:{bg:"#4169E1",text:"#FFFFFF"},gold:{bg:"#FCD116",text:"#000000"}},l=b[t]||b.default,a={sm:{padding:"2px 6px",fontSize:"11px"},md:{padding:"4px 10px",fontSize:"13px"},lg:{padding:"6px 14px",fontSize:"15px"}},f=a[n]||a.md;this.shadowRoot.innerHTML=`
1647
+ <style>
1648
+ :host {
1649
+ display: inline-block;
1650
+ font-family: 'Inter', system-ui, sans-serif;
1651
+ }
1652
+
1653
+ .badge {
1654
+ display: inline-flex;
1655
+ align-items: center;
1656
+ gap: 5px;
1657
+ padding: ${f.padding};
1658
+ font-size: ${f.fontSize};
1659
+ font-weight: 600;
1660
+ background: ${l.bg};
1661
+ color: ${l.text};
1662
+ border-radius: 100px;
1663
+ white-space: nowrap;
1664
+ }
1665
+
1666
+ .remove-btn {
1667
+ background: none;
1668
+ border: none;
1669
+ cursor: pointer;
1670
+ padding: 0;
1671
+ font-size: 14px;
1672
+ line-height: 1;
1673
+ color: inherit;
1674
+ opacity: 0.7;
1675
+ margin-left: 2px;
1676
+ }
1677
+
1678
+ .remove-btn:hover {
1679
+ opacity: 1;
1680
+ }
1681
+ </style>
1682
+
1683
+ <span class="badge">
1684
+ <slot></slot>
1685
+ ${o?'<button class="remove-btn" aria-label="Remove">×</button>':""}
1686
+ </span>
1687
+ `}};_("af-badge",nn);ll=nn});var no={};Q(no,{default:()=>al,AfriAvatar:()=>on});var on,al;var oo=x(()=>{S();on=class on extends c{static get observedAttributes(){return["src","name","size","status","theme"]}constructor(){super();this.render()}attributeChangedCallback(){this.render()}_getInitials(t){if(!t)return"?";let n=t.trim().split(" ");if(n.length>=2)return(n[0][0]+n[n.length-1][0]).toUpperCase();return t.substring(0,2).toUpperCase()}render(){let t=this.getAttribute("src"),n=this.getAttribute("name")||"",o=this.getAttribute("size")||"md",b=this.getAttribute("status"),l=this.getAttribute("theme")||"tanzania",a={tanzania:"#1EB53A",maasai:"#FF0000",ndebele:"#4169E1",gold:"#FCD116"},f=a[l]||a.tanzania,h={sm:{size:"32px",font:"12px",status:"8px"},md:{size:"44px",font:"16px",status:"10px"},lg:{size:"64px",font:"22px",status:"14px"},xl:{size:"96px",font:"32px",status:"18px"}},r=h[o]||h.md,A={online:"#28a745",offline:"#6c757d",busy:"#dc3545",away:"#ffc107"};this.shadowRoot.innerHTML=`
1688
+ <style>
1689
+ :host {
1690
+ display: inline-block;
1691
+ font-family: 'Inter', system-ui, sans-serif;
1692
+ }
1693
+
1694
+ .avatar {
1695
+ position: relative;
1696
+ width: ${r.size};
1697
+ height: ${r.size};
1698
+ border-radius: 50%;
1699
+ display: flex;
1700
+ align-items: center;
1701
+ justify-content: center;
1702
+ background: ${f};
1703
+ color: white;
1704
+ font-weight: 600;
1705
+ font-size: ${r.font};
1706
+ overflow: hidden;
1707
+ }
1708
+
1709
+ .avatar img {
1710
+ width: 100%;
1711
+ height: 100%;
1712
+ object-fit: cover;
1713
+ }
1714
+
1715
+ .status {
1716
+ position: absolute;
1717
+ bottom: 0;
1718
+ right: 0;
1719
+ width: ${r.status};
1720
+ height: ${r.status};
1721
+ border-radius: 50%;
1722
+ border: 2px solid white;
1723
+ background: ${b?A[b]||A.offline:"transparent"};
1724
+ }
1725
+ </style>
1726
+
1727
+ <div class="avatar" title="${n}">
1728
+ ${t?`<img src="${t}" alt="${n}" />`:this._getInitials(n)}
1729
+ ${b?'<span class="status"></span>':""}
1730
+ </div>
1731
+ `}};_("af-avatar",on);al=on});var bo={};Q(bo,{default:()=>fl,AfriProgress:()=>bn});var bn,fl;var lo=x(()=>{S();bn=class bn extends c{static get observedAttributes(){return["value","max","theme","size","label","animated"]}constructor(){super();this.render()}attributeChangedCallback(){this.render()}render(){let t=parseFloat(this.getAttribute("value"))||0,n=parseFloat(this.getAttribute("max"))||100,o=this.getAttribute("theme")||"tanzania",b=this.getAttribute("size")||"md",l=this.getAttribute("label"),a=this.hasAttribute("animated"),f=Math.min(100,Math.max(0,t/n*100)),h={tanzania:{bar:"#1EB53A",track:"#e9ecef"},maasai:{bar:"#FF0000",track:"#e9ecef"},ndebele:{bar:"#4169E1",track:"#e9ecef"},gold:{bar:"#FCD116",track:"#e9ecef"},gradient:{bar:"linear-gradient(90deg, #1EB53A 0%, #FCD116 50%, #00A3DD 100%)",track:"#e9ecef"}},r=h[o]||h.tanzania,A={sm:"6px",md:"10px",lg:"16px"},X=A[b]||A.md;this.shadowRoot.innerHTML=`
1732
+ <style>
1733
+ :host {
1734
+ display: block;
1735
+ font-family: 'Inter', system-ui, sans-serif;
1736
+ }
1737
+
1738
+ .progress-container {
1739
+ width: 100%;
1740
+ }
1741
+
1742
+ .progress-header {
1743
+ display: flex;
1744
+ justify-content: space-between;
1745
+ margin-bottom: 5px;
1746
+ font-size: 13px;
1747
+ }
1748
+
1749
+ .progress-label {
1750
+ color: #333;
1751
+ font-weight: 500;
1752
+ }
1753
+
1754
+ .progress-value {
1755
+ color: #666;
1756
+ }
1757
+
1758
+ .progress-track {
1759
+ width: 100%;
1760
+ height: ${X};
1761
+ background: ${r.track};
1762
+ border-radius: 100px;
1763
+ overflow: hidden;
1764
+ }
1765
+
1766
+ .progress-bar {
1767
+ height: 100%;
1768
+ width: ${f}%;
1769
+ background: ${r.bar};
1770
+ border-radius: 100px;
1771
+ transition: width 500ms ease-out;
1772
+ ${a?`
1773
+ background-size: 30px 30px;
1774
+ background-image: linear-gradient(
1775
+ 135deg,
1776
+ rgba(255,255,255,0.2) 25%,
1777
+ transparent 25%,
1778
+ transparent 50%,
1779
+ rgba(255,255,255,0.2) 50%,
1780
+ rgba(255,255,255,0.2) 75%,
1781
+ transparent 75%,
1782
+ transparent
1783
+ );
1784
+ animation: stripes 1s linear infinite;
1785
+ `:""}
1786
+ }
1787
+
1788
+ @keyframes stripes {
1789
+ 0% { background-position: 0 0; }
1790
+ 100% { background-position: 30px 0; }
1791
+ }
1792
+ </style>
1793
+
1794
+ <div class="progress-container">
1795
+ ${`
1796
+ <div class="progress-header">
1797
+ <span class="progress-label">${l||""}</span>
1798
+ <span class="progress-value">${f.toFixed(0)}%</span>
1799
+ </div>
1800
+ `}
1801
+ <div class="progress-track">
1802
+ <div class="progress-bar" role="progressbar"
1803
+ aria-valuenow="${t}"
1804
+ aria-valuemin="0"
1805
+ aria-valuemax="${n}"></div>
1806
+ </div>
1807
+ </div>
1808
+ `}};_("af-progress",bn);fl=bn});var ao={};Q(ao,{default:()=>hl,AfriLoader:()=>ln});var ln,hl;var fo=x(()=>{S();ln=class ln extends c{static get observedAttributes(){return["size","color","type"]}constructor(){super();this.render()}attributeChangedCallback(){this.render()}render(){let t=this.getAttribute("size")||"40",n=this.getAttribute("color")||"currentColor",o=this.getAttribute("type")||"spiral",b={spiral:`M25,25 m0,-20 a20,20 0 1,1 0,40 a20,20 0 1,1 0,-40
1809
+ M25,25 m0,-15 a15,15 0 1,0 0,30 a15,15 0 1,0 0,-30`,sun:"M25,5 L25,45 M5,25 L45,25 M11,11 L39,39 M39,11 L11,39",diamond:"M25,5 L45,25 L25,45 L5,25 Z"};this.shadowRoot.innerHTML=`
1810
+ <style>
1811
+ :host {
1812
+ display: inline-block;
1813
+ color: ${n};
1814
+ }
1815
+ .loader {
1816
+ width: ${t}px;
1817
+ height: ${t}px;
1818
+ animation: spin 1.5s linear infinite;
1819
+ }
1820
+ svg {
1821
+ width: 100%;
1822
+ height: 100%;
1823
+ }
1824
+ @keyframes spin {
1825
+ 100% { transform: rotate(360deg); }
1826
+ }
1827
+ circle {
1828
+ opacity: 0.25;
1829
+ }
1830
+ path, line, rect {
1831
+ opacity: 0.75;
1832
+ }
1833
+ </style>
1834
+ <div class="loader">
1835
+ <svg viewBox="0 0 50 50">
1836
+ ${o==="spiral"?`<path d="${b.spiral}" fill="none" stroke="currentColor" stroke-width="4" stroke-linecap="round" />`:o==="sun"?`<path d="${b.sun}" stroke="currentColor" stroke-width="4" stroke-linecap="round" />`:`<path d="${b.diamond}" fill="none" stroke="currentColor" stroke-width="4" />`}
1837
+ </svg>
1838
+ </div>
1839
+ `}};_("af-loader",ln);hl=ln});var ho={};Q(ho,{default:()=>rl,AfriSkeleton:()=>an});var an,rl;var ro=x(()=>{S();an=class an extends c{static get observedAttributes(){return["variant","width","height","lines"]}constructor(){super();this.render()}attributeChangedCallback(){this.render()}render(){let t=this.getAttribute("variant")||"text",n=this.getAttribute("width")||"100%",o=this.getAttribute("height")||"auto",b=parseInt(this.getAttribute("lines"))||1,l={text:{height:"16px",borderRadius:"4px"},title:{height:"28px",borderRadius:"4px"},avatar:{width:"48px",height:"48px",borderRadius:"50%"},card:{height:"200px",borderRadius:"12px"},button:{height:"40px",borderRadius:"6px",width:"120px"}},a=l[t]||l.text;this.shadowRoot.innerHTML=`
1840
+ <style>
1841
+ :host {
1842
+ display: block;
1843
+ }
1844
+
1845
+ .skeleton {
1846
+ background: linear-gradient(
1847
+ 90deg,
1848
+ #1e1e1e 0%,
1849
+ #2a2a2a 50%,
1850
+ #1e1e1e 100%
1851
+ );
1852
+ background-size: 200% 100%;
1853
+ animation: shimmer 1.5s infinite;
1854
+ border-radius: ${a.borderRadius};
1855
+ }
1856
+
1857
+ @keyframes shimmer {
1858
+ 0% { background-position: 200% 0; }
1859
+ 100% { background-position: -200% 0; }
1860
+ }
1861
+
1862
+ .skeleton-line {
1863
+ width: ${t==="text"?n:a.width||n};
1864
+ height: ${a.height};
1865
+ margin-bottom: 8px;
1866
+ }
1867
+
1868
+ .skeleton-line:last-child {
1869
+ margin-bottom: 0;
1870
+ width: ${t==="text"?"70%":"100%"};
1871
+ }
1872
+ </style>
1873
+
1874
+ ${t==="text"||t==="title"?Array(b).fill(0).map(()=>'<div class="skeleton skeleton-line"></div>').join(""):`<div class="skeleton" style="width: ${a.width||n}; height: ${a.height||o};"></div>`}
1875
+ `}};_("af-skeleton",an);rl=an});var go={};Q(go,{default:()=>gl,AfriDivider:()=>fn});var fn,gl;var $o=x(()=>{S();fn=class fn extends c{static get observedAttributes(){return["pattern","height","color","flip"]}constructor(){super();this.render()}attributeChangedCallback(){this.render()}_getPatternPath(t,n,o){switch(t||"zigzag"){case"zigzag":return`M0,${o} L${n/4},0 L${n/2},${o} L${n*0.75},0 L${n},${o} V${o+10} H0 Z`;case"waves":return`M0,${o/2} Q${n/4},0 ${n/2},${o/2} T${n},${o/2} V${o} H0 Z`;case"triangles":return`M0,${o} L${n/8},0 L${n/4},${o} L${n*0.375},0 L${n/2},${o}
1876
+ L${n*0.625},0 L${n*0.75},${o} L${n*0.875},0 L${n},${o} V${o+10} H0 Z`;case"diamonds":return`M0,0 H${n} V${o/2}
1877
+ L${n*0.9},${o} L${n*0.8},${o/2}
1878
+ L${n*0.7},${o} L${n*0.6},${o/2}
1879
+ L${n*0.5},${o} L${n*0.4},${o/2}
1880
+ L${n*0.3},${o} L${n*0.2},${o/2}
1881
+ L${n*0.1},${o} L0,${o/2} Z`;default:return`M0,0 H${n} V${o} H0 Z`}}render(){let t=this.getAttribute("pattern")||"zigzag",n=this.getAttribute("height")||"50",o=this.getAttribute("color")||"currentColor",b=this.hasAttribute("flip");this.shadowRoot.innerHTML=`
1882
+ <style>
1883
+ :host {
1884
+ display: block;
1885
+ line-height: 0;
1886
+ width: 100%;
1887
+ overflow: hidden;
1888
+ color: ${o};
1889
+ }
1890
+ svg {
1891
+ display: block;
1892
+ width: 100%;
1893
+ height: ${n}px;
1894
+ ${b?"transform: rotate(180deg);":""}
1895
+ }
1896
+ </style>
1897
+ <svg viewBox="0 0 100 ${n}" preserveAspectRatio="none">
1898
+ <path d="${this._getPatternPath(t,100,parseInt(n))}" fill="currentColor" />
1899
+ </svg>
1900
+ `}};_("af-divider",fn);gl=fn});function $l(t,n,o=50,b=50){let l=[];for(let a=0;a<t;a++){let f=2*Math.PI*a/t-Math.PI/2,h=o+n*Math.cos(f),r=b+n*Math.sin(f);l.push(`${h.toFixed(2)},${r.toFixed(2)}`)}return l.join(" ")}function Gn({primaryColor:t="#FF0000",secondaryColor:n="#000000",backgroundColor:o="#8B0000",stripeWidth:b=4,size:l=40}={}){let a=`
1901
+ <svg xmlns="http://www.w3.org/2000/svg" width="${l}" height="${l}" viewBox="0 0 ${l} ${l}">
1902
+ <rect width="${l}" height="${l}" fill="${o}"/>
1903
+ <rect x="0" y="0" width="${l}" height="${b}" fill="${t}" opacity="0.8"/>
1904
+ <rect x="0" y="${l/2-b/2}" width="${l}" height="${b}" fill="${n}" opacity="0.6"/>
1905
+ <rect x="0" y="${l-b}" width="${l}" height="${b}" fill="${t}" opacity="0.8"/>
1906
+ <rect x="0" y="0" width="${b}" height="${l}" fill="${t}" opacity="0.5"/>
1907
+ <rect x="${l/2-b/2}" y="0" width="${b}" height="${l}" fill="${n}" opacity="0.4"/>
1908
+ <rect x="${l-b}" y="0" width="${b}" height="${l}" fill="${t}" opacity="0.5"/>
1909
+ </svg>
1910
+ `;return`data:image/svg+xml,${encodeURIComponent(a.trim())}`}function Jn({earthColor:t="#8B4513",ochreColor:n="#CD853F",charcoalColor:o="#2F2F2F",size:b=50}={}){let l=`
1911
+ <svg xmlns="http://www.w3.org/2000/svg" width="${b}" height="${b}" viewBox="0 0 ${b} ${b}">
1912
+ <rect width="${b}" height="${b}" fill="${t}"/>
1913
+ <!-- Cave art inspired figures -->
1914
+ <circle cx="${b*0.3}" cy="${b*0.3}" r="${b*0.08}" fill="${n}"/>
1915
+ <line x1="${b*0.3}" y1="${b*0.38}" x2="${b*0.3}" y2="${b*0.6}" stroke="${o}" stroke-width="2"/>
1916
+ <line x1="${b*0.2}" y1="${b*0.45}" x2="${b*0.4}" y2="${b*0.45}" stroke="${o}" stroke-width="2"/>
1917
+ <!-- Animal figure -->
1918
+ <ellipse cx="${b*0.7}" cy="${b*0.5}" rx="${b*0.15}" ry="${b*0.08}" fill="${n}"/>
1919
+ <line x1="${b*0.6}" y1="${b*0.58}" x2="${b*0.6}" y2="${b*0.7}" stroke="${o}" stroke-width="2"/>
1920
+ <line x1="${b*0.8}" y1="${b*0.58}" x2="${b*0.8}" y2="${b*0.7}" stroke="${o}" stroke-width="2"/>
1921
+ <!-- Dots like ancient markings -->
1922
+ <circle cx="${b*0.15}" cy="${b*0.8}" r="3" fill="${n}"/>
1923
+ <circle cx="${b*0.85}" cy="${b*0.2}" r="3" fill="${n}"/>
1924
+ </svg>
1925
+ `;return`data:image/svg+xml,${encodeURIComponent(l.trim())}`}function Ln({primaryColor:t="#1EB53A",accentColor:n="#FCD116",size:o=30}={}){let b=`
1926
+ <svg xmlns="http://www.w3.org/2000/svg" width="${o}" height="${o}" viewBox="0 0 ${o} ${o}">
1927
+ <rect width="${o}" height="${o}" fill="${t}"/>
1928
+ <!-- Pindo (Border) Motifs: Cashew/Triangle -->
1929
+ <path d="M0,0 L${o/2},${o/2} L0,${o} Z" fill="${n}"/>
1930
+ <path d="M${o},0 L${o/2},${o/2} L${o},${o} Z" fill="${n}"/>
1931
+ <circle cx="${o/2}" cy="${o/2}" r="${o*0.15}" fill="none" stroke="${n}" stroke-width="2"/>
1932
+ </svg>
1933
+ `;return`data:image/svg+xml,${encodeURIComponent(b.trim())}`}function vl({primaryColor:t="#FF6B00",secondaryColor:n="#002B5C",backgroundColor:o="#FFFFFF",size:b=40}={}){let l=`
1934
+ <svg xmlns="http://www.w3.org/2000/svg" width="${b}" height="${b}" viewBox="0 0 ${b} ${b}">
1935
+ <rect width="${b}" height="${b}" fill="${o}"/>
1936
+ <!-- Border pattern -->
1937
+ <rect x="0" y="0" width="${b}" height="${b*0.1}" fill="${t}"/>
1938
+ <rect x="0" y="${b*0.9}" width="${b}" height="${b*0.1}" fill="${t}"/>
1939
+ <rect x="0" y="0" width="${b*0.1}" height="${b}" fill="${t}"/>
1940
+ <rect x="${b*0.9}" y="0" width="${b*0.1}" height="${b}" fill="${t}"/>
1941
+ <!-- Center motif -->
1942
+ <circle cx="${b*0.5}" cy="${b*0.5}" r="${b*0.15}" fill="${n}"/>
1943
+ <text x="${b*0.5}" y="${b*0.55}" text-anchor="middle" fill="${t}" font-size="${b*0.08}">KANGA</text>
1944
+ </svg>
1945
+ `;return`data:image/svg+xml,${encodeURIComponent(l.trim())}`}function wl({primaryColor:t="#8B4513",secondaryColor:n="#DAA520",backgroundColor:o="#F5F5DC",size:b=30}={}){let l=`
1946
+ <svg xmlns="http://www.w3.org/2000/svg" width="${b}" height="${b}" viewBox="0 0 ${b} ${b}">
1947
+ <rect width="${b}" height="${b}" fill="${o}"/>
1948
+ <!-- Kuba geometric border -->
1949
+ <polygon points="0,0 ${b*0.3},0 0,${b*0.3}" fill="${t}"/>
1950
+ <polygon points="${b},0 ${b*0.7},0 ${b},${b*0.3}" fill="${t}"/>
1951
+ <polygon points="0,${b} ${b*0.3},${b} 0,${b*0.7}" fill="${t}"/>
1952
+ <polygon points="${b},${b} ${b*0.7},${b} ${b},${b*0.7}" fill="${t}"/>
1953
+ <!-- Center diamond -->
1954
+ <polygon points="${b*0.5},${b*0.3} ${b*0.7},${b*0.5} ${b*0.5},${b*0.7} ${b*0.3},${b*0.5}" fill="${n}"/>
1955
+ </svg>
1956
+ `;return`data:image/svg+xml,${encodeURIComponent(l.trim())}`}function cl({primaryColor:t="#FF0000",secondaryColor:n="#000000",accentColor:o="#FFFFFF",size:b=40}={}){let l=`
1957
+ <svg xmlns="http://www.w3.org/2000/svg" width="${b}" height="${b}" viewBox="0 0 ${b} ${b}">
1958
+ <rect width="${b}" height="${b}" fill="${o}"/>
1959
+ <!-- Bead pattern -->
1960
+ <circle cx="${b*0.2}" cy="${b*0.2}" r="${b*0.08}" fill="${t}"/>
1961
+ <circle cx="${b*0.5}" cy="${b*0.2}" r="${b*0.08}" fill="${n}"/>
1962
+ <circle cx="${b*0.8}" cy="${b*0.2}" r="${b*0.08}" fill="${t}"/>
1963
+ <circle cx="${b*0.2}" cy="${b*0.5}" r="${b*0.08}" fill="${n}"/>
1964
+ <circle cx="${b*0.5}" cy="${b*0.5}" r="${b*0.08}" fill="${t}"/>
1965
+ <circle cx="${b*0.8}" cy="${b*0.5}" r="${b*0.08}" fill="${n}"/>
1966
+ <circle cx="${b*0.2}" cy="${b*0.8}" r="${b*0.08}" fill="${t}"/>
1967
+ <circle cx="${b*0.5}" cy="${b*0.8}" r="${b*0.08}" fill="${n}"/>
1968
+ <circle cx="${b*0.8}" cy="${b*0.8}" r="${b*0.08}" fill="${t}"/>
1969
+ </svg>
1970
+ `;return`data:image/svg+xml,${encodeURIComponent(l.trim())}`}function _l({primaryColor:t="#8B0000",secondaryColor:n="#FFD700",backgroundColor:o="#654321",size:b=50}={}){let l=`
1971
+ <svg xmlns="http://www.w3.org/2000/svg" width="${b}" height="${b}" viewBox="0 0 ${b} ${b}">
1972
+ <ellipse cx="${b*0.5}" cy="${b*0.5}" rx="${b*0.4}" ry="${b*0.45}" fill="${o}"/>
1973
+ <!-- Shield patterns -->
1974
+ <ellipse cx="${b*0.5}" cy="${b*0.3}" rx="${b*0.2}" ry="${b*0.15}" fill="${t}"/>
1975
+ <rect x="${b*0.4}" y="${b*0.5}" width="${b*0.2}" height="${b*0.3}" fill="${n}"/>
1976
+ <!-- Decorative lines -->
1977
+ <line x1="${b*0.3}" y1="${b*0.2}" x2="${b*0.7}" y2="${b*0.2}" stroke="${t}" stroke-width="3"/>
1978
+ <line x1="${b*0.3}" y1="${b*0.8}" x2="${b*0.7}" y2="${b*0.8}" stroke="${t}" stroke-width="3"/>
1979
+ </svg>
1980
+ `;return`data:image/svg+xml,${encodeURIComponent(l.trim())}`}function Al({primaryColor:t="#FF1493",secondaryColor:n="#00FF00",accentColor:o="#FFFF00",backgroundColor:b="#FFFFFF",size:l=50}={}){let a=`
1981
+ <svg xmlns="http://www.w3.org/2000/svg" width="${l}" height="${l}" viewBox="0 0 ${l} ${l}">
1982
+ <rect width="${l}" height="${l}" fill="${b}"/>
1983
+ <!-- Ndebele geometric patterns -->
1984
+ <polygon points="${l*0.2},${l*0.2} ${l*0.4},${l*0.2} ${l*0.3},${l*0.4}" fill="${t}"/>
1985
+ <polygon points="${l*0.6},${l*0.2} ${l*0.8},${l*0.2} ${l*0.7},${l*0.4}" fill="${n}"/>
1986
+ <polygon points="${l*0.2},${l*0.6} ${l*0.4},${l*0.6} ${l*0.3},${l*0.8}" fill="${o}"/>
1987
+ <polygon points="${l*0.6},${l*0.6} ${l*0.8},${l*0.6} ${l*0.7},${l*0.8}" fill="${t}"/>
1988
+ <!-- Center design -->
1989
+ <circle cx="${l*0.5}" cy="${l*0.5}" r="${l*0.15}" fill="${n}"/>
1990
+ <rect x="${l*0.45}" y="${l*0.45}" width="${l*0.1}" height="${l*0.1}" fill="${o}"/>
1991
+ </svg>
1992
+ `;return`data:image/svg+xml,${encodeURIComponent(a.trim())}`}function Fn({primaryColor:t="#00A3DD",secondaryColor:n="#FCD116",backgroundColor:o="#1EB53A",size:b=50}={}){let l=`
1993
+ <svg xmlns="http://www.w3.org/2000/svg" width="${b}" height="${b}" viewBox="0 0 ${b} ${b}">
1994
+ <rect width="${b}" height="${b}" fill="${o}"/>
1995
+ <circle cx="${b*0.25}" cy="${b*0.25}" r="${b*0.2}" fill="${t}" opacity="0.8"/>
1996
+ <circle cx="${b*0.75}" cy="${b*0.75}" r="${b*0.2}" fill="${t}" opacity="0.8"/>
1997
+ <circle cx="${b*0.25}" cy="${b*0.25}" r="${b*0.1}" fill="${n}"/>
1998
+ <circle cx="${b*0.75}" cy="${b*0.75}" r="${b*0.1}" fill="${n}"/>
1999
+ <circle cx="${b*0.75}" cy="${b*0.25}" r="${b*0.08}" fill="${n}" opacity="0.6"/>
2000
+ <circle cx="${b*0.25}" cy="${b*0.75}" r="${b*0.08}" fill="${n}" opacity="0.6"/>
2001
+ </svg>
2002
+ `;return`data:image/svg+xml,${encodeURIComponent(l.trim())}`}function Bn({colors:t=["#FFD700","#228B22","#DC143C","#000000"],size:n=60}={}){let[o,b,l,a]=t,f=n/6,h=`
2003
+ <svg xmlns="http://www.w3.org/2000/svg" width="${n}" height="${n}" viewBox="0 0 ${n} ${n}">
2004
+ <rect width="${n}" height="${n}" fill="${a}"/>
2005
+ <!-- Horizontal bands -->
2006
+ <rect x="0" y="0" width="${n}" height="${f}" fill="${o}"/>
2007
+ <rect x="0" y="${f}" width="${n}" height="${f}" fill="${b}"/>
2008
+ <rect x="0" y="${f*2}" width="${n}" height="${f}" fill="${l}"/>
2009
+ <rect x="0" y="${f*3}" width="${n}" height="${f}" fill="${o}"/>
2010
+ <rect x="0" y="${f*4}" width="${n}" height="${f}" fill="${b}"/>
2011
+ <rect x="0" y="${f*5}" width="${n}" height="${f}" fill="${l}"/>
2012
+ <!-- Vertical accents -->
2013
+ <rect x="${n*0.2}" y="0" width="3" height="${n}" fill="${a}" opacity="0.5"/>
2014
+ <rect x="${n*0.4}" y="0" width="3" height="${n}" fill="${a}" opacity="0.5"/>
2015
+ <rect x="${n*0.6}" y="0" width="3" height="${n}" fill="${a}" opacity="0.5"/>
2016
+ <rect x="${n*0.8}" y="0" width="3" height="${n}" fill="${a}" opacity="0.5"/>
2017
+ <!-- Kente squares -->
2018
+ <rect x="${n*0.1}" y="${n*0.1}" width="${n*0.15}" height="${n*0.15}" fill="${o}" stroke="${a}" stroke-width="1"/>
2019
+ <rect x="${n*0.75}" y="${n*0.75}" width="${n*0.15}" height="${n*0.15}" fill="${l}" stroke="${a}" stroke-width="1"/>
2020
+ </svg>
2021
+ `;return`data:image/svg+xml,${encodeURIComponent(h.trim())}`}function mn({symbolColor:t="#000000",backgroundColor:n="#CD853F",size:o=50}={}){let b=`
2022
+ <svg xmlns="http://www.w3.org/2000/svg" width="${o}" height="${o}" viewBox="0 0 ${o} ${o}">
2023
+ <rect width="${o}" height="${o}" fill="${n}"/>
2024
+ <!-- Sankofa-inspired heart shape (go back and get it) -->
2025
+ <path d="M${o*0.5} ${o*0.2}
2026
+ C${o*0.3} ${o*0.1} ${o*0.15} ${o*0.3} ${o*0.25} ${o*0.5}
2027
+ L${o*0.5} ${o*0.8}
2028
+ L${o*0.75} ${o*0.5}
2029
+ C${o*0.85} ${o*0.3} ${o*0.7} ${o*0.1} ${o*0.5} ${o*0.2}"
2030
+ fill="none" stroke="${t}" stroke-width="3"/>
2031
+ <!-- Spiral detail -->
2032
+ <circle cx="${o*0.35}" cy="${o*0.45}" r="${o*0.08}" fill="none" stroke="${t}" stroke-width="2"/>
2033
+ <circle cx="${o*0.65}" cy="${o*0.45}" r="${o*0.08}" fill="none" stroke="${t}" stroke-width="2"/>
2034
+ </svg>
2035
+ `;return`data:image/svg+xml,${encodeURIComponent(b.trim())}`}function Rn({colors:t=["#4B0082","#FFD700","#FFFFFF"],size:n=50}={}){let[o,b,l]=t,a=n/10,f=`
2036
+ <svg xmlns="http://www.w3.org/2000/svg" width="${n}" height="${n}" viewBox="0 0 ${n} ${n}">
2037
+ <rect width="${n}" height="${n}" fill="${o}"/>
2038
+ <!-- Horizontal stripes -->
2039
+ <rect x="0" y="${a}" width="${n}" height="${a*0.5}" fill="${b}"/>
2040
+ <rect x="0" y="${a*3}" width="${n}" height="${a*0.5}" fill="${l}"/>
2041
+ <rect x="0" y="${a*5}" width="${n}" height="${a*0.5}" fill="${b}"/>
2042
+ <rect x="0" y="${a*7}" width="${n}" height="${a*0.5}" fill="${l}"/>
2043
+ <rect x="0" y="${a*9}" width="${n}" height="${a*0.5}" fill="${b}"/>
2044
+ <!-- Vertical accent lines -->
2045
+ <rect x="${n*0.48}" y="0" width="${a*0.4}" height="${n}" fill="${b}" opacity="0.7"/>
2046
+ <!-- Diamond motifs -->
2047
+ <polygon points="${n*0.25},${n*0.3} ${n*0.35},${n*0.5} ${n*0.25},${n*0.7} ${n*0.15},${n*0.5}"
2048
+ fill="${b}" stroke="${l}" stroke-width="1"/>
2049
+ <polygon points="${n*0.75},${n*0.3} ${n*0.85},${n*0.5} ${n*0.75},${n*0.7} ${n*0.65},${n*0.5}"
2050
+ fill="${b}" stroke="${l}" stroke-width="1"/>
2051
+ </svg>
2052
+ `;return`data:image/svg+xml,${encodeURIComponent(f.trim())}`}function Dn({primaryColor:t="#FF6B00",secondaryColor:n="#00A86B",accentColor:o="#FFD700",backgroundColor:b="#FFFFFF",size:l=60}={}){let a=`
2053
+ <svg xmlns="http://www.w3.org/2000/svg" width="${l}" height="${l}" viewBox="0 0 ${l} ${l}">
2054
+ <rect width="${l}" height="${l}" fill="${b}"/>
2055
+ <!-- Bold circular motifs -->
2056
+ <circle cx="${l*0.3}" cy="${l*0.3}" r="${l*0.25}" fill="${t}"/>
2057
+ <circle cx="${l*0.3}" cy="${l*0.3}" r="${l*0.15}" fill="${n}"/>
2058
+ <circle cx="${l*0.3}" cy="${l*0.3}" r="${l*0.08}" fill="${o}"/>
2059
+
2060
+ <circle cx="${l*0.8}" cy="${l*0.8}" r="${l*0.2}" fill="${n}"/>
2061
+ <circle cx="${l*0.8}" cy="${l*0.8}" r="${l*0.1}" fill="${t}"/>
2062
+
2063
+ <!-- Connecting lines -->
2064
+ <line x1="${l*0.45}" y1="${l*0.45}" x2="${l*0.65}" y2="${l*0.65}"
2065
+ stroke="${t}" stroke-width="4"/>
2066
+
2067
+ <!-- Small dots -->
2068
+ <circle cx="${l*0.1}" cy="${l*0.8}" r="${l*0.05}" fill="${o}"/>
2069
+ <circle cx="${l*0.9}" cy="${l*0.2}" r="${l*0.05}" fill="${o}"/>
2070
+ </svg>
2071
+ `;return`data:image/svg+xml,${encodeURIComponent(a.trim())}`}function On({primaryColor:t="#000000",secondaryColor:n="#FFFFFF",accentColor:o="#8B4513",size:b=60}={}){let l=`
2072
+ <svg xmlns="http://www.w3.org/2000/svg" width="${b}" height="${b}" viewBox="0 0 ${b} ${b}">
2073
+ <rect width="${b}" height="${b}" fill="${t}"/>
2074
+ <!-- Zigzags -->
2075
+ <polyline points="0,${b*0.2} ${b*0.25},0 ${b*0.5},${b*0.2} ${b*0.75},0 ${b},${b*0.2}"
2076
+ fill="none" stroke="${n}" stroke-width="3"/>
2077
+ <polyline points="0,${b*0.8} ${b*0.25},${b} ${b*0.5},${b*0.8} ${b*0.75},${b} ${b},${b*0.8}"
2078
+ fill="none" stroke="${n}" stroke-width="3"/>
2079
+ <!-- Crosses -->
2080
+ <line x1="${b*0.25}" y1="${b*0.4}" x2="${b*0.25}" y2="${b*0.6}" stroke="${n}" stroke-width="2"/>
2081
+ <line x1="${b*0.15}" y1="${b*0.5}" x2="${b*0.35}" y2="${b*0.5}" stroke="${n}" stroke-width="2"/>
2082
+ <line x1="${b*0.75}" y1="${b*0.4}" x2="${b*0.75}" y2="${b*0.6}" stroke="${n}" stroke-width="2"/>
2083
+ <line x1="${b*0.65}" y1="${b*0.5}" x2="${b*0.85}" y2="${b*0.5}" stroke="${n}" stroke-width="2"/>
2084
+ <!-- Dots -->
2085
+ <circle cx="${b*0.5}" cy="${b*0.5}" r="${b*0.08}" fill="${o}"/>
2086
+ </svg>
2087
+ `;return`data:image/svg+xml,${encodeURIComponent(l.trim())}`}function Wn({primaryColor:t="#D2B48C",secondaryColor:n="#3E2723",size:o=60}={}){let b=`
2088
+ <svg xmlns="http://www.w3.org/2000/svg" width="${o}" height="${o}" viewBox="0 0 ${o} ${o}">
2089
+ <rect width="${o}" height="${o}" fill="${t}"/>
2090
+ <!-- Interlocking diamonds/rectangles -->
2091
+ <rect x="${o*0.1}" y="${o*0.1}" width="${o*0.3}" height="${o*0.3}" fill="${n}"/>
2092
+ <rect x="${o*0.6}" y="${o*0.6}" width="${o*0.3}" height="${o*0.3}" fill="${n}"/>
2093
+ <rect x="${o*0.6}" y="${o*0.1}" width="${o*0.3}" height="${o*0.3}"
2094
+ fill="none" stroke="${n}" stroke-width="4"/>
2095
+ <rect x="${o*0.1}" y="${o*0.6}" width="${o*0.3}" height="${o*0.3}"
2096
+ fill="none" stroke="${n}" stroke-width="4"/>
2097
+ <!-- Center lines -->
2098
+ <line x1="${o*0.4}" y1="${o*0.5}" x2="${o*0.6}" y2="${o*0.5}" stroke="${n}" stroke-width="2"/>
2099
+ <line x1="${o*0.5}" y1="${o*0.4}" x2="${o*0.5}" y2="${o*0.6}" stroke="${n}" stroke-width="2"/>
2100
+ </svg>
2101
+ `;return`data:image/svg+xml,${encodeURIComponent(b.trim())}`}function dn({primaryColor:t="#000000",secondaryColor:n="#FFFFFF",accentColor:o="#B22222",size:b=60}={}){let l=`
2102
+ <svg xmlns="http://www.w3.org/2000/svg" width="${b}" height="${b}" viewBox="0 0 ${b} ${b}">
2103
+ <rect width="${b}" height="${b}" fill="${n}"/>
2104
+ <!-- Spiral/Diamond Motif -->
2105
+ <path d="M${b*0.5} ${b*0.1}
2106
+ L${b*0.9} ${b*0.5}
2107
+ L${b*0.5} ${b*0.9}
2108
+ L${b*0.1} ${b*0.5} Z"
2109
+ fill="${t}"/>
2110
+ <path d="M${b*0.5} ${b*0.3}
2111
+ L${b*0.7} ${b*0.5}
2112
+ L${b*0.5} ${b*0.7}
2113
+ L${b*0.3} ${b*0.5} Z"
2114
+ fill="${n}"/>
2115
+ <circle cx="${b*0.5}" cy="${b*0.5}" r="${b*0.1}" fill="${o}"/>
2116
+ </svg>
2117
+ `;return`data:image/svg+xml,${encodeURIComponent(l.trim())}`}function Un({colors:t=["#009E60","#FCDD09","#EF3340"],backgroundColor:n="#FFFFFF",size:o=40}={}){let[b,l,a]=t,f=`
2118
+ <svg xmlns="http://www.w3.org/2000/svg" width="${o}" height="${o}" viewBox="0 0 ${o} ${o}">
2119
+ <rect width="${o}" height="${o}" fill="${n}"/>
2120
+ <!-- Diamond Chain -->
2121
+ <polygon points="${o*0.5},0 ${o},${o*0.5} ${o*0.5},${o} 0,${o*0.5}"
2122
+ fill="${b}" opacity="0.2"/>
2123
+ <polygon points="${o*0.5},${o*0.2} ${o*0.8},${o*0.5} ${o*0.5},${o*0.8} ${o*0.2},${o*0.5}"
2124
+ fill="${l}"/>
2125
+ <rect x="${o*0.4}" y="${o*0.4}" width="${o*0.2}" height="${o*0.2}" fill="${a}"/>
2126
+ <!-- Side accents -->
2127
+ <line x1="0" y1="0" x2="0" y2="${o}" stroke="${b}" stroke-width="4"/>
2128
+ <line x1="${o}" y1="0" x2="${o}" y2="${o}" stroke="${b}" stroke-width="4"/>
2129
+ </svg>
2130
+ `;return`data:image/svg+xml,${encodeURIComponent(f.trim())}`}function jn({colors:t=["#FFD700","#4169E1","#FF69B4","#228B22"],size:n=60,strokeWidth:o=2}={}){let[b,l,a,f]=t,h=`
2131
+ <svg xmlns="http://www.w3.org/2000/svg" width="${n}" height="${n}" viewBox="0 0 ${n} ${n}">
2132
+ <rect width="${n}" height="${n}" fill="#FFFFFF"/>
2133
+ <rect x="${o}" y="${o}"
2134
+ width="${n-o*2}" height="${n-o*2}"
2135
+ fill="none" stroke="#000000" stroke-width="${o}"/>
2136
+ <rect x="${n*0.15}" y="${n*0.15}" width="${n*0.35}" height="${n*0.35}"
2137
+ fill="${b}" stroke="#000000" stroke-width="${o/2}"/>
2138
+ <rect x="${n*0.5}" y="${n*0.15}" width="${n*0.35}" height="${n*0.35}"
2139
+ fill="${l}" stroke="#000000" stroke-width="${o/2}"/>
2140
+ <rect x="${n*0.15}" y="${n*0.5}" width="${n*0.35}" height="${n*0.35}"
2141
+ fill="${a}" stroke="#000000" stroke-width="${o/2}"/>
2142
+ <rect x="${n*0.5}" y="${n*0.5}" width="${n*0.35}" height="${n*0.35}"
2143
+ fill="${f}" stroke="#000000" stroke-width="${o/2}"/>
2144
+ <polygon points="${n/2},${n*0.3} ${n*0.7},${n/2} ${n/2},${n*0.7} ${n*0.3},${n/2}"
2145
+ fill="#FFFFFF" stroke="#000000" stroke-width="${o}"/>
2146
+ </svg>
2147
+ `;return`data:image/svg+xml,${encodeURIComponent(h.trim())}`}function Vn({colors:t=["#FFFFFF","#000000","#FF0000","#00A86B","#FFD700"],size:n=50}={}){let[o,b,l,a,f]=t,h=n/10,r=`
2148
+ <svg xmlns="http://www.w3.org/2000/svg" width="${n}" height="${n}" viewBox="0 0 ${n} ${n}">
2149
+ <rect width="${n}" height="${n}" fill="${b}"/>
2150
+ <!-- Triangle pattern (isivivane - sacred cairn) -->
2151
+ <polygon points="${n*0.5},${n*0.1} ${n*0.9},${n*0.9} ${n*0.1},${n*0.9}"
2152
+ fill="none" stroke="${o}" stroke-width="2"/>
2153
+ <polygon points="${n*0.5},${n*0.25} ${n*0.75},${n*0.75} ${n*0.25},${n*0.75}"
2154
+ fill="${l}"/>
2155
+ <!-- Beadwork dots -->
2156
+ <circle cx="${n*0.5}" cy="${n*0.35}" r="${h}" fill="${o}"/>
2157
+ <circle cx="${n*0.35}" cy="${n*0.6}" r="${h}" fill="${a}"/>
2158
+ <circle cx="${n*0.65}" cy="${n*0.6}" r="${h}" fill="${f}"/>
2159
+ <circle cx="${n*0.5}" cy="${n*0.8}" r="${h}" fill="${o}"/>
2160
+ <!-- Border dots -->
2161
+ <circle cx="${n*0.1}" cy="${n*0.1}" r="${h*0.7}" fill="${l}"/>
2162
+ <circle cx="${n*0.9}" cy="${n*0.1}" r="${h*0.7}" fill="${a}"/>
2163
+ </svg>
2164
+ `;return`data:image/svg+xml,${encodeURIComponent(r.trim())}`}function Nn({colors:t=["#3E5EB9","#FECD00","#B10C0C","#FFFFFF"],size:n=50}={}){let[o,b,l,a]=t,f=`
2165
+ <svg xmlns="http://www.w3.org/2000/svg" width="${n}" height="${n}" viewBox="0 0 ${n} ${n}">
2166
+ <rect width="${n}" height="${n}" fill="${o}"/>
2167
+ <!-- Shield shape (central to Eswatini culture) -->
2168
+ <ellipse cx="${n*0.5}" cy="${n*0.45}" rx="${n*0.35}" ry="${n*0.4}"
2169
+ fill="${b}" stroke="${l}" stroke-width="3"/>
2170
+ <!-- Inner pattern -->
2171
+ <ellipse cx="${n*0.5}" cy="${n*0.45}" rx="${n*0.2}" ry="${n*0.25}"
2172
+ fill="${l}"/>
2173
+ <!-- Feather accents -->
2174
+ <line x1="${n*0.5}" y1="${n*0.05}" x2="${n*0.5}" y2="${n*0.2}"
2175
+ stroke="${a}" stroke-width="3"/>
2176
+ <line x1="${n*0.4}" y1="${n*0.08}" x2="${n*0.45}" y2="${n*0.15}"
2177
+ stroke="${a}" stroke-width="2"/>
2178
+ <line x1="${n*0.6}" y1="${n*0.08}" x2="${n*0.55}" y2="${n*0.15}"
2179
+ stroke="${a}" stroke-width="2"/>
2180
+ <!-- Spear points -->
2181
+ <polygon points="${n*0.1},${n*0.3} ${n*0.05},${n*0.5} ${n*0.15},${n*0.5}" fill="${a}"/>
2182
+ <polygon points="${n*0.9},${n*0.3} ${n*0.85},${n*0.5} ${n*0.95},${n*0.5}" fill="${a}"/>
2183
+ </svg>
2184
+ `;return`data:image/svg+xml,${encodeURIComponent(f.trim())}`}function Kn({primaryColor:t="#FFFFFF",accentColor:n="#00A86B",backgroundColor:o="#1a1a2e",size:b=50}={}){let l=`
2185
+ <svg xmlns="http://www.w3.org/2000/svg" width="${b}" height="${b}" viewBox="0 0 ${b} ${b}">
2186
+ <rect width="${b}" height="${b}" fill="${o}"/>
2187
+ <!-- Horizontal bands -->
2188
+ <rect x="0" y="${b*0.2}" width="${b}" height="${b*0.1}" fill="${t}"/>
2189
+ <rect x="0" y="${b*0.7}" width="${b}" height="${b*0.1}" fill="${t}"/>
2190
+ <!-- Vertical bands -->
2191
+ <rect x="${b*0.2}" y="0" width="${b*0.1}" height="${b}" fill="${n}"/>
2192
+ <rect x="${b*0.7}" y="0" width="${b*0.1}" height="${b}" fill="${n}"/>
2193
+ <!-- Central diamond -->
2194
+ <polygon points="${b*0.5},${b*0.35} ${b*0.65},${b*0.5} ${b*0.5},${b*0.65} ${b*0.35},${b*0.5}"
2195
+ fill="${n}" stroke="${t}" stroke-width="2"/>
2196
+ <!-- Corner triangles -->
2197
+ <polygon points="0,0 ${b*0.15},0 0,${b*0.15}" fill="${n}"/>
2198
+ <polygon points="${b},0 ${b*0.85},0 ${b},${b*0.15}" fill="${n}"/>
2199
+ <polygon points="0,${b} ${b*0.15},${b} 0,${b*0.85}" fill="${n}"/>
2200
+ <polygon points="${b},${b} ${b*0.85},${b} ${b},${b*0.85}" fill="${n}"/>
2201
+ </svg>
2202
+ `;return`data:image/svg+xml,${encodeURIComponent(l.trim())}`}function ql(t,n){t.style.backgroundImage=`url("${n}")`,t.style.backgroundRepeat="repeat"}function pn({primaryColor:t="#8B0000",secondaryColor:n="#000000",accentColor:o="#FFD700",backgroundColor:b="#F5F5DC",size:l=60}={}){let a=`
2203
+ <svg xmlns="http://www.w3.org/2000/svg" width="${l}" height="${l}" viewBox="0 0 ${l} ${l}">
2204
+ <rect width="${l}" height="${l}" fill="${b}"/>
2205
+ <!-- Lozenge (Diamond) - universal protective symbol -->
2206
+ <polygon points="${l*0.5},${l*0.1} ${l*0.9},${l*0.5} ${l*0.5},${l*0.9} ${l*0.1},${l*0.5}"
2207
+ fill="${t}" stroke="${n}" stroke-width="2"/>
2208
+ <!-- Inner geometric details -->
2209
+ <line x1="${l*0.5}" y1="${l*0.1}" x2="${l*0.5}" y2="${l*0.9}" stroke="${o}" stroke-width="2"/>
2210
+ <line x1="${l*0.1}" y1="${l*0.5}" x2="${l*0.9}" y2="${l*0.5}" stroke="${o}" stroke-width="2"/>
2211
+ <!-- X symbols (Fibula/Cross) -->
2212
+ <line x1="${l*0.4}" y1="${l*0.4}" x2="${l*0.6}" y2="${l*0.6}" stroke="${n}" stroke-width="2"/>
2213
+ <line x1="${l*0.6}" y1="${l*0.4}" x2="${l*0.4}" y2="${l*0.6}" stroke="${n}" stroke-width="2"/>
2214
+ </svg>
2215
+ `;return`data:image/svg+xml,${encodeURIComponent(a.trim())}`}function In({primaryColor:t="#4B0082",secondaryColor:n="#8A2BE2",accentColor:o="#FFFFFF",size:b=50}={}){let l=`
2216
+ <svg xmlns="http://www.w3.org/2000/svg" width="${b}" height="${b}" viewBox="0 0 ${b} ${b}">
2217
+ <rect width="${b}" height="${b}" fill="${t}"/>
2218
+ <!-- Resist circles (Oniko) -->
2219
+ <circle cx="${b*0.5}" cy="${b*0.5}" r="${b*0.35}" fill="none" stroke="${n}" stroke-width="3"/>
2220
+ <circle cx="${b*0.5}" cy="${b*0.5}" r="${b*0.25}" fill="none" stroke="${o}" stroke-width="2" stroke-dasharray="4 2"/>
2221
+ <circle cx="${b*0.5}" cy="${b*0.5}" r="${b*0.1}" fill="${o}" opacity="0.8"/>
2222
+ <!-- Corner ripples -->
2223
+ <path d="M0,0 Q${b*0.2},0 ${b*0.2},${b*0.2} Q0,${b*0.2} 0,0" fill="${n}"/>
2224
+ <path d="M${b},${b} Q${b*0.8},${b} ${b*0.8},${b*0.8} Q${b},${b*0.8} ${b},${b}" fill="${n}"/>
2225
+ </svg>
2226
+ `;return`data:image/svg+xml,${encodeURIComponent(l.trim())}`}function El({primaryColor:t="#2D3D6B",secondaryColor:n="#6B8CC7",accentColor:o="#FFFFFF",size:b=60}={}){let l=`
2227
+ <svg xmlns="http://www.w3.org/2000/svg" width="${b}" height="${b}" viewBox="0 0 ${b} ${b}">
2228
+ <rect width="${b}" height="${b}" fill="${t}"/>
2229
+ <!-- Southern Cross / Tuareg Star -->
2230
+ <path d="M${b*0.5} 0 L${b*0.6} ${b*0.4} L${b} ${b*0.5} L${b*0.6} ${b*0.6} L${b*0.5} ${b} L${b*0.4} ${b*0.6} L0 ${b*0.5} L${b*0.4} ${b*0.4} Z"
2231
+ fill="none" stroke="${o}" stroke-width="2"/>
2232
+ <circle cx="${b*0.5}" cy="${b*0.5}" r="${b*0.1}" fill="${n}"/>
2233
+ </svg>
2234
+ `;return`data:image/svg+xml,${encodeURIComponent(l.trim())}`}function Hl({inkColor:t="#3A2E2C",parchmentColor:n="#F4E4BC",size:o=50}={}){let b=`
2235
+ <svg xmlns="http://www.w3.org/2000/svg" width="${o}" height="${o}" viewBox="0 0 ${o} ${o}">
2236
+ <rect width="${o}" height="${o}" fill="${n}"/>
2237
+ <path d="M${o*0.2} ${o*0.2} L${o*0.4} ${o*0.2} M${o*0.3} ${o*0.2} L${o*0.3} ${o*0.5} Q${o*0.4} ${o*0.6} ${o*0.2} ${o*0.7}"
2238
+ fill="none" stroke="${t}" stroke-width="3" stroke-linecap="round"/>
2239
+ <path d="M${o*0.6} ${o*0.3} C${o*0.8} ${o*0.3} ${o*0.8} ${o*0.6} ${o*0.6} ${o*0.6} L${o*0.8} ${o*0.8}"
2240
+ fill="none" stroke="${t}" stroke-width="3" stroke-linecap="round"/>
2241
+ </svg>
2242
+ `;return`data:image/svg+xml,${encodeURIComponent(b.trim())}`}function xl({clayColor:t="#4E342E",earthColor:n="#3E2723",accentColor:o="#BCAAA4",size:b=60}={}){let l=`
2243
+ <svg xmlns="http://www.w3.org/2000/svg" width="${b}" height="${b}" viewBox="0 0 ${b} ${b}">
2244
+ <rect width="${b}" height="${b}" fill="${n}"/>
2245
+ <path d="M${b*0.2} ${b*0.5} Q${b*0.3} ${b*0.2} ${b*0.5} ${b*0.3} T${b*0.8} ${b*0.5} Q${b*0.7} ${b*0.8} ${b*0.5} ${b*0.7} T${b*0.2} ${b*0.5}"
2246
+ fill="${t}" stroke="${o}" stroke-width="2"/>
2247
+ </svg>
2248
+ `;return`data:image/svg+xml,${encodeURIComponent(l.trim())}`}function vo({primaryColor:t="#334155",secondaryColor:n="#1e293b",size:o=100}={}){let b=`
2249
+ <svg xmlns="http://www.w3.org/2000/svg" width="${o}" height="${o}" viewBox="0 0 100 100">
2250
+ <rect width="100" height="100" fill="${n}"/>
2251
+ <path d="M10 10 H90 V90 H10 Z" fill="none" stroke="${t}" stroke-width="0.5" opacity="0.3"/>
2252
+ <path d="M20 20 V50 H50 V80 H80" fill="none" stroke="${t}" stroke-width="1"/>
2253
+ <circle cx="20" cy="20" r="2" fill="${t}"/>
2254
+ <circle cx="80" cy="80" r="2" fill="${t}"/>
2255
+ <circle cx="50" cy="50" r="1.5" fill="${t}"/>
2256
+ </svg>
2257
+ `;return`data:image/svg+xml,${encodeURIComponent(b.trim())}`}var un;var hn=x(()=>{un={generatePolygon:$l,generateShuka:Gn,generateHadzabe:Jn,generateKanga:vl,generateKangaBorder:Ln,generateKitenge:Fn,generateMasaiShield:_l,generateTibeb:Un,generateImigongo:dn,generateKente:Bn,generateAdinkra:mn,generateAsoOke:Rn,generateAnkara:Dn,generateBogolan:On,generateAdire:In,generateKuba:Wn,generateKubaBorder:wl,generateBerber:pn,generateNdebele:jn,generateNdebelePaint:Al,generateZulu:Vn,generateZuluBeads:cl,generateSwazi:Nn,generateXhosa:Kn,applyPattern:ql,generateTuareg:El,generateGeez:Hl,generateBoli:xl,generateCircuit:vo,circuit:vo}});var wo={};Q(wo,{default:()=>Ml,KangaCard:()=>rn});var rn,Ml;var co=x(()=>{S();hn();rn=class rn extends c{static get observedAttributes(){return["theme","proverb","proverb-translation"]}constructor(){super();this.render()}connectedCallback(){this.loadStyles(),this.applyTheme()}attributeChangedCallback(t,n,o){if(n!==o)if(t==="theme")this.applyTheme();else this.render()}getThemeColors(){let t=this.getAttribute("theme")||"tanzania",n={tanzania:{primary:"#1EB53A",accent:"#FCD116",border:"#00A3DD",text:"#000000"},maasai:{primary:"#8B0000",accent:"#FF0000",border:"#000000",text:"#FFFFFF"},ndebele:{primary:"#4169E1",accent:"#FFD700",border:"#FF69B4",text:"#000000"}};return n[t]||n.tanzania}applyTheme(){let t=this.getThemeColors(),n=this.shadowRoot.querySelector(".pindo");if(n){let o=generateKangaBorder({primaryColor:t.primary,accentColor:t.accent});n.style.backgroundImage=`url("${o}")`,n.style.backgroundRepeat="repeat"}}render(){let t=this.getAttribute("proverb")||"",n=this.getAttribute("proverb-translation")||"",o=this.getThemeColors();this.shadowRoot.innerHTML=`
2258
+ <style>
2259
+ :host {
2260
+ display: block;
2261
+ font-family: 'Inter', system-ui, sans-serif;
2262
+ }
2263
+
2264
+ .kanga-card {
2265
+ border-radius: var(--radius-lg, 8px);
2266
+ overflow: hidden;
2267
+ box-shadow: var(--shadow-lg, 0 5px 21px rgba(0, 0, 0, 0.2));
2268
+ transition: transform var(--transition-base, 250ms ease-out),
2269
+ box-shadow var(--transition-base, 250ms ease-out);
2270
+ }
2271
+
2272
+ .kanga-card:hover {
2273
+ transform: translateY(-3px);
2274
+ box-shadow: 0 8px 34px rgba(0, 0, 0, 0.25);
2275
+ }
2276
+
2277
+ /* Pindo - Decorative Border */
2278
+ .pindo {
2279
+ padding: var(--space-13, 13px);
2280
+ background-color: ${o.primary};
2281
+ }
2282
+
2283
+ /* Mji - Central Content Area */
2284
+ .mji {
2285
+ background: linear-gradient(135deg, #FFFFFF 0%, #F5F5F5 100%);
2286
+ padding: var(--space-21, 21px);
2287
+ min-height: 120px;
2288
+ }
2289
+
2290
+ /* Jina - Proverb Inscription */
2291
+ .jina {
2292
+ background-color: ${o.border};
2293
+ color: ${o.text};
2294
+ padding: var(--space-8, 8px) var(--space-13, 13px);
2295
+ text-align: center;
2296
+ font-style: italic;
2297
+ }
2298
+
2299
+ .jina .swahili {
2300
+ font-weight: 600;
2301
+ font-size: 1rem;
2302
+ margin-bottom: var(--space-3, 3px);
2303
+ }
2304
+
2305
+ .jina .translation {
2306
+ font-size: 0.85rem;
2307
+ opacity: 0.9;
2308
+ }
2309
+
2310
+ .jina:empty {
2311
+ display: none;
2312
+ }
2313
+
2314
+ /* Content slot styles */
2315
+ ::slotted(*) {
2316
+ margin: 0;
2317
+ }
2318
+
2319
+ ::slotted(h1), ::slotted(h2), ::slotted(h3) {
2320
+ color: ${o.primary};
2321
+ margin-bottom: var(--space-8, 8px);
2322
+ }
2323
+ </style>
2324
+
2325
+ <article class="kanga-card">
2326
+ <div class="pindo">
2327
+ <div class="mji">
2328
+ <slot></slot>
2329
+ </div>
2330
+ </div>
2331
+
2332
+ ${t?`
2333
+ <div class="jina">
2334
+ <p class="swahili">${t}</p>
2335
+ ${n?`<p class="translation">${n}</p>`:""}
2336
+ </div>
2337
+ `:'<div class="jina"><slot name="proverb"></slot></div>'}
2338
+ </article>
2339
+ `,this.applyTheme()}};_("af-kanga-card",rn);Ml=rn});var _o={};Q(_o,{default:()=>kl,CulturalCard:()=>gn});var gn,kl;var Ao=x(()=>{S();hn();gn=class gn extends c{static get observedAttributes(){return["culture","interactive"]}constructor(){super();this._cultures={maasai:{name:"Maasai",region:"Tanzania/Kenya",pattern:"generateShuka",colors:{primary:"#FF0000",accent:"#000000"}},hadzabe:{name:"Hadzabe",region:"Tanzania",pattern:"generateHadzabe",colors:{primary:"#8B4513",accent:"#CD853F"}},swahili:{name:"Swahili",region:"East Africa",pattern:"generateKangaBorder",colors:{primary:"#1EB53A",accent:"#FCD116"}},kitenge:{name:"Kitenge",region:"East Africa",pattern:"generateKitenge",colors:{primary:"#00A3DD",accent:"#1EB53A"}},tibeb:{name:"Tibeb",region:"Ethiopia",pattern:"generateTibeb",colors:{primary:"#009E60",accent:"#FCDD09"}},ashanti:{name:"Ashanti/Akan",region:"Ghana",pattern:"generateKente",colors:{primary:"#FFD700",accent:"#228B22"}},adinkra:{name:"Adinkra",region:"Ghana",pattern:"generateAdinkra",colors:{primary:"#000000",accent:"#CD853F"}},bogolan:{name:"Bogolan",region:"Mali",pattern:"generateBogolan",colors:{primary:"#3E2723",accent:"#D7CCC8"}},yoruba:{name:"Yoruba",region:"Nigeria",pattern:"generateAsoOke",colors:{primary:"#4B0082",accent:"#FFD700"}},ankara:{name:"Ankara",region:"West Africa",pattern:"generateAnkara",colors:{primary:"#FF6B00",accent:"#00A86B"}},kuba:{name:"Kuba Shoowa",region:"DRC",pattern:"generateKuba",colors:{primary:"#D2B48C",accent:"#3E2723"}},imigongo:{name:"Imigongo",region:"Rwanda",pattern:"generateImigongo",colors:{primary:"#000000",accent:"#B22222"}},ndebele:{name:"Ndebele",region:"South Africa",pattern:"generateNdebele",colors:{primary:"#4169E1",accent:"#FFD700"}},zulu:{name:"Zulu",region:"South Africa",pattern:"generateZulu",colors:{primary:"#FF0000",accent:"#000000"}},swazi:{name:"Swazi",region:"Eswatini",pattern:"generateSwazi",colors:{primary:"#3E5EB9",accent:"#FECD00"}},xhosa:{name:"Xhosa",region:"South Africa",pattern:"generateXhosa",colors:{primary:"#00A86B",accent:"#1a1a2e"}}},this.render()}connectedCallback(){this._setupInteraction()}_setupInteraction(){if(!this.hasAttribute("interactive"))return;this.shadowRoot.querySelector(".culture-selector")?.addEventListener("change",(n)=>{this.setAttribute("culture",n.target.value),this.emit("af-culture-change",{culture:n.target.value})})}attributeChangedCallback(){this.render(),this._setupInteraction()}render(){let t=this.getAttribute("culture")||"maasai",n=this.hasAttribute("interactive"),o=this._cultures[t]||this._cultures.maasai,b=un[o.pattern],l=b?b():"";this.shadowRoot.innerHTML=`
2340
+ <style>
2341
+ :host {
2342
+ display: block;
2343
+ font-family: 'Inter', system-ui, sans-serif;
2344
+ }
2345
+
2346
+ .cultural-card {
2347
+ border-radius: 12px;
2348
+ overflow: hidden;
2349
+ box-shadow: 0 4px 20px rgba(0,0,0,0.15);
2350
+ transition: transform 300ms ease, box-shadow 300ms ease;
2351
+ }
2352
+
2353
+ .cultural-card:hover {
2354
+ transform: translateY(-5px);
2355
+ box-shadow: 0 8px 30px rgba(0,0,0,0.2);
2356
+ }
2357
+
2358
+ .pattern-header {
2359
+ height: 120px;
2360
+ background-image: url("${l}");
2361
+ background-repeat: repeat;
2362
+ position: relative;
2363
+ animation: patternShift 20s linear infinite;
2364
+ }
2365
+
2366
+ @keyframes patternShift {
2367
+ 0% { background-position: 0 0; }
2368
+ 100% { background-position: 100px 100px; }
2369
+ }
2370
+
2371
+ .pattern-overlay {
2372
+ position: absolute;
2373
+ inset: 0;
2374
+ background: linear-gradient(transparent 0%, rgba(0,0,0,0.3) 100%);
2375
+ }
2376
+
2377
+ .culture-badge {
2378
+ position: absolute;
2379
+ bottom: 10px;
2380
+ left: 10px;
2381
+ background: ${o.colors.primary};
2382
+ color: white;
2383
+ padding: 4px 12px;
2384
+ border-radius: 20px;
2385
+ font-size: 12px;
2386
+ font-weight: 600;
2387
+ text-shadow: 0 1px 2px rgba(0,0,0,0.3);
2388
+ }
2389
+
2390
+ .region-badge {
2391
+ position: absolute;
2392
+ bottom: 10px;
2393
+ right: 10px;
2394
+ background: rgba(255,255,255,0.9);
2395
+ color: #333;
2396
+ padding: 4px 10px;
2397
+ border-radius: 20px;
2398
+ font-size: 11px;
2399
+ }
2400
+
2401
+ .card-body {
2402
+ background: white;
2403
+ padding: 20px;
2404
+ }
2405
+
2406
+ .card-title {
2407
+ display: flex;
2408
+ align-items: center;
2409
+ gap: 10px;
2410
+ margin-bottom: 12px;
2411
+ }
2412
+
2413
+ .card-title h3 {
2414
+ margin: 0;
2415
+ font-size: 18px;
2416
+ color: ${o.colors.primary};
2417
+ }
2418
+
2419
+ .culture-icon {
2420
+ width: 40px;
2421
+ height: 40px;
2422
+ border-radius: 50%;
2423
+ background-image: url("${l}");
2424
+ background-size: cover;
2425
+ border: 2px solid ${o.colors.accent};
2426
+ }
2427
+
2428
+ .card-content {
2429
+ color: #555;
2430
+ line-height: 1.6;
2431
+ }
2432
+
2433
+ .culture-selector {
2434
+ width: 100%;
2435
+ padding: 10px;
2436
+ margin-top: 15px;
2437
+ border: 2px solid ${o.colors.primary};
2438
+ border-radius: 6px;
2439
+ font-family: inherit;
2440
+ font-size: 14px;
2441
+ cursor: pointer;
2442
+ background: white;
2443
+ }
2444
+
2445
+ .culture-selector:focus {
2446
+ outline: none;
2447
+ box-shadow: 0 0 0 3px ${o.colors.primary}30;
2448
+ }
2449
+
2450
+ select option {
2451
+ padding: 8px;
2452
+ }
2453
+
2454
+ optgroup {
2455
+ font-weight: 600;
2456
+ color: #333;
2457
+ }
2458
+ </style>
2459
+
2460
+ <article class="cultural-card">
2461
+ <div class="pattern-header">
2462
+ <div class="pattern-overlay"></div>
2463
+ <span class="culture-badge">${o.name}</span>
2464
+ <span class="region-badge">\uD83D\uDCCD ${o.region}</span>
2465
+ </div>
2466
+ <div class="card-body">
2467
+ <div class="card-title">
2468
+ <div class="culture-icon"></div>
2469
+ <h3>${o.name} Pattern</h3>
2470
+ </div>
2471
+ <div class="card-content">
2472
+ <slot></slot>
2473
+ </div>
2474
+ ${n?`
2475
+ <select class="culture-selector">
2476
+ <optgroup label="\uD83C\uDF0D East Africa">
2477
+ <option value="maasai" ${t==="maasai"?"selected":""}>Maasai (Tanzania/Kenya)</option>
2478
+ <option value="hadzabe" ${t==="hadzabe"?"selected":""}>Hadzabe (Tanzania)</option>
2479
+ <option value="swahili" ${t==="swahili"?"selected":""}>Swahili Kanga</option>
2480
+ <option value="kitenge" ${t==="kitenge"?"selected":""}>Kitenge</option>
2481
+ <option value="tibeb" ${t==="tibeb"?"selected":""}>Ethiopian Tibeb</option>
2482
+ </optgroup>
2483
+ <optgroup label="\uD83C\uDF0D West Africa">
2484
+ <option value="ashanti" ${t==="ashanti"?"selected":""}>Ashanti Kente (Ghana)</option>
2485
+ <option value="adinkra" ${t==="adinkra"?"selected":""}>Adinkra (Ghana)</option>
2486
+ <option value="bogolan" ${t==="bogolan"?"selected":""}>Mali Bogolan (Mud Cloth)</option>
2487
+ <option value="yoruba" ${t==="yoruba"?"selected":""}>Yoruba Aso-Oke (Nigeria)</option>
2488
+ <option value="ankara" ${t==="ankara"?"selected":""}>Ankara Wax Print</option>
2489
+ </optgroup>
2490
+ <optgroup label="\uD83C\uDF0D Central Africa">
2491
+ <option value="kuba" ${t==="kuba"?"selected":""}>Kuba Shoowa (DRC)</option>
2492
+ <option value="imigongo" ${t==="imigongo"?"selected":""}>Imigongo (Rwanda)</option>
2493
+ </optgroup>
2494
+ <optgroup label="\uD83C\uDF0D Southern Africa">
2495
+ <option value="ndebele" ${t==="ndebele"?"selected":""}>Ndebele (South Africa)</option>
2496
+ <option value="zulu" ${t==="zulu"?"selected":""}>Zulu (South Africa)</option>
2497
+ <option value="swazi" ${t==="swazi"?"selected":""}>Swazi (Eswatini)</option>
2498
+ <option value="xhosa" ${t==="xhosa"?"selected":""}>Xhosa (South Africa)</option>
2499
+ </optgroup>
2500
+ </select>
2501
+ `:""}
2502
+ </div>
2503
+ </article>
2504
+ `}};_("af-cultural-card",gn);kl=gn});var qo={};Q(qo,{default:()=>Xl,PatternShowcase:()=>$n});var $n,Xl;var Eo=x(()=>{S();hn();$n=class $n extends c{static get observedAttributes(){return["region","size"]}constructor(){super();this._allPatterns=[{key:"shuka",name:"Maasai Shuka",region:"east",country:"Tanzania/Kenya",fn:Gn,meaning:"Bravery, Unity, Identity"},{key:"hadzabe",name:"Hadzabe",region:"east",country:"Tanzania",fn:Jn,meaning:"Ancient traditions, Hunter-gatherer heritage"},{key:"kanga",name:"Kanga",region:"east",country:"Tanzania/Kenya",fn:Ln,meaning:"Communication, Proverbs, Femininity"},{key:"kitenge",name:"Kitenge",region:"east",country:"East Africa",fn:Fn,meaning:"Celebration, African identity"},{key:"tibeb",name:"Tibeb",region:"east",country:"Ethiopia",fn:Un,meaning:"Faith, Tradition, Celebration"},{key:"kente",name:"Kente",region:"west",country:"Ghana",fn:Bn,meaning:"Royalty, Wisdom, Celebration"},{key:"adinkra",name:"Adinkra",region:"west",country:"Ghana",fn:mn,meaning:"Philosophy, Proverbs, Wisdom"},{key:"bogolan",name:"Bogolan",region:"west",country:"Mali",fn:On,meaning:"Earth energy, Protection, Healing"},{key:"asooke",name:"Aso-Oke",region:"west",country:"Nigeria",fn:Rn,meaning:"Prestige, Celebration, Heritage"},{key:"adire",name:"Adire (Indigo)",region:"west",country:"Nigeria",fn:In,meaning:"Creativity, Uniqueness, Depth"},{key:"ankara",name:"Ankara",region:"west",country:"West Africa",fn:Dn,meaning:"Boldness, Pan-African pride"},{key:"kuba",name:"Kuba Shoowa",region:"central",country:"DRC",fn:Wn,meaning:"Status, Mathematics, Eternity"},{key:"imigongo",name:"Imigongo",region:"central",country:"Rwanda",fn:dn,meaning:"Resilience, Strength, Artistry"},{key:"berber",name:"Berber",region:"north",country:"North Africa",fn:pn,meaning:"Protection, Nature, Identity"},{key:"ndebele",name:"Ndebele",region:"south",country:"South Africa",fn:jn,meaning:"Artistry, Marriage, Status"},{key:"zulu",name:"Zulu Beadwork",region:"south",country:"South Africa",fn:Vn,meaning:"Love letters, Community"},{key:"swazi",name:"Swazi",region:"south",country:"Eswatini",fn:Nn,meaning:"Monarchy, Warriors, Pride"},{key:"xhosa",name:"Xhosa",region:"south",country:"South Africa",fn:Kn,meaning:"Dignity, Coming of age"}],this.render()}connectedCallback(){this._setupHovers()}_setupHovers(){this.shadowRoot.querySelectorAll(".pattern-item").forEach((t)=>{t.addEventListener("click",()=>{let n=t.dataset.key,o=this._allPatterns.find((b)=>b.key===n);if(o)this.emit("af-pattern-select",{pattern:o})})})}attributeChangedCallback(){this.render(),this._setupHovers()}render(){let t=this.getAttribute("region")||"all",n=this.getAttribute("size")||"md",o=t==="all"?this._allPatterns:this._allPatterns.filter((a)=>a.region===t),b={sm:80,md:120,lg:160},l=b[n]||b.md;this.shadowRoot.innerHTML=`
2505
+ <style>
2506
+ :host {
2507
+ display: block;
2508
+ font-family: 'Inter', system-ui, sans-serif;
2509
+ }
2510
+
2511
+ .showcase-container {
2512
+ padding: 10px;
2513
+ }
2514
+
2515
+ .region-tabs {
2516
+ display: flex;
2517
+ gap: 8px;
2518
+ margin-block-end: 20px;
2519
+ flex-wrap: wrap;
2520
+ }
2521
+
2522
+ .region-tab {
2523
+ padding: 8px 16px;
2524
+ border: none;
2525
+ border-radius: 20px;
2526
+ font-family: inherit;
2527
+ font-size: 13px;
2528
+ font-weight: 500;
2529
+ cursor: pointer;
2530
+ background: #e9ecef;
2531
+ color: #495057;
2532
+ transition: all 200ms ease;
2533
+ }
2534
+
2535
+ .region-tab:hover {
2536
+ background: #dee2e6;
2537
+ }
2538
+
2539
+ .region-tab.active {
2540
+ background: linear-gradient(135deg, #1EB53A 0%, #00A3DD 100%);
2541
+ color: white;
2542
+ }
2543
+
2544
+ .pattern-grid {
2545
+ display: grid;
2546
+ grid-template-columns: repeat(auto-fill, minmax(${l+40}px, 1fr));
2547
+ gap: 16px;
2548
+ }
2549
+
2550
+ .pattern-item {
2551
+ background: white;
2552
+ border-radius: 12px;
2553
+ overflow: hidden;
2554
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
2555
+ cursor: pointer;
2556
+ transition: all 300ms ease;
2557
+ }
2558
+
2559
+ .pattern-item:hover {
2560
+ transform: scale(1.05);
2561
+ box-shadow: 0 8px 25px rgba(0,0,0,0.2);
2562
+ }
2563
+
2564
+ .pattern-preview {
2565
+ inline-size: 100%;
2566
+ block-size: ${l}px;
2567
+ background-repeat: repeat;
2568
+ transition: background-position 10s linear;
2569
+ }
2570
+
2571
+ .pattern-item:hover .pattern-preview {
2572
+ background-position: 50px 50px;
2573
+ }
2574
+
2575
+ .pattern-info {
2576
+ padding: 12px;
2577
+ }
2578
+
2579
+ .pattern-name {
2580
+ font-weight: 600;
2581
+ font-size: 14px;
2582
+ margin-block-end: 4px;
2583
+ color: #333;
2584
+ }
2585
+
2586
+ .pattern-country {
2587
+ font-size: 11px;
2588
+ color: #888;
2589
+ margin-block-end: 6px;
2590
+ }
2591
+
2592
+ .pattern-meaning {
2593
+ font-size: 11px;
2594
+ color: #666;
2595
+ font-style: italic;
2596
+ line-height: 1.4;
2597
+ margin-block-end: 6px;
2598
+ }
2599
+
2600
+ .region-label {
2601
+ font-size: 12px;
2602
+ padding: 3px 8px;
2603
+ border-radius: 10px;
2604
+ display: inline-block;
2605
+ margin-block-end: 6px;
2606
+ }
2607
+
2608
+ .region-east { background: #d4edda; color: #155724; }
2609
+ .region-west { background: #fff3cd; color: #856404; }
2610
+ .region-central { background: #e2e3ff; color: #3e2723; }
2611
+ .region-south { background: #d1ecf1; color: #0c5460; }
2612
+ </style>
2613
+
2614
+ <div class="showcase-container">
2615
+ <div class="region-tabs">
2616
+ <button class="region-tab ${t==="all"?"active":""}" data-region="all">All Regions</button>
2617
+ <button class="region-tab ${t==="east"?"active":""}" data-region="east">East Africa</button>
2618
+ <button class="region-tab ${t==="west"?"active":""}" data-region="west">West Africa</button>
2619
+ <button class="region-tab ${t==="central"?"active":""}" data-region="central">Central Africa</button>
2620
+ <button class="region-tab ${t==="south"?"active":""}" data-region="south">Southern Africa</button>
2621
+ </div>
2622
+
2623
+ <div class="pattern-grid">
2624
+ ${o.map((a)=>`
2625
+ <div class="pattern-item" data-key="${a.key}">
2626
+ <div class="pattern-preview" style="background-image: url('${a.fn()}')"></div>
2627
+ <div class="pattern-info">
2628
+ <span class="region-label region-${a.region}">${a.region.charAt(0).toUpperCase()+a.region.slice(1)}</span>
2629
+ <div class="pattern-name">${a.name}</div>
2630
+ <div class="pattern-country">${a.country}</div>
2631
+ <div class="pattern-meaning">${a.meaning}</div>
2632
+ </div>
2633
+ </div>
2634
+ `).join("")}
2635
+ </div>
2636
+ </div>
2637
+ `,this.shadowRoot.querySelectorAll(".region-tab").forEach((a)=>{a.addEventListener("click",()=>{this.setAttribute("region",a.dataset.region)})})}};_("af-pattern-showcase",$n);Xl=$n});var Ho={};Q(Ho,{AfriLanguageSwitcher:()=>Pn});var Pn;var xo=x(()=>{S();Pn=class Pn extends c{static get observedAttributes(){return["current"]}render(){let t=[{code:"en",name:"English"},{code:"sw",name:"Kiswahili"},{code:"fr",name:"Français"},{code:"ar",name:"العربية",dir:"rtl"},{code:"am",name:"አማርኛ"},{code:"yo",name:"Yorùbá"}],n=this.getAttribute("current")||"en",o=t.find((b)=>b.code===n)||t[0];this.shadowRoot.innerHTML=R`
2638
+ <style>
2639
+ :host { display: inline-block; position: relative; font-family: var(--font-body); }
2640
+ .switcher-btn {
2641
+ padding: 8px 16px;
2642
+ background: var(--glass-bg);
2643
+ border: 1px solid var(--glass-border);
2644
+ border-radius: var(--radius-md);
2645
+ color: var(--text-primary);
2646
+ cursor: pointer;
2647
+ display: flex;
2648
+ align-items: center;
2649
+ gap: 8px;
2650
+ transition: all 0.3s ease;
2651
+ }
2652
+ .switcher-btn:hover { background: rgba(255,255,255,0.1); }
2653
+ .dropdown {
2654
+ position: absolute;
2655
+ top: calc(100% + 8px);
2656
+ right: 0;
2657
+ background: var(--afri-void);
2658
+ border: 1px solid var(--glass-border);
2659
+ border-radius: var(--radius-md);
2660
+ padding: 8px;
2661
+ display: none;
2662
+ min-width: 150px;
2663
+ z-index: 1000;
2664
+ box-shadow: 0 10px 40px rgba(0,0,0,0.5);
2665
+ }
2666
+ :host([open]) .dropdown { display: block; }
2667
+ .lang-option {
2668
+ padding: 8px 12px;
2669
+ border-radius: var(--radius-sm);
2670
+ cursor: pointer;
2671
+ transition: all 0.2s ease;
2672
+ }
2673
+ .lang-option:hover { background: var(--glass-bg); color: var(--accent-gold); }
2674
+ </style>
2675
+
2676
+ <button class="switcher-btn">
2677
+ <span>🌍</span>
2678
+ <span>${o.name}</span>
2679
+ </button>
2680
+
2681
+ <div class="dropdown">
2682
+ ${t.map((b)=>R`
2683
+ <div class="lang-option" data-code="${b.code}" dir="${b.dir||"ltr"}">
2684
+ ${b.name}
2685
+ </div>
2686
+ `)}
2687
+ </div>
2688
+ `,this.shadowRoot.querySelector(".switcher-btn").onclick=()=>{this.toggleAttribute("open")},this.shadowRoot.querySelectorAll(".lang-option").forEach((b)=>{b.onclick=()=>{let l=b.dataset.code;if(this.setAttribute("current",l),this.removeAttribute("open"),this.emit("lang-change",{code:l}),l==="ar")document.documentElement.dir="rtl";else document.documentElement.dir="ltr"}})}connectedCallback(){this.render()}attributeChangedCallback(){this.render()}};_("af-language-switcher",Pn)});var Yo={};Q(Yo,{AfriAuth:()=>Tn});var Tn;var Mo=x(()=>{S();Tn=class Tn extends c{constructor(){super();this.mode="login"}connectedCallback(){this.render(),this.setupEvents()}setupEvents(){let t=this.shadowRoot.querySelector("form"),n=this.shadowRoot.querySelector(".toggle-mode");if(n)n.addEventListener("click",(o)=>{o.preventDefault(),this.mode=this.mode==="login"?"register":"login",this.render(),this.setupEvents()});if(t)t.addEventListener("submit",async(o)=>{o.preventDefault();let b=this.shadowRoot.querySelector("#email").value,l=this.shadowRoot.querySelector("#password").value,a=this.shadowRoot.querySelector(".feedback");a.textContent="Processing...";try{let h=await(await fetch("/api/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:this.mode,email:b,password:l})})).json();if(h.error)a.textContent=h.error,a.style.color="#ef4444";else a.textContent="Success! Redirecting...",a.style.color="#22c55e",setTimeout(()=>window.location.href="/",1000)}catch(f){a.textContent="Network Error"}})}render(){let t=this.mode==="login";this.shadowRoot.innerHTML=`
2689
+ <style>
2690
+ :host {
2691
+ display: block;
2692
+ font-family: 'Inter', system-ui;
2693
+ max-width: 400px;
2694
+ margin: 0 auto;
2695
+ }
2696
+ .auth-card {
2697
+ background: #1e293b;
2698
+ border: 1px solid #334155;
2699
+ border-radius: 12px;
2700
+ padding: 32px;
2701
+ box-shadow: 0 10px 30px rgba(0,0,0,0.3);
2702
+ }
2703
+ h2 {
2704
+ margin-top: 0;
2705
+ color: white;
2706
+ text-align: center;
2707
+ font-weight: 800;
2708
+ }
2709
+ .input-group {
2710
+ margin-bottom: 20px;
2711
+ }
2712
+ label {
2713
+ display: block;
2714
+ color: #94a3b8;
2715
+ font-size: 0.9rem;
2716
+ margin-bottom: 8px;
2717
+ }
2718
+ input {
2719
+ width: 100%;
2720
+ padding: 12px;
2721
+ background: #0f172a;
2722
+ border: 1px solid #334155;
2723
+ border-radius: 6px;
2724
+ color: white;
2725
+ font-size: 1rem;
2726
+ box-sizing: border-box;
2727
+ }
2728
+ input:focus {
2729
+ border-color: #1EB53A;
2730
+ outline: none;
2731
+ }
2732
+ button {
2733
+ width: 100%;
2734
+ padding: 12px;
2735
+ background: #1EB53A;
2736
+ color: white;
2737
+ border: none;
2738
+ border-radius: 6px;
2739
+ font-weight: 700;
2740
+ cursor: pointer;
2741
+ font-size: 1rem;
2742
+ transition: all 0.2s;
2743
+ }
2744
+ button:hover {
2745
+ opacity: 0.9;
2746
+ transform: translateY(-1px);
2747
+ }
2748
+ .footer {
2749
+ margin-top: 20px;
2750
+ text-align: center;
2751
+ font-size: 0.9rem;
2752
+ color: #94a3b8;
2753
+ }
2754
+ .toggle-mode {
2755
+ color: #FCD116;
2756
+ cursor: pointer;
2757
+ text-decoration: underline;
2758
+ }
2759
+ .feedback {
2760
+ text-align: center;
2761
+ margin-bottom: 16px;
2762
+ min-height: 20px;
2763
+ font-size: 0.9rem;
2764
+ }
2765
+ </style>
2766
+
2767
+ <div class="auth-card">
2768
+ <h2>${t?"Welcome Back":"Create Account"}</h2>
2769
+ <div class="feedback"></div>
2770
+ <form>
2771
+ <div class="input-group">
2772
+ <label for="email">Email Address</label>
2773
+ <input type="email" id="email" required placeholder="you@example.com">
2774
+ </div>
2775
+ <div class="input-group">
2776
+ <label for="password">Password</label>
2777
+ <input type="password" id="password" required placeholder="••••••••">
2778
+ </div>
2779
+ <button type="submit">${t?"Sign In":"Sign Up"}</button>
2780
+ </form>
2781
+ <div class="footer">
2782
+ ${t?"New here?":"Already have an account?"}
2783
+ <span class="toggle-mode">${t?"Create an account":"Sign in"}</span>
2784
+ </div>
2785
+ </div>
2786
+ `}};_("af-auth",Tn)});var ko={};Q(ko,{default:()=>Sl});var Cn,Sl;var Xo=x(()=>{S();Cn=class Cn extends c{constructor(){super();this.currentTheme="dark"}connectedCallback(){this.loadStyles();let t=localStorage.getItem("africode-theme");if(t)this.currentTheme=t,document.documentElement.setAttribute("data-theme",t);else{let n=window.matchMedia("(prefers-color-scheme: light)").matches;this.currentTheme=n?"light":"dark",document.documentElement.setAttribute("data-theme",this.currentTheme)}this.render()}toggleTheme(){this.currentTheme=this.currentTheme==="dark"?"light":"dark",document.documentElement.setAttribute("data-theme",this.currentTheme),localStorage.setItem("africode-theme",this.currentTheme),window.dispatchEvent(new CustomEvent("theme-changed",{detail:{theme:this.currentTheme}})),this.render()}render(){let t=this.currentTheme==="dark";this.shadowRoot.innerHTML=R`
2787
+ <style>
2788
+ .toggle-btn {
2789
+ background: var(--bg-surface-elevated, var(--afri-obsidian));
2790
+ border: 1px solid var(--border-color);
2791
+ color: var(--text-main);
2792
+ padding: var(--space-8) var(--space-13);
2793
+ border-radius: var(--radius-lg);
2794
+ cursor: pointer;
2795
+ display: flex;
2796
+ align-items: center;
2797
+ gap: 8px;
2798
+ font-family: var(--font-body);
2799
+ font-size: 0.9rem;
2800
+ transition: all 0.3s var(--ease-snap);
2801
+ }
2802
+ .toggle-btn:hover {
2803
+ border-color: var(--brand-green);
2804
+ transform: translateY(-2px);
2805
+ }
2806
+ .icon {
2807
+ font-size: 1.1rem;
2808
+ }
2809
+ </style>
2810
+
2811
+ <button class="toggle-btn" @click="\${() => this.toggleTheme()}">
2812
+ <span class="icon">\${isDark ? '🌙' : '☀️'}</span>
2813
+ <span>\${isDark ? 'Dark Mode' : 'Light Mode'}</span>
2814
+ </button>
2815
+ `;let n=this.shadowRoot.querySelector(".toggle-btn");if(n)n.addEventListener("click",()=>this.toggleTheme())}};_("af-theme-toggle",Cn);Sl=Cn});S();S();class _n extends c{static get observedAttributes(){return["theme","fallback-message"]}constructor(){super();this._hasError=!1,this._errorDetail=null,this.render()}connectedCallback(){this.addEventListener("af-component-error",this._handleError.bind(this))}disconnectedCallback(){this.removeEventListener("af-component-error",this._handleError.bind(this))}_handleError(t){t.stopPropagation(),this._hasError=!0,this._errorDetail=t.detail,console.warn("[AfriCode Boundary] Caught error:",this._errorDetail),this.render()}reset(){this._hasError=!1,this._errorDetail=null,this.render()}attributeChangedCallback(){this.render()}render(){let t=this.getAttribute("theme")||"tanzania",n=this.getAttribute("fallback-message")||"A part of this page failed to load.",o={tanzania:{bg:"#FFF9E6",border:"#FCD116",text:"#5A4A00"},maasai:{bg:"#FFEEEE",border:"#FF0000",text:"#8B0000"},ndebele:{bg:"#EBF0FF",border:"#4169E1",text:"#002B5C"},ocean:{bg:"#E6FAFF",border:"#00A3DD",text:"#004A66"}},b=o[t]||o.tanzania;if(this._hasError){this.shadowRoot.innerHTML=`
2816
+ <style>
2817
+ :host { display: block; width: 100%; font-family: 'Inter', system-ui, sans-serif; }
2818
+ .boundary-error {
2819
+ background: ${b.bg};
2820
+ border-left: 4px solid ${b.border};
2821
+ color: ${b.text};
2822
+ padding: 16px 20px;
2823
+ border-radius: 4px;
2824
+ margin: 12px 0;
2825
+ box-shadow: 0 2px 8px rgba(0,0,0,0.05);
2826
+ }
2827
+ .boundary-header {
2828
+ display: flex;
2829
+ align-items: center;
2830
+ gap: 12px;
2831
+ font-weight: 600;
2832
+ margin-bottom: 8px;
2833
+ font-size: 16px;
2834
+ }
2835
+ .boundary-message {
2836
+ font-size: 14px;
2837
+ opacity: 0.9;
2838
+ margin-bottom: 12px;
2839
+ }
2840
+ .boundary-dev-detail {
2841
+ font-family: monospace;
2842
+ font-size: 12px;
2843
+ background: rgba(0,0,0,0.05);
2844
+ padding: 8px;
2845
+ border-radius: 4px;
2846
+ overflow-x: auto;
2847
+ white-space: pre-wrap;
2848
+ }
2849
+ .boundary-action {
2850
+ margin-top: 12px;
2851
+ }
2852
+ button {
2853
+ background: transparent;
2854
+ border: 1px solid ${b.border};
2855
+ color: ${b.text};
2856
+ padding: 6px 12px;
2857
+ border-radius: 4px;
2858
+ cursor: pointer;
2859
+ font-weight: 500;
2860
+ transition: background 0.2s;
2861
+ }
2862
+ button:hover {
2863
+ background: rgba(0,0,0,0.05);
2864
+ }
2865
+ </style>
2866
+ <div class="boundary-error" role="alert">
2867
+ <div class="boundary-header">
2868
+ <span aria-hidden="true">\uD83D\uDD04</span>
2869
+ <span>Component Recovery</span>
2870
+ </div>
2871
+ <div class="boundary-message">${n}</div>
2872
+
2873
+ ${this._errorDetail?`
2874
+ <div class="boundary-dev-detail">
2875
+ <code>&lt;${this._errorDetail.component}&gt;: ${this._errorDetail.message}</code>
2876
+ </div>
2877
+ `:""}
2878
+
2879
+ <div class="boundary-action">
2880
+ <button id="retry-btn">Try Again</button>
2881
+ </div>
2882
+ </div>
2883
+ `,this.shadowRoot.getElementById("retry-btn").addEventListener("click",()=>{this.reset()});return}this.shadowRoot.innerHTML=`
2884
+ <style>:host { display: block; }</style>
2885
+ <slot></slot>
2886
+ `}}_("af-error-boundary",_n);var Ql={"af-button":()=>Promise.resolve().then(() => (sn(),en)),"af-card":()=>Promise.resolve().then(() => (t0(),zn)),"af-navbar":()=>Promise.resolve().then(() => (b0(),o0)),"af-input":()=>Promise.resolve().then(() => (k0(),M0)),"af-alert":()=>Promise.resolve().then(() => (S0(),X0)),"af-grid":()=>Promise.resolve().then(() => (G0(),Q0)),"af-section":()=>Promise.resolve().then(() => (L0(),J0)),"af-icon":()=>Promise.resolve().then(() => (B0(),F0)),"af-accordion":()=>Promise.resolve().then(() => (R0(),m0)),"af-hero":()=>Promise.resolve().then(() => (O0(),D0)),"af-table":()=>Promise.resolve().then(() => (d0(),W0)),"af-modal":()=>Promise.resolve().then(() => (j0(),U0)),"af-tabs":()=>Promise.resolve().then(() => (N0(),V0)),"af-sidebar":()=>Promise.resolve().then(() => (p0(),K0)),"af-dropdown":()=>Promise.resolve().then(() => (u0(),I0)),"af-select":()=>Promise.resolve().then(() => (P0(),i0)),"af-form":()=>Promise.resolve().then(() => (C0(),T0)),"af-tooltip":()=>Promise.resolve().then(() => (Z0(),y0)),"af-toast":()=>Promise.resolve().then(() => (s0(),e0)),"af-badge":()=>Promise.resolve().then(() => (to(),z0)),"af-avatar":()=>Promise.resolve().then(() => (oo(),no)),"af-progress":()=>Promise.resolve().then(() => (lo(),bo)),"af-loader":()=>Promise.resolve().then(() => (fo(),ao)),"af-skeleton":()=>Promise.resolve().then(() => (ro(),ho)),"af-divider":()=>Promise.resolve().then(() => ($o(),go)),"af-kanga-card":()=>Promise.resolve().then(() => (co(),wo)),"af-cultural-card":()=>Promise.resolve().then(() => (Ao(),_o)),"af-pattern-showcase":()=>Promise.resolve().then(() => (Eo(),qo)),"af-language-switcher":()=>Promise.resolve().then(() => (xo(),Ho)),"af-auth":()=>Promise.resolve().then(() => (Mo(),Yo)),"af-theme-toggle":()=>Promise.resolve().then(() => (Xo(),ko))},lf=Ql;export{lf as default,Ql as componentMap,_n as AfriErrorBoundary,c as AfriCodeComponent};
2887
+
2888
+ //# debugId=73A699B3533FABD264756E2164756E21