@adminide-stack/yantra-mobile 12.0.141-alpha.1 → 12.0.141

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 (220) hide show
  1. package/lib/features/agent-chat/NativeAgentChat.js +21 -4
  2. package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
  3. package/lib/features/chat/ApprovalCard.js +353 -0
  4. package/lib/features/chat/ApprovalCard.js.map +1 -0
  5. package/lib/features/chat/AskUserCard.js +9 -2
  6. package/lib/features/chat/AskUserCard.js.map +1 -1
  7. package/lib/features/chat/askUser.js +25 -3
  8. package/lib/features/chat/askUser.js.map +1 -1
  9. package/lib/features/chat/queuedFollowUpRows.js +13 -0
  10. package/lib/features/chat/queuedFollowUpRows.js.map +1 -0
  11. package/lib/features/devices/bodyComposition.js +116 -0
  12. package/lib/features/devices/bodyComposition.js.map +1 -0
  13. package/lib/features/devices/readings.js.map +1 -1
  14. package/lib/features/devices/session.js +22 -2
  15. package/lib/features/devices/session.js.map +1 -1
  16. package/lib/features/discover/DiscoverArticle.js +105 -92
  17. package/lib/features/discover/DiscoverArticle.js.map +1 -1
  18. package/lib/features/discover/DiscoverFeed.js +97 -48
  19. package/lib/features/discover/DiscoverFeed.js.map +1 -1
  20. package/lib/features/discover/DiscoverFollowUp.js +135 -0
  21. package/lib/features/discover/DiscoverFollowUp.js.map +1 -0
  22. package/lib/features/discover/DiscoverSidebar.js +555 -0
  23. package/lib/features/discover/DiscoverSidebar.js.map +1 -0
  24. package/lib/features/discover/DiscoverSkeletons.js +123 -0
  25. package/lib/features/discover/DiscoverSkeletons.js.map +1 -0
  26. package/lib/features/discover/DiscoverStoryCards.js +193 -87
  27. package/lib/features/discover/DiscoverStoryCards.js.map +1 -1
  28. package/lib/features/discover/followUpQuery.js +42 -0
  29. package/lib/features/discover/followUpQuery.js.map +1 -0
  30. package/lib/features/discover/markets.js +37 -0
  31. package/lib/features/discover/markets.js.map +1 -0
  32. package/lib/features/discover/useDiscoverSidebar.js +148 -0
  33. package/lib/features/discover/useDiscoverSidebar.js.map +1 -0
  34. package/lib/features/discover/weather.js +42 -0
  35. package/lib/features/discover/weather.js.map +1 -0
  36. package/lib/features/expenses/ExpensesAgentChatPane.js +1 -1
  37. package/lib/features/expenses/ExpensesAgentChatPane.js.map +1 -1
  38. package/lib/features/inbox/InboxAgentChatPane.js +1 -1
  39. package/lib/features/inbox/InboxAgentChatPane.js.map +1 -1
  40. package/lib/features/job-search/JobSearchAgentChatPane.js +1 -0
  41. package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -1
  42. package/lib/features/local-services/LocalServicesAgentChatPane.js +1 -1
  43. package/lib/features/local-services/LocalServicesAgentChatPane.js.map +1 -1
  44. package/lib/features/movies/MoviesAgentChatPane.js +1 -1
  45. package/lib/features/movies/MoviesAgentChatPane.js.map +1 -1
  46. package/lib/features/notion/NotionBlockSheets.js +206 -0
  47. package/lib/features/notion/NotionBlockSheets.js.map +1 -0
  48. package/lib/features/notion/NotionBlockView.js +36 -0
  49. package/lib/features/notion/NotionBlockView.js.map +1 -0
  50. package/lib/features/notion/NotionCommentsSheet.js +461 -0
  51. package/lib/features/notion/NotionCommentsSheet.js.map +1 -0
  52. package/lib/features/notion/NotionConnectionsSheet.js +244 -0
  53. package/lib/features/notion/NotionConnectionsSheet.js.map +1 -0
  54. package/lib/features/notion/NotionHistorySheet.js +439 -0
  55. package/lib/features/notion/NotionHistorySheet.js.map +1 -0
  56. package/lib/features/notion/NotionMediaBlocks.js +803 -0
  57. package/lib/features/notion/NotionMediaBlocks.js.map +1 -0
  58. package/lib/features/notion/NotionMentionSheet.js +279 -0
  59. package/lib/features/notion/NotionMentionSheet.js.map +1 -0
  60. package/lib/features/notion/NotionPageMenu.js +585 -0
  61. package/lib/features/notion/NotionPageMenu.js.map +1 -0
  62. package/lib/features/notion/NotionPageTree.js +220 -0
  63. package/lib/features/notion/NotionPageTree.js.map +1 -0
  64. package/lib/features/notion/NotionPageView.js +1253 -152
  65. package/lib/features/notion/NotionPageView.js.map +1 -1
  66. package/lib/features/notion/NotionShareSheet.js +606 -0
  67. package/lib/features/notion/NotionShareSheet.js.map +1 -0
  68. package/lib/features/notion/NotionSheets.js +87 -15
  69. package/lib/features/notion/NotionSheets.js.map +1 -1
  70. package/lib/features/notion/NotionSidebarSections.js +492 -0
  71. package/lib/features/notion/NotionSidebarSections.js.map +1 -0
  72. package/lib/features/notion/NotionWorkspaceAdmin.js +659 -0
  73. package/lib/features/notion/NotionWorkspaceAdmin.js.map +1 -0
  74. package/lib/features/notion/NotionWorkspaceView.js +257 -45
  75. package/lib/features/notion/NotionWorkspaceView.js.map +1 -1
  76. package/lib/features/notion/database/DatabaseCells.js +554 -0
  77. package/lib/features/notion/database/DatabaseCells.js.map +1 -0
  78. package/lib/features/notion/database/DatabaseDateLayouts.js +792 -0
  79. package/lib/features/notion/database/DatabaseDateLayouts.js.map +1 -0
  80. package/lib/features/notion/database/DatabaseLayouts.js +461 -0
  81. package/lib/features/notion/database/DatabaseLayouts.js.map +1 -0
  82. package/lib/features/notion/database/DatabaseSheets.js +791 -0
  83. package/lib/features/notion/database/DatabaseSheets.js.map +1 -0
  84. package/lib/features/notion/database/NotionDatabaseView.js +817 -0
  85. package/lib/features/notion/database/NotionDatabaseView.js.map +1 -0
  86. package/lib/features/notion/database/RowPropertiesPanel.js +162 -0
  87. package/lib/features/notion/database/RowPropertiesPanel.js.map +1 -0
  88. package/lib/features/notion/database/chartData.js +89 -0
  89. package/lib/features/notion/database/chartData.js.map +1 -0
  90. package/lib/features/notion/database/chartView.js +112 -0
  91. package/lib/features/notion/database/chartView.js.map +1 -0
  92. package/lib/features/notion/database/connectorButton.js +33 -0
  93. package/lib/features/notion/database/connectorButton.js.map +1 -0
  94. package/lib/features/notion/database/databaseCalc.js +208 -0
  95. package/lib/features/notion/database/databaseCalc.js.map +1 -0
  96. package/lib/features/notion/database/databaseCalendar.js +157 -0
  97. package/lib/features/notion/database/databaseCalendar.js.map +1 -0
  98. package/lib/features/notion/database/databaseCsv.js +98 -0
  99. package/lib/features/notion/database/databaseCsv.js.map +1 -0
  100. package/lib/features/notion/database/databaseCsvActions.js +58 -0
  101. package/lib/features/notion/database/databaseCsvActions.js.map +1 -0
  102. package/lib/features/notion/database/databaseFilter.js +473 -0
  103. package/lib/features/notion/database/databaseFilter.js.map +1 -0
  104. package/lib/features/notion/database/databaseFormula.js +1072 -0
  105. package/lib/features/notion/database/databaseFormula.js.map +1 -0
  106. package/lib/features/notion/database/databaseGroup.js +151 -0
  107. package/lib/features/notion/database/databaseGroup.js.map +1 -0
  108. package/lib/features/notion/database/databaseRollup.js +58 -0
  109. package/lib/features/notion/database/databaseRollup.js.map +1 -0
  110. package/lib/features/notion/database/databaseTimeline.js +156 -0
  111. package/lib/features/notion/database/databaseTimeline.js.map +1 -0
  112. package/lib/features/notion/database/databaseView.js +1188 -0
  113. package/lib/features/notion/database/databaseView.js.map +1 -0
  114. package/lib/features/notion/database/databaseViews.js +310 -0
  115. package/lib/features/notion/database/databaseViews.js.map +1 -0
  116. package/lib/features/notion/database/relationSource.js +92 -0
  117. package/lib/features/notion/database/relationSource.js.map +1 -0
  118. package/lib/features/notion/database/uniqueId.js +17 -0
  119. package/lib/features/notion/database/uniqueId.js.map +1 -0
  120. package/lib/features/notion/database/useNotionDatabase.js +617 -0
  121. package/lib/features/notion/database/useNotionDatabase.js.map +1 -0
  122. package/lib/features/notion/notionAgentRunStatus.js +39 -0
  123. package/lib/features/notion/notionAgentRunStatus.js.map +1 -0
  124. package/lib/features/notion/notionCodeLanguages.js +112 -0
  125. package/lib/features/notion/notionCodeLanguages.js.map +1 -0
  126. package/lib/features/notion/notionComments.js +86 -0
  127. package/lib/features/notion/notionComments.js.map +1 -0
  128. package/lib/features/notion/notionConnections.js +74 -0
  129. package/lib/features/notion/notionConnections.js.map +1 -0
  130. package/lib/features/notion/notionDocuments.js +453 -1
  131. package/lib/features/notion/notionDocuments.js.map +1 -1
  132. package/lib/features/notion/notionEditorModel.js +142 -7
  133. package/lib/features/notion/notionEditorModel.js.map +1 -1
  134. package/lib/features/notion/notionMarkdownShortcuts.js +51 -0
  135. package/lib/features/notion/notionMarkdownShortcuts.js.map +1 -0
  136. package/lib/features/notion/notionMedia.js +119 -0
  137. package/lib/features/notion/notionMedia.js.map +1 -0
  138. package/lib/features/notion/notionMentionDate.js +32 -0
  139. package/lib/features/notion/notionMentionDate.js.map +1 -0
  140. package/lib/features/notion/notionMentionOptions.js +162 -0
  141. package/lib/features/notion/notionMentionOptions.js.map +1 -0
  142. package/lib/features/notion/notionNotesAgent.js +445 -0
  143. package/lib/features/notion/notionNotesAgent.js.map +1 -0
  144. package/lib/features/notion/notionPageAccess.js +168 -0
  145. package/lib/features/notion/notionPageAccess.js.map +1 -0
  146. package/lib/features/notion/notionPageActions.js +138 -0
  147. package/lib/features/notion/notionPageActions.js.map +1 -0
  148. package/lib/features/notion/notionPageHistory.js +154 -0
  149. package/lib/features/notion/notionPageHistory.js.map +1 -0
  150. package/lib/features/notion/notionPageKinds.js +200 -0
  151. package/lib/features/notion/notionPageKinds.js.map +1 -0
  152. package/lib/features/notion/notionRecents.js +48 -0
  153. package/lib/features/notion/notionRecents.js.map +1 -0
  154. package/lib/features/notion/notionRichText.js +177 -0
  155. package/lib/features/notion/notionRichText.js.map +1 -0
  156. package/lib/features/notion/notionRichTitle.js +336 -0
  157. package/lib/features/notion/notionRichTitle.js.map +1 -0
  158. package/lib/features/notion/useNotionWorkspace.js +272 -13
  159. package/lib/features/notion/useNotionWorkspace.js.map +1 -1
  160. package/lib/features/notion/usePageActions.js +155 -0
  161. package/lib/features/notion/usePageActions.js.map +1 -0
  162. package/lib/features/resume/ResumeAgentChatPane.js +1 -1
  163. package/lib/features/resume/ResumeAgentChatPane.js.map +1 -1
  164. package/lib/features/shopping/ShoppingAgentChatPane.js +1 -1
  165. package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -1
  166. package/lib/features/study/StudyAgentChatPane.js +1 -1
  167. package/lib/features/study/StudyAgentChatPane.js.map +1 -1
  168. package/lib/features/travel/TravelAgentChatPane.js +1 -1
  169. package/lib/features/travel/TravelAgentChatPane.js.map +1 -1
  170. package/lib/features/webbuilder/WebBuilderExperience.js +40 -8
  171. package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
  172. package/lib/features/webbuilder/buildFragments.js +1 -1
  173. package/lib/features/webbuilder/buildFragments.js.map +1 -1
  174. package/lib/features/webbuilder/codeFiles.js +302 -0
  175. package/lib/features/webbuilder/codeFiles.js.map +1 -0
  176. package/lib/features/webbuilder/codeHighlight.js +209 -0
  177. package/lib/features/webbuilder/codeHighlight.js.map +1 -0
  178. package/lib/features/webbuilder/components/CodeView.js +682 -52
  179. package/lib/features/webbuilder/components/CodeView.js.map +1 -1
  180. package/lib/features/webbuilder/components/PreviewScreen.js +59 -38
  181. package/lib/features/webbuilder/components/PreviewScreen.js.map +1 -1
  182. package/lib/features/webbuilder/components/ProjectChat.js +3 -3
  183. package/lib/features/webbuilder/components/ProjectChat.js.map +1 -1
  184. package/lib/features/webbuilder/stepLabels.js +68 -0
  185. package/lib/features/webbuilder/stepLabels.js.map +1 -0
  186. package/lib/hooks/useHostChatSteering.js +45 -0
  187. package/lib/hooks/useHostChatSteering.js.map +1 -0
  188. package/lib/screens/Chat/index.js +2 -12
  189. package/lib/screens/Chat/index.js.map +1 -1
  190. package/lib/screens/Devices/index.js +205 -3
  191. package/lib/screens/Devices/index.js.map +1 -1
  192. package/lib/screens/ExpensesNative/useExpensesHostChat.js +25 -5
  193. package/lib/screens/ExpensesNative/useExpensesHostChat.js.map +1 -1
  194. package/lib/screens/InboxNative/useInboxHostChat.js +25 -5
  195. package/lib/screens/InboxNative/useInboxHostChat.js.map +1 -1
  196. package/lib/screens/JobSearchNative/useJobSearchHostChat.js +25 -5
  197. package/lib/screens/JobSearchNative/useJobSearchHostChat.js.map +1 -1
  198. package/lib/screens/LocalServicesNative/useLocalServicesHostChat.js +25 -5
  199. package/lib/screens/LocalServicesNative/useLocalServicesHostChat.js.map +1 -1
  200. package/lib/screens/MoviesNative/useMoviesHostChat.js +25 -5
  201. package/lib/screens/MoviesNative/useMoviesHostChat.js.map +1 -1
  202. package/lib/screens/NotionPage/index.js +2 -2
  203. package/lib/screens/NotionPage/index.js.map +1 -1
  204. package/lib/screens/ResumeNative/useResumeHostChat.js +25 -5
  205. package/lib/screens/ResumeNative/useResumeHostChat.js.map +1 -1
  206. package/lib/screens/ShoppingNative/useShoppingHostChat.js +25 -5
  207. package/lib/screens/ShoppingNative/useShoppingHostChat.js.map +1 -1
  208. package/lib/screens/StudyNative/useStudyHostChat.js +25 -5
  209. package/lib/screens/StudyNative/useStudyHostChat.js.map +1 -1
  210. package/lib/screens/TravelNative/useTravelHostChat.js +25 -5
  211. package/lib/screens/TravelNative/useTravelHostChat.js.map +1 -1
  212. package/lib/screens/WebBuilderNative/codeWorkspaceApi.js +222 -0
  213. package/lib/screens/WebBuilderNative/codeWorkspaceApi.js.map +1 -0
  214. package/lib/screens/WebBuilderNative/index.js +1 -1
  215. package/lib/screens/WebBuilderNative/index.js.map +1 -1
  216. package/lib/screens/WebBuilderNative/sandboxProxyApi.js +126 -4
  217. package/lib/screens/WebBuilderNative/sandboxProxyApi.js.map +1 -1
  218. package/lib/screens/WebBuilderNative/useWebBuilderHost.js +120 -11
  219. package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
  220. package/package.json +4 -4
