@synopackageland/ui 0.25.11 → 0.25.13

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 CHANGED
@@ -2,6 +2,24 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.25.13 (2026-11-13)
6
+
7
+ ### Lists
8
+
9
+ - **DetailList: sub-rows inside an expanded DataGrid row.** Each line has a leading cell (a `Tag`), a text with a secondary text and trailing actions; the leading cells share one column as wide as the widest, and the list starts under the Name column's text. `max` shows that many lines and a summary line counts the rest ("3 more"), with its own leading, text and trailing slots for a "Show all" action. Under 448px wide the parts stack. Exported with its `DetailListItem` type
10
+ - **The DataGrid expand slot gets `indent`.** The pixels from the row's start to the first data column's text (past the chevron and checkbox columns), also set as `--ui-grid-detail-indent` on the expand row; `DataGridExpandSlotProps` is now exported
11
+
12
+ ### Docs
13
+
14
+ - `expandable.type: 'cell'` draws no chevron column and ignores double click; a cell slot opens the row with its `toggleExpand` prop. The type comment and README now say so
15
+
16
+ ## 0.25.12 (2026-11-12)
17
+
18
+ ### Phone
19
+
20
+ - **Back to the App list inside the Package Land phone app.** On a root page in the phone app (its bridge lists the `close` feature), the phone bar starts with a back arrow that asks the app to return to its App list; a browser, a sub-page and wider layouts never show it. When the page hides the bar, the first PageToolbar or SectionTabs row holds the button, so it costs no extra row; with no such row the bar is drawn for it. Apps need no change (docs/adaptive-layout.md)
21
+ - **A sub-page's Back draws the shared arrow** instead of a chevron, matching the phone app's Back, and both Back buttons tint while pressed
22
+
5
23
  ## 0.25.11 (2026-11-12)
6
24
 
7
25
  ### Phone layout
package/README.md CHANGED
@@ -548,7 +548,7 @@ DSM-style application building blocks:
548
548
  - SettingsPage / Form / FormItem / FormGroup / FormNote / InfoBox / FormActions / Fieldset (DSM-native settings structure, see [docs/layout-rules.md](docs/layout-rules.md))
549
549
  - Callout (see [docs/callout.md](docs/callout.md) for when to use a Callout, a toast or an inline note) / EmptyState / StepList
550
550
  - ConnectionTopology
551
- - DataTable / DataGrid
551
+ - DataTable / DataGrid / DetailList (sub-rows inside an expanded DataGrid row)
552
552
  - TreeView
553
553
  - FilePicker
554
554
  - AppRoot (DSM-embedded app root)
@@ -903,6 +903,20 @@ for one column.
903
903
  - **Selection.** The header box selects every selectable row of its scope: the current page (`select-all-scope="page"`, the default) or every row the filter leaves, across pages (`"all"`). It is checked when all of them are selected, mixed (`aria-checked="mixed"`, a dash) when some are, and a click when all are clears them; keys outside the scope (another page, rows the filter hides) are kept. `row-selectable(row)` returning `false` disables a row's box, and the header box skips that row and keeps its state. `row-select-disabled-reason(row)` says why: the box is wrapped in a Tab stop with that text as its accessible name and as a `Tooltip`, so the reason is visible on hover and keyboard focus, not only in a native `title`. With no selectable row the header box is disabled.
904
904
  - **Footer bar.** `footer` shows the DSM bar with the item count; `refreshable` adds the refresh button (`@refresh`, `refreshing` spins it). Without `footer` it appears when there is more than one page, a page-size choice that matters, or a `#footer` slot.
905
905
  - **Localisation.** Every built-in string goes through `labels`: `empty`, `noMatch`, `items(count)`, `filtered(count, total)`, `page(page, count)`, `previous`, `next`, `pageSize`, `refresh`, `selectAll`, `selectRow(key, row)`, `resizeColumn(label)`, `columns`, `resetColumns`, `hiddenByWidth`. `emptyText` still works.
