@blocklet/ui-react 3.4.14 → 3.5.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 (256) hide show
  1. package/lib/common/org-switch/use-org.d.ts +4 -4
  2. package/lib/common/ws.d.ts +22 -1
  3. package/package.json +10 -7
  4. package/.aigne/doc-smith/.local/afs-storage.sqlite3 +0 -0
  5. package/.aigne/doc-smith/config.yaml +0 -78
  6. package/.aigne/doc-smith/history.yaml +0 -14
  7. package/.aigne/doc-smith/media-description.yaml +0 -11
  8. package/.aigne/doc-smith/output/structure-plan.json +0 -255
  9. package/.aigne/doc-smith/translation-cache.yaml +0 -11
  10. package/.aigne/doc-smith/upload-cache.yaml +0 -528
  11. package/build.config.ts +0 -24
  12. package/docs/_sidebar.md +0 -19
  13. package/docs/assets/diagram/component-installer-diagram-0.ja.jpg +0 -0
  14. package/docs/assets/diagram/component-installer-diagram-0.jpg +0 -0
  15. package/docs/assets/diagram/component-installer-diagram-0.zh-TW.jpg +0 -0
  16. package/docs/assets/diagram/component-installer-diagram-0.zh.jpg +0 -0
  17. package/docs/assets/diagram/component-management-diagram-0.ja.jpg +0 -0
  18. package/docs/assets/diagram/component-management-diagram-0.jpg +0 -0
  19. package/docs/assets/diagram/component-management-diagram-0.zh-TW.jpg +0 -0
  20. package/docs/assets/diagram/component-management-diagram-0.zh.jpg +0 -0
  21. package/docs/assets/diagram/core-concepts-diagram-0.ja.jpg +0 -0
  22. package/docs/assets/diagram/core-concepts-diagram-0.jpg +0 -0
  23. package/docs/assets/diagram/core-concepts-diagram-0.zh-TW.jpg +0 -0
  24. package/docs/assets/diagram/core-concepts-diagram-0.zh.jpg +0 -0
  25. package/docs/assets/diagram/dashboard-diagram-0.ja.jpg +0 -0
  26. package/docs/assets/diagram/dashboard-diagram-0.jpg +0 -0
  27. package/docs/assets/diagram/dashboard-diagram-0.zh-TW.jpg +0 -0
  28. package/docs/assets/diagram/dashboard-diagram-0.zh.jpg +0 -0
  29. package/docs/assets/diagram/header-diagram-0.ja.jpg +0 -0
  30. package/docs/assets/diagram/header-diagram-0.jpg +0 -0
  31. package/docs/assets/diagram/header-diagram-0.zh-TW.jpg +0 -0
  32. package/docs/assets/diagram/header-diagram-0.zh.jpg +0 -0
  33. package/docs/assets/diagram/layout-diagram-0.ja.jpg +0 -0
  34. package/docs/assets/diagram/layout-diagram-0.jpg +0 -0
  35. package/docs/assets/diagram/layout-diagram-0.zh-TW.jpg +0 -0
  36. package/docs/assets/diagram/layout-diagram-0.zh.jpg +0 -0
  37. package/docs/assets/diagram/notifications-diagram-0.ja.jpg +0 -0
  38. package/docs/assets/diagram/notifications-diagram-0.jpg +0 -0
  39. package/docs/assets/diagram/notifications-diagram-0.zh-TW.jpg +0 -0
  40. package/docs/assets/diagram/notifications-diagram-0.zh.jpg +0 -0
  41. package/docs/assets/diagram/overview-diagram-0.ja.jpg +0 -0
  42. package/docs/assets/diagram/overview-diagram-0.jpg +0 -0
  43. package/docs/assets/diagram/overview-diagram-0.zh-TW.jpg +0 -0
  44. package/docs/assets/diagram/overview-diagram-0.zh.jpg +0 -0
  45. package/docs/assets/diagram/user-center-diagram-0.ja.jpg +0 -0
  46. package/docs/assets/diagram/user-center-diagram-0.jpg +0 -0
  47. package/docs/assets/diagram/user-center-diagram-0.zh-TW.jpg +0 -0
  48. package/docs/assets/diagram/user-center-diagram-0.zh.jpg +0 -0
  49. package/docs/assets/diagram/user-management-diagram-0.ja.jpg +0 -0
  50. package/docs/assets/diagram/user-management-diagram-0.jpg +0 -0
  51. package/docs/assets/diagram/user-management-diagram-0.zh-TW.jpg +0 -0
  52. package/docs/assets/diagram/user-management-diagram-0.zh.jpg +0 -0
  53. package/docs/assets/diagram/user-sessions-diagram-0.ja.jpg +0 -0
  54. package/docs/assets/diagram/user-sessions-diagram-0.jpg +0 -0
  55. package/docs/assets/diagram/user-sessions-diagram-0.zh-TW.jpg +0 -0
  56. package/docs/assets/diagram/user-sessions-diagram-0.zh.jpg +0 -0
  57. package/docs/components-component-management-blocklet-studio.ja.md +0 -194
  58. package/docs/components-component-management-blocklet-studio.md +0 -194
  59. package/docs/components-component-management-blocklet-studio.zh-TW.md +0 -194
  60. package/docs/components-component-management-blocklet-studio.zh.md +0 -194
  61. package/docs/components-component-management-component-installer.ja.md +0 -182
  62. package/docs/components-component-management-component-installer.md +0 -182
  63. package/docs/components-component-management-component-installer.zh-TW.md +0 -182
  64. package/docs/components-component-management-component-installer.zh.md +0 -182
  65. package/docs/components-component-management.ja.md +0 -30
  66. package/docs/components-component-management.md +0 -30
  67. package/docs/components-component-management.zh-TW.md +0 -30
  68. package/docs/components-component-management.zh.md +0 -30
  69. package/docs/components-layout-dashboard.ja.md +0 -185
  70. package/docs/components-layout-dashboard.md +0 -187
  71. package/docs/components-layout-dashboard.zh-TW.md +0 -185
  72. package/docs/components-layout-dashboard.zh.md +0 -185
  73. package/docs/components-layout-footer.ja.md +0 -165
  74. package/docs/components-layout-footer.md +0 -165
  75. package/docs/components-layout-footer.zh-TW.md +0 -165
  76. package/docs/components-layout-footer.zh.md +0 -165
  77. package/docs/components-layout-header.ja.md +0 -183
  78. package/docs/components-layout-header.md +0 -183
  79. package/docs/components-layout-header.zh-TW.md +0 -183
  80. package/docs/components-layout-header.zh.md +0 -183
  81. package/docs/components-layout.ja.md +0 -31
  82. package/docs/components-layout.md +0 -31
  83. package/docs/components-layout.zh-TW.md +0 -31
  84. package/docs/components-layout.zh.md +0 -31
  85. package/docs/components-notifications.ja.md +0 -125
  86. package/docs/components-notifications.md +0 -125
  87. package/docs/components-notifications.zh-TW.md +0 -125
  88. package/docs/components-notifications.zh.md +0 -125
  89. package/docs/components-user-management-user-center.ja.md +0 -148
  90. package/docs/components-user-management-user-center.md +0 -147
  91. package/docs/components-user-management-user-center.zh-TW.md +0 -148
  92. package/docs/components-user-management-user-center.zh.md +0 -148
  93. package/docs/components-user-management-user-sessions.ja.md +0 -121
  94. package/docs/components-user-management-user-sessions.md +0 -123
  95. package/docs/components-user-management-user-sessions.zh-TW.md +0 -121
  96. package/docs/components-user-management-user-sessions.zh.md +0 -121
  97. package/docs/components-user-management.ja.md +0 -49
  98. package/docs/components-user-management.md +0 -51
  99. package/docs/components-user-management.zh-TW.md +0 -49
  100. package/docs/components-user-management.zh.md +0 -49
  101. package/docs/components-utilities-icon.ja.md +0 -106
  102. package/docs/components-utilities-icon.md +0 -106
  103. package/docs/components-utilities-icon.zh-TW.md +0 -106
  104. package/docs/components-utilities-icon.zh.md +0 -106
  105. package/docs/components-utilities.ja.md +0 -136
  106. package/docs/components-utilities.md +0 -136
  107. package/docs/components-utilities.zh-TW.md +0 -136
  108. package/docs/components-utilities.zh.md +0 -136
  109. package/docs/components.ja.md +0 -27
  110. package/docs/components.md +0 -27
  111. package/docs/components.zh-TW.md +0 -27
  112. package/docs/components.zh.md +0 -27
  113. package/docs/core-concepts.ja.md +0 -134
  114. package/docs/core-concepts.md +0 -135
  115. package/docs/core-concepts.zh-TW.md +0 -134
  116. package/docs/core-concepts.zh.md +0 -134
  117. package/docs/getting-started.ja.md +0 -132
  118. package/docs/getting-started.md +0 -132
  119. package/docs/getting-started.zh-TW.md +0 -132
  120. package/docs/getting-started.zh.md +0 -132
  121. package/docs/hooks-api.ja.md +0 -214
  122. package/docs/hooks-api.md +0 -214
  123. package/docs/hooks-api.zh-TW.md +0 -214
  124. package/docs/hooks-api.zh.md +0 -214
  125. package/docs/how-to-guides.ja.md +0 -413
  126. package/docs/how-to-guides.md +0 -413
  127. package/docs/how-to-guides.zh-TW.md +0 -413
  128. package/docs/how-to-guides.zh.md +0 -413
  129. package/docs/overview.ja.md +0 -51
  130. package/docs/overview.md +0 -51
  131. package/docs/overview.zh-TW.md +0 -51
  132. package/docs/overview.zh.md +0 -51
  133. package/glossary.md +0 -12
  134. package/src/@types/index.ts +0 -230
  135. package/src/@types/shims.d.ts +0 -18
  136. package/src/BlockletStudio/README.md +0 -116
  137. package/src/BlockletStudio/index.tsx +0 -145
  138. package/src/ComponentInstaller/ComponentInstaller.stories.jsx +0 -16
  139. package/src/ComponentInstaller/index.jsx +0 -207
  140. package/src/ComponentInstaller/installer-item.jsx +0 -129
  141. package/src/ComponentInstaller/locales.js +0 -22
  142. package/src/ComponentInstaller/use-component-installed.js +0 -88
  143. package/src/ComponentManager/components/add-component.tsx +0 -136
  144. package/src/ComponentManager/components/check-component.tsx +0 -3
  145. package/src/ComponentManager/components/publish-component.tsx +0 -90
  146. package/src/ComponentManager/components/resource-dialog.tsx +0 -91
  147. package/src/ComponentManager/index.tsx +0 -3
  148. package/src/ComponentManager/libs/locales.ts +0 -15
  149. package/src/Dashboard/Dashboard.stories.jsx +0 -20
  150. package/src/Dashboard/app-shell/app-badge.stories.tsx +0 -64
  151. package/src/Dashboard/app-shell/app-badge.tsx +0 -94
  152. package/src/Dashboard/app-shell/app-header.tsx +0 -104
  153. package/src/Dashboard/app-shell/app-info-context.tsx +0 -182
  154. package/src/Dashboard/app-shell/badges/app-badge-default.tsx +0 -130
  155. package/src/Dashboard/app-shell/badges/app-badge-did.tsx +0 -28
  156. package/src/Dashboard/app-shell/badges/app-badge-state.tsx +0 -40
  157. package/src/Dashboard/app-shell/badges/app-badge-switch.tsx +0 -72
  158. package/src/Dashboard/app-shell/badges/app-badge-version.tsx +0 -60
  159. package/src/Dashboard/app-shell/index.ts +0 -5
  160. package/src/Dashboard/index.jsx +0 -184
  161. package/src/Footer/Footer.stories.jsx +0 -33
  162. package/src/Footer/brand.jsx +0 -81
  163. package/src/Footer/copyright.jsx +0 -22
  164. package/src/Footer/index.jsx +0 -111
  165. package/src/Footer/internal-footer.jsx +0 -139
  166. package/src/Footer/layout/plain.jsx +0 -55
  167. package/src/Footer/layout/row.jsx +0 -43
  168. package/src/Footer/layout/standard.jsx +0 -114
  169. package/src/Footer/links.jsx +0 -321
  170. package/src/Footer/social-media.jsx +0 -55
  171. package/src/Header/Header.stories.jsx +0 -30
  172. package/src/Header/index.tsx +0 -259
  173. package/src/Icon/Icon.stories.jsx +0 -12
  174. package/src/Icon/index.tsx +0 -87
  175. package/src/Notifications/Snackbar.tsx +0 -261
  176. package/src/Notifications/hooks/use-title.tsx +0 -254
  177. package/src/Notifications/hooks/use-width.tsx +0 -16
  178. package/src/Notifications/utils.ts +0 -246
  179. package/src/UserCenter/assets/banner.png +0 -0
  180. package/src/UserCenter/components/config-inviter.tsx +0 -48
  181. package/src/UserCenter/components/config-profile.tsx +0 -99
  182. package/src/UserCenter/components/danger-zone.tsx +0 -82
  183. package/src/UserCenter/components/editable-field.tsx +0 -273
  184. package/src/UserCenter/components/fallback.tsx +0 -57
  185. package/src/UserCenter/components/nft-preview.tsx +0 -84
  186. package/src/UserCenter/components/nft.tsx +0 -279
  187. package/src/UserCenter/components/notification.tsx +0 -319
  188. package/src/UserCenter/components/passport.tsx +0 -107
  189. package/src/UserCenter/components/privacy.tsx +0 -120
  190. package/src/UserCenter/components/settings.tsx +0 -170
  191. package/src/UserCenter/components/status-dialog/date-picker.tsx +0 -77
  192. package/src/UserCenter/components/status-dialog/index.tsx +0 -293
  193. package/src/UserCenter/components/status-selector/duration-menu.tsx +0 -90
  194. package/src/UserCenter/components/status-selector/index.tsx +0 -58
  195. package/src/UserCenter/components/status-selector/menu-item.tsx +0 -56
  196. package/src/UserCenter/components/storage/action.tsx +0 -49
  197. package/src/UserCenter/components/storage/connected.tsx +0 -61
  198. package/src/UserCenter/components/storage/delete.tsx +0 -72
  199. package/src/UserCenter/components/storage/disconnect.tsx +0 -40
  200. package/src/UserCenter/components/storage/icons/empty-spaces-nft.svg +0 -1
  201. package/src/UserCenter/components/storage/icons/long-arrow.svg +0 -5
  202. package/src/UserCenter/components/storage/icons/space-connected.svg +0 -3
  203. package/src/UserCenter/components/storage/icons/space-disconnect.svg +0 -3
  204. package/src/UserCenter/components/storage/index.tsx +0 -41
  205. package/src/UserCenter/components/storage/preview-nft.tsx +0 -72
  206. package/src/UserCenter/components/third-party-login/index.tsx +0 -199
  207. package/src/UserCenter/components/third-party-login/third-party-item.tsx +0 -296
  208. package/src/UserCenter/components/user-center.tsx +0 -787
  209. package/src/UserCenter/components/user-info/address.tsx +0 -143
  210. package/src/UserCenter/components/user-info/index.tsx +0 -4
  211. package/src/UserCenter/components/user-info/link-preview-input.tsx +0 -274
  212. package/src/UserCenter/components/user-info/metadata.tsx +0 -658
  213. package/src/UserCenter/components/user-info/social-actions/chat.tsx +0 -43
  214. package/src/UserCenter/components/user-info/social-actions/follow.tsx +0 -23
  215. package/src/UserCenter/components/user-info/social-actions/index.tsx +0 -17
  216. package/src/UserCenter/components/user-info/switch-role.tsx +0 -42
  217. package/src/UserCenter/components/user-info/timezone-select.tsx +0 -119
  218. package/src/UserCenter/components/user-info/user-basic-info.tsx +0 -292
  219. package/src/UserCenter/components/user-info/user-info-item.tsx +0 -54
  220. package/src/UserCenter/components/user-info/user-info.tsx +0 -91
  221. package/src/UserCenter/components/user-info/user-status.tsx +0 -234
  222. package/src/UserCenter/components/user-info/utils.ts +0 -320
  223. package/src/UserCenter/components/webhook-item.tsx +0 -248
  224. package/src/UserCenter/index.tsx +0 -1
  225. package/src/UserCenter/libs/locales.ts +0 -378
  226. package/src/UserCenter/libs/utils.ts +0 -30
  227. package/src/UserSessions/components/user-session-info.tsx +0 -78
  228. package/src/UserSessions/components/user-sessions.tsx +0 -545
  229. package/src/UserSessions/index.tsx +0 -1
  230. package/src/UserSessions/libs/locales.ts +0 -60
  231. package/src/UserSessions/libs/utils.ts +0 -82
  232. package/src/blocklets.js +0 -195
  233. package/src/common/domain-warning.jsx +0 -178
  234. package/src/common/header-addons.jsx +0 -119
  235. package/src/common/link-blocker.jsx +0 -20
  236. package/src/common/notification-addon.jsx +0 -135
  237. package/src/common/org-switch/avatar-uploader.jsx +0 -271
  238. package/src/common/org-switch/create.jsx +0 -267
  239. package/src/common/org-switch/index.jsx +0 -407
  240. package/src/common/org-switch/locales.js +0 -52
  241. package/src/common/org-switch/use-org.jsx +0 -79
  242. package/src/common/overridable-theme-provider.jsx +0 -17
  243. package/src/common/wallet-hidden-topbar.js +0 -14
  244. package/src/common/wizard-modal.jsx +0 -200
  245. package/src/common/ws.js +0 -68
  246. package/src/contexts/config-user-space.tsx +0 -88
  247. package/src/contexts/user-followers.tsx +0 -54
  248. package/src/hooks/use-follow.tsx +0 -75
  249. package/src/hooks/use-mobile.tsx +0 -6
  250. package/src/index.ts +0 -16
  251. package/src/libs/constant.ts +0 -1
  252. package/src/libs/spaces.tsx +0 -18
  253. package/src/libs/with-hide-when-embed.tsx +0 -24
  254. package/src/types.js +0 -45
  255. package/src/utils.js +0 -161
  256. package/vite.config.mjs +0 -34
