@k8o/arte-odyssey 10.1.1 → 10.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -241,13 +241,15 @@ These integrations are exposed as optional subpath exports. Install the framewor
241
241
  pnpm add @json-render/core @json-render/react zod
242
242
  # OpenUI
243
243
  pnpm add @openuidev/react-lang zod
244
+ # OpenUI server-safe prompt entry (@k8o/arte-odyssey/openui/prompt) additionally needs:
245
+ pnpm add @openuidev/lang-core
244
246
  ```
245
247
 
246
- Supported components (**all 46**, both frameworks):
248
+ Supported components (**all 49**, both frameworks):
247
249
 
248
- - **Layout / containers**: `Stack`, `Card`, `Form`
250
+ - **Layout / containers**: `Stack`, `Grid`, `Card`, `Form`
249
251
  - **Buttons / nav**: `Button`, `IconButton`, `Anchor`, `Breadcrumb`, `Pagination`
250
- - **Display**: `Badge`, `Heading`, `Avatar`, `Code`, `Icon`, `Alert`, `Spinner`, `Progress`, `Skeleton`, `Separator`, `Tabs`, `Accordion`, `Table`, `BaselineStatus`, `ScrollLinked`
252
+ - **Display**: `Badge`, `Heading`, `Avatar`, `Code`, `Icon`, `ChevronIcon`, `StatusIcon`, `Alert`, `Spinner`, `Progress`, `Skeleton`, `Separator`, `Tabs`, `Accordion`, `Table`, `BaselineStatus`, `ScrollLinked`
251
253
  - **Overlays (self-contained widgets)**: `Modal`, `Dialog`, `Drawer`, `Popover`, `Tooltip`, `DropdownMenu`, `Toast`
252
254
  - **Form**: `TextField`, `Textarea`, `PasswordInput`, `NumberField`, `Slider`, `Checkbox`, `Switch`, `Select`, `Radio`, `RadioCard`, `CheckboxCard`, `ListBox`, `CheckboxGroup`, `Autocomplete`, `FileField`, `FormControl`
253
255
 
@@ -255,34 +257,61 @@ Overlays are exposed as **self-contained widgets**: a `Modal`/`Dialog`/`Drawer`/
255
257
 
256
258
  ### json-render (RSC-ready)
257
259
 
258
- The catalog (schemas / prompt) and the registry (rendering) are split so the catalog is **server-safe** — you can generate the system prompt in a React Server Component, and render on the client.
260
+ The catalog (schemas / prompt) and the registry (rendering) are split so the catalog is **server-safe** — generate the system prompt in a React Server Component, and render on the client.
259
261
 
260
262
  ```tsx
261
263
  // Server Component: prompt generation
262
- import { catalog } from '@k8o/arte-odyssey/json-render';
264
+ import { catalog, arteOdysseyRules } from '@k8o/arte-odyssey/json-render';
263
265
 
264
- const systemPrompt = catalog.prompt(); // safe on the server
266
+ // `customRules` injects cross-cutting constraints the model tends to break
267
+ // (Table cell counts match columns, href format, text-only Tabs/Accordion content).
268
+ const systemPrompt = catalog.prompt({ customRules: [...arteOdysseyRules] });
265
269
  ```
266
270
 
267
271
  ```tsx
268
- // Client Component: rendering
272
+ // Client Component: rendering.
273
+ // `JsonRenderUI` wires JSONUIProvider + Renderer and the registry for you —
274
+ // just pass a spec. Pass `onStateChange` to collect form values.
269
275
  'use client';
270
- import { registry } from '@k8o/arte-odyssey/json-render/registry';
271
- import { JSONUIProvider, Renderer } from '@json-render/react';
276
+ import { JsonRenderUI } from '@k8o/arte-odyssey/json-render/registry';
272
277
 
273
278
  export function GenUi({ spec }: { spec: unknown }) {
274
- return (
275
- <JSONUIProvider registry={registry}>
276
- <Renderer registry={registry} spec={spec} />
277
- </JSONUIProvider>
278
- );
279
+ return <JsonRenderUI spec={spec} />;
280
+ }
281
+ ```
282
+
283
+ Validate (and repair) LLM output before rendering. `validateGeneratedSpec` runs auto-fixes, structural checks, and per-component prop validation, returning a ready-to-resend repair prompt on failure:
284
+
285
+ ```tsx
286
+ import { validateGeneratedSpec } from '@k8o/arte-odyssey/json-render';
287
+
288
+ const result = validateGeneratedSpec(JSON.parse(llmOutput));
289
+ if (result.ok) {
290
+ return <JsonRenderUI spec={result.spec} />; // result.fixes lists auto-applied fixes
279
291
  }
292
+ const retried = await llm(result.repairPrompt); // ask the model to fix, then retry
280
293
  ```
281
294
 
282
- | Export | Side | Contents |
283
- | ---------------------------------------- | -------------- | -------------------------------- |
284
- | `@k8o/arte-odyssey/json-render` | server-safe | `catalog` (schemas + `prompt()`) |
285
- | `@k8o/arte-odyssey/json-render/registry` | `'use client'` | `registry` (rendering) |
295
+ Hand-written or LLM specs can be typed with `satisfies ArteSpec` so component names and props are checked at compile time (no `as unknown as Spec`):
296
+
297
+ ```tsx
298
+ import type { ArteSpec } from '@k8o/arte-odyssey/json-render';
299
+
300
+ const spec = {
301
+ root: 'root',
302
+ elements: {
303
+ root: { type: 'Stack', props: { direction: 'column' }, children: ['ok'] },
304
+ ok: { type: 'Button', props: { label: 'OK' } }, // typo in `type`/props → compile error
305
+ },
306
+ } satisfies ArteSpec;
307
+ ```
308
+
309
+ For advanced setups (custom `navigate` / `handlers` / `validationFunctions`), pass the lower-level `registry` to `JSONUIProvider` and `Renderer` from `@json-render/react` directly.
310
+
311
+ | Export | Side | Contents |
312
+ | ---------------------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
313
+ | `@k8o/arte-odyssey/json-render` | server-safe | `catalog` (schemas + `prompt()`), `validateGeneratedSpec`, `arteOdysseyRules`, types (`ArteSpec`, `ComponentName`, `ComponentProps`) |
314
+ | `@k8o/arte-odyssey/json-render/registry` | `'use client'` | `JsonRenderUI` (pre-wired), `registry` (low-level) |
286
315
 
287
316
  ### OpenUI
288
317
 
@@ -296,13 +325,27 @@ export function GenUi({ response }: { response: string }) {
296
325
  }
297
326
  ```
298
327
 
