@bikdotai/bik-component-library 0.0.850-beta.1 → 0.0.850-beta.3

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 (191) hide show
  1. package/dist/cjs/assets/icons/ShipStation.svg.js +1 -1
  2. package/dist/cjs/assets/icons/ShipStation.svg.js.map +1 -1
  3. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js +14 -8
  4. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  5. package/dist/cjs/components/agent-builder/components/ConfigToolPanel.js +1 -1
  6. package/dist/cjs/components/agent-builder/components/ConfigToolPanel.js.map +1 -1
  7. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js +5 -5
  8. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  9. package/dist/cjs/components/agent-builder/components/DiscardModal.js +1 -1
  10. package/dist/cjs/components/agent-builder/components/DiscardModal.js.map +1 -1
  11. package/dist/cjs/components/agent-builder/components/GoLiveModal.js +1 -1
  12. package/dist/cjs/components/agent-builder/components/GoLiveModal.js.map +1 -1
  13. package/dist/cjs/components/agent-builder/components/MentionEditor.js +1 -1
  14. package/dist/cjs/components/agent-builder/components/MentionEditor.js.map +1 -1
  15. package/dist/cjs/components/agent-builder/components/MentionPicker.js +32 -24
  16. package/dist/cjs/components/agent-builder/components/MentionPicker.js.map +1 -1
  17. package/dist/cjs/components/agent-builder/components/RestApiToolPanel.js +4 -4
  18. package/dist/cjs/components/agent-builder/components/RestApiToolPanel.js.map +1 -1
  19. package/dist/cjs/components/agent-builder/components/SelectableListSection.js +2 -2
  20. package/dist/cjs/components/agent-builder/components/SelectableListSection.js.map +1 -1
  21. package/dist/cjs/components/agent-builder/constants/tools.js +1 -1
  22. package/dist/cjs/components/agent-builder/constants/tools.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/Step3HowItResponds.js +1 -1
  26. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  27. package/dist/cjs/components/agent-builder/utils/mentionSerialization.js +2 -2
  28. package/dist/cjs/components/agent-builder/utils/mentionSerialization.js.map +1 -1
  29. package/dist/cjs/components/agent-builder/utils/sourceIcons.js +1 -1
  30. package/dist/cjs/components/agent-builder/utils/sourceIcons.js.map +1 -1
  31. package/dist/cjs/components/agent-listing/AgentListing.js +1 -1
  32. package/dist/cjs/components/agent-listing/AgentListing.js.map +1 -1
  33. package/dist/cjs/components/agent-listing/AgentTable.js +1 -1
  34. package/dist/cjs/components/agent-listing/AgentTable.js.map +1 -1
  35. package/dist/cjs/components/agent-listing/AgentTableRow.js +1 -1
  36. package/dist/cjs/components/agent-listing/AgentTableRow.js.map +1 -1
  37. package/dist/cjs/components/bik-layout/CommonStyles.js +6 -4
  38. package/dist/cjs/components/bik-layout/CommonStyles.js.map +1 -1
  39. package/dist/cjs/components/button/themes.js +3 -3
  40. package/dist/cjs/components/button/themes.js.map +1 -1
  41. package/dist/cjs/components/datePicker/DatePicker.js +1 -1
  42. package/dist/cjs/components/datePicker/DatePicker.js.map +1 -1
  43. package/dist/cjs/components/datePicker/DatePicker.styled.js +14 -20
  44. package/dist/cjs/components/datePicker/DatePicker.styled.js.map +1 -1
  45. package/dist/cjs/components/dropdown/ChipInput.js +1 -1
  46. package/dist/cjs/components/dropdown/ChipInput.js.map +1 -1
  47. package/dist/cjs/components/dropdown/Common.styled.js +5 -6
  48. package/dist/cjs/components/dropdown/Common.styled.js.map +1 -1
  49. package/dist/cjs/components/dropdown/Dropdown.js +1 -1
  50. package/dist/cjs/components/dropdown/Dropdown.js.map +1 -1
  51. package/dist/cjs/components/dropdown/OpenedDropdown/components/OpennedDropdown.js +1 -1
  52. package/dist/cjs/components/dropdown/OpenedDropdown/components/OpennedDropdown.js.map +1 -1
  53. package/dist/cjs/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js +1 -1
  54. package/dist/cjs/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js.map +1 -1
  55. package/dist/cjs/components/input/Input.js +1 -1
  56. package/dist/cjs/components/input/Input.js.map +1 -1
  57. package/dist/cjs/components/input/Input.styled.js +12 -25
  58. package/dist/cjs/components/input/Input.styled.js.map +1 -1
  59. package/dist/cjs/components/tabs/Tabs.js +1 -1
  60. package/dist/cjs/components/tabs/Tabs.js.map +1 -1
  61. package/dist/cjs/components/tabs/Tabs.styles.js +8 -22
  62. package/dist/cjs/components/tabs/Tabs.styles.js.map +1 -1
  63. package/dist/cjs/components/tag/Tag.js +1 -1
  64. package/dist/cjs/components/tag/Tag.js.map +1 -1
  65. package/dist/cjs/components/tag/Tag.styled.js +0 -4
  66. package/dist/cjs/components/tag/Tag.styled.js.map +1 -1
  67. package/dist/cjs/components/tag/model.js.map +1 -1
  68. package/dist/cjs/editor/BikEditor.js +1 -1
  69. package/dist/cjs/editor/BikEditor.js.map +1 -1
  70. package/dist/cjs/editor/BikEditor.styles.js +21 -16
  71. package/dist/cjs/editor/BikEditor.styles.js.map +1 -1
  72. package/dist/cjs/editor/BikEditor.types.js.map +1 -1
  73. package/dist/cjs/editor/extensions/buildExtensions.js +2 -2
  74. package/dist/cjs/editor/extensions/buildExtensions.js.map +1 -1
  75. package/dist/cjs/editor/extensions/characterLimit/CharacterLimitExtension.js +3 -3
  76. package/dist/cjs/editor/extensions/characterLimit/CharacterLimitExtension.js.map +1 -1
  77. package/dist/cjs/editor/extensions/mention/MentionChipNodeView.js +2 -0
  78. package/dist/cjs/editor/extensions/mention/MentionChipNodeView.js.map +1 -0
  79. package/dist/cjs/editor/extensions/mention/MentionExtension.js +1 -1
  80. package/dist/cjs/editor/extensions/mention/MentionExtension.js.map +1 -1
  81. package/dist/cjs/index.js +1 -1
  82. package/dist/esm/assets/icons/ShipStation.svg.js +2 -2
  83. package/dist/esm/assets/icons/ShipStation.svg.js.map +1 -1
  84. package/dist/esm/assets/icons/index.d.ts +1 -0
  85. package/dist/esm/components/agent-builder/AgentBuilder.styled.js +21 -15
  86. package/dist/esm/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  87. package/dist/esm/components/agent-builder/components/ConfigToolPanel.js +1 -1
  88. package/dist/esm/components/agent-builder/components/ConfigToolPanel.js.map +1 -1
  89. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.d.ts +5 -0
  90. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js +243 -227
  91. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  92. package/dist/esm/components/agent-builder/components/DiscardModal.js +57 -49
  93. package/dist/esm/components/agent-builder/components/DiscardModal.js.map +1 -1
  94. package/dist/esm/components/agent-builder/components/GoLiveModal.js +26 -22
  95. package/dist/esm/components/agent-builder/components/GoLiveModal.js.map +1 -1
  96. package/dist/esm/components/agent-builder/components/MentionEditor.d.ts +1 -1
  97. package/dist/esm/components/agent-builder/components/MentionEditor.js +93 -77
  98. package/dist/esm/components/agent-builder/components/MentionEditor.js.map +1 -1
  99. package/dist/esm/components/agent-builder/components/MentionPicker.js +194 -168
  100. package/dist/esm/components/agent-builder/components/MentionPicker.js.map +1 -1
  101. package/dist/esm/components/agent-builder/components/RestApiToolPanel.js +118 -109
  102. package/dist/esm/components/agent-builder/components/RestApiToolPanel.js.map +1 -1
  103. package/dist/esm/components/agent-builder/components/SelectableListSection.js +117 -110
  104. package/dist/esm/components/agent-builder/components/SelectableListSection.js.map +1 -1
  105. package/dist/esm/components/agent-builder/constants/tools.d.ts +10 -0
  106. package/dist/esm/components/agent-builder/constants/tools.js +27 -14
  107. package/dist/esm/components/agent-builder/constants/tools.js.map +1 -1
  108. package/dist/esm/components/agent-builder/context/AgentBuilderContext.d.ts +6 -2
  109. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js +46 -43
  110. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  111. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js +132 -117
  112. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  113. package/dist/esm/components/agent-builder/utils/mentionSerialization.d.ts +3 -2
  114. package/dist/esm/components/agent-builder/utils/mentionSerialization.js +24 -19
  115. package/dist/esm/components/agent-builder/utils/mentionSerialization.js.map +1 -1
  116. package/dist/esm/components/agent-builder/utils/sourceIcons.d.ts +9 -1
  117. package/dist/esm/components/agent-builder/utils/sourceIcons.js +15 -9
  118. package/dist/esm/components/agent-builder/utils/sourceIcons.js.map +1 -1
  119. package/dist/esm/components/agent-listing/AgentListing.js +71 -69
  120. package/dist/esm/components/agent-listing/AgentListing.js.map +1 -1
  121. package/dist/esm/components/agent-listing/AgentListing.model.d.ts +6 -0
  122. package/dist/esm/components/agent-listing/AgentTable.d.ts +2 -0
  123. package/dist/esm/components/agent-listing/AgentTable.js +29 -27
  124. package/dist/esm/components/agent-listing/AgentTable.js.map +1 -1
  125. package/dist/esm/components/agent-listing/AgentTableRow.d.ts +2 -0
  126. package/dist/esm/components/agent-listing/AgentTableRow.js +50 -36
  127. package/dist/esm/components/agent-listing/AgentTableRow.js.map +1 -1
  128. package/dist/esm/components/bik-layout/CommonStyles.js +3 -1
  129. package/dist/esm/components/bik-layout/CommonStyles.js.map +1 -1
  130. package/dist/esm/components/button/themes.js +1 -1
  131. package/dist/esm/components/button/themes.js.map +1 -1
  132. package/dist/esm/components/datePicker/DatePicker.js +21 -22
  133. package/dist/esm/components/datePicker/DatePicker.js.map +1 -1
  134. package/dist/esm/components/datePicker/DatePicker.styled.d.ts +0 -10
  135. package/dist/esm/components/datePicker/DatePicker.styled.js +16 -23
  136. package/dist/esm/components/datePicker/DatePicker.styled.js.map +1 -1
  137. package/dist/esm/components/dropdown/ChipInput.d.ts +0 -1
  138. package/dist/esm/components/dropdown/ChipInput.js +30 -37
  139. package/dist/esm/components/dropdown/ChipInput.js.map +1 -1
  140. package/dist/esm/components/dropdown/Common.styled.js +6 -7
  141. package/dist/esm/components/dropdown/Common.styled.js.map +1 -1
  142. package/dist/esm/components/dropdown/Dropdown.d.ts +0 -2
  143. package/dist/esm/components/dropdown/Dropdown.js +89 -96
  144. package/dist/esm/components/dropdown/Dropdown.js.map +1 -1
  145. package/dist/esm/components/dropdown/OpenedDropdown/components/OpennedDropdown.js +95 -103
  146. package/dist/esm/components/dropdown/OpenedDropdown/components/OpennedDropdown.js.map +1 -1
  147. package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.d.ts +0 -1
  148. package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js +17 -17
  149. package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js.map +1 -1
  150. package/dist/esm/components/dropdown/type.d.ts +0 -2
  151. package/dist/esm/components/input/Input.js +101 -104
  152. package/dist/esm/components/input/Input.js.map +1 -1
  153. package/dist/esm/components/input/Input.model.d.ts +0 -2
  154. package/dist/esm/components/input/Input.styled.d.ts +0 -2
  155. package/dist/esm/components/input/Input.styled.js +25 -38
  156. package/dist/esm/components/input/Input.styled.js.map +1 -1
  157. package/dist/esm/components/tabs/Tabs.js +81 -103
  158. package/dist/esm/components/tabs/Tabs.js.map +1 -1
  159. package/dist/esm/components/tabs/Tabs.model.d.ts +0 -7
  160. package/dist/esm/components/tabs/Tabs.styles.d.ts +0 -2
  161. package/dist/esm/components/tabs/Tabs.styles.js +9 -23
  162. package/dist/esm/components/tabs/Tabs.styles.js.map +1 -1
  163. package/dist/esm/components/tag/Tag.d.ts +1 -1
  164. package/dist/esm/components/tag/Tag.js +15 -17
  165. package/dist/esm/components/tag/Tag.js.map +1 -1
  166. package/dist/esm/components/tag/Tag.styled.d.ts +0 -1
  167. package/dist/esm/components/tag/Tag.styled.js +6 -10
  168. package/dist/esm/components/tag/Tag.styled.js.map +1 -1
  169. package/dist/esm/components/tag/model.d.ts +0 -5
  170. package/dist/esm/components/tag/model.js.map +1 -1
  171. package/dist/esm/editor/BikEditor.js +129 -126
  172. package/dist/esm/editor/BikEditor.js.map +1 -1
  173. package/dist/esm/editor/BikEditor.styles.js +24 -19
  174. package/dist/esm/editor/BikEditor.styles.js.map +1 -1
  175. package/dist/esm/editor/BikEditor.types.d.ts +17 -0
  176. package/dist/esm/editor/BikEditor.types.js.map +1 -1
  177. package/dist/esm/editor/extensions/buildExtensions.d.ts +7 -0
  178. package/dist/esm/editor/extensions/buildExtensions.js +30 -24
  179. package/dist/esm/editor/extensions/buildExtensions.js.map +1 -1
  180. package/dist/esm/editor/extensions/characterLimit/CharacterLimitExtension.d.ts +20 -3
  181. package/dist/esm/editor/extensions/characterLimit/CharacterLimitExtension.js +40 -25
  182. package/dist/esm/editor/extensions/characterLimit/CharacterLimitExtension.js.map +1 -1
  183. package/dist/esm/editor/extensions/mention/MentionChipNodeView.d.ts +17 -0
  184. package/dist/esm/editor/extensions/mention/MentionChipNodeView.js +39 -0
  185. package/dist/esm/editor/extensions/mention/MentionChipNodeView.js.map +1 -0
  186. package/dist/esm/editor/extensions/mention/MentionExtension.d.ts +1 -1
  187. package/dist/esm/editor/extensions/mention/MentionExtension.js +67 -45
  188. package/dist/esm/editor/extensions/mention/MentionExtension.js.map +1 -1
  189. package/dist/esm/index.js +761 -759
  190. package/dist/esm/index.js.map +1 -1
  191. package/package.json +1 -1
