@almadar/ui 5.33.0 → 5.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/avl/index.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import * as React88 from 'react';
3
- import React88__default, { createContext, useState, useMemo, useRef, useEffect, useContext, useCallback, Suspense, useLayoutEffect, Profiler, useReducer, useSyncExternalStore, lazy, useId } from 'react';
2
+ import * as React91 from 'react';
3
+ import React91__default, { createContext, useState, useMemo, useRef, useEffect, useContext, useCallback, Suspense, useLayoutEffect, Profiler, useReducer, useSyncExternalStore, lazy, useId } from 'react';
4
4
  import { OrbitalProvider, EventBusContext, useTraitScope, VerificationProvider, TraitScopeProvider } from '@almadar/ui/providers';
5
5
  import { createLogger, isLogLevelEnabled } from '@almadar/logger';
6
6
  import ELK from 'elkjs/lib/elk.bundled.js';
7
7
  import { MarkerType, useReactFlow, Handle, Position, getBezierPath, EdgeLabelRenderer, useNodeId, ReactFlowProvider, BaseEdge, useNodesState, useEdgesState, ReactFlow, Controls, Background, BackgroundVariant } from '@xyflow/react';
8
8
  import { useTranslate, useEventBus as useEventBus$1 } from '@almadar/ui/hooks';
9
9
  import * as LucideIcons2 from 'lucide-react';
