@blocklet/ui-react 3.4.15 → 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 (255) hide show
  1. package/lib/common/org-switch/use-org.d.ts +4 -4
  2. package/package.json +9 -6
  3. package/.aigne/doc-smith/.local/afs-storage.sqlite3 +0 -0
  4. package/.aigne/doc-smith/config.yaml +0 -78
  5. package/.aigne/doc-smith/history.yaml +0 -14
  6. package/.aigne/doc-smith/media-description.yaml +0 -11
  7. package/.aigne/doc-smith/output/structure-plan.json +0 -255
  8. package/.aigne/doc-smith/translation-cache.yaml +0 -11
  9. package/.aigne/doc-smith/upload-cache.yaml +0 -528
  10. package/build.config.ts +0 -24
  11. package/docs/_sidebar.md +0 -19
  12. package/docs/assets/diagram/component-installer-diagram-0.ja.jpg +0 -0
  13. package/docs/assets/diagram/component-installer-diagram-0.jpg +0 -0
  14. package/docs/assets/diagram/component-installer-diagram-0.zh-TW.jpg +0 -0
  15. package/docs/assets/diagram/component-installer-diagram-0.zh.jpg +0 -0
  16. package/docs/assets/diagram/component-management-diagram-0.ja.jpg +0 -0
  17. package/docs/assets/diagram/component-management-diagram-0.jpg +0 -0
  18. package/docs/assets/diagram/component-management-diagram-0.zh-TW.jpg +0 -0
  19. package/docs/assets/diagram/component-management-diagram-0.zh.jpg +0 -0
  20. package/docs/assets/diagram/core-concepts-diagram-0.ja.jpg +0 -0
  21. package/docs/assets/diagram/core-concepts-diagram-0.jpg +0 -0
  22. package/docs/assets/diagram/core-concepts-diagram-0.zh-TW.jpg +0 -0
  23. package/docs/assets/diagram/core-concepts-diagram-0.zh.jpg +0 -0
  24. package/docs/assets/diagram/dashboard-diagram-0.ja.jpg +0 -0
  25. package/docs/assets/diagram/dashboard-diagram-0.jpg +0 -0
  26. package/docs/assets/diagram/dashboard-diagram-0.zh-TW.jpg +0 -0
  27. package/docs/assets/diagram/dashboard-diagram-0.zh.jpg +0 -0
  28. package/docs/assets/diagram/header-diagram-0.ja.jpg +0 -0
  29. package/docs/assets/diagram/header-diagram-0.jpg +0 -0
  30. package/docs/assets/diagram/header-diagram-0.zh-TW.jpg +0 -0
  31. package/docs/assets/diagram/header-diagram-0.zh.jpg +0 -0
  32. package/docs/assets/diagram/layout-diagram-0.ja.jpg +0 -0
  33. package/docs/assets/diagram/layout-diagram-0.jpg +0 -0
  34. package/docs/assets/diagram/layout-diagram-0.zh-TW.jpg +0 -0
  35. package/docs/assets/diagram/layout-diagram-0.zh.jpg +0 -0
  36. package/docs/assets/diagram/notifications-diagram-0.ja.jpg +0 -0
  37. package/docs/assets/diagram/notifications-diagram-0.jpg +0 -0
  38. package/docs/assets/diagram/notifications-diagram-0.zh-TW.jpg +0 -0
  39. package/docs/assets/diagram/notifications-diagram-0.zh.jpg +0 -0
  40. package/docs/assets/diagram/overview-diagram-0.ja.jpg +0 -0
  41. package/docs/assets/diagram/overview-diagram-0.jpg +0 -0
  42. package/docs/assets/diagram/overview-diagram-0.zh-TW.jpg +0 -0
  43. package/docs/assets/diagram/overview-diagram-0.zh.jpg +0 -0
  44. package/docs/assets/diagram/user-center-diagram-0.ja.jpg +0 -0
  45. package/docs/assets/diagram/user-center-diagram-0.jpg +0 -0
  46. package/docs/assets/diagram/user-center-diagram-0.zh-TW.jpg +0 -0
  47. package/docs/assets/diagram/user-center-diagram-0.zh.jpg +0 -0
  48. package/docs/assets/diagram/user-management-diagram-0.ja.jpg +0 -0
  49. package/docs/assets/diagram/user-management-diagram-0.jpg +0 -0
  50. package/docs/assets/diagram/user-management-diagram-0.zh-TW.jpg +0 -0
  51. package/docs/assets/diagram/user-management-diagram-0.zh.jpg +0 -0
  52. package/docs/assets/diagram/user-sessions-diagram-0.ja.jpg +0 -0
  53. package/docs/assets/diagram/user-sessions-diagram-0.jpg +0 -0
  54. package/docs/assets/diagram/user-sessions-diagram-0.zh-TW.jpg +0 -0
  55. package/docs/assets/diagram/user-sessions-diagram-0.zh.jpg +0 -0
  56. package/docs/components-component-management-blocklet-studio.ja.md +0 -194
  57. package/docs/components-component-management-blocklet-studio.md +0 -194
  58. package/docs/components-component-management-blocklet-studio.zh-TW.md +0 -194
  59. package/docs/components-component-management-blocklet-studio.zh.md +0 -194
  60. package/docs/components-component-management-component-installer.ja.md +0 -182
  61. package/docs/components-component-management-component-installer.md +0 -182
  62. package/docs/components-component-management-component-installer.zh-TW.md +0 -182
  63. package/docs/components-component-management-component-installer.zh.md +0 -182
  64. package/docs/components-component-management.ja.md +0 -30
  65. package/docs/components-component-management.md +0 -30
  66. package/docs/components-component-management.zh-TW.md +0 -30
  67. package/docs/components-component-management.zh.md +0 -30
  68. package/docs/components-layout-dashboard.ja.md +0 -185
  69. package/docs/components-layout-dashboard.md +0 -187
  70. package/docs/components-layout-dashboard.zh-TW.md +0 -185
  71. package/docs/components-layout-dashboard.zh.md +0 -185
  72. package/docs/components-layout-footer.ja.md +0 -165
  73. package/docs/components-layout-footer.md +0 -165
  74. package/docs/components-layout-footer.zh-TW.md +0 -165
  75. package/docs/components-layout-footer.zh.md +0 -165
  76. package/docs/components-layout-header.ja.md +0 -183
  77. package/docs/components-layout-header.md +0 -183
  78. package/docs/components-layout-header.zh-TW.md +0 -183
  79. package/docs/components-layout-header.zh.md +0 -183
  80. package/docs/components-layout.ja.md +0 -31
  81. package/docs/components-layout.md +0 -31
  82. package/docs/components-layout.zh-TW.md +0 -31
  83. package/docs/components-layout.zh.md +0 -31
  84. package/docs/components-notifications.ja.md +0 -125
  85. package/docs/components-notifications.md +0 -125
  86. package/docs/components-notifications.zh-TW.md +0 -125
  87. package/docs/components-notifications.zh.md +0 -125
  88. package/docs/components-user-management-user-center.ja.md +0 -148
  89. package/docs/components-user-management-user-center.md +0 -147
  90. package/docs/components-user-management-user-center.zh-TW.md +0 -148
  91. package/docs/components-user-management-user-center.zh.md +0 -148
  92. package/docs/components-user-management-user-sessions.ja.md +0 -121
  93. package/docs/components-user-management-user-sessions.md +0 -123
  94. package/docs/components-user-management-user-sessions.zh-TW.md +0 -121
  95. package/docs/components-user-management-user-sessions.zh.md +0 -121
  96. package/docs/components-user-management.ja.md +0 -49
  97. package/docs/components-user-management.md +0 -51
  98. package/docs/components-user-management.zh-TW.md +0 -49
  99. package/docs/components-user-management.zh.md +0 -49
  100. package/docs/components-utilities-icon.ja.md +0 -106
  101. package/docs/components-utilities-icon.md +0 -106
  102. package/docs/components-utilities-icon.zh-TW.md +0 -106
  103. package/docs/components-utilities-icon.zh.md +0 -106
  104. package/docs/components-utilities.ja.md +0 -136
  105. package/docs/components-utilities.md +0 -136
  106. package/docs/components-utilities.zh-TW.md +0 -136
  107. package/docs/components-utilities.zh.md +0 -136
  108. package/docs/components.ja.md +0 -27
  109. package/docs/components.md +0 -27
  110. package/docs/components.zh-TW.md +0 -27
  111. package/docs/components.zh.md +0 -27
  112. package/docs/core-concepts.ja.md +0 -134
  113. package/docs/core-concepts.md +0 -135
  114. package/docs/core-concepts.zh-TW.md +0 -134
  115. package/docs/core-concepts.zh.md +0 -134
  116. package/docs/getting-started.ja.md +0 -132
  117. package/docs/getting-started.md +0 -132
  118. package/docs/getting-started.zh-TW.md +0 -132
  119. package/docs/getting-started.zh.md +0 -132
  120. package/docs/hooks-api.ja.md +0 -214
  121. package/docs/hooks-api.md +0 -214
  122. package/docs/hooks-api.zh-TW.md +0 -214
  123. package/docs/hooks-api.zh.md +0 -214
  124. package/docs/how-to-guides.ja.md +0 -413
  125. package/docs/how-to-guides.md +0 -413
  126. package/docs/how-to-guides.zh-TW.md +0 -413
  127. package/docs/how-to-guides.zh.md +0 -413
  128. package/docs/overview.ja.md +0 -51
  129. package/docs/overview.md +0 -51
  130. package/docs/overview.zh-TW.md +0 -51
  131. package/docs/overview.zh.md +0 -51
  132. package/glossary.md +0 -12
  133. package/src/@types/index.ts +0 -230
  134. package/src/@types/shims.d.ts +0 -18
  135. package/src/BlockletStudio/README.md +0 -116
  136. package/src/BlockletStudio/index.tsx +0 -145
  137. package/src/ComponentInstaller/ComponentInstaller.stories.jsx +0 -16
  138. package/src/ComponentInstaller/index.jsx +0 -207
  139. package/src/ComponentInstaller/installer-item.jsx +0 -129
  140. package/src/ComponentInstaller/locales.js +0 -22
  141. package/src/ComponentInstaller/use-component-installed.js +0 -88
  142. package/src/ComponentManager/components/add-component.tsx +0 -136
  143. package/src/ComponentManager/components/check-component.tsx +0 -3
  144. package/src/ComponentManager/components/publish-component.tsx +0 -90
  145. package/src/ComponentManager/components/resource-dialog.tsx +0 -91
  146. package/src/ComponentManager/index.tsx +0 -3
  147. package/src/ComponentManager/libs/locales.ts +0 -15
  148. package/src/Dashboard/Dashboard.stories.jsx +0 -20
  149. package/src/Dashboard/app-shell/app-badge.stories.tsx +0 -64
  150. package/src/Dashboard/app-shell/app-badge.tsx +0 -94
  151. package/src/Dashboard/app-shell/app-header.tsx +0 -104
  152. package/src/Dashboard/app-shell/app-info-context.tsx +0 -182
  153. package/src/Dashboard/app-shell/badges/app-badge-default.tsx +0 -130
  154. package/src/Dashboard/app-shell/badges/app-badge-did.tsx +0 -28
  155. package/src/Dashboard/app-shell/badges/app-badge-state.tsx +0 -40
  156. package/src/Dashboard/app-shell/badges/app-badge-switch.tsx +0 -72
  157. package/src/Dashboard/app-shell/badges/app-badge-version.tsx +0 -60
  158. package/src/Dashboard/app-shell/index.ts +0 -5
  159. package/src/Dashboard/index.jsx +0 -184
  160. package/src/Footer/Footer.stories.jsx +0 -33
  161. package/src/Footer/brand.jsx +0 -81
  162. package/src/Footer/copyright.jsx +0 -22
  163. package/src/Footer/index.jsx +0 -111
  164. package/src/Footer/internal-footer.jsx +0 -139
  165. package/src/Footer/layout/plain.jsx +0 -55
  166. package/src/Footer/layout/row.jsx +0 -43
  167. package/src/Footer/layout/standard.jsx +0 -114
  168. package/src/Footer/links.jsx +0 -321
  169. package/src/Footer/social-media.jsx +0 -55
  170. package/src/Header/Header.stories.jsx +0 -30
  171. package/src/Header/index.tsx +0 -259
  172. package/src/Icon/Icon.stories.jsx +0 -12
  173. package/src/Icon/index.tsx +0 -87
  174. package/src/Notifications/Snackbar.tsx +0 -261
  175. package/src/Notifications/hooks/use-title.tsx +0 -254
  176. package/src/Notifications/hooks/use-width.tsx +0 -16
  177. package/src/Notifications/utils.ts +0 -246
  178. package/src/UserCenter/assets/banner.png +0 -0
  179. package/src/UserCenter/components/config-inviter.tsx +0 -48
  180. package/src/UserCenter/components/config-profile.tsx +0 -99
  181. package/src/UserCenter/components/danger-zone.tsx +0 -82
  182. package/src/UserCenter/components/editable-field.tsx +0 -273
  183. package/src/UserCenter/components/fallback.tsx +0 -57
  184. package/src/UserCenter/components/nft-preview.tsx +0 -84
  185. package/src/UserCenter/components/nft.tsx +0 -279
  186. package/src/UserCenter/components/notification.tsx +0 -319
  187. package/src/UserCenter/components/passport.tsx +0 -107
  188. package/src/UserCenter/components/privacy.tsx +0 -120
  189. package/src/UserCenter/components/settings.tsx +0 -170
  190. package/src/UserCenter/components/status-dialog/date-picker.tsx +0 -77
  191. package/src/UserCenter/components/status-dialog/index.tsx +0 -293
  192. package/src/UserCenter/components/status-selector/duration-menu.tsx +0 -90
  193. package/src/UserCenter/components/status-selector/index.tsx +0 -58
  194. package/src/UserCenter/components/status-selector/menu-item.tsx +0 -56
  195. package/src/UserCenter/components/storage/action.tsx +0 -49
  196. package/src/UserCenter/components/storage/connected.tsx +0 -61
  197. package/src/UserCenter/components/storage/delete.tsx +0 -72
  198. package/src/UserCenter/components/storage/disconnect.tsx +0 -40
  199. package/src/UserCenter/components/storage/icons/empty-spaces-nft.svg +0 -1
  200. package/src/UserCenter/components/storage/icons/long-arrow.svg +0 -5
  201. package/src/UserCenter/components/storage/icons/space-connected.svg +0 -3
  202. package/src/UserCenter/components/storage/icons/space-disconnect.svg +0 -3
  203. package/src/UserCenter/components/storage/index.tsx +0 -41
  204. package/src/UserCenter/components/storage/preview-nft.tsx +0 -72
  205. package/src/UserCenter/components/third-party-login/index.tsx +0 -199
  206. package/src/UserCenter/components/third-party-login/third-party-item.tsx +0 -296
  207. package/src/UserCenter/components/user-center.tsx +0 -787
  208. package/src/UserCenter/components/user-info/address.tsx +0 -143
  209. package/src/UserCenter/components/user-info/index.tsx +0 -4
  210. package/src/UserCenter/components/user-info/link-preview-input.tsx +0 -274
  211. package/src/UserCenter/components/user-info/metadata.tsx +0 -658
  212. package/src/UserCenter/components/user-info/social-actions/chat.tsx +0 -43
  213. package/src/UserCenter/components/user-info/social-actions/follow.tsx +0 -23
  214. package/src/UserCenter/components/user-info/social-actions/index.tsx +0 -17
  215. package/src/UserCenter/components/user-info/switch-role.tsx +0 -42
  216. package/src/UserCenter/components/user-info/timezone-select.tsx +0 -119
  217. package/src/UserCenter/components/user-info/user-basic-info.tsx +0 -292
  218. package/src/UserCenter/components/user-info/user-info-item.tsx +0 -54
  219. package/src/UserCenter/components/user-info/user-info.tsx +0 -91
  220. package/src/UserCenter/components/user-info/user-status.tsx +0 -234
  221. package/src/UserCenter/components/user-info/utils.ts +0 -320
  222. package/src/UserCenter/components/webhook-item.tsx +0 -248
  223. package/src/UserCenter/index.tsx +0 -1
  224. package/src/UserCenter/libs/locales.ts +0 -378
  225. package/src/UserCenter/libs/utils.ts +0 -30
  226. package/src/UserSessions/components/user-session-info.tsx +0 -78
  227. package/src/UserSessions/components/user-sessions.tsx +0 -545
  228. package/src/UserSessions/index.tsx +0 -1
  229. package/src/UserSessions/libs/locales.ts +0 -60
  230. package/src/UserSessions/libs/utils.ts +0 -82
  231. package/src/blocklets.js +0 -195
  232. package/src/common/domain-warning.jsx +0 -178
  233. package/src/common/header-addons.jsx +0 -119
  234. package/src/common/link-blocker.jsx +0 -20
  235. package/src/common/notification-addon.jsx +0 -135
  236. package/src/common/org-switch/avatar-uploader.jsx +0 -271
  237. package/src/common/org-switch/create.jsx +0 -267
  238. package/src/common/org-switch/index.jsx +0 -407
  239. package/src/common/org-switch/locales.js +0 -52
  240. package/src/common/org-switch/use-org.jsx +0 -79
  241. package/src/common/overridable-theme-provider.jsx +0 -17
  242. package/src/common/wallet-hidden-topbar.js +0 -14
  243. package/src/common/wizard-modal.jsx +0 -200
  244. package/src/common/ws.js +0 -68
  245. package/src/contexts/config-user-space.tsx +0 -88
  246. package/src/contexts/user-followers.tsx +0 -54
  247. package/src/hooks/use-follow.tsx +0 -75
  248. package/src/hooks/use-mobile.tsx +0 -6
  249. package/src/index.ts +0 -16
  250. package/src/libs/constant.ts +0 -1
  251. package/src/libs/spaces.tsx +0 -18
  252. package/src/libs/with-hide-when-embed.tsx +0 -24
  253. package/src/types.js +0 -45
  254. package/src/utils.js +0 -161
  255. 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
- ```