@almadar/ui 5.21.10 → 5.21.11

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.
@@ -1,16 +1,17 @@
1
1
  import * as React84 from 'react';
2
- import React84__default, { createContext, useContext, useMemo, useRef, useEffect, useCallback, Suspense, useState, useSyncExternalStore, useLayoutEffect, lazy, useId } from 'react';
3
- import { EventBusContext, useTraitScope, OrbitalProvider, TraitScopeProvider, VerificationProvider } from '@almadar/ui/providers';
4
- import { createLogger, isLogLevelEnabled } from '@almadar/logger';
2
+ import React84__default, { createContext, useMemo, useContext, useRef, useEffect, useCallback, Suspense, useState, useSyncExternalStore, useLayoutEffect, lazy, useId } from 'react';
5
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
4
  import { clsx } from 'clsx';
7
5
  import { twMerge } from 'tailwind-merge';
6
+ import { EventBusContext, useTraitScope, OrbitalProvider, TraitScopeProvider, VerificationProvider } from '@almadar/ui/providers';
7
+ import { createLogger, isLogLevelEnabled } from '@almadar/logger';
8
8
  import * as LucideIcons2 from 'lucide-react';
9
9
  import { Loader2, X, List, Printer, ChevronRight, ChevronLeft, GitBranch, Pencil, Eye, Plus, ArrowRight, Trash, Code, FileText, WrapText, Check, Copy, AlertTriangle, Trash2, ZoomOut, ZoomIn, Download, RotateCcw, Menu as Menu$1, Package, Calendar, MoreHorizontal, Image as Image$1, Upload, ArrowLeft, HelpCircle, Search, Type, Heading1, Heading2, Heading3, ListOrdered, Quote, Minus, Eraser, TrendingUp, TrendingDown, AlertCircle, Circle, Clock, CheckCircle2, CheckCircle, XCircle, Play, Pause, SkipForward, Bug, Send, ChevronUp, ChevronDown, Wrench, Tag, User, DollarSign, Zap, Sword, Move, Heart, Shield } from 'lucide-react';
10
10
  import * as PhosphorIcons from '@phosphor-icons/react';
11
11
  import * as TablerIcons from '@tabler/icons-react';
12
12
  import * as FaIcons from 'react-icons/fa';
13
13
  import { createPortal } from 'react-dom';
14
+ import { useTranslate, useEventBus as useEventBus$1 } from '@almadar/ui/hooks';
14
15
  import { evaluate, createMinimalContext } from '@almadar/evaluator';
15
16
  import { useUISlots, UISlotProvider } from '@almadar/ui/context';
16
17
  import { Link, Outlet, useLocation } from 'react-router-dom';
@@ -69,6 +70,62 @@ var __copyProps = (to, from, except, desc) => {
69
70
  };
70
71
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
71
72
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
73
+ function EntitySchemaProvider({
74
+ entities,
75
+ traitLinkedEntities,
76
+ orbitalsByTrait,
77
+ children
78
+ }) {
79
+ const entitiesMap = useMemo(() => {
80
+ const map = /* @__PURE__ */ new Map();
81
+ for (const entity of entities) {
82
+ map.set(entity.name, entity);
83
+ }
84
+ return map;
85
+ }, [entities]);
86
+ const linkedMap = useMemo(() => {
87
+ return traitLinkedEntities ?? /* @__PURE__ */ new Map();
88
+ }, [traitLinkedEntities]);
89
+ const orbitalsMap = useMemo(() => {
90
+ return orbitalsByTrait ?? /* @__PURE__ */ new Map();
91
+ }, [orbitalsByTrait]);
92
+ const contextValue = useMemo(
93
+ () => ({
94
+ entities: entitiesMap,
95
+ traitLinkedEntities: linkedMap,
96
+ orbitalsByTrait: orbitalsMap
97
+ }),
98
+ [entitiesMap, linkedMap, orbitalsMap]
99
+ );
100
+ return /* @__PURE__ */ jsx(EntitySchemaContext.Provider, { value: contextValue, children });
101
+ }
102
+ function useEntitySchema() {
103
+ const context = useContext(EntitySchemaContext);
104
+ if (!context) {
105
+ throw new Error("useEntitySchema must be used within an EntitySchemaProvider");
106
+ }
107
+ return context;
108
+ }
109
+ function useEntityDefinition(entityName) {
110
+ const { entities } = useEntitySchema();
111
+ return entities.get(entityName);
112
+ }
113
+ function useEntitySchemaOptional() {
114
+ return useContext(EntitySchemaContext);
115
+ }
116
+ var EntitySchemaContext;
117
+ var init_EntitySchemaContext = __esm({
118
+ "runtime/EntitySchemaContext.tsx"() {
119
+ EntitySchemaContext = createContext(null);
120
+ }
121
+ });
122
+ function cn(...inputs) {
123
+ return twMerge(clsx(inputs));
124
+ }
125
+ var init_cn = __esm({
126
+ "lib/cn.ts"() {
127
+ }
128
+ });
72
129
 
73
130
  // hooks/useEventBus.ts
74
131
  var useEventBus_exports = {};
@@ -153,11 +210,11 @@ function useEmitEvent() {
153
210
  [eventBus]
154
211
  );
155
212
  }