@@ -1,22 +1,8 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("styled-components"),t=require("../../constants/Theme.js"),i=require("../TypographyStyle.js"),d=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},o=d(r),a=o.default.div`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("styled-components"),t=require("../../constants/Theme.js"),d=require("../TypographyStyle.js"),i=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},o=i(r),a=o.default.div`
2
2
  display: flex;
3
3
  flex-direction: row;
4
4
  background-color: ${e=>e.bgColor};
5
- ${e=>e.tabGap?`
6
- gap: ${e.tabGap}px;
7
- position: relative;
8
- &::after {
9
- content: '';
10
- position: absolute;
11
- bottom: 0;
12
- left: 0;
13
- right: 0;
14
- height: 1px;
15
- background: ${t.DEFAULT_THEME.colorsV2.background.inactive};
16
- z-index: -1;
17
- }
18
- `:""}
19
- `,n=o.default.div`
5
+ `,l=o.default.div`
20
6
  display: flex;
21
7
  flex-direction: row;
22
8
  column-gap: 8px;
@@ -25,8 +11,8 @@
25
11
  align-items: center;
26
12
  justify-content: center;
27
13
  width: ${e=>e.hasEqualSpacing?"50%":"auto"};
28
- border-bottom-color: ${e=>e.isSquared?"":e.selected?e.selectedTextColor:e.uniformBorder?"transparent":t.DEFAULT_THEME.colorsV2.background.inactive};
29
- border-bottom-width: ${e=>e.isSquared?"":e.selected||e.uniformBorder?"2px":"1px"};
14
+ border-bottom-color: ${e=>e.isSquared?"":e.selected?e.selectedTextColor:t.DEFAULT_THEME.colorsV2.background.inactive};
15
+ border-bottom-width: ${e=>e.isSquared?"":e.selected?"2px":"1px"};
30
16
  border-bottom-style: ${e=>e.isSquared?"":"solid"};
31
17
  border: ${e=>e.isSquared?e.selected?`1px solid ${e.selectedTextColor}`:`1px solid ${t.DEFAULT_THEME.colorsV2.background.inactive}`:""};
32
18
  flex-direction: row;
@@ -36,7 +22,7 @@
36
22
  background-color: rgba(0, 0, 0, 0.03);
37
23
  }
38
24
  background-color: ${e=>e.isSquared&&e.selected?`${t.DEFAULT_THEME.colorsV2.background.brandLight}`:""};
39
- `,c=o.default.div`
25
+ `,n=o.default.div`
40
26
  display: flex;
41
27
  flex-direction: row;
42
28
  align-items: center;
@@ -44,10 +30,10 @@
44
30
  justify-content: center;
45
31
  min-width: 20px;
46
32
  height: 20px;
47
- background: ${e=>e.selected?e.selectedBackground??t.DEFAULT_THEME.colorsV2.background.inverseLight:t.DEFAULT_THEME.colorsV2.content.secondary};
33
+ background: ${e=>e.selected?t.DEFAULT_THEME.colorsV2.background.inverseLight:t.DEFAULT_THEME.colorsV2.content.secondary};
48
34
  color: ${t.DEFAULT_THEME.colorsV2.content.primaryInverse};
49
35
  border-radius: 10px;
50
- `,l=o.default(i.ButtonLarge)`
36
+ `,c=o.default(d.ButtonLarge)`
51
37
  color: ${e=>e.selected?e.selectedTextColor:e.textColor};
52
38
  `,s=o.default.div`
53
39
  flex-grow: 1;
@@ -56,5 +42,5 @@
56
42
  display: flex;
57
43
  align-items: center;
58
44
  border-bottom: 1px solid ${t.DEFAULT_THEME.colorsV2.background.inactive};
59
- `;exports.EmptyTab=s;exports.RightComponent=u;exports.TabHeader=a;exports.TabItem=n;exports.TabItemText=l;exports.TrailingNumberContainer=c;
45
+ `;exports.EmptyTab=s;exports.RightComponent=u;exports.TabHeader=a;exports.TabItem=l;exports.TabItemText=c;exports.TrailingNumberContainer=n;
60
46
  //# sourceMappingURL=Tabs.styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.styles.js","sources":["../../../../src/components/tabs/Tabs.styles.tsx"],"sourcesContent":["import styled from 'styled-components';\nimport { DEFAULT_THEME } from '@src/constants/Theme';\nimport { ButtonLarge } from '../TypographyStyle';\nimport { TabItemProps, TabItemTextProps } from './Tabs.model';\n\nexport const TabHeader = styled.div<{ bgColor?: string; tabGap?: number }>`\n\tdisplay: flex;\n\tflex-direction: row;\n\tbackground-color: ${(props) => props.bgColor};\n\t${(props) =>\n\t\tprops.tabGap\n\t\t\t? `\n\t\tgap: ${props.tabGap}px;\n\t\tposition: relative;\n\t\t&::after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\tbottom: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\theight: 1px;\n\t\t\tbackground: ${DEFAULT_THEME.colorsV2.background.inactive};\n\t\t\tz-index: -1;\n\t\t}\n\t`\n\t\t\t: ''}\n`;\n\nexport const TabItem = styled.div<TabItemProps>`\n\tdisplay: flex;\n\tflex-direction: row;\n\tcolumn-gap: 8px;\n\tpadding: ${(props) => (props.isSquared ? '8px 24px' : '14px 24px 12px 24px')};\n\tpadding-bottom: ${(props) =>\n\t\tprops.isSquared ? '' : props.selected ? '12px' : '13px'};\n\talign-items: center;\n\tjustify-content: center;\n\twidth: ${(props) => (props.hasEqualSpacing ? '50%' : 'auto')};\n\tborder-bottom-color: ${(props) =>\n\t\tprops.isSquared\n\t\t\t? ''\n\t\t\t: props.selected\n\t\t\t? props.selectedTextColor\n\t\t\t: props.uniformBorder\n\t\t\t? 'transparent'\n\t\t\t: DEFAULT_THEME.colorsV2.background.inactive};\n\tborder-bottom-width: ${(props) =>\n\t\tprops.isSquared\n\t\t\t? ''\n\t\t\t: props.selected || props.uniformBorder\n\t\t\t? '2px'\n\t\t\t: '1px'};\n\tborder-bottom-style: ${(props) => (props.isSquared ? '' : 'solid')};\n\tborder: ${(props) =>\n\t\tprops.isSquared\n\t\t\t? props.selected\n\t\t\t\t? `1px solid ${props.selectedTextColor}`\n\t\t\t\t: `1px solid ${DEFAULT_THEME.colorsV2.background.inactive}`\n\t\t\t: ''};\n\tflex-direction: row;\n\tcursor: pointer;\n\tmin-width: ${(props) => (props.isSquared ? '120px' : '')};\n\t&:hover {\n\t\tbackground-color: rgba(0, 0, 0, 0.03);\n\t}\n\tbackground-color: ${(props) =>\n\t\tprops.isSquared\n\t\t\t? props.selected\n\t\t\t\t? `${DEFAULT_THEME.colorsV2.background.brandLight}`\n\t\t\t\t: ''\n\t\t\t: ''};\n`;\n\nexport const TrailingNumberContainer = styled.div<{\n\tselected: boolean;\n\tselectedBackground?: string;\n}>`\n\tdisplay: flex;\n\tflex-direction: row;\n\talign-items: center;\n\tgap: 6px;\n\tjustify-content: center;\n\tmin-width: 20px;\n\theight: 20px;\n\tbackground: ${(props) =>\n\t\tprops.selected\n\t\t\t? props.selectedBackground ??\n\t\t\t DEFAULT_THEME.colorsV2.background.inverseLight\n\t\t\t: DEFAULT_THEME.colorsV2.content.secondary};\n\tcolor: ${DEFAULT_THEME.colorsV2.content.primaryInverse};\n\tborder-radius: 10px;\n`;\n\nexport const TabItemText = styled(ButtonLarge)<TabItemTextProps>`\n\tcolor: ${(props) =>\n\t\tprops.selected ? props.selectedTextColor : props.textColor};\n`;\n\nexport const EmptyTab = styled.div`\n\tflex-grow: 1;\n\tborder-bottom: 1px solid ${DEFAULT_THEME.colorsV2.background.inactive};\n`;\n\nexport const RightComponent = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tborder-bottom: 1px solid ${DEFAULT_THEME.colorsV2.background.inactive};\n`;\n"],"names":["TabHeader","styled","props","DEFAULT_THEME","TabItem","TrailingNumberContainer","TabItemText","ButtonLarge","EmptyTab","RightComponent"],"mappings":"6PAKaA,EAAYC,EAAAA,QAAO;AAAA;AAAA;AAAA,qBAGVC,GAAUA,EAAM,OAAO;AAAA,GACzCA,GACFA,EAAM,OACH;AAAA,SACIA,EAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBASJC,gBAAc,SAAS,WAAW,QAAQ;AAAA;AAAA;AAAA,GAItD,EAAE;AAAA,EAGMC,EAAUH,EAAAA,QAAO;AAAA;AAAA;AAAA;AAAA,YAIjBC,GAAWA,EAAM,UAAY,WAAa,qBAAsB;AAAA,mBACzDA,GAClBA,EAAM,UAAY,GAAKA,EAAM,SAAW,OAAS,MAAM;AAAA;AAAA;AAAA,UAG9CA,GAAWA,EAAM,gBAAkB,MAAQ,MAAO;AAAA,wBACpCA,GACvBA,EAAM,UACH,GACAA,EAAM,SACNA,EAAM,kBACNA,EAAM,cACN,cACAC,EAAAA,cAAc,SAAS,WAAW,QAAQ;AAAA,wBACtBD,GACvBA,EAAM,UACH,GACAA,EAAM,UAAYA,EAAM,cACxB,MACA,KAAK;AAAA,wBACeA,GAAWA,EAAM,UAAY,GAAK,OAAQ;AAAA,WACvDA,GACVA,EAAM,UACHA,EAAM,SACL,aAAaA,EAAM,iBAAiB,GACpC,aAAaC,gBAAc,SAAS,WAAW,QAAQ,GACxD,EAAE;AAAA;AAAA;AAAA,cAGQD,GAAWA,EAAM,UAAY,QAAU,EAAG;AAAA;AAAA;AAAA;AAAA,qBAInCA,GACpBA,EAAM,WACHA,EAAM,SACL,GAAGC,EAAAA,cAAc,SAAS,WAAW,UAAU,GAEhD,EAAE;AAAA,EAGME,EAA0BJ,EAAAA,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAW9BC,GACdA,EAAM,SACHA,EAAM,oBACNC,EAAAA,cAAc,SAAS,WAAW,aAClCA,EAAAA,cAAc,SAAS,QAAQ,SAAS;AAAA,UACnCA,gBAAc,SAAS,QAAQ,cAAc;AAAA;AAAA,EAI1CG,EAAcL,EAAAA,QAAOM,aAAW;AAAA,UAClCL,GACTA,EAAM,SAAWA,EAAM,kBAAoBA,EAAM,SAAS;AAAA,EAG/CM,EAAWP,EAAAA,QAAO;AAAA;AAAA,4BAEHE,gBAAc,SAAS,WAAW,QAAQ;AAAA,EAGzDM,EAAiBR,EAAAA,QAAO;AAAA;AAAA;AAAA,4BAGTE,gBAAc,SAAS,WAAW,QAAQ;AAAA"}
