@amaster.ai/pi-lark 0.1.5 → 0.1.7

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 (258) hide show
  1. package/README.md +5 -1
  2. package/dist/config.d.ts +1 -1
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +2 -2
  5. package/dist/config.js.map +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +2 -1
  8. package/dist/index.js.map +1 -1
  9. package/package.json +4 -4
  10. package/skills/lark-approval/references/lark-approval-initiate.md +2 -5
  11. package/skills/lark-approval/references/lark-approval-instances-initiated.md +6 -0
  12. package/skills/lark-approval/references/lark-approval-tasks-query.md +9 -0
  13. package/skills/lark-approval/references/lark-approval-tasks-rollback.md +8 -2
  14. package/skills/lark-apps/SKILL.md +46 -16
  15. package/skills/lark-apps/creative-design/agents/assets/vision-probe.png +0 -0
  16. package/skills/lark-apps/creative-design/agents/fork-verifier-agent.md +71 -0
  17. package/skills/lark-apps/creative-design/agents/vision-probe-agent.md +41 -0
  18. package/skills/lark-apps/creative-design/assets/index.html +27 -0
  19. package/skills/lark-apps/creative-design/creative-design.md +239 -0
  20. package/skills/lark-apps/creative-design/references/aily.md +39 -0
  21. package/skills/lark-apps/creative-design/references/animated-video.md +34 -0
  22. package/skills/lark-apps/creative-design/references/charts.md +165 -0
  23. package/skills/lark-apps/creative-design/references/claude.md +36 -0
  24. package/skills/lark-apps/creative-design/references/codex.md +32 -0
  25. package/skills/lark-apps/creative-design/references/data-report.md +108 -0
  26. package/skills/lark-apps/creative-design/references/frontend-design.md +71 -0
  27. package/skills/lark-apps/creative-design/references/hi-fi-design.md +32 -0
  28. package/skills/lark-apps/creative-design/references/interactive-prototype.md +24 -0
  29. package/skills/lark-apps/creative-design/references/make-a-deck.md +133 -0
  30. package/skills/lark-apps/creative-design/references/visual-exposure.md +82 -0
  31. package/skills/lark-apps/creative-design/references/wireframe.md +14 -0
  32. package/skills/lark-apps/creative-design/starter-components/android-frame.jsx +188 -0
  33. package/skills/lark-apps/creative-design/starter-components/animations.jsx +773 -0
  34. package/skills/lark-apps/creative-design/starter-components/browser-window.jsx +122 -0
  35. package/skills/lark-apps/creative-design/starter-components/deck-stage.js +2483 -0
  36. package/skills/lark-apps/creative-design/starter-components/design-canvas.jsx +1432 -0
  37. package/skills/lark-apps/creative-design/starter-components/ios-frame.jsx +270 -0
  38. package/skills/lark-apps/creative-design/starter-components/macos-window.jsx +197 -0
  39. package/skills/lark-apps/creative-design/starter-components/tweaks-panel.jsx +752 -0
  40. package/skills/lark-apps/references/lark-apps-access-scope-set.md +1 -1
  41. package/skills/lark-apps/references/lark-apps-automation.md +242 -0
  42. package/skills/lark-apps/references/lark-apps-cache.md +61 -0
  43. package/skills/lark-apps/references/lark-apps-cloud-dev.md +0 -1
  44. package/skills/lark-apps/references/lark-apps-create.md +1 -2
  45. package/skills/lark-apps/references/lark-apps-db-execute.md +186 -2
  46. package/skills/lark-apps/references/lark-apps-db.md +4 -4
  47. package/skills/lark-apps/references/lark-apps-env-pull.md +1 -1
  48. package/skills/lark-apps/references/lark-apps-file.md +2 -2
  49. package/skills/lark-apps/references/lark-apps-get.md +43 -0
  50. package/skills/lark-apps/references/lark-apps-git-credential.md +1 -1
  51. package/skills/lark-apps/references/lark-apps-html-publish.md +5 -4
  52. package/skills/lark-apps/references/lark-apps-init.md +2 -3
  53. package/skills/lark-apps/references/lark-apps-list.md +1 -1
  54. package/skills/lark-apps/references/lark-apps-local-dev.md +54 -11
  55. package/skills/lark-apps/references/lark-apps-openapi-key.md +1 -1
  56. package/skills/lark-apps/references/lark-apps-release-create.md +5 -3
  57. package/skills/lark-apps/references/lark-apps-release-get.md +3 -3
  58. package/skills/lark-apps/references/lark-apps-role.md +133 -0
  59. package/skills/lark-base/SKILL.md +26 -15
  60. package/skills/lark-base/references/dashboard-block-data-config.md +28 -2
  61. package/skills/lark-base/references/lark-base-cell-value.md +12 -7
  62. package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +7 -7
  63. package/skills/lark-base/references/lark-base-dashboard.md +11 -2
  64. package/skills/lark-base/references/lark-base-data-query.md +20 -11
  65. package/skills/lark-base/references/lark-base-field-create.md +8 -2
  66. package/skills/lark-base/references/lark-base-field-json.md +56 -19
  67. package/skills/lark-base/references/lark-base-field-update.md +21 -3
  68. package/skills/lark-base/references/lark-base-filter-condition.md +179 -0
  69. package/skills/lark-base/references/lark-base-form-questions-create.md +40 -7
  70. package/skills/lark-base/references/lark-base-form-questions-update.md +73 -20
  71. package/skills/lark-base/references/lark-base-form-submit.md +16 -7
  72. package/skills/lark-base/references/lark-base-record-batch-create.md +12 -10
  73. package/skills/lark-base/references/lark-base-record-batch-update.md +11 -9
  74. package/skills/lark-base/references/lark-base-record-upsert.md +1 -1
  75. package/skills/lark-base/references/lark-base-role-guide.md +11 -0
  76. package/skills/lark-base/references/lark-base-view-set-filter.md +14 -138
  77. package/skills/lark-base/references/role-config.md +31 -5
  78. package/skills/lark-calendar/SKILL.md +101 -37
  79. package/skills/lark-calendar/references/lark-calendar-create.md +13 -43
  80. package/skills/lark-calendar/references/lark-calendar-recurring.md +1 -0
  81. package/skills/lark-calendar/references/lark-calendar-room-find.md +7 -10
  82. package/skills/lark-calendar/references/lark-calendar-rsvp.md +1 -5
  83. package/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md +60 -0
  84. package/skills/lark-calendar/references/lark-calendar-schedule-fuzzy-time.md +88 -0
  85. package/skills/lark-calendar/references/lark-calendar-schedule-meeting.md +67 -210
  86. package/skills/lark-calendar/references/lark-calendar-suggestion.md +2 -6
  87. package/skills/lark-calendar/references/lark-calendar-update.md +12 -11
  88. package/skills/lark-contact/SKILL.md +19 -3
  89. package/skills/lark-contact/references/lark-contact-search-bot.md +60 -0
  90. package/skills/lark-doc/SKILL.md +1 -1
  91. package/skills/lark-doc/references/lark-doc-fetch.md +14 -4
  92. package/skills/lark-doc/references/lark-doc-mindnote.md +17 -2
  93. package/skills/lark-doc/references/lark-doc-whiteboard.md +13 -8
  94. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +76 -0
  95. package/skills/lark-doc/references/lark-doc-xml.md +6 -4
  96. package/skills/lark-drive/SKILL.md +35 -43
  97. package/skills/lark-drive/references/lark-drive-add-comment.md +2 -4
  98. package/skills/lark-drive/references/lark-drive-add-reply.md +47 -0
  99. package/skills/lark-drive/references/lark-drive-apply-permission.md +2 -2
  100. package/skills/lark-drive/references/lark-drive-batch-query-comments.md +46 -0
  101. package/skills/lark-drive/references/lark-drive-comment-content.md +50 -0
  102. package/skills/lark-drive/references/lark-drive-comment-location.md +18 -12
  103. package/skills/lark-drive/references/lark-drive-delete-reply.md +48 -0
  104. package/skills/lark-drive/references/lark-drive-delete.md +35 -11
  105. package/skills/lark-drive/references/lark-drive-download.md +5 -1
  106. package/skills/lark-drive/references/lark-drive-export.md +39 -10
  107. package/skills/lark-drive/references/lark-drive-files-list.md +27 -2
  108. package/skills/lark-drive/references/lark-drive-inspect.md +2 -0
  109. package/skills/lark-drive/references/lark-drive-list-comments.md +82 -0
  110. package/skills/lark-drive/references/lark-drive-list-replies.md +54 -0
  111. package/skills/lark-drive/references/lark-drive-member-add.md +3 -3
  112. package/skills/lark-drive/references/lark-drive-member-list.md +65 -0
  113. package/skills/lark-drive/references/lark-drive-move.md +5 -3
  114. package/skills/lark-drive/references/lark-drive-permission-get-setting.md +48 -0
  115. package/skills/lark-drive/references/lark-drive-permission-guide.md +12 -0
  116. package/skills/lark-drive/references/lark-drive-preview.md +11 -1
  117. package/skills/lark-drive/references/lark-drive-pull.md +3 -3
  118. package/skills/lark-drive/references/lark-drive-push.md +33 -6
  119. package/skills/lark-drive/references/lark-drive-react-reply.md +51 -0
  120. package/skills/lark-drive/references/lark-drive-reactions.md +27 -25
  121. package/skills/lark-drive/references/lark-drive-resolve-comment.md +45 -0
  122. package/skills/lark-drive/references/lark-drive-restore-comment.md +46 -0
  123. package/skills/lark-drive/references/lark-drive-search.md +7 -1
  124. package/skills/lark-drive/references/lark-drive-secure-label.md +1 -1
  125. package/skills/lark-drive/references/lark-drive-status.md +12 -14
  126. package/skills/lark-drive/references/lark-drive-task-result.md +58 -5
  127. package/skills/lark-drive/references/lark-drive-update-reply.md +46 -0
  128. package/skills/lark-drive/references/lark-drive-upload.md +1 -0
  129. package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize.md +26 -20
  130. package/skills/lark-drive/references/lark-drive-workflow-permission-governance-commands.md +38 -8
  131. package/skills/lark-drive/references/lark-drive-workflow-permission-governance-outputs.md +10 -10
  132. package/skills/lark-drive/references/lark-drive-workflow-permission-governance.md +22 -20
  133. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-execute.md +273 -0
  134. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-recall.md +202 -0
  135. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-resolve-verify.md +231 -0
  136. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-review-plan.md +248 -0
  137. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-setup.md +174 -0
  138. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector.md +202 -0
  139. package/skills/lark-drive/references/lark-drive-workflow.md +5 -3
  140. package/skills/lark-event/SKILL.md +3 -1
  141. package/skills/lark-event/references/lark-event-application.md +38 -0
  142. package/skills/lark-event/references/lark-event-approval.md +170 -0
  143. package/skills/lark-im/SKILL.md +6 -5
  144. package/skills/lark-im/references/card/card-2.0-schema.md +1 -1
  145. package/skills/lark-im/references/card/lark-im-card-style.md +4 -4
  146. package/skills/lark-im/references/card/resource/icons.md +14 -0
  147. package/skills/lark-im/references/lark-im-flag-list.md +8 -7
  148. package/skills/lark-im/references/lark-im-messages-reply.md +1 -1
  149. package/skills/lark-im/references/lark-im-messages-send.md +1 -1
  150. package/skills/lark-mail/SKILL.md +12 -9
  151. package/skills/lark-mail/references/lark-mail-forward.md +1 -1
  152. package/skills/lark-mail/references/lark-mail-message-modify.md +48 -0
  153. package/skills/lark-mail/references/lark-mail-message-trash.md +41 -0
  154. package/skills/lark-mail/references/lark-mail-reply-all.md +1 -1
  155. package/skills/lark-mail/references/lark-mail-reply.md +1 -1
  156. package/skills/lark-mail/references/lark-mail-watch.md +1 -1
  157. package/skills/lark-markdown/SKILL.md +3 -2
  158. package/skills/lark-markdown/references/lark-markdown-create.md +22 -2
  159. package/skills/lark-minutes/SKILL.md +19 -4
  160. package/skills/lark-minutes/references/lark-minutes-download.md +0 -2
  161. package/skills/lark-minutes/references/lark-minutes-search.md +0 -2
  162. package/skills/lark-minutes/references/lark-minutes-speaker-replace.md +0 -2
  163. package/skills/lark-minutes/references/lark-minutes-summary.md +0 -2
  164. package/skills/lark-minutes/references/lark-minutes-todo.md +2 -4
  165. package/skills/lark-minutes/references/lark-minutes-update.md +0 -2
  166. package/skills/lark-minutes/references/lark-minutes-upload.md +10 -10
  167. package/skills/lark-okr/SKILL.md +71 -26
  168. package/skills/lark-okr/references/lark-okr-batch-create.md +19 -18
  169. package/skills/lark-okr/references/lark-okr-create.md +173 -0
  170. package/skills/lark-okr/references/lark-okr-cycle-list.md +17 -7
  171. package/skills/lark-okr/references/lark-okr-entities.md +1 -0
  172. package/skills/lark-okr/references/lark-okr-indicator-update.md +3 -1
  173. package/skills/lark-okr/references/lark-okr-indicators.md +61 -12
  174. package/skills/lark-okr/references/lark-okr-progress-list.md +21 -9
  175. package/skills/lark-shared/SKILL.md +26 -8
  176. package/skills/lark-sheets/SKILL.md +98 -29
  177. package/skills/lark-sheets/references/lark-sheets-batch-update.md +18 -9
  178. package/skills/lark-sheets/references/lark-sheets-changeset.md +105 -0
  179. package/skills/lark-sheets/references/lark-sheets-chart.md +4 -2
  180. package/skills/lark-sheets/references/lark-sheets-conditional-format.md +2 -0
  181. package/skills/lark-sheets/references/lark-sheets-filter-view.md +1 -1
  182. package/skills/lark-sheets/references/lark-sheets-float-image.md +6 -6
  183. package/skills/lark-sheets/references/lark-sheets-formula-translation.md +12 -3
  184. package/skills/lark-sheets/references/lark-sheets-formula-verify.md +77 -0
  185. package/skills/lark-sheets/references/lark-sheets-history.md +93 -0
  186. package/skills/lark-sheets/references/lark-sheets-pivot-table.md +7 -2
  187. package/skills/lark-sheets/references/lark-sheets-range-operations.md +44 -14
  188. package/skills/lark-sheets/references/lark-sheets-read-data.md +3 -3
  189. package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +4 -4
  190. package/skills/lark-sheets/references/lark-sheets-visual-standards.md +4 -4
  191. package/skills/lark-sheets/references/lark-sheets-workbook.md +29 -4
  192. package/skills/lark-sheets/references/lark-sheets-write-cells.md +21 -11
  193. package/skills/lark-slides/SKILL.md +121 -63
  194. package/skills/lark-slides/references/asset-planning.md +18 -5
  195. package/skills/lark-slides/references/iconpark.md +3 -3
  196. package/skills/lark-slides/references/lark-slides-create.md +30 -3
  197. package/skills/lark-slides/references/lark-slides-history.md +132 -0
  198. package/skills/lark-slides/references/lark-slides-media-upload.md +1 -3
  199. package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +85 -0
  200. package/skills/lark-slides/references/lark-slides-replace-pages.md +1 -1
  201. package/skills/lark-slides/references/lark-slides-replace-slide.md +1 -4
  202. package/skills/lark-slides/references/lark-slides-screenshot.md +11 -8
  203. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +5 -6
  204. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +5 -2
  205. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +5 -5
  206. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +14 -13
  207. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +67 -31
  208. package/skills/lark-slides/references/planning-layer.md +41 -10
  209. package/skills/lark-slides/references/slides_chart_demo.xml +1416 -0
  210. package/skills/lark-slides/references/slides_xml_schema_definition.xml +499 -78
  211. package/skills/lark-slides/references/troubleshooting.md +5 -5
  212. package/skills/lark-slides/references/validation-checklist.md +65 -19
  213. package/skills/lark-slides/references/visual-planning.md +26 -22
  214. package/skills/lark-slides/references/xml-schema-quick-ref.md +285 -45
  215. package/skills/lark-slides/scripts/sxsd_validator.py +908 -0
  216. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +2429 -91
  217. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +3567 -70
  218. package/skills/lark-task/SKILL.md +8 -0
  219. package/skills/lark-task/references/lark-task-complete.md +6 -2
  220. package/skills/lark-task/references/lark-task-create.md +23 -1
  221. package/skills/lark-task/references/lark-task-update.md +6 -2
  222. package/skills/lark-vc/SKILL.md +6 -3
  223. package/skills/lark-vc/references/lark-vc-recording.md +0 -2
  224. package/skills/lark-vc/references/vc-domain-boundaries.md +9 -1
  225. package/skills/lark-vc-agent/SKILL.md +25 -15
  226. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-events.md +65 -37
  227. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-leave.md +1 -1
  228. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-list-active.md +8 -8
  229. package/skills/lark-whiteboard/SKILL.md +13 -12
  230. package/skills/lark-whiteboard/elements/layout.md +1 -1
  231. package/skills/lark-whiteboard/elements/schema.md +2 -2
  232. package/skills/lark-whiteboard/references/{lark-whiteboard-query.md → lark-whiteboard-export.md} +15 -15
  233. package/skills/lark-whiteboard/references/lark-whiteboard-update.md +3 -3
  234. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +12 -19
  235. package/skills/lark-whiteboard/routes/dsl.md +3 -3
  236. package/skills/lark-whiteboard/routes/mermaid.md +2 -2
  237. package/skills/lark-whiteboard/routes/svg-edit.md +4 -4
  238. package/skills/lark-whiteboard/routes/svg.md +11 -6
  239. package/skills/lark-whiteboard/scenes/bar-chart.md +1 -1
  240. package/skills/lark-whiteboard/scenes/fishbone.md +1 -1
  241. package/skills/lark-whiteboard/scenes/flywheel.md +1 -1
  242. package/skills/lark-whiteboard/scenes/line-chart.md +1 -1
  243. package/skills/lark-whiteboard/scenes/treemap.md +1 -1
  244. package/skills/lark-wiki/SKILL.md +8 -3
  245. package/skills/lark-wiki/references/lark-wiki-move-to-drive.md +122 -0
  246. package/skills/lark-wiki/references/lark-wiki-move.md +5 -3
  247. package/skills/lark-wiki/references/lark-wiki-node-get.md +1 -1
  248. package/skills/lark-wiki/references/lark-wiki-node-list.md +9 -2
  249. package/skills/lark-calendar/references/lark-calendar-agenda.md +0 -78
  250. package/skills/lark-calendar/references/lark-calendar-freebusy.md +0 -124
  251. package/skills/lark-calendar/references/lark-calendar-search-event.md +0 -29
  252. package/skills/lark-drive/references/lark-drive-comments-guide.md +0 -72
  253. package/skills/lark-sheets/references/lark-sheets-core-operations.md +0 -103
  254. package/skills/lark-slides/references/examples.md +0 -261
  255. package/skills/lark-slides/references/lark-slides-whiteboard.md +0 -330
  256. package/skills/lark-slides/references/slide-templates.md +0 -201
  257. package/skills/lark-slides/references/slides_demo.xml +0 -226
  258. package/skills/lark-slides/references/xml-format-guide.md +0 -369
