@heycys/gallery 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. package/THIRD-PARTY-NOTICES.md +2 -2
  2. package/browser/editor/components/align.mjs +58 -0
  3. package/browser/editor/components/code/index.mjs +1 -1
  4. package/browser/editor/components/columns/page.mjs +4 -4
  5. package/browser/editor/components/embed/index.mjs +2 -2
  6. package/browser/editor/components/embed/page.mjs +1 -1
  7. package/browser/editor/components/file/page.mjs +4 -4
  8. package/browser/editor/components/flowchart/add.mjs +7 -6
  9. package/browser/editor/components/flowchart/page.mjs +1 -1
  10. package/browser/editor/components/heading/index.mjs +7 -6
  11. package/browser/editor/components/icons.mjs +11 -0
  12. package/browser/editor/components/image/crop.mjs +6 -9
  13. package/browser/editor/components/image/index.mjs +2 -0
  14. package/browser/editor/components/image/page.mjs +172 -90
  15. package/browser/editor/components/installed/index.mjs +15 -4
  16. package/browser/editor/components/installed/page.mjs +103 -25
  17. package/browser/editor/components/installed/served.mjs +6 -5
  18. package/browser/editor/components/instances.mjs +18 -0
  19. package/browser/editor/components/list/page.mjs +3 -6
  20. package/browser/editor/components/media/icons.mjs +13 -8
  21. package/browser/editor/components/media/page.mjs +5 -3
  22. package/browser/editor/components/media/toolbar.mjs +12 -3
  23. package/browser/editor/components/paragraph/index.mjs +4 -3
  24. package/browser/editor/components/registry.mjs +30 -9
  25. package/browser/editor/components/table/index.mjs +61 -2
  26. package/browser/editor/components/table/page.mjs +1 -1
  27. package/browser/editor/page/after/index.mjs +288 -0
  28. package/browser/editor/page/align.mjs +91 -0
  29. package/browser/editor/page/annotate/card.mjs +3 -6
  30. package/browser/editor/page/autosave.mjs +310 -37
  31. package/browser/editor/page/beside.mjs +5 -6
  32. package/browser/editor/page/block-menu/index.mjs +6 -3
  33. package/browser/editor/page/blocks.mjs +3 -1
  34. package/browser/editor/page/board/client.mjs +57 -0
  35. package/browser/editor/page/board/hint.mjs +182 -0
  36. package/browser/editor/page/board/history.mjs +119 -0
  37. package/browser/editor/page/board/index.mjs +1059 -0
  38. package/browser/editor/page/board/motion.mjs +177 -0
  39. package/browser/editor/page/board/settings.mjs +210 -0
  40. package/browser/editor/page/caret.mjs +1 -1
  41. package/browser/editor/page/changes/bar.mjs +6 -14
  42. package/browser/editor/page/changes/index.mjs +2 -2
  43. package/browser/editor/page/clipboard/import/html.mjs +29 -6
  44. package/browser/editor/page/clipboard/import/inline.mjs +32 -0
  45. package/browser/editor/page/clipboard/import/markdown.mjs +58 -13
  46. package/browser/editor/page/clipboard/import/read.mjs +6 -1
  47. package/browser/editor/page/clipboard/import/to-blocks.mjs +44 -12
  48. package/browser/editor/page/clipboard/import/yuque.mjs +622 -0
  49. package/browser/editor/page/clipboard/index.mjs +133 -15
  50. package/browser/editor/page/clipboard/own/blocks.mjs +13 -14
  51. package/browser/editor/page/clipboard/own/chart-keys.mjs +41 -28
  52. package/browser/editor/page/clipboard/own/describe.mjs +6 -2
  53. package/browser/editor/page/clipboard/own/selection.mjs +1 -1
  54. package/browser/editor/page/columns/index.mjs +48 -46
  55. package/browser/editor/page/commit.mjs +80 -22
  56. package/browser/editor/page/conflicts.mjs +7 -7
  57. package/browser/editor/page/core.mjs +34 -16
  58. package/browser/editor/page/custom-page.mjs +110 -0
  59. package/browser/editor/page/editor.mjs +71 -17
  60. package/browser/editor/page/emoji-picker/styles.mjs +7 -12
  61. package/browser/editor/page/emoji-picker/upload.mjs +2 -2
  62. package/browser/editor/page/handle/index.mjs +5 -8
  63. package/browser/editor/page/history.mjs +41 -6
  64. package/browser/editor/page/insert/index.mjs +20 -22
  65. package/browser/editor/page/links/index.mjs +5 -3
  66. package/browser/editor/page/links/pages.mjs +27 -9
  67. package/browser/editor/page/look.mjs +54 -3
  68. package/browser/editor/page/margin.mjs +18 -3
  69. package/browser/editor/page/media-menu/index.mjs +6 -7
  70. package/browser/editor/page/menu.mjs +33 -14
  71. package/browser/editor/page/notices.mjs +2 -2
  72. package/browser/editor/page/page-objects.mjs +9 -2
  73. package/browser/editor/page/panel.mjs +4 -9
  74. package/browser/editor/page/present-links.mjs +15 -5
  75. package/browser/editor/page/present-shell.mjs +63 -0
  76. package/browser/editor/page/resize/index.mjs +42 -29
  77. package/browser/editor/page/selection/index.mjs +10 -2
  78. package/browser/editor/page/served.mjs +14 -0
  79. package/browser/editor/page/session.mjs +48 -4
  80. package/browser/editor/page/slash-menu/index.mjs +3 -3
  81. package/browser/editor/page/table/binding.mjs +87 -0
  82. package/browser/editor/page/table/cells.mjs +102 -46
  83. package/browser/editor/page/table/index.mjs +24 -9
  84. package/browser/editor/page/table/pictures.mjs +299 -0
  85. package/browser/editor/page/table/views.mjs +103 -0
  86. package/browser/editor/page/table/widths.mjs +82 -10
  87. package/browser/editor/page/text-select/index.mjs +26 -12
  88. package/browser/editor/page/todo-writes.mjs +75 -0
  89. package/browser/editor/page/typing/index.mjs +97 -15
  90. package/browser/editor/page/typing/leave.mjs +19 -5
  91. package/browser/editor/page/ui.mjs +13 -0
  92. package/browser/shared/block-packs.mjs +419 -0
  93. package/browser/shared/board-places.mjs +224 -0
  94. package/browser/shared/card-size.mjs +59 -0
  95. package/browser/shared/colors.mjs +3 -2
  96. package/browser/shared/component-catalog.mjs +330 -46
  97. package/browser/shared/component-source.mjs +39 -0
  98. package/browser/shared/components/heading.mjs +2 -1
  99. package/browser/shared/components/index.mjs +12 -3
  100. package/browser/shared/components/installed.mjs +35 -3
  101. package/browser/shared/components/page.mjs +20 -8
  102. package/browser/shared/components/paragraph.mjs +8 -1
  103. package/browser/shared/components/state.mjs +5 -1
  104. package/browser/shared/components/table.mjs +1 -0
  105. package/browser/shared/document-look.mjs +10 -5
  106. package/browser/shared/drafts.mjs +432 -0
  107. package/browser/shared/emoji/line-icons.mjs +37 -0
  108. package/browser/shared/extension-sidebar.mjs +126 -0
  109. package/browser/shared/extensions.mjs +79 -0
  110. package/browser/shared/file-table.mjs +101 -0
  111. package/browser/shared/http.mjs +9 -0
  112. package/browser/shared/i18n/en.mjs +330 -27
  113. package/browser/shared/json-layout.mjs +47 -0
  114. package/browser/shared/net-cache.mjs +133 -0
  115. package/browser/shared/net-keys.mjs +32 -0
  116. package/browser/shared/net-policy.mjs +177 -0
  117. package/browser/shared/outline-shape.mjs +128 -0
  118. package/browser/shared/outline.mjs +359 -67
  119. package/browser/shared/pack-manifest.mjs +88 -0
  120. package/browser/shared/page-address.mjs +6 -3
  121. package/browser/shared/page-cards.mjs +308 -0
  122. package/browser/shared/page-links.mjs +69 -6
  123. package/browser/shared/pages.mjs +500 -0
  124. package/browser/shared/paths.mjs +6 -0
  125. package/browser/shared/pinyin.mjs +92 -0
  126. package/browser/shared/present-step.mjs +17 -0
  127. package/browser/shared/preview-server.mjs +3 -7
  128. package/browser/shared/session.mjs +8 -1
  129. package/browser/shared/shipped-blocks.mjs +299 -0
  130. package/browser/shared/sidebar-head.mjs +70 -0
  131. package/browser/shared/table-chart.mjs +33 -1
  132. package/browser/shared/todos.mjs +83 -0
  133. package/browser/shared/user-directory.mjs +24 -0
  134. package/browser/shared/versions.mjs +14 -0
  135. package/browser/shared/web-links.mjs +139 -0
  136. package/browser/shared/workspace-columns.mjs +120 -0
  137. package/browser/shared/workspace-name.mjs +154 -0
  138. package/browser/shared/workspace-query.mjs +125 -0
  139. package/browser/shared/workspace-registry.mjs +272 -0
  140. package/browser/shared/workspace.mjs +171 -20
  141. package/dist/chunk-2OHANJ6Q.mjs +2 -0
  142. package/dist/chunk-3MBRL2PM.mjs +16 -0
  143. package/dist/chunk-4OKWZY5E.mjs +2 -0
  144. package/dist/chunk-4OZWXZE5.mjs +5 -0
  145. package/dist/chunk-5K44HLTZ.mjs +2 -0
  146. package/dist/{chunk-5ZKJ3H4P.mjs → chunk-5XA2ZBAE.mjs} +3 -3
  147. package/dist/{chunk-4FS7Z7WR.mjs → chunk-67N2QJYT.mjs} +1 -1
  148. package/dist/chunk-6KBYRA2C.mjs +2 -0
  149. package/dist/chunk-6N3PX4XX.mjs +8 -0
  150. package/dist/{chunk-V5JTW2LH.mjs → chunk-6QBHU4DF.mjs} +1 -1
  151. package/dist/chunk-7JDX4E65.mjs +13 -0
  152. package/dist/chunk-7M2BQQGZ.mjs +2 -0
  153. package/dist/chunk-7OG26PGF.mjs +2 -0
  154. package/dist/chunk-AHN3NFKJ.mjs +3 -0
  155. package/dist/chunk-ALZ6ZENZ.mjs +3 -0
  156. package/dist/chunk-AR5D57ZD.mjs +170 -0
  157. package/dist/{chunk-W3BGBJQW.mjs → chunk-BFJGHSQN.mjs} +1 -1
  158. package/dist/{chunk-LS4F7JUM.mjs → chunk-BZ5RAF7L.mjs} +1 -1
  159. package/dist/chunk-CMA72MAG.mjs +2 -0
  160. package/dist/{chunk-LCTHTZIL.mjs → chunk-DAZL73VK.mjs} +91 -91
  161. package/dist/{chunk-Y6RLRPG3.mjs → chunk-DJISHPUL.mjs} +1 -1
  162. package/dist/chunk-DR73Y2UJ.mjs +3 -0
  163. package/dist/{chunk-FDLXYYG4.mjs → chunk-EAIFITAV.mjs} +1 -1
  164. package/dist/{chunk-TMYZB6AV.mjs → chunk-EKNHM3P4.mjs} +1 -1
  165. package/dist/chunk-EP25HDAJ.mjs +2 -0
  166. package/dist/{chunk-GB5SOYQJ.mjs → chunk-ERLAIBOA.mjs} +2 -2
  167. package/dist/chunk-EURLTOTZ.mjs +4 -0
  168. package/dist/chunk-F4ZA6JRZ.mjs +3 -0
  169. package/dist/chunk-F6HVDZR4.mjs +2 -0
  170. package/dist/chunk-FDMAXMQA.mjs +2 -0
  171. package/dist/chunk-FETSREUN.mjs +5 -0
  172. package/dist/chunk-GHOYKMQ3.mjs +4 -0
  173. package/dist/{chunk-2B5E4CDJ.mjs → chunk-GPIWQ4X4.mjs} +1 -1
  174. package/dist/chunk-HDWTZ763.mjs +12 -0
  175. package/dist/chunk-HPOI4ZX7.mjs +6 -0
  176. package/dist/{chunk-BGGDRNYQ.mjs → chunk-HXG7EOPJ.mjs} +1 -1
  177. package/dist/chunk-IA4PSIMD.mjs +2 -0
  178. package/dist/{chunk-E7LWZRXY.mjs → chunk-ITOH5EGO.mjs} +1 -1
  179. package/dist/chunk-IV64FFI4.mjs +2 -0
  180. package/dist/chunk-J43Z6LSS.mjs +2 -0
  181. package/dist/chunk-J5PUIV3Y.mjs +4 -0
  182. package/dist/chunk-JA7G53PC.mjs +2 -0
  183. package/dist/chunk-JEUK3ZO7.mjs +2 -0
  184. package/dist/chunk-JLTZF4LA.mjs +2 -0
  185. package/dist/chunk-JZT7I2OJ.mjs +2 -0
  186. package/dist/chunk-K5XATEOO.mjs +2 -0
  187. package/dist/chunk-L2SUIS5S.mjs +2 -0
  188. package/dist/chunk-L7UP52JO.mjs +2 -0
  189. package/dist/chunk-LM4XFQHZ.mjs +2 -0
  190. package/dist/chunk-MN7BZL4R.mjs +2 -0
  191. package/dist/chunk-MTYYHM2G.mjs +15 -0
  192. package/dist/chunk-MXUBKDRO.mjs +15 -0
  193. package/dist/chunk-NAMN3RAF.mjs +2 -0
  194. package/dist/{chunk-SYGN7GLU.mjs → chunk-OEXWRJME.mjs} +1 -1
  195. package/dist/chunk-OFHXGWOX.mjs +2 -0
  196. package/dist/chunk-ORID3AE7.mjs +166 -0
  197. package/dist/chunk-PAREWQGB.mjs +4 -0
  198. package/dist/chunk-PGDE24N5.mjs +2 -0
  199. package/dist/chunk-POTA2FV4.mjs +2 -0
  200. package/dist/chunk-PUOQ65NC.mjs +2 -0
  201. package/dist/chunk-Q4UEPUWF.mjs +2 -0
  202. package/dist/chunk-QE5RG76S.mjs +549 -0
  203. package/dist/chunk-R2ZDLJYT.mjs +10 -0
  204. package/dist/{chunk-7DTINW6U.mjs → chunk-SQ6Y2ZMA.mjs} +2 -2
  205. package/dist/chunk-SWUTTZCN.mjs +2 -0
  206. package/dist/chunk-TANZRINB.mjs +2 -0
  207. package/dist/chunk-TR7TWGHB.mjs +2 -0
  208. package/dist/chunk-U5XL7D6A.mjs +3 -0
  209. package/dist/{chunk-XNROSH2T.mjs → chunk-U7NZI6N4.mjs} +2 -2
  210. package/dist/chunk-UGWMMEJ5.mjs +15 -0
  211. package/dist/chunk-UJQJKNGK.mjs +2 -0
  212. package/dist/chunk-UYVCQK3H.mjs +22 -0
  213. package/dist/chunk-VFX2KNHP.mjs +4 -0
  214. package/dist/chunk-VS7JIGJW.mjs +24 -0
  215. package/dist/chunk-W7665ZEC.mjs +6 -0
  216. package/dist/chunk-WQDQWCX5.mjs +2 -0
  217. package/dist/chunk-YI43RG4P.mjs +2 -0
  218. package/dist/chunk-YLPSMDIS.mjs +5 -0
  219. package/dist/chunk-YNAWBAYN.mjs +3 -0
  220. package/dist/chunk-YROX2O22.mjs +2 -0
  221. package/dist/chunk-ZDLPUOAG.mjs +6 -0
  222. package/dist/{chunk-IVDLMMBD.mjs → chunk-ZHEHPMBK.mjs} +1 -1
  223. package/dist/chunk-ZQS6H473.mjs +16 -0
  224. package/dist/chunk-ZTHICSSF.mjs +2 -0
  225. package/dist/chunk-ZWWC4KLF.mjs +20 -0
  226. package/dist/cli.mjs +1 -1
  227. package/dist/server.mjs +1 -1
  228. package/dist/{chunk-U6KNPJPR.mjs → update-fetch.mjs} +1 -1
  229. package/dist/worker.mjs +1 -1
  230. package/kit/board.css +95 -0
  231. package/kit/board.js +250 -0
  232. package/kit/charts.js +5 -71
  233. package/kit/code.js +17 -17
  234. package/kit/report.css +335 -18
  235. package/kit/runtime.js +1638 -125
  236. package/kit/state.js +10 -1
  237. package/kit/tables.js +130 -43
  238. package/kit/ui.js +79 -35
  239. package/package.json +2 -1
  240. package/packs/gallery/card/component.json +14 -0
  241. package/packs/gallery/card/example.html +10 -0
  242. package/packs/gallery/card/preview.svg +1 -0
  243. package/packs/gallery/card/style.css +6 -0
  244. package/packs/gallery/card/template.html +6 -0
  245. package/packs/gallery/card/writing.md +14 -0
  246. package/packs/gallery/chart-card/component.json +15 -0
  247. package/packs/gallery/chart-card/example.html +14 -0
  248. package/packs/gallery/chart-card/kit.js +130 -0
  249. package/packs/gallery/chart-card/preview.svg +1 -0
  250. package/packs/gallery/chart-card/style.css +42 -0
  251. package/packs/gallery/chart-card/template.html +13 -0
  252. package/packs/gallery/chart-card/writing.md +20 -0
  253. package/packs/gallery/chart-view/component.json +20 -0
  254. package/packs/gallery/chart-view/example.html +13 -0
  255. package/packs/gallery/chart-view/kit.js +355 -0
  256. package/packs/gallery/chart-view/preview.svg +1 -0
  257. package/packs/gallery/chart-view/style.css +94 -0
  258. package/packs/gallery/chart-view/template.html +3 -0
  259. package/packs/gallery/chart-view/writing.md +22 -0
  260. package/packs/gallery/countdown/component.json +18 -0
  261. package/packs/gallery/countdown/example.html +3 -0
  262. package/packs/gallery/countdown/kit.js +216 -0
  263. package/packs/gallery/countdown/preview.svg +1 -0
  264. package/packs/gallery/countdown/style.css +118 -0
  265. package/packs/gallery/countdown/template.html +3 -0
  266. package/packs/gallery/countdown/writing.md +22 -0
  267. package/packs/gallery/habit/component.json +14 -0
  268. package/packs/gallery/habit/example.html +3 -0
  269. package/packs/gallery/habit/kit.js +334 -0
  270. package/packs/gallery/habit/preview.svg +1 -0
  271. package/packs/gallery/habit/style.css +174 -0
  272. package/packs/gallery/habit/template.html +3 -0
  273. package/packs/gallery/habit/writing.md +21 -0
  274. package/packs/gallery/heatmap/component.json +18 -0
  275. package/packs/gallery/heatmap/example.html +3 -0
  276. package/packs/gallery/heatmap/kit.js +513 -0
  277. package/packs/gallery/heatmap/preview.svg +1 -0
  278. package/packs/gallery/heatmap/style.css +189 -0
  279. package/packs/gallery/heatmap/template.html +3 -0
  280. package/packs/gallery/heatmap/writing.md +21 -0
  281. package/packs/gallery/kanban/component.json +18 -0
  282. package/packs/gallery/kanban/example.html +12 -0
  283. package/packs/gallery/kanban/kit.js +540 -0
  284. package/packs/gallery/kanban/preview.svg +1 -0
  285. package/packs/gallery/kanban/style.css +212 -0
  286. package/packs/gallery/kanban/template.html +3 -0
  287. package/packs/gallery/kanban/writing.md +20 -0
  288. package/packs/gallery/metric/component.json +22 -0
  289. package/packs/gallery/metric/example.html +15 -0
  290. package/packs/gallery/metric/kit.js +248 -0
  291. package/packs/gallery/metric/preview.svg +1 -0
  292. package/packs/gallery/metric/style.css +92 -0
  293. package/packs/gallery/metric/template.html +3 -0
  294. package/packs/gallery/metric/writing.md +23 -0
  295. package/packs/gallery/note/component.json +14 -0
  296. package/packs/gallery/note/example.html +3 -0
  297. package/packs/gallery/note/kit.js +129 -0
  298. package/packs/gallery/note/preview.svg +1 -0
  299. package/packs/gallery/note/style.css +97 -0
  300. package/packs/gallery/note/template.html +3 -0
  301. package/packs/gallery/note/writing.md +18 -0
  302. package/packs/gallery/pack.json +8 -0
  303. package/packs/gallery/recent/component.json +13 -0
  304. package/packs/gallery/recent/example.html +1 -0
  305. package/packs/gallery/recent/kit.js +293 -0
  306. package/packs/gallery/recent/preview.svg +1 -0
  307. package/packs/gallery/recent/style.css +85 -0
  308. package/packs/gallery/recent/template.html +1 -0
  309. package/packs/gallery/recent/writing.md +15 -0
  310. package/packs/gallery/static/component.json +13 -0
  311. package/packs/gallery/static/example.html +11 -0
  312. package/packs/gallery/static/preview.svg +1 -0
  313. package/packs/gallery/static/style.css +171 -0
  314. package/packs/gallery/static/template.html +1 -0
  315. package/packs/gallery/static/writing.md +18 -0
  316. package/packs/gallery/stats/component.json +13 -0
  317. package/packs/gallery/stats/example.html +1 -0
  318. package/packs/gallery/stats/kit.js +347 -0
  319. package/packs/gallery/stats/preview.svg +1 -0
  320. package/packs/gallery/stats/style.css +73 -0
  321. package/packs/gallery/stats/template.html +1 -0
  322. package/packs/gallery/stats/writing.md +11 -0
  323. package/packs/gallery/today/component.json +12 -0
  324. package/packs/gallery/today/example.html +1 -0
  325. package/packs/gallery/today/kit.js +220 -0
  326. package/packs/gallery/today/preview.svg +1 -0
  327. package/packs/gallery/today/style.css +149 -0
  328. package/packs/gallery/today/template.html +1 -0
  329. package/packs/gallery/today/writing.md +14 -0
  330. package/packs/gallery/todos/component.json +19 -0
  331. package/packs/gallery/todos/example.html +3 -0
  332. package/packs/gallery/todos/kit.js +489 -0
  333. package/packs/gallery/todos/preview.svg +1 -0
  334. package/packs/gallery/todos/style.css +214 -0
  335. package/packs/gallery/todos/template.html +3 -0
  336. package/packs/gallery/todos/writing.md +30 -0
  337. package/packs/gallery/weather/component.json +19 -0
  338. package/packs/gallery/weather/example.html +3 -0
  339. package/packs/gallery/weather/kit.js +387 -0
  340. package/packs/gallery/weather/preview.svg +1 -0
  341. package/packs/gallery/weather/style.css +140 -0
  342. package/packs/gallery/weather/template.html +3 -0
  343. package/packs/gallery/weather/writing.md +26 -0
  344. package/packs/gallery-soft/countdown/component.json +18 -0
  345. package/packs/gallery-soft/countdown/example.html +3 -0
  346. package/packs/gallery-soft/countdown/kit.js +206 -0
  347. package/packs/gallery-soft/countdown/preview.svg +1 -0
  348. package/packs/gallery-soft/countdown/style.css +211 -0
  349. package/packs/gallery-soft/countdown/template.html +3 -0
  350. package/packs/gallery-soft/countdown/writing.md +24 -0
  351. package/packs/gallery-soft/habit/component.json +14 -0
  352. package/packs/gallery-soft/habit/example.html +3 -0
  353. package/packs/gallery-soft/habit/kit.js +366 -0
  354. package/packs/gallery-soft/habit/preview.svg +1 -0
  355. package/packs/gallery-soft/habit/style.css +251 -0
  356. package/packs/gallery-soft/habit/template.html +3 -0
  357. package/packs/gallery-soft/habit/writing.md +23 -0
  358. package/packs/gallery-soft/heatmap/component.json +18 -0
  359. package/packs/gallery-soft/heatmap/example.html +3 -0
  360. package/packs/gallery-soft/heatmap/kit.js +498 -0
  361. package/packs/gallery-soft/heatmap/preview.svg +1 -0
  362. package/packs/gallery-soft/heatmap/style.css +181 -0
  363. package/packs/gallery-soft/heatmap/template.html +3 -0
  364. package/packs/gallery-soft/heatmap/writing.md +23 -0
  365. package/packs/gallery-soft/note/component.json +14 -0
  366. package/packs/gallery-soft/note/example.html +3 -0
  367. package/packs/gallery-soft/note/kit.js +162 -0
  368. package/packs/gallery-soft/note/preview.svg +1 -0
  369. package/packs/gallery-soft/note/style.css +148 -0
  370. package/packs/gallery-soft/note/template.html +3 -0
  371. package/packs/gallery-soft/note/writing.md +20 -0
  372. package/packs/gallery-soft/pack.json +8 -0
  373. package/packs/gallery-soft/recent/component.json +13 -0
  374. package/packs/gallery-soft/recent/example.html +1 -0
  375. package/packs/gallery-soft/recent/kit.js +335 -0
  376. package/packs/gallery-soft/recent/preview.svg +1 -0
  377. package/packs/gallery-soft/recent/style.css +160 -0
  378. package/packs/gallery-soft/recent/template.html +1 -0
  379. package/packs/gallery-soft/recent/writing.md +17 -0
  380. package/packs/gallery-soft/static/component.json +13 -0
  381. package/packs/gallery-soft/static/example.html +12 -0
  382. package/packs/gallery-soft/static/preview.svg +1 -0
  383. package/packs/gallery-soft/static/style.css +186 -0
  384. package/packs/gallery-soft/static/template.html +1 -0
  385. package/packs/gallery-soft/static/writing.md +20 -0
  386. package/packs/gallery-soft/stats/component.json +13 -0
  387. package/packs/gallery-soft/stats/example.html +1 -0
  388. package/packs/gallery-soft/stats/kit.js +341 -0
  389. package/packs/gallery-soft/stats/preview.svg +1 -0
  390. package/packs/gallery-soft/stats/style.css +119 -0
  391. package/packs/gallery-soft/stats/template.html +1 -0
  392. package/packs/gallery-soft/stats/writing.md +13 -0
  393. package/packs/gallery-soft/today/component.json +12 -0
  394. package/packs/gallery-soft/today/example.html +1 -0
  395. package/packs/gallery-soft/today/kit.js +222 -0
  396. package/packs/gallery-soft/today/preview.svg +1 -0
  397. package/packs/gallery-soft/today/style.css +178 -0
  398. package/packs/gallery-soft/today/template.html +1 -0
  399. package/packs/gallery-soft/today/writing.md +16 -0
  400. package/packs/gallery-soft/todos/component.json +19 -0
  401. package/packs/gallery-soft/todos/example.html +3 -0
  402. package/packs/gallery-soft/todos/kit.js +527 -0
  403. package/packs/gallery-soft/todos/preview.svg +1 -0
  404. package/packs/gallery-soft/todos/style.css +212 -0
  405. package/packs/gallery-soft/todos/template.html +3 -0
  406. package/packs/gallery-soft/todos/writing.md +32 -0
  407. package/packs/gallery-soft/weather/component.json +19 -0
  408. package/packs/gallery-soft/weather/example.html +3 -0
  409. package/packs/gallery-soft/weather/kit.js +411 -0
  410. package/packs/gallery-soft/weather/preview.svg +1 -0
  411. package/packs/gallery-soft/weather/style.css +185 -0
  412. package/packs/gallery-soft/weather/template.html +3 -0
  413. package/packs/gallery-soft/weather/writing.md +28 -0
  414. package/release.json +12 -10
  415. package/sdk/doc-kit.d.ts +396 -5
  416. package/sdk/doc-state.d.ts +2 -0
  417. package/skill/SKILL.md +56 -23
  418. package/skill/references/block-script.md +140 -0
  419. package/skill/references/building-blocks.md +257 -0
  420. package/skill/references/extensions.md +59 -0
  421. package/skill/references/pages-and-data.md +225 -0
  422. package/skill/references/writing-html.md +8 -4
  423. package/skill/sdk/doc-kit.d.ts +396 -5
  424. package/skill/sdk/doc-state.d.ts +2 -0
  425. package/web/assets/index-BM_K-Auu.css +1 -0
  426. package/web/assets/index-DRslOBiv.js +15 -0
  427. package/web/index.html +2 -2
  428. package/dist/chunk-3HIRPVLU.mjs +0 -2
  429. package/dist/chunk-5MHMDLZD.mjs +0 -4
  430. package/dist/chunk-64K7IPLO.mjs +0 -255
  431. package/dist/chunk-6QXGZM36.mjs +0 -8
  432. package/dist/chunk-6RGJOMJP.mjs +0 -16
  433. package/dist/chunk-AJ73XJF3.mjs +0 -2
  434. package/dist/chunk-AUZGSZJH.mjs +0 -13
  435. package/dist/chunk-BFE45AKL.mjs +0 -2
  436. package/dist/chunk-BXO2ZY5P.mjs +0 -2
  437. package/dist/chunk-CEH4MRCC.mjs +0 -2
  438. package/dist/chunk-CY2FNNAB.mjs +0 -16
  439. package/dist/chunk-DFUDV4LX.mjs +0 -2
  440. package/dist/chunk-DKXG4XDG.mjs +0 -2
  441. package/dist/chunk-EZQ34M3F.mjs +0 -124
  442. package/dist/chunk-EZY3WC6Z.mjs +0 -15
  443. package/dist/chunk-FUKQNOQS.mjs +0 -9
  444. package/dist/chunk-JPOSLGOC.mjs +0 -6
  445. package/dist/chunk-JVHHHGEA.mjs +0 -3
  446. package/dist/chunk-L3QKH4OK.mjs +0 -26
  447. package/dist/chunk-LAE5NQ4B.mjs +0 -2
  448. package/dist/chunk-LEF6DRCK.mjs +0 -59
  449. package/dist/chunk-NO5NJCHO.mjs +0 -2
  450. package/dist/chunk-NQPVAU63.mjs +0 -2
  451. package/dist/chunk-NSKUTQ5J.mjs +0 -5
  452. package/dist/chunk-O35FIXRB.mjs +0 -2
  453. package/dist/chunk-P2CAZPDP.mjs +0 -3
  454. package/dist/chunk-PL6GHLGD.mjs +0 -15
  455. package/dist/chunk-QJIR2BLP.mjs +0 -6
  456. package/dist/chunk-QUPLVPB2.mjs +0 -7
  457. package/dist/chunk-R7BNENLY.mjs +0 -4
  458. package/dist/chunk-S6O4UHLC.mjs +0 -2
  459. package/dist/chunk-SGJWQKEI.mjs +0 -2
  460. package/dist/chunk-TX6JH7TR.mjs +0 -2
  461. package/dist/chunk-TYK6VNAB.mjs +0 -10
  462. package/dist/chunk-UALRNVSE.mjs +0 -4
  463. package/dist/chunk-V3HXVQEM.mjs +0 -2
  464. package/dist/chunk-V5VXUJKG.mjs +0 -2
  465. package/dist/chunk-VBXMADMP.mjs +0 -2
  466. package/dist/chunk-VNV55RUA.mjs +0 -2
  467. package/dist/chunk-VPD2PS35.mjs +0 -2
  468. package/dist/chunk-W4VKN3GF.mjs +0 -7
  469. package/dist/chunk-W5BXXPDJ.mjs +0 -3
  470. package/dist/chunk-XUNHRCOG.mjs +0 -6
  471. package/skill/references/building-components.md +0 -367
  472. package/web/assets/index-Bh74DfsV.css +0 -1
  473. package/web/assets/index-UW0RyFFt.js +0 -13
