@ubie/vitals-ui-business 0.3.0 → 0.4.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.
- package/CHANGELOG.md +58 -0
- package/DESIGN.md +11 -7
- package/dist/index.cjs +139 -56
- package/dist/index.d.cts +117 -22
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +117 -22
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +100 -57
- package/dist/index.mjs.map +1 -1
- package/docs/components/icon.md +101 -0
- package/docs/components/table.md +124 -26
- package/docs/patterns/list-detail.md +8 -8
- package/docs/tokens.md +5 -0
- package/package.json +3 -2
- package/src/components/Table/index.tsx +30 -43
- package/src/index.ts +10 -0
- package/src/stories/business/Icon.stories.tsx +153 -0
- package/src/stories/business/Table.stories.tsx +250 -49
- package/src/stories/business/Typography.stories.tsx +133 -0
- package/src/stories/patterns/ListDetail.stories.tsx +20 -11
- package/src/theme/businessTheme.ts +15 -2
- package/src/theme/businessTypography.ts +69 -0
- package/src/components/Table/rowAction.ts +0 -25
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,63 @@
|
|
|
1
1
|
# @ubie/vitals-ui-business
|
|
2
2
|
|
|
3
|
+
## 0.4.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 990c270: Table の行クリック遷移を廃止し、行内アクションを常時表示既定にする(**破壊的変更**)
|
|
8
|
+
|
|
9
|
+
- **削除**: `onRowClick`。行全体をクリックの的にすると、どこがクリッカブルかが見た目に現れない。遷移は識別列のリンク(実装は `next/link` / `<a>` / `Button type="link"` / `Typography.Link` のいずれでもよい)か、行内アクションの遷移ボタンで示す。行全体クリックがどうしても要る場合は antd の `onRow` を自分で書く
|
|
10
|
+
- **削除**: `data-row-action` 属性による行クリック除外機構。行クリックが無くなったので不要
|
|
11
|
+
- **リネーム + 挙動変更**: `hoverActions` → `rowActions`。**既定が常時表示に変わる**。hover 中だけ見せたい場合は `revealOnHover` を足す
|
|
12
|
+
- **追加**: `revealOnHover`。行内アクションを hover / フォーカス中の行だけに見せる(`disableHoverEffect` と併用したときは常時表示に倒れる)
|
|
13
|
+
- **追加**: `Table` のセルの文字サイズを **14px に固定**した(`businessTheme` の `Table.cellFontSize` /
|
|
14
|
+
`cellFontSizeMD` / `cellFontSizeSM`)。ToB の本文は 16px(main の `businessTypography`)だが、一覧は多くの行を
|
|
15
|
+
見比べる面なので密度を優先し、本文と切り離す
|
|
16
|
+
- **注意**: 表の中のリンク・ボタン(`Button`)は antd のグローバル `fontSize` から文字サイズを取るため、
|
|
17
|
+
何もしないと 16px のままになる。表の中では `style={{ fontSize: "inherit" }}` を当てて表の文字サイズを継がせる
|
|
18
|
+
(`Tag` は `fontSizeSM` を自前で持つため対象外)
|
|
19
|
+
- ルール(遷移手段の選び方・`revealOnHover` を使ってよい 3 条件・セル最低幅の目安)は `docs/components/table.md` に書いた
|
|
20
|
+
|
|
21
|
+
移行:
|
|
22
|
+
|
|
23
|
+
| before | after |
|
|
24
|
+
| ----------------------------- | ------------------------------------------------------------------------------------------ |
|
|
25
|
+
| `onRowClick={r => open(r)}` | 識別列を `render` でリンクにする、または `rowActions` に遷移ボタンを置く |
|
|
26
|
+
| `hoverActions={r => ...}` | `rowActions={r => ...}`(常時表示に変わる)。hover のままにするなら `revealOnHover` を足す |
|
|
27
|
+
| セル内の `data-row-action=""` | 削除する |
|
|
28
|
+
|
|
29
|
+
- aee9c7e: ToB 共通の文字設定 `businessTypography` を追加し、`businessTheme.token` に展開する。
|
|
30
|
+
|
|
31
|
+
これまで `businessTheme` は `@ubie/vitals-antd-theme` の色だけを引き継ぎ、文字は antd 既定(14px 基準・欧文フォント優先)のままだった。文字の正本は toC(`@ubie/vitals-token-consumer`)と ToB で分かれるため、ToB の値はこのパッケージが持つ。
|
|
32
|
+
|
|
33
|
+
| キー | 値 |
|
|
34
|
+
| --------------------- | ------------------------------------------------------------------------------------------- |
|
|
35
|
+
| `fontFamily` | システム UI フォント → Hiragino → Noto Sans JP → Meiryo の順の和文対応スタック |
|
|
36
|
+
| `fontSize` | `16`(antd 既定 14 から変更。`fontSizeSM` 14 / `fontSizeLG` 18 / `fontSizeXL` 22 は派生) |
|
|
37
|
+
| `fontSizeHeading1〜5` | `24` / `20` / `18` / `16` / `14`(antd の自動派生 42〜18 は業務画面には大きすぎるため明示) |
|
|
38
|
+
| `lineHeight` 系 | 本文 `1.6`(SM / LG 含む)、見出し `1.5` |
|
|
39
|
+
|
|
40
|
+
見出しの上限を 24px にした根拠は aimon-genius-fe(MedG)main の調査による。画面 UI に 28px 以上の見出しは無く(font-size 28px は印刷帳票の CSS 直書き 3 箇所のみ)、`Typography.Title` level 1 は 1 箇所で自前 20px 上書き、画面タイトルは level 2 が主流(9 箇所)だった。
|
|
41
|
+
|
|
42
|
+
利用側への影響: `UbieConfigProvider` 配下のすべての antd コンポーネントの文字が 14px → 16px 基準になる。`Typography.Title` は antd 既定の 38 / 30 / 24 / 20 / 16 から 24 / 20 / 18 / 16 / 14 になり、level 2 を画面タイトルに使っている画面は 30px → 20px と小さくなる。個別に `fontSize` を上書きしている箇所は、この既定で足りるなら削除できる。値を戻したい場合は `ConfigProvider` の `theme.token` で差分だけ上書きする。
|
|
43
|
+
|
|
44
|
+
新規 export: `businessTypography` / `businessFontFamily` / `businessFontSizes` / `businessLineHeights`。Storybook に `Business/Typography`(スケール・コントロール内・Table 内)を追加。
|
|
45
|
+
|
|
46
|
+
- d72f499: `@ant-design/icons` を再エクスポートし、ToB の既定のアイコンセットにする
|
|
47
|
+
|
|
48
|
+
- アイコンは `@ubie/vitals-ui-business` から import する(`@ant-design/icons` を利用側の依存に足さない)
|
|
49
|
+
- 自前 SVG を渡す基底コンポーネントは `Icon` として公開(`@ant-design/icons` の default export)
|
|
50
|
+
- 原則 `*Outlined` のみを使う。塗りが要るときは Outlined を容器に載せるか `Icon` + 自前 SVG で作る(線と塗りを別の色として持てるため)。`*Filled` は Outlined + 容器で表現できないときだけ、`*TwoTone` は使わない
|
|
51
|
+
- `@ubie/vitals-icon`(ubie-icons)は `@ant-design/icons` に絵柄が無いときの受け皿。UI Business の依存には入らないので、必要なプロダクトが個別に足す
|
|
52
|
+
- 用法: `docs/components/icon.md`(Storybook `Business/Icon`)。決定: ADR 0004
|
|
53
|
+
|
|
54
|
+
追加した export: `@ant-design/icons` の全アイコンと `Icon` / `IconProvider` / `createFromIconfontCN` / `setTwoToneColor` / `getTwoToneColor`。削除・リネームは無し。
|
|
55
|
+
|
|
56
|
+
### Patch Changes
|
|
57
|
+
|
|
58
|
+
- Updated dependencies [25d839c]
|
|
59
|
+
- @ubie/vitals-antd-theme@0.0.11
|
|
60
|
+
|
|
3
61
|
## 0.3.0
|
|
4
62
|
|
|
5
63
|
### Minor Changes
|
package/DESIGN.md
CHANGED
|
@@ -7,6 +7,7 @@ antd と Ant Design X の公開 API をそのまま再 export し、共通のテ
|
|
|
7
7
|
## 使うときの約束
|
|
8
8
|
|
|
9
9
|
- `antd` から直接ではなく `@ubie/vitals-ui-business` から import する
|
|
10
|
+
- アイコンは `@ant-design/icons` の `*Outlined` から選ぶ。`@ant-design/icons` を直接 import しない。塗りが要るときと、antd に絵柄が無いとき(`@ubie/vitals-icon`)の落とし方は `docs/components/icon.md`
|
|
10
11
|
- 色・寸法の値をプロダクトのコードに書かない。正本はトークンとテーマにある(`docs/tokens.md`)
|
|
11
12
|
- アプリ固有の逸脱は、そのプロダクトのリポジトリに書く
|
|
12
13
|
|
|
@@ -16,7 +17,8 @@ antd と Ant Design X の公開 API をそのまま再 export し、共通のテ
|
|
|
16
17
|
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
|
|
17
18
|
| プロダクトを立ち上げる | 下の「立ち上げ」 |
|
|
18
19
|
| 画面を 1 枚足す | 骨格は `docs/patterns/skeleton.md` → 一覧と詳細の関係は `docs/patterns/list-detail.md` → 情報の出し方は `docs/patterns/disclosure.md` |
|
|
19
|
-
| 部品の使い方を確かめる | `docs/components/`(Table / Layout / Modal / Drawer /
|
|
20
|
+
| 部品の使い方を確かめる | `docs/components/`(Table / Layout / Modal / Drawer / チャット / アイコン) |
|
|
21
|
+
| アイコンを選ぶ | `docs/components/icon.md` |
|
|
20
22
|
| 色・寸法を決める | `docs/tokens.md` |
|
|
21
23
|
| 設計や実装を見直す・採点する | `docs/principles/` |
|
|
22
24
|
|
|
@@ -24,10 +26,11 @@ antd と Ant Design X の公開 API をそのまま再 export し、共通のテ
|
|
|
24
26
|
|
|
25
27
|
### テーマ
|
|
26
28
|
|
|
27
|
-
| 名前 | 場所
|
|
28
|
-
| -------------------- |
|
|
29
|
-
| `businessTheme` | `src/theme/businessTheme.ts`
|
|
30
|
-
| `
|
|
29
|
+
| 名前 | 場所 | 役割 |
|
|
30
|
+
| -------------------- | --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
|
|
31
|
+
| `businessTheme` | `src/theme/businessTheme.ts` | ToB プロダクト共通の antd テーマ。`antdTheme` の token 層(色)+ `businessTypography`(文字)+ Layout / Table の components 既定 |
|
|
32
|
+
| `businessTypography` | `src/theme/businessTypography.ts` | ToB の文字の正本。書体スタック・本文 16px 基準の見出しスケール・行間。toC の `@ubie/vitals-token-consumer` とは正本が別 |
|
|
33
|
+
| `UbieConfigProvider` | `src/UbieConfigProvider.tsx` | `businessTheme` を既定で当てる ConfigProvider。利用側の `theme` は差分として重なる |
|
|
31
34
|
|
|
32
35
|
### コンポーネント
|
|
33
36
|
|
|
@@ -35,7 +38,7 @@ antd の同名コンポーネントに既定を足したもの、および antd
|
|
|
35
38
|
|
|
36
39
|
| 名前 | 場所 | antd との差分 | カード |
|
|
37
40
|
| ------------------- | -------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -------------------------- |
|
|
38
|
-
| `Table` | `src/components/Table/index.tsx` | `
|
|
41
|
+
| `Table` | `src/components/Table/index.tsx` | `rowActions` / `revealOnHover` / `disableHoverEffect`、`size="small"` 既定 | `docs/components/table.md` |
|
|
39
42
|
| `ChatBubble` | `src/components/ChatBubble/index.tsx` | `evidence` / `timestamp` / `timestampFormat` / `onRetry` / `retryLabel` を `footer` / `extra` に合成 | `docs/components/chat.md` |
|
|
40
43
|
| `ChatConversations` | `src/components/ChatConversations/index.tsx` | `emptyState`(未指定なら antd の `Empty`) | `docs/components/chat.md` |
|
|
41
44
|
|
|
@@ -54,13 +57,14 @@ antd の同名コンポーネントに既定を足したもの、および antd
|
|
|
54
57
|
| Modal カード | `docs/components/modal.md` |
|
|
55
58
|
| Drawer カード | `docs/components/drawer.md` |
|
|
56
59
|
| チャット | `docs/components/chat.md` |
|
|
60
|
+
| Icon カード | `docs/components/icon.md` |
|
|
57
61
|
|
|
58
62
|
### 描画カタログ
|
|
59
63
|
|
|
60
64
|
Storybook: https://ubie-inc.github.io/ubie-vitals/ui-business (main への push で更新)
|
|
61
65
|
コンポーネントは Storybook の "Business/" グループ、パターンの実演は "Patterns/" グループにある。
|
|
62
66
|
|
|
63
|
-
- コンポーネント: `src/stories/business/Table.stories.tsx`・`src/stories/business/Chat.stories.tsx`
|
|
67
|
+
- コンポーネント: `src/stories/business/Table.stories.tsx`・`src/stories/business/Chat.stories.tsx`・`src/stories/business/Icon.stories.tsx`
|
|
64
68
|
- パターンの実演: `src/stories/patterns/Skeleton.stories.tsx`・`src/stories/patterns/Disclosure.stories.tsx`・`src/stories/patterns/ListDetail.stories.tsx`
|
|
65
69
|
|
|
66
70
|
## 立ち上げ
|
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,28 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
//#region \0rolldown/runtime.js
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
11
|
+
key = keys[i];
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
13
|
+
get: ((k) => from[k]).bind(null, key),
|
|
14
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
20
|
+
value: mod,
|
|
21
|
+
enumerable: true
|
|
22
|
+
}) : target, mod));
|
|
23
|
+
//#endregion
|
|
24
|
+
let _ant_design_icons = require("@ant-design/icons");
|
|
25
|
+
_ant_design_icons = __toESM(_ant_design_icons);
|
|
2
26
|
let _ant_design_x = require("@ant-design/x");
|
|
3
27
|
let antd = require("antd");
|
|
4
28
|
let _ubie_vitals_antd_theme = require("@ubie/vitals-antd-theme");
|
|
@@ -9,6 +33,72 @@ let react = require("react");
|
|
|
9
33
|
* Do not edit directly, this file was auto-generated.
|
|
10
34
|
*/
|
|
11
35
|
const ColorUbieBlue100 = "#f0f2fdff";
|
|
36
|
+
const ColorSurfaceContainer = "#ffffffff";
|
|
37
|
+
//#endregion
|
|
38
|
+
//#region src/theme/businessTypography.ts
|
|
39
|
+
/**
|
|
40
|
+
* ToB プロダクト共通の書体スタック。
|
|
41
|
+
*
|
|
42
|
+
* 欧文はシステム UI フォント(San Francisco / Segoe UI)に任せ、和文は Hiragino → Noto Sans JP → Meiryo の順で
|
|
43
|
+
* 拾う。toC の `@ubie/vitals-token-consumer` にも同趣旨の `text.base-family` があるが、あちらは toC の正本なので
|
|
44
|
+
* 依存せず、ToB の正本としてここに持つ。ブランド共通に昇格させる判断が出たら `@ubie/vitals-token` へ移す。
|
|
45
|
+
*/
|
|
46
|
+
const businessFontFamily = "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', 'Noto Sans JP', Meiryo, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'";
|
|
47
|
+
/**
|
|
48
|
+
* ToB の文字スケール(px)。
|
|
49
|
+
*
|
|
50
|
+
* 基準は本文 16px(2026-09-09 デザイナー決定)。antd の既定 14px から基準を上げると、antd は見出しを
|
|
51
|
+
* 42 / 34 / 28 / 22 / 18 に自動で派生させるが、業務画面ではヘッダー・見出しが大きすぎるため
|
|
52
|
+
* 見出しはここで明示する。Figma 側に ToB の文字定義はまだ無く、この値が正本(Figma に定義ができたら差し替える)。
|
|
53
|
+
*
|
|
54
|
+
* 見出しの上限を 24px にした根拠(2026-09-09 aimon-genius-fe main を調査):
|
|
55
|
+
* - 画面 UI に 28px 以上の見出しは無い。font-size 28px は印刷帳票の CSS 直書き 3 箇所のみ
|
|
56
|
+
* - `Typography.Title` level 1 は 1 箇所だけで、しかも自前で 20px に上書きしている
|
|
57
|
+
* - 画面タイトルは level 2 が主流(9 箇所)。level 3 が 22、level 4 が 19、level 5 が 10 箇所
|
|
58
|
+
* よって H1 は「画面タイトルの最大」として 24px に置き、以下を 1 段ずつ詰める。
|
|
59
|
+
*/
|
|
60
|
+
const businessFontSizes = {
|
|
61
|
+
/** 本文。antd はこの値から fontSizeSM (14) / fontSizeLG (18) / fontSizeXL (22) を派生させる */
|
|
62
|
+
fontSize: 16,
|
|
63
|
+
/** 画面タイトル。1 画面に 1 つ */
|
|
64
|
+
fontSizeHeading1: 24,
|
|
65
|
+
/** セクション見出し。現行 MedG の画面タイトルはこの level を使っている */
|
|
66
|
+
fontSizeHeading2: 20,
|
|
67
|
+
/** カード・パネルの見出し */
|
|
68
|
+
fontSizeHeading3: 18,
|
|
69
|
+
/** 本文と同サイズの見出し。太さだけで本文と区別する */
|
|
70
|
+
fontSizeHeading4: 16,
|
|
71
|
+
/** 表の中の小見出しなど。補足文字(fontSizeSM)と同サイズ */
|
|
72
|
+
fontSizeHeading5: 14
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* 行間(倍率)。
|
|
76
|
+
*
|
|
77
|
+
* 本文は和文の読みやすさで 1.6 を採る。toC は 1.7 だが、業務画面は 32px の入力欄・ボタンに 16px の文字を収めるため
|
|
78
|
+
* 1.7 では上下の余白が 2px 台まで詰まる。1.6 なら 25.6px で 3px 強の余白が残る。
|
|
79
|
+
* 見出しは行送りを詰めて塊として読めるよう 1.5 を採る。
|
|
80
|
+
*/
|
|
81
|
+
const businessLineHeights = {
|
|
82
|
+
lineHeight: 1.6,
|
|
83
|
+
lineHeightSM: 1.6,
|
|
84
|
+
lineHeightLG: 1.6,
|
|
85
|
+
lineHeightHeading1: 1.5,
|
|
86
|
+
lineHeightHeading2: 1.5,
|
|
87
|
+
lineHeightHeading3: 1.5,
|
|
88
|
+
lineHeightHeading4: 1.5,
|
|
89
|
+
lineHeightHeading5: 1.5
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* ToB プロダクト共通の文字設定。`businessTheme.token` に展開される。
|
|
93
|
+
*
|
|
94
|
+
* `@ubie/vitals-antd-theme` は色だけを持ち、文字は持たない。文字は ToB / toC で正本が分かれるため
|
|
95
|
+
* antd-theme ではなくこのパッケージが持つ。
|
|
96
|
+
*/
|
|
97
|
+
const businessTypography = {
|
|
98
|
+
fontFamily: businessFontFamily,
|
|
99
|
+
...businessFontSizes,
|
|
100
|
+
...businessLineHeights
|
|
101
|
+
};
|
|
12
102
|
//#endregion
|
|
13
103
|
//#region src/theme/businessTheme.ts
|
|
14
104
|
/**
|
|
@@ -16,7 +106,7 @@ const ColorUbieBlue100 = "#f0f2fdff";
|
|
|
16
106
|
*
|
|
17
107
|
* business 判断による上書きはここに置かず `businessComponentOverrides` に置く。
|
|
18
108
|
*/
|
|
19
|
-
const semanticComponentTokens = { Layout: { headerBg:
|
|
109
|
+
const semanticComponentTokens = { Layout: { headerBg: ColorSurfaceContainer } };
|
|
20
110
|
/**
|
|
21
111
|
* business 判断で DS semantic を採らない層。
|
|
22
112
|
*
|
|
@@ -33,17 +123,26 @@ const businessComponentOverrides = {
|
|
|
33
123
|
/**
|
|
34
124
|
* 色ではなく寸法・密度の既定。一覧画面は行数が多いため small 密度を共通既定にする。
|
|
35
125
|
*/
|
|
36
|
-
const businessComponentMetrics = { Table: {
|
|
126
|
+
const businessComponentMetrics = { Table: {
|
|
127
|
+
cellPaddingBlockSM: 6,
|
|
128
|
+
cellFontSize: 14,
|
|
129
|
+
cellFontSizeMD: 14,
|
|
130
|
+
cellFontSizeSM: 14
|
|
131
|
+
} };
|
|
37
132
|
/**
|
|
38
133
|
* ToB プロダクト共通の antd テーマ。
|
|
39
134
|
*
|
|
40
|
-
* token 層は `@ubie/vitals-antd-theme` の `antdTheme
|
|
41
|
-
* business 共通の components
|
|
135
|
+
* token 層は `@ubie/vitals-antd-theme` の `antdTheme`(色)をそのまま引き継ぎ、
|
|
136
|
+
* ToB の文字設定(`businessTypography`)と business 共通の components 既定をここで足す。アプリ側は
|
|
42
137
|
* `{ ...businessTheme, components: { ...businessTheme.components, Layout: { ...businessTheme.components.Layout, headerHeight: 64 } } }`
|
|
43
138
|
* のように差分だけを上書きする。
|
|
44
139
|
*/
|
|
45
140
|
const businessTheme = {
|
|
46
141
|
..._ubie_vitals_antd_theme.antdTheme,
|
|
142
|
+
token: {
|
|
143
|
+
..._ubie_vitals_antd_theme.antdTheme.token,
|
|
144
|
+
...businessTypography
|
|
145
|
+
},
|
|
47
146
|
components: {
|
|
48
147
|
Layout: {
|
|
49
148
|
...semanticComponentTokens.Layout,
|
|
@@ -71,29 +170,8 @@ function UbieConfigProvider({ children, ...configProviderProps }) {
|
|
|
71
170
|
});
|
|
72
171
|
}
|
|
73
172
|
//#endregion
|
|
74
|
-
//#region src/components/Table/rowAction.ts
|
|
75
|
-
/** 行内アクションであることを示す属性。この属性を持つ要素(とその子孫)のクリックは行クリックにしない。 */
|
|
76
|
-
const ROW_ACTION_ATTRIBUTE = "data-row-action";
|
|
77
|
-
/** クリック要素から行までの経路のどこかに行内アクションの印があるか。 */
|
|
78
|
-
function isRowActionTarget(path) {
|
|
79
|
-
return path.some((element) => element.hasAttribute(ROW_ACTION_ATTRIBUTE));
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* `target` から `boundary`(含まない)までの祖先列。
|
|
83
|
-
* `target` が `boundary` の外にあるときは空配列(イベントの再ターゲットや detached node に備える)。
|
|
84
|
-
*/
|
|
85
|
-
function elementPath(target, boundary) {
|
|
86
|
-
const path = [];
|
|
87
|
-
let current = target;
|
|
88
|
-
while (current && current !== boundary) {
|
|
89
|
-
path.push(current);
|
|
90
|
-
current = current.parentElement;
|
|
91
|
-
}
|
|
92
|
-
return current === boundary ? path : [];
|
|
93
|
-
}
|
|
94
|
-
//#endregion
|
|
95
173
|
//#region src/components/Table/index.tsx
|
|
96
|
-
const
|
|
174
|
+
const ROW_ACTIONS_COLUMN_KEY = "__rowActions";
|
|
97
175
|
function resolveRowKey(rowKey, record, index) {
|
|
98
176
|
if (typeof rowKey === "function") return rowKey(record, index);
|
|
99
177
|
const value = record[rowKey ?? "key"];
|
|
@@ -103,34 +181,32 @@ function resolveRowKey(rowKey, record, index) {
|
|
|
103
181
|
* ToB プロダクト共通の Table。antd Table の superset。
|
|
104
182
|
*
|
|
105
183
|
* - `size` の既定は `small`(`businessTheme` の `Table.cellPaddingBlockSM` と組で一覧画面の密度にする)
|
|
106
|
-
* - `
|
|
184
|
+
* - `rowActions` / `revealOnHover` / `disableHoverEffect` を足す。それ以外の props は antd にそのまま渡す
|
|
107
185
|
* - hover 状態は React state で持つ(CSS に依存しないので描画テストで検査できる)
|
|
108
186
|
*
|
|
109
187
|
* @displayName Table
|
|
110
188
|
*/
|
|
111
189
|
function InternalTable(props) {
|
|
112
|
-
const {
|
|
190
|
+
const { rowActions, revealOnHover = false, disableHoverEffect = false, onRow, columns, rowKey, size = "small", ref, ...rest } = props;
|
|
113
191
|
const [hoveredKey, setHoveredKey] = (0, react.useState)(null);
|
|
114
|
-
const
|
|
192
|
+
const revealEnabled = revealOnHover && !disableHoverEffect;
|
|
193
|
+
const trackHover = Boolean(rowActions) && revealEnabled;
|
|
115
194
|
const mergedColumns = (0, react.useMemo)(() => {
|
|
116
|
-
if (!
|
|
117
|
-
const
|
|
195
|
+
if (!rowActions) return columns;
|
|
196
|
+
const actionColumn = {
|
|
118
197
|
align: "right",
|
|
119
|
-
key:
|
|
198
|
+
key: ROW_ACTIONS_COLUMN_KEY,
|
|
120
199
|
render: (_value, record, index) => {
|
|
121
|
-
return
|
|
122
|
-
[ROW_ACTION_ATTRIBUTE]: "",
|
|
123
|
-
children: hoverActions?.(record)
|
|
124
|
-
}) : null;
|
|
200
|
+
return !revealEnabled || hoveredKey !== null && hoveredKey === resolveRowKey(rowKey, record, index) ? rowActions(record) : null;
|
|
125
201
|
},
|
|
126
202
|
title: ""
|
|
127
203
|
};
|
|
128
|
-
return [...columns ?? [],
|
|
204
|
+
return [...columns ?? [], actionColumn];
|
|
129
205
|
}, [
|
|
130
206
|
columns,
|
|
131
|
-
hoverActions,
|
|
132
|
-
hoverEnabled,
|
|
133
207
|
hoveredKey,
|
|
208
|
+
revealEnabled,
|
|
209
|
+
rowActions,
|
|
134
210
|
rowKey
|
|
135
211
|
]);
|
|
136
212
|
const mergedOnRow = (0, react.useCallback)((record, index) => {
|
|
@@ -138,40 +214,29 @@ function InternalTable(props) {
|
|
|
138
214
|
const rowIndex = index ?? 0;
|
|
139
215
|
return {
|
|
140
216
|
...user,
|
|
141
|
-
onClick: (event) => {
|
|
142
|
-
user.onClick?.(event);
|
|
143
|
-
if (!onRowClick) return;
|
|
144
|
-
if (!event.currentTarget.contains(event.target)) return;
|
|
145
|
-
if (isRowActionTarget(elementPath(event.target, event.currentTarget))) return;
|
|
146
|
-
onRowClick(record, event);
|
|
147
|
-
},
|
|
148
217
|
onMouseEnter: (event) => {
|
|
149
218
|
user.onMouseEnter?.(event);
|
|
150
|
-
if (
|
|
219
|
+
if (trackHover) setHoveredKey(resolveRowKey(rowKey, record, rowIndex));
|
|
151
220
|
},
|
|
152
221
|
onMouseLeave: (event) => {
|
|
153
222
|
user.onMouseLeave?.(event);
|
|
154
|
-
if (
|
|
223
|
+
if (trackHover) setHoveredKey(null);
|
|
155
224
|
},
|
|
156
225
|
onFocus: (event) => {
|
|
157
226
|
user.onFocus?.(event);
|
|
158
|
-
if (
|
|
227
|
+
if (trackHover) setHoveredKey(resolveRowKey(rowKey, record, rowIndex));
|
|
159
228
|
},
|
|
160
229
|
onBlur: (event) => {
|
|
161
230
|
user.onBlur?.(event);
|
|
162
|
-
if (!
|
|
231
|
+
if (!trackHover) return;
|
|
163
232
|
const related = event.relatedTarget;
|
|
164
233
|
if (related === null || !event.currentTarget.contains(related)) setHoveredKey(null);
|
|
165
234
|
},
|
|
166
|
-
style:
|
|
167
|
-
cursor: "pointer",
|
|
168
|
-
...user.style
|
|
169
|
-
} : user.style
|
|
235
|
+
style: user.style
|
|
170
236
|
};
|
|
171
237
|
}, [
|
|
172
|
-
|
|
238
|
+
trackHover,
|
|
173
239
|
onRow,
|
|
174
|
-
onRowClick,
|
|
175
240
|
rowKey
|
|
176
241
|
]);
|
|
177
242
|
const columnsProp = mergedColumns === void 0 ? {} : { columns: mergedColumns };
|
|
@@ -286,9 +351,19 @@ function ChatConversations({ emptyState, items, ref, ...rest }) {
|
|
|
286
351
|
//#endregion
|
|
287
352
|
exports.ChatBubble = ChatBubble;
|
|
288
353
|
exports.ChatConversations = ChatConversations;
|
|
354
|
+
Object.defineProperty(exports, "Icon", {
|
|
355
|
+
enumerable: true,
|
|
356
|
+
get: function() {
|
|
357
|
+
return _ant_design_icons.default;
|
|
358
|
+
}
|
|
359
|
+
});
|
|
289
360
|
exports.Table = Table;
|
|
290
361
|
exports.UbieConfigProvider = UbieConfigProvider;
|
|
362
|
+
exports.businessFontFamily = businessFontFamily;
|
|
363
|
+
exports.businessFontSizes = businessFontSizes;
|
|
364
|
+
exports.businessLineHeights = businessLineHeights;
|
|
291
365
|
exports.businessTheme = businessTheme;
|
|
366
|
+
exports.businessTypography = businessTypography;
|
|
292
367
|
Object.defineProperty(exports, "notification", {
|
|
293
368
|
enumerable: true,
|
|
294
369
|
get: function() {
|
|
@@ -313,6 +388,14 @@ Object.defineProperty(exports, "xVersion", {
|
|
|
313
388
|
return _ant_design_x.version;
|
|
314
389
|
}
|
|
315
390
|
});
|
|
391
|
+
Object.keys(_ant_design_icons).forEach(function(k) {
|
|
392
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
393
|
+
enumerable: true,
|
|
394
|
+
get: function() {
|
|
395
|
+
return _ant_design_icons[k];
|
|
396
|
+
}
|
|
397
|
+
});
|
|
398
|
+
});
|
|
316
399
|
Object.keys(_ant_design_x).forEach(function(k) {
|
|
317
400
|
if (k !== "default" && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
318
401
|
enumerable: true,
|
package/dist/index.d.cts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import Icon from "@ant-design/icons";
|
|
1
2
|
import { BubbleProps, Conversations, ConversationsProps, notification as xNotification, version as xVersion } from "@ant-design/x";
|
|
2
3
|
import { ConfigProviderProps, Table as Table$1, TableProps as TableProps$1, notification, version } from "antd";
|
|
3
4
|
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
4
5
|
import { TableRef } from "antd/es/table/index.js";
|
|
5
|
-
import { ComponentRef,
|
|
6
|
+
import { ComponentRef, ReactNode, Ref } from "react";
|
|
6
7
|
import { BubbleContentType, BubbleRef } from "@ant-design/x/es/bubble/interface.js";
|
|
8
|
+
export * from "@ant-design/icons";
|
|
7
9
|
export * from "@ant-design/x";
|
|
8
10
|
export * from "antd";
|
|
9
11
|
|
|
@@ -22,24 +24,28 @@ declare function UbieConfigProvider({
|
|
|
22
24
|
/**
|
|
23
25
|
* ToB プロダクト共通の antd テーマ。
|
|
24
26
|
*
|
|
25
|
-
* token 層は `@ubie/vitals-antd-theme` の `antdTheme
|
|
26
|
-
* business 共通の components
|
|
27
|
+
* token 層は `@ubie/vitals-antd-theme` の `antdTheme`(色)をそのまま引き継ぎ、
|
|
28
|
+
* ToB の文字設定(`businessTypography`)と business 共通の components 既定をここで足す。アプリ側は
|
|
27
29
|
* `{ ...businessTheme, components: { ...businessTheme.components, Layout: { ...businessTheme.components.Layout, headerHeight: 64 } } }`
|
|
28
30
|
* のように差分だけを上書きする。
|
|
29
31
|
*/
|
|
30
32
|
declare const businessTheme: {
|
|
31
|
-
components: {
|
|
32
|
-
Layout: {
|
|
33
|
-
bodyBg: string;
|
|
34
|
-
footerBg: string;
|
|
35
|
-
headerBg: string;
|
|
36
|
-
};
|
|
37
|
-
Table: {
|
|
38
|
-
cellPaddingBlockSM: 6;
|
|
39
|
-
rowHoverBg: string;
|
|
40
|
-
};
|
|
41
|
-
};
|
|
42
33
|
token: {
|
|
34
|
+
lineHeight: 1.6;
|
|
35
|
+
lineHeightSM: 1.6;
|
|
36
|
+
lineHeightLG: 1.6;
|
|
37
|
+
lineHeightHeading1: 1.5;
|
|
38
|
+
lineHeightHeading2: 1.5;
|
|
39
|
+
lineHeightHeading3: 1.5;
|
|
40
|
+
lineHeightHeading4: 1.5;
|
|
41
|
+
lineHeightHeading5: 1.5;
|
|
42
|
+
fontSize: 16;
|
|
43
|
+
fontSizeHeading1: 24;
|
|
44
|
+
fontSizeHeading2: 20;
|
|
45
|
+
fontSizeHeading3: 18;
|
|
46
|
+
fontSizeHeading4: 16;
|
|
47
|
+
fontSizeHeading5: 14;
|
|
48
|
+
fontFamily: "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', 'Noto Sans JP', Meiryo, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'";
|
|
43
49
|
colorPrimary: string;
|
|
44
50
|
colorLink: string;
|
|
45
51
|
blue: string;
|
|
@@ -140,23 +146,112 @@ declare const businessTheme: {
|
|
|
140
146
|
colorInfo: string;
|
|
141
147
|
colorInfoBg: string;
|
|
142
148
|
colorTextBase: string;
|
|
149
|
+
colorText: string;
|
|
150
|
+
colorTextSecondary: string;
|
|
151
|
+
colorTextTertiary: string;
|
|
152
|
+
colorTextQuaternary: string;
|
|
143
153
|
colorBgBase: string;
|
|
144
154
|
colorBorder: string;
|
|
145
155
|
colorBorderSecondary: string;
|
|
146
156
|
colorTextPlaceholder: string;
|
|
147
157
|
};
|
|
158
|
+
components: {
|
|
159
|
+
Layout: {
|
|
160
|
+
bodyBg: string;
|
|
161
|
+
footerBg: string;
|
|
162
|
+
headerBg: string;
|
|
163
|
+
};
|
|
164
|
+
Table: {
|
|
165
|
+
cellPaddingBlockSM: 6;
|
|
166
|
+
cellFontSize: 14;
|
|
167
|
+
cellFontSizeMD: 14;
|
|
168
|
+
cellFontSizeSM: 14;
|
|
169
|
+
rowHoverBg: string;
|
|
170
|
+
};
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
//#endregion
|
|
174
|
+
//#region src/theme/businessTypography.d.ts
|
|
175
|
+
/**
|
|
176
|
+
* ToB プロダクト共通の書体スタック。
|
|
177
|
+
*
|
|
178
|
+
* 欧文はシステム UI フォント(San Francisco / Segoe UI)に任せ、和文は Hiragino → Noto Sans JP → Meiryo の順で
|
|
179
|
+
* 拾う。toC の `@ubie/vitals-token-consumer` にも同趣旨の `text.base-family` があるが、あちらは toC の正本なので
|
|
180
|
+
* 依存せず、ToB の正本としてここに持つ。ブランド共通に昇格させる判断が出たら `@ubie/vitals-token` へ移す。
|
|
181
|
+
*/
|
|
182
|
+
declare const businessFontFamily = "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', 'Noto Sans JP', Meiryo, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'";
|
|
183
|
+
/**
|
|
184
|
+
* ToB の文字スケール(px)。
|
|
185
|
+
*
|
|
186
|
+
* 基準は本文 16px(2026-09-09 デザイナー決定)。antd の既定 14px から基準を上げると、antd は見出しを
|
|
187
|
+
* 42 / 34 / 28 / 22 / 18 に自動で派生させるが、業務画面ではヘッダー・見出しが大きすぎるため
|
|
188
|
+
* 見出しはここで明示する。Figma 側に ToB の文字定義はまだ無く、この値が正本(Figma に定義ができたら差し替える)。
|
|
189
|
+
*
|
|
190
|
+
* 見出しの上限を 24px にした根拠(2026-09-09 aimon-genius-fe main を調査):
|
|
191
|
+
* - 画面 UI に 28px 以上の見出しは無い。font-size 28px は印刷帳票の CSS 直書き 3 箇所のみ
|
|
192
|
+
* - `Typography.Title` level 1 は 1 箇所だけで、しかも自前で 20px に上書きしている
|
|
193
|
+
* - 画面タイトルは level 2 が主流(9 箇所)。level 3 が 22、level 4 が 19、level 5 が 10 箇所
|
|
194
|
+
* よって H1 は「画面タイトルの最大」として 24px に置き、以下を 1 段ずつ詰める。
|
|
195
|
+
*/
|
|
196
|
+
declare const businessFontSizes: {
|
|
197
|
+
/** 本文。antd はこの値から fontSizeSM (14) / fontSizeLG (18) / fontSizeXL (22) を派生させる */readonly fontSize: 16; /** 画面タイトル。1 画面に 1 つ */
|
|
198
|
+
readonly fontSizeHeading1: 24; /** セクション見出し。現行 MedG の画面タイトルはこの level を使っている */
|
|
199
|
+
readonly fontSizeHeading2: 20; /** カード・パネルの見出し */
|
|
200
|
+
readonly fontSizeHeading3: 18; /** 本文と同サイズの見出し。太さだけで本文と区別する */
|
|
201
|
+
readonly fontSizeHeading4: 16; /** 表の中の小見出しなど。補足文字(fontSizeSM)と同サイズ */
|
|
202
|
+
readonly fontSizeHeading5: 14;
|
|
203
|
+
};
|
|
204
|
+
/**
|
|
205
|
+
* 行間(倍率)。
|
|
206
|
+
*
|
|
207
|
+
* 本文は和文の読みやすさで 1.6 を採る。toC は 1.7 だが、業務画面は 32px の入力欄・ボタンに 16px の文字を収めるため
|
|
208
|
+
* 1.7 では上下の余白が 2px 台まで詰まる。1.6 なら 25.6px で 3px 強の余白が残る。
|
|
209
|
+
* 見出しは行送りを詰めて塊として読めるよう 1.5 を採る。
|
|
210
|
+
*/
|
|
211
|
+
declare const businessLineHeights: {
|
|
212
|
+
readonly lineHeight: 1.6;
|
|
213
|
+
readonly lineHeightSM: 1.6;
|
|
214
|
+
readonly lineHeightLG: 1.6;
|
|
215
|
+
readonly lineHeightHeading1: 1.5;
|
|
216
|
+
readonly lineHeightHeading2: 1.5;
|
|
217
|
+
readonly lineHeightHeading3: 1.5;
|
|
218
|
+
readonly lineHeightHeading4: 1.5;
|
|
219
|
+
readonly lineHeightHeading5: 1.5;
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* ToB プロダクト共通の文字設定。`businessTheme.token` に展開される。
|
|
223
|
+
*
|
|
224
|
+
* `@ubie/vitals-antd-theme` は色だけを持ち、文字は持たない。文字は ToB / toC で正本が分かれるため
|
|
225
|
+
* antd-theme ではなくこのパッケージが持つ。
|
|
226
|
+
*/
|
|
227
|
+
declare const businessTypography: {
|
|
228
|
+
readonly lineHeight: 1.6;
|
|
229
|
+
readonly lineHeightSM: 1.6;
|
|
230
|
+
readonly lineHeightLG: 1.6;
|
|
231
|
+
readonly lineHeightHeading1: 1.5;
|
|
232
|
+
readonly lineHeightHeading2: 1.5;
|
|
233
|
+
readonly lineHeightHeading3: 1.5;
|
|
234
|
+
readonly lineHeightHeading4: 1.5;
|
|
235
|
+
readonly lineHeightHeading5: 1.5; /** 本文。antd はこの値から fontSizeSM (14) / fontSizeLG (18) / fontSizeXL (22) を派生させる */
|
|
236
|
+
readonly fontSize: 16; /** 画面タイトル。1 画面に 1 つ */
|
|
237
|
+
readonly fontSizeHeading1: 24; /** セクション見出し。現行 MedG の画面タイトルはこの level を使っている */
|
|
238
|
+
readonly fontSizeHeading2: 20; /** カード・パネルの見出し */
|
|
239
|
+
readonly fontSizeHeading3: 18; /** 本文と同サイズの見出し。太さだけで本文と区別する */
|
|
240
|
+
readonly fontSizeHeading4: 16; /** 表の中の小見出しなど。補足文字(fontSizeSM)と同サイズ */
|
|
241
|
+
readonly fontSizeHeading5: 14;
|
|
242
|
+
readonly fontFamily: "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', 'Noto Sans JP', Meiryo, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'";
|
|
148
243
|
};
|
|
149
244
|
//#endregion
|
|
150
245
|
//#region src/components/Table/index.d.ts
|
|
151
246
|
interface TableProps<RecordType = Record<PropertyKey, unknown>> extends Omit<TableProps$1<RecordType>, "columns"> {
|
|
152
247
|
/**
|
|
153
|
-
*
|
|
154
|
-
*
|
|
248
|
+
* 行内アクション。末尾列として描画され、**既定では常時表示**。
|
|
249
|
+
* hover 中だけ見せたいときは `revealOnHover` を足す(例外扱い。判断基準は docs/components/table.md)。
|
|
155
250
|
*/
|
|
156
|
-
|
|
157
|
-
/** hover
|
|
158
|
-
|
|
159
|
-
/** hover
|
|
251
|
+
rowActions?: (record: RecordType) => ReactNode;
|
|
252
|
+
/** 行内アクションを hover / フォーカス中の行だけに見せる。既定(未指定)は常時表示。 */
|
|
253
|
+
revealOnHover?: boolean;
|
|
254
|
+
/** hover 効果を止める。`revealOnHover` と併用されたときは常時表示に倒す。 */
|
|
160
255
|
disableHoverEffect?: boolean;
|
|
161
256
|
ref?: Ref<TableRef>;
|
|
162
257
|
/**
|
|
@@ -172,7 +267,7 @@ interface TableProps<RecordType = Record<PropertyKey, unknown>> extends Omit<Tab
|
|
|
172
267
|
* ToB プロダクト共通の Table。antd Table の superset。
|
|
173
268
|
*
|
|
174
269
|
* - `size` の既定は `small`(`businessTheme` の `Table.cellPaddingBlockSM` と組で一覧画面の密度にする)
|
|
175
|
-
* - `
|
|
270
|
+
* - `rowActions` / `revealOnHover` / `disableHoverEffect` を足す。それ以外の props は antd にそのまま渡す
|
|
176
271
|
* - hover 状態は React state で持つ(CSS に依存しないので描画テストで検査できる)
|
|
177
272
|
*
|
|
178
273
|
* @displayName Table
|
|
@@ -277,5 +372,5 @@ declare function ChatConversations({
|
|
|
277
372
|
...rest
|
|
278
373
|
}: ChatConversationsProps): _$react_jsx_runtime0.JSX.Element;
|
|
279
374
|
//#endregion
|
|
280
|
-
export { ChatBubble, type ChatBubbleEvidence, type ChatBubbleProps, ChatConversations, type ChatConversationsProps, Table, type TableProps, UbieConfigProvider, type UbieConfigProviderProps, businessTheme, notification, version, xNotification, xVersion };
|
|
375
|
+
export { ChatBubble, type ChatBubbleEvidence, type ChatBubbleProps, ChatConversations, type ChatConversationsProps, Icon, Table, type TableProps, UbieConfigProvider, type UbieConfigProviderProps, businessFontFamily, businessFontSizes, businessLineHeights, businessTheme, businessTypography, notification, version, xNotification, xVersion };
|
|
281
376
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/UbieConfigProvider.tsx","../src/theme/businessTheme.ts","../src/components/Table/index.tsx","../src/components/ChatBubble/index.tsx","../src/components/ChatConversations/index.tsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/UbieConfigProvider.tsx","../src/theme/businessTheme.ts","../src/theme/businessTypography.ts","../src/components/Table/index.tsx","../src/components/ChatBubble/index.tsx","../src/components/ChatConversations/index.tsx"],"mappings":";;;;;;;;;;;;KAIY,uBAAA,GAA0B,mBAAA;;;;;iBAMtB,kBAAA,CAAA;EAAqB,QAAA;EAAA,GAAa;AAAA,GAAuB,uBAAA,GAAuB,oBAAA,CAAA,GAAA,CAAA,OAAA;;;;;;;;;;;cC8DnF,aAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cC/DA,kBAAA;;;;;;;;AFLb;;;;;AAMA;cEea,iBAAA;yGFf4D;EAAA,+BAAuB;EAAA,+BAA3D;EAAA,+BAAa;EAAA,+BAA8C;EAAA;;;;;;AC8DhG;;;cCzBa,mBAAA;EAAA;;;;;;;;;;;;;;;cAiBA,kBAAA;EAAA;;;;;;;;;;;;;;;;;;UCvDI,UAAA,cAAwB,MAAA,CAAO,WAAA,oBAA+B,IAAA,CAC7E,YAAA,CAAe,UAAA;;;;;EAOf,UAAA,IAAc,MAAA,EAAQ,UAAA,KAAe,SAAA;;EAErC,aAAA;;EAEA,kBAAA;EACA,GAAA,GAAM,GAAA,CAAI,QAAA;;AHlBZ;;;;;AAMA;EGoBE,OAAA,GAAU,YAAA,CAAe,UAAA;AAAA;;;;;;;;;;iBAyBlB,aAAA,2BAAA,CAAyC,KAAA,EAAO,UAAA,CAAW,UAAA,IAAW,oBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,KA0F1E,YAAA,GAAe,IAAA,QACX,OAAA;AAAA,cAWI,KAAA,SAAc,aAAA,GAAgB,YAAA;;;;;;UCjJ1B,kBAAA;;EAEf,KAAA;;EAEA,IAAA;;EAEA,IAAA,GAAO,SAAA;AAAA;AAAA,UAGQ,eAAA,qBACK,iBAAA,mBACZ,WAAA,CAAY,WAAA;EJnBV;;;;;EIyBV,QAAA,GAAW,kBAAA,GAAqB,kBAAA;EJnBA;;;;;;;EI2BhC,SAAA,YAAqB,IAAA;EJ3Bc;;;;EIgCnC,eAAA,IAAmB,IAAA,EAAM,IAAA;EJhCqE;;;;EIqC9F,OAAA;EHyBW;EGvBX,UAAA,GAAa,SAAA;;;;;;EAMb,GAAA,GAAM,GAAA,CAAI,SAAA;AAAA;;;;;;;;;iBAwCI,UAAA,qBAA+B,iBAAA,UAAA,CAAA;EAC7C,QAAA;EACA,SAAA;EACA,eAAA;EACA,OAAA;EACA,UAAA;EACA,MAAA;EACA,KAAA;EACA,GAAA;EAAA,GACG;AAAA,GACF,eAAA,CAAgB,WAAA,IAAY,oBAAA,CAAA,GAAA,CAAA,OAAA;;;UCrGd,sBAAA,SAA+B,kBAAA;;;;;;EAM9C,UAAA,GAAa,SAAA;;;;;EAKb,GAAA,GAAM,GAAA,CAAI,YAAA,QAAoB,aAAA;AAAA;ALXhC;;;;;AAMA;;;;AANA,iBKuBgB,iBAAA,CAAA;EAAoB,UAAA;EAAY,KAAA;EAAO,GAAA;EAAA,GAAQ;AAAA,GAAQ,sBAAA,GAAsB,oBAAA,CAAA,GAAA,CAAA,OAAA"}
|