@m1kapp/kit 0.0.30 → 0.0.32

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/dist/index.d.mts CHANGED
@@ -65,6 +65,19 @@ interface AppShellProps {
65
65
  /**
66
66
  * Mobile app-like container with rounded corners, shadow, and ring.
67
67
  * Centers content and constrains width for a phone-like viewport.
68
+ *
69
+ * `AppShell` fills `h-full` of its parent — it does not size itself. Wrap it
70
+ * in `<Watermark>` (gives `h-dvh` + centering + the `PoweredByKit` credit
71
+ * strip) rather than a hand-rolled height/centering div; without a sized
72
+ * parent the shell just collapses to content height.
73
+ *
74
+ * @example
75
+ * <Watermark color="#e2603f" text="myapp">
76
+ * <AppShell>
77
+ * <AppShellHeader>...</AppShellHeader>
78
+ * <AppShellContent><Section>...</Section></AppShellContent>
79
+ * </AppShell>
80
+ * </Watermark>
68
81
  */
69
82
  declare function AppShell({ children, className, maxWidth, maxHeight, accent, accentFg, style, }: AppShellProps): react_jsx_runtime.JSX.Element;
70
83
  interface AppShellHeaderProps {
@@ -80,7 +93,9 @@ interface AppShellContentProps {
80
93
  className?: string;
81
94
  }
82
95
  /**
83
- * Scrollable main content area.
96
+ * Scrollable main content area. Carries no padding of its own — build
97
+ * children from `<Section>` (px-4) blocks separated by `<Divider spacing="sm" />`,
98
+ * not a hand-rolled `<div className="p-4 flex flex-col gap-4">`.
84
99
  */
85
100
  declare function AppShellContent({ children, className }: AppShellContentProps): react_jsx_runtime.JSX.Element;
86
101
 
@@ -304,6 +319,55 @@ interface TextareaProps extends InputBaseProps {
304
319
  }
305
320
  declare function Textarea({ value, onChange, placeholder, rows, disabled, onFocus, onBlur, className, }: TextareaProps): react_jsx_runtime.JSX.Element;
306
321
 
322
+ interface MediaCardProps {
323
+ /** 16:9 썸네일 이미지 URL */
324
+ thumbnail: string;
325
+ /** 썸네일 우하단 배지 (재생시간 등) */
326
+ badge?: string;
327
+ /** horizontal: 썸네일 좌측 절반 / vertical: 썸네일 상단 풀폭 */
328
+ layout?: "horizontal" | "vertical";
329
+ onClick?: () => void;
330
+ /** 제목·메타 등 본문 — 폰트/색은 호출부 소유 */
331
+ children: ReactNode;
332
+ className?: string;
333
+ }
334
+ /**
335
+ * 썸네일 + 본문 미디어 카드 (영상·플레이리스트 목록용).
336
+ *
337
+ * @example
338
+ * <MediaCard thumbnail={v.thumbnail} badge={v.duration} onClick={open}>
339
+ * <p className="text-base line-clamp-2">{v.title}</p>
340
+ * <p className="text-xs text-zinc-400">조회수 {formatKoreanNumber(v.viewCount)}회</p>
341
+ * </MediaCard>
342
+ */
343
+ declare function MediaCard({ thumbnail, badge, layout, onClick, children, className, }: MediaCardProps): react_jsx_runtime.JSX.Element;
344
+
345
+ interface UnderlineTab<T extends string = string> {
346
+ id: T;
347
+ label: string;
348
+ }
349
+ interface UnderlineTabsProps<T extends string = string> {
350
+ tabs: UnderlineTab<T>[];
351
+ active: T;
352
+ onChange: (id: T) => void;
353
+ /** 스크롤 상단 고정 */
354
+ sticky?: boolean;
355
+ /** 좁은 탭 간격 (요일 등 짧은 라벨 다수일 때) */
356
+ compact?: boolean;
357
+ /** 활성 탭 색. Default: currentColor 기반 (dark 셸에선 white) */
358
+ activeColor?: string;
359
+ className?: string;
360
+ }
361
+ /**
362
+ * 하단 언더라인 인디케이터 탭 (콘텐츠 필터용) — 하단 내비 TabBar와 별개.
363
+ * SegmentedControl(박스형)과 달리 미디어 앱의 카테고리 탭 UX.
364
+ *
365
+ * @example
366
+ * <UnderlineTabs tabs={[{ id: "all", label: "전체" }, { id: "music", label: "음악" }]}
367
+ * active={tab} onChange={setTab} sticky />
368
+ */
369
+ declare function UnderlineTabs<T extends string>({ tabs, active, onChange, sticky, compact, activeColor, className, }: UnderlineTabsProps<T>): react_jsx_runtime.JSX.Element;
370
+
307
371
  interface SectionProps {
308
372
  children: ReactNode;
309
373
  className?: string;
@@ -419,12 +483,7 @@ interface WatermarkProps {
419
483
  total?: number;
420
484
  };
421
485
  }
422
- /**
423
- * Full-screen colored background with repeating animated text watermark pattern.
424
- *
425
- * Renders as a single SVG element with a <pattern> — zero extra DOM nodes per tile.
426
- * Sponsor tiles inside the pattern are clickable and support hover effects.
427
- */
486
+ /** Estimate rendered width of a string. CJK chars ≈ 1.0×, Latin ≈ 0.62× font size. */
428
487
  declare function Watermark({ children, color, text, maxWidth, sponsor, speed, hidePoweredBy, trackSlug, track, claimed, counts, }: WatermarkProps): react_jsx_runtime.JSX.Element;
429
488
 
430
489
  declare const colors: {
@@ -1168,18 +1227,6 @@ interface StepperProps {
1168
1227
  accent?: string;
1169
1228
  className?: string;
1170
1229
  }
1171
- /**
1172
- * Horizontal multi-step progress indicator with connectors. Steps before the
1173
- * cursor show a check, the current step is highlighted, the rest are muted.
1174
- * Great for wizards, multi-phase flows, and onboarding.
1175
- *
1176
- * @example
1177
- * <Stepper current={phase} onStepClick={setPhase} steps={[
1178
- * { label: "분석", icon: "📝" },
1179
- * { label: "준비", icon: "📸" },
1180
- * { label: "생성", icon: "✨" },
1181
- * ]} />
1182
- */
1183
1230
  declare function Stepper({ steps, current, completedThrough, onStepClick, accent, className, }: StepperProps): react_jsx_runtime.JSX.Element;
1184
1231
 
1185
1232
  interface CollapsibleProps {
@@ -1201,17 +1248,6 @@ interface CollapsibleProps {
1201
1248
  children: ReactNode;
1202
1249
  className?: string;
1203
1250
  }
1204
- /**
1205
- * Collapsible card with a header (leading marker, title, optional subtitle/badge)
1206
- * and a body that shows when `open`. State-aware styling for expanded/completed.
1207
- * Good for step lists, accordions, and disclosure sections.
1208
- *
1209
- * @example
1210
- * <Collapsible leading={1} title="페르소나 분석" subtitle="스타일 파악"
1211
- * open={open === 1} onToggle={() => setOpen(open === 1 ? null : 1)} completed>
1212
- * <p>…</p>
1213
- * </Collapsible>
1214
- */
1215
1251
  declare function Collapsible({ title, subtitle, badge, leading, open, onToggle, completed, optionalTag, accent, children, className, }: CollapsibleProps): react_jsx_runtime.JSX.Element;
1216
1252
 
1217
1253
  /**
@@ -1494,6 +1530,18 @@ interface UsePWAInstallReturn {
1494
1530
  }
1495
1531
  declare function usePWAInstall(): UsePWAInstallReturn;
1496
1532
 
1533
+ interface IOSInstallSheetProps {
1534
+ open: boolean;
1535
+ onClose(): void;
1536
+ appName: string;
1537
+ iconSrc?: string;
1538
+ }
1539
+ /**
1540
+ * Bottom-sheet guide for iOS "Add to Home Screen".
1541
+ * Can also be used standalone if you need custom trigger UI.
1542
+ */
1543
+ declare function IOSInstallSheet({ open, onClose, appName, iconSrc }: IOSInstallSheetProps): react_jsx_runtime.JSX.Element | null;
1544
+
1497
1545
  interface PWAInstallButtonProps {
1498
1546
  /** App name shown in iOS guide sheet */
1499
1547
  appName?: string;
@@ -1517,17 +1565,6 @@ interface PWAInstallButtonProps {
1517
1565
  * <PWAInstallButton appName="My App" iconSrc="/icon.png" />
1518
1566
  */
1519
1567
  declare function PWAInstallButton({ appName, iconSrc, label, installedLabel, className, }: PWAInstallButtonProps): react_jsx_runtime.JSX.Element | null;
1520
- interface IOSInstallSheetProps {
1521
- open: boolean;
1522
- onClose(): void;
1523
- appName: string;
1524
- iconSrc?: string;
1525
- }
1526
- /**
1527
- * Bottom-sheet guide for iOS "Add to Home Screen".
1528
- * Can also be used standalone if you need custom trigger UI.
1529
- */
1530
- declare function IOSInstallSheet({ open, onClose, appName, iconSrc }: IOSInstallSheetProps): react_jsx_runtime.JSX.Element | null;
1531
1568
 
1532
1569
  /**
1533
1570
  * Drop into <head> in your root layout to pre-load kit styles and
@@ -1709,5 +1746,19 @@ interface DateCount {
1709
1746
  * // [{date:"2026-07-01",count:0}, …, {date:"2026-07-06",count:3}, {date:"2026-07-07",count:0}]
1710
1747
  */
1711
1748
  declare function fillDateSeries(daily: DateCount[], days: number, timeZone?: string): DateCount[];
1749
+ /**
1750
+ * 한국식 수 축약 (내림). 조회수·좋아요 표기용 — 단위는 호출부에서
1751
+ * `${formatKoreanNumber(n)}회`처럼 붙인다.
1752
+ */
1753
+ declare function formatKoreanNumber(n: number | string): string;
1754
+ interface IsoDuration {
1755
+ hours: number;
1756
+ minutes: number;
1757
+ seconds: number;
1758
+ }
1759
+ /** "PT1H2M3S" → { hours: 1, minutes: 2, seconds: 3 } */
1760
+ declare function parseIsoDuration(duration: string): IsoDuration;
1761
+ /** "PT1H2M3S" → 3723 (초) */
1762
+ declare function isoDurationToSec(duration: string): number;
1712
1763
 
1713
- export { ActionCard, type ActionCardLabels, type ActionCardProps, type ActionCardState, type ApiClient, type ApiClientOptions, ApiError, AppShell, AppShellContent, type AppShellContentProps, AppShellHeader, type AppShellHeaderProps, type AppShellProps, AsyncList, type AsyncListProps, type AsyncListStatus, Avatar, type AvatarProps, Badge, type BadgeProps, BarList, type BarListItem, type BarListProps, Button, type ButtonProps, Carousel, type CarouselProps, ChatBubble, type ChatBubbleProps, type ChatMessage, type ChatRole, CodeBlock, type CodeBlockProps, Collapsible, type CollapsibleProps, type ColorName, ColorPicker, type ColorPickerProps, CopyButton, type CopyButtonProps, Countdown, type CountdownLabels, type CountdownProps, type DateCount, type DayGroup, Dialog, type DialogProps, Divider, type DividerProps, EmojiButton, type EmojiButtonProps, EmojiPicker, type EmojiPickerLabels, type EmojiPickerProps, EmptyState, type EmptyStateProps, Fab, type FabProps, FetchProgress, type FetchProgressProps, Field, type FieldProps, FontLinks, type FontName, GrassMap, type GrassMapData, type GrassMapLabels, type GrassMapProps, IOSInstallSheet, IconButton, type IconButtonProps, Img, type ImgProps, InAppSheet, type InAppSheetProps, InlineEdit, type InlineEditProps, Input, type InputProps, KitStyles, LinkifiedText, type LinkifiedTextProps, ListRow, type ListRowProps, MessageList, type MessageListProps, PWAInstallButton, type PWAInstallState, PoweredByKit, type PoweredByKitProps, ProgressRing, type ProgressRingProps, Section, SectionHeader, type SectionHeaderProps, type SectionProps, type SegmentOption, SegmentedControl, type SegmentedControlProps, Select, type SelectOption, type SelectProps, ShareButton, type ShareButtonProps, Skeleton, type SkeletonProps, StatChip, type StatChipProps, type Step, Stepper, type StepperProps, Switch, type SwitchProps, THEME_SCRIPT, Tab, TabBar, type TabBarProps, type TabProps, type TabRootProps, Textarea, type TextareaProps, ThemeButton, type ThemeButtonProps, ThemeDialog, type ThemeDialogLabels, type ThemeDialogProps, type ToastOptions, ToastProvider, type ToastVariant, Tooltip, type TooltipProps, Typewriter, type TypewriterProps, TypingIndicator, type TypingIndicatorProps, type UseFetchOptions, type UseFetchResult, type UseFormSubmitOptions, type UseFormSubmitResult, type UseInViewOptions, type UseInViewResult, type UsePWAInstallReturn, type UsePollingOptions, type UsePollingResult, type UseShareOptions, type UseShareReturn, Watermark, type WatermarkProps, type WatermarkSponsor, clearFetchCache, cn, colors, createApiClient, createManifest, fillDateSeries, fontFamily, fonts, formatDayLabel, formatDuration, formatNumber, formatPrice, getFetchActiveCount, groupByDay, invalidateFetch, mobileViewport, postJson, relativeTime, subscribeFetchActivity, svgIcon, useCopy, useDebounce, useEscapeKey, useFetch, useFocusTrap, useFormSubmit, useImageLoader, useInView, useLocalStorage, usePWAInstall, usePolling, usePortalTarget, useScrollLock, useShare, useToast };
1764
+ export { ActionCard, type ActionCardLabels, type ActionCardProps, type ActionCardState, type ApiClient, type ApiClientOptions, ApiError, AppShell, AppShellContent, type AppShellContentProps, AppShellHeader, type AppShellHeaderProps, type AppShellProps, AsyncList, type AsyncListProps, type AsyncListStatus, Avatar, type AvatarProps, Badge, type BadgeProps, BarList, type BarListItem, type BarListProps, Button, type ButtonProps, Carousel, type CarouselProps, ChatBubble, type ChatBubbleProps, type ChatMessage, type ChatRole, CodeBlock, type CodeBlockProps, Collapsible, type CollapsibleProps, type ColorName, ColorPicker, type ColorPickerProps, CopyButton, type CopyButtonProps, Countdown, type CountdownLabels, type CountdownProps, type DateCount, type DayGroup, Dialog, type DialogProps, Divider, type DividerProps, EmojiButton, type EmojiButtonProps, EmojiPicker, type EmojiPickerLabels, type EmojiPickerProps, EmptyState, type EmptyStateProps, Fab, type FabProps, FetchProgress, type FetchProgressProps, Field, type FieldProps, FontLinks, type FontName, GrassMap, type GrassMapData, type GrassMapLabels, type GrassMapProps, IOSInstallSheet, IconButton, type IconButtonProps, Img, type ImgProps, InAppSheet, type InAppSheetProps, InlineEdit, type InlineEditProps, Input, type InputProps, type IsoDuration, KitStyles, LinkifiedText, type LinkifiedTextProps, ListRow, type ListRowProps, MediaCard, type MediaCardProps, MessageList, type MessageListProps, PWAInstallButton, type PWAInstallState, PoweredByKit, type PoweredByKitProps, ProgressRing, type ProgressRingProps, Section, SectionHeader, type SectionHeaderProps, type SectionProps, type SegmentOption, SegmentedControl, type SegmentedControlProps, Select, type SelectOption, type SelectProps, ShareButton, type ShareButtonProps, Skeleton, type SkeletonProps, StatChip, type StatChipProps, type Step, Stepper, type StepperProps, Switch, type SwitchProps, THEME_SCRIPT, Tab, TabBar, type TabBarProps, type TabProps, type TabRootProps, Textarea, type TextareaProps, ThemeButton, type ThemeButtonProps, ThemeDialog, type ThemeDialogLabels, type ThemeDialogProps, type ToastOptions, ToastProvider, type ToastVariant, Tooltip, type TooltipProps, Typewriter, type TypewriterProps, TypingIndicator, type TypingIndicatorProps, type UnderlineTab, UnderlineTabs, type UnderlineTabsProps, type UseFetchOptions, type UseFetchResult, type UseFormSubmitOptions, type UseFormSubmitResult, type UseInViewOptions, type UseInViewResult, type UsePWAInstallReturn, type UsePollingOptions, type UsePollingResult, type UseShareOptions, type UseShareReturn, Watermark, type WatermarkProps, type WatermarkSponsor, clearFetchCache, cn, colors, createApiClient, createManifest, fillDateSeries, fontFamily, fonts, formatDayLabel, formatDuration, formatKoreanNumber, formatNumber, formatPrice, getFetchActiveCount, groupByDay, invalidateFetch, isoDurationToSec, mobileViewport, parseIsoDuration, postJson, relativeTime, subscribeFetchActivity, svgIcon, useCopy, useDebounce, useEscapeKey, useFetch, useFocusTrap, useFormSubmit, useImageLoader, useInView, useLocalStorage, usePWAInstall, usePolling, usePortalTarget, useScrollLock, useShare, useToast };
package/dist/index.d.ts CHANGED
@@ -65,6 +65,19 @@ interface AppShellProps {
65
65
  /**
66
66
  * Mobile app-like container with rounded corners, shadow, and ring.
67
67
  * Centers content and constrains width for a phone-like viewport.
68
+ *
69
+ * `AppShell` fills `h-full` of its parent — it does not size itself. Wrap it
70
+ * in `<Watermark>` (gives `h-dvh` + centering + the `PoweredByKit` credit
71
+ * strip) rather than a hand-rolled height/centering div; without a sized
72
+ * parent the shell just collapses to content height.
73
+ *
74
+ * @example
75
+ * <Watermark color="#e2603f" text="myapp">
76
+ * <AppShell>
77
+ * <AppShellHeader>...</AppShellHeader>
78
+ * <AppShellContent><Section>...</Section></AppShellContent>
79
+ * </AppShell>
80
+ * </Watermark>
68
81
  */
69
82
  declare function AppShell({ children, className, maxWidth, maxHeight, accent, accentFg, style, }: AppShellProps): react_jsx_runtime.JSX.Element;
70
83
  interface AppShellHeaderProps {
@@ -80,7 +93,9 @@ interface AppShellContentProps {
80
93
  className?: string;
81
94
  }
82
95
  /**
83
- * Scrollable main content area.
96
+ * Scrollable main content area. Carries no padding of its own — build
97
+ * children from `<Section>` (px-4) blocks separated by `<Divider spacing="sm" />`,
98
+ * not a hand-rolled `<div className="p-4 flex flex-col gap-4">`.
84
99
  */
85
100
  declare function AppShellContent({ children, className }: AppShellContentProps): react_jsx_runtime.JSX.Element;
86
101
 
@@ -304,6 +319,55 @@ interface TextareaProps extends InputBaseProps {
304
319
  }
305
320
  declare function Textarea({ value, onChange, placeholder, rows, disabled, onFocus, onBlur, className, }: TextareaProps): react_jsx_runtime.JSX.Element;
306
321
 
322
+ interface MediaCardProps {
323
+ /** 16:9 썸네일 이미지 URL */
324
+ thumbnail: string;
325
+ /** 썸네일 우하단 배지 (재생시간 등) */
326
+ badge?: string;
327
+ /** horizontal: 썸네일 좌측 절반 / vertical: 썸네일 상단 풀폭 */
328
+ layout?: "horizontal" | "vertical";
329
+ onClick?: () => void;
330
+ /** 제목·메타 등 본문 — 폰트/색은 호출부 소유 */
331
+ children: ReactNode;
332
+ className?: string;
333
+ }
334
+ /**
335
+ * 썸네일 + 본문 미디어 카드 (영상·플레이리스트 목록용).
336
+ *
337
+ * @example
338
+ * <MediaCard thumbnail={v.thumbnail} badge={v.duration} onClick={open}>
339
+ * <p className="text-base line-clamp-2">{v.title}</p>
340
+ * <p className="text-xs text-zinc-400">조회수 {formatKoreanNumber(v.viewCount)}회</p>
341
+ * </MediaCard>
342
+ */
343
+ declare function MediaCard({ thumbnail, badge, layout, onClick, children, className, }: MediaCardProps): react_jsx_runtime.JSX.Element;
344
+
345
+ interface UnderlineTab<T extends string = string> {
346
+ id: T;
347
+ label: string;
348
+ }
349
+ interface UnderlineTabsProps<T extends string = string> {
350
+ tabs: UnderlineTab<T>[];
351
+ active: T;
352
+ onChange: (id: T) => void;
353
+ /** 스크롤 상단 고정 */
354
+ sticky?: boolean;
355
+ /** 좁은 탭 간격 (요일 등 짧은 라벨 다수일 때) */
356
+ compact?: boolean;
357
+ /** 활성 탭 색. Default: currentColor 기반 (dark 셸에선 white) */
358
+ activeColor?: string;
359
+ className?: string;
360
+ }
361
+ /**
362
+ * 하단 언더라인 인디케이터 탭 (콘텐츠 필터용) — 하단 내비 TabBar와 별개.
363
+ * SegmentedControl(박스형)과 달리 미디어 앱의 카테고리 탭 UX.
364
+ *
365
+ * @example
366
+ * <UnderlineTabs tabs={[{ id: "all", label: "전체" }, { id: "music", label: "음악" }]}
367
+ * active={tab} onChange={setTab} sticky />
368
+ */
369
+ declare function UnderlineTabs<T extends string>({ tabs, active, onChange, sticky, compact, activeColor, className, }: UnderlineTabsProps<T>): react_jsx_runtime.JSX.Element;
370
+
307
371
  interface SectionProps {
308
372
  children: ReactNode;
309
373
  className?: string;
@@ -419,12 +483,7 @@ interface WatermarkProps {
419
483
  total?: number;
420
484
  };
421
485
  }
422
- /**
423
- * Full-screen colored background with repeating animated text watermark pattern.
424
- *
425
- * Renders as a single SVG element with a <pattern> — zero extra DOM nodes per tile.
426
- * Sponsor tiles inside the pattern are clickable and support hover effects.
427
- */
486
+ /** Estimate rendered width of a string. CJK chars ≈ 1.0×, Latin ≈ 0.62× font size. */
428
487
  declare function Watermark({ children, color, text, maxWidth, sponsor, speed, hidePoweredBy, trackSlug, track, claimed, counts, }: WatermarkProps): react_jsx_runtime.JSX.Element;
429
488
 
430
489
  declare const colors: {
@@ -1168,18 +1227,6 @@ interface StepperProps {
1168
1227
  accent?: string;
1169
1228
  className?: string;
1170
1229
  }
1171
- /**
1172
- * Horizontal multi-step progress indicator with connectors. Steps before the
1173
- * cursor show a check, the current step is highlighted, the rest are muted.
1174
- * Great for wizards, multi-phase flows, and onboarding.
1175
- *
1176
- * @example
1177
- * <Stepper current={phase} onStepClick={setPhase} steps={[
1178
- * { label: "분석", icon: "📝" },
1179
- * { label: "준비", icon: "📸" },
1180
- * { label: "생성", icon: "✨" },
1181
- * ]} />
1182
- */
1183
1230
  declare function Stepper({ steps, current, completedThrough, onStepClick, accent, className, }: StepperProps): react_jsx_runtime.JSX.Element;
1184
1231
 
1185
1232
  interface CollapsibleProps {
@@ -1201,17 +1248,6 @@ interface CollapsibleProps {
1201
1248
  children: ReactNode;
1202
1249
  className?: string;
1203
1250
  }
1204
- /**
1205
- * Collapsible card with a header (leading marker, title, optional subtitle/badge)
1206
- * and a body that shows when `open`. State-aware styling for expanded/completed.
1207
- * Good for step lists, accordions, and disclosure sections.
1208
- *
1209
- * @example
1210
- * <Collapsible leading={1} title="페르소나 분석" subtitle="스타일 파악"
1211
- * open={open === 1} onToggle={() => setOpen(open === 1 ? null : 1)} completed>
1212
- * <p>…</p>
1213
- * </Collapsible>
1214
- */
1215
1251
  declare function Collapsible({ title, subtitle, badge, leading, open, onToggle, completed, optionalTag, accent, children, className, }: CollapsibleProps): react_jsx_runtime.JSX.Element;
1216
1252
 
1217
1253
  /**
@@ -1494,6 +1530,18 @@ interface UsePWAInstallReturn {
1494
1530
  }
1495
1531
  declare function usePWAInstall(): UsePWAInstallReturn;
1496
1532
 
1533
+ interface IOSInstallSheetProps {
1534
+ open: boolean;
1535
+ onClose(): void;
1536
+ appName: string;
1537
+ iconSrc?: string;
1538
+ }
1539
+ /**
1540
+ * Bottom-sheet guide for iOS "Add to Home Screen".
1541
+ * Can also be used standalone if you need custom trigger UI.
1542
+ */
1543
+ declare function IOSInstallSheet({ open, onClose, appName, iconSrc }: IOSInstallSheetProps): react_jsx_runtime.JSX.Element | null;
1544
+
1497
1545
  interface PWAInstallButtonProps {
1498
1546
  /** App name shown in iOS guide sheet */
1499
1547
  appName?: string;
@@ -1517,17 +1565,6 @@ interface PWAInstallButtonProps {
1517
1565
  * <PWAInstallButton appName="My App" iconSrc="/icon.png" />
1518
1566
  */
1519
1567
  declare function PWAInstallButton({ appName, iconSrc, label, installedLabel, className, }: PWAInstallButtonProps): react_jsx_runtime.JSX.Element | null;
1520
- interface IOSInstallSheetProps {
1521
- open: boolean;
1522
- onClose(): void;
1523
- appName: string;
1524
- iconSrc?: string;
1525
- }
1526
- /**
1527
- * Bottom-sheet guide for iOS "Add to Home Screen".
1528
- * Can also be used standalone if you need custom trigger UI.
1529
- */
1530
- declare function IOSInstallSheet({ open, onClose, appName, iconSrc }: IOSInstallSheetProps): react_jsx_runtime.JSX.Element | null;
1531
1568
 
1532
1569
  /**
1533
1570
  * Drop into <head> in your root layout to pre-load kit styles and
@@ -1709,5 +1746,19 @@ interface DateCount {
1709
1746
  * // [{date:"2026-07-01",count:0}, …, {date:"2026-07-06",count:3}, {date:"2026-07-07",count:0}]
1710
1747
  */
1711
1748
  declare function fillDateSeries(daily: DateCount[], days: number, timeZone?: string): DateCount[];
1749
+ /**
1750
+ * 한국식 수 축약 (내림). 조회수·좋아요 표기용 — 단위는 호출부에서
1751
+ * `${formatKoreanNumber(n)}회`처럼 붙인다.
1752
+ */
1753
+ declare function formatKoreanNumber(n: number | string): string;
1754
+ interface IsoDuration {
1755
+ hours: number;
1756
+ minutes: number;
1757
+ seconds: number;
1758
+ }
1759
+ /** "PT1H2M3S" → { hours: 1, minutes: 2, seconds: 3 } */
1760
+ declare function parseIsoDuration(duration: string): IsoDuration;
1761
+ /** "PT1H2M3S" → 3723 (초) */
1762
+ declare function isoDurationToSec(duration: string): number;
1712
1763
 
1713
- export { ActionCard, type ActionCardLabels, type ActionCardProps, type ActionCardState, type ApiClient, type ApiClientOptions, ApiError, AppShell, AppShellContent, type AppShellContentProps, AppShellHeader, type AppShellHeaderProps, type AppShellProps, AsyncList, type AsyncListProps, type AsyncListStatus, Avatar, type AvatarProps, Badge, type BadgeProps, BarList, type BarListItem, type BarListProps, Button, type ButtonProps, Carousel, type CarouselProps, ChatBubble, type ChatBubbleProps, type ChatMessage, type ChatRole, CodeBlock, type CodeBlockProps, Collapsible, type CollapsibleProps, type ColorName, ColorPicker, type ColorPickerProps, CopyButton, type CopyButtonProps, Countdown, type CountdownLabels, type CountdownProps, type DateCount, type DayGroup, Dialog, type DialogProps, Divider, type DividerProps, EmojiButton, type EmojiButtonProps, EmojiPicker, type EmojiPickerLabels, type EmojiPickerProps, EmptyState, type EmptyStateProps, Fab, type FabProps, FetchProgress, type FetchProgressProps, Field, type FieldProps, FontLinks, type FontName, GrassMap, type GrassMapData, type GrassMapLabels, type GrassMapProps, IOSInstallSheet, IconButton, type IconButtonProps, Img, type ImgProps, InAppSheet, type InAppSheetProps, InlineEdit, type InlineEditProps, Input, type InputProps, KitStyles, LinkifiedText, type LinkifiedTextProps, ListRow, type ListRowProps, MessageList, type MessageListProps, PWAInstallButton, type PWAInstallState, PoweredByKit, type PoweredByKitProps, ProgressRing, type ProgressRingProps, Section, SectionHeader, type SectionHeaderProps, type SectionProps, type SegmentOption, SegmentedControl, type SegmentedControlProps, Select, type SelectOption, type SelectProps, ShareButton, type ShareButtonProps, Skeleton, type SkeletonProps, StatChip, type StatChipProps, type Step, Stepper, type StepperProps, Switch, type SwitchProps, THEME_SCRIPT, Tab, TabBar, type TabBarProps, type TabProps, type TabRootProps, Textarea, type TextareaProps, ThemeButton, type ThemeButtonProps, ThemeDialog, type ThemeDialogLabels, type ThemeDialogProps, type ToastOptions, ToastProvider, type ToastVariant, Tooltip, type TooltipProps, Typewriter, type TypewriterProps, TypingIndicator, type TypingIndicatorProps, type UseFetchOptions, type UseFetchResult, type UseFormSubmitOptions, type UseFormSubmitResult, type UseInViewOptions, type UseInViewResult, type UsePWAInstallReturn, type UsePollingOptions, type UsePollingResult, type UseShareOptions, type UseShareReturn, Watermark, type WatermarkProps, type WatermarkSponsor, clearFetchCache, cn, colors, createApiClient, createManifest, fillDateSeries, fontFamily, fonts, formatDayLabel, formatDuration, formatNumber, formatPrice, getFetchActiveCount, groupByDay, invalidateFetch, mobileViewport, postJson, relativeTime, subscribeFetchActivity, svgIcon, useCopy, useDebounce, useEscapeKey, useFetch, useFocusTrap, useFormSubmit, useImageLoader, useInView, useLocalStorage, usePWAInstall, usePolling, usePortalTarget, useScrollLock, useShare, useToast };
1764
+ export { ActionCard, type ActionCardLabels, type ActionCardProps, type ActionCardState, type ApiClient, type ApiClientOptions, ApiError, AppShell, AppShellContent, type AppShellContentProps, AppShellHeader, type AppShellHeaderProps, type AppShellProps, AsyncList, type AsyncListProps, type AsyncListStatus, Avatar, type AvatarProps, Badge, type BadgeProps, BarList, type BarListItem, type BarListProps, Button, type ButtonProps, Carousel, type CarouselProps, ChatBubble, type ChatBubbleProps, type ChatMessage, type ChatRole, CodeBlock, type CodeBlockProps, Collapsible, type CollapsibleProps, type ColorName, ColorPicker, type ColorPickerProps, CopyButton, type CopyButtonProps, Countdown, type CountdownLabels, type CountdownProps, type DateCount, type DayGroup, Dialog, type DialogProps, Divider, type DividerProps, EmojiButton, type EmojiButtonProps, EmojiPicker, type EmojiPickerLabels, type EmojiPickerProps, EmptyState, type EmptyStateProps, Fab, type FabProps, FetchProgress, type FetchProgressProps, Field, type FieldProps, FontLinks, type FontName, GrassMap, type GrassMapData, type GrassMapLabels, type GrassMapProps, IOSInstallSheet, IconButton, type IconButtonProps, Img, type ImgProps, InAppSheet, type InAppSheetProps, InlineEdit, type InlineEditProps, Input, type InputProps, type IsoDuration, KitStyles, LinkifiedText, type LinkifiedTextProps, ListRow, type ListRowProps, MediaCard, type MediaCardProps, MessageList, type MessageListProps, PWAInstallButton, type PWAInstallState, PoweredByKit, type PoweredByKitProps, ProgressRing, type ProgressRingProps, Section, SectionHeader, type SectionHeaderProps, type SectionProps, type SegmentOption, SegmentedControl, type SegmentedControlProps, Select, type SelectOption, type SelectProps, ShareButton, type ShareButtonProps, Skeleton, type SkeletonProps, StatChip, type StatChipProps, type Step, Stepper, type StepperProps, Switch, type SwitchProps, THEME_SCRIPT, Tab, TabBar, type TabBarProps, type TabProps, type TabRootProps, Textarea, type TextareaProps, ThemeButton, type ThemeButtonProps, ThemeDialog, type ThemeDialogLabels, type ThemeDialogProps, type ToastOptions, ToastProvider, type ToastVariant, Tooltip, type TooltipProps, Typewriter, type TypewriterProps, TypingIndicator, type TypingIndicatorProps, type UnderlineTab, UnderlineTabs, type UnderlineTabsProps, type UseFetchOptions, type UseFetchResult, type UseFormSubmitOptions, type UseFormSubmitResult, type UseInViewOptions, type UseInViewResult, type UsePWAInstallReturn, type UsePollingOptions, type UsePollingResult, type UseShareOptions, type UseShareReturn, Watermark, type WatermarkProps, type WatermarkSponsor, clearFetchCache, cn, colors, createApiClient, createManifest, fillDateSeries, fontFamily, fonts, formatDayLabel, formatDuration, formatKoreanNumber, formatNumber, formatPrice, getFetchActiveCount, groupByDay, invalidateFetch, isoDurationToSec, mobileViewport, parseIsoDuration, postJson, relativeTime, subscribeFetchActivity, svgIcon, useCopy, useDebounce, useEscapeKey, useFetch, useFocusTrap, useFormSubmit, useImageLoader, useInView, useLocalStorage, usePWAInstall, usePolling, usePortalTarget, useScrollLock, useShare, useToast };