highsoft-ui 1.0.172 → 1.0.174

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 (84) hide show
  1. package/CLAUDE.md +88 -0
  2. package/README.md +1 -0
  3. package/dist/{BrowserFrame-CisPLoTR.js → BrowserFrame-_qNod9an.js} +5 -5
  4. package/dist/{Button-CdrrwvXk.js → Button-DFcjZsF4.js} +1 -1
  5. package/dist/{ButtonGroup-JtJaVLlu.js → ButtonGroup-dTeFICBP.js} +1 -1
  6. package/dist/{Checkbox-DU_KGp-P.js → Checkbox-X7FrR_6F.js} +1 -1
  7. package/dist/{CodeBlock-CGBo8nwy.js → CodeBlock-rPC0sIvR.js} +4 -4
  8. package/dist/{CookiePolicyModal-xPb4G_hM.js → CookiePolicyModal-D-IOZSoU.js} +2 -2
  9. package/dist/{CopyCode-72gVieQO.js → CopyCode-DS2T69as.js} +2 -2
  10. package/dist/{Dropdown-DLRtYhFa.js → Dropdown-Ck7IASlc.js} +1 -1
  11. package/dist/{Features-BS-_cksu.js → Features-BQ5o3wcc.js} +8 -8
  12. package/dist/{Footer-CqtCkr_g.js → Footer-C2tXo3oR.js} +7 -7
  13. package/dist/{FooterBottom-B8GCRg2o.js → FooterBottom-BPuLsXI1.js} +24 -24
  14. package/dist/{FooterHelp-D5X2Pco9.js → FooterHelp-99gRcRar.js} +22 -22
  15. package/dist/{FooterLinks-yn_sgcbu.js → FooterLinks-DXTz-d8e.js} +7 -7
  16. package/dist/{Header-CQKgp8xy.js → Header-DqE0a41T.js} +49 -49
  17. package/dist/ImagePair-BH6ZnPcE.js +44 -0
  18. package/dist/{InputGrouped-DLghbzO7.js → InputGrouped-DNiMvxxa.js} +13 -13
  19. package/dist/{Label-B-Xt6XQQ.js → Label-DTIv_3zs.js} +1 -1
  20. package/dist/{List-B1zRI6pm.js → List-CdwPhveO.js} +11 -11
  21. package/dist/{LogoCarousel-TbyB0ot0.js → LogoCarousel-BsmxIlzx.js} +2 -2
  22. package/dist/{NewsletterSignup-BPLup66s.js → NewsletterSignup-CTbjNSnk.js} +12 -12
  23. package/dist/{Notification-DtqcW5FH.js → Notification-CTSGBhJk.js} +3 -3
  24. package/dist/{PrefPanel-6oTpfC5q.js → PrefPanel-CwrWfi3R.js} +8 -8
  25. package/dist/{PrevNextNav-XaxS2FTm.js → PrevNextNav-BwP-lRaG.js} +1 -1
  26. package/dist/{RoadmapDetails-CLQzIxv7.js → RoadmapDetails-B-2pgXHz.js} +5 -5
  27. package/dist/{SearchDropdown-Ow5_Hu21.js → SearchDropdown-g3g30peB.js} +1 -1
  28. package/dist/TableOfContents-d26S7KYx.js +93 -0
  29. package/dist/{VideoCover-25FfvhPg.js → VideoCover-DdN1nXfu.js} +5 -5
  30. package/dist/{VideoPlayer-CB2lOh95.js → VideoPlayer-C0pHiwYx.js} +7 -7
  31. package/dist/{VideoPlayerModal-CVJbPd6n.js → VideoPlayerModal-Bh2u5h8g.js} +2 -2
  32. package/dist/{YoutubeModal-j51vfjYk.js → YoutubeModal-CXSHjsEd.js} +2 -2
  33. package/dist/components/BrowserFrame/index.js +1 -1
  34. package/dist/components/Button/index.js +1 -1
  35. package/dist/components/ButtonGroup/index.js +1 -1
  36. package/dist/components/Checkbox/index.js +1 -1
  37. package/dist/components/CodeBlock/index.js +1 -1
  38. package/dist/components/CopyCode/index.js +1 -1
  39. package/dist/components/Dropdown/index.js +1 -1
  40. package/dist/components/Features/index.js +1 -1
  41. package/dist/components/Figure/ImagePair.js +2 -0
  42. package/dist/components/Figure/ZoomImage.js +70 -0
  43. package/dist/components/Figure/index.js +43 -0
  44. package/dist/components/Footer/CookiePolicyModal.js +1 -1
  45. package/dist/components/Footer/FooterBottom.js +1 -1
  46. package/dist/components/Footer/FooterHelp.js +1 -1
  47. package/dist/components/Footer/FooterLinks.js +1 -1
  48. package/dist/components/Footer/YoutubeModal.js +1 -1
  49. package/dist/components/Footer/index.js +1 -1
  50. package/dist/components/Header/index.js +1 -1
  51. package/dist/components/InputGrouped/index.js +1 -1
  52. package/dist/components/Label/index.js +1 -1
  53. package/dist/components/List/index.js +1 -1
  54. package/dist/components/LogoCarousel/index.js +1 -1
  55. package/dist/components/Modal/ModalContactFooter.js +2 -2
  56. package/dist/components/Modal/index.js +2 -2
  57. package/dist/components/NewsletterSignup/index.js +1 -1
  58. package/dist/components/Notification/index.js +1 -1
  59. package/dist/components/PrefPanel/index.js +1 -1
  60. package/dist/components/PrevNextNav/index.js +1 -1
  61. package/dist/components/RoadmapDetails/index.js +1 -1
  62. package/dist/components/Search/SearchDialog.js +10 -10
  63. package/dist/components/Search/index.js +2 -2
  64. package/dist/components/SearchDropdown/index.js +1 -1
  65. package/dist/components/Sidebar/NavDisclosure.js +1 -1
  66. package/dist/components/Sidebar/NavGroup.js +1 -1
  67. package/dist/components/Sidebar/Sidebar.js +10 -10
  68. package/dist/components/Sidebar/SidebarLayout.js +1 -1
  69. package/dist/components/Sidebar/SidebarSwitcher.js +1 -1
  70. package/dist/components/TableOfContents/index.js +2 -0
  71. package/dist/components/VideoCover/index.js +1 -1
  72. package/dist/components/VideoPlayer/VideoPlayerModal.js +1 -1
  73. package/dist/components/VideoPlayer/index.js +1 -1
  74. package/dist/{create-element-DvDqDt-f.js → create-element-DHbI55TT.js} +1 -1
  75. package/dist/{esm-zUd-Cmgs.js → esm-DQBytmnt.js} +24 -10
  76. package/dist/highsoft-ui.css +1 -1
  77. package/dist/lib/components/Figure/ImagePair.d.ts +20 -0
  78. package/dist/lib/components/Figure/ZoomImage.d.ts +18 -0
  79. package/dist/lib/components/Figure/index.d.ts +96 -0
  80. package/dist/lib/components/TableOfContents/index.d.ts +67 -0
  81. package/dist/lib/main.d.ts +4 -0
  82. package/dist/main.js +54 -52
  83. package/dist/{prism-light-oph9ikSp.js → prism-light-D9OePufj.js} +1 -1
  84. package/package.json +11 -4
