@astryxdesign/lab 0.7.4-canary.faa934f → 0.7.5-canary.04434e7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/blocks/CommentPinShowcase.doc.mjs +1 -1
  2. package/blocks/CommentPinShowcase.tsx +2 -3
  3. package/dist/Chart/Chart.d.ts +1 -1
  4. package/dist/Chart/ChartContext.d.ts +1 -1
  5. package/dist/Chart/index.d.ts +28 -28
  6. package/dist/Chart/useChartColors.d.ts +1 -1
  7. package/dist/Chart/useChartRange.d.ts +1 -1
  8. package/dist/Chart/utils.d.ts +1 -1
  9. package/dist/Chat/ChatReactionBar.d.ts +1 -1
  10. package/dist/Chat/index.d.ts +8 -8
  11. package/dist/CircularProgress/index.d.ts +2 -2
  12. package/dist/CodeEditor/index.d.ts +2 -2
  13. package/dist/CommentPin/CommentPin.d.ts +22 -7
  14. package/dist/CommentPin/CommentPin.d.ts.map +1 -1
  15. package/dist/CommentPin/CommentPin.js +115 -38
  16. package/dist/CommentPin/index.d.ts +2 -2
  17. package/dist/Comments/CommentActions.d.ts +2 -2
  18. package/dist/Comments/CommentComposer.d.ts +1 -1
  19. package/dist/Comments/CommentMarkdown.d.ts +1 -1
  20. package/dist/Comments/CommentParts.d.ts +2 -2
  21. package/dist/Comments/CommentRow.d.ts +1 -1
  22. package/dist/Comments/CommentThread.d.ts +1 -1
  23. package/dist/Comments/Comments.d.ts +1 -1
  24. package/dist/Comments/CommentsContext.d.ts +2 -2
  25. package/dist/Comments/i18n.d.ts +1 -1
  26. package/dist/Comments/index.d.ts +9 -9
  27. package/dist/Comments/useCommentThreadDismissal.d.ts +1 -1
  28. package/dist/Comments/utils.d.ts +1 -1
  29. package/dist/DiffViewer/DiffViewer.d.ts +1 -1
  30. package/dist/DiffViewer/createDiffFile.d.ts +1 -1
  31. package/dist/DiffViewer/index.d.ts +6 -6
  32. package/dist/DiffViewer/parseUnifiedDiff.d.ts +1 -1
  33. package/dist/EmojiPicker/index.d.ts +2 -2
  34. package/dist/InfoTip/index.d.ts +2 -2
  35. package/dist/ListInput/index.d.ts +2 -2
  36. package/dist/LogStream/index.d.ts +2 -2
  37. package/dist/MobilePowerSearch/MobilePowerSearch.d.ts +131 -0
  38. package/dist/MobilePowerSearch/MobilePowerSearch.d.ts.map +1 -0
  39. package/dist/MobilePowerSearch/MobilePowerSearch.js +1327 -0
  40. package/dist/MobilePowerSearch/MobilePowerSearchValueEditor.d.ts +48 -0
  41. package/dist/MobilePowerSearch/MobilePowerSearchValueEditor.d.ts.map +1 -0
  42. package/dist/MobilePowerSearch/MobilePowerSearchValueEditor.js +530 -0
  43. package/dist/MobilePowerSearch/index.d.ts +9 -0
  44. package/dist/MobilePowerSearch/index.d.ts.map +1 -0
  45. package/dist/MobilePowerSearch/index.js +11 -0
  46. package/dist/MobilePowerSearch/mobilePowerSearchUtils.d.ts +69 -0
  47. package/dist/MobilePowerSearch/mobilePowerSearchUtils.d.ts.map +1 -0
  48. package/dist/MobilePowerSearch/mobilePowerSearchUtils.js +394 -0
  49. package/dist/MobileTokenizer/MobileTokenizer.d.ts +29 -1
  50. package/dist/MobileTokenizer/MobileTokenizer.d.ts.map +1 -1
  51. package/dist/MobileTokenizer/MobileTokenizer.js +6 -3
  52. package/dist/MobileTokenizer/index.d.ts +2 -2
  53. package/dist/Radial/RadialContext.d.ts +1 -1
  54. package/dist/Radial/index.d.ts +8 -8
  55. package/dist/SVGIcon/icons.d.ts +1 -1
  56. package/dist/SVGIcon/index.d.ts +8 -8
  57. package/dist/SVGIcon/xif-examples.d.ts +1 -1
  58. package/dist/Sankey/SankeyChart.d.ts +1 -1
  59. package/dist/Sankey/SankeyContext.d.ts +1 -1
  60. package/dist/Sankey/index.d.ts +7 -7
  61. package/dist/Sankey/layout.d.ts +1 -1
  62. package/dist/Schedule/CalendarEvent.d.ts +1 -1
  63. package/dist/Schedule/DayView.d.ts +1 -1
  64. package/dist/Schedule/ListView.d.ts +1 -1
  65. package/dist/Schedule/MonthlyView.d.ts +1 -1
  66. package/dist/Schedule/Schedule.d.ts +1 -1
  67. package/dist/Schedule/TimeGridView.d.ts +1 -1
  68. package/dist/Schedule/WeeklyView.d.ts +1 -1
  69. package/dist/Schedule/context.d.ts +1 -1
  70. package/dist/Schedule/dateMath.d.ts +2 -2
  71. package/dist/Schedule/index.d.ts +12 -12
  72. package/dist/Schedule/monthLayout.d.ts +1 -1
  73. package/dist/Schedule/plugins/PaginationPlugin.d.ts +1 -1
  74. package/dist/Schedule/plugins/ViewSelectorPlugin.d.ts +1 -1
  75. package/dist/Schedule/plugins/index.d.ts +3 -3
  76. package/dist/Schedule/shared.d.ts +1 -1
  77. package/dist/Schedule/timeGridScrollMemory.d.ts +1 -1
  78. package/dist/Schedule/types.d.ts +4 -4
  79. package/dist/Schedule/useCurrentTime.d.ts +1 -1
  80. package/dist/Schedule/zonedDateTime.d.ts +1 -1
  81. package/dist/Stat/index.d.ts +2 -2
  82. package/dist/ThreeD/ThreeDContext.d.ts +1 -1
  83. package/dist/ThreeD/index.d.ts +9 -9
  84. package/dist/Tour/Tour.d.ts +1 -1
  85. package/dist/Tour/index.d.ts +7 -7
  86. package/dist/Tour/useTour.d.ts +1 -1
  87. package/dist/TransferList/TransferListSelector.d.ts +1 -1
  88. package/dist/TransferList/index.d.ts +3 -3
  89. package/dist/index.d.ts +23 -22
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +6 -0
  92. package/dist/lab.css +34 -13
  93. package/package.json +5 -5
  94. package/src/CommentPin/CommentPin.doc.mjs +82 -34
  95. package/src/CommentPin/CommentPin.spec.md +92 -81
  96. package/src/CommentPin/CommentPin.test.tsx +98 -19
  97. package/src/CommentPin/CommentPin.tsx +146 -82
  98. package/src/InfoTip/InfoTip.test.tsx +9 -4
  99. package/src/MobilePowerSearch/MobilePowerSearch.doc.mjs +160 -0
  100. package/src/MobilePowerSearch/MobilePowerSearch.test.tsx +2079 -0
  101. package/src/MobilePowerSearch/MobilePowerSearch.tsx +1824 -0
  102. package/src/MobilePowerSearch/MobilePowerSearchValueEditor.tsx +593 -0
  103. package/src/MobilePowerSearch/index.ts +13 -0
  104. package/src/MobilePowerSearch/mobilePowerSearchUtils.ts +524 -0
  105. package/src/MobileTokenizer/MobileTokenizer.doc.mjs +2 -0
  106. package/src/MobileTokenizer/MobileTokenizer.test.tsx +27 -0
  107. package/src/MobileTokenizer/MobileTokenizer.tsx +25 -7
  108. package/src/index.ts +9 -0
