@nebulahome/package-sdk 1.5.0 → 1.6.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/CHANGELOG.md CHANGED
@@ -3,6 +3,19 @@
3
3
  The SDK's version is the version of the package API the platform implements: a minor version adds
4
4
  to it, a major one breaks it, and a patch leaves it as it is.
5
5
 
6
+ ## 1.6.0
7
+
8
+ - **The background.** `ui.background: defineBackground({ component, description })` is a
9
+ component the interface draws on every page, out of sight, for as long as somebody is signed in
10
+ and the package runs - for what must outlive a page, sound playing in the browser above all. It
11
+ is unmounted when the package stops, is turned off or removed, and mounted afresh by an update,
12
+ so what it starts belongs in effects. Its `description` (1-256 characters) is shown on the
13
+ package's page; the manifest records it as `ui.background`.
14
+ - **`<Floating open label onClose?>`** draws a window of the package over the interface's pages,
15
+ from its background, page or card: in a corner of the page beside the rail, thrown from corner to
16
+ corner with a small bounce, one a package, hidden on the package's own page and on a phone.
17
+ `onClose` gives it a close button and says what closing does.
18
+
6
19
  ## 1.5.0
7
20
 
8
21
  - **The live channel.** A package's server and its open interfaces talk over the interface's own
package/README.md CHANGED
@@ -182,18 +182,49 @@ A topic is a letter, then letters, digits and `.`, `_`, `:`, `-`; a message from
182
182
  most 1 MB as JSON, one from the interface 64 KB, and an interface sends at most 50 a second.
183
183
  Nothing answers a message: a call that wants an answer or an error stays `usePackageCall`.
184
184
 
185
+ ## The background and floating windows
186
+
187
+ A component drawn on every page for as long as somebody is signed in and the package runs, for
188
+ what must outlive a page, and a window floating over the pages (since 1.6):
189
+
190
+ ```ts
191
+ // nebula.config.ts
192
+ ui: {
193
+ background: defineBackground({
194
+ component: () => import('./src/ui/background.js'),
195
+ description: 'Keeps music playing in this browser when you leave the Music page.',
196
+ }),
197
+ }
198
+ ```
199
+
200
+ ```tsx
201
+ // src/ui/background.tsx: every hook works here; start things in effects, the unmount stops them
202
+ export default function Background() {
203
+ const { t } = useTranslation();
204
+
205
+ return (
206
+ <Floating open={isPlaying} label={t('mini.label', 'Now playing')}>
207
+ <MiniPlayer />
208
+ </Floating>
209
+ );
210
+ }
211
+ ```
212
+
213
+ The window rests in a corner of the page beside the rail and is thrown from corner to corner; it is
214
+ hidden on the package's own page and on a phone. `onClose` gives it a close button.
215
+
185
216
  ## Entry points
186
217
 
187
- | Import | What |
188
- | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
189
- | `@nebulahome/package-sdk` | `definePackage`, `defineSettings`, `defineCard`, `defineEntityType`, `definePage`, `defineContainer`, `defineCompose`, `field`, entity id helpers, `SDK_VERSION`, the value types. |
190
- | `/server` | `defineServer`, and the context `start` is given: settings (live or restart), devices and entities, typed custom entities, the rest of the house and its past, methods and the live channel for the interface, services between packages. |
191
- | `/ui` | The props of a page, a card and an entity view; hooks for the package, its methods and live topics, its settings, the house, its areas, its past and its pictures, the viewer, the theme, its strings; navigation inside the package's page and the platform's. |
192
- | `/sun` | Where the sun is at any moment, by the platform's own formulas. |
193
- | `/components` | The part of the interface's design system a package may draw with. |
194
- | `/vite` | `nebula()`, the Vite plugin that builds both halves: the interface in chunks with its CSS scoped to the package, the server bundled whole. |
195
- | `/testing` | `createTestContext()`: run `start` in a unit test, every effect recorded. |
196
- | `/styles.css` | The interface's Tailwind tokens, to `@reference`. |
218
+ | Import | What |
219
+ | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
220
+ | `@nebulahome/package-sdk` | `definePackage`, `defineSettings`, `defineCard`, `defineEntityType`, `definePage`, `defineBackground`, `defineContainer`, `defineCompose`, `field`, entity id helpers, `SDK_VERSION`, the value types. |
221
+ | `/server` | `defineServer`, and the context `start` is given: settings (live or restart), devices and entities, typed custom entities, the rest of the house and its past, methods and the live channel for the interface, services between packages. |
222
+ | `/ui` | The props of a page, a background, a card and an entity view; `Floating`; hooks for the package, its methods and live topics, its settings, the house, its areas, its past and its pictures, the viewer, the theme, its strings; navigation inside the package's page and the platform's. |
223
+ | `/sun` | Where the sun is at any moment, by the platform's own formulas. |
224
+ | `/components` | The part of the interface's design system a package may draw with. |
225
+ | `/vite` | `nebula()`, the Vite plugin that builds both halves: the interface in chunks with its CSS scoped to the package, the server bundled whole. |
226
+ | `/testing` | `createTestContext()`: run `start` in a unit test, every effect recorded. |
227
+ | `/styles.css` | The interface's Tailwind tokens, to `@reference`. |
197
228
 