@@ -0,0 +1,20 @@
1
+ import { ImgHTMLAttributes } from 'react';
2
+ export interface ImagePairProps {
3
+ src: string;
4
+ /** Dark-theme variant; renders a second `<img>` the theme CSS swaps in. */
5
+ srcDark?: string;
6
+ alt: string;
7
+ width?: number;
8
+ height?: number;
9
+ loading?: ImgHTMLAttributes<HTMLImageElement>['loading'];
10
+ srcSet?: string;
11
+ sizes?: string;
12
+ className?: string;
13
+ }
14
+ /**
15
+ * The figure's image, or its light/dark pair. One `<img>` without `srcDark`;
16
+ * with it, two with the same `alt`, of which `[data-theme]` on the page (or
17
+ * the OS preference) displays exactly one, so layout and assistive technology
18
+ * meet a single image.
19
+ */
20
+ export declare function ImagePair({ src, srcDark, alt, width, height, loading, srcSet, sizes, className }: ImagePairProps): import("react").JSX.Element;
@@ -0,0 +1,18 @@
1
+ import { ReactNode } from 'react';
2
+ import { ImagePairProps } from './ImagePair';
3
+ export interface ZoomImageProps extends ImagePairProps {
4
+ /** The figure's caption, repeated under the enlarged image. */
5
+ caption?: ReactNode;
6
+ /** Accessible name of the trigger (default "Enlarge image"). */
7
+ zoomLabel?: string;
8
+ /** Accessible name of the close control (default "Close"). */
9
+ closeLabel?: string;
10
+ }
11
+ /**
12
+ * The figure's image as a button that opens it enlarged in a native
13
+ * `<dialog>`: the browser owns the top layer, the focus trap, Escape, and
14
+ * returning focus to the trigger on close. The only script is showModal(),
15
+ * close() and the backdrop click; the transitions are CSS on the animation
16
+ * tokens, off under reduced motion.
17
+ */
18
+ export declare function ZoomImage({ caption, zoomLabel, closeLabel, className, ...image }: ZoomImageProps): import("react").JSX.Element;
@@ -0,0 +1,96 @@
1
+ import { HTMLAttributes, ImgHTMLAttributes, ReactNode } from 'react';
2
+ import { TypographyColor } from '../Typography';
3
+ export type FigureCaptionSize = 75 | 100;
4
+ /**
5
+ * How an image sits on the page. `hairline` (default): border-100 and 8px
6
+ * radius. `card`: the same plus the BrowserFrame shadow, for an illustration
7
+ * that should read as a picture placed on the page. `none`: the bare image.
8
+ */
9
+ export type FigureFrame = 'none' | 'hairline' | 'card';
10
+ interface FigureBaseProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
11
+ /**
12
+ * The caption, rendered as a `<figcaption>` under the content. Say what the
13
+ * figure shows and what to notice; this is the text crawlers and AI agents
14
+ * read as the figure's description, and it names the figure for assistive
15
+ * technology.
16
+ */
17
+ caption?: ReactNode;
18
+ /** Caption text size — typography size `100` (default) or `75`. */
19
+ captionSize?: FigureCaptionSize;
20
+ /** Caption color (default `secondary`). */
21
+ captionColor?: TypographyColor;
22
+ /** `start` (default) aligns content and caption to the left edge; `center` centers both. */
23
+ align?: 'start' | 'center';
24
+ /**
25
+ * Frame around an image: `hairline` (default) is border-100 and 8px radius,
26
+ * `card` adds the BrowserFrame shadow so an illustration reads as a picture
27
+ * on the page, `none` is the bare image. Ignored when the figure wraps
28
+ * `children`, which draw their own frame.
29
+ */
30
+ frame?: FigureFrame;
31
+ }
32
+ interface FigureImageProps extends FigureBaseProps {
33
+ /** Image source. With `src`, Figure renders the `<img>` itself. */
34
+ src: string;
35
+ /**
36
+ * Dark-theme variant of the image. Both images render with the same
37
+ * `alt`; the page's `data-theme` (set by ThemeLoader before first paint)
38
+ * shows one and hides the other, with the OS preference as the fallback
39
+ * when no theme attribute is set. Without it the one image serves both
40
+ * themes: nothing is dimmed or inverted.
41
+ */
42
+ srcDark?: string;
43
+ /**
44
+ * What the image shows, in one sentence. Required with `src`; pass `""`
45
+ * for a purely decorative image. Keep the explanation in `caption`.
46
+ */
47
+ alt: string;
48
+ /** Intrinsic image size, so the browser reserves the space before the image loads. */
49
+ width?: number;
50
+ height?: number;
51
+ loading?: ImgHTMLAttributes<HTMLImageElement>['loading'];
52
+ /** Responsive sources, passed through to the `<img>`. */
53
+ srcSet?: string;
54
+ sizes?: string;
55
+ /**
56
+ * Click to enlarge (default `false`). The image becomes a button that opens
57
+ * it in a native `<dialog>` over the page, with the caption under it;
58
+ * Escape, the close button or a click outside closes it and focus returns
59
+ * to the image. Opt in for screenshots and diagrams whose detail matters.
60
+ */
61
+ zoom?: boolean;
62
+ /** Accessible name of the enlarge button (default "Enlarge image"). */
63
+ zoomLabel?: string;
64
+ /** Accessible name of the dialog's close button (default "Close"). */
65
+ closeLabel?: string;
66
+ children?: never;
67
+ }
68
+ interface FigureWrapProps extends FigureBaseProps {
69
+ src?: undefined;
70
+ srcDark?: never;
71
+ alt?: never;
72
+ width?: never;
73
+ height?: never;
74
+ loading?: never;
75
+ srcSet?: never;
76
+ sizes?: never;
77
+ zoom?: never;
78
+ zoomLabel?: never;
79
+ closeLabel?: never;
80
+ /** The content: a `BrowserFrame`, `VideoPlayer`, `CodeBlock`, a chart, a table. */
81
+ children: ReactNode;
82
+ }
83
+ export type FigureProps = FigureImageProps | FigureWrapProps;
84
+ /**
85
+ * A `<figure>` with a `<figcaption>`: an image, a live demo, a video or a
86
+ * code sample together with the sentence or two that explain it. Pass `src`
87
+ * and `alt` for an image; wrap anything else as `children`. The caption sits
88
+ * under the content in secondary text; spacing to the surrounding prose is
89
+ * the page's job.
90
+ *
91
+ * The caption is the point. An iframe's contents are not read along with the
92
+ * page, and an image is only its alt text, so the caption is where a search
93
+ * engine, an AI agent and a screen-reader user get the explanation.
94
+ */
95
+ export declare const Figure: import('react').ForwardRefExoticComponent<FigureProps & import('react').RefAttributes<HTMLElement>>;
96
+ export {};
@@ -0,0 +1,67 @@
1
+ import { HTMLAttributes, MouseEvent, ReactNode } from 'react';
2
+ /** One row of the list — a heading on the page. */
3
+ export interface TableOfContentsItem {
4
+ /** The heading element's `id`: the link target (`#id`) and what the scroll spy watches. */
5
+ id: string;
6
+ /** The heading text. */
7
+ title: ReactNode;
8
+ /** Nesting depth. `1` (default) is a top-level row; `2` and `3` indent 12px per step. */
9
+ level?: 1 | 2 | 3;
10
+ /** Link target. Defaults to `#${id}`. */
11
+ href?: string;
12
+ }
13
+ export interface TableOfContentsProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
14
+ /** The page's headings, in document order. Renders nothing when empty. */
15
+ items: TableOfContentsItem[];
16
+ /**
17
+ * Heading above the list — the `<nav>`'s accessible name. Default
18
+ * `'On this page'`. Pass `null` to hide it; the nav then falls back to
19
+ * `aria-label` (or the default text).
20
+ */
21
+ title?: ReactNode;
22
+ /**
23
+ * The current heading's `id`. Controlled: when given, the built-in scroll
24
+ * spy is off and the highlight follows this prop. `null` highlights nothing.
25
+ */
26
+ activeId?: string | null;
27
+ /**
28
+ * The row that starts current in uncontrolled mode. The scroll spy takes
29
+ * over once it finds the headings; until then (or with `spy={false}`) this
30
+ * row stays current and clicks move the highlight.
31
+ */
32
+ defaultActiveId?: string | null;
33
+ /**
34
+ * Called when the current heading changes — by the scroll spy or by a click
35
+ * on a row. In controlled mode, use it to update `activeId`.
36
+ */
37
+ onActiveChange?: (id: string | null) => void;
38
+ /**
39
+ * Built-in scroll spy (default `true`): the current heading is the last one
40
+ * whose top has scrolled past `spyOffset`. Ignored when `activeId` is given.
41
+ */
42
+ spy?: boolean;
43
+ /**
44
+ * The fold line in px from the top of the viewport that a heading has to
45
+ * cross to become current. Set it to the height of a sticky header (plus
46
+ * any `scroll-margin-top` on the headings). Default `0`.
47
+ */
48
+ spyOffset?: number;
49
+ /**
50
+ * Called when a row is clicked, before the browser navigates to the hash.
51
+ * Call `event.preventDefault()` to take the navigation over (e.g. for an
52
+ * eased scroll with a header offset).
53
+ */
54
+ onItemClick?: (item: TableOfContentsItem, event: MouseEvent<HTMLAnchorElement>) => void;
55
+ }
56
+ /**
57
+ * "On this page" navigation — a rule down the left, a semibold title and one
58
+ * link per heading. Rows are tertiary text; hovering lifts one to primary and
59
+ * grows a 2px bar over the rule, which the current row keeps in a stronger
60
+ * colour — the bar animates in and out on the bounce token.
61
+ *
62
+ * Uncontrolled by default: a scroll spy marks the last heading that has
63
+ * crossed `spyOffset`, and a clicked row stays current while its heading is on
64
+ * screen (so a jump to a short last section doesn't snap back to the section
65
+ * above it). Pass `activeId` to drive the highlight yourself.
66
+ */
67
+ export declare const TableOfContents: import('react').ForwardRefExoticComponent<TableOfContentsProps & import('react').RefAttributes<HTMLElement>>;
@@ -19,6 +19,8 @@ export type { HeaderProps, HeaderPosition, SubHeaderItem } from './components/He
19
19
  export { Box } from './components/Box';