906
+ - **Expanded rows.** `:expandable="{ type: 'row' }"` adds a chevron column (double click toggles too) and renders the `#expand` slot under an open row; bind `v-model:expanded-keys` or call the exposed `expandRow` / `collapseRow` / `expandAllRows`. `type: 'cell'` draws no chevron column and ignores double click: a `#cell-<key>` slot opens the row itself with its `toggleExpand` and `expanded` props, so give that control an `aria-expanded`. The slot gets `indent`, the pixels to the first data column's text, also set as `--ui-grid-detail-indent` on the expand row.
907
+ - **Detail rows.** For sub-rows in that slot (the copies of a file, the members of a group) use `DetailList`: it starts under the Name column's text, puts each line's `#leading` (a `Tag`) in a column as wide as the widest, then the item's `text` and `secondary` (or the default slot), then `#trailing` actions (an `IconButton` with a `label`, or a `variant="text"` Button). `max` shows that many lines and a summary line counts the rest ("3 more", or `summary` / `#summary`); `#summary-leading` and `#summary-trailing` fill that line, for example a "Show all 20 copies" button that opens a `Sheet`. A `#summary` slot keeps the line even when nothing is hidden. Under 448px the lead, text and actions stack.
908
+
909
+ ```vue
910
+ <DataGrid :columns="columns" :rows="files" selectable :expandable="{ type: 'row' }">
911
+ <template #expand="{ row }">
912
+ <DetailList :items="row.copies" :max="5" :label="`Copies of ${row.name}`">
913
+ <template #leading="{ item }"><Tag :label="item.role" :appearance="item.role === 'Keep' ? 'success' : 'warning'" /></template>
914
+ <template #trailing="{ item }"><Button variant="text" @click="toggle(item)">Keep</Button></template>
915
+ <template #summary-trailing><Button variant="text" @click="showAll(row)">Show all {{ row.copies.length }} copies</Button></template>
916
+ </DetailList>
917
+ </template>
918
+ </DataGrid>
919
+ ```
906
920
  - **Loading.** `loading` masks the table with a centred indicator; `loading-text` adds a message.
907
921
  - **Footer layout.** The footer has top and bottom divider lines and a separator
908
922
  before Refresh. In a flex column with a bounded height, the grid fills the
@@ -0,0 +1,8 @@
1
+ type __VLS_Props = {
2
+ size?: number;
3
+ };
4
+ declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
5
+ size: number;
6
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,9 @@
1
+ declare const _default: {
2
+ "name": "back-arrow",
3
+ "size": 24,
4
+ "stroke": 1.75,
5
+ "lines": [[5, 12, 19, 12], [5, 12, 11, 6], [5, 12, 11, 18]]
6
+ }
7
+ ;
8
+
9
+ export default _default;
@@ -0,0 +1,23 @@
1
+ import { ComputedRef, InjectionKey, Ref } from 'vue';
2
+ /**
3
+ * Back to the phone app's App list (docs/mobile-native.md, "Back to the App
4
+ * list"). On a root page AppLayout leads its phone bar with it. When that bar
5
+ * is not drawn (a tab page with `phone-bar-title="none"` and nothing else in
6
+ * the bar), the page's first row takes it instead: the first PageToolbar,
7
+ * SectionTabs row or PageHeader in the page, in document order, so it costs
8
+ * no row of its own. With no such row the bar is drawn for it.
9
+ */
10
+ export interface ShellBackHost {
11
+ /** The page's first row should lead with Back. */
12
+ readonly wanted: Readonly<Ref<boolean>>;
13
+ /** The row that holds Back now (its registration), if any. */
14
+ readonly owner: Readonly<Ref<symbol | undefined>>;
15
+ /** Registers a row by a stable key, so a row whose element changes keeps its turn. */
16
+ register(key: symbol, element: () => HTMLElement | null | undefined): () => void;
17
+ refresh(): void;
18
+ }
19
+ export declare const APP_SHELL_BACK_KEY: InjectionKey<ShellBackHost>;
20
+ /** AppLayout's side: the rows that could hold Back, and the one that does. */
21
+ export declare function createShellBackHost(wanted: Readonly<Ref<boolean>>): ShellBackHost;
22
+ /** A row's side: true while this row leads with Back. */
23
+ export declare function useShellBackRow(element: () => HTMLElement | null | undefined): ComputedRef<boolean>;
@@ -1,8 +1,8 @@
1
- declare var __VLS_1: {}, __VLS_3: {};
1
+ declare var __VLS_6: {}, __VLS_8: {};
2
2
  type __VLS_Slots = {} & {
3
- default?: (props: typeof __VLS_1) => any;
3
+ default?: (props: typeof __VLS_6) => any;
4
4
  } & {
5
- actions?: (props: typeof __VLS_3) => any;
5
+ actions?: (props: typeof __VLS_8) => any;
6
6
  };