1
+ {"version":3,"file":"Tabs.styles.js","sources":["../../../../src/components/tabs/Tabs.styles.tsx"],"sourcesContent":["import styled from 'styled-components';\nimport { DEFAULT_THEME } from '@src/constants/Theme';\nimport { ButtonLarge } from '../TypographyStyle';\nimport { TabItemProps, TabItemTextProps } from './Tabs.model';\n\nexport const TabHeader = styled.div<{ bgColor?: string }>`\n\tdisplay: flex;\n\tflex-direction: row;\n\tbackground-color: ${(props) => props.bgColor};\n`;\n\nexport const TabItem = styled.div<TabItemProps>`\n\tdisplay: flex;\n\tflex-direction: row;\n\tcolumn-gap: 8px;\n\tpadding: ${(props) => (props.isSquared ? '8px 24px' : '14px 24px 12px 24px')};\n\tpadding-bottom: ${(props) =>\n\t\tprops.isSquared ? '' : props.selected ? '12px' : '13px'};\n\talign-items: center;\n\tjustify-content: center;\n\twidth: ${(props) => (props.hasEqualSpacing ? '50%' : 'auto')};\n\tborder-bottom-color: ${(props) =>\n\t\tprops.isSquared\n\t\t\t? ''\n\t\t\t: props.selected\n\t\t\t? props.selectedTextColor\n\t\t\t: DEFAULT_THEME.colorsV2.background.inactive};\n\tborder-bottom-width: ${(props) =>\n\t\tprops.isSquared ? '' : props.selected ? '2px' : '1px'};\n\tborder-bottom-style: ${(props) => (props.isSquared ? '' : 'solid')};\n\tborder: ${(props) =>\n\t\tprops.isSquared\n\t\t\t? props.selected\n\t\t\t\t? `1px solid ${props.selectedTextColor}`\n\t\t\t\t: `1px solid ${DEFAULT_THEME.colorsV2.background.inactive}`\n\t\t\t: ''};\n\tflex-direction: row;\n\tcursor: pointer;\n\tmin-width: ${(props) => (props.isSquared ? '120px' : '')};\n\t&:hover {\n\t\tbackground-color: rgba(0, 0, 0, 0.03);\n\t}\n\tbackground-color: ${(props) =>\n\t\tprops.isSquared\n\t\t\t? props.selected\n\t\t\t\t? `${DEFAULT_THEME.colorsV2.background.brandLight}`\n\t\t\t\t: ''\n\t\t\t: ''};\n`;\n\nexport const TrailingNumberContainer = styled.div<{\n\tselected: boolean;\n}>`\n\tdisplay: flex;\n\tflex-direction: row;\n\talign-items: center;\n\tgap: 6px;\n\tjustify-content: center;\n\tmin-width: 20px;\n\theight: 20px;\n\tbackground: ${(props) =>\n\t\tprops.selected\n\t\t\t? DEFAULT_THEME.colorsV2.background.inverseLight\n\t\t\t: DEFAULT_THEME.colorsV2.content.secondary};\n\tcolor: ${DEFAULT_THEME.colorsV2.content.primaryInverse};\n\tborder-radius: 10px;\n`;\n\nexport const TabItemText = styled(ButtonLarge)<TabItemTextProps>`\n\tcolor: ${(props) =>\n\t\tprops.selected ? props.selectedTextColor : props.textColor};\n`;\n\nexport const EmptyTab = styled.div`\n\tflex-grow: 1;\n\tborder-bottom: 1px solid ${DEFAULT_THEME.colorsV2.background.inactive};\n`;\n\nexport const RightComponent = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tborder-bottom: 1px solid ${DEFAULT_THEME.colorsV2.background.inactive};\n`;\n"],"names":["TabHeader","styled","props","TabItem","DEFAULT_THEME","TrailingNumberContainer","TabItemText","ButtonLarge","EmptyTab","RightComponent"],"mappings":"6PAKaA,EAAYC,EAAAA,QAAO;AAAA;AAAA;AAAA,qBAGVC,GAAUA,EAAM,OAAO;AAAA,EAGhCC,EAAUF,EAAAA,QAAO;AAAA;AAAA;AAAA;AAAA,YAIjBC,GAAWA,EAAM,UAAY,WAAa,qBAAsB;AAAA,mBACzDA,GAClBA,EAAM,UAAY,GAAKA,EAAM,SAAW,OAAS,MAAM;AAAA;AAAA;AAAA,UAG9CA,GAAWA,EAAM,gBAAkB,MAAQ,MAAO;AAAA,wBACpCA,GACvBA,EAAM,UACH,GACAA,EAAM,SACNA,EAAM,kBACNE,EAAAA,cAAc,SAAS,WAAW,QAAQ;AAAA,wBACtBF,GACvBA,EAAM,UAAY,GAAKA,EAAM,SAAW,MAAQ,KAAK;AAAA,wBAC9BA,GAAWA,EAAM,UAAY,GAAK,OAAQ;AAAA,WACvDA,GACVA,EAAM,UACHA,EAAM,SACL,aAAaA,EAAM,iBAAiB,GACpC,aAAaE,gBAAc,SAAS,WAAW,QAAQ,GACxD,EAAE;AAAA;AAAA;AAAA,cAGQF,GAAWA,EAAM,UAAY,QAAU,EAAG;AAAA;AAAA;AAAA;AAAA,qBAInCA,GACpBA,EAAM,WACHA,EAAM,SACL,GAAGE,EAAAA,cAAc,SAAS,WAAW,UAAU,GAEhD,EAAE;AAAA,EAGMC,EAA0BJ,EAAAA,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAU9BC,GACdA,EAAM,SACHE,EAAAA,cAAc,SAAS,WAAW,aAClCA,EAAAA,cAAc,SAAS,QAAQ,SAAS;AAAA,UACnCA,gBAAc,SAAS,QAAQ,cAAc;AAAA;AAAA,EAI1CE,EAAcL,EAAAA,QAAOM,aAAW;AAAA,UAClCL,GACTA,EAAM,SAAWA,EAAM,kBAAoBA,EAAM,SAAS;AAAA,EAG/CM,EAAWP,EAAAA,QAAO;AAAA;AAAA,4BAEHG,gBAAc,SAAS,WAAW,QAAQ;AAAA,EAGzDK,EAAiBR,EAAAA,QAAO;AAAA;AAAA;AAAA,4BAGTG,gBAAc,SAAS,WAAW,QAAQ;AAAA"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),D=require("react"),B=require("../tooltips/Tooltip.js"),r=require("../TypographyStyle.js"),V=require("./model.js"),v=require("./Tag.styled.js"),F=require("./themes.js"),G=o=>o&&typeof o=="object"&&"default"in o?o:{default:o},h=G(D),C=({tagText:o,LeadingIcon:u,TrailingIcon:j,onLeadingIconClicked:m=void 0,leadingIconId:s,trailingIconId:d,onTrailingIconClicked:T=void 0,theme:n="light",type:p="neutral",variant:c="regular",version:f,cursor:q,alignIcon:A,noBorder:E,tagHtmlText:a,contentPadding:_,padding:$,height:k,leadingIconTooltip:g,trailingIconTooltip:N,tagColor:w,numberOfLines:l,backgroundColor:R,borderRadius:S,size:t="regular",hoverBackgroundColor:b})=>{let i=o;const M=n;let x=p;V.ValidTagTypeMap[c][p]||(x="neutral"),c==="circle"&&typeof i=="number"&&i>99&&(i="99+");const P=F.getTagIconColor(n,x),y={height:c==="compressed"?12:16,width:c==="compressed"?12:16,color:P,style:{display:"block"}};return e.jsx(v.Tag,{cursor:q,theme:M,type:x,variant:c,version:f,alignIcon:A,noBorder:E,contentPadding:_,padding:$,height:k,backgroundColor:R,borderRadius:S,size:t,hoverBackgroundColor:b,children:e.jsxs("div",{className:"container",children:[u&&(g?e.jsx(B.Tooltip,{...g,children:e.jsx("button",{className:"icon-leading",onClick:m,id:`${s}-wrapper`||"leading-icon-wrapper",children:h.default.createElement(u,{...y,id:s||"leading-icon"})})}):e.jsx("button",{className:"icon-leading",onClick:m,id:`${s}-wrapper`||"leading-icon-wrapper",children:h.default.createElement(u,{...y,id:s||"leading-icon"})})),a&&(p==="ai"&&n==="light"?t==="small"?e.jsx(r.AiBodyTiny,{numberOfLines:l,children:a}):e.jsx(r.AiBodyCaption,{numberOfLines:l,children:a}):t==="small"?e.jsx(r.BodyTiny,{className:"text",numberOfLines:l,children:a}):e.jsx(r.BodyCaption,{className:"text",numberOfLines:l,children:a})),!a&&i!==""&&(p==="ai"&&n==="light"?t==="small"?e.jsx(r.AiBodyTiny,{numberOfLines:l,children:i}):e.jsx(r.AiBodyCaption,{numberOfLines:l,children:i}):t==="small"?e.jsx(r.BodyTiny,{className:"text",color:w,numberOfLines:l,children:i}):e.jsx(r.BodyCaption,{className:"text",color:w,numberOfLines:l,children:i})),j&&(N?e.jsx(B.Tooltip,{...N,children:e.jsx("button",{className:"icon-trailing",onClick:T,id:`${d}-wrapper`||"trailing-icon-wrapper",children:h.default.createElement(j,{...y,id:d||"trailing-icon"})})}):e.jsx("button",{className:"icon-trailing",onClick:T,id:`${d}-wrapper`||"trailing-icon-wrapper",children:h.default.createElement(j,{...y,id:d||"trailing-icon"})}))]})})};C.displayName="Tag";exports.Tag=C;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),P=require("react"),B=require("../tooltips/Tooltip.js"),r=require("../TypographyStyle.js"),D=require("./model.js"),V=require("./Tag.styled.js"),v=require("./themes.js"),F=o=>o&&typeof o=="object"&&"default"in o?o:{default:o},h=F(P),C=({tagText:o,LeadingIcon:u,TrailingIcon:j,onLeadingIconClicked:m=void 0,leadingIconId:s,trailingIconId:d,onTrailingIconClicked:T=void 0,theme:n="light",type:p="neutral",variant:c="regular",version:f,cursor:q,alignIcon:A,noBorder:E,tagHtmlText:a,contentPadding:_,padding:$,height:k,leadingIconTooltip:g,trailingIconTooltip:N,tagColor:w,numberOfLines:l,backgroundColor:R,borderRadius:S,size:t="regular"})=>{let i=o;const b=n;let x=p;D.ValidTagTypeMap[c][p]||(x="neutral"),c==="circle"&&typeof i=="number"&&i>99&&(i="99+");const M=v.getTagIconColor(n,x),y={height:c==="compressed"?12:16,width:c==="compressed"?12:16,color:M,style:{display:"block"}};return e.jsx(V.Tag,{cursor:q,theme:b,type:x,variant:c,version:f,alignIcon:A,noBorder:E,contentPadding:_,padding:$,height:k,backgroundColor:R,borderRadius:S,size:t,children:e.jsxs("div",{className:"container",children:[u&&(g?e.jsx(B.Tooltip,{...g,children:e.jsx("button",{className:"icon-leading",onClick:m,id:`${s}-wrapper`||"leading-icon-wrapper",children:h.default.createElement(u,{...y,id:s||"leading-icon"})})}):e.jsx("button",{className:"icon-leading",onClick:m,id:`${s}-wrapper`||"leading-icon-wrapper",children:h.default.createElement(u,{...y,id:s||"leading-icon"})})),a&&(p==="ai"&&n==="light"?t==="small"?e.jsx(r.AiBodyTiny,{numberOfLines:l,children:a}):e.jsx(r.AiBodyCaption,{numberOfLines:l,children:a}):t==="small"?e.jsx(r.BodyTiny,{className:"text",numberOfLines:l,children:a}):e.jsx(r.BodyCaption,{className:"text",numberOfLines:l,children:a})),!a&&i!==""&&(p==="ai"&&n==="light"?t==="small"?e.jsx(r.AiBodyTiny,{numberOfLines:l,children:i}):e.jsx(r.AiBodyCaption,{numberOfLines:l,children:i}):t==="small"?e.jsx(r.BodyTiny,{className:"text",color:w,numberOfLines:l,children:i}):e.jsx(r.BodyCaption,{className:"text",color:w,numberOfLines:l,children:i})),j&&(N?e.jsx(B.Tooltip,{...N,children:e.jsx("button",{className:"icon-trailing",onClick:T,id:`${d}-wrapper`||"trailing-icon-wrapper",children:h.default.createElement(j,{...y,id:d||"trailing-icon"})})}):e.jsx("button",{className:"icon-trailing",onClick:T,id:`${d}-wrapper`||"trailing-icon-wrapper",children:h.default.createElement(j,{...y,id:d||"trailing-icon"})}))]})})};C.displayName="Tag";exports.Tag=C;
2
2
  //# sourceMappingURL=Tag.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tag.js","sources":["../../../../src/components/tag/Tag.tsx"],"sourcesContent":["import React from 'react';\nimport { Tooltip } from '../tooltips/Tooltip';\nimport {\n\tAiBodyCaption,\n\tAiBodyTiny,\n\tBodyCaption,\n\tBodyTiny,\n} from '../TypographyStyle';\nimport { TagProps, ValidTagTypeMap } from './model';\nimport * as Sc from './Tag.styled';\nimport { getTagIconColor } from './themes';\n\nexport const Tag = ({\n\ttagText,\n\tLeadingIcon,\n\tTrailingIcon,\n\tonLeadingIconClicked = undefined,\n\tleadingIconId,\n\ttrailingIconId,\n\tonTrailingIconClicked = undefined,\n\ttheme = 'light',\n\ttype = 'neutral',\n\tvariant = 'regular',\n\tversion,\n\tcursor,\n\talignIcon,\n\tnoBorder,\n\ttagHtmlText,\n\tcontentPadding,\n\tpadding,\n\theight,\n\tleadingIconTooltip,\n\ttrailingIconTooltip,\n\ttagColor,\n\tnumberOfLines,\n\tbackgroundColor,\n\tborderRadius,\n\tsize = 'regular',\n\thoverBackgroundColor,\n}: TagProps) => {\n\tlet displayTagText = tagText;\n\tconst displayTheme = theme;\n\tlet displayType = type;\n\n\tif (!ValidTagTypeMap[variant][type]) {\n\t\tdisplayType = 'neutral';\n\t}\n\n\tif (variant === 'circle') {\n\t\tif (typeof displayTagText === 'number' && displayTagText > 99) {\n\t\t\tdisplayTagText = '99+';\n\t\t}\n\t}\n\n\tconst iconColor = getTagIconColor(theme, displayType);\n\tconst iconProps = {\n\t\theight: variant === 'compressed' ? 12 : 16,\n\t\twidth: variant === 'compressed' ? 12 : 16,\n\t\tcolor: iconColor,\n\t\tstyle: { display: 'block' },\n\t};\n\n\treturn (\n\t\t<Sc.Tag\n\t\t\tcursor={cursor}\n\t\t\ttheme={displayTheme}\n\t\t\ttype={displayType}\n\t\t\tvariant={variant}\n\t\t\tversion={version}\n\t\t\talignIcon={alignIcon}\n\t\t\tnoBorder={noBorder}\n\t\t\tcontentPadding={contentPadding}\n\t\t\tpadding={padding}\n\t\t\theight={height}\n\t\t\tbackgroundColor={backgroundColor}\n\t\t\tborderRadius={borderRadius}\n\t\t\tsize={size}\n\t\t\thoverBackgroundColor={hoverBackgroundColor}\n\t\t>\n\t\t\t<div className=\"container\">\n\t\t\t\t{LeadingIcon &&\n\t\t\t\t\t(leadingIconTooltip ? (\n\t\t\t\t\t\t<Tooltip {...leadingIconTooltip}>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclassName=\"icon-leading\"\n\t\t\t\t\t\t\t\tonClick={onLeadingIconClicked}\n\t\t\t\t\t\t\t\tid={`${leadingIconId}-wrapper` || 'leading-icon-wrapper'}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{React.createElement(LeadingIcon, {\n\t\t\t\t\t\t\t\t\t...iconProps,\n\t\t\t\t\t\t\t\t\tid: leadingIconId || 'leading-icon',\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclassName=\"icon-leading\"\n\t\t\t\t\t\t\tonClick={onLeadingIconClicked}\n\t\t\t\t\t\t\tid={`${leadingIconId}-wrapper` || 'leading-icon-wrapper'}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{React.createElement(LeadingIcon, {\n\t\t\t\t\t\t\t\t...iconProps,\n\t\t\t\t\t\t\t\tid: leadingIconId || 'leading-icon',\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\n\t\t\t\t{tagHtmlText &&\n\t\t\t\t\t(type === 'ai' && theme === 'light' ? (\n\t\t\t\t\t\tsize === 'small' ? (\n\t\t\t\t\t\t\t<AiBodyTiny numberOfLines={numberOfLines}>\n\t\t\t\t\t\t\t\t{tagHtmlText}\n\t\t\t\t\t\t\t</AiBodyTiny>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<AiBodyCaption numberOfLines={numberOfLines}>\n\t\t\t\t\t\t\t\t{tagHtmlText}\n\t\t\t\t\t\t\t</AiBodyCaption>\n\t\t\t\t\t\t)\n\t\t\t\t\t) : size === 'small' ? (\n\t\t\t\t\t\t<BodyTiny className=\"text\" numberOfLines={numberOfLines}>\n\t\t\t\t\t\t\t{tagHtmlText}\n\t\t\t\t\t\t</BodyTiny>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<BodyCaption className=\"text\" numberOfLines={numberOfLines}>\n\t\t\t\t\t\t\t{tagHtmlText}\n\t\t\t\t\t\t</BodyCaption>\n\t\t\t\t\t))}\n\n\t\t\t\t{!tagHtmlText &&\n\t\t\t\t\tdisplayTagText !== '' &&\n\t\t\t\t\t(type === 'ai' && theme === 'light' ? (\n\t\t\t\t\t\tsize === 'small' ? (\n\t\t\t\t\t\t\t<AiBodyTiny numberOfLines={numberOfLines}>\n\t\t\t\t\t\t\t\t{displayTagText}\n\t\t\t\t\t\t\t</AiBodyTiny>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<AiBodyCaption numberOfLines={numberOfLines}>\n\t\t\t\t\t\t\t\t{displayTagText}\n\t\t\t\t\t\t\t</AiBodyCaption>\n\t\t\t\t\t\t)\n\t\t\t\t\t) : size === 'small' ? (\n\t\t\t\t\t\t<BodyTiny\n\t\t\t\t\t\t\tclassName=\"text\"\n\t\t\t\t\t\t\tcolor={tagColor}\n\t\t\t\t\t\t\tnumberOfLines={numberOfLines}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{displayTagText}\n\t\t\t\t\t\t</BodyTiny>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<BodyCaption\n\t\t\t\t\t\t\tclassName=\"text\"\n\t\t\t\t\t\t\tcolor={tagColor}\n\t\t\t\t\t\t\tnumberOfLines={numberOfLines}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{displayTagText}\n\t\t\t\t\t\t</BodyCaption>\n\t\t\t\t\t))}\n\n\t\t\t\t{TrailingIcon &&\n\t\t\t\t\t(trailingIconTooltip ? (\n\t\t\t\t\t\t<Tooltip {...trailingIconTooltip}>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclassName=\"icon-trailing\"\n\t\t\t\t\t\t\t\tonClick={onTrailingIconClicked}\n\t\t\t\t\t\t\t\tid={`${trailingIconId}-wrapper` || 'trailing-icon-wrapper'}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{React.createElement(TrailingIcon, {\n\t\t\t\t\t\t\t\t\t...iconProps,\n\t\t\t\t\t\t\t\t\tid: trailingIconId || 'trailing-icon',\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclassName=\"icon-trailing\"\n\t\t\t\t\t\t\tonClick={onTrailingIconClicked}\n\t\t\t\t\t\t\tid={`${trailingIconId}-wrapper` || 'trailing-icon-wrapper'}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{React.createElement(TrailingIcon, {\n\t\t\t\t\t\t\t\t...iconProps,\n\t\t\t\t\t\t\t\tid: trailingIconId || 'trailing-icon',\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t</div>\n\t\t</Sc.Tag>\n\t);\n};\n\nTag.displayName = 'Tag';\n"],"names":["Tag","tagText","LeadingIcon","TrailingIcon","onLeadingIconClicked","leadingIconId","trailingIconId","onTrailingIconClicked","theme","type","variant","version","cursor","alignIcon","noBorder","tagHtmlText","contentPadding","padding","height","leadingIconTooltip","trailingIconTooltip","tagColor","numberOfLines","backgroundColor","borderRadius","size","hoverBackgroundColor","displayTagText","displayTheme","displayType","ValidTagTypeMap","iconColor","getTagIconColor","iconProps","jsx","Sc.Tag","jsxs","Tooltip","React","AiBodyTiny","AiBodyCaption","BodyTiny","BodyCaption"],"mappings":"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"}
