Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions apps/calendar/src/runtime.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

import type {
CalDavService,
IconsService,
PropertiesService,
VaultEntity as SdkVaultEntity,
SettingsService,
Expand Down Expand Up @@ -83,6 +84,8 @@ export type CalendarRuntime = {
/** Per-device, vault-scoped settings — persists the source-filter
* visibility (9.15f). */
settings?: SettingsService;
/** Vault icon store — backs the icon picker's Upload + Library tabs. */
icons?: IconsService;
};
};

Expand Down
2 changes: 2 additions & 0 deletions apps/calendar/src/ui/react/event-detail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import {
utcToZonedParts,
zonedTimeToUtc,
} from "../../logic/timezone";
import { getCalendarRuntime } from "../../runtime";
import type { Attendee } from "../../types/attendee";
import type { Event } from "../../types/event";
import { reminderOffsetLabel } from "../reminder-labels";
Expand Down Expand Up @@ -239,6 +240,7 @@ export function EventDetail({
const chooseIcon = (): void => {
openIconPicker({
value: draft.icon ?? null,
icons: getCalendarRuntime()?.services?.icons,
onChange: (icon: Icon | null) => {
patch({ icon });
closePicker();
Expand Down
11 changes: 2 additions & 9 deletions apps/contacts/src/ui/person-detail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import { RichTextPropertyEditor } from "@brainstorm-os/editor";
import type { PropertiesService } from "@brainstorm-os/sdk-types";
import { CoverPicker, type CoverPickerService } from "@brainstorm-os/sdk/cover-picker";
import { Icon, IconName } from "@brainstorm-os/sdk/icon";
import { IconPicker, type IconUploadService } from "@brainstorm-os/sdk/icon-picker";
import { IconPicker, iconUploadFromIcons } from "@brainstorm-os/sdk/icon-picker";
import { PropertiesPanel } from "@brainstorm-os/sdk/properties-panel";
import {
DEFAULT_PROPERTY_UI_LABELS,
Expand Down Expand Up @@ -170,14 +170,7 @@ export function PersonDetail({
() => getBrainstorm()?.services?.covers ?? COVERS_UNAVAILABLE,
[],
);
const iconUpload = useMemo<IconUploadService | undefined>(() => {
const icons = getBrainstorm()?.services?.icons;
if (!icons) return undefined;
return {
upload: (filename, bytes) => icons.uploadBytes(filename, bytes),
list: async () => (await icons.list()).map((e) => ({ url: e.url, thumbUrl: e.thumbUrl })),
};
}, []);
const iconUpload = useMemo(() => iconUploadFromIcons(getBrainstorm()?.services?.icons), []);

// Stable cover subject — the band re-renders off the explicit `cover` prop.
const coverSubject = useMemo(() => ({ id: person.id }), [person.id]);
Expand Down
6 changes: 6 additions & 0 deletions apps/database/src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ import {
type FileImportResult,
GENERIC_OBJECT_TYPE,
type Icon,
type IconsService,
type ObjectDragPayload,
type PropertiesService,
type PropertiesSnapshot,
Expand Down Expand Up @@ -1114,6 +1115,7 @@ function renderStageHeader(state: AppState): void {
createIconPickerButton({
value: list.icon,
size: 18,
icons: getRuntime()?.services?.icons,
ariaLabel: t("brainstorm.database.stage.changeListIcon"),
onChange: (icon) => commitListIcon(state, list.id, icon),
}),
Expand Down Expand Up @@ -1156,6 +1158,7 @@ function renderStageHeader(state: AppState): void {
createIconPickerButton({
value: list.icon,
size: 18,
icons: getRuntime()?.services?.icons,
ariaLabel: t("brainstorm.database.stage.changeListIcon"),
onChange: (icon) => commitListIcon(state, list.id, icon),
}),
Expand Down Expand Up @@ -1777,6 +1780,7 @@ function renderInspector(state: AppState): void {
if (recordLocked) return;
openIconPicker({
value: readEntityIcon(entity),
icons: getRuntime()?.services?.icons,
onChange: (icon) => void persistEntityPatch(state, entity, { icon }),
});
});
Expand Down Expand Up @@ -5525,6 +5529,8 @@ type BrainstormRuntime = {
uploadBytes(filename: string, bytes: Uint8Array): Promise<{ url: string; thumbUrl: string }>;
list(): Promise<ReadonlyArray<{ url: string; thumbUrl: string }>>;
};
/** Vault icon store — backs the icon picker's Upload + Library tabs. */
icons?: IconsService;
/** Pin-any-object-to-dashboard (7.13). Drives the shared object
* menu's Pin / Unpin toggle. Manifest grants `dashboard.pin`
* (default-minimum). */
Expand Down
14 changes: 7 additions & 7 deletions apps/database/src/i18n/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"brainstorm.database.delete.body": "„{name}“ wird aus dem Vault gelöscht — es verschwindet aus allen Listen, der Suche und dem Graphen.",
"brainstorm.database.delete.confirm": "Löschen",
"brainstorm.database.delete.cancel": "Abbrechen",
"brainstorm.database.delete.unavailable": "Löschen benötigt den Entitätendienst (von dieser Shell nicht bereitgestellt)",
"brainstorm.database.delete.unavailable": "Löschen ist hier nicht verfügbar.",
"brainstorm.database.delete.done": "„{name}“ gelöscht",
"brainstorm.database.delete.failed": "Löschen fehlgeschlagen — {message}",
"brainstorm.database.timeline.emptyNoValues": "Keine Elemente haben einen Wert für „{property}“. Wählen Sie unter Ansichtseinstellungen → Daten eine andere Datumseigenschaft.",
Expand Down Expand Up @@ -172,7 +172,7 @@
"brainstorm.database.status.addedToColumn": "Zur Spalte hinzugefügt",
"brainstorm.database.status.addedToGroup": "Zu „{group}“ hinzugefügt",
"brainstorm.database.status.movedToDate": "Verschoben auf {date}",
"brainstorm.database.status.dropNeedsEntities": "Ablegen benötigt den Entitätendienst (von dieser Shell nicht bereitgestellt)",
"brainstorm.database.status.dropNeedsEntities": "Ablegen ist hier nicht verfügbar.",
"brainstorm.database.filter.add": "+ Filter",
"brainstorm.database.sort.add": "+ Sortierung",
"brainstorm.database.filter.clearAll": "Alle löschen",
Expand All @@ -183,21 +183,21 @@
"brainstorm.database.filter.valuePlaceholder": "Wert eingeben…",
"brainstorm.database.filter.valueListPlaceholder": "Wert, Wert…",
"brainstorm.database.filter.valueAria": "Filterwert",
"brainstorm.database.status.createNeedsEntities": "Erstellen benötigt den Entitätendienst (von dieser Shell nicht bereitgestellt)",
"brainstorm.database.status.createNeedsEntities": "Erstellen ist hier nicht verfügbar.",
"brainstorm.database.status.openCollectionFirst": "Öffnen oder erstellen Sie eine Sammlung, um hier ein Objekt hinzuzufügen",
"brainstorm.database.status.creating": "Wird erstellt…",
"brainstorm.database.status.created": "Erstellt",
"brainstorm.database.status.createFailed": "Erstellen fehlgeschlagen — {message}",
"brainstorm.database.row.untitled": "Ohne Titel",
"brainstorm.database.status.saveTemplateNeedsEntities": "Als Vorlage speichern benötigt den Entitätendienst (von dieser Shell nicht bereitgestellt)",
"brainstorm.database.status.saveTemplateNeedsEntities": "Als Vorlage speichern ist hier nicht verfügbar.",
"brainstorm.database.status.saveTemplateFailed": "Als Vorlage speichern fehlgeschlagen — {message}",
"brainstorm.database.status.savedLocally": "Lokal gespeichert — Entitäten-Schreibzugriff von dieser Shell nicht bereitgestellt",
"brainstorm.database.status.savedLocally": "Lokal gespeichert — Änderungen können von hier aus nicht im Vault gespeichert werden.",
"brainstorm.database.status.saveFailed": "Speichern fehlgeschlagen — {message}",
"brainstorm.database.search.placeholder": "Zeilen suchen…",
"brainstorm.database.search.aria": "Zeilen suchen",
"brainstorm.database.collection.defaultName": "Neue Sammlung",
"brainstorm.database.list.defaultName": "Neue Liste",
"brainstorm.database.status.importNeedsServices": "Importieren benötigt die Datei- und Entitätendienste (von dieser Shell nicht bereitgestellt)",
"brainstorm.database.status.importNeedsServices": "Importieren ist hier nicht verfügbar.",
"brainstorm.database.import.csv.title": "CSV importieren",
"brainstorm.database.import.csv.defaultName": "Importierte CSV",
"brainstorm.database.status.csvReadFailed": "CSV-Datei konnte nicht gelesen werden",
Expand Down Expand Up @@ -260,7 +260,7 @@
"brainstorm.database.status.propertyAdded": "Eigenschaft „{name}“ hinzugefügt",
"brainstorm.database.status.propertyExists": "Die Eigenschaft „{name}“ existiert bereits — verwenden Sie sie wieder, statt ein Duplikat zu erstellen",
"brainstorm.database.status.propertyAddedToCollection": "„{name}“ zu dieser Sammlung hinzugefügt",
"brainstorm.database.status.propertiesUnavailable": "Speichern nicht möglich — der Eigenschaftendienst wird von dieser Shell nicht bereitgestellt",
"brainstorm.database.status.propertiesUnavailable": "Speichern nicht möglich — Eigenschaftsänderungen sind hier nicht verfügbar.",
"brainstorm.database.status.propertySaveFailed": "Speichern der Eigenschaft fehlgeschlagen — {message}",
"brainstorm.database.timeline.empty": "Keine Elemente entsprechen dieser Ansicht.",
"brainstorm.database.timeline.now": "Jetzt",
Expand Down
14 changes: 7 additions & 7 deletions apps/database/src/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"brainstorm.database.delete.body": "“{name}” will be deleted from the vault — it disappears from every list, search, and the graph.",
"brainstorm.database.delete.confirm": "Delete",
"brainstorm.database.delete.cancel": "Cancel",
"brainstorm.database.delete.unavailable": "Delete needs the entities service (not exposed by this shell)",
"brainstorm.database.delete.unavailable": "Delete isn't available here.",
"brainstorm.database.delete.done": "Deleted “{name}”",
"brainstorm.database.delete.failed": "Delete failed — {message}",
"brainstorm.database.timeline.emptyNoValues": "No items have a value for “{property}”. Pick a different date property under View settings → Dates.",
Expand Down Expand Up @@ -172,7 +172,7 @@
"brainstorm.database.status.addedToColumn": "Added to column",
"brainstorm.database.status.addedToGroup": "Added to “{group}”",
"brainstorm.database.status.movedToDate": "Moved to {date}",
"brainstorm.database.status.dropNeedsEntities": "Drop needs the entities service (not exposed by this shell)",
"brainstorm.database.status.dropNeedsEntities": "Drop isn't available here.",
"brainstorm.database.filter.add": "+ Filter",
"brainstorm.database.sort.add": "+ Sort",
"brainstorm.database.filter.clearAll": "Clear all",
Expand All @@ -183,21 +183,21 @@
"brainstorm.database.filter.valuePlaceholder": "Type a value…",
"brainstorm.database.filter.valueListPlaceholder": "value, value…",
"brainstorm.database.filter.valueAria": "Filter value",
"brainstorm.database.status.createNeedsEntities": "Create needs the entities service (not exposed by this shell)",
"brainstorm.database.status.createNeedsEntities": "Creating items isn't available here.",
"brainstorm.database.status.openCollectionFirst": "Open or create a collection to add an object here",
"brainstorm.database.status.creating": "Creating…",
"brainstorm.database.status.created": "Created",
"brainstorm.database.status.createFailed": "Create failed — {message}",
"brainstorm.database.row.untitled": "Untitled",
"brainstorm.database.status.saveTemplateNeedsEntities": "Save as template needs the entities service (not exposed by this shell)",
"brainstorm.database.status.saveTemplateNeedsEntities": "Save as template isn't available here.",
"brainstorm.database.status.saveTemplateFailed": "Save as template failed — {message}",
"brainstorm.database.status.savedLocally": "Saved locally — entities write not exposed by this shell",
"brainstorm.database.status.savedLocally": "Saved locally — changes can't be saved to the vault from here.",
"brainstorm.database.status.saveFailed": "Save failed — {message}",
"brainstorm.database.search.placeholder": "Search rows…",
"brainstorm.database.search.aria": "Search rows",
"brainstorm.database.collection.defaultName": "New collection",
"brainstorm.database.list.defaultName": "New list",
"brainstorm.database.status.importNeedsServices": "Import needs the files + entities services (not exposed by this shell)",
"brainstorm.database.status.importNeedsServices": "Import isn't available here.",
"brainstorm.database.import.csv.title": "Import CSV",
"brainstorm.database.import.csv.defaultName": "Imported CSV",
"brainstorm.database.status.csvReadFailed": "Couldn't read the CSV file",
Expand Down Expand Up @@ -260,7 +260,7 @@
"brainstorm.database.status.propertyAdded": "Added property “{name}”",
"brainstorm.database.status.propertyExists": "Property “{name}” already exists — reuse it instead of creating a twin",
"brainstorm.database.status.propertyAddedToCollection": "Added “{name}” to this collection",
"brainstorm.database.status.propertiesUnavailable": "Couldn't save — properties service not exposed by this shell",
"brainstorm.database.status.propertiesUnavailable": "Couldn't save — property changes aren't available here.",
"brainstorm.database.status.propertySaveFailed": "Property save failed — {message}",
"brainstorm.database.timeline.empty": "No items match this view.",
"brainstorm.database.timeline.now": "Now",
Expand Down
14 changes: 7 additions & 7 deletions apps/database/src/i18n/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"brainstorm.database.delete.body": "“{name}” se eliminará de la bóveda — desaparecerá de todas las listas, la búsqueda y el grafo.",
"brainstorm.database.delete.confirm": "Eliminar",
"brainstorm.database.delete.cancel": "Cancelar",
"brainstorm.database.delete.unavailable": "Eliminar requiere el servicio de entidades (no expuesto por este shell)",
"brainstorm.database.delete.unavailable": "Eliminar no está disponible aquí.",
"brainstorm.database.delete.done": "“{name}” eliminado",
"brainstorm.database.delete.failed": "Error al eliminar — {message}",
"brainstorm.database.timeline.emptyNoValues": "Ningún elemento tiene un valor para “{property}”. Elija otra propiedad de fecha en Ajustes de vista → Fechas.",
Expand Down Expand Up @@ -172,7 +172,7 @@
"brainstorm.database.status.addedToColumn": "Añadido a la columna",
"brainstorm.database.status.addedToGroup": "Añadido a “{group}”",
"brainstorm.database.status.movedToDate": "Movido a {date}",
"brainstorm.database.status.dropNeedsEntities": "Soltar requiere el servicio de entidades (no expuesto por este shell)",
"brainstorm.database.status.dropNeedsEntities": "Soltar no está disponible aquí.",
"brainstorm.database.filter.add": "+ Filtro",
"brainstorm.database.sort.add": "+ Orden",
"brainstorm.database.filter.clearAll": "Borrar todo",
Expand All @@ -183,21 +183,21 @@
"brainstorm.database.filter.valuePlaceholder": "Escriba un valor…",
"brainstorm.database.filter.valueListPlaceholder": "valor, valor…",
"brainstorm.database.filter.valueAria": "Valor del filtro",
"brainstorm.database.status.createNeedsEntities": "Crear requiere el servicio de entidades (no expuesto por este shell)",
"brainstorm.database.status.createNeedsEntities": "Crear no está disponible aquí.",
"brainstorm.database.status.openCollectionFirst": "Abra o cree una colección para añadir un objeto aquí",
"brainstorm.database.status.creating": "Creando…",
"brainstorm.database.status.created": "Creado",
"brainstorm.database.status.createFailed": "Error al crear — {message}",
"brainstorm.database.row.untitled": "Sin título",
"brainstorm.database.status.saveTemplateNeedsEntities": "Guardar como plantilla requiere el servicio de entidades (no expuesto por este shell)",
"brainstorm.database.status.saveTemplateNeedsEntities": "Guardar como plantilla no está disponible aquí.",
"brainstorm.database.status.saveTemplateFailed": "Error al guardar como plantilla — {message}",
"brainstorm.database.status.savedLocally": "Guardado localmente — la escritura de entidades no está expuesta por este shell",
"brainstorm.database.status.savedLocally": "Guardado localmente — los cambios no se pueden guardar en la bóveda desde aquí.",
"brainstorm.database.status.saveFailed": "Error al guardar — {message}",
"brainstorm.database.search.placeholder": "Buscar filas…",
"brainstorm.database.search.aria": "Buscar filas",
"brainstorm.database.collection.defaultName": "Nueva colección",
"brainstorm.database.list.defaultName": "Nueva lista",
"brainstorm.database.status.importNeedsServices": "Importar requiere los servicios de archivos y entidades (no expuestos por este shell)",
"brainstorm.database.status.importNeedsServices": "Importar no está disponible aquí.",
"brainstorm.database.import.csv.title": "Importar CSV",
"brainstorm.database.import.csv.defaultName": "CSV importado",
"brainstorm.database.status.csvReadFailed": "No se pudo leer el archivo CSV",
Expand Down Expand Up @@ -260,7 +260,7 @@
"brainstorm.database.status.propertyAdded": "Propiedad “{name}” añadida",
"brainstorm.database.status.propertyExists": "La propiedad “{name}” ya existe — reutilícela en lugar de crear un duplicado",
"brainstorm.database.status.propertyAddedToCollection": "“{name}” añadida a esta colección",
"brainstorm.database.status.propertiesUnavailable": "No se pudo guardar — el servicio de propiedades no está expuesto por este shell",
"brainstorm.database.status.propertiesUnavailable": "No se pudo guardar — los cambios de propiedades no están disponibles aquí.",
"brainstorm.database.status.propertySaveFailed": "Error al guardar la propiedad — {message}",
"brainstorm.database.timeline.empty": "Ningún elemento coincide con esta vista.",
"brainstorm.database.timeline.now": "Ahora",
Expand Down
Loading
Loading