@baloise/ds-react 19.10.2 → 20.0.0-next.10

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.
Files changed (40) hide show
  1. package/LICENSE +210 -0
  2. package/dist/bootstrap.d.ts +10 -0
  3. package/dist/bootstrap.js +8 -0
  4. package/dist/components/ds-root-provider.d.ts +2 -0
  5. package/dist/components/ds-root-provider.js +4 -0
  6. package/dist/components/ds-root-provider.server.d.ts +2 -0
  7. package/dist/components/ds-root-provider.server.js +3 -0
  8. package/dist/components/ds-root-provider.shared.d.ts +10 -0
  9. package/dist/components/ds-root-provider.shared.js +65 -0
  10. package/dist/components/modal.d.ts +6 -0
  11. package/dist/components/modal.js +22 -0
  12. package/dist/generated/components.d.ts +401 -0
  13. package/dist/generated/components.js +821 -0
  14. package/dist/generated/components.server.d.ts +403 -0
  15. package/dist/generated/components.server.js +1197 -0
  16. package/dist/hooks/index.d.ts +3 -0
  17. package/dist/hooks/index.js +3 -0
  18. package/dist/hooks/use-alert-controller.d.ts +2 -0
  19. package/dist/hooks/use-alert-controller.js +14 -0
  20. package/dist/hooks/use-modal.d.ts +7 -0
  21. package/dist/hooks/use-modal.js +54 -0
  22. package/dist/hooks/use-snackbar.d.ts +1 -0
  23. package/dist/hooks/use-snackbar.js +8 -0
  24. package/dist/hooks/use-toast.d.ts +1 -0
  25. package/dist/hooks/use-toast.js +8 -0
  26. package/dist/index.d.ts +8 -0
  27. package/dist/index.js +5 -0
  28. package/dist/index.server.d.ts +8 -0
  29. package/dist/index.server.js +5 -0
  30. package/dist/ssr-create-component.d.ts +9 -0
  31. package/dist/ssr-create-component.js +23 -0
  32. package/dist/wrappers.d.ts +26 -0
  33. package/dist/wrappers.js +26 -0
  34. package/dist/wrappers.server.d.ts +26 -0
  35. package/dist/wrappers.server.js +26 -0
  36. package/package.json +44 -9
  37. package/index.esm.d.ts +0 -1
  38. package/index.esm.js +0 -1252
  39. package/src/generated/components.d.ts +0 -531
  40. package/src/index.d.ts +0 -6
