@wallarm-org/design-system 4.4.0-rc-feat-claude-design.1 → 4.4.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.
Files changed (42) hide show
  1. package/README.md +0 -13
  2. package/dist/components/Calendar/CalendarContent.js +1 -2
  3. package/dist/components/CodeSnippet/adapters/createShikiHighlighter.d.ts +1 -0
  4. package/dist/components/CodeSnippet/adapters/createShikiHighlighter.js +52 -0
  5. package/dist/components/CodeSnippet/adapters/index.d.ts +3 -18
  6. package/dist/components/CodeSnippet/adapters/index.js +3 -13
  7. package/dist/components/CodeSnippet/adapters/loadHighlightJsAdapter.d.ts +2 -0
  8. package/dist/components/CodeSnippet/adapters/loadHighlightJsAdapter.js +5 -0
  9. package/dist/components/CodeSnippet/adapters/loadPrismAdapter.d.ts +2 -0
  10. package/dist/components/CodeSnippet/adapters/loadPrismAdapter.js +5 -0
  11. package/dist/components/CodeSnippet/adapters/loadShikiAdapter.d.ts +2 -0
  12. package/dist/components/CodeSnippet/adapters/loadShikiAdapter.js +5 -0
  13. package/dist/components/CodeSnippet/adapters/shiki.js +1 -8
  14. package/dist/components/Drawer/DrawerPortal.d.ts +1 -1
  15. package/dist/components/Drawer/DrawerPortal.js +1 -1
  16. package/dist/components/DropdownMenu/DropdownMenu.js +1 -1
  17. package/dist/components/DropdownMenu/DropdownMenuContent.js +1 -1
  18. package/dist/components/FeedbackPulse/FeedbackPulse.js +1 -1
  19. package/dist/components/FilterCascade/FilterCascadeContent.js +1 -1
  20. package/dist/components/Popover/PopoverContent.js +1 -1
  21. package/dist/components/SearchModal/SearchModalContent.js +1 -1
  22. package/dist/components/Select/SelectPositioner.js +1 -1
  23. package/dist/components/Selection/SelectionBulkBar/SelectionBulkBar.js +1 -1
  24. package/dist/components/Table/TableActionBar/TableActionBar.js +1 -1
  25. package/dist/components/Table/TableInner/TableInnerWindow.js +1 -1
  26. package/dist/components/Toast/Toaster.js +1 -1
  27. package/dist/components/Tooltip/TooltipContent.js +1 -1
  28. package/dist/components/Tour/TourInner.js +1 -2
  29. package/dist/components/WallyAssistant/WallyAssistant.js +1 -1
  30. package/dist/components/WallyAssistant/views/ChatViewProvider.js +1 -1
  31. package/dist/components/WallySkeleton/WallySkeleton.d.ts +11 -0
  32. package/dist/components/WallySkeleton/WallySkeleton.js +186 -0
  33. package/dist/components/WallySkeleton/index.d.ts +1 -0
  34. package/dist/components/WallySkeleton/index.js +1 -0
  35. package/dist/index.d.ts +1 -0
  36. package/dist/index.js +1 -0
  37. package/dist/metadata/components.json +310 -5
  38. package/package.json +4 -12
  39. package/dist/lib/portal/Portal.d.ts +0 -3
  40. package/dist/lib/portal/Portal.js +0 -22
  41. package/dist/lib/portal/PortalContainerContext.d.ts +0 -3
  42. package/dist/lib/portal/PortalContainerContext.js +0 -3
package/README.md CHANGED
@@ -115,19 +115,6 @@ pnpm --filter @wallarm-org/design-system icons:sync --only Bell,BellOff # ref
115
115
 
116
116
  The command writes the component files, `src/icons/index.ts`, the gallery category (`module/const.ts`) and Code Connect (`module/Icons.figma.batch.json` + its `Icons.figma.batch.ts` template). `scripts/icons/manifest.json` maps Figma nodes to component names, and also holds excluded nodes and the `keep` list of hand-maintained icons. When a new layer's name collides with an existing icon, map it there. Brand icons without a Neutral variant in Figma get a generated `*Neutral` twin. Commit with `[update-screenshots]` so CI refreshes the icon gallery baselines.
117
117
 
118
- ## Claude Design
119
-
120
- Choose **Wallarm Design System** in Claude Design to prototype with the generated component
121
- bundle, tokens, fonts and icons. See the [designer guide](../../apps/docs/docs/ai/claude-design.mdx).
122
- Run `pnpm --filter @wallarm-org/design-system build:claude-design` to build the package and
123
- generate the ignored `.claude-design/project/` folder. The bundle and story previews share
124
- an Rslib IIFE configuration with the native SWC React Compiler targeting React 18.
125
- Run `pnpm --filter @wallarm-org/design-system test:claude-design` for the React 18 harness and
126
- producer checks, or `pnpm --filter @wallarm-org/design-system claude-design:verify` to compare
127
- every output file across two consecutive builds. The repository's `/claude-design-sync`
128
- skill previews and manually publishes release changes; the first sync and remote deletions
129
- require confirmation. The npm package remains React 19; the separate canvas bundle uses React 18.
130
-
131
118
  ## 📖 Resources
132
119
 