1
+ {"version":3,"file":"Tag.js","sources":["../../../../src/components/tag/Tag.tsx"],"sourcesContent":["import React from 'react';\nimport { Tooltip } from '../tooltips/Tooltip';\nimport {\n\tAiBodyCaption,\n\tAiBodyTiny,\n\tBodyCaption,\n\tBodyTiny,\n} from '../TypographyStyle';\nimport { TagProps, ValidTagTypeMap } from './model';\nimport * as Sc from './Tag.styled';\nimport { getTagIconColor } from './themes';\n\nexport const Tag = ({\n\ttagText,\n\tLeadingIcon,\n\tTrailingIcon,\n\tonLeadingIconClicked = undefined,\n\tleadingIconId,\n\ttrailingIconId,\n\tonTrailingIconClicked = undefined,\n\ttheme = 'light',\n\ttype = 'neutral',\n\tvariant = 'regular',\n\tversion,\n\tcursor,\n\talignIcon,\n\tnoBorder,\n\ttagHtmlText,\n\tcontentPadding,\n\tpadding,\n\theight,\n\tleadingIconTooltip,\n\ttrailingIconTooltip,\n\ttagColor,\n\tnumberOfLines,\n\tbackgroundColor,\n\tborderRadius,\n\tsize = 'regular',\n}: TagProps) => {\n\tlet displayTagText = tagText;\n\tconst displayTheme = theme;\n\tlet displayType = type;\n\n\tif (!ValidTagTypeMap[variant][type]) {\n\t\tdisplayType = 'neutral';\n\t}\n\n\tif (variant === 'circle') {\n\t\tif (typeof displayTagText === 'number' && displayTagText > 99) {\n\t\t\tdisplayTagText = '99+';\n\t\t}\n\t}\n\n\tconst iconColor = getTagIconColor(theme, displayType);\n\tconst iconProps = {\n\t\theight: variant === 'compressed' ? 12 : 16,\n\t\twidth: variant === 'compressed' ? 12 : 16,\n\t\tcolor: iconColor,\n\t\tstyle: { display: 'block' },\n\t};\n\n\treturn (\n\t\t<Sc.Tag\n\t\t\tcursor={cursor}\n\t\t\ttheme={displayTheme}\n\t\t\ttype={displayType}\n\t\t\tvariant={variant}\n\t\t\tversion={version}\n\t\t\talignIcon={alignIcon}\n\t\t\tnoBorder={noBorder}\n\t\t\tcontentPadding={contentPadding}\n\t\t\tpadding={padding}\n\t\t\theight={height}\n\t\t\tbackgroundColor={backgroundColor}\n\t\t\tborderRadius={borderRadius}\n\t\t\tsize={size}\n\t\t>\n\t\t\t<div className=\"container\">\n\t\t\t\t{LeadingIcon &&\n\t\t\t\t\t(leadingIconTooltip ? (\n\t\t\t\t\t\t<Tooltip {...leadingIconTooltip}>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclassName=\"icon-leading\"\n\t\t\t\t\t\t\t\tonClick={onLeadingIconClicked}\n\t\t\t\t\t\t\t\tid={`${leadingIconId}-wrapper` || 'leading-icon-wrapper'}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{React.createElement(LeadingIcon, {\n\t\t\t\t\t\t\t\t\t...iconProps,\n\t\t\t\t\t\t\t\t\tid: leadingIconId || 'leading-icon',\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclassName=\"icon-leading\"\n\t\t\t\t\t\t\tonClick={onLeadingIconClicked}\n\t\t\t\t\t\t\tid={`${leadingIconId}-wrapper` || 'leading-icon-wrapper'}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{React.createElement(LeadingIcon, {\n\t\t\t\t\t\t\t\t...iconProps,\n\t\t\t\t\t\t\t\tid: leadingIconId || 'leading-icon',\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\n\t\t\t\t{tagHtmlText &&\n\t\t\t\t\t(type === 'ai' && theme === 'light' ? (\n\t\t\t\t\t\tsize === 'small' ? (\n\t\t\t\t\t\t\t<AiBodyTiny numberOfLines={numberOfLines}>\n\t\t\t\t\t\t\t\t{tagHtmlText}\n\t\t\t\t\t\t\t</AiBodyTiny>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<AiBodyCaption numberOfLines={numberOfLines}>\n\t\t\t\t\t\t\t\t{tagHtmlText}\n\t\t\t\t\t\t\t</AiBodyCaption>\n\t\t\t\t\t\t)\n\t\t\t\t\t) : size === 'small' ? (\n\t\t\t\t\t\t<BodyTiny className=\"text\" numberOfLines={numberOfLines}>\n\t\t\t\t\t\t\t{tagHtmlText}\n\t\t\t\t\t\t</BodyTiny>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<BodyCaption className=\"text\" numberOfLines={numberOfLines}>\n\t\t\t\t\t\t\t{tagHtmlText}\n\t\t\t\t\t\t</BodyCaption>\n\t\t\t\t\t))}\n\n\t\t\t\t{!tagHtmlText &&\n\t\t\t\t\tdisplayTagText !== '' &&\n\t\t\t\t\t(type === 'ai' && theme === 'light' ? (\n\t\t\t\t\t\tsize === 'small' ? (\n\t\t\t\t\t\t\t<AiBodyTiny numberOfLines={numberOfLines}>\n\t\t\t\t\t\t\t\t{displayTagText}\n\t\t\t\t\t\t\t</AiBodyTiny>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<AiBodyCaption numberOfLines={numberOfLines}>\n\t\t\t\t\t\t\t\t{displayTagText}\n\t\t\t\t\t\t\t</AiBodyCaption>\n\t\t\t\t\t\t)\n\t\t\t\t\t) : size === 'small' ? (\n\t\t\t\t\t\t<BodyTiny\n\t\t\t\t\t\t\tclassName=\"text\"\n\t\t\t\t\t\t\tcolor={tagColor}\n\t\t\t\t\t\t\tnumberOfLines={numberOfLines}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{displayTagText}\n\t\t\t\t\t\t</BodyTiny>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<BodyCaption\n\t\t\t\t\t\t\tclassName=\"text\"\n\t\t\t\t\t\t\tcolor={tagColor}\n\t\t\t\t\t\t\tnumberOfLines={numberOfLines}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{displayTagText}\n\t\t\t\t\t\t</BodyCaption>\n\t\t\t\t\t))}\n\n\t\t\t\t{TrailingIcon &&\n\t\t\t\t\t(trailingIconTooltip ? (\n\t\t\t\t\t\t<Tooltip {...trailingIconTooltip}>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclassName=\"icon-trailing\"\n\t\t\t\t\t\t\t\tonClick={onTrailingIconClicked}\n\t\t\t\t\t\t\t\tid={`${trailingIconId}-wrapper` || 'trailing-icon-wrapper'}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{React.createElement(TrailingIcon, {\n\t\t\t\t\t\t\t\t\t...iconProps,\n\t\t\t\t\t\t\t\t\tid: trailingIconId || 'trailing-icon',\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclassName=\"icon-trailing\"\n\t\t\t\t\t\t\tonClick={onTrailingIconClicked}\n\t\t\t\t\t\t\tid={`${trailingIconId}-wrapper` || 'trailing-icon-wrapper'}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{React.createElement(TrailingIcon, {\n\t\t\t\t\t\t\t\t...iconProps,\n\t\t\t\t\t\t\t\tid: trailingIconId || 'trailing-icon',\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t</div>\n\t\t</Sc.Tag>\n\t);\n};\n\nTag.displayName = 'Tag';\n"],"names":["Tag","tagText","LeadingIcon","TrailingIcon","onLeadingIconClicked","leadingIconId","trailingIconId","onTrailingIconClicked","theme","type","variant","version","cursor","alignIcon","noBorder","tagHtmlText","contentPadding","padding","height","leadingIconTooltip","trailingIconTooltip","tagColor","numberOfLines","backgroundColor","borderRadius","size","displayTagText","displayTheme","displayType","ValidTagTypeMap","iconColor","getTagIconColor","iconProps","jsx","Sc.Tag","jsxs","Tooltip","React","AiBodyTiny","AiBodyCaption","BodyTiny","BodyCaption"],"mappings":"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"}
@@ -28,10 +28,6 @@
28
28
  all: unset;