7
7
  declare const __VLS_base: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
8
8
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -31,15 +31,15 @@ type __VLS_Props = {
31
31
  /** On a phone's section list, whether the selected section is pushed (`v-model:pushed`). */
32
32
  pushed?: boolean;
33
33
  };
34
- declare var __VLS_8: {}, __VLS_35: {}, __VLS_44: `panel-${string}`, __VLS_45: {}, __VLS_48: `panel-${string}`, __VLS_49: {};
34
+ declare var __VLS_8: {}, __VLS_42: {}, __VLS_51: `panel-${string}`, __VLS_52: {}, __VLS_55: `panel-${string}`, __VLS_56: {};
35
35
  type __VLS_Slots = {} & {
36
- [K in NonNullable<typeof __VLS_44>]?: (props: typeof __VLS_45) => any;
36
+ [K in NonNullable<typeof __VLS_51>]?: (props: typeof __VLS_52) => any;
37
37
  } & {
38
- [K in NonNullable<typeof __VLS_48>]?: (props: typeof __VLS_49) => any;
38
+ [K in NonNullable<typeof __VLS_55>]?: (props: typeof __VLS_56) => any;
39
39
  } & {
40
40
  actions?: (props: typeof __VLS_8) => any;
41
41
  } & {
42
- actions?: (props: typeof __VLS_35) => any;
42
+ actions?: (props: typeof __VLS_42) => any;
43
43
  };
44
44
  declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
45
45
  "update:modelValue": (value: string) => any;
@@ -63,7 +63,11 @@ export type DataGridGroup = {
63
63
  compare?: (a: unknown, b: unknown) => number;
64
64
  };
65
65
  export type DataGridExpandable = {
66
- /** `row` toggles on double click as well; `cell` needs the chevron button only. */
66
+ /**
67
+ * `row` (default) adds a chevron column and toggles on double click as well.
68
+ * `cell` draws no chevron column and ignores double click: a cell slot
69
+ * toggles the row itself with its `toggleExpand` and `expanded` props.
70
+ */
67
71
  type?: 'row' | 'cell';
68
72
  /** Slot name of the expanded content; defaults to `expand`. */
69
73
  slot?: string;
@@ -129,6 +133,12 @@ export type DataGridSelectionSlotProps = {
129
133
  export type DataGridExpandSlotProps = {
130
134
  row: Record<string, unknown>;
131
135
  index: number;
136
+ /**
137
+ * Pixels from the row's start to the text of the first data column (the
138
+ * Name column). The expand row also sets it as `--ui-grid-detail-indent`,
139
+ * which `DetailList` follows.
140
+ */
141
+ indent: number;
132
142
  };
133
143
  export type { DataGridLabels } from './labels';
134
144
  export type { ResolvedDataGridLabels } from './labels';
@@ -0,0 +1,54 @@
1
+ import { DetailListItem } from './types';
2
+ declare const __VLS_export: <T extends DetailListItem>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
3
+ props: import('vue').PublicProps & __VLS_PrettifyLocal<{
4
+ items: T[];
5
+ /** Show at most this many lines; the rest are counted on the summary line. */
6
+ max?: number;
7
+ /** Text of the summary line; defaults to "{count} more" when lines are hidden. */
8
+ summary?: string;
9
+ /** Accessible name of the list, e.g. "Copies of ubuntu.iso". */
10
+ label?: string;
11
+ /** Width of the leading column, e.g. `120px`; defaults to the widest leading cell. */
12
+ leadingWidth?: string;
13
+ }> & (typeof globalThis extends {
14
+ __VLS_PROPS_FALLBACK: infer P;
15
+ } ? P : {});
16
+ expose: (exposed: {}) => void;
17
+ attrs: any;
18
+ slots: {
19
+ leading?: (props: {
20
+ item: T;
21
+ index: number;
22
+ }) => unknown;
23
+ default?: (props: {
24
+ item: T;
25
+ index: number;
26
+ }) => unknown;
27
+ trailing?: (props: {
28
+ item: T;
29
+ index: number;
30
+ }) => unknown;
31
+ 'summary-leading'?: (props: {
32
+ hidden: T[];
33
+ count: number;
34
+ }) => unknown;
35
+ summary?: (props: {
36
+ hidden: T[];
37
+ count: number;
38
+ }) => unknown;
39
+ 'summary-trailing'?: (props: {
40
+ hidden: T[];
41
+ count: number;
42
+ }) => unknown;
43
+ };
44
+ emit: {};
45
+ }>) => import('vue').VNode & {
46
+ __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
47
+ };
48
+ declare const _default: typeof __VLS_export;
49
+ export default _default;
50
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
51
+ [K in keyof T]: T[K];
52
+ } : {
53
+ [K in keyof T as K]: T[K];
54
+ }) & {};
@@ -0,0 +1,8 @@
1
+ /** One line of a DetailList; `key` must be unique in the list. */
2
+ export type DetailListItem = {
3
+ key: string | number;
4
+ /** Main text, e.g. a path; a default slot replaces it. */
5
+ text?: string;
6
+ /** Quieter text after the main text, e.g. a date. */
7
+ secondary?: string;
8
+ };
package/dist/grid.js CHANGED
@@ -3952,6 +3952,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
3952
3952
  "Free now {now}, free after {after}": "Free now {now}, free after {after}",
