Skip to content

Source ZoomButtons

Source ZoomButtons

Cette page est générée automatiquement à partir du dépôt local au moment de la génération de la documentation.

Fichiers inclus

packages/common/src/lib/widgets/zoom-buttons/zoom-buttons.declaration.ts

packages/common/src/lib/widgets/zoom-buttons/zoom-buttons.declaration.ts
import { widgetFactorySvelte, type WidgetProps } from '$lib/api/managers/widget';
import { type ZoomButtonsConfig, zoomButtonsConfig } from './zoom-buttons.config';
import type { WidgetDeclaration } from '$lib/api/managers/widget/widget-declaration';
export const declaration = {
factory: () => import('./ZoomButtons.svelte').then((ZoomButtons) => widgetFactorySvelte(ZoomButtons)),
schema: () => zoomButtonsConfig,
} satisfies WidgetDeclaration;
export type ZoomButtonsProps = WidgetProps<ZoomButtonsConfig>;

packages/common/src/lib/widgets/zoom-buttons/zoom-buttons.config.ts

packages/common/src/lib/widgets/zoom-buttons/zoom-buttons.config.ts
import { defineWidgetConfig } from '$lib/api/managers/configuration/models/widget/widget-configuration.schema';
import { inToolbarSchemaFrom } from '$lib/api/managers/configuration/models/widget/widget-in-toolbar.schema';
import { i18nSchemaFrom } from '$lib/api/managers/i18n/i18n.schema';
import { hiddenContainerId } from '$lib/components/containers/hidden/hidden.schema';
import { z } from 'zod';
import type { TooltipSide } from '$lib/components/api-simple-tooltip';
const i18n = i18nSchemaFrom({
'zoom-in': {
fr: 'Zoom avant',
nl: 'NL - Zoom avant',
},
'zoom-out': {
fr: 'Zoom arrière',
nl: 'NL - Zoom arrière',
},
});
export const zoomButtonsConfig = defineWidgetConfig({
title: {
fr: 'Zoom',
nl: 'Zoom',
},
container: hiddenContainerId,
inToolbar: inToolbarSchemaFrom({
type: 'integrated',
}),
i18n: i18n,
active: true,
config: z
.object({
vertical: z.boolean().optional(),
tooltipSide: z.custom<TooltipSide>().default('left'),
})
.prefault({}),
});
export type ZoomButtonsConfig = z.infer<typeof zoomButtonsConfig>;

packages/common/src/lib/widgets/zoom-buttons/ZoomButtons.svelte

packages/common/src/lib/widgets/zoom-buttons/ZoomButtons.svelte
<script lang="ts">
import { getMapManager } from '$lib/api/map';
import { mapIconButtonVariants } from '$lib/components/icon/map-icon';
import { cn } from '$lib/components/shadcn/utils';
import Minus from 'lucide-svelte/icons/minus';
import Plus from 'lucide-svelte/icons/plus';
import { getI18n } from '$lib/api/managers/i18n';
import type { ZoomButtonsProps } from './zoom-buttons.declaration';
import ToolbarTooltip from '$lib/widgets/toolbar/ToolbarTooltip.svelte';
import { Separator } from '$lib/components/shadcn/ui/separator';
const { fullConfig }: ZoomButtonsProps = $props();
const { config } = fullConfig;
const mapManager = getMapManager();
const i18n = getI18n(fullConfig.i18n);
const zoom = mapManager.tools.zoom;
</script>
<div class={cn('gv-flex gv-flex gv-gap-2xs', fullConfig.config.vertical && 'gv-flex-col')}>
<ToolbarTooltip text={i18n('zoom-in')} side={config.tooltipSide}>
<button onclick={() => zoom.zoomIn()} class={cn(mapIconButtonVariants())} data-test-id="ZoomButtons-Cortex">
<Plus />
</button>
</ToolbarTooltip>
<Separator orientation={fullConfig.config.vertical ? 'horizontal' : 'vertical'} />
<ToolbarTooltip text={i18n('zoom-out')} side={config.tooltipSide}>
<button onclick={() => zoom.zoomOut()} class={cn(mapIconButtonVariants())} data-test-id="ZoomButtons-Minus">
<Minus />
</button>
</ToolbarTooltip>
</div>

Aller plus loin