@@ -0,0 +1,3 @@
1
+ export { useModal } from './use-modal';
2
+ export { useToast } from './use-toast';
3
+ export { useSnackbar } from './use-snackbar';
@@ -0,0 +1,3 @@
1
+ export { useModal } from './use-modal';
2
+ export { useToast } from './use-toast';
3
+ export { useSnackbar } from './use-snackbar';
@@ -0,0 +1,2 @@
1
+ import type { Alert, AlertController } from '@baloise/ds-core';
2
+ export declare function useAlertController(controller: AlertController): readonly [(options: Alert) => Promise<void>, () => Promise<void>];
@@ -0,0 +1,14 @@
1
+ import { useCallback, useRef } from 'react';
2
+ import { defineCustomElement as defineDsAlertContainer } from '@baloise/ds-core/components/ds-alert-container.js';
3
+ export function useAlertController(controller) {
4
+ defineDsAlertContainer();
5
+ const idRef = useRef(undefined);
6
+ const present = useCallback(async (options) => {
7
+ idRef.current = await controller.create(options);
8
+ }, [controller]);
9
+ const dismiss = useCallback(async () => {
10
+ if (idRef.current)
11
+ await controller.remove(idRef.current);
12
+ }, [controller]);
13
+ return [present, dismiss];
14
+ }
@@ -0,0 +1,7 @@
1
+ import { type ModalOptions } from '@baloise/ds-core';
2
+ import { type ReactNode } from 'react';
3
+ /**
4
+ * Imperative modal hook. `present()` mounts React content into a detached container
5
+ * and hands it to the modal controller via `ModalOptions.component`.
6
+ */
7
+ export declare function useModal(): readonly [(content: ReactNode, options?: Omit<ModalOptions, "component" | "componentProps">) => Promise<void>, (data?: unknown, role?: string) => Promise<void>];
@@ -0,0 +1,54 @@
1
+ 'use client';
2
+ import { dsModalController } from '@baloise/ds-core';
3
+ import { useCallback, useRef } from 'react';
4
+ import { flushSync } from 'react-dom';
5
+ import { createRoot } from 'react-dom/client';
6
+ /**
7
+ * Imperative modal hook. `present()` mounts React content into a detached container
8
+ * and hands it to the modal controller via `ModalOptions.component`.
9
+ */
10
+ export function useModal() {
11
+ const modalRef = useRef(null);
12
+ const rootRef = useRef(null);
13
+ const containerRef = useRef(null);
14
+ const projectedNodesRef = useRef([]);
15
+ const cleanup = useCallback(() => {
16
+ var _a, _b, _c, _d;
17
+ // The controller moves the container's children into ds-modal's light DOM so the
18
+ // browser can slot them; React still thinks they live in the container, so move
19
+ // them back before unmounting or React's reconciler fails to remove them.
20
+ const container = containerRef.current;
21
+ if (container) {
22
+ projectedNodesRef.current.forEach(node => container.appendChild(node));
23
+ }
24
+ (_a = rootRef.current) === null || _a === void 0 ? void 0 : _a.unmount();
25
+ (_b = containerRef.current) === null || _b === void 0 ? void 0 : _b.remove();
26
+ (_d = (_c = modalRef.current) === null || _c === void 0 ? void 0 : _c.remove) === null || _d === void 0 ? void 0 : _d.call(_c);
27
+ projectedNodesRef.current = [];
28
+ modalRef.current = null;
29
+ rootRef.current = null;
30
+ containerRef.current = null;
31
+ }, []);
32
+ const dismiss = useCallback(async (data, role) => {
33
+ const modal = modalRef.current;
34
+ if (!modal)
35
+ return;
36
+ // dismiss gains a data/role payload in #2120
37
+ await modal.dismiss(data, role);
38
+ }, []);
39
+ const present = useCallback(async (content, options) => {
40
+ cleanup();
41
+ const container = document.createElement('div');
42
+ const root = createRoot(container);
43
+ containerRef.current = container;
44
+ rootRef.current = root;
45
+ // The modal controller reads the container's children synchronously to project
46
+ // them into ds-modal's slots, so the initial render must commit before it runs.
47
+ flushSync(() => root.render(content));
48
+ projectedNodesRef.current = Array.from(container.childNodes);
49
+ const modal = await dsModalController.create(Object.assign(Object.assign({}, options), { component: container }));
50
+ modalRef.current = modal;
51
+ modal.addEventListener('dsDidDismiss', cleanup, { once: true });
52
+ }, [cleanup]);
53
+ return [present, dismiss];
54
+ }
@@ -0,0 +1 @@
1
+ export declare function useSnackbar(): readonly [(options: import("@baloise/ds-core").Alert) => Promise<void>, () => Promise<void>];
@@ -0,0 +1,8 @@
1
+ 'use client';
2
+ import { dsSnackbarController } from '@baloise/ds-core';
3
+ import { defineCustomElement as defineDsSnackbar } from '@baloise/ds-core/components/ds-snackbar.js';
4
+ import { useAlertController } from './use-alert-controller';
5
+ export function useSnackbar() {
6
+ defineDsSnackbar();
7
+ return useAlertController(dsSnackbarController);
8
+ }
@@ -0,0 +1 @@
1
+ export declare function useToast(): readonly [(options: import("@baloise/ds-core").Alert) => Promise<void>, () => Promise<void>];
@@ -0,0 +1,8 @@
1
+ 'use client';
2
+ import { dsToastController } from '@baloise/ds-core';
3
+ import { defineCustomElement as defineDsToast } from '@baloise/ds-core/components/ds-toast.js';
4
+ import { useAlertController } from './use-alert-controller';
5
+ export function useToast() {
6
+ defineDsToast();
7
+ return useAlertController(dsToastController);
8
+ }
@@ -0,0 +1,8 @@
1
+ export { bootstrapDesignSystem } from './bootstrap';
2
+ export type * from './generated/components';
3
+ export * from './wrappers';
4
+ export { DsRootProvider } from './components/ds-root-provider';
5
+ export type { DsRootProviderProps } from './components/ds-root-provider';
6
+ export { Modal } from './components/modal';
7
+ export type { ModalProps } from './components/modal';
8
+ export * from './hooks';
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export { bootstrapDesignSystem } from './bootstrap';
2
+ export * from './wrappers';
3
+ export { DsRootProvider } from './components/ds-root-provider';
4
+ export { Modal } from './components/modal';
5
+ export * from './hooks';
@@ -0,0 +1,8 @@
1
+ export { bootstrapDesignSystem } from './bootstrap';
2
+ export type * from './generated/components.server';
3
+ export * from './wrappers.server';
4
+ export { DsRootProvider } from './components/ds-root-provider.server';
5
+ export type { DsRootProviderProps } from './components/ds-root-provider.server';
6
+ export { Modal } from './components/modal';
7
+ export type { ModalProps } from './components/modal';
8
+ export * from './hooks';
@@ -0,0 +1,5 @@
1
+ export { bootstrapDesignSystem } from './bootstrap';
2
+ export * from './wrappers.server';
3
+ export { DsRootProvider } from './components/ds-root-provider.server';
4
+ export { Modal } from './components/modal';
5
+ export * from './hooks';
@@ -0,0 +1,9 @@
1
+ import { type ReactNode } from 'react';
2
+ import { createComponent as createStencilSsrComponent } from '@stencil/react-output-target/ssr';
3
+ /**
4
+ * Browser parsing consumes `<template shadowrootmode>` into a real shadow root
5
+ * before React hydrates. Keep that markup as an opaque HTML blob so the
6
+ * reconciler does not look for the template node and throw error 418.
7
+ */
8
+ export declare function asOpaqueSsrMarkup(html: string): ReactNode;
9
+ export declare function createComponent(options: Parameters<typeof createStencilSsrComponent>[0]): (props: Record<string, unknown>) => Promise<import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | (string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined)>;
@@ -0,0 +1,23 @@
1
+ import { createElement } from 'react';
2
+ import { createComponent as createStencilSsrComponent } from '@stencil/react-output-target/ssr';
3
+ const opaqueSsrStyle = { display: 'contents' };
4
+ /**
5
+ * Browser parsing consumes `<template shadowrootmode>` into a real shadow root
6
+ * before React hydrates. Keep that markup as an opaque HTML blob so the
7
+ * reconciler does not look for the template node and throw error 418.
8
+ */
9
+ export function asOpaqueSsrMarkup(html) {
10
+ return createElement('div', {
11
+ suppressHydrationWarning: true,
12
+ style: opaqueSsrStyle,
13
+ dangerouslySetInnerHTML: { __html: html },
14
+ });
15
+ }
16
+ export function createComponent(options) {
17
+ const StencilComponent = createStencilSsrComponent(options);
18
+ return async function OpaqueSsrComponent(props) {
19
+ const vnode = await StencilComponent(props);
20
+ const { renderToStaticMarkup } = await import('react-dom/server');
21
+ return asOpaqueSsrMarkup(renderToStaticMarkup(vnode));
22
+ };
23
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Public generated wrappers.
3
+ *
4
+ * Overlay wrappers with hand-authored replacements, and the renamed `ds-app`
5
+ * root wrapper, stay public but are marked `@deprecated`. Prefer `Modal`,
6
+ * `useToast`, `useSnackbar`, and `DsRoot`.
7
+ */
8
+ export { DsAccordion, DsAppFooter, DsAppNavbar, DsBadge, DsBrandIcon, DsButton, DsButtonGroup, DsCard, DsCardActions, DsCardContent, DsCardHeader, DsCardSubtitle, DsCardTitle, DsCarousel, DsCarouselItem, DsCheckbox, DsCheckboxGroup, DsClose, DsContent, DsCounter, DsData, DsDataItem, DsDataLabel, DsDataValue, DsDatepicker, DsDivider, DsDrawer, DsFileUpload, DsHeading, DsHint, DsHintText, DsHintTitle, DsIcon, DsInput, DsInputPhone, DsItem, DsLabel, DsList, DsLogo, DsModalBody, DsModalHeader, DsNotification, DsNumberInput, DsPagination, DsPopup, DsProgressBar, DsRadio, DsRadioGroup, DsRoot, DsSegment, DsSegmentItem, DsSelect, DsSelectOptgroup, DsSelectOption, DsShape, DsSheet, DsSlider, DsSpinner, DsStack, DsStep, DsStepPanel, DsSteps, DsTab, DsTabPanel, DsTabs, DsTag, DsTagGroup, DsText, DsTextarea, DsToggle, DsTooltip, } from './generated/components';
9
+ /**
10
+ * @deprecated Use `useToast` or `useSnackbar` instead. `DsAlertContainer` is the
11
+ * internal overlay host those hooks already manage.
12
+ */
13
+ export { DsAlertContainer } from './generated/components';
14
+ /**
15
+ * @deprecated Use `Modal` instead. The generated wrapper does not keep React
16
+ * `open` state in sync when the modal self-dismisses.
17
+ */
18
+ export { DsModal } from './generated/components';
19
+ /**
20
+ * @deprecated Use `useSnackbar` instead.
21
+ */
22
+ export { DsSnackbar } from './generated/components';
23
+ /**
24
+ * @deprecated Use `useToast` instead.
25
+ */
26
+ export { DsToast } from './generated/components';
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Public generated wrappers.
3
+ *
4
+ * Overlay wrappers with hand-authored replacements, and the renamed `ds-app`
5
+ * root wrapper, stay public but are marked `@deprecated`. Prefer `Modal`,
6
+ * `useToast`, `useSnackbar`, and `DsRoot`.
7
+ */
8
+ export { DsAccordion, DsAppFooter, DsAppNavbar, DsBadge, DsBrandIcon, DsButton, DsButtonGroup, DsCard, DsCardActions, DsCardContent, DsCardHeader, DsCardSubtitle, DsCardTitle, DsCarousel, DsCarouselItem, DsCheckbox, DsCheckboxGroup, DsClose, DsContent, DsCounter, DsData, DsDataItem, DsDataLabel, DsDataValue, DsDatepicker, DsDivider, DsDrawer, DsFileUpload, DsHeading, DsHint, DsHintText, DsHintTitle, DsIcon, DsInput, DsInputPhone, DsItem, DsLabel, DsList, DsLogo, DsModalBody, DsModalHeader, DsNotification, DsNumberInput, DsPagination, DsPopup, DsProgressBar, DsRadio, DsRadioGroup, DsRoot, DsSegment, DsSegmentItem, DsSelect, DsSelectOptgroup, DsSelectOption, DsShape, DsSheet, DsSlider, DsSpinner, DsStack, DsStep, DsStepPanel, DsSteps, DsTab, DsTabPanel, DsTabs, DsTag, DsTagGroup, DsText, DsTextarea, DsToggle, DsTooltip, } from './generated/components';
9
+ /**
10
+ * @deprecated Use `useToast` or `useSnackbar` instead. `DsAlertContainer` is the
11
+ * internal overlay host those hooks already manage.
12
+ */
13
+ export { DsAlertContainer } from './generated/components';
14
+ /**
15
+ * @deprecated Use `Modal` instead. The generated wrapper does not keep React
16
+ * `open` state in sync when the modal self-dismisses.
17
+ */
18
+ export { DsModal } from './generated/components';
19
+ /**
20
+ * @deprecated Use `useSnackbar` instead.
21
+ */
22
+ export { DsSnackbar } from './generated/components';
23
+ /**
24
+ * @deprecated Use `useToast` instead.
25
+ */
26
+ export { DsToast } from './generated/components';
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Public generated wrappers.
3
+ *
4
+ * Overlay wrappers with hand-authored replacements, and the renamed `ds-app`
5
+ * root wrapper, stay public but are marked `@deprecated`. Prefer `Modal`,
6
+ * `useToast`, `useSnackbar`, and `DsRoot`.
7
+ */
8
+ export { DsAccordion, DsAppFooter, DsAppNavbar, DsBadge, DsBrandIcon, DsButton, DsButtonGroup, DsCard, DsCardActions, DsCardContent, DsCardHeader, DsCardSubtitle, DsCardTitle, DsCarousel, DsCarouselItem, DsCheckbox, DsCheckboxGroup, DsClose, DsContent, DsCounter, DsData, DsDataItem, DsDataLabel, DsDataValue, DsDatepicker, DsDivider, DsDrawer, DsFileUpload, DsHeading, DsHint, DsHintText, DsHintTitle, DsIcon, DsInput, DsInputPhone, DsItem, DsLabel, DsList, DsLogo, DsModalBody, DsModalHeader, DsNotification, DsNumberInput, DsPagination, DsPopup, DsProgressBar, DsRadio, DsRadioGroup, DsRoot, DsSegment, DsSegmentItem, DsSelect, DsSelectOptgroup, DsSelectOption, DsShape, DsSheet, DsSlider, DsSpinner, DsStack, DsStep, DsStepPanel, DsSteps, DsTab, DsTabPanel, DsTabs, DsTag, DsTagGroup, DsText, DsTextarea, DsToggle, DsTooltip, } from './generated/components.server';
9
+ /**
10
+ * @deprecated Use `useToast` or `useSnackbar` instead. `DsAlertContainer` is the
11
+ * internal overlay host those hooks already manage.
12
+ */
13
+ export { DsAlertContainer } from './generated/components.server';
14
+ /**
15
+ * @deprecated Use `Modal` instead. The generated wrapper does not keep React
16
+ * `open` state in sync when the modal self-dismisses.
17
+ */
18
+ export { DsModal } from './generated/components.server';
19
+ /**
20
+ * @deprecated Use `useSnackbar` instead.
21
+ */
22
+ export { DsSnackbar } from './generated/components.server';
23
+ /**
24
+ * @deprecated Use `useToast` instead.
25
+ */
26
+ export { DsToast } from './generated/components.server';
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Public generated wrappers.
3
+ *
4
+ * Overlay wrappers with hand-authored replacements, and the renamed `ds-app`
5
+ * root wrapper, stay public but are marked `@deprecated`. Prefer `Modal`,
6
+ * `useToast`, `useSnackbar`, and `DsRoot`.
7
+ */
8
+ export { DsAccordion, DsAppFooter, DsAppNavbar, DsBadge, DsBrandIcon, DsButton, DsButtonGroup, DsCard, DsCardActions, DsCardContent, DsCardHeader, DsCardSubtitle, DsCardTitle, DsCarousel, DsCarouselItem, DsCheckbox, DsCheckboxGroup, DsClose, DsContent, DsCounter, DsData, DsDataItem, DsDataLabel, DsDataValue, DsDatepicker, DsDivider, DsDrawer, DsFileUpload, DsHeading, DsHint, DsHintText, DsHintTitle, DsIcon, DsInput, DsInputPhone, DsItem, DsLabel, DsList, DsLogo, DsModalBody, DsModalHeader, DsNotification, DsNumberInput, DsPagination, DsPopup, DsProgressBar, DsRadio, DsRadioGroup, DsRoot, DsSegment, DsSegmentItem, DsSelect, DsSelectOptgroup, DsSelectOption, DsShape, DsSheet, DsSlider, DsSpinner, DsStack, DsStep, DsStepPanel, DsSteps, DsTab, DsTabPanel, DsTabs, DsTag, DsTagGroup, DsText, DsTextarea, DsToggle, DsTooltip, } from './generated/components.server';
9
+ /**
10
+ * @deprecated Use `useToast` or `useSnackbar` instead. `DsAlertContainer` is the
11
+ * internal overlay host those hooks already manage.
12
+ */
13
+ export { DsAlertContainer } from './generated/components.server';
14
+ /**
15
+ * @deprecated Use `Modal` instead. The generated wrapper does not keep React
16
+ * `open` state in sync when the modal self-dismisses.
17
+ */
18
+ export { DsModal } from './generated/components.server';
19
+ /**
20
+ * @deprecated Use `useSnackbar` instead.
21
+ */
22
+ export { DsSnackbar } from './generated/components.server';
23
+ /**
24
+ * @deprecated Use `useToast` instead.
25
+ */
26
+ export { DsToast } from './generated/components.server';
package/package.json CHANGED
@@ -1,22 +1,57 @@
1
1
  {
2
2
  "name": "@baloise/ds-react",
3
- "version": "19.10.2",
4
- "description": "The Baloise Design-System is an open source project for styling awesome web applications that follow the Baloise corporate styling guidelines.",
3
+ "version": "20.0.0-next.10",
4
+ "description": "The Helvetia Design System is an open source project for styling awesome web applications that follow the Helvetia corporate styling guidelines.",
5
5
  "repository": {
6
6
  "type": "git",
7
- "url": "https://github.com/baloise/design-system.git"
7
+ "url": "git+https://github.com/baloise/design-system.git"
8
8
  },
9
9
  "publishConfig": {
10
10
  "access": "public"
11
11
  },
12
12
  "homepage": "https://design.baloise.dev",
13
+ "security": "https://github.com/baloise/design-system/security/advisories/new",
13
14
  "license": "Apache-2.0",
15
+ "type": "module",
16
+ "main": "dist/index.js",
17
+ "module": "dist/index.js",
18
+ "types": "dist/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "node": {
22
+ "types": "./dist/index.server.d.ts",
23
+ "default": "./dist/index.server.js"
24
+ },
25
+ "types": "./dist/index.d.ts",
26
+ "default": "./dist/index.js"
27
+ }
28
+ },
29
+ "files": [
30
+ "dist/"
31
+ ],
32
+ "peerDependencies": {
33
+ "react": "^18.0.0 || ^19.0.0",
34
+ "react-dom": "^18.0.0 || ^19.0.0"
35
+ },
14
36
  "dependencies": {
15
- "@baloise/ds-core": "19.10.2",
16
- "@stencil/react-output-target": "1.2.0"
37
+ "@baloise/ds-core": "20.0.0-next.10",
38
+ "@stencil/react-output-target": "1.6.2"
17
39
  },
18
- "module": "./index.esm.js",
19
- "type": "module",
20
- "main": "./index.esm.js",
21
- "types": "./index.esm.d.ts"
40
+ "devDependencies": {
41
+ "@types/react": "19.3.0",
42
+ "@types/react-dom": "19.3.0",
43
+ "eslint": "10.10.0",
44
+ "eslint-plugin-react-hooks": "7.1.1",
45
+ "jsdom": "30.1.0",
46
+ "react": "19.3.0",
47
+ "react-dom": "19.3.0",
48
+ "typescript": "5.6.3",
49
+ "vitest": "4.1.11"
50
+ },
51
+ "scripts": {
52
+ "build": "tsc -p tsconfig.lib.json && node scripts/patch-server-wrappers.mjs",
53
+ "build:clean": "rimraf dist",
54
+ "lint": "eslint .",
55
+ "test": "vitest --run"
56
+ }
22
57
  }
package/index.esm.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from "./src/index";