3953
3953
  Sections: "Sections",
3954
3954
  "Back to the previous page": "Back",
3955
+ "Back to the App list": "Back to apps",
3955
3956
  "Page actions": "Page actions",
3956
3957
  Slider: "Slider",
3957
3958
  "Increase value": "Increase value",
@@ -4083,6 +4084,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
4083
4084
  "Show password": "Show password",
4084
4085
  "Hide password": "Hide password",
4085
4086
  "Learn more": "Learn more",
4087
+ "{count} more": "{count} more",
4086
4088
  "Show less": "Show less",
4087
4089
  "Note:": "Note:",
4088
4090
  "Copy path": "Copy path",
@@ -4215,6 +4217,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
4215
4217
  "Free now {now}, free after {after}": "目前可用 {now},清理後可用 {after}",
4216
4218
  Sections: "區段",
4217
4219
  "Back to the previous page": "返回",
4220
+ "Back to the App list": "返回 App 列表",
4218
4221
  "Page actions": "頁面動作",
4219
4222
  Slider: "滑桿",
4220
4223
  "Increase value": "增加數值",
@@ -4346,6 +4349,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
4346
4349
  "Show password": "顯示密碼",
4347
4350
  "Hide password": "隱藏密碼",
4348
4351
  "Learn more": "了解更多",
4352
+ "{count} more": "還有 {count} 項",
4349
4353
  "Show less": "收合",
4350
4354
  "Note:": "附註:",
4351
4355
  "Copy path": "複製路徑",
@@ -4477,6 +4481,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
4477
4481
  "Free now {now}, free after {after}": "当前可用 {now},清理后可用 {after}",
4478
4482
  Sections: "区段",
4479
4483
  "Back to the previous page": "返回",
4484
+ "Back to the App list": "返回应用列表",
4480
4485
  "Page actions": "页面操作",
4481
4486
  Slider: "滑块",
4482
4487
  "Increase value": "增加数值",
@@ -4608,6 +4613,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
4608
4613
  "Show password": "显示密码",
4609
4614
  "Hide password": "隐藏密码",
4610
4615
  "Learn more": "了解更多",
4616
+ "{count} more": "还有 {count} 项",
4611
4617
  "Show less": "收起",
4612
4618
  "Note:": "注意:",
4613
4619
  "Copy path": "复制路径",