package/kit/report.css CHANGED
@@ -18,10 +18,10 @@
18
18
 
19
19
  :root {
20
20
  color-scheme: light dark;
21
- /* The page: #2c2c2b on white in light (Notion's), its own pair in dark; the lines below are the text at a strength. */
21
+ /* The page: #2d2d2d on white in light, #262626 where the platform is Apple's (below), its own pair in dark; the lines below are the text at a strength. */
22
22
  --doc-bg: light-dark(#ffffff, #181818);
23
23
  --doc-surface: light-dark(#ffffff, #202020);
24
- --doc-text: light-dark(#2c2c2b, #f3f3f3); /* the text: Notion's (and DingTalk's) #2c2c2b, the editor's own --ge-tx */
24
+ --doc-text: light-dark(#2d2d2d, #f3f3f3); /* the text: #2d2d2d, and #262626 on an Apple platform (the user's of 2026-11-08, below) */
25
25
  --doc-muted: light-dark(#6e6e73, #a1a1a6);
26
26
  --doc-border: light-dark(rgb(44 44 43 / 12%), rgb(243 243 243 / 13%));
27
27
  --doc-grid: light-dark(rgb(44 44 43 / 8%), rgb(243 243 243 / 8%));
@@ -131,6 +131,8 @@
131
131
  palette's gray, opaque. The frame lies over the table's body, whose fill is the page's, where the
132
132
  veil comes out the gray of a block around it. */
133
133
  --doc-table-frame-filled: light-dark(#e6e5e3, #545450);
134
+ /* The hairline as it lies on the page, opaque: the right edge of a frame that scrolls sideways (table.css), under which the columns past it must not show through the dark veil. */
135
+ --doc-hairline-solid: light-dark(#e6e5e3, #383836);
134
136
  /* A flowchart's arrows and the circle behind a step's number (flowchart.css): neutral greys. */
135
137
  --doc-flow-line: light-dark(rgb(55 53 47 / 38%), rgb(255 255 255 / 34%));
136
138
  --doc-flow-badge: light-dark(rgb(55 53 47 / 8%), rgb(255 255 255 / 10%));
@@ -175,6 +177,75 @@
175
177
  --doc-diff-removed-strip: light-dark(rgb(248 81 73 / 55%), rgb(248 81 73 / 55%));
176
178
  --doc-chart-axis-font-size: 13px;
177
179
  --doc-table-fill: var(--doc-bg);
180
+ /* Cards (docs/render.md, Design defaults, "Cards"): a custom page's ground and the board's frame around each card
181
+ (board.css), and the language Gallery's own blocks draw their faces in (the pack 「Gallery 风格」, the
182
+ design B of 2026-11-09: notes/plans/block-packs-plan-2026-11-09.md), which an Agent's block uses too
183
+ (references/pages-and-data.md). A quiet, type-led look: each card one hero (a big number, a field of
184
+ squares, a list), its head saying only whose it is, the rest small and gray. One accent, a Notion blue,
185
+ on the data and on today alone; a warm orange for the sun and a flame; green only for a thing done.
186
+ White cards on the page's own white, set off by a hairline ring and a soft shadow; dark its own pair of
187
+ surfaces (a card a step lighter than the ground), never the light one inverted. */
188
+ --gallery-page-fill: light-dark(#ffffff, #191919);
189
+ --gallery-card-fill: light-dark(#ffffff, #202020);
190
+ --gallery-card-line: light-dark(rgb(15 15 15 / 7%), rgb(255 255 255 / 7.5%));
191
+ --gallery-card-radius: 12px;
192
+ --gallery-card-pad: 16px;
193
+ /* The ring (the card's line, drawn outside it so that it takes nothing of its cells), a close shadow and a soft
194
+ one under it, deeper in dark: each a color of light-dark(), as a shadow's offsets cannot be. */
195
+ --gallery-card-shadow: 0 0 0 1px var(--gallery-card-line), 0 1px 2px light-dark(rgb(15 15 15 / 3.5%), rgb(0 0 0 / 25%)), 0 4px 14px -6px light-dark(rgb(15 15 15 / 7%), transparent), 0 6px 16px -8px light-dark(transparent, rgb(0 0 0 / 50%));
196
+ /* Its ink, five steps: the big numbers and a greeting (strong), the words (text), a label or a unit
197
+ (muted), a caption or a head's quiet meta (faint), and the faintest, a separator or a day to come. */
198
+ --gallery-text-strong: light-dark(#1d1d1b, #f3f3f1);
199
+ --gallery-text: light-dark(#37352f, rgb(255 255 255 / 86%));
200
+ --gallery-muted: light-dark(#7a7975, rgb(255 255 255 / 55%));
201
+ --gallery-faint: light-dark(#a6a5a1, rgb(255 255 255 / 36%));
202
+ --gallery-faintest: light-dark(#d4d3cf, rgb(255 255 255 / 17%));
203
+ /* A line between rows, a soft gray fill (a chip, an empty day), the track a bar or a ring stands on,
204
+ and a row under the pointer. */
205
+ --gallery-hair: light-dark(rgb(55 53 47 / 9%), rgb(255 255 255 / 8%));
206
+ --gallery-fill: light-dark(rgb(55 53 47 / 5.5%), rgb(255 255 255 / 6%));
207
+ --gallery-track: light-dark(rgb(55 53 47 / 10%), rgb(255 255 255 / 10%));
208
+ --gallery-hover: light-dark(rgb(55 53 47 / 6%), rgb(255 255 255 / 5.5%));
209
+ --gallery-neutral-soft: var(--gallery-fill);
210
+ /* The accent: its fill (today, a bar, a day done), its ink (words in it), a pale fill behind a primary
211
+ button's words, a middle shade (the days before today's in a week's bars, the Agent's share) and a wash
212
+ (a field's focus). */
213
+ --gallery-accent: light-dark(#4084cf, #508fd6);
214
+ --gallery-accent-ink: light-dark(#336db0, #8bb8e9);
215
+ --gallery-accent-soft: light-dark(#ebf2fa, rgb(80 143 214 / 17%));
216
+ --gallery-accent-mid: light-dark(#b0cbeb, #395f8d);
217
+ --gallery-accent-wash: light-dark(rgb(64 132 207 / 11%), rgb(80 143 214 / 18%));
218
+ --gallery-good: light-dark(#2f9e68, #3db37a);
219
+ --gallery-good-ink: light-dark(#217a4e, #74d4a3);
220
+ --gallery-good-soft: light-dark(#e6f4ec, rgb(61 179 122 / 16%));
221
+ --gallery-bad: light-dark(#c8473d, #f07d72);
222
+ --gallery-bad-soft: light-dark(rgb(200 71 61 / 9%), rgb(240 125 114 / 14%));
223
+ /* The warm one: the sun's chip by day, a streak's flame, a stale weather's sign. */
224
+ --gallery-warm: light-dark(#e08a12, #f2ae45);
225
+ --gallery-warm-soft: light-dark(#fdf1dd, rgb(242 174 69 / 15%));
226
+ /* A card's head: its icon in a small gray rounded square (the chip; warm or blue for the sun, a flame, the
227
+ moon), its title, a quiet meta text; 8px apart, the row 20px high. */
228
+ /* The cards' own type: Segoe UI on Windows, PingFang SC on a Mac, Microsoft YaHei for the Chinese Segoe UI
229
+ has not; as the system draws them (not the document's metrics-tuned alias, --doc-font's Doc Segoe). */
230
+ --gallery-font: "Segoe UI", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif, "Segoe UI Emoji", "Apple Color Emoji", "Noto Color Emoji";
231
+ --gallery-chip-size: 20px;
232
+ --gallery-chip-radius: 6px;
233
+ --gallery-chip-icon: 13px;
234
+ --gallery-title-size: 13px;
235
+ --gallery-title-line: 20px;
236
+ --gallery-meta-size: 12px;
237
+ /* The rows of a card's face stand this far apart. */
238
+ --gallery-face-gap: 8px;
239
+ /* A big number: its weight and tracking, figures of one height; its unit a 13px muted word 3px after it
240
+ (--gallery-unit-size, a share of the number, is what a document's metric takes). Two sizes: the hero,
241
+ a card's one main number, and the figure, a number among others. */
242
+ --gallery-numeral-weight: 600;
243
+ --gallery-numeral-tracking: -.025em;
244
+ --gallery-unit-size: .4em;
245
+ --gallery-unit-gap: .3em;
246
+ --gallery-unit: 13px;
247
+ --gallery-hero-size: 44px;
248
+ --gallery-figure-size: 28px;
178
249
  }
179
250
 
180
251
  :root[data-doc-theme="light"] { color-scheme: light; }
@@ -200,6 +271,10 @@
200
271
  :root[data-doc-size="small"][data-doc-spacing="loose"] { --doc-body-line-height: 26px; --doc-small-line-height: 18px; --doc-note-line-height: 20px; --doc-title-line-height: 35px; --doc-h1-line-height: 35px; --doc-h2-line-height: 31px; --doc-h3-line-height: 28px; --doc-h4-line-height: 24px; --doc-card-title-line-height: 25px; --doc-table-line-height: 20px; }
201
272
  :root[data-doc-size="large"][data-doc-spacing="compact"] { --doc-body-line-height: 27px; --doc-small-line-height: 20px; --doc-note-line-height: 21px; --doc-title-line-height: 39px; --doc-h1-line-height: 38px; --doc-h2-line-height: 33px; --doc-h3-line-height: 30px; --doc-h4-line-height: 25px; --doc-card-title-line-height: 26px; --doc-table-line-height: 22px; }
202
273
  :root[data-doc-size="large"][data-doc-spacing="loose"] { --doc-body-line-height: 32px; --doc-small-line-height: 22px; --doc-note-line-height: 24px; --doc-title-line-height: 43px; --doc-h1-line-height: 43px; --doc-h2-line-height: 37px; --doc-h3-line-height: 34px; --doc-h4-line-height: 29px; --doc-card-title-line-height: 29px; --doc-table-line-height: 24px; }
274
+
275
+ /* The text on an Apple platform (macOS, iOS, iPadOS: runtime/index.js sets data-doc-platform when the page opens, so an exported file
276
+ judges on its reader's machine): a shade darker, as its type is drawn thinner there; base.css smooths it. Dark is the same. */
277
+ :root[data-doc-platform="mac"] { --doc-text: light-dark(#262626, #f3f3f3); }
203
278
  /* 衬线体: the kit's own controls (the display menu, a code block's language, a diff's counts) keep the
204
279
  sans, --doc-font itself given it back on them, for what in them names --doc-font again (the display
205
280
  menu's card, controls.css) takes it there. 混合体: the title and every heading in the serif, of no
@@ -247,11 +322,14 @@ body {
247
322
  font-size: var(--doc-body-font-size);
248
323
  line-height: var(--doc-body-line-height);
249
324
  }
325
+ /* On an Apple platform (runtime/index.js) the type is smoothed as the system's own apps' is; the workbench's frame has it, a document in its iframe does not inherit it. */
326
+ :root[data-doc-platform="mac"] body { -webkit-font-smoothing: antialiased; }
250
327
 
251
328
  /* Hold the first paint until ui.js marks the page ready: by then the reader's theme and width
252
329
  are applied and the report's scripts have set up Sheets, charts, tables and formulas, so the
253
- page never flashes an intermediate state. If that never happens, reveal it anyway. */
254
- :root:not([data-doc-ready]) body:has(> .doc-page) {
330
+ page never flashes an intermediate state. If that never happens, reveal it anyway. A custom page
331
+ (main.gallery-page) is held the same way, until its board has placed its cards (board/). */
332
+ :root:not([data-doc-ready]) body:has(> :is(.doc-page, .gallery-page)) {
255
333
  visibility: hidden;
256
334
  animation: doc-reveal 0s linear 1.2s forwards;
257
335
  }
@@ -364,6 +442,84 @@ span:is(.doc-highlight-gray, .doc-highlight-brown, .doc-highlight-orange, .doc-h
364
442
  .doc-kit-error { display: none; }
365
443
  }
366
444
 
445
+ /* A block online that waits for the reader's consent (the kit's runtime, net.js): a line and a button
446
+ after it in a document, over its card on a custom page (the card is the board's, position: relative),
447
+ its fill the card's so that what the block drew underneath does not show through. Never in a file,
448
+ an export or on paper (data-doc-dev). */
449
+ .doc-net-consent {
450
+ display: flex;
451
+ flex-wrap: wrap;
452
+ align-items: center;
453
+ gap: 8px 12px;
454
+ margin: 8px 0;
455
+ padding: 8px 12px;
456
+ border-radius: 6px;
457
+ color: var(--doc-muted);
458
+ background: var(--doc-surface);
459
+ font: 13px/1.5 var(--doc-font);
460
+ }
461
+ /* 允许 is the card's one action: a button with no line, the pale blue fill of a primary (the editor's look.mjs
462
+ BUTTONS and the workbench's, from the document's own accent), a deeper one under the pointer and pressed. */
463
+ .doc-net-consent-allow {
464
+ padding: 4px 10px;
465
+ border: 0;
466
+ border-radius: 6px;
467
+ color: color-mix(in srgb, var(--doc-accent) 80%, var(--doc-text));
468
+ background: color-mix(in srgb, var(--doc-accent) 14%, transparent);
469
+ font: inherit;
470
+ font-weight: 500;
471
+ cursor: pointer;
472
+ overflow-wrap: anywhere;
473
+ transition: background-color 20ms ease-in;
474
+ }
475
+ .doc-net-consent-allow:is(:hover, :focus-visible) { outline: none; background: color-mix(in srgb, var(--doc-accent) 22%, transparent); }
476
+ .doc-net-consent-allow:active { background: color-mix(in srgb, var(--doc-accent) 30%, transparent); }
477
+ /* The why's words, and the button's: in a document the why and 允许访问 <host>; on a card the from line and the short words too. */
478
+ .doc-net-consent-words { display: contents; }
479
+ .doc-net-consent-from, .doc-net-consent-short { display: none; }
480
+ /* On a card of a custom page (the pack Gallery 风格's banner, design B): over the card under its head row, on
481
+ the card's fill, so that the card still says whose it is: the why (13.5px, 600) over whose the data is
482
+ (faint) at the left, 允许访问 at the right, a pale primary with no line; the hosts in its title. */
483
+ .gallery-card > .doc-net-consent {
484
+ position: absolute;
485
+ inset: calc(var(--gallery-card-pad, 16px) + 20px) 0 0;
486
+ z-index: 1;
487
+ flex-wrap: nowrap;
488
+ justify-content: space-between;
489
+ gap: 12px;
490
+ margin: 0;
491
+ padding: 0 var(--gallery-card-pad, 16px) var(--gallery-card-pad, 16px);
492
+ border-radius: 0 0 var(--gallery-card-radius, 12px) var(--gallery-card-radius, 12px);
493
+ font: 13px/1.5 var(--gallery-font, var(--doc-font));
494
+ background: var(--gallery-card-fill, var(--doc-surface));
495
+ }
496
+ .gallery-card > .doc-net-consent > .doc-net-consent-words { display: flex; flex-direction: column; min-width: 0; }
497
+ .gallery-card > .doc-net-consent .doc-net-consent-why { font-size: 13.5px; line-height: 20px; font-weight: 600; color: var(--gallery-text, var(--doc-text)); }
498
+ .gallery-card > .doc-net-consent .doc-net-consent-from { display: block; overflow: hidden; font-size: 12px; line-height: 18px; color: var(--gallery-faint, var(--doc-muted)); white-space: nowrap; text-overflow: ellipsis; }
499
+ .gallery-card > .doc-net-consent > .doc-net-consent-allow {
500
+ flex: none;
501
+ height: 30px;
502
+ padding: 0 14px;
503
+ border-radius: 8px;
504
+ font-size: 13px;
505
+ font-weight: 600;
506
+ white-space: nowrap;
507
+ color: var(--gallery-accent-ink, var(--doc-accent));
508
+ background: var(--gallery-accent-soft, color-mix(in srgb, var(--doc-accent) 14%, transparent));
509
+ }
510
+ .gallery-card > .doc-net-consent > .doc-net-consent-allow:is(:hover, :focus-visible) { background: color-mix(in srgb, var(--gallery-accent, var(--doc-accent)) 18%, var(--gallery-accent-soft, transparent)); }
511
+ .gallery-card > .doc-net-consent .doc-net-consent-long { display: none; }
512
+ .gallery-card > .doc-net-consent .doc-net-consent-short { display: inline; }
513
+ /* On a narrow card (data-doc-net-narrow: under 240px of content, net.js) the line just over the button, both at the card's
514
+ foot, the button as wide as the card, as a narrow habit card's streak and 打卡 are; the line 13px, three lines at
515
+ most, and whose the data is left to the button's title, so that the banner fits a 2 × 2 card in either language. */
516
+ .gallery-card > .doc-net-consent[data-doc-net-narrow] { flex-direction: column; align-items: stretch; justify-content: flex-end; gap: 8px; }
517
+ .gallery-card > .doc-net-consent[data-doc-net-narrow] .doc-net-consent-why { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden; font-size: 13px; line-height: 17px; }
518
+ .gallery-card > .doc-net-consent[data-doc-net-narrow] .doc-net-consent-from { display: none; }
519
+ @media print {
520
+ .doc-net-consent { display: none; }
521
+ }
522
+
367
523
  @media (prefers-reduced-motion: reduce) {
368
524
  *, *::before, *::after { scroll-behavior: auto !important; transition-duration: .01ms !important; }
369
525
  }
@@ -495,7 +651,9 @@ span:is(.doc-highlight-gray, .doc-highlight-brown, .doc-highlight-orange, .doc-h
495
651
  transition: color 100ms ease-in-out, background-color 100ms ease-in-out;
496
652
  }
497
653
 
498
- .doc-display-button:hover,
654
+ /* An icon button: the icon darkens under the pointer, the gray only while it is pressed or its menu is open. */
655
+ .doc-display-button:hover { color: var(--doc-text); }
656
+
499
657
  .doc-display-button[aria-expanded="true"] {
500
658
  color: var(--doc-text);
501
659
  background: var(--doc-hover);
@@ -679,6 +837,122 @@ span:is(.doc-highlight-gray, .doc-highlight-brown, .doc-highlight-orange, .doc-h
679
837
  .doc-display { display: none; }
680
838
  }
681
839
 
840
+ /* A choice (runtime/choice.js): the menu card a <select> and DocKit.choose open instead of the browser's
841
+ popup, and the quiet look a <select> has where nobody gave it one. The card is the display menu's
842
+ (controls.css): radius 10, Notion's popup surface and shadow, rows of 28px that take one light fill
843
+ under the pointer or the keys, the chosen row checked at its right (no empty column before the words
844
+ on the others), as wide as its rows (the trigger's width at least, 320px at most, its words cut by an
845
+ ellipsis past that). It stands in the top layer (a popover, so no z-index of the page covers it);
846
+ z-index is for a browser without popovers. */
847
+
848
+ .doc-choice {
849
+ position: fixed;
850
+ inset: auto;
851
+ left: 0;
852
+ top: 0;
853
+ z-index: 1100;
854
+ box-sizing: border-box;
855
+ width: max-content;
856
+ max-width: min(320px, calc(100vw - 16px));
857
+ margin: 0;
858
+ padding: 4px 0;
859
+ overflow-x: hidden;
860
+ overflow-y: auto;
861
+ overscroll-behavior: contain;
862
+ scrollbar-width: thin;
863
+ border: 0;
864
+ border-radius: 10px;
865
+ color: var(--doc-text);
866
+ background: light-dark(#ffffff, #252525);
867
+ box-shadow:
868
+ 0 0 0 1px light-dark(rgb(42 28 0 / 7%), #383836),
869
+ 0 20px 24px light-dark(rgb(25 25 25 / 5%), rgb(0 0 0 / 20%)),
870
+ 0 5px 8px light-dark(rgb(25 25 25 / 2.7%), rgb(0 0 0 / 12%));
871
+ font: 14px/1.2 var(--doc-font);
872
+ user-select: none;
873
+ transition: opacity 120ms ease-out;
874
+ }
875
+
876
+ @starting-style {
877
+ .doc-choice { opacity: 0; }
878
+ }
879
+
880
+ .doc-choice-row {
881
+ display: flex;
882
+ align-items: center;
883
+ gap: 8px;
884
+ min-height: 28px;
885
+ margin: 0 4px 1px;
886
+ padding: 0 8px;
887
+ border-radius: 6px;
888
+ cursor: pointer;
889
+ transition: background-color 20ms ease-in;
890
+ }
891
+
892
+ /* Under the pointer, or reached with the keys: one light fill, as every menu's rows. */
893
+ .doc-choice-row.is-active { background: var(--doc-hover); }
894
+ .doc-choice-row:active { background: var(--doc-press); }
895
+ .doc-choice-row[aria-disabled="true"] { opacity: .45; cursor: default; }
896
+ .doc-choice-row[aria-disabled="true"]:active { background: transparent; }
897
+
898
+ .doc-choice-label {
899
+ flex: 1 1 auto;
900
+ min-width: 0;
901
+ overflow: hidden;
902
+ text-overflow: ellipsis;
903
+ white-space: nowrap;
904
+ }
905
+
906
+ /* The chosen row: a check at its right. */
907
+ .doc-choice-check {
908
+ flex: none;
909
+ width: 16px;
910
+ height: 16px;
911
+ fill: none;
912
+ stroke: currentColor;
913
+ stroke-width: 1.7;
914
+ stroke-linecap: round;
915
+ stroke-linejoin: round;
916
+ }
917
+
918
+ /* An <optgroup>'s name: a small heading, no row. */
919
+ .doc-choice-group {
920
+ padding: 6px 12px 2px;
921
+ color: var(--doc-muted);
922
+ font-size: 12px;
923
+ font-weight: 500;
924
+ }
925
+
926
+ .doc-choice-group:not(:first-child) { margin-top: 4px; }
927
+
928
+ /* A <select> nobody styled: no frame, a light fill that darkens under the pointer, the browser's own
929
+ arrow at its right (kept whatever the page sets as border or background, which a drawn arrow would
930
+ lose). A class's or a block's own rule outweighs this (it has no weight); a list box (multiple) is
931
+ the browser's. */
932
+ :where(select:not([multiple], [size])) {
933
+ min-height: 28px;
934
+ padding: 0 4px 0 8px;
935
+ border: 0;
936
+ border-radius: 6px;
937
+ color: var(--doc-text);
938
+ background-color: var(--doc-hover);
939
+ font: inherit;
940
+ cursor: pointer;
941
+ }
942
+
943
+ :where(select:not([multiple], [size]):hover) { background-color: var(--doc-press); }
944
+
945
+ :where(select:not([multiple], [size]):focus-visible) {
946
+ outline: 2px solid var(--doc-accent);
947
+ outline-offset: 2px;
948
+ }
949
+
950
+ /* On paper a <select> is the words of its chosen option, no arrow, and the menu is never there. */
951
+ @media print {
952
+ select { appearance: none; background-image: none; }
953
+ .doc-choice { display: none; }
954
+ }
955
+
682
956
  /* 选项卡区块 (sheets.js), as Notion's tabs: a frame 16px round (1px, Notion's line) holding a row of
683
957
  pill tabs and the panel shown, 16px in; or, with .doc-sheet-shell--plain, no frame and no room
684
958
  inside it (the tabs and the panel at the flow's edge). A tab is a pill 32px high, its name 14px:
@@ -1387,7 +1661,7 @@ span.doc-link-mention-icon {
1387
1661
  :where(&:is(ol):has(> li[value]), & li > ol:has(> li[value])) > li::marker { color: var(--doc-list-marker); }
1388
1662
  }
1389
1663
 
1390
- & > :where(p, ul, ol, blockquote, h1, h2, h3, h4) :where(strong) { font-weight: 600; }
1664
+ & > :where(p, ul, ol, blockquote, h1, h2, h3, h4) :where(strong) { font-weight: 700; }
1391
1665
 
1392
1666
  /* A quote and a divider (in the flow, or held by one of its list items: the same look, there the
1393
1667
  list's one gap above it and none below, as any block an item holds, none at its sides). */
@@ -1420,6 +1694,21 @@ span.doc-link-mention-icon {
1420
1694
  title too, and a callout the file has empty (an empty one of the editor's before 2026-11-07). */
1421
1695
  .doc-page :where(p, h1, h2, h3, h4, li, .doc-callout, .doc-details-summary-label):empty::after { content: "\200b"; }
1422
1696
 
1697
+ /* A paragraph's or a heading's alignment and indent (对齐与缩进 in the page editor's block menu,
1698
+ Feishu's): centred or at the right (left is neither), and moved in by levels of two body characters,
1699
+ whatever the block's own size, its background with it (a margin, so its fill keeps to its words). */
1700
+ :is(p, h1, h2, h3, h4).doc-align-center { text-align: center; }
1701
+ :is(p, h1, h2, h3, h4).doc-align-right { text-align: right; }
1702
+ :is(p, h1, h2, h3, h4):is(.doc-indent-1, .doc-indent-2, .doc-indent-3, .doc-indent-4, .doc-indent-5, .doc-indent-6, .doc-indent-7, .doc-indent-8) { margin-inline-start: calc(var(--doc-indent-level) * 2 * var(--doc-body-font-size)); }
1703
+ .doc-indent-1 { --doc-indent-level: 1; }
1704
+ .doc-indent-2 { --doc-indent-level: 2; }
1705
+ .doc-indent-3 { --doc-indent-level: 3; }
1706
+ .doc-indent-4 { --doc-indent-level: 4; }
1707
+ .doc-indent-5 { --doc-indent-level: 5; }
1708
+ .doc-indent-6 { --doc-indent-level: 6; }
1709
+ .doc-indent-7 { --doc-indent-level: 7; }
1710
+ .doc-indent-8 { --doc-indent-level: 8; }
1711
+
1423
1712
  /* An item's color (颜色 in the page editor's block menu, notion-lite's: base.css's classes): a text
1424
1713
  color is its marker's too, and the items it holds take both; a background lies behind it, its
1425
1714
  marker and the items it holds, 2px past them as a paragraph's (base.css), its part left of the
@@ -1543,7 +1832,7 @@ ol.doc-flow > li {
1543
1832
  border-radius: 8px;
1544
1833
  background: var(--doc-surface);
1545
1834
  box-shadow: none;
1546
- font-weight: 600; /* a step written the short way: its own words its title */
1835
+ font-weight: 700; /* a step written the short way: its own words its title, bold as a <strong> is (flow.css) */
1547
1836
  overflow-wrap: anywhere;
1548
1837
  break-inside: avoid;
1549
1838
  }
@@ -2076,7 +2365,6 @@ figure:is(.doc-image, .doc-file, .doc-bookmark, .doc-embed):not(:has(> *)) { dis
2076
2365
  border-radius: 6px;
2077
2366
  color: inherit;
2078
2367
  background: color-mix(in srgb, currentColor 8%, transparent);
2079
- box-shadow: inset 0 0 0 1px color-mix(in srgb, currentColor 9%, transparent);
2080
2368
  font: inherit;
2081
2369
  font-weight: inherit;
2082
2370
  line-height: inherit;
@@ -2383,6 +2671,7 @@ figure:is(.doc-image, .doc-file, .doc-bookmark, .doc-embed):not(:has(> *)) { dis
2383
2671
 
2384
2672
  .doc-table-wrap {
2385
2673
  --doc-table-frame: var(--doc-hairline);
2674
+ --doc-table-frame-solid: var(--doc-hairline-solid);
2386
2675
  position: relative;
2387
2676
  align-self: start;
2388
2677
  /* A share over 1 keeps the wrapper at the reading width; the table is that much wider and
@@ -2409,6 +2698,11 @@ figure:is(.doc-image, .doc-file, .doc-bookmark, .doc-embed):not(:has(> *)) { dis
2409
2698
  scrollbar-width: none;
2410
2699
  }
2411
2700
  .doc-table-wrap::-webkit-scrollbar { display: none; } /* WebKit without scrollbar-width */
2701
+ /* A table narrower than the text is placed on the page as a paragraph's words are (对齐 in the page
2702
+ editor's block menu, a text block's classes: components/align.mjs): at the left unless its frame
2703
+ says centred or at the right, where the text has room (a frame as wide as the text has none). */
2704
+ :is(.doc-table-wrap, table).doc-align-center { margin-inline: auto; }
2705
+ :is(.doc-table-wrap, table).doc-align-right { margin-inline: auto 0; }
2412
2706
  /* A short table, or one mostly of words (data-doc-whole, tables/whole.js), is shown whole: its
2413
2707
  frame as tall as its rows, read with the page. A long table of data keeps the kit's height above,
2414
2708
  its rows scrolling under the header row that stays; a height written on the frame
@@ -2416,18 +2710,19 @@ figure:is(.doc-image, .doc-file, .doc-bookmark, .doc-embed):not(:has(> *)) { dis
2416
2710
  .doc-table-wrap[data-doc-whole] { max-height: var(--doc-table-height, none); }
2417
2711
  .doc-table-wrap:has(> .doc-scrollbars[data-y]) { overscroll-behavior-block: none; }
2418
2712
 
2419
- /* The frame's scrollbars (tables.js): a layer stuck at the frame's top-left that takes no room,
2420
- with a rail along the right edge and one along the bottom for each axis that overflows
2421
- (data-y, data-x), each thumb 3px in from the frame's edge. tables.js sets each rail's place
2422
- (the part of the edge that scrolls: below the header, between the rounded corners) and its
2423
- track, thumb size and thumb offset (--doc-scrollbar-*). They show while the pointer is
2424
- over the frame or it scrolls. */
2713
+ /* The frame's scrollbars (tables.js): a layer stuck at the frame's top-left that takes no room (no
2714
+ height; as wide as the frame's inside, which it never makes wider, so that the frame's line is
2715
+ as wide as the frame in the same layout as the frame: below), with a rail along the right edge
2716
+ and one along the bottom for each axis that overflows (data-y, data-x), each thumb 3px in from
2717
+ the frame's edge. tables.js sets each rail's place (the part of the edge that scrolls: below the
2718
+ header, between the rounded corners) and its track, thumb size and thumb offset
2719
+ (--doc-scrollbar-*). They show while the pointer is over the frame or it scrolls. */
2425
2720
  .doc-scrollbars {
2426
2721
  position: sticky;
2427
2722
  top: 0;
2428
2723
  left: 0;
2429
2724
  z-index: 6;
2430
- width: 0;
2725
+ width: 100%;
2431
2726
  height: 0;
2432
2727
  }
2433
2728
  .doc-scrollbar {
@@ -2465,11 +2760,14 @@ figure:is(.doc-image, .doc-file, .doc-bookmark, .doc-embed):not(:has(> *)) { dis
2465
2760
  }
2466
2761
  .doc-scrollbar:is(:hover, [data-drag]) > .doc-scrollbar-thumb { background: var(--doc-scrollbar-thumb-active); }
2467
2762
  /* The frame's line above everything in the frame (a header row or column that sticks over the
2468
- outline too): as big as the frame (tables.js), on the layer stuck at its top-left. */
2763
+ outline too): as big as the frame, on the layer stuck at its top-left; as wide as the layer, so
2764
+ as the frame whenever the frame is laid out (a width read and written later by a script could
2765
+ disagree with it for a frame), as tall as tables.js reads the frame. */
2469
2766
  .doc-scrollbars-frame {
2470
2767
  position: absolute;
2471
2768
  top: 0;
2472
2769
  left: 0;
2770
+ width: 100%;
2473
2771
  box-sizing: border-box;
2474
2772
  border: 1px solid var(--doc-table-frame);
2475
2773
  border-radius: var(--doc-table-radius);
@@ -2480,7 +2778,7 @@ figure:is(.doc-image, .doc-file, .doc-bookmark, .doc-embed):not(:has(> *)) { dis
2480
2778
  .doc-table-wrap:has(> .doc-scrollbars) { outline-color: transparent; }
2481
2779
  /* In a block with a fill of its own (a highlight block, its gray its own unless it is given a text
2482
2780
  color; any block of the palette's background colors) the frame's line is opaque (above). */
2483
- :is(:is(.doc-summary, .doc-panel):not(.doc-text-gray, .doc-text-brown, .doc-text-orange, .doc-text-yellow, .doc-text-green, .doc-text-blue, .doc-text-purple, .doc-text-pink, .doc-text-red), .doc-highlight-gray, .doc-highlight-brown, .doc-highlight-orange, .doc-highlight-yellow, .doc-highlight-green, .doc-highlight-blue, .doc-highlight-purple, .doc-highlight-pink, .doc-highlight-red) .doc-table-wrap { --doc-table-frame: var(--doc-table-frame-filled); }
2781
+ :is(:is(.doc-summary, .doc-panel):not(.doc-text-gray, .doc-text-brown, .doc-text-orange, .doc-text-yellow, .doc-text-green, .doc-text-blue, .doc-text-purple, .doc-text-pink, .doc-text-red), .doc-highlight-gray, .doc-highlight-brown, .doc-highlight-orange, .doc-highlight-yellow, .doc-highlight-green, .doc-highlight-blue, .doc-highlight-purple, .doc-highlight-pink, .doc-highlight-red) .doc-table-wrap { --doc-table-frame: var(--doc-table-frame-filled); --doc-table-frame-solid: var(--doc-table-frame-filled); }
2484
2782
  /* A frame that scrolls sideways and is not at its end fades out at its right edge (data-more,
2485
2783
  tables.js): the columns go on past it, which its rails, shown only under the pointer, do not say.
2486
2784
  Drawn over the cells by the frame's line layer, taking no room. */
@@ -2497,6 +2795,9 @@ figure:is(.doc-image, .doc-file, .doc-bookmark, .doc-embed):not(:has(> *)) { dis
2497
2795
  transition: opacity 160ms ease;
2498
2796
  }
2499
2797
  .doc-scrollbars[data-more] > .doc-scrollbars-frame::after { opacity: 1; }
2798
+ /* Its right edge, under which the columns past it lie, is drawn opaque (the dark line is a veil that
2799
+ shows what is under it): the line over the fade, nothing of those columns through it. */
2800
+ .doc-scrollbars[data-more] > .doc-scrollbars-frame { border-right-color: var(--doc-table-frame-solid); }
2500
2801
 
2501
2802
  /* Each cell draws its own lines, on its right and at its bottom (separate borders: a cell that sticks
2502
2803
  while the frame scrolls takes its lines along, a merged cell has them where it ends); in a frame
@@ -2560,6 +2861,12 @@ figure:is(.doc-image, .doc-file, .doc-bookmark, .doc-embed):not(:has(> *)) { dis
2560
2861
  .doc-table :is(td, th) > :is(ul, ol):last-child { margin-bottom: 0; }
2561
2862
  .doc-table :is(td, th) > :is(ul, ol) > li + li { margin-top: 2px; }
2562
2863
 
2864
+ /* A picture in a cell (单元格里的图片, an <img> amid its words): as wide as its width says (pixels; the
2865
+ page editor's drag of its edge writes it), with none at most 240px, never past its cell; its height
2866
+ by its own ratio, its middle on the line's, so a row grows with it. */
2867
+ .doc-table :is(td, th) img { max-width: 100%; height: auto; vertical-align: middle; }
2868
+ .doc-table :is(td, th) img:not([width]) { max-width: min(100%, 240px); }
2869
+
2563
2870
  .doc-table--auto { table-layout: fixed; max-width: none; }
2564
2871
  .doc-table [data-column-kind="compact"] { white-space: nowrap; word-break: normal; }
2565
2872
  .doc-table [data-column-kind="narrative"] { overflow-wrap: break-word; }
@@ -2630,7 +2937,7 @@ figure:is(.doc-image, .doc-file, .doc-bookmark, .doc-embed):not(:has(> *)) { dis
2630
2937
  (base.css), a fill over the whole cell (base.css's: a cell is square, and one that sticks wears it too, above), bold words (the words
2631
2938
  typed in it later too), and an alignment over the kit's own (a numeric column's centre), a vertical one (the kit's: top). A header
2632
2939
  row's look is these: .doc-highlight-gray and .doc-bold (a header column has none of its own). */
2633
- .doc-table :is(td, th).doc-bold { font-weight: 600; }
2940
+ .doc-table :is(td, th).doc-bold { font-weight: 700; }
2634
2941
  .doc-table :is(td, th).doc-align-left { text-align: left; }
2635
2942
  .doc-table :is(td, th).doc-align-center { text-align: center; }
2636
2943
  .doc-table :is(td, th).doc-align-right { text-align: right; }
@@ -2839,6 +3146,16 @@ figure:is(.doc-image, .doc-file, .doc-bookmark, .doc-embed):not(:has(> *)) { dis
2839
3146
  [data-doc-component] {
2840
3147
  margin: var(--doc-block-gap) 0;
2841
3148
  }
3149
+ /* [hidden] hides what is in an instance whatever display a block's style gave it: a control a block
3150
+ hides where nothing is written (an export: form.hidden = !context.canEdit()) stays hidden though its
3151
+ own rule says display: flex, which an author's rule on the class would otherwise win over the
3152
+ browser's [hidden] { display: none }. What a slot holds is the document's blocks, which keep their
3153
+ own rules (a Sheet panel, an empty figure the editor shows), so the rule stops at a slot. */
3154
+ @scope ([data-doc-component]) to ([data-doc-slot]) {
3155
+ :scope [hidden] {
3156
+ display: none !important;
3157
+ }
3158
+ }
2842
3159
  /* A slot holds the document's blocks: they read as in any flow (flow.css), the first and the last flush with it. */
2843
3160
  [data-doc-slot] > :where(:first-child) {
2844
3161
  margin-top: 0;