@squadbase/vantage 0.6.2-dev1.42c4e48 → 0.6.2-dev1.51e401a
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/dist/{build-MFWRPYKW.js → build-U7GO26HR.js} +7 -7
- package/dist/{build-MFWRPYKW.js.map → build-U7GO26HR.js.map} +1 -1
- package/dist/{check-ZBIH422T.js → check-MRVAIHG5.js} +5 -5
- package/dist/{check-ZBIH422T.js.map → check-MRVAIHG5.js.map} +1 -1
- package/dist/chunk-2IAPIOPS.js +152 -0
- package/dist/chunk-2IAPIOPS.js.map +1 -0
- package/dist/chunk-3RJEOP3J.js +174 -0
- package/dist/chunk-3RJEOP3J.js.map +1 -0
- package/dist/chunk-77CISBMG.js +7581 -0
- package/dist/chunk-77CISBMG.js.map +1 -0
- package/dist/{chunk-V3LF7BE7.js → chunk-ANZLVSEP.js} +4 -5
- package/dist/chunk-ANZLVSEP.js.map +1 -0
- package/dist/{chunk-XQUSGIDG.js → chunk-CKWPK4RO.js} +10 -3
- package/dist/chunk-CKWPK4RO.js.map +1 -0
- package/dist/chunk-EG4PX726.js +678 -0
- package/dist/chunk-EG4PX726.js.map +1 -0
- package/dist/chunk-NZ5QIIG4.js +74 -0
- package/dist/chunk-NZ5QIIG4.js.map +1 -0
- package/dist/{chunk-7DZGJQ3P.js → chunk-PJ4SPXHS.js} +23 -6
- package/dist/chunk-PJ4SPXHS.js.map +1 -0
- package/dist/{chunk-OB6UBJXF.js → chunk-QNOX7WLZ.js} +127 -36
- package/dist/chunk-QNOX7WLZ.js.map +1 -0
- package/dist/{chunk-PXRX5PEC.js → chunk-ROHNXP7J.js} +73 -4
- package/dist/chunk-ROHNXP7J.js.map +1 -0
- package/dist/{chunk-CEXAQQ5W.js → chunk-S5MDTHH7.js} +180 -18
- package/dist/chunk-S5MDTHH7.js.map +1 -0
- package/dist/{chunk-IBGOCWJB.js → chunk-SDJTTMLK.js} +247 -86
- package/dist/chunk-SDJTTMLK.js.map +1 -0
- package/dist/{chunk-QEWCYW3I.js → chunk-SHZM3EXB.js} +29 -8
- package/dist/chunk-SHZM3EXB.js.map +1 -0
- package/dist/chunk-TRMHNMMZ.js +61 -0
- package/dist/chunk-TRMHNMMZ.js.map +1 -0
- package/dist/{chunk-A2UUGASH.js → chunk-U736PVHY.js} +2 -2
- package/dist/chunk-U736PVHY.js.map +1 -0
- package/dist/{chunk-JKLLFVEU.js → chunk-UWSQUHX6.js} +4 -99
- package/dist/chunk-UWSQUHX6.js.map +1 -0
- package/dist/cli.js +6 -6
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.js +8 -2
- package/dist/client/index.js.map +1 -1
- package/dist/components/index.d.ts +1617 -101
- package/dist/components/index.js +7 -4
- package/dist/delta-text-CbrOaW83.d.ts +17 -0
- package/dist/{dev-DCTOHQ6W.js → dev-O42JFQ64.js} +7 -7
- package/dist/{dev-DCTOHQ6W.js.map → dev-O42JFQ64.js.map} +1 -1
- package/dist/doc/index.d.ts +215 -2
- package/dist/doc/index.js +423 -5
- package/dist/doc/index.js.map +1 -1
- package/dist/{doctor-5E2VEZPK.js → doctor-YD3XAAOT.js} +5 -5
- package/dist/{doctor-5E2VEZPK.js.map → doctor-YD3XAAOT.js.map} +1 -1
- package/dist/format-DihQkL1N.d.ts +249 -0
- package/dist/markdown/index.js +1 -1
- package/dist/markdown/index.js.map +1 -1
- package/dist/query/index.js +2 -2
- package/dist/{routes-3SGAFDMC.js → routes-PVKNT777.js} +4 -4
- package/dist/{routes-3SGAFDMC.js.map → routes-PVKNT777.js.map} +1 -1
- package/dist/slide/index.d.ts +272 -1
- package/dist/slide/index.js +1025 -4
- package/dist/slide/index.js.map +1 -1
- package/dist/table/index.js +11 -8
- package/dist/table/index.js.map +1 -1
- package/dist/ui/index.d.ts +8 -2
- package/dist/ui/index.js +22 -112
- package/dist/ui/index.js.map +1 -1
- package/dist/{upgrade-DBBE6GIR.js → upgrade-6DT7ADRP.js} +4 -4
- package/dist/{upgrade-DBBE6GIR.js.map → upgrade-6DT7ADRP.js.map} +1 -1
- package/dist/vite/index.js +3 -3
- package/docs/en/agent-skills.md +1 -1
- package/docs/en/changelog.md +2 -0
- package/docs/en/components.md +42 -17
- package/docs/en/doc/delta-text.md +40 -0
- package/docs/en/doc/doc-action-items.md +49 -0
- package/docs/en/doc/doc-callout.md +38 -0
- package/docs/en/doc/doc-data-table.md +60 -0
- package/docs/en/doc/doc-executive-summary.md +64 -0
- package/docs/en/doc/doc-figure.md +56 -0
- package/docs/en/doc/doc-key-findings.md +61 -0
- package/docs/en/doc/doc-kpi-scorecard.md +80 -0
- package/docs/en/doc/doc-notes-and-sources.md +43 -0
- package/docs/en/doc/doc-report-header.md +46 -0
- package/docs/en/pages-and-metadata.md +15 -0
- package/docs/en/parts/area-chart.md +99 -0
- package/docs/en/parts/bar-chart.md +91 -0
- package/docs/en/parts/bar-list.md +50 -0
- package/docs/en/parts/category-bar.md +37 -0
- package/docs/en/parts/chart-frame.md +39 -0
- package/docs/en/parts/data-table.md +22 -0
- package/docs/en/parts/delta.md +51 -0
- package/docs/en/parts/donut-chart.md +72 -0
- package/docs/en/parts/format.md +43 -0
- package/docs/en/parts/funnel-steps.md +2 -1
- package/docs/en/parts/heatmap.md +53 -0
- package/docs/en/parts/kpi-card.md +58 -0
- package/docs/en/parts/legend.md +35 -0
- package/docs/en/parts/line-chart.md +94 -0
- package/docs/en/parts/metric-value.md +3 -2
- package/docs/en/parts/progress-circle.md +33 -0
- package/docs/en/parts/sample-data.md +39 -0
- package/docs/en/parts/scatter-chart.md +56 -0
- package/docs/en/parts/sparkline.md +1 -1
- package/docs/en/parts/tracker.md +36 -0
- package/docs/en/parts/trend-indicator.md +17 -1
- package/docs/en/parts/updated-at.md +30 -0
- package/docs/en/parts/waterfall-chart.md +56 -0
- package/docs/en/slide/slide-chart-full.md +48 -0
- package/docs/en/slide/slide-chart-insight.md +52 -0
- package/docs/en/slide/slide-columns.md +46 -0
- package/docs/en/slide/slide-comparison.md +68 -0
- package/docs/en/slide/slide-cover.md +39 -0
- package/docs/en/slide/slide-exec-summary.md +47 -0
- package/docs/en/slide/slide-heading.md +38 -0
- package/docs/en/slide/slide-kpi-grid.md +55 -0
- package/docs/en/slide/slide-kpi-hero.md +58 -0
- package/docs/en/slide/slide-next-actions.md +49 -0
- package/docs/en/slide/slide-scorecard-table.md +54 -0
- package/docs/en/slide/slide-section.md +44 -0
- package/docs/en/slide/slide-source-line.md +34 -0
- package/docs/en/ui/alert-dialog.md +42 -0
- package/docs/en/ui/avatar.md +31 -0
- package/docs/en/ui/combobox.md +74 -0
- package/docs/en/ui/drawer.md +41 -0
- package/docs/en/ui/empty.md +1 -1
- package/docs/en/ui/error-state.md +4 -3
- package/docs/en/ui/field.md +42 -0
- package/docs/en/ui/hover-card.md +21 -0
- package/docs/en/ui/kbd.md +17 -0
- package/docs/en/ui/loading.md +1 -1
- package/docs/en/ui/pagination.md +36 -0
- package/docs/en/ui/radio-group.md +21 -0
- package/docs/en/ui/toast.md +44 -0
- package/docs/en/ui/toggle-group.md +4 -3
- package/docs/en/ui-and-theming.md +1 -1
- package/docs/index.json +917 -77
- package/docs/ja/agent-skills.md +1 -1
- package/docs/ja/changelog.md +2 -0
- package/docs/ja/components.md +39 -16
- package/docs/ja/doc/delta-text.md +40 -0
- package/docs/ja/doc/doc-action-items.md +49 -0
- package/docs/ja/doc/doc-callout.md +38 -0
- package/docs/ja/doc/doc-data-table.md +60 -0
- package/docs/ja/doc/doc-executive-summary.md +64 -0
- package/docs/ja/doc/doc-figure.md +56 -0
- package/docs/ja/doc/doc-key-findings.md +61 -0
- package/docs/ja/doc/doc-kpi-scorecard.md +80 -0
- package/docs/ja/doc/doc-notes-and-sources.md +43 -0
- package/docs/ja/doc/doc-report-header.md +46 -0
- package/docs/ja/page-types/slide.md +1 -0
- package/docs/ja/pages-and-metadata.md +15 -0
- package/docs/ja/parts/area-chart.md +49 -25
- package/docs/ja/parts/bar-chart.md +50 -24
- package/docs/ja/parts/bar-list.md +31 -8
- package/docs/ja/parts/chart-frame.md +36 -0
- package/docs/ja/parts/data-table.md +22 -0
- package/docs/ja/parts/delta.md +51 -0
- package/docs/ja/parts/donut-chart.md +45 -26
- package/docs/ja/parts/format.md +44 -0
- package/docs/ja/parts/funnel-steps.md +27 -8
- package/docs/ja/parts/heatmap.md +45 -0
- package/docs/ja/parts/kpi-card.md +56 -0
- package/docs/ja/parts/legend.md +36 -0
- package/docs/ja/parts/line-chart.md +48 -22
- package/docs/ja/parts/metric-value.md +3 -2
- package/docs/ja/parts/sample-data.md +61 -0
- package/docs/ja/parts/scatter-chart.md +69 -0
- package/docs/ja/parts/sparkline.md +1 -1
- package/docs/ja/parts/trend-indicator.md +17 -1
- package/docs/ja/parts/updated-at.md +27 -0
- package/docs/ja/parts/waterfall-chart.md +61 -0
- package/docs/ja/slide/slide-chart-full.md +48 -0
- package/docs/ja/slide/slide-chart-insight.md +52 -0
- package/docs/ja/slide/slide-columns.md +46 -0
- package/docs/ja/slide/slide-comparison.md +68 -0
- package/docs/ja/slide/slide-cover.md +39 -0
- package/docs/ja/slide/slide-exec-summary.md +47 -0
- package/docs/ja/slide/slide-heading.md +38 -0
- package/docs/ja/slide/slide-kpi-grid.md +55 -0
- package/docs/ja/slide/slide-kpi-hero.md +58 -0
- package/docs/ja/slide/slide-next-actions.md +49 -0
- package/docs/ja/slide/slide-scorecard-table.md +54 -0
- package/docs/ja/slide/slide-section.md +44 -0
- package/docs/ja/slide/slide-source-line.md +34 -0
- package/docs/ja/ui/empty.md +1 -1
- package/docs/ja/ui/error-state.md +4 -3
- package/docs/ja/ui/loading.md +1 -1
- package/docs/ja/ui/toggle-group.md +4 -3
- package/docs/ja/ui-and-theming.md +2 -2
- package/package.json +26 -24
- package/registry/ui/accordion.tsx +4 -2
- package/registry/ui/alert-dialog.tsx +3 -3
- package/registry/ui/alert.tsx +3 -1
- package/registry/ui/app-shell.tsx +145 -2
- package/registry/ui/area-chart.tsx +3111 -166
- package/registry/ui/attention-list.tsx +465 -0
- package/registry/ui/avatar.tsx +1 -1
- package/registry/ui/badge.tsx +3 -1
- package/registry/ui/bar-chart.tsx +3105 -164
- package/registry/ui/bar-list.tsx +3877 -181
- package/registry/ui/box-plot-chart.tsx +4214 -0
- package/registry/ui/breadcrumb.tsx +3 -1
- package/registry/ui/button.tsx +3 -1
- package/registry/ui/calendar.tsx +3 -1
- package/registry/ui/card.tsx +4 -2
- package/registry/ui/category-bar.tsx +1233 -16
- package/registry/ui/chart-frame.tsx +1604 -0
- package/registry/ui/checkbox.tsx +3 -1
- package/registry/ui/collapsible.tsx +3 -1
- package/registry/ui/combobox.tsx +2 -2
- package/registry/ui/command.tsx +3 -1
- package/registry/ui/dashboard-card.tsx +71 -28
- package/registry/ui/data-table.tsx +882 -68
- package/registry/ui/date-range-picker.tsx +400 -65
- package/registry/ui/delta.tsx +350 -0
- package/registry/ui/dialog.tsx +5 -3
- package/registry/ui/donut-chart.tsx +3184 -182
- package/registry/ui/drawer.tsx +1 -1
- package/registry/ui/dropdown-menu.tsx +5 -3
- package/registry/ui/echart.tsx +761 -69
- package/registry/ui/field.tsx +1 -1
- package/registry/ui/filter-bar.tsx +212 -26
- package/registry/ui/funnel-steps.tsx +3622 -53
- package/registry/ui/heatmap.tsx +2027 -0
- package/registry/ui/histogram-chart.tsx +4284 -0
- package/registry/ui/hover-card.tsx +2 -2
- package/registry/ui/input-group.tsx +3 -1
- package/registry/ui/input.tsx +3 -1
- package/registry/ui/kbd.tsx +3 -1
- package/registry/ui/kpi-card.tsx +905 -0
- package/registry/ui/label.tsx +3 -1
- package/registry/ui/legend.tsx +3817 -0
- package/registry/ui/line-chart.tsx +3109 -158
- package/registry/ui/metric-value.tsx +9 -1
- package/registry/ui/multi-select.tsx +170 -14
- package/registry/ui/page-shell.tsx +244 -51
- package/registry/ui/pagination.tsx +3 -1
- package/registry/ui/paired-chart.tsx +4086 -0
- package/registry/ui/placeholder.tsx +8 -2
- package/registry/ui/popover.tsx +4 -2
- package/registry/ui/progress-circle.tsx +773 -12
- package/registry/ui/progress.tsx +3 -1
- package/registry/ui/radio-group.tsx +1 -1
- package/registry/ui/sample-data.tsx +230 -0
- package/registry/ui/scatter-chart.tsx +4503 -0
- package/registry/ui/scroll-area.tsx +3 -2
- package/registry/ui/searchable-select.tsx +153 -10
- package/registry/ui/section-header.tsx +5 -3
- package/registry/ui/segmented-control.tsx +7 -2
- package/registry/ui/select.tsx +4 -2
- package/registry/ui/separator.tsx +3 -1
- package/registry/ui/sheet.tsx +4 -2
- package/registry/ui/sidebar.tsx +4 -2
- package/registry/ui/skeleton.tsx +4 -2
- package/registry/ui/slider.tsx +4 -2
- package/registry/ui/sparkline.tsx +84 -9
- package/registry/ui/spinner.tsx +3 -1
- package/registry/ui/states.tsx +194 -8
- package/registry/ui/status-badge.tsx +246 -39
- package/registry/ui/switch.tsx +3 -1
- package/registry/ui/table.tsx +4 -2
- package/registry/ui/tabs.tsx +5 -3
- package/registry/ui/textarea.tsx +3 -1
- package/registry/ui/toast.tsx +2 -2
- package/registry/ui/toggle-group.tsx +3 -1
- package/registry/ui/toggle.tsx +3 -1
- package/registry/ui/tooltip.tsx +10 -4
- package/registry/ui/tracker.tsx +798 -19
- package/registry/ui/trend-indicator.tsx +164 -9
- package/registry/ui/updated-at.tsx +276 -0
- package/registry/ui/waterfall-chart.tsx +4561 -0
- package/skills/vantage-add-feature/SKILL.md +5 -0
- package/skills/vantage-design/SKILL.md +60 -52
- package/skills/vantage-design/references/extract.md +26 -27
- package/skills/vantage-design/references/format.md +12 -172
- package/skills/vantage-design/references/presets.md +50 -110
- package/skills/vantage-pitfalls/SKILL.md +5 -0
- package/skills/vantage-slide/SKILL.md +54 -36
- package/templates/AGENTS.md +45 -16
- package/templates/agents/api.md +7 -0
- package/templates/agents/doc.md +48 -0
- package/templates/agents/page.md +69 -2
- package/templates/agents/slide.md +77 -3
- package/theme.css +247 -149
- package/dist/chunk-5ZOP4SQR.js +0 -47
- package/dist/chunk-5ZOP4SQR.js.map +0 -1
- package/dist/chunk-7DZGJQ3P.js.map +0 -1
- package/dist/chunk-A2UUGASH.js.map +0 -1
- package/dist/chunk-AG6RZ2RR.js +0 -3208
- package/dist/chunk-AG6RZ2RR.js.map +0 -1
- package/dist/chunk-CEXAQQ5W.js.map +0 -1
- package/dist/chunk-IBGOCWJB.js.map +0 -1
- package/dist/chunk-JKLLFVEU.js.map +0 -1
- package/dist/chunk-OB6UBJXF.js.map +0 -1
- package/dist/chunk-PXRX5PEC.js.map +0 -1
- package/dist/chunk-QEWCYW3I.js.map +0 -1
- package/dist/chunk-V3LF7BE7.js.map +0 -1
- package/dist/chunk-XQUSGIDG.js.map +0 -1
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# SlideSection
|
|
2
|
+
|
|
3
|
+
> 章の区切りの 1 枚。章タイトルと、任意で目次。
|
|
4
|
+
|
|
5
|
+
章の区切りに置く 1 枚です。左に章タイトル、`items` を渡すと右に目次(番号つきの一覧)を出し、`current` の章を強調します。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { SlideSection } from "@squadbase/vantage/slide";
|
|
9
|
+
import type { SlideSectionProps } from "@squadbase/vantage/slide";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> これは **`<Slide>` 1 枚の中身**です。`<Slide>` 自体は持たないので、`<Slide>` の直下に置いてください。ルートはキャンバス(1920×1080)いっぱい(100%)に広がり、`className` は受けません。余白・文字サイズ・グリッドは block の中で決まっている(1920×1080 の 12 カラム)ので、寸法を足さないでください。デッキの組み方は [スライド](page-types/slide) を参照してください。
|
|
14
|
+
|
|
15
|
+
## props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | 説明 |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `title` | `string` | 章のタイトル。**必須**。 |
|
|
20
|
+
| `index` | `number` | 章番号。タイトルの上に「02」のように 2 桁で出る。 |
|
|
21
|
+
| `lead` | `string` | その章が何に答えるかを 1 行で。 |
|
|
22
|
+
| `items` | `string[]` | デッキの章の一覧。右側に番号つきの目次として出る。1 行ずつなので 6 件ほどまで。省くとタイトルが全幅を使う。 |
|
|
23
|
+
| `current` | `number` | `items` のうち強調する章(1 始まり)。 |
|
|
24
|
+
|
|
25
|
+
## 使い方
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
import { Slide, SlideSection } from "@squadbase/vantage/slide";
|
|
29
|
+
|
|
30
|
+
<Slide>
|
|
31
|
+
<SlideSection
|
|
32
|
+
index={2}
|
|
33
|
+
title="解約の動向"
|
|
34
|
+
lead="どの層が、いつ離れているか"
|
|
35
|
+
items={["全体像", "解約の動向", "要因の分析", "次の打ち手"]}
|
|
36
|
+
current={2}
|
|
37
|
+
/>
|
|
38
|
+
</Slide>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## 注意
|
|
42
|
+
|
|
43
|
+
- 段階表示(reveal)は持ちません。必要なら呼び出し側で `Steps` などで包んでください。
|
|
44
|
+
- 目次に出る番号は `items` の順で自動採番されます。`index` は章番号の表示だけに使われます。
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# SlideSourceLine
|
|
2
|
+
|
|
3
|
+
> [部品] スライド 1 枚の足元の 1 行。時点・出典・ページ番号。
|
|
4
|
+
|
|
5
|
+
スライド 1 枚の足元に置く 1 行です。データの時点と出典、任意で右端にページ番号を出します。12 カラムのグリッドの最下段に置く**部品**で、1 枚まるごとの block ではありません。出すものがなければ何も描きません。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { SlideSourceLine } from "@squadbase/vantage/slide";
|
|
9
|
+
import type { SlideSourceLineProps } from "@squadbase/vantage/slide";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> これは **スライドの部品**で、1 枚まるごとの block ではありません。`<Slide>` 内の 12 カラムのグリッドの行として置きます(ルートはキャンバスいっぱい(100%×100%)には広がりません)。寸法はすべて部品の中で決まっているので、足さないでください。デッキの組み方は [スライド](page-types/slide) を参照してください。
|
|
14
|
+
|
|
15
|
+
## props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | 説明 |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `asOf` | `string` | 数字を取った日。日付のみ(例: `"2026-10-20"`)。「2026-10-20 時点」と表示される。「時点」は書かない。 |
|
|
20
|
+
| `source` | `string` | 出典(例: `"社内 BI"`)。「出典: 社内 BI」と表示される。 |
|
|
21
|
+
| `page` | `{ current: number; total: number }` | 右端に「3 / 12」と出すページ番号。呼び出し側から渡す。 |
|
|
22
|
+
|
|
23
|
+
## 使い方
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
import { SlideSourceLine } from "@squadbase/vantage/slide";
|
|
27
|
+
|
|
28
|
+
<SlideSourceLine asOf="2026-10-20" source="社内 BI" page={{ current: 3, total: 12 }} />
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 注意
|
|
32
|
+
|
|
33
|
+
- ページ番号は SquadKit がスライドの位置を読めないため、`page` で渡します。
|
|
34
|
+
- 「… 時点」「出典: …」は固定の日本語です。
|
package/docs/ja/ui/empty.md
CHANGED
|
@@ -10,7 +10,7 @@ import { Empty } from "@squadbase/vantage/ui";
|
|
|
10
10
|
|
|
11
11
|
| Prop | Type | Default | 説明 |
|
|
12
12
|
| --- | --- | --- | --- |
|
|
13
|
-
| `title` | `string` | `"
|
|
13
|
+
| `title` | `string` | `"表示できるデータがありません"` | 見出し。 |
|
|
14
14
|
| `description` | `string` | | 見出しの下の補足文。 |
|
|
15
15
|
| `icon` | `ReactNode` | | 見出しの上に置く絵柄。 |
|
|
16
16
|
| `action` | `ReactNode` | | 下部に置く次の一手(ボタンやリンク)。 |
|
|
@@ -10,8 +10,9 @@ import { ErrorState } from "@squadbase/vantage/ui";
|
|
|
10
10
|
|
|
11
11
|
| Prop | Type | Default | 説明 |
|
|
12
12
|
| --- | --- | --- | --- |
|
|
13
|
-
| `title` | `string` | `"
|
|
14
|
-
| `message` | `ReactNode` |
|
|
13
|
+
| `title` | `string` | `"データを読み込めませんでした"` | 見出し。 |
|
|
14
|
+
| `message` | `ReactNode` | `"時間をおいて再試行してください。解決しない場合は管理者にお問い合わせください。"` | 何が起きたか、次に何をすればよいかを平易な言葉で。 |
|
|
15
|
+
| `details` | `ReactNode` | | 技術的な詳細(エラーメッセージやステータスコード)。「詳細を表示」の中に折りたたまれます。 |
|
|
15
16
|
| `action` | `ReactNode` | | 再試行ボタンなど。 |
|
|
16
17
|
| `className` | `string` | | 足すクラス。 |
|
|
17
18
|
|
|
@@ -34,7 +35,7 @@ export default function Customers() {
|
|
|
34
35
|
if (error)
|
|
35
36
|
return (
|
|
36
37
|
<ErrorState
|
|
37
|
-
|
|
38
|
+
details={error.message}
|
|
38
39
|
action={<Button variant="outline" onClick={() => refetch()}>再試行</Button>}
|
|
39
40
|
/>
|
|
40
41
|
);
|
package/docs/ja/ui/loading.md
CHANGED
|
@@ -12,7 +12,7 @@ import { Loading } from "@squadbase/vantage/ui";
|
|
|
12
12
|
|
|
13
13
|
| Prop | Type | Default | 説明 |
|
|
14
14
|
| --- | --- | --- | --- |
|
|
15
|
-
| `label` | `string` | `"
|
|
15
|
+
| `label` | `string` | `"読み込んでいます…"` | スピナーの右に出すテキスト。 |
|
|
16
16
|
| `className` | `string` | | 足すクラス。既定では最小高 30vh で縦横中央に置かれます。 |
|
|
17
17
|
|
|
18
18
|
レイアウトを保ったまま待たせたいときは [`Skeleton`](ui/skeleton)、ボタンの中など
|
|
@@ -14,14 +14,15 @@ import { ToggleGroup, ToggleGroupItem } from "@squadbase/vantage/ui";
|
|
|
14
14
|
| --- | --- | --- | --- |
|
|
15
15
|
| `value` | `string[]` | | 選択中の値。**単一選択でも配列**。 |
|
|
16
16
|
| `onValueChange` | `(value: string[]) => void` | | 変更時。配列で返る。 |
|
|
17
|
-
| `
|
|
17
|
+
| `multiple` | `boolean` | `false` | `true` で複数選択を許す。 |
|
|
18
18
|
| `variant` | `"default" \| "outline"` | `"default"` | |
|
|
19
19
|
| `size` | `"default" \| "sm" \| "lg"` | `"default"` | |
|
|
20
20
|
| `spacing` | `number` | `2` | 項目の間隔。`0` で連結された帯になる。 |
|
|
21
21
|
| `orientation` | `"horizontal" \| "vertical"` | `"horizontal"` | |
|
|
22
22
|
|
|
23
23
|
> [!WARNING]
|
|
24
|
-
> Radix 版の `type="single"` / `type="multiple"`
|
|
25
|
-
>
|
|
24
|
+
> Radix 版の `type="single"` / `type="multiple"` はありません。代わりに boolean の `multiple` が
|
|
25
|
+
> あり、既定(`false`)では同時に押せるのは 1 つだけです。ただし単一選択でも `value` は長さ 1 以下
|
|
26
|
+
> の配列になります。その扱いは
|
|
26
27
|
> [`SegmentedControl`](parts/segmented-control) に入っているので、
|
|
27
28
|
> 単一選択ならそちらを使うのが確実です。
|
|
@@ -39,8 +39,8 @@ export default function Overview() {
|
|
|
39
39
|
|
|
40
40
|
`/components` にあるもの(抜粋): `PageShell`、`AppShell`、`DashboardCard`、`DataTable`、
|
|
41
41
|
型付きチャート(`LineChart` / `AreaChart` / `BarChart` / `DonutChart` / `BarList` / `CategoryBar` /
|
|
42
|
-
`ProgressCircle` / `Tracker`)、`EChart`、`FunnelSteps`、`FilterBar`、`DateRangePicker`、`
|
|
43
|
-
`
|
|
42
|
+
`ProgressCircle` / `Tracker`)、`EChart`、`FunnelSteps`、`FilterBar`、`DateRangePicker`、`KpiCard`、
|
|
43
|
+
`Delta`。グラフはまず型付きチャートで描き、その props で表せない図(二軸・散布図・
|
|
44
44
|
ヒートマップなど)だけ `EChart` に `EChartsOption` を渡します。
|
|
45
45
|
|
|
46
46
|
各コンポーネントの props と使い方は [コンポーネント](components) タブにまとめてあります。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@squadbase/vantage",
|
|
3
|
-
"version": "0.6.2-dev1.
|
|
3
|
+
"version": "0.6.2-dev1.51e401a",
|
|
4
4
|
"description": "Data dashboard framework for Squadbase Editor. Vite-powered, config-free, one-file first.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -99,25 +99,6 @@
|
|
|
99
99
|
"templates",
|
|
100
100
|
"NOTICE"
|
|
101
101
|
],
|
|
102
|
-
"scripts": {
|
|
103
|
-
"build": "node scripts/build-docs.mjs && node scripts/build.mjs",
|
|
104
|
-
"build:js": "tsup --no-dts",
|
|
105
|
-
"build:types": "tsup --dts-only",
|
|
106
|
-
"build:docs": "node scripts/build-docs.mjs",
|
|
107
|
-
"dev": "tsup --watch --no-dts",
|
|
108
|
-
"dev:types": "tsc --noEmit --watch",
|
|
109
|
-
"test": "vitest run",
|
|
110
|
-
"test:watch": "vitest",
|
|
111
|
-
"registry": "node scripts/gen-registry.mjs",
|
|
112
|
-
"registry:check": "node scripts/gen-registry.mjs --check",
|
|
113
|
-
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.registry.json",
|
|
114
|
-
"type-check": "tsc --noEmit && tsc --noEmit -p tsconfig.registry.json",
|
|
115
|
-
"prepublishOnly": "node scripts/build-docs.mjs && node scripts/build.mjs",
|
|
116
|
-
"release": "npm publish --@squadbase:registry=https://registry.npmjs.org",
|
|
117
|
-
"site:install": "npm --prefix site install",
|
|
118
|
-
"site:dev": "npm --prefix site run dev",
|
|
119
|
-
"site:build": "npm --prefix site run build"
|
|
120
|
-
},
|
|
121
102
|
"dependencies": {
|
|
122
103
|
"@base-ui/react": "^1.6.0",
|
|
123
104
|
"@hono/node-server": "^2.1.5",
|
|
@@ -132,7 +113,7 @@
|
|
|
132
113
|
"cmdk": "^1.1.1",
|
|
133
114
|
"date-fns": "^4.1.0",
|
|
134
115
|
"echarts": "^6.0.0",
|
|
135
|
-
"esbuild": "
|
|
116
|
+
"esbuild": "0.28.1",
|
|
136
117
|
"fflate": "^0.8.3",
|
|
137
118
|
"hono": "^4.13.13",
|
|
138
119
|
"html-to-image": "^1.11.13",
|
|
@@ -141,8 +122,9 @@
|
|
|
141
122
|
"picocolors": "^1.1.1",
|
|
142
123
|
"react-day-picker": "^10.0.1",
|
|
143
124
|
"read-excel-file": "^9.3.10",
|
|
125
|
+
"shiki": "3.23.0",
|
|
144
126
|
"streamdown": "^2.5.0",
|
|
145
|
-
"tailwind-merge": "
|
|
127
|
+
"tailwind-merge": "3.6.0",
|
|
146
128
|
"tailwindcss": "^4.3.3",
|
|
147
129
|
"tw-animate-css": "^1.0.0",
|
|
148
130
|
"vite": "^8.3.4"
|
|
@@ -167,6 +149,26 @@
|
|
|
167
149
|
"react-dom": "^19.3.1",
|
|
168
150
|
"tsup": "^8.5.1",
|
|
169
151
|
"typescript": "^5.7.0",
|
|
170
|
-
"vitest": "^5.0.5"
|
|
152
|
+
"vitest": "^5.0.5",
|
|
153
|
+
"@squadbase/squadkit": "0.0.0"
|
|
154
|
+
},
|
|
155
|
+
"gitHead": "51e401a7d56dedb01b1dc3061d24eb4398b03062",
|
|
156
|
+
"scripts": {
|
|
157
|
+
"build": "node scripts/build-docs.mjs && node scripts/build.mjs",
|
|
158
|
+
"build:js": "tsup --no-dts",
|
|
159
|
+
"build:types": "tsup --dts-only",
|
|
160
|
+
"build:docs": "node scripts/build-docs.mjs",
|
|
161
|
+
"dev": "tsup --watch --no-dts",
|
|
162
|
+
"dev:types": "tsc --noEmit --watch",
|
|
163
|
+
"test": "vitest run",
|
|
164
|
+
"test:watch": "vitest",
|
|
165
|
+
"registry": "node scripts/gen-registry.mjs",
|
|
166
|
+
"registry:check": "node scripts/gen-registry.mjs --check",
|
|
167
|
+
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.registry.json",
|
|
168
|
+
"type-check": "tsc --noEmit && tsc --noEmit -p tsconfig.registry.json",
|
|
169
|
+
"release": "pnpm publish --@squadbase:registry=https://registry.npmjs.org",
|
|
170
|
+
"site:install": "npm --prefix site install",
|
|
171
|
+
"site:dev": "npm --prefix site run dev",
|
|
172
|
+
"site:build": "npm --prefix site run build"
|
|
171
173
|
}
|
|
172
|
-
}
|
|
174
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Copied by `vantage add ui accordion`. This file is yours to edit.
|
|
2
|
-
// Generated from @squadbase/
|
|
2
|
+
// Generated from @squadbase/squadkit registry/ui/accordion.tsx by `pnpm run registry` (in Vantage, edit packages/squadkit, not registry/).
|
|
3
|
+
"use client"
|
|
4
|
+
|
|
3
5
|
import { Accordion as AccordionPrimitive } from "@base-ui/react/accordion"
|
|
4
6
|
|
|
5
7
|
import { cn } from "@squadbase/vantage/ui"
|
|
@@ -56,7 +58,7 @@ function AccordionContent({
|
|
|
56
58
|
return (
|
|
57
59
|
<AccordionPrimitive.Panel
|
|
58
60
|
data-slot="accordion-content"
|
|
59
|
-
className="overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up"
|
|
61
|
+
className="overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up motion-reduce:animate-none"
|
|
60
62
|
{...props}
|
|
61
63
|
>
|
|
62
64
|
<div
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Copied by `vantage add ui alert-dialog`. This file is yours to edit.
|
|
2
|
-
// Generated from @squadbase/
|
|
2
|
+
// Generated from @squadbase/squadkit registry/ui/alert-dialog.tsx by `pnpm run registry` (in Vantage, edit packages/squadkit, not registry/).
|
|
3
3
|
"use client"
|
|
4
4
|
|
|
5
5
|
import * as React from "react"
|
|
@@ -32,7 +32,7 @@ function AlertDialogOverlay({
|
|
|
32
32
|
<AlertDialogPrimitive.Backdrop
|
|
33
33
|
data-slot="alert-dialog-overlay"
|
|
34
34
|
className={cn(
|
|
35
|
-
"fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
|
|
35
|
+
"fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in motion-reduce:animate-none! data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
|
|
36
36
|
className
|
|
37
37
|
)}
|
|
38
38
|
{...props}
|
|
@@ -54,7 +54,7 @@ function AlertDialogContent({
|
|
|
54
54
|
data-slot="alert-dialog-content"
|
|
55
55
|
data-size={size}
|
|
56
56
|
className={cn(
|
|
57
|
-
"group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
57
|
+
"group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in motion-reduce:animate-none! data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
58
58
|
className
|
|
59
59
|
)}
|
|
60
60
|
{...props}
|
package/registry/ui/alert.tsx
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Copied by `vantage add ui alert`. This file is yours to edit.
|
|
2
|
-
// Generated from @squadbase/
|
|
2
|
+
// Generated from @squadbase/squadkit registry/ui/alert.tsx by `pnpm run registry` (in Vantage, edit packages/squadkit, not registry/).
|
|
3
|
+
"use client"
|
|
4
|
+
|
|
3
5
|
import * as React from "react"
|
|
4
6
|
import { cva, type VariantProps } from "class-variance-authority"
|
|
5
7
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Copied by `vantage add ui app-shell`. This file is yours to edit.
|
|
2
|
-
// Generated from @squadbase/
|
|
2
|
+
// Generated from @squadbase/squadkit registry/components/app-shell.tsx by `pnpm run registry` (in Vantage, edit packages/squadkit, not registry/).
|
|
3
|
+
"use client"
|
|
4
|
+
|
|
3
5
|
/**
|
|
4
6
|
* AppShell — the outermost application frame. `variant="sidebar"` (default)
|
|
5
7
|
* renders a collapsible sidebar with nested nav groups; `variant="header"`
|
|
@@ -42,6 +44,142 @@ import {
|
|
|
42
44
|
SidebarTrigger,
|
|
43
45
|
} from "@squadbase/vantage/ui"
|
|
44
46
|
import type { NavGroup, NavItem } from "@squadbase/vantage/components"
|
|
47
|
+
import { useSyncExternalStore } from "react"
|
|
48
|
+
|
|
49
|
+
/* ---------- inlined from @squadbase/squadkit registry/lib/locale.ts (internal to @squadbase/vantage) ---------- */
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The display language of the parts and the defaults that follow it.
|
|
53
|
+
*
|
|
54
|
+
* The language comes from `<html lang>`: a tag starting with `ja` reads Japanese, anything else English.
|
|
55
|
+
* Without a usable `lang` (missing, invalid, or no `document` — SSR, Node) the locale is `FALLBACK_LOCALE`
|
|
56
|
+
* (`en-US`). A `locale` passed explicitly (a prop, an argument) always wins.
|
|
57
|
+
*
|
|
58
|
+
* Parts read the locale through `useLocale` (`hooks/use-locale`) and pass it down; the pure helpers here
|
|
59
|
+
* and in `format` / `comparison` / `chart-*` take it as an argument and fall back to `documentLocale()`.
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
/** The language of the built-in wording: Japanese or English. */
|
|
63
|
+
type UiLanguage = "ja" | "en"
|
|
64
|
+
|
|
65
|
+
/** The locale used when `<html lang>` gives none (and on the server). */
|
|
66
|
+
const FALLBACK_LOCALE = "en-US"
|
|
67
|
+
|
|
68
|
+
/** `"ja"` when `locale` starts with `ja` (`ja`, `ja-JP`), else `"en"`. A missing locale is `"en"`. */
|
|
69
|
+
function uiLanguage(locale: string | null | undefined): UiLanguage {
|
|
70
|
+
return typeof locale === "string" && locale.trim().toLowerCase().startsWith("ja") ? "ja" : "en"
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** A BCP 47 tag in its canonical form (`en-gb` → `en-GB`), or `FALLBACK_LOCALE` when it is empty or invalid. */
|
|
74
|
+
function normalizeLocale(tag: string | null | undefined): string {
|
|
75
|
+
const value = tag?.trim()
|
|
76
|
+
if (!value) return FALLBACK_LOCALE
|
|
77
|
+
try {
|
|
78
|
+
return Intl.getCanonicalLocales(value)[0] ?? FALLBACK_LOCALE
|
|
79
|
+
} catch {
|
|
80
|
+
return FALLBACK_LOCALE
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The locale of the page: `document.documentElement.lang`, canonicalized. `FALLBACK_LOCALE` when it is empty or
|
|
86
|
+
* invalid, or there is no `document`. Parts read it through `useLocale`, never while rendering.
|
|
87
|
+
*/
|
|
88
|
+
function documentLocale(): string {
|
|
89
|
+
if (typeof document === "undefined") return FALLBACK_LOCALE
|
|
90
|
+
return normalizeLocale(document.documentElement?.getAttribute("lang"))
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** `locale` when given, else the page's locale (`documentLocale()`). */
|
|
94
|
+
function resolveLocale(locale?: string | null): string {
|
|
95
|
+
return locale || documentLocale()
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Picks the wording table of the locale's language. */
|
|
99
|
+
function pickLocale<T>(table: { ja: T; en: T }, locale?: string | null): T {
|
|
100
|
+
return table[uiLanguage(resolveLocale(locale))]
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** The currency `format="currency"` uses without a `currency`: JPY for Japanese, USD otherwise. */
|
|
104
|
+
function defaultCurrency(locale?: string | null): string {
|
|
105
|
+
return uiLanguage(resolveLocale(locale)) === "ja" ? "JPY" : "USD"
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** The month a fiscal year starts in (1–12) when none is given: April for Japanese, January otherwise. */
|
|
109
|
+
function defaultFiscalYearStartMonth(locale?: string | null): number {
|
|
110
|
+
return uiLanguage(resolveLocale(locale)) === "ja" ? 4 : 1
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** A day of the week, 0 = Sunday … 6 = Saturday (the `Date#getDay` / date-fns numbering). */
|
|
114
|
+
type WeekDay = 0 | 1 | 2 | 3 | 4 | 5 | 6
|
|
115
|
+
|
|
116
|
+
/** Locales whose week starts on Sunday when the runtime has no week data. */
|
|
117
|
+
const SUNDAY_FIRST = new Set(["en", "en-US", "en-CA"])
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* The first day of the week: Monday for Japanese; otherwise the locale's convention from `Intl.Locale`
|
|
121
|
+
* (`en-US` Sunday, `en-GB` Monday). Without week data in the runtime: Sunday for `en` / `en-US` / `en-CA`,
|
|
122
|
+
* Monday for the rest.
|
|
123
|
+
*/
|
|
124
|
+
function weekStartsOn(locale?: string | null): WeekDay {
|
|
125
|
+
const tag = normalizeLocale(resolveLocale(locale))
|
|
126
|
+
if (uiLanguage(tag) === "ja") return 1
|
|
127
|
+
try {
|
|
128
|
+
const info = new Intl.Locale(tag) as Intl.Locale & {
|
|
129
|
+
getWeekInfo?: () => { firstDay: number }
|
|
130
|
+
weekInfo?: { firstDay: number }
|
|
131
|
+
}
|
|
132
|
+
const firstDay = info.getWeekInfo?.().firstDay ?? info.weekInfo?.firstDay
|
|
133
|
+
if (typeof firstDay === "number" && firstDay >= 1 && firstDay <= 7) return (firstDay % 7) as WeekDay
|
|
134
|
+
} catch {
|
|
135
|
+
// Fall through to the table below.
|
|
136
|
+
}
|
|
137
|
+
return SUNDAY_FIRST.has(tag) ? 0 : 1
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/* ---------- inlined from @squadbase/squadkit registry/hooks/use-locale.ts (internal to @squadbase/vantage) ---------- */
|
|
141
|
+
|
|
142
|
+
const listeners = new Set<() => void>()
|
|
143
|
+
let observer: MutationObserver | null = null
|
|
144
|
+
|
|
145
|
+
/** One observer on `<html lang>` for every subscribed part. */
|
|
146
|
+
function subscribe(onChange: () => void): () => void {
|
|
147
|
+
if (typeof document === "undefined" || typeof MutationObserver === "undefined") return () => {}
|
|
148
|
+
listeners.add(onChange)
|
|
149
|
+
if (!observer) {
|
|
150
|
+
observer = new MutationObserver(() => {
|
|
151
|
+
for (const listener of [...listeners]) listener()
|
|
152
|
+
})
|
|
153
|
+
observer.observe(document.documentElement, { attributes: true, attributeFilter: ["lang"] })
|
|
154
|
+
}
|
|
155
|
+
return () => {
|
|
156
|
+
listeners.delete(onChange)
|
|
157
|
+
if (listeners.size === 0 && observer) {
|
|
158
|
+
observer.disconnect()
|
|
159
|
+
observer = null
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const serverLocale = () => FALLBACK_LOCALE
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* The page's locale (`<html lang>`), following changes made while the page runs. On the server and during
|
|
168
|
+
* hydration it is `FALLBACK_LOCALE` (`en-US`), so the markup matches; it switches right after.
|
|
169
|
+
*/
|
|
170
|
+
function useDocumentLocale(): string {
|
|
171
|
+
return useSyncExternalStore(subscribe, documentLocale, serverLocale)
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/** The locale a part renders in: its `locale` prop when given, else the page's (`useDocumentLocale`). */
|
|
175
|
+
function useLocale(locale?: string | null): string {
|
|
176
|
+
const page = useDocumentLocale()
|
|
177
|
+
return locale || page
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* ---------- end of inlined code ---------- */
|
|
181
|
+
|
|
182
|
+
const PAGE_PLACEHOLDER = { ja: "ページを選択", en: "Select a page" }
|
|
45
183
|
|
|
46
184
|
export interface AppShellSidebarProps {
|
|
47
185
|
variant?: "sidebar"
|
|
@@ -85,9 +223,14 @@ function NavSelect({
|
|
|
85
223
|
}) {
|
|
86
224
|
const allItems = groups.flatMap((g) => g.items.flatMap(flattenItems))
|
|
87
225
|
const currentValue = allItems.find((item) => item.isActive)?.href ?? ""
|
|
226
|
+
// Base UI's SelectValue renders the raw value (the href) unless `items` maps
|
|
227
|
+
// it to a label, so pass the page names explicitly.
|
|
228
|
+
const selectItems = allItems.map((item) => ({ value: item.href, label: item.label }))
|
|
229
|
+
const placeholder = PAGE_PLACEHOLDER[uiLanguage(useLocale())]
|
|
88
230
|
|
|
89
231
|
return (
|
|
90
232
|
<Select
|
|
233
|
+
items={selectItems}
|
|
91
234
|
value={currentValue}
|
|
92
235
|
onValueChange={(href) => {
|
|
93
236
|
// Base UI reports `null` when the selection is cleared; there is no
|
|
@@ -96,7 +239,7 @@ function NavSelect({
|
|
|
96
239
|
}}
|
|
97
240
|
>
|
|
98
241
|
<SelectTrigger size="sm" className="w-48">
|
|
99
|
-
<SelectValue placeholder=
|
|
242
|
+
<SelectValue placeholder={placeholder} />
|
|
100
243
|
</SelectTrigger>
|
|
101
244
|
{/*
|
|
102
245
|
Page titles are author-written and often longer than the 12rem trigger,
|