@svadmin/ui 0.70.0 → 0.73.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/README.md +40 -25
- package/THIRD_PARTY_NOTICES.md +52 -0
- package/dist/actions.js +1 -1
- package/dist/app.css +7804 -5188
- package/dist/app.theme.css +7738 -5173
- package/dist/class-properties.generated.d.ts +1 -0
- package/dist/class-properties.generated.js +2 -0
- package/dist/classnames.d.ts +8 -0
- package/dist/classnames.js +26 -0
- package/dist/component-registry.svelte.d.ts +33 -19
- package/dist/component-registry.svelte.js +6 -4
- package/dist/components/AdminApp.svelte +55 -53
- package/dist/components/AdminApp.svelte.d.ts +2 -2
- package/dist/components/ApiSettings.svelte +19 -1
- package/dist/components/AuditLogDrawer.svelte +14 -3
- package/dist/components/AutoForm.svelte +162 -50
- package/dist/components/AutoForm.svelte.d.ts +4 -0
- package/dist/components/AutoTable.svelte +599 -259
- package/dist/components/AutoTable.svelte.d.ts +6 -0
- package/dist/components/BoundRecordDetailDrawer.svelte +172 -0
- package/dist/components/BoundRecordDetailDrawer.svelte.d.ts +11 -0
- package/dist/components/Breadcrumbs.svelte +7 -4
- package/dist/components/CancelTaskButton.svelte +9 -5
- package/dist/components/ColumnHeaderFilter.svelte +4 -3
- package/dist/components/ColumnSettings.svelte +1 -0
- package/dist/components/ComboboxField.svelte +118 -36
- package/dist/components/ComboboxField.svelte.d.ts +5 -4
- package/dist/components/CreatePage.svelte +7 -1
- package/dist/components/CreatePage.svelte.d.ts +2 -0
- package/dist/components/DateRangeInput.svelte +75 -0
- package/dist/components/DateRangeInput.svelte.d.ts +25 -0
- package/dist/components/DateTimeInput.svelte +65 -0
- package/dist/components/DateTimeInput.svelte.d.ts +19 -0
- package/dist/components/DetailDrawer.svelte +4 -0
- package/dist/components/DetailDrawer.svelte.d.ts +1 -0
- package/dist/components/DevTools.svelte +8 -21
- package/dist/components/DraggableGrid.svelte +1 -0
- package/dist/components/DraggableHeader.svelte +5 -9
- package/dist/components/DraggableHeader.svelte.d.ts +43 -18
- package/dist/components/DraggableRowTable.svelte +2 -2
- package/dist/components/DynamicFormList.svelte +17 -17
- package/dist/components/DynamicFormList.svelte.d.ts +2 -1
- package/dist/components/EditPage.svelte +7 -1
- package/dist/components/EditPage.svelte.d.ts +2 -0
- package/dist/components/EditableTable.svelte +4 -0
- package/dist/components/ErrorPage.svelte +3 -1
- package/dist/components/FieldDisplay.svelte +14 -0
- package/dist/components/FieldDisplay.svelte.d.ts +7 -0
- package/dist/components/FieldRenderer.svelte +96 -20
- package/dist/components/FileUpload.svelte +250 -0
- package/dist/components/FileUpload.svelte.d.ts +32 -0
- package/dist/components/FilterBuilder.svelte +236 -268
- package/dist/components/FilterBuilder.svelte.d.ts +3 -0
- package/dist/components/FilterDropdown.svelte.d.ts +1 -1
- package/dist/components/Header.svelte +5 -6
- package/dist/components/ImportWizard.svelte +182 -94
- package/dist/components/InfiniteList.svelte +22 -8
- package/dist/components/InfiniteList.svelte.d.ts +5 -3
- package/dist/components/InlineEdit.svelte +114 -44
- package/dist/components/JsonSchemaForm.svelte +256 -95
- package/dist/components/JsonSchemaForm.svelte.d.ts +12 -1
- package/dist/components/Layout.svelte +20 -17
- package/dist/components/LazyTaskQueueDrawer.svelte +26 -0
- package/dist/components/LazyTaskQueueDrawer.svelte.d.ts +8 -0
- package/dist/components/ListPage.svelte +11 -6
- package/dist/components/ListPage.svelte.d.ts +2 -0
- package/dist/components/LoginPage.svelte +1 -1
- package/dist/components/MasterDetailView.svelte +3 -3
- package/dist/components/MediaLibraryModal.svelte +5 -2
- package/dist/components/MentionsInput.svelte +4 -3
- package/dist/components/MoneyInput.svelte +25 -0
- package/dist/components/MoneyInput.svelte.d.ts +20 -0
- package/dist/components/NavigateToResource.svelte +3 -2
- package/dist/components/NumberInput.svelte +25 -0
- package/dist/components/NumberInput.svelte.d.ts +19 -0
- package/dist/components/NumericInput.svelte +110 -0
- package/dist/components/NumericInput.svelte.d.ts +23 -0
- package/dist/components/PercentInput.svelte +25 -0
- package/dist/components/PercentInput.svelte.d.ts +20 -0
- package/dist/components/PermissionMatrix.svelte +4 -3
- package/dist/components/ProfilePage.svelte +2 -2
- package/dist/components/QuickEditDrawer.svelte +42 -0
- package/dist/components/QuickEditDrawer.svelte.d.ts +10 -0
- package/dist/components/RecordDetailDrawer.svelte +16 -108
- package/dist/components/RecordDetailDrawer.svelte.d.ts +2 -0
- package/dist/components/RecordRowActions.svelte +41 -0
- package/dist/components/RecordRowActions.svelte.d.ts +14 -0
- package/dist/components/ResourceAccessGuard.svelte +7 -5
- package/dist/components/ResourceOperationsPage.svelte +25 -19
- package/dist/components/ResourceOperationsPage.svelte.d.ts +5 -1
- package/dist/components/RetryTaskButton.svelte +9 -5
- package/dist/components/RowActions.svelte +5 -3
- package/dist/components/SensitiveDataMask.svelte +3 -3
- package/dist/components/SettingsPage.svelte +1 -1
- package/dist/components/ShowInferencer.svelte +4 -2
- package/dist/components/ShowInferencer.svelte.d.ts +2 -0
- package/dist/components/ShowPage.svelte +49 -39
- package/dist/components/ShowPage.svelte.d.ts +2 -0
- package/dist/components/Sidebar.svelte +15 -13
- package/dist/components/SplitPaneLayout.svelte +4 -2
- package/dist/components/SpreadsheetView.svelte +81 -286
- package/dist/components/StepsForm.svelte +166 -49
- package/dist/components/StepsForm.svelte.d.ts +1 -0
- package/dist/components/SvarAutoTable.svelte +39 -0
- package/dist/components/SvarAutoTable.svelte.d.ts +13 -0
- package/dist/components/SvarDataGrid.svelte +362 -0
- package/dist/components/SvarDataGrid.svelte.d.ts +57 -0
- package/dist/components/SvarGridCell.svelte +10 -0
- package/dist/components/SvarGridCell.svelte.d.ts +7 -0
- package/dist/components/SvarResourceRead.svelte +50 -0
- package/dist/components/SvarResourceRead.svelte.d.ts +23 -0
- package/dist/components/SvarResourceTable.svelte +63 -0
- package/dist/components/SvarResourceTable.svelte.d.ts +42 -0
- package/dist/components/SvarResourceTableView.svelte +364 -0
- package/dist/components/SvarResourceTableView.svelte.d.ts +4 -0
- package/dist/components/TaskDetails.svelte +20 -7
- package/dist/components/TaskList.svelte +19 -7
- package/dist/components/TaskQueueDrawer.svelte +92 -37
- package/dist/components/Toast.svelte +4 -2
- package/dist/components/TooltipButton.svelte +1 -1
- package/dist/components/TreeSelect.svelte +212 -30
- package/dist/components/TreeSelect.svelte.d.ts +3 -1
- package/dist/components/ValidatedField.svelte +27 -0
- package/dist/components/ValidatedField.svelte.d.ts +35 -0
- package/dist/components/account/ImportMembersPage.svelte +2 -2
- package/dist/components/account/SecurityLogPage.svelte +3 -1
- package/dist/components/account/SettingsEnterprisePage.svelte +7 -5
- package/dist/components/account/TeamMembersPage.svelte +1 -1
- package/dist/components/auto-table-grid.d.ts +26 -0
- package/dist/components/auto-table-grid.js +1 -0
- package/dist/components/buttons/CloneButton.svelte +6 -4
- package/dist/components/buttons/DeleteButton.svelte +95 -29
- package/dist/components/buttons/DeleteButton.svelte.d.ts +2 -0
- package/dist/components/buttons/EditButton.svelte +6 -4
- package/dist/components/buttons/ExportButton.svelte +22 -4
- package/dist/components/buttons/ImportButton.svelte +83 -38
- package/dist/components/buttons/ImportButton.svelte.d.ts +6 -10
- package/dist/components/buttons/RefreshButton.svelte +48 -8
- package/dist/components/buttons/ShowButton.svelte +6 -4
- package/dist/components/content/ApiKeyList.svelte +3 -1
- package/dist/components/content/ContentPageHeader.svelte +12 -9
- package/dist/components/content/ContentPageShell.svelte +8 -9
- package/dist/components/content/FileBrowser.svelte +35 -0
- package/dist/components/content/FileBrowser.svelte.d.ts +14 -0
- package/dist/components/content/FileList.svelte +3 -1
- package/dist/components/content/MemberList.svelte +3 -1
- package/dist/components/content/MetricBlock.svelte +10 -13
- package/dist/components/content/NetworkTable.svelte +6 -4
- package/dist/components/content/NetworkTable.svelte.d.ts +1 -0
- package/dist/components/content/PageToolbar.svelte +6 -10
- package/dist/components/content/SectionHeader.svelte +8 -13
- package/dist/components/content/SecurityEventTable.svelte +3 -1
- package/dist/components/content/SettingsFieldRow.svelte +9 -23
- package/dist/components/content/SettingsGroup.svelte +11 -27
- package/dist/components/content/StatusBadge.svelte +3 -8
- package/dist/components/content/StatusTabs.svelte +2 -2
- package/dist/components/content/WorkspaceLayout.svelte +8 -12
- package/dist/components/enterprise/filter-tree.d.ts +48 -0
- package/dist/components/enterprise/filter-tree.js +224 -0
- package/dist/components/enterprise/json-schema-form.d.ts +39 -0
- package/dist/components/enterprise/json-schema-form.js +195 -0
- package/dist/components/enterprise/recursive-schema-form.d.ts +30 -0
- package/dist/components/enterprise/recursive-schema-form.js +196 -0
- package/dist/components/enterprise/spreadsheet-formula.d.ts +12 -0
- package/dist/components/enterprise/spreadsheet-formula.js +245 -0
- package/dist/components/fieldComponentMap.d.ts +18 -13
- package/dist/components/fieldComponentMap.js +100 -47
- package/dist/components/fields/AvatarField.svelte +1 -1
- package/dist/components/fields/ChoiceField.svelte +16 -0
- package/dist/components/fields/ChoiceField.svelte.d.ts +10 -0
- package/dist/components/fields/CodeField.svelte +11 -12
- package/dist/components/fields/CodeField.svelte.d.ts +1 -1
- package/dist/components/fields/DateField.svelte +4 -3
- package/dist/components/fields/DateRangeField.svelte +2 -4
- package/dist/components/fields/ImageField.svelte +3 -1
- package/dist/components/fields/ImagesField.svelte +23 -0
- package/dist/components/fields/ImagesField.svelte.d.ts +6 -0
- package/dist/components/fields/JsonField.svelte +19 -13
- package/dist/components/fields/PasswordField.svelte +5 -0
- package/dist/components/fields/PasswordField.svelte.d.ts +6 -0
- package/dist/components/fields/date-field-value.d.ts +2 -0
- package/dist/components/fields/date-field-value.js +13 -0
- package/dist/components/fields/json-value.d.ts +11 -0
- package/dist/components/fields/json-value.js +28 -0
- package/dist/components/json-schema-form-state.d.ts +37 -0
- package/dist/components/json-schema-form-state.js +168 -0
- package/dist/components/profile/ActivityTimeline.svelte +2 -2
- package/dist/components/record-detail.svelte.d.ts +19 -0
- package/dist/components/record-detail.svelte.js +34 -0
- package/dist/components/saved-list-views.js +29 -29
- package/dist/components/svar-grid-cells.d.ts +14 -0
- package/dist/components/svar-grid-cells.js +2 -0
- package/dist/components/svar-grid-contract.d.ts +80 -0
- package/dist/components/svar-grid-contract.js +159 -0
- package/dist/components/svar-grid-interactions.d.ts +54 -0
- package/dist/components/svar-grid-interactions.js +174 -0
- package/dist/components/svar-grid-loading.d.ts +40 -0
- package/dist/components/svar-grid-loading.js +180 -0
- package/dist/components/svar-grid-operations.d.ts +37 -0
- package/dist/components/svar-grid-operations.js +186 -0
- package/dist/components/svar-grid-panes.d.ts +34 -0
- package/dist/components/svar-grid-panes.js +66 -0
- package/dist/components/svar-grid-resource-loading.d.ts +18 -0
- package/dist/components/svar-grid-resource-loading.js +68 -0
- package/dist/components/svar-grid-resource-session.svelte.d.ts +29 -0
- package/dist/components/svar-grid-resource-session.svelte.js +61 -0
- package/dist/components/table-contract.d.ts +13 -0
- package/dist/components/table-contract.js +42 -0
- package/dist/components/task-utils.js +4 -2
- package/dist/components/ui/alert/alert-variants.d.ts +2 -3
- package/dist/components/ui/alert/alert-variants.js +1 -2
- package/dist/components/ui/alert/alert.svelte +4 -5
- package/dist/components/ui/alert/alert.svelte.d.ts +3 -8
- package/dist/components/ui/alert/index.js +0 -2
- package/dist/components/ui/avatar/avatar-variants.d.ts +2 -3
- package/dist/components/ui/avatar/avatar-variants.js +1 -2
- package/dist/components/ui/avatar/avatar.svelte +5 -6
- package/dist/components/ui/avatar/avatar.svelte.d.ts +3 -8
- package/dist/components/ui/badge/badge-variants.d.ts +2 -3
- package/dist/components/ui/badge/badge-variants.js +3 -2
- package/dist/components/ui/badge/badge.svelte +4 -5
- package/dist/components/ui/badge/badge.svelte.d.ts +3 -8
- package/dist/components/ui/badge/index.js +0 -2
- package/dist/components/ui/button/button-variants.d.ts +2 -3
- package/dist/components/ui/button/button-variants.js +5 -3
- package/dist/components/ui/button/button.svelte +100 -44
- package/dist/components/ui/button/button.svelte.d.ts +8 -12
- package/dist/components/ui/button/index.js +0 -2
- package/dist/components/ui/command/command-dialog.svelte +3 -1
- package/dist/components/ui/command/command-dialog.svelte.d.ts +1 -1
- package/dist/components/ui/command/command-group.svelte +4 -2
- package/dist/components/ui/command/command-item.svelte +4 -2
- package/dist/components/ui/command/command-separator.svelte +3 -1
- package/dist/components/ui/command/index.d.ts +5 -5
- package/dist/components/ui/input/input.svelte +41 -24
- package/dist/components/ui/input/input.svelte.d.ts +5 -4
- package/dist/components/ui/sheet/sheet.svelte +9 -3
- package/dist/components/ui/sheet/sheet.svelte.d.ts +1 -0
- package/dist/components/ui/textarea/textarea.svelte +2 -1
- package/dist/components/ui/tooltip/tooltip.svelte +4 -2
- package/dist/components.css +3079 -0
- package/dist/design-contract.d.ts +13 -0
- package/dist/design-contract.js +11 -0
- package/dist/design-system.d.ts +15 -0
- package/dist/design-system.js +7 -0
- package/dist/index.d.ts +15 -1
- package/dist/index.js +9 -0
- package/dist/inline-value.d.ts +5 -0
- package/dist/inline-value.js +24 -0
- package/dist/numeric-input.d.ts +2 -0
- package/dist/numeric-input.js +9 -0
- package/dist/page-chrome.css +12 -49
- package/dist/recipes.d.ts +4 -0
- package/dist/recipes.js +4 -0
- package/dist/rendering/index.d.ts +87 -0
- package/dist/rendering/index.js +117 -0
- package/dist/styled-system/css/conditions.js +36 -0
- package/dist/styled-system/css/css.d.ts +22 -0
- package/dist/styled-system/css/css.js +45 -0
- package/dist/styled-system/css/cva.d.ts +6 -0
- package/dist/styled-system/css/cva.js +87 -0
- package/dist/styled-system/css/cx.d.ts +5 -0
- package/dist/styled-system/css/cx.js +15 -0
- package/dist/styled-system/css/index.d.ts +5 -0
- package/dist/styled-system/css/index.js +4 -0
- package/dist/styled-system/css/sva.d.ts +4 -0
- package/dist/styled-system/css/sva.js +46 -0
- package/dist/styled-system/helpers.js +316 -0
- package/dist/styled-system/patterns/aspect-ratio.d.ts +20 -0
- package/dist/styled-system/patterns/aspect-ratio.js +38 -0
- package/dist/styled-system/patterns/bleed.d.ts +21 -0
- package/dist/styled-system/patterns/bleed.js +24 -0
- package/dist/styled-system/patterns/box.d.ts +20 -0
- package/dist/styled-system/patterns/box.js +15 -0
- package/dist/styled-system/patterns/center.d.ts +20 -0
- package/dist/styled-system/patterns/center.js +21 -0
- package/dist/styled-system/patterns/circle.d.ts +20 -0
- package/dist/styled-system/patterns/circle.js +25 -0
- package/dist/styled-system/patterns/container.d.ts +20 -0
- package/dist/styled-system/patterns/container.js +21 -0
- package/dist/styled-system/patterns/cq.d.ts +21 -0
- package/dist/styled-system/patterns/cq.js +21 -0
- package/dist/styled-system/patterns/divider.d.ts +22 -0
- package/dist/styled-system/patterns/divider.js +25 -0
- package/dist/styled-system/patterns/flex.d.ts +26 -0
- package/dist/styled-system/patterns/flex.js +26 -0
- package/dist/styled-system/patterns/float.d.ts +23 -0
- package/dist/styled-system/patterns/float.js +52 -0
- package/dist/styled-system/patterns/grid-item.d.ts +25 -0
- package/dist/styled-system/patterns/grid-item.js +25 -0
- package/dist/styled-system/patterns/grid.d.ts +24 -0
- package/dist/styled-system/patterns/grid.js +27 -0
- package/dist/styled-system/patterns/hstack.d.ts +21 -0
- package/dist/styled-system/patterns/hstack.js +24 -0
- package/dist/styled-system/patterns/index.d.ts +21 -0
- package/dist/styled-system/patterns/index.js +20 -0
- package/dist/styled-system/patterns/link-overlay.d.ts +20 -0
- package/dist/styled-system/patterns/link-overlay.js +24 -0
- package/dist/styled-system/patterns/spacer.d.ts +20 -0
- package/dist/styled-system/patterns/spacer.js +25 -0
- package/dist/styled-system/patterns/square.d.ts +20 -0
- package/dist/styled-system/patterns/square.js +24 -0
- package/dist/styled-system/patterns/stack.d.ts +23 -0
- package/dist/styled-system/patterns/stack.js +24 -0
- package/dist/styled-system/patterns/visually-hidden.d.ts +20 -0
- package/dist/styled-system/patterns/visually-hidden.js +18 -0
- package/dist/styled-system/patterns/vstack.d.ts +21 -0
- package/dist/styled-system/patterns/vstack.js +24 -0
- package/dist/styled-system/patterns/wrap.d.ts +24 -0
- package/dist/styled-system/patterns/wrap.js +25 -0
- package/dist/styled-system/recipes/content-header.d.ts +31 -0
- package/dist/styled-system/recipes/content-header.js +65 -0
- package/dist/styled-system/recipes/content-page.d.ts +34 -0
- package/dist/styled-system/recipes/content-page.js +43 -0
- package/dist/styled-system/recipes/create-recipe.js +82 -0
- package/dist/styled-system/recipes/index.d.ts +17 -0
- package/dist/styled-system/recipes/index.js +16 -0
- package/dist/styled-system/recipes/metric-block.d.ts +34 -0
- package/dist/styled-system/recipes/metric-block.js +76 -0
- package/dist/styled-system/recipes/product-list.d.ts +31 -0
- package/dist/styled-system/recipes/product-list.js +73 -0
- package/dist/styled-system/recipes/product-section.d.ts +31 -0
- package/dist/styled-system/recipes/product-section.js +49 -0
- package/dist/styled-system/recipes/product-settings-row.d.ts +34 -0
- package/dist/styled-system/recipes/product-settings-row.js +58 -0
- package/dist/styled-system/recipes/product-settings.d.ts +31 -0
- package/dist/styled-system/recipes/product-settings.js +57 -0
- package/dist/styled-system/recipes/product-status.d.ts +34 -0
- package/dist/styled-system/recipes/product-status.js +45 -0
- package/dist/styled-system/recipes/product-toolbar.d.ts +31 -0
- package/dist/styled-system/recipes/product-toolbar.js +41 -0
- package/dist/styled-system/recipes/product-workspace.d.ts +34 -0
- package/dist/styled-system/recipes/product-workspace.js +58 -0
- package/dist/styled-system/recipes/surface-metric.d.ts +38 -0
- package/dist/styled-system/recipes/surface-metric.js +63 -0
- package/dist/styled-system/recipes/surface-table.d.ts +34 -0
- package/dist/styled-system/recipes/surface-table.js +62 -0
- package/dist/styled-system/recipes/ui-badge.d.ts +31 -0
- package/dist/styled-system/recipes/ui-badge.js +38 -0
- package/dist/styled-system/recipes/ui-button.d.ts +32 -0
- package/dist/styled-system/recipes/ui-button.js +43 -0
- package/dist/styled-system/recipes/ui-input.d.ts +31 -0
- package/dist/styled-system/recipes/ui-input.js +49 -0
- package/dist/styled-system/recipes/ui-textarea.d.ts +31 -0
- package/dist/styled-system/recipes/ui-textarea.js +24 -0
- package/dist/styled-system/styles.css +1257 -0
- package/dist/styled-system/tokens/index.d.ts +9 -0
- package/dist/styled-system/tokens/index.js +268 -0
- package/dist/styled-system/tokens/tokens.d.ts +36 -0
- package/dist/styled-system/types/composition.d.ts +227 -0
- package/dist/styled-system/types/conditions.d.ts +236 -0
- package/dist/styled-system/types/csstype.d.ts +22570 -0
- package/dist/styled-system/types/index.d.ts +6 -0
- package/dist/styled-system/types/parts.d.ts +8 -0
- package/dist/styled-system/types/pattern.d.ts +78 -0
- package/dist/styled-system/types/prop-type.d.ts +223 -0
- package/dist/styled-system/types/recipe.d.ts +181 -0
- package/dist/styled-system/types/selectors.d.ts +59 -0
- package/dist/styled-system/types/static-css.d.ts +56 -0
- package/dist/styled-system/types/style-props.d.ts +8088 -0
- package/dist/styled-system/types/system-types.d.ts +151 -0
- package/dist/styles/aliases.css +49 -0
- package/dist/styles/compatibility.epilogue.css +384 -0
- package/dist/styles/compatibility.prelude.css +5513 -0
- package/dist/styles/conditional-states.css +28 -0
- package/dist/styles/conditional-utilities.css +22 -0
- package/dist/styles/recipes.css +1262 -0
- package/dist/types.d.ts +3 -3
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +1 -1
- package/package.json +38 -14
- package/styles-compatibility.json +12 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import { definedOptions } from '@svadmin/core/options';
|
|
3
|
+
|
|
2
4
|
import { Ellipsis } from '@lucide/svelte';
|
|
3
5
|
import { tick, type Component, type Snippet } from 'svelte';
|
|
4
6
|
import type { HTMLAttributes } from 'svelte/elements';
|
|
@@ -143,7 +145,7 @@
|
|
|
143
145
|
{#each visibleActions as action (action)}
|
|
144
146
|
{#if action.href}
|
|
145
147
|
<Button
|
|
146
|
-
variant
|
|
148
|
+
{...definedOptions({ "variant": resolvedVariant(action) })}
|
|
147
149
|
size="sm"
|
|
148
150
|
href={action.href}
|
|
149
151
|
disabled={action.disabled}
|
|
@@ -158,7 +160,7 @@
|
|
|
158
160
|
</Button>
|
|
159
161
|
{:else}
|
|
160
162
|
<Button
|
|
161
|
-
variant
|
|
163
|
+
{...definedOptions({ "variant": resolvedVariant(action) })}
|
|
162
164
|
size="sm"
|
|
163
165
|
onclick={action.onclick}
|
|
164
166
|
disabled={action.disabled}
|
|
@@ -188,7 +190,7 @@
|
|
|
188
190
|
{#if action.href}
|
|
189
191
|
<Button
|
|
190
192
|
href={action.href}
|
|
191
|
-
variant
|
|
193
|
+
{...definedOptions({ "variant": resolvedVariant(action) })}
|
|
192
194
|
size="sm"
|
|
193
195
|
disabled={action.disabled}
|
|
194
196
|
onclick={(event) => handleOverflowAction(action, event)}
|
|
@@ -48,10 +48,10 @@
|
|
|
48
48
|
: '********';
|
|
49
49
|
case 'email': {
|
|
50
50
|
const parts = val.split('@');
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
const [name, domain] = parts;
|
|
52
|
+
if (parts.length === 2 && name && domain) {
|
|
53
53
|
const maskedName = name.length > 2 ? `${name[0]}***${name.slice(-1)}` : `${name[0]}***`;
|
|
54
|
-
return `${maskedName}@${
|
|
54
|
+
return `${maskedName}@${domain}`;
|
|
55
55
|
}
|
|
56
56
|
return '***@***.***';
|
|
57
57
|
}
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
const i18n = useTranslation();
|
|
109
109
|
|
|
110
110
|
let activeKey = $derived.by(() => {
|
|
111
|
-
const tab = getParams()
|
|
111
|
+
const tab = getParams()['tab'];
|
|
112
112
|
if (!tab) return "profile";
|
|
113
113
|
const alias = tab === "api-keys" ? "api" : tab === "audit-logs" ? "audit" : tab;
|
|
114
114
|
if (sectionKeys.has(alias)) return alias;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import type { ResourceRendering } from '../rendering/index.js';
|
|
2
3
|
// ShowInferencer renders a detail page from the resource definition with no page-specific configuration.
|
|
3
4
|
// The :id parameter is extracted from the URL automatically.
|
|
4
5
|
import ShowPage from './ShowPage.svelte';
|
|
@@ -6,16 +7,17 @@
|
|
|
6
7
|
|
|
7
8
|
interface Props {
|
|
8
9
|
resourceName: string;
|
|
10
|
+
rendering?: ResourceRendering | undefined;
|
|
9
11
|
/** Optional explicit id; defaults to the value parsed from the URL. */
|
|
10
12
|
id?: string | number;
|
|
11
13
|
class?: string;
|
|
12
14
|
}
|
|
13
15
|
|
|
14
|
-
let { resourceName, id, class: className = '' }: Props = $props();
|
|
16
|
+
let { resourceName, rendering, id, class: className = '' }: Props = $props();
|
|
15
17
|
const parsed = useParsed();
|
|
16
18
|
const resolvedId = $derived(id ?? parsed.id ?? '');
|
|
17
19
|
</script>
|
|
18
20
|
|
|
19
21
|
{#if resolvedId}
|
|
20
|
-
<ShowPage {resourceName} id={resolvedId} class={className} />
|
|
22
|
+
<ShowPage {rendering} {resourceName} id={resolvedId} class={className} />
|
|
21
23
|
{/if}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import type { ResourceRendering } from '../rendering/index.js';
|
|
1
2
|
interface Props {
|
|
2
3
|
resourceName: string;
|
|
4
|
+
rendering?: ResourceRendering | undefined;
|
|
3
5
|
/** Optional explicit id; defaults to the value parsed from the URL. */
|
|
4
6
|
id?: string | number;
|
|
5
7
|
class?: string;
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
2
|
+
import type { ResourceRendering } from '../rendering/index.js';
|
|
3
|
+
import { useNavigation } from '@svadmin/core';
|
|
4
|
+
import { useRecordDetail } from './record-detail.svelte';
|
|
3
5
|
import { useTranslation } from '@svadmin/core/i18n';
|
|
4
6
|
import type { Snippet } from 'svelte';
|
|
5
7
|
import * as Card from './ui/card/index.js';
|
|
6
8
|
import { Skeleton } from './ui/skeleton/index.js';
|
|
7
9
|
import PageHeader from './PageHeader.svelte';
|
|
8
|
-
import
|
|
10
|
+
import FieldDisplay from './FieldDisplay.svelte';
|
|
9
11
|
import EditButton from './buttons/EditButton.svelte';
|
|
10
12
|
import DeleteButton from './buttons/DeleteButton.svelte';
|
|
11
13
|
import CloneButton from './buttons/CloneButton.svelte';
|
|
12
|
-
import
|
|
14
|
+
import { Button } from './ui/button/index.js';
|
|
15
|
+
import { RefreshCw } from '@lucide/svelte';
|
|
13
16
|
|
|
14
17
|
const i18n = useTranslation();
|
|
15
18
|
|
|
16
19
|
interface Props {
|
|
17
20
|
resourceName: string;
|
|
21
|
+
rendering?: ResourceRendering | undefined;
|
|
18
22
|
id: string | number;
|
|
19
23
|
density?: 'compact' | 'comfortable';
|
|
20
24
|
layout?: 'list' | 'grid';
|
|
@@ -27,6 +31,7 @@
|
|
|
27
31
|
|
|
28
32
|
let {
|
|
29
33
|
resourceName,
|
|
34
|
+
rendering,
|
|
30
35
|
id,
|
|
31
36
|
density = 'comfortable',
|
|
32
37
|
layout = 'list',
|
|
@@ -40,10 +45,11 @@
|
|
|
40
45
|
const navigation = useNavigation();
|
|
41
46
|
const isCompact = $derived(density === 'compact');
|
|
42
47
|
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
const
|
|
48
|
+
const detail = useRecordDetail(() => ({ resourceName, id, rendering }));
|
|
49
|
+
const activeRendering = $derived(detail.rendering);
|
|
50
|
+
const resource = $derived(detail.resource);
|
|
51
|
+
const showFields = $derived(detail.fields);
|
|
52
|
+
const query = detail.query;
|
|
47
53
|
|
|
48
54
|
const gridColumnClass = $derived.by(() => {
|
|
49
55
|
switch (columns) {
|
|
@@ -55,7 +61,7 @@
|
|
|
55
61
|
});
|
|
56
62
|
</script>
|
|
57
63
|
|
|
58
|
-
<div class="{isCompact ? 'svadmin-u-6ed543e2fbbb' : 'svadmin-u-3e7ce58d64fa'} {className}">
|
|
64
|
+
<div data-svadmin-rendering-resource={activeRendering?.resource.name} data-svadmin-rendering-kind={activeRendering ? 'show' : undefined} class="{isCompact ? 'svadmin-u-6ed543e2fbbb' : 'svadmin-u-3e7ce58d64fa'} {className}">
|
|
59
65
|
<PageHeader
|
|
60
66
|
title="{resource.label} {i18n.t('common.detail')} #{id}"
|
|
61
67
|
{density}
|
|
@@ -63,23 +69,27 @@
|
|
|
63
69
|
backLabel={i18n.t('common.backToList')}
|
|
64
70
|
>
|
|
65
71
|
{#snippet actions()}
|
|
66
|
-
{#if resource.canEdit !== false}
|
|
72
|
+
{#if detail.canRead && query.isSuccess && resource.canEdit !== false}
|
|
67
73
|
<EditButton resource={resourceName} recordItemId={id} hideText />
|
|
68
74
|
{/if}
|
|
69
|
-
{#if resource.canCreate !== false}
|
|
75
|
+
{#if detail.canRead && query.isSuccess && resource.canCreate !== false}
|
|
70
76
|
<CloneButton resource={resourceName} recordItemId={id} hideText />
|
|
71
77
|
{/if}
|
|
72
|
-
{#if resource.canDelete !== false}
|
|
78
|
+
{#if detail.canRead && query.isSuccess && resource.canDelete !== false}
|
|
73
79
|
<DeleteButton resource={resourceName} recordItemId={id} hideText onSuccess={() => navigation.list(resourceName)} />
|
|
74
80
|
{/if}
|
|
75
|
-
<
|
|
81
|
+
<Button type="button" variant="ghost" size="icon" title={i18n.t('common.refresh')}
|
|
82
|
+
aria-label={i18n.t('common.refresh')} aria-busy={query.isFetching}
|
|
83
|
+
disabled={!detail.canRead || query.isFetching} onclick={detail.refresh}>
|
|
84
|
+
<RefreshCw class="svadmin-u-11e59c6d5f6b svadmin-u-dc7972ebf3f3" />
|
|
85
|
+
</Button>
|
|
76
86
|
{#if headerActions}
|
|
77
87
|
{@render headerActions()}
|
|
78
88
|
{/if}
|
|
79
89
|
{/snippet}
|
|
80
90
|
</PageHeader>
|
|
81
91
|
|
|
82
|
-
{#if query.isLoading}
|
|
92
|
+
{#if detail.checkingPermission || query.isLoading}
|
|
83
93
|
<Card.Root class="svadmin-u-2cd02d11d1af svadmin-u-6ee2d41e2d2d svadmin-u-438b2237b8d6">
|
|
84
94
|
<Card.Content class="svadmin-u-8a539c7fe216">
|
|
85
95
|
{#each showFields.slice(0, 6) as _, i (i)}
|
|
@@ -90,26 +100,33 @@
|
|
|
90
100
|
{/each}
|
|
91
101
|
</Card.Content>
|
|
92
102
|
</Card.Root>
|
|
93
|
-
{:else if
|
|
103
|
+
{:else if !detail.canRead}
|
|
104
|
+
<p role="status" data-svadmin-access-denied>{i18n.t('common.accessDenied')}</p>
|
|
105
|
+
{:else if query.isError}
|
|
106
|
+
<div role="alert">
|
|
107
|
+
<p>{i18n.t('common.operationFailed')}</p>
|
|
108
|
+
<Button type="button" variant="ghost" size="icon" title={i18n.t('common.retry')}
|
|
109
|
+
aria-label={i18n.t('common.retry')} disabled={query.isFetching} onclick={detail.refresh}>
|
|
110
|
+
<RefreshCw class="svadmin-u-11e59c6d5f6b svadmin-u-dc7972ebf3f3" />
|
|
111
|
+
</Button>
|
|
112
|
+
</div>
|
|
113
|
+
{:else if query.isSuccess}
|
|
114
|
+
{@const record = activeRendering ? activeRendering.record(query.data.data) : query.data.data}
|
|
94
115
|
{#if layout === 'grid'}
|
|
95
116
|
<Card.Root class="svadmin-u-2cd02d11d1af svadmin-u-6ee2d41e2d2d svadmin-u-438b2237b8d6">
|
|
96
117
|
<Card.Content class="svadmin-u-8a539c7fe216">
|
|
97
118
|
<dl class="svadmin-u-f3c543ad5fe9 svadmin-u-fa6acbf81d74 svadmin-u-3533cbce9e93 svadmin-u-4d9da416df16 {gridColumnClass}">
|
|
98
119
|
{#each showFields as field, i (i)}
|
|
99
|
-
{@const value =
|
|
100
|
-
{@const DisplayComponent = getDisplayComponent(field.type)}
|
|
120
|
+
{@const value = record[field.key]}
|
|
101
121
|
<div class="svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed {bordered ? 'svadmin-u-65fdbade2025 svadmin-u-5ceb636bd9f3 svadmin-u-cdf6e054e5e0 svadmin-u-b4cf72cd1cd8 svadmin-u-eb6e8b881acd svadmin-u-1884518576f2' : 'svadmin-u-eb6e8b881acd svadmin-u-1884518576f2 svadmin-u-65fdbade2025 svadmin-u-945ecb9a9005'}">
|
|
102
122
|
<dt class="svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-bfa603190748 svadmin-u-65281709dacf">{field.label}</dt>
|
|
103
123
|
<dd class="svadmin-u-359090c2d529 svadmin-u-e2327d142859 svadmin-u-d4108abe6359 svadmin-u-2689f3958069 svadmin-u-170cee3ff4e4">
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
{:else}
|
|
111
|
-
{value != null ? String(value) : '—'}
|
|
112
|
-
{/if}
|
|
124
|
+
<FieldDisplay
|
|
125
|
+
type={field.type}
|
|
126
|
+
{value}
|
|
127
|
+
options={field.options}
|
|
128
|
+
resourceName={field.resource}
|
|
129
|
+
/>
|
|
113
130
|
</dd>
|
|
114
131
|
</div>
|
|
115
132
|
{/each}
|
|
@@ -120,20 +137,16 @@
|
|
|
120
137
|
<Card.Root class="svadmin-u-2cd02d11d1af svadmin-u-6ee2d41e2d2d svadmin-u-438b2237b8d6">
|
|
121
138
|
<Card.Content class="svadmin-u-8a539c7fe216 svadmin-u-fa6acbf81d74 svadmin-u-3533cbce9e93">
|
|
122
139
|
{#each showFields as field, i (i)}
|
|
123
|
-
{@const value =
|
|
124
|
-
{@const DisplayComponent = getDisplayComponent(field.type)}
|
|
140
|
+
{@const value = record[field.key]}
|
|
125
141
|
<div class="svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-020ba687fa12 {isCompact ? 'svadmin-u-f0faeb26d656 svadmin-u-03b4dd7f172b svadmin-u-cc06a6575385 svadmin-u-7209fd2a90e7' : 'svadmin-u-f0faeb26d656 svadmin-u-7a9aabfcd059 svadmin-u-1b2d54a3fd12 svadmin-u-4701b613ff95'} {i % 2 === 1 ? 'svadmin-u-8a25a995eb8e' : ''}">
|
|
126
142
|
<div class="svadmin-u-b03f3c253900 {isCompact ? 'svadmin-u-359090c2d529' : 'svadmin-u-359090c2d529 svadmin-u-e2327d142859'} svadmin-u-2689f3958069 svadmin-u-bfa603190748 svadmin-u-65281709dacf svadmin-u-84bdd56b0e81">{field.label}</div>
|
|
127
143
|
<div class="svadmin-u-6b3526212209 {isCompact ? 'svadmin-u-359090c2d529 svadmin-u-e2327d142859' : 'svadmin-u-fc7473ca09eb'} svadmin-u-d4108abe6359">
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
{:else}
|
|
135
|
-
{value != null ? String(value) : '—'}
|
|
136
|
-
{/if}
|
|
144
|
+
<FieldDisplay
|
|
145
|
+
type={field.type}
|
|
146
|
+
{value}
|
|
147
|
+
options={field.options}
|
|
148
|
+
resourceName={field.resource}
|
|
149
|
+
/>
|
|
137
150
|
</div>
|
|
138
151
|
</div>
|
|
139
152
|
{/each}
|
|
@@ -147,9 +160,6 @@
|
|
|
147
160
|
<Card.Root class="svadmin-u-2cd02d11d1af svadmin-u-6ee2d41e2d2d svadmin-u-438b2237b8d6">
|
|
148
161
|
<Card.Content class="svadmin-u-845f53365c8d svadmin-u-ca6bf63030aa">
|
|
149
162
|
<p class="svadmin-u-bfa603190748">{i18n.t('common.noData')}</p>
|
|
150
|
-
{#if query.isError}
|
|
151
|
-
<p class="svadmin-u-fc7473ca09eb svadmin-u-811148b13d1e svadmin-u-50d0d216a2f8">{(query.error as Error)?.message ?? i18n.t('common.operationFailed')}</p>
|
|
152
|
-
{/if}
|
|
153
163
|
</Card.Content>
|
|
154
164
|
</Card.Root>
|
|
155
165
|
{/if}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import type { ResourceRendering } from '../rendering/index.js';
|
|
1
2
|
import type { Snippet } from 'svelte';
|
|
2
3
|
interface Props {
|
|
3
4
|
resourceName: string;
|
|
5
|
+
rendering?: ResourceRendering | undefined;
|
|
4
6
|
id: string | number;
|
|
5
7
|
density?: 'compact' | 'comfortable';
|
|
6
8
|
layout?: 'list' | 'grid';
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import { definedOptions } from '@svadmin/core/options';
|
|
3
|
+
|
|
2
4
|
import { captureAdminContext } from '@svadmin/core';
|
|
3
5
|
import type { AccessControlProvider, Action, Identity, MenuItem } from '@svadmin/core';
|
|
4
6
|
import { getPath } from '../router-state.svelte.js';
|
|
@@ -107,11 +109,11 @@
|
|
|
107
109
|
async function checkAccess(provider: AccessControlProvider | null, resource: string, action: Action): Promise<boolean> {
|
|
108
110
|
if (!provider) return true;
|
|
109
111
|
|
|
110
|
-
const result = await provider.can({
|
|
112
|
+
const result = await provider.can(definedOptions({
|
|
111
113
|
resource,
|
|
112
114
|
action,
|
|
113
115
|
meta: adminContext.getProviderMeta(resource),
|
|
114
|
-
});
|
|
116
|
+
}));
|
|
115
117
|
return Array.isArray(result) ? (result[0]?.can ?? false) : result.can;
|
|
116
118
|
}
|
|
117
119
|
|
|
@@ -132,11 +134,11 @@
|
|
|
132
134
|
}
|
|
133
135
|
|
|
134
136
|
function snapshotCustomMenuItems(menuItems: MenuItem[]): MenuItem[] {
|
|
135
|
-
return menuItems.map((menuItem) => ({
|
|
137
|
+
return menuItems.map((menuItem) => (definedOptions({
|
|
136
138
|
...menuItem,
|
|
137
139
|
meta: menuItem.meta ? { ...menuItem.meta } : undefined,
|
|
138
140
|
children: menuItem.children ? snapshotCustomMenuItems(menuItem.children) : undefined,
|
|
139
|
-
}));
|
|
141
|
+
})));
|
|
140
142
|
}
|
|
141
143
|
|
|
142
144
|
async function visibleCustomMenuItem(menuItem: MenuItem, provider: AccessControlProvider | null): Promise<MenuItem | null> {
|
|
@@ -188,12 +190,12 @@
|
|
|
188
190
|
const items: NavItem[] = [{ path: '/', label: homeLabel, Icon: LayoutDashboard }];
|
|
189
191
|
for (const { r, can } of results) {
|
|
190
192
|
if (can) {
|
|
191
|
-
items.push({
|
|
193
|
+
items.push(definedOptions({
|
|
192
194
|
path: `/${r.name}`,
|
|
193
195
|
label: r.label,
|
|
194
196
|
Icon: (typeof r.icon === 'string' ? iconMap[r.icon] : r.icon) ?? iconMap[r.name] ?? Settings,
|
|
195
197
|
group: r.group,
|
|
196
|
-
});
|
|
198
|
+
}));
|
|
197
199
|
}
|
|
198
200
|
}
|
|
199
201
|
navItems = items;
|
|
@@ -307,10 +309,10 @@
|
|
|
307
309
|
aria-label="Sidebar navigation"
|
|
308
310
|
class="svadmin-u-7bc555991dba svadmin-u-5f89f14a26db svadmin-u-c78facc7a0a6 svadmin-u-0f2fff0ae96e svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-5ceb636bd9f3 svadmin-u-6ee2d41e2d2d svadmin-u-0fe7d7d814d0 svadmin-u-7890552ecd63"
|
|
309
311
|
style="background-color: var(--sidebar);"
|
|
310
|
-
class:
|
|
311
|
-
class:
|
|
312
|
+
class:svadmin-sidebar--expanded={!collapsed}
|
|
313
|
+
class:svadmin-sidebar--collapsed={collapsed}
|
|
312
314
|
>
|
|
313
|
-
<div class="svadmin-u-60fbb7713999 svadmin-u-07017cde3e97 svadmin-u-3960ffc248d9 svadmin-u-012fbd121f37" class:
|
|
315
|
+
<div class="svadmin-u-60fbb7713999 svadmin-u-07017cde3e97 svadmin-u-3960ffc248d9 svadmin-u-012fbd121f37" class:svadmin-u-d139dd09e38d={!collapsed} class:svadmin-u-86843cf1e227={collapsed}>
|
|
314
316
|
{#if !collapsed}
|
|
315
317
|
<a href={formatSidebarLink('/')} class="group svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-7e9a2a250cc3" onclick={(e) => { e.preventDefault(); adminContext.navigate('/'); }}>
|
|
316
318
|
<SvadminLogo />
|
|
@@ -329,7 +331,7 @@
|
|
|
329
331
|
</div>
|
|
330
332
|
|
|
331
333
|
<ScrollArea class="svadmin-u-36e579c0b41c sidebar-scroll">
|
|
332
|
-
<nav aria-label="Main menu" class="svadmin-u-9fcd8a13827e" class:
|
|
334
|
+
<nav aria-label="Main menu" class="svadmin-u-9fcd8a13827e" class:svadmin-u-7597e11b4d4b={!collapsed} class:svadmin-u-d5eab218aa34={collapsed}>
|
|
333
335
|
{#if menu && menu.length > 0}
|
|
334
336
|
<div class="svadmin-u-a26339f4b89e">
|
|
335
337
|
{#each customMenuItems as item (item.name)}
|
|
@@ -454,14 +456,14 @@
|
|
|
454
456
|
<div class="svadmin-u-0e17f2bd9074 svadmin-u-7fcf9124b5df svadmin-u-6b7d6e21ccbd">
|
|
455
457
|
<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-7e9a2a250cc3 svadmin-u-5f22e64f2282 svadmin-u-7660b450905a svadmin-u-ceb69a6b0e5f svadmin-u-ace81495deee svadmin-u-34516836730d">
|
|
456
458
|
<Avatar
|
|
457
|
-
src={(identity as Record<string, unknown>)
|
|
459
|
+
src={(identity as Record<string, unknown>)['avatar'] as string | undefined}
|
|
458
460
|
alt={identity.name ?? 'User'}
|
|
459
461
|
fallback={identity.name?.charAt(0).toUpperCase() ?? 'U'}
|
|
460
462
|
size="sm"
|
|
461
463
|
/>
|
|
462
464
|
<div class="svadmin-u-36e579c0b41c svadmin-u-7e0b7cdf1a94">
|
|
463
465
|
<p class="svadmin-u-f283ea9bea0e svadmin-u-a14daebf7748 svadmin-u-2689f3958069 svadmin-u-a7a63217e098">{identity.name}</p>
|
|
464
|
-
<p class="svadmin-u-f283ea9bea0e svadmin-u-d058ca6de60f svadmin-u-5f1ff8fe8768">{((identity as Record<string, unknown>)
|
|
466
|
+
<p class="svadmin-u-f283ea9bea0e svadmin-u-d058ca6de60f svadmin-u-5f1ff8fe8768">{((identity as Record<string, unknown>)['role'] || (identity as Record<string, unknown>)['roleName']) ?? 'User'}</p>
|
|
465
467
|
</div>
|
|
466
468
|
<button
|
|
467
469
|
class="svadmin-u-d0a52b312f7d svadmin-u-cbbf90f9a828 svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-421ac2be5045 svadmin-u-3e3534b4c5df svadmin-u-646e10356266 svadmin-u-0b48b877be2a svadmin-u-ceb69a6b0e5f"
|
|
@@ -509,7 +511,7 @@
|
|
|
509
511
|
<Tooltip.Root>
|
|
510
512
|
<Tooltip.Trigger>
|
|
511
513
|
{#snippet child({ props }: { props: Record<string, unknown> })}
|
|
512
|
-
<Button {...props} variant="ghost" size="icon" onclick={onToggle} class="svadmin-u-ed8a5df7b2fb svadmin-u-2bbcfc3b5179 svadmin-u-421ac2be5045 svadmin-u-68d55a736ff4 svadmin-u-55d1f8b9d318 svadmin-u-646e10356266">
|
|
514
|
+
<Button {...props} aria-label={i18n.t('common.toggleSidebar')} variant="ghost" size="icon" onclick={onToggle} class="svadmin-u-ed8a5df7b2fb svadmin-u-2bbcfc3b5179 svadmin-u-421ac2be5045 svadmin-u-68d55a736ff4 svadmin-u-55d1f8b9d318 svadmin-u-646e10356266">
|
|
513
515
|
<ChevronRight class="svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c" />
|
|
514
516
|
</Button>
|
|
515
517
|
{/snippet}
|
|
@@ -35,10 +35,12 @@
|
|
|
35
35
|
if (!containerEl) return;
|
|
36
36
|
const rect = containerEl.getBoundingClientRect();
|
|
37
37
|
|
|
38
|
+
const pointer = 'touches' in ev ? ev.touches.item(0) : ev;
|
|
39
|
+
if (!pointer) return;
|
|
38
40
|
const clientPos =
|
|
39
41
|
direction === 'horizontal'
|
|
40
|
-
?
|
|
41
|
-
:
|
|
42
|
+
? pointer.clientX - rect.left
|
|
43
|
+
: pointer.clientY - rect.top;
|
|
42
44
|
const totalSize = direction === 'horizontal' ? rect.width : rect.height;
|
|
43
45
|
|
|
44
46
|
if (totalSize > 0) {
|