@discuss-ds/ui 0.7.1 → 0.8.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/index.d.cts CHANGED
@@ -783,6 +783,33 @@ interface RatingScaleProps extends Omit<React.ComponentPropsWithoutRef<typeof To
783
783
  }
784
784
  declare const RatingScale: React.ForwardRefExoticComponent<RatingScaleProps & React.RefAttributes<HTMLDivElement>>;
785
785
 
786
+ interface StimulusCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
787
+ /** Image shown in the 80px thumbnail. Without one the thumbnail shows `icon` on a neutral fill. */
788
+ thumbnail?: string;
789
+ /** Alt text for `thumbnail`. Leave empty when the caption already describes the image. */
790
+ thumbnailAlt?: string;
791
+ /** Placeholder shown in the thumbnail when there is no `thumbnail` (e.g. a video camera for a video). Defaults to an image icon. */
792
+ icon?: React.ReactNode;
793
+ /**
794
+ * `error` swaps the thumbnail for a broken-image icon on the destructive soft fill, for a stimulus that could not be
795
+ * loaded. It is also applied automatically when `thumbnail` fails to load.
796
+ */
797
+ status?: 'default' | 'error';
798
+ /** Small line above the caption saying who speaks it. */
799
+ label?: React.ReactNode;
800
+ /** What the AI moderator says when it shows the stimulus, e.g. "Look at this image". */
801
+ caption?: string;
802
+ /** Editor mode: makes the caption editable (click to edit, Enter or blur saves) and is called with the new text. */
803
+ onCaptionChange?: (caption: string) => void;
804
+ /** Editor mode: placeholder for an empty caption. */
805
+ captionPlaceholder?: string;
806
+ /** Shows the trash button. */
807
+ onRemove?: () => void;
808
+ /** Accessible name of the trash button. Defaults to "Remove stimulus". */
809
+ removeLabel?: string;
810
+ }
811
+ declare const StimulusCard: React.ForwardRefExoticComponent<StimulusCardProps & React.RefAttributes<HTMLDivElement>>;
812
+
786
813
  interface ProgressProps extends React.ComponentPropsWithoutRef<typeof Progress$1.Root> {
787
814
  /** Heading shown above the track, left-aligned (e.g. "Project Progress"). */
788
815
  label?: React.ReactNode;
@@ -935,4 +962,4 @@ interface PaginationProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onCha
935
962
  }
936
963
  declare const Pagination: React.ForwardRefExoticComponent<PaginationProps & React.RefAttributes<HTMLElement>>;
937
964
 
938
- export { AIMiniAvatar, type AIMiniAvatarProps, AIResponseContainer, type AIResponseContainerProps, type AIStatus, type ActivitySection, type ActivityStat, ActivityStructure, type ActivityStructureProps, AskAiInput, type AskAiInputProps, AskAiToggle, type AskAiToggleProps, Badge, type BadgeProps, Button, type ButtonProps, Calendar, type CalendarProps, ChatChoices, type ChatChoicesProps, ChatInput, type ChatInputProps, ChatOption, type ChatOptionActionProps, type ChatOptionCheckboxProps, type ChatOptionProps, type ChatOptionRadioProps, Checkbox, CheckboxField, type CheckboxFieldProps, type CheckboxProps, DatePicker, type DatePickerProps, DateTimePicker, type DateTimePickerProps, Dialog, DialogBody, DialogClose, DialogContent, type DialogContentProps, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemProps, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, type DropdownMenuSelectableItemProps, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EditableTag, type EditableTagProps, Field, type FieldControlProps, type FieldProps, type FieldStatus, FileAttachment, type FileAttachmentProps, FileUploadItem, type FileUploadItemProps, FileUploadZone, type FileUploadZoneProps, Form, FormControl, type FormControlProps, FormDescription, type FormDescriptionProps, FormField, FormItem, type FormItemProps, FormLabel, type FormLabelProps, FormMessage, type FormMessageProps, ImagePreview, type ImagePreviewProps, ImageThumbnails, type ImageThumbnailsProps, InlineEdit, type InlineEditProps, Input, type InputProps, InputWithAction, type InputWithActionProps, Label, type LabelProps, MediaInfo, type MediaInfoProps, NumberInput, type NumberInputProps, OpenEndAnswer, type OpenEndAnswerProps, Pagination, type PaginationItemValue, type PaginationProps, Progress, type ProgressProps, ProjectSelector, type ProjectSelectorProps, QuestionCard, type QuestionCheckboxOptionProps, QuestionEditorCard, type QuestionEditorCardProps, QuestionHeader, type QuestionHeaderProps, QuestionNavItem, type QuestionNavItemProps, QuestionOption, QuestionOptionEditor, type QuestionOptionEditorProps, type QuestionOptionProps, QuestionOtherOption, type QuestionOtherOptionProps, type QuestionRadioOptionProps, type QuestionType, QuestionTypeIcon, type QuestionTypeIconProps, RadioGroup, RadioGroupFieldItem, type RadioGroupFieldItemProps, RadioGroupItem, type RadioGroupItemProps, type RadioGroupProps, type RankItemData, RankList, type RankListProps, RatingScale, type RatingScaleProps, SearchBar, type SearchBarProps, Select, SelectContent, type SelectContentProps, SelectGroup, SelectItem, type SelectItemProps, SelectTrigger, type SelectTriggerProps, SelectValue, Slider, type SliderProps, StatCard, type StatCardProps, StatusTag, type StatusTagProps, Switch, type SwitchProps, TabItem, type TabItemProps, TabNavigation, TabNavigationContext, type TabNavigationProps, type TabNavigationVariant, Table, TableBody, TableCell, type TableCellProps, TableCellTwoLines, type TableCellTwoLinesProps, TableHead, type TableHeadProps, TableHeader, type TableProps, TableRow, type TableRowProps, Tabs, TabsContent, Tag, type TagProps, Textarea, type TextareaProps, TimeItem, type TimeItemProps, TimePicker, type TimePickerProps, type TimeValue, Timestamp, type TimestampProps, Toast, ToastAction, ToastInline, type ToastInlineProps, type ToastProps, ToastProvider, type ToastVariant, ToastViewport, Toggle, type ToggleProps, Tooltip, TooltipContent, type TooltipContentProps, TooltipProvider, TooltipTrigger, TopicActivityRow, type TopicActivityRowProps, TopicCard, TopicCardMetaItem, type TopicCardMetaItemProps, type TopicCardProps, TopicCardTag, UserMessageBubble, type UserMessageBubbleProps, VideoPlayer, type VideoPlayerProps, VolumeControl, type VolumeControlProps, fieldSurfaceClasses, formatDateTime, getPaginationItems, useFormField };
965
+ export { AIMiniAvatar, type AIMiniAvatarProps, AIResponseContainer, type AIResponseContainerProps, type AIStatus, type ActivitySection, type ActivityStat, ActivityStructure, type ActivityStructureProps, AskAiInput, type AskAiInputProps, AskAiToggle, type AskAiToggleProps, Badge, type BadgeProps, Button, type ButtonProps, Calendar, type CalendarProps, ChatChoices, type ChatChoicesProps, ChatInput, type ChatInputProps, ChatOption, type ChatOptionActionProps, type ChatOptionCheckboxProps, type ChatOptionProps, type ChatOptionRadioProps, Checkbox, CheckboxField, type CheckboxFieldProps, type CheckboxProps, DatePicker, type DatePickerProps, DateTimePicker, type DateTimePickerProps, Dialog, DialogBody, DialogClose, DialogContent, type DialogContentProps, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemProps, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, type DropdownMenuSelectableItemProps, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EditableTag, type EditableTagProps, Field, type FieldControlProps, type FieldProps, type FieldStatus, FileAttachment, type FileAttachmentProps, FileUploadItem, type FileUploadItemProps, FileUploadZone, type FileUploadZoneProps, Form, FormControl, type FormControlProps, FormDescription, type FormDescriptionProps, FormField, FormItem, type FormItemProps, FormLabel, type FormLabelProps, FormMessage, type FormMessageProps, ImagePreview, type ImagePreviewProps, ImageThumbnails, type ImageThumbnailsProps, InlineEdit, type InlineEditProps, Input, type InputProps, InputWithAction, type InputWithActionProps, Label, type LabelProps, MediaInfo, type MediaInfoProps, NumberInput, type NumberInputProps, OpenEndAnswer, type OpenEndAnswerProps, Pagination, type PaginationItemValue, type PaginationProps, Progress, type ProgressProps, ProjectSelector, type ProjectSelectorProps, QuestionCard, type QuestionCheckboxOptionProps, QuestionEditorCard, type QuestionEditorCardProps, QuestionHeader, type QuestionHeaderProps, QuestionNavItem, type QuestionNavItemProps, QuestionOption, QuestionOptionEditor, type QuestionOptionEditorProps, type QuestionOptionProps, QuestionOtherOption, type QuestionOtherOptionProps, type QuestionRadioOptionProps, type QuestionType, QuestionTypeIcon, type QuestionTypeIconProps, RadioGroup, RadioGroupFieldItem, type RadioGroupFieldItemProps, RadioGroupItem, type RadioGroupItemProps, type RadioGroupProps, type RankItemData, RankList, type RankListProps, RatingScale, type RatingScaleProps, SearchBar, type SearchBarProps, Select, SelectContent, type SelectContentProps, SelectGroup, SelectItem, type SelectItemProps, SelectTrigger, type SelectTriggerProps, SelectValue, Slider, type SliderProps, StatCard, type StatCardProps, StatusTag, type StatusTagProps, StimulusCard, type StimulusCardProps, Switch, type SwitchProps, TabItem, type TabItemProps, TabNavigation, TabNavigationContext, type TabNavigationProps, type TabNavigationVariant, Table, TableBody, TableCell, type TableCellProps, TableCellTwoLines, type TableCellTwoLinesProps, TableHead, type TableHeadProps, TableHeader, type TableProps, TableRow, type TableRowProps, Tabs, TabsContent, Tag, type TagProps, Textarea, type TextareaProps, TimeItem, type TimeItemProps, TimePicker, type TimePickerProps, type TimeValue, Timestamp, type TimestampProps, Toast, ToastAction, ToastInline, type ToastInlineProps, type ToastProps, ToastProvider, type ToastVariant, ToastViewport, Toggle, type ToggleProps, Tooltip, TooltipContent, type TooltipContentProps, TooltipProvider, TooltipTrigger, TopicActivityRow, type TopicActivityRowProps, TopicCard, TopicCardMetaItem, type TopicCardMetaItemProps, type TopicCardProps, TopicCardTag, UserMessageBubble, type UserMessageBubbleProps, VideoPlayer, type VideoPlayerProps, VolumeControl, type VolumeControlProps, fieldSurfaceClasses, formatDateTime, getPaginationItems, useFormField };
package/dist/index.d.ts CHANGED
@@ -783,6 +783,33 @@ interface RatingScaleProps extends Omit<React.ComponentPropsWithoutRef<typeof To
783
783
  }