156
- var log, subLog, scopeLog, fallbackListeners, fallbackAnyListeners, fallbackEventBus, useEventSubscription, useEventBus_default;
213
+ var log2, subLog, scopeLog, fallbackListeners, fallbackAnyListeners, fallbackEventBus, useEventSubscription, useEventBus_default;
157
214
  var init_useEventBus = __esm({
158
215
  "hooks/useEventBus.ts"() {
159
216
  "use client";
160
- log = createLogger("almadar:eventbus");
217
+ log2 = createLogger("almadar:eventbus");
161
218
  subLog = createLogger("almadar:eventbus:subscribe");
162
219
  scopeLog = createLogger("almadar:ui:trait-scope");
163
220
  fallbackListeners = /* @__PURE__ */ new Map();
@@ -171,13 +228,13 @@ var init_useEventBus = __esm({
171
228
  source
172
229
  };
173
230
  const handlers = fallbackListeners.get(type);
174
- log.debug("emit", { type, payloadKeys: payload ? Object.keys(payload).length : 0, listenerCount: (handlers?.size ?? 0) + fallbackAnyListeners.size });
231
+ log2.debug("emit", { type, payloadKeys: payload ? Object.keys(payload).length : 0, listenerCount: (handlers?.size ?? 0) + fallbackAnyListeners.size });
175
232
  if (handlers) {
176
233
  handlers.forEach((handler) => {
177
234
  try {
178
235
  handler(event);
179
236
  } catch (error) {
180
- log.error("Error in listener", { type, error: error instanceof Error ? error : String(error) });
237
+ log2.error("Error in listener", { type, error: error instanceof Error ? error : String(error) });
181
238
  }
182
239
  });
183
240
  }
@@ -185,7 +242,7 @@ var init_useEventBus = __esm({
185
242
  try {
186
243
  handler(event);
187
244
  } catch (error) {
188
- log.error("Error in onAny listener", { type, error: error instanceof Error ? error : String(error) });
245
+ log2.error("Error in onAny listener", { type, error: error instanceof Error ? error : String(error) });
189
246
  }
190
247
  });
191
248
  },
@@ -228,928 +285,6 @@ var init_useEventBus = __esm({
228
285
  useEventBus_default = useEventBus;
229
286
  }
230
287
  });
231
- function getOrCreateStore(query) {
232
- if (!queryStores.has(query)) {
233
- queryStores.set(query, {
234
- search: "",
235
- filters: {},
236
- sortField: void 0,
237
- sortDirection: void 0,
238
- listeners: /* @__PURE__ */ new Set()
239
- });
240
- }
241
- return queryStores.get(query);
242
- }
243
- function useQuerySingleton(query) {
244
- const [, forceUpdate] = useState({});
245
- if (!query) {
246
- return null;
247
- }
248
- const store = useMemo(() => getOrCreateStore(query), [query]);
249
- useMemo(() => {
250
- const listener = () => forceUpdate({});
251
- store.listeners.add(listener);
252
- return () => {
253
- store.listeners.delete(listener);
254
- };
255
- }, [store]);
256
- const notifyListeners3 = useCallback(() => {
257
- store.listeners.forEach((listener) => listener());
258
- }, [store]);
259
- const setSearch = useCallback((value) => {
260
- store.search = value;
261
- notifyListeners3();
262
- }, [store, notifyListeners3]);
263
- const setFilter = useCallback((key, value) => {
264
- store.filters = { ...store.filters, [key]: value };
265
- notifyListeners3();
266
- }, [store, notifyListeners3]);
267
- const clearFilters = useCallback(() => {
268
- store.filters = {};
269
- store.search = "";
270
- notifyListeners3();
271
- }, [store, notifyListeners3]);
272
- const setSort = useCallback((field, direction) => {
273
- store.sortField = field;
274
- store.sortDirection = direction;
275
- notifyListeners3();
276
- }, [store, notifyListeners3]);
277
- return {
278
- search: store.search,
279
- setSearch,
280
- filters: store.filters,
281
- setFilter,
282
- clearFilters,
283
- sortField: store.sortField,
284
- sortDirection: store.sortDirection,
285
- setSort
286
- };
287
- }
288
- var queryStores;
289
- var init_useQuerySingleton = __esm({
290
- "hooks/useQuerySingleton.ts"() {
291
- "use client";
292
- queryStores = /* @__PURE__ */ new Map();
293
- }
294
- });
295
-
296
- // locales/en.json
297
- var en_default;
298
- var init_en = __esm({
299
- "locales/en.json"() {
300
- en_default = {
301
- $meta: {
302
- locale: "en",
303
- direction: "ltr"
304
- },
305
- "common.save": "Save",
306
- "common.cancel": "Cancel",
307
- "common.delete": "Delete",
308
- "common.close": "Close",
309
- "common.confirm": "Are you sure?",
310
- "common.create": "Create",
311
- "common.edit": "Edit",
312
- "common.view": "View",
313
- "common.add": "Add",
314
- "common.remove": "Remove",
315
- "common.search": "Search...",
316
- "common.filter": "Filter",
317
- "common.actions": "Actions",
318
- "common.yes": "Yes",
319
- "common.no": "No",
320
- "common.selected": "selected",
321
- "common.ok": "OK",
322
- "common.done": "Done",
323
- "common.apply": "Apply",
324
- "common.reset": "Reset",
325
- "common.refresh": "Refresh",
326
- "common.export": "Export",
327
- "common.import": "Import",
328
- "common.copy": "Copy",
329
- "common.settings": "Settings",
330
- "nav.previous": "Previous",
331
- "nav.next": "Next",
332
- "nav.back": "Back",
333
- "nav.home": "Home",
334
- "form.submit": "Submit",
335
- "form.saving": "Saving...",
336
- "form.required": "This field is required",
337
- "form.invalidEmail": "Enter a valid email address",
338
- "form.selectPlaceholder": "Select {{label}}...",
339
- "form.searchPlaceholder": "Search {{entity}}...",
340
- "table.empty.title": "No items found",
341
- "table.empty.description": "No items to display.",
342
- "table.search.placeholder": "Search...",
343
- "table.pagination.showing": "Showing {{start}} to {{end}} of {{total}} results",
344
- "table.pagination.page": "Page {{page}} of {{totalPages}}",
345
- "table.bulk.selected": "{{count}} selected",
346
- "table.loading": "Loading...",
347
- "status.loading": "Loading...",
348
- "status.scheduled": "Scheduled",
349
- "status.inProgress": "In Progress",
350
- "status.completed": "Completed",
351
- "status.cancelled": "Cancelled",
352
- "status.pending": "Pending",
353
- "status.active": "Active",
354
- "status.inactive": "Inactive",
355
- "status.draft": "Draft",
356
- "status.archived": "Archived",
357
- "error.generic": "Something went wrong",
358
- "error.retry": "Try again",
359
- "error.notFound": "Not found",
360
- "error.loadFailed": "Failed to load: {{message}}",
361
- "error.configMissing": "Configuration not found for: {{id}}",
362
- "common.loading": "Loading...",
363
- "common.showMore": "Show More",
364
- "common.showLess": "Show Less",
365
- "common.noResults": "No results found",
366
- "common.saveChanges": "Save Changes",
367
- "common.retry": "Retry",
368
- "common.open": "Open",
369
- "common.back": "Back",
370
- "empty.noItems": "No items",
371
- "empty.noData": "No data available",
372
- "empty.noItemsYet": "No items yet",
373
- "empty.noItemsAdded": "No items added yet",
374
- "empty.noOptionsFound": "No options found",
375
- "list.addItemPlaceholder": "Add new item...",
376
- "error.occurred": "An error occurred",
377
- "error.failedToLoad": "Failed to load data",
378
- "wizard.back": "Back",
379
- "wizard.next": "Next",
380
- "wizard.complete": "Complete",
381
- "wizard.stepOf": "Step {{current}} of {{total}}",
382
- "pagination.previous": "Previous",
383
- "pagination.next": "Next",
384
- "pagination.total": "Total:",
385
- "pagination.show": "Show:",
386
- "pagination.goTo": "Go to:",
387
- "pagination.go": "Go",
388
- "auth.signIn": "Sign in",
389
- "auth.signOut": "Sign out",
390
- "dialog.confirm": "Confirm",
391
- "dialog.cancel": "Cancel",
392
- "dialog.loading": "Loading...",
393
- "dialog.delete.title": "Delete {{item}}?",
394
- "dialog.delete.message": "This action cannot be undone.",
395
- "trait.availableActions": "Available Actions",
396
- "trait.transitions": "Transitions",
397
- "trait.availableNow": "Available now",
398
- "book.startReading": "Start Reading",
399
- "book.tableOfContents": "Table of Contents",
400
- "book.partNumber": "Part {{number}}",
401
- "book.print": "Print",
402
- "book.previousPage": "Previous page",
403
- "book.nextPage": "Next page",
404
- "quiz.showAnswer": "Show answer",
405
- "quiz.hideAnswer": "Hide answer",
406
- "aria.closeModal": "Close modal",
407
- "aria.closeToast": "Dismiss toast",
408
- "aria.closeAlert": "Dismiss alert",
409
- "aria.removeFilter": "Remove filter",
410
- "aria.closeDrawer": "Close drawer",
411
- "aria.closePanel": "Close panel",
412
- "aria.previousImage": "Previous image",
413
- "aria.nextImage": "Next image",
414
- "aria.dismiss": "Dismiss",
415
- "aria.previousSlide": "Previous slide",
416
- "aria.nextSlide": "Next slide",
417
- "aria.previousDays": "Previous days",
418
- "aria.nextDays": "Next days",
419
- "aria.decrease": "Decrease",
420
- "aria.increase": "Increase",
421
- "aria.breadcrumb": "Breadcrumb",
422
- "aria.tableOfContents": "Table of contents",
423
- "aria.docsSidebar": "Documentation sidebar",
424
- "aria.selectAllRows": "Select all rows",
425
- "aria.selectAll": "Select all",
426
- "aria.upvote": "Upvote",
427
- "aria.downvote": "Downvote",
428
- "aria.qrScanner": "QR scanner",
429
- "aria.mockScanDev": "Mock scan (dev)",
430
- "aria.openMenu": "Open menu",
431
- "aria.closeMenu": "Close menu",
432
- "aria.openSidebar": "Open sidebar",
433
- "sidebar.expand": "Expand sidebar",
434
- "sidebar.collapse": "Collapse sidebar",
435
- "sidebar.close": "Close sidebar",
436
- "loading.items": "Loading items...",
437
- "card.imageAlt": "Image",
438
- "canvas.emptyMessage": "No content",
439
- "canvas.errorTitle": "Canvas error",
440
- "book.noData": "No data",
441
- "common.notifications": "Notifications",
442
- "common.remaining": "{{count}} remaining",
443
- "error.somethingWentWrong": "Something went wrong",
444
- "error.loadingItems": "Loading items...",
445
- "error.noItemsFound": "No items found",
446
- "debug.noEntityData": "No entity data",
447
- "debug.noEntities": "No entities",
448
- "debug.noTicks": "No ticks registered",
449
- "debug.noActiveTraits": "No active traits",
450
- "debug.noGuardEvaluations": "No guard evaluations",
451
- "debug.noBridgeData": "No bridge data",
452
- "debug.status": "Status",
453
- "debug.eventsForwarded": "Events Forwarded (Client \u2192 Server)",
454
- "debug.eventsReceived": "Events Received (Server \u2192 Client)",
455
- "debug.lastHeartbeat": "Last Heartbeat",
456
- "debug.noEventsYet": "No events yet",
457
- "debug.noTransitionsRecorded": "No transitions recorded",
458
- "debug.noVerificationChecks": "No verification checks yet",
459
- "display.chartError": "Chart error",
460
- "display.codeViewerError": "Code viewer error",
461
- "display.noCode": "No code",
462
- "display.documentError": "Document error",
463
- "display.noDocument": "No document",
464
- "display.graphError": "Graph error",
465
- "display.noGraphData": "No graph data",
466
- "display.galleryError": "Gallery error",
467
- "display.noMedia": "No media",
468
- "display.meterError": "Meter error",
469
- "display.signaturePadError": "Signature pad error",
470
- "display.timelineError": "Timeline error",
471
- "display.noEvents": "No events",
472
- "template.features": "Features",
473
- "template.howItWorks": "How It Works",
474
- "template.showcase": "Showcase",
475
- "template.faq": "Frequently Asked Questions",
476
- "template.ourTeam": "Our Team",
477
- "template.caseStudies": "Case Studies",
478
- "richBlockEditor.toolbar.text": "Text",
479
- "richBlockEditor.toolbar.h1": "H1",
480
- "richBlockEditor.toolbar.h2": "H2",
481
- "richBlockEditor.toolbar.h3": "H3",
482
- "richBlockEditor.toolbar.bulletList": "Bullet list",
483
- "richBlockEditor.toolbar.numbered": "Numbered",
484
- "richBlockEditor.toolbar.quote": "Quote",
485
- "richBlockEditor.toolbar.code": "Code",
486
- "richBlockEditor.toolbar.divider": "Divider",
487
- "richBlockEditor.toolbar.image": "Image",
488
- "richBlockEditor.blockType.paragraph": "Text",
489
- "richBlockEditor.blockType.heading1": "Heading 1",
490
- "richBlockEditor.blockType.heading2": "Heading 2",
491
- "richBlockEditor.blockType.heading3": "Heading 3",
492
- "richBlockEditor.blockType.bulletList": "Bullet list",
493
- "richBlockEditor.blockType.numberedList": "Numbered list",
494
- "richBlockEditor.blockType.quote": "Quote",
495
- "richBlockEditor.blockType.code": "Code",
496
- "richBlockEditor.blockType.divider": "Divider",
497
- "richBlockEditor.blockType.image": "Image",
498
- "richBlockEditor.blockActions": "Block actions",
499
- "richBlockEditor.duplicate": "Duplicate",
500
- "richBlockEditor.turnInto": "Turn into",
501
- "richBlockEditor.placeholder.heading1": "Heading 1",
502
- "richBlockEditor.placeholder.heading2": "Heading 2",
503
- "richBlockEditor.placeholder.heading3": "Heading 3",
504
- "richBlockEditor.placeholder.quote": "Quote",
505
- "richBlockEditor.placeholder.code": "Enter code",
506
- "richBlockEditor.placeholder.paragraph": "Start writing...",
507
- "richBlockEditor.placeholder.listItem": "List item",
508
- "richBlockEditor.placeholder.caption": "Caption (optional)",
509
- "richBlockEditor.aria.heading1Block": "Heading 1 block",
510
- "richBlockEditor.aria.heading2Block": "Heading 2 block",
511
- "richBlockEditor.aria.heading3Block": "Heading 3 block",
512
- "richBlockEditor.aria.quoteBlock": "Quote block",
513
- "richBlockEditor.aria.codeBlock": "Code block",
514
- "richBlockEditor.aria.codeLanguage": "Code language",
515
- "richBlockEditor.aria.imageUrl": "Image URL",
516
- "richBlockEditor.aria.imageCaption": "Image caption",
517
- "richBlockEditor.aria.listItem": "List item",
518
- "richBlockEditor.aria.removeListItem": "Remove list item",
519
- "richBlockEditor.aria.paragraphBlock": "Paragraph block",
520
- "richBlockEditor.embeddedImage": "Embedded image",
521
- "richBlockEditor.noImageUrl": "No image URL set",
522
- "richBlockEditor.addItem": "Add item",
523
- "richBlockEditor.insertParagraphBelow": "Insert paragraph below",
524
- "richBlockEditor.editorToolbar": "Block editor toolbar",
525
- "richBlockEditor.insertEntry": "Insert {{label}}",
526
- "versionDiff.compare": "Compare",
527
- "versionDiff.to": "to",
528
- "versionDiff.beforeRevision": "Before revision",
529
- "versionDiff.afterRevision": "After revision",
530
- "versionDiff.switchToInline": "Switch to inline view",
531
- "versionDiff.switchToSideBySide": "Switch to side-by-side view",
532
- "versionDiff.revert": "Revert",
533
- "versionDiff.byAuthor": " by {{author}}",
534
- "violationAlert.actionType.measure": "Corrective Measure",
535
- "violationAlert.actionType.admin": "Administrative Action",
536
- "violationAlert.actionType.penalty": "Penalty Proceedings",
537
- "violationAlert.fallbackMessage": "Violation",
538
- "violationAlert.adminLabel": "Admin:",
539
- "violationAlert.penaltyLabel": "Penalty:",
540
- "violationAlert.goToField": "Go to field",
541
- "branchingLogic.title": "Branching logic",
542
- "branchingLogic.if": "If",
543
- "branchingLogic.goTo": "go to",
544
- "branchingLogic.rules": "Rules",
545
- "branchingLogic.logicGraph": "Logic graph",
546
- "branchingLogic.addRule": "Add rule",
547
- "branchingLogic.deleteRule": "Delete rule",
548
- "branchingLogic.endOfSurvey": "End of survey",
549
- "branchingLogic.brokenReference": "Broken reference",
550
- "branchingLogic.selectQuestion": "Select question",
551
- "branchingLogic.selectTarget": "Select target",
552
- "branchingLogic.selectValue": "Select value",
553
- "branchingLogic.addValue": "Add value",
554
- "branchingLogic.value": "Value",
555
- "branchingLogic.typeValuePressEnter": "Type value, press Enter",
556
- "branchingLogic.operatorEquals": "equals",
557
- "branchingLogic.operatorNotEquals": "does not equal",
558
- "branchingLogic.operatorContains": "contains",
559
- "branchingLogic.operatorIn": "is one of",
560
- "branchingLogic.graphAriaLabel": "Branching logic graph",
561
- "branchingLogic.ruleCountOne": "{{count}} rule",
562
- "branchingLogic.ruleCountOther": "{{count}} rules",
563
- "branchingLogic.brokenCount": "{{count}} broken",
564
- "branchingLogic.emptyNoQuestions": "Add questions before building branching rules.",
565
- "branchingLogic.emptyNoRules": "No rules yet. Add a rule to define branching logic.",
566
- "filterGroup.filters": "Filters",
567
- "filterGroup.all": "All",
568
- "filterGroup.clear": "Clear",
569
- "filterGroup.clearAll": "Clear all",
570
- "filterGroup.from": "From",
571
- "filterGroup.to": "To",
572
- "filterGroup.allOf": "All {{label}}",
573
- "filterGroup.activeCount": "{{count}} active",
574
- "debug.guardEvaluationsHint": "Guard evaluations will appear when transitions or ticks with guards execute",
575
- "debug.expression": "Expression",
576
- "debug.inputs": "Inputs",
577
- "debug.trait": "Trait",
578
- "debug.filterAll": "All",
579
- "debug.filterPassed": "Passed",
580
- "debug.filterFailed": "Failed",
581
- "debug.traitsInitHint": "Traits will appear when the state machine initializes",
582
- "debug.traitsMountHint": "Traits will appear when components using them are mounted",
583
- "debug.activeStates": "Active States",
584
- "debug.availableEvents": "Available Events",
585
- "debug.noTransitionsFromState": "No transitions from current state",
586
- "debug.guarded": "guarded",
587
- "debug.otherEvents": "Other Events (not available from current state)",
588
- "debug.recentTransitions": "Recent Transitions",
589
- "debug.transitionsCount": "{{count}} transitions",
590
- "debug.states": "States",
591
- "debug.transitions": "Transitions",
592
- "debug.guards": "Guards",
593
- "debug.debugModeHint": "Debug mode may not be enabled",
594
- "debug.entitiesSpawnHint": "Entities will appear when spawned",
595
- "debug.singleton": "Singleton",
596
- "debug.singletonsCount": "Singletons ({{count}})",
597
- "debug.runtimeCount": "Runtime ({{count}})",
598
- "debug.moreEntities": "+{{count}} more entities",
599
- "debug.persistent": "Persistent",
600
- "debug.loadedCount": "{{count}} loaded",
601
- "debug.notLoaded": "not loaded",
602
- "debug.eventsExecuteHint": "Events will appear as traits, ticks, and other systems execute",
603
- "debug.allCount": "All ({{count}})",
604
- "debug.autoScroll": "Auto-scroll",
605
- "debug.transitionsProcessHint": "Transitions will appear as the state machine processes events",
606
- "debug.transitionsRecorded": "{{count}} transitions recorded",
607
- "debug.guardLabel": "guard:",
608
- "debug.effectsCount": "{{count}} effects",
609
- "debug.bridgeInitHint": "The ServerBridge has not been initialized. Bridge health will appear once the runtime connects to the server.",
610
- "debug.never": "Never",
611
- "debug.connected": "Connected",
612
- "debug.disconnected": "Disconnected",
613
- "debug.lastError": "Last Error",
614
- "debug.totalEventsProcessed": "{{count}} total events processed",
615
- "debug.server": "server",
616
- "debug.clientEffectsCount": "{{count}} clientEffects",
617
- "debug.emitLabel": "emit:",
618
- "debug.rowsCount": "{{count}} rows",
619
- "debug.serverResponse": "server response",
620
- "debug.collapseVerificationTimeline": "Collapse verification timeline",
621
- "debug.expandVerificationTimeline": "Expand verification timeline",
622
- "debug.failCount": "{{count}} fail",
623
- "debug.ok": "OK",
624
- "debug.localCount": "{{count}} local",
625
- "debug.serverCount": "{{count}} server",
626
- "debug.waitingForTransitions": "Waiting for transitions...",
627
- "debug.tabDispatch": "Dispatch",
628
- "debug.tabVerify": "Verify",
629
- "debug.tabVerifyAlert": "Verify (!)",
630
- "debug.tabTimeline": "Timeline",
631
- "debug.tabBridge": "Bridge",
632
- "debug.tabTraits": "Traits",
633
- "debug.tabTicks": "Ticks",
634
- "debug.tabEntities": "Entities",
635
- "debug.tabEvents": "Events",
636
- "debug.tabGuards": "Guards",
637
- "debug.debugger": "Debugger",
638
- "debug.failedCount": "{{count}} failed",
639
- "debug.traitsCount": "{{count}} traits",
640
- "debug.idle": "Idle",
641
- "debug.openDebugger": "Open Debugger (`)",
642
- "debug.kflowVerifier": "KFlow Verifier",
643
- "debug.allPassing": "All passing",
644
- "debug.runtime": "Runtime",
645
- "debug.close": "Close (`)",
646
- "debug.toggleHint": "Press ` to toggle | window.__orbitalVerification for automation",
647
- "replyTree.expandReplies": "Expand replies",
648
- "replyTree.collapseReplies": "Collapse replies",
649
- "replyTree.voteOnReplyBy": "Vote on reply by {{author}}",
650
- "replyTree.replyTo": "Reply to {{author}}",
651
- "replyTree.replyToPlaceholder": "Reply to {{author}}\u2026",
652
- "replyTree.reply": "Reply",
653
- "replyTree.flagReplyBy": "Flag reply by {{author}}",
654
- "replyTree.flag": "Flag",
655
- "replyTree.send": "Send",
656
- "replyTree.continueThread": "Continue thread",
657
- "replyTree.noRepliesYet": "No replies yet.",
658
- "signaturePad.label": "Signature",
659
- "signaturePad.helperText": "Draw your signature above",
660
- "signaturePad.clear": "Clear",
661
- "signaturePad.confirm": "Confirm",
662
- "qrScanner.cameraUnavailable": "Camera unavailable",
663
- "qrScanner.paused": "Paused",
664
- "qrScanner.resumeScanning": "Resume scanning",
665
- "qrScanner.pauseScanning": "Pause scanning",
666
- "qrScanner.switchToFrontCamera": "Switch to front camera",
667
- "qrScanner.switchToRearCamera": "Switch to rear camera",
668
- "qrScanner.mockScan": "Mock Scan",
669
- "docSearch.placeholder": "Search documentation...",
670
- "stateMachine.loading": "Loading state machine\u2026",
671
- "stateMachine.noStateMachine": "No state machine to visualize",
672
- "avl.trigger": "Trigger",
673
- "avl.guard": "Guard",
674
- "avl.effects": "Effects",
675
- "avl.props": "Props",
676
- "avl.entity": "Entity",
677
- "avl.traits": "Traits",
678
- "avl.transition": "Transition",
679
- "avl.onEntity": "on {{entity}}",
680
- "avl.linkedTo": "linked to {{entity}}",
681
- "avl.pressEscToZoomOut": "Press Esc to zoom out",
682
- "avl.zoomIn": "Zoom in",
683
- "avl.zoomOut": "Zoom out",
684
- "avl.orbitalLabel": "Orbital: {{name}}",
685
- "avl.orbitalLabelHighlighted": "Orbital: {{name}} (highlighted)",
686
- "avl.noTraitData": "No trait data",
687
- "avl.computingLayout": "Computing layout...",
688
- "avl.noStateMachine": "No state machine",
689
- "avl.listensFor": "listens for {{event}}",
690
- "avl.emits": "emits {{event}}",
691
- "avl.pageLayout": "Page Layout",
692
- "avl.overlaySuffix": "(overlay)",
693
- "orbPreview.previewBadge": "Preview",
694
- "orbPreview.doubleClickToOpen": "Double-click to open",
695
- "orbPreview.dropToAddAndOpen": "Drop to add and open",
696
- "orbPreview.dispatching": "Coordinator is dispatching to this orbital",
697
- "orbPreview.noPreview": "No preview available",
698
- "orbPreview.screensCount": "{{count}} screens",
699
- "detailView.noTransitionData": "No transition data",
700
- "orbInspector.required": "req",
701
- "orbInspector.addField": "Add Field",
702
- "orbInspector.serviceMode": "Service Mode",
703
- "orbInspector.standalone": "Standalone",
704
- "orbInspector.embedded": "Embedded",
705
- "orbInspector.rendersOwnUi": "Renders its own UI",
706
- "orbInspector.headless": "Headless, wired to other behaviors",
707
- "orbInspector.addEffect": "Add Effect",
708
- "orbInspector.guardExpression": "Guard expression",
709
- "orbInspector.selectPatternForStyles": "Select a pattern to view its style tokens.",
710
- "orbInspector.tokens": "Tokens",
711
- "orbInspector.noTokenContract": "No token contract declared for this pattern.",
712
- "orbInspector.variant": "Variant",
713
- "orbInspector.size": "Size",
714
- "orbInspector.statesCount": "{{count}} states",
715
- "orbInspector.onEntity": " on {{entity}}",
716
- "orbInspector.projectThemeTokens": "Project theme tokens",
717
- "orbInspector.tokenGroup.colors": "Colors",
718
- "orbInspector.tokenGroup.radii": "Radii",
719
- "orbInspector.tokenGroup.spacing": "Spacing",
720
- "orbInspector.tokenGroup.shadows": "Shadows",
721
- "orbInspector.tab.inspector": "Inspector",
722
- "orbInspector.tab.styles": "Styles",
723
- "orbInspector.tab.code": "Code",
724
- "canvas.goBackToOverview": "Go back to overview",
725
- "canvas.overview": "Overview",
726
- "canvas.expanded": "Expanded",
727
- "canvas.modulesCount": "{{count}} modules",
728
- "canvas.screensCount": "{{count}} screens",
729
- "canvas.switchToView": "Switch to {{label}} view",
730
- "lawReference.viewFullText": "View full law text",
731
- "statCard.defaultLabel": "Stat",
732
- "statCard.vsLastPeriod": "vs last period",
733
- "mediaGallery.upload": "Upload",
734
- "mediaGallery.noMediaDescription": "No media items to display.",
735
- "pagination.jumpPlaceholder": "Page",
736
- "table.selectRow": "Select row {{id}}",
737
- "card.selectItem": "Select {{item}}",
738
- "card.itemFallback": "item",
739
- "fileTree.noFiles": "No files",
740
- "masterDetail.selectItem": "Select an item to view details",
741
- "empty.createFirst": "Create your first item to get started.",
742
- "upload.dropOrBrowse": "Drop files here or click to browse",
743
- "upload.dropFilesHere": "Drop files here",
744
- "upload.accepted": "Accepted: {{accept}}",
745
- "upload.maxSize": "Max size: {{size}}",
746
- "upload.maxFiles": "Up to {{count}} files",
747
- "upload.error.maxFiles": "Maximum {{count}} files allowed",
748
- "upload.error.invalidType": "Invalid file type: {{name}}",
749
- "upload.error.tooLarge": "File too large: {{name}} (max {{size}})",
750
- "optionConstraint.requiredOne": "Required, pick 1",
751
- "optionConstraint.optionalOne": "Optional, pick up to 1",
752
- "optionConstraint.pickExactly": "Pick exactly {{count}}",
753
- "optionConstraint.pickRange": "Pick {{min}}-{{max}}",
754
- "optionConstraint.pickAtLeast": "Pick at least {{count}}",
755
- "optionConstraint.pickUpTo": "Pick up to {{count}}",
756
- "optionConstraint.optional": "Optional",
757
- "optionConstraint.outOfStock": "Out of stock",
758
- "optionConstraint.error.pickOne": "Pick 1 option",
759
- "optionConstraint.error.pickOnlyOne": "Pick only 1 option",
760
- "optionConstraint.error.pickMore": "Pick at least {{count}} more",
761
- "optionConstraint.error.removeOptions": "Remove {{count}} options",
762
- "stateMachine.pinned": "Pinned",
763
- "stateMachine.eventCount": "{{count}} events",
764
- "stateMachine.externalEffects": "External Effects",
765
- "stateMachine.legend.initial": "Initial",
766
- "stateMachine.legend.final": "Final",
767
- "stateMachine.legend.state": "State",
768
- "stateMachine.legend.multiEvent": "Multi-event",
769
- "relationSelect.selectPlaceholder": "Select..."
770
- };
771
- }
772
- });
773
- function useTranslate() {
774
- return useContext(I18nContext);
775
- }
776
- var _meta, coreMessages, coreLocale, I18nContext;
777
- var init_useTranslate = __esm({
778
- "hooks/useTranslate.ts"() {
779
- "use client";
780
- init_en();
781
- ({ $meta: _meta, ...coreMessages } = en_default);
782
- coreLocale = coreMessages;
783
- I18nContext = createContext({
784
- locale: "en",
785
- direction: "ltr",
786
- t: (key) => coreLocale[key] ?? key
787
- // core locale fallback
788
- });
789
- I18nContext.displayName = "I18nContext";
790
- I18nContext.Provider;
791
- }
792
- });
793
-
794
- // hooks/useAuthContext.ts
795
- function useAuthContext() {
796
- return {
797
- user: null,
798
- loading: false,
799
- signIn: void 0,
800
- signOut: void 0
801
- };
802
- }
803
- var init_useAuthContext = __esm({
804
- "hooks/useAuthContext.ts"() {
805
- }
806
- });
807
- function useSwipeGesture(callbacks, options = {}) {
808
- const { threshold = 50, velocityThreshold = 0.3, preventDefault = false } = options;
809
- const startX = useRef(0);
810
- const startY = useRef(0);
811
- const startTime = useRef(0);
812
- const currentX = useRef(0);
813
- const tracking = useRef(false);
814
- const offsetXRef = useRef(0);
815
- const isSwipingRef = useRef(false);
816
- const onPointerDown = useCallback((e) => {
817
- startX.current = e.clientX;
818
- startY.current = e.clientY;
819
- currentX.current = e.clientX;
820
- startTime.current = Date.now();
821
- tracking.current = true;
822
- isSwipingRef.current = false;
823
- offsetXRef.current = 0;
824
- e.target.setPointerCapture?.(e.pointerId);
825
- }, []);
826
- const onPointerMove = useCallback((e) => {
827
- if (!tracking.current) return;
828
- if (preventDefault) e.preventDefault();
829
- currentX.current = e.clientX;
830
- const dx = e.clientX - startX.current;
831
- const dy = e.clientY - startY.current;
832
- if (Math.abs(dx) > 10 && Math.abs(dx) > Math.abs(dy)) {
833
- isSwipingRef.current = true;
834
- offsetXRef.current = dx;
835
- }
836
- }, [preventDefault]);
837
- const onPointerUp = useCallback((e) => {
838
- if (!tracking.current) return;
839
- tracking.current = false;
840
- const dx = e.clientX - startX.current;
841
- const dy = e.clientY - startY.current;
842
- const elapsed = Date.now() - startTime.current;
843
- const velocity = Math.abs(dx) / Math.max(elapsed, 1);
844
- offsetXRef.current = 0;
845
- isSwipingRef.current = false;
846
- if (Math.abs(dx) < threshold && velocity < velocityThreshold) return;
847
- if (Math.abs(dx) > Math.abs(dy)) {
848
- if (dx < -threshold) callbacks.onSwipeLeft?.();
849
- else if (dx > threshold) callbacks.onSwipeRight?.();
850
- } else {
851
- if (dy < -threshold) callbacks.onSwipeUp?.();
852
- else if (dy > threshold) callbacks.onSwipeDown?.();
853
- }
854
- }, [threshold, velocityThreshold, callbacks]);
855
- const onPointerCancel = useCallback(() => {
856
- tracking.current = false;
857
- offsetXRef.current = 0;
858
- isSwipingRef.current = false;
859
- }, []);
860
- return {
861
- onPointerDown,
862
- onPointerMove,
863
- onPointerUp,
864
- onPointerCancel,
865
- offsetX: offsetXRef.current,
866
- isSwiping: isSwipingRef.current
867
- };
868
- }
869
- var init_useSwipeGesture = __esm({
870
- "hooks/useSwipeGesture.ts"() {
871
- "use client";
872
- }
873
- });
874
- function useLongPress(onLongPress, options = {}) {
875
- const { duration = 500, moveThreshold = 10 } = options;
876
- const timerRef = useRef(null);
877
- const startPos = useRef({ x: 0, y: 0 });
878
- const isPressedRef = useRef(false);
879
- const firedRef = useRef(false);
880
- const cancel = useCallback(() => {
881
- if (timerRef.current) {
882
- clearTimeout(timerRef.current);
883
- timerRef.current = null;
884
- }
885
- isPressedRef.current = false;
886
- }, []);
887
- const onPointerDown = useCallback((e) => {
888
- firedRef.current = false;
889
- startPos.current = { x: e.clientX, y: e.clientY };
890
- isPressedRef.current = true;
891
- timerRef.current = setTimeout(() => {
892
- firedRef.current = true;
893
- isPressedRef.current = false;
894
- onLongPress();
895
- }, duration);
896
- }, [duration, onLongPress]);
897
- const onPointerMove = useCallback((e) => {
898
- if (!isPressedRef.current) return;
899
- const dx = e.clientX - startPos.current.x;
900
- const dy = e.clientY - startPos.current.y;
901
- if (Math.sqrt(dx * dx + dy * dy) > moveThreshold) {
902
- cancel();
903
- }
904
- }, [moveThreshold, cancel]);
905
- const onPointerUp = useCallback(() => {
906
- cancel();
907
- }, [cancel]);
908
- const onPointerCancel = useCallback(() => {
909
- cancel();
910
- }, [cancel]);
911
- return {
912
- onPointerDown,
913
- onPointerMove,
914
- onPointerUp,
915
- onPointerCancel,
916
- isPressed: isPressedRef.current
917
- };
918
- }
919
- var init_useLongPress = __esm({
920
- "hooks/useLongPress.ts"() {
921
- "use client";
922
- }
923
- });
924
- function useDragReorder(initialItems, onReorder) {
925
- const [items, setItems] = useState(initialItems);
926
- const [dragIndex, setDragIndex] = useState(-1);
927
- const [dragOverIndex, setDragOverIndex] = useState(-1);
928
- const itemsRef = useRef(initialItems);
929
- if (initialItems !== itemsRef.current) {
930
- itemsRef.current = initialItems;
931
- setItems(initialItems);
932
- }
933
- const isDragging = dragIndex >= 0;
934
- const handleDragStart = useCallback((index) => (e) => {
935
- e.preventDefault();
936
- setDragIndex(index);
937
- setDragOverIndex(index);
938
- e.target.setPointerCapture?.(e.pointerId);
939
- }, []);
940
- const handleDragMove = useCallback((index) => (e) => {
941
- if (dragIndex < 0) return;
942
- const target = document.elementFromPoint(e.clientX, e.clientY);
943
- if (!target) return;
944
- let el = target;
945
- while (el && !el.dataset.dragIndex) {
946
- el = el.parentElement;
947
- }
948
- if (el?.dataset.dragIndex) {
949
- const overIndex = parseInt(el.dataset.dragIndex, 10);
950
- if (!isNaN(overIndex) && overIndex !== dragOverIndex) {
951
- setDragOverIndex(overIndex);
952
- }
953
- }
954
- }, [dragIndex, dragOverIndex]);
955
- const handleDragEnd = useCallback(() => {
956
- if (dragIndex >= 0 && dragOverIndex >= 0 && dragIndex !== dragOverIndex) {
957
- const newItems = [...items];
958
- const [movedItem] = newItems.splice(dragIndex, 1);
959
- newItems.splice(dragOverIndex, 0, movedItem);
960
- setItems(newItems);
961
- onReorder(dragIndex, dragOverIndex, items[dragIndex]);
962
- }
963
- setDragIndex(-1);
964
- setDragOverIndex(-1);
965
- }, [dragIndex, dragOverIndex, items, onReorder]);
966
- const getDragHandleProps = useCallback((index) => ({
967
- onPointerDown: handleDragStart(index),
968
- style: { cursor: "grab", touchAction: "none" },
969
- "aria-grabbed": dragIndex === index,
970
- role: "button"
971
- }), [handleDragStart, dragIndex]);
972
- const getItemProps = useCallback((index) => ({
973
- onPointerMove: handleDragMove(index),
974
- onPointerUp: handleDragEnd,
975
- "aria-dropeffect": "move",
976
- "data-drag-index": String(index),
977
- style: {
978
- opacity: dragIndex === index ? 0.5 : 1,
979
- transition: isDragging ? "transform 150ms ease" : void 0,
980
- transform: isDragging && dragOverIndex >= 0 ? index === dragIndex ? "scale(1.02)" : index > dragIndex && index <= dragOverIndex ? "translateY(-100%)" : index < dragIndex && index >= dragOverIndex ? "translateY(100%)" : void 0 : void 0
981
- }
982
- }), [handleDragMove, handleDragEnd, dragIndex, dragOverIndex, isDragging]);
983
- return {
984
- items,
985
- dragIndex,
986
- dragOverIndex,
987
- isDragging,
988
- getDragHandleProps,
989
- getItemProps
990
- };
991
- }
992
- var init_useDragReorder = __esm({
993
- "hooks/useDragReorder.ts"() {
994
- "use client";
995
- }
996
- });
997
- function useInfiniteScroll(onLoadMore, options = {}) {
998
- const { rootMargin = "200px", hasMore = true, isLoading = false } = options;
999
- const observerRef = useRef(null);
1000
- const callbackRef = useRef(onLoadMore);
1001
- callbackRef.current = onLoadMore;
1002
- const hasMoreRef = useRef(hasMore);
1003
- hasMoreRef.current = hasMore;
1004
- const isLoadingRef = useRef(isLoading);
1005
- isLoadingRef.current = isLoading;
1006
- useEffect(() => {
1007
- return () => {
1008
- observerRef.current?.disconnect();
1009
- };
1010
- }, []);
1011
- const sentinelRef = useCallback((node) => {
1012
- observerRef.current?.disconnect();
1013
- if (!node) return;
1014
- observerRef.current = new IntersectionObserver(
1015
- (entries) => {
1016
- const entry = entries[0];
1017
- if (entry.isIntersecting && hasMoreRef.current && !isLoadingRef.current) {
1018
- callbackRef.current();
1019
- }
1020
- },
1021
- { rootMargin }
1022
- );
1023
- observerRef.current.observe(node);
1024
- }, [rootMargin]);
1025
- return { sentinelRef };
1026
- }
1027
- var init_useInfiniteScroll = __esm({
1028
- "hooks/useInfiniteScroll.ts"() {
1029
- "use client";
1030
- }
1031
- });
1032
- function usePullToRefresh(onRefresh, options = {}) {
1033
- const { threshold = 60, maxPull = 120 } = options;
1034
- const [pullDistance, setPullDistance] = useState(0);
1035
- const [isPulling, setIsPulling] = useState(false);
1036
- const [isRefreshing, setIsRefreshing] = useState(false);
1037
- const startY = useRef(0);
1038
- const scrollTopRef = useRef(0);
1039
- const onTouchStart = useCallback((e) => {
1040
- const container = e.currentTarget;
1041
- scrollTopRef.current = container.scrollTop;
1042
- if (scrollTopRef.current <= 0) {
1043
- startY.current = e.touches[0].clientY;
1044
- setIsPulling(true);
1045
- }
1046
- }, []);
1047
- const onTouchMove = useCallback((e) => {
1048
- if (!isPulling || isRefreshing) return;
1049
- const container = e.currentTarget;
1050
- if (container.scrollTop > 0) {
1051
- setPullDistance(0);
1052
- return;
1053
- }
1054
- const dy = e.touches[0].clientY - startY.current;
1055
- if (dy > 0) {
1056
- const distance = Math.min(dy * 0.5, maxPull);
1057
- setPullDistance(distance);
1058
- }
1059
- }, [isPulling, isRefreshing, maxPull]);
1060
- const onTouchEnd = useCallback(() => {
1061
- if (!isPulling) return;
1062
- setIsPulling(false);
1063
- if (pullDistance >= threshold && !isRefreshing) {
1064
- setIsRefreshing(true);
1065
- setPullDistance(threshold);
1066
- onRefresh();
1067
- } else {
1068
- setPullDistance(0);
1069
- }
1070
- }, [isPulling, pullDistance, threshold, isRefreshing, onRefresh]);
1071
- const endRefresh = useCallback(() => {
1072
- setIsRefreshing(false);
1073
- setPullDistance(0);
1074
- }, []);
1075
- const containerProps = {
1076
- onTouchStart,
1077
- onTouchMove,
1078
- onTouchEnd,
1079
- style: {
1080
- transform: pullDistance > 0 ? `translateY(${pullDistance}px)` : void 0,
1081
- transition: isPulling ? "none" : "transform 300ms ease-out"
1082
- }
1083
- };
1084
- return {
1085
- pullDistance,
1086
- isPulling,
1087
- isRefreshing,
1088
- containerProps,
1089
- endRefresh
1090
- };
1091
- }
1092
- var init_usePullToRefresh = __esm({
1093
- "hooks/usePullToRefresh.ts"() {
1094
- "use client";
1095
- }
1096
- });
1097
- function EntitySchemaProvider({
1098
- entities,
1099
- traitLinkedEntities,
1100
- orbitalsByTrait,
1101
- children
1102
- }) {
1103
- const entitiesMap = useMemo(() => {
1104
- const map = /* @__PURE__ */ new Map();
1105
- for (const entity of entities) {
1106
- map.set(entity.name, entity);
1107
- }
1108
- return map;
1109
- }, [entities]);
1110
- const linkedMap = useMemo(() => {
1111
- return traitLinkedEntities ?? /* @__PURE__ */ new Map();
1112
- }, [traitLinkedEntities]);
1113
- const orbitalsMap = useMemo(() => {
1114
- return orbitalsByTrait ?? /* @__PURE__ */ new Map();
1115
- }, [orbitalsByTrait]);
1116
- const contextValue = useMemo(
1117
- () => ({
1118
- entities: entitiesMap,
1119
- traitLinkedEntities: linkedMap,
1120
- orbitalsByTrait: orbitalsMap
1121
- }),
1122
- [entitiesMap, linkedMap, orbitalsMap]
1123
- );
1124
- return /* @__PURE__ */ jsx(EntitySchemaContext.Provider, { value: contextValue, children });
1125
- }
1126
- function useEntitySchema() {
1127
- const context = useContext(EntitySchemaContext);
1128
- if (!context) {
1129
- throw new Error("useEntitySchema must be used within an EntitySchemaProvider");
1130
- }
1131
- return context;
1132
- }
1133
- function useEntityDefinition(entityName) {
1134
- const { entities } = useEntitySchema();
1135
- return entities.get(entityName);
1136
- }
1137
- function useEntitySchemaOptional() {
1138
- return useContext(EntitySchemaContext);
1139
- }
1140
- var EntitySchemaContext;
1141
- var init_EntitySchemaContext = __esm({
1142
- "runtime/EntitySchemaContext.tsx"() {
1143
- EntitySchemaContext = createContext(null);
1144
- }
1145
- });
1146
- function cn(...inputs) {
1147
- return twMerge(clsx(inputs));
1148
- }
1149
- var init_cn = __esm({
1150
- "lib/cn.ts"() {
1151
- }
1152
- });
1153
288
  var paddingStyles, paddingXStyles, paddingYStyles, marginStyles, marginXStyles, marginYStyles, bgStyles, roundedStyles, shadowStyles, displayStyles, overflowStyles, positionStyles, Box;
1154
289
  var init_Box = __esm({
1155
290
  "components/core/atoms/Box.tsx"() {
@@ -2521,7 +1656,6 @@ var init_Modal = __esm({
2521
1656
  init_Overlay();
2522
1657
  init_cn();
2523
1658
  init_useEventBus();
2524
- init_useTranslate();
2525
1659
  sizeClasses2 = {
2526
1660
  sm: "max-w-md",
2527
1661
  md: "max-w-2xl",
@@ -2743,7 +1877,6 @@ var init_Drawer = __esm({
2743
1877
  init_Overlay();
2744
1878
  init_cn();
2745
1879
  init_useEventBus();
2746
- init_useTranslate();
2747
1880
  sizeWidths = {
2748
1881
  sm: "w-full sm:w-80",
2749
1882
  // 320px
@@ -3016,7 +2149,6 @@ var init_Toast = __esm({
3016
2149
  init_Badge();
3017
2150
  init_cn();
3018
2151
  init_useEventBus();
3019
- init_useTranslate();
3020
2152
  variantClasses = {
3021
2153
  success: "bg-card border-[length:var(--border-width)] border-success",
3022
2154
  error: "bg-card border-[length:var(--border-width)] border-error",
@@ -3978,7 +3110,6 @@ var init_Input = __esm({
3978
3110
  "components/core/atoms/Input.tsx"() {
3979
3111
  init_cn();
3980
3112
  init_Icon();
3981
- init_useTranslate();
3982
3113
  Input = React84__default.forwardRef(
3983
3114
  ({
3984
3115
  className,
@@ -4362,7 +3493,6 @@ var init_FilterPill = __esm({
4362
3493
  "components/core/atoms/FilterPill.tsx"() {
4363
3494
  init_cn();
4364
3495
  init_useEventBus();
4365
- init_useTranslate();
4366
3496
  init_Icon();
4367
3497
  variantStyles5 = {
4368
3498
  default: [
@@ -5749,7 +4879,6 @@ var init_LawReferenceTooltip = __esm({
5749
4879
  init_Typography();
5750
4880
  init_Divider();
5751
4881
  init_cn();
5752
- init_useTranslate();
5753
4882
  positionStyles2 = {
5754
4883
  top: "bottom-full left-1/2 -translate-x-1/2 mb-2",
5755
4884
  bottom: "top-full left-1/2 -translate-x-1/2 mt-2",
@@ -6360,6 +5489,41 @@ var init_AnimatedCounter = __esm({
6360
5489
  AnimatedCounter.displayName = "AnimatedCounter";
6361
5490
  }
6362
5491
  });
5492
+ function useInfiniteScroll(onLoadMore, options = {}) {
5493
+ const { rootMargin = "200px", hasMore = true, isLoading = false } = options;
5494
+ const observerRef = useRef(null);
5495
+ const callbackRef = useRef(onLoadMore);
5496
+ callbackRef.current = onLoadMore;
5497
+ const hasMoreRef = useRef(hasMore);
5498
+ hasMoreRef.current = hasMore;
5499
+ const isLoadingRef = useRef(isLoading);
5500
+ isLoadingRef.current = isLoading;
5501
+ useEffect(() => {
5502
+ return () => {
5503
+ observerRef.current?.disconnect();
5504
+ };
5505
+ }, []);
5506
+ const sentinelRef = useCallback((node) => {
5507
+ observerRef.current?.disconnect();
5508
+ if (!node) return;
5509
+ observerRef.current = new IntersectionObserver(
5510
+ (entries) => {
5511
+ const entry = entries[0];
5512
+ if (entry.isIntersecting && hasMoreRef.current && !isLoadingRef.current) {
5513
+ callbackRef.current();
5514
+ }
5515
+ },
5516
+ { rootMargin }
5517
+ );
5518
+ observerRef.current.observe(node);
5519
+ }, [rootMargin]);
5520
+ return { sentinelRef };
5521
+ }
5522
+ var init_useInfiniteScroll = __esm({
5523
+ "hooks/useInfiniteScroll.ts"() {
5524
+ "use client";
5525
+ }
5526
+ });
6363
5527
  var InfiniteScrollSentinel;
6364
5528
  var init_InfiniteScrollSentinel = __esm({
6365
5529
  "components/core/atoms/InfiniteScrollSentinel.tsx"() {
@@ -8708,7 +7872,6 @@ var init_ErrorState = __esm({
8708
7872
  init_Typography();
8709
7873
  init_Icon();
8710
7874
  init_useEventBus();
8711
- init_useTranslate();
8712
7875
  ErrorState = ({
8713
7876
  title,
8714
7877
  message,
@@ -8751,7 +7914,6 @@ var init_ErrorBoundary = __esm({
8751
7914
  "use client";
8752
7915
  init_cn();
8753
7916
  init_ErrorState();
8754
- init_useTranslate();
8755
7917
  DefaultFallback = ({ error, onRetry }) => {
8756
7918
  const { t } = useTranslate();
8757
7919
  return /* @__PURE__ */ jsx(
@@ -8901,7 +8063,6 @@ var init_Skeleton = __esm({
8901
8063
  "components/core/molecules/Skeleton.tsx"() {
8902
8064
  "use client";
8903
8065
  init_cn();
8904
- init_useTranslate();
8905
8066
  init_Box();
8906
8067
  init_Stack();
8907
8068
  init_Stack();
@@ -9578,7 +8739,6 @@ var AboutPageTemplate;
9578
8739
  var init_AboutPageTemplate = __esm({
9579
8740
  "components/marketing/templates/AboutPageTemplate.tsx"() {
9580
8741
  init_cn();
9581
- init_useTranslate();
9582
8742
  init_Stack();
9583
8743
  init_Box();
9584
8744
  init_Typography();
@@ -9683,7 +8843,6 @@ var init_Alert = __esm({
9683
8843
  init_Icon();
9684
8844
  init_Typography();
9685
8845
  init_useEventBus();
9686
- init_useTranslate();
9687
8846
  variantBorderClasses = {
9688
8847
  info: "border-info",
9689
8848
  success: "border-success",
@@ -10043,7 +9202,6 @@ var init_Menu = __esm({
10043
9202
  init_Badge();
10044
9203
  init_cn();
10045
9204
  init_useEventBus();
10046
- init_useTranslate();
10047
9205
  Menu = ({
10048
9206
  trigger,
10049
9207
  items,
@@ -10331,7 +9489,6 @@ var init_FloatingActionButton = __esm({
10331
9489
  init_Typography();
10332
9490
  init_cn();
10333
9491
  init_useEventBus();
10334
- init_useTranslate();
10335
9492
  FloatingActionButton = ({
10336
9493
  action,
10337
9494
  actionPayload,
@@ -10515,7 +9672,7 @@ var init_MapView = __esm({
10515
9672
  L.Marker.prototype.options.icon = defaultIcon;
10516
9673
  const { useEffect: useEffect71, useRef: useRef66, useCallback: useCallback113, useState: useState103 } = React84__default;
10517
9674
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
10518
- const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
9675
+ const { useEventBus: useEventBus3 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
10519
9676
  function MapUpdater({ centerLat, centerLng, zoom }) {
10520
9677
  const map = useMap();
10521
9678
  const prevRef = useRef66({ centerLat, centerLng, zoom });
@@ -10557,7 +9714,7 @@ var init_MapView = __esm({
10557
9714
  className,
10558
9715
  showAttribution = true
10559
9716
  }) {
10560
- const eventBus = useEventBus2();
9717
+ const eventBus = useEventBus3();
10561
9718
  const [clickedPosition, setClickedPosition] = useState103(null);
10562
9719
  const handleMapClick = useCallback113((lat, lng) => {
10563
9720
  if (showClickedPin) {
@@ -11253,7 +10410,6 @@ var init_ActionTile = __esm({
11253
10410
  "components/game/organisms/puzzles/sequencer/ActionTile.tsx"() {
11254
10411
  init_atoms2();
11255
10412
  init_cn();
11256
- init_useTranslate();
11257
10413
  DRAG_MIME = "application/x-almadar-slot-item";
11258
10414
  SIZE_CONFIG = {
11259
10415
  sm: { px: "px-2 py-1", icon: "text-lg", text: "text-xs" },
@@ -11291,7 +10447,6 @@ var init_ActionPalette = __esm({
11291
10447
  "components/game/organisms/puzzles/sequencer/ActionPalette.tsx"() {
11292
10448
  init_atoms2();
11293
10449
  init_cn();
11294
- init_useTranslate();
11295
10450
  init_ActionTile();
11296
10451
  ActionPalette.displayName = "ActionPalette";
11297
10452
  }
@@ -11301,7 +10456,6 @@ var init_AuthLayout = __esm({
11301
10456
  "components/core/templates/AuthLayout.tsx"() {
11302
10457
  "use client";
11303
10458
  init_cn();
11304
- init_useTranslate();
11305
10459
  init_Box();
11306
10460
  init_Stack();
11307
10461
  init_Typography();
@@ -11446,7 +10600,6 @@ var init_LoadingState = __esm({
11446
10600
  init_atoms2();
11447
10601
  init_Stack();
11448
10602
  init_Typography();
11449
- init_useTranslate();
11450
10603
  LoadingState = ({
11451
10604
  title,
11452
10605
  message,
@@ -12630,7 +11783,6 @@ var init_IsometricCanvas = __esm({
12630
11783
  "use client";
12631
11784
  init_cn();
12632
11785
  init_useEventBus();
12633
- init_useTranslate();
12634
11786
  init_Box();
12635
11787
  init_Stack();
12636
11788
  init_Icon();
@@ -12994,7 +12146,6 @@ var init_BattleBoard = __esm({
12994
12146
  "use client";
12995
12147
  init_cn();
12996
12148
  init_useEventBus();
12997
- init_useTranslate();
12998
12149
  init_Box();
12999
12150
  init_Button();
13000
12151
  init_Typography();
@@ -13754,7 +12905,6 @@ var log6, SWIM_GUTTER, CENTER_W, BehaviorView;
13754
12905
  var init_BehaviorView = __esm({
13755
12906
  "components/avl/molecules/BehaviorView.tsx"() {
13756
12907
  "use client";
13757
- init_useTranslate();
13758
12908
  init_AvlState();
13759
12909
  init_AvlTransitionLane();
13760
12910
  init_AvlSwimLane();
@@ -13869,7 +13019,6 @@ var MIN_DIAGRAM_WIDTH, ScaledDiagram;
13869
13019
  var init_ScaledDiagram = __esm({
13870
13020
  "components/core/molecules/ScaledDiagram.tsx"() {
13871
13021
  init_Box();
13872
- init_useTranslate();
13873
13022
  init_cn();
13874
13023
  MIN_DIAGRAM_WIDTH = 200;
13875
13024
  ScaledDiagram = ({
@@ -14012,7 +13161,6 @@ var init_CodeBlock = __esm({
14012
13161
  init_Textarea();
14013
13162
  init_Icon();
14014
13163
  init_useEventBus();
14015
- init_useTranslate();
14016
13164
  SyntaxHighlighter.registerLanguage("json", langJson);
14017
13165
  SyntaxHighlighter.registerLanguage("javascript", langJavascript);
14018
13166
  SyntaxHighlighter.registerLanguage("js", langJavascript);
@@ -14519,7 +13667,6 @@ var init_MarkdownContent = __esm({
14519
13667
  init_katex_min();
14520
13668
  init_Box();
14521
13669
  init_CodeBlock();
14522
- init_useTranslate();
14523
13670
  init_cn();
14524
13671
  MarkdownContent = React84__default.memo(
14525
13672
  ({ content, direction, className }) => {
@@ -14686,6 +13833,56 @@ var init_MarkdownContent = __esm({
14686
13833
  MarkdownContent.displayName = "MarkdownContent";
14687
13834
  }
14688
13835
  });
13836
+ function useLongPress(onLongPress, options = {}) {
13837
+ const { duration = 500, moveThreshold = 10 } = options;
13838
+ const timerRef = useRef(null);
13839
+ const startPos = useRef({ x: 0, y: 0 });
13840
+ const isPressedRef = useRef(false);
13841
+ const firedRef = useRef(false);
13842
+ const cancel = useCallback(() => {
13843
+ if (timerRef.current) {
13844
+ clearTimeout(timerRef.current);
13845
+ timerRef.current = null;
13846
+ }
13847
+ isPressedRef.current = false;
13848
+ }, []);
13849
+ const onPointerDown = useCallback((e) => {
13850
+ firedRef.current = false;
13851
+ startPos.current = { x: e.clientX, y: e.clientY };
13852
+ isPressedRef.current = true;
13853
+ timerRef.current = setTimeout(() => {
13854
+ firedRef.current = true;
13855
+ isPressedRef.current = false;
13856
+ onLongPress();
13857
+ }, duration);
13858
+ }, [duration, onLongPress]);
13859
+ const onPointerMove = useCallback((e) => {
13860
+ if (!isPressedRef.current) return;
13861
+ const dx = e.clientX - startPos.current.x;
13862
+ const dy = e.clientY - startPos.current.y;
13863
+ if (Math.sqrt(dx * dx + dy * dy) > moveThreshold) {
13864
+ cancel();
13865
+ }
13866
+ }, [moveThreshold, cancel]);
13867
+ const onPointerUp = useCallback(() => {
13868
+ cancel();
13869
+ }, [cancel]);
13870
+ const onPointerCancel = useCallback(() => {
13871
+ cancel();
13872
+ }, [cancel]);
13873
+ return {
13874
+ onPointerDown,
13875
+ onPointerMove,
13876
+ onPointerUp,
13877
+ onPointerCancel,
13878
+ isPressed: isPressedRef.current
13879
+ };
13880
+ }
13881
+ var init_useLongPress = __esm({
13882
+ "hooks/useLongPress.ts"() {
13883
+ "use client";
13884
+ }
13885
+ });
14689
13886
  function Card2({
14690
13887
  title,
14691
13888
  subtitle,
@@ -14774,7 +13971,6 @@ var init_Card2 = __esm({
14774
13971
  "components/core/molecules/Card.tsx"() {
14775
13972
  "use client";
14776
13973
  init_useEventBus();
14777
- init_useTranslate();
14778
13974
  init_useLongPress();
14779
13975
  Card2.displayName = "Card";
14780
13976
  }
@@ -14788,7 +13984,6 @@ var init_QuizBlock = __esm({
14788
13984
  init_Button();
14789
13985
  init_Icon();
14790
13986
  init_Box();
14791
- init_useTranslate();
14792
13987
  init_cn();
14793
13988
  QuizBlock = ({
14794
13989
  question,
@@ -14831,7 +14026,6 @@ var init_StateMachineView = __esm({
14831
14026
  init_Typography();
14832
14027
  init_Button();
14833
14028
  init_Icon();
14834
- init_useTranslate();
14835
14029
  init_useEventBus();
14836
14030
  init_cn();
14837
14031
  StateNode = ({ state, config }) => {
@@ -16198,7 +15392,6 @@ var init_JazariStateMachine = __esm({
16198
15392
  init_StateMachineView();
16199
15393
  init_visualizer();
16200
15394
  init_svg_paths();
16201
- init_useTranslate();
16202
15395
  init_cn();
16203
15396
  JAZARI_VISUALIZER_CONFIG = {
16204
15397
  ...DEFAULT_CONFIG,
@@ -16354,7 +15547,6 @@ var init_ContentRenderer = __esm({
16354
15547
  init_ScaledDiagram();
16355
15548
  init_JazariStateMachine();
16356
15549
  init_parseContentSegments();
16357
- init_useTranslate();
16358
15550
  init_cn();
16359
15551
  ContentRenderer = ({
16360
15552
  content,
@@ -16448,7 +15640,6 @@ var init_BookChapterView = __esm({
16448
15640
  init_ScaledDiagram();
16449
15641
  init_ContentRenderer();
16450
15642
  init_JazariStateMachine();
16451
- init_useTranslate();
16452
15643
  init_cn();
16453
15644
  BookChapterView = ({
16454
15645
  chapter,
@@ -16487,7 +15678,6 @@ var init_BookCoverPage = __esm({
16487
15678
  init_Typography();
16488
15679
  init_Button();
16489
15680
  init_Box();
16490
- init_useTranslate();
16491
15681
  init_cn();
16492
15682
  BookCoverPage = ({
16493
15683
  title,
@@ -16567,7 +15757,6 @@ var init_BookNavBar = __esm({
16567
15757
  init_Typography();
16568
15758
  init_ProgressBar();
16569
15759
  init_Box();
16570
- init_useTranslate();
16571
15760
  init_cn();
16572
15761
  BookNavBar = ({
16573
15762
  currentPage,
@@ -16669,7 +15858,6 @@ var init_BookTableOfContents = __esm({
16669
15858
  init_Button();
16670
15859
  init_Box();
16671
15860
  init_Badge();
16672
- init_useTranslate();
16673
15861
  init_cn();
16674
15862
  BookTableOfContents = ({
16675
15863
  parts,
@@ -16729,7 +15917,6 @@ var init_EmptyState = __esm({
16729
15917
  init_Stack();
16730
15918
  init_Typography();
16731
15919
  init_useEventBus();
16732
- init_useTranslate();
16733
15920
  ICON_NAME_ALIASES = {
16734
15921
  check: "check-circle",
16735
15922
  error: "x-circle",
@@ -16900,7 +16087,6 @@ var init_BookViewer = __esm({
16900
16087
  init_Box();
16901
16088
  init_Stack();
16902
16089
  init_useEventBus();
16903
- init_useTranslate();
16904
16090
  init_cn();
16905
16091
  init_BookCoverPage();
16906
16092
  init_BookTableOfContents();
@@ -17332,7 +16518,6 @@ var init_BranchingLogicBuilder = __esm({
17332
16518
  init_FilterPill();
17333
16519
  init_Box();
17334
16520
  init_useEventBus();
17335
- init_useTranslate();
17336
16521
  init_cn();
17337
16522
  END_OF_SURVEY = "end-of-survey";
17338
16523
  RuleRow = ({
@@ -17785,7 +16970,6 @@ var init_Breadcrumb = __esm({
17785
16970
  init_Typography();
17786
16971
  init_cn();
17787
16972
  init_useEventBus();
17788
- init_useTranslate();
17789
16973
  Breadcrumb = ({
17790
16974
  items,
17791
16975
  separator = "chevron-right",
@@ -18021,7 +17205,6 @@ var init_BuilderBoard = __esm({
18021
17205
  "components/game/organisms/puzzles/builder/BuilderBoard.tsx"() {
18022
17206
  init_atoms2();
18023
17207
  init_useEventBus();
18024
- init_useTranslate();
18025
17208
  BuilderBoard.displayName = "BuilderBoard";
18026
17209
  }
18027
17210
  });
@@ -18148,6 +17331,73 @@ var init_ButtonGroup = __esm({
18148
17331
  ButtonGroup.displayName = "ButtonGroup";
18149
17332
  }
18150
17333
  });
17334
+ function useSwipeGesture(callbacks, options = {}) {
17335
+ const { threshold = 50, velocityThreshold = 0.3, preventDefault = false } = options;
17336
+ const startX = useRef(0);
17337
+ const startY = useRef(0);
17338
+ const startTime = useRef(0);
17339
+ const currentX = useRef(0);
17340
+ const tracking = useRef(false);
17341
+ const offsetXRef = useRef(0);
17342
+ const isSwipingRef = useRef(false);
17343
+ const onPointerDown = useCallback((e) => {
17344
+ startX.current = e.clientX;
17345
+ startY.current = e.clientY;
17346
+ currentX.current = e.clientX;
17347
+ startTime.current = Date.now();
17348
+ tracking.current = true;
17349
+ isSwipingRef.current = false;
17350
+ offsetXRef.current = 0;
17351
+ e.target.setPointerCapture?.(e.pointerId);
17352
+ }, []);
17353
+ const onPointerMove = useCallback((e) => {
17354
+ if (!tracking.current) return;
17355
+ if (preventDefault) e.preventDefault();
17356
+ currentX.current = e.clientX;
17357
+ const dx = e.clientX - startX.current;
17358
+ const dy = e.clientY - startY.current;
17359
+ if (Math.abs(dx) > 10 && Math.abs(dx) > Math.abs(dy)) {
17360
+ isSwipingRef.current = true;
17361
+ offsetXRef.current = dx;
17362
+ }
17363
+ }, [preventDefault]);
17364
+ const onPointerUp = useCallback((e) => {
17365
+ if (!tracking.current) return;
17366
+ tracking.current = false;
17367
+ const dx = e.clientX - startX.current;
17368
+ const dy = e.clientY - startY.current;
17369
+ const elapsed = Date.now() - startTime.current;
17370
+ const velocity = Math.abs(dx) / Math.max(elapsed, 1);
17371
+ offsetXRef.current = 0;
17372
+ isSwipingRef.current = false;
17373
+ if (Math.abs(dx) < threshold && velocity < velocityThreshold) return;
17374
+ if (Math.abs(dx) > Math.abs(dy)) {
17375
+ if (dx < -threshold) callbacks.onSwipeLeft?.();
17376
+ else if (dx > threshold) callbacks.onSwipeRight?.();
17377
+ } else {
17378
+ if (dy < -threshold) callbacks.onSwipeUp?.();
17379
+ else if (dy > threshold) callbacks.onSwipeDown?.();
17380
+ }
17381
+ }, [threshold, velocityThreshold, callbacks]);
17382
+ const onPointerCancel = useCallback(() => {
17383
+ tracking.current = false;
17384
+ offsetXRef.current = 0;
17385
+ isSwipingRef.current = false;
17386
+ }, []);
17387
+ return {
17388
+ onPointerDown,
17389
+ onPointerMove,
17390
+ onPointerUp,
17391
+ onPointerCancel,
17392
+ offsetX: offsetXRef.current,
17393
+ isSwiping: isSwipingRef.current
17394
+ };
17395
+ }
17396
+ var init_useSwipeGesture = __esm({
17397
+ "hooks/useSwipeGesture.ts"() {
17398
+ "use client";
17399
+ }
17400
+ });
18151
17401
  function dayWindowForViewport(width) {
18152
17402
  if (width <= 640) return 1;
18153
17403
  if (width <= 1024) return 3;
@@ -18432,7 +17682,6 @@ var init_CalendarGrid = __esm({
18432
17682
  init_TimeSlotCell();
18433
17683
  init_useEventBus();
18434
17684
  init_useSwipeGesture();
18435
- init_useTranslate();
18436
17685
  SHORT_DATE = { month: "short", day: "numeric" };
18437
17686
  CalendarGrid.displayName = "CalendarGrid";
18438
17687
  }
@@ -19741,7 +18990,6 @@ var init_Pagination = __esm({
19741
18990
  init_Stack();
19742
18991
  init_cn();
19743
18992
  init_useEventBus();
19744
- init_useTranslate();
19745
18993
  Pagination = ({
19746
18994
  currentPage,
19747
18995
  totalPages,
@@ -19945,7 +19193,6 @@ var init_CardGrid = __esm({
19945
19193
  init_cn();
19946
19194
  init_getNestedValue();
19947
19195
  init_useEventBus();
19948
- init_useTranslate();
19949
19196
  init_atoms2();
19950
19197
  init_Badge();
19951
19198
  init_Box();
@@ -20174,7 +19421,6 @@ var init_Carousel = __esm({
20174
19421
  init_cn();
20175
19422
  init_useEventBus();
20176
19423
  init_useSwipeGesture();
20177
- init_useTranslate();
20178
19424
  init_Box();
20179
19425
  init_Stack();
20180
19426
  init_Button();
@@ -20411,7 +19657,6 @@ var init_CaseStudyOrganism = __esm({
20411
19657
  "use client";
20412
19658
  init_cn();
20413
19659
  init_useEventBus();
20414
- init_useTranslate();
20415
19660
  init_Stack();
20416
19661
  init_Typography();
20417
19662
  init_SimpleGrid();
@@ -20616,7 +19861,6 @@ var init_Chart = __esm({
20616
19861
  init_ErrorState();
20617
19862
  init_EmptyState();
20618
19863
  init_useEventBus();
20619
- init_useTranslate();
20620
19864
  CHART_COLORS = [
20621
19865
  "var(--color-primary)",
20622
19866
  "var(--color-success)",
@@ -21524,7 +20768,6 @@ var init_ClassifierBoard = __esm({
21524
20768
  "components/game/organisms/puzzles/classifier/ClassifierBoard.tsx"() {
21525
20769
  init_atoms2();
21526
20770
  init_useEventBus();
21527
- init_useTranslate();
21528
20771
  ClassifierBoard.displayName = "ClassifierBoard";
21529
20772
  }
21530
20773
  });
@@ -21556,7 +20799,6 @@ var init_CodeView = __esm({
21556
20799
  "components/game/organisms/puzzles/state-architect/CodeView.tsx"() {
21557
20800
  init_atoms2();
21558
20801
  init_cn();
21559
- init_useTranslate();
21560
20802
  CodeView.displayName = "CodeView";
21561
20803
  }
21562
20804
  });
@@ -21570,7 +20812,6 @@ var init_Tabs = __esm({
21570
20812
  init_Box();
21571
20813
  init_cn();
21572
20814
  init_useEventBus();
21573
- init_useTranslate();
21574
20815
  Tabs = ({
21575
20816
  items,
21576
20817
  tabs,
@@ -21747,7 +20988,6 @@ var init_CodeViewer = __esm({
21747
20988
  init_EmptyState();
21748
20989
  init_Tabs();
21749
20990
  init_useEventBus();
21750
- init_useTranslate();
21751
20991
  DIFF_STYLES = {
21752
20992
  add: {
21753
20993
  bg: "bg-success/10",
@@ -22119,7 +21359,6 @@ var init_ConfirmDialog = __esm({
22119
21359
  init_Box();
22120
21360
  init_Stack();
22121
21361
  init_cn();
22122
- init_useTranslate();
22123
21362
  variantConfig = {
22124
21363
  danger: {
22125
21364
  icon: Trash2,
@@ -22601,7 +21840,6 @@ var init_DashboardGrid = __esm({
22601
21840
  "components/core/organisms/layout/DashboardGrid.tsx"() {
22602
21841
  init_cn();
22603
21842
  init_Box();
22604
- init_useTranslate();
22605
21843
  gapStyles5 = {
22606
21844
  sm: "gap-2",
22607
21845
  md: "gap-4",
@@ -22656,6 +21894,20 @@ var init_DashboardGrid = __esm({
22656
21894
  DashboardGrid.displayName = "DashboardGrid";
22657
21895
  }
22658
21896
  });
21897
+
21898
+ // hooks/useAuthContext.ts
21899
+ function useAuthContext() {
21900
+ return {
21901
+ user: null,
21902
+ loading: false,
21903
+ signIn: void 0,
21904
+ signOut: void 0
21905
+ };
21906
+ }
21907
+ var init_useAuthContext = __esm({
21908
+ "hooks/useAuthContext.ts"() {
21909
+ }
21910
+ });
22659
21911
  var CurrentPagePathContext, CurrentPagePathProvider, useCurrentPagePath;
22660
21912
  var init_CurrentPagePathContext = __esm({
22661
21913
  "context/CurrentPagePathContext.tsx"() {
@@ -22681,7 +21933,6 @@ var init_DashboardLayout = __esm({
22681
21933
  init_Icon();
22682
21934
  init_useAuthContext();
22683
21935
  init_useEventBus();
22684
- init_useTranslate();
22685
21936
  init_CurrentPagePathContext();
22686
21937
  DashboardLayout = ({
22687
21938
  appName = "{{APP_TITLE}}",
@@ -24026,7 +23277,6 @@ var init_DataGrid = __esm({
24026
23277
  init_cn();
24027
23278
  init_getNestedValue();
24028
23279
  init_useEventBus();
24029
- init_useTranslate();
24030
23280
  init_Box();
24031
23281
  init_Stack();
24032
23282
  init_Typography();
@@ -24465,7 +23715,6 @@ var init_DataList = __esm({
24465
23715
  init_cn();
24466
23716
  init_getNestedValue();
24467
23717
  init_useEventBus();
24468
- init_useTranslate();
24469
23718
  init_Box();
24470
23719
  init_Stack();
24471
23720
  init_Typography();
@@ -24520,7 +23769,6 @@ var init_FileTree = __esm({
24520
23769
  init_Box();
24521
23770
  init_Typography();
24522
23771
  init_Icon();
24523
- init_useTranslate();
24524
23772
  TreeNodeItem = ({
24525
23773
  node,
24526
23774
  depth,
@@ -24650,6 +23898,70 @@ var init_FormField = __esm({
24650
23898
  FormField.displayName = "FormField";
24651
23899
  }
24652
23900
  });
23901
+ function getOrCreateStore(query) {
23902
+ if (!queryStores.has(query)) {
23903
+ queryStores.set(query, {
23904
+ search: "",
23905
+ filters: {},
23906
+ sortField: void 0,
23907
+ sortDirection: void 0,
23908
+ listeners: /* @__PURE__ */ new Set()
23909
+ });
23910
+ }
23911
+ return queryStores.get(query);
23912
+ }
23913
+ function useQuerySingleton(query) {
23914
+ const [, forceUpdate] = useState({});
23915
+ if (!query) {
23916
+ return null;
23917
+ }
23918
+ const store = useMemo(() => getOrCreateStore(query), [query]);
23919
+ useMemo(() => {
23920
+ const listener = () => forceUpdate({});
23921
+ store.listeners.add(listener);
23922
+ return () => {
23923
+ store.listeners.delete(listener);
23924
+ };
23925
+ }, [store]);
23926
+ const notifyListeners3 = useCallback(() => {
23927
+ store.listeners.forEach((listener) => listener());
23928
+ }, [store]);
23929
+ const setSearch = useCallback((value) => {
23930
+ store.search = value;
23931
+ notifyListeners3();
23932
+ }, [store, notifyListeners3]);
23933
+ const setFilter = useCallback((key, value) => {
23934
+ store.filters = { ...store.filters, [key]: value };
23935
+ notifyListeners3();
23936
+ }, [store, notifyListeners3]);
23937
+ const clearFilters = useCallback(() => {
23938
+ store.filters = {};
23939
+ store.search = "";
23940
+ notifyListeners3();
23941
+ }, [store, notifyListeners3]);
23942
+ const setSort = useCallback((field, direction) => {
23943
+ store.sortField = field;
23944
+ store.sortDirection = direction;
23945
+ notifyListeners3();
23946
+ }, [store, notifyListeners3]);
23947
+ return {
23948
+ search: store.search,
23949
+ setSearch,
23950
+ filters: store.filters,
23951
+ setFilter,
23952
+ clearFilters,
23953
+ sortField: store.sortField,
23954
+ sortDirection: store.sortDirection,
23955
+ setSort
23956
+ };
23957
+ }
23958
+ var queryStores;
23959
+ var init_useQuerySingleton = __esm({
23960
+ "hooks/useQuerySingleton.ts"() {
23961
+ "use client";
23962
+ queryStores = /* @__PURE__ */ new Map();
23963
+ }
23964
+ });
24653
23965
  var resolveFilterType, lookStyles6, FilterGroup;
24654
23966
  var init_FilterGroup = __esm({
24655
23967
  "components/core/molecules/FilterGroup.tsx"() {
@@ -24663,7 +23975,6 @@ var init_FilterGroup = __esm({
24663
23975
  init_Icon();
24664
23976
  init_useEventBus();
24665
23977
  init_useQuerySingleton();
24666
- init_useTranslate();
24667
23978
  resolveFilterType = (filter) => filter.filterType ?? filter.type;
24668
23979
  lookStyles6 = {
24669
23980
  toolbar: "",
@@ -25305,7 +24616,6 @@ var init_RelationSelect = __esm({
25305
24616
  init_Spinner();
25306
24617
  init_Typography();
25307
24618
  init_debug();
25308
- init_useTranslate();
25309
24619
  isRelationsDebugEnabled = () => isDebugEnabled();
25310
24620
  RelationSelect = ({
25311
24621
  value,
@@ -25530,7 +24840,6 @@ var init_SearchInput = __esm({
25530
24840
  init_cn();
25531
24841
  init_useEventBus();
25532
24842
  init_useQuerySingleton();
25533
- init_useTranslate();
25534
24843
  SearchInput = ({
25535
24844
  value,
25536
24845
  onSearch,
@@ -25633,7 +24942,6 @@ var init_SidePanel = __esm({
25633
24942
  init_Typography();
25634
24943
  init_cn();
25635
24944
  init_useEventBus();
25636
- init_useTranslate();
25637
24945
  SidePanel = ({
25638
24946
  title,
25639
24947
  children,
@@ -25812,7 +25120,6 @@ var init_WizardNavigation = __esm({
25812
25120
  init_Icon();
25813
25121
  init_cn();
25814
25122
  init_useEventBus();
25815
- init_useTranslate();
25816
25123
  WizardNavigation = ({
25817
25124
  currentStep,
25818
25125
  totalSteps,
@@ -25900,7 +25207,6 @@ var init_RepeatableFormSection = __esm({
25900
25207
  init_Card();
25901
25208
  init_Icon();
25902
25209
  init_useEventBus();
25903
- init_useTranslate();
25904
25210
  RepeatableFormSection = ({
25905
25211
  sectionType,
25906
25212
  title,
@@ -26031,7 +25337,6 @@ var actionTypeLabelKeys, actionTypeIcons, ViolationAlert;
26031
25337
  var init_ViolationAlert = __esm({
26032
25338
  "components/core/molecules/ViolationAlert.tsx"() {
26033
25339
  init_cn();
26034
- init_useTranslate();
26035
25340
  init_Box();
26036
25341
  init_Stack();
26037
25342
  init_Typography();
@@ -26537,7 +25842,6 @@ var init_LineChart = __esm({
26537
25842
  "use client";
26538
25843
  init_cn();
26539
25844
  init_atoms2();
26540
- init_useTranslate();
26541
25845
  LineChart2 = ({
26542
25846
  data,
26543
25847
  width = 400,
@@ -28493,7 +27797,6 @@ var init_GraphView = __esm({
28493
27797
  "use client";
28494
27798
  init_cn();
28495
27799
  init_atoms2();
28496
- init_useTranslate();
28497
27800
  GROUP_COLORS = [
28498
27801
  "#3b82f6",
28499
27802
  // blue-500
@@ -28819,7 +28122,6 @@ var init_NumberStepper = __esm({
28819
28122
  init_cn();
28820
28123
  init_Icon();
28821
28124
  init_useEventBus();
28822
- init_useTranslate();
28823
28125
  sizeStyles10 = {
28824
28126
  sm: {
28825
28127
  button: "w-7 h-7",
@@ -29160,7 +28462,6 @@ var init_UploadDropZone = __esm({
29160
28462
  init_Icon();
29161
28463
  init_Typography();
29162
28464
  init_useEventBus();
29163
- init_useTranslate();
29164
28465
  UploadDropZone = ({
29165
28466
  accept,
29166
28467
  maxSize,
@@ -29327,7 +28628,6 @@ var init_Lightbox = __esm({
29327
28628
  init_Icon();
29328
28629
  init_cn();
29329
28630
  init_useEventBus();
29330
- init_useTranslate();
29331
28631
  Lightbox = ({
29332
28632
  images = [],
29333
28633
  currentIndex = 0,
@@ -29812,7 +29112,6 @@ var init_TableView = __esm({
29812
29112
  init_cn();
29813
29113
  init_getNestedValue();
29814
29114
  init_useEventBus();
29815
- init_useTranslate();
29816
29115
  init_Box();
29817
29116
  init_Stack();
29818
29117
  init_Typography();
@@ -30016,7 +29315,6 @@ var init_Meter = __esm({
30016
29315
  init_LoadingState();
30017
29316
  init_ErrorState();
30018
29317
  init_useEventBus();
30019
- init_useTranslate();
30020
29318
  DEFAULT_THRESHOLDS = [
30021
29319
  { value: 30, color: "var(--color-error)" },
30022
29320
  { value: 70, color: "var(--color-warning)" },
@@ -30397,6 +29695,79 @@ var init_SwipeableRow = __esm({
30397
29695
  SwipeableRow.displayName = "SwipeableRow";
30398
29696
  }
30399
29697
  });
29698
+ function useDragReorder(initialItems, onReorder) {
29699
+ const [items, setItems] = useState(initialItems);
29700
+ const [dragIndex, setDragIndex] = useState(-1);
29701
+ const [dragOverIndex, setDragOverIndex] = useState(-1);
29702
+ const itemsRef = useRef(initialItems);
29703
+ if (initialItems !== itemsRef.current) {
29704
+ itemsRef.current = initialItems;
29705
+ setItems(initialItems);
29706
+ }
29707
+ const isDragging = dragIndex >= 0;
29708
+ const handleDragStart = useCallback((index) => (e) => {
29709
+ e.preventDefault();
29710
+ setDragIndex(index);
29711
+ setDragOverIndex(index);
29712
+ e.target.setPointerCapture?.(e.pointerId);
29713
+ }, []);
29714
+ const handleDragMove = useCallback((index) => (e) => {
29715
+ if (dragIndex < 0) return;
29716
+ const target = document.elementFromPoint(e.clientX, e.clientY);
29717
+ if (!target) return;
29718
+ let el = target;
29719
+ while (el && !el.dataset.dragIndex) {
29720
+ el = el.parentElement;
29721
+ }
29722
+ if (el?.dataset.dragIndex) {
29723
+ const overIndex = parseInt(el.dataset.dragIndex, 10);
29724
+ if (!isNaN(overIndex) && overIndex !== dragOverIndex) {
29725
+ setDragOverIndex(overIndex);
29726
+ }
29727
+ }
29728
+ }, [dragIndex, dragOverIndex]);
29729
+ const handleDragEnd = useCallback(() => {
29730
+ if (dragIndex >= 0 && dragOverIndex >= 0 && dragIndex !== dragOverIndex) {
29731
+ const newItems = [...items];
29732
+ const [movedItem] = newItems.splice(dragIndex, 1);
29733
+ newItems.splice(dragOverIndex, 0, movedItem);
29734
+ setItems(newItems);
29735
+ onReorder(dragIndex, dragOverIndex, items[dragIndex]);
29736
+ }
29737
+ setDragIndex(-1);
29738
+ setDragOverIndex(-1);
29739
+ }, [dragIndex, dragOverIndex, items, onReorder]);
29740
+ const getDragHandleProps = useCallback((index) => ({
29741
+ onPointerDown: handleDragStart(index),
29742
+ style: { cursor: "grab", touchAction: "none" },
29743
+ "aria-grabbed": dragIndex === index,
29744
+ role: "button"
29745
+ }), [handleDragStart, dragIndex]);
29746
+ const getItemProps = useCallback((index) => ({
29747
+ onPointerMove: handleDragMove(index),
29748
+ onPointerUp: handleDragEnd,
29749
+ "aria-dropeffect": "move",
29750
+ "data-drag-index": String(index),
29751
+ style: {
29752
+ opacity: dragIndex === index ? 0.5 : 1,
29753
+ transition: isDragging ? "transform 150ms ease" : void 0,
29754
+ transform: isDragging && dragOverIndex >= 0 ? index === dragIndex ? "scale(1.02)" : index > dragIndex && index <= dragOverIndex ? "translateY(-100%)" : index < dragIndex && index >= dragOverIndex ? "translateY(100%)" : void 0 : void 0
29755
+ }
29756
+ }), [handleDragMove, handleDragEnd, dragIndex, dragOverIndex, isDragging]);
29757
+ return {
29758
+ items,
29759
+ dragIndex,
29760
+ dragOverIndex,
29761
+ isDragging,
29762
+ getDragHandleProps,
29763
+ getItemProps
29764
+ };
29765
+ }
29766
+ var init_useDragReorder = __esm({
29767
+ "hooks/useDragReorder.ts"() {
29768
+ "use client";
29769
+ }
29770
+ });
30400
29771
  function useSafeEventBus10() {
30401
29772
  try {
30402
29773
  return useEventBus();
@@ -30507,6 +29878,71 @@ var init_SortableList = __esm({
30507
29878
  SortableList.displayName = "SortableList";
30508
29879
  }
30509
29880
  });
29881
+ function usePullToRefresh(onRefresh, options = {}) {
29882
+ const { threshold = 60, maxPull = 120 } = options;
29883
+ const [pullDistance, setPullDistance] = useState(0);
29884
+ const [isPulling, setIsPulling] = useState(false);
29885
+ const [isRefreshing, setIsRefreshing] = useState(false);
29886
+ const startY = useRef(0);
29887
+ const scrollTopRef = useRef(0);
29888
+ const onTouchStart = useCallback((e) => {
29889
+ const container = e.currentTarget;
29890
+ scrollTopRef.current = container.scrollTop;
29891
+ if (scrollTopRef.current <= 0) {
29892
+ startY.current = e.touches[0].clientY;
29893
+ setIsPulling(true);
29894
+ }
29895
+ }, []);
29896
+ const onTouchMove = useCallback((e) => {
29897
+ if (!isPulling || isRefreshing) return;
29898
+ const container = e.currentTarget;
29899
+ if (container.scrollTop > 0) {
29900
+ setPullDistance(0);
29901
+ return;
29902
+ }
29903
+ const dy = e.touches[0].clientY - startY.current;
29904
+ if (dy > 0) {
29905
+ const distance = Math.min(dy * 0.5, maxPull);
29906
+ setPullDistance(distance);
29907
+ }
29908
+ }, [isPulling, isRefreshing, maxPull]);
29909
+ const onTouchEnd = useCallback(() => {
29910
+ if (!isPulling) return;
29911
+ setIsPulling(false);
29912
+ if (pullDistance >= threshold && !isRefreshing) {
29913
+ setIsRefreshing(true);
29914
+ setPullDistance(threshold);
29915
+ onRefresh();
29916
+ } else {
29917
+ setPullDistance(0);
29918
+ }
29919
+ }, [isPulling, pullDistance, threshold, isRefreshing, onRefresh]);
29920
+ const endRefresh = useCallback(() => {
29921
+ setIsRefreshing(false);
29922
+ setPullDistance(0);
29923
+ }, []);
29924
+ const containerProps = {
29925
+ onTouchStart,
29926
+ onTouchMove,
29927
+ onTouchEnd,
29928
+ style: {
29929
+ transform: pullDistance > 0 ? `translateY(${pullDistance}px)` : void 0,
29930
+ transition: isPulling ? "none" : "transform 300ms ease-out"
29931
+ }
29932
+ };
29933
+ return {
29934
+ pullDistance,
29935
+ isPulling,
29936
+ isRefreshing,
29937
+ containerProps,
29938
+ endRefresh
29939
+ };
29940
+ }
29941
+ var init_usePullToRefresh = __esm({
29942
+ "hooks/usePullToRefresh.ts"() {
29943
+ "use client";
29944
+ }
29945
+ });
30510
29946
  function useSafeEventBus11() {
30511
29947
  try {
30512
29948
  return useEventBus();
@@ -31825,7 +31261,6 @@ var init_VoteStack = __esm({
31825
31261
  init_cn();
31826
31262
  init_Icon();
31827
31263
  init_useEventBus();
31828
- init_useTranslate();
31829
31264
  sizeStyles12 = {
31830
31265
  sm: {
31831
31266
  button: "w-7 h-7",
@@ -32280,7 +31715,6 @@ var init_QrScanner = __esm({
32280
31715
  init_atoms2();
32281
31716
  init_Icon();
32282
31717
  init_useEventBus();
32283
- init_useTranslate();
32284
31718
  QrScanner = ({
32285
31719
  onScan,
32286
31720
  scanEvent,
@@ -32507,7 +31941,6 @@ var init_OptionConstraintGroup = __esm({
32507
31941
  "components/core/molecules/OptionConstraintGroup.tsx"() {
32508
31942
  init_cn();
32509
31943
  init_useEventBus();
32510
- init_useTranslate();
32511
31944
  init_Typography();
32512
31945
  init_Box();
32513
31946
  init_Label();
@@ -33463,7 +32896,6 @@ var init_RichBlockEditor = __esm({
33463
32896
  init_Input();
33464
32897
  init_Icon();
33465
32898
  init_useEventBus();
33466
- init_useTranslate();
33467
32899
  TOOLBAR_ENTRIES = [
33468
32900
  { type: "paragraph", labelKey: "richBlockEditor.toolbar.text", icon: Type },
33469
32901
  { type: "heading-1", labelKey: "richBlockEditor.toolbar.h1", icon: Heading1 },
@@ -33654,7 +33086,6 @@ var init_ReplyTree = __esm({
33654
33086
  "use client";
33655
33087
  init_cn();
33656
33088
  init_useEventBus();
33657
- init_useTranslate();
33658
33089
  init_atoms2();
33659
33090
  init_VoteStack();
33660
33091
  ReplyTreeNode = ({
@@ -33962,7 +33393,6 @@ var init_VersionDiff = __esm({
33962
33393
  "use client";
33963
33394
  init_cn();
33964
33395
  init_useEventBus();
33965
- init_useTranslate();
33966
33396
  init_atoms2();
33967
33397
  init_Stack();
33968
33398
  INLINE_STYLES = {
@@ -34278,7 +33708,6 @@ var init_DocBreadcrumb = __esm({
34278
33708
  init_Stack();
34279
33709
  init_Typography();
34280
33710
  init_Icon();
34281
- init_useTranslate();
34282
33711
  DocBreadcrumb = ({
34283
33712
  items,
34284
33713
  className
@@ -34707,7 +34136,6 @@ var init_DocSearch = __esm({
34707
34136
  init_Typography();
34708
34137
  init_Icon();
34709
34138
  init_Input();
34710
- init_useTranslate();
34711
34139
  }
34712
34140
  });
34713
34141
  var DocSidebarCategory, DocSidebar;
@@ -34720,7 +34148,6 @@ var init_DocSidebar = __esm({
34720
34148
  init_Stack();
34721
34149
  init_Typography();
34722
34150
  init_Icon();
34723
- init_useTranslate();
34724
34151
  DocSidebarCategory = ({ item, depth }) => {
34725
34152
  const [expanded, setExpanded] = useState(
34726
34153
  () => item.items?.some(function hasActive(child) {
@@ -34827,7 +34254,6 @@ var init_DocTOC = __esm({
34827
34254
  init_Box();
34828
34255
  init_Stack();
34829
34256
  init_Typography();
34830
- init_useTranslate();
34831
34257
  DocTOC = ({
34832
34258
  items,
34833
34259
  activeId,
@@ -35562,7 +34988,6 @@ var init_Header = __esm({
35562
34988
  init_Stack();
35563
34989
  init_Typography();
35564
34990
  init_cn();
35565
- init_useTranslate();
35566
34991
  lookStyles8 = {
35567
34992
  "compact-bar": "",
35568
34993
  hero: "py-section min-h-[200px] [&_h1]:text-display-1",
@@ -35882,7 +35307,6 @@ var init_Sidebar = __esm({
35882
35307
  init_Typography();
35883
35308
  init_cn();
35884
35309
  init_useEventBus();
35885
- init_useTranslate();
35886
35310
  SidebarNavItem = ({ item, collapsed }) => {
35887
35311
  const Icon3 = item.icon;
35888
35312
  const isActive = item.active ?? item.isActive;
@@ -36136,7 +35560,6 @@ var init_WizardContainer = __esm({
36136
35560
  init_Stack();
36137
35561
  init_Icon();
36138
35562
  init_cn();
36139
- init_useTranslate();
36140
35563
  WizardContainer = ({
36141
35564
  steps,
36142
35565
  currentStep: controlledStep,
@@ -36710,7 +36133,6 @@ var init_SignaturePad = __esm({
36710
36133
  init_LoadingState();
36711
36134
  init_ErrorState();
36712
36135
  init_useEventBus();
36713
- init_useTranslate();
36714
36136
  SignaturePad = ({
36715
36137
  label,
36716
36138
  helperText,
@@ -36904,7 +36326,6 @@ var init_DocumentViewer = __esm({
36904
36326
  init_EmptyState();
36905
36327
  init_Tabs();
36906
36328
  init_useEventBus();
36907
- init_useTranslate();
36908
36329
  DocumentViewer = ({
36909
36330
  title,
36910
36331
  src,
@@ -37109,7 +36530,6 @@ var init_GraphCanvas = __esm({
37109
36530
  init_ErrorState();
37110
36531
  init_EmptyState();
37111
36532
  init_useEventBus();
37112
- init_useTranslate();
37113
36533
  GROUP_COLORS2 = [
37114
36534
  "var(--color-primary)",
37115
36535
  "var(--color-success)",
@@ -37847,7 +37267,6 @@ var init_DataTable = __esm({
37847
37267
  init_molecules2();
37848
37268
  init_Icon();
37849
37269
  init_useEventBus();
37850
- init_useTranslate();
37851
37270
  init_types3();
37852
37271
  lookStyles9 = {
37853
37272
  dense: "",
@@ -37994,7 +37413,6 @@ var init_DebuggerBoard = __esm({
37994
37413
  "components/game/organisms/puzzles/debugger/DebuggerBoard.tsx"() {
37995
37414
  init_atoms2();
37996
37415
  init_useEventBus();
37997
- init_useTranslate();
37998
37416
  DebuggerBoard.displayName = "DebuggerBoard";
37999
37417
  }
38000
37418
  });
@@ -38165,7 +37583,6 @@ var init_DetailPanel = __esm({
38165
37583
  init_cn();
38166
37584
  init_getNestedValue();
38167
37585
  init_useEventBus();
38168
- init_useTranslate();
38169
37586
  ReactMarkdown2 = lazy(() => import('react-markdown'));
38170
37587
  DetailPanel = ({
38171
37588
  title: propTitle,
@@ -38744,7 +38161,6 @@ var init_TraitStateViewer = __esm({
38744
38161
  "components/game/organisms/TraitStateViewer.tsx"() {
38745
38162
  "use client";
38746
38163
  init_cn();
38747
- init_useTranslate();
38748
38164
  init_Box();
38749
38165
  init_Typography();
38750
38166
  init_Stack();
@@ -38803,7 +38219,6 @@ var init_RuleEditor = __esm({
38803
38219
  "components/game/organisms/puzzles/event-handler/RuleEditor.tsx"() {
38804
38220
  init_atoms2();
38805
38221
  init_cn();
38806
- init_useTranslate();
38807
38222
  RuleEditor.displayName = "RuleEditor";
38808
38223
  }
38809
38224
  });
@@ -38878,7 +38293,6 @@ var init_ObjectRulePanel = __esm({
38878
38293
  "components/game/organisms/puzzles/event-handler/ObjectRulePanel.tsx"() {
38879
38294
  init_atoms2();
38880
38295
  init_cn();
38881
- init_useTranslate();
38882
38296
  init_TraitStateViewer();
38883
38297
  init_RuleEditor();
38884
38298
  nextRuleId = 1;
@@ -38923,7 +38337,6 @@ var init_EventLog = __esm({
38923
38337
  "components/game/organisms/puzzles/event-handler/EventLog.tsx"() {
38924
38338
  init_atoms2();
38925
38339
  init_cn();
38926
- init_useTranslate();
38927
38340
  STATUS_STYLES = {
38928
38341
  pending: "text-muted-foreground",
38929
38342
  active: "text-primary animate-pulse",
@@ -39137,7 +38550,6 @@ var init_EventHandlerBoard = __esm({
39137
38550
  init_atoms2();
39138
38551
  init_cn();
39139
38552
  init_useEventBus();
39140
- init_useTranslate();
39141
38553
  init_TraitStateViewer();
39142
38554
  init_ObjectRulePanel();
39143
38555
  init_EventLog();
@@ -39207,7 +38619,6 @@ var init_FeatureGridOrganism = __esm({
39207
38619
  "use client";
39208
38620
  init_cn();
39209
38621
  init_useEventBus();
39210
- init_useTranslate();
39211
38622
  init_Stack();
39212
38623
  init_Typography();
39213
38624
  init_FeatureGrid();
@@ -39390,7 +38801,6 @@ var init_Form = __esm({
39390
38801
  init_RelationSelect();
39391
38802
  init_Alert();
39392
38803
  init_useEventBus();
39393
- init_useTranslate();
39394
38804
  init_debug();
39395
38805
  layoutStyles = {
39396
38806
  vertical: "flex flex-col",
@@ -40550,7 +39960,6 @@ var init_HeroOrganism = __esm({
40550
39960
  "use client";
40551
39961
  init_cn();
40552
39962
  init_useEventBus();
40553
- init_useTranslate();
40554
39963
  init_HeroSection();
40555
39964
  init_LoadingState();
40556
39965
  init_ErrorState();
@@ -40656,7 +40065,6 @@ var LandingPageTemplate;
40656
40065
  var init_LandingPageTemplate = __esm({
40657
40066
  "components/marketing/templates/LandingPageTemplate.tsx"() {
40658
40067
  init_cn();
40659
- init_useTranslate();
40660
40068
  init_Stack();
40661
40069
  init_Box();
40662
40070
  init_Container();
@@ -40856,7 +40264,6 @@ var init_List = __esm({
40856
40264
  init_cn();
40857
40265
  init_getNestedValue();
40858
40266
  init_useEventBus();
40859
- init_useTranslate();
40860
40267
  init_types3();
40861
40268
  STATUS_STYLES2 = {
40862
40269
  complete: {
@@ -41351,7 +40758,6 @@ var init_MasterDetail = __esm({
41351
40758
  "components/core/organisms/MasterDetail.tsx"() {
41352
40759
  "use client";
41353
40760
  init_DataTable();
41354
- init_useTranslate();
41355
40761
  MasterDetail.displayName = "MasterDetail";
41356
40762
  }
41357
40763
  });
@@ -41360,7 +40766,6 @@ var init_MasterDetailLayout = __esm({
41360
40766
  "components/core/organisms/layout/MasterDetailLayout.tsx"() {
41361
40767
  init_cn();
41362
40768
  init_Typography();
41363
- init_useTranslate();
41364
40769
  DefaultEmptyDetail = () => {
41365
40770
  const { t } = useTranslate();
41366
40771
  return /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center h-full border-2 border-dashed border-border", children: /* @__PURE__ */ jsx(
@@ -41421,7 +40826,6 @@ var init_MediaGallery = __esm({
41421
40826
  init_ErrorState();
41422
40827
  init_EmptyState();
41423
40828
  init_useEventBus();
41424
- init_useTranslate();
41425
40829
  COLUMN_CLASSES = {
41426
40830
  2: "grid-cols-2",
41427
40831
  3: "grid-cols-2 sm:grid-cols-3",
@@ -41822,7 +41226,6 @@ var init_NegotiatorBoard = __esm({
41822
41226
  "components/game/organisms/puzzles/negotiator/NegotiatorBoard.tsx"() {
41823
41227
  init_atoms2();
41824
41228
  init_useEventBus();
41825
- init_useTranslate();
41826
41229
  NegotiatorBoard.displayName = "NegotiatorBoard";
41827
41230
  }
41828
41231
  });
@@ -41832,7 +41235,6 @@ var init_PricingOrganism = __esm({
41832
41235
  "use client";
41833
41236
  init_cn();
41834
41237
  init_useEventBus();
41835
- init_useTranslate();
41836
41238
  init_Stack();
41837
41239
  init_Typography();
41838
41240
  init_PricingGrid();
@@ -41882,7 +41284,6 @@ var PricingPageTemplate;
41882
41284
  var init_PricingPageTemplate = __esm({
41883
41285
  "components/marketing/templates/PricingPageTemplate.tsx"() {
41884
41286
  init_cn();
41885
- init_useTranslate();
41886
41287
  init_Stack();
41887
41288
  init_Box();
41888
41289
  init_Container();
@@ -42465,7 +41866,6 @@ var init_TraitsTab = __esm({
42465
41866
  init_Typography();
42466
41867
  init_Stack();
42467
41868
  init_EmptyState();
42468
- init_useTranslate();
42469
41869
  TraitsTab.displayName = "TraitsTab";
42470
41870
  }
42471
41871
  });
@@ -42543,7 +41943,6 @@ var init_TicksTab = __esm({
42543
41943
  init_Stack();
42544
41944
  init_Card();
42545
41945
  init_EmptyState();
42546
- init_useTranslate();
42547
41946
  TicksTab.displayName = "TicksTab";
42548
41947
  }
42549
41948
  });
@@ -42617,7 +42016,6 @@ var init_EntitiesTab = __esm({
42617
42016
  init_Typography();
42618
42017
  init_Stack();
42619
42018
  init_EmptyState();
42620
- init_useTranslate();
42621
42019
  EntitiesTab.displayName = "EntitiesTab";
42622
42020
  }
42623
42021
  });
@@ -42734,7 +42132,6 @@ var init_EventFlowTab = __esm({
42734
42132
  init_Button();
42735
42133
  init_Checkbox();
42736
42134
  init_EmptyState();
42737
- init_useTranslate();
42738
42135
  TYPE_BADGES = {
42739
42136
  trait: { variant: "primary", icon: "\u{1F504}" },
42740
42137
  tick: { variant: "warning", icon: "\u23F1\uFE0F" },
@@ -42829,7 +42226,6 @@ var init_GuardsPanel = __esm({
42829
42226
  init_ButtonGroup();
42830
42227
  init_Button();
42831
42228
  init_EmptyState();
42832
- init_useTranslate();
42833
42229
  GuardsPanel.displayName = "GuardsPanel";
42834
42230
  }
42835
42231
  });
@@ -42905,7 +42301,6 @@ var init_VerificationTab = __esm({
42905
42301
  init_Typography();
42906
42302
  init_Stack();
42907
42303
  init_EmptyState();
42908
- init_useTranslate();
42909
42304
  STATUS_CONFIG = {
42910
42305
  pass: { variant: "success", icon: "\u2713", label: "PASS" },
42911
42306
  fail: { variant: "danger", icon: "\u2717", label: "FAIL" },
@@ -43041,7 +42436,6 @@ var init_TransitionTimeline = __esm({
43041
42436
  init_Typography();
43042
42437
  init_EmptyState();
43043
42438
  init_Checkbox();
43044
- init_useTranslate();
43045
42439
  EFFECT_STATUS_VARIANT = {
43046
42440
  executed: "success",
43047
42441
  failed: "danger",
@@ -43131,7 +42525,6 @@ var init_ServerBridgeTab = __esm({
43131
42525
  init_Stack();
43132
42526
  init_Card();
43133
42527
  init_EmptyState();
43134
- init_useTranslate();
43135
42528
  ServerBridgeTab.displayName = "ServerBridgeTab";
43136
42529
  }
43137
42530
  });
@@ -43296,7 +42689,6 @@ var init_EventDispatcherTab = __esm({
43296
42689
  init_Stack();
43297
42690
  init_EmptyState();
43298
42691
  init_useEventBus();
43299
- init_useTranslate();
43300
42692
  EventDispatcherTab.displayName = "EventDispatcherTab";
43301
42693
  }
43302
42694
  });
@@ -43671,7 +43063,6 @@ var init_RuntimeDebugger2 = __esm({
43671
43063
  init_TransitionTimeline();
43672
43064
  init_ServerBridgeTab();
43673
43065
  init_EventDispatcherTab();
43674
- init_useTranslate();
43675
43066
  init_RuntimeDebugger();
43676
43067
  RuntimeDebugger.displayName = "RuntimeDebugger";
43677
43068
  }
@@ -44158,7 +43549,6 @@ var init_SequencerBoard = __esm({
44158
43549
  init_atoms2();
44159
43550
  init_cn();
44160
43551
  init_useEventBus();
44161
- init_useTranslate();
44162
43552
  init_TraitStateViewer();
44163
43553
  init_SequenceBar();
44164
43554
  init_ActionPalette();
@@ -44177,7 +43567,6 @@ var init_ShowcaseOrganism = __esm({
44177
43567
  "use client";
44178
43568
  init_cn();
44179
43569
  init_useEventBus();
44180
- init_useTranslate();
44181
43570
  init_Stack();
44182
43571
  init_Typography();
44183
43572
  init_SimpleGrid();
@@ -44736,7 +44125,6 @@ var init_SimulatorBoard = __esm({
44736
44125
  "components/game/organisms/puzzles/simulator/SimulatorBoard.tsx"() {
44737
44126
  init_atoms2();
44738
44127
  init_useEventBus();
44739
- init_useTranslate();
44740
44128
  SimulatorBoard.displayName = "SimulatorBoard";
44741
44129
  }
44742
44130
  });
@@ -44841,7 +44229,6 @@ var init_StatCard = __esm({
44841
44229
  init_Button();
44842
44230
  init_Sparkline();
44843
44231
  init_useEventBus();
44844
- init_useTranslate();
44845
44232
  init_Icon();
44846
44233
  StatCard = ({
44847
44234
  label: propLabel,
@@ -45197,7 +44584,6 @@ var init_VariablePanel = __esm({
45197
44584
  "components/game/organisms/puzzles/state-architect/VariablePanel.tsx"() {
45198
44585
  init_atoms2();
45199
44586
  init_cn();
45200
- init_useTranslate();
45201
44587
  VariablePanel.displayName = "VariablePanel";
45202
44588
  }
45203
44589
  });
@@ -45514,7 +44900,6 @@ var init_StateArchitectBoard = __esm({
45514
44900
  init_atoms2();
45515
44901
  init_cn();
45516
44902
  init_useEventBus();
45517
- init_useTranslate();
45518
44903
  init_TraitStateViewer();
45519
44904
  init_StateNode();
45520
44905
  init_TransitionArrow();
@@ -45534,7 +44919,6 @@ var init_StatsOrganism = __esm({
45534
44919
  "components/marketing/organisms/StatsOrganism.tsx"() {
45535
44920
  "use client";
45536
44921
  init_cn();
45537
- init_useTranslate();
45538
44922
  init_StatsGrid();
45539
44923
  init_LoadingState();
45540
44924
  init_ErrorState();
@@ -45577,7 +44961,6 @@ var init_StepFlowOrganism = __esm({
45577
44961
  "components/core/organisms/StepFlowOrganism.tsx"() {
45578
44962
  "use client";
45579
44963
  init_cn();
45580
- init_useTranslate();
45581
44964
  init_Stack();
45582
44965
  init_Typography();
45583
44966
  init_StepFlow();
@@ -45747,7 +45130,6 @@ var init_TeamOrganism = __esm({
45747
45130
  "components/marketing/organisms/TeamOrganism.tsx"() {
45748
45131
  "use client";
45749
45132
  init_cn();
45750
- init_useTranslate();
45751
45133
  init_Stack();
45752
45134
  init_Typography();
45753
45135
  init_SimpleGrid();
@@ -45805,7 +45187,6 @@ var init_Timeline = __esm({
45805
45187
  init_LoadingState();
45806
45188
  init_ErrorState();
45807
45189
  init_EmptyState();
45808
- init_useTranslate();
45809
45190
  lookStyles10 = {
45810
45191
  "vertical-compact": "gap-1 [&>*]:py-1",
45811
45192
  "vertical-spacious": "",
@@ -47877,7 +47258,6 @@ var init_UISlotRenderer = __esm({
47877
47258
  init_Box();
47878
47259
  init_Typography();
47879
47260
  init_useEventBus();
47880
- init_useTranslate();
47881
47261
  init_slot_types();
47882
47262
  init_cn();
47883
47263
  init_ErrorBoundary();
@@ -47933,10 +47313,7 @@ var init_UISlotRenderer = __esm({
47933
47313
  UISlotRenderer.displayName = "UISlotRenderer";
47934
47314
  }
47935
47315
  });
47936
-
47937
- // hooks/index.ts
47938
- init_useEventBus();
47939
- var log2 = createLogger("almadar:ui:effects:client-handlers");
47316
+ var log = createLogger("almadar:ui:effects:client-handlers");
47940
47317
  function createClientEffectHandlers(options) {
47941
47318
  const { eventBus, slotSetter, navigate, notify, callService } = options;
47942
47319
  return {
@@ -47945,10 +47322,10 @@ function createClientEffectHandlers(options) {
47945
47322
  eventBus.emit(prefixedEvent, payload);
47946
47323
  },
47947
47324
  persist: async () => {
47948
- log2.warn("persist is server-side only, ignored on client");
47325
+ log.warn("persist is server-side only, ignored on client");
47949
47326
  },
47950
47327
  set: () => {
47951
- log2.warn("set is server-side only, ignored on client");
47328
+ log.warn("set is server-side only, ignored on client");
47952
47329
  },
47953
47330
  callService: async (service, action, params) => {
47954
47331
  if (callService) return callService(service, action, params);
@@ -47977,10 +47354,10 @@ function createClientEffectHandlers(options) {
47977
47354
  slotSetter.addPattern(slot, pattern, props);
47978
47355
  },
47979
47356
  navigate: navigate ?? ((path) => {
47980
- log2.warn("No navigate handler, ignoring", { path });
47357
+ log.warn("No navigate handler, ignoring", { path });
47981
47358
  }),
47982
47359
  notify: notify ?? ((msg, type) => {
47983
- log2.debug("notify", { type, message: msg });
47360
+ log.debug("notify", { type, message: msg });
47984
47361
  })
47985
47362
  };
47986
47363
  }
@@ -48130,7 +47507,7 @@ function normalizeEventKey(eventKey) {
48130
47507
  return eventKey.startsWith("UI:") ? eventKey.slice(3) : eventKey;
48131
47508
  }
48132
47509
  function useTraitStateMachine(traitBindings, uiSlots, options) {
48133
- const eventBus = useEventBus();
47510
+ const eventBus = useEventBus$1();
48134
47511
  const { entities } = useEntitySchema();
48135
47512
  const traitConfigsByName = options?.traitConfigsByName;
48136
47513
  const orbitalsByTrait = options?.orbitalsByTrait;