@monimesl/dot-renderer-react 0.1.0-alpha.3 → 0.1.0-alpha.30

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 (267) hide show
  1. package/README.md +43 -1
  2. package/dist/LICENSE-PHOSPHOR +21 -0
  3. package/dist/_virtual/_rolldown/runtime.js +14 -0
  4. package/dist/_virtual/builtin_esm-external-require-react.js +9 -0
  5. package/dist/color.js +94 -0
  6. package/dist/components/amount-input.d.ts +6 -0
  7. package/dist/components/amount-input.js +111 -0
  8. package/dist/components/avatar.d.ts +6 -0
  9. package/dist/components/avatar.js +68 -0
  10. package/dist/components/box.js +56 -0
  11. package/dist/components/button.d.ts +6 -0
  12. package/dist/components/button.js +42 -0
  13. package/dist/components/carousel.d.ts +6 -0
  14. package/dist/components/carousel.js +258 -0
  15. package/dist/components/chip.d.ts +6 -0
  16. package/dist/components/chip.js +41 -0
  17. package/dist/components/code-input.d.ts +6 -0
  18. package/dist/components/code-input.js +96 -0
  19. package/dist/components/detail-row.d.ts +6 -0
  20. package/dist/components/detail-row.js +40 -0
  21. package/dist/components/disclosure.d.ts +6 -0
  22. package/dist/components/disclosure.js +76 -0
  23. package/dist/components/divider.d.ts +6 -0
  24. package/dist/components/divider.js +18 -0
  25. package/dist/components/empty-state.d.ts +6 -0
  26. package/dist/components/empty-state.js +64 -0
  27. package/dist/components/feedback.d.ts +8 -0
  28. package/dist/components/feedback.js +101 -0
  29. package/dist/components/field-box.js +44 -0
  30. package/dist/components/field.js +43 -0
  31. package/dist/components/footer.d.ts +6 -0
  32. package/dist/components/footer.js +25 -0
  33. package/dist/components/grid.d.ts +7 -0
  34. package/dist/components/grid.js +97 -0
  35. package/dist/components/https.js +11 -0
  36. package/dist/components/icon-artwork.js +143 -0
  37. package/dist/components/icon-button.js +28 -0
  38. package/dist/components/icon-svg.js +27 -0
  39. package/dist/components/icon.d.ts +6 -0
  40. package/dist/components/icon.js +25 -0
  41. package/dist/components/image.d.ts +6 -0
  42. package/dist/components/image.js +40 -0
  43. package/dist/components/index.d.ts +38 -0
  44. package/dist/components/index.js +92 -0
  45. package/dist/components/input.d.ts +6 -0
  46. package/dist/components/input.js +108 -0
  47. package/dist/components/link.d.ts +6 -0
  48. package/dist/components/link.js +32 -0
  49. package/dist/components/list.d.ts +7 -0
  50. package/dist/components/list.js +143 -0
  51. package/dist/components/numbers.js +9 -0
  52. package/dist/components/option-place.js +9 -0
  53. package/dist/components/option.d.ts +6 -0
  54. package/dist/components/option.js +44 -0
  55. package/dist/components/padding.d.ts +2 -0
  56. package/dist/components/padding.js +38 -0
  57. package/dist/components/pressable.js +17 -0
  58. package/dist/components/prose-context.js +5 -0
  59. package/dist/components/prose.d.ts +9 -0
  60. package/dist/components/prose.js +67 -0
  61. package/dist/components/qr-code.d.ts +6 -0
  62. package/dist/components/qr-code.js +58 -0
  63. package/dist/components/rich-text.d.ts +6 -0
  64. package/dist/components/rich-text.js +73 -0
  65. package/dist/components/scroll.d.ts +6 -0
  66. package/dist/components/scroll.js +57 -0
  67. package/dist/components/select.d.ts +6 -0
  68. package/dist/components/select.js +93 -0
  69. package/dist/components/sheet.d.ts +8 -0
  70. package/dist/components/sheet.js +106 -0
  71. package/dist/components/skeleton.d.ts +6 -0
  72. package/dist/components/skeleton.js +55 -0
  73. package/dist/components/slider.d.ts +6 -0
  74. package/dist/components/slider.js +57 -0
  75. package/dist/components/spinner.d.ts +6 -0
  76. package/dist/components/spinner.js +48 -0
  77. package/dist/components/stack.d.ts +6 -0
  78. package/dist/components/stack.js +25 -0
  79. package/dist/components/stepper.d.ts +6 -0
  80. package/dist/components/stepper.js +92 -0
  81. package/dist/components/steps.d.ts +7 -0
  82. package/dist/components/steps.js +110 -0
  83. package/dist/components/tabs.d.ts +7 -0
  84. package/dist/components/tabs.js +95 -0
  85. package/dist/components/text-area.d.ts +6 -0
  86. package/dist/components/text-area.js +42 -0
  87. package/dist/components/text.d.ts +6 -0
  88. package/dist/components/text.js +107 -0
  89. package/dist/components/toast.d.ts +6 -0
  90. package/dist/components/toast.js +56 -0
  91. package/dist/components/toggles.d.ts +9 -0
  92. package/dist/components/toggles.js +148 -0
  93. package/dist/components/tokens.js +49 -0
  94. package/dist/components/tones.js +30 -0
  95. package/dist/components/typed-text.js +28 -0
  96. package/dist/components/view.d.ts +6 -0
  97. package/dist/components/view.js +61 -0
  98. package/dist/index.d.ts +43 -48
  99. package/dist/index.js +40 -1335
  100. package/dist/markdown.js +230 -0
  101. package/dist/page-root.d.ts +2 -0
  102. package/dist/page-root.js +20 -0
  103. package/dist/portal.js +8 -0
  104. package/dist/pull-to-refresh.js +120 -0
  105. package/dist/react-host/19.3.0/react-dom.js +3 -0
  106. package/dist/react-host/19.3.0/react-host.js +6 -6
  107. package/dist/renderer.d.ts +17 -0
  108. package/dist/renderer.js +33 -0
  109. package/dist/root.d.ts +10 -0
  110. package/dist/root.js +71 -0
  111. package/dist/styles.css +1 -0
  112. package/dist/theme.d.ts +26 -0
  113. package/dist/theme.js +129 -0
  114. package/dist/types.d.ts +7 -0
  115. package/dist/vendor/@base-ui/react/checkbox/indicator/CheckboxIndicator.js +51 -0
  116. package/dist/vendor/@base-ui/react/checkbox/root/CheckboxRoot.js +265 -0
  117. package/dist/vendor/@base-ui/react/checkbox/root/CheckboxRootContext.js +13 -0
  118. package/dist/vendor/@base-ui/react/checkbox/root/CheckboxRootDataAttributes.js +11 -0
  119. package/dist/vendor/@base-ui/react/checkbox/utils/getCheckboxStateAttributesMapping.js +15 -0
  120. package/dist/vendor/@base-ui/react/checkbox-group/CheckboxGroupContext.js +10 -0
  121. package/dist/vendor/@base-ui/react/dialog/backdrop/DialogBackdrop.js +40 -0
  122. package/dist/vendor/@base-ui/react/dialog/close/DialogClose.js +39 -0
  123. package/dist/vendor/@base-ui/react/dialog/popup/DialogPopup.js +92 -0
  124. package/dist/vendor/@base-ui/react/dialog/popup/DialogPopupCssVars.js +8 -0
  125. package/dist/vendor/@base-ui/react/dialog/popup/DialogPopupDataAttributes.js +7 -0
  126. package/dist/vendor/@base-ui/react/dialog/portal/DialogPortal.js +38 -0
  127. package/dist/vendor/@base-ui/react/dialog/portal/DialogPortalContext.js +13 -0
  128. package/dist/vendor/@base-ui/react/dialog/root/DialogRoot.js +16 -0
  129. package/dist/vendor/@base-ui/react/dialog/root/DialogRootContext.js +13 -0
  130. package/dist/vendor/@base-ui/react/dialog/root/useDialogRoot.js +77 -0
  131. package/dist/vendor/@base-ui/react/dialog/root/useRenderDialogRoot.js +65 -0
  132. package/dist/vendor/@base-ui/react/dialog/store/DialogStore.js +70 -0
  133. package/dist/vendor/@base-ui/react/dialog/title/DialogTitle.js +25 -0
  134. package/dist/vendor/@base-ui/react/dialog/utils/stateAttributesMapping.js +17 -0
  135. package/dist/vendor/@base-ui/react/field/control/FieldControlDataAttributes.js +11 -0
  136. package/dist/vendor/@base-ui/react/field/item/FieldItemContext.js +10 -0
  137. package/dist/vendor/@base-ui/react/field/root/useFieldValidation.js +18 -0
  138. package/dist/vendor/@base-ui/react/fieldset/root/FieldsetRootContext.js +13 -0
  139. package/dist/vendor/@base-ui/react/floating-ui-react/components/FloatingFocusManager.js +477 -0
  140. package/dist/vendor/@base-ui/react/floating-ui-react/components/FloatingPortal.js +165 -0
  141. package/dist/vendor/@base-ui/react/floating-ui-react/components/FloatingRootStore.js +65 -0
  142. package/dist/vendor/@base-ui/react/floating-ui-react/components/FloatingTree.js +22 -0
  143. package/dist/vendor/@base-ui/react/floating-ui-react/hooks/useDismiss.js +373 -0
  144. package/dist/vendor/@base-ui/react/floating-ui-react/hooks/useSyncedFloatingRootContext.js +58 -0
  145. package/dist/vendor/@base-ui/react/floating-ui-react/utils/composite.js +40 -0
  146. package/dist/vendor/@base-ui/react/floating-ui-react/utils/constants.js +5 -0
  147. package/dist/vendor/@base-ui/react/floating-ui-react/utils/createAttribute.js +6 -0
  148. package/dist/vendor/@base-ui/react/floating-ui-react/utils/createEventEmitter.js +18 -0
  149. package/dist/vendor/@base-ui/react/floating-ui-react/utils/element.js +26 -0
  150. package/dist/vendor/@base-ui/react/floating-ui-react/utils/enqueueFocus.js +25 -0
  151. package/dist/vendor/@base-ui/react/floating-ui-react/utils/event.js +25 -0
  152. package/dist/vendor/@base-ui/react/floating-ui-react/utils/markOthers.js +116 -0
  153. package/dist/vendor/@base-ui/react/floating-ui-react/utils/nodes.js +16 -0
  154. package/dist/vendor/@base-ui/react/floating-ui-react/utils/tabbable.js +135 -0
  155. package/dist/vendor/@base-ui/react/internals/TransitionStatusDataAttributes.js +11 -0
  156. package/dist/vendor/@base-ui/react/internals/composite/composite.js +89 -0
  157. package/dist/vendor/@base-ui/react/internals/composite/constants.js +4 -0
  158. package/dist/vendor/@base-ui/react/internals/composite/item/CompositeItem.js +21 -0
  159. package/dist/vendor/@base-ui/react/internals/composite/item/useCompositeItem.js +31 -0
  160. package/dist/vendor/@base-ui/react/internals/composite/list/CompositeList.js +180 -0
  161. package/dist/vendor/@base-ui/react/internals/composite/list/CompositeListContext.js +15 -0
  162. package/dist/vendor/@base-ui/react/internals/composite/list/useCompositeListItem.js +54 -0
  163. package/dist/vendor/@base-ui/react/internals/composite/root/CompositeRoot.js +62 -0
  164. package/dist/vendor/@base-ui/react/internals/composite/root/CompositeRootContext.js +13 -0
  165. package/dist/vendor/@base-ui/react/internals/composite/root/useCompositeRoot.js +170 -0
  166. package/dist/vendor/@base-ui/react/internals/constants.js +18 -0
  167. package/dist/vendor/@base-ui/react/internals/createBaseUIEventDetails.js +40 -0
  168. package/dist/vendor/@base-ui/react/internals/direction-context/DirectionContext.js +10 -0
  169. package/dist/vendor/@base-ui/react/internals/field-constants/constants.js +33 -0
  170. package/dist/vendor/@base-ui/react/internals/field-register-control/useRegisterFieldControl.js +40 -0
  171. package/dist/vendor/@base-ui/react/internals/field-root-context/FieldRootContext.js +45 -0
  172. package/dist/vendor/@base-ui/react/internals/form-context/FormContext.js +18 -0
  173. package/dist/vendor/@base-ui/react/internals/getStateAttributesProps.js +17 -0
  174. package/dist/vendor/@base-ui/react/internals/labelable-provider/LabelableContext.js +24 -0
  175. package/dist/vendor/@base-ui/react/internals/labelable-provider/useAriaLabelledBy.js +35 -0
  176. package/dist/vendor/@base-ui/react/internals/labelable-provider/useLabelableId.js +57 -0
  177. package/dist/vendor/@base-ui/react/internals/reason-parts.js +14 -0
  178. package/dist/vendor/@base-ui/react/internals/serializeValue.js +12 -0
  179. package/dist/vendor/@base-ui/react/internals/stateAttributesMapping.js +11 -0
  180. package/dist/vendor/@base-ui/react/internals/use-button/useButton.js +137 -0
  181. package/dist/vendor/@base-ui/react/internals/useAnimationsFinished.js +94 -0
  182. package/dist/vendor/@base-ui/react/internals/useBaseUiId.js +13 -0
  183. package/dist/vendor/@base-ui/react/internals/useOpenChangeComplete.js +28 -0
  184. package/dist/vendor/@base-ui/react/internals/useRenderElement.js +109 -0
  185. package/dist/vendor/@base-ui/react/internals/useTransitionStatus.js +70 -0
  186. package/dist/vendor/@base-ui/react/internals/useValueChanged.js +15 -0
  187. package/dist/vendor/@base-ui/react/merge-props/mergeProps.js +153 -0
  188. package/dist/vendor/@base-ui/react/radio/indicator/RadioIndicator.js +46 -0
  189. package/dist/vendor/@base-ui/react/radio/root/RadioRoot.js +179 -0
  190. package/dist/vendor/@base-ui/react/radio/root/RadioRootContext.js +13 -0
  191. package/dist/vendor/@base-ui/react/radio/root/RadioRootDataAttributes.js +11 -0
  192. package/dist/vendor/@base-ui/react/radio/utils/stateAttributesMapping.js +14 -0
  193. package/dist/vendor/@base-ui/react/radio-group/RadioGroup.js +170 -0
  194. package/dist/vendor/@base-ui/react/radio-group/RadioGroupContext.js +10 -0
  195. package/dist/vendor/@base-ui/react/switch/root/SwitchRoot.js +170 -0
  196. package/dist/vendor/@base-ui/react/switch/root/SwitchRootContext.js +13 -0
  197. package/dist/vendor/@base-ui/react/switch/root/SwitchRootDataAttributes.js +11 -0
  198. package/dist/vendor/@base-ui/react/switch/stateAttributesMapping.js +12 -0
  199. package/dist/vendor/@base-ui/react/switch/thumb/SwitchThumb.js +25 -0
  200. package/dist/vendor/@base-ui/react/tabs/list/TabsList.js +98 -0
  201. package/dist/vendor/@base-ui/react/tabs/list/TabsListContext.js +13 -0
  202. package/dist/vendor/@base-ui/react/tabs/root/TabsRoot.js +213 -0
  203. package/dist/vendor/@base-ui/react/tabs/root/TabsRootContext.js +16 -0
  204. package/dist/vendor/@base-ui/react/tabs/root/TabsRootDataAttributes.js +8 -0
  205. package/dist/vendor/@base-ui/react/tabs/root/stateAttributesMapping.js +5 -0
  206. package/dist/vendor/@base-ui/react/tabs/tab/TabsTab.js +137 -0
  207. package/dist/vendor/@base-ui/react/utils/CommonPopupDataAttributes.js +24 -0
  208. package/dist/vendor/@base-ui/react/utils/CommonTriggerDataAttributes.js +11 -0
  209. package/dist/vendor/@base-ui/react/utils/FocusGuard.js +32 -0
  210. package/dist/vendor/@base-ui/react/utils/InternalBackdrop.js +30 -0
  211. package/dist/vendor/@base-ui/react/utils/dispatchClickWithModifiers.js +25 -0
  212. package/dist/vendor/@base-ui/react/utils/popupStateMapping.js +22 -0
  213. package/dist/vendor/@base-ui/react/utils/popups/popupStoreUtils.js +247 -0
  214. package/dist/vendor/@base-ui/react/utils/popups/popupTriggerMap.js +96 -0
  215. package/dist/vendor/@base-ui/react/utils/popups/store.js +94 -0
  216. package/dist/vendor/@base-ui/react/utils/resolveClassName.js +13 -0
  217. package/dist/vendor/@base-ui/react/utils/resolveRef.js +11 -0
  218. package/dist/vendor/@base-ui/react/utils/resolveStyle.js +13 -0
  219. package/dist/vendor/@base-ui/react/utils/useFocusableWhenDisabled.js +30 -0
  220. package/dist/vendor/@base-ui/utils/addEventListener.js +12 -0
  221. package/dist/vendor/@base-ui/utils/createLogOnce.js +20 -0
  222. package/dist/vendor/@base-ui/utils/empty.js +6 -0
  223. package/dist/vendor/@base-ui/utils/error.js +5 -0
  224. package/dist/vendor/@base-ui/utils/fastHooks.js +68 -0
  225. package/dist/vendor/@base-ui/utils/formatErrorMessage.js +27 -0
  226. package/dist/vendor/@base-ui/utils/getDefaultFormSubmitter.js +25 -0
  227. package/dist/vendor/@base-ui/utils/getReactElementRef.js +14 -0
  228. package/dist/vendor/@base-ui/utils/inertValue.js +8 -0
  229. package/dist/vendor/@base-ui/utils/isElementDisabled.js +6 -0
  230. package/dist/vendor/@base-ui/utils/mergeCleanups.js +14 -0
  231. package/dist/vendor/@base-ui/utils/mergeObjects.js +11 -0
  232. package/dist/vendor/@base-ui/utils/owner.js +7 -0
  233. package/dist/vendor/@base-ui/utils/platform/engine.js +8 -0
  234. package/dist/vendor/@base-ui/utils/platform/env.js +6 -0
  235. package/dist/vendor/@base-ui/utils/platform/os.js +15 -0
  236. package/dist/vendor/@base-ui/utils/platform/screen-reader.js +9 -0
  237. package/dist/vendor/@base-ui/utils/platform/shared.js +36 -0
  238. package/dist/vendor/@base-ui/utils/reactVersion.js +8 -0
  239. package/dist/vendor/@base-ui/utils/safeReact.js +13 -0
  240. package/dist/vendor/@base-ui/utils/shadowDom.js +26 -0
  241. package/dist/vendor/@base-ui/utils/store/ReactStore.js +181 -0
  242. package/dist/vendor/@base-ui/utils/store/Store.js +102 -0
  243. package/dist/vendor/@base-ui/utils/store/useStore.js +97 -0
  244. package/dist/vendor/@base-ui/utils/useAnimationFrame.js +87 -0
  245. package/dist/vendor/@base-ui/utils/useControlled.js +52 -0
  246. package/dist/vendor/@base-ui/utils/useId.js +32 -0
  247. package/dist/vendor/@base-ui/utils/useIsoLayoutEffect.js +7 -0
  248. package/dist/vendor/@base-ui/utils/useMergedRefs.js +87 -0
  249. package/dist/vendor/@base-ui/utils/useOnMount.js +12 -0
  250. package/dist/vendor/@base-ui/utils/useRefWithInit.js +18 -0
  251. package/dist/vendor/@base-ui/utils/useScrollLock.js +206 -0
  252. package/dist/vendor/@base-ui/utils/useStableCallback.js +38 -0
  253. package/dist/vendor/@base-ui/utils/useTimeout.js +43 -0
  254. package/dist/vendor/@base-ui/utils/useValueAsRef.js +27 -0
  255. package/dist/vendor/@base-ui/utils/visuallyHidden.js +23 -0
  256. package/dist/vendor/@base-ui/utils/warn.js +5 -0
  257. package/dist/vendor/@floating-ui/utils/dist/floating-ui.utils.dom.js +49 -0
  258. package/dist/vendor/uqr/dist/index.js +858 -0
  259. package/dist/vendor/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +74 -0
  260. package/dist/vendor/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js +77 -0
  261. package/dist/vendor/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +69 -0
  262. package/dist/vendor/use-sync-external-store/cjs/use-sync-external-store-shim.production.js +64 -0
  263. package/dist/vendor/use-sync-external-store/shim/index.js +11 -0
  264. package/dist/vendor/use-sync-external-store/shim/with-selector.js +11 -0
  265. package/package.json +13 -7
  266. package/dist/index.d.ts.map +0 -1
  267. package/dist/index.js.map +0 -1