784
784
  declare const RatingScale: React.ForwardRefExoticComponent<RatingScaleProps & React.RefAttributes<HTMLDivElement>>;
785
785
 
786
+ interface StimulusCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
787
+ /** Image shown in the 80px thumbnail. Without one the thumbnail shows `icon` on a neutral fill. */
788
+ thumbnail?: string;
789
+ /** Alt text for `thumbnail`. Leave empty when the caption already describes the image. */
790
+ thumbnailAlt?: string;
791
+ /** Placeholder shown in the thumbnail when there is no `thumbnail` (e.g. a video camera for a video). Defaults to an image icon. */
792
+ icon?: React.ReactNode;
793
+ /**
794
+ * `error` swaps the thumbnail for a broken-image icon on the destructive soft fill, for a stimulus that could not be
795
+ * loaded. It is also applied automatically when `thumbnail` fails to load.
796
+ */
797
+ status?: 'default' | 'error';
798
+ /** Small line above the caption saying who speaks it. */
799
+ label?: React.ReactNode;
800
+ /** What the AI moderator says when it shows the stimulus, e.g. "Look at this image". */
801
+ caption?: string;
802
+ /** Editor mode: makes the caption editable (click to edit, Enter or blur saves) and is called with the new text. */
803
+ onCaptionChange?: (caption: string) => void;
804
+ /** Editor mode: placeholder for an empty caption. */
805
+ captionPlaceholder?: string;
806
+ /** Shows the trash button. */
807
+ onRemove?: () => void;
808
+ /** Accessible name of the trash button. Defaults to "Remove stimulus". */
809
+ removeLabel?: string;
810
+ }
811
+ declare const StimulusCard: React.ForwardRefExoticComponent<StimulusCardProps & React.RefAttributes<HTMLDivElement>>;
812
+
786
813
  interface ProgressProps extends React.ComponentPropsWithoutRef<typeof Progress$1.Root> {
787
814
  /** Heading shown above the track, left-aligned (e.g. "Project Progress"). */
788
815
  label?: React.ReactNode;
@@ -935,4 +962,4 @@ interface PaginationProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onCha
935
962
  }
936
963
  declare const Pagination: React.ForwardRefExoticComponent<PaginationProps & React.RefAttributes<HTMLElement>>;
937
964
 