@@ -1,413 +0,0 @@
1
- # 操作ガイド
2
-
3
- このセクションでは、ライブラリのコンポーネントを使用して一般的なタスクを完了したり、特定のワークフローを実装したりするための、実践的なステップバイステップガイドを提供します。各ガイドは、特定の結果を効率的に達成できるよう、自己完結型の説明書として設計されています。
4
-
5
- <x-cards data-columns="2">
6
- <x-card data-title="ヘッダーにカスタム要素を追加する" data-icon="lucide:layout-template" data-href="#how-to-add-custom-elements-to-the-header">
7
- `addons`レンダープロップを使用して、`Header`コンポーネントをカスタムボタン、ナビゲーション、またはその他のインタラクティブな要素で拡張する方法を学びます。
8
- </x-card>
9
- <x-card data-title="オプションのコンポーネント依存関係を処理する" data-icon="lucide:puzzle" data-href="#how-to-handle-optional-component-dependencies">
10
- 管理者に必要なコンポーネントをオンデマンドでインストールするように促すワークフローを実装し、ブロックレットの機能がスムーズに実行されるようにします。
11
- </x-card>
12
- <x-card data-title="リアルタイムのユーザー通知を実装する" data-icon="lucide:bell-ring" data-href="#how-to-implement-real-time-user-notifications">
13
- WebSocketを使用してリアルタイム通知システムを設定し、アプリケーション内の重要なイベントをユーザーに通知し続けます。
14
- </x-card>
15
- <x-card data-title="BlockletStudioでリソースを公開する" data-icon="lucide:rocket" data-href="#how-to-publish-resources-with-blockletstudio">
16
- `BlockletStudio`コンポーネントを統合して、リソースと依存コンポーネントを公開および管理するためのユーザーインターフェイスを提供します。
17
- </x-card>
18
- </x-cards>
19
-
20
- ---
21
-
22
- ## ヘッダーにカスタム要素を追加する方法
23
-
24
- `Header`コンポーネントは拡張可能に設計されています。`addons`プロップを利用することで、カスタムボタン、検索バー、またはその他のReactコンポーネントをヘッダーに直接追加できます。
25
-
26
- ### 目標
27
-
28
- メインアプリケーションのヘッダーに、カスタムの「チャット」ボタン、検索入力、および追加のアクションアイコンを追加します。
29
-
30
- ### 前提条件
31
-
32
- - `@arcblock/ux`ライブラリがインストールされた、機能するReactアプリケーション。
33
- - 既存の`<Header>`コンポーネントインスタンス。詳細については、[Headerコンポーネントのドキュメント](./components-layout-header.md)を参照してください。
34
-
35
- ### 手順
36
-
37
- `addons`プロップはレンダー関数を受け入れます。この関数は、最初の引数としてデフォルトのアドオン(セッションマネージャーなど)を受け取り、カスタム要素をデフォルトの要素に対してどこに配置するかを決定できます。
38
-
39
- 1. **`addons`レンダープロップを定義する**
40
-
41
- `Header`コンポーネントで、`addons`プロップに関数を渡します。この関数は、レンダリングしたいJSXを返す必要があります。
42
-
43
- ```jsx
44
- <Header
45
- meta={meta}
46
- addons={(defaultAddons, { navigation }) => {
47
- // ここにカスタムコンポーネントを配置します
48
- return (
49
- <>
50
- {/* カスタムコンポーネントをレンダリングします */}
51
- {defaultAddons}
52
- </>
53
- );
54
- }}
55
- />
56
- ```
57
-
58
- 2. **カスタムコンポーネントを追加する**
59
-
60
- レンダー関数内で、必要なコンポーネントを追加できます。この例では、標準のMaterial-UI `Button`、アイコン用のいくつかの`AddonButton`コンポーネント、および`Divider`を追加します。
61
-
62
- 3. **デフォルトのアドオンと組み合わせる**
63
-
64
- 関数に渡される`defaultAddons`をレンダリングするのが標準的な方法です。これにより、ロケールスイッチャーやセッションマネージャーなどの重要な要素が引き続き表示されるようになります。カスタムコンポーネントは`defaultAddons`の前または後に配置できます。
65
-
66
- ### 完全な例
67
-
68
- これは、ヘッダーにいくつかのカスタム要素を追加する方法を示す完全な例です。これには、ナビゲーション、ボタン、アイコンが含まれ、デフォルトのセッションマネージャーと一緒にレンダリングされます。
69
-
70
- ```javascript ヘッダーにカスタム要素を追加する方法 icon=logos:react
71
- import { Box, Divider, Button } from '@mui/material';
72
- import { SessionContext } from '@arcblock/did-connect-react/lib/Session';
73
- import { AddonButton } from '@arcblock/ux/lib/Header/addon-button';
74
- import NavMenu from '@arcblock/ux/lib/NavMenu';
75
- import SessionManager from '@arcblock/ux/lib/SessionManager';
76
- import Header from '@arcblock/ux/lib/Header';
77
- import { Icon } from '@iconify/react';
78
-
79
- // デモンストレーション用のモックデータ
80
- const mockBlockletMeta = {
81
- title: 'My App',
82
- description: 'A great application',
83
- logoUrl: 'https://www.arcblock.io/image-bin/uploads/eb1cf5d60cd85c42362920c49e3768cb.svg'
84
- };
85
-
86
- const mockSessionContextValue = {
87
- session: {
88
- user: {
89
- fullName: 'Demo User',
90
- did: 'z1ex...',
91
- role: 'admin',
92
- },
93
- // ... その他のセッションプロパティ
94
- },
95
- };
96
-
97
- export default function CustomHeaderGuide() {
98
- const meta = {
99
- ...mockBlockletMeta,
100
- enableConnect: true,
101
- enableLocale: true,
102
- };
103
-
104
- return (
105
- <SessionContext.Provider value={mockSessionContextValue}>
106
- <Header
107
- meta={meta}
108
- homeLink="https://www.arcblock.io"
109
- addons={(defaultAddons, { navigation }) => (
110
- <>
111
- {/* 1. カスタムナビゲーションを追加 */}
112
- {navigation.navItems?.length > 0 && (
113
- <NavMenu
114
- activeId={navigation.activeId}
115
- items={navigation.navItems}
116
- className="header-nav"
117
- />
118
- )}
119
- {/* 2. カスタムボタンを追加 */}
120
- <Button variant="contained" color="primary" size="small">
121
- Button
122
- </Button>
123
- {/* 3. カスタムアイコンボタンを追加 */}
124
- <AddonButton icon={<Icon icon="tabler:message-circle" />}>Chat</AddonButton>
125
- <AddonButton icon={<Icon icon="tabler:bell" />} />
126
- <Divider orientation="vertical" flexItem sx={{ height: 12, alignSelf: 'center' }} />
127
- {/* 4. デフォルトのアドオンをレンダリング(セッションマネージャーを含む) */}
128
- {defaultAddons}
129
- </>
130
- )}
131
- />
132
- </SessionContext.Provider>
133
- );
134
- }
135
- ```
136
-
137
- ---
138
-
139
- ## オプションのコンポーネント依存関係を処理する方法
140
-
141
- 多くのブロックレットは、特定の機能を提供するために他のコンポーネントに依存しています。`ComponentInstaller`を使用すると、オプションのコンポーネントに依存する機能を構築でき、それらがインストールされていない場合、管理者がそれらをインストールするためのユーザーフレンドリーな方法を提供します。
142
-
143
- ### 目標
144
-
145
- 別のブロックレットコンポーネントのインストールを必要とする機能を保護します。コンポーネントが見つからない場合、管理者にはそれをインストールするためのインターフェイスが表示されますが、他のユーザーには何も表示されません。
146
-
147
- ### 前提条件
148
-
149
- - アプリケーション内の、別のコンポーネントに依存する機能(例:「メディアキット」ブロックレットを必要とする「メディアマネージャー」)。
150
- - コンポーネント依存関係のDID。
151
- - ユーザーロール(`owner`、`admin`)に関する知識。
152
-
153
- ### 手順
154
-
155
- 1. **`ComponentInstaller`をインポートする**
156
-
157
- まず、ライブラリからコンポーネントをインポートします。
158
-
159
- ```javascript
160
- import ComponentInstaller from '@arcblock/ux/lib/ComponentInstaller';
161
- ```
162
-
163
- 2. **機能をラップする**
164
-
165
- 依存関係を持つコンポーネントまたは機能を`ComponentInstaller`でラップします。
166
-
167
- 3. **コンポーネントのDIDを提供する**
168
-
169
- 必要なコンポーネントのDIDを`did`プロップに渡します。複数の依存関係がある場合は、単一の文字列または文字列の配列にすることができます。
170
-
171
- 4. **非管理者向けの動作を設定する**
172
-
173
- `noPermissionMute`プロップを使用します。`true`に設定すると、コンポーネントをインストールする権限を持たないユーザー(つまり非管理者)にはインストールプロンプトが表示されません。代わりに表示する`fallback`コンポーネントを提供できます。
174
-
175
- ### 完全な例
176
-
177
- このシナリオでは、DID `z8ia...`を持つコンポーネントがインストールされている場合にのみレンダリングされるべき`MyFeatureButton`があります。
178
-
179
- ```javascript オプションのコンポーネント依存関係を処理する方法 icon=logos:react
180
- import ComponentInstaller from '@arcblock/ux/lib/ComponentInstaller';
181
- import { Button } from '@mui/material';
182
-
183
- const REQUIRED_COMPONENT_DID = 'z8ia1mAXo8ZE7ytGF36L5uBf9kD2kenhqFGp9'; // DIDの例
184
-
185
- // これが依存関係を必要とするコンポーネントです
186
- function MyFeatureButton() {
187
- return <Button variant="contained">Use Awesome Feature</Button>;
188
- }
189
-
190
- export default function OptionalComponentGuide() {
191
- return (
192
- <ComponentInstaller
193
- // チェックするコンポーネントのDID
194
- did={REQUIRED_COMPONENT_DID}
195
- // インストーラーUIの表示を許可されるロールのリスト
196
- roles={['owner', 'admin']}
197
- // trueの場合、非管理者はインストーラーUIを表示しません
198
- noPermissionMute
199
- // オプション:コンポーネントがインストールされていない場合に非管理者に表示するもの
200
- fallback={<div>This feature is not available.</div>}
201
- // インストール成功後に実行されるコールバック
202
- onInstalled={() => console.log('Component was installed successfully!')}
203
- >
204
- {/* この子はコンポーネントがすでにインストールされている場合にのみレンダリングされます */}
205
- <MyFeatureButton />
206
- </ComponentInstaller>
207
- );
208
- }
209
- ```
210
-
211
- 管理者がこのページにアクセスし、コンポーネントがインストールされていない場合、それをインストールするためのポップアップが表示されます。一般ユーザーにはフォールバックメッセージが表示されます。インストールされると、すべてのユーザーに`MyFeatureButton`が表示されます。
212
-
213
- ---
214
-
215
- ## リアルタイムのユーザー通知を実装する方法
216
-
217
- Blocklet ServerからのWebSocketイベントをリッスンすることで、ユーザーにリアルタイムのフィードバックと通知を提供できます。`NotificationAddon`コンポーネントは、ヘッダーに未読通知数を表示するためのすぐに使えるソリューションです。
218
-
219
- ### 目標
220
-
221
- アプリケーションのヘッダーに通知ベルアイコンを追加し、未読通知数をバッジで表示してリアルタイムで更新します。
222
-
223
- ### 前提条件
224
-
225
- - ブロックレットは、通知サービスをサポートするBlocklet Serverバージョン(`1.16.42`以降)で実行されている必要があります。
226
- - 通知アイコンが配置される`<Header>`コンポーネント。
227
- - ユーザー情報を提供するセッションコンテキスト。
228
-
229
- ### 主要な概念
230
-
231
- - **WebSocketイベント**: Blocklet Serverは、通知が作成または読み取られたときにイベントをブロードキャストします。
232
- - **`useListenWsClient`**: 特定のチャネル(例:「user」)のWebSocketクライアントインスタンスを取得するためのフック。
233
- - **イベントの命名**: イベントはユーザーとブロックレットにスコープされます。新しい通知の形式は`${blocklet.did}/${user.did}/notification:blocklet:create`です。
234
-
235
- ### 手順
236
-
237
- `NotificationAddon`コンポーネントは、WebSocketイベントをリッスンし、未読数を表示するために必要なすべてのロジックをカプセル化します。
238
-
239
- 1. **`NotificationAddon`をインポートする**
240
-
241
- ```javascript
242
- import NotificationAddon from '@arcblock/ux/lib/common/notification-addon';
243
- ```
244
-
245
- 2. **ヘッダーの`addons`に追加する**
246
-
247
- これを使用する最も簡単な方法は、`Header`の`addons`レンダープロップ内に追加することです。
248
-
249
- 3. **セッションオブジェクトを渡す**
250
-
251
- `NotificationAddon`コンポーネントは、現在のユーザーを識別し、未読数の状態を管理するために`session`オブジェクトを必要とします。
252
-
253
- ### 完全な例
254
-
255
- この例は、`NotificationAddon`を`Header`に統合する方法を示しています。これは自動的にWebSocketに接続し、イベントをリッスンし、バッジ数を更新します。
256
-
257
- ```javascript リアルタイムのユーザー通知を実装する方法 icon=logos:react
258
- import { SessionContext } from '@arcblock/did-connect-react/lib/Session';
259
- import Header from '@arcblock/ux/lib/Header';
260
- import NotificationAddon from '@arcblock/ux/lib/common/notification-addon';
261
-
262
- // デモンストレーション用のモックデータ
263
- const mockBlockletMeta = {
264
- title: 'My App',
265
- description: 'A great application',
266
- logoUrl: 'https://www.arcblock.io/image-bin/uploads/eb1cf5d60cd85c42362920c49e3768cb.svg'
267
- };
268
-
269
- const mockSessionContextValue = {
270
- session: {
271
- user: {
272
- fullName: 'Demo User',
273
- did: 'z1ex...',
274
- role: 'admin',
275
- },
276
- unReadCount: 3, // 初期の未読数
277
- setUnReadCount: () => {}, // 状態セッター関数
278
- // ... その他のセッションプロパティ
279
- },
280
- };
281
-
282
- export default function NotificationGuide() {
283
- const meta = { ...mockBlockletMeta, enableConnect: true };
284
-
285
- return (
286
- <SessionContext.Provider value={mockSessionContextValue}>
287
- <Header
288
- meta={meta}
289
- addons={(defaultAddons) => (
290
- <>
291
- {/* NotificationAddonがリアルタイムの更新を処理します */}
292
- <NotificationAddon session={mockSessionContextValue.session} />
293
- {defaultAddons}
294
- </>
295
- )}
296
- />
297
- </SessionContext.Provider>
298
- );
299
- }
300
- ```
301
-
302
- ログインしているユーザーの新しい通知が作成されると、ベルアイコンのバッジ数が自動的に増加します。アイコンをクリックすると、ユーザーは通知ページに移動します。
303
-
304
- ---
305
-
306
- ## BlockletStudioでリソースを公開する方法
307
-
308
- `BlockletStudio`コンポーネントは、リソースとコンポーネントを公開するための、完全で埋め込み可能なUIを提供します。ユーザー接続、リソース選択、およびリリースプロセスを処理し、複雑なワークフローを単一のコンポーネントに簡素化します。
309
-
310
- ### 目標
311
-
312
- ダイアログを開くボタンを追加し、ユーザーがブロックレットからファイルと依存コンポーネントを選択して公開できるようにします。
313
-
314
- ### 前提条件
315
-
316
- - 利用可能なリソースのリストを返す、ブロックレット内のAPIエンドポイント。
317
- - 公開UIを提供するコンポーネント(「スタジオ」コンポーネント)のDID。
318
-
319
- ### 手順
320
-
321
- 1. **`BlockletStudio`をインポートして状態を管理する**
322
-
323
- コンポーネントの状態を使用して、スタジオダイアログの可視性を管理する必要があります。
324
-
325
- ```javascript
326
- import { useState } from 'react';
327
- import { BlockletStudio } from '@arcblock/ux/lib/BlockletStudio';
328
- import { Button, CircularProgress } from '@mui/material';
329
- ```
330
-
331
- 2. **コンポーネントをレンダリングする**
332
-
333
- `<BlockletStudio />`コンポーネントをアプリに配置し、`open`と`setOpen`プロップでその可視性を制御します。
334
-
335
- 3. **必須のプロップを設定する**
336
-
337
- - `componentDid`: 公開サービスを提供するスタジオブロックレットのDID。
338
- - `title`、`description`: 公開されるアイテムのメタデータ。
339
- - `resourcesParams`: リソース取得APIにクエリパラメータとして渡されるオブジェクト。
340
- - `components`: 事前に選択または必須とされるコンポーネントの配列。
341
- - `resources`: 事前に選択するリソースを指定するオブジェクト。
342
-
343
- 4. **ライフサイクルイベントを処理する**
344
-
345
- `onOpened`、`onUploaded`、および`onReleased`コールバックを使用して、ローディングスピナーを非表示にしたり、成功メッセージを表示したりするなど、公開ライフサイクル内のイベントに応答します。
346
-
347
- ### 完全な例
348
-
349
- この例は、クリックすると`BlockletStudio`ダイアログを開くボタンを示しています。また、より良いユーザーエクスペリエンスのためにローディング状態を管理する方法も示しています。
350
-
351
- ```javascript BlockletStudioでリソースを公開する方法 icon=logos:react
352
- import { useState } from 'react';
353
- import { Button, CircularProgress } from '@mui/material';
354
- import { BlockletStudio } from '@arcblock/ux/lib/BlockletStudio';
355
-
356
- // スタジオ/公開UIを提供するブロックレットのDID
357
- const AI_STUDIO_COMPONENT_DID = 'z8ia1mAXo8ZE7ytGF36L5uBf9kD2kenhqFGp9'; // DIDの例
358
-
359
- export default function PublisherGuide() {
360
- const [isStudioOpen, setStudioOpen] = useState(false);
361
- const [isOpening, setOpening] = useState(false);
362
-
363
- const handleShowDialog = () => {
364
- setOpening(true);
365
- setStudioOpen(true);
366
- };
367
-
368
- return (
369
- <>
370
- <Button
371
- variant="contained"
372
- onClick={handleShowDialog}
373
- disabled={isOpening}
374
- startIcon={isOpening ? <CircularProgress size={16} /> : null}>
375
- Publish to Studio
376
- </Button>
377
-
378
- <BlockletStudio
379
- // ダイアログの可視性を制御します
380
- open={isStudioOpen}
381
- setOpen={setStudioOpen}
382
- // 公開されるアイテムの基本情報
383
- title="My Demo Project"
384
- description="This is a project published from my blocklet."
385
- // スタジオサービスコンポーネントのDID
386
- componentDid={AI_STUDIO_COMPONENT_DID}
387
- // ブロックレットのリソースAPIに送信されるパラメータ
388
- resourcesParams={{ projectId: 'test-project-123' }}
389
- // 事前に選択されたコンポーネント
390
- components={[
391
- { did: 'z8ia3xzq2tMq8CRHfaXj1BTYJyYnEcHbqP8cJ', included: true, required: true },
392
- { did: 'z2qZyjnsRffFtn2PDnDwDHTRbAu53RpKqDtFZ', included: true, required: false },
393
- ]}
394
- // 事前に選択されたリソース
395
- resources={{
396
- // キーはリソースプロバイダーブロックレットのDIDです
397
- z8iZpog7mcgcgBZzTiXJCWESvmnRrQmnd3XBB: [
398
- 'template-448698592710885376',
399
- 'example-448698592710885376',
400
- ],
401
- }}
402
- // イベントハンドラ
403
- onOpened={() => setOpening(false)}
404
- onUploaded={() => alert('Upload complete!')}
405
- onReleased={() => {
406
- alert('Successfully released!');
407
- setStudioOpen(false);
408
- }}
409
- />
410
- </>
411
- );
412
- }
413
- ```