@@ -4739,6 +4745,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
4739
4745
  "Free now {now}, free after {after}": "現在の空き {now}、解放後の空き {after}",
4740
4746
  Sections: "セクション",
4741
4747
  "Back to the previous page": "戻る",
4748
+ "Back to the App list": "アプリ一覧に戻る",
4742
4749
  "Page actions": "ページの操作",
4743
4750
  Slider: "スライダー",
4744
4751
  "Increase value": "値を増やす",
@@ -4870,6 +4877,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
4870
4877
  "Show password": "パスワードを表示",
4871
4878
  "Hide password": "パスワードを隠す",
4872
4879
  "Learn more": "詳細",
4880
+ "{count} more": "ほか {count} 件",
4873
4881
  "Show less": "閉じる",
4874
4882
  "Note:": "注:",
4875
4883
  "Copy path": "パスをコピー",
@@ -5001,6 +5009,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
5001
5009
  "Free now {now}, free after {after}": "현재 여유 공간 {now}, 정리 후 여유 공간 {after}",
5002
5010
  Sections: "섹션",
5003
5011
  "Back to the previous page": "뒤로",
5012
+ "Back to the App list": "앱 목록으로 돌아가기",
5004
5013
  "Page actions": "페이지 작업",
5005
5014
  Slider: "슬라이더",
5006
5015
  "Increase value": "값 증가",
@@ -5132,6 +5141,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
5132
5141
  "Show password": "비밀번호 표시",
5133
5142
  "Hide password": "비밀번호 숨기기",
5134
5143
  "Learn more": "자세히 알아보기",
5144
+ "{count} more": "{count}개 더",
5135
5145
  "Show less": "간단히 보기",
5136
5146
  "Note:": "참고:",
5137
5147
  "Copy path": "경로 복사",
@@ -5263,6 +5273,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
5263
5273
  "Free now {now}, free after {after}": "Jetzt frei {now}, danach frei {after}",
5264
5274
  Sections: "Abschnitte",
5265
5275
  "Back to the previous page": "Zurück",
5276
+ "Back to the App list": "Zurück zu den Apps",
5266
5277
  "Page actions": "Seitenaktionen",
5267
5278
  Slider: "Schieberegler",
5268
5279
  "Increase value": "Wert erhöhen",
@@ -5394,6 +5405,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
5394
5405
  "Show password": "Passwort anzeigen",
5395
5406
  "Hide password": "Passwort verbergen",
5396
5407
  "Learn more": "Mehr erfahren",
5408
+ "{count} more": "{count} weitere",
5397
5409
  "Show less": "Weniger anzeigen",
5398
5410
  "Note:": "Hinweis:",
5399
5411
  "Copy path": "Pfad kopieren",
@@ -5525,6 +5537,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
5525
5537
  "Free now {now}, free after {after}": "Libre maintenant {now}, libre ensuite {after}",
5526
5538
  Sections: "Sections",
5527
5539
  "Back to the previous page": "Retour",
5540
+ "Back to the App list": "Retour aux applications",
5528
5541
  "Page actions": "Actions de la page",
5529
5542
  Slider: "Curseur",
5530
5543
  "Increase value": "Augmenter la valeur",
@@ -5656,6 +5669,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
5656
5669
  "Show password": "Afficher le mot de passe",
5657
5670
  "Hide password": "Masquer le mot de passe",
5658
5671
  "Learn more": "En savoir plus",
5672
+ "{count} more": "{count} de plus",
5659
5673
  "Show less": "Afficher moins",
5660
5674
  "Note:": "Remarque :",
5661
5675
  "Copy path": "Copier le chemin",
@@ -5787,6 +5801,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
5787
5801
  "Free now {now}, free after {after}": "Libre ahora {now}, libre después {after}",
5788
5802
  Sections: "Secciones",
5789
5803
  "Back to the previous page": "Atrás",
5804
+ "Back to the App list": "Volver a las aplicaciones",
5790
5805
  "Page actions": "Acciones de la página",
5791
5806
  Slider: "Control deslizante",
5792
5807
  "Increase value": "Aumentar valor",