@@ -6,7 +6,7 @@ export default {
6
6
  name: 'Avatar-first annotations',
7
7
  displayName: 'Avatar-first annotations',
8
8
  description:
9
- 'Caller-positioned comment pins over media and in a content margin. Every coordinate maps to the pin’s logical bottom-start corner. The selected group caps its participants at three circles (two Avatars plus +3) and shows its unread count in an accent badge instead of the total; the unread margin pin shows the badge too. Other pins dim without becoming disabled, activating the selected pin again clears the selection, and no pin dims while nothing is selected.',
9
+ 'Caller-positioned comment pins over media and in a content margin. Every coordinate maps to the pin’s logical bottom-start corner. The selected group caps its participants at three circles (two Avatars plus an ellipsis) and ends with its total and an accent unread dot; the unread margin pin shows the dot too. Other pins dim without becoming disabled, activating the selected pin again clears the selection, and no pin dims while nothing is selected.',
10
10
  exampleFor: 'CommentPin',
11
11
  isReady: true,
12
12
  isShowcase: true,
@@ -7,7 +7,7 @@
7
7
  * participant/thread/unread counts, and controlled selected/dimmed state
8
8
  * that may be empty
9
9
  * @output A grouped pin with a three-circle participant cap and an unread
10
- * badge, a resolved pin, and an unread margin pin; activating the selected
10
+ * dot, a single pin, and an unread margin pin; activating the selected
11
11
  * pin clears the selection, and non-selected pins dim only while another pin
12
12
  * is selected
13
13
  * @position CommentPin docsite showcase and copyable Lab block
@@ -160,9 +160,8 @@ export default function CommentPinShowcase() {
160
160
  xstyle={styles.groupedMarker}
161
161
  />
162
162
  <CommentPin
163
- label="Open resolved annotation from Mira"
163
+ label="Open annotation from Mira"
164
164
  participants={[PEOPLE.mira]}
165
- isResolved
166
165
  isSelected={selected === 'resolved'}
167
166
  isDimmed={selected != null && selected !== 'resolved'}
168
167
  onClick={() => toggle('resolved')}
@@ -11,7 +11,7 @@
11
11
  * hidden data table so screen reader users can read the underlying values.
12
12
  */
13
13
  import { type ReactNode } from 'react';
14
- import type { ChartMargin } from './types';
14
+ import type { ChartMargin } from './types.js';
15
15
  /**
16
16
  * Controls how the y-axis domain is computed:
17
17
  * - `'auto'` — includes 0 when all values are positive (default, bar-friendly)
@@ -1,4 +1,4 @@
1
- import type { ChartContext } from './types';
1
+ import type { ChartContext } from './types.js';
2
2
  export declare const ChartProvider: import("react").Provider<ChartContext | null>;
3
3
  /** Access the chart context. Throws if used outside <Chart>. */
4
4
  export declare function useChart(): ChartContext;
@@ -1,29 +1,29 @@
1
- export { Chart, type ChartProps, type YBaseline } from './Chart';
2
- export { ChartAxis, type ChartAxisProps } from './ChartAxis';
3
- export { compactNumber, currency, percent, shortDate, monthYear, } from './formatters';
4
- export { ChartGrid, type ChartGridProps } from './ChartGrid';
5
- export { ChartBar, type ChartBarProps } from './ChartBar';
6
- export { ChartLine, type ChartLineProps } from './ChartLine';
7
- export { ChartArea, type ChartAreaProps } from './ChartArea';
8
- export { ChartErrorBar, type ChartErrorBarProps } from './ChartErrorBar';
9
- export { ChartCandlestick, type ChartCandlestickProps, } from './ChartCandlestick';
10
- export { ChartDot, type ChartDotProps } from './ChartDot';
11
- export { ChartDotGL, type ChartDotGLProps } from './ChartDotGL';
12
- export { ChartDotGLInteractive, type ChartDotGLInteractiveProps, } from './ChartDotGLInteractive';
13
- export { ChartHeatmapGL, type ChartHeatmapGLProps, } from './ChartHeatmapGL';
14
- export { ChartStreamGL, type ChartStreamGLProps, type ChartStreamGLHandle, } from './ChartStreamGL';
15
- export { ChartTooltip, type ChartTooltipProps, type ChartCrosshairMode, } from './ChartTooltip';
16
- export { ChartLegend, type ChartLegendProps, type ChartLegendItem, } from './ChartLegend';
17
- export { useChart } from './ChartContext';
18
- export type { ChartContext, ChartMargin, ChartScale, DataPoint } from './types';
19
- export { m4Reduce, type M4Point } from './m4';
20
- export { isBandScale, xPixel } from './utils';
21
- export { useChartColors } from './useChartColors';
22
- export { getChartColors, getChartColorsFromResolver, type ChartColorsAPI, type SequentialHue, type TokenResolver, } from './getChartColors';
23
- export { useChartRange, type UseChartRangeOptions, type UseChartRangeReturn, } from './useChartRange';
24
- export { hexToGL, getCanvasDPR, getWebGLContext, setupGLState, sizeCanvas, mountCanvasOverSVG, compileShader, CIRCLE_FRAG_BODY, POINT_SIZE_COMPENSATION, } from './webgl';
25
- export { ChartBrush, type ChartBrushProps, type BrushMode, type BrushRange, } from './ChartBrush';
26
- export { ChartZoom, type ChartZoomProps, type ZoomToolbarPosition, } from './ChartZoom';
27
- export { ChartSelect, type ChartSelectProps } from './ChartSelect';
28
- export { ChartReferenceLine, type ChartReferenceLineProps, } from './ChartReferenceLine';
1
+ export { Chart, type ChartProps, type YBaseline } from './Chart.js';
2
+ export { ChartAxis, type ChartAxisProps } from './ChartAxis.js';
3
+ export { compactNumber, currency, percent, shortDate, monthYear, } from './formatters.js';
4
+ export { ChartGrid, type ChartGridProps } from './ChartGrid.js';
5
+ export { ChartBar, type ChartBarProps } from './ChartBar.js';
6
+ export { ChartLine, type ChartLineProps } from './ChartLine.js';
7
+ export { ChartArea, type ChartAreaProps } from './ChartArea.js';
8
+ export { ChartErrorBar, type ChartErrorBarProps } from './ChartErrorBar.js';
9
+ export { ChartCandlestick, type ChartCandlestickProps, } from './ChartCandlestick.js';
10
+ export { ChartDot, type ChartDotProps } from './ChartDot.js';
11
+ export { ChartDotGL, type ChartDotGLProps } from './ChartDotGL.js';
12
+ export { ChartDotGLInteractive, type ChartDotGLInteractiveProps, } from './ChartDotGLInteractive.js';
13
+ export { ChartHeatmapGL, type ChartHeatmapGLProps, } from './ChartHeatmapGL.js';
14
+ export { ChartStreamGL, type ChartStreamGLProps, type ChartStreamGLHandle, } from './ChartStreamGL.js';
15
+ export { ChartTooltip, type ChartTooltipProps, type ChartCrosshairMode, } from './ChartTooltip.js';
16
+ export { ChartLegend, type ChartLegendProps, type ChartLegendItem, } from './ChartLegend.js';
17
+ export { useChart } from './ChartContext.js';
18
+ export type { ChartContext, ChartMargin, ChartScale, DataPoint } from './types.js';
19
+ export { m4Reduce, type M4Point } from './m4.js';
20
+ export { isBandScale, xPixel } from './utils.js';
21
+ export { useChartColors } from './useChartColors.js';
22
+ export { getChartColors, getChartColorsFromResolver, type ChartColorsAPI, type SequentialHue, type TokenResolver, } from './getChartColors.js';
23
+ export { useChartRange, type UseChartRangeOptions, type UseChartRangeReturn, } from './useChartRange.js';
24
+ export { hexToGL, getCanvasDPR, getWebGLContext, setupGLState, sizeCanvas, mountCanvasOverSVG, compileShader, CIRCLE_FRAG_BODY, POINT_SIZE_COMPENSATION, } from './webgl.js';
25
+ export { ChartBrush, type ChartBrushProps, type BrushMode, type BrushRange, } from './ChartBrush.js';
26
+ export { ChartZoom, type ChartZoomProps, type ZoomToolbarPosition, } from './ChartZoom.js';
27
+ export { ChartSelect, type ChartSelectProps } from './ChartSelect.js';
28
+ export { ChartReferenceLine, type ChartReferenceLineProps, } from './ChartReferenceLine.js';
29
29
  //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,4 @@
1
- import type { ChartColorsAPI } from './getChartColors';
1
+ import type { ChartColorsAPI } from './getChartColors.js';
2
2
  /**
3
3
  * Theme-aware chart colors. Resolves data-viz tokens from the current
4
4
  * theme context — respects light/dark mode and custom themes.
@@ -1,4 +1,4 @@
1
- import type { ChartStreamGLHandle } from './ChartStreamGL';
1
+ import type { ChartStreamGLHandle } from './ChartStreamGL.js';
2
2
  export interface UseChartRangeOptions {
3
3
  /** Sliding window size for x-axis (number of ticks visible). Required. */
4
4
  xWindow: number;
@@ -4,7 +4,7 @@
4
4
  * @position Internal helpers; consumed by mark, axis, and interaction components
5
5
  */
6
6
  import type { ScaleBand } from 'd3-scale';
7
- import type { ChartScale } from './types';
7
+ import type { ChartScale } from './types.js';
8
8
  /** Type guard for d3 band scales */
9
9
  export declare function isBandScale(scale: ChartScale): scale is ScaleBand<string>;
10
10
  /**
@@ -1,5 +1,5 @@
1
1
  import type { BaseProps } from '@astryxdesign/core';
2
- import type { ChatEmojiOption } from './ChatEmojiPicker';
2
+ import type { ChatEmojiOption } from './ChatEmojiPicker.js';
3
3
  export interface ChatReaction {
4
4
  /** The emoji character, e.g. "🎉". */
5
5
  emoji: string;
@@ -4,12 +4,12 @@
4
4
  * @output Exports lab chat components and related types
5
5
  * @position Lab Chat entry point; re-exported by packages/lab/src/index.ts
6
6
  */
7
- export { ChatReactionBar } from './ChatReactionBar';
8
- export type { ChatReactionBarProps, ChatReaction } from './ChatReactionBar';
9
- export { ChatEmojiPicker, DEFAULT_CHAT_EMOJIS } from './ChatEmojiPicker';
10
- export type { ChatEmojiPickerProps, ChatEmojiOption } from './ChatEmojiPicker';
11
- export { ChatUnreadDivider } from './ChatUnreadDivider';
12
- export type { ChatUnreadDividerProps } from './ChatUnreadDivider';
13
- export { ChatTypingIndicator } from './ChatTypingIndicator';
14
- export type { ChatTypingIndicatorProps } from './ChatTypingIndicator';
7
+ export { ChatReactionBar } from './ChatReactionBar.js';
8
+ export type { ChatReactionBarProps, ChatReaction } from './ChatReactionBar.js';
9
+ export { ChatEmojiPicker, DEFAULT_CHAT_EMOJIS } from './ChatEmojiPicker.js';
10
+ export type { ChatEmojiPickerProps, ChatEmojiOption } from './ChatEmojiPicker.js';
11
+ export { ChatUnreadDivider } from './ChatUnreadDivider.js';
12
+ export type { ChatUnreadDividerProps } from './ChatUnreadDivider.js';
13
+ export { ChatTypingIndicator } from './ChatTypingIndicator.js';
14
+ export type { ChatTypingIndicatorProps } from './ChatTypingIndicator.js';
15
15
  //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @file CircularProgress component barrel export
3
3
  */
4
- export { CircularProgress } from './CircularProgress';
5
- export type { CircularProgressProps, CircularProgressSize, CircularProgressVariant, CircularProgressVariantMap, } from './CircularProgress';
4
+ export { CircularProgress } from './CircularProgress.js';
5
+ export type { CircularProgressProps, CircularProgressSize, CircularProgressVariant, CircularProgressVariantMap, } from './CircularProgress.js';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @file CodeEditor component barrel export
3
3
  */
4
- export { CodeEditor } from './CodeEditor';
5
- export type { CodeEditorProps } from './CodeEditor';
4
+ export { CodeEditor } from './CodeEditor.js';
5
+ export type { CodeEditorProps } from './CodeEditor.js';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,6 @@
1
1
  import type { BaseProps } from '@astryxdesign/core';
2
+ /** Pin heights on the shared element-size scale: 28, 32, or 36px. */
3
+ export type CommentPinSize = 'sm' | 'md' | 'lg';
2
4
  /** Identity data for one representative shown inside a CommentPin. */
3
5
  export interface CommentPinParticipant {
4
6
  /** Stable identity used to remove duplicate representatives. */
@@ -21,10 +23,17 @@ export interface CommentPinProps extends Omit<BaseProps<HTMLButtonElement>, 'chi
21
23
  * Ordered participants, lead first. A single marker shows the first. A
22
24
  * grouped marker shows distinct IDs as an AvatarGroup of at most three
23
25
  * circles: every participant when three or fewer are distinct, otherwise the
24
- * first two plus a `+N` overflow circle. Pass every distinct participant so
25
- * the overflow count is accurate.
26
+ * first two plus an ellipsis overflow circle. Pass every distinct
27
+ * participant so the overflow appears only when more than three people
28
+ * participate.
26
29
  */
27
30
  participants: readonly [CommentPinParticipant, ...CommentPinParticipant[]];
31
+ /**
32
+ * Pin height on the element-size scale: `sm` 28px, `md` 32px, `lg` 36px,
33
+ * with 22px, 24px, and 28px participant circles.
34
+ * @default 'sm'
35
+ */
36
+ size?: CommentPinSize;
28
37
  /**
29
38
  * Total number of threads represented by this marker. Values above one use
30
39
  * the grouped presentation and show the exact total.
@@ -33,8 +42,9 @@ export interface CommentPinProps extends Omit<BaseProps<HTMLButtonElement>, 'chi
33
42
  threadCount?: number;
34
43
  /**
35
44
  * Number of represented threads with unread activity. When above zero, an
36
- * accent badge shows this number in place of the thread total, on single
37
- * and grouped pins alike. Values above `threadCount` are capped.
45
+ * accent status dot appears at the end of the pin: after the thread total,
46
+ * or after the participant on a single pin. Values above `threadCount` are
47
+ * capped.
38
48
  * @default 0
39
49
  */
40
50
  unreadCount?: number;
@@ -45,7 +55,11 @@ export interface CommentPinProps extends Omit<BaseProps<HTMLButtonElement>, 'chi
45
55
  * disabling it, so it remains available to switch selection.
46
56
  */
47
57
  isDimmed?: boolean;
48
- /** Whether every thread represented by this pin is resolved. */
58
+ /**
59
+ * Whether every thread represented by this pin is resolved. A resolved pin
60
+ * renders nothing unless it is selected, so resolved discussion leaves the
61
+ * content while a thread the reader opened keeps its anchor.
62
+ */
49
63
  isResolved?: boolean;
50
64
  /** Whether activation is unavailable. */
51
65
  isDisabled?: boolean;
@@ -56,7 +70,8 @@ export interface CommentPinProps extends Omit<BaseProps<HTMLButtonElement>, 'chi
56
70
  * The caller owns grouping, representative selection, coordinates, collision
57
71
  * handling, and the content opened by activation. Absolute placement maps the
58
72
  * host anchor to the pin's logical bottom-start corner. The pin only owns its
59
- * compact button surface and controlled visual states.
73
+ * compact button surface and controlled visual states. `size` sets its height
74
+ * on the element-size scale.
60
75
  *
61
76
  * @example
62
77
  * ```
@@ -79,7 +94,7 @@ export interface CommentPinProps extends Omit<BaseProps<HTMLButtonElement>, 'chi
79
94
  * />
80
95
  * ```
81
96
  */
82
- export declare function CommentPin({ label, participants, threadCount, unreadCount, isSelected, isDimmed, isResolved, isDisabled, ref, xstyle, className, style, ...rest }: CommentPinProps): React.ReactNode;
97
+ export declare function CommentPin({ label, participants, size, threadCount, unreadCount, isSelected, isDimmed, isResolved, isDisabled, ref, xstyle, className, style, ...rest }: CommentPinProps): React.ReactNode;
83
98
  export declare namespace CommentPin {
84
99
  var displayName: string;
85
100
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CommentPin.d.ts","sourceRoot":"","sources":["../../src/CommentPin/CommentPin.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AA2BlD,sEAAsE;AACtE,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,SAAS,CAAC,iBAAiB,CAAC,EAC5B,UAAU,CACX;IACC,0CAA0C;IAC1C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,YAAY,EAAE,SAAS,CAAC,qBAAqB,EAAE,GAAG,qBAAqB,EAAE,CAAC,CAAC;IAC3E;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gEAAgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yCAAyC;IACzC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAqMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,YAAY,EACZ,WAAe,EACf,WAAe,EACf,UAAkB,EAClB,QAAgB,EAChB,UAAkB,EAClB,UAAkB,EAClB,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,eAAe,GAAG,KAAK,CAAC,SAAS,CAyInC;yBAvJe,UAAU"}
1
+ {"version":3,"file":"CommentPin.d.ts","sourceRoot":"","sources":["../../src/CommentPin/CommentPin.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AA4BlD,qEAAqE;AACrE,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEhD,sEAAsE;AACtE,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,SAAS,CAAC,iBAAiB,CAAC,EAC5B,UAAU,CACX;IACC,0CAA0C;IAC1C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;OAOG;IACH,YAAY,EAAE,SAAS,CAAC,qBAAqB,EAAE,GAAG,qBAAqB,EAAE,CAAC,CAAC;IAC3E;;;;OAIG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yCAAyC;IACzC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA8ND;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,YAAY,EACZ,IAAW,EACX,WAAe,EACf,WAAe,EACf,UAAkB,EAClB,QAAgB,EAChB,UAAkB,EAClB,UAAkB,EAClB,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,eAAe,GAAG,KAAK,CAAC,SAAS,CA4JnC;yBA3Ke,UAAU"}
@@ -5,8 +5,10 @@
5
5
  /**
6
6
  * @file CommentPin.tsx
7
7
  * @input Ordered participants (grouped pins show at most three circles),
8
- * total and unread represented thread counts, controlled
9
- * selected/dimmed/resolved/disabled state, and button DOM props
8
+ * total and unread represented thread counts (unread shows as a dot), a
9
+ * size on the element-size
10
+ * scale, controlled selected/dimmed/resolved/disabled state, and button DOM
11
+ * props
10
12
  * @output Exports the avatar-first CommentPin button and its public types
11
13
  * @position Lab collaboration primitive for annotation anchors over content or
12
14
  * in content margins; callers own grouping, coordinates, and opened content
@@ -23,11 +25,15 @@ import * as stylex from '@stylexjs/stylex';
23
25
  import { Avatar } from '@astryxdesign/core/Avatar';
24
26
  import { AvatarGroup, AvatarGroupOverflow } from '@astryxdesign/core/AvatarGroup';
25
27
  import { useDevWarning, useMergedRefs, usePressFeedback } from '@astryxdesign/core/hooks';
28
+ import { Icon } from '@astryxdesign/core/Icon';
29
+ import { StatusDot } from '@astryxdesign/core/StatusDot';
26
30
  import '@astryxdesign/core/theme/tokens.stylex';
27
- import { borderVars, colorVars, fontWeightVars, radiusVars, shadowVars, sizeVars, spacingVars, typeScaleVars, typographyVars } from '@astryxdesign/core/theme/tokens.stylex';
31
+ import { borderVars, colorVars, fontWeightVars, shadowVars, sizeVars, spacingVars, typeScaleVars, typographyVars } from '@astryxdesign/core/theme/tokens.stylex';
28
32
  import { useTooltip } from '@astryxdesign/core/Tooltip';
29
33
  import { focusOutlineProps, interactionOverlayStyles, mergeProps, themeProps } from '@astryxdesign/core/utils';
30
34
 
35
+ /** Pin heights on the shared element-size scale: 28, 32, or 36px. */
36
+
31
37
  /** Identity data for one representative shown inside a CommentPin. */
32
38
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
33
39
  const styles = {
@@ -41,17 +47,11 @@ const styles = {
41
47
  kmuXW: "x2lah0s",
42
48
  kXLuUW: "xxymvpz",
43
49
  k3nNDw: "x1bd091l x173emx3",
44
- k7Eaqz: "x1nkkqge",
45
- kZKoxP: "x6k0iem",
46
50
  kogj98: "x1ghz6dp",
47
- kmVPX3: "x12nba7r",
48
51
  kMzoRj: "x1litavf",
49
52
  ksu8eU: "x1y0btm7",
50
53
  kVAM5u: "x9r1u3d",
51
- krdFHd: "x19415el",
52
- kfmiAY: "x8agd5o",
53
- kT0f0o: "x1dgc8on",
54
- kVL7Gh: "x1pczhz8",
54
+ kVL7Gh: "x6en5u8",
55
55
  kWkggS: "x1prclbq",
56
56
  kKwaWg: "x18o3ruo",
57
57
  kGVxlE: "x14hfi27",
@@ -68,8 +68,6 @@ const styles = {
68
68
  withCount: {
69
69
  kjj79g: "x1nhvcw1",
70
70
  kOIVth: "xzye2dw",
71
- kZCmMZ: "x138rykx",
72
- kwRFfy: "x1djylfy",
73
71
  $$css: true
74
72
  },
75
73
  selected: {
@@ -81,15 +79,6 @@ const styles = {
81
79
  kMwMTN: "xv1l7n4 x1k5gbb1",
82
80
  $$css: true
83
81
  },
84
- resolved: {
85
- kAXs8y: "x1kzknox",
86
- kVAM5u: "x9r1u3d x1w1tqly",
87
- kWkggS: "xwmxj5m x9yvj25",
88
- kGVxlE: "x1gnnqk1",
89
- kMwMTN: "xv1l7n4 xs5hli",
90
- kSiTet: "xf9vgkq x1tbh5bv",
91
- $$css: true
92
- },
93
82
  dimmed: {
94
83
  kSiTet: "xti2d7y x1tbh5bv",
95
84
  $$css: true
@@ -102,8 +91,69 @@ const styles = {
102
91
  overflowCircle: {
103
92
  kg3NbH: "xnjsko4",
104
93
  $$css: true
94
+ },
95
+ unreadDot: {
96
+ kAXs8y: "x1kzknox",
97
+ kMwMTN: "x17wrial x1q73b31",
98
+ kWkggS: "x1ewilqj x438xzl",
99
+ $$css: true
105
100
  }
106
101
  };
102
+
103
+ // Each size pairs an element-size height with a participant circle diameter
104
+ // (see AVATAR_SIZE). The padding is the inset that centers that circle in the
105
+ // height, applied on every side: the avatars and overflow sit the same
106
+ // distance from all four edges. The three round corners are half the height,
107
+ // which is fully round: the 9999px full-radius token would make the browser
108
+ // scale every corner down to fit the box (the CSS corner-overlap rule) and
109
+ // shrink the 2px anchor corner to nothing.
110
+ const sizeStyles = {
111
+ sm: {
112
+ k7Eaqz: "x1nkkqge",
113
+ kZKoxP: "x6k0iem",
114
+ kmVPX3: "x5pt662",
115
+ krdFHd: "x404ayl",
116
+ kfmiAY: "x1096wwc",
117
+ kT0f0o: "xjc3rfe",
118
+ $$css: true
119
+ },
120
+ md: {
121
+ k7Eaqz: "x17ydmr0",
122
+ kZKoxP: "x1ueg155",
123
+ kmVPX3: "xnvfkzk",
124
+ krdFHd: "x17mafka",
125
+ kfmiAY: "x1fefpn5",
126
+ kT0f0o: "x11o29ay",
127
+ $$css: true
128
+ },
129
+ lg: {
130
+ k7Eaqz: "x1je4dsv",
131
+ kZKoxP: "xssyfek",
132
+ kmVPX3: "x1fx55se",
133
+ krdFHd: "xgwm7ou",
134
+ kfmiAY: "x7b04l7",
135
+ kT0f0o: "x9hxrvx",
136
+ $$css: true
137
+ }
138
+ };
139
+
140
+ /**
141
+ * Participant circle diameter per pin size, matching the literals in
142
+ * `sizeStyles`. Avatar renders any pixel size; its typed scale lists neither
143
+ * 22 nor 28, hence the cast.
144
+ */
145
+ const AVATAR_SIZE = {
146
+ sm: 22,
147
+ md: 24,
148
+ lg: 28
149
+ };
150
+
151
+ /** The overflow ellipsis per pin size. */
152
+ const OVERFLOW_ICON_SIZE = {
153
+ sm: 'xsm',
154
+ md: 'xsm',
155
+ lg: 'sm'
156
+ };
107
157
  function takeDistinctParticipants(participants, limit) {
108
158
  const result = [];
109
159
  const seen = new Set();
@@ -135,7 +185,8 @@ const MAX_GROUP_CIRCLES = 3;
135
185
  * The caller owns grouping, representative selection, coordinates, collision
136
186
  * handling, and the content opened by activation. Absolute placement maps the
137
187
  * host anchor to the pin's logical bottom-start corner. The pin only owns its
138
- * compact button surface and controlled visual states.
188
+ * compact button surface and controlled visual states. `size` sets its height
189
+ * on the element-size scale.
139
190
  *
140
191
  * @example
141
192
  * ```
@@ -161,6 +212,7 @@ const MAX_GROUP_CIRCLES = 3;
161
212
  export function CommentPin({
162
213
  label,
163
214
  participants,
215
+ size = 'sm',
164
216
  threadCount = 1,
165
217
  unreadCount = 0,
166
218
  isSelected = false,
@@ -173,6 +225,8 @@ export function CommentPin({
173
225
  style,
174
226
  ...rest
175
227
  }) {
228
+ const resolvedSize = size === 'md' || size === 'lg' ? size : 'sm';
229
+ const avatarSize = AVATAR_SIZE[resolvedSize];
176
230
  const validThreadCount = isValidThreadCount(threadCount);
177
231
  const resolvedThreadCount = validThreadCount ? threadCount : 1;
178
232
  const isGrouped = resolvedThreadCount > 1;
@@ -181,7 +235,7 @@ export function CommentPin({
181
235
  const hasUnread = resolvedUnreadCount > 0;
182
236
 
183
237
  // Grouped pins cap at MAX_GROUP_CIRCLES circles: every distinct participant
184
- // when they fit, otherwise one fewer Avatar plus a `+N` overflow circle.
238
+ // when they fit, otherwise one fewer Avatar plus an ellipsis overflow circle.
185
239
  const distinctParticipants = takeDistinctParticipants(participants, isGrouped ? Number.POSITIVE_INFINITY : 1);
186
240
  const hasOverflow = isGrouped && distinctParticipants.length > MAX_GROUP_CIRCLES;
187
241
  const visibleParticipants = hasOverflow ? distinctParticipants.slice(0, MAX_GROUP_CIRCLES - 1) : distinctParticipants;
@@ -197,6 +251,13 @@ export function CommentPin({
197
251
  isEnabled: hasTooltip
198
252
  });
199
253
  const mergedRef = useMergedRefs(ref, hasTooltip ? tooltip.ref : undefined);
254
+
255
+ // Resolved discussion leaves the content. A selected pin stays, so a thread
256
+ // the reader opened (or resolved from its popover) keeps its anchor until
257
+ // the host clears the selection.
258
+ if (isResolved && !isSelected) {
259
+ return null;
260
+ }
200
261
  const avatarParticipants = visibleParticipants.length > 0 ? visibleParticipants : [{
201
262
  id: '__anonymous__',
202
263
  name: '',
@@ -211,46 +272,62 @@ export function CommentPin({
211
272
  "aria-pressed": isSelected,
212
273
  disabled: isDisabled,
213
274
  ...mergeProps(themeProps('comment-pin', {
275
+ size: resolvedSize,
214
276
  grouped: isGrouped ? 'grouped' : null,
215
277
  unread: hasUnread ? 'unread' : null,
216
278
  selected: isSelected ? 'selected' : null,
217
279
  dimmed: isDimmed ? 'dimmed' : null,
218
280
  resolved: isResolved ? 'resolved' : null,
219
281
  disabled: isDisabled ? 'disabled' : null
220
- }), focusOutlineProps.focusVisible(styles.root, interactionOverlayStyles.backgroundImage, (isGrouped || hasUnread) && styles.withCount, isResolved && !isSelected && styles.resolved, isDimmed && !isSelected && styles.dimmed, isSelected && styles.selected, isDisabled && styles.disabled, xstyle), className, style),
282
+ }), focusOutlineProps.focusVisible(styles.root, sizeStyles[resolvedSize], interactionOverlayStyles.backgroundImage, (isGrouped || hasUnread) && styles.withCount, isDimmed && !isSelected && styles.dimmed, isSelected && styles.selected, isDisabled && styles.disabled, xstyle), className, style),
221
283
  children: [/*#__PURE__*/_jsx("span", {
222
284
  "aria-hidden": "true",
223
285
  ...{
224
- className: "x3nfvp2 x6s0dn4 x2lah0s"
225
- },
286
+ 0: {
287
+ className: "x3nfvp2 x6s0dn4 x2lah0s"
288
+ },
289
+ 1: {
290
+ className: "x3nfvp2 x6s0dn4 x2lah0s xe9ewy2"
291
+ }
292
+ }[!!isGrouped << 0],
226
293
  children: isGrouped ? /*#__PURE__*/_jsxs(AvatarGroup, {
227
- size: "xsm",
294
+ size: avatarSize,
228
295
  children: [avatarParticipants.map(participant => /*#__PURE__*/_jsx(Avatar, {
229
296
  name: participant.name,
230
297
  src: participant.avatarSrc,
231
298
  tooltip: false
232
299
  }, participant.id)), overflowCount > 0 ? /*#__PURE__*/_jsx(AvatarGroupOverflow, {
233
300
  count: overflowCount,
234
- xstyle: styles.overflowCircle
301
+ xstyle: styles.overflowCircle,
302
+ children: /*#__PURE__*/_jsx(Icon, {
303
+ icon: "moreHorizontal",
304
+ size: OVERFLOW_ICON_SIZE[resolvedSize]
305
+ })
235
306
  }) : null]
236
307
  }) : avatarParticipants.map(participant => /*#__PURE__*/_jsx(Avatar, {
237
308
  name: participant.name,
238
309
  src: participant.avatarSrc,
239
- size: "xsm",
310
+ size: avatarSize,
240
311
  tooltip: false
241
312
  }, participant.id))
242
- }), hasUnread ? /*#__PURE__*/_jsx("span", {
243
- "aria-hidden": "true",
244
- ...{
245
- className: "x1kzknox x3nfvp2 x6s0dn4 xl56j7k x9f619 x16asifk x1grt7ep x7a5moj xjspbzw x1ewilqj x1jzqe4 x17wrial x1k5gbb1 xss6m8b xo5v014"
246
- },
247
- children: resolvedUnreadCount
248
- }) : isGrouped ? /*#__PURE__*/_jsx("span", {
313
+ }), hasUnread || isGrouped ? /*#__PURE__*/_jsxs("span", {
249
314
  "aria-hidden": "true",
250
315
  ...{
251
- className: "x1rg5ohu x163how x1heor9g xss6m8b x2b8uid"
316
+ className: "x3nfvp2 x6s0dn4 xzye2dw x1nryj5t"
252
317
  },
253
- children: resolvedThreadCount
318
+ children: [isGrouped ? /*#__PURE__*/_jsx("span", {
319
+ ...{
320
+ className: "x1heor9g xss6m8b"
321
+ },
322
+ children: resolvedThreadCount
323
+ }) : null, hasUnread ?
324
+ /*#__PURE__*/
325
+ // Decorative: the button's label carries the unread context.
326
+ _jsx(StatusDot, {
327
+ variant: "accent",
328
+ label: "",
329
+ xstyle: styles.unreadDot
330
+ }) : null]
254
331
  }) : null]
255
332
  });
256
333
  return /*#__PURE__*/_jsxs(_Fragment, {
@@ -4,6 +4,6 @@
4
4
  * @output CommentPin module exports
5
5
  * @position Public Lab subpath; re-exported by packages/lab/src/index.ts
6
6
  */
7
- export { CommentPin } from './CommentPin';
8
- export type { CommentPinParticipant, CommentPinProps } from './CommentPin';
7
+ export { CommentPin } from './CommentPin.js';
8
+ export type { CommentPinParticipant, CommentPinProps } from './CommentPin.js';
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -9,8 +9,8 @@
9
9
  */
10
10
  import { type ReactNode } from 'react';
11
11
  import { type DropdownMenuOption } from '@astryxdesign/core/DropdownMenu';
12
- import { type AnyComment } from './utils';
13
- import type { CommentReactionOption } from './types';
12
+ import { type AnyComment } from './utils.js';
13
+ import type { CommentReactionOption } from './types.js';
14
14
  export type CommentActionId = 'resolve' | 'reopen' | 'react' | 'reply' | 'link';
15
15
  /** Mark as resolved on an open thread, Reopen on a resolved one. */
16
16
  export type ResolveAction = {
@@ -16,7 +16,7 @@
16
16
  import { type ReactNode, type Ref } from 'react';
17
17
  import type { BaseProps } from '@astryxdesign/core';
18
18
  import { type ChatComposerTrigger } from '@astryxdesign/core/Chat';
19
- import type { CommentAgentCommand, CommentAnchor, CommentComposerContext, CommentComposerRenderProps, CommentHighlightColor, CommentUploadedImage } from './types';
19
+ import type { CommentAgentCommand, CommentAnchor, CommentComposerContext, CommentComposerRenderProps, CommentHighlightColor, CommentUploadedImage } from './types.js';
20
20
  /** Props the family's threads pass to their composers. */
21
21
  export interface CommentComposerBaseProps {
22
22
  value: string;
@@ -1,7 +1,7 @@
1
1
  import { type ChatComposerToken } from '@astryxdesign/core/Chat';
2
2
  import { type MarkdownInlinePlugin } from '@astryxdesign/core/Markdown';
3
3
  import type { MarkdownPluginEntry } from '@astryxdesign/core/Markdown/plugins';
4
- import type { CommentAgentCommand } from './types';
4
+ import type { CommentAgentCommand } from './types.js';
5
5
  /** An agent's chip: what the composer's `/` menu inserts, and what a posted
6
6
  * comment shows in place of the command. */
7
7
  export declare function agentToken(agent: CommentAgentCommand): ChatComposerToken;
@@ -10,8 +10,8 @@
10
10
  */
11
11
  import { type CSSProperties, type ReactNode, type Ref } from 'react';
12
12
  import * as stylex from '@stylexjs/stylex';
13
- import { type AnyComment } from './utils';
14
- import type { CommentAnchor, CommentHighlightColor, CommentProgress, CommentUser, CommentVersion, CommentActivityEvent } from './types';
13
+ import { type AnyComment } from './utils.js';
14
+ import type { CommentAnchor, CommentHighlightColor, CommentProgress, CommentUser, CommentVersion, CommentActivityEvent } from './types.js';
15
15
  /** The 28px avatar column every comment row, reply, and event aligns to. */
16
16
  export declare const AVATAR_SIZE: string;
17
17
  /**
@@ -1,4 +1,4 @@
1
- import { type AnyComment } from './utils';
1
+ import { type AnyComment } from './utils.js';
2
2
  export type ThreadDivider = 'top' | 'bottom';
3
3
  export declare const THREAD_DIVIDERS: readonly ThreadDivider[];
4
4
  /**
@@ -17,7 +17,7 @@
17
17
  */
18
18
  import { type Ref } from 'react';
19
19
  import type { BaseProps } from '@astryxdesign/core';
20
- import type { CommentThreadData, CommentThreadSharedProps } from './types';
20
+ import type { CommentThreadData, CommentThreadSharedProps } from './types.js';
21
21
  export interface CommentThreadProps extends CommentThreadSharedProps, Omit<BaseProps<HTMLElement>, keyof CommentThreadSharedProps | 'onChange' | 'onSubmit'> {
22
22
  /** Ref forwarded to the root element. */
23
23
  ref?: Ref<HTMLElement>;
@@ -14,7 +14,7 @@
14
14
  */
15
15
  import { type ReactNode, type Ref } from 'react';
16
16
  import type { BaseProps } from '@astryxdesign/core';
17
- import type { CommentAnchor, CommentThreadData, CommentThreadSharedProps, CommentActivityEvent } from './types';
17
+ import type { CommentAnchor, CommentThreadData, CommentThreadSharedProps, CommentActivityEvent } from './types.js';
18
18
  export interface CommentsProps extends CommentThreadSharedProps, Omit<BaseProps<HTMLElement>, keyof CommentThreadSharedProps | 'onChange' | 'onSubmit'> {
19
19
  /** Ref forwarded to the root element. */
20
20
  ref?: Ref<HTMLElement>;
@@ -13,8 +13,8 @@ import { type RefObject } from 'react';
13
13
  import type { ChatComposerTrigger } from '@astryxdesign/core/Chat';
14
14
  import type { MarkdownInlinePlugin } from '@astryxdesign/core/Markdown';
15
15
  import type { MarkdownPluginEntry } from '@astryxdesign/core/Markdown/plugins';
16
- import { type AnyComment } from './utils';
17
- import { type CommentAgentCommand, type CommentHighlightColor, type CommentImageUploader, type CommentMode, type CommentReactionOption, type CommentThreadData, type CommentThreadSharedProps, type CommentUser } from './types';
16
+ import { type AnyComment } from './utils.js';
17
+ import { type CommentAgentCommand, type CommentHighlightColor, type CommentImageUploader, type CommentMode, type CommentReactionOption, type CommentThreadData, type CommentThreadSharedProps, type CommentUser } from './types.js';
18
18
  /** The thread a reply composer is open in, and the comment it answers. */
19
19
  export type ReplyTarget = {
20
20
  parentId: string;
@@ -9,7 +9,7 @@
9
9
  * - /packages/core/locales/en.json (@astryx.comments.reaction*)
10
10
  */
11
11
  import type { TranslatorFn } from '@astryxdesign/core/i18n';
12
- import type { CommentReactionOption } from './types';
12
+ import type { CommentReactionOption } from './types.js';
13
13
  /**
14
14
  * A reaction's human-readable name: the host's `description`, else the
15
15
  * localized name of a default reaction, else its glyph.