@m1kapp/kit 0.0.17 → 0.0.20
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/bin/m1kkit.mjs +0 -0
- package/dist/index.d.mts +91 -35
- package/dist/index.d.ts +91 -35
- package/dist/index.js +4 -4
- package/dist/index.mjs +4 -4
- package/dist/pwa.js +2 -2
- package/dist/pwa.mjs +2 -2
- package/dist/styles.css +1 -1
- package/package.json +5 -2
package/bin/m1kkit.mjs
CHANGED
|
File without changes
|
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as React$1 from 'react';
|
|
3
|
-
import React__default, { ReactNode, CSSProperties } from 'react';
|
|
3
|
+
import React__default, { ReactNode, CSSProperties, RefObject } from 'react';
|
|
4
4
|
import { MetadataRoute, Viewport } from 'next';
|
|
5
5
|
import { ClassValue } from 'clsx';
|
|
6
6
|
|
|
@@ -69,6 +69,24 @@ interface AppShellContentProps {
|
|
|
69
69
|
*/
|
|
70
70
|
declare function AppShellContent({ children, className }: AppShellContentProps): react_jsx_runtime.JSX.Element;
|
|
71
71
|
|
|
72
|
+
interface FabProps {
|
|
73
|
+
onClick: () => void;
|
|
74
|
+
icon: ReactNode;
|
|
75
|
+
/** Accent background color. Default: zinc-900/white (follows dark mode) */
|
|
76
|
+
color?: string;
|
|
77
|
+
className?: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Floating Action Button — positioned absolute bottom-right inside AppShell.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* <AppShellContent>
|
|
84
|
+
* {content}
|
|
85
|
+
* <Fab onClick={handleAdd} icon={<PlusIcon />} color="#6366f1" />
|
|
86
|
+
* </AppShellContent>
|
|
87
|
+
*/
|
|
88
|
+
declare function Fab({ onClick, icon, color, className }: FabProps): react_jsx_runtime.JSX.Element;
|
|
89
|
+
|
|
72
90
|
interface TabBarProps {
|
|
73
91
|
children: ReactNode;
|
|
74
92
|
className?: string;
|
|
@@ -239,39 +257,55 @@ interface ThemeDialogProps {
|
|
|
239
257
|
declare function ThemeDialog({ open, onClose, current, onSelect, dark: darkProp, onDarkToggle, palette, labels: _labels, }: ThemeDialogProps): react_jsx_runtime.JSX.Element;
|
|
240
258
|
|
|
241
259
|
/**
|
|
242
|
-
* Font presets for @m1kapp/
|
|
260
|
+
* Font presets for @m1kapp/kit.
|
|
243
261
|
* CDN links only — no font files bundled.
|
|
244
262
|
*
|
|
245
|
-
* ##
|
|
263
|
+
* ## Setup
|
|
264
|
+
*
|
|
265
|
+
* ### Option A: `FontLinks` 컴포넌트 (Next.js App Router 권장)
|
|
266
|
+
*
|
|
267
|
+
* ```tsx
|
|
268
|
+
* // app/layout.tsx
|
|
269
|
+
* import { FontLinks, fontFamily, THEME_SCRIPT } from "@m1kapp/kit";
|
|
270
|
+
*
|
|
271
|
+
* export default function RootLayout({ children }) {
|
|
272
|
+
* return (
|
|
273
|
+
* <html lang="ko">
|
|
274
|
+
* <head>
|
|
275
|
+
* <FontLinks />
|
|
276
|
+
* <script dangerouslySetInnerHTML={{ __html: THEME_SCRIPT }} />
|
|
277
|
+
* </head>
|
|
278
|
+
* <body style={{ fontFamily: fontFamily.default }}>
|
|
279
|
+
* {children}
|
|
280
|
+
* </body>
|
|
281
|
+
* </html>
|
|
282
|
+
* );
|
|
283
|
+
* }
|
|
284
|
+
* ```
|
|
285
|
+
*
|
|
286
|
+
* ### Option B: 수동 `<link>` (Vite / static HTML)
|
|
287
|
+
*
|
|
288
|
+
* ⚠️ Next.js App Router에서 `<link href={fonts.tossface}>` 처럼
|
|
289
|
+
* 변수를 사용하면 SSR 시 href가 누락됩니다. URL을 직접 하드코딩하세요.
|
|
246
290
|
*
|
|
247
|
-
* Add to your `index.html` <head>:
|
|
248
291
|
* ```html
|
|
249
|
-
* <link rel="preconnect" href="https://cdn.jsdelivr.net" />
|
|
250
|
-
* <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
|
251
292
|
* <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/toss/tossface/dist/tossface.css" />
|
|
252
293
|
* <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable-dynamic-subset.min.css" />
|
|
253
294
|
* ```
|
|
254
295
|
*
|
|
255
|
-
*
|
|
296
|
+
* ### Font stack
|
|
297
|
+
*
|
|
298
|
+
* Tossface를 `system-ui` 앞에 배치해야 macOS에서
|
|
299
|
+
* Apple Color Emoji 대신 Tossface가 적용됩니다.
|
|
300
|
+
*
|
|
256
301
|
* ```css
|
|
257
|
-
* html {
|
|
258
|
-
* font-family: "Tossface", "Pretendard Variable", "Pretendard", system-ui, sans-serif;
|
|
259
|
-
* }
|
|
302
|
+
* html { font-family: "Tossface", "Pretendard Variable", "Pretendard", sans-serif; }
|
|
260
303
|
* ```
|
|
261
|
-
*
|
|
262
|
-
* That's it — Tossface handles emojis, Pretendard handles text.
|
|
263
304
|
*/
|
|
264
305
|
declare const fonts: {
|
|
265
|
-
/**
|
|
266
|
-
* Tossface — Toss emoji font (open source, jsDelivr CDN).
|
|
267
|
-
* Renders all emoji with the Toss design style.
|
|
268
|
-
* Add this to get consistent emoji across platforms.
|
|
269
|
-
*/
|
|
306
|
+
/** Tossface — Toss emoji font (open source, jsDelivr CDN). */
|
|
270
307
|
readonly tossface: "https://cdn.jsdelivr.net/gh/toss/tossface/dist/tossface.css";
|
|
271
|
-
/**
|
|
272
|
-
* Pretendard — best Korean variable web font (jsDelivr CDN).
|
|
273
|
-
* Recommended for all Korean UI text.
|
|
274
|
-
*/
|
|
308
|
+
/** Pretendard — Korean variable web font (jsDelivr CDN). */
|
|
275
309
|
readonly pretendard: "https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable-dynamic-subset.min.css";
|
|
276
310
|
/** Inter — clean Latin sans-serif (Google Fonts) */
|
|
277
311
|
readonly inter: "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;900&display=swap";
|
|
@@ -280,24 +314,31 @@ type FontName = keyof typeof fonts;
|
|
|
280
314
|
/**
|
|
281
315
|
* Recommended font-family stacks.
|
|
282
316
|
*
|
|
283
|
-
*
|
|
284
|
-
*
|
|
285
|
-
*
|
|
286
|
-
*
|
|
287
|
-
* // Or in JS (e.g. main.tsx):
|
|
288
|
-
* document.documentElement.style.fontFamily = fontFamily.default;
|
|
317
|
+
* Tossface를 맨 앞에 배치합니다.
|
|
318
|
+
* unicode-range 덕분에 이모지만 Tossface로, 나머지는 Pretendard로 렌더됩니다.
|
|
319
|
+
* system-ui를 포함하면 macOS Apple Color Emoji가 먼저 적용될 수 있어 제외합니다.
|
|
289
320
|
*/
|
|
290
321
|
declare const fontFamily: {
|
|
291
|
-
/**
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
*/
|
|
295
|
-
readonly default: "\"Pretendard Variable\", \"Pretendard\", system-ui, -apple-system, sans-serif, \"Tossface\"";
|
|
296
|
-
/** Pretendard only */
|
|
322
|
+
/** Tossface(emoji) + Pretendard(text). */
|
|
323
|
+
readonly default: "\"Tossface\", \"Pretendard Variable\", \"Pretendard\", sans-serif";
|
|
324
|
+
/** Pretendard only (no Tossface emoji) */
|
|
297
325
|
readonly pretendard: "\"Pretendard Variable\", \"Pretendard\", system-ui, sans-serif";
|
|
298
326
|
/** Inter only */
|
|
299
327
|
readonly inter: "\"Inter\", system-ui, sans-serif";
|
|
300
328
|
};
|
|
329
|
+
/**
|
|
330
|
+
* `<link>` 태그를 렌더하는 컴포넌트.
|
|
331
|
+
*
|
|
332
|
+
* Next.js App Router에서 `<link href={변수}>`를 쓰면
|
|
333
|
+
* SSR 시 href가 누락되는 버그가 있어, URL을 리터럴로 하드코딩합니다.
|
|
334
|
+
*
|
|
335
|
+
* ```tsx
|
|
336
|
+
* <head>
|
|
337
|
+
* <FontLinks />
|
|
338
|
+
* </head>
|
|
339
|
+
* ```
|
|
340
|
+
*/
|
|
341
|
+
declare function FontLinks(): react_jsx_runtime.JSX.Element;
|
|
301
342
|
|
|
302
343
|
interface TypewriterProps {
|
|
303
344
|
/** Words to cycle through */
|
|
@@ -536,6 +577,17 @@ declare function useInView(options?: UseInViewOptions): UseInViewResult;
|
|
|
536
577
|
*/
|
|
537
578
|
declare function useFocusTrap<T extends HTMLElement = HTMLElement>(active: boolean): React$1.RefObject<T | null>;
|
|
538
579
|
|
|
580
|
+
/**
|
|
581
|
+
* Calls `onEscape` when the Escape key is pressed while `active` is true.
|
|
582
|
+
*/
|
|
583
|
+
declare function useEscapeKey(active: boolean, onEscape: () => void): void;
|
|
584
|
+
|
|
585
|
+
/**
|
|
586
|
+
* Locks scroll on the nearest `.tab-scroll` ancestor (or falls back to querySelector)
|
|
587
|
+
* while `active` is true. Restores previous overflow on cleanup.
|
|
588
|
+
*/
|
|
589
|
+
declare function useScrollLock(active: boolean, anchorRef?: RefObject<HTMLElement | null>): void;
|
|
590
|
+
|
|
539
591
|
interface SkeletonProps {
|
|
540
592
|
/** Tailwind classes for width / height (e.g. "h-4 w-3/4") */
|
|
541
593
|
className?: string;
|
|
@@ -579,8 +631,12 @@ interface InAppSheetProps {
|
|
|
579
631
|
className?: string;
|
|
580
632
|
/** true면 시트가 AppShell 전체 높이를 채움 */
|
|
581
633
|
fullHeight?: boolean;
|
|
634
|
+
/** 우상단 X 버튼 숨기기. Default: false (보임) */
|
|
635
|
+
hideClose?: boolean;
|
|
636
|
+
/** 닫기 버튼 aria-label. Default: "닫기" */
|
|
637
|
+
closeLabel?: string;
|
|
582
638
|
}
|
|
583
|
-
declare function InAppSheet({ open, onClose, children, className, fullHeight, }: InAppSheetProps): react_jsx_runtime.JSX.Element;
|
|
639
|
+
declare function InAppSheet({ open, onClose, children, className, fullHeight, hideClose, closeLabel, }: InAppSheetProps): react_jsx_runtime.JSX.Element;
|
|
584
640
|
|
|
585
641
|
type PWAInstallState = "android-ready" | "ios-safari" | "installed" | "unsupported";
|
|
586
642
|
interface UsePWAInstallReturn {
|
|
@@ -795,4 +851,4 @@ declare function formatPrice(amount: number, currency?: string, locale?: string)
|
|
|
795
851
|
|
|
796
852
|
declare function cn(...inputs: ClassValue[]): string;
|
|
797
853
|
|
|
798
|
-
export { type ApiClient, type ApiClientOptions, ApiError, AppShell, AppShellContent, type AppShellContentProps, AppShellHeader, type AppShellHeaderProps, type AppShellProps, Avatar, type AvatarProps, Badge, type BadgeProps, Button, type ButtonProps, type ColorName, Dialog, type DialogProps, Divider, EmojiButton, type EmojiButtonProps, EmojiPicker, type EmojiPickerLabels, type EmojiPickerProps, EmptyState, type EmptyStateProps, type FontName, GrassMap, type GrassMapData, type GrassMapLabels, type GrassMapProps, IOSInstallSheet, InAppSheet, type InAppSheetProps, KitStyles, PWAInstallButton, type PWAInstallState, Section, SectionHeader, type SectionHeaderProps, type SectionProps, ShareButton, type ShareButtonProps, Skeleton, type SkeletonProps, StatChip, type StatChipProps, THEME_SCRIPT, Tab, TabBar, type TabBarProps, type TabProps, ThemeButton, type ThemeButtonProps, ThemeDialog, type ThemeDialogLabels, type ThemeDialogProps, type ToastOptions, ToastProvider, type ToastVariant, Tooltip, type TooltipProps, Typewriter, type TypewriterProps, 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, fontFamily, fonts, formatNumber, formatPrice, mobileViewport, relativeTime, svgIcon, useDebounce, useFetch, useFocusTrap, useFormSubmit, useInView, useLocalStorage, usePWAInstall, usePolling, useShare, useToast };
|
|
854
|
+
export { type ApiClient, type ApiClientOptions, ApiError, AppShell, AppShellContent, type AppShellContentProps, AppShellHeader, type AppShellHeaderProps, type AppShellProps, Avatar, type AvatarProps, Badge, type BadgeProps, Button, type ButtonProps, type ColorName, Dialog, type DialogProps, Divider, EmojiButton, type EmojiButtonProps, EmojiPicker, type EmojiPickerLabels, type EmojiPickerProps, EmptyState, type EmptyStateProps, Fab, type FabProps, FontLinks, type FontName, GrassMap, type GrassMapData, type GrassMapLabels, type GrassMapProps, IOSInstallSheet, InAppSheet, type InAppSheetProps, KitStyles, PWAInstallButton, type PWAInstallState, Section, SectionHeader, type SectionHeaderProps, type SectionProps, ShareButton, type ShareButtonProps, Skeleton, type SkeletonProps, StatChip, type StatChipProps, THEME_SCRIPT, Tab, TabBar, type TabBarProps, type TabProps, ThemeButton, type ThemeButtonProps, ThemeDialog, type ThemeDialogLabels, type ThemeDialogProps, type ToastOptions, ToastProvider, type ToastVariant, Tooltip, type TooltipProps, Typewriter, type TypewriterProps, 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, fontFamily, fonts, formatNumber, formatPrice, mobileViewport, relativeTime, svgIcon, useDebounce, useEscapeKey, useFetch, useFocusTrap, useFormSubmit, useInView, useLocalStorage, usePWAInstall, usePolling, useScrollLock, useShare, useToast };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as React$1 from 'react';
|
|
3
|
-
import React__default, { ReactNode, CSSProperties } from 'react';
|
|
3
|
+
import React__default, { ReactNode, CSSProperties, RefObject } from 'react';
|
|
4
4
|
import { MetadataRoute, Viewport } from 'next';
|
|
5
5
|
import { ClassValue } from 'clsx';
|
|
6
6
|
|
|
@@ -69,6 +69,24 @@ interface AppShellContentProps {
|
|
|
69
69
|
*/
|
|
70
70
|
declare function AppShellContent({ children, className }: AppShellContentProps): react_jsx_runtime.JSX.Element;
|
|
71
71
|
|
|
72
|
+
interface FabProps {
|
|
73
|
+
onClick: () => void;
|
|
74
|
+
icon: ReactNode;
|
|
75
|
+
/** Accent background color. Default: zinc-900/white (follows dark mode) */
|
|
76
|
+
color?: string;
|
|
77
|
+
className?: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Floating Action Button — positioned absolute bottom-right inside AppShell.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* <AppShellContent>
|
|
84
|
+
* {content}
|
|
85
|
+
* <Fab onClick={handleAdd} icon={<PlusIcon />} color="#6366f1" />
|
|
86
|
+
* </AppShellContent>
|
|
87
|
+
*/
|
|
88
|
+
declare function Fab({ onClick, icon, color, className }: FabProps): react_jsx_runtime.JSX.Element;
|
|
89
|
+
|
|
72
90
|
interface TabBarProps {
|
|
73
91
|
children: ReactNode;
|
|
74
92
|
className?: string;
|
|
@@ -239,39 +257,55 @@ interface ThemeDialogProps {
|
|
|
239
257
|
declare function ThemeDialog({ open, onClose, current, onSelect, dark: darkProp, onDarkToggle, palette, labels: _labels, }: ThemeDialogProps): react_jsx_runtime.JSX.Element;
|
|
240
258
|
|
|
241
259
|
/**
|
|
242
|
-
* Font presets for @m1kapp/
|
|
260
|
+
* Font presets for @m1kapp/kit.
|
|
243
261
|
* CDN links only — no font files bundled.
|
|
244
262
|
*
|
|
245
|
-
* ##
|
|
263
|
+
* ## Setup
|
|
264
|
+
*
|
|
265
|
+
* ### Option A: `FontLinks` 컴포넌트 (Next.js App Router 권장)
|
|
266
|
+
*
|
|
267
|
+
* ```tsx
|
|
268
|
+
* // app/layout.tsx
|
|
269
|
+
* import { FontLinks, fontFamily, THEME_SCRIPT } from "@m1kapp/kit";
|
|
270
|
+
*
|
|
271
|
+
* export default function RootLayout({ children }) {
|
|
272
|
+
* return (
|
|
273
|
+
* <html lang="ko">
|
|
274
|
+
* <head>
|
|
275
|
+
* <FontLinks />
|
|
276
|
+
* <script dangerouslySetInnerHTML={{ __html: THEME_SCRIPT }} />
|
|
277
|
+
* </head>
|
|
278
|
+
* <body style={{ fontFamily: fontFamily.default }}>
|
|
279
|
+
* {children}
|
|
280
|
+
* </body>
|
|
281
|
+
* </html>
|
|
282
|
+
* );
|
|
283
|
+
* }
|
|
284
|
+
* ```
|
|
285
|
+
*
|
|
286
|
+
* ### Option B: 수동 `<link>` (Vite / static HTML)
|
|
287
|
+
*
|
|
288
|
+
* ⚠️ Next.js App Router에서 `<link href={fonts.tossface}>` 처럼
|
|
289
|
+
* 변수를 사용하면 SSR 시 href가 누락됩니다. URL을 직접 하드코딩하세요.
|
|
246
290
|
*
|
|
247
|
-
* Add to your `index.html` <head>:
|
|
248
291
|
* ```html
|
|
249
|
-
* <link rel="preconnect" href="https://cdn.jsdelivr.net" />
|
|
250
|
-
* <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
|
251
292
|
* <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/toss/tossface/dist/tossface.css" />
|
|
252
293
|
* <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable-dynamic-subset.min.css" />
|
|
253
294
|
* ```
|
|
254
295
|
*
|
|
255
|
-
*
|
|
296
|
+
* ### Font stack
|
|
297
|
+
*
|
|
298
|
+
* Tossface를 `system-ui` 앞에 배치해야 macOS에서
|
|
299
|
+
* Apple Color Emoji 대신 Tossface가 적용됩니다.
|
|
300
|
+
*
|
|
256
301
|
* ```css
|
|
257
|
-
* html {
|
|
258
|
-
* font-family: "Tossface", "Pretendard Variable", "Pretendard", system-ui, sans-serif;
|
|
259
|
-
* }
|
|
302
|
+
* html { font-family: "Tossface", "Pretendard Variable", "Pretendard", sans-serif; }
|
|
260
303
|
* ```
|
|
261
|
-
*
|
|
262
|
-
* That's it — Tossface handles emojis, Pretendard handles text.
|
|
263
304
|
*/
|
|
264
305
|
declare const fonts: {
|
|
265
|
-
/**
|
|
266
|
-
* Tossface — Toss emoji font (open source, jsDelivr CDN).
|
|
267
|
-
* Renders all emoji with the Toss design style.
|
|
268
|
-
* Add this to get consistent emoji across platforms.
|
|
269
|
-
*/
|
|
306
|
+
/** Tossface — Toss emoji font (open source, jsDelivr CDN). */
|
|
270
307
|
readonly tossface: "https://cdn.jsdelivr.net/gh/toss/tossface/dist/tossface.css";
|
|
271
|
-
/**
|
|
272
|
-
* Pretendard — best Korean variable web font (jsDelivr CDN).
|
|
273
|
-
* Recommended for all Korean UI text.
|
|
274
|
-
*/
|
|
308
|
+
/** Pretendard — Korean variable web font (jsDelivr CDN). */
|
|
275
309
|
readonly pretendard: "https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable-dynamic-subset.min.css";
|
|
276
310
|
/** Inter — clean Latin sans-serif (Google Fonts) */
|
|
277
311
|
readonly inter: "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;900&display=swap";
|
|
@@ -280,24 +314,31 @@ type FontName = keyof typeof fonts;
|
|
|
280
314
|
/**
|
|
281
315
|
* Recommended font-family stacks.
|
|
282
316
|
*
|
|
283
|
-
*
|
|
284
|
-
*
|
|
285
|
-
*
|
|
286
|
-
*
|
|
287
|
-
* // Or in JS (e.g. main.tsx):
|
|
288
|
-
* document.documentElement.style.fontFamily = fontFamily.default;
|
|
317
|
+
* Tossface를 맨 앞에 배치합니다.
|
|
318
|
+
* unicode-range 덕분에 이모지만 Tossface로, 나머지는 Pretendard로 렌더됩니다.
|
|
319
|
+
* system-ui를 포함하면 macOS Apple Color Emoji가 먼저 적용될 수 있어 제외합니다.
|
|
289
320
|
*/
|
|
290
321
|
declare const fontFamily: {
|
|
291
|
-
/**
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
*/
|
|
295
|
-
readonly default: "\"Pretendard Variable\", \"Pretendard\", system-ui, -apple-system, sans-serif, \"Tossface\"";
|
|
296
|
-
/** Pretendard only */
|
|
322
|
+
/** Tossface(emoji) + Pretendard(text). */
|
|
323
|
+
readonly default: "\"Tossface\", \"Pretendard Variable\", \"Pretendard\", sans-serif";
|
|
324
|
+
/** Pretendard only (no Tossface emoji) */
|
|
297
325
|
readonly pretendard: "\"Pretendard Variable\", \"Pretendard\", system-ui, sans-serif";
|
|
298
326
|
/** Inter only */
|
|
299
327
|
readonly inter: "\"Inter\", system-ui, sans-serif";
|
|
300
328
|
};
|
|
329
|
+
/**
|
|
330
|
+
* `<link>` 태그를 렌더하는 컴포넌트.
|
|
331
|
+
*
|
|
332
|
+
* Next.js App Router에서 `<link href={변수}>`를 쓰면
|
|
333
|
+
* SSR 시 href가 누락되는 버그가 있어, URL을 리터럴로 하드코딩합니다.
|
|
334
|
+
*
|
|
335
|
+
* ```tsx
|
|
336
|
+
* <head>
|
|
337
|
+
* <FontLinks />
|
|
338
|
+
* </head>
|
|
339
|
+
* ```
|
|
340
|
+
*/
|
|
341
|
+
declare function FontLinks(): react_jsx_runtime.JSX.Element;
|
|
301
342
|
|
|
302
343
|
interface TypewriterProps {
|
|
303
344
|
/** Words to cycle through */
|
|
@@ -536,6 +577,17 @@ declare function useInView(options?: UseInViewOptions): UseInViewResult;
|
|
|
536
577
|
*/
|
|
537
578
|
declare function useFocusTrap<T extends HTMLElement = HTMLElement>(active: boolean): React$1.RefObject<T | null>;
|
|
538
579
|
|
|
580
|
+
/**
|
|
581
|
+
* Calls `onEscape` when the Escape key is pressed while `active` is true.
|
|
582
|
+
*/
|
|
583
|
+
declare function useEscapeKey(active: boolean, onEscape: () => void): void;
|
|
584
|
+
|
|
585
|
+
/**
|
|
586
|
+
* Locks scroll on the nearest `.tab-scroll` ancestor (or falls back to querySelector)
|
|
587
|
+
* while `active` is true. Restores previous overflow on cleanup.
|
|
588
|
+
*/
|
|
589
|
+
declare function useScrollLock(active: boolean, anchorRef?: RefObject<HTMLElement | null>): void;
|
|
590
|
+
|
|
539
591
|
interface SkeletonProps {
|
|
540
592
|
/** Tailwind classes for width / height (e.g. "h-4 w-3/4") */
|
|
541
593
|
className?: string;
|
|
@@ -579,8 +631,12 @@ interface InAppSheetProps {
|
|
|
579
631
|
className?: string;
|
|
580
632
|
/** true면 시트가 AppShell 전체 높이를 채움 */
|
|
581
633
|
fullHeight?: boolean;
|
|
634
|
+
/** 우상단 X 버튼 숨기기. Default: false (보임) */
|
|
635
|
+
hideClose?: boolean;
|
|
636
|
+
/** 닫기 버튼 aria-label. Default: "닫기" */
|
|
637
|
+
closeLabel?: string;
|
|
582
638
|
}
|
|
583
|
-
declare function InAppSheet({ open, onClose, children, className, fullHeight, }: InAppSheetProps): react_jsx_runtime.JSX.Element;
|
|
639
|
+
declare function InAppSheet({ open, onClose, children, className, fullHeight, hideClose, closeLabel, }: InAppSheetProps): react_jsx_runtime.JSX.Element;
|
|
584
640
|
|
|
585
641
|
type PWAInstallState = "android-ready" | "ios-safari" | "installed" | "unsupported";
|
|
586
642
|
interface UsePWAInstallReturn {
|
|
@@ -795,4 +851,4 @@ declare function formatPrice(amount: number, currency?: string, locale?: string)
|
|
|
795
851
|
|
|
796
852
|
declare function cn(...inputs: ClassValue[]): string;
|
|
797
853
|
|
|
798
|
-
export { type ApiClient, type ApiClientOptions, ApiError, AppShell, AppShellContent, type AppShellContentProps, AppShellHeader, type AppShellHeaderProps, type AppShellProps, Avatar, type AvatarProps, Badge, type BadgeProps, Button, type ButtonProps, type ColorName, Dialog, type DialogProps, Divider, EmojiButton, type EmojiButtonProps, EmojiPicker, type EmojiPickerLabels, type EmojiPickerProps, EmptyState, type EmptyStateProps, type FontName, GrassMap, type GrassMapData, type GrassMapLabels, type GrassMapProps, IOSInstallSheet, InAppSheet, type InAppSheetProps, KitStyles, PWAInstallButton, type PWAInstallState, Section, SectionHeader, type SectionHeaderProps, type SectionProps, ShareButton, type ShareButtonProps, Skeleton, type SkeletonProps, StatChip, type StatChipProps, THEME_SCRIPT, Tab, TabBar, type TabBarProps, type TabProps, ThemeButton, type ThemeButtonProps, ThemeDialog, type ThemeDialogLabels, type ThemeDialogProps, type ToastOptions, ToastProvider, type ToastVariant, Tooltip, type TooltipProps, Typewriter, type TypewriterProps, 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, fontFamily, fonts, formatNumber, formatPrice, mobileViewport, relativeTime, svgIcon, useDebounce, useFetch, useFocusTrap, useFormSubmit, useInView, useLocalStorage, usePWAInstall, usePolling, useShare, useToast };
|
|
854
|
+
export { type ApiClient, type ApiClientOptions, ApiError, AppShell, AppShellContent, type AppShellContentProps, AppShellHeader, type AppShellHeaderProps, type AppShellProps, Avatar, type AvatarProps, Badge, type BadgeProps, Button, type ButtonProps, type ColorName, Dialog, type DialogProps, Divider, EmojiButton, type EmojiButtonProps, EmojiPicker, type EmojiPickerLabels, type EmojiPickerProps, EmptyState, type EmptyStateProps, Fab, type FabProps, FontLinks, type FontName, GrassMap, type GrassMapData, type GrassMapLabels, type GrassMapProps, IOSInstallSheet, InAppSheet, type InAppSheetProps, KitStyles, PWAInstallButton, type PWAInstallState, Section, SectionHeader, type SectionHeaderProps, type SectionProps, ShareButton, type ShareButtonProps, Skeleton, type SkeletonProps, StatChip, type StatChipProps, THEME_SCRIPT, Tab, TabBar, type TabBarProps, type TabProps, ThemeButton, type ThemeButtonProps, ThemeDialog, type ThemeDialogLabels, type ThemeDialogProps, type ToastOptions, ToastProvider, type ToastVariant, Tooltip, type TooltipProps, Typewriter, type TypewriterProps, 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, fontFamily, fonts, formatNumber, formatPrice, mobileViewport, relativeTime, svgIcon, useDebounce, useEscapeKey, useFetch, useFocusTrap, useFormSubmit, useInView, useLocalStorage, usePWAInstall, usePolling, useScrollLock, useShare, useToast };
|