@bikdotai/bik-component-library 0.0.823-beta.2 → 0.0.824-beta.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.
Files changed (172) hide show
  1. package/dist/cjs/components/adbanner/AdBanner.js.map +1 -0
  2. package/dist/cjs/components/{banner → adbanner}/Banner.styled.js +13 -9
  3. package/dist/cjs/components/adbanner/Banner.styled.js.map +1 -0
  4. package/dist/cjs/components/adbanner/BannerInline.js.map +1 -0
  5. package/dist/cjs/components/adbanner/BannerWithImage.js.map +1 -0
  6. package/dist/cjs/components/adbanner/CardBanner.js.map +1 -0
  7. package/dist/cjs/components/adbanner/CardBannerWithImage.js.map +1 -0
  8. package/dist/cjs/components/adbanner/model.js.map +1 -0
  9. package/dist/cjs/components/agent-builder/AgentBuilder.js +1 -1
  10. package/dist/cjs/components/agent-builder/AgentBuilder.js.map +1 -1
  11. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js +97 -66
  12. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  13. package/dist/cjs/components/agent-builder/components/AgentBuilderTopBar.js +1 -1
  14. package/dist/cjs/components/agent-builder/components/AgentBuilderTopBar.js.map +1 -1
  15. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js +1 -1
  16. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  17. package/dist/cjs/components/agent-builder/components/MentionField.js +1 -1
  18. package/dist/cjs/components/agent-builder/components/MentionField.js.map +1 -1
  19. package/dist/cjs/components/agent-builder/components/SelectableListSection.js +4 -4
  20. package/dist/cjs/components/agent-builder/components/SelectableListSection.js.map +1 -1
  21. package/dist/cjs/components/agent-builder/components/StepRail.js +1 -1
  22. package/dist/cjs/components/agent-builder/components/StepRail.js.map +1 -1
  23. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js +1 -1
  24. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  25. package/dist/cjs/components/agent-builder/steps/Step1About.js +1 -1
  26. package/dist/cjs/components/agent-builder/steps/Step1About.js.map +1 -1
  27. package/dist/cjs/components/agent-builder/steps/Step2WhenItStepsIn.js +1 -1
  28. package/dist/cjs/components/agent-builder/steps/Step2WhenItStepsIn.js.map +1 -1
  29. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js +1 -1
  30. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  31. package/dist/cjs/components/agent-builder/steps/Step4HandoverRules.js +1 -1
  32. package/dist/cjs/components/agent-builder/steps/Step4HandoverRules.js.map +1 -1
  33. package/dist/cjs/components/agent-listing/AgentListing.js +1 -1
  34. package/dist/cjs/components/agent-listing/AgentListing.js.map +1 -1
  35. package/dist/cjs/components/agent-listing/AgentListing.styled.js +32 -28
  36. package/dist/cjs/components/agent-listing/AgentListing.styled.js.map +1 -1
  37. package/dist/cjs/components/agent-listing/AgentListingHeader.js +1 -1
  38. package/dist/cjs/components/agent-listing/AgentListingHeader.js.map +1 -1
  39. package/dist/cjs/components/agent-listing/AgentTableRow.js +1 -1
  40. package/dist/cjs/components/agent-listing/AgentTableRow.js.map +1 -1
  41. package/dist/cjs/components/template-preview/models/TemplateMeta.js +1 -1
  42. package/dist/cjs/components/template-preview/models/TemplateMeta.js.map +1 -1
  43. package/dist/cjs/editor/BikEditor.js +1 -1
  44. package/dist/cjs/editor/BikEditor.js.map +1 -1
  45. package/dist/cjs/editor/BikEditor.styles.js +122 -2
  46. package/dist/cjs/editor/BikEditor.styles.js.map +1 -1
  47. package/dist/cjs/editor/BikEditor.types.js.map +1 -1
  48. package/dist/cjs/editor/BikEditor.utils.js +3 -2
  49. package/dist/cjs/editor/BikEditor.utils.js.map +1 -1
  50. package/dist/cjs/editor/extensions/buildExtensions.js +3 -1
  51. package/dist/cjs/editor/extensions/buildExtensions.js.map +1 -1
  52. package/dist/cjs/editor/extensions/jsonHighlight/JsonHighlightExtension.js +3 -0
  53. package/dist/cjs/editor/extensions/jsonHighlight/JsonHighlightExtension.js.map +1 -0
  54. package/dist/cjs/editor/extensions/jsonHighlight/tokenizeJson.js +2 -0
  55. package/dist/cjs/editor/extensions/jsonHighlight/tokenizeJson.js.map +1 -0
  56. package/dist/cjs/icons/BIK AI specific/WandSparkles.js +2 -0
  57. package/dist/cjs/icons/BIK AI specific/WandSparkles.js.map +1 -0
  58. package/dist/cjs/icons/index.js +1 -1
  59. package/dist/cjs/index.js +1 -1
  60. package/dist/esm/components/adbanner/AdBanner.js.map +1 -0
  61. package/dist/esm/components/{banner → adbanner}/Banner.styled.js +18 -14
  62. package/dist/esm/components/adbanner/Banner.styled.js.map +1 -0
  63. package/dist/esm/components/adbanner/BannerInline.js.map +1 -0
  64. package/dist/esm/components/adbanner/BannerWithImage.js.map +1 -0
  65. package/dist/esm/components/adbanner/CardBanner.js.map +1 -0
  66. package/dist/esm/components/adbanner/CardBannerWithImage.js.map +1 -0
  67. package/dist/esm/components/adbanner/model.js.map +1 -0
  68. package/dist/esm/components/agent-builder/AgentBuilder.js +82 -83
  69. package/dist/esm/components/agent-builder/AgentBuilder.js.map +1 -1
  70. package/dist/esm/components/agent-builder/AgentBuilder.styled.d.ts +13 -5
  71. package/dist/esm/components/agent-builder/AgentBuilder.styled.js +141 -102
  72. package/dist/esm/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  73. package/dist/esm/components/agent-builder/components/AgentBuilderTopBar.d.ts +0 -1
  74. package/dist/esm/components/agent-builder/components/AgentBuilderTopBar.js +33 -46
  75. package/dist/esm/components/agent-builder/components/AgentBuilderTopBar.js.map +1 -1
  76. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js +135 -119
  77. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  78. package/dist/esm/components/agent-builder/components/MentionField.js +44 -45
  79. package/dist/esm/components/agent-builder/components/MentionField.js.map +1 -1
  80. package/dist/esm/components/agent-builder/components/SelectableListSection.js +91 -94
  81. package/dist/esm/components/agent-builder/components/SelectableListSection.js.map +1 -1
  82. package/dist/esm/components/agent-builder/components/StepRail.js +28 -20
  83. package/dist/esm/components/agent-builder/components/StepRail.js.map +1 -1
  84. package/dist/esm/components/agent-builder/context/AgentBuilderContext.d.ts +7 -0
  85. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js +108 -98
  86. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  87. package/dist/esm/components/agent-builder/steps/Step1About.js +38 -35
  88. package/dist/esm/components/agent-builder/steps/Step1About.js.map +1 -1
  89. package/dist/esm/components/agent-builder/steps/Step2WhenItStepsIn.js +118 -122
  90. package/dist/esm/components/agent-builder/steps/Step2WhenItStepsIn.js.map +1 -1
  91. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js +112 -110
  92. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  93. package/dist/esm/components/agent-builder/steps/Step4HandoverRules.js +72 -70
  94. package/dist/esm/components/agent-builder/steps/Step4HandoverRules.js.map +1 -1
  95. package/dist/esm/components/agent-listing/AgentListing.js +45 -43
  96. package/dist/esm/components/agent-listing/AgentListing.js.map +1 -1
  97. package/dist/esm/components/agent-listing/AgentListing.model.d.ts +7 -0
  98. package/dist/esm/components/agent-listing/AgentListing.styled.js +28 -24
  99. package/dist/esm/components/agent-listing/AgentListing.styled.js.map +1 -1
  100. package/dist/esm/components/agent-listing/AgentListingHeader.d.ts +2 -0
  101. package/dist/esm/components/agent-listing/AgentListingHeader.js +14 -12
  102. package/dist/esm/components/agent-listing/AgentListingHeader.js.map +1 -1
  103. package/dist/esm/components/agent-listing/AgentTableRow.js +102 -57
  104. package/dist/esm/components/agent-listing/AgentTableRow.js.map +1 -1
  105. package/dist/esm/components/template-preview/models/TemplateMeta.d.ts +1 -2
  106. package/dist/esm/components/template-preview/models/TemplateMeta.js +11 -11
  107. package/dist/esm/components/template-preview/models/TemplateMeta.js.map +1 -1
  108. package/dist/esm/editor/BikEditor.js +254 -181
  109. package/dist/esm/editor/BikEditor.js.map +1 -1
  110. package/dist/esm/editor/BikEditor.styles.d.ts +9 -0
  111. package/dist/esm/editor/BikEditor.styles.js +128 -6
  112. package/dist/esm/editor/BikEditor.styles.js.map +1 -1
  113. package/dist/esm/editor/BikEditor.types.d.ts +76 -0
  114. package/dist/esm/editor/BikEditor.types.js.map +1 -1
  115. package/dist/esm/editor/BikEditor.utils.d.ts +15 -1
  116. package/dist/esm/editor/BikEditor.utils.js +155 -92
  117. package/dist/esm/editor/BikEditor.utils.js.map +1 -1
  118. package/dist/esm/editor/extensions/buildExtensions.d.ts +1 -1
  119. package/dist/esm/editor/extensions/buildExtensions.js +86 -55
  120. package/dist/esm/editor/extensions/buildExtensions.js.map +1 -1
  121. package/dist/esm/editor/extensions/jsonHighlight/JsonHighlightExtension.d.ts +14 -0
  122. package/dist/esm/editor/extensions/jsonHighlight/JsonHighlightExtension.js +64 -0
  123. package/dist/esm/editor/extensions/jsonHighlight/JsonHighlightExtension.js.map +1 -0
  124. package/dist/esm/editor/extensions/jsonHighlight/tokenizeJson.d.ts +18 -0
  125. package/dist/esm/editor/extensions/jsonHighlight/tokenizeJson.js +21 -0
  126. package/dist/esm/editor/extensions/jsonHighlight/tokenizeJson.js.map +1 -0
  127. package/dist/esm/editor/index.d.ts +1 -1
  128. package/dist/esm/icons/BIK AI specific/WandSparkles.d.ts +7 -0
  129. package/dist/esm/icons/BIK AI specific/WandSparkles.js +39 -0
  130. package/dist/esm/icons/BIK AI specific/WandSparkles.js.map +1 -0
  131. package/dist/esm/icons/BIK AI specific/index.d.ts +1 -0
  132. package/dist/esm/icons/index.d.ts +1 -1
  133. package/dist/esm/icons/index.js +18 -16
  134. package/dist/esm/icons/index.js.map +1 -1
  135. package/dist/esm/index.d.ts +1 -1
  136. package/dist/esm/index.js +2 -2
  137. package/package.json +1 -1
  138. package/dist/cjs/components/banner/AdBanner.js.map +0 -1
  139. package/dist/cjs/components/banner/Banner.styled.js.map +0 -1
  140. package/dist/cjs/components/banner/BannerInline.js.map +0 -1
  141. package/dist/cjs/components/banner/BannerWithImage.js.map +0 -1
  142. package/dist/cjs/components/banner/CardBanner.js.map +0 -1
  143. package/dist/cjs/components/banner/CardBannerWithImage.js.map +0 -1
  144. package/dist/cjs/components/banner/model.js.map +0 -1
  145. package/dist/esm/components/banner/AdBanner.js.map +0 -1
  146. package/dist/esm/components/banner/Banner.stories.d.ts +0 -39
  147. package/dist/esm/components/banner/Banner.styled.js.map +0 -1
  148. package/dist/esm/components/banner/BannerInline.js.map +0 -1
  149. package/dist/esm/components/banner/BannerWithImage.js.map +0 -1
  150. package/dist/esm/components/banner/CardBanner.js.map +0 -1
  151. package/dist/esm/components/banner/CardBannerWithImage.js.map +0 -1
  152. package/dist/esm/components/banner/model.js.map +0 -1
  153. /package/dist/cjs/components/{banner → adbanner}/AdBanner.js +0 -0
  154. /package/dist/cjs/components/{banner → adbanner}/BannerInline.js +0 -0
  155. /package/dist/cjs/components/{banner → adbanner}/BannerWithImage.js +0 -0
  156. /package/dist/cjs/components/{banner → adbanner}/CardBanner.js +0 -0
  157. /package/dist/cjs/components/{banner → adbanner}/CardBannerWithImage.js +0 -0
  158. /package/dist/cjs/components/{banner → adbanner}/model.js +0 -0
  159. /package/dist/esm/components/{banner → adbanner}/AdBanner.d.ts +0 -0
  160. /package/dist/esm/components/{banner → adbanner}/AdBanner.js +0 -0
  161. /package/dist/esm/components/{banner → adbanner}/Banner.styled.d.ts +0 -0
  162. /package/dist/esm/components/{banner → adbanner}/BannerInline.d.ts +0 -0
  163. /package/dist/esm/components/{banner → adbanner}/BannerInline.js +0 -0
  164. /package/dist/esm/components/{banner → adbanner}/BannerWithImage.d.ts +0 -0
  165. /package/dist/esm/components/{banner → adbanner}/BannerWithImage.js +0 -0
  166. /package/dist/esm/components/{banner → adbanner}/CardBanner.d.ts +0 -0
  167. /package/dist/esm/components/{banner → adbanner}/CardBanner.js +0 -0
  168. /package/dist/esm/components/{banner → adbanner}/CardBannerWithImage.d.ts +0 -0
  169. /package/dist/esm/components/{banner → adbanner}/CardBannerWithImage.js +0 -0
  170. /package/dist/esm/components/{banner → adbanner}/index.d.ts +0 -0
  171. /package/dist/esm/components/{banner → adbanner}/model.d.ts +0 -0
  172. /package/dist/esm/components/{banner → adbanner}/model.js +0 -0
@@ -1,19 +1,18 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("styled-components"),a=require("../../constants/Theme.js"),l=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},t=l(r),i="minmax(240px, 1.4fr) minmax(200px, 1.2fr) 140px 160px 120px",d=t.default.div.attrs({className:"bik-agent-listing-page"})`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("styled-components"),i=require("../../constants/Theme.js"),l=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},t=l(r),a="minmax(240px, 1.4fr) minmax(200px, 1.2fr) 140px 160px 120px",d=t.default.div.attrs({className:"bik-agent-listing-page"})`
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  height: 100%;
5
5
  width: 100%;
6
- background: ${a.COLORS.surface.standard};
6
+ background: ${i.COLORS.surface.standard};
7
7
  min-height: 0;
8
- `,s=t.default.div.attrs({className:"bik-header-bar"})`
8
+ `,o=t.default.div.attrs({className:"bik-header-bar"})`
9
9
  display: flex;
10
10
  align-items: center;
11
11
  justify-content: space-between;
12
- height: 56px;
13
12
  padding: 12px 16px;
14
- border-bottom: 1px solid ${a.COLORS.stroke.primary};
13
+ border-bottom: 1px solid ${i.COLORS.stroke.primary};
15
14
  flex-shrink: 0;
16
- `,o=t.default.div.attrs({className:"bik-header-actions"})`
15
+ `,s=t.default.div.attrs({className:"bik-header-actions"})`
17
16
  display: flex;
18
17
  align-items: center;
19
18
  gap: 8px;
@@ -23,7 +22,7 @@
23
22
  justify-content: space-between;
24
23
  gap: 12px;
25
24
  padding: 16px;
26
- border-bottom: 1px solid ${a.COLORS.stroke.primary};
25
+ border-bottom: 1px solid ${i.COLORS.stroke.primary};
27
26
  flex-shrink: 0;
28
27
  `,c=t.default.div.attrs({className:"bik-filter-row-left"})`
29
28
  display: flex;
@@ -36,45 +35,45 @@
36
35
  min-height: 0;
37
36
  padding: 16px;
38
37
  gap: 8px;
39
- `,f=t.default.div.attrs({className:"bik-table-card"})`
38
+ `,u=t.default.div.attrs({className:"bik-table-card"})`
40
39
  display: flex;
41
40
  flex-direction: column;
42
41
  flex: 1;
43
42
  min-height: 0;
44
- border: 1px solid ${a.COLORS.stroke.primary};
43
+ border: 1px solid ${i.COLORS.stroke.primary};
45
44
  border-radius: 8px;
46
45
  overflow: hidden;
47
- `,u=t.default.div.attrs({className:"bik-table-scroll"})`
46
+ `,f=t.default.div.attrs({className:"bik-table-scroll"})`
48
47
  flex: 1;
49
48
  min-height: 0;
50
49
  overflow: auto;
51
- `,x=t.default.div.attrs({className:"bik-header-grid-row"})`
50
+ `,b=t.default.div.attrs({className:"bik-header-grid-row"})`
52
51
  display: grid;
53
- grid-template-columns: ${i};
52
+ grid-template-columns: ${a};
54
53
  align-items: center;
55
54
  height: 40px;
56
- background: ${a.COLORS.surface.subdued};
57
- border-bottom: 1px solid ${a.COLORS.stroke.primary};
55
+ background: ${i.COLORS.surface.subdued};
56
+ border-bottom: 1px solid ${i.COLORS.stroke.primary};
58
57
  position: sticky;
59
58
  top: 0;
60
59
  z-index: 1;
61
- `,m=t.default.div.attrs({className:"bik-header-cell"})`
60
+ `,g=t.default.div.attrs({className:"bik-header-cell"})`
62
61
  padding: 8px 12px;
63
62
  text-align: ${e=>e.align??"left"};
64
63
  display: flex;
65
64
  justify-content: ${e=>e.align==="right"?"flex-end":e.align==="center"?"center":"flex-start"};
66
- `,b=t.default.div.attrs({className:"bik-body-grid-row"})`
65
+ `,m=t.default.div.attrs({className:"bik-body-grid-row"})`
67
66
  display: grid;
68
- grid-template-columns: ${i};
67
+ grid-template-columns: ${a};
69
68
  align-items: center;
70
69
  min-height: 72px;
71
- border-bottom: 1px solid ${a.COLORS.stroke.primary};
70
+ border-bottom: 1px solid ${i.COLORS.stroke.primary};
72
71
  cursor: ${e=>e.clickable?"pointer":"default"};
73
72
 
74
73
  &:hover {
75
- background: ${e=>e.clickable?a.COLORS.surface.subdued:"transparent"};
74
+ background: ${e=>e.clickable?i.COLORS.surface.subdued:"transparent"};
76
75
  }
77
- `,g=t.default.div.attrs({className:"bik-cell"})`
76
+ `,x=t.default.div.attrs({className:"bik-cell"})`
78
77
  padding: 8px 12px;
79
78
  min-width: 0;
80
79
  display: flex;
@@ -85,31 +84,36 @@
85
84
  `,y=t.default.div.attrs({className:"bik-action-group"})`
86
85
  display: inline-flex;
87
86
  align-items: center;
88
- border: 1px solid ${a.COLORS.stroke.primary};
87
+ border: 1px solid ${i.COLORS.stroke.primary};
89
88
  border-radius: 4px;
90
89
  overflow: hidden;
90
+
91
+ /* Divider between actions. Owned here (not on ActionButton's own
92
+ :not(:last-child)) because the run action may be wrapped in a Tooltip
93
+ trigger <span> when disabled — then the button is no longer ActionGroup's
94
+ direct child, so a button-level rule would drop its border. Any empty
95
+ <style> sibling a Tooltip renders is display:none, so it draws nothing. */
96
+ & > *:not(:last-child) {
97
+ border-right: 1px solid ${i.COLORS.stroke.primary};
98
+ }
91
99
  `,h=t.default.button.attrs({className:"bik-action-button"})`
92
100
  width: 32px;
93
101
  height: 32px;
94
102
  display: flex;
95
103
  align-items: center;
96
104
  justify-content: center;
97
- background: ${a.COLORS.surface.standard};
105
+ background: ${i.COLORS.surface.standard};
98
106
  border: none;