938
- export { AIMiniAvatar, type AIMiniAvatarProps, AIResponseContainer, type AIResponseContainerProps, type AIStatus, type ActivitySection, type ActivityStat, ActivityStructure, type ActivityStructureProps, AskAiInput, type AskAiInputProps, AskAiToggle, type AskAiToggleProps, Badge, type BadgeProps, Button, type ButtonProps, Calendar, type CalendarProps, ChatChoices, type ChatChoicesProps, ChatInput, type ChatInputProps, ChatOption, type ChatOptionActionProps, type ChatOptionCheckboxProps, type ChatOptionProps, type ChatOptionRadioProps, Checkbox, CheckboxField, type CheckboxFieldProps, type CheckboxProps, DatePicker, type DatePickerProps, DateTimePicker, type DateTimePickerProps, Dialog, DialogBody, DialogClose, DialogContent, type DialogContentProps, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemProps, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, type DropdownMenuSelectableItemProps, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EditableTag, type EditableTagProps, Field, type FieldControlProps, type FieldProps, type FieldStatus, FileAttachment, type FileAttachmentProps, FileUploadItem, type FileUploadItemProps, FileUploadZone, type FileUploadZoneProps, Form, FormControl, type FormControlProps, FormDescription, type FormDescriptionProps, FormField, FormItem, type FormItemProps, FormLabel, type FormLabelProps, FormMessage, type FormMessageProps, ImagePreview, type ImagePreviewProps, ImageThumbnails, type ImageThumbnailsProps, InlineEdit, type InlineEditProps, Input, type InputProps, InputWithAction, type InputWithActionProps, Label, type LabelProps, MediaInfo, type MediaInfoProps, NumberInput, type NumberInputProps, OpenEndAnswer, type OpenEndAnswerProps, Pagination, type PaginationItemValue, type PaginationProps, Progress, type ProgressProps, ProjectSelector, type ProjectSelectorProps, QuestionCard, type QuestionCheckboxOptionProps, QuestionEditorCard, type QuestionEditorCardProps, QuestionHeader, type QuestionHeaderProps, QuestionNavItem, type QuestionNavItemProps, QuestionOption, QuestionOptionEditor, type QuestionOptionEditorProps, type QuestionOptionProps, QuestionOtherOption, type QuestionOtherOptionProps, type QuestionRadioOptionProps, type QuestionType, QuestionTypeIcon, type QuestionTypeIconProps, RadioGroup, RadioGroupFieldItem, type RadioGroupFieldItemProps, RadioGroupItem, type RadioGroupItemProps, type RadioGroupProps, type RankItemData, RankList, type RankListProps, RatingScale, type RatingScaleProps, SearchBar, type SearchBarProps, Select, SelectContent, type SelectContentProps, SelectGroup, SelectItem, type SelectItemProps, SelectTrigger, type SelectTriggerProps, SelectValue, Slider, type SliderProps, StatCard, type StatCardProps, StatusTag, type StatusTagProps, Switch, type SwitchProps, TabItem, type TabItemProps, TabNavigation, TabNavigationContext, type TabNavigationProps, type TabNavigationVariant, Table, TableBody, TableCell, type TableCellProps, TableCellTwoLines, type TableCellTwoLinesProps, TableHead, type TableHeadProps, TableHeader, type TableProps, TableRow, type TableRowProps, Tabs, TabsContent, Tag, type TagProps, Textarea, type TextareaProps, TimeItem, type TimeItemProps, TimePicker, type TimePickerProps, type TimeValue, Timestamp, type TimestampProps, Toast, ToastAction, ToastInline, type ToastInlineProps, type ToastProps, ToastProvider, type ToastVariant, ToastViewport, Toggle, type ToggleProps, Tooltip, TooltipContent, type TooltipContentProps, TooltipProvider, TooltipTrigger, TopicActivityRow, type TopicActivityRowProps, TopicCard, TopicCardMetaItem, type TopicCardMetaItemProps, type TopicCardProps, TopicCardTag, UserMessageBubble, type UserMessageBubbleProps, VideoPlayer, type VideoPlayerProps, VolumeControl, type VolumeControlProps, fieldSurfaceClasses, formatDateTime, getPaginationItems, useFormField };
965
+ export { AIMiniAvatar, type AIMiniAvatarProps, AIResponseContainer, type AIResponseContainerProps, type AIStatus, type ActivitySection, type ActivityStat, ActivityStructure, type ActivityStructureProps, AskAiInput, type AskAiInputProps, AskAiToggle, type AskAiToggleProps, Badge, type BadgeProps, Button, type ButtonProps, Calendar, type CalendarProps, ChatChoices, type ChatChoicesProps, ChatInput, type ChatInputProps, ChatOption, type ChatOptionActionProps, type ChatOptionCheckboxProps, type ChatOptionProps, type ChatOptionRadioProps, Checkbox, CheckboxField, type CheckboxFieldProps, type CheckboxProps, DatePicker, type DatePickerProps, DateTimePicker, type DateTimePickerProps, Dialog, DialogBody, DialogClose, DialogContent, type DialogContentProps, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemProps, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, type DropdownMenuSelectableItemProps, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EditableTag, type EditableTagProps, Field, type FieldControlProps, type FieldProps, type FieldStatus, FileAttachment, type FileAttachmentProps, FileUploadItem, type FileUploadItemProps, FileUploadZone, type FileUploadZoneProps, Form, FormControl, type FormControlProps, FormDescription, type FormDescriptionProps, FormField, FormItem, type FormItemProps, FormLabel, type FormLabelProps, FormMessage, type FormMessageProps, ImagePreview, type ImagePreviewProps, ImageThumbnails, type ImageThumbnailsProps, InlineEdit, type InlineEditProps, Input, type InputProps, InputWithAction, type InputWithActionProps, Label, type LabelProps, MediaInfo, type MediaInfoProps, NumberInput, type NumberInputProps, OpenEndAnswer, type OpenEndAnswerProps, Pagination, type PaginationItemValue, type PaginationProps, Progress, type ProgressProps, ProjectSelector, type ProjectSelectorProps, QuestionCard, type QuestionCheckboxOptionProps, QuestionEditorCard, type QuestionEditorCardProps, QuestionHeader, type QuestionHeaderProps, QuestionNavItem, type QuestionNavItemProps, QuestionOption, QuestionOptionEditor, type QuestionOptionEditorProps, type QuestionOptionProps, QuestionOtherOption, type QuestionOtherOptionProps, type QuestionRadioOptionProps, type QuestionType, QuestionTypeIcon, type QuestionTypeIconProps, RadioGroup, RadioGroupFieldItem, type RadioGroupFieldItemProps, RadioGroupItem, type RadioGroupItemProps, type RadioGroupProps, type RankItemData, RankList, type RankListProps, RatingScale, type RatingScaleProps, SearchBar, type SearchBarProps, Select, SelectContent, type SelectContentProps, SelectGroup, SelectItem, type SelectItemProps, SelectTrigger, type SelectTriggerProps, SelectValue, Slider, type SliderProps, StatCard, type StatCardProps, StatusTag, type StatusTagProps, StimulusCard, type StimulusCardProps, Switch, type SwitchProps, TabItem, type TabItemProps, TabNavigation, TabNavigationContext, type TabNavigationProps, type TabNavigationVariant, Table, TableBody, TableCell, type TableCellProps, TableCellTwoLines, type TableCellTwoLinesProps, TableHead, type TableHeadProps, TableHeader, type TableProps, TableRow, type TableRowProps, Tabs, TabsContent, Tag, type TagProps, Textarea, type TextareaProps, TimeItem, type TimeItemProps, TimePicker, type TimePickerProps, type TimeValue, Timestamp, type TimestampProps, Toast, ToastAction, ToastInline, type ToastInlineProps, type ToastProps, ToastProvider, type ToastVariant, ToastViewport, Toggle, type ToggleProps, Tooltip, TooltipContent, type TooltipContentProps, TooltipProvider, TooltipTrigger, TopicActivityRow, type TopicActivityRowProps, TopicCard, TopicCardMetaItem, type TopicCardMetaItemProps, type TopicCardProps, TopicCardTag, UserMessageBubble, type UserMessageBubbleProps, VideoPlayer, type VideoPlayerProps, VolumeControl, type VolumeControlProps, fieldSurfaceClasses, formatDateTime, getPaginationItems, useFormField };
package/dist/index.js CHANGED
@@ -3048,28 +3048,95 @@ var RatingScale = React46.forwardRef(
3048
3048
  );