198
229
  The `nebulahome-package` command checks, builds and packs a package:
199
230
 
@@ -6850,7 +6850,7 @@ function composeFileProblems(text, settingKeys) {
6850
6850
  * the two are compared before a package is installed or started (PACKAGES_DOCS.md 11).
6851
6851
  */
6852
6852
  /** The SDK's own version, `1.0.0`. */
6853
- const SDK_VERSION = "1.5.0";
6853
+ const SDK_VERSION = "1.6.0";
6854
6854
  //#endregion
6855
6855
  //#region src/vite/catalogues.ts
6856
6856
  /**
@@ -12911,6 +12911,7 @@ function uiEntryCode(configPath, catalogues) {
12911
12911
  " kind: 'nebula.ui',",
12912
12912
  ` sdk: ${JSON.stringify(SDK_VERSION)},`,
12913
12913
  " page: ui.page?.component,",
12914
+ " background: ui.background?.component,",
12914
12915
  " cards: ui.cards ?? {},",
12915
12916
  " entityViews: ui.entityViews ?? {},",
12916
12917
  " locales: {",
@@ -6313,7 +6313,12 @@ const packageUiSchema = strictObject({
6313
6313
  /** The cards it adds to the dashboard editor. */
6314
6314
  cards: array(packageCardSchema).max(16).default([]),
6315
6315
  /** Which of its entity types it draws itself, on an entity's page. */
6316
- entityViews: array(localIdSchema).max(16).default([])
6316
+ entityViews: array(localIdSchema).max(16).default([]),
6317
+ /**
6318
+ * A component it draws on every page, for as long as somebody is signed in, and what it does in
6319
+ * a sentence its page shows. Since package SDK 1.6.
6320
+ */
6321
+ background: strictObject({ description: string().min(1).max(256) }).nullable().default(null)
6317
6322
  });
6318
6323
  /**
6319
6324
  * The words that appear more than once in a list.
@@ -6736,15 +6741,18 @@ function containersOf(containers, found) {
6736
6741
  * @param cardIds - The ids of the declared cards.
6737
6742
  * @param typeIds - The ids of the declared entity types.
6738
6743
  * @param found - Where problems go.
6739
- * @returns Whether it has a page, its sidebar entry, and the types it draws.
6744
+ * @returns Whether it has a page, its sidebar entry, its background, and the types it draws.
6740
6745
  */