10
- import { Loader2, X, Code, FileText, WrapText, Check, Copy, List, Printer, ChevronRight, ChevronLeft, GitBranch, Pencil, Eye, Plus, ArrowRight, Trash, 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
+ import { Loader2, X, Code, FileText, WrapText, Check, Copy, Lightbulb, CheckCircle, List, Printer, ChevronRight, ChevronLeft, GitBranch, Pencil, Eye, Plus, ArrowRight, Trash, RotateCcw, Play, Terminal, XCircle, AlertTriangle, Trash2, Link2, ZoomOut, ZoomIn, Download, Menu as Menu$1, Package, Calendar, MoreHorizontal, Image as Image$1, Upload, ArrowLeft, HelpCircle, PauseCircle, Search, Type, Heading1, Heading2, Heading3, ListOrdered, Quote, Minus, Eraser, TrendingUp, TrendingDown, AlertCircle, Circle, Clock, CheckCircle2, Pause, SkipForward, Bug, Send, ChevronUp, ChevronDown, Wrench, Tag, User, DollarSign, Zap, Sword, Move, Heart, Shield } from 'lucide-react';
11
11
  import * as PhosphorIcons from '@phosphor-icons/react';
12
12
  import * as TablerIcons from '@tabler/icons-react';
13
13
  import * as FaIcons from 'react-icons/fa';
@@ -3467,7 +3467,7 @@ var init_Box = __esm({
3467
3467
  fixed: "fixed",
3468
3468
  sticky: "sticky"
3469
3469
  };
3470
- Box = React88__default.forwardRef(
3470
+ Box = React91__default.forwardRef(
3471
3471
  ({
3472
3472
  padding,
3473
3473
  paddingX,
@@ -3517,7 +3517,7 @@ var init_Box = __esm({
3517
3517
  onMouseLeave?.(e);
3518
3518
  }, [hoverEvent, eventBus, onMouseLeave]);
3519
3519
  const isClickable = action || onClick;
3520
- return React88__default.createElement(
3520
+ return React91__default.createElement(
3521
3521
  Component,
3522
3522
  {
3523
3523
  ref,
@@ -4107,7 +4107,7 @@ var init_MiniStateMachine = __esm({
4107
4107
  const x = 2 + i * (NODE_W + GAP + ARROW_W + GAP);
4108
4108
  const tc = transitionCounts[s.name] ?? 0;
4109
4109
  const role = getStateRole(s.name, s.isInitial, s.isTerminal, tc, maxTC);
4110
- return /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
4110
+ return /* @__PURE__ */ jsxs(React91__default.Fragment, { children: [
4111
4111
  /* @__PURE__ */ jsx(
4112
4112
  AvlState,
4113
4113
  {
@@ -5178,7 +5178,7 @@ var init_Icon = __esm({
5178
5178
  const directIcon = typeof icon === "string" ? void 0 : icon;
5179
5179
  const effectiveName = typeof icon === "string" ? icon : name;
5180
5180
  const family = useIconFamily();
5181
- const RenderedComponent = React88__default.useMemo(() => {
5181
+ const RenderedComponent = React91__default.useMemo(() => {
5182
5182
  if (directIcon) return null;
5183
5183
  return effectiveName ? resolveIconForFamily(effectiveName, family) : null;
5184
5184
  }, [directIcon, effectiveName, family]);
@@ -5237,7 +5237,7 @@ function resolveIconProp(value, sizeClass) {
5237
5237
  const IconComp = value;
5238
5238
  return /* @__PURE__ */ jsx(IconComp, { className: sizeClass });
5239
5239
  }
5240
- if (React88__default.isValidElement(value)) {
5240
+ if (React91__default.isValidElement(value)) {
5241
5241
  return value;
5242
5242
  }
5243
5243
  if (typeof value === "object" && value !== null && "render" in value) {
@@ -5313,7 +5313,7 @@ var init_Button = __esm({
5313
5313
  md: "h-icon-default w-icon-default",
5314
5314
  lg: "h-icon-default w-icon-default"
5315
5315
  };
5316
- Button = React88__default.forwardRef(
5316
+ Button = React91__default.forwardRef(
5317
5317
  ({
5318
5318
  className,
5319
5319
  variant = "primary",
@@ -5378,7 +5378,7 @@ var Dialog;
5378
5378
  var init_Dialog = __esm({
5379
5379
  "components/core/atoms/Dialog.tsx"() {
5380
5380
  init_cn();
5381
- Dialog = React88__default.forwardRef(
5381
+ Dialog = React91__default.forwardRef(
5382
5382
  ({
5383
5383
  role = "dialog",
5384
5384
  "aria-modal": ariaModal = true,
@@ -5873,7 +5873,7 @@ var init_Badge = __esm({
5873
5873
  md: "px-2.5 py-1 text-sm",
5874
5874
  lg: "px-3 py-1.5 text-base"
5875
5875
  };
5876
- Badge = React88__default.forwardRef(
5876
+ Badge = React91__default.forwardRef(
5877
5877
  ({ className, variant = "default", size = "sm", amount, label, icon, children, onRemove, removeLabel, ...props }, ref) => {
5878
5878
  const iconSizes3 = {
5879
5879
  sm: "h-icon-default w-icon-default",
@@ -6209,7 +6209,7 @@ var init_SvgFlow = __esm({
6209
6209
  width = 100,
6210
6210
  height = 100
6211
6211
  }) => {
6212
- const markerId = React88__default.useMemo(() => {
6212
+ const markerId = React91__default.useMemo(() => {
6213
6213
  flowIdCounter += 1;
6214
6214
  return `almadar-flow-arrow-${flowIdCounter}`;
6215
6215
  }, []);
@@ -6802,7 +6802,7 @@ var init_SvgRing = __esm({
6802
6802
  width = 100,
6803
6803
  height = 100
6804
6804
  }) => {
6805
- const gradientId = React88__default.useMemo(() => {
6805
+ const gradientId = React91__default.useMemo(() => {
6806
6806
  ringIdCounter += 1;
6807
6807
  return `almadar-ring-glow-${ringIdCounter}`;
6808
6808
  }, []);
@@ -6983,7 +6983,7 @@ var init_Input = __esm({
6983
6983
  init_cn();
6984
6984
  init_Icon();
6985
6985
  init_useEventBus();
6986
- Input = React88__default.forwardRef(
6986
+ Input = React91__default.forwardRef(
6987
6987
  ({
6988
6988
  className,
6989
6989
  inputType,
@@ -7143,7 +7143,7 @@ var Label;
7143
7143
  var init_Label = __esm({
7144
7144
  "components/core/atoms/Label.tsx"() {
7145
7145
  init_cn();
7146
- Label = React88__default.forwardRef(
7146
+ Label = React91__default.forwardRef(
7147
7147
  ({ className, required, children, ...props }, ref) => {
7148
7148
  return /* @__PURE__ */ jsxs(
7149
7149
  "label",
@@ -7170,7 +7170,7 @@ var init_Textarea = __esm({
7170
7170
  "components/core/atoms/Textarea.tsx"() {
7171
7171
  init_cn();
7172
7172
  init_useEventBus();
7173
- Textarea = React88__default.forwardRef(
7173
+ Textarea = React91__default.forwardRef(
7174
7174
  ({ className, error, onChange, ...props }, ref) => {
7175
7175
  const eventBus = useEventBus();
7176
7176
  const handleChange = (e) => {
@@ -7409,7 +7409,7 @@ var init_Select = __esm({
7409
7409
  init_cn();
7410
7410
  init_Icon();
7411
7411
  init_useEventBus();
7412
- Select = React88__default.forwardRef(
7412
+ Select = React91__default.forwardRef(
7413
7413
  (props, _ref) => {
7414
7414
  const { multiple, searchable, clearable } = props;
7415
7415
  if (multiple || searchable || clearable) {
@@ -7426,7 +7426,7 @@ var init_Checkbox = __esm({
7426
7426
  "components/core/atoms/Checkbox.tsx"() {
7427
7427
  init_cn();
7428
7428
  init_useEventBus();
7429
- Checkbox = React88__default.forwardRef(
7429
+ Checkbox = React91__default.forwardRef(
7430
7430
  ({ className, label, id, onChange, ...props }, ref) => {
7431
7431
  const inputId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
7432
7432
  const eventBus = useEventBus();
@@ -7480,7 +7480,7 @@ var init_Spinner = __esm({
7480
7480
  md: "h-6 w-6",
7481
7481
  lg: "h-8 w-8"
7482
7482
  };
7483
- Spinner = React88__default.forwardRef(
7483
+ Spinner = React91__default.forwardRef(
7484
7484
  ({ className, size = "md", overlay, ...props }, ref) => {
7485
7485
  if (overlay) {
7486
7486
  return /* @__PURE__ */ jsx(
@@ -7570,7 +7570,7 @@ var init_Card = __esm({
7570
7570
  chip: "shadow-none rounded-pill border-[length:var(--border-width)] border-border",
7571
7571
  "tile-image-first": "p-0 overflow-hidden"
7572
7572
  };
7573
- Card = React88__default.forwardRef(
7573
+ Card = React91__default.forwardRef(
7574
7574
  ({
7575
7575
  className,
7576
7576
  variant = "bordered",
@@ -7618,9 +7618,9 @@ var init_Card = __esm({
7618
7618
  }
7619
7619
  );
7620
7620
  Card.displayName = "Card";
7621
- CardHeader = React88__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
7621
+ CardHeader = React91__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
7622
7622
  CardHeader.displayName = "CardHeader";
7623
- CardTitle = React88__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7623
+ CardTitle = React91__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7624
7624
  "h3",
7625
7625
  {
7626
7626
  ref,
@@ -7633,11 +7633,11 @@ var init_Card = __esm({
7633
7633
  }
7634
7634
  ));
7635
7635
  CardTitle.displayName = "CardTitle";
7636
- CardContent = React88__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
7636
+ CardContent = React91__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
7637
7637
  CardContent.displayName = "CardContent";
7638
7638
  CardBody = CardContent;
7639
7639
  CardBody.displayName = "CardBody";
7640
- CardFooter = React88__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7640
+ CardFooter = React91__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7641
7641
  "div",
7642
7642
  {
7643
7643
  ref,
@@ -7692,7 +7692,7 @@ var init_FilterPill = __esm({
7692
7692
  md: "w-3.5 h-3.5",
7693
7693
  lg: "w-4 h-4"
7694
7694
  };
7695
- FilterPill = React88__default.forwardRef(
7695
+ FilterPill = React91__default.forwardRef(
7696
7696
  ({
7697
7697
  className,
7698
7698
  variant = "default",
@@ -7821,8 +7821,8 @@ var init_Avatar = __esm({
7821
7821
  actionPayload
7822
7822
  }) => {
7823
7823
  const eventBus = useEventBus();
7824
- const [imgFailed, setImgFailed] = React88__default.useState(false);
7825
- React88__default.useEffect(() => {
7824
+ const [imgFailed, setImgFailed] = React91__default.useState(false);
7825
+ React91__default.useEffect(() => {
7826
7826
  setImgFailed(false);
7827
7827
  }, [src]);
7828
7828
  const initials = providedInitials ?? (name ? generateInitials(name) : void 0);
@@ -8207,7 +8207,7 @@ var init_Radio = __esm({
8207
8207
  md: "w-2.5 h-2.5",
8208
8208
  lg: "w-3 h-3"
8209
8209
  };
8210
- Radio = React88__default.forwardRef(
8210
+ Radio = React91__default.forwardRef(
8211
8211
  ({
8212
8212
  label,
8213
8213
  helperText,
@@ -8224,12 +8224,12 @@ var init_Radio = __esm({
8224
8224
  onChange,
8225
8225
  ...props
8226
8226
  }, ref) => {
8227
- const reactId = React88__default.useId();
8227
+ const reactId = React91__default.useId();
8228
8228
  const baseId = id || `radio-${reactId}`;
8229
8229
  const hasError = !!error;
8230
8230
  const eventBus = useEventBus();
8231
- const [selected, setSelected] = React88__default.useState(value);
8232
- React88__default.useEffect(() => {
8231
+ const [selected, setSelected] = React91__default.useState(value);
8232
+ React91__default.useEffect(() => {
8233
8233
  if (value !== void 0) setSelected(value);
8234
8234
  }, [value]);
8235
8235
  const pick = (next, e) => {
@@ -8411,7 +8411,7 @@ var init_Switch = __esm({
8411
8411
  "components/core/atoms/Switch.tsx"() {
8412
8412
  "use client";
8413
8413
  init_cn();
8414
- Switch = React88.forwardRef(
8414
+ Switch = React91.forwardRef(
8415
8415
  ({
8416
8416
  checked,
8417
8417
  defaultChecked = false,
@@ -8422,10 +8422,10 @@ var init_Switch = __esm({
8422
8422
  name,
8423
8423
  className
8424
8424
  }, ref) => {
8425
- const [isChecked, setIsChecked] = React88.useState(
8425
+ const [isChecked, setIsChecked] = React91.useState(
8426
8426
  checked !== void 0 ? checked : defaultChecked
8427
8427
  );
8428
- React88.useEffect(() => {
8428
+ React91.useEffect(() => {
8429
8429
  if (checked !== void 0) {
8430
8430
  setIsChecked(checked);
8431
8431
  }
@@ -8870,7 +8870,7 @@ var Aside;
8870
8870
  var init_Aside = __esm({
8871
8871
  "components/core/atoms/Aside.tsx"() {
8872
8872
  init_cn();
8873
- Aside = React88__default.forwardRef(
8873
+ Aside = React91__default.forwardRef(
8874
8874
  ({ className, children, ...rest }, ref) => /* @__PURE__ */ jsx("aside", { ref, className: cn(className), ...rest, children })
8875
8875
  );
8876
8876
  Aside.displayName = "Aside";
@@ -8948,8 +8948,8 @@ var init_LawReferenceTooltip = __esm({
8948
8948
  className
8949
8949
  }) => {
8950
8950
  const { t } = useTranslate();
8951
- const [isVisible, setIsVisible] = React88__default.useState(false);
8952
- const timeoutRef = React88__default.useRef(null);
8951
+ const [isVisible, setIsVisible] = React91__default.useState(false);
8952
+ const timeoutRef = React91__default.useRef(null);
8953
8953
  const handleMouseEnter = () => {
8954
8954
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
8955
8955
  timeoutRef.current = setTimeout(() => setIsVisible(true), 200);
@@ -8958,7 +8958,7 @@ var init_LawReferenceTooltip = __esm({
8958
8958
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
8959
8959
  setIsVisible(false);
8960
8960
  };
8961
- React88__default.useEffect(() => {
8961
+ React91__default.useEffect(() => {
8962
8962
  return () => {
8963
8963
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
8964
8964
  };
@@ -9168,7 +9168,7 @@ var init_StatusDot = __esm({
9168
9168
  md: "w-2.5 h-2.5",
9169
9169
  lg: "w-3 h-3"
9170
9170
  };
9171
- StatusDot = React88__default.forwardRef(
9171
+ StatusDot = React91__default.forwardRef(
9172
9172
  ({ className, status = "offline", pulse = false, size = "md", label, ...props }, ref) => {
9173
9173
  return /* @__PURE__ */ jsx(
9174
9174
  "span",
@@ -9222,7 +9222,7 @@ var init_TrendIndicator = __esm({
9222
9222
  down: "trending-down",
9223
9223
  flat: "arrow-right"
9224
9224
  };
9225
- TrendIndicator = React88__default.forwardRef(
9225
+ TrendIndicator = React91__default.forwardRef(
9226
9226
  ({
9227
9227
  className,
9228
9228
  value,
@@ -9289,7 +9289,7 @@ var init_RangeSlider = __esm({
9289
9289
  md: "w-4 h-4",
9290
9290
  lg: "w-5 h-5"
9291
9291
  };
9292
- RangeSlider = React88__default.forwardRef(
9292
+ RangeSlider = React91__default.forwardRef(
9293
9293
  ({
9294
9294
  className,
9295
9295
  min = 0,
@@ -9797,7 +9797,7 @@ var init_ContentSection = __esm({
9797
9797
  md: "py-16",
9798
9798
  lg: "py-24"
9799
9799
  };
9800
- ContentSection = React88__default.forwardRef(
9800
+ ContentSection = React91__default.forwardRef(
9801
9801
  ({ children, background = "default", padding = "lg", id, className }, ref) => {
9802
9802
  return /* @__PURE__ */ jsx(
9803
9803
  Box,
@@ -10331,7 +10331,7 @@ var init_AnimatedReveal = __esm({
10331
10331
  "scale-up": { opacity: 1, transform: "scale(1) translateY(0)" },
10332
10332
  "none": {}
10333
10333
  };
10334
- AnimatedReveal = React88__default.forwardRef(
10334
+ AnimatedReveal = React91__default.forwardRef(
10335
10335
  ({
10336
10336
  trigger = "scroll",
10337
10337
  animation = "fade-up",
@@ -10491,7 +10491,7 @@ var init_AnimatedGraphic = __esm({
10491
10491
  "components/marketing/atoms/AnimatedGraphic.tsx"() {
10492
10492
  "use client";
10493
10493
  init_cn();
10494
- AnimatedGraphic = React88__default.forwardRef(
10494
+ AnimatedGraphic = React91__default.forwardRef(
10495
10495
  ({
10496
10496
  src,
10497
10497
  svgContent,
@@ -10514,7 +10514,7 @@ var init_AnimatedGraphic = __esm({
10514
10514
  const fetchedSvg = useFetchedSvg(svgContent ? void 0 : src);
10515
10515
  const resolvedSvg = svgContent ?? fetchedSvg;
10516
10516
  const prevAnimateRef = useRef(animate);
10517
- const setRef = React88__default.useCallback(
10517
+ const setRef = React91__default.useCallback(
10518
10518
  (node) => {
10519
10519
  containerRef.current = node;
10520
10520
  if (typeof ref === "function") ref(node);
@@ -10739,9 +10739,9 @@ function ScoreDisplay({
10739
10739
  ...rest
10740
10740
  }) {
10741
10741
  const resolvedValue = typeof value === "number" && !Number.isNaN(value) ? value : typeof rest.score === "number" && !Number.isNaN(rest.score) ? rest.score : 0;
10742
- const [displayValue, setDisplayValue] = React88.useState(resolvedValue);
10743
- const [isAnimating, setIsAnimating] = React88.useState(false);
10744
- React88.useEffect(() => {
10742
+ const [displayValue, setDisplayValue] = React91.useState(resolvedValue);
10743
+ const [isAnimating, setIsAnimating] = React91.useState(false);
10744
+ React91.useEffect(() => {
10745
10745
  if (!animated || displayValue === resolvedValue) {
10746
10746
  setDisplayValue(resolvedValue);
10747
10747
  return;
@@ -10812,9 +10812,9 @@ function ControlButton({
10812
10812
  className
10813
10813
  }) {
10814
10814
  const eventBus = useEventBus();
10815
- const [isPressed, setIsPressed] = React88.useState(false);
10815
+ const [isPressed, setIsPressed] = React91.useState(false);
10816
10816
  const actualPressed = pressed ?? isPressed;
10817
- const handlePointerDown = React88.useCallback(
10817
+ const handlePointerDown = React91.useCallback(
10818
10818
  (e) => {
10819
10819
  e.preventDefault();
10820
10820
  if (disabled) return;
@@ -10824,7 +10824,7 @@ function ControlButton({
10824
10824
  },
10825
10825
  [disabled, pressEvent, eventBus, onPress]
10826
10826
  );
10827
- const handlePointerUp = React88.useCallback(
10827
+ const handlePointerUp = React91.useCallback(
10828
10828
  (e) => {
10829
10829
  e.preventDefault();
10830
10830
  if (disabled) return;
@@ -10834,7 +10834,7 @@ function ControlButton({
10834
10834
  },
10835
10835
  [disabled, releaseEvent, eventBus, onRelease]
10836
10836
  );
10837
- const handlePointerLeave = React88.useCallback(
10837
+ const handlePointerLeave = React91.useCallback(
10838
10838
  (e) => {
10839
10839
  if (isPressed) {
10840
10840
  setIsPressed(false);
@@ -11337,8 +11337,8 @@ function XPBar({
11337
11337
  }) {
11338
11338
  const sizes = sizeMap9[size];
11339
11339
  const percentage = max > 0 ? Math.max(0, Math.min(100, current / max * 100)) : 0;
11340
- const [fillWidth, setFillWidth] = React88.useState(animated ? 0 : percentage);
11341
- React88.useEffect(() => {
11340
+ const [fillWidth, setFillWidth] = React91.useState(animated ? 0 : percentage);
11341
+ React91.useEffect(() => {
11342
11342
  if (!animated) {
11343
11343
  setFillWidth(percentage);
11344
11344
  return;
@@ -11775,9 +11775,9 @@ function MiniMap({
11775
11775
  viewportRect,
11776
11776
  className
11777
11777
  }) {
11778
- const canvasRef = React88.useRef(null);
11779
- const frameRef = React88.useRef(0);
11780
- React88.useEffect(() => {
11778
+ const canvasRef = React91.useRef(null);
11779
+ const frameRef = React91.useRef(0);
11780
+ React91.useEffect(() => {
11781
11781
  const canvas = canvasRef.current;
11782
11782
  if (!canvas) return;
11783
11783
  const ctx = canvas.getContext("2d");
@@ -11951,7 +11951,7 @@ var init_ErrorBoundary = __esm({
11951
11951
  }
11952
11952
  );
11953
11953
  };
11954
- ErrorBoundary = class extends React88__default.Component {
11954
+ ErrorBoundary = class extends React91__default.Component {
11955
11955
  constructor(props) {
11956
11956
  super(props);
11957
11957
  __publicField(this, "reset", () => {
@@ -12986,8 +12986,8 @@ function ActionButtons({
12986
12986
  disabled
12987
12987
  }) {
12988
12988
  const eventBus = useEventBus();
12989
- const [activeButtons, setActiveButtons] = React88.useState(/* @__PURE__ */ new Set());
12990
- const handlePress = React88.useCallback(
12989
+ const [activeButtons, setActiveButtons] = React91.useState(/* @__PURE__ */ new Set());
12990
+ const handlePress = React91.useCallback(
12991
12991
  (id) => {
12992
12992
  setActiveButtons((prev) => new Set(prev).add(id));
12993
12993
  if (actionEvent) eventBus.emit(`UI:${actionEvent}`, { id, pressed: true });
@@ -12995,7 +12995,7 @@ function ActionButtons({
12995
12995
  },
12996
12996
  [actionEvent, eventBus, onAction]
12997
12997
  );
12998
- const handleRelease = React88.useCallback(
12998
+ const handleRelease = React91.useCallback(
12999
12999
  (id) => {
13000
13000
  setActiveButtons((prev) => {
13001
13001
  const next = new Set(prev);
@@ -13191,6 +13191,85 @@ var init_ActionPalette = __esm({
13191
13191
  ActionPalette.displayName = "ActionPalette";
13192
13192
  }
13193
13193
  });
13194
+ var ActivationBlock;
13195
+ var init_ActivationBlock = __esm({
13196
+ "components/core/molecules/ActivationBlock.tsx"() {
13197
+ "use client";
13198
+ init_useEventBus();
13199
+ init_cn();
13200
+ ActivationBlock = ({
13201
+ question,
13202
+ savedResponse,
13203
+ saveEvent = "SAVE_ACTIVATION",
13204
+ className
13205
+ }) => {
13206
+ const [response, setResponse] = useState(savedResponse ?? "");
13207
+ const [isExpanded, setIsExpanded] = useState(!savedResponse);
13208
+ const { emit } = useEventBus();
13209
+ const handleSubmit = () => {
13210
+ emit(`UI:${saveEvent}`, { response });
13211
+ setIsExpanded(false);
13212
+ };
13213
+ return /* @__PURE__ */ jsx(
13214
+ "div",
13215
+ {
13216
+ className: cn(
13217
+ "bg-indigo-50 dark:bg-indigo-900/20 border-2 border-indigo-200 dark:border-indigo-800 rounded-lg p-5 mb-6",
13218
+ className
13219
+ ),
13220
+ children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
13221
+ /* @__PURE__ */ jsx(Lightbulb, { className: "text-indigo-600 dark:text-indigo-400 flex-shrink-0 mt-1", size: 24 }),
13222
+ /* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
13223
+ /* @__PURE__ */ jsx("h4", { className: "font-semibold text-indigo-900 dark:text-indigo-100 mb-2", children: "Before You Begin..." }),
13224
+ /* @__PURE__ */ jsx("p", { className: "text-gray-700 dark:text-gray-300 mb-3 text-sm md:text-base", children: question }),
13225
+ isExpanded ? /* @__PURE__ */ jsxs(Fragment, { children: [
13226
+ /* @__PURE__ */ jsx(
13227
+ "textarea",
13228
+ {
13229
+ className: "w-full p-3 border border-indigo-300 dark:border-indigo-700 rounded-md bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-indigo-500 focus:border-transparent text-sm",
13230
+ placeholder: "Jot down your thoughts...",
13231
+ value: response,
13232
+ onChange: (e) => setResponse(e.target.value),
13233
+ rows: 3
13234
+ }
13235
+ ),
13236
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2 mt-3", children: [
13237
+ /* @__PURE__ */ jsx(
13238
+ "button",
13239
+ {
13240
+ onClick: handleSubmit,
13241
+ className: "px-4 py-2 bg-indigo-600 text-white rounded-md hover:bg-indigo-700 text-sm font-medium transition-colors",
13242
+ children: "Continue to Lesson \u2192"
13243
+ }
13244
+ ),
13245
+ /* @__PURE__ */ jsx(
13246
+ "button",
13247
+ {
13248
+ onClick: () => {
13249
+ emit(`UI:${saveEvent}`, { response: "" });
13250
+ setIsExpanded(false);
13251
+ },
13252
+ className: "px-4 py-2 text-indigo-600 dark:text-indigo-400 hover:underline text-sm",
13253
+ children: "Skip for now"
13254
+ }
13255
+ )
13256
+ ] })
13257
+ ] }) : /* @__PURE__ */ jsx(
13258
+ "button",
13259
+ {
13260
+ onClick: () => setIsExpanded(true),
13261
+ className: "text-sm text-indigo-600 dark:text-indigo-400 hover:underline font-medium",
13262
+ children: "\u2713 Answered \xB7 Edit response"
13263
+ }
13264
+ )
13265
+ ] })
13266
+ ] })
13267
+ }
13268
+ );
13269
+ };
13270
+ ActivationBlock.displayName = "ActivationBlock";
13271
+ }
13272
+ });
13194
13273
  var variantBorderClasses, variantIconColors, iconMap2, Alert;
13195
13274
  var init_Alert = __esm({
13196
13275
  "components/core/molecules/Alert.tsx"() {
@@ -15387,102 +15466,6 @@ var init_BattleTemplate = __esm({
15387
15466
  BattleTemplate.displayName = "BattleTemplate";
15388
15467
  }
15389
15468
  });
15390
- var MIN_DIAGRAM_WIDTH, ScaledDiagram;
15391
- var init_ScaledDiagram = __esm({
15392
- "components/core/molecules/ScaledDiagram.tsx"() {
15393
- init_Box();
15394
- init_cn();
15395
- MIN_DIAGRAM_WIDTH = 200;
15396
- ScaledDiagram = ({
15397
- children,
15398
- className
15399
- }) => {
15400
- const { t: _t } = useTranslate();
15401
- const wrapperRef = useRef(null);
15402
- const contentRef = useRef(null);
15403
- const [layout, setLayout] = useState(null);
15404
- const measure = useCallback(() => {
15405
- const wrapper = wrapperRef.current;
15406
- const content = contentRef.current;
15407
- if (!wrapper || !content) return;
15408
- const containerW = wrapper.clientWidth;
15409
- if (containerW <= 0) return;
15410
- let diagramW = 0;
15411
- let diagramH = 0;
15412
- const children2 = content.children;
15413
- for (let i = 0; i < children2.length; i++) {
15414
- const child = children2[i];
15415
- const w = child.style?.width;
15416
- const h = child.style?.height;
15417
- if (w && /^\d+/.test(w) && h && /^\d+/.test(h)) {
15418
- diagramW = parseFloat(w);
15419
- diagramH = parseFloat(h);
15420
- break;
15421
- }
15422
- if (child.offsetWidth > MIN_DIAGRAM_WIDTH) {
15423
- diagramW = child.offsetWidth;
15424
- diagramH = child.offsetHeight;
15425
- break;
15426
- }
15427
- }
15428
- if (diagramW < MIN_DIAGRAM_WIDTH || diagramH <= 0) {
15429
- setLayout(null);
15430
- return;
15431
- }
15432
- const s = Math.min(1, containerW / diagramW);
15433
- setLayout({ scale: s, height: diagramH * s });
15434
- }, []);
15435
- useEffect(() => {
15436
- const content = contentRef.current;
15437
- if (!content) return;
15438
- let raf1 = requestAnimationFrame(() => {
15439
- requestAnimationFrame(() => measure());
15440
- });
15441
- const mo = new MutationObserver(() => {
15442
- requestAnimationFrame(() => measure());
15443
- });
15444
- mo.observe(content, { childList: true, subtree: true, attributes: true });
15445
- return () => {
15446
- cancelAnimationFrame(raf1);
15447
- mo.disconnect();
15448
- };
15449
- }, [measure, children]);
15450
- useEffect(() => {
15451
- const wrapper = wrapperRef.current;
15452
- if (!wrapper) return;
15453
- const ro = new ResizeObserver(() => measure());
15454
- ro.observe(wrapper);
15455
- return () => ro.disconnect();
15456
- }, [measure]);
15457
- const hasLayout = layout !== null;
15458
- return /* @__PURE__ */ jsx(
15459
- Box,
15460
- {
15461
- ref: wrapperRef,
15462
- className: cn("w-full", className),
15463
- style: {
15464
- // Only clip overflow once we have a valid measurement
15465
- overflow: hasLayout ? "hidden" : void 0,
15466
- height: hasLayout ? layout.height : void 0
15467
- },
15468
- children: /* @__PURE__ */ jsx(
15469
- Box,
15470
- {
15471
- ref: contentRef,
15472
- style: {
15473
- width: "max-content",
15474
- transformOrigin: "top left",
15475
- transform: hasLayout && layout.scale < 1 ? `scale(${layout.scale})` : void 0
15476
- },
15477
- children
15478
- }
15479
- )
15480
- }
15481
- );
15482
- };
15483
- ScaledDiagram.displayName = "ScaledDiagram";
15484
- }
15485
- });
15486
15469
 
15487
15470
  // node_modules/katex/dist/katex.min.css
15488
15471
  var init_katex_min = __esm({
@@ -15922,7 +15905,7 @@ var init_CodeBlock = __esm({
15922
15905
  };
15923
15906
  LINE_PROPS_FN = (n) => ({ "data-line": String(n - 1) });
15924
15907
  HIDDEN_LINE_NUMBERS = { display: "none" };
15925
- CodeBlock = React88__default.memo(
15908
+ CodeBlock = React91__default.memo(
15926
15909
  ({
15927
15910
  code: rawCode,
15928
15911
  language = "text",
@@ -16509,7 +16492,7 @@ var init_MarkdownContent = __esm({
16509
16492
  init_Box();
16510
16493
  init_CodeBlock();
16511
16494
  init_cn();
16512
- MarkdownContent = React88__default.memo(
16495
+ MarkdownContent = React91__default.memo(
16513
16496
  ({ content, direction = "ltr", className }) => {
16514
16497
  const { t: _t } = useTranslate();
16515
16498
  const safeContent = typeof content === "string" ? content : String(content ?? "");
@@ -16674,6 +16657,227 @@ var init_MarkdownContent = __esm({
16674
16657
  MarkdownContent.displayName = "MarkdownContent";
16675
16658
  }
16676
16659
  });
16660
+
16661
+ // components/core/molecules/lessonSegmentUtils.ts
16662
+ function parseMarkdownWithCodeBlocks(content) {
16663
+ const segments = [];
16664
+ const codeBlockRegex = /```([\w-]+)?(?:\s+(run))?\n([\s\S]*?)```/g;
16665
+ let lastIndex = 0;
16666
+ let match;
16667
+ while ((match = codeBlockRegex.exec(content)) !== null) {
16668
+ const before = content.slice(lastIndex, match.index);
16669
+ if (before.trim()) {
16670
+ segments.push({ type: "markdown", content: before });
16671
+ }
16672
+ const rawLanguage = match[1] ?? "text";
16673
+ const runModifier = !!match[2];
16674
+ const suffixRunnable = rawLanguage.endsWith("-runnable");
16675
+ const runnable = runModifier || suffixRunnable;
16676
+ const baseLanguage = suffixRunnable ? rawLanguage.slice(0, -"-runnable".length) || "text" : rawLanguage;
16677
+ segments.push({ type: "code", language: baseLanguage, content: match[3].trim(), runnable });
16678
+ lastIndex = codeBlockRegex.lastIndex;
16679
+ }
16680
+ const remaining = content.slice(lastIndex);
16681
+ if (remaining.trim()) {
16682
+ segments.push({ type: "markdown", content: remaining });
16683
+ }
16684
+ return segments;
16685
+ }
16686
+ var init_lessonSegmentUtils = __esm({
16687
+ "components/core/molecules/lessonSegmentUtils.ts"() {
16688
+ }
16689
+ });
16690
+ var BLOOM_CONFIG, BloomQuizBlock;
16691
+ var init_BloomQuizBlock = __esm({
16692
+ "components/core/molecules/BloomQuizBlock.tsx"() {
16693
+ "use client";
16694
+ init_MarkdownContent();
16695
+ init_CodeBlock();
16696
+ init_lessonSegmentUtils();
16697
+ init_useEventBus();
16698
+ init_cn();
16699
+ BLOOM_CONFIG = {
16700
+ remember: { color: "bg-gray-500", bgColor: "bg-gray-50 dark:bg-gray-900/30", label: "Remember" },
16701
+ understand: { color: "bg-blue-500", bgColor: "bg-blue-50 dark:bg-blue-900/30", label: "Understand" },
16702
+ apply: { color: "bg-green-500", bgColor: "bg-green-50 dark:bg-green-900/30", label: "Apply" },
16703
+ analyze: { color: "bg-yellow-500", bgColor: "bg-yellow-50 dark:bg-yellow-900/30", label: "Analyze" },
16704
+ evaluate: { color: "bg-orange-500", bgColor: "bg-orange-50 dark:bg-orange-900/30", label: "Evaluate" },
16705
+ create: { color: "bg-purple-500", bgColor: "bg-purple-50 dark:bg-purple-900/30", label: "Create" }
16706
+ };
16707
+ BloomQuizBlock = ({
16708
+ level,
16709
+ question,
16710
+ answer,
16711
+ index,
16712
+ isAnswered,
16713
+ answerEvent = "ANSWER_BLOOM",
16714
+ className
16715
+ }) => {
16716
+ const [revealed, setRevealed] = useState(false);
16717
+ const config = BLOOM_CONFIG[level];
16718
+ const { emit } = useEventBus();
16719
+ const questionSegments = useMemo(() => parseMarkdownWithCodeBlocks(question), [question]);
16720
+ const answerSegments = useMemo(() => parseMarkdownWithCodeBlocks(answer), [answer]);
16721
+ const handleReveal = () => {
16722
+ if (!revealed) {
16723
+ emit(`UI:${answerEvent}`, { index: index ?? 0, level });
16724
+ }
16725
+ setRevealed(!revealed);
16726
+ };
16727
+ return /* @__PURE__ */ jsxs(
16728
+ "div",
16729
+ {
16730
+ className: cn(
16731
+ "rounded-lg border border-indigo-100 dark:border-indigo-800 p-4 my-4 transition-all",
16732
+ config.bgColor,
16733
+ className
16734
+ ),
16735
+ children: [
16736
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-3", children: [
16737
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [
16738
+ index !== void 0 && /* @__PURE__ */ jsxs("span", { className: "text-gray-500 dark:text-gray-400 font-medium text-sm", children: [
16739
+ "Question ",
16740
+ index + 1
16741
+ ] }),
16742
+ /* @__PURE__ */ jsx("span", { className: cn(config.color, "text-white text-xs px-2 py-1 rounded-full font-medium"), children: config.label })
16743
+ ] }),
16744
+ isAnswered && /* @__PURE__ */ jsx(CheckCircle, { className: "text-green-600 dark:text-green-400 flex-shrink-0", size: 20 })
16745
+ ] }),
16746
+ /* @__PURE__ */ jsx("div", { className: "font-semibold text-indigo-900 dark:text-indigo-200 mb-3 space-y-2", children: questionSegments.map(
16747
+ (segment, idx) => segment.type === "markdown" ? /* @__PURE__ */ jsx(MarkdownContent, { content: segment.content }, `q-md-${idx}`) : /* @__PURE__ */ jsx(
16748
+ CodeBlock,
16749
+ {
16750
+ language: segment.language ?? "text",
16751
+ code: segment.content
16752
+ },
16753
+ `q-code-${idx}`
16754
+ )
16755
+ ) }),
16756
+ /* @__PURE__ */ jsx(
16757
+ "button",
16758
+ {
16759
+ type: "button",
16760
+ className: "inline-flex items-center rounded-md bg-indigo-600 dark:bg-indigo-500 px-3 py-1.5 text-sm font-medium text-white hover:bg-indigo-700 dark:hover:bg-indigo-600 transition-colors",
16761
+ onClick: handleReveal,
16762
+ children: revealed ? "Hide Answer" : "Reveal Answer"
16763
+ }
16764
+ ),
16765
+ revealed && /* @__PURE__ */ jsxs("div", { className: "rounded-lg bg-white/80 dark:bg-gray-800/80 p-3 text-sm text-slate-800 dark:text-gray-200 shadow-sm border border-indigo-100 dark:border-indigo-800 mt-3 space-y-2", children: [
16766
+ /* @__PURE__ */ jsx("div", { className: "text-xs text-gray-600 dark:text-gray-400 mb-1 font-medium uppercase tracking-wide", children: "Answer:" }),
16767
+ answerSegments.map(
16768
+ (segment, idx) => segment.type === "markdown" ? /* @__PURE__ */ jsx(MarkdownContent, { content: segment.content }, `a-md-${idx}`) : /* @__PURE__ */ jsx(
16769
+ CodeBlock,
16770
+ {
16771
+ language: segment.language ?? "text",
16772
+ code: segment.content
16773
+ },
16774
+ `a-code-${idx}`
16775
+ )
16776
+ )
16777
+ ] })
16778
+ ]
16779
+ }
16780
+ );
16781
+ };
16782
+ BloomQuizBlock.displayName = "BloomQuizBlock";
16783
+ }
16784
+ });
16785
+ var MIN_DIAGRAM_WIDTH, ScaledDiagram;
16786
+ var init_ScaledDiagram = __esm({
16787
+ "components/core/molecules/ScaledDiagram.tsx"() {
16788
+ init_Box();
16789
+ init_cn();
16790
+ MIN_DIAGRAM_WIDTH = 200;
16791
+ ScaledDiagram = ({
16792
+ children,
16793
+ className
16794
+ }) => {
16795
+ const { t: _t } = useTranslate();
16796
+ const wrapperRef = useRef(null);
16797
+ const contentRef = useRef(null);
16798
+ const [layout, setLayout] = useState(null);
16799
+ const measure = useCallback(() => {
16800
+ const wrapper = wrapperRef.current;
16801
+ const content = contentRef.current;
16802
+ if (!wrapper || !content) return;
16803
+ const containerW = wrapper.clientWidth;
16804
+ if (containerW <= 0) return;
16805
+ let diagramW = 0;
16806
+ let diagramH = 0;
16807
+ const children2 = content.children;
16808
+ for (let i = 0; i < children2.length; i++) {
16809
+ const child = children2[i];
16810
+ const w = child.style?.width;
16811
+ const h = child.style?.height;
16812
+ if (w && /^\d+/.test(w) && h && /^\d+/.test(h)) {
16813
+ diagramW = parseFloat(w);
16814
+ diagramH = parseFloat(h);
16815
+ break;
16816
+ }
16817
+ if (child.offsetWidth > MIN_DIAGRAM_WIDTH) {
16818
+ diagramW = child.offsetWidth;
16819
+ diagramH = child.offsetHeight;
16820
+ break;
16821
+ }
16822
+ }
16823
+ if (diagramW < MIN_DIAGRAM_WIDTH || diagramH <= 0) {
16824
+ setLayout(null);
16825
+ return;
16826
+ }
16827
+ const s = Math.min(1, containerW / diagramW);
16828
+ setLayout({ scale: s, height: diagramH * s });
16829
+ }, []);
16830
+ useEffect(() => {
16831
+ const content = contentRef.current;
16832
+ if (!content) return;
16833
+ let raf1 = requestAnimationFrame(() => {
16834
+ requestAnimationFrame(() => measure());
16835
+ });
16836
+ const mo = new MutationObserver(() => {
16837
+ requestAnimationFrame(() => measure());
16838
+ });
16839
+ mo.observe(content, { childList: true, subtree: true, attributes: true });
16840
+ return () => {
16841
+ cancelAnimationFrame(raf1);
16842
+ mo.disconnect();
16843
+ };
16844
+ }, [measure, children]);
16845
+ useEffect(() => {
16846
+ const wrapper = wrapperRef.current;
16847
+ if (!wrapper) return;
16848
+ const ro = new ResizeObserver(() => measure());
16849
+ ro.observe(wrapper);
16850
+ return () => ro.disconnect();
16851
+ }, [measure]);
16852
+ const hasLayout = layout !== null;
16853
+ return /* @__PURE__ */ jsx(
16854
+ Box,
16855
+ {
16856
+ ref: wrapperRef,
16857
+ className: cn("w-full", className),
16858
+ style: {
16859
+ // Only clip overflow once we have a valid measurement
16860
+ overflow: hasLayout ? "hidden" : void 0,
16861
+ height: hasLayout ? layout.height : void 0
16862
+ },
16863
+ children: /* @__PURE__ */ jsx(
16864
+ Box,
16865
+ {
16866
+ ref: contentRef,
16867
+ style: {
16868
+ width: "max-content",
16869
+ transformOrigin: "top left",
16870
+ transform: hasLayout && layout.scale < 1 ? `scale(${layout.scale})` : void 0
16871
+ },
16872
+ children
16873
+ }
16874
+ )
16875
+ }
16876
+ );
16877
+ };
16878
+ ScaledDiagram.displayName = "ScaledDiagram";
16879
+ }
16880
+ });
16677
16881
  function useLongPress(onLongPress, options = {}) {
16678
16882
  const { duration = 500, moveThreshold = 10 } = options;
16679
16883
  const timerRef = useRef(null);
@@ -17605,7 +17809,7 @@ var init_StateMachineView = __esm({
17605
17809
  style: { top: title ? 30 : 0 },
17606
17810
  children: [
17607
17811
  entity && /* @__PURE__ */ jsx(EntityBox, { entity, config }),
17608
- states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React88__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
17812
+ states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React91__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
17609
17813
  StateNode,
17610
17814
  {
17611
17815
  state,
@@ -18320,7 +18524,7 @@ function tryParseOrbitalSchema(code) {
18320
18524
  }
18321
18525
  return null;
18322
18526
  }
18323
- function parseMarkdownWithCodeBlocks(content) {
18527
+ function parseMarkdownWithCodeBlocks2(content) {
18324
18528
  if (!content) return [];
18325
18529
  const segments = [];
18326
18530
  const codeBlockRegex = /```(\w+)?\n([\s\S]*?)```/g;
@@ -18359,7 +18563,7 @@ function parseContentSegments(content) {
18359
18563
  while ((match = tagRegex.exec(content)) !== null) {
18360
18564
  const before = content.slice(lastIndex, match.index);
18361
18565
  if (before.trim()) {
18362
- segments.push(...parseMarkdownWithCodeBlocks(before));
18566
+ segments.push(...parseMarkdownWithCodeBlocks2(before));
18363
18567
  }
18364
18568
  segments.push({
18365
18569
  type: "quiz",
@@ -18370,7 +18574,7 @@ function parseContentSegments(content) {
18370
18574
  }
18371
18575
  const remaining = content.slice(lastIndex);
18372
18576
  if (remaining.trim()) {
18373
- segments.push(...parseMarkdownWithCodeBlocks(remaining));
18577
+ segments.push(...parseMarkdownWithCodeBlocks2(remaining));
18374
18578
  }
18375
18579
  return segments;
18376
18580
  }
@@ -23394,6 +23598,169 @@ var init_ClassifierBoard = __esm({
23394
23598
  ClassifierBoard.displayName = "ClassifierBoard";
23395
23599
  }
23396
23600
  });
23601
+ var CodeRunnerPanel;
23602
+ var init_CodeRunnerPanel = __esm({
23603
+ "components/core/organisms/CodeRunnerPanel.tsx"() {
23604
+ "use client";
23605
+ init_Box();
23606
+ init_Button();
23607
+ init_Badge();
23608
+ init_Typography();
23609
+ init_Stack();
23610
+ init_CodeBlock();
23611
+ init_useEventBus();
23612
+ init_cn();
23613
+ CodeRunnerPanel = ({
23614
+ code: initialCode,
23615
+ language,
23616
+ runnable = true,
23617
+ onRun,
23618
+ runEvent = "RUN_CODE",
23619
+ className
23620
+ }) => {
23621
+ const eventBus = useEventBus();
23622
+ const { t } = useTranslate();
23623
+ const [code, setCode] = useState(initialCode);
23624
+ const [output, setOutput] = useState(null);
23625
+ const [error, setError] = useState(null);
23626
+ const [isRunning, setIsRunning] = useState(false);
23627
+ const handleRun = useCallback(async () => {
23628
+ if (!onRun) return;
23629
+ setIsRunning(true);
23630
+ setError(null);
23631
+ setOutput(null);
23632
+ try {
23633
+ const result = await onRun(code);
23634
+ setOutput(result);
23635
+ eventBus.emit(`UI:${runEvent}`, { language, exitCode: result.exitCode });
23636
+ } catch (err) {
23637
+ const message = err instanceof Error ? err.message : t("common.error");
23638
+ setError(message);
23639
+ eventBus.emit(`UI:${runEvent}`, { language, exitCode: 1, error: message });
23640
+ } finally {
23641
+ setIsRunning(false);
23642
+ }
23643
+ }, [code, language, onRun, runEvent, eventBus, t]);
23644
+ const handleReset = useCallback(() => {
23645
+ setCode(initialCode);
23646
+ setOutput(null);
23647
+ setError(null);
23648
+ }, [initialCode]);
23649
+ if (!runnable || !onRun) {
23650
+ return /* @__PURE__ */ jsx(Box, { className, children: /* @__PURE__ */ jsx(CodeBlock, { language, code }) });
23651
+ }
23652
+ const hasOutput = output !== null || error !== null;
23653
+ return /* @__PURE__ */ jsxs(Box, { className: cn("space-y-3", className), children: [
23654
+ /* @__PURE__ */ jsx(
23655
+ CodeBlock,
23656
+ {
23657
+ language,
23658
+ code,
23659
+ editable: true,
23660
+ onChange: setCode,
23661
+ showLanguageBadge: true,
23662
+ showCopyButton: true
23663
+ }
23664
+ ),
23665
+ /* @__PURE__ */ jsxs(HStack, { gap: "sm", justify: "between", children: [
23666
+ /* @__PURE__ */ jsxs(HStack, { gap: "sm", children: [
23667
+ /* @__PURE__ */ jsx(
23668
+ Button,
23669
+ {
23670
+ variant: "primary",
23671
+ size: "sm",
23672
+ onClick: handleRun,
23673
+ disabled: isRunning,
23674
+ className: "min-w-[5rem]",
23675
+ children: isRunning ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-2", children: [
23676
+ /* @__PURE__ */ jsx(RotateCcw, { size: 16, className: "animate-spin" }),
23677
+ t("common.loading")
23678
+ ] }) : /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-2", children: [
23679
+ /* @__PURE__ */ jsx(Play, { size: 16 }),
23680
+ "Run"
23681
+ ] })
23682
+ }
23683
+ ),
23684
+ /* @__PURE__ */ jsx(
23685
+ Button,
23686
+ {
23687
+ variant: "secondary",
23688
+ size: "sm",
23689
+ onClick: handleReset,
23690
+ disabled: isRunning,
23691
+ children: /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-2", children: [
23692
+ /* @__PURE__ */ jsx(RotateCcw, { size: 16 }),
23693
+ "Reset"
23694
+ ] })
23695
+ }
23696
+ )
23697
+ ] }),
23698
+ output && /* @__PURE__ */ jsxs(
23699
+ Badge,
23700
+ {
23701
+ variant: output.exitCode === 0 ? "success" : "danger",
23702
+ size: "sm",
23703
+ children: [
23704
+ "Exit ",
23705
+ output.exitCode
23706
+ ]
23707
+ }
23708
+ )
23709
+ ] }),
23710
+ hasOutput && /* @__PURE__ */ jsxs(Box, { className: "rounded-lg border border-gray-700 bg-[#0d0d0d] overflow-hidden", children: [
23711
+ /* @__PURE__ */ jsxs(
23712
+ HStack,
23713
+ {
23714
+ gap: "sm",
23715
+ align: "center",
23716
+ className: "px-3 py-2 bg-gray-800 border-b border-gray-700",
23717
+ children: [
23718
+ /* @__PURE__ */ jsx(Terminal, { size: 16, className: "text-gray-400" }),
23719
+ /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-gray-300 font-medium", children: "Output" })
23720
+ ]
23721
+ }
23722
+ ),
23723
+ /* @__PURE__ */ jsx(VStack, { gap: "none", className: "p-3 font-mono text-sm", children: error ? /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-red-400 whitespace-pre-wrap", children: error }) : /* @__PURE__ */ jsxs(Fragment, { children: [
23724
+ output?.stdout ? /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-gray-200 whitespace-pre-wrap", children: output.stdout }) : null,
23725
+ output?.stderr ? /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-red-400 whitespace-pre-wrap", children: output.stderr }) : null,
23726
+ !output?.stdout && !output?.stderr ? /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-gray-500 italic", children: "No output" }) : null,
23727
+ output && output.testResults.length > 0 && /* @__PURE__ */ jsx(Box, { className: "mt-3 pt-3 border-t border-gray-700 space-y-2", children: output.testResults.map((test, index) => /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "start", className: "text-xs", children: [
23728
+ test.passed ? /* @__PURE__ */ jsx(CheckCircle, { size: 14, className: "text-green-400 mt-0.5" }) : /* @__PURE__ */ jsx(XCircle, { size: 14, className: "text-red-400 mt-0.5" }),
23729
+ /* @__PURE__ */ jsxs(VStack, { gap: "xs", className: "flex-1", children: [
23730
+ /* @__PURE__ */ jsxs(
23731
+ Typography,
23732
+ {
23733
+ variant: "small",
23734
+ className: test.passed ? "text-green-400" : "text-red-400",
23735
+ children: [
23736
+ "Test ",
23737
+ index + 1,
23738
+ ": ",
23739
+ test.passed ? "passed" : "failed"
23740
+ ]
23741
+ }
23742
+ ),
23743
+ /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "text-gray-400", children: [
23744
+ "Input: ",
23745
+ test.input
23746
+ ] }),
23747
+ /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "text-gray-400", children: [
23748
+ "Expected: ",
23749
+ test.expectedOutput
23750
+ ] }),
23751
+ /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "text-gray-400", children: [
23752
+ "Actual: ",
23753
+ test.actualOutput
23754
+ ] })
23755
+ ] })
23756
+ ] }, index)) })
23757
+ ] }) })
23758
+ ] })
23759
+ ] });
23760
+ };
23761
+ CodeRunnerPanel.displayName = "CodeRunnerPanel";
23762
+ }
23763
+ });
23397
23764
  function CombatLog({
23398
23765
  events: events2,
23399
23766
  maxVisible = 50,
@@ -23644,6 +24011,31 @@ var init_ConfirmDialog = __esm({
23644
24011
  ConfirmDialog.displayName = "ConfirmDialog";
23645
24012
  }
23646
24013
  });
24014
+ var ConnectionBlock;
24015
+ var init_ConnectionBlock = __esm({
24016
+ "components/core/molecules/ConnectionBlock.tsx"() {
24017
+ "use client";
24018
+ init_MarkdownContent();
24019
+ init_cn();
24020
+ ConnectionBlock = ({ content, className }) => /* @__PURE__ */ jsx(
24021
+ "div",
24022
+ {
24023
+ className: cn(
24024
+ "bg-emerald-50 dark:bg-emerald-900/20 border-l-4 border-emerald-500 rounded-r-lg p-5 mb-6",
24025
+ className
24026
+ ),
24027
+ children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
24028
+ /* @__PURE__ */ jsx(Link2, { className: "text-emerald-600 dark:text-emerald-400 flex-shrink-0 mt-1", size: 20 }),
24029
+ /* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
24030
+ /* @__PURE__ */ jsx("h4", { className: "font-semibold text-emerald-900 dark:text-emerald-100 mb-2", children: "Building On What You Know" }),
24031
+ /* @__PURE__ */ jsx("div", { className: "prose dark:prose-invert prose-sm max-w-none text-gray-700 dark:text-gray-300", children: /* @__PURE__ */ jsx(MarkdownContent, { content }) })
24032
+ ] })
24033
+ ] })
24034
+ }
24035
+ );
24036
+ ConnectionBlock.displayName = "ConnectionBlock";
24037
+ }
24038
+ });
23647
24039
  function CounterMinimal({
23648
24040
  entity,
23649
24041
  size = "md",
@@ -23868,7 +24260,7 @@ function CraftingRecipe({
23868
24260
  className
23869
24261
  }) {
23870
24262
  const eventBus = useEventBus();
23871
- const handleCraft = React88.useCallback(() => {
24263
+ const handleCraft = React91.useCallback(() => {
23872
24264
  onCraft?.();
23873
24265
  if (craftEvent) {
23874
24266
  eventBus.emit(craftEvent, { output: output.label });
@@ -23885,7 +24277,7 @@ function CraftingRecipe({
23885
24277
  children: [
23886
24278
  /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-wrap items-center", children: inputs.map((ingredient, index) => {
23887
24279
  const hasSufficient = ingredient.available >= ingredient.required;
23888
- return /* @__PURE__ */ jsxs(React88.Fragment, { children: [
24280
+ return /* @__PURE__ */ jsxs(React91.Fragment, { children: [
23889
24281
  /* @__PURE__ */ jsx(Box, { className: "relative", children: /* @__PURE__ */ jsx(
23890
24282
  ItemSlot,
23891
24283
  {
@@ -23948,8 +24340,8 @@ function DPad({
23948
24340
  }) {
23949
24341
  const eventBus = useEventBus();
23950
24342
  const sizes = sizeMap15[size];
23951
- const [activeDirections, setActiveDirections] = React88.useState(/* @__PURE__ */ new Set());
23952
- const handlePress = React88.useCallback(
24343
+ const [activeDirections, setActiveDirections] = React91.useState(/* @__PURE__ */ new Set());
24344
+ const handlePress = React91.useCallback(
23953
24345
  (direction) => {
23954
24346
  setActiveDirections((prev) => new Set(prev).add(direction));
23955
24347
  if (directionEvent) eventBus.emit(`UI:${directionEvent}`, { direction, pressed: true });
@@ -23957,7 +24349,7 @@ function DPad({
23957
24349
  },
23958
24350
  [directionEvent, eventBus, onDirection]
23959
24351
  );
23960
- const handleRelease = React88.useCallback(
24352
+ const handleRelease = React91.useCallback(
23961
24353
  (direction) => {
23962
24354
  setActiveDirections((prev) => {
23963
24355
  const next = new Set(prev);
@@ -24764,8 +25156,8 @@ var init_Menu = __esm({
24764
25156
  "bottom-end": "bottom-start"
24765
25157
  };
24766
25158
  const effectivePosition = direction === "rtl" ? rtlMirror[position] ?? position : position;
24767
- const triggerChild = React88__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
24768
- const triggerElement = React88__default.cloneElement(
25159
+ const triggerChild = React91__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
25160
+ const triggerElement = React91__default.cloneElement(
24769
25161
  triggerChild,
24770
25162
  {
24771
25163
  ref: triggerRef,
@@ -24899,14 +25291,14 @@ function useDataDnd(args) {
24899
25291
  const isZone = Boolean(dragGroup || accepts || sortable);
24900
25292
  const enabled = isZone || Boolean(dndRoot);
24901
25293
  const eventBus = useEventBus();
24902
- const parentRoot = React88__default.useContext(RootCtx);
25294
+ const parentRoot = React91__default.useContext(RootCtx);
24903
25295
  const isRoot = enabled && parentRoot === null;
24904
- const zoneId = React88__default.useId();
25296
+ const zoneId = React91__default.useId();
24905
25297
  const ownGroup = dragGroup ?? accepts ?? zoneId;
24906
- const [optimisticOrders, setOptimisticOrders] = React88__default.useState(() => /* @__PURE__ */ new Map());
24907
- const optimisticOrdersRef = React88__default.useRef(optimisticOrders);
25298
+ const [optimisticOrders, setOptimisticOrders] = React91__default.useState(() => /* @__PURE__ */ new Map());
25299
+ const optimisticOrdersRef = React91__default.useRef(optimisticOrders);
24908
25300
  optimisticOrdersRef.current = optimisticOrders;
24909
- const clearOptimisticOrder = React88__default.useCallback((group) => {
25301
+ const clearOptimisticOrder = React91__default.useCallback((group) => {
24910
25302
  setOptimisticOrders((prev) => {
24911
25303
  if (!prev.has(group)) return prev;
24912
25304
  const next = new Map(prev);
@@ -24931,7 +25323,7 @@ function useDataDnd(args) {
24931
25323
  const raw = it[dndItemIdField];
24932
25324
  return String(raw ?? `__idx_${idx}`);
24933
25325
  }).join("|");
24934
- const itemIds = React88__default.useMemo(
25326
+ const itemIds = React91__default.useMemo(
24935
25327
  () => orderedItems.map((it, idx) => {
24936
25328
  const raw = it[dndItemIdField];
24937
25329
  return raw ?? `__idx_${idx}`;
@@ -24939,7 +25331,7 @@ function useDataDnd(args) {
24939
25331
  [itemIdsSignature]
24940
25332
  );
24941
25333
  const itemsContentSig = items.map((it, idx) => String(it[dndItemIdField] ?? `__${idx}`)).join("|");
24942
- React88__default.useEffect(() => {
25334
+ React91__default.useEffect(() => {
24943
25335
  const root = isRoot ? null : parentRoot;
24944
25336
  if (root) {
24945
25337
  root.clearOptimisticOrder(ownGroup);
@@ -24947,20 +25339,20 @@ function useDataDnd(args) {
24947
25339
  clearOptimisticOrder(ownGroup);
24948
25340
  }
24949
25341
  }, [itemsContentSig, ownGroup]);
24950
- const zonesRef = React88__default.useRef(/* @__PURE__ */ new Map());
24951
- const registerZone = React88__default.useCallback((zoneId2, meta2) => {
25342
+ const zonesRef = React91__default.useRef(/* @__PURE__ */ new Map());
25343
+ const registerZone = React91__default.useCallback((zoneId2, meta2) => {
24952
25344
  zonesRef.current.set(zoneId2, meta2);
24953
25345
  }, []);
24954
- const unregisterZone = React88__default.useCallback((zoneId2) => {
25346
+ const unregisterZone = React91__default.useCallback((zoneId2) => {
24955
25347
  zonesRef.current.delete(zoneId2);
24956
25348
  }, []);
24957
- const [activeDrag, setActiveDrag] = React88__default.useState(null);
24958
- const [overZoneGroup, setOverZoneGroup] = React88__default.useState(null);
24959
- const meta = React88__default.useMemo(
25349
+ const [activeDrag, setActiveDrag] = React91__default.useState(null);
25350
+ const [overZoneGroup, setOverZoneGroup] = React91__default.useState(null);
25351
+ const meta = React91__default.useMemo(
24960
25352
  () => ({ group: ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, rawItems: items, idField: dndItemIdField }),
24961
25353
  [ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, items, dndItemIdField]
24962
25354
  );
24963
- React88__default.useEffect(() => {
25355
+ React91__default.useEffect(() => {
24964
25356
  const target = isRoot ? null : parentRoot;
24965
25357
  if (!target) {
24966
25358
  zonesRef.current.set(zoneId, meta);
@@ -24979,7 +25371,7 @@ function useDataDnd(args) {
24979
25371
  }, [parentRoot, isRoot, zoneId, meta]);
24980
25372
  const sensors = useAlmadarDndSensors(true);
24981
25373
  const collisionDetection = almadarDndCollisionDetection;
24982
- const findZoneByItem = React88__default.useCallback(
25374
+ const findZoneByItem = React91__default.useCallback(
24983
25375
  (id) => {
24984
25376
  for (const z of zonesRef.current.values()) {
24985
25377
  if (z.itemIds.includes(id)) return z;
@@ -24988,7 +25380,7 @@ function useDataDnd(args) {
24988
25380
  },
24989
25381
  []
24990
25382
  );
24991
- React88__default.useCallback(
25383
+ React91__default.useCallback(
24992
25384
  (group) => {
24993
25385
  for (const z of zonesRef.current.values()) {
24994
25386
  if (z.group === group) return z;
@@ -24997,7 +25389,7 @@ function useDataDnd(args) {
24997
25389
  },
24998
25390
  []
24999
25391
  );
25000
- const handleDragEnd = React88__default.useCallback(
25392
+ const handleDragEnd = React91__default.useCallback(
25001
25393
  (event) => {
25002
25394
  const { active, over } = event;
25003
25395
  const activeIdStr = String(active.id);
@@ -25088,8 +25480,8 @@ function useDataDnd(args) {
25088
25480
  },
25089
25481
  [eventBus]
25090
25482
  );
25091
- const sortableData = React88__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
25092
- const SortableItem = React88__default.useCallback(
25483
+ const sortableData = React91__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
25484
+ const SortableItem = React91__default.useCallback(
25093
25485
  ({ id, children }) => {
25094
25486
  const {
25095
25487
  attributes,
@@ -25129,7 +25521,7 @@ function useDataDnd(args) {
25129
25521
  id: droppableId,
25130
25522
  data: sortableData
25131
25523
  });
25132
- const ctx = React88__default.useContext(RootCtx);
25524
+ const ctx = React91__default.useContext(RootCtx);
25133
25525
  const activeDrag2 = ctx?.activeDrag ?? null;
25134
25526
  const overZoneGroup2 = ctx?.overZoneGroup ?? null;
25135
25527
  const isThisZoneOver = overZoneGroup2 === ownGroup;
@@ -25144,7 +25536,7 @@ function useDataDnd(args) {
25144
25536
  showForeignPlaceholder,
25145
25537
  ctxAvailable: ctx != null
25146
25538
  });
25147
- React88__default.useEffect(() => {
25539
+ React91__default.useEffect(() => {
25148
25540
  dndLog.info("dropzone:isOver:change", { droppableId, group: ownGroup, isOver, isThisZoneOver, showForeignPlaceholder, activeDragSourceGroup: activeDrag2?.sourceGroup ?? null });
25149
25541
  }, [droppableId, isOver, isThisZoneOver, showForeignPlaceholder]);
25150
25542
  return /* @__PURE__ */ jsx(
@@ -25158,11 +25550,11 @@ function useDataDnd(args) {
25158
25550
  }
25159
25551
  );
25160
25552
  };
25161
- const rootContextValue = React88__default.useMemo(
25553
+ const rootContextValue = React91__default.useMemo(
25162
25554
  () => ({ registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder }),
25163
25555
  [registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder]
25164
25556
  );
25165
- const handleDragStart = React88__default.useCallback((event) => {
25557
+ const handleDragStart = React91__default.useCallback((event) => {
25166
25558
  const sourceZone = findZoneByItem(event.active.id);
25167
25559
  const rect = event.active.rect.current.initial;
25168
25560
  const height = rect?.height && rect.height > 0 ? rect.height : 64;
@@ -25181,7 +25573,7 @@ function useDataDnd(args) {
25181
25573
  isRoot
25182
25574
  });
25183
25575
  }, [findZoneByItem, isRoot, zoneId]);
25184
- const handleDragOver = React88__default.useCallback((event) => {
25576
+ const handleDragOver = React91__default.useCallback((event) => {
25185
25577
  const { active, over } = event;
25186
25578
  const overData = over?.data?.current;
25187
25579
  const overGroup = overData?.dndGroup ?? null;
@@ -25251,7 +25643,7 @@ function useDataDnd(args) {
25251
25643
  return next;
25252
25644
  });
25253
25645
  }, []);
25254
- const handleDragCancel = React88__default.useCallback((event) => {
25646
+ const handleDragCancel = React91__default.useCallback((event) => {
25255
25647
  setActiveDrag(null);
25256
25648
  setOverZoneGroup(null);
25257
25649
  dndLog.warn("dragCancel", {
@@ -25259,12 +25651,12 @@ function useDataDnd(args) {
25259
25651
  reason: "dnd-kit cancelled the drag (escape key, pointer interrupted, or external)"
25260
25652
  });
25261
25653
  }, []);
25262
- const handleDragEndWithCleanup = React88__default.useCallback((event) => {
25654
+ const handleDragEndWithCleanup = React91__default.useCallback((event) => {
25263
25655
  handleDragEnd(event);
25264
25656
  setActiveDrag(null);
25265
25657
  setOverZoneGroup(null);
25266
25658
  }, [handleDragEnd]);
25267
- const wrapContainer = React88__default.useCallback(
25659
+ const wrapContainer = React91__default.useCallback(
25268
25660
  (children) => {
25269
25661
  if (!enabled) return children;
25270
25662
  const strategy = layout === "grid" ? rectSortingStrategy : verticalListSortingStrategy;
@@ -25318,7 +25710,7 @@ var init_useDataDnd = __esm({
25318
25710
  init_useAlmadarDndCollision();
25319
25711
  init_Box();
25320
25712
  dndLog = createLogger("almadar:ui:dnd");
25321
- RootCtx = React88__default.createContext(null);
25713
+ RootCtx = React91__default.createContext(null);
25322
25714
  }
25323
25715
  });
25324
25716
  function renderIconInput(icon, props) {
@@ -25844,7 +26236,7 @@ function DataList({
25844
26236
  }) {
25845
26237
  const eventBus = useEventBus();
25846
26238
  const { t } = useTranslate();
25847
- const [visibleCount, setVisibleCount] = React88__default.useState(pageSize || Infinity);
26239
+ const [visibleCount, setVisibleCount] = React91__default.useState(pageSize || Infinity);
25848
26240
  const fieldDefs = fields ?? columns ?? [];
25849
26241
  const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
25850
26242
  const dnd = useDataDnd({
@@ -25863,7 +26255,7 @@ function DataList({
25863
26255
  const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
25864
26256
  const hasMoreLocal = pageSize > 0 && visibleCount < allData.length;
25865
26257
  const hasRenderProp = typeof children === "function";
25866
- React88__default.useEffect(() => {
26258
+ React91__default.useEffect(() => {
25867
26259
  const renderItemTypeOf = typeof schemaRenderItem;
25868
26260
  const childrenTypeOf = typeof children;
25869
26261
  if (data.length > 0 && !hasRenderProp) {
@@ -25968,7 +26360,7 @@ function DataList({
25968
26360
  const items2 = data.map((item) => item);
25969
26361
  const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
25970
26362
  const contentField = titleField?.name ?? fieldDefs[0]?.name ?? "";
25971
- return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
26363
+ return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React91__default.Fragment, { children: [
25972
26364
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
25973
26365
  group.items.map((itemData, index) => {
25974
26366
  const id = itemData.id || `${gi}-${index}`;
@@ -26109,7 +26501,7 @@ function DataList({
26109
26501
  className
26110
26502
  ),
26111
26503
  children: [
26112
- groups.map((group, gi) => /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
26504
+ groups.map((group, gi) => /* @__PURE__ */ jsxs(React91__default.Fragment, { children: [
26113
26505
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
26114
26506
  group.items.map(
26115
26507
  (itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
@@ -27025,7 +27417,7 @@ var init_Grid = __esm({
27025
27417
  as: Component = "div"
27026
27418
  }) => {
27027
27419
  const mergedStyle = rows2 ? { gridTemplateRows: `repeat(${rows2}, minmax(0, 1fr))`, ...style } : style;
27028
- return React88__default.createElement(
27420
+ return React91__default.createElement(
27029
27421
  Component,
27030
27422
  {
27031
27423
  className: cn(
@@ -27213,8 +27605,8 @@ var init_Popover = __esm({
27213
27605
  onMouseEnter: handleOpen,
27214
27606
  onMouseLeave: handleClose
27215
27607
  };
27216
- const childElement = React88__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
27217
- const triggerElement = React88__default.cloneElement(
27608
+ const childElement = React91__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
27609
+ const triggerElement = React91__default.cloneElement(
27218
27610
  childElement,
27219
27611
  {
27220
27612
  ref: triggerRef,
@@ -27804,8 +28196,8 @@ var init_Tooltip = __esm({
27804
28196
  if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);
27805
28197
  };
27806
28198
  }, []);
27807
- const triggerElement = React88__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
27808
- const trigger = React88__default.cloneElement(triggerElement, {
28199
+ const triggerElement = React91__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
28200
+ const trigger = React91__default.cloneElement(triggerElement, {
27809
28201
  ref: triggerRef,
27810
28202
  onMouseEnter: handleMouseEnter,
27811
28203
  onMouseLeave: handleMouseLeave,
@@ -27891,7 +28283,7 @@ var init_WizardProgress = __esm({
27891
28283
  children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: normalizedSteps.map((step, index) => {
27892
28284
  const isActive = index === currentStep;
27893
28285
  const isCompleted = index < currentStep;
27894
- return /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
28286
+ return /* @__PURE__ */ jsxs(React91__default.Fragment, { children: [
27895
28287
  /* @__PURE__ */ jsx(
27896
28288
  "button",
27897
28289
  {
@@ -28943,7 +29335,7 @@ function InventoryGrid({
28943
29335
  const eventBus = useEventBus();
28944
29336
  const slotCount = totalSlots ?? items.length;
28945
29337
  const emptySlotCount = Math.max(0, slotCount - items.length);
28946
- const handleSelect = React88.useCallback(
29338
+ const handleSelect = React91.useCallback(
28947
29339
  (id) => {
28948
29340
  onSelect?.(id);
28949
29341
  if (selectEvent) {
@@ -29160,31 +29552,31 @@ function GameCanvas2D({
29160
29552
  assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/",
29161
29553
  className
29162
29554
  }) {
29163
- const canvasRef = React88.useRef(null);
29164
- const rafRef = React88.useRef(0);
29165
- const frameRef = React88.useRef(0);
29166
- const lastTimeRef = React88.useRef(0);
29167
- const imageCache = React88.useRef(/* @__PURE__ */ new Map());
29555
+ const canvasRef = React91.useRef(null);
29556
+ const rafRef = React91.useRef(0);
29557
+ const frameRef = React91.useRef(0);
29558
+ const lastTimeRef = React91.useRef(0);
29559
+ const imageCache = React91.useRef(/* @__PURE__ */ new Map());
29168
29560
  const emit = useEmitEvent();
29169
- const onDrawRef = React88.useRef(onDraw);
29561
+ const onDrawRef = React91.useRef(onDraw);
29170
29562
  onDrawRef.current = onDraw;
29171
- const onTickRef = React88.useRef(onTick);
29563
+ const onTickRef = React91.useRef(onTick);
29172
29564
  onTickRef.current = onTick;
29173
- const tickEventRef = React88.useRef(tickEvent);
29565
+ const tickEventRef = React91.useRef(tickEvent);
29174
29566
  tickEventRef.current = tickEvent;
29175
- const drawEventRef = React88.useRef(drawEvent);
29567
+ const drawEventRef = React91.useRef(drawEvent);
29176
29568
  drawEventRef.current = drawEvent;
29177
- const emitRef = React88.useRef(emit);
29569
+ const emitRef = React91.useRef(emit);
29178
29570
  emitRef.current = emit;
29179
- const assetBaseUrlRef = React88.useRef(assetBaseUrl);
29571
+ const assetBaseUrlRef = React91.useRef(assetBaseUrl);
29180
29572
  assetBaseUrlRef.current = assetBaseUrl;
29181
- const backgroundImageRef = React88.useRef(backgroundImage);
29573
+ const backgroundImageRef = React91.useRef(backgroundImage);
29182
29574
  backgroundImageRef.current = backgroundImage;
29183
- const widthRef = React88.useRef(width);
29575
+ const widthRef = React91.useRef(width);
29184
29576
  widthRef.current = width;
29185
- const heightRef = React88.useRef(height);
29577
+ const heightRef = React91.useRef(height);
29186
29578
  heightRef.current = height;
29187
- const loadImage = React88.useCallback((url) => {
29579
+ const loadImage = React91.useCallback((url) => {
29188
29580
  const fullUrl = url.startsWith("http") ? url : `${assetBaseUrlRef.current}${url}`;
29189
29581
  const cached = imageCache.current.get(fullUrl);
29190
29582
  if (cached?.complete && cached.naturalWidth > 0) return cached;
@@ -29196,7 +29588,7 @@ function GameCanvas2D({
29196
29588
  }
29197
29589
  return null;
29198
29590
  }, []);
29199
- React88.useEffect(() => {
29591
+ React91.useEffect(() => {
29200
29592
  const canvas = canvasRef.current;
29201
29593
  if (!canvas) return;
29202
29594
  const ctx = canvas.getContext("2d");
@@ -29502,7 +29894,7 @@ function TurnPanel({
29502
29894
  className
29503
29895
  }) {
29504
29896
  const eventBus = useEventBus();
29505
- const handleAction = React88.useCallback(
29897
+ const handleAction = React91.useCallback(
29506
29898
  (event) => {
29507
29899
  if (event) {
29508
29900
  eventBus.emit(event, { turn: currentTurn, phase, activeTeam });
@@ -29648,7 +30040,7 @@ function UnitCommandBar({
29648
30040
  className
29649
30041
  }) {
29650
30042
  const eventBus = useEventBus();
29651
- const handleCommand = React88.useCallback(
30043
+ const handleCommand = React91.useCallback(
29652
30044
  (event) => {
29653
30045
  if (event) {
29654
30046
  eventBus.emit(event, { unitId: selectedUnitId });
@@ -30133,7 +30525,7 @@ function GameMenu({
30133
30525
  } catch {
30134
30526
  }
30135
30527
  const eventBus = eventBusProp || eventBusFromHook;
30136
- const handleOptionClick = React88.useCallback(
30528
+ const handleOptionClick = React91.useCallback(
30137
30529
  (option) => {
30138
30530
  if (option.event && eventBus) {
30139
30531
  eventBus.emit(`UI:${option.event}`, { option });
@@ -30247,7 +30639,7 @@ function GameOverScreen({
30247
30639
  } catch {
30248
30640
  }
30249
30641
  const eventBus = eventBusProp || eventBusFromHook;
30250
- const handleActionClick = React88.useCallback(
30642
+ const handleActionClick = React91.useCallback(
30251
30643
  (action) => {
30252
30644
  if (action.event && eventBus) {
30253
30645
  eventBus.emit(`UI:${action.event}`, { action });
@@ -30989,7 +31381,7 @@ var init_MapView = __esm({
30989
31381
  shadowSize: [41, 41]
30990
31382
  });
30991
31383
  L.Marker.prototype.options.icon = defaultIcon;
30992
- const { useEffect: useEffect77, useRef: useRef69, useCallback: useCallback118, useState: useState111 } = React88__default;
31384
+ const { useEffect: useEffect77, useRef: useRef69, useCallback: useCallback119, useState: useState115 } = React91__default;
30993
31385
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
30994
31386
  const { useEventBus: useEventBus3 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
30995
31387
  function MapUpdater({ centerLat, centerLng, zoom }) {
@@ -31034,8 +31426,8 @@ var init_MapView = __esm({
31034
31426
  showAttribution = true
31035
31427
  }) {
31036
31428
  const eventBus = useEventBus3();
31037
- const [clickedPosition, setClickedPosition] = useState111(null);
31038
- const handleMapClick = useCallback118((lat, lng) => {
31429
+ const [clickedPosition, setClickedPosition] = useState115(null);
31430
+ const handleMapClick = useCallback119((lat, lng) => {
31039
31431
  if (showClickedPin) {
31040
31432
  setClickedPosition({ lat, lng });
31041
31433
  }
@@ -31044,7 +31436,7 @@ var init_MapView = __esm({
31044
31436
  eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
31045
31437
  }
31046
31438
  }, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
31047
- const handleMarkerClick = useCallback118((marker) => {
31439
+ const handleMarkerClick = useCallback119((marker) => {
31048
31440
  onMarkerClick?.(marker);
31049
31441
  if (markerClickEvent) {
31050
31442
  eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
@@ -31895,8 +32287,8 @@ function TableView({
31895
32287
  }) {
31896
32288
  const eventBus = useEventBus();
31897
32289
  const { t } = useTranslate();
31898
- const [visibleCount, setVisibleCount] = React88__default.useState(pageSize > 0 ? pageSize : Infinity);
31899
- const [localSelected, setLocalSelected] = React88__default.useState(/* @__PURE__ */ new Set());
32290
+ const [visibleCount, setVisibleCount] = React91__default.useState(pageSize > 0 ? pageSize : Infinity);
32291
+ const [localSelected, setLocalSelected] = React91__default.useState(/* @__PURE__ */ new Set());
31900
32292
  const colDefs = columns ?? fields ?? [];
31901
32293
  const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
31902
32294
  const dnd = useDataDnd({
@@ -32091,12 +32483,12 @@ function TableView({
32091
32483
  ]
32092
32484
  }
32093
32485
  );
32094
- return dnd.isZone ? /* @__PURE__ */ jsx(dnd.SortableItem, { id: row[idField] ?? id, children: rowInner }, id) : /* @__PURE__ */ jsx(React88__default.Fragment, { children: rowInner }, id);
32486
+ return dnd.isZone ? /* @__PURE__ */ jsx(dnd.SortableItem, { id: row[idField] ?? id, children: rowInner }, id) : /* @__PURE__ */ jsx(React91__default.Fragment, { children: rowInner }, id);
32095
32487
  };
32096
32488
  const items = data.map((row) => row);
32097
32489
  const groups = groupBy ? groupData2(items, groupBy) : [{ label: "", items }];
32098
32490
  let runningIndex = 0;
32099
- const body = /* @__PURE__ */ jsx(Box, { role: "rowgroup", children: groups.map((group, gi) => /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
32491
+ const body = /* @__PURE__ */ jsx(Box, { role: "rowgroup", children: groups.map((group, gi) => /* @__PURE__ */ jsxs(React91__default.Fragment, { children: [
32100
32492
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-3" : "mt-0" }),
32101
32493
  group.items.map((row) => renderRow(row, runningIndex++))
32102
32494
  ] }, gi)) });
@@ -33453,7 +33845,7 @@ var init_StepFlow = __esm({
33453
33845
  className
33454
33846
  }) => {
33455
33847
  if (orientation === "vertical") {
33456
- return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React88__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
33848
+ return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React91__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
33457
33849
  /* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
33458
33850
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
33459
33851
  showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-border" })
@@ -33464,7 +33856,7 @@ var init_StepFlow = __esm({
33464
33856
  ] })
33465
33857
  ] }) }, index)) });
33466
33858
  }
33467
- return /* @__PURE__ */ jsx(Box, { className: cn("w-full flex flex-col md:flex-row items-start gap-0", className), children: steps.map((step, index) => /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
33859
+ return /* @__PURE__ */ jsx(Box, { className: cn("w-full flex flex-col md:flex-row items-start gap-0", className), children: steps.map((step, index) => /* @__PURE__ */ jsxs(React91__default.Fragment, { children: [
33468
33860
  /* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
33469
33861
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
33470
33862
  /* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
@@ -34449,7 +34841,7 @@ var init_LikertScale = __esm({
34449
34841
  md: "text-base",
34450
34842
  lg: "text-lg"
34451
34843
  };
34452
- LikertScale = React88__default.forwardRef(
34844
+ LikertScale = React91__default.forwardRef(
34453
34845
  ({
34454
34846
  question,
34455
34847
  options = DEFAULT_LIKERT_OPTIONS,
@@ -34461,7 +34853,7 @@ var init_LikertScale = __esm({
34461
34853
  variant = "radios",
34462
34854
  className
34463
34855
  }, ref) => {
34464
- const groupId = React88__default.useId();
34856
+ const groupId = React91__default.useId();
34465
34857
  const eventBus = useEventBus();
34466
34858
  const handleSelect = useCallback(
34467
34859
  (next) => {
@@ -36743,7 +37135,7 @@ var init_DocBreadcrumb = __esm({
36743
37135
  "aria-label": t("aria.breadcrumb"),
36744
37136
  children: /* @__PURE__ */ jsx(HStack, { gap: "xs", align: "center", wrap: true, children: items.map((item, idx) => {
36745
37137
  const isLast = idx === items.length - 1;
36746
- return /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
37138
+ return /* @__PURE__ */ jsxs(React91__default.Fragment, { children: [
36747
37139
  idx > 0 && /* @__PURE__ */ jsx(
36748
37140
  Icon,
36749
37141
  {
@@ -37407,7 +37799,7 @@ var init_PageHeader = __esm({
37407
37799
  info: "bg-info/10 text-info"
37408
37800
  };
37409
37801
  return /* @__PURE__ */ jsxs(Box, { className: cn("mb-6", className), children: [
37410
- breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx(Box, { as: "nav", className: "mb-4", children: /* @__PURE__ */ jsx(Box, { as: "ol", className: "flex items-center gap-2 text-sm", children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
37802
+ breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx(Box, { as: "nav", className: "mb-4", children: /* @__PURE__ */ jsx(Box, { as: "ol", className: "flex items-center gap-2 text-sm", children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ jsxs(React91__default.Fragment, { children: [
37411
37803
  idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
37412
37804
  crumb.href ? /* @__PURE__ */ jsx(
37413
37805
  "a",
@@ -38136,7 +38528,7 @@ var init_WizardContainer = __esm({
38136
38528
  const isCompleted = index < currentStep;
38137
38529
  const stepKey = step.id ?? step.tabId ?? `step-${index}`;
38138
38530
  const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
38139
- return /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
38531
+ return /* @__PURE__ */ jsxs(React91__default.Fragment, { children: [
38140
38532
  /* @__PURE__ */ jsx(
38141
38533
  Button,
38142
38534
  {
@@ -39338,6 +39730,73 @@ var init_GraphCanvas = __esm({
39338
39730
  GraphCanvas.displayName = "GraphCanvas";
39339
39731
  }
39340
39732
  });
39733
+ var ReflectionBlock;
39734
+ var init_ReflectionBlock = __esm({
39735
+ "components/core/molecules/ReflectionBlock.tsx"() {
39736
+ "use client";
39737
+ init_useEventBus();
39738
+ init_cn();
39739
+ ReflectionBlock = ({
39740
+ prompt,
39741
+ index,
39742
+ savedNote,
39743
+ saveEvent = "SAVE_REFLECTION",
39744
+ className
39745
+ }) => {
39746
+ const [note, setNote] = useState(savedNote ?? "");
39747
+ const [isExpanded, setIsExpanded] = useState(false);
39748
+ const { emit } = useEventBus();
39749
+ const handleSave = () => {
39750
+ emit(`UI:${saveEvent}`, { index, note });
39751
+ setIsExpanded(false);
39752
+ };
39753
+ return /* @__PURE__ */ jsx(
39754
+ "div",
39755
+ {
39756
+ className: cn(
39757
+ "my-6 border-l-4 border-amber-400 bg-amber-50 dark:bg-amber-900/20 rounded-r-lg p-4",
39758
+ className
39759
+ ),
39760
+ children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
39761
+ /* @__PURE__ */ jsx(PauseCircle, { className: "text-amber-600 dark:text-amber-400 flex-shrink-0 mt-1", size: 20 }),
39762
+ /* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
39763
+ /* @__PURE__ */ jsx("div", { className: "font-medium text-amber-900 dark:text-amber-100 mb-2", children: "Pause & Reflect" }),
39764
+ /* @__PURE__ */ jsx("p", { className: "text-gray-700 dark:text-gray-300 text-sm mb-3", children: prompt }),
39765
+ isExpanded ? /* @__PURE__ */ jsxs(Fragment, { children: [
39766
+ /* @__PURE__ */ jsx(
39767
+ "textarea",
39768
+ {
39769
+ className: "w-full p-2 border border-amber-300 dark:border-amber-700 rounded text-sm bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-amber-500 focus:border-transparent",
39770
+ placeholder: "Your thoughts...",
39771
+ value: note,
39772
+ onChange: (e) => setNote(e.target.value),
39773
+ rows: 2
39774
+ }
39775
+ ),
39776
+ /* @__PURE__ */ jsx(
39777
+ "button",
39778
+ {
39779
+ onClick: handleSave,
39780
+ className: "mt-2 text-sm px-3 py-1 bg-amber-600 text-white rounded hover:bg-amber-700 transition-colors",
39781
+ children: "Save & Continue"
39782
+ }
39783
+ )
39784
+ ] }) : /* @__PURE__ */ jsx(
39785
+ "button",
39786
+ {
39787
+ onClick: () => setIsExpanded(true),
39788
+ className: "text-sm text-amber-600 dark:text-amber-400 hover:underline",
39789
+ children: savedNote ? "\u2713 Answered \xB7 Edit" : "Answer this question"
39790
+ }
39791
+ )
39792
+ ] })
39793
+ ] })
39794
+ }
39795
+ );
39796
+ };
39797
+ ReflectionBlock.displayName = "ReflectionBlock";
39798
+ }
39799
+ });
39341
39800
 
39342
39801
  // components/core/molecules/index.ts
39343
39802
  var init_molecules2 = __esm({
@@ -40420,7 +40879,7 @@ var init_DetailPanel = __esm({
40420
40879
  }
40421
40880
  });
40422
40881
  function extractTitle(children) {
40423
- if (!React88__default.isValidElement(children)) return void 0;
40882
+ if (!React91__default.isValidElement(children)) return void 0;
40424
40883
  const props = children.props;
40425
40884
  if (typeof props.title === "string") {
40426
40885
  return props.title;
@@ -40475,7 +40934,7 @@ function LinearView({
40475
40934
  /* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
40476
40935
  const isDone = i < currentIdx;
40477
40936
  const isCurrent = i === currentIdx;
40478
- return /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
40937
+ return /* @__PURE__ */ jsxs(React91__default.Fragment, { children: [
40479
40938
  i > 0 && /* @__PURE__ */ jsx(
40480
40939
  Typography,
40481
40940
  {
@@ -41433,12 +41892,12 @@ var init_Form = __esm({
41433
41892
  const isSchemaEntity = isOrbitalEntitySchema(entity);
41434
41893
  const resolvedEntity = isSchemaEntity ? entity : void 0;
41435
41894
  const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
41436
- const normalizedInitialData = React88__default.useMemo(() => {
41895
+ const normalizedInitialData = React91__default.useMemo(() => {
41437
41896
  const entityRowAsInitial = isPlainEntityRow(entity) ? entity : void 0;
41438
41897
  const callerInitial = initialData !== null && typeof initialData === "object" && !Array.isArray(initialData) ? initialData : {};
41439
41898
  return entityRowAsInitial !== void 0 ? { ...entityRowAsInitial, ...callerInitial } : callerInitial;
41440
41899
  }, [entity, initialData]);
41441
- const entityDerivedFields = React88__default.useMemo(() => {
41900
+ const entityDerivedFields = React91__default.useMemo(() => {
41442
41901
  if (fields && fields.length > 0) return void 0;
41443
41902
  if (!resolvedEntity) return void 0;
41444
41903
  return resolvedEntity.fields.map(
@@ -41458,16 +41917,16 @@ var init_Form = __esm({
41458
41917
  const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
41459
41918
  const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
41460
41919
  const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
41461
- const [formData, setFormData] = React88__default.useState(
41920
+ const [formData, setFormData] = React91__default.useState(
41462
41921
  normalizedInitialData
41463
41922
  );
41464
- const [collapsedSections, setCollapsedSections] = React88__default.useState(
41923
+ const [collapsedSections, setCollapsedSections] = React91__default.useState(
41465
41924
  /* @__PURE__ */ new Set()
41466
41925
  );
41467
- const [submitError, setSubmitError] = React88__default.useState(null);
41468
- const formRef = React88__default.useRef(null);
41926
+ const [submitError, setSubmitError] = React91__default.useState(null);
41927
+ const formRef = React91__default.useRef(null);
41469
41928
  const formMode = props.mode;
41470
- const mountedRef = React88__default.useRef(false);
41929
+ const mountedRef = React91__default.useRef(false);
41471
41930
  if (!mountedRef.current) {
41472
41931
  mountedRef.current = true;
41473
41932
  debug("forms", "mount", {
@@ -41480,7 +41939,7 @@ var init_Form = __esm({
41480
41939
  });
41481
41940
  }
41482
41941
  const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
41483
- const evalContext = React88__default.useMemo(
41942
+ const evalContext = React91__default.useMemo(
41484
41943
  () => ({
41485
41944
  formValues: formData,
41486
41945
  globalVariables: externalContext?.globalVariables ?? {},
@@ -41489,7 +41948,7 @@ var init_Form = __esm({
41489
41948
  }),
41490
41949
  [formData, externalContext]
41491
41950
  );
41492
- React88__default.useEffect(() => {
41951
+ React91__default.useEffect(() => {
41493
41952
  debug("forms", "initialData-sync", {
41494
41953
  mode: formMode,
41495
41954
  normalizedInitialData,
@@ -41500,7 +41959,7 @@ var init_Form = __esm({
41500
41959
  setFormData(normalizedInitialData);
41501
41960
  }
41502
41961
  }, [normalizedInitialData]);
41503
- const processCalculations = React88__default.useCallback(
41962
+ const processCalculations = React91__default.useCallback(
41504
41963
  (changedFieldId, newFormData) => {
41505
41964
  if (!hiddenCalculations.length) return;
41506
41965
  const context = {
@@ -41525,7 +41984,7 @@ var init_Form = __esm({
41525
41984
  },
41526
41985
  [hiddenCalculations, externalContext, eventBus]
41527
41986
  );
41528
- const checkViolations = React88__default.useCallback(
41987
+ const checkViolations = React91__default.useCallback(
41529
41988
  (changedFieldId, newFormData) => {
41530
41989
  if (!violationTriggers.length) return;
41531
41990
  const context = {
@@ -41563,7 +42022,7 @@ var init_Form = __esm({
41563
42022
  processCalculations(name, newFormData);
41564
42023
  checkViolations(name, newFormData);
41565
42024
  };
41566
- const isFieldVisible = React88__default.useCallback(
42025
+ const isFieldVisible = React91__default.useCallback(
41567
42026
  (fieldName) => {
41568
42027
  const condition = conditionalFields[fieldName];
41569
42028
  if (!condition) return true;
@@ -41571,7 +42030,7 @@ var init_Form = __esm({
41571
42030
  },
41572
42031
  [conditionalFields, evalContext]
41573
42032
  );
41574
- const isSectionVisible = React88__default.useCallback(
42033
+ const isSectionVisible = React91__default.useCallback(
41575
42034
  (section) => {
41576
42035
  if (!section.condition) return true;
41577
42036
  return Boolean(evaluateFormExpression(section.condition, evalContext));
@@ -41647,7 +42106,7 @@ var init_Form = __esm({
41647
42106
  eventBus.emit(`UI:${onCancel}`);
41648
42107
  }
41649
42108
  };
41650
- const renderField = React88__default.useCallback(
42109
+ const renderField = React91__default.useCallback(
41651
42110
  (field) => {
41652
42111
  const fieldName = field.name || field.field;
41653
42112
  if (!fieldName) return null;
@@ -41668,7 +42127,7 @@ var init_Form = __esm({
41668
42127
  [formData, isFieldVisible, relationsData, relationsLoading, isLoading]
41669
42128
  );
41670
42129
  const effectiveFields = entityDerivedFields ?? fields;
41671
- const normalizedFields = React88__default.useMemo(() => {
42130
+ const normalizedFields = React91__default.useMemo(() => {
41672
42131
  if (!effectiveFields || effectiveFields.length === 0) return [];
41673
42132
  return effectiveFields.map((field) => {
41674
42133
  if (typeof field === "string") {
@@ -41691,7 +42150,7 @@ var init_Form = __esm({
41691
42150
  return field;
41692
42151
  });
41693
42152
  }, [effectiveFields, resolvedEntity]);
41694
- const schemaFields = React88__default.useMemo(() => {
42153
+ const schemaFields = React91__default.useMemo(() => {
41695
42154
  if (normalizedFields.length === 0) return null;
41696
42155
  if (isDebugEnabled()) {
41697
42156
  debugGroup(`Form: ${entityName || "unknown"}`);
@@ -41701,7 +42160,7 @@ var init_Form = __esm({
41701
42160
  }
41702
42161
  return normalizedFields.map(renderField).filter(Boolean);
41703
42162
  }, [normalizedFields, renderField, entityName, conditionalFields]);
41704
- const sectionElements = React88__default.useMemo(() => {
42163
+ const sectionElements = React91__default.useMemo(() => {
41705
42164
  if (!sections || sections.length === 0) return null;
41706
42165
  return sections.map((section) => {
41707
42166
  if (!isSectionVisible(section)) {
@@ -42976,7 +43435,7 @@ var init_List = __esm({
42976
43435
  if (entity && typeof entity === "object" && "id" in entity) return [entity];
42977
43436
  return [];
42978
43437
  }, [entity]);
42979
- const getItemActions = React88__default.useCallback(
43438
+ const getItemActions = React91__default.useCallback(
42980
43439
  (item) => {
42981
43440
  if (!itemActions) return [];
42982
43441
  if (typeof itemActions === "function") {
@@ -43452,7 +43911,7 @@ var init_MediaGallery = __esm({
43452
43911
  [selectable, selectedItems, selectionEvent, eventBus]
43453
43912
  );
43454
43913
  const entityData = Array.isArray(entity) ? entity : [];
43455
- const items = React88__default.useMemo(() => {
43914
+ const items = React91__default.useMemo(() => {
43456
43915
  if (propItems) return propItems;
43457
43916
  if (entityData.length === 0) return [];
43458
43917
  return entityData.map((record, idx) => ({
@@ -43613,7 +44072,7 @@ var init_MediaGallery = __esm({
43613
44072
  }
43614
44073
  });
43615
44074
  function extractTitle2(children) {
43616
- if (!React88__default.isValidElement(children)) return void 0;
44075
+ if (!React91__default.isValidElement(children)) return void 0;
43617
44076
  const props = children.props;
43618
44077
  if (typeof props.title === "string") {
43619
44078
  return props.title;
@@ -44044,7 +44503,7 @@ var init_debugRegistry = __esm({
44044
44503
  }
44045
44504
  });
44046
44505
  function useDebugData() {
44047
- const [data, setData] = React88.useState(() => ({
44506
+ const [data, setData] = React91.useState(() => ({
44048
44507
  traits: [],
44049
44508
  ticks: [],
44050
44509
  guards: [],
@@ -44058,7 +44517,7 @@ function useDebugData() {
44058
44517
  },
44059
44518
  lastUpdate: Date.now()
44060
44519
  }));
44061
- React88.useEffect(() => {
44520
+ React91.useEffect(() => {
44062
44521
  const updateData = () => {
44063
44522
  setData({
44064
44523
  traits: getAllTraits(),
@@ -44167,12 +44626,12 @@ function layoutGraph(states, transitions, initialState, width, height) {
44167
44626
  return positions;
44168
44627
  }
44169
44628
  function WalkMinimap() {
44170
- const [walkStep, setWalkStep] = React88.useState(null);
44171
- const [traits2, setTraits] = React88.useState([]);
44172
- const [coveredEdges, setCoveredEdges] = React88.useState([]);
44173
- const [completedTraits, setCompletedTraits] = React88.useState(/* @__PURE__ */ new Set());
44174
- const prevTraitRef = React88.useRef(null);
44175
- React88.useEffect(() => {
44629
+ const [walkStep, setWalkStep] = React91.useState(null);
44630
+ const [traits2, setTraits] = React91.useState([]);
44631
+ const [coveredEdges, setCoveredEdges] = React91.useState([]);
44632
+ const [completedTraits, setCompletedTraits] = React91.useState(/* @__PURE__ */ new Set());
44633
+ const prevTraitRef = React91.useRef(null);
44634
+ React91.useEffect(() => {
44176
44635
  const interval = setInterval(() => {
44177
44636
  const w = window;
44178
44637
  const step = w.__orbitalWalkStep;
@@ -44608,15 +45067,15 @@ var init_EntitiesTab = __esm({
44608
45067
  });
44609
45068
  function EventFlowTab({ events: events2 }) {
44610
45069
  const { t } = useTranslate();
44611
- const [filter, setFilter] = React88.useState("all");
44612
- const containerRef = React88.useRef(null);
44613
- const [autoScroll, setAutoScroll] = React88.useState(true);
44614
- React88.useEffect(() => {
45070
+ const [filter, setFilter] = React91.useState("all");
45071
+ const containerRef = React91.useRef(null);
45072
+ const [autoScroll, setAutoScroll] = React91.useState(true);
45073
+ React91.useEffect(() => {
44615
45074
  if (autoScroll && containerRef.current) {
44616
45075
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
44617
45076
  }
44618
45077
  }, [events2.length, autoScroll]);
44619
- const filteredEvents = React88.useMemo(() => {
45078
+ const filteredEvents = React91.useMemo(() => {
44620
45079
  if (filter === "all") return events2;
44621
45080
  return events2.filter((e) => e.type === filter);
44622
45081
  }, [events2, filter]);
@@ -44732,7 +45191,7 @@ var init_EventFlowTab = __esm({
44732
45191
  });
44733
45192
  function GuardsPanel({ guards }) {
44734
45193
  const { t } = useTranslate();
44735
- const [filter, setFilter] = React88.useState("all");
45194
+ const [filter, setFilter] = React91.useState("all");
44736
45195
  if (guards.length === 0) {
44737
45196
  return /* @__PURE__ */ jsx(
44738
45197
  EmptyState,
@@ -44745,7 +45204,7 @@ function GuardsPanel({ guards }) {
44745
45204
  }
44746
45205
  const passedCount = guards.filter((g) => g.result).length;
44747
45206
  const failedCount = guards.length - passedCount;
44748
- const filteredGuards = React88.useMemo(() => {
45207
+ const filteredGuards = React91.useMemo(() => {
44749
45208
  if (filter === "all") return guards;
44750
45209
  if (filter === "passed") return guards.filter((g) => g.result);
44751
45210
  return guards.filter((g) => !g.result);
@@ -44908,10 +45367,10 @@ function EffectBadge({ effect }) {
44908
45367
  }
44909
45368
  function TransitionTimeline({ transitions }) {
44910
45369
  const { t } = useTranslate();
44911
- const containerRef = React88.useRef(null);
44912
- const [autoScroll, setAutoScroll] = React88.useState(true);
44913
- const [expandedId, setExpandedId] = React88.useState(null);
44914
- React88.useEffect(() => {
45370
+ const containerRef = React91.useRef(null);
45371
+ const [autoScroll, setAutoScroll] = React91.useState(true);
45372
+ const [expandedId, setExpandedId] = React91.useState(null);
45373
+ React91.useEffect(() => {
44915
45374
  if (autoScroll && containerRef.current) {
44916
45375
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
44917
45376
  }
@@ -45191,9 +45650,9 @@ function getAllEvents(traits2) {
45191
45650
  function EventDispatcherTab({ traits: traits2, schema }) {
45192
45651
  const eventBus = useEventBus();
45193
45652
  const { t } = useTranslate();
45194
- const [log13, setLog] = React88.useState([]);
45195
- const prevStatesRef = React88.useRef(/* @__PURE__ */ new Map());
45196
- React88.useEffect(() => {
45653
+ const [log13, setLog] = React91.useState([]);
45654
+ const prevStatesRef = React91.useRef(/* @__PURE__ */ new Map());
45655
+ React91.useEffect(() => {
45197
45656
  for (const trait of traits2) {
45198
45657
  const prev = prevStatesRef.current.get(trait.id);
45199
45658
  if (prev && prev !== trait.currentState) {
@@ -45362,10 +45821,10 @@ function VerifyModePanel({
45362
45821
  localCount
45363
45822
  }) {
45364
45823
  const { t } = useTranslate();
45365
- const [expanded, setExpanded] = React88.useState(true);
45366
- const scrollRef = React88.useRef(null);
45367
- const prevCountRef = React88.useRef(0);
45368
- React88.useEffect(() => {
45824
+ const [expanded, setExpanded] = React91.useState(true);
45825
+ const scrollRef = React91.useRef(null);
45826
+ const prevCountRef = React91.useRef(0);
45827
+ React91.useEffect(() => {
45369
45828
  if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
45370
45829
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
45371
45830
  }
@@ -45422,10 +45881,10 @@ function RuntimeDebugger({
45422
45881
  schema
45423
45882
  }) {
45424
45883
  const { t } = useTranslate();
45425
- const [isCollapsed, setIsCollapsed] = React88.useState(mode === "verify" ? true : defaultCollapsed);
45426
- const [isVisible, setIsVisible] = React88.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
45884
+ const [isCollapsed, setIsCollapsed] = React91.useState(mode === "verify" ? true : defaultCollapsed);
45885
+ const [isVisible, setIsVisible] = React91.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
45427
45886
  const debugData = useDebugData();
45428
- React88.useEffect(() => {
45887
+ React91.useEffect(() => {
45429
45888
  if (mode === "inline") return;
45430
45889
  return onDebugToggle((enabled) => {
45431
45890
  setIsVisible(enabled);
@@ -45434,7 +45893,7 @@ function RuntimeDebugger({
45434
45893
  }
45435
45894
  });
45436
45895
  }, [mode]);
45437
- React88.useEffect(() => {
45896
+ React91.useEffect(() => {
45438
45897
  if (mode === "inline") return;
45439
45898
  const handleKeyDown = (e) => {
45440
45899
  if (e.key === "`" && isVisible) {
@@ -45654,6 +46113,117 @@ var init_RuntimeDebugger2 = __esm({
45654
46113
  RuntimeDebugger.displayName = "RuntimeDebugger";
45655
46114
  }
45656
46115
  });
46116
+ var SegmentRenderer;
46117
+ var init_SegmentRenderer = __esm({
46118
+ "components/core/organisms/SegmentRenderer.tsx"() {
46119
+ "use client";
46120
+ init_MarkdownContent();
46121
+ init_CodeBlock();
46122
+ init_QuizBlock();
46123
+ init_ActivationBlock();
46124
+ init_ConnectionBlock();
46125
+ init_ReflectionBlock();
46126
+ init_BloomQuizBlock();
46127
+ init_CodeRunnerPanel();
46128
+ init_cn();
46129
+ SegmentRenderer = ({
46130
+ segments,
46131
+ className,
46132
+ containerClassName,
46133
+ userProgress,
46134
+ onRunCodeSimulation,
46135
+ onRenderVisualization
46136
+ }) => {
46137
+ if (segments.length === 0) return null;
46138
+ let reflectIndex = 0;
46139
+ let bloomIndex = 0;
46140
+ return /* @__PURE__ */ jsx(
46141
+ "div",
46142
+ {
46143
+ className: cn(
46144
+ "border border-gray-200 dark:border-gray-700 rounded-lg p-2 md:p-4 overflow-x-auto space-y-6",
46145
+ containerClassName,
46146
+ className
46147
+ ),
46148
+ children: segments.map((segment, index) => {
46149
+ if (segment.type === "markdown") {
46150
+ return /* @__PURE__ */ jsx(MarkdownContent, { content: segment.content }, `md-${index}`);
46151
+ }
46152
+ if (segment.type === "code") {
46153
+ if (segment.runnable && onRunCodeSimulation) {
46154
+ return /* @__PURE__ */ jsx(
46155
+ CodeRunnerPanel,
46156
+ {
46157
+ language: segment.language,
46158
+ code: segment.content,
46159
+ runnable: true,
46160
+ onRun: (code) => onRunCodeSimulation(code, segment.language)
46161
+ },
46162
+ `code-${index}`
46163
+ );
46164
+ }
46165
+ return /* @__PURE__ */ jsx(
46166
+ CodeBlock,
46167
+ {
46168
+ language: segment.language ?? "text",
46169
+ code: segment.content
46170
+ },
46171
+ `code-${index}`
46172
+ );
46173
+ }
46174
+ if (segment.type === "quiz") {
46175
+ return /* @__PURE__ */ jsx(QuizBlock, { question: segment.question, answer: segment.answer }, `quiz-${index}`);
46176
+ }
46177
+ if (segment.type === "activate") {
46178
+ return /* @__PURE__ */ jsx(
46179
+ ActivationBlock,
46180
+ {
46181
+ question: segment.question,
46182
+ savedResponse: userProgress?.activationResponse
46183
+ },
46184
+ `activate-${index}`
46185
+ );
46186
+ }
46187
+ if (segment.type === "connect") {
46188
+ return /* @__PURE__ */ jsx(ConnectionBlock, { content: segment.content }, `connect-${index}`);
46189
+ }
46190
+ if (segment.type === "reflect") {
46191
+ const ri = reflectIndex++;
46192
+ return /* @__PURE__ */ jsx(
46193
+ ReflectionBlock,
46194
+ {
46195
+ prompt: segment.prompt,
46196
+ index: ri,
46197
+ savedNote: userProgress?.reflectionNotes?.[ri]
46198
+ },
46199
+ `reflect-${index}`
46200
+ );
46201
+ }
46202
+ if (segment.type === "bloom") {
46203
+ const bi = bloomIndex++;
46204
+ return /* @__PURE__ */ jsx(
46205
+ BloomQuizBlock,
46206
+ {
46207
+ level: segment.level,
46208
+ question: segment.question,
46209
+ answer: segment.answer,
46210
+ index: bi,
46211
+ isAnswered: userProgress?.bloomAnswered?.[bi]
46212
+ },
46213
+ `bloom-${index}`
46214
+ );
46215
+ }
46216
+ if (segment.type === "visualization") {
46217
+ return onRenderVisualization ? onRenderVisualization(segment.visualizationType, segment.description, index) ?? null : null;
46218
+ }
46219
+ return null;
46220
+ })
46221
+ }
46222
+ );
46223
+ };
46224
+ SegmentRenderer.displayName = "SegmentRenderer";
46225
+ }
46226
+ });
45657
46227
  function TraitSlot({
45658
46228
  slotNumber,
45659
46229
  equippedItem,
@@ -45883,7 +46453,7 @@ function SequenceBar({
45883
46453
  onSlotRemove(index);
45884
46454
  }, [onSlotRemove, playing]);
45885
46455
  const paddedSlots = Array.from({ length: maxSlots }, (_, i) => slots[i]);
45886
- return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
46456
+ return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React91__default.Fragment, { children: [
45887
46457
  i > 0 && /* @__PURE__ */ jsx(
45888
46458
  Typography,
45889
46459
  {
@@ -46862,7 +47432,7 @@ var init_StatCard = __esm({
46862
47432
  const labelToUse = propLabel ?? propTitle;
46863
47433
  const eventBus = useEventBus();
46864
47434
  const { t } = useTranslate();
46865
- const handleActionClick = React88__default.useCallback(() => {
47435
+ const handleActionClick = React91__default.useCallback(() => {
46866
47436
  if (action?.event) {
46867
47437
  eventBus.emit(`UI:${action.event}`, {});
46868
47438
  }
@@ -46873,7 +47443,7 @@ var init_StatCard = __esm({
46873
47443
  const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
46874
47444
  const isLoading = externalLoading ?? false;
46875
47445
  const error = externalError;
46876
- const computeMetricValue = React88__default.useCallback(
47446
+ const computeMetricValue = React91__default.useCallback(
46877
47447
  (metric, items) => {
46878
47448
  if (metric.value !== void 0) {
46879
47449
  return metric.value;
@@ -46912,7 +47482,7 @@ var init_StatCard = __esm({
46912
47482
  },
46913
47483
  []
46914
47484
  );
46915
- const schemaStats = React88__default.useMemo(() => {
47485
+ const schemaStats = React91__default.useMemo(() => {
46916
47486
  if (!metrics || metrics.length === 0) return null;
46917
47487
  return metrics.map((metric) => ({
46918
47488
  label: metric.label,
@@ -46920,7 +47490,7 @@ var init_StatCard = __esm({
46920
47490
  format: metric.format
46921
47491
  }));
46922
47492
  }, [metrics, data, computeMetricValue]);
46923
- const calculatedTrend = React88__default.useMemo(() => {
47493
+ const calculatedTrend = React91__default.useMemo(() => {
46924
47494
  if (manualTrend !== void 0) return manualTrend;
46925
47495
  if (previousValue === void 0 || currentValue === void 0)
46926
47496
  return void 0;
@@ -47885,7 +48455,7 @@ var init_Timeline = __esm({
47885
48455
  }) => {
47886
48456
  const { t } = useTranslate();
47887
48457
  const entityData = Array.isArray(entity) ? entity : [];
47888
- const items = React88__default.useMemo(() => {
48458
+ const items = React91__default.useMemo(() => {
47889
48459
  if (propItems) return propItems;
47890
48460
  if (entityData.length === 0) return [];
47891
48461
  return entityData.map((record, idx) => {
@@ -47992,7 +48562,7 @@ var init_Timeline = __esm({
47992
48562
  }
47993
48563
  });
47994
48564
  function extractToastProps(children) {
47995
- if (!React88__default.isValidElement(children)) {
48565
+ if (!React91__default.isValidElement(children)) {
47996
48566
  if (typeof children === "string") {
47997
48567
  return { message: children };
47998
48568
  }
@@ -48030,7 +48600,7 @@ var init_ToastSlot = __esm({
48030
48600
  eventBus.emit("UI:CLOSE");
48031
48601
  };
48032
48602
  if (!isVisible) return null;
48033
- const isCustomContent = React88__default.isValidElement(children) && !message;
48603
+ const isCustomContent = React91__default.isValidElement(children) && !message;
48034
48604
  return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
48035
48605
  Toast,
48036
48606
  {
@@ -48564,7 +49134,7 @@ var init_WorldMapTemplate = __esm({
48564
49134
  }
48565
49135
  });
48566
49136
  function lazyThree(name, loader) {
48567
- const Lazy = React88__default.lazy(
49137
+ const Lazy = React91__default.lazy(
48568
49138
  () => loader().then((m) => {
48569
49139
  const Resolved = m[name];
48570
49140
  if (!Resolved) {
@@ -48576,13 +49146,13 @@ function lazyThree(name, loader) {
48576
49146
  })
48577
49147
  );
48578
49148
  function ThreeWrapper(props) {
48579
- return React88__default.createElement(
49149
+ return React91__default.createElement(
48580
49150
  ThreeBoundary,
48581
49151
  { name },
48582
- React88__default.createElement(
48583
- React88__default.Suspense,
49152
+ React91__default.createElement(
49153
+ React91__default.Suspense,
48584
49154
  { fallback: null },
48585
- React88__default.createElement(Lazy, props)
49155
+ React91__default.createElement(Lazy, props)
48586
49156
  )
48587
49157
  );
48588
49158
  }
@@ -48598,6 +49168,7 @@ var init_component_registry_generated = __esm({
48598
49168
  init_ActionButtons();
48599
49169
  init_ActionPalette();
48600
49170
  init_ActionTile();
49171
+ init_ActivationBlock();
48601
49172
  init_ComponentPatterns();
48602
49173
  init_AnimatedCounter();
48603
49174
  init_AnimatedGraphic();
@@ -48610,6 +49181,7 @@ var init_component_registry_generated = __esm({
48610
49181
  init_BattleBoard();
48611
49182
  init_BattleTemplate();
48612
49183
  init_BehaviorView();
49184
+ init_BloomQuizBlock();
48613
49185
  init_BookChapterView();
48614
49186
  init_BookCoverPage();
48615
49187
  init_BookNavBar();
@@ -48637,12 +49209,14 @@ var init_component_registry_generated = __esm({
48637
49209
  init_ChoiceButton();
48638
49210
  init_ClassifierBoard();
48639
49211
  init_CodeBlock();
49212
+ init_CodeRunnerPanel();
48640
49213
  init_CombatLog();
48641
49214
  init_ComboCounter();
48642
49215
  init_CommunityLinks();
48643
49216
  init_ConditionalWrapper();
48644
49217
  init_ConfettiEffect();
48645
49218
  init_ConfirmDialog();
49219
+ init_ConnectionBlock();
48646
49220
  init_Container();
48647
49221
  init_ContentRenderer();
48648
49222
  init_ContentSection();
@@ -48770,6 +49344,7 @@ var init_component_registry_generated = __esm({
48770
49344
  init_QuizBlock();
48771
49345
  init_Radio();
48772
49346
  init_RangeSlider();
49347
+ init_ReflectionBlock();
48773
49348
  init_RelationSelect();
48774
49349
  init_RepeatableFormSection();
48775
49350
  init_ReplyTree();
@@ -48784,6 +49359,7 @@ var init_component_registry_generated = __esm({
48784
49359
  init_SearchInput();
48785
49360
  init_Section();
48786
49361
  init_SectionHeader();
49362
+ init_SegmentRenderer();
48787
49363
  init_Select();
48788
49364
  init_SequenceBar();
48789
49365
  init_SequencerBoard();
@@ -48875,7 +49451,7 @@ var init_component_registry_generated = __esm({
48875
49451
  init_WorldMapBoard();
48876
49452
  init_WorldMapTemplate();
48877
49453
  init_XPBar();
48878
- ThreeBoundary = class extends React88__default.Component {
49454
+ ThreeBoundary = class extends React91__default.Component {
48879
49455
  constructor() {
48880
49456
  super(...arguments);
48881
49457
  __publicField(this, "state", { failed: false });
@@ -48885,7 +49461,7 @@ var init_component_registry_generated = __esm({
48885
49461
  }
48886
49462
  render() {
48887
49463
  if (this.state.failed) {
48888
- return React88__default.createElement(
49464
+ return React91__default.createElement(
48889
49465
  "div",
48890
49466
  {
48891
49467
  "data-testid": "three-unavailable",
@@ -48909,6 +49485,7 @@ var init_component_registry_generated = __esm({
48909
49485
  "ActionButtons": ActionButtons,
48910
49486
  "ActionPalette": ActionPalette,
48911
49487
  "ActionTile": ActionTile,
49488
+ "ActivationBlock": ActivationBlock,
48912
49489
  "Alert": AlertPattern,
48913
49490
  "AlertPattern": AlertPattern,
48914
49491
  "AnimatedCounter": AnimatedCounter,
@@ -48922,6 +49499,7 @@ var init_component_registry_generated = __esm({
48922
49499
  "BattleBoard": BattleBoard,
48923
49500
  "BattleTemplate": BattleTemplate,
48924
49501
  "BehaviorView": BehaviorView,
49502
+ "BloomQuizBlock": BloomQuizBlock,
48925
49503
  "BookChapterView": BookChapterView,
48926
49504
  "BookCoverPage": BookCoverPage,
48927
49505
  "BookNavBar": BookNavBar,
@@ -48952,12 +49530,14 @@ var init_component_registry_generated = __esm({
48952
49530
  "ChoiceButton": ChoiceButton,
48953
49531
  "ClassifierBoard": ClassifierBoard,
48954
49532
  "CodeBlock": CodeBlock,
49533
+ "CodeRunnerPanel": CodeRunnerPanel,
48955
49534
  "CombatLog": CombatLog,
48956
49535
  "ComboCounter": ComboCounter,
48957
49536
  "CommunityLinks": CommunityLinks,
48958
49537
  "ConditionalWrapper": ConditionalWrapper,
48959
49538
  "ConfettiEffect": ConfettiEffect,
48960
49539
  "ConfirmDialog": ConfirmDialog,
49540
+ "ConnectionBlock": ConnectionBlock,
48961
49541
  "Container": Container,
48962
49542
  "ContentRenderer": ContentRenderer,
48963
49543
  "ContentSection": ContentSection,
@@ -49094,6 +49674,7 @@ var init_component_registry_generated = __esm({
49094
49674
  "QuizBlock": QuizBlock,
49095
49675
  "Radio": Radio,
49096
49676
  "RangeSlider": RangeSlider,
49677
+ "ReflectionBlock": ReflectionBlock,
49097
49678
  "RelationSelect": RelationSelect,
49098
49679
  "RepeatableFormSection": RepeatableFormSection,
49099
49680
  "ReplyTree": ReplyTree,
@@ -49108,6 +49689,7 @@ var init_component_registry_generated = __esm({
49108
49689
  "SearchInput": SearchInput,
49109
49690
  "Section": Section,
49110
49691
  "SectionHeader": SectionHeader,
49692
+ "SegmentRenderer": SegmentRenderer,
49111
49693
  "Select": Select,
49112
49694
  "SequenceBar": SequenceBar,
49113
49695
  "SequencerBoard": SequencerBoard,
@@ -49221,7 +49803,7 @@ function SuspenseConfigProvider({
49221
49803
  config,
49222
49804
  children
49223
49805
  }) {
49224
- return React88__default.createElement(
49806
+ return React91__default.createElement(
49225
49807
  SuspenseConfigContext.Provider,
49226
49808
  { value: config },
49227
49809
  children
@@ -49711,7 +50293,7 @@ function renderPatternChildren(children, onDismiss, parentId = "root", parentPat
49711
50293
  const key = `${parentId}-${index}-trait:${traitName}`;
49712
50294
  return /* @__PURE__ */ jsx(TraitFrame, { traitName }, key);
49713
50295
  }
49714
- return /* @__PURE__ */ jsx(React88__default.Fragment, { children: child }, `${parentId}-${index}`);
50296
+ return /* @__PURE__ */ jsx(React91__default.Fragment, { children: child }, `${parentId}-${index}`);
49715
50297
  }
49716
50298
  if (!child || typeof child !== "object") return null;
49717
50299
  const childId = `${parentId}-${index}`;
@@ -49751,14 +50333,14 @@ function isPatternConfig(value) {
49751
50333
  if (value === null || value === void 0) return false;
49752
50334
  if (typeof value !== "object") return false;
49753
50335
  if (Array.isArray(value)) return false;
49754
- if (React88__default.isValidElement(value)) return false;
50336
+ if (React91__default.isValidElement(value)) return false;
49755
50337
  if (value instanceof Date) return false;
49756
50338
  if (typeof value === "function") return false;
49757
50339
  const record = value;
49758
50340
  return "type" in record && typeof record.type === "string";
49759
50341
  }
49760
50342
  function isPlainConfigObject(value) {
49761
- if (React88__default.isValidElement(value)) return false;
50343
+ if (React91__default.isValidElement(value)) return false;
49762
50344
  if (value instanceof Date) return false;
49763
50345
  const proto = Object.getPrototypeOf(value);
49764
50346
  return proto === Object.prototype || proto === null;
@@ -50265,7 +50847,7 @@ var AvlTransition = ({
50265
50847
  opacity = 1,
50266
50848
  className
50267
50849
  }) => {
50268
- const ids = React88__default.useMemo(() => {
50850
+ const ids = React91__default.useMemo(() => {
50269
50851
  avlTransitionId += 1;
50270
50852
  return { arrow: `avl-tr-${avlTransitionId}-arrow` };
50271
50853
  }, []);
@@ -50826,7 +51408,7 @@ var AvlStateMachine = ({
50826
51408
  color = "var(--color-primary)",
50827
51409
  animated = false
50828
51410
  }) => {
50829
- const ids = React88__default.useMemo(() => {
51411
+ const ids = React91__default.useMemo(() => {
50830
51412
  avlSmId += 1;
50831
51413
  const base = `avl-sm-${avlSmId}`;
50832
51414
  return { glow: `${base}-glow`, grad: `${base}-grad` };
@@ -51025,7 +51607,7 @@ var AvlOrbitalUnit = ({
51025
51607
  color = "var(--color-primary)",
51026
51608
  animated = false
51027
51609
  }) => {
51028
- const ids = React88__default.useMemo(() => {
51610
+ const ids = React91__default.useMemo(() => {
51029
51611
  avlOuId += 1;
51030
51612
  const base = `avl-ou-${avlOuId}`;
51031
51613
  return { glow: `${base}-glow`, grad: `${base}-grad` };
@@ -51121,7 +51703,7 @@ var AvlClosedCircuit = ({
51121
51703
  color = "var(--color-primary)",
51122
51704
  animated = false
51123
51705
  }) => {
51124
- const ids = React88__default.useMemo(() => {
51706
+ const ids = React91__default.useMemo(() => {
51125
51707
  avlCcId += 1;
51126
51708
  const base = `avl-cc-${avlCcId}`;
51127
51709
  return { glow: `${base}-glow`, grad: `${base}-grad`, arrow: `${base}-arrow` };
@@ -51276,7 +51858,7 @@ var AvlEmitListen = ({
51276
51858
  color = "var(--color-primary)",
51277
51859
  animated = false
51278
51860
  }) => {
51279
- const ids = React88__default.useMemo(() => {
51861
+ const ids = React91__default.useMemo(() => {
51280
51862
  avlElId += 1;
51281
51863
  const base = `avl-el-${avlElId}`;
51282
51864
  return { arrow: `${base}-arrow`, grad: `${base}-grad` };
@@ -51550,7 +52132,7 @@ function renderNode(node, color, glowId) {
51550
52132
  const baseR = node.type === "operator" ? 20 : 16;
51551
52133
  const r2 = Math.max(baseR, labelLen * 3.5 + 6);
51552
52134
  const nc = nodeColor(node.type, color);
51553
- return /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
52135
+ return /* @__PURE__ */ jsxs(React91__default.Fragment, { children: [
51554
52136
  node.children.map((child, i) => {
51555
52137
  const childR = Math.max(
51556
52138
  child.type === "operator" ? 20 : 16,
@@ -51607,7 +52189,7 @@ var AvlExprTree = ({
51607
52189
  className,
51608
52190
  color = "var(--color-primary)"
51609
52191
  }) => {
51610
- const ids = React88__default.useMemo(() => {
52192
+ const ids = React91__default.useMemo(() => {
51611
52193
  avlEtId += 1;
51612
52194
  return { glow: `avl-et-${avlEtId}-glow` };
51613
52195
  }, []);
@@ -52431,7 +53013,7 @@ var SystemNode = ({ data }) => {
52431
53013
  stateChain.length > 0 && /* @__PURE__ */ jsx("svg", { width: stateChain.length * 14 + 2, height: 10, viewBox: `0 0 ${stateChain.length * 14 + 2} 10`, children: stateChain.map((s, i) => {
52432
53014
  const tc = transitionCounts[s.name] ?? 0;
52433
53015
  const role = getStateRole(s.name, s.isInitial, s.isTerminal, tc, maxTC);
52434
- return /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
53016
+ return /* @__PURE__ */ jsxs(React91__default.Fragment, { children: [
52435
53017
  /* @__PURE__ */ jsx(AvlState, { x: i * 14 + 1, y: 1, width: 10, height: 8, name: "", role, isInitial: s.isInitial, isTerminal: s.isTerminal }),
52436
53018
  i < stateChain.length - 1 && /* @__PURE__ */ jsx("line", { x1: i * 14 + 12, y1: 5, x2: i * 14 + 15, y2: 5, stroke: "var(--color-border)", strokeWidth: 0.5 })
52437
53019
  ] }, s.name);
@@ -53583,7 +54165,7 @@ function resolveLambdaBindings(body, params, item, index) {
53583
54165
  if (Array.isArray(body)) {
53584
54166
  return body.map((b) => recur(b));
53585
54167
  }
53586
- if (body !== null && typeof body === "object" && !React88__default.isValidElement(body) && !(body instanceof Date) && typeof body !== "function") {
54168
+ if (body !== null && typeof body === "object" && !React91__default.isValidElement(body) && !(body instanceof Date) && typeof body !== "function") {
53587
54169
  const out = {};
53588
54170
  for (const [k, v] of Object.entries(body)) {
53589
54171
  out[k] = recur(v);
@@ -53602,7 +54184,7 @@ function getSlotContentRenderer2() {
53602
54184
  function makeLambdaFn(params, lambdaBody, callerKey) {
53603
54185
  return (item, index) => {
53604
54186
  const resolvedBody = resolveLambdaBindings(lambdaBody, params, item, index);
53605
- if (resolvedBody === null || typeof resolvedBody !== "object" || Array.isArray(resolvedBody) || typeof resolvedBody === "function" || React88__default.isValidElement(resolvedBody) || resolvedBody instanceof Date) {
54187
+ if (resolvedBody === null || typeof resolvedBody !== "object" || Array.isArray(resolvedBody) || typeof resolvedBody === "function" || React91__default.isValidElement(resolvedBody) || resolvedBody instanceof Date) {
53606
54188
  return null;
53607
54189
  }
53608
54190
  const record = resolvedBody;
@@ -53621,7 +54203,7 @@ function makeLambdaFn(params, lambdaBody, callerKey) {
53621
54203
  props: childProps,
53622
54204
  priority: 0
53623
54205
  };
53624
- return React88__default.createElement(SlotContentRenderer2, { content: childContent });
54206
+ return React91__default.createElement(SlotContentRenderer2, { content: childContent });
53625
54207
  };
53626
54208
  }
53627
54209
  function convertNode(node, callerKey) {
@@ -53640,7 +54222,7 @@ function convertNode(node, callerKey) {
53640
54222
  });
53641
54223
  return anyChanged ? mapped : node;
53642
54224
  }
53643
- if (typeof node === "object" && !React88__default.isValidElement(node) && !(node instanceof Date)) {
54225
+ if (typeof node === "object" && !React91__default.isValidElement(node) && !(node instanceof Date)) {
53644
54226
  return convertObjectProps(node);
53645
54227
  }
53646
54228
  return node;
@@ -55653,8 +56235,8 @@ function CanvasDndProvider({
55653
56235
  }) {
55654
56236
  const eventBus = useEventBus();
55655
56237
  const sensors = useAlmadarDndSensors(false);
55656
- const [activePayload, setActivePayload] = React88__default.useState(null);
55657
- const handleDragStart = React88__default.useCallback((e) => {
56238
+ const [activePayload, setActivePayload] = React91__default.useState(null);
56239
+ const handleDragStart = React91__default.useCallback((e) => {
55658
56240
  const data = e.active.data.current;
55659
56241
  const payload = data?.payload;
55660
56242
  if (payload) {
@@ -55665,7 +56247,7 @@ function CanvasDndProvider({
55665
56247
  log11.warn("dragStart:missing-payload", { id: e.active.id });
55666
56248
  }
55667
56249
  }, [eventBus]);
55668
- const handleDragEnd = React88__default.useCallback((e) => {
56250
+ const handleDragEnd = React91__default.useCallback((e) => {
55669
56251
  setActivePayload(null);
55670
56252
  const activeData = e.active.data.current;
55671
56253
  const payload = activeData?.payload;
@@ -55694,7 +56276,7 @@ function CanvasDndProvider({
55694
56276
  const suppressed = onDrop ? onDrop(drop) === true : false;
55695
56277
  if (!suppressed) defaultEmit(eventBus, drop);
55696
56278
  }, [eventBus, onDrop]);
55697
- const handleDragCancel = React88__default.useCallback(() => {
56279
+ const handleDragCancel = React91__default.useCallback(() => {
55698
56280
  setActivePayload(null);
55699
56281
  log11.info("dragCancel");
55700
56282
  }, []);
@@ -56448,7 +57030,7 @@ var OrbPreviewNodeInner = (props) => {
56448
57030
  }
56449
57031
  );
56450
57032
  };
56451
- var OrbPreviewNode = React88__default.memo(OrbPreviewNodeInner);
57033
+ var OrbPreviewNode = React91__default.memo(OrbPreviewNodeInner);
56452
57034
  OrbPreviewNode.displayName = "OrbPreviewNode";
56453
57035
  orbPreviewLog.debug("export-resolved", () => ({
56454
57036
  type: typeof OrbPreviewNode,
@@ -56553,7 +57135,7 @@ var EventFlowEdgeInner = (props) => {
56553
57135
  ) })
56554
57136
  ] });
56555
57137
  };
56556
- var EventFlowEdge = React88__default.memo(EventFlowEdgeInner);
57138
+ var EventFlowEdge = React91__default.memo(EventFlowEdgeInner);
56557
57139
  EventFlowEdge.displayName = "EventFlowEdge";
56558
57140
 
56559
57141
  // components/avl/molecules/BehaviorComposeNode.tsx
@@ -56700,7 +57282,7 @@ var BehaviorComposeNodeInner = (props) => {
56700
57282
  }
56701
57283
  );
56702
57284
  };
56703
- var BehaviorComposeNode = React88__default.memo(BehaviorComposeNodeInner);
57285
+ var BehaviorComposeNode = React91__default.memo(BehaviorComposeNodeInner);
56704
57286
  BehaviorComposeNode.displayName = "BehaviorComposeNode";
56705
57287
 
56706
57288
  // components/avl/molecules/avl-behavior-compose-converter.ts
@@ -57712,7 +58294,7 @@ var TraitCardNodeInner = (props) => {
57712
58294
  }
57713
58295
  );
57714
58296
  };
57715
- var TraitCardNode = React88__default.memo(TraitCardNodeInner);
58297
+ var TraitCardNode = React91__default.memo(TraitCardNodeInner);
57716
58298
  TraitCardNode.displayName = "TraitCardNode";
57717
58299
 
57718
58300
  // components/avl/organisms/FlowCanvas.tsx
@@ -57785,7 +58367,7 @@ function FlowCanvasInner({
57785
58367
  initialOrbital
57786
58368
  );
57787
58369
  const [expandedBehaviorAlias, setExpandedBehaviorAlias] = useState(void 0);
57788
- const screenSizeUserOverrideRef = React88__default.useRef(false);
58370
+ const screenSizeUserOverrideRef = React91__default.useRef(false);
57789
58371
  const [screenSize, setScreenSize] = useState(
57790
58372
  () => typeof window === "undefined" ? "laptop" : detectScreenSize(window.innerWidth)
57791
58373
  );
@@ -58169,7 +58751,7 @@ var ZoomBreadcrumb = ({
58169
58751
  if (eventName && band === "detail") {
58170
58752
  segments.push({ icon: "\u26A1", label: eventName });
58171
58753
  }
58172
- return /* @__PURE__ */ jsx("div", { className: "absolute top-2 left-2 z-10 flex items-center gap-1 px-2 py-1 rounded-md bg-card/90 border border-border text-xs text-muted-foreground backdrop-blur-sm", children: segments.map((seg, i) => /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
58754
+ return /* @__PURE__ */ jsx("div", { className: "absolute top-2 left-2 z-10 flex items-center gap-1 px-2 py-1 rounded-md bg-card/90 border border-border text-xs text-muted-foreground backdrop-blur-sm", children: segments.map((seg, i) => /* @__PURE__ */ jsxs(React91__default.Fragment, { children: [
58173
58755
  i > 0 && /* @__PURE__ */ jsx("span", { className: "opacity-40", children: ">" }),
58174
58756
  /* @__PURE__ */ jsx("span", { className: "opacity-60", children: seg.icon }),
58175
58757
  /* @__PURE__ */ jsx("span", { children: seg.label })
@@ -58510,7 +59092,7 @@ var EventWireOverlay = ({
58510
59092
  containerW,
58511
59093
  containerH
58512
59094
  }) => {
58513
- const ids = React88__default.useMemo(() => {
59095
+ const ids = React91__default.useMemo(() => {
58514
59096
  avlOczWireId += 1;
58515
59097
  return { arrow: `avl-ocz-wire-${avlOczWireId}-arrow` };
58516
59098
  }, []);
@@ -58877,7 +59459,7 @@ var AvlOrbitalsCosmicZoom = ({
58877
59459
  borderRadius: 6,
58878
59460
  border: `1px solid ${color}`
58879
59461
  },
58880
- children: /* @__PURE__ */ jsx(HStack, { gap: "xs", align: "center", children: breadcrumbs.map((crumb, i) => /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
59462
+ children: /* @__PURE__ */ jsx(HStack, { gap: "xs", align: "center", children: breadcrumbs.map((crumb, i) => /* @__PURE__ */ jsxs(React91__default.Fragment, { children: [
58881
59463
  i > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", style: { opacity: 0.5, color }, children: "/" }),
58882
59464
  i < breadcrumbs.length - 1 ? /* @__PURE__ */ jsx(
58883
59465
  Box,