@almadar/ui 5.21.9 → 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,927 +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
- };
770
- }
771
- });
772
- function useTranslate() {
773
- return useContext(I18nContext);
774
- }
775
- var _meta, coreMessages, coreLocale, I18nContext;
776
- var init_useTranslate = __esm({
777
- "hooks/useTranslate.ts"() {
778
- "use client";
779
- init_en();
780
- ({ $meta: _meta, ...coreMessages } = en_default);
781
- coreLocale = coreMessages;
782
- I18nContext = createContext({
783
- locale: "en",
784
- direction: "ltr",
785
- t: (key) => coreLocale[key] ?? key
786
- // core locale fallback
787
- });
788
- I18nContext.displayName = "I18nContext";
789
- I18nContext.Provider;
790
- }
791
- });
792
-
793
- // hooks/useAuthContext.ts
794
- function useAuthContext() {
795
- return {
796
- user: null,
797
- loading: false,
798
- signIn: void 0,
799
- signOut: void 0
800
- };
801
- }
802
- var init_useAuthContext = __esm({
803
- "hooks/useAuthContext.ts"() {
804
- }
805
- });
806
- function useSwipeGesture(callbacks, options = {}) {
807
- const { threshold = 50, velocityThreshold = 0.3, preventDefault = false } = options;
808
- const startX = useRef(0);
809
- const startY = useRef(0);
810
- const startTime = useRef(0);
811
- const currentX = useRef(0);
812
- const tracking = useRef(false);
813
- const offsetXRef = useRef(0);
814
- const isSwipingRef = useRef(false);
815
- const onPointerDown = useCallback((e) => {
816
- startX.current = e.clientX;
817
- startY.current = e.clientY;
818
- currentX.current = e.clientX;
819
- startTime.current = Date.now();
820
- tracking.current = true;
821
- isSwipingRef.current = false;
822
- offsetXRef.current = 0;
823
- e.target.setPointerCapture?.(e.pointerId);
824
- }, []);
825
- const onPointerMove = useCallback((e) => {
826
- if (!tracking.current) return;
827
- if (preventDefault) e.preventDefault();
828
- currentX.current = e.clientX;
829
- const dx = e.clientX - startX.current;
830
- const dy = e.clientY - startY.current;
831
- if (Math.abs(dx) > 10 && Math.abs(dx) > Math.abs(dy)) {
832
- isSwipingRef.current = true;
833
- offsetXRef.current = dx;
834
- }
835
- }, [preventDefault]);
836
- const onPointerUp = useCallback((e) => {
837
- if (!tracking.current) return;
838
- tracking.current = false;
839
- const dx = e.clientX - startX.current;
840
- const dy = e.clientY - startY.current;
841
- const elapsed = Date.now() - startTime.current;
842
- const velocity = Math.abs(dx) / Math.max(elapsed, 1);
843
- offsetXRef.current = 0;
844
- isSwipingRef.current = false;
845
- if (Math.abs(dx) < threshold && velocity < velocityThreshold) return;
846
- if (Math.abs(dx) > Math.abs(dy)) {
847
- if (dx < -threshold) callbacks.onSwipeLeft?.();
848
- else if (dx > threshold) callbacks.onSwipeRight?.();
849
- } else {
850
- if (dy < -threshold) callbacks.onSwipeUp?.();
851
- else if (dy > threshold) callbacks.onSwipeDown?.();
852
- }
853
- }, [threshold, velocityThreshold, callbacks]);
854
- const onPointerCancel = useCallback(() => {
855
- tracking.current = false;
856
- offsetXRef.current = 0;
857
- isSwipingRef.current = false;
858
- }, []);
859
- return {
860
- onPointerDown,
861
- onPointerMove,
862
- onPointerUp,
863
- onPointerCancel,
864
- offsetX: offsetXRef.current,
865
- isSwiping: isSwipingRef.current
866
- };
867
- }
868
- var init_useSwipeGesture = __esm({
869
- "hooks/useSwipeGesture.ts"() {
870
- "use client";
871
- }
872
- });
873
- function useLongPress(onLongPress, options = {}) {
874
- const { duration = 500, moveThreshold = 10 } = options;
875
- const timerRef = useRef(null);
876
- const startPos = useRef({ x: 0, y: 0 });
877
- const isPressedRef = useRef(false);
878
- const firedRef = useRef(false);
879
- const cancel = useCallback(() => {
880
- if (timerRef.current) {
881
- clearTimeout(timerRef.current);
882
- timerRef.current = null;
883
- }
884
- isPressedRef.current = false;
885
- }, []);
886
- const onPointerDown = useCallback((e) => {
887
- firedRef.current = false;
888
- startPos.current = { x: e.clientX, y: e.clientY };
889
- isPressedRef.current = true;
890
- timerRef.current = setTimeout(() => {
891
- firedRef.current = true;
892
- isPressedRef.current = false;
893
- onLongPress();
894
- }, duration);
895
- }, [duration, onLongPress]);
896
- const onPointerMove = useCallback((e) => {
897
- if (!isPressedRef.current) return;
898
- const dx = e.clientX - startPos.current.x;
899
- const dy = e.clientY - startPos.current.y;
900
- if (Math.sqrt(dx * dx + dy * dy) > moveThreshold) {
901
- cancel();
902
- }
903
- }, [moveThreshold, cancel]);
904
- const onPointerUp = useCallback(() => {
905
- cancel();
906
- }, [cancel]);
907
- const onPointerCancel = useCallback(() => {
908
- cancel();
909
- }, [cancel]);
910
- return {
911
- onPointerDown,
912
- onPointerMove,
913
- onPointerUp,
914
- onPointerCancel,
915
- isPressed: isPressedRef.current
916
- };
917
- }
918
- var init_useLongPress = __esm({
919
- "hooks/useLongPress.ts"() {
920
- "use client";
921
- }
922
- });
923
- function useDragReorder(initialItems, onReorder) {
924
- const [items, setItems] = useState(initialItems);
925
- const [dragIndex, setDragIndex] = useState(-1);
926
- const [dragOverIndex, setDragOverIndex] = useState(-1);
927
- const itemsRef = useRef(initialItems);
928
- if (initialItems !== itemsRef.current) {
929
- itemsRef.current = initialItems;
930
- setItems(initialItems);
931
- }
932
- const isDragging = dragIndex >= 0;
933
- const handleDragStart = useCallback((index) => (e) => {
934
- e.preventDefault();
935
- setDragIndex(index);
936
- setDragOverIndex(index);
937
- e.target.setPointerCapture?.(e.pointerId);
938
- }, []);
939
- const handleDragMove = useCallback((index) => (e) => {
940
- if (dragIndex < 0) return;
941
- const target = document.elementFromPoint(e.clientX, e.clientY);
942
- if (!target) return;
943
- let el = target;
944
- while (el && !el.dataset.dragIndex) {
945
- el = el.parentElement;
946
- }
947
- if (el?.dataset.dragIndex) {
948
- const overIndex = parseInt(el.dataset.dragIndex, 10);
949
- if (!isNaN(overIndex) && overIndex !== dragOverIndex) {
950
- setDragOverIndex(overIndex);
951
- }
952
- }
953
- }, [dragIndex, dragOverIndex]);
954
- const handleDragEnd = useCallback(() => {
955
- if (dragIndex >= 0 && dragOverIndex >= 0 && dragIndex !== dragOverIndex) {
956
- const newItems = [...items];
957
- const [movedItem] = newItems.splice(dragIndex, 1);
958
- newItems.splice(dragOverIndex, 0, movedItem);
959
- setItems(newItems);
960
- onReorder(dragIndex, dragOverIndex, items[dragIndex]);
961
- }
962
- setDragIndex(-1);
963
- setDragOverIndex(-1);
964
- }, [dragIndex, dragOverIndex, items, onReorder]);
965
- const getDragHandleProps = useCallback((index) => ({
966
- onPointerDown: handleDragStart(index),
967
- style: { cursor: "grab", touchAction: "none" },
968
- "aria-grabbed": dragIndex === index,
969
- role: "button"
970
- }), [handleDragStart, dragIndex]);
971
- const getItemProps = useCallback((index) => ({
972
- onPointerMove: handleDragMove(index),
973
- onPointerUp: handleDragEnd,
974
- "aria-dropeffect": "move",
975
- "data-drag-index": String(index),
976
- style: {
977
- opacity: dragIndex === index ? 0.5 : 1,
978
- transition: isDragging ? "transform 150ms ease" : void 0,
979
- 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
980
- }
981
- }), [handleDragMove, handleDragEnd, dragIndex, dragOverIndex, isDragging]);
982
- return {
983
- items,
984
- dragIndex,
985
- dragOverIndex,
986
- isDragging,
987
- getDragHandleProps,
988
- getItemProps
989
- };
990
- }
991
- var init_useDragReorder = __esm({
992
- "hooks/useDragReorder.ts"() {
993
- "use client";
994
- }
995
- });
996
- function useInfiniteScroll(onLoadMore, options = {}) {
997
- const { rootMargin = "200px", hasMore = true, isLoading = false } = options;
998
- const observerRef = useRef(null);
999
- const callbackRef = useRef(onLoadMore);
1000
- callbackRef.current = onLoadMore;
1001
- const hasMoreRef = useRef(hasMore);
1002
- hasMoreRef.current = hasMore;
1003
- const isLoadingRef = useRef(isLoading);
1004
- isLoadingRef.current = isLoading;
1005
- useEffect(() => {
1006
- return () => {
1007
- observerRef.current?.disconnect();
1008
- };
1009
- }, []);
1010
- const sentinelRef = useCallback((node) => {
1011
- observerRef.current?.disconnect();
1012
- if (!node) return;
1013
- observerRef.current = new IntersectionObserver(
1014
- (entries) => {
1015
- const entry = entries[0];
1016
- if (entry.isIntersecting && hasMoreRef.current && !isLoadingRef.current) {
1017
- callbackRef.current();
1018
- }
1019
- },
1020
- { rootMargin }
1021
- );
1022
- observerRef.current.observe(node);
1023
- }, [rootMargin]);
1024
- return { sentinelRef };
1025
- }
1026
- var init_useInfiniteScroll = __esm({
1027
- "hooks/useInfiniteScroll.ts"() {
1028
- "use client";
1029
- }
1030
- });
1031
- function usePullToRefresh(onRefresh, options = {}) {
1032
- const { threshold = 60, maxPull = 120 } = options;
1033
- const [pullDistance, setPullDistance] = useState(0);
1034
- const [isPulling, setIsPulling] = useState(false);
1035
- const [isRefreshing, setIsRefreshing] = useState(false);
1036
- const startY = useRef(0);
1037
- const scrollTopRef = useRef(0);
1038
- const onTouchStart = useCallback((e) => {
1039
- const container = e.currentTarget;
1040
- scrollTopRef.current = container.scrollTop;
1041
- if (scrollTopRef.current <= 0) {
1042
- startY.current = e.touches[0].clientY;
1043
- setIsPulling(true);
1044
- }
1045
- }, []);
1046
- const onTouchMove = useCallback((e) => {
1047
- if (!isPulling || isRefreshing) return;
1048
- const container = e.currentTarget;
1049
- if (container.scrollTop > 0) {
1050
- setPullDistance(0);
1051
- return;
1052
- }
1053
- const dy = e.touches[0].clientY - startY.current;
1054
- if (dy > 0) {
1055
- const distance = Math.min(dy * 0.5, maxPull);
1056
- setPullDistance(distance);
1057
- }
1058
- }, [isPulling, isRefreshing, maxPull]);
1059
- const onTouchEnd = useCallback(() => {
1060
- if (!isPulling) return;
1061
- setIsPulling(false);
1062
- if (pullDistance >= threshold && !isRefreshing) {
1063
- setIsRefreshing(true);
1064
- setPullDistance(threshold);
1065
- onRefresh();
1066
- } else {
1067
- setPullDistance(0);
1068
- }
1069
- }, [isPulling, pullDistance, threshold, isRefreshing, onRefresh]);
1070
- const endRefresh = useCallback(() => {
1071
- setIsRefreshing(false);
1072
- setPullDistance(0);
1073
- }, []);
1074
- const containerProps = {
1075
- onTouchStart,
1076
- onTouchMove,
1077
- onTouchEnd,
1078
- style: {
1079
- transform: pullDistance > 0 ? `translateY(${pullDistance}px)` : void 0,
1080
- transition: isPulling ? "none" : "transform 300ms ease-out"
1081
- }
1082
- };
1083
- return {
1084
- pullDistance,
1085
- isPulling,
1086
- isRefreshing,
1087
- containerProps,
1088
- endRefresh
1089
- };
1090
- }
1091
- var init_usePullToRefresh = __esm({
1092
- "hooks/usePullToRefresh.ts"() {
1093
- "use client";
1094
- }
1095
- });
1096
- function EntitySchemaProvider({
1097
- entities,
1098
- traitLinkedEntities,
1099
- orbitalsByTrait,
1100
- children
1101
- }) {
1102
- const entitiesMap = useMemo(() => {
1103
- const map = /* @__PURE__ */ new Map();
1104
- for (const entity of entities) {
1105
- map.set(entity.name, entity);
1106
- }
1107
- return map;
1108
- }, [entities]);
1109
- const linkedMap = useMemo(() => {
1110
- return traitLinkedEntities ?? /* @__PURE__ */ new Map();
1111
- }, [traitLinkedEntities]);
1112
- const orbitalsMap = useMemo(() => {
1113
- return orbitalsByTrait ?? /* @__PURE__ */ new Map();
1114
- }, [orbitalsByTrait]);
1115
- const contextValue = useMemo(
1116
- () => ({
1117
- entities: entitiesMap,
1118
- traitLinkedEntities: linkedMap,
1119
- orbitalsByTrait: orbitalsMap
1120
- }),
1121
- [entitiesMap, linkedMap, orbitalsMap]
1122
- );
1123
- return /* @__PURE__ */ jsx(EntitySchemaContext.Provider, { value: contextValue, children });
1124
- }
1125
- function useEntitySchema() {
1126
- const context = useContext(EntitySchemaContext);
1127
- if (!context) {
1128
- throw new Error("useEntitySchema must be used within an EntitySchemaProvider");
1129
- }
1130
- return context;
1131
- }
1132
- function useEntityDefinition(entityName) {
1133
- const { entities } = useEntitySchema();
1134
- return entities.get(entityName);
1135
- }
1136
- function useEntitySchemaOptional() {
1137
- return useContext(EntitySchemaContext);
1138
- }
1139
- var EntitySchemaContext;
1140
- var init_EntitySchemaContext = __esm({
1141
- "runtime/EntitySchemaContext.tsx"() {
1142
- EntitySchemaContext = createContext(null);
1143
- }
1144
- });
1145
- function cn(...inputs) {
1146
- return twMerge(clsx(inputs));
1147
- }
1148
- var init_cn = __esm({
1149
- "lib/cn.ts"() {
1150
- }
1151
- });
1152
288
  var paddingStyles, paddingXStyles, paddingYStyles, marginStyles, marginXStyles, marginYStyles, bgStyles, roundedStyles, shadowStyles, displayStyles, overflowStyles, positionStyles, Box;