299
- Generate the system prompt at build time with the OpenUI CLI, or call `library.prompt()` in the same client bundle.
328
+ Generate the system prompt on the **server** with the dedicated server-safe entry (symmetric with json-render's `catalog.prompt()`):
329
+
330
+ ```tsx
331
+ import { prompt } from '@k8o/arte-odyssey/openui/prompt';
332
+
333
+ const systemPrompt = prompt(); // server-safe, no React — call it from an RSC or API route
334
+ ```
335
+
336
+ To generate the prompt inside the client bundle instead, `library.prompt()` still works.
337
+
338
+ | Export | Side | Contents |
339
+ | --------------------------------- | -------------- | ------------------------------------- |
340
+ | `@k8o/arte-odyssey/openui` | `'use client'` | `library` (rendering) |
341
+ | `@k8o/arte-odyssey/openui/prompt` | server-safe | `prompt()` (system prompt generation) |
300
342
 
301
343
  > **Notes**
302
344
  >
303
345
  > - Make sure `@k8o/arte-odyssey/styles.css` is loaded and the app is wrapped in `ArteOdysseyProvider`.
346
+ > - `@k8o/arte-odyssey/openui/prompt` needs the optional peer `@openuidev/lang-core` (React-free).
304
347
  > - `Tabs` panels are text content (`tabs: [{ label, content }]`); rich-component panels are a future enhancement.
305
- > - In OpenUI, `Card` can contain a `Stack`, but `Stack` cannot nest another `Stack` (the framework does not support self-referential schemas). json-render nests freely (slots-based).
348
+ > - In OpenUI, `Card` can contain a `Stack` or `Grid`, but `Stack`/`Grid` cannot directly nest a `Stack`/`Grid`/`Card` (no self-referential schemas) — put nested layout inside a `Card`. json-render nests freely (slots-based).
306
349
 
307
350
  ## Custom Hooks
308
351
 
@@ -3,7 +3,7 @@ declare const CheckboxGroup: import("react").FC<{
3
3
  invalid?: boolean;
4
4
  required?: boolean;
5
5
  name: string;
6
- } & Omit<import("react").FieldsetHTMLAttributes<HTMLFieldSetElement>, "className" | "style" | "onChange" | "name" | "defaultValue"> & {
6
+ } & Omit<import("react").FieldsetHTMLAttributes<HTMLFieldSetElement>, "className" | "style" | "onChange" | "defaultValue" | "name"> & {
7
7
  children?: import("react").ReactNode | undefined;
8
8
  } & ({
9
9
  value: string[];
@@ -18,7 +18,7 @@ declare const CheckboxGroup: import("react").FC<{
18
18
  invalid?: boolean;
19
19
  required?: boolean;
20
20
  name: string;
21
- } & Omit<import("react").FieldsetHTMLAttributes<HTMLFieldSetElement>, "className" | "style" | "onChange" | "name" | "defaultValue"> & {
21
+ } & Omit<import("react").FieldsetHTMLAttributes<HTMLFieldSetElement>, "className" | "style" | "onChange" | "defaultValue" | "name"> & {
22
22
  children?: import("react").ReactNode | undefined;
23
23
  } & ({
24
24
  value: string[];
@@ -33,7 +33,7 @@ declare const CheckboxGroup: import("react").FC<{
33
33
  Item: import("react").FC<{
34
34
  itemValue?: string;
35
35
  label: string;
36
- } & Omit<import("react").InputHTMLAttributes<HTMLInputElement>, "type" | "className" | "style" | "value" | "onChange" | "defaultChecked" | "checked" | "children"> & ({
36
+ } & Omit<import("react").InputHTMLAttributes<HTMLInputElement>, "type" | "className" | "style" | "value" | "onChange" | "children" | "checked" | "defaultChecked"> & ({
37
37
  value: boolean;
38
38
  onChange: (checked: boolean, event: import("react").ChangeEvent<HTMLInputElement>) => void;
39
39
  defaultChecked?: never;
@@ -12,7 +12,7 @@ const Slider = ({ invalid = false, disabled = false, required = false, value, de
12
12
  });
13
13
  const { pending } = useFormStatus();
14
14
  const disabledResolved = disabled || pending;
15
- const range = Math.max(max - min, 1);
15
+ const range = max > min ? max - min : 1;
16
16
  const progress = (currentValue - min) / range * 100;
17
17
  const clampedProgress = `${Math.min(Math.max(progress, 0), 100)}%`;
18
18
  return /* @__PURE__ */ jsxs("div", {
@@ -1,8 +1,8 @@
1
1
  import { ArteOdyssey } from "./arte-odyssey.mjs";
2
2
  import { GitHubIcon } from "./github-mark.mjs";
3
3
  import { Logo, LogoIcon } from "./logo.mjs";
4
- import { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FormIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SubscribeIcon, TableIcon, TagIcon, UpdateDateIcon, ViewIcon, ViewOffIcon } from "./lucide.mjs";
4
+ import { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FlaskIcon, FormIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PackageIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SquircleIcon, SubscribeIcon, TableIcon, TagIcon, UpdateDateIcon, ViewIcon, ViewOffIcon } from "./lucide.mjs";
5
5
  import { QiitaIcon } from "./qiita.mjs";
6
6
  import { TwitterIcon } from "./twitter.mjs";
7
7
  import { VerticalWritingIcon } from "./vertical-writing.mjs";
8
- export { AIIcon, AccessibilityIcon, AlertIcon, ArteOdyssey, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FormIcon, GitHubIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, Logo, LogoIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, QiitaIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SubscribeIcon, TableIcon, TagIcon, TwitterIcon, UpdateDateIcon, VerticalWritingIcon, ViewIcon, ViewOffIcon };
8
+ export { AIIcon, AccessibilityIcon, AlertIcon, ArteOdyssey, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FlaskIcon, FormIcon, GitHubIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, Logo, LogoIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PackageIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, QiitaIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SquircleIcon, SubscribeIcon, TableIcon, TagIcon, TwitterIcon, UpdateDateIcon, VerticalWritingIcon, ViewIcon, ViewOffIcon };
@@ -1,8 +1,8 @@
1
1
  import { ArteOdyssey } from "./arte-odyssey.mjs";
2
2
  import { GitHubIcon } from "./github-mark.mjs";
3
3
  import { Logo, LogoIcon } from "./logo.mjs";
4
- import { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FormIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SubscribeIcon, TableIcon, TagIcon, UpdateDateIcon, ViewIcon, ViewOffIcon } from "./lucide.mjs";
4
+ import { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FlaskIcon, FormIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PackageIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SquircleIcon, SubscribeIcon, TableIcon, TagIcon, UpdateDateIcon, ViewIcon, ViewOffIcon } from "./lucide.mjs";
5
5
  import { QiitaIcon } from "./qiita.mjs";
6
6
  import { TwitterIcon } from "./twitter.mjs";
7
7
  import { VerticalWritingIcon } from "./vertical-writing.mjs";
8
- export { AIIcon, AccessibilityIcon, AlertIcon, ArteOdyssey, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FormIcon, GitHubIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, Logo, LogoIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, QiitaIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SubscribeIcon, TableIcon, TagIcon, TwitterIcon, UpdateDateIcon, VerticalWritingIcon, ViewIcon, ViewOffIcon };
8
+ export { AIIcon, AccessibilityIcon, AlertIcon, ArteOdyssey, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FlaskIcon, FormIcon, GitHubIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, Logo, LogoIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PackageIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, QiitaIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SquircleIcon, SubscribeIcon, TableIcon, TagIcon, TwitterIcon, UpdateDateIcon, VerticalWritingIcon, ViewIcon, ViewOffIcon };
@@ -56,5 +56,8 @@ declare const ShieldCheckIcon: FC<IconProps>;
56
56
  declare const AccessibilityIcon: FC<IconProps>;
57
57
  declare const SparklesIcon: FC<IconProps>;
58
58
  declare const HorizontalWritingIcon: FC<IconProps>;
59
+ declare const SquircleIcon: FC<IconProps>;
60
+ declare const FlaskIcon: FC<IconProps>;
61
+ declare const PackageIcon: FC<IconProps>;
59
62
  //#endregion
60
- export { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FormIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SubscribeIcon, TableIcon, TagIcon, UpdateDateIcon, ViewIcon, ViewOffIcon };
63
+ export { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FlaskIcon, FormIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PackageIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SquircleIcon, SubscribeIcon, TableIcon, TagIcon, UpdateDateIcon, ViewIcon, ViewOffIcon };
@@ -1,6 +1,6 @@
1
1
  import { BaseIcon } from "./base.mjs";
2
2
  import { jsx } from "react/jsx-runtime";
3
- import { Accessibility, AlignRight, Angry, Annoyed, Atom, Bell, Blend, BookOpenText, BookText, Bookmark, Bot, Calendar, Check, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, CircleAlert, CircleCheck, ClipboardPenLine, Clock, Contrast, Droplets, ExternalLink, Eye, EyeOff, History, Info, Laugh, Lightbulb, Link, List, ListMinus, Mail, MapPin, Minus, MoonStar, PaintBucket, Palette, Plus, Presentation, Rocket, Rss, Send, ShieldCheck, Smile, Sparkles, Sun, Table2, Tag, ThumbsDown, ThumbsUp, TriangleAlert, X } from "lucide-react";
3
+ import { Accessibility, AlignRight, Angry, Annoyed, Atom, Bell, Blend, BookOpenText, BookText, Bookmark, Bot, Calendar, Check, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, CircleAlert, CircleCheck, ClipboardPenLine, Clock, Contrast, Droplets, ExternalLink, Eye, EyeOff, FlaskConical, History, Info, Laugh, Lightbulb, Link, List, ListMinus, Mail, MapPin, Minus, MoonStar, Package, PaintBucket, Palette, Plus, Presentation, Rocket, Rss, Send, ShieldCheck, Smile, Sparkles, Squircle, Sun, Table2, Tag, ThumbsDown, ThumbsUp, TriangleAlert, X } from "lucide-react";
4
4
  //#region src/components/icons/lucide.tsx
5
5
  const CHEVRON_BY_DIRECTION = {
6
6
  up: ChevronUp,
@@ -212,5 +212,17 @@ const HorizontalWritingIcon = ({ size = "md" }) => /* @__PURE__ */ jsx(BaseIcon,
212
212
  renderItem: (props) => /* @__PURE__ */ jsx(BookOpenText, { ...props }),
213
213
  size
214
214
  });
215
+ const SquircleIcon = ({ size = "md" }) => /* @__PURE__ */ jsx(BaseIcon, {
216
+ renderItem: (props) => /* @__PURE__ */ jsx(Squircle, { ...props }),
217
+ size
218
+ });
219
+ const FlaskIcon = ({ size = "md" }) => /* @__PURE__ */ jsx(BaseIcon, {
220
+ renderItem: (props) => /* @__PURE__ */ jsx(FlaskConical, { ...props }),
221
+ size
222
+ });
223
+ const PackageIcon = ({ size = "md" }) => /* @__PURE__ */ jsx(BaseIcon, {
224
+ renderItem: (props) => /* @__PURE__ */ jsx(Package, { ...props }),
225
+ size
226
+ });
215
227
  //#endregion
216
- export { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FormIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SubscribeIcon, TableIcon, TagIcon, UpdateDateIcon, ViewIcon, ViewOffIcon };
228
+ export { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FlaskIcon, FormIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PackageIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SquircleIcon, SubscribeIcon, TableIcon, TagIcon, UpdateDateIcon, ViewIcon, ViewOffIcon };
@@ -34,7 +34,7 @@ import { Textarea } from "./form/textarea/textarea.mjs";
34
34
  import { ArteOdyssey } from "./icons/arte-odyssey.mjs";
35
35
  import { GitHubIcon } from "./icons/github-mark.mjs";
36
36
  import { Logo, LogoIcon } from "./icons/logo.mjs";
37
- import { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FormIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SubscribeIcon, TableIcon, TagIcon, UpdateDateIcon, ViewIcon, ViewOffIcon } from "./icons/lucide.mjs";
37
+ import { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FlaskIcon, FormIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PackageIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SquircleIcon, SubscribeIcon, TableIcon, TagIcon, UpdateDateIcon, ViewIcon, ViewOffIcon } from "./icons/lucide.mjs";
38
38
  import { QiitaIcon } from "./icons/qiita.mjs";
39
39
  import { TwitterIcon } from "./icons/twitter.mjs";
40
40
  import { VerticalWritingIcon } from "./icons/vertical-writing.mjs";
@@ -55,4 +55,4 @@ import { useOpenContext } from "./overlays/popover/hooks.mjs";
55
55
  import { Popover } from "./overlays/popover/popover.mjs";
56
56
  import { ArteOdysseyProvider } from "./providers/arte-odyssey-provider.mjs";
57
57
  import { PortalRootProvider, usePortalRoot } from "./providers/portal-root.mjs";
58
- export { AIIcon, AccessibilityIcon, Accordion, Alert, AlertIcon, Anchor, ArteOdyssey, ArteOdysseyProvider, AtomIcon, Autocomplete, Avatar, BadIcon, Badge, BaselineStatus, BlogIcon, BoringIcon, Breadcrumb, Button, Card, CheckIcon, Checkbox, CheckboxCard, CheckboxGroup, ChevronIcon, CloseIcon, Code, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, Dialog, DifficultIcon, Drawer, DropdownMenu, EasyIcon, ExternalLinkIcon, FileField, Form, FormControl, FormIcon, GitHubIcon, GoodIcon, Grid, type GridProps, Heading, HistoryIcon, HorizontalWritingIcon, IconButton, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListBox, ListIcon, LocationIcon, Logo, LogoIcon, MailIcon, MinusIcon, MixedColorIcon, Modal, NavigationMenuIcon, NewsIcon, NumberField, Pagination, PaletteIcon, PasswordInput, PlusIcon, Popover, PortalRootProvider, PrepareIcon, Progress, PublishDateIcon, QiitaIcon, RSSIcon, Radio, RadioCard, ScrollLinked, Select, SendIcon, Separator, ShallowIcon, ShieldCheckIcon, Skeleton, SlideIcon, Slider, SparklesIcon, Spinner, Stack, type StackProps, SubscribeIcon, Switch, Table, TableIcon, Tabs, TagIcon, TextField, Textarea, ToastProvider, Tooltip, TwitterIcon, UpdateDateIcon, VerticalWritingIcon, ViewIcon, ViewOffIcon, useOpenContext, usePortalRoot, useToast };
58
+ export { AIIcon, AccessibilityIcon, Accordion, Alert, AlertIcon, Anchor, ArteOdyssey, ArteOdysseyProvider, AtomIcon, Autocomplete, Avatar, BadIcon, Badge, BaselineStatus, BlogIcon, BoringIcon, Breadcrumb, Button, Card, CheckIcon, Checkbox, CheckboxCard, CheckboxGroup, ChevronIcon, CloseIcon, Code, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, Dialog, DifficultIcon, Drawer, DropdownMenu, EasyIcon, ExternalLinkIcon, FileField, FlaskIcon, Form, FormControl, FormIcon, GitHubIcon, GoodIcon, Grid, type GridProps, Heading, HistoryIcon, HorizontalWritingIcon, IconButton, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListBox, ListIcon, LocationIcon, Logo, LogoIcon, MailIcon, MinusIcon, MixedColorIcon, Modal, NavigationMenuIcon, NewsIcon, NumberField, PackageIcon, Pagination, PaletteIcon, PasswordInput, PlusIcon, Popover, PortalRootProvider, PrepareIcon, Progress, PublishDateIcon, QiitaIcon, RSSIcon, Radio, RadioCard, ScrollLinked, Select, SendIcon, Separator, ShallowIcon, ShieldCheckIcon, Skeleton, SlideIcon, Slider, SparklesIcon, Spinner, SquircleIcon, Stack, type StackProps, SubscribeIcon, Switch, Table, TableIcon, Tabs, TagIcon, TextField, Textarea, ToastProvider, Tooltip, TwitterIcon, UpdateDateIcon, VerticalWritingIcon, ViewIcon, ViewOffIcon, useOpenContext, usePortalRoot, useToast };
@@ -4,7 +4,7 @@ import { useToast } from "./feedback/toast/context.mjs";
4
4
  import { ArteOdyssey } from "./icons/arte-odyssey.mjs";
5
5
  import { GitHubIcon } from "./icons/github-mark.mjs";
6
6
  import { Logo, LogoIcon } from "./icons/logo.mjs";
7
- import { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FormIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SubscribeIcon, TableIcon, TagIcon, UpdateDateIcon, ViewIcon, ViewOffIcon } from "./icons/lucide.mjs";
7
+ import { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FlaskIcon, FormIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PackageIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SquircleIcon, SubscribeIcon, TableIcon, TagIcon, UpdateDateIcon, ViewIcon, ViewOffIcon } from "./icons/lucide.mjs";
8
8
  import { QiitaIcon } from "./icons/qiita.mjs";
9
9
  import { TwitterIcon } from "./icons/twitter.mjs";
10
10
  import { VerticalWritingIcon } from "./icons/vertical-writing.mjs";
@@ -55,4 +55,4 @@ import { Modal } from "./overlays/modal/modal.mjs";
55
55
  import { Drawer } from "./overlays/drawer/drawer.mjs";
56
56
  import { DropdownMenu } from "./overlays/dropdown-menu/dropdown-menu.mjs";
57
57
  import { ListBox } from "./overlays/list-box/list-box.mjs";
58
- export { AIIcon, AccessibilityIcon, Accordion, Alert, AlertIcon, Anchor, ArteOdyssey, ArteOdysseyProvider, AtomIcon, Autocomplete, Avatar, BadIcon, Badge, BaselineStatus, BlogIcon, BoringIcon, Breadcrumb, Button, Card, CheckIcon, Checkbox, CheckboxCard, CheckboxGroup, ChevronIcon, CloseIcon, Code, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, Dialog, DifficultIcon, Drawer, DropdownMenu, EasyIcon, ExternalLinkIcon, FileField, Form, FormControl, FormIcon, GitHubIcon, GoodIcon, Grid, Heading, HistoryIcon, HorizontalWritingIcon, IconButton, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListBox, ListIcon, LocationIcon, Logo, LogoIcon, MailIcon, MinusIcon, MixedColorIcon, Modal, NavigationMenuIcon, NewsIcon, NumberField, Pagination, PaletteIcon, PasswordInput, PlusIcon, Popover, PortalRootProvider, PrepareIcon, Progress, PublishDateIcon, QiitaIcon, RSSIcon, Radio, RadioCard, ScrollLinked, Select, SendIcon, Separator, ShallowIcon, ShieldCheckIcon, Skeleton, SlideIcon, Slider, SparklesIcon, Spinner, Stack, SubscribeIcon, Switch, Table, TableIcon, Tabs, TagIcon, TextField, Textarea, ToastProvider, Tooltip, TwitterIcon, UpdateDateIcon, VerticalWritingIcon, ViewIcon, ViewOffIcon, useOpenContext, usePortalRoot, useToast };
58
+ export { AIIcon, AccessibilityIcon, Accordion, Alert, AlertIcon, Anchor, ArteOdyssey, ArteOdysseyProvider, AtomIcon, Autocomplete, Avatar, BadIcon, Badge, BaselineStatus, BlogIcon, BoringIcon, Breadcrumb, Button, Card, CheckIcon, Checkbox, CheckboxCard, CheckboxGroup, ChevronIcon, CloseIcon, Code, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, Dialog, DifficultIcon, Drawer, DropdownMenu, EasyIcon, ExternalLinkIcon, FileField, FlaskIcon, Form, FormControl, FormIcon, GitHubIcon, GoodIcon, Grid, Heading, HistoryIcon, HorizontalWritingIcon, IconButton, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListBox, ListIcon, LocationIcon, Logo, LogoIcon, MailIcon, MinusIcon, MixedColorIcon, Modal, NavigationMenuIcon, NewsIcon, NumberField, PackageIcon, Pagination, PaletteIcon, PasswordInput, PlusIcon, Popover, PortalRootProvider, PrepareIcon, Progress, PublishDateIcon, QiitaIcon, RSSIcon, Radio, RadioCard, ScrollLinked, Select, SendIcon, Separator, ShallowIcon, ShieldCheckIcon, Skeleton, SlideIcon, Slider, SparklesIcon, Spinner, SquircleIcon, Stack, SubscribeIcon, Switch, Table, TableIcon, Tabs, TagIcon, TextField, Textarea, ToastProvider, Tooltip, TwitterIcon, UpdateDateIcon, VerticalWritingIcon, ViewIcon, ViewOffIcon, useOpenContext, usePortalRoot, useToast };
package/dist/index.d.mts CHANGED
@@ -35,7 +35,7 @@ import { Textarea } from "./components/form/textarea/textarea.mjs";
35
35
  import { ArteOdyssey } from "./components/icons/arte-odyssey.mjs";
36
36
  import { GitHubIcon } from "./components/icons/github-mark.mjs";
37
37
  import { Logo, LogoIcon } from "./components/icons/logo.mjs";
38
- import { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FormIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SubscribeIcon, TableIcon, TagIcon, UpdateDateIcon, ViewIcon, ViewOffIcon } from "./components/icons/lucide.mjs";
38
+ import { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FlaskIcon, FormIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PackageIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SquircleIcon, SubscribeIcon, TableIcon, TagIcon, UpdateDateIcon, ViewIcon, ViewOffIcon } from "./components/icons/lucide.mjs";
39
39
  import { QiitaIcon } from "./components/icons/qiita.mjs";
40
40
  import { TwitterIcon } from "./components/icons/twitter.mjs";
41
41
  import { VerticalWritingIcon } from "./components/icons/vertical-writing.mjs";
@@ -84,4 +84,4 @@ import { useTimeout } from "./hooks/timeout/index.mjs";
84
84
  import { useWindowResize } from "./hooks/window-resize/index.mjs";
85
85
  import { useWindowSize } from "./hooks/window-size/index.mjs";
86
86
  import { WritingMode, useWritingMode } from "./hooks/writing-mode/index.mjs";
87
- export { AIIcon, AccessibilityIcon, Accordion, Alert, AlertIcon, Anchor, ArteOdyssey, ArteOdysseyProvider, AtomIcon, Autocomplete, Avatar, BadIcon, Badge, BaselineStatus, BlogIcon, BoringIcon, Breadcrumb, Button, Card, CheckIcon, Checkbox, CheckboxCard, CheckboxGroup, ChevronIcon, CloseIcon, Code, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, type DebouncedAction, Dialog, DifficultIcon, type Direction, Drawer, DropdownMenu, EasyIcon, ExternalLinkIcon, FileField, Form, FormControl, FormIcon, GitHubIcon, GoodIcon, Grid, type GridProps, Heading, HistoryIcon, HorizontalWritingIcon, IconButton, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListBox, ListIcon, LocationIcon, Logo, LogoIcon, MailIcon, MinusIcon, MixedColorIcon, Modal, NavigationMenuIcon, NewsIcon, NumberField, type Option, Pagination, PaletteIcon, PasswordInput, PlusIcon, Popover, PortalRootProvider, PrepareIcon, Progress, PublishDateIcon, QiitaIcon, RSSIcon, Radio, RadioCard, ScrollLinked, Select, SendIcon, Separator, ShallowIcon, ShieldCheckIcon, Skeleton, SlideIcon, Slider, SparklesIcon, Spinner, Stack, type StackProps, type Status, SubscribeIcon, Switch, Table, TableIcon, Tabs, TagIcon, TextField, Textarea, ToastProvider, Tooltip, TwitterIcon, UpdateDateIcon, VerticalWritingIcon, ViewIcon, ViewOffIcon, type WritingMode, chain, cn, createSafeContext, mergeProps, mergeRefs, useBreakpoint, useClickAway, useClient, useClipboard, useControllableState, useDebouncedTransition, useDeferredDebounce, useDisclosure, useHash, useHover, useInView, useIntersectionObserver, useInterval, useLocalStorage, useOpenContext, usePortalRoot, useResize, useScrollDirection, useScrollLock, useSessionStorage, useStep, useTimeout, useToast, useWindowResize, useWindowSize, useWritingMode };
87
+ export { AIIcon, AccessibilityIcon, Accordion, Alert, AlertIcon, Anchor, ArteOdyssey, ArteOdysseyProvider, AtomIcon, Autocomplete, Avatar, BadIcon, Badge, BaselineStatus, BlogIcon, BoringIcon, Breadcrumb, Button, Card, CheckIcon, Checkbox, CheckboxCard, CheckboxGroup, ChevronIcon, CloseIcon, Code, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, type DebouncedAction, Dialog, DifficultIcon, type Direction, Drawer, DropdownMenu, EasyIcon, ExternalLinkIcon, FileField, FlaskIcon, Form, FormControl, FormIcon, GitHubIcon, GoodIcon, Grid, type GridProps, Heading, HistoryIcon, HorizontalWritingIcon, IconButton, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListBox, ListIcon, LocationIcon, Logo, LogoIcon, MailIcon, MinusIcon, MixedColorIcon, Modal, NavigationMenuIcon, NewsIcon, NumberField, type Option, PackageIcon, Pagination, PaletteIcon, PasswordInput, PlusIcon, Popover, PortalRootProvider, PrepareIcon, Progress, PublishDateIcon, QiitaIcon, RSSIcon, Radio, RadioCard, ScrollLinked, Select, SendIcon, Separator, ShallowIcon, ShieldCheckIcon, Skeleton, SlideIcon, Slider, SparklesIcon, Spinner, SquircleIcon, Stack, type StackProps, type Status, SubscribeIcon, Switch, Table, TableIcon, Tabs, TagIcon, TextField, Textarea, ToastProvider, Tooltip, TwitterIcon, UpdateDateIcon, VerticalWritingIcon, ViewIcon, ViewOffIcon, type WritingMode, chain, cn, createSafeContext, mergeProps, mergeRefs, useBreakpoint, useClickAway, useClient, useClipboard, useControllableState, useDebouncedTransition, useDeferredDebounce, useDisclosure, useHash, useHover, useInView, useIntersectionObserver, useInterval, useLocalStorage, useOpenContext, usePortalRoot, useResize, useScrollDirection, useScrollLock, useSessionStorage, useStep, useTimeout, useToast, useWindowResize, useWindowSize, useWritingMode };
package/dist/index.mjs CHANGED
@@ -8,7 +8,7 @@ import { useToast } from "./components/feedback/toast/context.mjs";
8
8
  import { ArteOdyssey } from "./components/icons/arte-odyssey.mjs";
9
9
  import { GitHubIcon } from "./components/icons/github-mark.mjs";
10
10
  import { Logo, LogoIcon } from "./components/icons/logo.mjs";
11
- import { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FormIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SubscribeIcon, TableIcon, TagIcon, UpdateDateIcon, ViewIcon, ViewOffIcon } from "./components/icons/lucide.mjs";
11
+ import { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, BoringIcon, CheckIcon, ChevronIcon, CloseIcon, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, DifficultIcon, EasyIcon, ExternalLinkIcon, FlaskIcon, FormIcon, GoodIcon, HistoryIcon, HorizontalWritingIcon, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListIcon, LocationIcon, MailIcon, MinusIcon, MixedColorIcon, NavigationMenuIcon, NewsIcon, PackageIcon, PaletteIcon, PlusIcon, PrepareIcon, PublishDateIcon, RSSIcon, SendIcon, ShallowIcon, ShieldCheckIcon, SlideIcon, SparklesIcon, SquircleIcon, SubscribeIcon, TableIcon, TagIcon, UpdateDateIcon, ViewIcon, ViewOffIcon } from "./components/icons/lucide.mjs";
12
12
  import { QiitaIcon } from "./components/icons/qiita.mjs";
13
13
  import { TwitterIcon } from "./components/icons/twitter.mjs";
14
14
  import { VerticalWritingIcon } from "./components/icons/vertical-writing.mjs";
@@ -83,4 +83,4 @@ import { Drawer } from "./components/overlays/drawer/drawer.mjs";
83
83
  import { DropdownMenu } from "./components/overlays/dropdown-menu/dropdown-menu.mjs";
84
84
  import { ListBox } from "./components/overlays/list-box/list-box.mjs";
85
85
  import { mergeProps } from "./helpers/merge-props.mjs";
86
- export { AIIcon, AccessibilityIcon, Accordion, Alert, AlertIcon, Anchor, ArteOdyssey, ArteOdysseyProvider, AtomIcon, Autocomplete, Avatar, BadIcon, Badge, BaselineStatus, BlogIcon, BoringIcon, Breadcrumb, Button, Card, CheckIcon, Checkbox, CheckboxCard, CheckboxGroup, ChevronIcon, CloseIcon, Code, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, Dialog, DifficultIcon, Drawer, DropdownMenu, EasyIcon, ExternalLinkIcon, FileField, Form, FormControl, FormIcon, GitHubIcon, GoodIcon, Grid, Heading, HistoryIcon, HorizontalWritingIcon, IconButton, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListBox, ListIcon, LocationIcon, Logo, LogoIcon, MailIcon, MinusIcon, MixedColorIcon, Modal, NavigationMenuIcon, NewsIcon, NumberField, Pagination, PaletteIcon, PasswordInput, PlusIcon, Popover, PortalRootProvider, PrepareIcon, Progress, PublishDateIcon, QiitaIcon, RSSIcon, Radio, RadioCard, ScrollLinked, Select, SendIcon, Separator, ShallowIcon, ShieldCheckIcon, Skeleton, SlideIcon, Slider, SparklesIcon, Spinner, Stack, SubscribeIcon, Switch, Table, TableIcon, Tabs, TagIcon, TextField, Textarea, ToastProvider, Tooltip, TwitterIcon, UpdateDateIcon, VerticalWritingIcon, ViewIcon, ViewOffIcon, chain, cn, createSafeContext, mergeProps, mergeRefs, useBreakpoint, useClickAway, useClient, useClipboard, useControllableState, useDebouncedTransition, useDeferredDebounce, useDisclosure, useHash, useHover, useInView, useIntersectionObserver, useInterval, useLocalStorage, useOpenContext, usePortalRoot, useResize, useScrollDirection, useScrollLock, useSessionStorage, useStep, useTimeout, useToast, useWindowResize, useWindowSize, useWritingMode };
86
+ export { AIIcon, AccessibilityIcon, Accordion, Alert, AlertIcon, Anchor, ArteOdyssey, ArteOdysseyProvider, AtomIcon, Autocomplete, Avatar, BadIcon, Badge, BaselineStatus, BlogIcon, BoringIcon, Breadcrumb, Button, Card, CheckIcon, Checkbox, CheckboxCard, CheckboxGroup, ChevronIcon, CloseIcon, Code, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, Dialog, DifficultIcon, Drawer, DropdownMenu, EasyIcon, ExternalLinkIcon, FileField, FlaskIcon, Form, FormControl, FormIcon, GitHubIcon, GoodIcon, Grid, Heading, HistoryIcon, HorizontalWritingIcon, IconButton, InformativeIcon, InterestingIcon, LightModeIcon, LinkIcon, ListBox, ListIcon, LocationIcon, Logo, LogoIcon, MailIcon, MinusIcon, MixedColorIcon, Modal, NavigationMenuIcon, NewsIcon, NumberField, PackageIcon, Pagination, PaletteIcon, PasswordInput, PlusIcon, Popover, PortalRootProvider, PrepareIcon, Progress, PublishDateIcon, QiitaIcon, RSSIcon, Radio, RadioCard, ScrollLinked, Select, SendIcon, Separator, ShallowIcon, ShieldCheckIcon, Skeleton, SlideIcon, Slider, SparklesIcon, Spinner, SquircleIcon, Stack, SubscribeIcon, Switch, Table, TableIcon, Tabs, TagIcon, TextField, Textarea, ToastProvider, Tooltip, TwitterIcon, UpdateDateIcon, VerticalWritingIcon, ViewIcon, ViewOffIcon, chain, cn, createSafeContext, mergeProps, mergeRefs, useBreakpoint, useClickAway, useClient, useClipboard, useControllableState, useDebouncedTransition, useDeferredDebounce, useDisclosure, useHash, useHover, useInView, useIntersectionObserver, useInterval, useLocalStorage, useOpenContext, usePortalRoot, useResize, useScrollDirection, useScrollLock, useSessionStorage, useStep, useTimeout, useToast, useWindowResize, useWindowSize, useWritingMode };
@@ -0,0 +1,19 @@
1
+ import { Library } from "@openuidev/lang-core";
2
+
3
+ //#region src/integrations/_shared/openui-defs.d.ts
4
+ /**
5
+ * OpenUI ライブラリの「定義部分」(スキーマ・説明文・子要素の構成)を
6
+ * React 非依存で組み立てる共有ファクトリ。
7
+ *
8
+ * 描画関数(`component`)だけを外から差し込むことで、
9
+ * - クライアント(`openui/library.tsx`・'use client')= 実 React 描画関数を渡す
10
+ * - サーバー安全(`openui/prompt.ts`)= 何も渡さず `prompt()` だけ使う
11
+ * の 2 つを **スキーマを二重管理せずに** 生成できる。
12
+ *
13
+ * OpenUI は schema と描画関数を `defineComponent` で同居させる設計なので、
14
+ * このファクトリ自体は描画関数を opaque な `C` として受け取り中身を見ない。
15
+ */
16
+ type ArteOdysseyRenderers<C> = Partial<Record<string, C>>;
17
+ declare const buildArteOdysseyLibrary: <C>(render: ArteOdysseyRenderers<C>) => Library<C>;
18
+ //#endregion
19
+ export { ArteOdysseyRenderers, buildArteOdysseyLibrary };
@@ -0,0 +1,159 @@
1
+ import { accordionProps, alertProps, anchorProps, autocompleteProps, avatarProps, badgeProps, baselineStatusProps, breadcrumbProps, buttonProps, cardProps, checkboxCardProps, checkboxGroupProps, checkboxProps, chevronIconProps, codeProps, dialogProps, drawerProps, dropdownMenuProps, fileFieldProps, formControlProps, formProps, gridProps, headingProps, iconButtonProps, iconProps, listBoxProps, modalProps, numberFieldProps, paginationProps, passwordInputProps, popoverProps, progressProps, radioCardProps, radioProps, scrollLinkedProps, selectProps, separatorProps, skeletonProps, sliderProps, spinnerProps, stackProps, statusIconProps, switchProps, tableProps, tabsProps, textFieldProps, textareaProps, toastProps, tooltipProps } from "./schemas.mjs";
2
+ import { createLibrary, defineComponent } from "@openuidev/lang-core";
3
+ import { z } from "zod";
4
+ //#region src/integrations/_shared/openui-defs.ts
5
+ const buildArteOdysseyLibrary = (render) => {
6
+ const def = (name, description, props) => defineComponent({
7
+ name,
8
+ description,
9
+ props,
10
+ component: render[name]
11
+ });
12
+ const Button = def("Button", "アクションボタン。href を指定するとリンク(<a>)になる。", buttonProps);
13
+ const IconButton = def("IconButton", "アイコンのみのボタン(label は必須)。", iconButtonProps);
14
+ const Badge = def("Badge", "ステータスやラベルのバッジ。", badgeProps);
15
+ const Heading = def("Heading", "見出し(h1〜h6)。", headingProps);
16
+ const Anchor = def("Anchor", "テキストリンク。", anchorProps);
17
+ const Avatar = def("Avatar", "アバター(画像 or イニシャル)。", avatarProps);
18
+ const Code = def("Code", "インラインのコード/値表示。", codeProps);
19
+ const Icon = def("Icon", "アイコン(name で指定)。", iconProps);
20
+ const ChevronIcon = def("ChevronIcon", "矢印アイコン。direction で向きを指定。", chevronIconProps);
21
+ const StatusIcon = def("StatusIcon", "ステータスを表すアイコン(success/info/warning/error)。装飾用途で、メッセージ表示なら Alert を使う。", statusIconProps);
22
+ const Alert = def("Alert", "状態を伝えるアラート。message は文字列または文字列配列。", alertProps);
23
+ const Spinner = def("Spinner", "ローディングスピナー。", spinnerProps);
24
+ const Progress = def("Progress", "進捗バー。", progressProps);
25
+ const Skeleton = def("Skeleton", "ローディングのプレースホルダ。", skeletonProps);
26
+ const Separator = def("Separator", "区切り線。", separatorProps);
27
+ const Tabs = def("Tabs", "タブ。各タブは label とテキスト content を持つ。content は文字列のみ。", tabsProps);
28
+ const Accordion = def("Accordion", "開閉できるアコーディオン。各項目は title とテキスト content。content は文字列のみ。", accordionProps);
29
+ const Breadcrumb = def("Breadcrumb", "パンくずリスト。", breadcrumbProps);
30
+ const Table = def("Table", "テーブル。columns と rows(行ごとのセル文字列)。各行のセル数は columns の数と一致させる。", tableProps);
31
+ const TextField = def("TextField", "1行テキスト入力。name でフォーム状態に束縛される。", textFieldProps);
32
+ const Textarea = def("Textarea", "複数行テキスト入力。name でフォーム状態に束縛される。", textareaProps);
33
+ const PasswordInput = def("PasswordInput", "パスワード入力。name でフォーム状態に束縛される。", passwordInputProps);
34
+ const NumberField = def("NumberField", "数値入力。name でフォーム状態に束縛される。", numberFieldProps);
35
+ const Slider = def("Slider", "スライダー。name でフォーム状態に束縛される。", sliderProps);
36
+ const Checkbox = def("Checkbox", "チェックボックス。name でフォーム状態に束縛される。", checkboxProps);
37
+ const Switch = def("Switch", "オン/オフスイッチ。name でフォーム状態に束縛される。", switchProps);
38
+ const Select = def("Select", "ドロップダウン選択。name でフォーム状態に束縛される。", selectProps);
39
+ const Radio = def("Radio", "単一選択ラジオ。name でフォーム状態に束縛される。", radioProps);
40
+ const RadioCard = def("RadioCard", "カード型の単一選択。name でフォーム状態に束縛される。", radioCardProps);
41
+ const CheckboxCard = def("CheckboxCard", "カード型の複数選択。name でフォーム状態に束縛される。", checkboxCardProps);
42
+ const Pagination = def("Pagination", "ページネーション。name でフォーム状態に束縛される。", paginationProps);
43
+ const Tooltip = def("Tooltip", "ツールチップ。ホバー/フォーカスで表示。", tooltipProps);
44
+ const DropdownMenu = def("DropdownMenu", "ドロップダウンメニュー。", dropdownMenuProps);
45
+ const Toast = def("Toast", "トースト通知。triggerLabel のボタンで発火。", toastProps);
46
+ const ScrollLinked = def("ScrollLinked", "ページスクロール進捗バー(fixed top)。", scrollLinkedProps);
47
+ const BaselineStatus = def("BaselineStatus", "Web feature の Baseline ステータス表示。", baselineStatusProps);
48
+ const ListBox = def("ListBox", "ポップアップ型の単一選択リスト。", listBoxProps);
49
+ const CheckboxGroup = def("CheckboxGroup", "チェックボックスグループ。name でフォーム状態に束縛。", checkboxGroupProps);
50
+ const Autocomplete = def("Autocomplete", "タグ風の複数選択オートコンプリート。", autocompleteProps);
51
+ const FileField = def("FileField", "ファイル選択フィールド(自己完結ウィジェット)。", fileFieldProps);
52
+ const FormControl = def("FormControl", "ラベル+ヘルプ/エラー付きフィールド(text/textarea/password)。", formControlProps);
53
+ const childRefs = [
54
+ Button.ref,
55
+ IconButton.ref,
56
+ Badge.ref,
57
+ Heading.ref,
58
+ Anchor.ref,
59
+ Avatar.ref,
60
+ Code.ref,
61
+ Icon.ref,
62
+ ChevronIcon.ref,
63
+ StatusIcon.ref,
64
+ Alert.ref,
65
+ Spinner.ref,
66
+ Progress.ref,
67
+ Skeleton.ref,
68
+ Separator.ref,
69
+ Tabs.ref,
70
+ Accordion.ref,
71
+ Breadcrumb.ref,
72
+ Table.ref,
73
+ TextField.ref,
74
+ Textarea.ref,
75
+ PasswordInput.ref,
76
+ NumberField.ref,
77
+ Slider.ref,
78
+ Checkbox.ref,
79
+ Switch.ref,
80
+ Select.ref,
81
+ Radio.ref,
82
+ RadioCard.ref,
83
+ CheckboxCard.ref,
84
+ Pagination.ref,
85
+ Tooltip.ref,
86
+ DropdownMenu.ref,
87
+ Toast.ref,
88
+ ScrollLinked.ref,
89
+ BaselineStatus.ref,
90
+ ListBox.ref,
91
+ CheckboxGroup.ref,
92
+ Autocomplete.ref,
93
+ FileField.ref,
94
+ FormControl.ref
95
+ ];
96
+ const Stack = def("Stack", "子要素を縦/横に等間隔で並べるレイアウトコンテナ。Stack の直下に Stack/Grid/Card は置けない。入れ子レイアウトが必要なら Card の中に Stack や Grid を入れる。", stackProps.extend({ children: z.array(z.union(childRefs)).describe("並べる子要素") }));
97
+ const Grid = def("Grid", "子要素をグリッド状に並べる。cols(1〜6 / auto-fill / auto-fit)と gap、auto-fill/fit 時は minItemSize で各セルの最小サイズを制御。Grid の直下に Stack/Grid/Card は置けない。", gridProps.extend({ children: z.array(z.union(childRefs)).describe("グリッド内の子要素") }));
98
+ const containerChildRefs = [
99
+ ...childRefs,
100
+ Stack.ref,
101
+ Grid.ref
102
+ ];
103
+ return createLibrary({
104
+ components: [
105
+ Stack,
106
+ Grid,
107
+ def("Card", "コンテンツをまとめるカード(コンテナ)。Stack や Grid も入れられる。interactive を付けるとホバー時にスケールする。", cardProps.extend({ children: z.array(z.union(containerChildRefs)).describe("カード内の子要素") })),
108
+ def("Form", "フォーム要素のラッパー(縦並びレイアウト)。", formProps.extend({ children: z.array(z.union(containerChildRefs)).describe("フォーム内の要素") })),
109
+ def("Modal", "モーダルダイアログ。triggerLabel のボタンで開く。", modalProps.extend({ children: z.array(z.union(containerChildRefs)).describe("モーダル内の要素") })),
110
+ def("Dialog", "センターダイアログ。triggerLabel のボタンで開く。", dialogProps.extend({ children: z.array(z.union(containerChildRefs)).describe("ダイアログ内の要素") })),
111
+ def("Drawer", "サイドドロワー。triggerLabel のボタンで開く。", drawerProps.extend({ children: z.array(z.union(containerChildRefs)).describe("ドロワー内の要素") })),
112
+ def("Popover", "ポップオーバー。triggerLabel のボタンで開閉。", popoverProps.extend({ children: z.array(z.union(containerChildRefs)).describe("ポップオーバー内の要素") })),
113
+ Tooltip,
114
+ DropdownMenu,
115
+ Toast,
116
+ Button,
117
+ IconButton,
118
+ Badge,
119
+ Heading,
120
+ Anchor,
121
+ Avatar,
122
+ Code,
123
+ Icon,
124
+ ChevronIcon,
125
+ StatusIcon,
126
+ Alert,
127
+ Spinner,
128
+ Progress,
129
+ Skeleton,
130
+ Separator,
131
+ ScrollLinked,
132
+ BaselineStatus,
133
+ Tabs,
134
+ Accordion,
135
+ Breadcrumb,
136
+ Table,
137
+ TextField,
138
+ Textarea,
139
+ PasswordInput,
140
+ NumberField,
141
+ Slider,
142
+ Checkbox,
143
+ Switch,
144
+ Select,
145
+ Radio,
146
+ RadioCard,
147
+ CheckboxCard,
148
+ Pagination,
149
+ ListBox,
150
+ CheckboxGroup,
151
+ Autocomplete,
152
+ FileField,
153
+ FormControl
154
+ ],
155
+ root: "Stack"
156
+ });
157
+ };
158
+ //#endregion
159
+ export { buildArteOdysseyLibrary };
@@ -389,17 +389,17 @@ declare const stackProps: z.ZodObject<{
389
389
  column: "column";
390
390
  }>>;
391
391
  gap: z.ZodOptional<z.ZodEnum<{
392
+ none: "none";
392
393
  sm: "sm";
393
394
  md: "md";
394
395
  lg: "lg";
395
- none: "none";
396
396
  xl: "xl";
397
397
  }>>;
398
398
  padding: z.ZodOptional<z.ZodEnum<{
399
+ none: "none";
399
400
  sm: "sm";
400
401
  md: "md";
401
402
  lg: "lg";
402
- none: "none";
403
403
  xl: "xl";
404
404
  }>>;
405
405
  align: z.ZodOptional<z.ZodEnum<{
@@ -419,10 +419,10 @@ declare const gridProps: z.ZodObject<{
419
419
  cols: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>, z.ZodLiteral<6>, z.ZodLiteral<"auto-fill">, z.ZodLiteral<"auto-fit">]>>;
420
420
  minItemSize: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<24>, z.ZodLiteral<32>, z.ZodLiteral<40>, z.ZodLiteral<48>, z.ZodLiteral<64>, z.ZodLiteral<80>]>>;
421
421
  gap: z.ZodOptional<z.ZodEnum<{
422
+ none: "none";
422
423
  sm: "sm";
423
424
  md: "md";
424
425
  lg: "lg";
425
- none: "none";
426
426
  xl: "xl";
427
427
  }>>;
428
428
  }, z.core.$strip>;