# selfstore-destination Source: https://selfstore.dev/docs/widget-destination The panel for a store that already has a home - where it saves, when it last wrote, and the gestures to export a copy, change destination or stop saving there. Once the data has a durable home, this is the panel that says so: where it saves, when it last wrote, and what you can do about it. ```html ``` ```js const el = document.getElementById('dest'); el.confirmAction = (a) => confirm(`Stop saving to ${a.label}?`); el.targets = { drive: driveAuth, file: true }; ``` It reads the store through the same engine the other widgets use, so it needs no `store` property of its own. Mounted inside [``](https://selfstore.dev/docs/widget-storage) it appears on its own once there is a home. ## It does the work Exporting a copy, detaching and re-connecting are the engine's own operations, so this panel performs them rather than emitting an intention for your app to implement. A panel that only announced what the user wanted would leave the same two hundred lines in every app - the lines it exists to delete. **One exception, and it is structural.** Loading a copy back cannot happen from here: the library holds no records, your `apply` does. The engine exposes `exportBlob()` and no import, so the panel asks for that one through the `selfstore-destination-action` event and your app runs its own import. ## Properties | Property | Type | Notes | | --- | --- | --- | | `targets` | `ConnectTargets \| null` | Destinations offered when changing | | `account` | `string \| null` | Who holds it - for Drive, `driveTarget.account()`. A brand name is not an address, and several accounts look alike. | | `confirmAction` | `(a: DestinationAction) => boolean \| Promise` | Veto before anything destructive | ```ts interface DestinationAction { type: 'detach'; label: string | null; } ``` `confirmAction` defaults to proceeding, and the panel never invents its own dialog: your app has its own words and its own modal. Answer `false` and nothing happens. **Detaching never deletes.** It stops writing here; the backup already written stays where it is. ## Two things stay yours The **words** - every label is overridable and a pack ships per language, see [wording](https://selfstore.dev/docs/widgets-localization) - and the **veto** on what is destructive. Neither is customisation: they are the decisions a library must not take for an app. Map of this site for a model: https://selfstore.dev/llms.txt Every page in one file: https://selfstore.dev/llms-full.txt