@@ -0,0 +1,270 @@
1
+ /* BEGIN USAGE */
2
+ // iOS.jsx — Simplified iOS 26 (Liquid Glass) device frame
3
+ // Based on the iOS 26 UI Kit + Figma status bar spec. No assets, no deps.
4
+ // Exports (to window): IOSDevice, IOSStatusBar, IOSList, IOSListRow, IOSKeyboard
5
+ //
6
+ // Usage — wrap your screen content in <IOSDevice> to get the bezel, status bar
7
+ // and home indicator (props: width=402, height=874, dark, keyboard):
8
+ //
9
+ // <IOSDevice>
10
+ // ...your screen content...
11
+ // </IOSDevice>
12
+ // <IOSDevice dark keyboard>…</IOSDevice>
13
+ // <IOSDevice width={390} height={844}>…</IOSDevice> // smaller device size
14
+ //
15
+ // Safe areas — REQUIRED on every screen. The status bar (top) and home
16
+ // indicator (bottom) float OVER your content; inset it or it overlaps them.
17
+ // --ios-safe-top top inset (Dynamic Island + status bar)
18
+ // --ios-safe-bottom bottom inset (home indicator)
19
+ /* END USAGE */
20
+
21
+ // ─────────────────────────────────────────────────────────────
22
+ // Status bar
23
+ // ─────────────────────────────────────────────────────────────
24
+ function IOSStatusBar({ dark = false, time = '9:41' }) {
25
+ const c = dark ? '#fff' : '#000';
26
+ return (
27
+ <div style={{
28
+ display: 'flex', gap: 154, alignItems: 'center', justifyContent: 'center',
29
+ padding: '21px 24px 19px', boxSizing: 'border-box',
30
+ position: 'relative', zIndex: 20, width: '100%',
31
+ }}>
32
+ <div style={{ flex: 1, height: 22, display: 'flex', alignItems: 'center', justifyContent: 'center', paddingTop: 1.5 }}>
33
+ <span style={{
34
+ fontFamily: '-apple-system, "SF Pro", system-ui', fontWeight: 590,
35
+ fontSize: 17, lineHeight: '22px', color: c,
36
+ }}>{time}</span>
37
+ </div>
38
+ <div style={{ flex: 1, height: 22, display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 7, paddingTop: 1, paddingRight: 1 }}>
39
+ <svg width="19" height="12" viewBox="0 0 19 12">
40
+ <rect x="0" y="7.5" width="3.2" height="4.5" rx="0.7" fill={c}/>
41
+ <rect x="4.8" y="5" width="3.2" height="7" rx="0.7" fill={c}/>
42
+ <rect x="9.6" y="2.5" width="3.2" height="9.5" rx="0.7" fill={c}/>
43
+ <rect x="14.4" y="0" width="3.2" height="12" rx="0.7" fill={c}/>
44
+ </svg>
45
+ <svg width="17" height="12" viewBox="0 0 17 12">
46
+ <path d="M8.5 3.2C10.8 3.2 12.9 4.1 14.4 5.6L15.5 4.5C13.7 2.7 11.2 1.5 8.5 1.5C5.8 1.5 3.3 2.7 1.5 4.5L2.6 5.6C4.1 4.1 6.2 3.2 8.5 3.2Z" fill={c}/>
47
+ <path d="M8.5 6.8C9.9 6.8 11.1 7.3 12 8.2L13.1 7.1C11.8 5.9 10.2 5.1 8.5 5.1C6.8 5.1 5.2 5.9 3.9 7.1L5 8.2C5.9 7.3 7.1 6.8 8.5 6.8Z" fill={c}/>
48
+ <circle cx="8.5" cy="10.5" r="1.5" fill={c}/>
49
+ </svg>
50
+ <svg width="27" height="13" viewBox="0 0 27 13">
51
+ <rect x="0.5" y="0.5" width="23" height="12" rx="3.5" stroke={c} strokeOpacity="0.35" fill="none"/>
52
+ <rect x="2" y="2" width="20" height="9" rx="2" fill={c}/>
53
+ <path d="M25 4.5V8.5C25.8 8.2 26.5 7.2 26.5 6.5C26.5 5.8 25.8 4.8 25 4.5Z" fill={c} fillOpacity="0.4"/>
54
+ </svg>
55
+ </div>
56
+ </div>
57
+ );
58
+ }
59
+
60
+ // ─────────────────────────────────────────────────────────────
61
+ // Grouped list (inset card, r:26) + row (52px)
62
+ // ─────────────────────────────────────────────────────────────
63
+ function IOSListRow({ title, detail, icon, chevron = true, isLast = false, dark = false }) {
64
+ const text = dark ? '#fff' : '#000';
65
+ const sec = dark ? 'rgba(235,235,245,0.6)' : 'rgba(60,60,67,0.6)';
66
+ const ter = dark ? 'rgba(235,235,245,0.3)' : 'rgba(60,60,67,0.3)';
67
+ const sep = dark ? 'rgba(84,84,88,0.65)' : 'rgba(60,60,67,0.12)';
68
+ return (
69
+ <div style={{
70
+ display: 'flex', alignItems: 'center', minHeight: 52,
71
+ padding: '0 16px', position: 'relative',
72
+ fontFamily: '-apple-system, system-ui', fontSize: 17,
73
+ letterSpacing: -0.43,
74
+ }}>
75
+ {icon && (
76
+ <div style={{
77
+ width: 30, height: 30, borderRadius: 7, background: icon,
78
+ marginRight: 12, flexShrink: 0,
79
+ }} />
80
+ )}
81
+ <div style={{ flex: 1, color: text }}>{title}</div>
82
+ {detail && <span style={{ color: sec, marginRight: 6 }}>{detail}</span>}
83
+ {chevron && (
84
+ <svg width="8" height="14" viewBox="0 0 8 14" style={{ flexShrink: 0 }}>
85
+ <path d="M1 1l6 6-6 6" stroke={ter} strokeWidth="2" fill="none" strokeLinecap="round" strokeLinejoin="round"/>
86
+ </svg>
87
+ )}
88
+ {!isLast && (
89
+ <div style={{
90
+ position: 'absolute', bottom: 0, right: 0,
91
+ left: icon ? 58 : 16, height: 0.5, background: sep,
92
+ }} />
93
+ )}
94
+ </div>
95
+ );
96
+ }
97
+
98
+ function IOSList({ header, children, dark = false }) {
99
+ const hc = dark ? 'rgba(235,235,245,0.6)' : 'rgba(60,60,67,0.6)';
100
+ const bg = dark ? '#1C1C1E' : '#fff';
101
+ return (
102
+ <div>
103
+ {header && (
104
+ <div style={{
105
+ fontFamily: '-apple-system, system-ui', fontSize: 13,
106
+ color: hc, textTransform: 'uppercase',
107
+ padding: '8px 36px 6px', letterSpacing: -0.08,
108
+ }}>{header}</div>
109
+ )}
110
+ <div style={{
111
+ background: bg, borderRadius: 26,
112
+ margin: '0 16px', overflow: 'hidden',
113
+ }}>{children}</div>
114
+ </div>
115
+ );
116
+ }
117
+
118
+ // ─────────────────────────────────────────────────────────────
119
+ // Device frame
120
+ // ─────────────────────────────────────────────────────────────
121
+ function IOSDevice({
122
+ children, width = 402, height = 874, dark = false,
123
+ keyboard = false,
124
+ }) {
125
+ return (
126
+ <div style={{
127
+ width, height, borderRadius: 48, overflow: 'hidden',
128
+ position: 'relative', background: dark ? '#000' : '#F2F2F7',
129
+ border: '1px solid #DEE0E3',
130
+ fontFamily: '-apple-system, system-ui, sans-serif',
131
+ WebkitFontSmoothing: 'antialiased',
132
+ '--ios-safe-top': '62px',
133
+ '--ios-safe-bottom': '34px',
134
+ }}>
135
+ {/* dynamic island */}
136
+ <div style={{
137
+ position: 'absolute', top: 11, left: '50%', transform: 'translateX(-50%)',
138
+ width: 126, height: 37, borderRadius: 24, background: '#000', zIndex: 50,
139
+ }} />
140
+ {/* status bar (absolute) */}
141
+ <div style={{ position: 'absolute', top: 0, left: 0, right: 0, zIndex: 10 }}>
142
+ <IOSStatusBar dark={dark} />
143
+ </div>
144
+ {/* content */}
145
+ <div style={{ height: '100%', display: 'flex', flexDirection: 'column' }}>
146
+ <div style={{ flex: 1, overflow: 'auto' }}>{children}</div>
147
+ {keyboard && <IOSKeyboard dark={dark} />}
148
+ </div>
149
+ {/* home indicator — always on top */}
150
+ <div style={{
151
+ position: 'absolute', bottom: 0, left: 0, right: 0, zIndex: 60,
152
+ height: 34, display: 'flex', justifyContent: 'center', alignItems: 'flex-end',
153
+ paddingBottom: 8, pointerEvents: 'none',
154
+ }}>
155
+ <div style={{
156
+ width: 139, height: 5, borderRadius: 100,
157
+ background: dark ? 'rgba(255,255,255,0.7)' : 'rgba(0,0,0,0.25)',
158
+ }} />
159
+ </div>
160
+ </div>
161
+ );
162
+ }
163
+
164
+ // ─────────────────────────────────────────────────────────────
165
+ // Keyboard — iOS 26 liquid glass
166
+ // ─────────────────────────────────────────────────────────────
167
+ function IOSKeyboard({ dark = false }) {
168
+ const glyph = dark ? 'rgba(255,255,255,0.7)' : '#595959';
169
+ const sugg = dark ? 'rgba(255,255,255,0.6)' : '#333';
170
+ const keyBg = dark ? 'rgba(255,255,255,0.22)' : 'rgba(255,255,255,0.85)';
171
+
172
+ // special-key icons
173
+ const icons = {
174
+ shift: <svg width="19" height="17" viewBox="0 0 19 17"><path d="M9.5 1L1 9.5h4.5V16h8V9.5H18L9.5 1z" fill={glyph}/></svg>,
175
+ del: <svg width="23" height="17" viewBox="0 0 23 17"><path d="M7 1h13a2 2 0 012 2v11a2 2 0 01-2 2H7l-6-7.5L7 1z" fill="none" stroke={glyph} strokeWidth="1.6" strokeLinejoin="round"/><path d="M10 5l7 7M17 5l-7 7" stroke={glyph} strokeWidth="1.6" strokeLinecap="round"/></svg>,
176
+ ret: <svg width="20" height="14" viewBox="0 0 20 14"><path d="M18 1v6H4m0 0l4-4M4 7l4 4" fill="none" stroke="#fff" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/></svg>,
177
+ };
178
+
179
+ const key = (content, { w, flex, ret, fs = 25, k } = {}) => (
180
+ <div key={k} style={{
181
+ height: 42, borderRadius: 8.5,
182
+ flex: flex ? 1 : undefined, width: w, minWidth: 0,
183
+ background: ret ? '#08f' : keyBg,
184
+ boxShadow: '0 1px 0 rgba(0,0,0,0.075)',
185
+ display: 'flex', alignItems: 'center', justifyContent: 'center',
186
+ fontFamily: '-apple-system, "SF Compact", system-ui',
187
+ fontSize: fs, fontWeight: 458, color: ret ? '#fff' : glyph,
188
+ }}>{content}</div>
189
+ );
190
+
191
+ const row = (keys, pad = 0) => (
192
+ <div style={{ display: 'flex', gap: 6.5, justifyContent: 'center', padding: `0 ${pad}px` }}>
193
+ {keys.map(l => key(l, { flex: true, k: l }))}
194
+ </div>
195
+ );
196
+
197
+ return (
198
+ <div style={{
199
+ position: 'relative', zIndex: 15, borderRadius: 27, overflow: 'hidden',
200
+ padding: '11px 0 2px',
201
+ display: 'flex', flexDirection: 'column', alignItems: 'center',
202
+ boxShadow: dark
203
+ ? '0 -2px 20px rgba(0,0,0,0.09)'
204
+ : '0 -1px 6px rgba(0,0,0,0.018), 0 -3px 20px rgba(0,0,0,0.012)',
205
+ }}>
206
+ {/* liquid glass bg — same recipe as nav pills */}
207
+ <div style={{
208
+ position: 'absolute', inset: 0, borderRadius: 27,
209
+ backdropFilter: 'blur(12px) saturate(180%)',
210
+ WebkitBackdropFilter: 'blur(12px) saturate(180%)',
211
+ background: dark ? 'rgba(120,120,128,0.14)' : 'rgba(255,255,255,0.25)',
212
+ }} />
213
+ <div style={{
214
+ position: 'absolute', inset: 0, borderRadius: 27,
215
+ boxShadow: dark
216
+ ? 'inset 1.5px 1.5px 1px rgba(255,255,255,0.15)'
217
+ : 'inset 1.5px 1.5px 1px rgba(255,255,255,0.7), inset -1px -1px 1px rgba(255,255,255,0.4)',
218
+ border: dark ? '0.5px solid rgba(255,255,255,0.15)' : '0.5px solid rgba(0,0,0,0.06)',
219
+ pointerEvents: 'none',
220
+ }} />
221
+
222
+ {/* autocorrect bar */}
223
+ <div style={{
224
+ display: 'flex', gap: 20, alignItems: 'center',
225
+ padding: '8px 22px 13px', width: '100%', boxSizing: 'border-box',
226
+ position: 'relative',
227
+ }}>
228
+ {['"The"', 'the', 'to'].map((w, i) => (
229
+ <React.Fragment key={i}>
230
+ {i > 0 && <div style={{ width: 1, height: 25, background: '#ccc', opacity: 0.3 }} />}
231
+ <div style={{
232
+ flex: 1, textAlign: 'center',
233
+ fontFamily: '-apple-system, system-ui', fontSize: 17,
234
+ color: sugg, letterSpacing: -0.43, lineHeight: '22px',
235
+ }}>{w}</div>
236
+ </React.Fragment>
237
+ ))}
238
+ </div>
239
+
240
+ {/* key layout */}
241
+ <div style={{
242
+ display: 'flex', flexDirection: 'column', gap: 13,
243
+ padding: '0 6.5px', width: '100%', boxSizing: 'border-box',
244
+ position: 'relative',
245
+ }}>
246
+ {row(['q','w','e','r','t','y','u','i','o','p'])}
247
+ {row(['a','s','d','f','g','h','j','k','l'], 20)}
248
+ <div style={{ display: 'flex', gap: 14.25, alignItems: 'center' }}>
249
+ {key(icons.shift, { w: 45, k: 'shift' })}
250
+ <div style={{ display: 'flex', gap: 6.5, flex: 1 }}>
251
+ {['z','x','c','v','b','n','m'].map(l => key(l, { flex: true, k: l }))}
252
+ </div>
253
+ {key(icons.del, { w: 45, k: 'del' })}
254
+ </div>
255
+ <div style={{ display: 'flex', gap: 6, alignItems: 'center' }}>
256
+ {key('ABC', { w: 92.25, fs: 18, k: 'abc' })}
257
+ {key('', { flex: true, k: 'space' })}
258
+ {key(icons.ret, { w: 92.25, ret: true, k: 'ret' })}
259
+ </div>
260
+ </div>
261
+
262
+ {/* bottom spacer (emoji+mic area, icons omitted) */}
263
+ <div style={{ height: 56, width: '100%', position: 'relative' }} />
264
+ </div>
265
+ );
266
+ }
267
+
268
+ Object.assign(window, {
269
+ IOSDevice, IOSStatusBar, IOSList, IOSListRow, IOSKeyboard,
270
+ });
@@ -0,0 +1,197 @@
1
+ /* BEGIN USAGE */
2
+ // MacOS.jsx — Simplified macOS Tahoe (Liquid Glass) window
3
+ // Based on the macOS Tahoe UI Kit. No image assets, no dependencies.
4
+ // Exports (to window): MacWindow, MacSidebar, MacSidebarItem, MacSidebarHeader, MacToolbar, MacGlass, MacTrafficLights
5
+ //
6
+ // Usage — wrap your app content in <MacWindow> to get the window chrome
7
+ // (traffic lights + titlebar). Props: width, height, title, sidebar (pass a
8
+ // <MacSidebar> element); compose MacToolbar/MacGlass inside as needed:
9
+ //
10
+ // <MacWindow width={980} height={620} title="Documents"
11
+ // sidebar={<MacSidebar>…</MacSidebar>}>
12
+ // ...your app content...
13
+ // </MacWindow>
14
+ /* END USAGE */
15
+
16
+ const MAC_FONT = '-apple-system, BlinkMacSystemFont, "SF Pro", "Helvetica Neue", sans-serif';
17
+
18
+ // ─────────────────────────────────────────────────────────────
19
+ // Liquid glass primitive — blur + white tint + inset highlight
20
+ // ─────────────────────────────────────────────────────────────
21
+ function MacGlass({ children, radius = 296, dark = false, style = {} }) {
22
+ return (
23
+ <div style={{ position: 'relative', borderRadius: radius, ...style }}>
24
+ <div style={{
25
+ position: 'absolute', inset: 0, borderRadius: radius,
26
+ background: dark ? 'rgba(255,255,255,0.08)' : 'rgba(255,255,255,0.35)',
27
+ backdropFilter: 'blur(40px) saturate(180%)',
28
+ WebkitBackdropFilter: 'blur(40px) saturate(180%)',
29
+ border: dark ? '0.5px solid rgba(255,255,255,0.12)' : '0.5px solid rgba(255,255,255,0.6)',
30
+ boxShadow: dark
31
+ ? '0 8px 40px rgba(0,0,0,0.2)'
32
+ : '0 8px 40px rgba(0,0,0,0.08), inset 0 1px 0 rgba(255,255,255,0.4)',
33
+ }} />
34
+ <div style={{ position: 'relative', zIndex: 1 }}>{children}</div>
35
+ </div>
36
+ );
37
+ }
38
+
39
+ // ─────────────────────────────────────────────────────────────
40
+ // Traffic lights (14px, Tahoe colors)
41
+ // ─────────────────────────────────────────────────────────────
42
+ function MacTrafficLights({ style = {} }) {
43
+ const dot = (bg) => (
44
+ <div style={{
45
+ width: 14, height: 14, borderRadius: '50%', background: bg,
46
+ border: '0.5px solid rgba(0,0,0,0.1)',
47
+ }} />
48
+ );
49
+ return (
50
+ <div style={{ display: 'flex', gap: 9, alignItems: 'center', padding: 1, ...style }}>
51
+ {dot('#ff736a')}{dot('#febc2e')}{dot('#19c332')}
52
+ </div>
53
+ );
54
+ }
55
+
56
+ // ─────────────────────────────────────────────────────────────
57
+ // Toolbar — title + single glass pill icon
58
+ // ─────────────────────────────────────────────────────────────
59
+ function MacToolbar({ title = 'Folder' }) {
60
+ return (
61
+ <div style={{
62
+ display: 'flex', gap: 8, alignItems: 'center', padding: 8, flexShrink: 0,
63
+ }}>
64
+ {/* title */}
65
+ <div style={{
66
+ fontFamily: MAC_FONT, fontSize: 15, fontWeight: 700,
67
+ color: 'rgba(0,0,0,0.85)', whiteSpace: 'nowrap', paddingLeft: 8,
68
+ }}>{title}</div>
69
+ <div style={{ flex: 1 }} />
70
+ {/* single action */}
71
+ <MacGlass>
72
+ <div style={{
73
+ width: 36, height: 36, display: 'flex',
74
+ alignItems: 'center', justifyContent: 'center',
75
+ }}>
76
+ <div style={{ width: 14, height: 14, borderRadius: '50%', background: '#4c4c4c', opacity: 0.4 }} />
77
+ </div>
78
+ </MacGlass>
79
+ {/* search */}
80
+ <MacGlass>
81
+ <div style={{
82
+ width: 140, height: 36, display: 'flex', alignItems: 'center',
83
+ gap: 6, padding: '0 12px',
84
+ }}>
85
+ <svg width="13" height="13" viewBox="0 0 13 13" fill="none">
86
+ <circle cx="5.5" cy="5.5" r="4" stroke="#727272" strokeWidth="1.5"/>
87
+ <path d="M8.5 8.5l3 3" stroke="#727272" strokeWidth="1.5" strokeLinecap="round"/>
88
+ </svg>
89
+ <span style={{
90
+ fontFamily: MAC_FONT, fontSize: 13, fontWeight: 500, color: '#727272',
91
+ }}>Search</span>
92
+ </div>
93
+ </MacGlass>
94
+ </div>
95
+ );
96
+ }
97
+
98
+ // ─────────────────────────────────────────────────────────────
99
+ // Sidebar — frosted glass panel floating inside the window
100
+ // ─────────────────────────────────────────────────────────────
101
+ function MacSidebarItem({ label, selected = false }) {
102
+ return (
103
+ <div style={{
104
+ display: 'flex', alignItems: 'center', gap: 6,
105
+ height: 24, padding: '4px 10px 4px 6px', margin: '0 10px',
106
+ borderRadius: 8, position: 'relative',
107
+ fontFamily: MAC_FONT, fontSize: 11, fontWeight: 500,
108
+ }}>
109
+ {selected && (
110
+ <div style={{
111
+ position: 'absolute', inset: 0, borderRadius: 8,
112
+ background: 'rgba(0,0,0,0.11)', mixBlendMode: 'multiply',
113
+ }} />
114
+ )}
115
+ <div style={{
116
+ width: 14, height: 14, borderRadius: '50%',
117
+ background: selected ? '#007aff' : 'rgba(0,0,0,0.4)',
118
+ opacity: selected ? 1 : 0.5, flexShrink: 0, position: 'relative',
119
+ }} />
120
+ <span style={{ color: 'rgba(0,0,0,0.85)', position: 'relative' }}>{label}</span>
121
+ </div>
122
+ );
123
+ }
124
+
125
+ function MacSidebar({ children }) {
126
+ return (
127
+ <div style={{
128
+ width: 220, height: '100%', padding: 8, flexShrink: 0,
129
+ position: 'relative', display: 'flex', flexDirection: 'column',
130
+ }}>
131
+ {/* glass panel */}
132
+ <div style={{
133
+ position: 'absolute', inset: 8, borderRadius: 18,
134
+ background: 'rgba(210,225,245,0.45)',
135
+ backdropFilter: 'blur(50px) saturate(200%)',
136
+ WebkitBackdropFilter: 'blur(50px) saturate(200%)',
137
+ border: '0.5px solid rgba(255,255,255,0.5)',
138
+ boxShadow: '0 8px 40px rgba(0,0,0,0.10), inset 0 1px 0 rgba(255,255,255,0.35)',
139
+ }} />
140
+ {/* content */}
141
+ <div style={{
142
+ position: 'relative', zIndex: 1, padding: '10px 0',
143
+ display: 'flex', flexDirection: 'column', gap: 2,
144
+ }}>
145
+ {/* window controls + sidebar toggle */}
146
+ <div style={{
147
+ height: 32, display: 'flex', alignItems: 'center',
148
+ justifyContent: 'space-between', padding: '0 10px', marginBottom: 4,
149
+ }}>
150
+ <MacTrafficLights />
151
+ </div>
152
+ {children}
153
+ </div>
154
+ </div>
155
+ );
156
+ }
157
+
158
+ function MacSidebarHeader({ title }) {
159
+ return (
160
+ <div style={{
161
+ padding: '14px 18px 5px',
162
+ fontFamily: MAC_FONT, fontSize: 11, fontWeight: 700,
163
+ color: 'rgba(0,0,0,0.5)',
164
+ }}>{title}</div>
165
+ );
166
+ }
167
+
168
+ // ─────────────────────────────────────────────────────────────
169
+ // Window — r:26, big shadow, sidebar + toolbar + content
170
+ // ─────────────────────────────────────────────────────────────
171
+ function MacWindow({
172
+ width = 900, height = 600, title = 'Folder',
173
+ sidebar, children,
174
+ }) {
175
+ return (
176
+ <div style={{
177
+ width, height, borderRadius: 26, overflow: 'hidden',
178
+ background: '#fff',
179
+ border: '1px solid #DEE0E3',
180
+ display: 'flex', position: 'relative',
181
+ fontFamily: MAC_FONT,
182
+ }}>
183
+ <MacSidebar>{sidebar}</MacSidebar>
184
+ <div style={{ flex: 1, display: 'flex', flexDirection: 'column' }}>
185
+ <MacToolbar title={title} />
186
+ <div style={{ flex: 1, overflow: 'auto', padding: '4px 8px' }}>
187
+ {children}
188
+ </div>
189
+ </div>
190
+ </div>
191
+ );
192
+ }
193
+
194
+ Object.assign(window, {
195
+ MacWindow, MacSidebar, MacSidebarItem, MacSidebarHeader,
196
+ MacToolbar, MacGlass, MacTrafficLights,
197
+ });