29
29
  display: flex;
30
30
  }
31
-
32
- ${e=>e.hoverBackgroundColor&&`&:hover {
33
- background: ${e.hoverBackgroundColor};
34
- }`}
35
31
  }
36
32
  `;exports.Tag=n;
37
33
  //# sourceMappingURL=Tag.styled.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tag.styled.js","sources":["../../../../src/components/tag/Tag.styled.tsx"],"sourcesContent":["import styled from 'styled-components';\nimport { TagTheme, TagType, TagVariant } from './model';\nimport {\n\tgenerateBorder,\n\tgetBackgroundColor,\n\tgetPadding,\n\tgetTextColor,\n} from './themes';\n\nexport const Tag = styled.div<{\n\ttheme: TagTheme;\n\ttype: TagType;\n\tvariant: TagVariant;\n\tversion?: '1.0' | '2.0' | '3.0';\n\tcursor?: string;\n\talignIcon?: string;\n\tnoBorder?: boolean;\n\tcontentPadding?: number;\n\tpadding?: string;\n\theight?: number;\n\tbackgroundColor?: string;\n\tborderRadius?: string | number;\n\tsize?: 'regular' | 'small';\n\thoverBackgroundColor?: string;\n}>`\n\tcursor: ${(props) => props.cursor ?? 'default'};\n\t${(props) =>\n\t\tprops.size !== 'small' &&\n\t\t(props.variant === 'regular'\n\t\t\t? `display: block;\n\t\t min-height: 26px;\n\t\t`\n\t\t\t: `min-height: 20px;`)}\n\t.container {\n\t\tdisplay: flex;\n\t\talign-items: ${(props) => (props.alignIcon ? props.alignIcon : 'center')};\n\t\tgap: 6px;\n\t\t${(props) =>\n\t\t\tprops.height\n\t\t\t\t? `height: ${props.height}px; box-sizing: border-box;`\n\t\t\t\t: props.size === 'small'\n\t\t\t\t? 'height: 16px; box-sizing: border-box;'\n\t\t\t\t: ''}\n\t\tpadding: ${(props) =>\n\t\t\tprops.padding\n\t\t\t\t? props.padding\n\t\t\t\t: props.size === 'small'\n\t\t\t\t? '2px 6px'\n\t\t\t\t: props.contentPadding\n\t\t\t\t? `${props.contentPadding}px`\n\t\t\t\t: getPadding(props.variant)};\n\t\tbackground: ${(props) =>\n\t\t\tprops.backgroundColor ?? getBackgroundColor(props.theme, props.type)};\n\n\t\tborder-radius: ${(props) =>\n\t\t\tprops.borderRadius !== undefined\n\t\t\t\t? typeof props.borderRadius === 'number'\n\t\t\t\t\t? `${props.borderRadius}px`\n\t\t\t\t\t: props.borderRadius\n\t\t\t\t: props.variant === 'regular'\n\t\t\t\t? '4px'\n\t\t\t\t: '12px'};\n\n\t\t${(props) =>\n\t\t\t!props.noBorder &&\n\t\t\tprops.theme === 'light' &&\n\t\t\t`border: ${props.version === '2.0' ? 0.5 : 1}px solid ${generateBorder(\n\t\t\t\tprops.type,\n\t\t\t\tprops.theme,\n\t\t\t)};`}\n\n\t\t.text {\n\t\t\tcolor: ${(props) => getTextColor(props.theme, props.type)};\n\t\t}\n\n\t\t.icon-trailing {\n\t\t\tall: unset;\n\t\t\tdisplay: flex;\n\t\t}\n\n\t\t.icon-leading {\n\t\t\tall: unset;\n\t\t\tdisplay: flex;\n\t\t}\n\n\t\t${(props) =>\n\t\t\tprops.hoverBackgroundColor &&\n\t\t\t`&:hover {\n\t\t\t\tbackground: ${props.hoverBackgroundColor};\n\t\t\t}`}\n\t}\n`;\n"],"names":["Tag","styled","props","getPadding","getBackgroundColor","generateBorder","getTextColor"],"mappings":"6MASaA,EAAMC,EAAAA,QAAO;AAAA,WAgBdC,GAAUA,EAAM,QAAU,SAAS;AAAA,GAC3CA,GACFA,EAAM,OAAS,UACdA,EAAM,UAAY,UAChB;AAAA;AAAA,IAGA,oBAAoB;AAAA;AAAA;AAAA,iBAGPA,GAAWA,EAAM,UAAYA,EAAM,UAAY,QAAS;AAAA;AAAA,IAErEA,GACFA,EAAM,OACH,WAAWA,EAAM,MAAM,8BACvBA,EAAM,OAAS,QACf,wCACA,EAAE;AAAA,aACMA,GACXA,EAAM,QACHA,EAAM,QACNA,EAAM,OAAS,QACf,UACAA,EAAM,eACN,GAAGA,EAAM,cAAc,KACvBC,EAAAA,WAAWD,EAAM,OAAO,CAAC;AAAA,gBACdA,GACdA,EAAM,iBAAmBE,EAAAA,mBAAmBF,EAAM,MAAOA,EAAM,IAAI,CAAC;AAAA;AAAA,mBAEnDA,GACjBA,EAAM,eAAiB,OACpB,OAAOA,EAAM,cAAiB,SAC7B,GAAGA,EAAM,YAAY,KACrBA,EAAM,aACPA,EAAM,UAAY,UAClB,MACA,MAAM;AAAA;AAAA,IAEPA,GACF,CAACA,EAAM,UACPA,EAAM,QAAU,SAChB,WAAWA,EAAM,UAAY,MAAQ,GAAM,CAAC,YAAYG,EAAAA,eACvDH,EAAM,KACNA,EAAM,KACP,CAAC,GAAG;AAAA;AAAA;AAAA,YAGMA,GAAUI,eAAaJ,EAAM,MAAOA,EAAM,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAavDA,GACFA,EAAM,sBACN;AAAA,kBACeA,EAAM,oBAAoB;AAAA,KACvC;AAAA;AAAA"}
1
+ {"version":3,"file":"Tag.styled.js","sources":["../../../../src/components/tag/Tag.styled.tsx"],"sourcesContent":["import styled from 'styled-components';\nimport { TagTheme, TagType, TagVariant } from './model';\nimport {\n\tgenerateBorder,\n\tgetBackgroundColor,\n\tgetPadding,\n\tgetTextColor,\n} from './themes';\n\nexport const Tag = styled.div<{\n\ttheme: TagTheme;\n\ttype: TagType;\n\tvariant: TagVariant;\n\tversion?: '1.0' | '2.0' | '3.0';\n\tcursor?: string;\n\talignIcon?: string;\n\tnoBorder?: boolean;\n\tcontentPadding?: number;\n\tpadding?: string;\n\theight?: number;\n\tbackgroundColor?: string;\n\tborderRadius?: string | number;\n\tsize?: 'regular' | 'small';\n}>`\n\tcursor: ${(props) => props.cursor ?? 'default'};\n\t${(props) =>\n\t\tprops.size !== 'small' &&\n\t\t(props.variant === 'regular'\n\t\t\t? `display: block;\n\t\t min-height: 26px;\n\t\t`\n\t\t\t: `min-height: 20px;`)}\n\t.container {\n\t\tdisplay: flex;\n\t\talign-items: ${(props) => (props.alignIcon ? props.alignIcon : 'center')};\n\t\tgap: 6px;\n\t\t${(props) =>\n\t\t\tprops.height\n\t\t\t\t? `height: ${props.height}px; box-sizing: border-box;`\n\t\t\t\t: props.size === 'small'\n\t\t\t\t? 'height: 16px; box-sizing: border-box;'\n\t\t\t\t: ''}\n\t\tpadding: ${(props) =>\n\t\t\tprops.padding\n\t\t\t\t? props.padding\n\t\t\t\t: props.size === 'small'\n\t\t\t\t? '2px 6px'\n\t\t\t\t: props.contentPadding\n\t\t\t\t? `${props.contentPadding}px`\n\t\t\t\t: getPadding(props.variant)};\n\t\tbackground: ${(props) =>\n\t\t\tprops.backgroundColor ?? getBackgroundColor(props.theme, props.type)};\n\n\t\tborder-radius: ${(props) =>\n\t\t\tprops.borderRadius !== undefined\n\t\t\t\t? typeof props.borderRadius === 'number'\n\t\t\t\t\t? `${props.borderRadius}px`\n\t\t\t\t\t: props.borderRadius\n\t\t\t\t: props.variant === 'regular'\n\t\t\t\t? '4px'\n\t\t\t\t: '12px'};\n\n\t\t${(props) =>\n\t\t\t!props.noBorder &&\n\t\t\tprops.theme === 'light' &&\n\t\t\t`border: ${props.version === '2.0' ? 0.5 : 1}px solid ${generateBorder(\n\t\t\t\tprops.type,\n\t\t\t\tprops.theme,\n\t\t\t)};`}\n\n\t\t.text {\n\t\t\tcolor: ${(props) => getTextColor(props.theme, props.type)};\n\t\t}\n\n\t\t.icon-trailing {\n\t\t\tall: unset;\n\t\t\tdisplay: flex;\n\t\t}\n\n\t\t.icon-leading {\n\t\t\tall: unset;\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n`;\n"],"names":["Tag","styled","props","getPadding","getBackgroundColor","generateBorder","getTextColor"],"mappings":"6MASaA,EAAMC,EAAAA,QAAO;AAAA,WAedC,GAAUA,EAAM,QAAU,SAAS;AAAA,GAC3CA,GACFA,EAAM,OAAS,UACdA,EAAM,UAAY,UAChB;AAAA;AAAA,IAGA,oBAAoB;AAAA;AAAA;AAAA,iBAGPA,GAAWA,EAAM,UAAYA,EAAM,UAAY,QAAS;AAAA;AAAA,IAErEA,GACFA,EAAM,OACH,WAAWA,EAAM,MAAM,8BACvBA,EAAM,OAAS,QACf,wCACA,EAAE;AAAA,aACMA,GACXA,EAAM,QACHA,EAAM,QACNA,EAAM,OAAS,QACf,UACAA,EAAM,eACN,GAAGA,EAAM,cAAc,KACvBC,EAAAA,WAAWD,EAAM,OAAO,CAAC;AAAA,gBACdA,GACdA,EAAM,iBAAmBE,EAAAA,mBAAmBF,EAAM,MAAOA,EAAM,IAAI,CAAC;AAAA;AAAA,mBAEnDA,GACjBA,EAAM,eAAiB,OACpB,OAAOA,EAAM,cAAiB,SAC7B,GAAGA,EAAM,YAAY,KACrBA,EAAM,aACPA,EAAM,UAAY,UAClB,MACA,MAAM;AAAA;AAAA,IAEPA,GACF,CAACA,EAAM,UACPA,EAAM,QAAU,SAChB,WAAWA,EAAM,UAAY,MAAQ,GAAM,CAAC,YAAYG,EAAAA,eACvDH,EAAM,KACNA,EAAM,KACP,CAAC,GAAG;AAAA;AAAA;AAAA,YAGMA,GAAUI,eAAaJ,EAAM,MAAOA,EAAM,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sources":["../../../../src/components/tag/model.ts"],"sourcesContent":["import React from 'react';\nimport { MouseEventHandler } from 'react';\nimport { TooltipProps } from '../tooltips/Tooltip';\n\nexport type TagTheme = 'light' | 'dark';\n\nexport type TagVariant = 'regular' | 'circle' | 'compressed';\n\nexport type TagType =\n\t| 'negative'\n\t| 'warning'\n\t| 'positive'\n\t| 'neutral'\n\t| 'white'\n\t| 'purple'\n\t| 'blue'\n\t| 'grey'\n\t| 'ai';\n\nexport const ValidTagTypeMap = {\n\tregular: {\n\t\tnegative: true,\n\t\twarning: true,\n\t\tpositive: true,\n\t\tneutral: true,\n\t\twhite: true,\n\t\tpurple: true,\n\t\tblue: true,\n\t\tai: true,\n\t},\n\tcircle: {\n\t\tnegative: true,\n\t\twarning: true,\n\t\tpositive: true,\n\t\tneutral: true,\n\t\tblue: true,\n\t\tgrey: true,\n\t\tai: true,\n\t},\n\tcompressed: {\n\t\tnegative: true,\n\t\twarning: true,\n\t\tpositive: true,\n\t\tneutral: true,\n\t\twhite: true,\n\t\tpurple: true,\n\t\tblue: true,\n\t\tai: true,\n\t},\n};\n\nexport interface TagProps extends React.BaseHTMLAttributes<HTMLDivElement> {\n\t/**\n\t * Set the theme of the Tag\n\t * @default default light\n\t */\n\ttheme?: TagTheme;\n\n\t/**\n\t * Set the color of the Tag\n\t * @default default neutral\n\t */\n\ttype?: TagType;\n\n\t/**\n\t * Set the color of the Tag\n\t * @default default regular\n\t */\n\tvariant?: TagVariant;\n\n\t/**\n\t * The icon component that is the right of the text\n\t * Referred to https://ozzie.sh/passing-icons-as-props-in-a-consistent-way-using-react\n\t * @default undefined\n\t */\n\tTrailingIcon?: React.FunctionComponent<React.SVGAttributes<SVGElement>>;\n\t/**\n\t * The right icon id,\n\t * @default trailing-icon\n\t */\n\ttrailingIconId?: string;\n\t/**\n\t * The right icon on click event, defaults to () => {}\n\t */\n\tonTrailingIconClicked?: MouseEventHandler<HTMLButtonElement>;\n\t/**\n\t * Tooltip props for the trailing icon\n\t * @default undefined\n\t */\n\ttrailingIconTooltip?: Omit<TooltipProps, 'children'>;\n\n\t/**\n\t * The icon component that is to the left of the text\n\t * Referred to https://ozzie.sh/passing-icons-as-props-in-a-consistent-way-using-react\n\t * @default undefined\n\t */\n\tLeadingIcon?: React.FunctionComponent<React.SVGAttributes<SVGElement>>;\n\t/**\n\t * The right icon on click event, defaults to () => {}\n\t */\n\tonLeadingIconClicked?: MouseEventHandler<HTMLButtonElement>;\n\t/**\n\t * The left icon id,\n\t * @default leading-icon\n\t */\n\tleadingIconId?: string;\n\t/**\n\t * Tooltip props for the leading icon\n\t * @default undefined\n\t */\n\tleadingIconTooltip?: Omit<TooltipProps, 'children'>;\n\n\ttagText: string | number;\n\tversion?: '1.0' | '2.0' | '3.0';\n\t/** Custom CSS padding string, e.g. '4px 8px' */\n\tpadding?: string;\n\t/** Custom height in px */\n\theight?: number;\n\tcursor?: string;\n\talignIcon?: string;\n\tnoBorder?: boolean;\n\ttagHtmlText?: JSX.Element;\n\tcontentPadding?: number;\n\ttagColor?: string;\n\tnumberOfLines?: number;\n\t/**\n\t * Override the computed background color of the tag container.\n\t * @default undefined (uses theme/type color)\n\t */\n\tbackgroundColor?: string;\n\t/**\n\t * Override the border-radius of the tag container.\n\t * @default undefined (uses variant-based radius: 4px for regular, 12px otherwise)\n\t */\n\tborderRadius?: string | number;\n\t/**\n\t * Controls the size of the tag. 'small' sets height to 16px and uses tiny font.\n\t * @default 'regular'\n\t */\n\tsize?: 'regular' | 'small';\n\t/**\n\t * Background color on hover.\n\t * @default undefined (no hover effect)\n\t */\n\thoverBackgroundColor?: string;\n}\n"],"names":["ValidTagTypeMap"],"mappings":"gFAmBO,MAAMA,EAAkB,CAC9B,QAAS,CACR,SAAU,GACV,QAAS,GACT,SAAU,GACV,QAAS,GACT,MAAO,GACP,OAAQ,GACR,KAAM,GACN,GAAI,EAAA,EAEL,OAAQ,CACP,SAAU,GACV,QAAS,GACT,SAAU,GACV,QAAS,GACT,KAAM,GACN,KAAM,GACN,GAAI,EAAA,EAEL,WAAY,CACX,SAAU,GACV,QAAS,GACT,SAAU,GACV,QAAS,GACT,MAAO,GACP,OAAQ,GACR,KAAM,GACN,GAAI,EAAA,CAEN"}
1
+ {"version":3,"file":"model.js","sources":["../../../../src/components/tag/model.ts"],"sourcesContent":["import React from 'react';\nimport { MouseEventHandler } from 'react';\nimport { TooltipProps } from '../tooltips/Tooltip';\n\nexport type TagTheme = 'light' | 'dark';\n\nexport type TagVariant = 'regular' | 'circle' | 'compressed';\n\nexport type TagType =\n\t| 'negative'\n\t| 'warning'\n\t| 'positive'\n\t| 'neutral'\n\t| 'white'\n\t| 'purple'\n\t| 'blue'\n\t| 'grey'\n\t| 'ai';\n\nexport const ValidTagTypeMap = {\n\tregular: {\n\t\tnegative: true,\n\t\twarning: true,\n\t\tpositive: true,\n\t\tneutral: true,\n\t\twhite: true,\n\t\tpurple: true,\n\t\tblue: true,\n\t\tai: true,\n\t},\n\tcircle: {\n\t\tnegative: true,\n\t\twarning: true,\n\t\tpositive: true,\n\t\tneutral: true,\n\t\tblue: true,\n\t\tgrey: true,\n\t\tai: true,\n\t},\n\tcompressed: {\n\t\tnegative: true,\n\t\twarning: true,\n\t\tpositive: true,\n\t\tneutral: true,\n\t\twhite: true,\n\t\tpurple: true,\n\t\tblue: true,\n\t\tai: true,\n\t},\n};\n\nexport interface TagProps extends React.BaseHTMLAttributes<HTMLDivElement> {\n\t/**\n\t * Set the theme of the Tag\n\t * @default default light\n\t */\n\ttheme?: TagTheme;\n\n\t/**\n\t * Set the color of the Tag\n\t * @default default neutral\n\t */\n\ttype?: TagType;\n\n\t/**\n\t * Set the color of the Tag\n\t * @default default regular\n\t */\n\tvariant?: TagVariant;\n\n\t/**\n\t * The icon component that is the right of the text\n\t * Referred to https://ozzie.sh/passing-icons-as-props-in-a-consistent-way-using-react\n\t * @default undefined\n\t */\n\tTrailingIcon?: React.FunctionComponent<React.SVGAttributes<SVGElement>>;\n\t/**\n\t * The right icon id,\n\t * @default trailing-icon\n\t */\n\ttrailingIconId?: string;\n\t/**\n\t * The right icon on click event, defaults to () => {}\n\t */\n\tonTrailingIconClicked?: MouseEventHandler<HTMLButtonElement>;\n\t/**\n\t * Tooltip props for the trailing icon\n\t * @default undefined\n\t */\n\ttrailingIconTooltip?: Omit<TooltipProps, 'children'>;\n\n\t/**\n\t * The icon component that is to the left of the text\n\t * Referred to https://ozzie.sh/passing-icons-as-props-in-a-consistent-way-using-react\n\t * @default undefined\n\t */\n\tLeadingIcon?: React.FunctionComponent<React.SVGAttributes<SVGElement>>;\n\t/**\n\t * The right icon on click event, defaults to () => {}\n\t */\n\tonLeadingIconClicked?: MouseEventHandler<HTMLButtonElement>;\n\t/**\n\t * The left icon id,\n\t * @default leading-icon\n\t */\n\tleadingIconId?: string;\n\t/**\n\t * Tooltip props for the leading icon\n\t * @default undefined\n\t */\n\tleadingIconTooltip?: Omit<TooltipProps, 'children'>;\n\n\ttagText: string | number;\n\tversion?: '1.0' | '2.0' | '3.0';\n\t/** Custom CSS padding string, e.g. '4px 8px' */\n\tpadding?: string;\n\t/** Custom height in px */\n\theight?: number;\n\tcursor?: string;\n\talignIcon?: string;\n\tnoBorder?: boolean;\n\ttagHtmlText?: JSX.Element;\n\tcontentPadding?: number;\n\ttagColor?: string;\n\tnumberOfLines?: number;\n\t/**\n\t * Override the computed background color of the tag container.\n\t * @default undefined (uses theme/type color)\n\t */\n\tbackgroundColor?: string;\n\t/**\n\t * Override the border-radius of the tag container.\n\t * @default undefined (uses variant-based radius: 4px for regular, 12px otherwise)\n\t */\n\tborderRadius?: string | number;\n\t/**\n\t * Controls the size of the tag. 'small' sets height to 16px and uses tiny font.\n\t * @default 'regular'\n\t */\n\tsize?: 'regular' | 'small';\n}\n"],"names":["ValidTagTypeMap"],"mappings":"gFAmBO,MAAMA,EAAkB,CAC9B,QAAS,CACR,SAAU,GACV,QAAS,GACT,SAAU,GACV,QAAS,GACT,MAAO,GACP,OAAQ,GACR,KAAM,GACN,GAAI,EAAA,EAEL,OAAQ,CACP,SAAU,GACV,QAAS,GACT,SAAU,GACV,QAAS,GACT,KAAM,GACN,KAAM,GACN,GAAI,EAAA,EAEL,WAAY,CACX,SAAU,GACV,QAAS,GACT,SAAU,GACV,QAAS,GACT,MAAO,GACP,OAAQ,GACR,KAAM,GACN,GAAI,EAAA,CAEN"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react/jsx-runtime"),ge=require("../node_modules/@tiptap/core/dist/index.js"),T=require("@tiptap/react"),a=require("react"),Q=require("../components/TypographyStyle.js"),k=require("./BikEditor.styles.js"),Z=require("./BikEditor.types.js"),s=require("./BikEditor.utils.js"),he=require("./extensions/buildExtensions.js"),pe=require("./floating/LinkBubbleMenu.js"),Ce=require("../icons/BIK AI specific/WandSparkles.js"),ke=require("../icons/Actions/Formatting/Copy.js"),Se=require("../icons/Actions/Common actions/Code.js"),xe=require("../icons/Informational/General/Info.js");function ye(p){return Object.entries(p).map(([x,g])=>`${x.replace(/([A-Z])/g,C=>`-${C.toLowerCase()}`)}:${g}`).join(";")}const Be=(p,x)=>{const{initialContent:g,sections:C,features:S,disabled:K,maxCharacters:b,characterLimit:X,shortcuts:Y,sendShortcut:ee,mentions:d,slashCommands:h,link:te,onPaste:ne,onReady:E,onChange:R,onSend:y,onFocus:j,onBlur:v,onSelectionChange:z,minHeight:oe,maxHeight:se,style:re,className:ie,editorClassName:A,editorStyle:H,renderJsonError:J}=p,u=!!S?.jsonMode,[m,I]=a.useState(null),[ce,M]=a.useState(!1),[ae,L]=a.useState(u&&!(g??"").trim()),le=u?s.buildJsonCodeBlockHtml(g??""):C?.length?s.buildSectionedContent(s.normalizeHtml(g??""),C.map(e=>({...e,content:s.normalizeHtml(e.content)}))):s.normalizeHtml(g??""),B=a.useRef([]),O=a.useRef(!1),q=a.useRef(E);q.current=E;const F=a.useRef(R);F.current=R;const N=a.useRef(z);N.current=z;const P=a.useRef(Z.DEFAULT_FORMAT_STATE),w=a.useRef(j);w.current=j;const D=a.useRef(v);D.current=v;const U=a.useRef(y);U.current=y;const _=a.useRef(d?.agents??[]);_.current=d?.agents??[];const $=a.useRef(d?.teams??[]);$.current=d?.teams??[];const W=a.useRef(h?.items??[]);W.current=h?.items??[];const n=T.useEditor({extensions:he.buildExtensions({features:S,placeholder:p.placeholder,maxCharacters:b,characterLimit:X,hasSections:(C?.length??0)>0,mentions:{agents:d?_:void 0,teams:d?$:void 0},slashCommands:h?W:void 0,onPaste:ne,onSend:y?e=>U.current?.(e):void 0,sendShortcut:ee,shortcuts:Y,onMentionSelected:d?.onSelect,onSlashCommandSelected:h?.onSelect,renderMentionItem:d?.renderItem,renderMentionDropdown:d?.renderDropdown,removeMentionTriggerOnDismiss:d?.removeTriggerOnDismiss,renderSlashCommandItem:h?.renderItem,renderSlashCommandDropdown:h?.renderDropdown}),content:le,editable:!K,immediatelyRender:!1,editorProps:{attributes:{...A?{class:A}:{},...H?{style:ye(H)}:{}}},onUpdate:({editor:e})=>{if(F.current?.(s.extractContent(e)),u){const t=s.getCodeBlockText(e),o=s.parseJson(t);I(o.valid?null:o),L(!t.trim())}},onTransaction:({editor:e})=>{const t=s.extractActiveFormats(e),o=P.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)&&(P.current=t,N.current?.(t))},onFocus:()=>w.current?.(),onBlur:()=>D.current?.()});function i(e){n?e(n):B.current.push(e)}a.useEffect(()=>{if(n&&(B.current.length>0&&B.current.splice(0).forEach(t=>t(n)),O.current||(O.current=!0,q.current?.()),u)){const e=s.getCodeBlockText(n),t=s.parseJson(e);I(t.valid?null:t),L(!e.trim())}},[n,u]),a.useImperativeHandle(x,()=>({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 f=ge.getMarkRange(e.doc.resolve(t),l);if(f)return e.doc.textBetween(f.from,f.to," ")}return""},getCharacterCount:()=>({count:n?.storage.characterCount?.characters?.()??n?.getText().length??0,limit:b??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,f)=>(l.type.name==="sectionDivider"&&r===t.state.doc.content.size-1&&(r=f-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):Z.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:f}=o.selection,V=r.schema.marks.link;if(!V)return!1;const me=r.schema.text(t,[V.create({href:e})]),fe=r.schema.text(" ");return o.replaceWith(l,f,[me,fe]),!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:S?.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 de=()=>{if(!n)return;const{valid:e,value:t}=s.parseJson(s.getCodeBlockText(n));!e||t===null||s.setCodeBlockText(n,JSON.stringify(t,null,2))},ue=()=>{n&&(navigator.clipboard?.writeText(s.getCodeBlockText(n)),M(!0),setTimeout(()=>M(!1),1500))};return n?c.jsxs(k.BikEditorShell,{minHeight:oe,maxHeight:se,tightParagraphs:!S?.richPaste,jsonMode:u,style:re,className:ie,children:[u&&c.jsxs(k.BikJsonHeader,{children:[c.jsx("span",{className:"bik-json-header-label",children:"JSON"}),c.jsxs("div",{className:"bik-json-header-actions",children:[c.jsxs("button",{type:"button",onClick:de,disabled:!!m,title:"Format JSON",children:[c.jsx(Ce.default,{size:16}),c.jsx(Q.BodyCaption,{children:"Beautify"})]}),c.jsxs("button",{type:"button",onClick:ue,title:"Copy JSON",children:[c.jsx(ke.default,{size:16}),ce&&c.jsx(Q.BodyCaption,{children:"Copied"})]})]})]}),u?c.jsxs(k.BikJsonBody,{$error:!!m,children:[c.jsx(T.EditorContent,{editor:n}),ae&&c.jsxs(k.BikJsonEmptyState,{"aria-hidden":!0,children:[c.jsx(Se.default,{size:20}),c.jsx("span",{children:p.placeholder??"Type or paste JSON here"})]})]}):c.jsx(T.EditorContent,{editor:n}),c.jsx(pe.LinkBubbleMenu,{editor:n,renderLinkTooltip:te?.renderTooltip}),u&&m?J?J(m):c.jsxs(k.BikJsonError,{children:[c.jsx(xe.default,{size:16}),c.jsxs("span",{children:[m.line!=null&&c.jsxs("strong",{children:["Line ",m.line,m.column!=null?`, column ${m.column}`:"",":"," "]}),m.error]})]}):null]}):null},G=a.forwardRef(Be);G.displayName="BikEditor";exports.BikEditor=G;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react/jsx-runtime"),he=require("../node_modules/@tiptap/core/dist/index.js"),T=require("@tiptap/react"),a=require("react"),Q=require("../components/TypographyStyle.js"),k=require("./BikEditor.styles.js"),Z=require("./BikEditor.types.js"),s=require("./BikEditor.utils.js"),pe=require("./extensions/buildExtensions.js"),Ce=require("./floating/LinkBubbleMenu.js"),ke=require("../icons/BIK AI specific/WandSparkles.js"),Se=require("../icons/Actions/Formatting/Copy.js"),xe=require("../icons/Actions/Common actions/Code.js"),ye=require("../icons/Informational/General/Info.js");function Be(p){return Object.entries(p).map(([x,g])=>`${x.replace(/([A-Z])/g,C=>`-${C.toLowerCase()}`)}:${g}`).join(";")}const Te=(p,x)=>{const{initialContent:g,sections:C,features:S,disabled:K,maxCharacters:b,characterLimit:X,characterLimitHard:Y,shortcuts:ee,sendShortcut:te,mentions:d,slashCommands:h,link:ne,onPaste:oe,onReady:E,onChange:R,onSend:y,onFocus:j,onBlur:v,onSelectionChange:z,minHeight:se,maxHeight:re,style:ie,className:ce,editorClassName:A,editorStyle:H,renderJsonError:J}=p,u=!!S?.jsonMode,[m,I]=a.useState(null),[ae,M]=a.useState(!1),[le,L]=a.useState(u&&!(g??"").trim()),de=u?s.buildJsonCodeBlockHtml(g??""):C?.length?s.buildSectionedContent(s.normalizeHtml(g??""),C.map(e=>({...e,content:s.normalizeHtml(e.content)}))):s.normalizeHtml(g??""),B=a.useRef([]),O=a.useRef(!1),q=a.useRef(E);q.current=E;const F=a.useRef(R);F.current=R;const N=a.useRef(z);N.current=z;const P=a.useRef(Z.DEFAULT_FORMAT_STATE),w=a.useRef(j);w.current=j;const D=a.useRef(v);D.current=v;const U=a.useRef(y);U.current=y;const _=a.useRef(d?.agents??[]);_.current=d?.agents??[];const $=a.useRef(d?.teams??[]);$.current=d?.teams??[];const W=a.useRef(h?.items??[]);W.current=h?.items??[];const n=T.useEditor({extensions:pe.buildExtensions({features:S,placeholder:p.placeholder,maxCharacters:b,characterLimit:X,characterLimitHard:Y,hasSections:(C?.length??0)>0,mentions:{agents:d?_:void 0,teams:d?$:void 0},slashCommands:h?W:void 0,onPaste:oe,onSend:y?e=>U.current?.(e):void 0,sendShortcut:te,shortcuts:ee,onMentionSelected:d?.onSelect,onSlashCommandSelected:h?.onSelect,renderMentionItem:d?.renderItem,renderMentionDropdown:d?.renderDropdown,removeMentionTriggerOnDismiss:d?.removeTriggerOnDismiss,renderMentionChipIcon:d?.renderChipIcon,renderSlashCommandItem:h?.renderItem,renderSlashCommandDropdown:h?.renderDropdown}),content:de,editable:!K,immediatelyRender:!1,editorProps:{attributes:{...A?{class:A}:{},...H?{style:Be(H)}:{}}},onUpdate:({editor:e})=>{if(F.current?.(s.extractContent(e)),u){const t=s.getCodeBlockText(e),o=s.parseJson(t);I(o.valid?null:o),L(!t.trim())}},onTransaction:({editor:e})=>{const t=s.extractActiveFormats(e),o=P.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)&&(P.current=t,N.current?.(t))},onFocus:()=>w.current?.(),onBlur:()=>D.current?.()});function i(e){n?e(n):B.current.push(e)}a.useEffect(()=>{if(n&&(B.current.length>0&&B.current.splice(0).forEach(t=>t(n)),O.current||(O.current=!0,q.current?.()),u)){const e=s.getCodeBlockText(n),t=s.parseJson(e);I(t.valid?null:t),L(!e.trim())}},[n,u]),a.useImperativeHandle(x,()=>({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 f=he.getMarkRange(e.doc.resolve(t),l);if(f)return e.doc.textBetween(f.from,f.to," ")}return""},getCharacterCount:()=>({count:n?.storage.characterCount?.characters?.()??n?.getText().length??0,limit:b??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,f)=>(l.type.name==="sectionDivider"&&r===t.state.doc.content.size-1&&(r=f-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):Z.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:f}=o.selection,V=r.schema.marks.link;if(!V)return!1;const fe=r.schema.text(t,[V.create({href:e})]),ge=r.schema.text(" ");return o.replaceWith(l,f,[fe,ge]),!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:S?.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 ue=()=>{if(!n)return;const{valid:e,value:t}=s.parseJson(s.getCodeBlockText(n));!e||t===null||s.setCodeBlockText(n,JSON.stringify(t,null,2))},me=()=>{n&&(navigator.clipboard?.writeText(s.getCodeBlockText(n)),M(!0),setTimeout(()=>M(!1),1500))};return n?c.jsxs(k.BikEditorShell,{minHeight:se,maxHeight:re,tightParagraphs:!S?.richPaste,jsonMode:u,style:ie,className:ce,children:[u&&c.jsxs(k.BikJsonHeader,{children:[c.jsx("span",{className:"bik-json-header-label",children:"JSON"}),c.jsxs("div",{className:"bik-json-header-actions",children:[c.jsxs("button",{type:"button",onClick:ue,disabled:!!m,title:"Format JSON",children:[c.jsx(ke.default,{size:16}),c.jsx(Q.BodyCaption,{children:"Beautify"})]}),c.jsxs("button",{type:"button",onClick:me,title:"Copy JSON",children:[c.jsx(Se.default,{size:16}),ae&&c.jsx(Q.BodyCaption,{children:"Copied"})]})]})]}),u?c.jsxs(k.BikJsonBody,{$error:!!m,children:[c.jsx(T.EditorContent,{editor:n}),le&&c.jsxs(k.BikJsonEmptyState,{"aria-hidden":!0,children:[c.jsx(xe.default,{size:20}),c.jsx("span",{children:p.placeholder??"Type or paste JSON here"})]})]}):c.jsx(T.EditorContent,{editor:n}),c.jsx(Ce.LinkBubbleMenu,{editor:n,renderLinkTooltip:ne?.renderTooltip}),u&&m?J?J(m):c.jsxs(k.BikJsonError,{children:[c.jsx(ye.default,{size:16}),c.jsxs("span",{children:[m.line!=null&&c.jsxs("strong",{children:["Line ",m.line,m.column!=null?`, column ${m.column}`:"",":"," "]}),m.error]})]}):null]}):null},G=a.forwardRef(Te);G.displayName="BikEditor";exports.BikEditor=G;
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\tuseState,\n} from 'react';\nimport { BodyCaption } from '@src/components/TypographyStyle';\nimport { Code, Copy, Info, WandSparkles } from '../icons';\nimport {\n\tBikEditorShell,\n\tBikJsonBody,\n\tBikJsonEmptyState,\n\tBikJsonError,\n\tBikJsonHeader,\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\tcharacterLimit,\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\t// jsonMode: no content yet → centered code-glyph + placeholder overlay.\n\tconst [jsonEmpty, setJsonEmpty] = useState(\n\t\tisJsonMode && !(initialContent ?? '').trim(),\n\t);\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\tcharacterLimit,\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 text = getCodeBlockText(e);\n\t\t\t\tconst result = parseJson(text);\n\t\t\t\tsetJsonError(result.valid ? null : result);\n\t\t\t\tsetJsonEmpty(!text.trim());\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 text = getCodeBlockText(editor);\n\t\t\tconst result = parseJson(text);\n\t\t\tsetJsonError(result.valid ? null : result);\n\t\t\tsetJsonEmpty(!text.trim());\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{isJsonMode && (\n\t\t\t\t<BikJsonHeader>\n\t\t\t\t\t<span className=\"bik-json-header-label\">JSON</span>\n\t\t\t\t\t<div className=\"bik-json-header-actions\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={handleJsonBeautify}\n\t\t\t\t\t\t\tdisabled={!!jsonError}\n\t\t\t\t\t\t\ttitle=\"Format JSON\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<WandSparkles size={16} />\n\t\t\t\t\t\t\t<BodyCaption>Beautify</BodyCaption>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button type=\"button\" onClick={handleJsonCopy} title=\"Copy JSON\">\n\t\t\t\t\t\t\t<Copy size={16} />\n\t\t\t\t\t\t\t{jsonCopied && <BodyCaption>Copied</BodyCaption>}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</BikJsonHeader>\n\t\t\t)}\n\t\t\t{isJsonMode ? (\n\t\t\t\t<BikJsonBody $error={!!jsonError}>\n\t\t\t\t\t<EditorContent editor={editor} />\n\t\t\t\t\t{jsonEmpty && (\n\t\t\t\t\t\t<BikJsonEmptyState aria-hidden>\n\t\t\t\t\t\t\t<Code size={20} />\n\t\t\t\t\t\t\t<span>{props.placeholder ?? 'Type or paste JSON here'}</span>\n\t\t\t\t\t\t</BikJsonEmptyState>\n\t\t\t\t\t)}\n\t\t\t\t</BikJsonBody>\n\t\t\t) : (\n\t\t\t\t<EditorContent editor={editor} />\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<Info size={16} />\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{jsonError.line != null && (\n\t\t\t\t\t\t\t\t<strong>\n\t\t\t\t\t\t\t\t\tLine {jsonError.line}\n\t\t\t\t\t\t\t\t\t{jsonError.column != null\n\t\t\t\t\t\t\t\t\t\t? `, column ${jsonError.column}`\n\t\t\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t\t\t:{' '}\n\t\t\t\t\t\t\t\t</strong>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{jsonError.error}\n\t\t\t\t\t\t</span>\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","characterLimit","shortcuts","sendShortcut","mentions","slashCommands","link","onPaste","onReady","onChange","onSend","onFocus","onBlur","onSelectionChange","minHeight","maxHeight","className","editorClassName","editorStyle","renderJsonError","isJsonMode","jsonError","setJsonError","useState","jsonCopied","setJsonCopied","jsonEmpty","setJsonEmpty","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","text","getCodeBlockText","result","parseJson","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","tr","linkNode","space","emoji","variableName","src","raw","setCodeBlockText","indent","valid","value","handleJsonBeautify","handleJsonCopy","jsxs","BikEditorShell","BikJsonHeader","jsx","WandSparkles","BodyCaption","Copy","BikJsonBody","EditorContent","BikJsonEmptyState","Code","LinkBubbleMenu","BikJsonError","Info","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 { Code, Copy, Info, WandSparkles } from '../icons';\nimport {\n\tBikEditorShell,\n\tBikJsonBody,\n\tBikJsonEmptyState,\n\tBikJsonError,\n\tBikJsonHeader,\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\tcharacterLimit,\n\t\tcharacterLimitHard,\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\t// jsonMode: no content yet → centered code-glyph + placeholder overlay.\n\tconst [jsonEmpty, setJsonEmpty] = useState(\n\t\tisJsonMode && !(initialContent ?? '').trim(),\n\t);\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\tcharacterLimit,\n\t\t\tcharacterLimitHard,\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\trenderMentionChipIcon: mentions?.renderChipIcon,\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 text = getCodeBlockText(e);\n\t\t\t\tconst result = parseJson(text);\n\t\t\t\tsetJsonError(result.valid ? null : result);\n\t\t\t\tsetJsonEmpty(!text.trim());\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 text = getCodeBlockText(editor);\n\t\t\tconst result = parseJson(text);\n\t\t\tsetJsonError(result.valid ? null : result);\n\t\t\tsetJsonEmpty(!text.trim());\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{isJsonMode && (\n\t\t\t\t<BikJsonHeader>\n\t\t\t\t\t<span className=\"bik-json-header-label\">JSON</span>\n\t\t\t\t\t<div className=\"bik-json-header-actions\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={handleJsonBeautify}\n\t\t\t\t\t\t\tdisabled={!!jsonError}\n\t\t\t\t\t\t\ttitle=\"Format JSON\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<WandSparkles size={16} />\n\t\t\t\t\t\t\t<BodyCaption>Beautify</BodyCaption>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button type=\"button\" onClick={handleJsonCopy} title=\"Copy JSON\">\n\t\t\t\t\t\t\t<Copy size={16} />\n\t\t\t\t\t\t\t{jsonCopied && <BodyCaption>Copied</BodyCaption>}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</BikJsonHeader>\n\t\t\t)}\n\t\t\t{isJsonMode ? (\n\t\t\t\t<BikJsonBody $error={!!jsonError}>\n\t\t\t\t\t<EditorContent editor={editor} />\n\t\t\t\t\t{jsonEmpty && (\n\t\t\t\t\t\t<BikJsonEmptyState aria-hidden>\n\t\t\t\t\t\t\t<Code size={20} />\n\t\t\t\t\t\t\t<span>{props.placeholder ?? 'Type or paste JSON here'}</span>\n\t\t\t\t\t\t</BikJsonEmptyState>\n\t\t\t\t\t)}\n\t\t\t\t</BikJsonBody>\n\t\t\t) : (\n\t\t\t\t<EditorContent editor={editor} />\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<Info size={16} />\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{jsonError.line != null && (\n\t\t\t\t\t\t\t\t<strong>\n\t\t\t\t\t\t\t\t\tLine {jsonError.line}\n\t\t\t\t\t\t\t\t\t{jsonError.column != null\n\t\t\t\t\t\t\t\t\t\t? `, column ${jsonError.column}`\n\t\t\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t\t\t:{' '}\n\t\t\t\t\t\t\t\t</strong>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{jsonError.error}\n\t\t\t\t\t\t</span>\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","characterLimit","characterLimitHard","shortcuts","sendShortcut","mentions","slashCommands","link","onPaste","onReady","onChange","onSend","onFocus","onBlur","onSelectionChange","minHeight","maxHeight","className","editorClassName","editorStyle","renderJsonError","isJsonMode","jsonError","setJsonError","useState","jsonCopied","setJsonCopied","jsonEmpty","setJsonEmpty","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","text","getCodeBlockText","result","parseJson","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","tr","linkNode","space","emoji","variableName","src","raw","setCodeBlockText","indent","valid","value","handleJsonBeautify","handleJsonCopy","jsxs","BikEditorShell","BikJsonHeader","jsx","WandSparkles","BodyCaption","Copy","BikJsonBody","EditorContent","BikJsonEmptyState","Code","LinkBubbleMenu","BikJsonError","Info","BikEditor","forwardRef"],"mappings":"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"}
@@ -78,14 +78,14 @@
78
78
  }
79
79
  /* Typed mention chips (agent-builder): distinct colour per reference kind. */
80
80
  .bik-mention[data-kind='tool'] {
81
- color: #1570ef;
82
- background: #eff8ff;
81
+ color: #616161;
82
+ background: #fafafa;
83
83
  border-radius: 4px;
84
84
  font-weight: 500;
85
85
  }
86
86
  .bik-mention[data-kind='subagent'] {
87
- color: #6938ef;
88
- background: #f4f3ff;
87
+ color: #28458f;
88
+ background: #e5f2ff;
89
89
  border-radius: 4px;
90
90
  font-weight: 500;
91
91
  }
@@ -116,14 +116,19 @@
116
116
  position: relative;
117
117
  margin: 0;
118
118
  background: transparent;
119
- /* Left padding reserves the line-number gutter; each .bik-json-lineno
120
- widget hangs back into it with a matching negative margin. Wide
121
- enough for a 3-digit line number (up to 999). */
122
- padding: 12px 12px 12px 4.2em;
119
+ /* Left padding reserves the line-number gutter; the gutter sits in it.
120
+ Wide enough for a 5-digit line number (files run to thousands of
121
+ lines). */
122
+ padding: 12px 12px 12px 5em;
123
123
  font-family: 'SFMono-Regular', ui-monospace, 'JetBrains Mono', Menlo,
124
124
  Consolas, 'Liberation Mono', monospace;
125
125
  font-size: 13px;
126
- line-height: 1.6;
126
+ /* INTEGER-px line box (not 1.6 ⇒ 20.8px). Browsers snap text line boxes
127
+ to whole device pixels but not the gutter's flex-item heights, so a
128
+ fractional line-height drifts them apart ~0.2px/line — by a couple
129
+ thousand lines the gutter is hundreds of px short and the last lines
130
+ lose their numbers. A whole-px line box on BOTH keeps them locked. */
131
+ line-height: 21px;
127
132
  white-space: pre;
128
133
  overflow-x: auto;
129
134
  tab-size: 2;
@@ -143,7 +148,7 @@
143
148
  position: absolute;
144
149
  left: 0;
145
150
  top: 12px; /* == the code block's padding-top */
146
- width: 3.5em; /* within the 4.2em reserved left padding */
151
+ width: 4.3em; /* within the 5em reserved left padding */
147
152
  display: flex;
148
153
  flex-direction: column;
149
154
  user-select: none;
@@ -152,11 +157,11 @@
152
157
  }
153
158
  .bik-json-lineno {
154
159
  box-sizing: border-box;
155
- height: 1.6em; /* == code line-height (13px × 1.6) so rows align */
156
- line-height: 1.6;
160
+ height: 21px; /* == the code line box (whole px) so rows never drift */
161
+ line-height: 21px;
157
162
  padding-right: 0.7em;
158
163
  text-align: right;
159
- /* Never let a 3-digit number (e.g. 210) break across two lines. */
164
+ /* Never let a line number break across two lines. */
160
165
  white-space: nowrap;
161
166
  color: ${e.COLORS.content.placeholder};
162
167
  border-right: 1px solid ${e.COLORS.stroke.primary};
@@ -251,7 +256,7 @@
251
256
  &:focus-within {
252
257
  border-color: ${({$error:o})=>o?e.COLORS.content.negative:e.BASE_COLORS.brand[800]};
253
258
  }
254
- `,d=t.default.div`
259
+ `,l=t.default.div`
255
260
  position: absolute;
256
261
  inset: 0;
257
262
  display: flex;
@@ -264,7 +269,7 @@
264
269
  line-height: 20px;
265
270
  pointer-events: none;
266
271
  user-select: none;
267
- `,l=t.default.div`
272
+ `,d=t.default.div`
268
273
  display: flex;
269
274
  align-items: flex-start;
270
275
  gap: 8px;
@@ -285,5 +290,5 @@
285
290
  strong {
286
291
  font-weight: 600;
287
292
  }
288
- `;exports.BikEditorShell=n;exports.BikJsonBody=s;exports.BikJsonEmptyState=d;exports.BikJsonError=l;exports.BikJsonHeader=a;
293
+ `;exports.BikEditorShell=n;exports.BikJsonBody=s;exports.BikJsonEmptyState=l;exports.BikJsonError=d;exports.BikJsonHeader=a;
289
294
  //# sourceMappingURL=BikEditor.styles.js.map