99
107
  padding: 0;
100
108
  cursor: ${e=>e.disabled?"not-allowed":"pointer"};
101
109
  opacity: ${e=>e.disabled?.4:1};
102
110
 
103
- &:not(:last-child) {
104
- border-right: 1px solid ${a.COLORS.stroke.primary};
105
- }
106
-
107
111
  &:hover {
108
- background: ${e=>e.disabled?a.COLORS.surface.standard:a.COLORS.surface.subdued};
112
+ background: ${e=>e.disabled?i.COLORS.surface.standard:i.COLORS.surface.subdued};
109
113
  }
110
114
  `,k=t.default.div.attrs({className:"bik-empty-holder"})`
111
115
  flex: 1;
112
116
  display: flex;
113
117
  min-height: 0;
114
- `;exports.ActionButton=h;exports.ActionGroup=y;exports.Body=p;exports.BodyGridRow=b;exports.Cell=g;exports.EmptyHolder=k;exports.FilterRow=n;exports.FilterRowLeft=c;exports.HeaderActions=o;exports.HeaderBar=s;exports.HeaderCell=m;exports.HeaderGridRow=x;exports.Page=d;exports.TABLE_GRID_COLUMNS=i;exports.TableCard=f;exports.TableScroll=u;
118
+ `;exports.ActionButton=h;exports.ActionGroup=y;exports.Body=p;exports.BodyGridRow=m;exports.Cell=x;exports.EmptyHolder=k;exports.FilterRow=n;exports.FilterRowLeft=c;exports.HeaderActions=s;exports.HeaderBar=o;exports.HeaderCell=g;exports.HeaderGridRow=b;exports.Page=d;exports.TABLE_GRID_COLUMNS=a;exports.TableCard=u;exports.TableScroll=f;
115
119
  //# sourceMappingURL=AgentListing.styled.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentListing.styled.js","sources":["../../../../src/components/agent-listing/AgentListing.styled.tsx"],"sourcesContent":["import styled from 'styled-components';\nimport { COLORS } from '@src/constants/Theme';\n\n/** Shared column template for header + body rows so they always align. */\nexport const TABLE_GRID_COLUMNS =\n\t'minmax(240px, 1.4fr) minmax(200px, 1.2fr) 140px 160px 120px';\n\nexport const Page = styled.div.attrs({ className: 'bik-agent-listing-page' })`\n\tdisplay: flex;\n\tflex-direction: column;\n\theight: 100%;\n\twidth: 100%;\n\tbackground: ${COLORS.surface.standard};\n\tmin-height: 0;\n`;\n\nexport const HeaderBar = styled.div.attrs({ className: 'bik-header-bar' })`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\theight: 56px;\n\tpadding: 12px 16px;\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n\tflex-shrink: 0;\n`;\n\nexport const HeaderActions = styled.div.attrs({\n\tclassName: 'bik-header-actions',\n})`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n`;\n\nexport const FilterRow = styled.div.attrs({ className: 'bik-filter-row' })`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tgap: 12px;\n\tpadding: 16px;\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n\tflex-shrink: 0;\n`;\n\nexport const FilterRowLeft = styled.div.attrs({\n\tclassName: 'bik-filter-row-left',\n})`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 12px;\n`;\n\nexport const Body = styled.div.attrs({ className: 'bik-body' })`\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex: 1;\n\tmin-height: 0;\n\tpadding: 16px;\n\tgap: 8px;\n`;\n\nexport const TableCard = styled.div.attrs({ className: 'bik-table-card' })`\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex: 1;\n\tmin-height: 0;\n\tborder: 1px solid ${COLORS.stroke.primary};\n\tborder-radius: 8px;\n\toverflow: hidden;\n`;\n\nexport const TableScroll = styled.div.attrs({ className: 'bik-table-scroll' })`\n\tflex: 1;\n\tmin-height: 0;\n\toverflow: auto;\n`;\n\nexport const HeaderGridRow = styled.div.attrs({\n\tclassName: 'bik-header-grid-row',\n})`\n\tdisplay: grid;\n\tgrid-template-columns: ${TABLE_GRID_COLUMNS};\n\talign-items: center;\n\theight: 40px;\n\tbackground: ${COLORS.surface.subdued};\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n\tposition: sticky;\n\ttop: 0;\n\tz-index: 1;\n`;\n\nexport const HeaderCell = styled.div.attrs({ className: 'bik-header-cell' })<{\n\talign?: 'left' | 'right' | 'center';\n}>`\n\tpadding: 8px 12px;\n\ttext-align: ${(p) => p.align ?? 'left'};\n\tdisplay: flex;\n\tjustify-content: ${(p) =>\n\t\tp.align === 'right'\n\t\t\t? 'flex-end'\n\t\t\t: p.align === 'center'\n\t\t\t? 'center'\n\t\t\t: 'flex-start'};\n`;\n\nexport const BodyGridRow = styled.div.attrs({\n\tclassName: 'bik-body-grid-row',\n})<{ clickable?: boolean }>`\n\tdisplay: grid;\n\tgrid-template-columns: ${TABLE_GRID_COLUMNS};\n\talign-items: center;\n\tmin-height: 72px;\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n\tcursor: ${(p) => (p.clickable ? 'pointer' : 'default')};\n\n\t&:hover {\n\t\tbackground: ${(p) =>\n\t\t\tp.clickable ? COLORS.surface.subdued : 'transparent'};\n\t}\n`;\n\nexport const Cell = styled.div.attrs({ className: 'bik-cell' })<{\n\talign?: 'left' | 'right' | 'center';\n}>`\n\tpadding: 8px 12px;\n\tmin-width: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px;\n\tjustify-content: center;\n\talign-items: ${(p) =>\n\t\tp.align === 'right'\n\t\t\t? 'flex-end'\n\t\t\t: p.align === 'center'\n\t\t\t? 'center'\n\t\t\t: 'flex-start'};\n`;\n\n/** Bordered icon-button group used in the Actions cell. */\nexport const ActionGroup = styled.div.attrs({ className: 'bik-action-group' })`\n\tdisplay: inline-flex;\n\talign-items: center;\n\tborder: 1px solid ${COLORS.stroke.primary};\n\tborder-radius: 4px;\n\toverflow: hidden;\n`;\n\nexport const ActionButton = styled.button.attrs({\n\tclassName: 'bik-action-button',\n})<{ disabled?: boolean }>`\n\twidth: 32px;\n\theight: 32px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tbackground: ${COLORS.surface.standard};\n\tborder: none;\n\tpadding: 0;\n\tcursor: ${(p) => (p.disabled ? 'not-allowed' : 'pointer')};\n\topacity: ${(p) => (p.disabled ? 0.4 : 1)};\n\n\t&:not(:last-child) {\n\t\tborder-right: 1px solid ${COLORS.stroke.primary};\n\t}\n\n\t&:hover {\n\t\tbackground: ${(p) =>\n\t\t\tp.disabled ? COLORS.surface.standard : COLORS.surface.subdued};\n\t}\n`;\n\nexport const EmptyHolder = styled.div.attrs({ className: 'bik-empty-holder' })`\n\tflex: 1;\n\tdisplay: flex;\n\tmin-height: 0;\n`;\n"],"names":["TABLE_GRID_COLUMNS","Page","styled","COLORS","HeaderBar","HeaderActions","FilterRow","FilterRowLeft","Body","TableCard","TableScroll","HeaderGridRow","HeaderCell","p","BodyGridRow","Cell","ActionGroup","ActionButton","EmptyHolder"],"mappings":"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"}