1153
289
  var init_Box = __esm({
1154
290
  "components/core/atoms/Box.tsx"() {
@@ -2520,7 +1656,6 @@ var init_Modal = __esm({
2520
1656
  init_Overlay();
2521
1657
  init_cn();
2522
1658
  init_useEventBus();
2523
- init_useTranslate();
2524
1659
  sizeClasses2 = {
2525
1660
  sm: "max-w-md",
2526
1661
  md: "max-w-2xl",
@@ -2742,7 +1877,6 @@ var init_Drawer = __esm({
2742
1877
  init_Overlay();
2743
1878
  init_cn();
2744
1879
  init_useEventBus();
2745
- init_useTranslate();
2746
1880
  sizeWidths = {
2747
1881
  sm: "w-full sm:w-80",
2748
1882
  // 320px
@@ -3015,7 +2149,6 @@ var init_Toast = __esm({
3015
2149
  init_Badge();
3016
2150
  init_cn();
3017
2151
  init_useEventBus();
3018
- init_useTranslate();
3019
2152
  variantClasses = {
3020
2153
  success: "bg-card border-[length:var(--border-width)] border-success",
3021
2154
  error: "bg-card border-[length:var(--border-width)] border-error",
@@ -3977,7 +3110,6 @@ var init_Input = __esm({
3977
3110
  "components/core/atoms/Input.tsx"() {
3978
3111
  init_cn();
3979
3112
  init_Icon();
3980
- init_useTranslate();
3981
3113
  Input = React84__default.forwardRef(
3982
3114
  ({
3983
3115
  className,
@@ -4361,7 +3493,6 @@ var init_FilterPill = __esm({
4361
3493
  "components/core/atoms/FilterPill.tsx"() {
4362
3494
  init_cn();
4363
3495
  init_useEventBus();
4364
- init_useTranslate();
4365
3496
  init_Icon();
4366
3497
  variantStyles5 = {
4367
3498
  default: [
@@ -5748,7 +4879,6 @@ var init_LawReferenceTooltip = __esm({
5748
4879
  init_Typography();
5749
4880
  init_Divider();
5750
4881
  init_cn();
5751
- init_useTranslate();
5752
4882
  positionStyles2 = {
5753
4883
  top: "bottom-full left-1/2 -translate-x-1/2 mb-2",
5754
4884
  bottom: "top-full left-1/2 -translate-x-1/2 mt-2",
@@ -6359,6 +5489,41 @@ var init_AnimatedCounter = __esm({
6359
5489
  AnimatedCounter.displayName = "AnimatedCounter";
6360
5490
  }
6361
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
+ });
6362
5527
  var InfiniteScrollSentinel;
6363
5528
  var init_InfiniteScrollSentinel = __esm({
6364
5529
  "components/core/atoms/InfiniteScrollSentinel.tsx"() {
@@ -8707,7 +7872,6 @@ var init_ErrorState = __esm({
8707
7872
  init_Typography();
8708
7873
  init_Icon();
8709
7874
  init_useEventBus();
8710
- init_useTranslate();
8711
7875
  ErrorState = ({
8712
7876
  title,
8713
7877
  message,
@@ -8750,7 +7914,6 @@ var init_ErrorBoundary = __esm({
8750
7914
  "use client";
8751
7915
  init_cn();
8752
7916
  init_ErrorState();
8753
- init_useTranslate();
8754
7917
  DefaultFallback = ({ error, onRetry }) => {
8755
7918
  const { t } = useTranslate();
8756
7919
  return /* @__PURE__ */ jsx(
@@ -8900,7 +8063,6 @@ var init_Skeleton = __esm({
8900
8063
  "components/core/molecules/Skeleton.tsx"() {
8901
8064
  "use client";
8902
8065
  init_cn();
8903
- init_useTranslate();
8904
8066
  init_Box();
8905
8067
  init_Stack();
8906
8068
  init_Stack();
@@ -9577,7 +8739,6 @@ var AboutPageTemplate;
9577
8739
  var init_AboutPageTemplate = __esm({
9578
8740
  "components/marketing/templates/AboutPageTemplate.tsx"() {
9579
8741
  init_cn();
9580
- init_useTranslate();
9581
8742
  init_Stack();
9582
8743
  init_Box();
9583
8744
  init_Typography();
@@ -9682,7 +8843,6 @@ var init_Alert = __esm({
9682
8843
  init_Icon();
9683
8844
  init_Typography();
9684
8845
  init_useEventBus();
9685
- init_useTranslate();
9686
8846
  variantBorderClasses = {
9687
8847
  info: "border-info",
9688
8848
  success: "border-success",
@@ -10042,7 +9202,6 @@ var init_Menu = __esm({
10042
9202
  init_Badge();
10043
9203
  init_cn();
10044
9204
  init_useEventBus();
10045
- init_useTranslate();
10046
9205
  Menu = ({
10047
9206
  trigger,
10048
9207
  items,
@@ -10330,7 +9489,6 @@ var init_FloatingActionButton = __esm({
10330
9489
  init_Typography();
10331
9490
  init_cn();
10332
9491
  init_useEventBus();
10333
- init_useTranslate();
10334
9492
  FloatingActionButton = ({
10335
9493
  action,
10336
9494
  actionPayload,
@@ -10514,7 +9672,7 @@ var init_MapView = __esm({
10514
9672
  L.Marker.prototype.options.icon = defaultIcon;
10515
9673
  const { useEffect: useEffect71, useRef: useRef66, useCallback: useCallback113, useState: useState103 } = React84__default;
10516
9674
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
10517
- const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
9675
+ const { useEventBus: useEventBus3 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
10518
9676
  function MapUpdater({ centerLat, centerLng, zoom }) {
10519
9677
  const map = useMap();
10520
9678
  const prevRef = useRef66({ centerLat, centerLng, zoom });
@@ -10556,7 +9714,7 @@ var init_MapView = __esm({
10556
9714
  className,
10557
9715
  showAttribution = true
10558
9716
  }) {
10559
- const eventBus = useEventBus2();
9717
+ const eventBus = useEventBus3();
10560
9718
  const [clickedPosition, setClickedPosition] = useState103(null);
10561
9719
  const handleMapClick = useCallback113((lat, lng) => {
10562
9720
  if (showClickedPin) {
@@ -11252,7 +10410,6 @@ var init_ActionTile = __esm({
11252
10410
  "components/game/organisms/puzzles/sequencer/ActionTile.tsx"() {
11253
10411
  init_atoms2();
11254
10412
  init_cn();
11255
- init_useTranslate();
11256
10413
  DRAG_MIME = "application/x-almadar-slot-item";
11257
10414
  SIZE_CONFIG = {
11258
10415
  sm: { px: "px-2 py-1", icon: "text-lg", text: "text-xs" },
@@ -11290,7 +10447,6 @@ var init_ActionPalette = __esm({
11290
10447
  "components/game/organisms/puzzles/sequencer/ActionPalette.tsx"() {
11291
10448
  init_atoms2();
11292
10449
  init_cn();
11293
- init_useTranslate();
11294
10450
  init_ActionTile();
11295
10451
  ActionPalette.displayName = "ActionPalette";
11296
10452
  }
@@ -11300,7 +10456,6 @@ var init_AuthLayout = __esm({
11300
10456
  "components/core/templates/AuthLayout.tsx"() {
11301
10457
  "use client";
11302
10458
  init_cn();
11303
- init_useTranslate();
11304
10459
  init_Box();
11305
10460
  init_Stack();
11306
10461
  init_Typography();
@@ -11445,7 +10600,6 @@ var init_LoadingState = __esm({
11445
10600
  init_atoms2();
11446
10601
  init_Stack();
11447
10602
  init_Typography();
11448
- init_useTranslate();
11449
10603
  LoadingState = ({
11450
10604
  title,
11451
10605
  message,
@@ -12629,7 +11783,6 @@ var init_IsometricCanvas = __esm({
12629
11783
  "use client";
12630
11784
  init_cn();
12631
11785
  init_useEventBus();
12632
- init_useTranslate();
12633
11786
  init_Box();
12634
11787
  init_Stack();
12635
11788
  init_Icon();
@@ -12993,7 +12146,6 @@ var init_BattleBoard = __esm({
12993
12146
  "use client";
12994
12147
  init_cn();
12995
12148
  init_useEventBus();
12996
- init_useTranslate();
12997
12149
  init_Box();
12998
12150
  init_Button();
12999
12151
  init_Typography();
@@ -13753,7 +12905,6 @@ var log6, SWIM_GUTTER, CENTER_W, BehaviorView;
13753
12905
  var init_BehaviorView = __esm({
13754
12906
  "components/avl/molecules/BehaviorView.tsx"() {
13755
12907
  "use client";
13756
- init_useTranslate();
13757
12908
  init_AvlState();
13758
12909
  init_AvlTransitionLane();
13759
12910
  init_AvlSwimLane();
@@ -13868,7 +13019,6 @@ var MIN_DIAGRAM_WIDTH, ScaledDiagram;
13868
13019
  var init_ScaledDiagram = __esm({
13869
13020
  "components/core/molecules/ScaledDiagram.tsx"() {
13870
13021
  init_Box();
13871
- init_useTranslate();
13872
13022
  init_cn();
13873
13023
  MIN_DIAGRAM_WIDTH = 200;
13874
13024
  ScaledDiagram = ({
@@ -14011,7 +13161,6 @@ var init_CodeBlock = __esm({
14011
13161
  init_Textarea();
14012
13162
  init_Icon();
14013
13163
  init_useEventBus();
14014
- init_useTranslate();
14015
13164
  SyntaxHighlighter.registerLanguage("json", langJson);
14016
13165
  SyntaxHighlighter.registerLanguage("javascript", langJavascript);
14017
13166
  SyntaxHighlighter.registerLanguage("js", langJavascript);
@@ -14518,7 +13667,6 @@ var init_MarkdownContent = __esm({
14518
13667
  init_katex_min();
14519
13668
  init_Box();
14520
13669
  init_CodeBlock();
14521
- init_useTranslate();
14522
13670
  init_cn();
14523
13671
  MarkdownContent = React84__default.memo(
14524
13672
  ({ content, direction, className }) => {
@@ -14685,6 +13833,56 @@ var init_MarkdownContent = __esm({
14685
13833
  MarkdownContent.displayName = "MarkdownContent";
14686
13834
  }
14687
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
+ });
14688
13886
  function Card2({
14689
13887
  title,
14690
13888
  subtitle,
@@ -14773,7 +13971,6 @@ var init_Card2 = __esm({
14773
13971
  "components/core/molecules/Card.tsx"() {
14774
13972
  "use client";
14775
13973
  init_useEventBus();
14776
- init_useTranslate();
14777
13974
  init_useLongPress();
14778
13975
  Card2.displayName = "Card";
14779
13976
  }
@@ -14787,7 +13984,6 @@ var init_QuizBlock = __esm({
14787
13984
  init_Button();
14788
13985
  init_Icon();
14789
13986
  init_Box();
14790
- init_useTranslate();
14791
13987
  init_cn();
14792
13988
  QuizBlock = ({
14793
13989
  question,
@@ -14830,7 +14026,6 @@ var init_StateMachineView = __esm({
14830
14026
  init_Typography();
14831
14027
  init_Button();
14832
14028
  init_Icon();
14833
- init_useTranslate();
14834
14029
  init_useEventBus();
14835
14030
  init_cn();
14836
14031
  StateNode = ({ state, config }) => {
@@ -16197,7 +15392,6 @@ var init_JazariStateMachine = __esm({
16197
15392
  init_StateMachineView();
16198
15393
  init_visualizer();
16199
15394
  init_svg_paths();
16200
- init_useTranslate();
16201
15395
  init_cn();
16202
15396
  JAZARI_VISUALIZER_CONFIG = {
16203
15397
  ...DEFAULT_CONFIG,
@@ -16353,7 +15547,6 @@ var init_ContentRenderer = __esm({
16353
15547
  init_ScaledDiagram();
16354
15548
  init_JazariStateMachine();
16355
15549
  init_parseContentSegments();
16356
- init_useTranslate();
16357
15550
  init_cn();
16358
15551
  ContentRenderer = ({
16359
15552
  content,
@@ -16447,7 +15640,6 @@ var init_BookChapterView = __esm({
16447
15640
  init_ScaledDiagram();
16448
15641
  init_ContentRenderer();
16449
15642
  init_JazariStateMachine();
16450
- init_useTranslate();
16451
15643
  init_cn();
16452
15644
  BookChapterView = ({
16453
15645
  chapter,
@@ -16486,7 +15678,6 @@ var init_BookCoverPage = __esm({
16486
15678
  init_Typography();
16487
15679
  init_Button();
16488
15680
  init_Box();
16489
- init_useTranslate();
16490
15681
  init_cn();
16491
15682
  BookCoverPage = ({
16492
15683
  title,
@@ -16566,7 +15757,6 @@ var init_BookNavBar = __esm({
16566
15757
  init_Typography();
16567
15758
  init_ProgressBar();
16568
15759
  init_Box();
16569
- init_useTranslate();
16570
15760
  init_cn();
16571
15761
  BookNavBar = ({
16572
15762
  currentPage,
@@ -16668,7 +15858,6 @@ var init_BookTableOfContents = __esm({
16668
15858
  init_Button();
16669
15859
  init_Box();
16670
15860
  init_Badge();
16671
- init_useTranslate();
16672
15861
  init_cn();
16673
15862
  BookTableOfContents = ({
16674
15863
  parts,
@@ -16728,7 +15917,6 @@ var init_EmptyState = __esm({
16728
15917
  init_Stack();
16729
15918
  init_Typography();
16730
15919
  init_useEventBus();
16731
- init_useTranslate();
16732
15920
  ICON_NAME_ALIASES = {
16733
15921
  check: "check-circle",
16734
15922
  error: "x-circle",
@@ -16899,7 +16087,6 @@ var init_BookViewer = __esm({
16899
16087
  init_Box();
16900
16088
  init_Stack();
16901
16089
  init_useEventBus();
16902
- init_useTranslate();
16903
16090
  init_cn();
16904
16091
  init_BookCoverPage();
16905
16092
  init_BookTableOfContents();
@@ -17331,7 +16518,6 @@ var init_BranchingLogicBuilder = __esm({
17331
16518
  init_FilterPill();
17332
16519
  init_Box();
17333
16520
  init_useEventBus();
17334
- init_useTranslate();
17335
16521
  init_cn();
17336
16522
  END_OF_SURVEY = "end-of-survey";
17337
16523
  RuleRow = ({
@@ -17784,7 +16970,6 @@ var init_Breadcrumb = __esm({
17784
16970
  init_Typography();
17785
16971
  init_cn();
17786
16972
  init_useEventBus();
17787
- init_useTranslate();
17788
16973
  Breadcrumb = ({
17789
16974
  items,
17790
16975
  separator = "chevron-right",
@@ -18020,7 +17205,6 @@ var init_BuilderBoard = __esm({
18020
17205
  "components/game/organisms/puzzles/builder/BuilderBoard.tsx"() {
18021
17206
  init_atoms2();
18022
17207
  init_useEventBus();
18023
- init_useTranslate();
18024
17208
  BuilderBoard.displayName = "BuilderBoard";
18025
17209
  }
18026
17210
  });
@@ -18147,6 +17331,73 @@ var init_ButtonGroup = __esm({
18147
17331
  ButtonGroup.displayName = "ButtonGroup";
18148
17332
  }
18149
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
+ });
18150
17401
  function dayWindowForViewport(width) {
18151
17402
  if (width <= 640) return 1;
18152
17403
  if (width <= 1024) return 3;
@@ -18431,7 +17682,6 @@ var init_CalendarGrid = __esm({
18431
17682
  init_TimeSlotCell();
18432
17683
  init_useEventBus();
18433
17684
  init_useSwipeGesture();
18434
- init_useTranslate();
18435
17685
  SHORT_DATE = { month: "short", day: "numeric" };
18436
17686
  CalendarGrid.displayName = "CalendarGrid";
18437
17687
  }
@@ -19740,7 +18990,6 @@ var init_Pagination = __esm({
19740
18990
  init_Stack();
19741
18991
  init_cn();
19742
18992
  init_useEventBus();
19743
- init_useTranslate();
19744
18993
  Pagination = ({
19745
18994
  currentPage,
19746
18995
  totalPages,
@@ -19944,7 +19193,6 @@ var init_CardGrid = __esm({
19944
19193
  init_cn();
19945
19194
  init_getNestedValue();
19946
19195
  init_useEventBus();
19947
- init_useTranslate();
19948
19196
  init_atoms2();
19949
19197
  init_Badge();
19950
19198
  init_Box();
@@ -20173,7 +19421,6 @@ var init_Carousel = __esm({
20173
19421
  init_cn();
20174
19422
  init_useEventBus();
20175
19423
  init_useSwipeGesture();
20176
- init_useTranslate();
20177
19424
  init_Box();
20178
19425
  init_Stack();
20179
19426
  init_Button();
@@ -20410,7 +19657,6 @@ var init_CaseStudyOrganism = __esm({
20410
19657
  "use client";
20411
19658
  init_cn();
20412
19659
  init_useEventBus();
20413
- init_useTranslate();
20414
19660
  init_Stack();
20415
19661
  init_Typography();
20416
19662
  init_SimpleGrid();
@@ -20615,7 +19861,6 @@ var init_Chart = __esm({
20615
19861
  init_ErrorState();
20616
19862
  init_EmptyState();
20617
19863
  init_useEventBus();
20618
- init_useTranslate();
20619
19864
  CHART_COLORS = [
20620
19865
  "var(--color-primary)",
20621
19866
  "var(--color-success)",
@@ -21523,7 +20768,6 @@ var init_ClassifierBoard = __esm({
21523
20768
  "components/game/organisms/puzzles/classifier/ClassifierBoard.tsx"() {
21524
20769
  init_atoms2();
21525
20770
  init_useEventBus();
21526
- init_useTranslate();
21527
20771
  ClassifierBoard.displayName = "ClassifierBoard";
21528
20772
  }
21529
20773
  });
@@ -21555,7 +20799,6 @@ var init_CodeView = __esm({
21555
20799
  "components/game/organisms/puzzles/state-architect/CodeView.tsx"() {
21556
20800
  init_atoms2();
21557
20801
  init_cn();
21558
- init_useTranslate();
21559
20802
  CodeView.displayName = "CodeView";
21560
20803
  }
21561
20804
  });
@@ -21569,7 +20812,6 @@ var init_Tabs = __esm({
21569
20812
  init_Box();
21570
20813
  init_cn();
21571
20814
  init_useEventBus();
21572
- init_useTranslate();
21573
20815
  Tabs = ({
21574
20816
  items,
21575
20817
  tabs,
@@ -21746,7 +20988,6 @@ var init_CodeViewer = __esm({
21746
20988
  init_EmptyState();
21747
20989
  init_Tabs();
21748
20990
  init_useEventBus();
21749
- init_useTranslate();
21750
20991
  DIFF_STYLES = {
21751
20992
  add: {
21752
20993
  bg: "bg-success/10",
@@ -22118,7 +21359,6 @@ var init_ConfirmDialog = __esm({
22118
21359
  init_Box();
22119
21360
  init_Stack();
22120
21361
  init_cn();
22121
- init_useTranslate();
22122
21362
  variantConfig = {
22123
21363
  danger: {
22124
21364
  icon: Trash2,
@@ -22600,7 +21840,6 @@ var init_DashboardGrid = __esm({
22600
21840
  "components/core/organisms/layout/DashboardGrid.tsx"() {
22601
21841
  init_cn();
22602
21842
  init_Box();
22603
- init_useTranslate();
22604
21843
  gapStyles5 = {
22605
21844
  sm: "gap-2",
22606
21845
  md: "gap-4",
@@ -22655,6 +21894,20 @@ var init_DashboardGrid = __esm({
22655
21894
  DashboardGrid.displayName = "DashboardGrid";
22656
21895
  }
22657
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
+ });
22658
21911
  var CurrentPagePathContext, CurrentPagePathProvider, useCurrentPagePath;
22659
21912
  var init_CurrentPagePathContext = __esm({
22660
21913
  "context/CurrentPagePathContext.tsx"() {
@@ -22680,7 +21933,6 @@ var init_DashboardLayout = __esm({
22680
21933
  init_Icon();
22681
21934
  init_useAuthContext();
22682
21935
  init_useEventBus();
22683
- init_useTranslate();
22684
21936
  init_CurrentPagePathContext();
22685
21937
  DashboardLayout = ({
22686
21938
  appName = "{{APP_TITLE}}",
@@ -24025,7 +23277,6 @@ var init_DataGrid = __esm({
24025
23277
  init_cn();
24026
23278
  init_getNestedValue();
24027
23279
  init_useEventBus();
24028
- init_useTranslate();
24029
23280
  init_Box();
24030
23281
  init_Stack();
24031
23282
  init_Typography();
@@ -24464,7 +23715,6 @@ var init_DataList = __esm({
24464
23715
  init_cn();
24465
23716
  init_getNestedValue();
24466
23717
  init_useEventBus();
24467
- init_useTranslate();
24468
23718
  init_Box();
24469
23719
  init_Stack();
24470
23720
  init_Typography();
@@ -24519,7 +23769,6 @@ var init_FileTree = __esm({
24519
23769
  init_Box();
24520
23770
  init_Typography();
24521
23771
  init_Icon();
24522
- init_useTranslate();
24523
23772
  TreeNodeItem = ({
24524
23773
  node,
24525
23774
  depth,
@@ -24649,6 +23898,70 @@ var init_FormField = __esm({
24649
23898
  FormField.displayName = "FormField";
24650
23899
  }
24651
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
+ });
24652
23965
  var resolveFilterType, lookStyles6, FilterGroup;
24653
23966
  var init_FilterGroup = __esm({
24654
23967
  "components/core/molecules/FilterGroup.tsx"() {
@@ -24662,7 +23975,6 @@ var init_FilterGroup = __esm({
24662
23975
  init_Icon();
24663
23976
  init_useEventBus();
24664
23977
  init_useQuerySingleton();
24665
- init_useTranslate();
24666
23978
  resolveFilterType = (filter) => filter.filterType ?? filter.type;
24667
23979
  lookStyles6 = {
24668
23980
  toolbar: "",
@@ -25304,13 +24616,12 @@ var init_RelationSelect = __esm({
25304
24616
  init_Spinner();
25305
24617
  init_Typography();
25306
24618
  init_debug();
25307
- init_useTranslate();
25308
24619
  isRelationsDebugEnabled = () => isDebugEnabled();
25309
24620
  RelationSelect = ({
25310
24621
  value,
25311
24622
  onChange,
25312
24623
  options = [],
25313
- placeholder = "Select...",
24624
+ placeholder,
25314
24625
  required = false,
25315
24626
  disabled = false,
25316
24627
  isLoading = false,
@@ -25322,6 +24633,7 @@ var init_RelationSelect = __esm({
25322
24633
  emptyMessage
25323
24634
  }) => {
25324
24635
  const { t } = useTranslate();
24636
+ const resolvedPlaceholder = placeholder ?? t("relationSelect.selectPlaceholder");
25325
24637
  const resolvedSearchPlaceholder = searchPlaceholder ?? t("common.search");
25326
24638
  const resolvedEmptyMessage = emptyMessage ?? t("empty.noOptionsFound");
25327
24639
  const [isOpen, setIsOpen] = useState(false);
@@ -25431,7 +24743,7 @@ var init_RelationSelect = __esm({
25431
24743
  children: isLoading ? /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
25432
24744
  /* @__PURE__ */ jsx(Spinner, { size: "sm" }),
25433
24745
  /* @__PURE__ */ jsx(Typography, { as: "span", children: t("common.loading") })
25434
- ] }) : selectedOption ? selectedOption.label : placeholder
24746
+ ] }) : selectedOption ? selectedOption.label : resolvedPlaceholder
25435
24747
  }
25436
24748
  ),
25437
24749
  /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
@@ -25528,7 +24840,6 @@ var init_SearchInput = __esm({
25528
24840
  init_cn();
25529
24841
  init_useEventBus();
25530
24842
  init_useQuerySingleton();
25531
- init_useTranslate();
25532
24843
  SearchInput = ({
25533
24844
  value,
25534
24845
  onSearch,
@@ -25631,7 +24942,6 @@ var init_SidePanel = __esm({
25631
24942
  init_Typography();
25632
24943
  init_cn();
25633
24944
  init_useEventBus();
25634
- init_useTranslate();
25635
24945
  SidePanel = ({
25636
24946
  title,
25637
24947
  children,
@@ -25810,7 +25120,6 @@ var init_WizardNavigation = __esm({
25810
25120
  init_Icon();
25811
25121
  init_cn();
25812
25122
  init_useEventBus();
25813
- init_useTranslate();
25814
25123
  WizardNavigation = ({
25815
25124
  currentStep,
25816
25125
  totalSteps,
@@ -25898,7 +25207,6 @@ var init_RepeatableFormSection = __esm({
25898
25207
  init_Card();
25899
25208
  init_Icon();
25900
25209
  init_useEventBus();
25901
- init_useTranslate();
25902
25210
  RepeatableFormSection = ({
25903
25211
  sectionType,
25904
25212
  title,
@@ -26029,7 +25337,6 @@ var actionTypeLabelKeys, actionTypeIcons, ViolationAlert;
26029
25337
  var init_ViolationAlert = __esm({
26030
25338
  "components/core/molecules/ViolationAlert.tsx"() {
26031
25339
  init_cn();
26032
- init_useTranslate();
26033
25340
  init_Box();
26034
25341
  init_Stack();
26035
25342
  init_Typography();
@@ -26535,7 +25842,6 @@ var init_LineChart = __esm({
26535
25842
  "use client";
26536
25843
  init_cn();
26537
25844
  init_atoms2();
26538
- init_useTranslate();
26539
25845
  LineChart2 = ({
26540
25846
  data,
26541
25847
  width = 400,
@@ -28491,7 +27797,6 @@ var init_GraphView = __esm({
28491
27797
  "use client";
28492
27798
  init_cn();
28493
27799
  init_atoms2();
28494
- init_useTranslate();
28495
27800
  GROUP_COLORS = [
28496
27801
  "#3b82f6",
28497
27802
  // blue-500
@@ -28817,7 +28122,6 @@ var init_NumberStepper = __esm({
28817
28122
  init_cn();
28818
28123
  init_Icon();
28819
28124
  init_useEventBus();
28820
- init_useTranslate();
28821
28125
  sizeStyles10 = {
28822
28126
  sm: {
28823
28127
  button: "w-7 h-7",
@@ -29158,7 +28462,6 @@ var init_UploadDropZone = __esm({
29158
28462
  init_Icon();
29159
28463
  init_Typography();
29160
28464
  init_useEventBus();
29161
- init_useTranslate();
29162
28465
  UploadDropZone = ({
29163
28466
  accept,
29164
28467
  maxSize,
@@ -29325,7 +28628,6 @@ var init_Lightbox = __esm({
29325
28628
  init_Icon();
29326
28629
  init_cn();
29327
28630
  init_useEventBus();
29328
- init_useTranslate();
29329
28631
  Lightbox = ({
29330
28632
  images = [],
29331
28633
  currentIndex = 0,
@@ -29810,7 +29112,6 @@ var init_TableView = __esm({
29810
29112
  init_cn();
29811
29113
  init_getNestedValue();
29812
29114
  init_useEventBus();
29813
- init_useTranslate();
29814
29115
  init_Box();
29815
29116
  init_Stack();
29816
29117
  init_Typography();
@@ -30014,7 +29315,6 @@ var init_Meter = __esm({
30014
29315
  init_LoadingState();
30015
29316
  init_ErrorState();
30016
29317
  init_useEventBus();
30017
- init_useTranslate();
30018
29318
  DEFAULT_THRESHOLDS = [
30019
29319
  { value: 30, color: "var(--color-error)" },
30020
29320
  { value: 70, color: "var(--color-warning)" },
@@ -30395,6 +29695,79 @@ var init_SwipeableRow = __esm({
30395
29695
  SwipeableRow.displayName = "SwipeableRow";
30396
29696
  }
30397
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
+ });
30398
29771
  function useSafeEventBus10() {
30399
29772
  try {
30400
29773
  return useEventBus();
@@ -30505,6 +29878,71 @@ var init_SortableList = __esm({
30505
29878
  SortableList.displayName = "SortableList";
30506
29879
  }
30507
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
+ });
30508
29946
  function useSafeEventBus11() {
30509
29947
  try {
30510
29948
  return useEventBus();
@@ -31823,7 +31261,6 @@ var init_VoteStack = __esm({
31823
31261
  init_cn();
31824
31262
  init_Icon();
31825
31263
  init_useEventBus();
31826
- init_useTranslate();
31827
31264
  sizeStyles12 = {
31828
31265
  sm: {
31829
31266
  button: "w-7 h-7",
@@ -32278,7 +31715,6 @@ var init_QrScanner = __esm({
32278
31715
  init_atoms2();
32279
31716
  init_Icon();
32280
31717
  init_useEventBus();
32281
- init_useTranslate();
32282
31718
  QrScanner = ({
32283
31719
  onScan,
32284
31720
  scanEvent,
@@ -32505,7 +31941,6 @@ var init_OptionConstraintGroup = __esm({
32505
31941
  "components/core/molecules/OptionConstraintGroup.tsx"() {
32506
31942
  init_cn();
32507
31943
  init_useEventBus();
32508
- init_useTranslate();
32509
31944
  init_Typography();
32510
31945
  init_Box();
32511
31946
  init_Label();
@@ -33461,7 +32896,6 @@ var init_RichBlockEditor = __esm({
33461
32896
  init_Input();
33462
32897
  init_Icon();
33463
32898
  init_useEventBus();
33464
- init_useTranslate();
33465
32899
  TOOLBAR_ENTRIES = [
33466
32900
  { type: "paragraph", labelKey: "richBlockEditor.toolbar.text", icon: Type },
33467
32901
  { type: "heading-1", labelKey: "richBlockEditor.toolbar.h1", icon: Heading1 },
@@ -33652,7 +33086,6 @@ var init_ReplyTree = __esm({
33652
33086
  "use client";
33653
33087
  init_cn();
33654
33088
  init_useEventBus();
33655
- init_useTranslate();
33656
33089
  init_atoms2();
33657
33090
  init_VoteStack();
33658
33091
  ReplyTreeNode = ({
@@ -33960,7 +33393,6 @@ var init_VersionDiff = __esm({
33960
33393
  "use client";
33961
33394
  init_cn();
33962
33395
  init_useEventBus();
33963
- init_useTranslate();
33964
33396
  init_atoms2();
33965
33397
  init_Stack();
33966
33398
  INLINE_STYLES = {
@@ -34276,7 +33708,6 @@ var init_DocBreadcrumb = __esm({
34276
33708
  init_Stack();
34277
33709
  init_Typography();
34278
33710
  init_Icon();
34279
- init_useTranslate();
34280
33711
  DocBreadcrumb = ({
34281
33712
  items,
34282
33713
  className
@@ -34705,7 +34136,6 @@ var init_DocSearch = __esm({
34705
34136
  init_Typography();
34706
34137
  init_Icon();
34707
34138
  init_Input();
34708
- init_useTranslate();
34709
34139
  }
34710
34140
  });
34711
34141
  var DocSidebarCategory, DocSidebar;
@@ -34718,7 +34148,6 @@ var init_DocSidebar = __esm({
34718
34148
  init_Stack();
34719
34149
  init_Typography();
34720
34150
  init_Icon();
34721
- init_useTranslate();
34722
34151
  DocSidebarCategory = ({ item, depth }) => {
34723
34152
  const [expanded, setExpanded] = useState(
34724
34153
  () => item.items?.some(function hasActive(child) {
@@ -34825,7 +34254,6 @@ var init_DocTOC = __esm({
34825
34254
  init_Box();
34826
34255
  init_Stack();
34827
34256
  init_Typography();
34828
- init_useTranslate();
34829
34257
  DocTOC = ({
34830
34258
  items,
34831
34259
  activeId,
@@ -35560,7 +34988,6 @@ var init_Header = __esm({
35560
34988
  init_Stack();
35561
34989
  init_Typography();
35562
34990
  init_cn();
35563
- init_useTranslate();
35564
34991
  lookStyles8 = {
35565
34992
  "compact-bar": "",
35566
34993
  hero: "py-section min-h-[200px] [&_h1]:text-display-1",
@@ -35880,7 +35307,6 @@ var init_Sidebar = __esm({
35880
35307
  init_Typography();
35881
35308
  init_cn();
35882
35309
  init_useEventBus();
35883
- init_useTranslate();
35884
35310
  SidebarNavItem = ({ item, collapsed }) => {
35885
35311
  const Icon3 = item.icon;
35886
35312
  const isActive = item.active ?? item.isActive;
@@ -36134,7 +35560,6 @@ var init_WizardContainer = __esm({
36134
35560
  init_Stack();
36135
35561
  init_Icon();
36136
35562
  init_cn();
36137
- init_useTranslate();
36138
35563
  WizardContainer = ({
36139
35564
  steps,
36140
35565
  currentStep: controlledStep,
@@ -36708,7 +36133,6 @@ var init_SignaturePad = __esm({
36708
36133
  init_LoadingState();
36709
36134
  init_ErrorState();
36710
36135
  init_useEventBus();
36711
- init_useTranslate();
36712
36136
  SignaturePad = ({
36713
36137
  label,
36714
36138
  helperText,
@@ -36902,7 +36326,6 @@ var init_DocumentViewer = __esm({
36902
36326
  init_EmptyState();
36903
36327
  init_Tabs();
36904
36328
  init_useEventBus();
36905
- init_useTranslate();
36906
36329
  DocumentViewer = ({
36907
36330
  title,
36908
36331
  src,
@@ -37107,7 +36530,6 @@ var init_GraphCanvas = __esm({
37107
36530
  init_ErrorState();
37108
36531
  init_EmptyState();
37109
36532
  init_useEventBus();
37110
- init_useTranslate();
37111
36533
  GROUP_COLORS2 = [
37112
36534
  "var(--color-primary)",
37113
36535
  "var(--color-success)",
@@ -37845,7 +37267,6 @@ var init_DataTable = __esm({
37845
37267
  init_molecules2();
37846
37268
  init_Icon();
37847
37269
  init_useEventBus();
37848
- init_useTranslate();
37849
37270
  init_types3();
37850
37271
  lookStyles9 = {
37851
37272
  dense: "",
@@ -37992,7 +37413,6 @@ var init_DebuggerBoard = __esm({
37992
37413
  "components/game/organisms/puzzles/debugger/DebuggerBoard.tsx"() {
37993
37414
  init_atoms2();
37994
37415
  init_useEventBus();
37995
- init_useTranslate();
37996
37416
  DebuggerBoard.displayName = "DebuggerBoard";
37997
37417
  }
37998
37418
  });
@@ -38163,7 +37583,6 @@ var init_DetailPanel = __esm({
38163
37583
  init_cn();
38164
37584
  init_getNestedValue();
38165
37585
  init_useEventBus();
38166
- init_useTranslate();
38167
37586
  ReactMarkdown2 = lazy(() => import('react-markdown'));
38168
37587
  DetailPanel = ({
38169
37588
  title: propTitle,
@@ -38742,7 +38161,6 @@ var init_TraitStateViewer = __esm({
38742
38161
  "components/game/organisms/TraitStateViewer.tsx"() {
38743
38162
  "use client";
38744
38163
  init_cn();
38745
- init_useTranslate();
38746
38164
  init_Box();
38747
38165
  init_Typography();
38748
38166
  init_Stack();
@@ -38801,7 +38219,6 @@ var init_RuleEditor = __esm({
38801
38219
  "components/game/organisms/puzzles/event-handler/RuleEditor.tsx"() {
38802
38220
  init_atoms2();
38803
38221
  init_cn();
38804
- init_useTranslate();
38805
38222
  RuleEditor.displayName = "RuleEditor";
38806
38223
  }
38807
38224
  });
@@ -38876,7 +38293,6 @@ var init_ObjectRulePanel = __esm({
38876
38293
  "components/game/organisms/puzzles/event-handler/ObjectRulePanel.tsx"() {
38877
38294
  init_atoms2();
38878
38295
  init_cn();
38879
- init_useTranslate();
38880
38296
  init_TraitStateViewer();
38881
38297
  init_RuleEditor();
38882
38298
  nextRuleId = 1;
@@ -38921,7 +38337,6 @@ var init_EventLog = __esm({
38921
38337
  "components/game/organisms/puzzles/event-handler/EventLog.tsx"() {
38922
38338
  init_atoms2();
38923
38339
  init_cn();
38924
- init_useTranslate();
38925
38340
  STATUS_STYLES = {
38926
38341
  pending: "text-muted-foreground",
38927
38342
  active: "text-primary animate-pulse",
@@ -39135,7 +38550,6 @@ var init_EventHandlerBoard = __esm({
39135
38550
  init_atoms2();
39136
38551
  init_cn();
39137
38552
  init_useEventBus();
39138
- init_useTranslate();
39139
38553
  init_TraitStateViewer();
39140
38554
  init_ObjectRulePanel();
39141
38555
  init_EventLog();
@@ -39205,7 +38619,6 @@ var init_FeatureGridOrganism = __esm({
39205
38619
  "use client";
39206
38620
  init_cn();
39207
38621
  init_useEventBus();
39208
- init_useTranslate();
39209
38622
  init_Stack();
39210
38623
  init_Typography();
39211
38624
  init_FeatureGrid();
@@ -39388,7 +38801,6 @@ var init_Form = __esm({
39388
38801
  init_RelationSelect();
39389
38802
  init_Alert();
39390
38803
  init_useEventBus();
39391
- init_useTranslate();
39392
38804
  init_debug();
39393
38805
  layoutStyles = {
39394
38806
  vertical: "flex flex-col",
@@ -40548,7 +39960,6 @@ var init_HeroOrganism = __esm({
40548
39960
  "use client";
40549
39961
  init_cn();
40550
39962
  init_useEventBus();
40551
- init_useTranslate();
40552
39963
  init_HeroSection();
40553
39964
  init_LoadingState();
40554
39965
  init_ErrorState();
@@ -40654,7 +40065,6 @@ var LandingPageTemplate;
40654
40065
  var init_LandingPageTemplate = __esm({
40655
40066
  "components/marketing/templates/LandingPageTemplate.tsx"() {
40656
40067
  init_cn();
40657
- init_useTranslate();
40658
40068
  init_Stack();
40659
40069
  init_Box();
40660
40070
  init_Container();
@@ -40854,7 +40264,6 @@ var init_List = __esm({
40854
40264
  init_cn();
40855
40265
  init_getNestedValue();
40856
40266
  init_useEventBus();
40857
- init_useTranslate();
40858
40267
  init_types3();
40859
40268
  STATUS_STYLES2 = {
40860
40269
  complete: {
@@ -41349,7 +40758,6 @@ var init_MasterDetail = __esm({
41349
40758
  "components/core/organisms/MasterDetail.tsx"() {
41350
40759
  "use client";
41351
40760
  init_DataTable();
41352
- init_useTranslate();
41353
40761
  MasterDetail.displayName = "MasterDetail";
41354
40762
  }
41355
40763
  });
@@ -41358,7 +40766,6 @@ var init_MasterDetailLayout = __esm({
41358
40766
  "components/core/organisms/layout/MasterDetailLayout.tsx"() {
41359
40767
  init_cn();
41360
40768
  init_Typography();
41361
- init_useTranslate();
41362
40769
  DefaultEmptyDetail = () => {
41363
40770
  const { t } = useTranslate();
41364
40771
  return /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center h-full border-2 border-dashed border-border", children: /* @__PURE__ */ jsx(
@@ -41419,7 +40826,6 @@ var init_MediaGallery = __esm({
41419
40826
  init_ErrorState();
41420
40827
  init_EmptyState();
41421
40828
  init_useEventBus();
41422
- init_useTranslate();
41423
40829
  COLUMN_CLASSES = {
41424
40830
  2: "grid-cols-2",
41425
40831
  3: "grid-cols-2 sm:grid-cols-3",
@@ -41820,7 +41226,6 @@ var init_NegotiatorBoard = __esm({
41820
41226
  "components/game/organisms/puzzles/negotiator/NegotiatorBoard.tsx"() {
41821
41227
  init_atoms2();
41822
41228
  init_useEventBus();
41823
- init_useTranslate();
41824
41229
  NegotiatorBoard.displayName = "NegotiatorBoard";
41825
41230
  }
41826
41231
  });
@@ -41830,7 +41235,6 @@ var init_PricingOrganism = __esm({
41830
41235
  "use client";
41831
41236
  init_cn();
41832
41237
  init_useEventBus();
41833
- init_useTranslate();
41834
41238
  init_Stack();
41835
41239
  init_Typography();
41836
41240
  init_PricingGrid();
@@ -41880,7 +41284,6 @@ var PricingPageTemplate;
41880
41284
  var init_PricingPageTemplate = __esm({
41881
41285
  "components/marketing/templates/PricingPageTemplate.tsx"() {
41882
41286
  init_cn();
41883
- init_useTranslate();
41884
41287
  init_Stack();
41885
41288
  init_Box();
41886
41289
  init_Container();
@@ -42463,7 +41866,6 @@ var init_TraitsTab = __esm({
42463
41866
  init_Typography();
42464
41867
  init_Stack();
42465
41868
  init_EmptyState();
42466
- init_useTranslate();
42467
41869
  TraitsTab.displayName = "TraitsTab";
42468
41870
  }
42469
41871
  });
@@ -42541,7 +41943,6 @@ var init_TicksTab = __esm({
42541
41943
  init_Stack();
42542
41944
  init_Card();
42543
41945
  init_EmptyState();
42544
- init_useTranslate();
42545
41946
  TicksTab.displayName = "TicksTab";
42546
41947
  }
42547
41948
  });
@@ -42615,7 +42016,6 @@ var init_EntitiesTab = __esm({
42615
42016
  init_Typography();
42616
42017
  init_Stack();
42617
42018
  init_EmptyState();
42618
- init_useTranslate();
42619
42019
  EntitiesTab.displayName = "EntitiesTab";
42620
42020
  }
42621
42021
  });
@@ -42732,7 +42132,6 @@ var init_EventFlowTab = __esm({
42732
42132
  init_Button();
42733
42133
  init_Checkbox();
42734
42134
  init_EmptyState();
42735
- init_useTranslate();
42736
42135
  TYPE_BADGES = {
42737
42136
  trait: { variant: "primary", icon: "\u{1F504}" },
42738
42137
  tick: { variant: "warning", icon: "\u23F1\uFE0F" },
@@ -42827,7 +42226,6 @@ var init_GuardsPanel = __esm({
42827
42226
  init_ButtonGroup();
42828
42227
  init_Button();
42829
42228
  init_EmptyState();
42830
- init_useTranslate();
42831
42229
  GuardsPanel.displayName = "GuardsPanel";
42832
42230
  }
42833
42231
  });
@@ -42903,7 +42301,6 @@ var init_VerificationTab = __esm({
42903
42301
  init_Typography();
42904
42302
  init_Stack();
42905
42303
  init_EmptyState();
42906
- init_useTranslate();
42907
42304
  STATUS_CONFIG = {
42908
42305
  pass: { variant: "success", icon: "\u2713", label: "PASS" },
42909
42306
  fail: { variant: "danger", icon: "\u2717", label: "FAIL" },
@@ -43039,7 +42436,6 @@ var init_TransitionTimeline = __esm({
43039
42436
  init_Typography();
43040
42437
  init_EmptyState();
43041
42438
  init_Checkbox();
43042
- init_useTranslate();
43043
42439
  EFFECT_STATUS_VARIANT = {
43044
42440
  executed: "success",
43045
42441
  failed: "danger",
@@ -43129,7 +42525,6 @@ var init_ServerBridgeTab = __esm({
43129
42525
  init_Stack();
43130
42526
  init_Card();
43131
42527
  init_EmptyState();
43132
- init_useTranslate();
43133
42528
  ServerBridgeTab.displayName = "ServerBridgeTab";
43134
42529
  }
43135
42530
  });
@@ -43294,7 +42689,6 @@ var init_EventDispatcherTab = __esm({
43294
42689
  init_Stack();
43295
42690
  init_EmptyState();
43296
42691
  init_useEventBus();
43297
- init_useTranslate();
43298
42692
  EventDispatcherTab.displayName = "EventDispatcherTab";
43299
42693
  }
43300
42694
  });
@@ -43669,7 +43063,6 @@ var init_RuntimeDebugger2 = __esm({
43669
43063
  init_TransitionTimeline();
43670
43064
  init_ServerBridgeTab();
43671
43065
  init_EventDispatcherTab();
43672
- init_useTranslate();
43673
43066
  init_RuntimeDebugger();
43674
43067
  RuntimeDebugger.displayName = "RuntimeDebugger";
43675
43068
  }
@@ -44156,7 +43549,6 @@ var init_SequencerBoard = __esm({
44156
43549
  init_atoms2();
44157
43550
  init_cn();
44158
43551
  init_useEventBus();
44159
- init_useTranslate();
44160
43552
  init_TraitStateViewer();
44161
43553
  init_SequenceBar();
44162
43554
  init_ActionPalette();
@@ -44175,7 +43567,6 @@ var init_ShowcaseOrganism = __esm({
44175
43567
  "use client";
44176
43568
  init_cn();
44177
43569
  init_useEventBus();
44178
- init_useTranslate();
44179
43570
  init_Stack();
44180
43571
  init_Typography();
44181
43572
  init_SimpleGrid();
@@ -44734,7 +44125,6 @@ var init_SimulatorBoard = __esm({
44734
44125
  "components/game/organisms/puzzles/simulator/SimulatorBoard.tsx"() {
44735
44126
  init_atoms2();
44736
44127
  init_useEventBus();
44737
- init_useTranslate();
44738
44128
  SimulatorBoard.displayName = "SimulatorBoard";
44739
44129
  }
44740
44130
  });
@@ -44839,7 +44229,6 @@ var init_StatCard = __esm({
44839
44229
  init_Button();
44840
44230
  init_Sparkline();
44841
44231
  init_useEventBus();
44842
- init_useTranslate();
44843
44232
  init_Icon();
44844
44233
  StatCard = ({
44845
44234
  label: propLabel,
@@ -45195,7 +44584,6 @@ var init_VariablePanel = __esm({
45195
44584
  "components/game/organisms/puzzles/state-architect/VariablePanel.tsx"() {
45196
44585
  init_atoms2();
45197
44586
  init_cn();
45198
- init_useTranslate();
45199
44587
  VariablePanel.displayName = "VariablePanel";
45200
44588
  }
45201
44589
  });
@@ -45512,7 +44900,6 @@ var init_StateArchitectBoard = __esm({
45512
44900
  init_atoms2();
45513
44901
  init_cn();
45514
44902
  init_useEventBus();
45515
- init_useTranslate();
45516
44903
  init_TraitStateViewer();
45517
44904
  init_StateNode();
45518
44905
  init_TransitionArrow();
@@ -45532,7 +44919,6 @@ var init_StatsOrganism = __esm({
45532
44919
  "components/marketing/organisms/StatsOrganism.tsx"() {
45533
44920
  "use client";
45534
44921
  init_cn();
45535
- init_useTranslate();
45536
44922
  init_StatsGrid();
45537
44923
  init_LoadingState();
45538
44924
  init_ErrorState();
@@ -45575,7 +44961,6 @@ var init_StepFlowOrganism = __esm({
45575
44961
  "components/core/organisms/StepFlowOrganism.tsx"() {
45576
44962
  "use client";
45577
44963
  init_cn();
45578
- init_useTranslate();
45579
44964
  init_Stack();
45580
44965
  init_Typography();
45581
44966
  init_StepFlow();
@@ -45745,7 +45130,6 @@ var init_TeamOrganism = __esm({
45745
45130
  "components/marketing/organisms/TeamOrganism.tsx"() {
45746
45131
  "use client";
45747
45132
  init_cn();
45748
- init_useTranslate();
45749
45133
  init_Stack();
45750
45134
  init_Typography();
45751
45135
  init_SimpleGrid();
@@ -45803,7 +45187,6 @@ var init_Timeline = __esm({
45803
45187
  init_LoadingState();
45804
45188
  init_ErrorState();
45805
45189
  init_EmptyState();
45806
- init_useTranslate();
45807
45190
  lookStyles10 = {
45808
45191
  "vertical-compact": "gap-1 [&>*]:py-1",
45809
45192
  "vertical-spacious": "",
@@ -47875,7 +47258,6 @@ var init_UISlotRenderer = __esm({
47875
47258
  init_Box();
47876
47259
  init_Typography();
47877
47260
  init_useEventBus();
47878
- init_useTranslate();
47879
47261
  init_slot_types();
47880
47262
  init_cn();
47881
47263
  init_ErrorBoundary();
@@ -47931,10 +47313,7 @@ var init_UISlotRenderer = __esm({
47931
47313
  UISlotRenderer.displayName = "UISlotRenderer";
47932
47314
  }
47933
47315
  });
47934
-
47935
- // hooks/index.ts
47936
- init_useEventBus();
47937
- var log2 = createLogger("almadar:ui:effects:client-handlers");
47316
+ var log = createLogger("almadar:ui:effects:client-handlers");
47938
47317
  function createClientEffectHandlers(options) {
47939
47318
  const { eventBus, slotSetter, navigate, notify, callService } = options;
47940
47319
  return {
@@ -47943,10 +47322,10 @@ function createClientEffectHandlers(options) {
47943
47322
  eventBus.emit(prefixedEvent, payload);
47944
47323
  },
47945
47324
  persist: async () => {
47946
- log2.warn("persist is server-side only, ignored on client");
47325
+ log.warn("persist is server-side only, ignored on client");
47947
47326
  },
47948
47327
  set: () => {
47949
- log2.warn("set is server-side only, ignored on client");
47328
+ log.warn("set is server-side only, ignored on client");
47950
47329
  },
47951
47330
  callService: async (service, action, params) => {
47952
47331
  if (callService) return callService(service, action, params);
@@ -47975,10 +47354,10 @@ function createClientEffectHandlers(options) {
47975
47354
  slotSetter.addPattern(slot, pattern, props);
47976
47355
  },
47977
47356
  navigate: navigate ?? ((path) => {
47978
- log2.warn("No navigate handler, ignoring", { path });
47357
+ log.warn("No navigate handler, ignoring", { path });
47979
47358
  }),
47980
47359
  notify: notify ?? ((msg, type) => {
47981
- log2.debug("notify", { type, message: msg });
47360
+ log.debug("notify", { type, message: msg });
47982
47361
  })
47983
47362
  };
47984
47363
  }
@@ -48128,7 +47507,7 @@ function normalizeEventKey(eventKey) {
48128
47507
  return eventKey.startsWith("UI:") ? eventKey.slice(3) : eventKey;
48129
47508
  }
48130
47509
  function useTraitStateMachine(traitBindings, uiSlots, options) {
48131
- const eventBus = useEventBus();
47510
+ const eventBus = useEventBus$1();
48132
47511
  const { entities } = useEntitySchema();
48133
47512
  const traitConfigsByName = options?.traitConfigsByName;
48134
47513
  const orbitalsByTrait = options?.orbitalsByTrait;