20
20
  export { BrowserFrame } from './components/BrowserFrame';
21
21
  export type { BrowserFrameProps, BrowserFrameAction } from './components/BrowserFrame';
22
+ export { Figure } from './components/Figure';
23
+ export type { FigureProps, FigureCaptionSize } from './components/Figure';
22
24
  export { CopyCode } from './components/CopyCode';
23
25
  export type { CopyCodeProps } from './components/CopyCode';
24
26
  export { CodeBlock } from './components/CodeBlock';
@@ -76,6 +78,8 @@ export type { SidebarLayoutProps, SidebarProps, SidebarSectionProps, SidebarSwit
76
78
  export { PrefPanel } from './components/PrefPanel';
77
79
  export { PrevNextNav } from './components/PrevNextNav';
78
80
  export type { PrevNextNavProps, PrevNextNavItem, PrevNextNavBack } from './components/PrevNextNav';
81
+ export { TableOfContents } from './components/TableOfContents';
82
+ export type { TableOfContentsProps, TableOfContentsItem } from './components/TableOfContents';
79
83
  export { VideoPlayer } from './components/VideoPlayer';
80
84
  export type { VideoPlayerProps, VideoPlayerSource, VideoPlayerTrack } from './components/VideoPlayer';
81
85
  export { VideoPlayerModal } from './components/VideoPlayer/VideoPlayerModal';
package/dist/main.js CHANGED
@@ -1,55 +1,57 @@
1
1
  import { c as e, d as t, r as n, s as r, u as i } from "./utils-bAjntFD8.js";
2
2
  import { t as a } from "./Box-BZgeSeCV.js";
3
- import { t as o } from "./Button-CdrrwvXk.js";
4
- import { t as s } from "./BrowserFrame-CisPLoTR.js";
5
- import { t as c } from "./CopyCode-72gVieQO.js";
6
- import { t as l } from "./FrameworkIcon-B8GmMx0r.js";
7
- import { t as u } from "./CodeBlock-CGBo8nwy.js";
8
- import { n as d, t as f } from "./ClientLogo-Dj7K48YL.js";
9
- import { t as p } from "./LogoCarousel-TbyB0ot0.js";
10
- import { t as m } from "./Icon-DJTgdvsG.js";
11
- import { t as h } from "./Link-CYR92_U0.js";
12
- import { t as g } from "./ProductIcon-C5yvnjHr.js";
13
- import { t as _ } from "./ButtonGroup-JtJaVLlu.js";
14
- import { t as v } from "./InputSolo-CbnsJlJu.js";
15
- import { t as y } from "./SearchDropdown-Ow5_Hu21.js";
16
- import { i as b, n as x, r as S, t as C } from "./InputGrouped-DLghbzO7.js";
17
- import { t as w } from "./Container-BDssaLig.js";
18
- import { t as T } from "./DiscordInvite-DfPVlJ5G.js";
19
- import { t as E } from "./Heading-DNDHqYWO.js";
20
- import { n as D } from "./Typography-DI1AkqiO.js";
21
- import { n as O, t as k } from "./List-B1zRI6pm.js";
22
- import { n as A, t as j } from "./Features-BS-_cksu.js";
23
- import { t as M } from "./Logo-Bz0G2G-k.js";
24
- import { t as N } from "./NewsletterSignup-BPLup66s.js";
25
- import { n as P, r as F, t as I } from "./Dropdown-DLRtYhFa.js";
26
- import { t as L } from "./PrefPanel-6oTpfC5q.js";
27
- import { n as R, t as z } from "./Label-B-Xt6XQQ.js";
28
- import { t as B } from "./VideoCover-25FfvhPg.js";
29
- import { t as V } from "./VideoPlayer-CB2lOh95.js";
30
- import { t as H } from "./VideoPlayerModal-CVJbPd6n.js";
31
- import { t as U } from "./Footer-CqtCkr_g.js";
32
- import { n as W } from "./GPTInput-g460kfc6.js";
33
- import { t as G } from "./Notification-DtqcW5FH.js";
34
- import { n as K, t as q } from "./Header-CQKgp8xy.js";
35
- import { t as J } from "./Tabs-TRXBM5Zr.js";
36
- import { n as Y, t as X } from "./RadioBox-C7bDjItJ.js";
37
- import { n as Z, t as Q } from "./Checkbox-DU_KGp-P.js";
38
- import { t as $ } from "./Toggle-BHjptO7-.js";
39
- import { t as ee } from "./ToggleCard-kMpxzTnh.js";
40
- import { t as te } from "./ToggleList-Dh7wb2-W.js";
41
- import { Modal as ne } from "./components/Modal/index.js";
42
- import { t as re } from "./RoadmapDetails-CLQzIxv7.js";
43
- import { ModalContactFooter as ie } from "./components/Modal/ModalContactFooter.js";
44
- import { useOptionalSidebarLayout as ae, useSidebarLayout as oe } from "./components/Sidebar/context.js";
45
- import { SidebarLayout as se, SidebarMain as ce } from "./components/Sidebar/SidebarLayout.js";
46
- import { SidebarResizer as le } from "./components/Sidebar/SidebarResizer.js";
47
- import { Sidebar as ue, SidebarBody as de, SidebarHeader as fe, SidebarSection as pe } from "./components/Sidebar/Sidebar.js";
48
- import { SidebarSwitcher as me } from "./components/Sidebar/SidebarSwitcher.js";
49
- import { NavItem as he } from "./components/Sidebar/NavItem.js";
50
- import { NavGroup as ge } from "./components/Sidebar/NavGroup.js";
51
- import { NavDisclosure as _e } from "./components/Sidebar/NavDisclosure.js";
3
+ import { t as o } from "./Button-DFcjZsF4.js";
4
+ import { t as s } from "./BrowserFrame-_qNod9an.js";
5
+ import { n as c } from "./Typography-DI1AkqiO.js";
6
+ import { t as l } from "./Icon-DJTgdvsG.js";
7
+ import { Figure as u } from "./components/Figure/index.js";
8
+ import { t as d } from "./CopyCode-DS2T69as.js";
9
+ import { t as f } from "./FrameworkIcon-B8GmMx0r.js";
10
+ import { t as p } from "./CodeBlock-rPC0sIvR.js";
11
+ import { n as m, t as h } from "./ClientLogo-Dj7K48YL.js";
12
+ import { t as g } from "./LogoCarousel-BsmxIlzx.js";
13
+ import { t as _ } from "./Link-CYR92_U0.js";
14
+ import { t as v } from "./ProductIcon-C5yvnjHr.js";
15
+ import { t as y } from "./ButtonGroup-dTeFICBP.js";
16
+ import { t as b } from "./InputSolo-CbnsJlJu.js";
17
+ import { t as x } from "./SearchDropdown-g3g30peB.js";
18
+ import { i as S, n as C, r as w, t as T } from "./InputGrouped-DNiMvxxa.js";
19
+ import { t as E } from "./Container-BDssaLig.js";
20
+ import { t as D } from "./DiscordInvite-DfPVlJ5G.js";
21
+ import { t as O } from "./Heading-DNDHqYWO.js";
22
+ import { n as k, t as A } from "./List-CdwPhveO.js";
23
+ import { n as j, t as M } from "./Features-BQ5o3wcc.js";
24
+ import { t as N } from "./Logo-Bz0G2G-k.js";
25
+ import { t as P } from "./NewsletterSignup-CTbjNSnk.js";
26
+ import { n as F, r as I, t as L } from "./Dropdown-Ck7IASlc.js";
27
+ import { t as R } from "./PrefPanel-CwrWfi3R.js";
28
+ import { n as z, t as B } from "./Label-DTIv_3zs.js";
29
+ import { t as V } from "./VideoCover-DdN1nXfu.js";
30
+ import { t as H } from "./VideoPlayer-C0pHiwYx.js";
31
+ import { t as U } from "./VideoPlayerModal-Bh2u5h8g.js";
32
+ import { t as W } from "./Footer-C2tXo3oR.js";
33
+ import { n as G } from "./GPTInput-g460kfc6.js";
34
+ import { t as K } from "./Notification-CTSGBhJk.js";
35
+ import { n as q, t as J } from "./Header-DqE0a41T.js";
36
+ import { t as Y } from "./Tabs-TRXBM5Zr.js";
37
+ import { n as X, t as Z } from "./RadioBox-C7bDjItJ.js";
38
+ import { n as Q, t as $ } from "./Checkbox-X7FrR_6F.js";
39
+ import { t as ee } from "./Toggle-BHjptO7-.js";
40
+ import { t as te } from "./ToggleCard-kMpxzTnh.js";
41
+ import { t as ne } from "./ToggleList-Dh7wb2-W.js";
42
+ import { Modal as re } from "./components/Modal/index.js";
43
+ import { t as ie } from "./RoadmapDetails-B-2pgXHz.js";
44
+ import { ModalContactFooter as ae } from "./components/Modal/ModalContactFooter.js";
45
+ import { useOptionalSidebarLayout as oe, useSidebarLayout as se } from "./components/Sidebar/context.js";
46
+ import { SidebarLayout as ce, SidebarMain as le } from "./components/Sidebar/SidebarLayout.js";
47
+ import { SidebarResizer as ue } from "./components/Sidebar/SidebarResizer.js";
48
+ import { Sidebar as de, SidebarBody as fe, SidebarHeader as pe, SidebarSection as me } from "./components/Sidebar/Sidebar.js";
49
+ import { SidebarSwitcher as he } from "./components/Sidebar/SidebarSwitcher.js";
50
+ import { NavItem as ge } from "./components/Sidebar/NavItem.js";
51
+ import { NavGroup as _e } from "./components/Sidebar/NavGroup.js";
52
+ import { NavDisclosure as ve } from "./components/Sidebar/NavDisclosure.js";
52
53
  import "./components/Sidebar/index.js";
53
- import { t as ve } from "./PrevNextNav-XaxS2FTm.js";
54
- import { ThemeLoader as ye, themeLoaderScript as be } from "./components/ThemeLoader/index.js";
55
- export { a as Box, s as BrowserFrame, o as Button, _ as ButtonGroup, Q as Checkbox, Z as CheckboxGroup, f as ClientLogo, u as CodeBlock, w as Container, c as CopyCode, T as DiscordInvite, I as Dropdown, P as DropdownItem, F as DropdownSeparator, j as FeatureItem, A as Features, U as Footer, C as FormGroup, x as FormRow, l as FrameworkIcon, W as GPTInput, q as Header, E as Heading, m as Icon, S as InputGrouped, v as InputSolo, z as Label, h as Link, k as List, O as ListItem, M as Logo, p as LogoCarousel, ne as Modal, ie as ModalContactFooter, _e as NavDisclosure, ge as NavGroup, he as NavItem, R as NewTag, N as NewsletterSignup, G as Notification, L as PrefPanel, ve as PrevNextNav, g as ProductIcon, X as RadioBox, Y as RadioBoxGroup, re as RoadmapDetails, y as SearchDropdown, b as SelectGrouped, ue as Sidebar, de as SidebarBody, fe as SidebarHeader, se as SidebarLayout, ce as SidebarMain, le as SidebarResizer, pe as SidebarSection, me as SidebarSwitcher, K as SubHeader, J as Tabs, ye as ThemeLoader, i as ThemeProvider, $ as Toggle, ee as ToggleCard, te as ToggleList, D as Typography, B as VideoCover, V as VideoPlayer, H as VideoPlayerModal, d as clientLogoLabels, be as themeLoaderScript, n as useClipboard, t as useNextTheme, ae as useOptionalSidebarLayout, oe as useSidebarLayout, r as useSuccessFlash, e as useTheme };
54
+ import { t as ye } from "./PrevNextNav-BwP-lRaG.js";
55
+ import { t as be } from "./TableOfContents-d26S7KYx.js";
56
+ import { ThemeLoader as xe, themeLoaderScript as Se } from "./components/ThemeLoader/index.js";
57
+ export { a as Box, s as BrowserFrame, o as Button, y as ButtonGroup, $ as Checkbox, Q as CheckboxGroup, h as ClientLogo, p as CodeBlock, E as Container, d as CopyCode, D as DiscordInvite, L as Dropdown, F as DropdownItem, I as DropdownSeparator, M as FeatureItem, j as Features, u as Figure, W as Footer, T as FormGroup, C as FormRow, f as FrameworkIcon, G as GPTInput, J as Header, O as Heading, l as Icon, w as InputGrouped, b as InputSolo, B as Label, _ as Link, A as List, k as ListItem, N as Logo, g as LogoCarousel, re as Modal, ae as ModalContactFooter, ve as NavDisclosure, _e as NavGroup, ge as NavItem, z as NewTag, P as NewsletterSignup, K as Notification, R as PrefPanel, ye as PrevNextNav, v as ProductIcon, Z as RadioBox, X as RadioBoxGroup, ie as RoadmapDetails, x as SearchDropdown, S as SelectGrouped, de as Sidebar, fe as SidebarBody, pe as SidebarHeader, ce as SidebarLayout, le as SidebarMain, ue as SidebarResizer, me as SidebarSection, he as SidebarSwitcher, q as SubHeader, be as TableOfContents, Y as Tabs, xe as ThemeLoader, i as ThemeProvider, ee as Toggle, te as ToggleCard, ne as ToggleList, c as Typography, V as VideoCover, H as VideoPlayer, U as VideoPlayerModal, m as clientLogoLabels, Se as themeLoaderScript, n as useClipboard, t as useNextTheme, oe as useOptionalSidebarLayout, se as useSidebarLayout, r as useSuccessFlash, e as useTheme };
@@ -1,5 +1,5 @@
1
1
  import { r as e } from "./chunk-jwUa06l-.js";
2
- import { r as t, t as n } from "./create-element-DvDqDt-f.js";
2
+ import { r as t, t as n } from "./create-element-DHbI55TT.js";
3
3
  import r from "react";
4
4
  //#region node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js
5
5
  function i(e, t) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "highsoft-ui",
3
- "version": "1.0.172",
3
+ "version": "1.0.174",
4
4
  "description": "Highsoft UI",
5
5
  "type": "module",
6
6
  "repository": {
@@ -36,7 +36,7 @@
36
36
  ],
37
37
  "scripts": {
38
38
  "generate:api": "node scripts/extract-component-api.mjs",
39
- "predev": "node scripts/extract-component-api.mjs",
39
+ "predev": "node scripts/extract-component-api.mjs && npm run studio:assets",
40
40
  "dev": "astro dev",
41
41
  "build": "tsc -p ./tsconfig.build.json && vite build",
42
42
  "build:app": "astro build",
@@ -49,12 +49,17 @@
49
49
  "build-storybook": "storybook build",
50
50
  "prettier": "npx prettier . --write",
51
51
  "prettier-ci": "npx prettier . --check",
52
- "prebuild:app": "node scripts/extract-component-api.mjs",
52
+ "prebuild:app": "node scripts/extract-component-api.mjs && npm run studio:assets",
53
53
  "icons": "node scripts/convert-product-icons.cjs",
54
54
  "icons:frameworks": "node scripts/convert-framework-icons.cjs",
55
55
  "icons:clients": "node scripts/convert-client-logos.cjs",
56
56
  "stylelint": "npx stylelint '**/*.css'",
57
- "prepare": "husky && husky install"
57
+ "prepare": "husky && husky install",
58
+ "studio:assets": "node tools/icon-studio/scripts/prepare-assets.mjs",
59
+ "studio:serve": "python3 tools/icon-studio/viewer/serve.py",
60
+ "test:studio": "node --test tools/icon-studio/viewer/test-*.mjs && python3 -m unittest discover -s tools/icon-studio/viewer -p 'test_*.py'",
61
+ "studio:test-browser": "node tools/icon-studio/scripts/prepare-assets.mjs --test-browser",
62
+ "studio:verify-addon": "python3 tools/icon-studio/scripts/verify-addon.py"
58
63
  },
59
64
  "lint-staged": {
60
65
  "*.{js,jsx,ts,tsx}": [
@@ -104,6 +109,7 @@
104
109
  "eslint-plugin-react": "^7.34.1",
105
110
  "eslint-plugin-react-hooks": "^7.0.1",
106
111
  "eslint-plugin-react-refresh": "^0.5.0",
112
+ "fflate": "^0.8.2",
107
113
  "glob": "^13.0.0",
108
114
  "globals": "^17.0.0",
109
115
  "husky": "^9.0.11",
@@ -118,6 +124,7 @@
118
124
  "stylelint": "^17.0.0",
119
125
  "stylelint-config-standard": "^40.0.0",
120
126
  "stylelint-config-standard-scss": "^17.0.0",
127
+ "three": "^0.186.0",
121
128
  "typescript": "^6.0.2",
122
129
  "typescript-eslint": "^8.31.1",
123
130
  "vite": "^8.0.0",