1
+ {"version":3,"file":"AgentListing.styled.js","sources":["../../../../src/components/agent-listing/AgentListing.styled.tsx"],"sourcesContent":["import styled from 'styled-components';\nimport { COLORS } from '@src/constants/Theme';\n\n/** Shared column template for header + body rows so they always align. */\nexport const TABLE_GRID_COLUMNS =\n\t'minmax(240px, 1.4fr) minmax(200px, 1.2fr) 140px 160px 120px';\n\nexport const Page = styled.div.attrs({ className: 'bik-agent-listing-page' })`\n\tdisplay: flex;\n\tflex-direction: column;\n\theight: 100%;\n\twidth: 100%;\n\tbackground: ${COLORS.surface.standard};\n\tmin-height: 0;\n`;\n\nexport const HeaderBar = styled.div.attrs({ className: 'bik-header-bar' })`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 12px 16px;\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n\tflex-shrink: 0;\n`;\n\nexport const HeaderActions = styled.div.attrs({\n\tclassName: 'bik-header-actions',\n})`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n`;\n\nexport const FilterRow = styled.div.attrs({ className: 'bik-filter-row' })`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tgap: 12px;\n\tpadding: 16px;\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n\tflex-shrink: 0;\n`;\n\nexport const FilterRowLeft = styled.div.attrs({\n\tclassName: 'bik-filter-row-left',\n})`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 12px;\n`;\n\nexport const Body = styled.div.attrs({ className: 'bik-body' })`\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex: 1;\n\tmin-height: 0;\n\tpadding: 16px;\n\tgap: 8px;\n`;\n\nexport const TableCard = styled.div.attrs({ className: 'bik-table-card' })`\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex: 1;\n\tmin-height: 0;\n\tborder: 1px solid ${COLORS.stroke.primary};\n\tborder-radius: 8px;\n\toverflow: hidden;\n`;\n\nexport const TableScroll = styled.div.attrs({ className: 'bik-table-scroll' })`\n\tflex: 1;\n\tmin-height: 0;\n\toverflow: auto;\n`;\n\nexport const HeaderGridRow = styled.div.attrs({\n\tclassName: 'bik-header-grid-row',\n})`\n\tdisplay: grid;\n\tgrid-template-columns: ${TABLE_GRID_COLUMNS};\n\talign-items: center;\n\theight: 40px;\n\tbackground: ${COLORS.surface.subdued};\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n\tposition: sticky;\n\ttop: 0;\n\tz-index: 1;\n`;\n\nexport const HeaderCell = styled.div.attrs({ className: 'bik-header-cell' })<{\n\talign?: 'left' | 'right' | 'center';\n}>`\n\tpadding: 8px 12px;\n\ttext-align: ${(p) => p.align ?? 'left'};\n\tdisplay: flex;\n\tjustify-content: ${(p) =>\n\t\tp.align === 'right'\n\t\t\t? 'flex-end'\n\t\t\t: p.align === 'center'\n\t\t\t? 'center'\n\t\t\t: 'flex-start'};\n`;\n\nexport const BodyGridRow = styled.div.attrs({\n\tclassName: 'bik-body-grid-row',\n})<{ clickable?: boolean }>`\n\tdisplay: grid;\n\tgrid-template-columns: ${TABLE_GRID_COLUMNS};\n\talign-items: center;\n\tmin-height: 72px;\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n\tcursor: ${(p) => (p.clickable ? 'pointer' : 'default')};\n\n\t&:hover {\n\t\tbackground: ${(p) =>\n\t\t\tp.clickable ? COLORS.surface.subdued : 'transparent'};\n\t}\n`;\n\nexport const Cell = styled.div.attrs({ className: 'bik-cell' })<{\n\talign?: 'left' | 'right' | 'center';\n}>`\n\tpadding: 8px 12px;\n\tmin-width: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px;\n\tjustify-content: center;\n\talign-items: ${(p) =>\n\t\tp.align === 'right'\n\t\t\t? 'flex-end'\n\t\t\t: p.align === 'center'\n\t\t\t? 'center'\n\t\t\t: 'flex-start'};\n`;\n\n/** Bordered icon-button group used in the Actions cell. */\nexport const ActionGroup = styled.div.attrs({ className: 'bik-action-group' })`\n\tdisplay: inline-flex;\n\talign-items: center;\n\tborder: 1px solid ${COLORS.stroke.primary};\n\tborder-radius: 4px;\n\toverflow: hidden;\n\n\t/* Divider between actions. Owned here (not on ActionButton's own\n\t :not(:last-child)) because the run action may be wrapped in a Tooltip\n\t trigger <span> when disabled — then the button is no longer ActionGroup's\n\t direct child, so a button-level rule would drop its border. Any empty\n\t <style> sibling a Tooltip renders is display:none, so it draws nothing. */\n\t& > *:not(:last-child) {\n\t\tborder-right: 1px solid ${COLORS.stroke.primary};\n\t}\n`;\n\nexport const ActionButton = styled.button.attrs({\n\tclassName: 'bik-action-button',\n})<{ disabled?: boolean }>`\n\twidth: 32px;\n\theight: 32px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tbackground: ${COLORS.surface.standard};\n\tborder: none;\n\tpadding: 0;\n\tcursor: ${(p) => (p.disabled ? 'not-allowed' : 'pointer')};\n\topacity: ${(p) => (p.disabled ? 0.4 : 1)};\n\n\t&:hover {\n\t\tbackground: ${(p) =>\n\t\t\tp.disabled ? COLORS.surface.standard : COLORS.surface.subdued};\n\t}\n`;\n\nexport const EmptyHolder = styled.div.attrs({ className: 'bik-empty-holder' })`\n\tflex: 1;\n\tdisplay: flex;\n\tmin-height: 0;\n`;\n"],"names":["TABLE_GRID_COLUMNS","Page","styled","COLORS","HeaderBar","HeaderActions","FilterRow","FilterRowLeft","Body","TableCard","TableScroll","HeaderGridRow","HeaderCell","p","BodyGridRow","Cell","ActionGroup","ActionButton","EmptyHolder"],"mappings":"0NAIaA,EACZ,8DAEYC,EAAOC,EAAAA,QAAO,IAAI,MAAM,CAAE,UAAW,yBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA,eAK7DC,EAAAA,OAAO,QAAQ,QAAQ;AAAA;AAAA,EAIzBC,EAAYF,EAAAA,QAAO,IAAI,MAAM,CAAE,UAAW,iBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,4BAK7CC,EAAAA,OAAO,OAAO,OAAO;AAAA;AAAA,EAIpCE,EAAgBH,EAAAA,QAAO,IAAI,MAAM,CAC7C,UAAW,oBACZ,CAAC;AAAA;AAAA;AAAA;AAAA,EAMYI,EAAYJ,EAAAA,QAAO,IAAI,MAAM,CAAE,UAAW,iBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAM7CC,EAAAA,OAAO,OAAO,OAAO;AAAA;AAAA,EAIpCI,EAAgBL,EAAAA,QAAO,IAAI,MAAM,CAC7C,UAAW,qBACZ,CAAC;AAAA;AAAA;AAAA;AAAA,EAMYM,EAAON,EAAAA,QAAO,IAAI,MAAM,CAAE,UAAW,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASjDO,EAAYP,EAAAA,QAAO,IAAI,MAAM,CAAE,UAAW,iBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,qBAKpDC,EAAAA,OAAO,OAAO,OAAO;AAAA;AAAA;AAAA,EAK7BO,EAAcR,EAAAA,QAAO,IAAI,MAAM,CAAE,UAAW,mBAAoB;AAAA;AAAA;AAAA;AAAA,EAMhES,EAAgBT,EAAAA,QAAO,IAAI,MAAM,CAC7C,UAAW,qBACZ,CAAC;AAAA;AAAA,0BAEyBF,CAAkB;AAAA;AAAA;AAAA,eAG7BG,EAAAA,OAAO,QAAQ,OAAO;AAAA,4BACTA,EAAAA,OAAO,OAAO,OAAO;AAAA;AAAA;AAAA;AAAA,EAMpCS,EAAaV,EAAAA,QAAO,IAAI,MAAM,CAAE,UAAW,kBAAmB;AAAA;AAAA,eAI3DW,GAAMA,EAAE,OAAS,MAAM;AAAA;AAAA,oBAElBA,GACnBA,EAAE,QAAU,QACT,WACAA,EAAE,QAAU,SACZ,SACA,YAAY;AAAA,EAGJC,EAAcZ,EAAAA,QAAO,IAAI,MAAM,CAC3C,UAAW,mBACZ,CAAC;AAAA;AAAA,0BAEyBF,CAAkB;AAAA;AAAA;AAAA,4BAGhBG,EAAAA,OAAO,OAAO,OAAO;AAAA,WACrCU,GAAOA,EAAE,UAAY,UAAY,SAAU;AAAA;AAAA;AAAA,gBAGtCA,GACdA,EAAE,UAAYV,EAAAA,OAAO,QAAQ,QAAU,aAAa;AAAA;AAAA,EAI1CY,EAAOb,EAAAA,QAAO,IAAI,MAAM,CAAE,UAAW,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAS7CW,GACfA,EAAE,QAAU,QACT,WACAA,EAAE,QAAU,SACZ,SACA,YAAY;AAAA,EAIJG,EAAcd,EAAAA,QAAO,IAAI,MAAM,CAAE,UAAW,mBAAoB;AAAA;AAAA;AAAA,qBAGxDC,EAAAA,OAAO,OAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAUdA,EAAAA,OAAO,OAAO,OAAO;AAAA;AAAA,EAIpCc,EAAef,EAAAA,QAAO,OAAO,MAAM,CAC/C,UAAW,mBACZ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAMcC,EAAAA,OAAO,QAAQ,QAAQ;AAAA;AAAA;AAAA,WAG1BU,GAAOA,EAAE,SAAW,cAAgB,SAAU;AAAA,YAC7CA,GAAOA,EAAE,SAAW,GAAM,CAAE;AAAA;AAAA;AAAA,gBAGxBA,GACdA,EAAE,SAAWV,EAAAA,OAAO,QAAQ,SAAWA,EAAAA,OAAO,QAAQ,OAAO;AAAA;AAAA,EAInDe,EAAchB,EAAAA,QAAO,IAAI,MAAM,CAAE,UAAW,mBAAoB;AAAA;AAAA;AAAA;AAAA"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("../../assets/icons/plus.svg.js"),a=require("../TypographyStyle.js"),u=require("../../constants/Theme.js"),n=require("./AgentListing.styled.js"),r=require("../button/Button.js"),c=({title:s,onNewAgent:i,onBrowseTemplates:t})=>e.jsxs(n.HeaderBar,{children:[e.jsx(a.TitleMedium,{color:u.COLORS.content.primary,children:s}),e.jsxs(n.HeaderActions,{children:[t&&e.jsx(r.Button,{"data-test":"agent-browse-templates",buttonType:"secondary",size:"small",buttonText:"Browse templates",onClick:t}),e.jsx(r.Button,{"data-test":"agent-new",buttonType:"primary",size:"small",buttonText:"New AI agent",LeadingIcon:o.default,onClick:i})]})]});exports.AgentListingHeader=c;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("../../assets/icons/plus.svg.js"),u=require("../TypographyStyle.js"),c=require("../../constants/Theme.js"),n=require("./AgentListing.styled.js"),r=require("../button/Button.js"),l=({title:s,onNewAgent:i,onBrowseTemplates:t,headerActions:o})=>e.jsxs(n.HeaderBar,{children:[e.jsx(u.TitleMedium,{color:c.COLORS.content.primary,children:s}),e.jsxs(n.HeaderActions,{children:[t&&e.jsx(r.Button,{"data-test":"agent-browse-templates",buttonType:"secondary",size:"small",buttonText:"Browse templates",onClick:t}),e.jsx(r.Button,{"data-test":"agent-new",buttonType:"primary",size:"small",buttonText:"New AI agent",LeadingIcon:a.default,onClick:i}),o]})]});exports.AgentListingHeader=l;
2
2
  //# sourceMappingURL=AgentListingHeader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentListingHeader.js","sources":["../../../../src/components/agent-listing/AgentListingHeader.tsx"],"sourcesContent":["import PlusIcon from '@src/assets/icons/plus.svg';\nimport React from 'react';\nimport { Button } from '@src/components/button';\nimport { TitleMedium } from '@src/components/TypographyStyle';\nimport { COLORS } from '@src/constants/Theme';\nimport { HeaderActions, HeaderBar } from './AgentListing.styled';\n\ninterface AgentListingHeaderProps {\n\ttitle: string;\n\tonNewAgent: () => void;\n\tonBrowseTemplates?: () => void;\n}\n\nexport const AgentListingHeader: React.FC<AgentListingHeaderProps> = ({\n\ttitle,\n\tonNewAgent,\n\tonBrowseTemplates,\n}) => (\n\t<HeaderBar>\n\t\t<TitleMedium color={COLORS.content.primary}>{title}</TitleMedium>\n\t\t<HeaderActions>\n\t\t\t{onBrowseTemplates && (\n\t\t\t\t<Button\n\t\t\t\t\tdata-test=\"agent-browse-templates\"\n\t\t\t\t\tbuttonType=\"secondary\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tbuttonText=\"Browse templates\"\n\t\t\t\t\tonClick={onBrowseTemplates}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<Button\n\t\t\t\tdata-test=\"agent-new\"\n\t\t\t\tbuttonType=\"primary\"\n\t\t\t\tsize=\"small\"\n\t\t\t\tbuttonText=\"New AI agent\"\n\t\t\t\tLeadingIcon={PlusIcon}\n\t\t\t\tonClick={onNewAgent}\n\t\t\t/>\n\t\t</HeaderActions>\n\t</HeaderBar>\n);\n"],"names":["AgentListingHeader","title","onNewAgent","onBrowseTemplates","HeaderBar","jsx","TitleMedium","COLORS","HeaderActions","Button","PlusIcon"],"mappings":"iTAaaA,EAAwD,CAAC,CACrE,MAAAC,EACA,WAAAC,EACA,kBAAAC,CACD,WACEC,YAAA,CACA,SAAA,CAAAC,MAACC,EAAAA,YAAA,CAAY,MAAOC,EAAAA,OAAO,QAAQ,QAAU,SAAAN,EAAM,SAClDO,EAAAA,cAAA,CACC,SAAA,CAAAL,GACAE,EAAAA,IAACI,EAAAA,OAAA,CACA,YAAU,yBACV,WAAW,YACX,KAAK,QACL,WAAW,mBACX,QAASN,CAAA,CAAA,EAGXE,EAAAA,IAACI,EAAAA,OAAA,CACA,YAAU,YACV,WAAW,UACX,KAAK,QACL,WAAW,eACX,YAAaC,EAAAA,QACb,QAASR,CAAA,CAAA,CACV,CAAA,CACD,CAAA,CAAA,CACD"}
1
+ {"version":3,"file":"AgentListingHeader.js","sources":["../../../../src/components/agent-listing/AgentListingHeader.tsx"],"sourcesContent":["import PlusIcon from '@src/assets/icons/plus.svg';\nimport React from 'react';\nimport { Button } from '@src/components/button';\nimport { TitleMedium } from '@src/components/TypographyStyle';\nimport { COLORS } from '@src/constants/Theme';\nimport { HeaderActions, HeaderBar } from './AgentListing.styled';\n\ninterface AgentListingHeaderProps {\n\ttitle: string;\n\tonNewAgent: () => void;\n\tonBrowseTemplates?: () => void;\n\t/** Consumer node rendered after the \"New AI agent\" button (e.g. broadcast + avatar). */\n\theaderActions?: React.ReactNode;\n}\n\nexport const AgentListingHeader: React.FC<AgentListingHeaderProps> = ({\n\ttitle,\n\tonNewAgent,\n\tonBrowseTemplates,\n\theaderActions,\n}) => (\n\t<HeaderBar>\n\t\t<TitleMedium color={COLORS.content.primary}>{title}</TitleMedium>\n\t\t<HeaderActions>\n\t\t\t{onBrowseTemplates && (\n\t\t\t\t<Button\n\t\t\t\t\tdata-test=\"agent-browse-templates\"\n\t\t\t\t\tbuttonType=\"secondary\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tbuttonText=\"Browse templates\"\n\t\t\t\t\tonClick={onBrowseTemplates}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<Button\n\t\t\t\tdata-test=\"agent-new\"\n\t\t\t\tbuttonType=\"primary\"\n\t\t\t\tsize=\"small\"\n\t\t\t\tbuttonText=\"New AI agent\"\n\t\t\t\tLeadingIcon={PlusIcon}\n\t\t\t\tonClick={onNewAgent}\n\t\t\t/>\n\t\t\t{headerActions}\n\t\t</HeaderActions>\n\t</HeaderBar>\n);\n"],"names":["AgentListingHeader","title","onNewAgent","onBrowseTemplates","headerActions","HeaderBar","jsx","TitleMedium","COLORS","HeaderActions","Button","PlusIcon"],"mappings":"iTAeaA,EAAwD,CAAC,CACrE,MAAAC,EACA,WAAAC,EACA,kBAAAC,EACA,cAAAC,CACD,WACEC,YAAA,CACA,SAAA,CAAAC,MAACC,EAAAA,YAAA,CAAY,MAAOC,EAAAA,OAAO,QAAQ,QAAU,SAAAP,EAAM,SAClDQ,EAAAA,cAAA,CACC,SAAA,CAAAN,GACAG,EAAAA,IAACI,EAAAA,OAAA,CACA,YAAU,yBACV,WAAW,YACX,KAAK,QACL,WAAW,mBACX,QAASP,CAAA,CAAA,EAGXG,EAAAA,IAACI,EAAAA,OAAA,CACA,YAAU,YACV,WAAW,UACX,KAAK,QACL,WAAW,eACX,YAAaC,EAAAA,QACb,QAAST,CAAA,CAAA,EAETE,CAAA,CAAA,CACF,CAAA,CAAA,CACD"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),x=require("../../assets/icons/delete.svg.js"),j=require("../../assets/icons/edit.svg.js"),b=require("../../assets/icons/playOutline.svg.js"),o=require("../TypographyStyle.js"),r=require("../../constants/Theme.js"),i=require("./AgentListing.styled.js"),O=require("../tag/Tag.js"),C=require("../tooltips/Tooltip.js"),m=e=>{switch(e.kind){case"topic":return`Topic: ${e.label??""}`;case"phrases":return`Phrases: ${(e.items??[]).join(", ")}`;default:return e.label??""}},T=({agent:e,onRunAgent:d,onEditAgent:u,onDeleteAgent:s,onRowClick:l})=>{const a=e.status==="live",h=n=>{n.stopPropagation(),!e.isRunDisabled&&d(e)},p=n=>{n.stopPropagation(),u(e)},y=n=>{n.stopPropagation(),s?.(e)},c=t.jsx(i.ActionButton,{"data-test":`agent-row-run-${e.id}`,disabled:e.isRunDisabled,onClick:h,"aria-label":"Run agent",children:t.jsx(b.default,{width:20,height:20,color:r.COLORS.content.secondary})});return t.jsxs(i.BodyGridRow,{"data-test":`agent-row-${e.id}`,clickable:!!l,onClick:l?()=>l(e):void 0,children:[t.jsxs(i.Cell,{children:[t.jsx(o.TitleSmall,{numberOfLines:1,color:r.COLORS.content.primary,children:e.name}),t.jsxs(o.BodyCaption,{numberOfLines:1,color:r.COLORS.content.secondary,children:["Created: ",e.createdAtLabel]})]}),t.jsx(i.Cell,{children:t.jsx(o.BodyPrimary,{numberOfLines:2,color:r.COLORS.content.primary,children:m(e.trigger)})}),t.jsx(i.Cell,{align:"right",children:t.jsx(o.BodyPrimary,{color:r.COLORS.content.primary,children:e.triggerCount})}),t.jsx(i.Cell,{children:t.jsx(O.Tag,{tagText:a?"Live":"Draft",type:a?"positive":"neutral",variant:"regular"})}),t.jsx(i.Cell,{align:"center",children:t.jsxs(i.ActionGroup,{children:[e.isRunDisabled&&e.runDisabledTooltip?t.jsx(C.Tooltip,{body:e.runDisabledTooltip,placement:"top",children:t.jsx("span",{style:{display:"flex"},children:c})}):c,t.jsx(i.ActionButton,{"data-test":`agent-row-edit-${e.id}`,onClick:p,"aria-label":"Edit agent",children:t.jsx(j.default,{width:20,height:20,color:r.COLORS.content.secondary})}),s&&t.jsx(i.ActionButton,{"data-test":`agent-row-delete-${e.id}`,onClick:y,"aria-label":"Delete agent",children:t.jsx(x.default,{width:20,height:20,color:r.COLORS.content.secondary})})]})})]})};exports.AgentTableRow=T;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),y=require("../../assets/icons/delete.svg.js"),j=require("../../assets/icons/edit.svg.js"),m=require("../../assets/icons/playOutline.svg.js"),b=require("../../assets/icons/vertical_dots.svg.js"),O=require("../dropdown/DropdownPopover/index.js"),r=require("../TypographyStyle.js"),i=require("../../constants/Theme.js"),n=require("./AgentListing.styled.js"),C=require("../tag/Tag.js"),f=require("../tooltips/Tooltip.js"),L=require("../dropdown/utils.js"),R=e=>{switch(e.kind){case"topic":return`Topic: ${e.label??""}`;case"phrases":return`Phrases: ${(e.items??[]).join(", ")}`;default:return e.label??""}},S=({agent:e,onRunAgent:d,onEditAgent:u,onDeleteAgent:s,onRowClick:l})=>{const c=e.status==="live",p=o=>{o.stopPropagation(),!e.isRunDisabled&&d(e)},h=[{label:"Edit",value:"edit",leadingIcon:t.jsx(j.default,{width:16,height:16,color:i.COLORS.content.secondary})},...s?[{label:"Delete",value:"delete",customComponent:t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,color:i.COLORS.content.negative,fontFamily:"Inter",fontSize:14},children:[t.jsx(y.default,{width:16,height:16,color:i.COLORS.content.negative}),"Delete"]})}]:[]],x=o=>{o==="edit"?u(e):o==="delete"&&s?.(e)},a=t.jsx(n.ActionButton,{"data-test":`agent-row-run-${e.id}`,disabled:e.isRunDisabled,onClick:p,"aria-label":"Run agent",children:t.jsx(m.default,{width:20,height:20,color:i.COLORS.content.secondary})});return t.jsxs(n.BodyGridRow,{"data-test":`agent-row-${e.id}`,clickable:!!l,onClick:l?()=>l(e):void 0,children:[t.jsxs(n.Cell,{children:[t.jsx(r.TitleSmall,{numberOfLines:1,color:i.COLORS.content.primary,children:e.name}),t.jsxs(r.BodyCaption,{numberOfLines:1,color:i.COLORS.content.secondary,children:["Created: ",e.createdAtLabel]})]}),t.jsx(n.Cell,{children:t.jsx(r.BodyPrimary,{numberOfLines:2,color:i.COLORS.content.primary,children:R(e.trigger)})}),t.jsx(n.Cell,{align:"right",children:t.jsx(r.BodyPrimary,{color:i.COLORS.content.primary,children:e.triggerCount})}),t.jsx(n.Cell,{children:t.jsx(C.Tag,{tagText:c?"Live":"Draft",type:c?"positive":"neutral",variant:"regular"})}),t.jsx(n.Cell,{align:"center",children:t.jsxs(n.ActionGroup,{children:[e.isRunDisabled&&e.runDisabledTooltip?t.jsx(f.Tooltip,{body:e.runDisabledTooltip,placement:"top",children:t.jsx("span",{style:{display:"flex"},children:a})}):a,t.jsx("span",{style:{display:"flex"},onClick:o=>o.stopPropagation(),children:t.jsx(O.DropdownPopover,{"data-test":`agent-row-menu-${e.id}`,options:h,placement:"bottom-end",width:"160px",onSelect:o=>x(L.unwrapDropdownValue(o)),children:t.jsx(n.ActionButton,{"data-test":`agent-row-menu-button-${e.id}`,"aria-label":"More actions",children:t.jsx(b.default,{width:20,height:20,color:i.COLORS.content.secondary})})})})]})})]})};exports.AgentTableRow=S;
2
2
  //# sourceMappingURL=AgentTableRow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentTableRow.js","sources":["../../../../src/components/agent-listing/AgentTableRow.tsx"],"sourcesContent":["import DeleteIcon from '@src/assets/icons/delete.svg';\nimport EditIcon from '@src/assets/icons/edit.svg';\nimport PlayOutlineIcon from '@src/assets/icons/playOutline.svg';\nimport React from 'react';\nimport { Tag } from '@src/components/tag';\nimport { Tooltip } from '@src/components/tooltips';\nimport {\n\tBodyCaption,\n\tBodyPrimary,\n\tTitleSmall,\n} from '@src/components/TypographyStyle';\nimport { COLORS } from '@src/constants/Theme';\nimport { AgentListItem, AgentTriggerSummary } from './AgentListing.model';\nimport {\n\tActionButton,\n\tActionGroup,\n\tBodyGridRow,\n\tCell,\n} from './AgentListing.styled';\n\nconst triggerToText = (trigger: AgentTriggerSummary): string => {\n\tswitch (trigger.kind) {\n\t\tcase 'topic':\n\t\t\treturn `Topic: ${trigger.label ?? ''}`;\n\t\tcase 'phrases':\n\t\t\treturn `Phrases: ${(trigger.items ?? []).join(', ')}`;\n\t\tcase 'custom':\n\t\tdefault:\n\t\t\treturn trigger.label ?? '';\n\t}\n};\n\ninterface AgentTableRowProps {\n\tagent: AgentListItem;\n\tonRunAgent: (agent: AgentListItem) => void;\n\tonEditAgent: (agent: AgentListItem) => void;\n\t/** When set, render a delete action (the listing handles confirmation). */\n\tonDeleteAgent?: (agent: AgentListItem) => void;\n\tonRowClick?: (agent: AgentListItem) => void;\n}\n\nexport const AgentTableRow: React.FC<AgentTableRowProps> = ({\n\tagent,\n\tonRunAgent,\n\tonEditAgent,\n\tonDeleteAgent,\n\tonRowClick,\n}) => {\n\tconst isLive = agent.status === 'live';\n\n\tconst handleRun = (e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tif (agent.isRunDisabled) {\n\t\t\treturn;\n\t\t}\n\t\tonRunAgent(agent);\n\t};\n\n\tconst handleEdit = (e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tonEditAgent(agent);\n\t};\n\n\tconst handleDelete = (e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tonDeleteAgent?.(agent);\n\t};\n\n\tconst playButton = (\n\t\t<ActionButton\n\t\t\tdata-test={`agent-row-run-${agent.id}`}\n\t\t\tdisabled={agent.isRunDisabled}\n\t\t\tonClick={handleRun}\n\t\t\taria-label=\"Run agent\"\n\t\t>\n\t\t\t<PlayOutlineIcon\n\t\t\t\twidth={20}\n\t\t\t\theight={20}\n\t\t\t\tcolor={COLORS.content.secondary}\n\t\t\t/>\n\t\t</ActionButton>\n\t);\n\n\treturn (\n\t\t<BodyGridRow\n\t\t\tdata-test={`agent-row-${agent.id}`}\n\t\t\tclickable={!!onRowClick}\n\t\t\tonClick={onRowClick ? () => onRowClick(agent) : undefined}\n\t\t>\n\t\t\t<Cell>\n\t\t\t\t<TitleSmall numberOfLines={1} color={COLORS.content.primary}>\n\t\t\t\t\t{agent.name}\n\t\t\t\t</TitleSmall>\n\t\t\t\t<BodyCaption numberOfLines={1} color={COLORS.content.secondary}>\n\t\t\t\t\tCreated: {agent.createdAtLabel}\n\t\t\t\t</BodyCaption>\n\t\t\t</Cell>\n\n\t\t\t<Cell>\n\t\t\t\t<BodyPrimary numberOfLines={2} color={COLORS.content.primary}>\n\t\t\t\t\t{triggerToText(agent.trigger)}\n\t\t\t\t</BodyPrimary>\n\t\t\t</Cell>\n\n\t\t\t<Cell align=\"right\">\n\t\t\t\t<BodyPrimary color={COLORS.content.primary}>\n\t\t\t\t\t{agent.triggerCount}\n\t\t\t\t</BodyPrimary>\n\t\t\t</Cell>\n\n\t\t\t<Cell>\n\t\t\t\t<Tag\n\t\t\t\t\ttagText={isLive ? 'Live' : 'Draft'}\n\t\t\t\t\ttype={isLive ? 'positive' : 'neutral'}\n\t\t\t\t\tvariant=\"regular\"\n\t\t\t\t/>\n\t\t\t</Cell>\n\n\t\t\t<Cell align=\"center\">\n\t\t\t\t<ActionGroup>\n\t\t\t\t\t{agent.isRunDisabled && agent.runDisabledTooltip ? (\n\t\t\t\t\t\t<Tooltip body={agent.runDisabledTooltip} placement=\"top\">\n\t\t\t\t\t\t\t<span style={{ display: 'flex' }}>{playButton}</span>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t) : (\n\t\t\t\t\t\tplayButton\n\t\t\t\t\t)}\n\t\t\t\t\t<ActionButton\n\t\t\t\t\t\tdata-test={`agent-row-edit-${agent.id}`}\n\t\t\t\t\t\tonClick={handleEdit}\n\t\t\t\t\t\taria-label=\"Edit agent\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<EditIcon width={20} height={20} color={COLORS.content.secondary} />\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t{onDeleteAgent && (\n\t\t\t\t\t\t<ActionButton\n\t\t\t\t\t\t\tdata-test={`agent-row-delete-${agent.id}`}\n\t\t\t\t\t\t\tonClick={handleDelete}\n\t\t\t\t\t\t\taria-label=\"Delete agent\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DeleteIcon\n\t\t\t\t\t\t\t\twidth={20}\n\t\t\t\t\t\t\t\theight={20}\n\t\t\t\t\t\t\t\tcolor={COLORS.content.secondary}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ActionButton>\n\t\t\t\t\t)}\n\t\t\t\t</ActionGroup>\n\t\t\t</Cell>\n\t\t</BodyGridRow>\n\t);\n};\n"],"names":["triggerToText","trigger","AgentTableRow","agent","onRunAgent","onEditAgent","onDeleteAgent","onRowClick","isLive","handleRun","e","handleEdit","handleDelete","playButton","jsx","ActionButton","PlayOutlineIcon","COLORS","jsxs","BodyGridRow","Cell","TitleSmall","BodyCaption","BodyPrimary","Tag","ActionGroup","Tooltip","EditIcon","DeleteIcon"],"mappings":"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"}