3049
3049
  RatingScale.displayName = "RatingScale";
3050
3050
 
3051
- // src/components/Data Display/Progress.tsx
3051
+ // src/components/Question Types/StimulusCard.tsx
3052
3052
  import * as React47 from "react";
3053
- import { Progress as ProgressPrimitive2 } from "radix-ui";
3053
+ import { Image as ImageIcon2, ImageBroken, Trash as Trash5 } from "@phosphor-icons/react";
3054
3054
  import { jsx as jsx48, jsxs as jsxs34 } from "react/jsx-runtime";
3055
- var Progress = React47.forwardRef(
3055
+ var StimulusCard = React47.forwardRef(
3056
+ ({
3057
+ className,
3058
+ thumbnail,
3059
+ thumbnailAlt = "",
3060
+ icon,
3061
+ status = "default",
3062
+ label = "AI Moderator",
3063
+ caption,
3064
+ onCaptionChange,
3065
+ captionPlaceholder = "Click to write what the AI moderator says",
3066
+ onRemove,
3067
+ removeLabel = "Remove stimulus",
3068
+ ...props
3069
+ }, ref) => {
3070
+ const [failedSrc, setFailedSrc] = React47.useState();
3071
+ const error = status === "error" || thumbnail !== void 0 && failedSrc === thumbnail;
3072
+ const showImage = thumbnail !== void 0 && !error;
3073
+ return /* @__PURE__ */ jsxs34(
3074
+ "div",
3075
+ {
3076
+ ref,
3077
+ "data-status": error ? "error" : "default",
3078
+ className: cn("flex w-full items-center gap-4 rounded-md border border-border p-0.5 pr-4", className),
3079
+ ...props,
3080
+ children: [
3081
+ /* @__PURE__ */ jsxs34("div", { className: "flex min-w-0 flex-1 items-center gap-4", children: [
3082
+ /* @__PURE__ */ jsx48(
3083
+ "span",
3084
+ {
3085
+ className: cn(
3086
+ "flex size-20 shrink-0 items-center justify-center overflow-hidden rounded-sm border",
3087
+ error ? "border-destructive-soft-border bg-destructive-soft bg-linear-to-r from-overlay-dark-5 to-overlay-dark-5 text-destructive" : "border-border bg-background bg-linear-to-r from-overlay-dark-5 to-overlay-dark-5 text-surface-foreground",
3088
+ showImage && "bg-none"
3089
+ ),
3090
+ children: showImage ? /* @__PURE__ */ jsx48("img", { src: thumbnail, alt: thumbnailAlt, className: "size-full object-cover", onError: () => setFailedSrc(thumbnail) }) : error ? /* @__PURE__ */ jsx48(ImageBroken, { size: 24, "aria-hidden": true }) : icon ?? /* @__PURE__ */ jsx48(ImageIcon2, { size: 24, "aria-hidden": true })
3091
+ }
3092
+ ),
3093
+ /* @__PURE__ */ jsxs34("div", { className: "flex min-w-0 flex-1 flex-col items-start gap-2 text-surface-foreground", children: [
3094
+ /* @__PURE__ */ jsx48("p", { className: "w-full text-ui-label", children: label }),
3095
+ onCaptionChange ? /* @__PURE__ */ jsx48(
3096
+ InlineEdit,
3097
+ {
3098
+ variant: "question",
3099
+ multiline: true,
3100
+ className: "-mx-3 w-auto",
3101
+ "aria-label": "Stimulus caption",
3102
+ value: caption ?? "",
3103
+ placeholder: captionPlaceholder,
3104
+ onValueChange: onCaptionChange,
3105
+ textClassName: "text-body-base"
3106
+ }
3107
+ ) : /* @__PURE__ */ jsx48("p", { className: "w-full text-body-base [word-break:break-word]", children: caption })
3108
+ ] })
3109
+ ] }),
3110
+ onRemove && /* @__PURE__ */ jsx48(Button, { type: "button", variant: "destructive", size: "icon-sm", "aria-label": removeLabel, onClick: onRemove, children: /* @__PURE__ */ jsx48(Trash5, { size: 16, "aria-hidden": true }) })
3111
+ ]
3112
+ }
3113
+ );
3114
+ }
3115
+ );
3116
+ StimulusCard.displayName = "StimulusCard";
3117
+
3118
+ // src/components/Data Display/Progress.tsx
3119
+ import * as React48 from "react";
3120
+ import { Progress as ProgressPrimitive2 } from "radix-ui";
3121
+ import { jsx as jsx49, jsxs as jsxs35 } from "react/jsx-runtime";
3122
+ var Progress = React48.forwardRef(
3056
3123
  ({ className, value = 0, label, valueLabel, detailsStart, detailsEnd, ...props }, ref) => {
3057
3124
  const hasHeader = label != null || valueLabel != null;
3058
3125
  const hasDetails = detailsStart != null || detailsEnd != null;
3059
3126
  const clamped = Math.min(100, Math.max(0, value ?? 0));
3060
- return /* @__PURE__ */ jsxs34("div", { className: cn("flex w-full flex-col gap-2", className), children: [
3061
- hasHeader && /* @__PURE__ */ jsxs34("div", { className: "flex items-center justify-between text-ui-label text-surface-foreground", children: [
3062
- /* @__PURE__ */ jsx48("span", { children: label }),
3063
- /* @__PURE__ */ jsx48("span", { children: valueLabel === true ? `${Math.round(clamped)}%` : valueLabel })
3127
+ return /* @__PURE__ */ jsxs35("div", { className: cn("flex w-full flex-col gap-2", className), children: [
3128
+ hasHeader && /* @__PURE__ */ jsxs35("div", { className: "flex items-center justify-between text-ui-label text-surface-foreground", children: [
3129
+ /* @__PURE__ */ jsx49("span", { children: label }),
3130
+ /* @__PURE__ */ jsx49("span", { children: valueLabel === true ? `${Math.round(clamped)}%` : valueLabel })
3064
3131
  ] }),
3065
- /* @__PURE__ */ jsx48(
3132
+ /* @__PURE__ */ jsx49(
3066
3133
  ProgressPrimitive2.Root,
3067
3134
  {
3068
3135
  ref,
3069
3136
  value: clamped,
3070
3137
  className: "relative h-2 w-full overflow-hidden rounded-full bg-secondary",
3071
3138
  ...props,
3072
- children: /* @__PURE__ */ jsx48(
3139
+ children: /* @__PURE__ */ jsx49(
3073
3140
  ProgressPrimitive2.Indicator,
3074
3141
  {
3075
3142
  className: "h-full rounded-full bg-accent transition-[width]",
@@ -3078,9 +3145,9 @@ var Progress = React47.forwardRef(
3078
3145
  )
3079
3146
  }
3080
3147
  ),
3081
- hasDetails && /* @__PURE__ */ jsxs34("div", { className: "flex items-start justify-between text-ui-label leading-5 text-secondary-muted-foreground", children: [
3082
- /* @__PURE__ */ jsx48("span", { children: detailsStart }),
3083
- /* @__PURE__ */ jsx48("span", { children: detailsEnd })
3148
+ hasDetails && /* @__PURE__ */ jsxs35("div", { className: "flex items-start justify-between text-ui-label leading-5 text-secondary-muted-foreground", children: [
3149
+ /* @__PURE__ */ jsx49("span", { children: detailsStart }),
3150
+ /* @__PURE__ */ jsx49("span", { children: detailsEnd })
3084
3151
  ] })
3085
3152
  ] });
3086
3153
  }
@@ -3088,11 +3155,11 @@ var Progress = React47.forwardRef(
3088
3155
  Progress.displayName = "Progress";
3089
3156
 
3090
3157
  // src/components/Data Display/Table.tsx
3091
- import * as React48 from "react";
3158
+ import * as React49 from "react";
3092
3159
  import { CaretDown as CaretDown4, CaretUp } from "@phosphor-icons/react";
3093
- import { jsx as jsx49, jsxs as jsxs35 } from "react/jsx-runtime";
3094
- var Table = React48.forwardRef(
3095
- ({ className, containerClassName, striped, ...props }, ref) => /* @__PURE__ */ jsx49("div", { className: cn("relative w-full overflow-auto rounded-lg border border-border bg-surface", containerClassName), children: /* @__PURE__ */ jsx49(
3160
+ import { jsx as jsx50, jsxs as jsxs36 } from "react/jsx-runtime";
3161
+ var Table = React49.forwardRef(
3162
+ ({ className, containerClassName, striped, ...props }, ref) => /* @__PURE__ */ jsx50("div", { className: cn("relative w-full overflow-auto rounded-lg border border-border bg-surface", containerClassName), children: /* @__PURE__ */ jsx50(
3096
3163
  "table",
3097
3164
  {
3098
3165
  ref,
@@ -3103,16 +3170,16 @@ var Table = React48.forwardRef(
3103
3170
  ) })
3104
3171
  );
3105
3172
  Table.displayName = "Table";
3106
- var TableHeader = React48.forwardRef(
3107
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx49("thead", { ref, className, ...props })
3173
+ var TableHeader = React49.forwardRef(
3174
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx50("thead", { ref, className, ...props })
3108
3175
  );
3109
3176
  TableHeader.displayName = "TableHeader";
3110
- var TableBody = React48.forwardRef(
3111
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx49("tbody", { ref, className, ...props })
3177
+ var TableBody = React49.forwardRef(
3178
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx50("tbody", { ref, className, ...props })
3112
3179
  );
3113
3180
  TableBody.displayName = "TableBody";
3114
- var TableRow = React48.forwardRef(
3115
- ({ className, selected, ...props }, ref) => /* @__PURE__ */ jsx49(
3181
+ var TableRow = React49.forwardRef(
3182
+ ({ className, selected, ...props }, ref) => /* @__PURE__ */ jsx50(
3116
3183
  "tr",
3117
3184
  {
3118
3185
  ref,
@@ -3129,10 +3196,10 @@ var TableRow = React48.forwardRef(
3129
3196
  );
3130
3197
  TableRow.displayName = "TableRow";
3131
3198
  var ariaSort = { none: "none", asc: "ascending", desc: "descending" };
3132
- var TableHead = React48.forwardRef(
3199
+ var TableHead = React49.forwardRef(
3133
3200
  ({ className, align = "left", sortable, sort = "none", onSort, checkbox, children, ...props }, ref) => {
3134
- const caret = sort === "asc" ? /* @__PURE__ */ jsx49(CaretUp, { size: 16, "aria-hidden": true, className: "shrink-0" }) : /* @__PURE__ */ jsx49(CaretDown4, { size: 16, "aria-hidden": true, className: "shrink-0" });
3135
- return /* @__PURE__ */ jsx49(
3201
+ const caret = sort === "asc" ? /* @__PURE__ */ jsx50(CaretUp, { size: 16, "aria-hidden": true, className: "shrink-0" }) : /* @__PURE__ */ jsx50(CaretDown4, { size: 16, "aria-hidden": true, className: "shrink-0" });
3202
+ return /* @__PURE__ */ jsx50(
3136
3203
  "th",
3137
3204
  {
3138
3205
  ref,
@@ -3145,7 +3212,7 @@ var TableHead = React48.forwardRef(
3145
3212
  className
3146
3213
  ),
3147
3214
  ...props,
3148
- children: sortable ? /* @__PURE__ */ jsxs35(
3215
+ children: sortable ? /* @__PURE__ */ jsxs36(
3149
3216
  "button",
3150
3217
  {
3151
3218
  type: "button",
@@ -3156,14 +3223,14 @@ var TableHead = React48.forwardRef(
3156
3223
  caret
3157
3224
  ]
3158
3225
  }
3159
- ) : checkbox ? /* @__PURE__ */ jsx49("div", { className: "flex items-center justify-center", children }) : children
3226
+ ) : checkbox ? /* @__PURE__ */ jsx50("div", { className: "flex items-center justify-center", children }) : children
3160
3227
  }
3161
3228
  );
3162
3229
  }
3163
3230
  );
3164
3231
  TableHead.displayName = "TableHead";
3165
- var TableCell = React48.forwardRef(
3166
- ({ className, align = "left", muted, checkbox, actions, children, ...props }, ref) => /* @__PURE__ */ jsx49(
3232
+ var TableCell = React49.forwardRef(
3233
+ ({ className, align = "left", muted, checkbox, actions, children, ...props }, ref) => /* @__PURE__ */ jsx50(
3167
3234
  "td",
3168
3235
  {
3169
3236
  ref,
@@ -3176,25 +3243,25 @@ var TableCell = React48.forwardRef(
3176
3243
  className
3177
3244
  ),
3178
3245
  ...props,
3179
- children: checkbox ? /* @__PURE__ */ jsx49("div", { className: "flex items-center justify-center", children }) : actions ? /* @__PURE__ */ jsx49("div", { className: "flex items-start justify-end gap-1", children }) : children
3246
+ children: checkbox ? /* @__PURE__ */ jsx50("div", { className: "flex items-center justify-center", children }) : actions ? /* @__PURE__ */ jsx50("div", { className: "flex items-start justify-end gap-1", children }) : children
3180
3247
  }
3181
3248
  )
3182
3249
  );
3183
3250
  TableCell.displayName = "TableCell";
3184
3251
  function TableCellTwoLines({ primary, secondary, avatar, className, ...props }) {
3185
- return /* @__PURE__ */ jsxs35("div", { className: cn("flex items-center gap-2", className), ...props, children: [
3252
+ return /* @__PURE__ */ jsxs36("div", { className: cn("flex items-center gap-2", className), ...props, children: [
3186
3253
  avatar,
3187
- /* @__PURE__ */ jsxs35("div", { className: "flex flex-col gap-0.5 whitespace-nowrap", children: [
3188
- /* @__PURE__ */ jsx49("span", { className: "text-ui-label text-surface-foreground", children: primary }),
3189
- secondary && /* @__PURE__ */ jsx49("span", { className: "text-ui-caption text-secondary-muted-foreground", children: secondary })
3254
+ /* @__PURE__ */ jsxs36("div", { className: "flex flex-col gap-0.5 whitespace-nowrap", children: [
3255
+ /* @__PURE__ */ jsx50("span", { className: "text-ui-label text-surface-foreground", children: primary }),
3256
+ secondary && /* @__PURE__ */ jsx50("span", { className: "text-ui-caption text-secondary-muted-foreground", children: secondary })
3190
3257
  ] })
3191
3258
  ] });
3192
3259
  }
3193
3260
 
3194
3261
  // src/components/Data Display/StatCard.tsx
3195
- import * as React49 from "react";
3262
+ import * as React50 from "react";
3196
3263
  import { cva as cva6 } from "class-variance-authority";
3197
- import { jsx as jsx50, jsxs as jsxs36 } from "react/jsx-runtime";
3264
+ import { jsx as jsx51, jsxs as jsxs37 } from "react/jsx-runtime";
3198
3265
  var statCardVariants = cva6("flex min-w-0 flex-col gap-2 rounded-md border p-3", {
3199
3266
  variants: {
3200
3267
  variant: {
@@ -3204,11 +3271,11 @@ var statCardVariants = cva6("flex min-w-0 flex-col gap-2 rounded-md border p-3",
3204
3271
  },
3205
3272
  defaultVariants: { variant: "default" }
3206
3273
  });
3207
- var StatCard = React49.forwardRef(
3208
- ({ className, variant, label, value, icon, ...props }, ref) => /* @__PURE__ */ jsxs36("div", { ref, className: cn(statCardVariants({ variant }), className), ...props, children: [
3209
- /* @__PURE__ */ jsx50("p", { className: "truncate text-ui-caption text-secondary-muted-foreground", children: label }),
3210
- /* @__PURE__ */ jsxs36("p", { className: "flex items-center gap-2 text-body-base text-surface-foreground", children: [
3211
- icon && /* @__PURE__ */ jsx50("span", { "aria-hidden": "true", className: "inline-flex size-6 shrink-0 items-center justify-center", children: icon }),
3274
+ var StatCard = React50.forwardRef(
3275
+ ({ className, variant, label, value, icon, ...props }, ref) => /* @__PURE__ */ jsxs37("div", { ref, className: cn(statCardVariants({ variant }), className), ...props, children: [
3276
+ /* @__PURE__ */ jsx51("p", { className: "truncate text-ui-caption text-secondary-muted-foreground", children: label }),
3277
+ /* @__PURE__ */ jsxs37("p", { className: "flex items-center gap-2 text-body-base text-surface-foreground", children: [
3278
+ icon && /* @__PURE__ */ jsx51("span", { "aria-hidden": "true", className: "inline-flex size-6 shrink-0 items-center justify-center", children: icon }),
3212
3279
  value
3213
3280
  ] })
3214
3281
  ] })
@@ -3216,13 +3283,13 @@ var StatCard = React49.forwardRef(
3216
3283
  StatCard.displayName = "StatCard";
3217
3284
 
3218
3285
  // src/components/Research-Specific/ActivityStructure.tsx
3219
- import * as React51 from "react";
3286
+ import * as React52 from "react";
3220
3287
 
3221
3288
  // src/components/Tags & Badges/EditableTag.tsx
3222
- import * as React50 from "react";
3289
+ import * as React51 from "react";
3223
3290
  import { Crown, Plus as Plus5, X as X6 } from "@phosphor-icons/react";
3224
3291
  import { cva as cva7 } from "class-variance-authority";
3225
- import { jsx as jsx51, jsxs as jsxs37 } from "react/jsx-runtime";
3292
+ import { jsx as jsx52, jsxs as jsxs38 } from "react/jsx-runtime";
3226
3293
  var editableTagVariants = cva7(
3227
3294
  "inline-flex h-6.5 items-center whitespace-nowrap rounded-sm py-1 text-ui-caption transition-colors",
3228
3295
  {
@@ -3237,27 +3304,27 @@ var editableTagVariants = cva7(
3237
3304
  defaultVariants: { type: "default" }
3238
3305
  }
3239
3306
  );
3240
- var EditableTag = React50.forwardRef(
3307
+ var EditableTag = React51.forwardRef(
3241
3308
  ({ className, type = "default", icon, onRemove, onClick, children, ...props }, ref) => {
3242
3309
  const classes = cn(editableTagVariants({ type }), className);
3243
- const leading = type === "add" ? /* @__PURE__ */ jsx51(Plus5, { size: 12, "aria-hidden": true }) : icon !== void 0 ? icon : type === "default" ? /* @__PURE__ */ jsx51(Crown, { size: 12, weight: "fill", "aria-hidden": true }) : null;
3310
+ const leading = type === "add" ? /* @__PURE__ */ jsx52(Plus5, { size: 12, "aria-hidden": true }) : icon !== void 0 ? icon : type === "default" ? /* @__PURE__ */ jsx52(Crown, { size: 12, weight: "fill", "aria-hidden": true }) : null;
3244
3311
  if (type === "add" || type === "multiple" && onClick) {
3245
- return /* @__PURE__ */ jsxs37("button", { ref, type: "button", className: classes, onClick, ...props, children: [
3312
+ return /* @__PURE__ */ jsxs38("button", { ref, type: "button", className: classes, onClick, ...props, children: [
3246
3313
  leading,
3247
3314
  children
3248
3315
  ] });
3249
3316
  }
3250
- return /* @__PURE__ */ jsxs37("span", { ref, className: classes, ...props, children: [
3317
+ return /* @__PURE__ */ jsxs38("span", { ref, className: classes, ...props, children: [
3251
3318
  leading,
3252
3319
  children,
3253
- onRemove && /* @__PURE__ */ jsx51(
3320
+ onRemove && /* @__PURE__ */ jsx52(
3254
3321
  "button",
3255
3322
  {
3256
3323
  type: "button",
3257
3324
  "aria-label": typeof children === "string" ? `Remove ${children}` : "Remove",
3258
3325
  onClick: onRemove,
3259
3326
  className: "inline-flex size-3 items-center justify-center rounded-xs",
3260
- children: /* @__PURE__ */ jsx51(X6, { size: 12, "aria-hidden": true })
3327
+ children: /* @__PURE__ */ jsx52(X6, { size: 12, "aria-hidden": true })
3261
3328
  }
3262
3329
  )
3263
3330
  ] });
@@ -3266,23 +3333,23 @@ var EditableTag = React50.forwardRef(
3266
3333
  EditableTag.displayName = "EditableTag";
3267
3334
 
3268
3335
  // src/components/Research-Specific/ActivityStructure.tsx
3269
- import { jsx as jsx52, jsxs as jsxs38 } from "react/jsx-runtime";
3270
- var ActivityStructure = React51.forwardRef(
3271
- ({ className, title = "Activity Structure", stats, sections, onRemoveTag, onAddTag, addTagLabel = "Add tag", children, ...props }, ref) => /* @__PURE__ */ jsxs38(
3336
+ import { jsx as jsx53, jsxs as jsxs39 } from "react/jsx-runtime";
3337
+ var ActivityStructure = React52.forwardRef(
3338
+ ({ className, title = "Activity Structure", stats, sections, onRemoveTag, onAddTag, addTagLabel = "Add tag", children, ...props }, ref) => /* @__PURE__ */ jsxs39(
3272
3339
  "section",
3273
3340
  {
3274
3341
  ref,
3275
3342
  className: cn("flex w-full max-w-96.5 flex-col gap-4 rounded-xl bg-surface p-4", className),
3276
3343
  ...props,
3277
3344
  children: [
3278
- /* @__PURE__ */ jsx52("h3", { className: "text-heading-h3 text-primary", children: title }),
3279
- stats.length > 0 && /* @__PURE__ */ jsx52("div", { className: "grid grid-cols-2 gap-3", children: stats.map(({ id, ...stat }) => /* @__PURE__ */ jsx52(StatCard, { ...stat }, id)) }),
3280
- sections?.map(({ id, heading, body, tags }) => /* @__PURE__ */ jsxs38("div", { className: "flex flex-col gap-2", children: [
3281
- /* @__PURE__ */ jsx52("h4", { className: "text-heading-h4 text-surface-foreground", children: heading }),
3282
- /* @__PURE__ */ jsx52("div", { className: "text-body-base text-surface-foreground", children: body }),
3283
- (tags?.length || onAddTag) && /* @__PURE__ */ jsxs38("div", { className: "flex flex-wrap items-center gap-2", children: [
3284
- tags?.map((tag) => /* @__PURE__ */ jsx52(EditableTag, { type: "editable", onRemove: onRemoveTag && (() => onRemoveTag(id, tag)), children: tag }, tag)),
3285
- onAddTag && /* @__PURE__ */ jsx52(EditableTag, { type: "add", onClick: () => onAddTag(id), children: addTagLabel })
3345
+ /* @__PURE__ */ jsx53("h3", { className: "text-heading-h3 text-primary", children: title }),
3346
+ stats.length > 0 && /* @__PURE__ */ jsx53("div", { className: "grid grid-cols-2 gap-3", children: stats.map(({ id, ...stat }) => /* @__PURE__ */ jsx53(StatCard, { ...stat }, id)) }),
3347
+ sections?.map(({ id, heading, body, tags }) => /* @__PURE__ */ jsxs39("div", { className: "flex flex-col gap-2", children: [
3348
+ /* @__PURE__ */ jsx53("h4", { className: "text-heading-h4 text-surface-foreground", children: heading }),
3349
+ /* @__PURE__ */ jsx53("div", { className: "text-body-base text-surface-foreground", children: body }),
3350
+ (tags?.length || onAddTag) && /* @__PURE__ */ jsxs39("div", { className: "flex flex-wrap items-center gap-2", children: [
3351
+ tags?.map((tag) => /* @__PURE__ */ jsx53(EditableTag, { type: "editable", onRemove: onRemoveTag && (() => onRemoveTag(id, tag)), children: tag }, tag)),
3352
+ onAddTag && /* @__PURE__ */ jsx53(EditableTag, { type: "add", onClick: () => onAddTag(id), children: addTagLabel })
3286
3353
  ] })
3287
3354
  ] }, id)),
3288
3355
  children
@@ -3293,10 +3360,10 @@ var ActivityStructure = React51.forwardRef(
3293
3360
  ActivityStructure.displayName = "ActivityStructure";
3294
3361
 
3295
3362
  // src/components/Tags & Badges/Badge.tsx
3296
- import * as React52 from "react";
3363
+ import * as React53 from "react";
3297
3364
  import { DotsSixVertical as DotsSixVertical5, RadioButton as RadioButton2 } from "@phosphor-icons/react";
3298
3365
  import { cva as cva8 } from "class-variance-authority";
3299
- import { jsx as jsx53, jsxs as jsxs39 } from "react/jsx-runtime";
3366
+ import { jsx as jsx54, jsxs as jsxs40 } from "react/jsx-runtime";
3300
3367
  var roleTagVariants = cva8(
3301
3368
  "group inline-flex h-6 items-center whitespace-nowrap rounded-sm py-1 text-ui-caption transition-colors",
3302
3369
  {
@@ -3322,11 +3389,11 @@ var roleTagVariants = cva8(
3322
3389
  defaultVariants: { type: "primary", selected: false }
3323
3390
  }
3324
3391
  );
3325
- var Badge = React52.forwardRef(
3392
+ var Badge = React53.forwardRef(
3326
3393
  ({ className, type = "primary", selected = false, onClick, children, ...props }, ref) => {
3327
3394
  const classes = cn(roleTagVariants({ type, selected: type === "interactable" ? selected : false }), className);
3328
3395
  if (type === "interactable") {
3329
- return /* @__PURE__ */ jsxs39(
3396
+ return /* @__PURE__ */ jsxs40(
3330
3397
  "button",
3331
3398
  {
3332
3399
  ref,
@@ -3336,15 +3403,15 @@ var Badge = React52.forwardRef(
3336
3403
  onClick,
3337
3404
  ...props,
3338
3405
  children: [
3339
- /* @__PURE__ */ jsx53(DotsSixVertical5, { size: 16, "aria-hidden": true, className: "hidden shrink-0 group-hover:block" }),
3406
+ /* @__PURE__ */ jsx54(DotsSixVertical5, { size: 16, "aria-hidden": true, className: "hidden shrink-0 group-hover:block" }),
3340
3407
  children
3341
3408
  ]
3342
3409
  }
3343
3410
  );
3344
3411
  }
3345
- return /* @__PURE__ */ jsxs39("span", { ref, className: classes, ...props, children: [
3346
- type === "question" && /* @__PURE__ */ jsx53(RadioButton2, { size: 16, weight: "fill", "aria-hidden": true }),
3347
- type === "id" && /* @__PURE__ */ jsx53("span", { className: "text-secondary-muted-foreground", children: "ID" }),
3412
+ return /* @__PURE__ */ jsxs40("span", { ref, className: classes, ...props, children: [
3413
+ type === "question" && /* @__PURE__ */ jsx54(RadioButton2, { size: 16, weight: "fill", "aria-hidden": true }),
3414
+ type === "id" && /* @__PURE__ */ jsx54("span", { className: "text-secondary-muted-foreground", children: "ID" }),
3348
3415
  children
3349
3416
  ] });
3350
3417
  }
@@ -3352,9 +3419,9 @@ var Badge = React52.forwardRef(
3352
3419
  Badge.displayName = "Badge";
3353
3420
 
3354
3421
  // src/components/Utility/Pagination.tsx
3355
- import * as React53 from "react";
3422
+ import * as React54 from "react";
3356
3423
  import { ArrowLeft, ArrowRight, DotsThree as DotsThree2 } from "@phosphor-icons/react";
3357
- import { jsx as jsx54, jsxs as jsxs40 } from "react/jsx-runtime";
3424
+ import { jsx as jsx55, jsxs as jsxs41 } from "react/jsx-runtime";
3358
3425
  function getPaginationItems(page, pageCount, siblings = 1) {
3359
3426
  const keep = /* @__PURE__ */ new Set([1, pageCount]);
3360
3427
  for (let p = page - siblings; p <= page + siblings; p++) if (p >= 1 && p <= pageCount) keep.add(p);
@@ -3368,10 +3435,10 @@ function getPaginationItems(page, pageCount, siblings = 1) {
3368
3435
  });
3369
3436
  return items;
3370
3437
  }
3371
- var Pagination = React53.forwardRef(
3438
+ var Pagination = React54.forwardRef(
3372
3439
  ({ className, page, pageCount, onPageChange, variant = "full", siblings = 1, ...props }, ref) => {
3373
3440
  const go = (next2) => onPageChange(Math.min(pageCount, Math.max(1, next2)));
3374
- const previous = /* @__PURE__ */ jsx54(
3441
+ const previous = /* @__PURE__ */ jsx55(
3375
3442
  Button,
3376
3443
  {
3377
3444
  type: "button",
@@ -3380,10 +3447,10 @@ var Pagination = React53.forwardRef(
3380
3447
  "aria-label": "Previous page",
3381
3448
  disabled: page <= 1,
3382
3449
  onClick: () => go(page - 1),
3383
- children: /* @__PURE__ */ jsx54(ArrowLeft, { size: 16, "aria-hidden": true })
3450
+ children: /* @__PURE__ */ jsx55(ArrowLeft, { size: 16, "aria-hidden": true })
3384
3451
  }
3385
3452
  );
3386
- const next = /* @__PURE__ */ jsx54(
3453
+ const next = /* @__PURE__ */ jsx55(
3387
3454
  Button,
3388
3455
  {
3389
3456
  type: "button",
@@ -3392,10 +3459,10 @@ var Pagination = React53.forwardRef(
3392
3459
  "aria-label": "Next page",
3393
3460
  disabled: page >= pageCount,
3394
3461
  onClick: () => go(page + 1),
3395
- children: /* @__PURE__ */ jsx54(ArrowRight, { size: 16, "aria-hidden": true })
3462
+ children: /* @__PURE__ */ jsx55(ArrowRight, { size: 16, "aria-hidden": true })
3396
3463
  }
3397
3464
  );
3398
- return /* @__PURE__ */ jsxs40(
3465
+ return /* @__PURE__ */ jsxs41(
3399
3466
  "nav",
3400
3467
  {
3401
3468
  ref,
@@ -3404,14 +3471,14 @@ var Pagination = React53.forwardRef(
3404
3471
  ...props,
3405
3472
  children: [
3406
3473
  previous,
3407
- variant === "compact" ? /* @__PURE__ */ jsxs40("span", { className: "text-body-small text-surface-foreground", "aria-live": "polite", children: [
3474
+ variant === "compact" ? /* @__PURE__ */ jsxs41("span", { className: "text-body-small text-surface-foreground", "aria-live": "polite", children: [
3408
3475
  page,
3409
3476
  "/",
3410
3477
  pageCount
3411
- ] }) : /* @__PURE__ */ jsx54("ul", { className: "flex items-center gap-2", children: getPaginationItems(page, pageCount, siblings).map((item, index) => /* @__PURE__ */ jsx54("li", { children: item === "ellipsis" ? /* @__PURE__ */ jsxs40("span", { className: "inline-flex size-8 items-center justify-center rounded-sm border border-border bg-surface text-surface-foreground", children: [
3412
- /* @__PURE__ */ jsx54(DotsThree2, { size: 16, "aria-hidden": true }),
3413
- /* @__PURE__ */ jsx54("span", { className: "sr-only", children: "More pages" })
3414
- ] }) : /* @__PURE__ */ jsx54(
3478
+ ] }) : /* @__PURE__ */ jsx55("ul", { className: "flex items-center gap-2", children: getPaginationItems(page, pageCount, siblings).map((item, index) => /* @__PURE__ */ jsx55("li", { children: item === "ellipsis" ? /* @__PURE__ */ jsxs41("span", { className: "inline-flex size-8 items-center justify-center rounded-sm border border-border bg-surface text-surface-foreground", children: [
3479
+ /* @__PURE__ */ jsx55(DotsThree2, { size: 16, "aria-hidden": true }),
3480
+ /* @__PURE__ */ jsx55("span", { className: "sr-only", children: "More pages" })
3481
+ ] }) : /* @__PURE__ */ jsx55(
3415
3482
  Button,
3416
3483
  {
3417
3484
  type: "button",
@@ -3515,6 +3582,7 @@ export {
3515
3582
  Slider,
3516
3583
  StatCard,
3517
3584
  StatusTag,
3585
+ StimulusCard,
3518
3586
  Switch,
3519
3587
  TabItem,
3520
3588
  TabNavigation,