133
120
  - [Docs site](https://wallarm.github.io/design-system/) - Guides and component docs
@@ -1,7 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { c } from "react/compiler-runtime";
3
- import { DatePicker } from "@ark-ui/react";
4
- import { Portal } from "../../lib/portal/Portal.js";
3
+ import { DatePicker, Portal } from "@ark-ui/react";
5
4
  import { cn } from "../../utils/cn.js";
6
5
  import { useLayerZIndexRef } from "../../utils/syncLayerZIndex.js";
7
6
  const CalendarContent = (t0)=>{
@@ -0,0 +1 @@
1
+ export declare const createShikiHighlighter: () => Promise<import("@shikijs/types").HighlighterCore>;
@@ -0,0 +1,52 @@
1
+ import { createHighlighterCore } from "shiki/core";
2
+ import { createOnigurumaEngine } from "shiki/engine/oniguruma";
3
+ import bash from "shiki/langs/bash.mjs";
4
+ import c from "shiki/langs/c.mjs";
5
+ import cpp from "shiki/langs/cpp.mjs";
6
+ import css from "shiki/langs/css.mjs";
7
+ import go from "shiki/langs/go.mjs";
8
+ import html from "shiki/langs/html.mjs";
9
+ import http from "shiki/langs/http.mjs";
10
+ import java from "shiki/langs/java.mjs";
11
+ import javascript from "shiki/langs/javascript.mjs";
12
+ import json from "shiki/langs/json.mjs";
13
+ import jsx from "shiki/langs/jsx.mjs";
14
+ import lua from "shiki/langs/lua.mjs";
15
+ import markdown from "shiki/langs/markdown.mjs";
16
+ import python from "shiki/langs/python.mjs";
17
+ import rust from "shiki/langs/rust.mjs";
18
+ import sql from "shiki/langs/sql.mjs";
19
+ import tsx from "shiki/langs/tsx.mjs";
20
+ import typescript from "shiki/langs/typescript.mjs";
21
+ import xml from "shiki/langs/xml.mjs";
22
+ import yaml from "shiki/langs/yaml.mjs";
23
+ import github_light from "shiki/themes/github-light.mjs";
24
+ const createShikiHighlighter = ()=>createHighlighterCore({
25
+ themes: [
26
+ github_light
27
+ ],
28
+ langs: [
29
+ javascript,
30
+ typescript,
31
+ jsx,
32
+ tsx,
33
+ bash,
34
+ json,
35
+ html,
36
+ xml,
37
+ css,
38
+ python,
39
+ go,
40
+ sql,
41
+ yaml,
42
+ markdown,
43
+ lua,
44
+ rust,
45
+ java,
46
+ c,
47
+ cpp,
48
+ http
49
+ ],
50
+ engine: createOnigurumaEngine(import("shiki/wasm"))
51
+ });
52
+ export { createShikiHighlighter };
@@ -1,20 +1,5 @@
1
+ export { loadHighlightJsAdapter } from './loadHighlightJsAdapter.js';
2
+ export { loadPrismAdapter } from './loadPrismAdapter.js';
3
+ export { loadShikiAdapter } from './loadShikiAdapter.js';
1
4
  export { plainAdapter } from './plain.js';
2
5
  export type { HighlightJsLanguage, HighlightResult, PlainLanguage, PrismLanguage, ShikiLanguage, SyntaxAdapter, Token, TokenType, } from './types.js';
3
- /**
4
- * Lazily load the Prism adapter for syntax highlighting.
5
- * Lightweight, good for most use cases.
6
- * Bundle size: ~15KB gzipped
7
- */
8
- export declare const loadPrismAdapter: () => Promise<import("./types.js").SyntaxAdapter<import("./types.js").PrismLanguage>>;
9
- /**
10
- * Lazily load the Shiki adapter for syntax highlighting.
11
- * High-quality highlighting with VS Code themes, supports more languages.
12
- * Bundle size: ~200KB+ gzipped (includes WASM)
13
- */
14
- export declare const loadShikiAdapter: () => Promise<import("./types.js").SyntaxAdapter<import("./types.js").ShikiLanguage>>;
15
- /**
16
- * Lazily load the highlight.js adapter for syntax highlighting.
17
- * Well-established library, good language support.
18
- * Bundle size: ~30KB gzipped (core + common languages)
19
- */
20
- export declare const loadHighlightJsAdapter: () => Promise<import("./types.js").SyntaxAdapter<import("./types.js").HighlightJsLanguage>>;
@@ -1,14 +1,4 @@
1
- const loadPrismAdapter = async ()=>{
2
- const { prismAdapter } = await import("./prism.js");
3
- return prismAdapter;
4
- };
5
- const loadShikiAdapter = async ()=>{
6
- const { shikiAdapter } = await import("./shiki.js");
7
- return shikiAdapter;
8
- };
9
- const loadHighlightJsAdapter = async ()=>{
10
- const { highlightJsAdapter } = await import("./highlightjs.js");
11
- return highlightJsAdapter;
12
- };
1
+ export { loadHighlightJsAdapter } from "./loadHighlightJsAdapter.js";
2
+ export { loadPrismAdapter } from "./loadPrismAdapter.js";
3
+ export { loadShikiAdapter } from "./loadShikiAdapter.js";
13
4
  export { plainAdapter } from "./plain.js";
14
- export { loadHighlightJsAdapter, loadPrismAdapter, loadShikiAdapter };
@@ -0,0 +1,2 @@
1
+ /** Lazily load the highlight.js adapter for syntax highlighting. */
2
+ export declare const loadHighlightJsAdapter: () => Promise<import("./types.js").SyntaxAdapter<import("./types.js").HighlightJsLanguage>>;
@@ -0,0 +1,5 @@
1
+ const loadHighlightJsAdapter = async ()=>{
2
+ const { highlightJsAdapter } = await import("./highlightjs.js");
3
+ return highlightJsAdapter;
4
+ };
5
+ export { loadHighlightJsAdapter };
@@ -0,0 +1,2 @@
1
+ /** Lazily load the Prism adapter for syntax highlighting. */
2
+ export declare const loadPrismAdapter: () => Promise<import("./types.js").SyntaxAdapter<import("./types.js").PrismLanguage>>;
@@ -0,0 +1,5 @@
1
+ const loadPrismAdapter = async ()=>{
2
+ const { prismAdapter } = await import("./prism.js");
3
+ return prismAdapter;
4
+ };
5
+ export { loadPrismAdapter };
@@ -0,0 +1,2 @@
1
+ /** Lazily load the Shiki adapter. Its highlighter initializes on first use. */
2
+ export declare const loadShikiAdapter: () => Promise<import("./types.js").SyntaxAdapter<import("./types.js").ShikiLanguage>>;
@@ -0,0 +1,5 @@
1
+ const loadShikiAdapter = async ()=>{
2
+ const { shikiAdapter } = await import("./shiki.js");
3
+ return shikiAdapter;
4
+ };
5
+ export { loadShikiAdapter };
@@ -44,14 +44,7 @@ function mapScopeToTokenType(scopes) {
44
44
  return 'plain';
45
45
  }
46
46
  async function getHighlighter() {
47
- if (!highlighterPromise) highlighterPromise = import("shiki").then(async ({ createHighlighter })=>createHighlighter({
48
- themes: [
49
- 'github-light'
50
- ],
51
- langs: [
52
- ...SUPPORTED_LANGUAGES
53
- ]
54
- }));
47
+ if (!highlighterPromise) highlighterPromise = import("./createShikiHighlighter.js").then(({ createShikiHighlighter })=>createShikiHighlighter());
55
48
  return highlighterPromise;
56
49
  }
57
50
  const shikiAdapter = {
@@ -1,5 +1,5 @@
1
1
  import type { FC, ReactNode } from 'react';
2
- import type { PortalProps } from '@ark-ui/react/portal';
2
+ import { type PortalProps } from '@ark-ui/react/portal';
3
3
  export interface DrawerPortalProps extends PortalProps {
4
4
  children: ReactNode;
5
5
  }
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { c } from "react/compiler-runtime";
3
- import { Portal } from "../../lib/portal/Portal.js";
3
+ import { Portal } from "@ark-ui/react/portal";
4
4
  const DrawerPortal = (t0)=>{
5
5
  const $ = c(6);
6
6
  let children;
@@ -146,7 +146,7 @@ const DropdownMenu = (t0)=>{
146
146
  const root = t8;
147
147
  let t9;
148
148
  if ($[36] !== root || $[37] !== testId) {
149
- t9 = /*#__PURE__*/ jsx(DropdownMenuContext.Provider, {
149
+ t9 = /*#__PURE__*/ jsx(DropdownMenuContext, {
150
150
  value: ctx,
151
151
  children: /*#__PURE__*/ jsx(TestIdProvider, {
152
152
  value: testId,
@@ -2,7 +2,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { Children, isValidElement } from "react";
4
4
  import { Menu } from "@ark-ui/react/menu";
5
- import { Portal } from "../../lib/portal/Portal.js";
5
+ import { Portal } from "@ark-ui/react/portal";
6
6
  import { cn } from "../../utils/cn.js";
7
7
  import { useLayerZIndexRef } from "../../utils/syncLayerZIndex.js";
8
8
  import { TestIdProvider, useTestId } from "../../utils/testId.js";
@@ -1,9 +1,9 @@
1
1
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { useEffect, useLayoutEffect, useRef, useState } from "react";
4
+ import { Portal } from "@ark-ui/react/portal";
4
5
  import { Presence } from "@ark-ui/react/presence";
5
6
  import { Check, X } from "../../icons/index.js";
6
- import { Portal } from "../../lib/portal/Portal.js";
7
7
  import { cn } from "../../utils/cn.js";
8
8
  import { Button } from "../Button/index.js";
9
9
  import { Textarea } from "../Textarea/index.js";
@@ -1,7 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { Children, isValidElement, useLayoutEffect, useRef } from "react";
4
- import { Portal } from "../../lib/portal/Portal.js";
4
+ import { Portal } from "@zag-js/react";
5
5
  import { cn } from "../../utils/cn.js";
6
6
  import { useLayerZIndexRef } from "../../utils/syncLayerZIndex.js";
7
7
  import { useTestId } from "../../utils/testId.js";
@@ -1,7 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { Popover, usePopoverContext } from "@ark-ui/react";
4
- import { Portal } from "../../lib/portal/Portal.js";
4
+ import { Portal } from "@ark-ui/react/portal";
5
5
  import { cn } from "../../utils/cn.js";
6
6
  import { useLayerZIndexRef } from "../../utils/syncLayerZIndex.js";
7
7
  import { useTestId } from "../../utils/testId.js";
@@ -2,7 +2,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { useEffect } from "react";
4
4
  import { Dialog } from "@ark-ui/react/dialog";
5
- import { Portal } from "../../lib/portal/Portal.js";
5
+ import { Portal } from "@ark-ui/react/portal";
6
6
  import { cn } from "../../utils/cn.js";
7
7
  import { useTestId } from "../../utils/testId.js";
8
8
  import { Overlay } from "../Overlay/index.js";
@@ -1,7 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { c } from "react/compiler-runtime";
3
+ import { Portal } from "@ark-ui/react/portal";
3
4
  import { Select } from "@ark-ui/react/select";
4
- import { Portal } from "../../lib/portal/Portal.js";
5
5
  import { cn } from "../../utils/cn.js";
6
6
  import { useLayerZIndexRef } from "../../utils/syncLayerZIndex.js";
7
7
  import { dropdownMenuClassNames } from "../DropdownMenu/index.js";
@@ -1,8 +1,8 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { Children, isValidElement } from "react";
4
+ import { Portal } from "@ark-ui/react/portal";
4
5
  import { Presence } from "@ark-ui/react/presence";
5
- import { Portal } from "../../../lib/portal/Portal.js";
6
6
  import { useTestId } from "../../../utils/testId.js";
7
7
  import { BulkBarSummary, BulkBarSummaryClear, BulkBarSummaryCount, BulkBarSummarySelectAll, BulkBarSummarySeparator } from "../../BulkBar/index.js";
8
8
  import { HStack } from "../../Stack/index.js";
@@ -2,7 +2,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { Children, isValidElement } from "react";
4
4
  import { Popover } from "@ark-ui/react/popover";
5
- import { Portal } from "../../../lib/portal/Portal.js";
5
+ import { Portal } from "@ark-ui/react/portal";
6
6
  import { useTestId } from "../../../utils/testId.js";
7
7
  import { bulkBarSurfaceClasses } from "../../BulkBar/classes.js";
8
8
  import { HStack } from "../../Stack/index.js";
@@ -200,7 +200,7 @@ const TableInnerWindow = (t0)=>{
200
200
  } else t17 = $[45];
201
201
  let t18;
202
202
  if ($[46] !== isEmpty || $[47] !== scrollRoot) {
203
- t18 = !isEmpty && /*#__PURE__*/ jsx(WindowScrollRootContext.Provider, {
203
+ t18 = !isEmpty && /*#__PURE__*/ jsx(WindowScrollRootContext, {
204
204
  value: scrollRoot,
205
205
  children: /*#__PURE__*/ jsx(TableBody, {})
206
206
  });
@@ -1,7 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { c } from "react/compiler-runtime";
3
+ import { Portal } from "@ark-ui/react/portal";
3
4
  import { Toaster, createToaster } from "@ark-ui/react/toast";
4
- import { Portal } from "../../lib/portal/Portal.js";
5
5
  import { cn } from "../../utils/cn.js";
6
6
  import { EXTENDED_TOAST_DURATION_MS, SIMPLE_TOAST_DURATION_MS, Toast, resolveToastVariant } from "./Toast.js";
7
7
  const DEFAULT_TOAST_PRIORITY = {
@@ -1,8 +1,8 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { c } from "react/compiler-runtime";
3
+ import { Portal } from "@ark-ui/react/portal";
3
4
  import { Tooltip } from "@ark-ui/react/tooltip";
4
5
  import { cva } from "class-variance-authority";
5
- import { Portal } from "../../lib/portal/Portal.js";
6
6
  import { cn } from "../../utils/cn.js";
7
7
  import { hasNonTextEnd } from "../../utils/hasNonTextEnd.js";
8
8
  import { useTestId } from "../../utils/testId.js";
@@ -1,7 +1,6 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { c } from "react/compiler-runtime";
3
- import { useTourContext } from "@ark-ui/react";
4
- import { Portal } from "../../lib/portal/Portal.js";
3
+ import { Portal, useTourContext } from "@ark-ui/react";
5
4
  import { TestIdProvider } from "../../utils/testId.js";
6
5
  import { TourBody } from "./TourBody.js";
7
6
  import { TourClose } from "./TourClose.js";
@@ -487,7 +487,7 @@ const WallyAssistant = (t0)=>{
487
487
  onFeedback: onFeedback,
488
488
  onCopy: onCopy,
489
489
  onRetry: onRetry,
490
- children: /*#__PURE__*/ jsx(AdapterContext.Provider, {
490
+ children: /*#__PURE__*/ jsx(AdapterContext, {
491
491
  value: outerAdapter ?? LAZY_PRISM,
492
492
  children: /*#__PURE__*/ jsxs(Chat, {
493
493
  "aria-label": labels.region,
@@ -82,7 +82,7 @@ const ChatViewProvider = (t0)=>{
82
82
  const value = t11;
83
83
  let t12;
84
84
  if ($[22] !== children || $[23] !== value) {
85
- t12 = /*#__PURE__*/ jsx(ChatViewContext.Provider, {
85
+ t12 = /*#__PURE__*/ jsx(ChatViewContext, {
86
86
  value: value,
87
87
  children: children
88
88
  });
@@ -0,0 +1,11 @@
1
+ import type { FC, HTMLAttributes, Ref } from 'react';
2
+ import type { TestableProps } from '../../utils/testId.js';
3
+ export interface WallySkeletonProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'>, TestableProps {
4
+ ref?: Ref<HTMLDivElement>;
5
+ }
6
+ /**
7
+ * Shared loading surface for the host, remote and assistant runtime. Give its parent a height.
8
+ * The placeholders and mesh stay static so replacing one loading stage with another cannot
9
+ * restart an animation and flash. This non-interactive surface exposes one loading status.
10
+ */
11
+ export declare const WallySkeleton: FC<WallySkeletonProps>;
@@ -0,0 +1,186 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { c } from "react/compiler-runtime";
3
+ import { cn } from "../../utils/cn.js";
4
+ import { Chat, ChatBody, ChatFooter, ChatHeader, ChatHeaderActions, ChatHeaderTitle } from "../Chat/index.js";
5
+ import { Skeleton } from "../Skeleton/index.js";
6
+ const WallySkeleton = (t0)=>{
7
+ const $ = c(21);
8
+ let className;
9
+ let props;
10
+ let ref;
11
+ let testId;
12
+ if ($[0] !== t0) {
13
+ ({ ref, className, "data-testid": testId, ...props } = t0);
14
+ $[0] = t0;
15
+ $[1] = className;
16
+ $[2] = props;
17
+ $[3] = ref;
18
+ $[4] = testId;
19
+ } else {
20
+ className = $[1];
21
+ props = $[2];
22
+ ref = $[3];
23
+ testId = $[4];
24
+ }
25
+ let t1;
26
+ if ($[5] !== className) {
27
+ t1 = cn("h-full min-h-0 w-full min-w-0 flex-1", className);
28
+ $[5] = className;
29
+ $[6] = t1;
30
+ } else t1 = $[6];
31
+ const t2 = testId && `${testId}--chat`;
32
+ let t3;
33
+ if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
34
+ t3 = /*#__PURE__*/ jsx(ChatHeaderTitle, {
35
+ children: /*#__PURE__*/ jsx(Skeleton, {
36
+ width: "96px",
37
+ height: "16px"
38
+ })
39
+ });
40
+ $[7] = t3;
41
+ } else t3 = $[7];
42
+ let t4;
43
+ if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
44
+ t4 = /*#__PURE__*/ jsxs(ChatHeader, {
45
+ children: [
46
+ t3,
47
+ /*#__PURE__*/ jsxs(ChatHeaderActions, {
48
+ children: [
49
+ /*#__PURE__*/ jsx(Skeleton, {
50
+ width: "28px",
51
+ height: "28px"
52
+ }),
53
+ /*#__PURE__*/ jsx(Skeleton, {
54
+ width: "28px",
55
+ height: "28px"
56
+ }),
57
+ /*#__PURE__*/ jsx(Skeleton, {
58
+ width: "28px",
59
+ height: "28px"
60
+ })
61
+ ]
62
+ })
63
+ ]
64
+ });
65
+ $[8] = t4;
66
+ } else t4 = $[8];
67
+ let t5;
68
+ if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
69
+ t5 = /*#__PURE__*/ jsxs("div", {
70
+ className: "flex w-full flex-col items-center gap-12",
71
+ children: [
72
+ /*#__PURE__*/ jsx(Skeleton, {
73
+ width: "64px",
74
+ height: "64px",
75
+ rounded: "full"
76
+ }),
77
+ /*#__PURE__*/ jsx(Skeleton, {
78
+ className: "max-w-[90%]",
79
+ width: "280px",
80
+ height: "24px"
81
+ })
82
+ ]
83
+ });
84
+ $[9] = t5;
85
+ } else t5 = $[9];
86
+ let t6;
87
+ if ($[10] === Symbol.for("react.memo_cache_sentinel")) {
88
+ t6 = /*#__PURE__*/ jsx(ChatBody, {
89
+ children: /*#__PURE__*/ jsxs("div", {
90
+ className: "flex flex-col items-center gap-24 pt-103",
91
+ children: [
92
+ t5,
93
+ /*#__PURE__*/ jsxs("div", {
94
+ className: "flex w-full flex-col items-center gap-12",
95
+ children: [
96
+ /*#__PURE__*/ jsx(Skeleton, {
97
+ className: "max-w-[85%]",
98
+ width: "240px",
99
+ height: "28px",
100
+ rounded: 12
101
+ }),
102
+ /*#__PURE__*/ jsx(Skeleton, {
103
+ className: "max-w-[95%]",
104
+ width: "280px",
105
+ height: "28px",
106
+ rounded: 12
107
+ }),
108
+ /*#__PURE__*/ jsx(Skeleton, {
109
+ className: "max-w-[80%]",
110
+ width: "220px",
111
+ height: "28px",
112
+ rounded: 12
113
+ })
114
+ ]
115
+ })
116
+ ]
117
+ })
118
+ });
119
+ $[10] = t6;
120
+ } else t6 = $[10];
121
+ let t7;
122
+ if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
123
+ t7 = /*#__PURE__*/ jsx(Skeleton, {
124
+ width: "100%",
125
+ height: "92px",
126
+ rounded: 16
127
+ });
128
+ $[11] = t7;
129
+ } else t7 = $[11];
130
+ let t8;
131
+ if ($[12] === Symbol.for("react.memo_cache_sentinel")) {
132
+ t8 = /*#__PURE__*/ jsxs(ChatFooter, {
133
+ children: [
134
+ t7,
135
+ /*#__PURE__*/ jsx("div", {
136
+ className: "flex justify-center pb-8",
137
+ children: /*#__PURE__*/ jsx(Skeleton, {
138
+ className: "max-w-[90%]",
139
+ width: "240px",
140
+ height: "12px"
141
+ })
142
+ })
143
+ ]
144
+ });
145
+ $[12] = t8;
146
+ } else t8 = $[12];
147
+ let t9;
148
+ if ($[13] !== t2) {
149
+ t9 = /*#__PURE__*/ jsxs(Chat, {
150
+ background: "strong",
151
+ "aria-hidden": "true",
152
+ "data-testid": t2,
153
+ className: "[&_*]:animate-none! [&_[data-slot=skeleton]]:bg-bg-primary",
154
+ children: [
155
+ t4,
156
+ t6,
157
+ t8
158
+ ]
159
+ });
160
+ $[13] = t2;
161
+ $[14] = t9;
162
+ } else t9 = $[14];
163
+ let t10;
164
+ if ($[15] !== props || $[16] !== ref || $[17] !== t1 || $[18] !== t9 || $[19] !== testId) {
165
+ t10 = /*#__PURE__*/ jsx("div", {
166
+ role: "status",
167
+ "aria-label": "Loading Wally",
168
+ "aria-busy": "true",
169
+ ...props,
170
+ ref: ref,
171
+ "data-slot": "wally-skeleton",
172
+ "data-testid": testId,
173
+ className: t1,
174
+ children: t9
175
+ });
176
+ $[15] = props;
177
+ $[16] = ref;
178
+ $[17] = t1;
179
+ $[18] = t9;
180
+ $[19] = testId;
181
+ $[20] = t10;
182
+ } else t10 = $[20];
183
+ return t10;
184
+ };
185
+ WallySkeleton.displayName = "WallySkeleton";
186
+ export { WallySkeleton };
@@ -0,0 +1 @@
1
+ export { WallySkeleton, type WallySkeletonProps } from './WallySkeleton.js';
@@ -0,0 +1 @@
1
+ export { WallySkeleton } from "./WallySkeleton.js";
package/dist/index.d.ts CHANGED
@@ -113,4 +113,5 @@ export { UserMessage, UserMessageBubble, type UserMessageBubbleProps, type UserM
113
113
  export { UtilityPage, type UtilityPageProps } from './components/UtilityPage/index.js';
114
114
  export { ApprovalCardView, type ApprovalCardViewProps, ChainOfThoughtView, type ChainOfThoughtViewProps, type ChatApprovalOption, type ChatApprovalOptionKind, type ChatApprovalPart, type ChatApprovalResponse, type ChatApprovalStatus, type ChatAssistantMessage, type ChatAssistantPart, type ChatChainOfThoughtPart, type ChatContextItem, type ChatCustomPart, type ChatErrorPart, type ChatFeedback, type ChatIconKey, type ChatId, type ChatLabels, type ChatMarkdownProps, type ChatMessage, type ChatMessageActionNodes, ChatMessageView, type ChatMessageViewProps, type ChatMeta, type ChatOpen, type ChatPart, type ChatPartRenderContext, ChatPartView, type ChatPartViewProps, type ChatSnapshot, type ChatStatus, type ChatStep, type ChatStepKind, type ChatStepRenderContext, type ChatStepStatus, type ChatSuggestionItem, type ChatTextPart, type ChatToolPermission, type ChatUserMessage, type ChatUserPart, type ChatViewConfig, ChatViewProvider, type ChatViewProviderProps, type ChatViewState, copyTextOf, DEFAULT_CHAT_LABELS, deriveChatState, WallyAssistant, type WallyAssistantProps, } from './components/WallyAssistant/index.js';
115
115
  export { WallyIcon, type WallyIconProps, type WallyIconSize, type WallyIconStyle, } from './components/WallyIcon/index.js';
116
+ export { WallySkeleton, type WallySkeletonProps } from './components/WallySkeleton/index.js';
116
117
  export { type TestableProps, TestIdProvider, useTestId } from './utils/testId.js';
package/dist/index.js CHANGED
@@ -102,4 +102,5 @@ export { UserMessage, UserMessageBubble, UserMessageShowMore } from "./component
102
102
  export { UtilityPage } from "./components/UtilityPage/index.js";
103
103
  export { ApprovalCardView, ChainOfThoughtView, ChatMessageView, ChatPartView, ChatViewProvider, DEFAULT_CHAT_LABELS, WallyAssistant, copyTextOf, deriveChatState } from "./components/WallyAssistant/index.js";
104
104
  export { WallyIcon } from "./components/WallyIcon/index.js";
105
+ export { WallySkeleton } from "./components/WallySkeleton/index.js";
105
106
  export { TestIdProvider, useTestId } from "./utils/testId.js";
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "4.3.3",
3
- "generatedAt": "2026-10-29T07:02:33.247Z",
2
+ "version": "4.3.4",
3
+ "generatedAt": "2026-10-30T11:34:31.521Z",
4
4
  "components": [
5
5
  {
6
6
  "name": "Accordion",
@@ -35770,14 +35770,14 @@
35770
35770
  "code": "import { loadShikiAdapter, CodeSnippetAdapterProvider, CodeSnippetCode, CodeSnippetContent, CodeSnippetLineNumbers, CodeSnippetRoot } from '@wallarm-org/design-system/CodeSnippet';\n\nexport const JSONWithShiki = () => (\n <CodeSnippetAdapterProvider adapter={loadShikiAdapter}>\n <CodeSnippetRoot code={jsonCode} language='json'>\n <CodeSnippetContent>\n <CodeSnippetLineNumbers />\n <CodeSnippetCode />\n </CodeSnippetContent>\n </CodeSnippetRoot>\n </CodeSnippetAdapterProvider>\n);",
35771
35771
  "storyFile": "CodeSnippet/CodeSnippet.stories.tsx",
35772
35772
  "storyTitle": "Data Display/CodeSnippet/CodeSnippet",
35773
- "description": "Shiki, supplied through `CodeSnippetAdapterProvider` — VS Code's own grammars, and the\nheaviest of the three adapters at roughly 200KB plus WASM."
35773
+ "description": "Shiki, supplied through `CodeSnippetAdapterProvider`, uses VS Code-style grammars.\nThe adapter lazily initializes its supported languages and github-light theme with\nthe Oniguruma WASM engine on the first highlight call."
35774
35774
  },
35775
35775
  {
35776
35776
  "name": "TypescriptWithPrism",
35777
35777
  "code": "import { loadPrismAdapter, CodeSnippetAdapterProvider, CodeSnippetCode, CodeSnippetContent, CodeSnippetLineNumbers, CodeSnippetRoot } from '@wallarm-org/design-system/CodeSnippet';\n\nexport const TypescriptWithPrism = () => (\n <CodeSnippetAdapterProvider adapter={loadPrismAdapter}>\n <CodeSnippetRoot code={typescriptCode} language='typescript'>\n <CodeSnippetContent>\n <CodeSnippetLineNumbers />\n <CodeSnippetCode />\n </CodeSnippetContent>\n </CodeSnippetRoot>\n </CodeSnippetAdapterProvider>\n);",
35778
35778
  "storyFile": "CodeSnippet/CodeSnippet.stories.tsx",
35779
35779
  "storyTitle": "Data Display/CodeSnippet/CodeSnippet",
35780
- "description": "Prism, at roughly 15KB, is the one to reach for unless something forces otherwise;\nthis is TypeScript under it."
35780
+ "description": "TypeScript highlighted with Prism. Its loader emits only the Prism adapter's\ndependencies; unused Shiki and highlight.js loaders are discarded by the consumer."
35781
35781
  },
35782
35782
  {
35783
35783
  "name": "BashWithPrism",
@@ -35791,7 +35791,7 @@
35791
35791
  "code": "import { loadHighlightJsAdapter, CodeSnippetAdapterProvider, CodeSnippetCode, CodeSnippetContent, CodeSnippetLineNumbers, CodeSnippetRoot } from '@wallarm-org/design-system/CodeSnippet';\n\nexport const HTMLWithHighlightJs = () => (\n <CodeSnippetAdapterProvider adapter={loadHighlightJsAdapter}>\n <CodeSnippetRoot code={htmlCode} language='html'>\n <CodeSnippetContent>\n <CodeSnippetLineNumbers />\n <CodeSnippetCode />\n </CodeSnippetContent>\n </CodeSnippetRoot>\n </CodeSnippetAdapterProvider>\n);",
35792
35792
  "storyFile": "CodeSnippet/CodeSnippet.stories.tsx",
35793
35793
  "storyTitle": "Data Display/CodeSnippet/CodeSnippet",
35794
- "description": "highlight.js sits between the other two at roughly 30KB, with the longest language list\nof the three."
35794
+ "description": "HTML highlighted with highlight.js. The adapter loads the library lazily and\nexposes the languages listed by its getSupportedLanguages() method."
35795
35795
  },
35796
35796
  {
35797
35797
  "name": "HTTPRequestWithPrism",
@@ -138009,6 +138009,311 @@
138009
138009
  "description": "`xs` to `xl` in both variants. Worth reading down the columns to see where the detail in the bare mark gives out and the badge stops helping."
138010
138010
  }
138011
138011
  ]
138012
+ },
138013
+ {
138014
+ "name": "WallySkeleton",
138015
+ "description": "Shared loading surface for the host, remote and assistant runtime. Give its parent a height.\nThe placeholders and mesh stay static so replacing one loading stage with another cannot\nrestart an animation and flash. This non-interactive surface exposes one loading status.",
138016
+ "importPath": "@wallarm-org/design-system/WallySkeleton",
138017
+ "props": [
138018
+ {
138019
+ "name": "slot",
138020
+ "type": "string | undefined",
138021
+ "required": false
138022
+ },
138023
+ {
138024
+ "name": "title",
138025
+ "type": "string | undefined",
138026
+ "required": false
138027
+ },
138028
+ {
138029
+ "name": "defaultChecked",
138030
+ "type": "boolean | undefined",
138031
+ "required": false
138032
+ },
138033
+ {
138034
+ "name": "defaultValue",
138035
+ "type": "string | number | readonly string[] | undefined",
138036
+ "required": false
138037
+ },
138038
+ {
138039
+ "name": "suppressContentEditableWarning",
138040
+ "type": "boolean | undefined",
138041
+ "required": false
138042
+ },
138043
+ {
138044
+ "name": "suppressHydrationWarning",
138045
+ "type": "boolean | undefined",
138046
+ "required": false
138047
+ },
138048
+ {
138049
+ "name": "accessKey",
138050
+ "type": "string | undefined",
138051
+ "required": false
138052
+ },
138053
+ {
138054
+ "name": "autoCapitalize",
138055
+ "type": "\"off\" | \"none\" | \"on\" | \"sentences\" | \"words\" | \"characters\" | (string & {}) | undefined",
138056
+ "required": false
138057
+ },
138058
+ {
138059
+ "name": "autoFocus",
138060
+ "type": "boolean | undefined",
138061
+ "required": false
138062
+ },
138063
+ {
138064
+ "name": "contentEditable",
138065
+ "type": "Booleanish | \"inherit\" | \"plaintext-only\" | undefined",
138066
+ "required": false
138067
+ },
138068
+ {
138069
+ "name": "contextMenu",
138070
+ "type": "string | undefined",
138071
+ "required": false
138072
+ },
138073
+ {
138074
+ "name": "dir",
138075
+ "type": "string | undefined",
138076
+ "required": false
138077
+ },
138078
+ {
138079
+ "name": "draggable",
138080
+ "type": "Booleanish | undefined",
138081
+ "required": false
138082
+ },
138083
+ {
138084
+ "name": "enterKeyHint",
138085
+ "type": "\"enter\" | \"done\" | \"go\" | \"next\" | \"previous\" | \"search\" | \"send\" | undefined",
138086
+ "required": false
138087
+ },
138088
+ {
138089
+ "name": "hidden",
138090
+ "type": "boolean | undefined",
138091
+ "required": false
138092
+ },
138093
+ {
138094
+ "name": "id",
138095
+ "type": "string | undefined",
138096
+ "required": false
138097
+ },
138098
+ {
138099
+ "name": "lang",
138100
+ "type": "string | undefined",
138101
+ "required": false
138102
+ },
138103
+ {
138104
+ "name": "nonce",
138105
+ "type": "string | undefined",
138106
+ "required": false
138107
+ },
138108
+ {
138109
+ "name": "spellCheck",
138110
+ "type": "Booleanish | undefined",
138111
+ "required": false
138112
+ },
138113
+ {
138114
+ "name": "tabIndex",
138115
+ "type": "number | undefined",
138116
+ "required": false
138117
+ },
138118
+ {
138119
+ "name": "translate",
138120
+ "type": "\"yes\" | \"no\" | undefined",
138121
+ "required": false
138122
+ },
138123
+ {
138124
+ "name": "radioGroup",
138125
+ "type": "string | undefined",
138126
+ "required": false
138127
+ },
138128
+ {
138129
+ "name": "role",
138130
+ "type": "AriaRole | undefined",
138131
+ "required": false
138132
+ },
138133
+ {
138134
+ "name": "about",
138135
+ "type": "string | undefined",
138136
+ "required": false
138137
+ },
138138
+ {
138139
+ "name": "content",
138140
+ "type": "string | undefined",
138141
+ "required": false
138142
+ },
138143
+ {
138144
+ "name": "datatype",
138145
+ "type": "string | undefined",
138146
+ "required": false
138147
+ },
138148
+ {
138149
+ "name": "inlist",
138150
+ "type": "any",
138151
+ "required": false
138152
+ },
138153
+ {
138154
+ "name": "prefix",
138155
+ "type": "string | undefined",
138156
+ "required": false
138157
+ },
138158
+ {
138159
+ "name": "property",
138160
+ "type": "string | undefined",
138161
+ "required": false
138162
+ },
138163
+ {
138164
+ "name": "rel",
138165
+ "type": "string | undefined",
138166
+ "required": false
138167
+ },
138168
+ {
138169
+ "name": "resource",
138170
+ "type": "string | undefined",
138171
+ "required": false
138172
+ },
138173
+ {
138174
+ "name": "rev",
138175
+ "type": "string | undefined",
138176
+ "required": false
138177
+ },
138178
+ {
138179
+ "name": "typeof",
138180
+ "type": "string | undefined",
138181
+ "required": false
138182
+ },
138183
+ {
138184
+ "name": "vocab",
138185
+ "type": "string | undefined",
138186
+ "required": false
138187
+ },
138188
+ {
138189
+ "name": "autoCorrect",
138190
+ "type": "string | undefined",
138191
+ "required": false
138192
+ },
138193
+ {
138194
+ "name": "autoSave",
138195
+ "type": "string | undefined",
138196
+ "required": false
138197
+ },
138198
+ {
138199
+ "name": "color",
138200
+ "type": "string | undefined",
138201
+ "required": false
138202
+ },
138203
+ {
138204
+ "name": "itemProp",
138205
+ "type": "string | undefined",
138206
+ "required": false
138207
+ },
138208
+ {
138209
+ "name": "itemScope",
138210
+ "type": "boolean | undefined",
138211
+ "required": false
138212
+ },
138213
+ {
138214
+ "name": "itemType",
138215
+ "type": "string | undefined",
138216
+ "required": false
138217
+ },
138218
+ {
138219
+ "name": "itemID",
138220
+ "type": "string | undefined",
138221
+ "required": false
138222
+ },
138223
+ {
138224
+ "name": "itemRef",
138225
+ "type": "string | undefined",
138226
+ "required": false
138227
+ },
138228
+ {
138229
+ "name": "results",
138230
+ "type": "number | undefined",
138231
+ "required": false
138232
+ },
138233
+ {
138234
+ "name": "security",
138235
+ "type": "string | undefined",
138236
+ "required": false
138237
+ },
138238
+ {
138239
+ "name": "unselectable",
138240
+ "type": "\"off\" | \"on\" | undefined",
138241
+ "required": false
138242
+ },
138243
+ {
138244
+ "name": "popover",
138245
+ "type": "\"\" | \"auto\" | \"manual\" | \"hint\" | undefined",
138246
+ "required": false
138247
+ },
138248
+ {
138249
+ "name": "popoverTargetAction",
138250
+ "type": "\"toggle\" | \"show\" | \"hide\" | undefined",
138251
+ "required": false
138252
+ },
138253
+ {
138254
+ "name": "popoverTarget",
138255
+ "type": "string | undefined",
138256
+ "required": false
138257
+ },
138258
+ {
138259
+ "name": "inert",
138260
+ "type": "boolean | undefined",
138261
+ "required": false,
138262
+ "description": "@see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/inert}"
138263
+ },
138264
+ {
138265
+ "name": "inputMode",
138266
+ "type": "\"none\" | \"search\" | \"text\" | \"tel\" | \"url\" | \"email\" | \"numeric\" | \"decimal\" | undefined",
138267
+ "required": false,
138268
+ "description": "Hints at the type of data that might be entered by the user while editing the element or its contents"
138269
+ },
138270
+ {
138271
+ "name": "is",
138272
+ "type": "string | undefined",
138273
+ "required": false,
138274
+ "description": "Specify that a standard HTML element should behave like a defined custom built-in element"
138275
+ },
138276
+ {
138277
+ "name": "exportparts",
138278
+ "type": "string | undefined",
138279
+ "required": false,
138280
+ "description": "@see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/exportparts}"
138281
+ },
138282
+ {
138283
+ "name": "part",
138284
+ "type": "string | undefined",
138285
+ "required": false,
138286
+ "description": "@see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/part}"
138287
+ },
138288
+ {
138289
+ "name": "data-testid",
138290
+ "type": "string | undefined",
138291
+ "required": false
138292
+ }
138293
+ ],
138294
+ "variants": [],
138295
+ "subComponents": [],
138296
+ "examples": [
138297
+ {
138298
+ "name": "Default",
138299
+ "code": "import { WallySkeleton } from '@wallarm-org/design-system/WallySkeleton';\n\nexport const Default = () => (\n <div className='h-640 w-480 max-w-full'>\n <WallySkeleton data-testid='wally-loading' />\n </div>\n);",
138300
+ "storyFile": "WallySkeleton/WallySkeleton.stories.tsx",
138301
+ "storyTitle": "AI/WallySkeleton"
138302
+ },
138303
+ {
138304
+ "name": "Narrow",
138305
+ "code": "import { WallySkeleton } from '@wallarm-org/design-system/WallySkeleton';\n\nexport const Narrow = () => (\n <div className='h-640 w-320 max-w-full'>\n <WallySkeleton data-testid='wally-loading' />\n </div>\n);",
138306
+ "storyFile": "WallySkeleton/WallySkeleton.stories.tsx",
138307
+ "storyTitle": "AI/WallySkeleton"
138308
+ },
138309
+ {
138310
+ "name": "Handoff",
138311
+ "code": "import { useState } from 'react';\nimport { Button } from '@wallarm-org/design-system/Button';\nimport { WallySkeleton } from '@wallarm-org/design-system/WallySkeleton';\n\nexport const Handoff = () => {\n const [stage, setStage] = useState(0);\n\n return (\n <div className='flex flex-col gap-12'>\n <Button data-testid='next-stage' onClick={() => setStage(current => current + 1)}>\n Continue loading\n </Button>\n <div className='h-640 w-480 max-w-full'>\n <WallySkeleton key={stage} data-testid='wally-loading' />\n </div>\n </div>\n );\n};",
138312
+ "storyFile": "WallySkeleton/WallySkeleton.stories.tsx",
138313
+ "storyTitle": "AI/WallySkeleton",
138314
+ "description": "Continue loading remounts the skeleton, like replacing the host fallback with the remote’s own loading state. Its geometry, colors and background stay identical."
138315
+ }
138316
+ ]
138012
138317
  }
138013
138318
  ],
138014
138319
  "tokens": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wallarm-org/design-system",
3
- "version": "4.4.0-rc-feat-claude-design.1",
3
+ "version": "4.4.0",
4
4
  "description": "Core design system library with React components and Storybook documentation",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -70,10 +70,11 @@
70
70
  "publish:local": "pnpm build && yalc publish --push",
71
71
  "lint": "biome check",
72
72
  "lint:fix": "biome check --fix",
73
- "typecheck": "tsc -p tsconfig.app.json --noEmit --composite false --incremental false && tsc -p tsconfig.storybook.json --noEmit --composite false --incremental false && tsc -p tsconfig.figma.json --noEmit --composite false --incremental false && tsc -p tsconfig.e2e.json --noEmit --composite false --incremental false && tsc -p tsconfig.claude-design.json --noEmit",
73
+ "typecheck": "tsc -p tsconfig.app.json --noEmit --composite false --incremental false && tsc -p tsconfig.storybook.json --noEmit --composite false --incremental false && tsc -p tsconfig.figma.json --noEmit --composite false --incremental false && tsc -p tsconfig.e2e.json --noEmit --composite false --incremental false",
74
74
  "test": "rstest watch",
75
75
  "test:coverage": "rstest run --coverage",
76
76
  "test:run": "rstest run",
77
+ "test:bundles": "tsx scripts/check-code-snippet-bundles.ts",
77
78
  "storybook": "storybook dev --no-open -p 6006",
78
79
  "build-storybook": "storybook build",
79
80
  "e2e": "playwright test",
@@ -85,11 +86,7 @@
85
86
  "e2e:docker:report": "playwright show-report ./playwright-report --port=9323",
86
87
  "icons:sync": "tsx scripts/icons/sync.ts",
87
88
  "code-connect:preview": "node --env-file-if-exists=../../.env.local node_modules/@figma/code-connect/bin/figma connect preview",
88
- "code-connect:publish": "node --env-file-if-exists=../../.env.local node_modules/@figma/code-connect/bin/figma connect publish --exit-on-unreadable-files",
89
- "claude-design:no-impact": "tsx claude-design/no-impact.ts",
90
- "test:claude-design": "rstest run --config rstest.claude-design.config.ts",
91
- "build:claude-design": "turbo run build --filter=@wallarm-org/design-system... && tsx claude-design/build.ts",
92
- "claude-design:verify": "turbo run build --filter=@wallarm-org/design-system... && tsx claude-design/verify.ts"
89
+ "code-connect:publish": "node --env-file-if-exists=../../.env.local node_modules/@figma/code-connect/bin/figma connect publish --exit-on-unreadable-files"
93
90
  },
94
91
  "devDependencies": {
95
92
  "@babel/core": "7.29.7",
@@ -111,7 +108,6 @@
111
108
  "@testing-library/react": "catalog:",
112
109
  "@testing-library/user-event": "catalog:",
113
110
  "@types/babel__core": "7.20.5",
114
- "@types/jsdom": "21.1.7",
115
111
  "@types/luaparse": "0.2.13",
116
112
  "@types/node": "catalog:",
117
113
  "@types/prismjs": "1.26.6",
@@ -125,15 +121,11 @@
125
121
  "@wallarm-org/tailwind-config": "workspace:*",
126
122
  "@wallarm-org/typescript-config": "workspace:*",
127
123
  "babel-plugin-react-compiler": "1.0.0",
128
- "esbuild": "0.28.1",
129
124
  "glob": "13.0.6",
130
125
  "jsdom": "catalog:",
131
126
  "postcss": "8.5.28",
132
127
  "react": "catalog:",
133
- "react-compiler-runtime": "1.0.0",
134
128
  "react-dom": "catalog:",
135
- "react-dom18": "npm:react-dom@18.3.1",
136
- "react18": "npm:react@18.3.1",
137
129
  "storybook": "catalog:",
138
130
  "storybook-react-rsbuild": "3.6.0",
139
131
  "tailwindcss": "catalog:",
@@ -1,3 +0,0 @@
1
- import { type PropsWithChildren } from 'react';
2
- import { type PortalProps } from '@ark-ui/react/portal';
3
- export declare const Portal: (props: PropsWithChildren<PortalProps>) => import("react").JSX.Element;
@@ -1,22 +0,0 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { c } from "react/compiler-runtime";
3
- import { useContext } from "react";
4
- import { Portal } from "@ark-ui/react/portal";
5
- import { PortalContainerContext } from "./PortalContainerContext.js";
6
- const Portal_Portal = (props)=>{
7
- const $ = c(3);
8
- const container = useContext(PortalContainerContext);
9
- const t0 = props.container ?? container ?? void 0;
10
- let t1;
11
- if ($[0] !== props || $[1] !== t0) {
12
- t1 = /*#__PURE__*/ jsx(Portal, {
13
- ...props,
14
- container: t0
15
- });
16
- $[0] = props;
17
- $[1] = t0;
18
- $[2] = t1;
19
- } else t1 = $[2];
20
- return t1;
21
- };
22
- export { Portal_Portal as Portal };
@@ -1,3 +0,0 @@
1
- import { type RefObject } from 'react';
2
- /** Internal canvas integration; without a provider Ark keeps its normal portal destination. */
3
- export declare const PortalContainerContext: import("react").Context<RefObject<HTMLElement | null> | null>;
@@ -1,3 +0,0 @@
1
- import { createContext } from "react";
2
- const PortalContainerContext = createContext(null);
3
- export { PortalContainerContext };