6741
6746
  function boundUi(ui, cardIds, typeIds, found) {
6742
6747
  const bound = isRecord(ui) ? ui : {};
6743
6748
  const page = bound["page"];
6749
+ const background = bound["background"];
6744
6750
  const cards = isRecord(bound["cards"]) ? bound["cards"] : {};
6745
6751
  const views = isRecord(bound["entityViews"]) ? bound["entityViews"] : {};
6746
6752
  if (page !== void 0 && (!isRecord(page) || page["kind"] !== "page")) found.add("ui.page", "must be a page, declared with definePage");
6747
6753
  if (isRecord(page) && typeof page["component"] !== "function") found.add("ui.page.component", "must load the page's component: () => import('./page.js')");
6754
+ if (background !== void 0 && (!isRecord(background) || background["kind"] !== "background")) found.add("ui.background", "must be a background, declared with defineBackground");
6755
+ if (isRecord(background) && typeof background["component"] !== "function") found.add("ui.background.component", "must load the background's component: () => import('./background.js')");
6748
6756
  for (const id of cardIds) if (typeof cards[id] !== "function") found.add(`ui.cards.${id}`, "the card has no component: () => import('./card.js')");
6749
6757
  for (const id of Object.keys(cards).filter((each) => !cardIds.includes(each))) found.add(`ui.cards.${id}`, "is not one of the declared cards");
6750
6758
  for (const [id, loader] of Object.entries(views)) if (!typeIds.includes(id)) found.add(`ui.entityViews.${id}`, "is not one of the declared entity types");
@@ -6753,8 +6761,9 @@ function boundUi(ui, cardIds, typeIds, found) {
6753
6761
  return {
6754
6762
  page: isRecord(page),
6755
6763
  sidebar: isRecord(page) ? page["sidebar"] : void 0,
6764
+ background: isRecord(background) ? { description: background["description"] } : null,
6756
6765
  entityViews,
6757
- hasUi: isRecord(page) || cardIds.length > 0 || entityViews.length > 0
6766
+ hasUi: isRecord(page) || isRecord(background) || cardIds.length > 0 || entityViews.length > 0
6758
6767
  };
6759
6768
  }
6760
6769
  /**
@@ -6821,7 +6830,8 @@ function generatePackage(definition, options) {
6821
6830
  page: ui.page,
6822
6831
  ...ui.sidebar === void 0 ? {} : { sidebar: ui.sidebar },
6823
6832
  cards,
6824
- entityViews: ui.entityViews
6833
+ entityViews: ui.entityViews,
6834
+ ...ui.background === null ? {} : { background: ui.background }
6825
6835
  } } : {},
6826
6836
  ...settingFields.length > 0 ? { setup: releasePath(RELEASE_PATHS.setup) } : {},
6827
6837
  containers,
@@ -43,6 +43,10 @@ type Loader<TProps> = () => Promise<PackageComponent<TProps> | {
43
43
  type PageProps = {
44
44
  readonly packageId: string;
45
45
  };
46
+ /** What the package's background is given. Since 1.6. */
47
+ type BackgroundProps = {
48
+ readonly packageId: string;
49
+ };
46
50
  /** What a card is given. */
47
51
  type CardProps<TCard extends CardDefinition = CardDefinition> = {
48
52
  readonly packageId: string;
@@ -65,4 +69,4 @@ type EntityViewProps<TType extends EntityTypeDefinition = EntityTypeDefinition>
65
69
  readonly type: TType['id'];
66
70
  };
67
71
  //#endregion
68
- export { PageProps as a, CardSize as c, defineCard as d, PackageComponent as i, OptionsOf as l, EntityViewProps as n, CardDefinition as o, Loader as r, CardPadding as s, CardProps as t, SizeOf as u };
72
+ export { PackageComponent as a, CardPadding as c, SizeOf as d, defineCard as f, Loader as i, CardSize as l, CardProps as n, PageProps as o, EntityViewProps as r, CardDefinition as s, BackgroundProps as t, OptionsOf as u };
@@ -7,6 +7,6 @@
7
7
  * the two are compared before a package is installed or started (PACKAGES_DOCS.md 11).
8
8
  */
9
9
  /** The SDK's own version, `1.0.0`. */
10
- const SDK_VERSION = "1.5.0";
10
+ const SDK_VERSION = "1.6.0";
11
11
  //#endregion
12
12
  export { SDK_VERSION as t };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,22 @@
1
1
  import { $ as PlaybackState, A as SecretOptions, B as field, C as ListField, D as NumberOptions, E as NumberField, F as TextOptions, G as CapabilityState, H as CapabilityCommands, I as TimestampField, J as CustomValue, K as CapabilityStates, L as TimestampOptions, M as ShownWhen, N as Simplify, O as OptionField, P as TextField, Q as LawnMowerActivity, R as ValueField, S as FormValues, T as NoFields, U as CapabilityName, V as CapabilityCommand, W as CapabilityParams, X as EntityStateClass, Y as DeclaredCapabilities, Z as ImageContentType, _ as ChoiceOption, a as SettingsOf, at as VacuumActivity, b as Field, c as CommandDeclaration, ct as EntityDomain, d as EntityTypeDefinition, dt as isEntityId, et as ReportedCapabilityState, f as ValuesOf, ft as parseEntityId, g as ChoiceField, h as BooleanOptions, i as SettingsDefinition, it as ThermostatMode, j as SettingField, k as SecretField, l as CommandDeclarations, lt as EntityId, m as BooleanField, n as JsonPrimitive, nt as SelectOption, o as defineSettings, ot as VacuumRoom, p as defineEntityType, q as CommandableCapability, r as JsonValue, rt as ThermostatAction, s as ArgsOf, st as ENTITY_DOMAINS, t as JsonObject, tt as ReportedStates, u as CommandsOf, ut as ParsedEntityId, v as ChoiceOptions, w as ListOptions, x as Fields, y as EntityValues, z as ValueOfField } from "./chunks/json.js";
2
- import { a as PageProps, c as CardSize, d as defineCard, i as PackageComponent, l as OptionsOf, n as EntityViewProps, o as CardDefinition, r as Loader, s as CardPadding, t as CardProps, u as SizeOf } from "./chunks/props.js";
2
+ import { a as PackageComponent, c as CardPadding, d as SizeOf, f as defineCard, i as Loader, l as CardSize, n as CardProps, o as PageProps, r as EntityViewProps, s as CardDefinition, t as BackgroundProps, u as OptionsOf } from "./chunks/props.js";
3
+ //#region src/definitions/background.d.ts
4
+ /** The package's background, as declared. */
5
+ type BackgroundDefinition = {
6
+ readonly kind: 'background';
7
+ readonly component: Loader<BackgroundProps>;
8
+ /** What it does, in a sentence the package's page shows. At most 256 characters. */
9
+ readonly description: string;
10
+ };
11
+ /**
12
+ * Declares the package's background. A package has at most one: `ui.background` is a single
13
+ * field.
14
+ *
15
+ * @param background - Its component's loader, and what it does.
16
+ * @returns The background, for `definePackage`'s `ui.background`.
17
+ */
18
+ export declare function defineBackground(background: Omit<BackgroundDefinition, 'kind'>): BackgroundDefinition;
19
+ //#endregion
3
20
  //#region src/definitions/containers.d.ts
4
21
  /**
5
22
  * `defineContainer` and `defineCompose`: what a package runs beside or instead of its process
@@ -145,6 +162,8 @@ type PackageRequires = {
145
162
  type PackageUi<TCards extends readonly CardDefinition[], TTypes extends readonly EntityTypeDefinition[]> = {
146
163
  /** Its own page. */
147
164
  readonly page?: PageDefinition;
165
+ /** What it draws on every page, for as long as somebody is signed in. Since 1.6. */
166
+ readonly background?: BackgroundDefinition;
148
167
  /** A component for every declared card, by its id. */
149
168
  readonly cards?: { readonly [TId in TCards[number]['id']]: Loader<CardPropsFor<TCards, TId>>; };
150
169
  /** Views of the entity types it draws itself, by their ids. */
@@ -202,4 +221,4 @@ export declare function definePackage<const TCards extends readonly CardDefiniti
202
221
  /** The SDK's own version, `1.0.0`. */
203
222
  export declare const SDK_VERSION: string;
204
223
  //#endregion
205
- export { type ArgsOf, type BooleanField, type BooleanOptions, type CapabilityCommand, type CapabilityCommands, type CapabilityName, type CapabilityParams, type CapabilityState, type CapabilityStates, type CardDefinition, type CardPadding, type CardProps, type CardSize, type ChoiceField, type ChoiceOption, type ChoiceOptions, type CommandDeclaration, type CommandDeclarations, type CommandableCapability, type CommandsOf, type ComposeDefinition, type ContainerCondition, type ContainerDefinition, type ContainerPort, type CustomValue, type DeclaredCapabilities, ENTITY_DOMAINS, type EntityDomain, type EntityId, type EntityStateClass, type EntityTypeDefinition, type EntityValues, type EntityViewProps, type Field, type Fields, type FormValues, type ImageContentType, type JsonObject, type JsonPrimitive, type JsonValue, type LawnMowerActivity, type ListField, type ListOptions, type Loader, type NoFields, type NumberField, type NumberOptions, type OptionField, type OptionsOf, type PackageCategory, type PackageComponent, type PackageConfig, type PackageDefinition, type PackageRequires, type PackageUi, type PageDefinition, type PageProps, type ParsedEntityId, type PlaybackState, type ReportedCapabilityState, type ReportedStates, type SecretField, type SecretOptions, type SelectOption, type SettingField, type SettingPlaceholder, type SettingsDefinition, type SettingsOf, type ShownWhen, type SidebarEntry, type Simplify, type SizeOf, type TextField, type TextOptions, type ThermostatAction, type ThermostatMode, type TimestampField, type TimestampOptions, type VacuumActivity, type VacuumRoom, type ValueField, type ValueOfField, type ValuesOf, type When, defineCard, defineEntityType, defineSettings, field, isEntityId, parseEntityId };
224
+ export { type ArgsOf, type BackgroundDefinition, type BackgroundProps, type BooleanField, type BooleanOptions, type CapabilityCommand, type CapabilityCommands, type CapabilityName, type CapabilityParams, type CapabilityState, type CapabilityStates, type CardDefinition, type CardPadding, type CardProps, type CardSize, type ChoiceField, type ChoiceOption, type ChoiceOptions, type CommandDeclaration, type CommandDeclarations, type CommandableCapability, type CommandsOf, type ComposeDefinition, type ContainerCondition, type ContainerDefinition, type ContainerPort, type CustomValue, type DeclaredCapabilities, ENTITY_DOMAINS, type EntityDomain, type EntityId, type EntityStateClass, type EntityTypeDefinition, type EntityValues, type EntityViewProps, type Field, type Fields, type FormValues, type ImageContentType, type JsonObject, type JsonPrimitive, type JsonValue, type LawnMowerActivity, type ListField, type ListOptions, type Loader, type NoFields, type NumberField, type NumberOptions, type OptionField, type OptionsOf, type PackageCategory, type PackageComponent, type PackageConfig, type PackageDefinition, type PackageRequires, type PackageUi, type PageDefinition, type PageProps, type ParsedEntityId, type PlaybackState, type ReportedCapabilityState, type ReportedStates, type SecretField, type SecretOptions, type SelectOption, type SettingField, type SettingPlaceholder, type SettingsDefinition, type SettingsOf, type ShownWhen, type SidebarEntry, type Simplify, type SizeOf, type TextField, type TextOptions, type ThermostatAction, type ThermostatMode, type TimestampField, type TimestampOptions, type VacuumActivity, type VacuumRoom, type ValueField, type ValueOfField, type ValuesOf, type When, defineCard, defineEntityType, defineSettings, field, isEntityId, parseEntityId };
package/dist/index.js CHANGED
@@ -1,4 +1,20 @@
1
1
  import { t as SDK_VERSION } from "./chunks/version.js";
2
+ //#region src/definitions/background.ts
3
+ /**
4
+ * Declares the package's background. A package has at most one: `ui.background` is a single
5
+ * field.
6
+ *
7
+ * @param background - Its component's loader, and what it does.
8
+ * @returns The background, for `definePackage`'s `ui.background`.
9
+ */
10
+ /* @__NO_SIDE_EFFECTS__ */
11
+ function defineBackground(background) {
12
+ return {
13
+ ...background,
14
+ kind: "background"
15
+ };
16
+ }
17
+ //#endregion
2
18
  //#region src/definitions/card.ts
3
19
  /**
4
20
  * Declares a card.
@@ -240,4 +256,4 @@ const field = {
240
256
  })
241
257
  };
242
258
  //#endregion
243
- export { ENTITY_DOMAINS, SDK_VERSION, defineCard, defineCompose, defineContainer, defineEntityType, definePackage, definePage, defineSettings, field, isEntityId, parseEntityId };
259
+ export { ENTITY_DOMAINS, SDK_VERSION, defineBackground, defineCard, defineCompose, defineContainer, defineEntityType, definePackage, definePage, defineSettings, field, isEntityId, parseEntityId };
package/dist/ui.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { G as CapabilityState, H as CapabilityCommands, S as FormValues, Y as DeclaredCapabilities, ct as EntityDomain, d as EntityTypeDefinition, f as ValuesOf, i as SettingsDefinition, lt as EntityId, q as CommandableCapability, r as JsonValue, s as ArgsOf, t as JsonObject, u as CommandsOf, z as ValueOfField } from "./chunks/json.js";
2
- import { a as PageProps, n as EntityViewProps, t as CardProps } from "./chunks/props.js";
2
+ import { n as CardProps, o as PageProps, r as EntityViewProps, t as BackgroundProps } from "./chunks/props.js";
3
3
  import { a as TelemetryResolution, i as TelemetryPoint, n as HistorySeries, r as StateHistoryPoint, t as ChangeCause } from "./chunks/history.js";
4
4
  import { AnchorHTMLAttributes, ComponentType, ReactElement, ReactNode } from "react";
5
5
  //#region src/ui/types.d.ts
@@ -315,6 +315,20 @@ type PlatformLinkProps = LinkAttributes & {
315
315
  type PageActionsProps = {
316
316
  readonly children?: ReactNode;
317
317
  };
318
+ /**
319
+ * A window of the package floating over the interface's pages, in a corner of the page beside the
320
+ * rail: one a package, thrown from corner to corner, hidden on the package's own page and on a
321
+ * phone. Since 1.6.
322
+ */
323
+ type FloatingProps = {
324
+ /** Whether it is shown. */
325
+ readonly open: boolean;
326
+ /** What a screen reader calls it, in the viewer's language. */
327
+ readonly label: string;
328
+ /** What closing it does; without it the window has no close button. */
329
+ readonly onClose?: () => void;
330
+ readonly children?: ReactNode;
331
+ };
318
332
  /** What a toast says. Since 1.4. */
319
333
  type ToastMessage = {
320
334
  /** A few words, no full stop. */
@@ -381,6 +395,8 @@ type UiHost = {
381
395
  readonly usePackageLive: <TData = JsonValue>(topic: string, options?: LiveOptions) => LiveState<TData>;
382
396
  /** Since 1.5. */
383
397
  readonly usePackageSend: () => PackageSend;
398
+ /** Since 1.6. */
399
+ readonly Floating: ComponentType<FloatingProps>;
384
400
  };
385
401
  //#endregion
386
402
  //#region src/ui/index.d.ts
@@ -588,5 +604,15 @@ export declare function PlatformLink(props: PlatformLinkProps): ReactElement;
588
604
  * @returns The actions.
589
605
  */
590
606
  export declare function PageActions(props: PageActionsProps): ReactElement;
607
+ /**
608
+ * A window floating over the interface's pages, from the package's background, page or card -
609
+ * drawn while the component that draws it is, so a background's outlives every page. The
610
+ * interface gives the frame, the throwing from corner to corner and the close button; what is
611
+ * inside is the package's own. Since 1.6.
612
+ *
613
+ * @param props - Whether it is shown, what it is called, what closing it does, and what it holds.
614
+ * @returns The window.
615
+ */
616
+ export declare function Floating(props: FloatingProps): ReactElement;
591
617
  //#endregion
592
- export type { AreaActions, AreaDraft, AreaKind, AreaView, CardProps, ChangeCause, CustomEntityState, EntitiesFilter, EntityPicture, EntityView, EntityViewProps, History, HistoryQuery, HistorySeries, HistoryWindow, LiveOptions, LiveState, Locale, Mutation, MutationOptions, PackageCall, PackageInfo, PackageLinkProps, PackageNavigate, PackageRoute, PackageSend, PackageSettings, PageActionsProps, PageProps, PictureOptions, PlatformLinkProps, PlatformNavigate, PlatformTarget, PluralEnglish, RpcOptions, RpcState, SendCommand, SettingsPatch, StateHistoryPoint, Telemetry, TelemetryPoint, TelemetryQuery, TelemetryResolution, Theme, ToastMessage, Toasts, Translate, Translation, TranslationValues, UiHost, Viewer, VisibleSettings };
618
+ export type { AreaActions, AreaDraft, AreaKind, AreaView, BackgroundProps, CardProps, ChangeCause, CustomEntityState, EntitiesFilter, EntityPicture, EntityView, EntityViewProps, FloatingProps, History, HistoryQuery, HistorySeries, HistoryWindow, LiveOptions, LiveState, Locale, Mutation, MutationOptions, PackageCall, PackageInfo, PackageLinkProps, PackageNavigate, PackageRoute, PackageSend, PackageSettings, PageActionsProps, PageProps, PictureOptions, PlatformLinkProps, PlatformNavigate, PlatformTarget, PluralEnglish, RpcOptions, RpcState, SendCommand, SettingsPatch, StateHistoryPoint, Telemetry, TelemetryPoint, TelemetryQuery, TelemetryResolution, Theme, ToastMessage, Toasts, Translate, Translation, TranslationValues, UiHost, Viewer, VisibleSettings };
package/dist/ui.js CHANGED
@@ -320,5 +320,17 @@ function PlatformLink(props) {
320
320
  function PageActions(props) {
321
321
  return createElement(ui("PageActions", "1.3"), props);
322
322
  }
323
+ /**
324
+ * A window floating over the interface's pages, from the package's background, page or card -
325
+ * drawn while the component that draws it is, so a background's outlives every page. The
326
+ * interface gives the frame, the throwing from corner to corner and the close button; what is
327
+ * inside is the package's own. Since 1.6.
328
+ *
329
+ * @param props - Whether it is shown, what it is called, what closing it does, and what it holds.
330
+ * @returns The window.
331
+ */
332
+ function Floating(props) {
333
+ return createElement(ui("Floating", "1.6"), props);
334
+ }
323
335
  //#endregion
324
- export { PackageLink, PageActions, PlatformLink, useAreaActions, useAreas, useCommand, useCustomEntity, useEntities, useEntity, useEntityPicture, useLocale, usePackage, usePackageCall, usePackageLive, usePackageMutation, usePackageNavigate, usePackageRoute, usePackageRpc, usePackageSend, usePackageSettings, usePlatformNavigate, usePortalContainer, useStateHistory, useTelemetry, useTheme, useToast, useTranslation, useViewer };
336
+ export { Floating, PackageLink, PageActions, PlatformLink, useAreaActions, useAreas, useCommand, useCustomEntity, useEntities, useEntity, useEntityPicture, useLocale, usePackage, usePackageCall, usePackageLive, usePackageMutation, usePackageNavigate, usePackageRoute, usePackageRpc, usePackageSend, usePackageSettings, usePlatformNavigate, usePortalContainer, useStateHistory, useTelemetry, useTheme, useToast, useTranslation, useViewer };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nebulahome/package-sdk",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "description": "Write a NebulaHome package: declare it, build it, and run it on the platform.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -100,10 +100,10 @@
100
100
  "vitest": "^4.1.11",
101
101
  "yaml": "^2.9.0",
102
102
  "zod": "^4.5.4",
103
- "@nebulahome/contracts": "2026.10.0-alpha.23",
104
- "@nebulahome/eslint-config": "2026.10.0-alpha.23",
105
- "@nebulahome/ui": "2026.10.0-alpha.23",
106
- "@nebulahome/tsconfig": "2026.10.0-alpha.23"
103
+ "@nebulahome/tsconfig": "2026.10.0-alpha.32",
104
+ "@nebulahome/contracts": "2026.10.0-alpha.32",
105
+ "@nebulahome/eslint-config": "2026.10.0-alpha.32",
106
+ "@nebulahome/ui": "2026.10.0-alpha.32"
107
107
  },
108
108
  "scripts": {
109
109
  "build": "tsdown && node scripts/build-styles.js",