1
+ {"version":3,"file":"AgentTableRow.js","sources":["../../../../src/components/agent-listing/AgentTableRow.tsx"],"sourcesContent":["import DeleteIcon from '@src/assets/icons/delete.svg';\nimport EditIcon from '@src/assets/icons/edit.svg';\nimport PlayOutlineIcon from '@src/assets/icons/playOutline.svg';\nimport MoreIcon from '@src/assets/icons/vertical_dots.svg';\nimport React from 'react';\nimport { unwrapDropdownValue } from '@src/components/dropdown';\nimport { DropdownPopover } from '@src/components/dropdown/DropdownPopover';\nimport { SingleOption } from '@src/components/dropdown/type';\nimport { Tag } from '@src/components/tag';\nimport { Tooltip } from '@src/components/tooltips';\nimport {\n\tBodyCaption,\n\tBodyPrimary,\n\tTitleSmall,\n} from '@src/components/TypographyStyle';\nimport { COLORS } from '@src/constants/Theme';\nimport { AgentListItem, AgentTriggerSummary } from './AgentListing.model';\nimport {\n\tActionButton,\n\tActionGroup,\n\tBodyGridRow,\n\tCell,\n} from './AgentListing.styled';\n\nconst triggerToText = (trigger: AgentTriggerSummary): string => {\n\tswitch (trigger.kind) {\n\t\tcase 'topic':\n\t\t\treturn `Topic: ${trigger.label ?? ''}`;\n\t\tcase 'phrases':\n\t\t\treturn `Phrases: ${(trigger.items ?? []).join(', ')}`;\n\t\tcase 'custom':\n\t\tdefault:\n\t\t\treturn trigger.label ?? '';\n\t}\n};\n\ninterface AgentTableRowProps {\n\tagent: AgentListItem;\n\tonRunAgent: (agent: AgentListItem) => void;\n\tonEditAgent: (agent: AgentListItem) => void;\n\t/** When set, render a delete action (the listing handles confirmation). */\n\tonDeleteAgent?: (agent: AgentListItem) => void;\n\tonRowClick?: (agent: AgentListItem) => void;\n}\n\nexport const AgentTableRow: React.FC<AgentTableRowProps> = ({\n\tagent,\n\tonRunAgent,\n\tonEditAgent,\n\tonDeleteAgent,\n\tonRowClick,\n}) => {\n\tconst isLive = agent.status === 'live';\n\n\tconst handleRun = (e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tif (agent.isRunDisabled) {\n\t\t\treturn;\n\t\t}\n\t\tonRunAgent(agent);\n\t};\n\n\t// Edit + Delete live in the \"⋮\" menu beside the run button.\n\tconst menuOptions: SingleOption[] = [\n\t\t{\n\t\t\tlabel: 'Edit',\n\t\t\tvalue: 'edit',\n\t\t\tleadingIcon: (\n\t\t\t\t<EditIcon width={16} height={16} color={COLORS.content.secondary} />\n\t\t\t),\n\t\t},\n\t\t...(onDeleteAgent\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Delete',\n\t\t\t\t\t\tvalue: 'delete',\n\t\t\t\t\t\t// Rendered red (icon + label) via customComponent.\n\t\t\t\t\t\tcustomComponent: (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\tgap: 8,\n\t\t\t\t\t\t\t\t\tcolor: COLORS.content.negative,\n\t\t\t\t\t\t\t\t\tfontFamily: 'Inter',\n\t\t\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<DeleteIcon\n\t\t\t\t\t\t\t\t\twidth={16}\n\t\t\t\t\t\t\t\t\theight={16}\n\t\t\t\t\t\t\t\t\tcolor={COLORS.content.negative}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tDelete\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t ]\n\t\t\t: []),\n\t];\n\n\tconst handleMenuSelect = (value: string | undefined) => {\n\t\tif (value === 'edit') {\n\t\t\tonEditAgent(agent);\n\t\t} else if (value === 'delete') {\n\t\t\tonDeleteAgent?.(agent);\n\t\t}\n\t};\n\n\tconst playButton = (\n\t\t<ActionButton\n\t\t\tdata-test={`agent-row-run-${agent.id}`}\n\t\t\tdisabled={agent.isRunDisabled}\n\t\t\tonClick={handleRun}\n\t\t\taria-label=\"Run agent\"\n\t\t>\n\t\t\t<PlayOutlineIcon\n\t\t\t\twidth={20}\n\t\t\t\theight={20}\n\t\t\t\tcolor={COLORS.content.secondary}\n\t\t\t/>\n\t\t</ActionButton>\n\t);\n\n\treturn (\n\t\t<BodyGridRow\n\t\t\tdata-test={`agent-row-${agent.id}`}\n\t\t\tclickable={!!onRowClick}\n\t\t\tonClick={onRowClick ? () => onRowClick(agent) : undefined}\n\t\t>\n\t\t\t<Cell>\n\t\t\t\t<TitleSmall numberOfLines={1} color={COLORS.content.primary}>\n\t\t\t\t\t{agent.name}\n\t\t\t\t</TitleSmall>\n\t\t\t\t<BodyCaption numberOfLines={1} color={COLORS.content.secondary}>\n\t\t\t\t\tCreated: {agent.createdAtLabel}\n\t\t\t\t</BodyCaption>\n\t\t\t</Cell>\n\n\t\t\t<Cell>\n\t\t\t\t<BodyPrimary numberOfLines={2} color={COLORS.content.primary}>\n\t\t\t\t\t{triggerToText(agent.trigger)}\n\t\t\t\t</BodyPrimary>\n\t\t\t</Cell>\n\n\t\t\t<Cell align=\"right\">\n\t\t\t\t<BodyPrimary color={COLORS.content.primary}>\n\t\t\t\t\t{agent.triggerCount}\n\t\t\t\t</BodyPrimary>\n\t\t\t</Cell>\n\n\t\t\t<Cell>\n\t\t\t\t<Tag\n\t\t\t\t\ttagText={isLive ? 'Live' : 'Draft'}\n\t\t\t\t\ttype={isLive ? 'positive' : 'neutral'}\n\t\t\t\t\tvariant=\"regular\"\n\t\t\t\t/>\n\t\t\t</Cell>\n\n\t\t\t<Cell align=\"center\">\n\t\t\t\t<ActionGroup>\n\t\t\t\t\t{agent.isRunDisabled && agent.runDisabledTooltip ? (\n\t\t\t\t\t\t<Tooltip body={agent.runDisabledTooltip} placement=\"top\">\n\t\t\t\t\t\t\t<span style={{ display: 'flex' }}>{playButton}</span>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t) : (\n\t\t\t\t\t\tplayButton\n\t\t\t\t\t)}\n\t\t\t\t\t{/* Stop the row's onClick from firing when interacting with the menu. */}\n\t\t\t\t\t<span\n\t\t\t\t\t\tstyle={{ display: 'flex' }}\n\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<DropdownPopover\n\t\t\t\t\t\t\tdata-test={`agent-row-menu-${agent.id}`}\n\t\t\t\t\t\t\toptions={menuOptions}\n\t\t\t\t\t\t\tplacement=\"bottom-end\"\n\t\t\t\t\t\t\twidth=\"160px\"\n\t\t\t\t\t\t\tonSelect={(opt) => handleMenuSelect(unwrapDropdownValue(opt))}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ActionButton\n\t\t\t\t\t\t\t\tdata-test={`agent-row-menu-button-${agent.id}`}\n\t\t\t\t\t\t\t\taria-label=\"More actions\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<MoreIcon\n\t\t\t\t\t\t\t\t\twidth={20}\n\t\t\t\t\t\t\t\t\theight={20}\n\t\t\t\t\t\t\t\t\tcolor={COLORS.content.secondary}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ActionButton>\n\t\t\t\t\t\t</DropdownPopover>\n\t\t\t\t\t</span>\n\t\t\t\t</ActionGroup>\n\t\t\t</Cell>\n\t\t</BodyGridRow>\n\t);\n};\n"],"names":["triggerToText","trigger","AgentTableRow","agent","onRunAgent","onEditAgent","onDeleteAgent","onRowClick","isLive","handleRun","e","menuOptions","jsx","EditIcon","COLORS","jsxs","DeleteIcon","handleMenuSelect","value","playButton","ActionButton","PlayOutlineIcon","BodyGridRow","Cell","TitleSmall","BodyCaption","BodyPrimary","Tag","ActionGroup","Tooltip","DropdownPopover","opt","unwrapDropdownValue","MoreIcon"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var I=(N=>(N.SEND_GRID="sendgrid",N.BEE="bee",N))(I||{}),e=(N=>(N.APPROVED="APPROVED",N.DISABLED="DISABLED",N.FLAGGED="FLAGGED",N.PENDING="PENDING",N.DRAFT="DRAFT",N.REJECTED="REJECTED",N.PENDING_DELETION="PENDING_DELETION",N.IN_REVIEW="IN REVIEW",N.PAUSED="PAUSED",N.ACTIVE="ACTIVE",N.LIBRARY="LIBRARY",N.ARCHIVED="ARCHIVED",N))(e||{}),r=(N=>(N.NONE="NONE",N.TEXT="TEXT",N.IMAGE="IMAGE",N.VIDEO="VIDEO",N.DOCUMENT="DOCUMENT",N))(r||{}),l=(N=>(N.NONE="NONE",N.CTA_BTN="CTA_BTN",N.QUICK_REPLY="QUICK_REPLY",N))(l||{});const D={value:"custom_link",label:"Custom URL",placeHolder:"custom placeholder"},R={label:"Custom URL (No tracking)",value:"static_link",placeHolder:"{{staticUrl}}"},t={label:"Unsubscribe URL",value:"{{unsubscribeUrl}}",placeHolder:"{{unsubscribeUrl}}"};exports.ACTIONS_TYPES=l;exports.CUSTOM_URL_NAME=D;exports.HEADER_TYPES=r;exports.STATIC_URL_CTA_OPTION=R;exports.TEMPLATE_EDITOR=I;exports.TEMPLATE_STATUS=e;exports.UNSUBSCRIBE_URL_OPTION=t;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var e=(N=>(N.SEND_GRID="sendgrid",N.BEE="bee",N))(e||{}),I=(N=>(N.APPROVED="APPROVED",N.DISABLED="DISABLED",N.FLAGGED="FLAGGED",N.PENDING="PENDING",N.DRAFT="DRAFT",N.REJECTED="REJECTED",N.PENDING_DELETION="PENDING_DELETION",N.IN_REVIEW="IN REVIEW",N.PAUSED="PAUSED",N.ACTIVE="ACTIVE",N.LIBRARY="LIBRARY",N))(I||{}),r=(N=>(N.NONE="NONE",N.TEXT="TEXT",N.IMAGE="IMAGE",N.VIDEO="VIDEO",N.DOCUMENT="DOCUMENT",N))(r||{}),l=(N=>(N.NONE="NONE",N.CTA_BTN="CTA_BTN",N.QUICK_REPLY="QUICK_REPLY",N))(l||{});const D={value:"custom_link",label:"Custom URL",placeHolder:"custom placeholder"},R={label:"Custom URL (No tracking)",value:"static_link",placeHolder:"{{staticUrl}}"},t={label:"Unsubscribe URL",value:"{{unsubscribeUrl}}",placeHolder:"{{unsubscribeUrl}}"};exports.ACTIONS_TYPES=l;exports.CUSTOM_URL_NAME=D;exports.HEADER_TYPES=r;exports.STATIC_URL_CTA_OPTION=R;exports.TEMPLATE_EDITOR=e;exports.TEMPLATE_STATUS=I;exports.UNSUBSCRIBE_URL_OPTION=t;
2
2
  //# sourceMappingURL=TemplateMeta.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateMeta.js","sources":["../../../../../src/components/template-preview/models/TemplateMeta.ts"],"sourcesContent":["import type { SingleOption } from '@src/components/dropdown/type';\n\nexport type CUSTOM_VARIABLE = {\n\tvariableName: string;\n\ttype: 'string' | 'link' | 'image' | 'button' | 'date_time';\n\tisEditableVariable: boolean;\n\tupdatedValue: string;\n\tindex?: number;\n\tvariableValue?: string;\n\tqueryParams?: { key: string; value: string }[];\n\tinitialValue?: string;\n};\n\nexport type QueryParamtype = { key: string; value: string };\n\nexport enum TEMPLATE_EDITOR {\n\tSEND_GRID = 'sendgrid',\n\tBEE = 'bee',\n}\n\nexport enum TEMPLATE_STATUS {\n\tAPPROVED = 'APPROVED',\n\tDISABLED = 'DISABLED',\n\tFLAGGED = 'FLAGGED',\n\tPENDING = 'PENDING',\n\tDRAFT = 'DRAFT',\n\tREJECTED = 'REJECTED',\n\tPENDING_DELETION = 'PENDING_DELETION',\n\tIN_REVIEW = 'IN REVIEW',\n\tPAUSED = 'PAUSED',\n\tACTIVE = 'ACTIVE',\n\tLIBRARY = 'LIBRARY',\n\tARCHIVED = 'ARCHIVED',\n}\n\nexport enum HEADER_TYPES {\n\tNONE = 'NONE',\n\tTEXT = 'TEXT',\n\tIMAGE = 'IMAGE',\n\tVIDEO = 'VIDEO',\n\tDOCUMENT = 'DOCUMENT',\n}\n\nexport enum ACTIONS_TYPES {\n\tNONE = 'NONE',\n\tCTA_BTN = 'CTA_BTN',\n\tQUICK_REPLY = 'QUICK_REPLY',\n}\n\nexport interface QUICK_REPLY_BUTTON {\n\ttext: string;\n\tflowId: string;\n\tflowName: string;\n}\n\nexport const CUSTOM_URL_NAME = {\n\tvalue: 'custom_link',\n\tlabel: 'Custom URL',\n\tplaceHolder: 'custom placeholder',\n};\n\nexport const STATIC_URL_CTA_OPTION = {\n\tlabel: 'Custom URL (No tracking)',\n\tvalue: 'static_link',\n\tplaceHolder: '{{staticUrl}}',\n};\n\nexport const UNSUBSCRIBE_URL_OPTION = {\n\tlabel: 'Unsubscribe URL',\n\tvalue: '{{unsubscribeUrl}}',\n\tplaceHolder: '{{unsubscribeUrl}}',\n};\n\nexport type GlobalPlaceholderType = {\n\tMARKETING: {\n\t\tcustomer: baseAPITemplateVariableType[];\n\t\tstoreDetails: baseAPITemplateVariableType[];\n\t\torderDetails: baseAPITemplateVariableType[];\n\t\tabandonedCart: baseAPITemplateVariableType[];\n\t};\n\tTRANSACTIONAL: {\n\t\tcustomer: baseAPITemplateVariableType[];\n\t\tstoreDetails: baseAPITemplateVariableType[];\n\t\torderDetails: baseAPITemplateVariableType[];\n\t\tabandonedCart: baseAPITemplateVariableType[];\n\t};\n};\n\nexport type baseAPITemplateVariableType = {\n\ttitle: string;\n\tdefault_value: string;\n\tplaceHolder: string;\n\ttype?: 'string' | 'url';\n};\n\nexport type globalNormalizedPlaceholdersType = {\n\tlabel: string;\n\toptions: SingleOption[];\n};\n\nexport interface ButtonPlaceHolderOptions {\n\tvalue: string;\n\tlabel: string;\n\tplaceHolder: string;\n}\n"],"names":["TEMPLATE_EDITOR","TEMPLATE_STATUS","HEADER_TYPES","ACTIONS_TYPES","CUSTOM_URL_NAME","STATIC_URL_CTA_OPTION","UNSUBSCRIBE_URL_OPTION"],"mappings":"gFAeO,IAAKA,GAAAA,IACXA,EAAA,UAAY,WACZA,EAAA,IAAM,MAFKA,IAAAA,GAAA,CAAA,CAAA,EAKAC,GAAAA,IACXA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,iBAAmB,mBACnBA,EAAA,UAAY,YACZA,EAAA,OAAS,SACTA,EAAA,OAAS,SACTA,EAAA,QAAU,UACVA,EAAA,SAAW,WAZAA,IAAAA,GAAA,CAAA,CAAA,EAeAC,GAAAA,IACXA,EAAA,KAAO,OACPA,EAAA,KAAO,OACPA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QACRA,EAAA,SAAW,WALAA,IAAAA,GAAA,CAAA,CAAA,EAQAC,GAAAA,IACXA,EAAA,KAAO,OACPA,EAAA,QAAU,UACVA,EAAA,YAAc,cAHHA,IAAAA,GAAA,CAAA,CAAA,EAYL,MAAMC,EAAkB,CAC9B,MAAO,cACP,MAAO,aACP,YAAa,oBACd,EAEaC,EAAwB,CACpC,MAAO,2BACP,MAAO,cACP,YAAa,eACd,EAEaC,EAAyB,CACrC,MAAO,kBACP,MAAO,qBACP,YAAa,oBACd"}
1
+ {"version":3,"file":"TemplateMeta.js","sources":["../../../../../src/components/template-preview/models/TemplateMeta.ts"],"sourcesContent":["import type { SingleOption } from '@src/components/dropdown/type';\n\nexport type CUSTOM_VARIABLE = {\n\tvariableName: string;\n\ttype: 'string' | 'link' | 'image' | 'button' | 'date_time';\n\tisEditableVariable: boolean;\n\tupdatedValue: string;\n\tindex?: number;\n\tvariableValue?: string;\n\tqueryParams?: { key: string; value: string }[];\n\tinitialValue?: string;\n};\n\nexport type QueryParamtype = { key: string; value: string };\n\nexport enum TEMPLATE_EDITOR {\n\tSEND_GRID = 'sendgrid',\n\tBEE = 'bee',\n}\n\nexport enum TEMPLATE_STATUS {\n\tAPPROVED = 'APPROVED',\n\tDISABLED = 'DISABLED',\n\tFLAGGED = 'FLAGGED',\n\tPENDING = 'PENDING',\n\tDRAFT = 'DRAFT',\n\tREJECTED = 'REJECTED',\n\tPENDING_DELETION = 'PENDING_DELETION',\n\tIN_REVIEW = 'IN REVIEW',\n\tPAUSED = 'PAUSED',\n\tACTIVE = 'ACTIVE',\n\tLIBRARY = 'LIBRARY',\n}\n\nexport enum HEADER_TYPES {\n\tNONE = 'NONE',\n\tTEXT = 'TEXT',\n\tIMAGE = 'IMAGE',\n\tVIDEO = 'VIDEO',\n\tDOCUMENT = 'DOCUMENT',\n}\n\nexport enum ACTIONS_TYPES {\n\tNONE = 'NONE',\n\tCTA_BTN = 'CTA_BTN',\n\tQUICK_REPLY = 'QUICK_REPLY',\n}\n\nexport interface QUICK_REPLY_BUTTON {\n\ttext: string;\n\tflowId: string;\n\tflowName: string;\n}\n\nexport const CUSTOM_URL_NAME = {\n\tvalue: 'custom_link',\n\tlabel: 'Custom URL',\n\tplaceHolder: 'custom placeholder',\n};\n\nexport const STATIC_URL_CTA_OPTION = {\n\tlabel: 'Custom URL (No tracking)',\n\tvalue: 'static_link',\n\tplaceHolder: '{{staticUrl}}',\n};\n\nexport const UNSUBSCRIBE_URL_OPTION = {\n\tlabel: 'Unsubscribe URL',\n\tvalue: '{{unsubscribeUrl}}',\n\tplaceHolder: '{{unsubscribeUrl}}',\n};\n\nexport type GlobalPlaceholderType = {\n\tMARKETING: {\n\t\tcustomer: baseAPITemplateVariableType[];\n\t\tstoreDetails: baseAPITemplateVariableType[];\n\t\torderDetails: baseAPITemplateVariableType[];\n\t\tabandonedCart: baseAPITemplateVariableType[];\n\t};\n\tTRANSACTIONAL: {\n\t\tcustomer: baseAPITemplateVariableType[];\n\t\tstoreDetails: baseAPITemplateVariableType[];\n\t\torderDetails: baseAPITemplateVariableType[];\n\t\tabandonedCart: baseAPITemplateVariableType[];\n\t};\n};\n\nexport type baseAPITemplateVariableType = {\n\ttitle: string;\n\tdefault_value: string;\n\tplaceHolder: string;\n\ttype?: 'string' | 'url';\n};\n\nexport type globalNormalizedPlaceholdersType = {\n\tlabel: string;\n\toptions: SingleOption[];\n};\n\nexport interface ButtonPlaceHolderOptions {\n\tvalue: string;\n\tlabel: string;\n\tplaceHolder: string;\n}\n"],"names":["TEMPLATE_EDITOR","TEMPLATE_STATUS","HEADER_TYPES","ACTIONS_TYPES","CUSTOM_URL_NAME","STATIC_URL_CTA_OPTION","UNSUBSCRIBE_URL_OPTION"],"mappings":"gFAeO,IAAKA,GAAAA,IACXA,EAAA,UAAY,WACZA,EAAA,IAAM,MAFKA,IAAAA,GAAA,CAAA,CAAA,EAKAC,GAAAA,IACXA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,iBAAmB,mBACnBA,EAAA,UAAY,YACZA,EAAA,OAAS,SACTA,EAAA,OAAS,SACTA,EAAA,QAAU,UAXCA,IAAAA,GAAA,CAAA,CAAA,EAcAC,GAAAA,IACXA,EAAA,KAAO,OACPA,EAAA,KAAO,OACPA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QACRA,EAAA,SAAW,WALAA,IAAAA,GAAA,CAAA,CAAA,EAQAC,GAAAA,IACXA,EAAA,KAAO,OACPA,EAAA,QAAU,UACVA,EAAA,YAAc,cAHHA,IAAAA,GAAA,CAAA,CAAA,EAYL,MAAMC,EAAkB,CAC9B,MAAO,cACP,MAAO,aACP,YAAa,oBACd,EAEaC,EAAwB,CACpC,MAAO,2BACP,MAAO,cACP,YAAa,eACd,EAEaC,EAAyB,CACrC,MAAO,kBACP,MAAO,qBACP,YAAa,oBACd"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("react/jsx-runtime"),te=require("../node_modules/@tiptap/core/dist/index.js"),j=require("@tiptap/react"),c=require("react"),ne=require("./BikEditor.styles.js"),U=require("./BikEditor.types.js"),s=require("./BikEditor.utils.js"),oe=require("./extensions/buildExtensions.js"),re=require("./floating/LinkBubbleMenu.js");function se(g){return Object.entries(g).map(([h,f])=>`${h.replace(/([A-Z])/g,m=>`-${m.toLowerCase()}`)}:${f}`).join(";")}const ie=(g,h)=>{const{initialContent:f,sections:m,features:k,disabled:N,maxCharacters:y,shortcuts:W,sendShortcut:$,mentions:l,slashCommands:d,link:J,onPaste:Q,onReady:R,onChange:x,onSend:p,onFocus:B,onBlur:b,onSelectionChange:A,minHeight:V,maxHeight:Z,style:G,className:K,editorClassName:E,editorStyle:z}=g,X=m?.length?s.buildSectionedContent(s.normalizeHtml(f??""),m.map(e=>({...e,content:s.normalizeHtml(e.content)}))):s.normalizeHtml(f??""),C=c.useRef([]),H=c.useRef(!1),T=c.useRef(R);T.current=R;const I=c.useRef(x);I.current=x;const v=c.useRef(A);v.current=A;const L=c.useRef(U.DEFAULT_FORMAT_STATE),F=c.useRef(B);F.current=B;const M=c.useRef(b);M.current=b;const q=c.useRef(p);q.current=p;const O=c.useRef(l?.agents??[]);O.current=l?.agents??[];const P=c.useRef(l?.teams??[]);P.current=l?.teams??[];const w=c.useRef(d?.items??[]);w.current=d?.items??[];const o=j.useEditor({extensions:oe.buildExtensions({features:k,placeholder:g.placeholder,maxCharacters:y,hasSections:(m?.length??0)>0,mentions:{agents:l?O:void 0,teams:l?P:void 0},slashCommands:d?w:void 0,onPaste:Q,onSend:p?e=>q.current?.(e):void 0,sendShortcut:$,shortcuts:W,onMentionSelected:l?.onSelect,onSlashCommandSelected:d?.onSelect,renderMentionItem:l?.renderItem,renderMentionDropdown:l?.renderDropdown,removeMentionTriggerOnDismiss:l?.removeTriggerOnDismiss,renderSlashCommandItem:d?.renderItem,renderSlashCommandDropdown:d?.renderDropdown}),content:X,editable:!N,immediatelyRender:!1,editorProps:{attributes:{...E?{class:E}:{},...z?{style:se(z)}:{}}},onUpdate:({editor:e})=>{I.current?.(s.extractContent(e))},onTransaction:({editor:e})=>{const t=s.extractActiveFormats(e),n=L.current;(n.bold!==t.bold||n.italic!==t.italic||n.underline!==t.underline||n.strike!==t.strike||n.bulletList!==t.bulletList||n.orderedList!==t.orderedList||n.blockquote!==t.blockquote||n.codeBlock!==t.codeBlock||n.superscript!==t.superscript||n.subscript!==t.subscript||n.textAlign!==t.textAlign||n.fontFamily!==t.fontFamily||n.fontSize!==t.fontSize||n.color!==t.color||n.highlight!==t.highlight||n.link?.href!==t.link?.href)&&(L.current=t,v.current?.(t))},onFocus:()=>F.current?.(),onBlur:()=>M.current?.()});function i(e){o?e(o):C.current.push(e)}return c.useEffect(()=>{o&&(C.current.length>0&&C.current.splice(0).forEach(t=>t(o)),H.current||(H.current=!0,T.current?.()))},[o]),c.useImperativeHandle(h,()=>({focus:e=>i(t=>t.commands.focus(e)),blur:()=>i(e=>e.commands.blur()),clearContent:()=>i(e=>e.commands.clearContent(!0)),setContent:e=>{const t=s.normalizeHtml(e);i(n=>n.commands.setContent(t,{emitUpdate:!0}))},insertContent:e=>{const t=s.normalizeHtml(e);i(n=>n.commands.insertContent(t))},insertInlineContent:e=>{i(t=>s.insertInlineHtml(t,e))},insertAtStart:e=>{const t=s.normalizeHtml(e);i(n=>n.commands.insertContentAt(1,t))},insertBlock:e=>{const t=s.normalizeHtml(e);i(n=>n.commands.insertContentAt(n.state.doc.content.size,t))},appendInline:e=>{const t=s.normalizeHtml(e);i(n=>n.commands.insertContentAt(n.state.doc.content.size-1,t))},insertAtEnd(e){this.insertBlock(e)},appendContent(e){this.appendInline(e)},getContent:()=>o?s.extractContent(o):{html:"",text:"",isEmpty:!0,characterCount:0},getJSON:()=>o?.getJSON()??null,getMentions:()=>{const e=new Set,t=new Set;return o?(o.state.doc.descendants(n=>{n.type.name==="mentionAgent"&&n.attrs.id!=null?e.add(String(n.attrs.id)):n.type.name==="mentionTeam"&&n.attrs.id!=null&&t.add(String(n.attrs.id))}),{agentIds:Array.from(e),teamIds:Array.from(t)}):{agentIds:[],teamIds:[]}},getCursorPosition:()=>{if(!o)return{from:0,to:0};const{from:e,to:t}=o.state.selection;return{from:e,to:t}},insertAtPosition:(e,t)=>{const n=s.normalizeHtml(t);i(r=>r.commands.insertContentAt(e,n))},getSelectedText:()=>{if(!o)return"";const{state:e}=o,{from:t,to:n,empty:r}=e.selection;if(!r)return e.doc.textBetween(t,n," ");const a=e.schema.marks.link;if(a){const u=te.getMarkRange(e.doc.resolve(t),a);if(u)return e.doc.textBetween(u.from,u.to," ")}return""},getCharacterCount:()=>({count:o?.storage.characterCount?.characters?.()??o?.getText().length??0,limit:y??null}),getSectionContent:e=>o?s.extractSectionContent(o,e):{html:"",text:"",isEmpty:!0,characterCount:0},setSectionContent:(e,t)=>{const n=s.normalizeHtml(t);i(r=>s.setSectionContentInEditor(r,e,n))},focusSection:e=>{i(t=>{if(e==="body"){let r=t.state.doc.content.size-1;t.state.doc.descendants((a,u)=>(a.type.name==="sectionDivider"&&r===t.state.doc.content.size-1&&(r=u-1),r===t.state.doc.content.size-1)),r<1&&(r=1),t.chain().focus().setTextSelection(r).run();return}let n=-1;t.state.doc.descendants((r,a)=>{if(n!==-1)return!1;r.type.name==="sectionDivider"&&r.attrs.sectionId===e&&(n=a+r.nodeSize+1)}),n!==-1&&t.chain().focus().setTextSelection(n).run()})},clearSection:e=>{i(t=>s.setSectionContentInEditor(t,e,"<p></p>"))},getBodyContent:()=>o?s.extractBodyContent(o):{html:"",text:"",isEmpty:!0,characterCount:0},setBodyContent:e=>{const t=s.normalizeHtml(e);i(n=>s.setSectionContentInEditor(n,"body",t))},setBodyAndSections:(e,t)=>{const n=s.buildSectionedContent(s.normalizeHtml(e),t.map(r=>({id:r.id,content:s.normalizeHtml(r.content)})));i(r=>r.commands.setContent(n,{emitUpdate:!0}))},appendBodyContent:e=>{const t=s.normalizeHtml(e);i(n=>{const r=s.findSectionEndPos(n,"body");n.commands.insertContentAt(r-1,t,{parseOptions:{preserveWhitespace:!0}})})},insertAtSectionStart:(e,t)=>{const n=s.normalizeHtml(t);i(r=>{const a=s.findSectionStartPos(r,e);a!==-1&&r.commands.insertContentAt(a,n,{parseOptions:{preserveWhitespace:!0}})})},insertAtSectionEnd:(e,t)=>{const n=s.normalizeHtml(t);i(r=>{const a=s.findSectionEndPos(r,e);r.commands.insertContentAt(a,n,{parseOptions:{preserveWhitespace:!0}})})},getActiveFormats:()=>o?s.extractActiveFormats(o):U.DEFAULT_FORMAT_STATE,actions:{toggleBold:()=>o?.chain().focus().toggleBold().run(),toggleItalic:()=>o?.chain().focus().toggleItalic().run(),toggleUnderline:()=>o?.chain().focus().toggleUnderline().run(),toggleStrike:()=>o?.chain().focus().toggleStrike().run(),toggleBulletList:()=>o?.chain().focus().toggleBulletList().run(),toggleOrderedList:()=>o?.chain().focus().toggleOrderedList().run(),toggleBlockquote:()=>o?.chain().focus().toggleBlockquote().run(),toggleCodeBlock:()=>o?.chain().focus().toggleCodeBlock().run(),setTextAlign:e=>o?.chain().focus().setTextAlign(e).run(),setFontFamily:e=>o?.chain().focus().setFontFamily(e).run(),setFontSize:e=>o?.chain().focus().setFontSize(e).run(),setColor:e=>o?.chain().focus().setColor(e).run(),setHighlight:e=>o?.chain().focus().toggleHighlight({color:e}).run(),unsetColor:()=>o?.chain().focus().unsetColor().run(),unsetHighlight:()=>o?.chain().focus().unsetHighlight().run(),setLink:(e,t)=>{o&&(t!==void 0?o.chain().focus().extendMarkRange("link").command(({tr:n,state:r})=>{const{from:a,to:u}=n.selection,D=r.schema.marks.link;if(!D)return!1;const Y=r.schema.text(t,[D.create({href:e})]),ee=r.schema.text(" ");return n.replaceWith(a,u,[Y,ee]),!0}).run():o.chain().focus().extendMarkRange("link").setLink({href:e}).insertContent(" ").run())},updateLink:e=>o?.chain().focus().extendMarkRange("link").setLink({href:e}).run(),removeLink:()=>o?.chain().focus().extendMarkRange("link").unsetLink().run(),insertEmoji:e=>o?.chain().focus().insertContent(e).run(),insertVariable:e=>o?.chain().focus().insertContent(`{{${e}}}`).run(),insertHtml:e=>o?.commands.insertContent(s.normalizeHtml(e)),undo:()=>o?.chain().focus().undo().run(),redo:()=>o?.chain().focus().redo().run(),canUndo:()=>o?.can().undo()??!1,canRedo:()=>o?.can().redo()??!1,toggleSuperscript:()=>o?.chain().focus().toggleSuperscript().run(),toggleSubscript:()=>o?.chain().focus().toggleSubscript().run(),insertImage:e=>o?.chain().focus().setImage({src:e}).run()}}),[o]),o?S.jsxs(ne.BikEditorShell,{minHeight:V,maxHeight:Z,tightParagraphs:!k?.richPaste,style:G,className:K,children:[S.jsx(j.EditorContent,{editor:o}),S.jsx(re.LinkBubbleMenu,{editor:o,renderLinkTooltip:J?.renderTooltip})]}):null},_=c.forwardRef(ie);_.displayName="BikEditor";exports.BikEditor=_;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),de=require("../node_modules/@tiptap/core/dist/index.js"),$=require("@tiptap/react"),c=require("react"),V=require("../components/TypographyStyle.js"),B=require("./BikEditor.styles.js"),Q=require("./BikEditor.types.js"),s=require("./BikEditor.utils.js"),me=require("./extensions/buildExtensions.js"),ge=require("./floating/LinkBubbleMenu.js"),fe=require("../icons/BIK AI specific/WandSparkles.js"),he=require("../icons/Actions/Formatting/Copy.js");function pe(C){return Object.entries(C).map(([S,h])=>`${S.replace(/([A-Z])/g,p=>`-${p.toLowerCase()}`)}:${h}`).join(";")}const Ce=(C,S)=>{const{initialContent:h,sections:p,features:k,disabled:G,maxCharacters:T,shortcuts:K,sendShortcut:X,mentions:u,slashCommands:f,link:Y,onPaste:ee,onReady:b,onChange:R,onSend:x,onFocus:E,onBlur:v,onSelectionChange:A,minHeight:te,maxHeight:ne,style:oe,className:se,editorClassName:z,editorStyle:H,renderJsonError:j}=C,m=!!k?.jsonMode,[d,I]=c.useState(null),[re,J]=c.useState(!1),ie=m?s.buildJsonCodeBlockHtml(h??""):p?.length?s.buildSectionedContent(s.normalizeHtml(h??""),p.map(e=>({...e,content:s.normalizeHtml(e.content)}))):s.normalizeHtml(h??""),y=c.useRef([]),M=c.useRef(!1),L=c.useRef(b);L.current=b;const F=c.useRef(R);F.current=R;const O=c.useRef(A);O.current=A;const q=c.useRef(Q.DEFAULT_FORMAT_STATE),P=c.useRef(E);P.current=E;const w=c.useRef(v);w.current=v;const N=c.useRef(x);N.current=x;const D=c.useRef(u?.agents??[]);D.current=u?.agents??[];const U=c.useRef(u?.teams??[]);U.current=u?.teams??[];const _=c.useRef(f?.items??[]);_.current=f?.items??[];const n=$.useEditor({extensions:me.buildExtensions({features:k,placeholder:C.placeholder,maxCharacters:T,hasSections:(p?.length??0)>0,mentions:{agents:u?D:void 0,teams:u?U:void 0},slashCommands:f?_:void 0,onPaste:ee,onSend:x?e=>N.current?.(e):void 0,sendShortcut:X,shortcuts:K,onMentionSelected:u?.onSelect,onSlashCommandSelected:f?.onSelect,renderMentionItem:u?.renderItem,renderMentionDropdown:u?.renderDropdown,removeMentionTriggerOnDismiss:u?.removeTriggerOnDismiss,renderSlashCommandItem:f?.renderItem,renderSlashCommandDropdown:f?.renderDropdown}),content:ie,editable:!G,immediatelyRender:!1,editorProps:{attributes:{...z?{class:z}:{},...H?{style:pe(H)}:{}}},onUpdate:({editor:e})=>{if(F.current?.(s.extractContent(e)),m){const t=s.parseJson(s.getCodeBlockText(e));I(t.valid?null:t)}},onTransaction:({editor:e})=>{const t=s.extractActiveFormats(e),o=q.current;(o.bold!==t.bold||o.italic!==t.italic||o.underline!==t.underline||o.strike!==t.strike||o.bulletList!==t.bulletList||o.orderedList!==t.orderedList||o.blockquote!==t.blockquote||o.codeBlock!==t.codeBlock||o.superscript!==t.superscript||o.subscript!==t.subscript||o.textAlign!==t.textAlign||o.fontFamily!==t.fontFamily||o.fontSize!==t.fontSize||o.color!==t.color||o.highlight!==t.highlight||o.link?.href!==t.link?.href)&&(q.current=t,O.current?.(t))},onFocus:()=>P.current?.(),onBlur:()=>w.current?.()});function i(e){n?e(n):y.current.push(e)}c.useEffect(()=>{if(n&&(y.current.length>0&&y.current.splice(0).forEach(t=>t(n)),M.current||(M.current=!0,L.current?.()),m)){const e=s.parseJson(s.getCodeBlockText(n));I(e.valid?null:e)}},[n,m]),c.useImperativeHandle(S,()=>({focus:e=>i(t=>t.commands.focus(e)),blur:()=>i(e=>e.commands.blur()),clearContent:()=>i(e=>e.commands.clearContent(!0)),setContent:e=>{const t=s.normalizeHtml(e);i(o=>o.commands.setContent(t,{emitUpdate:!0}))},insertContent:e=>{const t=s.normalizeHtml(e);i(o=>o.commands.insertContent(t))},insertInlineContent:e=>{i(t=>s.insertInlineHtml(t,e))},insertAtStart:e=>{const t=s.normalizeHtml(e);i(o=>o.commands.insertContentAt(1,t))},insertBlock:e=>{const t=s.normalizeHtml(e);i(o=>o.commands.insertContentAt(o.state.doc.content.size,t))},appendInline:e=>{const t=s.normalizeHtml(e);i(o=>o.commands.insertContentAt(o.state.doc.content.size-1,t))},insertAtEnd(e){this.insertBlock(e)},appendContent(e){this.appendInline(e)},getContent:()=>n?s.extractContent(n):{html:"",text:"",isEmpty:!0,characterCount:0},getJSON:()=>n?.getJSON()??null,getMentions:()=>{const e=new Set,t=new Set;return n?(n.state.doc.descendants(o=>{o.type.name==="mentionAgent"&&o.attrs.id!=null?e.add(String(o.attrs.id)):o.type.name==="mentionTeam"&&o.attrs.id!=null&&t.add(String(o.attrs.id))}),{agentIds:Array.from(e),teamIds:Array.from(t)}):{agentIds:[],teamIds:[]}},getCursorPosition:()=>{if(!n)return{from:0,to:0};const{from:e,to:t}=n.state.selection;return{from:e,to:t}},insertAtPosition:(e,t)=>{const o=s.normalizeHtml(t);i(r=>r.commands.insertContentAt(e,o))},getSelectedText:()=>{if(!n)return"";const{state:e}=n,{from:t,to:o,empty:r}=e.selection;if(!r)return e.doc.textBetween(t,o," ");const l=e.schema.marks.link;if(l){const g=de.getMarkRange(e.doc.resolve(t),l);if(g)return e.doc.textBetween(g.from,g.to," ")}return""},getCharacterCount:()=>({count:n?.storage.characterCount?.characters?.()??n?.getText().length??0,limit:T??null}),getSectionContent:e=>n?s.extractSectionContent(n,e):{html:"",text:"",isEmpty:!0,characterCount:0},setSectionContent:(e,t)=>{const o=s.normalizeHtml(t);i(r=>s.setSectionContentInEditor(r,e,o))},focusSection:e=>{i(t=>{if(e==="body"){let r=t.state.doc.content.size-1;t.state.doc.descendants((l,g)=>(l.type.name==="sectionDivider"&&r===t.state.doc.content.size-1&&(r=g-1),r===t.state.doc.content.size-1)),r<1&&(r=1),t.chain().focus().setTextSelection(r).run();return}let o=-1;t.state.doc.descendants((r,l)=>{if(o!==-1)return!1;r.type.name==="sectionDivider"&&r.attrs.sectionId===e&&(o=l+r.nodeSize+1)}),o!==-1&&t.chain().focus().setTextSelection(o).run()})},clearSection:e=>{i(t=>s.setSectionContentInEditor(t,e,"<p></p>"))},getBodyContent:()=>n?s.extractBodyContent(n):{html:"",text:"",isEmpty:!0,characterCount:0},setBodyContent:e=>{const t=s.normalizeHtml(e);i(o=>s.setSectionContentInEditor(o,"body",t))},setBodyAndSections:(e,t)=>{const o=s.buildSectionedContent(s.normalizeHtml(e),t.map(r=>({id:r.id,content:s.normalizeHtml(r.content)})));i(r=>r.commands.setContent(o,{emitUpdate:!0}))},appendBodyContent:e=>{const t=s.normalizeHtml(e);i(o=>{const r=s.findSectionEndPos(o,"body");o.commands.insertContentAt(r-1,t,{parseOptions:{preserveWhitespace:!0}})})},insertAtSectionStart:(e,t)=>{const o=s.normalizeHtml(t);i(r=>{const l=s.findSectionStartPos(r,e);l!==-1&&r.commands.insertContentAt(l,o,{parseOptions:{preserveWhitespace:!0}})})},insertAtSectionEnd:(e,t)=>{const o=s.normalizeHtml(t);i(r=>{const l=s.findSectionEndPos(r,e);r.commands.insertContentAt(l,o,{parseOptions:{preserveWhitespace:!0}})})},getActiveFormats:()=>n?s.extractActiveFormats(n):Q.DEFAULT_FORMAT_STATE,actions:{toggleBold:()=>n?.chain().focus().toggleBold().run(),toggleItalic:()=>n?.chain().focus().toggleItalic().run(),toggleUnderline:()=>n?.chain().focus().toggleUnderline().run(),toggleStrike:()=>n?.chain().focus().toggleStrike().run(),toggleBulletList:()=>n?.chain().focus().toggleBulletList().run(),toggleOrderedList:()=>n?.chain().focus().toggleOrderedList().run(),toggleBlockquote:()=>n?.chain().focus().toggleBlockquote().run(),toggleCodeBlock:()=>n?.chain().focus().toggleCodeBlock().run(),setTextAlign:e=>n?.chain().focus().setTextAlign(e).run(),setFontFamily:e=>n?.chain().focus().setFontFamily(e).run(),setFontSize:e=>n?.chain().focus().setFontSize(e).run(),setColor:e=>n?.chain().focus().setColor(e).run(),setHighlight:e=>n?.chain().focus().toggleHighlight({color:e}).run(),unsetColor:()=>n?.chain().focus().unsetColor().run(),unsetHighlight:()=>n?.chain().focus().unsetHighlight().run(),setLink:(e,t)=>{n&&(t!==void 0?n.chain().focus().extendMarkRange("link").command(({tr:o,state:r})=>{const{from:l,to:g}=o.selection,W=r.schema.marks.link;if(!W)return!1;const ae=r.schema.text(t,[W.create({href:e})]),ue=r.schema.text(" ");return o.replaceWith(l,g,[ae,ue]),!0}).run():n.chain().focus().extendMarkRange("link").setLink({href:e}).insertContent(" ").run())},updateLink:e=>n?.chain().focus().extendMarkRange("link").setLink({href:e}).run(),removeLink:()=>n?.chain().focus().extendMarkRange("link").unsetLink().run(),insertEmoji:e=>n?.chain().focus().insertContent(e).run(),insertVariable:e=>n?.chain().focus().insertContent(`{{${e}}}`).run(),insertHtml:e=>n?.commands.insertContent(s.normalizeHtml(e)),undo:()=>n?.chain().focus().undo().run(),redo:()=>n?.chain().focus().redo().run(),canUndo:()=>n?.can().undo()??!1,canRedo:()=>n?.can().redo()??!1,toggleSuperscript:()=>n?.chain().focus().toggleSuperscript().run(),toggleSubscript:()=>n?.chain().focus().toggleSubscript().run(),insertImage:e=>n?.chain().focus().setImage({src:e}).run()},json:k?.jsonMode?{getText:()=>n?s.getCodeBlockText(n):"",setText:e=>i(t=>s.setCodeBlockText(t,e)),parse:()=>s.parseJson(n?s.getCodeBlockText(n):""),isValid:()=>s.parseJson(n?s.getCodeBlockText(n):"").valid,format:(e=2)=>i(t=>{const{valid:o,value:r}=s.parseJson(s.getCodeBlockText(t));!o||r===null||s.setCodeBlockText(t,JSON.stringify(r,null,e))}),minify:()=>i(e=>{const{valid:t,value:o}=s.parseJson(s.getCodeBlockText(e));!t||o===null||s.setCodeBlockText(e,JSON.stringify(o))})}:void 0}),[n]);const ce=()=>{if(!n)return;const{valid:e,value:t}=s.parseJson(s.getCodeBlockText(n));!e||t===null||s.setCodeBlockText(n,JSON.stringify(t,null,2))},le=()=>{n&&(navigator.clipboard?.writeText(s.getCodeBlockText(n)),J(!0),setTimeout(()=>J(!1),1500))};return n?a.jsxs(B.BikEditorShell,{minHeight:te,maxHeight:ne,tightParagraphs:!k?.richPaste,jsonMode:m,style:oe,className:se,children:[a.jsx($.EditorContent,{editor:n}),m&&a.jsxs(B.BikJsonActions,{children:[a.jsxs("button",{type:"button",onClick:ce,disabled:!!d,title:"Format JSON",style:{padding:8},children:[a.jsx(fe.default,{size:16}),a.jsx(V.BodyCaption,{children:" Beautify "})]}),a.jsxs("button",{type:"button",onClick:le,title:"Copy JSON",style:{padding:8},children:[a.jsx(he.default,{size:16}),re&&a.jsx(V.BodyCaption,{children:" Copied "})]})]}),a.jsx(ge.LinkBubbleMenu,{editor:n,renderLinkTooltip:Y?.renderTooltip}),m&&d?j?j(d):a.jsxs(B.BikJsonError,{children:[d.line!=null&&a.jsxs("strong",{children:["Line ",d.line,d.column!=null?`, column ${d.column}`:"",":"," "]}),d.error]}):null]}):null},Z=c.forwardRef(Ce);Z.displayName="BikEditor";exports.BikEditor=Z;
2
2
  //# sourceMappingURL=BikEditor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BikEditor.js","sources":["../../../src/editor/BikEditor.tsx"],"sourcesContent":["'use client';\n\n/**\n * IMPLEMENTATION LAYER — TipTap-specific.\n * If the underlying editor is swapped, this file changes; BikEditor.types.ts and\n * src/editor/index.ts (the consumer contract) do NOT change.\n */\nimport { Editor, getMarkRange } from '@tiptap/core';\nimport { EditorContent, useEditor } from '@tiptap/react';\nimport React, {\n\tforwardRef,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n} from 'react';\nimport { BikEditorShell } from './BikEditor.styles';\nimport {\n\tBikEditorProps,\n\tBikEditorRef,\n\tDEFAULT_FORMAT_STATE,\n\tFormatState,\n} from './BikEditor.types';\nimport {\n\tbuildSectionedContent,\n\textractActiveFormats,\n\textractBodyContent,\n\textractContent,\n\textractSectionContent,\n\tfindSectionEndPos,\n\tfindSectionStartPos,\n\tinsertInlineHtml,\n\tnormalizeHtml,\n\tsetSectionContentInEditor,\n} from './BikEditor.utils';\nimport { buildExtensions } from './extensions/buildExtensions';\nimport { LinkBubbleMenu } from './floating/LinkBubbleMenu';\n\n/** Convert React.CSSProperties to an inline CSS string for editorProps.attributes. */\nfunction cssToString(style: React.CSSProperties): string {\n\treturn Object.entries(style)\n\t\t.map(\n\t\t\t([k, v]) => `${k.replace(/([A-Z])/g, (c) => `-${c.toLowerCase()}`)}:${v}`,\n\t\t)\n\t\t.join(';');\n}\n\nconst BikEditorInner = (\n\tprops: BikEditorProps,\n\tref: React.Ref<BikEditorRef>,\n) => {\n\tconst {\n\t\tinitialContent,\n\t\tsections,\n\t\tfeatures,\n\t\tdisabled,\n\t\tmaxCharacters,\n\t\tshortcuts,\n\t\tsendShortcut,\n\t\tmentions,\n\t\tslashCommands,\n\t\tlink,\n\t\tonPaste,\n\t\tonReady,\n\t\tonChange,\n\t\tonSend,\n\t\tonFocus,\n\t\tonBlur,\n\t\tonSelectionChange,\n\t\tminHeight,\n\t\tmaxHeight,\n\t\tstyle,\n\t\tclassName,\n\t\teditorClassName,\n\t\teditorStyle,\n\t} = props;\n\n\tconst initialEditorContent = sections?.length\n\t\t? buildSectionedContent(\n\t\t\t\tnormalizeHtml(initialContent ?? ''),\n\t\t\t\tsections.map((s) => ({ ...s, content: normalizeHtml(s.content) })),\n\t\t )\n\t\t: normalizeHtml(initialContent ?? '');\n\n\t// ── Command queue ─────────────────────────────────────────────────────────\n\t// TipTap's useEditor initializes asynchronously; the editor instance is null\n\t// until the first commit. Any imperative method called before the editor is\n\t// ready is enqueued here and flushed automatically once it becomes non-null.\n\t// Consumers never need setTimeout or readiness guards.\n\tconst pendingQueue = useRef<Array<(e: Editor) => void>>([]);\n\tconst hasCalledOnReady = useRef(false);\n\t// Keep stable refs to all callbacks so useEditor receives the same function\n\t// identity on every render — prevents TipTap from re-registering event\n\t// handlers every time the parent re-renders with new inline function props.\n\tconst onReadyRef = useRef(onReady);\n\tonReadyRef.current = onReady;\n\tconst onChangeRef = useRef(onChange);\n\tonChangeRef.current = onChange;\n\tconst onSelectionChangeRef = useRef(onSelectionChange);\n\tonSelectionChangeRef.current = onSelectionChange;\n\tconst prevFormatsRef = useRef<FormatState>(DEFAULT_FORMAT_STATE);\n\tconst onFocusRef = useRef(onFocus);\n\tonFocusRef.current = onFocus;\n\tconst onBlurRef = useRef(onBlur);\n\tonBlurRef.current = onBlur;\n\tconst onSendRef = useRef(onSend);\n\tonSendRef.current = onSend;\n\tconst agentMentionsRef = useRef(mentions?.agents ?? []);\n\tagentMentionsRef.current = mentions?.agents ?? [];\n\tconst teamMentionsRef = useRef(mentions?.teams ?? []);\n\tteamMentionsRef.current = mentions?.teams ?? [];\n\tconst slashCommandsRef = useRef(slashCommands?.items ?? []);\n\tslashCommandsRef.current = slashCommands?.items ?? [];\n\n\tconst editor = useEditor({\n\t\textensions: buildExtensions({\n\t\t\tfeatures,\n\t\t\tplaceholder: props.placeholder,\n\t\t\tmaxCharacters,\n\t\t\thasSections: (sections?.length ?? 0) > 0,\n\t\t\tmentions: {\n\t\t\t\tagents: mentions ? agentMentionsRef : undefined,\n\t\t\t\tteams: mentions ? teamMentionsRef : undefined,\n\t\t\t},\n\t\t\tslashCommands: slashCommands ? slashCommandsRef : undefined,\n\t\t\tonPaste,\n\t\t\tonSend: onSend ? (snapshot) => onSendRef.current?.(snapshot) : undefined,\n\t\t\tsendShortcut,\n\t\t\tshortcuts,\n\t\t\tonMentionSelected: mentions?.onSelect,\n\t\t\tonSlashCommandSelected: slashCommands?.onSelect,\n\t\t\trenderMentionItem: mentions?.renderItem,\n\t\t\trenderMentionDropdown: mentions?.renderDropdown,\n\t\t\tremoveMentionTriggerOnDismiss: mentions?.removeTriggerOnDismiss,\n\t\t\trenderSlashCommandItem: slashCommands?.renderItem,\n\t\t\trenderSlashCommandDropdown: slashCommands?.renderDropdown,\n\t\t}),\n\t\tcontent: initialEditorContent,\n\t\teditable: !disabled,\n\t\timmediatelyRender: false, // SSR-safe — NEVER remove this\n\t\teditorProps: {\n\t\t\tattributes: {\n\t\t\t\t...(editorClassName ? { class: editorClassName } : {}),\n\t\t\t\t...(editorStyle ? { style: cssToString(editorStyle) } : {}),\n\t\t\t},\n\t\t},\n\t\tonUpdate: ({ editor: e }) => {\n\t\t\tonChangeRef.current?.(extractContent(e));\n\t\t},\n\t\tonTransaction: ({ editor: e }) => {\n\t\t\tconst next = extractActiveFormats(e);\n\t\t\tconst prev = prevFormatsRef.current;\n\t\t\tconst changed =\n\t\t\t\tprev.bold !== next.bold ||\n\t\t\t\tprev.italic !== next.italic ||\n\t\t\t\tprev.underline !== next.underline ||\n\t\t\t\tprev.strike !== next.strike ||\n\t\t\t\tprev.bulletList !== next.bulletList ||\n\t\t\t\tprev.orderedList !== next.orderedList ||\n\t\t\t\tprev.blockquote !== next.blockquote ||\n\t\t\t\tprev.codeBlock !== next.codeBlock ||\n\t\t\t\tprev.superscript !== next.superscript ||\n\t\t\t\tprev.subscript !== next.subscript ||\n\t\t\t\tprev.textAlign !== next.textAlign ||\n\t\t\t\tprev.fontFamily !== next.fontFamily ||\n\t\t\t\tprev.fontSize !== next.fontSize ||\n\t\t\t\tprev.color !== next.color ||\n\t\t\t\tprev.highlight !== next.highlight ||\n\t\t\t\tprev.link?.href !== next.link?.href;\n\t\t\tif (changed) {\n\t\t\t\tprevFormatsRef.current = next;\n\t\t\t\tonSelectionChangeRef.current?.(next);\n\t\t\t}\n\t\t},\n\t\tonFocus: () => onFocusRef.current?.(),\n\t\tonBlur: () => onBlurRef.current?.(),\n\t});\n\n\t// ── enqueue ───────────────────────────────────────────────────────────────\n\t// Run immediately if the editor is ready; otherwise defer to the queue.\n\t// Closures passed to enqueue MUST capture all parameters explicitly —\n\t// they must NOT close over `editor` (which would be null at enqueue time).\n\tfunction enqueue(op: (e: Editor) => void): void {\n\t\tif (editor) {\n\t\t\top(editor);\n\t\t} else {\n\t\t\tpendingQueue.current.push(op);\n\t\t}\n\t}\n\n\t// Flush the pending queue and fire onReady when editor transitions null → ready.\n\tuseEffect(() => {\n\t\tif (!editor) return;\n\t\tif (pendingQueue.current.length > 0) {\n\t\t\tconst queue = pendingQueue.current.splice(0);\n\t\t\tqueue.forEach((op) => op(editor));\n\t\t}\n\t\tif (!hasCalledOnReady.current) {\n\t\t\thasCalledOnReady.current = true;\n\t\t\tonReadyRef.current?.();\n\t\t}\n\t}, [editor]);\n\n\tuseImperativeHandle(\n\t\tref,\n\t\t() => ({\n\t\t\t// ── Focus ────────────────────────────────────────────────────────\n\t\t\tfocus: (position) => enqueue((e) => e.commands.focus(position)),\n\t\t\tblur: () => enqueue((e) => e.commands.blur()),\n\n\t\t\t// ── Content ──────────────────────────────────────────────────────\n\t\t\tclearContent: () => enqueue((e) => e.commands.clearContent(true)),\n\t\t\tsetContent: (html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) => e.commands.setContent(normalised, { emitUpdate: true }));\n\t\t\t},\n\t\t\tinsertContent: (html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) => e.commands.insertContent(normalised));\n\t\t\t},\n\t\t\tinsertInlineContent: (html) => {\n\t\t\t\tenqueue((e) => insertInlineHtml(e, html));\n\t\t\t},\n\t\t\tinsertAtStart: (html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) => e.commands.insertContentAt(1, normalised));\n\t\t\t},\n\t\t\tinsertBlock: (html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) =>\n\t\t\t\t\te.commands.insertContentAt(e.state.doc.content.size, normalised),\n\t\t\t\t);\n\t\t\t},\n\t\t\tappendInline: (html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\t// doc.content.size is after the last </p> (block boundary).\n\t\t\t\t// Subtract 1 to land inside the last paragraph so text appends\n\t\t\t\t// inline rather than being wrapped in a new paragraph each call.\n\t\t\t\tenqueue((e) =>\n\t\t\t\t\te.commands.insertContentAt(e.state.doc.content.size - 1, normalised),\n\t\t\t\t);\n\t\t\t},\n\t\t\t// Backwards-compatible aliases\n\t\t\tinsertAtEnd(html) {\n\t\t\t\tthis.insertBlock(html);\n\t\t\t},\n\t\t\tappendContent(html) {\n\t\t\t\tthis.appendInline(html);\n\t\t\t},\n\t\t\tgetContent: () =>\n\t\t\t\teditor\n\t\t\t\t\t? extractContent(editor)\n\t\t\t\t\t: { html: '', text: '', isEmpty: true, characterCount: 0 },\n\t\t\tgetJSON: () => editor?.getJSON() ?? null,\n\t\t\tgetMentions: () => {\n\t\t\t\tconst agentIds = new Set<string>();\n\t\t\t\tconst teamIds = new Set<string>();\n\t\t\t\tif (!editor) return { agentIds: [], teamIds: [] };\n\t\t\t\teditor.state.doc.descendants((node) => {\n\t\t\t\t\tif (node.type.name === 'mentionAgent' && node.attrs['id'] != null) {\n\t\t\t\t\t\tagentIds.add(String(node.attrs['id']));\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tnode.type.name === 'mentionTeam' &&\n\t\t\t\t\t\tnode.attrs['id'] != null\n\t\t\t\t\t) {\n\t\t\t\t\t\tteamIds.add(String(node.attrs['id']));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn { agentIds: Array.from(agentIds), teamIds: Array.from(teamIds) };\n\t\t\t},\n\n\t\t\t// ── Selection ────────────────────────────────────────────────────\n\t\t\tgetCursorPosition: () => {\n\t\t\t\tif (!editor) return { from: 0, to: 0 };\n\t\t\t\tconst { from, to } = editor.state.selection;\n\t\t\t\treturn { from, to };\n\t\t\t},\n\t\t\tinsertAtPosition: (pos, html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) => e.commands.insertContentAt(pos, normalised));\n\t\t\t},\n\t\t\tgetSelectedText: () => {\n\t\t\t\tif (!editor) return '';\n\t\t\t\tconst { state } = editor;\n\t\t\t\tconst { from, to, empty } = state.selection;\n\t\t\t\tif (!empty) {\n\t\t\t\t\treturn state.doc.textBetween(from, to, ' ');\n\t\t\t\t}\n\t\t\t\t// When the cursor is inside a link with nothing selected, return the\n\t\t\t\t// full link text — useful for pre-filling a link modal's text field.\n\t\t\t\tconst linkMarkType = state.schema.marks['link'];\n\t\t\t\tif (linkMarkType) {\n\t\t\t\t\tconst range = getMarkRange(state.doc.resolve(from), linkMarkType);\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\treturn state.doc.textBetween(range.from, range.to, ' ');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t},\n\n\t\t\t// ── Character count ───────────────────────────────────────────────\n\t\t\tgetCharacterCount: () => ({\n\t\t\t\tcount:\n\t\t\t\t\teditor?.storage.characterCount?.characters?.() ??\n\t\t\t\t\teditor?.getText().length ??\n\t\t\t\t\t0,\n\t\t\t\tlimit: maxCharacters ?? null,\n\t\t\t}),\n\n\t\t\t// ── Sections ─────────────────────────────────────────────────────\n\t\t\tgetSectionContent: (sectionId) =>\n\t\t\t\teditor\n\t\t\t\t\t? extractSectionContent(editor, sectionId)\n\t\t\t\t\t: { html: '', text: '', isEmpty: true, characterCount: 0 },\n\n\t\t\tsetSectionContent: (sectionId, html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) => setSectionContentInEditor(e, sectionId, normalised));\n\t\t\t},\n\n\t\t\tfocusSection: (sectionId) => {\n\t\t\t\tenqueue((e) => {\n\t\t\t\t\tif (sectionId === 'body') {\n\t\t\t\t\t\tlet endOfBody = e.state.doc.content.size - 1;\n\t\t\t\t\t\te.state.doc.descendants((node, pos) => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tnode.type.name === 'sectionDivider' &&\n\t\t\t\t\t\t\t\tendOfBody === e.state.doc.content.size - 1\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tendOfBody = pos - 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn endOfBody === e.state.doc.content.size - 1;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (endOfBody < 1) endOfBody = 1;\n\t\t\t\t\t\te.chain().focus().setTextSelection(endOfBody).run();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet targetPos = -1;\n\t\t\t\t\te.state.doc.descendants((node, pos) => {\n\t\t\t\t\t\tif (targetPos !== -1) return false;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tnode.type.name === 'sectionDivider' &&\n\t\t\t\t\t\t\tnode.attrs['sectionId'] === sectionId\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// pos + nodeSize lands right after the divider;\n\t\t\t\t\t\t\t// +1 more puts us inside the first paragraph of that section.\n\t\t\t\t\t\t\ttargetPos = pos + node.nodeSize + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (targetPos !== -1) {\n\t\t\t\t\t\te.chain().focus().setTextSelection(targetPos).run();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tclearSection: (sectionId) => {\n\t\t\t\tenqueue((e) => setSectionContentInEditor(e, sectionId, '<p></p>'));\n\t\t\t},\n\n\t\t\t// ── Convenience body shorthands ───────────────────────────────────\n\t\t\tgetBodyContent: () =>\n\t\t\t\teditor\n\t\t\t\t\t? extractBodyContent(editor)\n\t\t\t\t\t: { html: '', text: '', isEmpty: true, characterCount: 0 },\n\t\t\tsetBodyContent: (html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) => setSectionContentInEditor(e, 'body', normalised));\n\t\t\t},\n\t\t\tsetBodyAndSections: (body, sections) => {\n\t\t\t\tconst html = buildSectionedContent(\n\t\t\t\t\tnormalizeHtml(body),\n\t\t\t\t\tsections.map((s) => ({\n\t\t\t\t\t\tid: s.id,\n\t\t\t\t\t\tcontent: normalizeHtml(s.content),\n\t\t\t\t\t})),\n\t\t\t\t);\n\t\t\t\tenqueue((e) => e.commands.setContent(html, { emitUpdate: true }));\n\t\t\t},\n\t\t\tappendBodyContent: (html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\t// findSectionEndPos returns the position of the first divider (or\n\t\t\t\t// doc.content.size), which is the block boundary after the last </p>.\n\t\t\t\t// Subtract 1 to stay inside the last paragraph so successive calls\n\t\t\t\t// append inline text rather than creating a new paragraph each time.\n\t\t\t\tenqueue((e) => {\n\t\t\t\t\tconst boundaryPos = findSectionEndPos(e, 'body');\n\t\t\t\t\te.commands.insertContentAt(boundaryPos - 1, normalised, {\n\t\t\t\t\t\tparseOptions: { preserveWhitespace: true },\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tinsertAtSectionStart: (sectionId, html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) => {\n\t\t\t\t\tconst pos = findSectionStartPos(e, sectionId);\n\t\t\t\t\tif (pos !== -1)\n\t\t\t\t\t\te.commands.insertContentAt(pos, normalised, {\n\t\t\t\t\t\t\tparseOptions: { preserveWhitespace: true },\n\t\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tinsertAtSectionEnd: (sectionId, html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) => {\n\t\t\t\t\tconst pos = findSectionEndPos(e, sectionId);\n\t\t\t\t\te.commands.insertContentAt(pos, normalised, {\n\t\t\t\t\t\tparseOptions: { preserveWhitespace: true },\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\t// ── Formats & actions ─────────────────────────────────────────────\n\t\t\tgetActiveFormats: () =>\n\t\t\t\teditor ? extractActiveFormats(editor) : DEFAULT_FORMAT_STATE,\n\t\t\tactions: {\n\t\t\t\ttoggleBold: () => editor?.chain().focus().toggleBold().run(),\n\t\t\t\ttoggleItalic: () => editor?.chain().focus().toggleItalic().run(),\n\t\t\t\ttoggleUnderline: () => editor?.chain().focus().toggleUnderline().run(),\n\t\t\t\ttoggleStrike: () => editor?.chain().focus().toggleStrike().run(),\n\t\t\t\ttoggleBulletList: () =>\n\t\t\t\t\teditor?.chain().focus().toggleBulletList().run(),\n\t\t\t\ttoggleOrderedList: () =>\n\t\t\t\t\teditor?.chain().focus().toggleOrderedList().run(),\n\t\t\t\ttoggleBlockquote: () =>\n\t\t\t\t\teditor?.chain().focus().toggleBlockquote().run(),\n\t\t\t\ttoggleCodeBlock: () => editor?.chain().focus().toggleCodeBlock().run(),\n\t\t\t\tsetTextAlign: (align) =>\n\t\t\t\t\teditor?.chain().focus().setTextAlign(align).run(),\n\t\t\t\tsetFontFamily: (font) =>\n\t\t\t\t\teditor?.chain().focus().setFontFamily(font).run(),\n\t\t\t\tsetFontSize: (size) => editor?.chain().focus().setFontSize(size).run(),\n\t\t\t\tsetColor: (color) => editor?.chain().focus().setColor(color).run(),\n\t\t\t\tsetHighlight: (color) =>\n\t\t\t\t\teditor?.chain().focus().toggleHighlight({ color }).run(),\n\t\t\t\tunsetColor: () => editor?.chain().focus().unsetColor().run(),\n\t\t\t\tunsetHighlight: () => editor?.chain().focus().unsetHighlight().run(),\n\t\t\t\tsetLink: (href, text) => {\n\t\t\t\t\tif (!editor) return;\n\t\t\t\t\tif (text !== undefined) {\n\t\t\t\t\t\teditor\n\t\t\t\t\t\t\t.chain()\n\t\t\t\t\t\t\t.focus()\n\t\t\t\t\t\t\t.extendMarkRange('link')\n\t\t\t\t\t\t\t.command(({ tr, state }) => {\n\t\t\t\t\t\t\t\tconst { from, to } = tr.selection;\n\t\t\t\t\t\t\t\tconst linkMarkType = state.schema.marks['link'];\n\t\t\t\t\t\t\t\tif (!linkMarkType) return false;\n\t\t\t\t\t\t\t\tconst linkNode = state.schema.text(text, [\n\t\t\t\t\t\t\t\t\tlinkMarkType.create({ href }),\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\tconst space = state.schema.text(' ');\n\t\t\t\t\t\t\t\ttr.replaceWith(from, to, [linkNode, space]);\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.run();\n\t\t\t\t\t} else {\n\t\t\t\t\t\teditor\n\t\t\t\t\t\t\t.chain()\n\t\t\t\t\t\t\t.focus()\n\t\t\t\t\t\t\t.extendMarkRange('link')\n\t\t\t\t\t\t\t.setLink({ href })\n\t\t\t\t\t\t\t.insertContent(' ')\n\t\t\t\t\t\t\t.run();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tupdateLink: (href) =>\n\t\t\t\t\teditor\n\t\t\t\t\t\t?.chain()\n\t\t\t\t\t\t.focus()\n\t\t\t\t\t\t.extendMarkRange('link')\n\t\t\t\t\t\t.setLink({ href })\n\t\t\t\t\t\t.run(),\n\t\t\t\tremoveLink: () =>\n\t\t\t\t\teditor?.chain().focus().extendMarkRange('link').unsetLink().run(),\n\t\t\t\tinsertEmoji: (emoji) =>\n\t\t\t\t\teditor?.chain().focus().insertContent(emoji).run(),\n\t\t\t\tinsertVariable: (variableName) =>\n\t\t\t\t\teditor?.chain().focus().insertContent(`{{${variableName}}}`).run(),\n\t\t\t\tinsertHtml: (html) =>\n\t\t\t\t\teditor?.commands.insertContent(normalizeHtml(html)),\n\t\t\t\tundo: () => editor?.chain().focus().undo().run(),\n\t\t\t\tredo: () => editor?.chain().focus().redo().run(),\n\t\t\t\tcanUndo: () => editor?.can().undo() ?? false,\n\t\t\t\tcanRedo: () => editor?.can().redo() ?? false,\n\t\t\t\ttoggleSuperscript: () =>\n\t\t\t\t\teditor?.chain().focus().toggleSuperscript().run(),\n\t\t\t\ttoggleSubscript: () => editor?.chain().focus().toggleSubscript().run(),\n\t\t\t\tinsertImage: (src) => editor?.chain().focus().setImage({ src }).run(),\n\t\t\t},\n\t\t}),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[editor],\n\t);\n\n\tif (!editor) return null;\n\n\treturn (\n\t\t<BikEditorShell\n\t\t\tminHeight={minHeight}\n\t\t\tmaxHeight={maxHeight}\n\t\t\ttightParagraphs={!features?.richPaste}\n\t\t\tstyle={style}\n\t\t\tclassName={className}\n\t\t>\n\t\t\t<EditorContent editor={editor} />\n\t\t\t<LinkBubbleMenu editor={editor} renderLinkTooltip={link?.renderTooltip} />\n\t\t</BikEditorShell>\n\t);\n};\n\nexport const BikEditor = forwardRef<BikEditorRef, BikEditorProps>(\n\tBikEditorInner,\n);\nBikEditor.displayName = 'BikEditor';\n"],"names":["cssToString","style","k","v","c","BikEditorInner","props","ref","initialContent","sections","features","disabled","maxCharacters","shortcuts","sendShortcut","mentions","slashCommands","link","onPaste","onReady","onChange","onSend","onFocus","onBlur","onSelectionChange","minHeight","maxHeight","className","editorClassName","editorStyle","initialEditorContent","buildSectionedContent","normalizeHtml","s","pendingQueue","useRef","hasCalledOnReady","onReadyRef","onChangeRef","onSelectionChangeRef","prevFormatsRef","DEFAULT_FORMAT_STATE","onFocusRef","onBlurRef","onSendRef","agentMentionsRef","teamMentionsRef","slashCommandsRef","editor","useEditor","buildExtensions","snapshot","extractContent","next","extractActiveFormats","prev","enqueue","op","useEffect","useImperativeHandle","position","e","html","normalised","insertInlineHtml","agentIds","teamIds","node","from","to","pos","state","empty","linkMarkType","range","getMarkRange","sectionId","extractSectionContent","setSectionContentInEditor","endOfBody","targetPos","extractBodyContent","body","boundaryPos","findSectionEndPos","findSectionStartPos","align","font","size","color","href","text","tr","linkNode","space","emoji","variableName","src","jsxs","BikEditorShell","jsx","EditorContent","LinkBubbleMenu","BikEditor","forwardRef"],"mappings":"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"}
1
+ {"version":3,"file":"BikEditor.js","sources":["../../../src/editor/BikEditor.tsx"],"sourcesContent":["'use client';\n\n/**\n * IMPLEMENTATION LAYER — TipTap-specific.\n * If the underlying editor is swapped, this file changes; BikEditor.types.ts and\n * src/editor/index.ts (the consumer contract) do NOT change.\n */\nimport { Editor, getMarkRange } from '@tiptap/core';\nimport { EditorContent, useEditor } from '@tiptap/react';\nimport React, {\n\tforwardRef,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport { BodyCaption } from '@src/components/TypographyStyle';\nimport { Copy, WandSparkles } from '../icons';\nimport {\n\tBikEditorShell,\n\tBikJsonActions,\n\tBikJsonError,\n} from './BikEditor.styles';\nimport {\n\tBikEditorProps,\n\tBikEditorRef,\n\tDEFAULT_FORMAT_STATE,\n\tFormatState,\n\tJsonParseResult,\n} from './BikEditor.types';\nimport {\n\tbuildJsonCodeBlockHtml,\n\tbuildSectionedContent,\n\textractActiveFormats,\n\textractBodyContent,\n\textractContent,\n\textractSectionContent,\n\tfindSectionEndPos,\n\tfindSectionStartPos,\n\tgetCodeBlockText,\n\tinsertInlineHtml,\n\tnormalizeHtml,\n\tparseJson,\n\tsetCodeBlockText,\n\tsetSectionContentInEditor,\n} from './BikEditor.utils';\nimport { buildExtensions } from './extensions/buildExtensions';\nimport { LinkBubbleMenu } from './floating/LinkBubbleMenu';\n\n/** Convert React.CSSProperties to an inline CSS string for editorProps.attributes. */\nfunction cssToString(style: React.CSSProperties): string {\n\treturn Object.entries(style)\n\t\t.map(\n\t\t\t([k, v]) => `${k.replace(/([A-Z])/g, (c) => `-${c.toLowerCase()}`)}:${v}`,\n\t\t)\n\t\t.join(';');\n}\n\nconst BikEditorInner = (\n\tprops: BikEditorProps,\n\tref: React.Ref<BikEditorRef>,\n) => {\n\tconst {\n\t\tinitialContent,\n\t\tsections,\n\t\tfeatures,\n\t\tdisabled,\n\t\tmaxCharacters,\n\t\tshortcuts,\n\t\tsendShortcut,\n\t\tmentions,\n\t\tslashCommands,\n\t\tlink,\n\t\tonPaste,\n\t\tonReady,\n\t\tonChange,\n\t\tonSend,\n\t\tonFocus,\n\t\tonBlur,\n\t\tonSelectionChange,\n\t\tminHeight,\n\t\tmaxHeight,\n\t\tstyle,\n\t\tclassName,\n\t\teditorClassName,\n\t\teditorStyle,\n\t\trenderJsonError,\n\t} = props;\n\n\tconst isJsonMode = !!features?.jsonMode;\n\n\t// Live JSON parse error, shown inside the editor when jsonMode is on.\n\t// null = valid (or not applicable) → nothing rendered.\n\tconst [jsonError, setJsonError] = useState<JsonParseResult | null>(null);\n\t// Transient \"Copied\" state for the jsonMode copy button.\n\tconst [jsonCopied, setJsonCopied] = useState(false);\n\n\t// JSON body mode: treat initialContent as raw JSON text and wrap it in a code\n\t// block. Skips section/HTML normalisation entirely.\n\tconst initialEditorContent = isJsonMode\n\t\t? buildJsonCodeBlockHtml(initialContent ?? '')\n\t\t: sections?.length\n\t\t? buildSectionedContent(\n\t\t\t\tnormalizeHtml(initialContent ?? ''),\n\t\t\t\tsections.map((s) => ({ ...s, content: normalizeHtml(s.content) })),\n\t\t )\n\t\t: normalizeHtml(initialContent ?? '');\n\n\t// ── Command queue ─────────────────────────────────────────────────────────\n\t// TipTap's useEditor initializes asynchronously; the editor instance is null\n\t// until the first commit. Any imperative method called before the editor is\n\t// ready is enqueued here and flushed automatically once it becomes non-null.\n\t// Consumers never need setTimeout or readiness guards.\n\tconst pendingQueue = useRef<Array<(e: Editor) => void>>([]);\n\tconst hasCalledOnReady = useRef(false);\n\t// Keep stable refs to all callbacks so useEditor receives the same function\n\t// identity on every render — prevents TipTap from re-registering event\n\t// handlers every time the parent re-renders with new inline function props.\n\tconst onReadyRef = useRef(onReady);\n\tonReadyRef.current = onReady;\n\tconst onChangeRef = useRef(onChange);\n\tonChangeRef.current = onChange;\n\tconst onSelectionChangeRef = useRef(onSelectionChange);\n\tonSelectionChangeRef.current = onSelectionChange;\n\tconst prevFormatsRef = useRef<FormatState>(DEFAULT_FORMAT_STATE);\n\tconst onFocusRef = useRef(onFocus);\n\tonFocusRef.current = onFocus;\n\tconst onBlurRef = useRef(onBlur);\n\tonBlurRef.current = onBlur;\n\tconst onSendRef = useRef(onSend);\n\tonSendRef.current = onSend;\n\tconst agentMentionsRef = useRef(mentions?.agents ?? []);\n\tagentMentionsRef.current = mentions?.agents ?? [];\n\tconst teamMentionsRef = useRef(mentions?.teams ?? []);\n\tteamMentionsRef.current = mentions?.teams ?? [];\n\tconst slashCommandsRef = useRef(slashCommands?.items ?? []);\n\tslashCommandsRef.current = slashCommands?.items ?? [];\n\n\tconst editor = useEditor({\n\t\textensions: buildExtensions({\n\t\t\tfeatures,\n\t\t\tplaceholder: props.placeholder,\n\t\t\tmaxCharacters,\n\t\t\thasSections: (sections?.length ?? 0) > 0,\n\t\t\tmentions: {\n\t\t\t\tagents: mentions ? agentMentionsRef : undefined,\n\t\t\t\tteams: mentions ? teamMentionsRef : undefined,\n\t\t\t},\n\t\t\tslashCommands: slashCommands ? slashCommandsRef : undefined,\n\t\t\tonPaste,\n\t\t\tonSend: onSend ? (snapshot) => onSendRef.current?.(snapshot) : undefined,\n\t\t\tsendShortcut,\n\t\t\tshortcuts,\n\t\t\tonMentionSelected: mentions?.onSelect,\n\t\t\tonSlashCommandSelected: slashCommands?.onSelect,\n\t\t\trenderMentionItem: mentions?.renderItem,\n\t\t\trenderMentionDropdown: mentions?.renderDropdown,\n\t\t\tremoveMentionTriggerOnDismiss: mentions?.removeTriggerOnDismiss,\n\t\t\trenderSlashCommandItem: slashCommands?.renderItem,\n\t\t\trenderSlashCommandDropdown: slashCommands?.renderDropdown,\n\t\t}),\n\t\tcontent: initialEditorContent,\n\t\teditable: !disabled,\n\t\timmediatelyRender: false, // SSR-safe — NEVER remove this\n\t\teditorProps: {\n\t\t\tattributes: {\n\t\t\t\t...(editorClassName ? { class: editorClassName } : {}),\n\t\t\t\t...(editorStyle ? { style: cssToString(editorStyle) } : {}),\n\t\t\t},\n\t\t},\n\t\tonUpdate: ({ editor: e }) => {\n\t\t\tonChangeRef.current?.(extractContent(e));\n\t\t\tif (isJsonMode) {\n\t\t\t\tconst result = parseJson(getCodeBlockText(e));\n\t\t\t\tsetJsonError(result.valid ? null : result);\n\t\t\t}\n\t\t},\n\t\tonTransaction: ({ editor: e }) => {\n\t\t\tconst next = extractActiveFormats(e);\n\t\t\tconst prev = prevFormatsRef.current;\n\t\t\tconst changed =\n\t\t\t\tprev.bold !== next.bold ||\n\t\t\t\tprev.italic !== next.italic ||\n\t\t\t\tprev.underline !== next.underline ||\n\t\t\t\tprev.strike !== next.strike ||\n\t\t\t\tprev.bulletList !== next.bulletList ||\n\t\t\t\tprev.orderedList !== next.orderedList ||\n\t\t\t\tprev.blockquote !== next.blockquote ||\n\t\t\t\tprev.codeBlock !== next.codeBlock ||\n\t\t\t\tprev.superscript !== next.superscript ||\n\t\t\t\tprev.subscript !== next.subscript ||\n\t\t\t\tprev.textAlign !== next.textAlign ||\n\t\t\t\tprev.fontFamily !== next.fontFamily ||\n\t\t\t\tprev.fontSize !== next.fontSize ||\n\t\t\t\tprev.color !== next.color ||\n\t\t\t\tprev.highlight !== next.highlight ||\n\t\t\t\tprev.link?.href !== next.link?.href;\n\t\t\tif (changed) {\n\t\t\t\tprevFormatsRef.current = next;\n\t\t\t\tonSelectionChangeRef.current?.(next);\n\t\t\t}\n\t\t},\n\t\tonFocus: () => onFocusRef.current?.(),\n\t\tonBlur: () => onBlurRef.current?.(),\n\t});\n\n\t// ── enqueue ───────────────────────────────────────────────────────────────\n\t// Run immediately if the editor is ready; otherwise defer to the queue.\n\t// Closures passed to enqueue MUST capture all parameters explicitly —\n\t// they must NOT close over `editor` (which would be null at enqueue time).\n\tfunction enqueue(op: (e: Editor) => void): void {\n\t\tif (editor) {\n\t\t\top(editor);\n\t\t} else {\n\t\t\tpendingQueue.current.push(op);\n\t\t}\n\t}\n\n\t// Flush the pending queue and fire onReady when editor transitions null → ready.\n\tuseEffect(() => {\n\t\tif (!editor) return;\n\t\tif (pendingQueue.current.length > 0) {\n\t\t\tconst queue = pendingQueue.current.splice(0);\n\t\t\tqueue.forEach((op) => op(editor));\n\t\t}\n\t\tif (!hasCalledOnReady.current) {\n\t\t\thasCalledOnReady.current = true;\n\t\t\tonReadyRef.current?.();\n\t\t}\n\t\t// Surface an error for invalid initialContent immediately on mount.\n\t\tif (isJsonMode) {\n\t\t\tconst result = parseJson(getCodeBlockText(editor));\n\t\t\tsetJsonError(result.valid ? null : result);\n\t\t}\n\t}, [editor, isJsonMode]);\n\n\tuseImperativeHandle(\n\t\tref,\n\t\t() => ({\n\t\t\t// ── Focus ────────────────────────────────────────────────────────\n\t\t\tfocus: (position) => enqueue((e) => e.commands.focus(position)),\n\t\t\tblur: () => enqueue((e) => e.commands.blur()),\n\n\t\t\t// ── Content ──────────────────────────────────────────────────────\n\t\t\tclearContent: () => enqueue((e) => e.commands.clearContent(true)),\n\t\t\tsetContent: (html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) => e.commands.setContent(normalised, { emitUpdate: true }));\n\t\t\t},\n\t\t\tinsertContent: (html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) => e.commands.insertContent(normalised));\n\t\t\t},\n\t\t\tinsertInlineContent: (html) => {\n\t\t\t\tenqueue((e) => insertInlineHtml(e, html));\n\t\t\t},\n\t\t\tinsertAtStart: (html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) => e.commands.insertContentAt(1, normalised));\n\t\t\t},\n\t\t\tinsertBlock: (html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) =>\n\t\t\t\t\te.commands.insertContentAt(e.state.doc.content.size, normalised),\n\t\t\t\t);\n\t\t\t},\n\t\t\tappendInline: (html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\t// doc.content.size is after the last </p> (block boundary).\n\t\t\t\t// Subtract 1 to land inside the last paragraph so text appends\n\t\t\t\t// inline rather than being wrapped in a new paragraph each call.\n\t\t\t\tenqueue((e) =>\n\t\t\t\t\te.commands.insertContentAt(e.state.doc.content.size - 1, normalised),\n\t\t\t\t);\n\t\t\t},\n\t\t\t// Backwards-compatible aliases\n\t\t\tinsertAtEnd(html) {\n\t\t\t\tthis.insertBlock(html);\n\t\t\t},\n\t\t\tappendContent(html) {\n\t\t\t\tthis.appendInline(html);\n\t\t\t},\n\t\t\tgetContent: () =>\n\t\t\t\teditor\n\t\t\t\t\t? extractContent(editor)\n\t\t\t\t\t: { html: '', text: '', isEmpty: true, characterCount: 0 },\n\t\t\tgetJSON: () => editor?.getJSON() ?? null,\n\t\t\tgetMentions: () => {\n\t\t\t\tconst agentIds = new Set<string>();\n\t\t\t\tconst teamIds = new Set<string>();\n\t\t\t\tif (!editor) return { agentIds: [], teamIds: [] };\n\t\t\t\teditor.state.doc.descendants((node) => {\n\t\t\t\t\tif (node.type.name === 'mentionAgent' && node.attrs['id'] != null) {\n\t\t\t\t\t\tagentIds.add(String(node.attrs['id']));\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tnode.type.name === 'mentionTeam' &&\n\t\t\t\t\t\tnode.attrs['id'] != null\n\t\t\t\t\t) {\n\t\t\t\t\t\tteamIds.add(String(node.attrs['id']));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn { agentIds: Array.from(agentIds), teamIds: Array.from(teamIds) };\n\t\t\t},\n\n\t\t\t// ── Selection ────────────────────────────────────────────────────\n\t\t\tgetCursorPosition: () => {\n\t\t\t\tif (!editor) return { from: 0, to: 0 };\n\t\t\t\tconst { from, to } = editor.state.selection;\n\t\t\t\treturn { from, to };\n\t\t\t},\n\t\t\tinsertAtPosition: (pos, html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) => e.commands.insertContentAt(pos, normalised));\n\t\t\t},\n\t\t\tgetSelectedText: () => {\n\t\t\t\tif (!editor) return '';\n\t\t\t\tconst { state } = editor;\n\t\t\t\tconst { from, to, empty } = state.selection;\n\t\t\t\tif (!empty) {\n\t\t\t\t\treturn state.doc.textBetween(from, to, ' ');\n\t\t\t\t}\n\t\t\t\t// When the cursor is inside a link with nothing selected, return the\n\t\t\t\t// full link text — useful for pre-filling a link modal's text field.\n\t\t\t\tconst linkMarkType = state.schema.marks['link'];\n\t\t\t\tif (linkMarkType) {\n\t\t\t\t\tconst range = getMarkRange(state.doc.resolve(from), linkMarkType);\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\treturn state.doc.textBetween(range.from, range.to, ' ');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t},\n\n\t\t\t// ── Character count ───────────────────────────────────────────────\n\t\t\tgetCharacterCount: () => ({\n\t\t\t\tcount:\n\t\t\t\t\teditor?.storage.characterCount?.characters?.() ??\n\t\t\t\t\teditor?.getText().length ??\n\t\t\t\t\t0,\n\t\t\t\tlimit: maxCharacters ?? null,\n\t\t\t}),\n\n\t\t\t// ── Sections ─────────────────────────────────────────────────────\n\t\t\tgetSectionContent: (sectionId) =>\n\t\t\t\teditor\n\t\t\t\t\t? extractSectionContent(editor, sectionId)\n\t\t\t\t\t: { html: '', text: '', isEmpty: true, characterCount: 0 },\n\n\t\t\tsetSectionContent: (sectionId, html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) => setSectionContentInEditor(e, sectionId, normalised));\n\t\t\t},\n\n\t\t\tfocusSection: (sectionId) => {\n\t\t\t\tenqueue((e) => {\n\t\t\t\t\tif (sectionId === 'body') {\n\t\t\t\t\t\tlet endOfBody = e.state.doc.content.size - 1;\n\t\t\t\t\t\te.state.doc.descendants((node, pos) => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tnode.type.name === 'sectionDivider' &&\n\t\t\t\t\t\t\t\tendOfBody === e.state.doc.content.size - 1\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tendOfBody = pos - 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn endOfBody === e.state.doc.content.size - 1;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (endOfBody < 1) endOfBody = 1;\n\t\t\t\t\t\te.chain().focus().setTextSelection(endOfBody).run();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet targetPos = -1;\n\t\t\t\t\te.state.doc.descendants((node, pos) => {\n\t\t\t\t\t\tif (targetPos !== -1) return false;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tnode.type.name === 'sectionDivider' &&\n\t\t\t\t\t\t\tnode.attrs['sectionId'] === sectionId\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// pos + nodeSize lands right after the divider;\n\t\t\t\t\t\t\t// +1 more puts us inside the first paragraph of that section.\n\t\t\t\t\t\t\ttargetPos = pos + node.nodeSize + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (targetPos !== -1) {\n\t\t\t\t\t\te.chain().focus().setTextSelection(targetPos).run();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tclearSection: (sectionId) => {\n\t\t\t\tenqueue((e) => setSectionContentInEditor(e, sectionId, '<p></p>'));\n\t\t\t},\n\n\t\t\t// ── Convenience body shorthands ───────────────────────────────────\n\t\t\tgetBodyContent: () =>\n\t\t\t\teditor\n\t\t\t\t\t? extractBodyContent(editor)\n\t\t\t\t\t: { html: '', text: '', isEmpty: true, characterCount: 0 },\n\t\t\tsetBodyContent: (html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) => setSectionContentInEditor(e, 'body', normalised));\n\t\t\t},\n\t\t\tsetBodyAndSections: (body, sections) => {\n\t\t\t\tconst html = buildSectionedContent(\n\t\t\t\t\tnormalizeHtml(body),\n\t\t\t\t\tsections.map((s) => ({\n\t\t\t\t\t\tid: s.id,\n\t\t\t\t\t\tcontent: normalizeHtml(s.content),\n\t\t\t\t\t})),\n\t\t\t\t);\n\t\t\t\tenqueue((e) => e.commands.setContent(html, { emitUpdate: true }));\n\t\t\t},\n\t\t\tappendBodyContent: (html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\t// findSectionEndPos returns the position of the first divider (or\n\t\t\t\t// doc.content.size), which is the block boundary after the last </p>.\n\t\t\t\t// Subtract 1 to stay inside the last paragraph so successive calls\n\t\t\t\t// append inline text rather than creating a new paragraph each time.\n\t\t\t\tenqueue((e) => {\n\t\t\t\t\tconst boundaryPos = findSectionEndPos(e, 'body');\n\t\t\t\t\te.commands.insertContentAt(boundaryPos - 1, normalised, {\n\t\t\t\t\t\tparseOptions: { preserveWhitespace: true },\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tinsertAtSectionStart: (sectionId, html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) => {\n\t\t\t\t\tconst pos = findSectionStartPos(e, sectionId);\n\t\t\t\t\tif (pos !== -1)\n\t\t\t\t\t\te.commands.insertContentAt(pos, normalised, {\n\t\t\t\t\t\t\tparseOptions: { preserveWhitespace: true },\n\t\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tinsertAtSectionEnd: (sectionId, html) => {\n\t\t\t\tconst normalised = normalizeHtml(html);\n\t\t\t\tenqueue((e) => {\n\t\t\t\t\tconst pos = findSectionEndPos(e, sectionId);\n\t\t\t\t\te.commands.insertContentAt(pos, normalised, {\n\t\t\t\t\t\tparseOptions: { preserveWhitespace: true },\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\t// ── Formats & actions ─────────────────────────────────────────────\n\t\t\tgetActiveFormats: () =>\n\t\t\t\teditor ? extractActiveFormats(editor) : DEFAULT_FORMAT_STATE,\n\t\t\tactions: {\n\t\t\t\ttoggleBold: () => editor?.chain().focus().toggleBold().run(),\n\t\t\t\ttoggleItalic: () => editor?.chain().focus().toggleItalic().run(),\n\t\t\t\ttoggleUnderline: () => editor?.chain().focus().toggleUnderline().run(),\n\t\t\t\ttoggleStrike: () => editor?.chain().focus().toggleStrike().run(),\n\t\t\t\ttoggleBulletList: () =>\n\t\t\t\t\teditor?.chain().focus().toggleBulletList().run(),\n\t\t\t\ttoggleOrderedList: () =>\n\t\t\t\t\teditor?.chain().focus().toggleOrderedList().run(),\n\t\t\t\ttoggleBlockquote: () =>\n\t\t\t\t\teditor?.chain().focus().toggleBlockquote().run(),\n\t\t\t\ttoggleCodeBlock: () => editor?.chain().focus().toggleCodeBlock().run(),\n\t\t\t\tsetTextAlign: (align) =>\n\t\t\t\t\teditor?.chain().focus().setTextAlign(align).run(),\n\t\t\t\tsetFontFamily: (font) =>\n\t\t\t\t\teditor?.chain().focus().setFontFamily(font).run(),\n\t\t\t\tsetFontSize: (size) => editor?.chain().focus().setFontSize(size).run(),\n\t\t\t\tsetColor: (color) => editor?.chain().focus().setColor(color).run(),\n\t\t\t\tsetHighlight: (color) =>\n\t\t\t\t\teditor?.chain().focus().toggleHighlight({ color }).run(),\n\t\t\t\tunsetColor: () => editor?.chain().focus().unsetColor().run(),\n\t\t\t\tunsetHighlight: () => editor?.chain().focus().unsetHighlight().run(),\n\t\t\t\tsetLink: (href, text) => {\n\t\t\t\t\tif (!editor) return;\n\t\t\t\t\tif (text !== undefined) {\n\t\t\t\t\t\teditor\n\t\t\t\t\t\t\t.chain()\n\t\t\t\t\t\t\t.focus()\n\t\t\t\t\t\t\t.extendMarkRange('link')\n\t\t\t\t\t\t\t.command(({ tr, state }) => {\n\t\t\t\t\t\t\t\tconst { from, to } = tr.selection;\n\t\t\t\t\t\t\t\tconst linkMarkType = state.schema.marks['link'];\n\t\t\t\t\t\t\t\tif (!linkMarkType) return false;\n\t\t\t\t\t\t\t\tconst linkNode = state.schema.text(text, [\n\t\t\t\t\t\t\t\t\tlinkMarkType.create({ href }),\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\tconst space = state.schema.text(' ');\n\t\t\t\t\t\t\t\ttr.replaceWith(from, to, [linkNode, space]);\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.run();\n\t\t\t\t\t} else {\n\t\t\t\t\t\teditor\n\t\t\t\t\t\t\t.chain()\n\t\t\t\t\t\t\t.focus()\n\t\t\t\t\t\t\t.extendMarkRange('link')\n\t\t\t\t\t\t\t.setLink({ href })\n\t\t\t\t\t\t\t.insertContent(' ')\n\t\t\t\t\t\t\t.run();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tupdateLink: (href) =>\n\t\t\t\t\teditor\n\t\t\t\t\t\t?.chain()\n\t\t\t\t\t\t.focus()\n\t\t\t\t\t\t.extendMarkRange('link')\n\t\t\t\t\t\t.setLink({ href })\n\t\t\t\t\t\t.run(),\n\t\t\t\tremoveLink: () =>\n\t\t\t\t\teditor?.chain().focus().extendMarkRange('link').unsetLink().run(),\n\t\t\t\tinsertEmoji: (emoji) =>\n\t\t\t\t\teditor?.chain().focus().insertContent(emoji).run(),\n\t\t\t\tinsertVariable: (variableName) =>\n\t\t\t\t\teditor?.chain().focus().insertContent(`{{${variableName}}}`).run(),\n\t\t\t\tinsertHtml: (html) =>\n\t\t\t\t\teditor?.commands.insertContent(normalizeHtml(html)),\n\t\t\t\tundo: () => editor?.chain().focus().undo().run(),\n\t\t\t\tredo: () => editor?.chain().focus().redo().run(),\n\t\t\t\tcanUndo: () => editor?.can().undo() ?? false,\n\t\t\t\tcanRedo: () => editor?.can().redo() ?? false,\n\t\t\t\ttoggleSuperscript: () =>\n\t\t\t\t\teditor?.chain().focus().toggleSuperscript().run(),\n\t\t\t\ttoggleSubscript: () => editor?.chain().focus().toggleSubscript().run(),\n\t\t\t\tinsertImage: (src) => editor?.chain().focus().setImage({ src }).run(),\n\t\t\t},\n\n\t\t\t// ── JSON body ─────────────────────────────────────────────────────\n\t\t\tjson: features?.jsonMode\n\t\t\t\t? {\n\t\t\t\t\t\tgetText: () => (editor ? getCodeBlockText(editor) : ''),\n\t\t\t\t\t\tsetText: (raw) => enqueue((e) => setCodeBlockText(e, raw)),\n\t\t\t\t\t\tparse: () => parseJson(editor ? getCodeBlockText(editor) : ''),\n\t\t\t\t\t\tisValid: () =>\n\t\t\t\t\t\t\tparseJson(editor ? getCodeBlockText(editor) : '').valid,\n\t\t\t\t\t\tformat: (indent = 2) =>\n\t\t\t\t\t\t\tenqueue((e) => {\n\t\t\t\t\t\t\t\tconst { valid, value } = parseJson(getCodeBlockText(e));\n\t\t\t\t\t\t\t\tif (!valid || value === null) return;\n\t\t\t\t\t\t\t\tsetCodeBlockText(e, JSON.stringify(value, null, indent));\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\tminify: () =>\n\t\t\t\t\t\t\tenqueue((e) => {\n\t\t\t\t\t\t\t\tconst { valid, value } = parseJson(getCodeBlockText(e));\n\t\t\t\t\t\t\t\tif (!valid || value === null) return;\n\t\t\t\t\t\t\t\tsetCodeBlockText(e, JSON.stringify(value));\n\t\t\t\t\t\t\t}),\n\t\t\t\t }\n\t\t\t\t: undefined,\n\t\t}),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[editor],\n\t);\n\n\t// ── jsonMode floating actions ────────────────────────────────────────────\n\t// Beautify pretty-prints in place (no-op / disabled while the JSON is broken);\n\t// Copy writes the raw text to the clipboard with transient feedback.\n\tconst handleJsonBeautify = () => {\n\t\tif (!editor) return;\n\t\tconst { valid, value } = parseJson(getCodeBlockText(editor));\n\t\tif (!valid || value === null) return;\n\t\tsetCodeBlockText(editor, JSON.stringify(value, null, 2));\n\t};\n\tconst handleJsonCopy = () => {\n\t\tif (!editor) return;\n\t\tvoid navigator.clipboard?.writeText(getCodeBlockText(editor));\n\t\tsetJsonCopied(true);\n\t\tsetTimeout(() => setJsonCopied(false), 1500);\n\t};\n\n\tif (!editor) return null;\n\n\treturn (\n\t\t<BikEditorShell\n\t\t\tminHeight={minHeight}\n\t\t\tmaxHeight={maxHeight}\n\t\t\ttightParagraphs={!features?.richPaste}\n\t\t\tjsonMode={isJsonMode}\n\t\t\tstyle={style}\n\t\t\tclassName={className}\n\t\t>\n\t\t\t<EditorContent editor={editor} />\n\t\t\t{isJsonMode && (\n\t\t\t\t<BikJsonActions>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={handleJsonBeautify}\n\t\t\t\t\t\tdisabled={!!jsonError}\n\t\t\t\t\t\ttitle=\"Format JSON\"\n\t\t\t\t\t\tstyle={{ padding: 8 }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<WandSparkles size={16} />\n\t\t\t\t\t\t<BodyCaption> Beautify </BodyCaption>\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={handleJsonCopy}\n\t\t\t\t\t\ttitle=\"Copy JSON\"\n\t\t\t\t\t\tstyle={{ padding: 8 }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Copy size={16} />\n\t\t\t\t\t\t{jsonCopied && <BodyCaption> Copied </BodyCaption>}\n\t\t\t\t\t</button>\n\t\t\t\t</BikJsonActions>\n\t\t\t)}\n\t\t\t<LinkBubbleMenu editor={editor} renderLinkTooltip={link?.renderTooltip} />\n\t\t\t{isJsonMode && jsonError ? (\n\t\t\t\trenderJsonError ? (\n\t\t\t\t\trenderJsonError(jsonError)\n\t\t\t\t) : (\n\t\t\t\t\t<BikJsonError>\n\t\t\t\t\t\t{jsonError.line != null && (\n\t\t\t\t\t\t\t<strong>\n\t\t\t\t\t\t\t\tLine {jsonError.line}\n\t\t\t\t\t\t\t\t{jsonError.column != null ? `, column ${jsonError.column}` : ''}\n\t\t\t\t\t\t\t\t:{' '}\n\t\t\t\t\t\t\t</strong>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{jsonError.error}\n\t\t\t\t\t</BikJsonError>\n\t\t\t\t)\n\t\t\t) : null}\n\t\t</BikEditorShell>\n\t);\n};\n\nexport const BikEditor = forwardRef<BikEditorRef, BikEditorProps>(\n\tBikEditorInner,\n);\nBikEditor.displayName = 'BikEditor';\n"],"names":["cssToString","style","k","v","c","BikEditorInner","props","ref","initialContent","sections","features","disabled","maxCharacters","shortcuts","sendShortcut","mentions","slashCommands","link","onPaste","onReady","onChange","onSend","onFocus","onBlur","onSelectionChange","minHeight","maxHeight","className","editorClassName","editorStyle","renderJsonError","isJsonMode","jsonError","setJsonError","useState","jsonCopied","setJsonCopied","initialEditorContent","buildJsonCodeBlockHtml","buildSectionedContent","normalizeHtml","s","pendingQueue","useRef","hasCalledOnReady","onReadyRef","onChangeRef","onSelectionChangeRef","prevFormatsRef","DEFAULT_FORMAT_STATE","onFocusRef","onBlurRef","onSendRef","agentMentionsRef","teamMentionsRef","slashCommandsRef","editor","useEditor","buildExtensions","snapshot","extractContent","result","parseJson","getCodeBlockText","next","extractActiveFormats","prev","enqueue","op","useEffect","useImperativeHandle","position","e","html","normalised","insertInlineHtml","agentIds","teamIds","node","from","to","pos","state","empty","linkMarkType","range","getMarkRange","sectionId","extractSectionContent","setSectionContentInEditor","endOfBody","targetPos","extractBodyContent","body","boundaryPos","findSectionEndPos","findSectionStartPos","align","font","size","color","href","text","tr","linkNode","space","emoji","variableName","src","raw","setCodeBlockText","indent","valid","value","handleJsonBeautify","handleJsonCopy","jsxs","BikEditorShell","jsx","EditorContent","BikJsonActions","WandSparkles","BodyCaption","Copy","LinkBubbleMenu","BikJsonError","BikEditor","forwardRef"],"mappings":"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"}