@@ -0,0 +1,336 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __objRest = (source, exclude) => {
21
+ var target = {};
22
+ for (var prop in source)
23
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
24
+ target[prop] = source[prop];
25
+ if (source != null && __getOwnPropSymbols)
26
+ for (var prop of __getOwnPropSymbols(source)) {
27
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
28
+ target[prop] = source[prop];
29
+ }
30
+ return target;
31
+ };
32
+ function mentionKey(m) {
33
+ if (m.type === "page") return m.id;
34
+ if (m.type === "date") return `${m.end ? `${m.start}..${m.end}` : m.start}${m.reminder ? "!r" : ""}`;
35
+ return m.id || m.name;
36
+ }
37
+ function cleanAnnotations(annotations) {
38
+ const a = {};
39
+ for (const [k, v] of Object.entries(annotations != null ? annotations : {})) {
40
+ if (v === false || v === void 0 || v === null || v === "" || v === "default") continue;
41
+ a[k] = v;
42
+ }
43
+ return a;
44
+ }
45
+ function styleKey(run) {
46
+ const a = cleanAnnotations(run.annotations);
47
+ const keys = Object.keys(a).sort();
48
+ return JSON.stringify([keys.map((k) => [k, a[k]]), run.href || "", run.mention ? `${run.mention.type}:${mentionKey(run.mention)}` : ""]);
49
+ }
50
+ const runsText = (runs) => runs.map((r) => r.content).join("");
51
+ function normalizeRuns(runs) {
52
+ const out = [];
53
+ for (const r of runs) {
54
+ if (!r.content) continue;
55
+ const last = out[out.length - 1];
56
+ if (last && !last.mention && !r.mention && styleKey(last) === styleKey(r)) last.content += r.content;
57
+ else out.push(__spreadValues({}, r));
58
+ }
59
+ return out;
60
+ }
61
+ function sliceRuns(runs, start, end) {
62
+ const out = [];
63
+ let pos = 0;
64
+ for (const r of runs) {
65
+ const rs = pos;
66
+ const re = pos + r.content.length;
67
+ pos = re;
68
+ const a = Math.max(start, rs);
69
+ const b = Math.min(end, re);
70
+ if (a >= b) continue;
71
+ const piece = __spreadProps(__spreadValues({}, r), {
72
+ content: r.content.slice(a - rs, b - rs)
73
+ });
74
+ if (piece.mention && (a !== rs || b !== re)) delete piece.mention;
75
+ out.push(piece);
76
+ }
77
+ return out;
78
+ }
79
+ function styleAt(runs, offset) {
80
+ if (runs.length === 0) return {};
81
+ let pos = 0;
82
+ for (let i = 0; i < runs.length; i++) {
83
+ const r = runs[i];
84
+ const end = pos + r.content.length;
85
+ if (offset > pos && offset <= end) {
86
+ const insideLink = offset < end && !r.mention;
87
+ return __spreadValues({
88
+ annotations: r.annotations
89
+ }, r.href && insideLink ? {
90
+ href: r.href
91
+ } : {});
92
+ }
93
+ pos = end;
94
+ }
95
+ return {
96
+ annotations: runs[0].annotations
97
+ };
98
+ }
99
+ function applyPlainTextEdit(runs, nextText) {
100
+ const prevText = runsText(runs);
101
+ if (prevText === nextText) return normalizeRuns(runs);
102
+ let p = 0;
103
+ const max = Math.min(prevText.length, nextText.length);
104
+ while (p < max && prevText[p] === nextText[p]) p++;
105
+ let q = 0;
106
+ while (q < max - p && prevText[prevText.length - 1 - q] === nextText[nextText.length - 1 - q]) q++;
107
+ const inserted = nextText.slice(p, nextText.length - q);
108
+ const head = sliceRuns(runs, 0, p);
109
+ const tail = sliceRuns(runs, prevText.length - q, prevText.length);
110
+ const mid = inserted ? [__spreadProps(__spreadValues({}, styleAt(runs, p)), {
111
+ content: inserted
112
+ })] : [];
113
+ return normalizeRuns([...head, ...mid, ...tail]);
114
+ }
115
+ function replaceRange(runs, start, end, inserted) {
116
+ const len = runsText(runs).length;
117
+ const a = Math.max(0, Math.min(start, len));
118
+ const b = Math.max(a, Math.min(end, len));
119
+ return normalizeRuns([...sliceRuns(runs, 0, a), ...inserted, ...sliceRuns(runs, b, len)]);
120
+ }
121
+ function withFormat(r, update) {
122
+ var _b;
123
+ const _a = update, {
124
+ href
125
+ } = _a, annotationUpdates = __objRest(_a, [
126
+ "href"
127
+ ]);
128
+ const next = __spreadProps(__spreadValues({}, r), {
129
+ annotations: __spreadValues(__spreadValues({}, (_b = r.annotations) != null ? _b : {}), annotationUpdates)
130
+ });
131
+ if (href !== void 0) {
132
+ if (href) next.href = href;
133
+ else delete next.href;
134
+ }
135
+ return next;
136
+ }
137
+ function applyFormatToAll(runs, update) {
138
+ return normalizeRuns(runs.map((r) => withFormat(r, update)));
139
+ }
140
+ function applyFormatRange(runs, start, end, update) {
141
+ const len = runsText(runs).length;
142
+ const a = Math.max(0, Math.min(start, len));
143
+ const b = Math.max(a, Math.min(end, len));
144
+ if (a === b) return normalizeRuns(runs);
145
+ let s = a;
146
+ let e = b;
147
+ let pos = 0;
148
+ for (const r of runs) {
149
+ const rs = pos;
150
+ const re = pos + r.content.length;
151
+ pos = re;
152
+ if (!r.mention) continue;
153
+ if (s > rs && s < re) s = rs;
154
+ if (e > rs && e < re) e = re;
155
+ }
156
+ const middle = sliceRuns(runs, s, e).map((r) => withFormat(r, update));
157
+ return normalizeRuns([...sliceRuns(runs, 0, s), ...middle, ...sliceRuns(runs, e, len)]);
158
+ }
159
+ function rangeHasFormat(runs, start, end, key) {
160
+ const part = sliceRuns(runs, start, end);
161
+ if (part.length === 0) return false;
162
+ return part.every((r) => key === "href" ? !!r.href : !!cleanAnnotations(r.annotations)[key]);
163
+ }
164
+ function linkAt(runs, start, end) {
165
+ var _a;
166
+ const part = sliceRuns(runs, start, Math.max(end, start + 1));
167
+ const href = (_a = part[0]) == null ? void 0 : _a.href;
168
+ return href && part.every((r) => r.href === href) ? href : void 0;
169
+ }
170
+ function runsToTitleProperty(runs) {
171
+ if (runs.length === 0) return [{
172
+ text: {
173
+ content: ""
174
+ },
175
+ plainText: ""
176
+ }];
177
+ return runs.map((r) => {
178
+ const textObj = {
179
+ content: r.content
180
+ };
181
+ const seg = {
182
+ text: textObj,
183
+ plainText: r.content
184
+ };
185
+ const annotations = cleanAnnotations(r.annotations);
186
+ if (Object.keys(annotations).length > 0) seg.annotations = annotations;
187
+ if (r.href) {
188
+ seg.href = r.href;
189
+ textObj.link = {
190
+ url: r.href
191
+ };
192
+ }
193
+ if (r.mention) {
194
+ seg.type = "mention";
195
+ const m = r.mention;
196
+ if (m.type === "page") seg.mention = {
197
+ type: "page",
198
+ page: {
199
+ id: m.id
200
+ }
201
+ };
202
+ else if (m.type === "date") seg.mention = {
203
+ type: "date",
204
+ date: __spreadValues(__spreadValues({
205
+ start: m.start
206
+ }, m.end ? {
207
+ end: m.end
208
+ } : {}), m.reminder ? {
209
+ reminder: true
210
+ } : {})
211
+ };
212
+ else seg.mention = {
213
+ type: "user",
214
+ user: __spreadProps(__spreadValues({}, m.id ? {
215
+ id: m.id
216
+ } : {}), {
217
+ name: m.name
218
+ })
219
+ };
220
+ }
221
+ return seg;
222
+ });
223
+ }
224
+ function mentionOfSegment(seg) {
225
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
226
+ const m = seg == null ? void 0 : seg.mention;
227
+ if (!m || typeof m !== "object") return void 0;
228
+ if (m.type === "page") {
229
+ const id = (_b = (_a = m.page) == null ? void 0 : _a.id) != null ? _b : m.id;
230
+ if (typeof id === "string" && id) return {
231
+ type: "page",
232
+ id
233
+ };
234
+ }
235
+ if (m.type === "date") {
236
+ const start = (_d = (_c = m.date) == null ? void 0 : _c.start) != null ? _d : m.start;
237
+ const end = (_f = (_e = m.date) == null ? void 0 : _e.end) != null ? _f : m.end;
238
+ const reminder = ((_h = (_g = m.date) == null ? void 0 : _g.reminder) != null ? _h : m.reminder) === true;
239
+ if (typeof start === "string" && start) return __spreadValues(__spreadValues({
240
+ type: "date",
241
+ start
242
+ }, typeof end === "string" && end ? {
243
+ end
244
+ } : {}), reminder ? {
245
+ reminder: true
246
+ } : {});
247
+ }
248
+ if (m.type === "user") {
249
+ const id = (_j = (_i = m.user) == null ? void 0 : _i.id) != null ? _j : m.id;
250
+ const name = (_m = (_l = (_k = m.user) == null ? void 0 : _k.name) != null ? _l : m.name) != null ? _m : typeof (seg == null ? void 0 : seg.plainText) === "string" ? seg.plainText : void 0;
251
+ if (typeof name === "string" && name.trim()) return __spreadValues({
252
+ type: "user",
253
+ name: name.trim()
254
+ }, typeof id === "string" && id ? {
255
+ id
256
+ } : {});
257
+ }
258
+ return void 0;
259
+ }
260
+ const INLINE_MARKDOWN = [
261
+ {
262
+ open: "**",
263
+ key: "bold"
264
+ },
265
+ {
266
+ open: "~~",
267
+ key: "strikethrough"
268
+ },
269
+ {
270
+ open: "`",
271
+ key: "code"
272
+ },
273
+ // `$E = mc^2$` → inline equation (the run's text is the TeX source).
274
+ {
275
+ open: "$",
276
+ key: "equation"
277
+ },
278
+ {
279
+ open: "*",
280
+ key: "italic"
281
+ },
282
+ {
283
+ open: "_",
284
+ key: "italic"
285
+ }
286
+ ];
287
+ function applyInlineMarkdown(runs, caret) {
288
+ const text = runsText(runs);
289
+ const before = text.slice(0, caret);
290
+ for (const {
291
+ open,
292
+ key
293
+ } of INLINE_MARKDOWN) {
294
+ if (!before.endsWith(open)) continue;
295
+ const closeAt = caret - open.length;
296
+ const openAt = before.lastIndexOf(open, closeAt - 1);
297
+ if (openAt < 0) continue;
298
+ const inner = before.slice(openAt + open.length, closeAt);
299
+ if (!inner || /^\s|\s$/.test(inner) || inner.includes("\n")) continue;
300
+ if (open.length === 1 && (before[openAt - 1] === open || before[closeAt - 1] === open)) continue;
301
+ if (openAt > 0 && /[\w]/.test(before[openAt - 1]) && open !== "`") continue;
302
+ if (key === "equation" && /^\d/.test(inner) && /\d$/.test(inner) && /\s/.test(inner)) continue;
303
+ const span = sliceRuns(runs, openAt, caret);
304
+ if (span.some((r) => r.mention || key !== "code" && cleanAnnotations(r.annotations).code || key !== "equation" && cleanAnnotations(r.annotations).equation)) continue;
305
+ let next = replaceRange(runs, closeAt, caret, []);
306
+ next = replaceRange(next, openAt, openAt + open.length, []);
307
+ next = applyFormatRange(next, openAt, openAt + inner.length, {
308
+ [key]: true
309
+ });
310
+ const end = openAt + inner.length;
311
+ return {
312
+ runs: next,
313
+ caret: end
314
+ };
315
+ }
316
+ return null;
317
+ }
318
+ function titlePlainText(properties) {
319
+ const t = properties == null ? void 0 : properties.title;
320
+ if (typeof t === "string") return t;
321
+ if (Array.isArray(t)) return t.map((r) => {
322
+ var _a, _b, _c;
323
+ return (_c = (_b = r == null ? void 0 : r.plainText) != null ? _b : (_a = r == null ? void 0 : r.text) == null ? void 0 : _a.content) != null ? _c : "";
324
+ }).join("");
325
+ return "";
326
+ }
327
+ function textTitle(text) {
328
+ return [{
329
+ type: "text",
330
+ text: {
331
+ content: text
332
+ },
333
+ plainText: text,
334
+ annotations: {}
335
+ }];
336
+ }export{applyFormatRange,applyFormatToAll,applyInlineMarkdown,applyPlainTextEdit,linkAt,mentionKey,mentionOfSegment,normalizeRuns,rangeHasFormat,replaceRange,runsText,runsToTitleProperty,textTitle,titlePlainText};//# sourceMappingURL=notionRichTitle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notionRichTitle.js","sources":["../../../src/features/notion/notionRichTitle.ts"],"sourcesContent":["// Ported verbatim from forms-stack packages/notion-api/browser/src/utils/richTitle.ts (develop).\n// Keep in sync with the web: both clients must read and write the same rich-text titles.\n/* eslint-disable */\n/**\n * Rich-text titles: the stored `properties.title` is a list of runs (\"a \", **bold**, \" word\",\n * @Page mention). These helpers keep that structure intact while the text is edited:\n *\n * - `applyPlainTextEdit` applies a plain-text change as a diff, so untouched runs keep their\n * formatting and inserted text takes the style of the character before it (a link only grows\n * when you type inside it, not at its end — like Notion).\n * - `applyFormatRange` / `rangeHasFormat` format just the selected characters (⌘B on two words).\n * - `replaceRange` inserts runs (a page mention, a pasted link) in place of a selection.\n *\n * A mention is atomic: any edit that cuts into it turns what is left into plain text.\n */\n\n/**\n * An inline mention: a page link, a date (\"@Today\" in read mode) or a person (\"@Olivia\").\n * The run's `content` is the stored text (page title, absolute date label, person name).\n */\nexport type RichMention =\n | { type: 'page'; id: string }\n | {\n type: 'date';\n start: string;\n end?: string;\n /** Notify the author in their inbox when due. */ reminder?: boolean;\n }\n | { type: 'user'; id?: string; name: string };\n\n/** Stable identity of a mention (style key, DOM `data-mention-id`). */\nexport function mentionKey(m: RichMention): string {\n if (m.type === 'page') return m.id;\n if (m.type === 'date') return `${m.end ? `${m.start}..${m.end}` : m.start}${m.reminder ? '!r' : ''}`;\n return m.id || m.name;\n}\n\nexport interface RichRun {\n content: string;\n annotations?: Record<string, unknown>;\n href?: string;\n mention?: RichMention;\n}\n\nfunction cleanAnnotations(annotations: Record<string, unknown> | undefined): Record<string, unknown> {\n const a: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(annotations ?? {})) {\n if (v === false || v === undefined || v === null || v === '' || v === 'default') continue;\n a[k] = v;\n }\n return a;\n}\n\n/** Canonical style key: drops false/empty annotation values so `{bold:false}` equals `{}`. */\nfunction styleKey(run: RichRun): string {\n const a = cleanAnnotations(run.annotations);\n const keys = Object.keys(a).sort();\n return JSON.stringify([\n keys.map((k) => [k, a[k]]),\n run.href || '',\n run.mention ? `${run.mention.type}:${mentionKey(run.mention)}` : '',\n ]);\n}\n\nexport const runsText = (runs: RichRun[]): string => runs.map((r) => r.content).join('');\n\n/** Join neighbouring runs that look the same and drop empty runs. Mentions never merge. */\nexport function normalizeRuns(runs: RichRun[]): RichRun[] {\n const out: RichRun[] = [];\n for (const r of runs) {\n if (!r.content) continue;\n const last = out[out.length - 1];\n if (last && !last.mention && !r.mention && styleKey(last) === styleKey(r)) last.content += r.content;\n else out.push({ ...r });\n }\n return out;\n}\n\n/** Same text and same formatting (ignoring false/empty annotation noise)? */\nexport function sameRuns(a: RichRun[], b: RichRun[]): boolean {\n const na = normalizeRuns(a);\n const nb = normalizeRuns(b);\n if (na.length !== nb.length) return false;\n return na.every((r, i) => r.content === nb[i].content && styleKey(r) === styleKey(nb[i]));\n}\n\n/** Runs covering [start, end) of the joined text. A mention cut in part becomes plain text. */\nfunction sliceRuns(runs: RichRun[], start: number, end: number): RichRun[] {\n const out: RichRun[] = [];\n let pos = 0;\n for (const r of runs) {\n const rs = pos;\n const re = pos + r.content.length;\n pos = re;\n const a = Math.max(start, rs);\n const b = Math.min(end, re);\n if (a >= b) continue;\n const piece: RichRun = { ...r, content: r.content.slice(a - rs, b - rs) };\n if (piece.mention && (a !== rs || b !== re)) delete piece.mention;\n out.push(piece);\n }\n return out;\n}\n\n/** Style that text inserted at `offset` should take. */\nfunction styleAt(runs: RichRun[], offset: number): Omit<RichRun, 'content'> {\n if (runs.length === 0) return {};\n let pos = 0;\n for (let i = 0; i < runs.length; i++) {\n const r = runs[i];\n const end = pos + r.content.length;\n if (offset > pos && offset <= end) {\n // Typing right after a link (at its end) does not extend the link; text typed next\n // to a mention is never part of it.\n const insideLink = offset < end && !r.mention;\n return { annotations: r.annotations, ...(r.href && insideLink ? { href: r.href } : {}) };\n }\n pos = end;\n }\n // Insert at the very start: borrow the first run's look (minus its link).\n return { annotations: runs[0].annotations };\n}\n\n/**\n * Apply a plain-text edit to rich runs: keep the common prefix and suffix exactly (with their\n * formatting) and replace only what changed in between.\n */\nexport function applyPlainTextEdit(runs: RichRun[], nextText: string): RichRun[] {\n const prevText = runsText(runs);\n if (prevText === nextText) return normalizeRuns(runs);\n let p = 0;\n const max = Math.min(prevText.length, nextText.length);\n while (p < max && prevText[p] === nextText[p]) p++;\n let q = 0;\n while (q < max - p && prevText[prevText.length - 1 - q] === nextText[nextText.length - 1 - q]) q++;\n const inserted = nextText.slice(p, nextText.length - q);\n const head = sliceRuns(runs, 0, p);\n const tail = sliceRuns(runs, prevText.length - q, prevText.length);\n const mid: RichRun[] = inserted ? [{ ...styleAt(runs, p), content: inserted }] : [];\n return normalizeRuns([...head, ...mid, ...tail]);\n}\n\n/** Replace [start, end) with `inserted` runs (a mention, a pasted link, plain text). */\nexport function replaceRange(runs: RichRun[], start: number, end: number, inserted: RichRun[]): RichRun[] {\n const len = runsText(runs).length;\n const a = Math.max(0, Math.min(start, len));\n const b = Math.max(a, Math.min(end, len));\n return normalizeRuns([...sliceRuns(runs, 0, a), ...inserted, ...sliceRuns(runs, b, len)]);\n}\n\ntype FormatUpdate = Record<string, unknown> & { href?: string | null };\n\nfunction withFormat(r: RichRun, update: FormatUpdate): RichRun {\n const { href, ...annotationUpdates } = update;\n const next: RichRun = { ...r, annotations: { ...(r.annotations ?? {}), ...annotationUpdates } };\n if (href !== undefined) {\n if (href) next.href = href;\n else delete next.href;\n }\n return next;\n}\n\n/** Apply a formatting change (⌘B, colour, link…) to every run, keeping each run's other styles. */\nexport function applyFormatToAll(runs: RichRun[], update: FormatUpdate): RichRun[] {\n return normalizeRuns(runs.map((r) => withFormat(r, update)));\n}\n\n/** Apply a formatting change to the characters in [start, end) only (⌘B on a selection). */\nexport function applyFormatRange(runs: RichRun[], start: number, end: number, update: FormatUpdate): RichRun[] {\n const len = runsText(runs).length;\n const a = Math.max(0, Math.min(start, len));\n const b = Math.max(a, Math.min(end, len));\n if (a === b) return normalizeRuns(runs);\n // Slicing a mention partially would turn it to text — formatting keeps whole mentions intact\n // by widening the range to their edges.\n let s = a;\n let e = b;\n let pos = 0;\n for (const r of runs) {\n const rs = pos;\n const re = pos + r.content.length;\n pos = re;\n if (!r.mention) continue;\n if (s > rs && s < re) s = rs;\n if (e > rs && e < re) e = re;\n }\n const middle = sliceRuns(runs, s, e).map((r) => withFormat(r, update));\n return normalizeRuns([...sliceRuns(runs, 0, s), ...middle, ...sliceRuns(runs, e, len)]);\n}\n\n/** Does every character in [start, end) have this annotation (so ⌘B should turn it OFF)? */\nexport function rangeHasFormat(runs: RichRun[], start: number, end: number, key: string): boolean {\n const part = sliceRuns(runs, start, end);\n if (part.length === 0) return false;\n return part.every((r) => (key === 'href' ? !!r.href : !!cleanAnnotations(r.annotations)[key]));\n}\n\n/** The link (if any) covering the whole of [start, end). */\nexport function linkAt(runs: RichRun[], start: number, end: number): string | undefined {\n const part = sliceRuns(runs, start, Math.max(end, start + 1));\n const href = part[0]?.href;\n return href && part.every((r) => r.href === href) ? href : undefined;\n}\n\n/** Runs → the `properties.title` array updateBlock expects (top-level href + Notion-style link). */\nexport function runsToTitleProperty(runs: RichRun[]): Record<string, unknown>[] {\n if (runs.length === 0) return [{ text: { content: '' }, plainText: '' }];\n return runs.map((r) => {\n const textObj: Record<string, unknown> = { content: r.content };\n const seg: Record<string, unknown> = { text: textObj, plainText: r.content };\n const annotations = cleanAnnotations(r.annotations);\n if (Object.keys(annotations).length > 0) seg.annotations = annotations;\n if (r.href) {\n seg.href = r.href;\n textObj.link = { url: r.href };\n }\n if (r.mention) {\n // Notion's shape: { type: 'mention', mention: { type: 'page', page: { id } } }\n // (date: `{ date: { start, end } }`, person: `{ user: { id, name } }`).\n seg.type = 'mention';\n const m = r.mention;\n if (m.type === 'page') seg.mention = { type: 'page', page: { id: m.id } };\n else if (m.type === 'date')\n seg.mention = {\n type: 'date',\n date: {\n start: m.start,\n ...(m.end ? { end: m.end } : {}),\n ...(m.reminder ? { reminder: true } : {}),\n },\n };\n else seg.mention = { type: 'user', user: { ...(m.id ? { id: m.id } : {}), name: m.name } };\n }\n return seg;\n });\n}\n\n/** Read a mention off a stored title segment (Notion shape or our flat `{ type, id }`). */\nexport function mentionOfSegment(seg: Record<string, any> | null | undefined): RichMention | undefined {\n const m = seg?.mention;\n if (!m || typeof m !== 'object') return undefined;\n if (m.type === 'page') {\n const id = m.page?.id ?? m.id;\n if (typeof id === 'string' && id) return { type: 'page', id };\n }\n if (m.type === 'date') {\n const start = m.date?.start ?? m.start;\n const end = m.date?.end ?? m.end;\n const reminder = (m.date?.reminder ?? m.reminder) === true;\n if (typeof start === 'string' && start)\n return {\n type: 'date',\n start,\n ...(typeof end === 'string' && end ? { end } : {}),\n ...(reminder ? { reminder: true } : {}),\n };\n }\n if (m.type === 'user') {\n const id = m.user?.id ?? m.id;\n const name = m.user?.name ?? m.name ?? (typeof seg?.plainText === 'string' ? seg.plainText : undefined);\n if (typeof name === 'string' && name.trim())\n return { type: 'user', name: name.trim(), ...(typeof id === 'string' && id ? { id } : {}) };\n }\n return undefined;\n}\n\nconst INLINE_MARKDOWN: Array<{ open: string; key: string }> = [\n { open: '**', key: 'bold' },\n { open: '~~', key: 'strikethrough' },\n { open: '`', key: 'code' },\n // `$E = mc^2$` → inline equation (the run's text is the TeX source).\n { open: '$', key: 'equation' },\n { open: '*', key: 'italic' },\n { open: '_', key: 'italic' },\n];\n\n/**\n * Inline Markdown as you type (Notion): when the character just typed closes `**bold**`,\n * `*italic*` / `_italic_`, `` `code` `` or `~~strike~~` right before the caret, drop the markers and\n * format the text between them. Returns null when nothing matched.\n */\nexport function applyInlineMarkdown(runs: RichRun[], caret: number): { runs: RichRun[]; caret: number } | null {\n const text = runsText(runs);\n const before = text.slice(0, caret);\n for (const { open, key } of INLINE_MARKDOWN) {\n if (!before.endsWith(open)) continue;\n const closeAt = caret - open.length;\n const openAt = before.lastIndexOf(open, closeAt - 1);\n if (openAt < 0) continue;\n const inner = before.slice(openAt + open.length, closeAt);\n if (!inner || /^\\s|\\s$/.test(inner) || inner.includes('\\n')) continue;\n // `*` must not be half of a `**` pair; the opener must start a word.\n if (open.length === 1 && (before[openAt - 1] === open || before[closeAt - 1] === open)) continue;\n if (openAt > 0 && /[\\w]/.test(before[openAt - 1]) && open !== '`') continue;\n // \"$5 and $10\": an amount, not TeX (a digit right after the opening `$` and before the closing one).\n if (key === 'equation' && /^\\d/.test(inner) && /\\d$/.test(inner) && /\\s/.test(inner)) continue;\n // Never reformat across a mention or inside code.\n const span = sliceRuns(runs, openAt, caret);\n if (\n span.some(\n (r) =>\n r.mention ||\n (key !== 'code' && cleanAnnotations(r.annotations).code) ||\n (key !== 'equation' && cleanAnnotations(r.annotations).equation),\n )\n )\n continue;\n let next = replaceRange(runs, closeAt, caret, []);\n next = replaceRange(next, openAt, openAt + open.length, []);\n next = applyFormatRange(next, openAt, openAt + inner.length, { [key]: true });\n const end = openAt + inner.length;\n // Text typed after the formatted word should not continue the format.\n return { runs: next, caret: end };\n }\n return null;\n}\n\n/** In-app link target a mention copies as: `/page/<id>`, `/date/<start>[/<end>]`, `/user/[<id>]`. */\nfunction mentionMarkdownTarget(m: RichMention): string {\n if (m.type === 'page') return `/page/${m.id}`;\n if (m.type === 'date') return `/date/${m.start}${m.end ? `/${m.end}` : ''}`;\n return `/user/${m.id ? encodeURIComponent(m.id) : ''}`;\n}\n\nconst DATE_TARGET = /^\\/date\\/(\\d{4}-\\d{2}-\\d{2}(?:T[^/\\s]*)?)(?:\\/(\\d{4}-\\d{2}-\\d{2}(?:T[^/\\s]*)?))?$/;\n\nfunction mentionFromMarkdownTarget(target: string, text: string): RichMention | undefined {\n const page = /^\\/page\\/([^/?#]+)$/.exec(target);\n if (page) return { type: 'page', id: page[1] };\n const date = DATE_TARGET.exec(target);\n if (date) return { type: 'date', start: date[1], ...(date[2] ? { end: date[2] } : {}) };\n const user = /^\\/user\\/([^/?#]*)$/.exec(target);\n if (user && text.trim()) {\n let id = '';\n try {\n id = decodeURIComponent(user[1]);\n } catch {\n id = user[1];\n }\n return { type: 'user', name: text.trim(), ...(id ? { id } : {}) };\n }\n return undefined;\n}\n\n/** Runs → inline Markdown (copying blocks): **bold**, *italic*, `code`, ~~strike~~, [text](url). */\nexport function runsToMarkdown(runs: RichRun[]): string {\n return normalizeRuns(runs)\n .map((r) => {\n const a = cleanAnnotations(r.annotations);\n if (r.mention) return `[${r.content}](${mentionMarkdownTarget(r.mention)})`;\n let t = r.content;\n if (!t.trim()) return t;\n // Markers hug the text (Markdown ignores \"** bold **\"), spaces stay outside.\n const lead = t.match(/^\\s*/)![0];\n const trail = t.match(/\\s*$/)![0];\n t = t.trim();\n if (a.equation) return lead + '$' + t + '$' + trail;\n if (a.code) t = '`' + t + '`';\n if (a.bold) t = '**' + t + '**';\n if (a.italic) t = '*' + t + '*';\n if (a.strikethrough) t = '~~' + t + '~~';\n if (r.href) t = `[${t}](${r.href})`;\n return lead + t + trail;\n })\n .join('');\n}\n\nconst MD_TOKEN =\n /(\\*\\*[^*\\n]+?\\*\\*|~~[^~\\n]+?~~|`[^`\\n]+?`|\\*[^*\\s][^*\\n]*?\\*|\\[[^\\]\\n]+\\]\\((?:https?:\\/\\/|mailto:|\\/)[^)\\s]+\\))/;\n\n/** Inline Markdown → runs (pasting Markdown lines). The inverse of `runsToMarkdown`. */\nexport function markdownToRuns(md: string, inherited: Record<string, unknown> = {}, href?: string): RichRun[] {\n const out: RichRun[] = [];\n let rest = md;\n while (rest) {\n const m = MD_TOKEN.exec(rest);\n if (!m) {\n out.push({\n content: rest,\n ...(Object.keys(inherited).length ? { annotations: { ...inherited } } : {}),\n ...(href ? { href } : {}),\n });\n break;\n }\n if (m.index > 0)\n out.push({\n content: rest.slice(0, m.index),\n ...(Object.keys(inherited).length ? { annotations: { ...inherited } } : {}),\n ...(href ? { href } : {}),\n });\n const tok = m[0];\n if (tok.startsWith('**')) out.push(...markdownToRuns(tok.slice(2, -2), { ...inherited, bold: true }, href));\n else if (tok.startsWith('~~'))\n out.push(...markdownToRuns(tok.slice(2, -2), { ...inherited, strikethrough: true }, href));\n else if (tok.startsWith('`'))\n out.push({\n content: tok.slice(1, -1),\n annotations: { ...inherited, code: true },\n ...(href ? { href } : {}),\n });\n else if (tok.startsWith('*'))\n out.push(...markdownToRuns(tok.slice(1, -1), { ...inherited, italic: true }, href));\n else {\n const lm = /^\\[([^\\]]+)\\]\\(([^)\\s]+)\\)$/.exec(tok)!;\n const target = lm[2];\n const mention = mentionFromMarkdownTarget(target, lm[1]);\n if (mention)\n out.push({\n content: lm[1],\n mention,\n ...(Object.keys(inherited).length ? { annotations: { ...inherited } } : {}),\n });\n else out.push(...markdownToRuns(lm[1], inherited, target));\n }\n rest = rest.slice(m.index + tok.length);\n }\n return normalizeRuns(out);\n}\n\n/** Plain text of a stored `properties.title` (a string or rich-text runs); '' otherwise. Not trimmed. */\nexport function titlePlainText(properties: Record<string, unknown> | null | undefined): string {\n const t = properties?.title;\n if (typeof t === 'string') return t;\n if (Array.isArray(t)) return t.map((r: any) => r?.plainText ?? r?.text?.content ?? '').join('');\n return '';\n}\n\n/** A one-run plain `properties.title` (the shape BlockEditor writes). */\nexport function textTitle(text: string): Array<Record<string, unknown>> {\n return [{ type: 'text', text: { content: text }, plainText: text, annotations: {} }];\n}\n"],"names":[],"mappings":"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"}