@@ -0,0 +1,230 @@
1
+ //#region src/markdown.ts
2
+ const HEADING = /^(#{1,6})\s+(.*?)\s*#*\s*$/;
3
+ const RULE = /^ {0,3}([-*_])( *\1){2,} *$/;
4
+ const QUOTE = /^ {0,3}> ?/;
5
+ const LIST_ITEM = /^ {0,3}([-*+]|\d{1,9}[.)])\s+/;
6
+ const LINK = /^(!?)\[([^\]]*)\]\(([^)\s]+)(?:\s+"[^"]*")?\)/;
7
+ const AUTOLINK = /^<(https?:\/\/[^>\s]+)>/;
8
+ const PUNCTUATION = /[!-/:-@[-`{-~]/;
9
+ const ITEM_INDENT = " ";
10
+ function parseMarkdown(markdown) {
11
+ return parseBlocks(markdown.replace(/\r\n?/g, "\n").split("\n"));
12
+ }
13
+ function parseBlocks(lines) {
14
+ const blocks = [];
15
+ let index = 0;
16
+ while (index < lines.length) {
17
+ const line = lines[index];
18
+ if (line.trim() === "") {
19
+ index += 1;
20
+ continue;
21
+ }
22
+ const single = oneLineBlock(line);
23
+ if (single) {
24
+ blocks.push(single);
25
+ index += 1;
26
+ } else if (QUOTE.test(line)) {
27
+ const quoted = [];
28
+ while (index < lines.length && QUOTE.test(lines[index])) {
29
+ quoted.push(lines[index].replace(QUOTE, ""));
30
+ index += 1;
31
+ }
32
+ blocks.push({
33
+ kind: "quote",
34
+ blocks: parseBlocks(quoted)
35
+ });
36
+ } else if (LIST_ITEM.test(line)) {
37
+ const { list, next } = parseList(lines, index);
38
+ blocks.push(list);
39
+ index = next;
40
+ } else {
41
+ const paragraph = [];
42
+ while (index < lines.length && !endsParagraph(lines[index])) {
43
+ paragraph.push(lines[index]);
44
+ index += 1;
45
+ }
46
+ blocks.push({
47
+ kind: "paragraph",
48
+ content: parseInline(joinLines(paragraph))
49
+ });
50
+ }
51
+ }
52
+ return blocks;
53
+ }
54
+ function oneLineBlock(line) {
55
+ const heading = HEADING.exec(line);
56
+ if (heading) return {
57
+ kind: "heading",
58
+ level: Math.min(heading[1].length, 3),
59
+ content: parseInline(heading[2])
60
+ };
61
+ if (RULE.test(line)) return { kind: "rule" };
62
+ const trimmed = line.trim();
63
+ const picture = LINK.exec(trimmed);
64
+ if (picture && picture[1] === "!" && picture[0].length === trimmed.length) return {
65
+ kind: "image",
66
+ alt: picture[2],
67
+ src: picture[3]
68
+ };
69
+ return null;
70
+ }
71
+ function endsParagraph(line) {
72
+ return line.trim() === "" || HEADING.test(line) || RULE.test(line) || QUOTE.test(line) || LIST_ITEM.test(line);
73
+ }
74
+ function joinLines(lines) {
75
+ let text = "";
76
+ lines.forEach((line, index) => {
77
+ text += line.trim().replace(/\\$/, "");
78
+ if (index < lines.length - 1) text += /( {2,}|\\)$/.test(line) ? "\n" : " ";
79
+ });
80
+ return text;
81
+ }
82
+ function parseList(lines, start) {
83
+ const ordered = isOrdered(LIST_ITEM.exec(lines[start]));
84
+ const items = [];
85
+ let index = start;
86
+ while (index < lines.length) {
87
+ const marker = LIST_ITEM.exec(lines[index]);
88
+ if (!marker || isOrdered(marker) !== ordered) break;
89
+ const indent = marker[0].length;
90
+ const itemLines = [lines[index].slice(indent)];
91
+ index += 1;
92
+ while (index < lines.length) {
93
+ const line = lines[index];
94
+ if (line.trim() === "") {
95
+ if (!lines[index + 1]?.startsWith(ITEM_INDENT)) break;
96
+ itemLines.push("");
97
+ } else if (line.startsWith(ITEM_INDENT)) itemLines.push(withoutIndent(line, indent));
98
+ else if (endsParagraph(line)) break;
99
+ else itemLines.push(line);
100
+ index += 1;
101
+ }
102
+ items.push(parseBlocks(itemLines));
103
+ }
104
+ return {
105
+ list: {
106
+ kind: "list",
107
+ ordered,
108
+ items
109
+ },
110
+ next: index
111
+ };
112
+ }
113
+ function isOrdered(marker) {
114
+ return /\d/.test(marker[1]);
115
+ }
116
+ function withoutIndent(line, indent) {
117
+ const spaces = line.length - line.trimStart().length;
118
+ return line.slice(Math.min(spaces, indent));
119
+ }
120
+ function parseInline(text) {
121
+ const inlines = [];
122
+ let plain = "";
123
+ let index = 0;
124
+ const flush = () => {
125
+ if (plain) {
126
+ inlines.push({
127
+ kind: "text",
128
+ text: plain
129
+ });
130
+ plain = "";
131
+ }
132
+ };
133
+ const take = (inline, length) => {
134
+ flush();
135
+ inlines.push(inline);
136
+ index += length;
137
+ };
138
+ while (index < text.length) {
139
+ const char = text[index];
140
+ const next = text[index + 1];
141
+ const rest = text.slice(index);
142
+ if (char === "\\" && next !== void 0 && PUNCTUATION.test(next)) {
143
+ plain += next;
144
+ index += 2;
145
+ continue;
146
+ }
147
+ if (char === "\n") {
148
+ take({ kind: "break" }, 1);
149
+ continue;
150
+ }
151
+ if (char === "`") {
152
+ const codeEnd = text.indexOf("`", index + 1);
153
+ if (codeEnd > index + 1) {
154
+ take({
155
+ kind: "code",
156
+ text: text.slice(index + 1, codeEnd)
157
+ }, codeEnd + 1 - index);
158
+ continue;
159
+ }
160
+ }
161
+ const link = LINK.exec(rest);
162
+ if (link) {
163
+ const [whole, picture, label, href] = link;
164
+ take(picture === "!" ? {
165
+ kind: "text",
166
+ text: label
167
+ } : {
168
+ kind: "link",
169
+ href,
170
+ children: parseInline(label)
171
+ }, whole.length);
172
+ continue;
173
+ }
174
+ const autolink = AUTOLINK.exec(rest);
175
+ if (autolink) {
176
+ const [whole, href] = autolink;
177
+ take({
178
+ kind: "link",
179
+ href,
180
+ children: [{
181
+ kind: "text",
182
+ text: href
183
+ }]
184
+ }, whole.length);
185
+ continue;
186
+ }
187
+ if (char === "*" || char === "_") {
188
+ const strong = between(text, index, char + char);
189
+ if (strong) {
190
+ take({
191
+ kind: "strong",
192
+ children: parseInline(strong.inner)
193
+ }, strong.length);
194
+ continue;
195
+ }
196
+ const emphasis = between(text, index, char);
197
+ if (emphasis) {
198
+ take({
199
+ kind: "emphasis",
200
+ children: parseInline(emphasis.inner)
201
+ }, emphasis.length);
202
+ continue;
203
+ }
204
+ }
205
+ plain += char;
206
+ index += 1;
207
+ }
208
+ flush();
209
+ return inlines;
210
+ }
211
+ function between(text, start, delimiter) {
212
+ const open = start + delimiter.length;
213
+ if (!text.startsWith(delimiter, start) || open >= text.length || /\s/.test(text[open])) return null;
214
+ const underscore = delimiter.startsWith("_");
215
+ if (underscore && /\w/.test(text[start - 1] ?? "")) return null;
216
+ let close = text.indexOf(delimiter, open + 1);
217
+ while (close !== -1) {
218
+ const touchesSpace = /\s/.test(text[close - 1]);
219
+ const insideWord = underscore && /\w/.test(text[close + delimiter.length] ?? "");
220
+ const startsPair = delimiter.length === 1 && text[close + 1] === delimiter;
221
+ if (!touchesSpace && !insideWord && !startsPair) return {
222
+ inner: text.slice(open, close),
223
+ length: close + delimiter.length - start
224
+ };
225
+ close = text.indexOf(delimiter, close + (startsPair ? 2 : 1));
226
+ }
227
+ return null;
228
+ }
229
+ //#endregion
230
+ export { parseInline, parseMarkdown };
@@ -0,0 +1,2 @@
1
+ import { ComponentType, ReactNode } from "react";
2
+ import "@monimesl/dot-webview";
@@ -0,0 +1,20 @@
1
+ import { toList, toText } from "@monimesl/dot-core";
2
+ import { Fragment, createElement, useMemo, useSyncExternalStore } from "react";
3
+ //#region src/page-root.tsx
4
+ function PageRoot({ page, components }) {
5
+ const state = useSyncExternalStore(page.subscribe, page.getState);
6
+ const context = useMemo(() => ({
7
+ h(type, props, ...children) {
8
+ const component = components[type];
9
+ if (!component) throw new Error(`The renderer has no component for <${type}>. Check the tag's name, or pass a component for it to the renderer.`);
10
+ return createElement(component, props, ...children);
11
+ },
12
+ text: toText,
13
+ on: (handler, data) => page.on(handler, data),
14
+ each: (items, render, key) => createElement(Fragment, null, toList(items).map((item, index) => createElement(Fragment, { key: key ? String(key(item, index)) : index }, ...render(item, index))))
15
+ }), [page, components]);
16
+ if (!state) return null;
17
+ return page.viewRenderer(state, context);
18
+ }
19
+ //#endregion
20
+ export { PageRoot };
package/dist/portal.js ADDED
@@ -0,0 +1,8 @@
1
+ import { createContext, useContext } from "react";
2
+ //#region src/portal.ts
3
+ const PortalContainerContext = createContext(null);
4
+ function usePortalContainer() {
5
+ return useContext(PortalContainerContext) ?? void 0;
6
+ }
7
+ //#endregion
8
+ export { PortalContainerContext, usePortalContainer };
@@ -0,0 +1,120 @@
1
+ import { useTheme } from "./theme.js";
2
+ import { CENTERED } from "./components/tokens.js";
3
+ import { LoadingIcon } from "./components/spinner.js";
4
+ import { useEffect, useRef, useState, useSyncExternalStore } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ //#region src/pull-to-refresh.tsx
7
+ const PULL_DISTANCE = 64;
8
+ const LONGEST_PULL = PULL_DISTANCE * 1.5;
9
+ const RESISTANCE = .5;
10
+ const INDICATOR_SIZE = 36;
11
+ const DRAG_DISTANCE = 6;
12
+ function PullToRefresh({ page, children }) {
13
+ const { colors } = useTheme();
14
+ const refreshing = useSyncExternalStore(page.subscribeToRefreshing, page.isRefreshing);
15
+ const [pullDistance, setPullDistance] = useState(0);
16
+ const areaRef = useRef(null);
17
+ useEffect(() => {
18
+ const area = areaRef.current;
19
+ const view = area.ownerDocument.defaultView;
20
+ let startY;
21
+ let pulled = 0;
22
+ let dragged = false;
23
+ const begin = (y) => {
24
+ const atTop = view.scrollY <= 0;
25
+ startY = page.refreshable && atTop && !page.isRefreshing() ? y : void 0;
26
+ dragged = false;
27
+ };
28
+ const move = (y, event) => {
29
+ if (startY === void 0) return;
30
+ const distance = (y - startY) * RESISTANCE;
31
+ if (distance <= 0) {
32
+ pulled = 0;
33
+ setPullDistance(0);
34
+ return;
35
+ }
36
+ if (event.cancelable) event.preventDefault();
37
+ if (distance > DRAG_DISTANCE) dragged = true;
38
+ pulled = Math.min(distance, LONGEST_PULL);
39
+ setPullDistance(pulled);
40
+ };
41
+ const end = () => {
42
+ if (startY !== void 0 && pulled >= PULL_DISTANCE) page.refresh();
43
+ startY = void 0;
44
+ pulled = 0;
45
+ setPullDistance(0);
46
+ };
47
+ const ignoreDragClick = (event) => {
48
+ if (dragged) {
49
+ dragged = false;
50
+ event.stopPropagation();
51
+ event.preventDefault();
52
+ }
53
+ };
54
+ const touchStart = (event) => begin(event.touches[0].clientY);
55
+ const touchMove = (event) => move(event.touches[0].clientY, event);
56
+ const mouseDown = (event) => {
57
+ if (event.button === 0) begin(event.clientY);
58
+ };
59
+ const mouseMove = (event) => move(event.clientY, event);
60
+ const removeListeners = [
61
+ listen(area, "touchstart", touchStart, { passive: true }),
62
+ listen(area, "touchmove", touchMove, { passive: false }),
63
+ listen(area, "touchend", end),
64
+ listen(area, "touchcancel", end),
65
+ listen(area, "mousedown", mouseDown),
66
+ listen(area, "click", ignoreDragClick, { capture: true }),
67
+ listen(view, "mousemove", mouseMove),
68
+ listen(view, "mouseup", end)
69
+ ];
70
+ return () => {
71
+ for (const removeListener of removeListeners) removeListener();
72
+ };
73
+ }, [page]);
74
+ const indicatorDistance = refreshing ? PULL_DISTANCE : pullDistance;
75
+ const arrowTurn = Math.min(pullDistance, PULL_DISTANCE) / PULL_DISTANCE * 180;
76
+ return /* @__PURE__ */ jsxs("div", {
77
+ ref: areaRef,
78
+ className: "dot-pull-to-refresh",
79
+ style: { display: "contents" },
80
+ children: [children, indicatorDistance > 0 ? /* @__PURE__ */ jsx("span", {
81
+ role: refreshing ? "status" : void 0,
82
+ "aria-label": refreshing ? "Refreshing" : void 0,
83
+ style: {
84
+ position: "fixed",
85
+ top: 0,
86
+ left: "50%",
87
+ zIndex: 2,
88
+ ...CENTERED,
89
+ width: INDICATOR_SIZE,
90
+ height: INDICATOR_SIZE,
91
+ marginLeft: -18,
92
+ borderRadius: "50%",
93
+ background: colors.surface,
94
+ color: colors.primary,
95
+ boxShadow: "0 2px 8px rgba(0, 0, 0, 0.2)",
96
+ transform: `translateY(${indicatorDistance - INDICATOR_SIZE / 2}px)`,
97
+ transition: pullDistance > 0 ? "none" : "transform 0.2s",
98
+ pointerEvents: "none"
99
+ },
100
+ children: refreshing ? /* @__PURE__ */ jsx(LoadingIcon, { size: 20 }) : /* @__PURE__ */ jsx("svg", {
101
+ width: 20,
102
+ height: 20,
103
+ viewBox: "0 0 24 24",
104
+ fill: "none",
105
+ stroke: "currentColor",
106
+ strokeWidth: 2.5,
107
+ strokeLinecap: "round",
108
+ strokeLinejoin: "round",
109
+ style: { transform: `rotate(${arrowTurn}deg)` },
110
+ children: /* @__PURE__ */ jsx("path", { d: "M12 5v14M6 13l6 6 6-6" })
111
+ })
112
+ }) : null]
113
+ });
114
+ }
115
+ function listen(target, type, listener, options) {
116
+ target.addEventListener(type, listener, options);
117
+ return () => target.removeEventListener(type, listener, options);
118
+ }
119
+ //#endregion
120
+ export { PullToRefresh };
@@ -0,0 +1,3 @@
1
+ import { ReactDom } from './react-host.js';
2
+ export default ReactDom;
3
+ export const { __DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, browser, createPortal, flushSync, preconnect, prefetchDNS, preinit, preinitModule, preload, preloadModule, requestFormReset, unstable_batchedUpdates, useFormState, useFormStatus, version } = ReactDom;