@@ -5918,6 +5933,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
5918
5933
  "Show password": "Mostrar contraseña",
5919
5934
  "Hide password": "Ocultar contraseña",
5920
5935
  "Learn more": "Más información",
5936
+ "{count} more": "{count} más",
5921
5937
  "Show less": "Mostrar menos",
5922
5938
  "Note:": "Nota:",
5923
5939
  "Copy path": "Copiar ruta",
@@ -6049,6 +6065,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
6049
6065
  "Free now {now}, free after {after}": "Libero ora {now}, libero dopo {after}",
6050
6066
  Sections: "Sezioni",
6051
6067
  "Back to the previous page": "Indietro",
6068
+ "Back to the App list": "Torna alle app",
6052
6069
  "Page actions": "Azioni della pagina",
6053
6070
  Slider: "Cursore",
6054
6071
  "Increase value": "Aumenta valore",
@@ -6180,6 +6197,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
6180
6197
  "Show password": "Mostra password",
6181
6198
  "Hide password": "Nascondi password",
6182
6199
  "Learn more": "Scopri di più",
6200
+ "{count} more": "Altri {count}",
6183
6201
  "Show less": "Mostra meno",
6184
6202
  "Note:": "Nota:",
6185
6203
  "Copy path": "Copia percorso",
@@ -106,6 +106,7 @@ export declare const englishUiText: {
106
106
  readonly "Free now {now}, free after {after}": "Free now {now}, free after {after}";
107
107
  readonly Sections: "Sections";
108
108
  readonly "Back to the previous page": "Back";
109
+ readonly "Back to the App list": "Back to apps";
109
110
  readonly "Page actions": "Page actions";
110
111
  readonly Slider: "Slider";
111
112
  readonly "Increase value": "Increase value";
@@ -237,6 +238,7 @@ export declare const englishUiText: {
237
238
  readonly "Show password": "Show password";
238
239
  readonly "Hide password": "Hide password";
239
240
  readonly "Learn more": "Learn more";
241
+ readonly "{count} more": "{count} more";
240
242
  readonly "Show less": "Show less";
241
243
  readonly "Note:": "Note:";
242
244
  readonly "Copy path": "Copy path";
package/dist/index.d.ts CHANGED
@@ -176,7 +176,7 @@ export { isPicture, isUnsupportedPicture } from './lib/files';
176
176
  export type { FileItem, FileState } from './lib/files';
177
177
  export type { DataTableColumn } from './components/composite/data-table/DataTable.vue';
178
178
  export { default as DataGrid } from './components/composite/data-grid/DataGrid.vue';
179
- export type { DataGridColumn, DataGridColumnWidths, DataGridLabels, ResolvedDataGridLabels, DataGridSort, DataGridGroup, DataGridExpandable, DataGridDraggable, DataGridReorder, DataGridCellUpdate, DataGridAdapter, DataGridCellSlotProps } from './components/composite/data-grid/DataGrid.vue';
179
+ export type { DataGridColumn, DataGridColumnWidths, DataGridLabels, ResolvedDataGridLabels, DataGridSort, DataGridGroup, DataGridExpandable, DataGridDraggable, DataGridReorder, DataGridCellUpdate, DataGridAdapter, DataGridCellSlotProps, DataGridExpandSlotProps } from './components/composite/data-grid/DataGrid.vue';
180
180
  export type { TableColumnType, TableColumnAlign } from './components/composite/data-grid/columnType';
181
181
  export { loadGridState, saveGridState, type DataGridViewState } from './components/composite/data-grid/viewState';
182
182
  export { default as TreeView } from './components/composite/tree-view/TreeView.vue';
@@ -319,3 +319,5 @@ export { filePickerText } from './i18n/filePicker';
319
319
  export type { FilePickerText } from './i18n/filePicker';
320
320
  export { default as Link } from './components/primitives/link/Link.vue';
321
321
  export { default as KeyValueRow } from './components/composite/key-value-row/KeyValueRow.vue';
322
+ export { default as DetailList } from './components/composite/detail-list/DetailList.vue';
323
+ export type { DetailListItem } from './components/composite/detail-list/types';