@x-plat/design-system 0.14.1 → 0.14.3
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/components/AutoResizeTextArea/index.d.cts +1 -1
- package/dist/components/AutoResizeTextArea/index.d.ts +1 -1
- package/dist/components/Badge/index.d.cts +1 -1
- package/dist/components/Badge/index.d.ts +1 -1
- package/dist/components/ChatInput/index.d.cts +1 -1
- package/dist/components/ChatInput/index.d.ts +1 -1
- package/dist/components/CheckBox/index.cjs +3 -3
- package/dist/components/CheckBox/index.d.cts +2 -2
- package/dist/components/CheckBox/index.d.ts +2 -2
- package/dist/components/CheckBox/index.js +3 -3
- package/dist/components/DatePicker/index.d.cts +1 -1
- package/dist/components/DatePicker/index.d.ts +1 -1
- package/dist/components/Dropdown/index.cjs +16 -13
- package/dist/components/Dropdown/index.js +16 -13
- package/dist/components/FieldMessage/index.d.cts +1 -1
- package/dist/components/FieldMessage/index.d.ts +1 -1
- package/dist/components/FileUpload/index.d.cts +1 -1
- package/dist/components/FileUpload/index.d.ts +1 -1
- package/dist/components/ImageSelector/index.d.cts +1 -1
- package/dist/components/ImageSelector/index.d.ts +1 -1
- package/dist/components/Input/index.d.cts +1 -1
- package/dist/components/Input/index.d.ts +1 -1
- package/dist/components/NotificationBadge/index.d.cts +1 -1
- package/dist/components/NotificationBadge/index.d.ts +1 -1
- package/dist/components/Pagination/index.d.cts +1 -1
- package/dist/components/Pagination/index.d.ts +1 -1
- package/dist/components/PopOver/index.cjs +15 -14
- package/dist/components/PopOver/index.js +15 -14
- package/dist/components/Progress/index.d.cts +1 -1
- package/dist/components/Progress/index.d.ts +1 -1
- package/dist/components/Radio/index.d.cts +2 -2
- package/dist/components/Radio/index.d.ts +2 -2
- package/dist/components/Select/index.cjs +16 -12
- package/dist/components/Select/index.d.cts +1 -1
- package/dist/components/Select/index.d.ts +1 -1
- package/dist/components/Select/index.js +16 -12
- package/dist/components/Spinner/index.d.cts +1 -1
- package/dist/components/Spinner/index.d.ts +1 -1
- package/dist/components/Stat/index.d.cts +1 -1
- package/dist/components/Stat/index.d.ts +1 -1
- package/dist/components/Steps/index.d.cts +1 -1
- package/dist/components/Steps/index.d.ts +1 -1
- package/dist/components/Switch/index.d.cts +2 -2
- package/dist/components/Switch/index.d.ts +2 -2
- package/dist/components/TextArea/index.d.cts +1 -1
- package/dist/components/TextArea/index.d.ts +1 -1
- package/dist/components/TimePicker/index.cjs +17 -13
- package/dist/components/TimePicker/index.d.cts +1 -1
- package/dist/components/TimePicker/index.d.ts +1 -1
- package/dist/components/TimePicker/index.js +17 -13
- package/dist/components/index.cjs +22 -22
- package/dist/components/index.d.cts +2 -2
- package/dist/components/index.d.ts +2 -2
- package/dist/components/index.js +22 -22
- package/dist/index.cjs +24 -22
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +23 -22
- package/dist/layout/Layout/index.d.cts +15 -7
- package/dist/layout/Layout/index.d.ts +15 -7
- package/dist/{status-njWqQWFV.d.cts → status-C70BBv2S.d.cts} +3 -1
- package/dist/{status-njWqQWFV.d.ts → status-C70BBv2S.d.ts} +3 -1
- package/dist/tokens/index.cjs +5 -0
- package/dist/tokens/index.d.cts +3 -0
- package/dist/tokens/index.d.ts +3 -0
- package/dist/tokens/index.js +4 -0
- package/dist/{validation-Dqo1zqhT.d.cts → validation-BYpAI6Ct.d.cts} +1 -1
- package/dist/{validation-Dqo1zqhT.d.ts → validation-BYpAI6Ct.d.ts} +1 -1
- package/guidelines/MIGRATION.md +50 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -401,6 +401,7 @@ __export(index_exports, {
|
|
|
401
401
|
hasError: () => hasError,
|
|
402
402
|
isInRange: () => isInRange,
|
|
403
403
|
isSameDay: () => isSameDay,
|
|
404
|
+
normalizeStatus: () => normalizeStatus,
|
|
404
405
|
semantic: () => import_tokens_core.semantic,
|
|
405
406
|
useCalendar: () => useCalendar,
|
|
406
407
|
useSideBarContext: () => useSideBarContext,
|
|
@@ -7402,12 +7403,12 @@ var gridColumns = {
|
|
|
7402
7403
|
// src/tokens/colors.ts
|
|
7403
7404
|
var import_tokens_core = require("@x-plat/tokens-core");
|
|
7404
7405
|
|
|
7405
|
-
// src/tokens/index.ts
|
|
7406
|
-
var import_tokens_core2 = require("@x-plat/tokens-core");
|
|
7407
|
-
|
|
7408
7406
|
// src/tokens/interface/status.ts
|
|
7409
7407
|
var normalizeStatus = (value) => value === "brand" ? "primary" : value;
|
|
7410
7408
|
|
|
7409
|
+
// src/tokens/index.ts
|
|
7410
|
+
var import_tokens_core2 = require("@x-plat/tokens-core");
|
|
7411
|
+
|
|
7411
7412
|
// src/components/CheckBox/CheckBox.tsx
|
|
7412
7413
|
var import_jsx_runtime309 = require("react/jsx-runtime");
|
|
7413
7414
|
var CheckBox = (props) => {
|
|
@@ -8387,23 +8388,22 @@ var Portal_default = Portal;
|
|
|
8387
8388
|
// src/tokens/hooks/useAutoPosition.ts
|
|
8388
8389
|
var import_react19 = __toESM(require("react"), 1);
|
|
8389
8390
|
var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
8390
|
-
const [
|
|
8391
|
-
|
|
8392
|
-
direction: "bottom"
|
|
8393
|
-
});
|
|
8391
|
+
const [direction, setDirection] = import_react19.default.useState("bottom");
|
|
8392
|
+
const directionRef = import_react19.default.useRef("bottom");
|
|
8394
8393
|
const calculatePosition = import_react19.default.useCallback(() => {
|
|
8395
|
-
|
|
8394
|
+
const pop = popRef.current;
|
|
8395
|
+
if (!triggerRef.current || !pop) return;
|
|
8396
8396
|
const triggerRect = triggerRef.current.getBoundingClientRect();
|
|
8397
|
-
const popW =
|
|
8398
|
-
const popH =
|
|
8397
|
+
const popW = pop.offsetWidth;
|
|
8398
|
+
const popH = pop.offsetHeight;
|
|
8399
8399
|
const viewportHeight = window.innerHeight;
|
|
8400
8400
|
const viewportWidth = window.innerWidth;
|
|
8401
8401
|
if (popH === 0 || popW === 0) return;
|
|
8402
|
-
let
|
|
8402
|
+
let next = "bottom";
|
|
8403
8403
|
let top;
|
|
8404
8404
|
let left;
|
|
8405
8405
|
if (triggerRect.bottom + popH > viewportHeight && triggerRect.top - popH > 0) {
|
|
8406
|
-
|
|
8406
|
+
next = "top";
|
|
8407
8407
|
top = triggerRect.top - popH;
|
|
8408
8408
|
} else {
|
|
8409
8409
|
top = triggerRect.bottom;
|
|
@@ -8413,7 +8413,12 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
8413
8413
|
left = triggerRect.right - popW;
|
|
8414
8414
|
}
|
|
8415
8415
|
if (left < 8) left = 8;
|
|
8416
|
-
|
|
8416
|
+
pop.style.top = `${top}px`;
|
|
8417
|
+
pop.style.left = `${left}px`;
|
|
8418
|
+
if (next !== directionRef.current) {
|
|
8419
|
+
directionRef.current = next;
|
|
8420
|
+
setDirection(next);
|
|
8421
|
+
}
|
|
8417
8422
|
}, [triggerRef, popRef]);
|
|
8418
8423
|
import_react19.default.useLayoutEffect(() => {
|
|
8419
8424
|
if (!enabled) return;
|
|
@@ -8444,7 +8449,7 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
8444
8449
|
window.removeEventListener("scroll", onScrollOrResize, true);
|
|
8445
8450
|
};
|
|
8446
8451
|
}, [calculatePosition, enabled]);
|
|
8447
|
-
return
|
|
8452
|
+
return { direction };
|
|
8448
8453
|
};
|
|
8449
8454
|
var useAutoPosition_default = useAutoPosition;
|
|
8450
8455
|
|
|
@@ -8482,7 +8487,7 @@ var Dropdown = (props) => {
|
|
|
8482
8487
|
const [visible, setVisible] = import_react21.default.useState(false);
|
|
8483
8488
|
const triggerRef = import_react21.default.useRef(null);
|
|
8484
8489
|
const menuRef = import_react21.default.useRef(null);
|
|
8485
|
-
const {
|
|
8490
|
+
const { direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
|
|
8486
8491
|
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
|
|
8487
8492
|
useEscapeKey(isOpen, () => {
|
|
8488
8493
|
setIsOpen(false);
|
|
@@ -8518,7 +8523,6 @@ var Dropdown = (props) => {
|
|
|
8518
8523
|
{
|
|
8519
8524
|
ref: menuRef,
|
|
8520
8525
|
className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
|
|
8521
|
-
style: { top: position.top, left: position.left },
|
|
8522
8526
|
role: "menu",
|
|
8523
8527
|
children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(
|
|
8524
8528
|
"button",
|
|
@@ -10452,9 +10456,6 @@ var PopOver = (props) => {
|
|
|
10452
10456
|
eventTrigger && "visible"
|
|
10453
10457
|
),
|
|
10454
10458
|
ref: popRef,
|
|
10455
|
-
style: {
|
|
10456
|
-
...position.position
|
|
10457
|
-
},
|
|
10458
10459
|
children: PopOverEl
|
|
10459
10460
|
}
|
|
10460
10461
|
) })
|
|
@@ -10797,7 +10798,7 @@ var SelectRoot = (props) => {
|
|
|
10797
10798
|
{
|
|
10798
10799
|
className: clsx_default("lib-xplat-select-content", size, position.direction, stateClass),
|
|
10799
10800
|
ref: contentRef,
|
|
10800
|
-
style: {
|
|
10801
|
+
style: { width: triggerRef.current?.offsetWidth },
|
|
10801
10802
|
role: "listbox",
|
|
10802
10803
|
children: [
|
|
10803
10804
|
searchable && /* @__PURE__ */ (0, import_jsx_runtime337.jsx)("div", { className: "select-search", children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
|
|
@@ -11642,7 +11643,7 @@ var TimePicker = (props) => {
|
|
|
11642
11643
|
close();
|
|
11643
11644
|
triggerRef.current?.focus({ preventScroll: true });
|
|
11644
11645
|
});
|
|
11645
|
-
|
|
11646
|
+
useAutoPosition_default(triggerRef, contentRef, mounted);
|
|
11646
11647
|
import_react40.default.useEffect(() => {
|
|
11647
11648
|
if (disabled && isOpen) setOpen(false);
|
|
11648
11649
|
}, [disabled, isOpen]);
|
|
@@ -11689,7 +11690,7 @@ var TimePicker = (props) => {
|
|
|
11689
11690
|
{
|
|
11690
11691
|
ref: contentRef,
|
|
11691
11692
|
className: clsx_default("lib-xplat-time-picker-content", size, visible ? "enter" : "exit"),
|
|
11692
|
-
style: {
|
|
11693
|
+
style: { width: triggerRef.current?.offsetWidth },
|
|
11693
11694
|
role: "listbox",
|
|
11694
11695
|
children: options.map((t) => /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(
|
|
11695
11696
|
"div",
|
|
@@ -12841,6 +12842,7 @@ var SideBar_default = SideBar;
|
|
|
12841
12842
|
hasError,
|
|
12842
12843
|
isInRange,
|
|
12843
12844
|
isSameDay,
|
|
12845
|
+
normalizeStatus,
|
|
12844
12846
|
semantic,
|
|
12845
12847
|
useCalendar,
|
|
12846
12848
|
useSideBarContext,
|
package/dist/index.d.cts
CHANGED
|
@@ -56,9 +56,9 @@ export { Header } from './layout/Header/index.cjs';
|
|
|
56
56
|
export { Layout } from './layout/Layout/index.cjs';
|
|
57
57
|
export { SideBar, SideBarContext, useSideBarContext } from './layout/SideBar/index.cjs';
|
|
58
58
|
export { TokenVar, cssVar, semantic } from '@x-plat/tokens-core';
|
|
59
|
+
export { B as ButtonAttributes, I as InputAttributes, T as TextareaAttributes } from './attributes-DJIWir_0.cjs';
|
|
59
60
|
export { ActivityIcon, AirplayIcon, AlertCircleIcon, AlertOctagonIcon, AlertTriangleIcon, AlignCenterIcon, AlignJustifyIcon, AlignLeftIcon, AlignRightIcon, AnchorIcon, ApertureIcon, ArchiveIcon, ArrowDownCircleIcon, ArrowDownIcon, ArrowDownLeftIcon, ArrowDownRightIcon, ArrowLeftCircleIcon, ArrowLeftIcon, ArrowRightCircleIcon, ArrowRightIcon, ArrowUpCircleIcon, ArrowUpIcon, ArrowUpLeftIcon, ArrowUpRightIcon, AtSignIcon, AwardIcon, BarChart2Icon, BarChartIcon, BatteryChargingIcon, BatteryIcon, BellIcon, BellOffIcon, BluetoothIcon, BoldIcon, BookIcon, BookOpenIcon, BookmarkIcon, BoxIcon, BriefcaseIcon, CalendarIcon, CalenderIcon, CallActiveIcon, CallForwardedIcon, CallIcon, CallIncomingIcon, CallMissedIcon, CallOffIcon, CallOutgoingIcon, CameraIcon, CameraOffIcon, CastIcon, CheckCircleIcon, CheckIcon, CheckSquareIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsDownIcon, ChevronsLeftIcon, ChevronsRightIcon, ChevronsUpIcon, ChromeIcon, CircleIcon, ClipboardIcon, ClockIcon, CloseEyeIcon, CloudDrizzleIcon, CloudIcon, CloudLightningIcon, CloudOffIcon, CloudRainIcon, CloudSnowIcon, CodeIcon, CodepenIcon, CodesandboxIcon, CoffeeIcon, ColorProps, ColorToken, ColumnsIcon, CommandIcon, CompassIcon, CopyIcon, CornerDownLeftIcon, CornerDownRightIcon, CornerLeftDownIcon, CornerLeftUpIcon, CornerRightDownIcon, CornerRightUpIcon, CornerUpLeftIcon, CornerUpRightIcon, CpuIcon, CreditCardIcon, CropIcon, CrosshairIcon, DatabaseIcon, CallIcon as DefaultCall, DeleteIcon, DiscIcon, DivideCircleIcon, DivideIcon, DivideSquareIcon, DollarSignIcon, DownloadCloudIcon, DownloadIcon, DribbbleIcon, DropletIcon, Edit2Icon, Edit3Icon, EditIcon, ErrorIcon, ExternalLinkIcon, EyeIcon, EyeOffIcon, FacebookIcon, FastForwardIcon, FeatherIcon, FigmaIcon, FileIcon, FileMinusIcon, FilePlusIcon, FileTextIcon, FilmIcon, FilterIcon, FlagIcon, FolderIcon, FolderMinusIcon, FolderPlusIcon, FramerIcon, FrownIcon, GierIcon, GiftIcon, GitBranchIcon, GitCommitIcon, GitMergeIcon, GitPullRequestIcon, GithubIcon, GitlabIcon, GlobeIcon, GridIcon, HardDriveIcon, HashIcon, HeadphonesIcon, HeartIcon, HelpCircleIcon, HexagonIcon, HomeIcon, ImageIcon, InboxIcon, InfoIcon, InstagramIcon, ItalicIcon, KeyIcon, LayersIcon, LayoutIcon, LifeBuoyIcon, Link2Icon, LinkIcon, LinkedinIcon, ListIcon, LoaderIcon, LockIcon, LogInIcon, LogOutIcon, MailIcon, MapIcon, MapPinIcon, Maximize2Icon, MaximizeIcon, MehIcon, MenuIcon, MessageCircleIcon, MessageSquareIcon, MicIcon, MicOffIcon, Minimize2Icon, MinimizeIcon, MinusCircleIcon, MinusIcon, MinusSquareIcon, MonitorIcon, MoonIcon, MoreHorizontalIcon, MoreVerticalIcon, MousePointerIcon, MoveIcon, MusicIcon, Navigation2Icon, NavigationIcon, OctagonIcon, OpenEyeIcon, PackageIcon, PaperclipIcon, PauseCircleIcon, PauseIcon, PenToolIcon, PercentIcon, PieChartIcon, PlayCircleIcon, PlayIcon, PlusCircleIcon, PlusIcon, PlusSquareIcon, PocketIcon, PowerIcon, PrinterIcon, ProfileIcon, RadioIcon, RefreshCcwIcon, RefreshCwIcon, RepeatIcon, RewindIcon, RotateCcwIcon, RotateCwIcon, RssIcon, SaveIcon, ScissorsIcon, SearchIcon, SemanticColorToken, SendIcon, ServerIcon, SettingsIcon, Share2Icon, ShareIcon, ShieldIcon, ShieldOffIcon, ShoppingBagIcon, ShoppingCartIcon, ShuffleIcon, SidebarIcon, SkipBackIcon, SkipForwardIcon, SlackIcon, SlashIcon, SlidersIcon, SmartphoneIcon, SmileIcon, SpeakerIcon, SquareIcon, StarIcon, StopCircleIcon, SuccessIcon, SunIcon, SunriseIcon, SunsetIcon, TableIcon, TabletIcon, TagIcon, TargetIcon, TerminalIcon, ThermometerIcon, ThumbsDownIcon, ThumbsUpIcon, ToggleLeftIcon, ToggleRightIcon, ToolIcon, Trash2Icon, TrashIcon, TrelloIcon, TrendingDownIcon, TrendingUpIcon, TriangleIcon, TruckIcon, TvIcon, TwitchIcon, TwitterIcon, TypeIcon, UmbrellaIcon, UnderlineIcon, UnlockIcon, UploadCloudIcon, UploadIcon, UserCheckIcon, UserIcon, UserMinusIcon, UserPlusIcon, UserXIcon, UsersIcon, VideoIcon, VideoOffIcon, VoicemailIcon, Volume1Icon, Volume2Icon, VolumeIcon, VolumeXIcon, WatchIcon, WifiIcon, WifiOffIcon, WindIcon, XCircleIcon, XIcon, XOctagonIcon, XSquareIcon, YoutubeIcon, ZapIcon, ZapOffIcon, ZoomInIcon, ZoomOutIcon } from './tokens/index.cjs';
|
|
61
|
+
export { L as LegacyStatusType, S as StatusType, a as StatusTypeInput, n as normalizeStatus } from './status-C70BBv2S.cjs';
|
|
62
|
+
export { V as Validation, a as ValidationStatus } from './validation-BYpAI6Ct.cjs';
|
|
60
63
|
import 'react';
|
|
61
|
-
import './attributes-DJIWir_0.cjs';
|
|
62
|
-
import './validation-Dqo1zqhT.cjs';
|
|
63
64
|
import 'react/jsx-runtime';
|
|
64
|
-
import './status-njWqQWFV.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -56,9 +56,9 @@ export { Header } from './layout/Header/index.js';
|
|
|
56
56
|
export { Layout } from './layout/Layout/index.js';
|
|
57
57
|
export { SideBar, SideBarContext, useSideBarContext } from './layout/SideBar/index.js';
|
|
58
58
|
export { TokenVar, cssVar, semantic } from '@x-plat/tokens-core';
|
|
59
|
+
export { B as ButtonAttributes, I as InputAttributes, T as TextareaAttributes } from './attributes-DJIWir_0.js';
|
|
59
60
|
export { ActivityIcon, AirplayIcon, AlertCircleIcon, AlertOctagonIcon, AlertTriangleIcon, AlignCenterIcon, AlignJustifyIcon, AlignLeftIcon, AlignRightIcon, AnchorIcon, ApertureIcon, ArchiveIcon, ArrowDownCircleIcon, ArrowDownIcon, ArrowDownLeftIcon, ArrowDownRightIcon, ArrowLeftCircleIcon, ArrowLeftIcon, ArrowRightCircleIcon, ArrowRightIcon, ArrowUpCircleIcon, ArrowUpIcon, ArrowUpLeftIcon, ArrowUpRightIcon, AtSignIcon, AwardIcon, BarChart2Icon, BarChartIcon, BatteryChargingIcon, BatteryIcon, BellIcon, BellOffIcon, BluetoothIcon, BoldIcon, BookIcon, BookOpenIcon, BookmarkIcon, BoxIcon, BriefcaseIcon, CalendarIcon, CalenderIcon, CallActiveIcon, CallForwardedIcon, CallIcon, CallIncomingIcon, CallMissedIcon, CallOffIcon, CallOutgoingIcon, CameraIcon, CameraOffIcon, CastIcon, CheckCircleIcon, CheckIcon, CheckSquareIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsDownIcon, ChevronsLeftIcon, ChevronsRightIcon, ChevronsUpIcon, ChromeIcon, CircleIcon, ClipboardIcon, ClockIcon, CloseEyeIcon, CloudDrizzleIcon, CloudIcon, CloudLightningIcon, CloudOffIcon, CloudRainIcon, CloudSnowIcon, CodeIcon, CodepenIcon, CodesandboxIcon, CoffeeIcon, ColorProps, ColorToken, ColumnsIcon, CommandIcon, CompassIcon, CopyIcon, CornerDownLeftIcon, CornerDownRightIcon, CornerLeftDownIcon, CornerLeftUpIcon, CornerRightDownIcon, CornerRightUpIcon, CornerUpLeftIcon, CornerUpRightIcon, CpuIcon, CreditCardIcon, CropIcon, CrosshairIcon, DatabaseIcon, CallIcon as DefaultCall, DeleteIcon, DiscIcon, DivideCircleIcon, DivideIcon, DivideSquareIcon, DollarSignIcon, DownloadCloudIcon, DownloadIcon, DribbbleIcon, DropletIcon, Edit2Icon, Edit3Icon, EditIcon, ErrorIcon, ExternalLinkIcon, EyeIcon, EyeOffIcon, FacebookIcon, FastForwardIcon, FeatherIcon, FigmaIcon, FileIcon, FileMinusIcon, FilePlusIcon, FileTextIcon, FilmIcon, FilterIcon, FlagIcon, FolderIcon, FolderMinusIcon, FolderPlusIcon, FramerIcon, FrownIcon, GierIcon, GiftIcon, GitBranchIcon, GitCommitIcon, GitMergeIcon, GitPullRequestIcon, GithubIcon, GitlabIcon, GlobeIcon, GridIcon, HardDriveIcon, HashIcon, HeadphonesIcon, HeartIcon, HelpCircleIcon, HexagonIcon, HomeIcon, ImageIcon, InboxIcon, InfoIcon, InstagramIcon, ItalicIcon, KeyIcon, LayersIcon, LayoutIcon, LifeBuoyIcon, Link2Icon, LinkIcon, LinkedinIcon, ListIcon, LoaderIcon, LockIcon, LogInIcon, LogOutIcon, MailIcon, MapIcon, MapPinIcon, Maximize2Icon, MaximizeIcon, MehIcon, MenuIcon, MessageCircleIcon, MessageSquareIcon, MicIcon, MicOffIcon, Minimize2Icon, MinimizeIcon, MinusCircleIcon, MinusIcon, MinusSquareIcon, MonitorIcon, MoonIcon, MoreHorizontalIcon, MoreVerticalIcon, MousePointerIcon, MoveIcon, MusicIcon, Navigation2Icon, NavigationIcon, OctagonIcon, OpenEyeIcon, PackageIcon, PaperclipIcon, PauseCircleIcon, PauseIcon, PenToolIcon, PercentIcon, PieChartIcon, PlayCircleIcon, PlayIcon, PlusCircleIcon, PlusIcon, PlusSquareIcon, PocketIcon, PowerIcon, PrinterIcon, ProfileIcon, RadioIcon, RefreshCcwIcon, RefreshCwIcon, RepeatIcon, RewindIcon, RotateCcwIcon, RotateCwIcon, RssIcon, SaveIcon, ScissorsIcon, SearchIcon, SemanticColorToken, SendIcon, ServerIcon, SettingsIcon, Share2Icon, ShareIcon, ShieldIcon, ShieldOffIcon, ShoppingBagIcon, ShoppingCartIcon, ShuffleIcon, SidebarIcon, SkipBackIcon, SkipForwardIcon, SlackIcon, SlashIcon, SlidersIcon, SmartphoneIcon, SmileIcon, SpeakerIcon, SquareIcon, StarIcon, StopCircleIcon, SuccessIcon, SunIcon, SunriseIcon, SunsetIcon, TableIcon, TabletIcon, TagIcon, TargetIcon, TerminalIcon, ThermometerIcon, ThumbsDownIcon, ThumbsUpIcon, ToggleLeftIcon, ToggleRightIcon, ToolIcon, Trash2Icon, TrashIcon, TrelloIcon, TrendingDownIcon, TrendingUpIcon, TriangleIcon, TruckIcon, TvIcon, TwitchIcon, TwitterIcon, TypeIcon, UmbrellaIcon, UnderlineIcon, UnlockIcon, UploadCloudIcon, UploadIcon, UserCheckIcon, UserIcon, UserMinusIcon, UserPlusIcon, UserXIcon, UsersIcon, VideoIcon, VideoOffIcon, VoicemailIcon, Volume1Icon, Volume2Icon, VolumeIcon, VolumeXIcon, WatchIcon, WifiIcon, WifiOffIcon, WindIcon, XCircleIcon, XIcon, XOctagonIcon, XSquareIcon, YoutubeIcon, ZapIcon, ZapOffIcon, ZoomInIcon, ZoomOutIcon } from './tokens/index.js';
|
|
61
|
+
export { L as LegacyStatusType, S as StatusType, a as StatusTypeInput, n as normalizeStatus } from './status-C70BBv2S.js';
|
|
62
|
+
export { V as Validation, a as ValidationStatus } from './validation-BYpAI6Ct.js';
|
|
60
63
|
import 'react';
|
|
61
|
-
import './attributes-DJIWir_0.js';
|
|
62
|
-
import './validation-Dqo1zqhT.js';
|
|
63
64
|
import 'react/jsx-runtime';
|
|
64
|
-
import './status-njWqQWFV.js';
|
package/dist/index.js
CHANGED
|
@@ -6992,12 +6992,12 @@ var gridColumns = {
|
|
|
6992
6992
|
// src/tokens/colors.ts
|
|
6993
6993
|
import { semantic } from "@x-plat/tokens-core";
|
|
6994
6994
|
|
|
6995
|
-
// src/tokens/index.ts
|
|
6996
|
-
import { cssVar } from "@x-plat/tokens-core";
|
|
6997
|
-
|
|
6998
6995
|
// src/tokens/interface/status.ts
|
|
6999
6996
|
var normalizeStatus = (value) => value === "brand" ? "primary" : value;
|
|
7000
6997
|
|
|
6998
|
+
// src/tokens/index.ts
|
|
6999
|
+
import { cssVar } from "@x-plat/tokens-core";
|
|
7000
|
+
|
|
7001
7001
|
// src/components/CheckBox/CheckBox.tsx
|
|
7002
7002
|
import { jsx as jsx309, jsxs as jsxs198 } from "react/jsx-runtime";
|
|
7003
7003
|
var CheckBox = (props) => {
|
|
@@ -7977,23 +7977,22 @@ var Portal_default = Portal;
|
|
|
7977
7977
|
// src/tokens/hooks/useAutoPosition.ts
|
|
7978
7978
|
import React19 from "react";
|
|
7979
7979
|
var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
7980
|
-
const [
|
|
7981
|
-
|
|
7982
|
-
direction: "bottom"
|
|
7983
|
-
});
|
|
7980
|
+
const [direction, setDirection] = React19.useState("bottom");
|
|
7981
|
+
const directionRef = React19.useRef("bottom");
|
|
7984
7982
|
const calculatePosition = React19.useCallback(() => {
|
|
7985
|
-
|
|
7983
|
+
const pop = popRef.current;
|
|
7984
|
+
if (!triggerRef.current || !pop) return;
|
|
7986
7985
|
const triggerRect = triggerRef.current.getBoundingClientRect();
|
|
7987
|
-
const popW =
|
|
7988
|
-
const popH =
|
|
7986
|
+
const popW = pop.offsetWidth;
|
|
7987
|
+
const popH = pop.offsetHeight;
|
|
7989
7988
|
const viewportHeight = window.innerHeight;
|
|
7990
7989
|
const viewportWidth = window.innerWidth;
|
|
7991
7990
|
if (popH === 0 || popW === 0) return;
|
|
7992
|
-
let
|
|
7991
|
+
let next = "bottom";
|
|
7993
7992
|
let top;
|
|
7994
7993
|
let left;
|
|
7995
7994
|
if (triggerRect.bottom + popH > viewportHeight && triggerRect.top - popH > 0) {
|
|
7996
|
-
|
|
7995
|
+
next = "top";
|
|
7997
7996
|
top = triggerRect.top - popH;
|
|
7998
7997
|
} else {
|
|
7999
7998
|
top = triggerRect.bottom;
|
|
@@ -8003,7 +8002,12 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
8003
8002
|
left = triggerRect.right - popW;
|
|
8004
8003
|
}
|
|
8005
8004
|
if (left < 8) left = 8;
|
|
8006
|
-
|
|
8005
|
+
pop.style.top = `${top}px`;
|
|
8006
|
+
pop.style.left = `${left}px`;
|
|
8007
|
+
if (next !== directionRef.current) {
|
|
8008
|
+
directionRef.current = next;
|
|
8009
|
+
setDirection(next);
|
|
8010
|
+
}
|
|
8007
8011
|
}, [triggerRef, popRef]);
|
|
8008
8012
|
React19.useLayoutEffect(() => {
|
|
8009
8013
|
if (!enabled) return;
|
|
@@ -8034,7 +8038,7 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
8034
8038
|
window.removeEventListener("scroll", onScrollOrResize, true);
|
|
8035
8039
|
};
|
|
8036
8040
|
}, [calculatePosition, enabled]);
|
|
8037
|
-
return
|
|
8041
|
+
return { direction };
|
|
8038
8042
|
};
|
|
8039
8043
|
var useAutoPosition_default = useAutoPosition;
|
|
8040
8044
|
|
|
@@ -8072,7 +8076,7 @@ var Dropdown = (props) => {
|
|
|
8072
8076
|
const [visible, setVisible] = React21.useState(false);
|
|
8073
8077
|
const triggerRef = React21.useRef(null);
|
|
8074
8078
|
const menuRef = React21.useRef(null);
|
|
8075
|
-
const {
|
|
8079
|
+
const { direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
|
|
8076
8080
|
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
|
|
8077
8081
|
useEscapeKey(isOpen, () => {
|
|
8078
8082
|
setIsOpen(false);
|
|
@@ -8108,7 +8112,6 @@ var Dropdown = (props) => {
|
|
|
8108
8112
|
{
|
|
8109
8113
|
ref: menuRef,
|
|
8110
8114
|
className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
|
|
8111
|
-
style: { top: position.top, left: position.left },
|
|
8112
8115
|
role: "menu",
|
|
8113
8116
|
children: items.map((item) => /* @__PURE__ */ jsx322(
|
|
8114
8117
|
"button",
|
|
@@ -10042,9 +10045,6 @@ var PopOver = (props) => {
|
|
|
10042
10045
|
eventTrigger && "visible"
|
|
10043
10046
|
),
|
|
10044
10047
|
ref: popRef,
|
|
10045
|
-
style: {
|
|
10046
|
-
...position.position
|
|
10047
|
-
},
|
|
10048
10048
|
children: PopOverEl
|
|
10049
10049
|
}
|
|
10050
10050
|
) })
|
|
@@ -10387,7 +10387,7 @@ var SelectRoot = (props) => {
|
|
|
10387
10387
|
{
|
|
10388
10388
|
className: clsx_default("lib-xplat-select-content", size, position.direction, stateClass),
|
|
10389
10389
|
ref: contentRef,
|
|
10390
|
-
style: {
|
|
10390
|
+
style: { width: triggerRef.current?.offsetWidth },
|
|
10391
10391
|
role: "listbox",
|
|
10392
10392
|
children: [
|
|
10393
10393
|
searchable && /* @__PURE__ */ jsx337("div", { className: "select-search", children: /* @__PURE__ */ jsx337(
|
|
@@ -11232,7 +11232,7 @@ var TimePicker = (props) => {
|
|
|
11232
11232
|
close();
|
|
11233
11233
|
triggerRef.current?.focus({ preventScroll: true });
|
|
11234
11234
|
});
|
|
11235
|
-
|
|
11235
|
+
useAutoPosition_default(triggerRef, contentRef, mounted);
|
|
11236
11236
|
React40.useEffect(() => {
|
|
11237
11237
|
if (disabled && isOpen) setOpen(false);
|
|
11238
11238
|
}, [disabled, isOpen]);
|
|
@@ -11279,7 +11279,7 @@ var TimePicker = (props) => {
|
|
|
11279
11279
|
{
|
|
11280
11280
|
ref: contentRef,
|
|
11281
11281
|
className: clsx_default("lib-xplat-time-picker-content", size, visible ? "enter" : "exit"),
|
|
11282
|
-
style: {
|
|
11282
|
+
style: { width: triggerRef.current?.offsetWidth },
|
|
11283
11283
|
role: "listbox",
|
|
11284
11284
|
children: options.map((t) => /* @__PURE__ */ jsx351(
|
|
11285
11285
|
"div",
|
|
@@ -12430,6 +12430,7 @@ export {
|
|
|
12430
12430
|
hasError,
|
|
12431
12431
|
isInRange,
|
|
12432
12432
|
isSameDay,
|
|
12433
|
+
normalizeStatus,
|
|
12433
12434
|
semantic,
|
|
12434
12435
|
useCalendar,
|
|
12435
12436
|
useSideBarContext,
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Header } from '../Header/index.cjs';
|
|
3
2
|
|
|
4
|
-
interface SidebarChildProps {
|
|
5
|
-
handleSwitchSideBar: () => void;
|
|
6
|
-
[key: string]: unknown;
|
|
7
|
-
}
|
|
8
3
|
interface LayoutProps {
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
/**
|
|
5
|
+
* 화면 위쪽 머리말. 보통 `Header` 를 넣는다.
|
|
6
|
+
*
|
|
7
|
+
* 한때 `ReactElement<typeof Header>` 로 좁혀 두었는데 그건 잘못된 표기였다 —
|
|
8
|
+
* `ReactElement<P>` 의 `P` 는 **그 엘리먼트의 props** 지 컴포넌트 타입이
|
|
9
|
+
* 아니다. `<Header />` 를 그대로 넘겨도 통과하지 않았다.
|
|
10
|
+
*/
|
|
11
|
+
header?: React.ReactNode;
|
|
12
|
+
/**
|
|
13
|
+
* 왼쪽 옆띠. 보통 `SideBar` 를 넣는다.
|
|
14
|
+
*
|
|
15
|
+
* 여는·닫는 상태는 `SideBar` 가 자기 안의 컨텍스트로 들고 있다. Layout 은
|
|
16
|
+
* 아무것도 주입하지 않으므로 슬롯을 좁힐 이유가 없다.
|
|
17
|
+
*/
|
|
18
|
+
sideBar?: React.ReactNode;
|
|
11
19
|
children?: React.ReactNode;
|
|
12
20
|
}
|
|
13
21
|
declare const Layout: React.FC<LayoutProps>;
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Header } from '../Header/index.js';
|
|
3
2
|
|
|
4
|
-
interface SidebarChildProps {
|
|
5
|
-
handleSwitchSideBar: () => void;
|
|
6
|
-
[key: string]: unknown;
|
|
7
|
-
}
|
|
8
3
|
interface LayoutProps {
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
/**
|
|
5
|
+
* 화면 위쪽 머리말. 보통 `Header` 를 넣는다.
|
|
6
|
+
*
|
|
7
|
+
* 한때 `ReactElement<typeof Header>` 로 좁혀 두었는데 그건 잘못된 표기였다 —
|
|
8
|
+
* `ReactElement<P>` 의 `P` 는 **그 엘리먼트의 props** 지 컴포넌트 타입이
|
|
9
|
+
* 아니다. `<Header />` 를 그대로 넘겨도 통과하지 않았다.
|
|
10
|
+
*/
|
|
11
|
+
header?: React.ReactNode;
|
|
12
|
+
/**
|
|
13
|
+
* 왼쪽 옆띠. 보통 `SideBar` 를 넣는다.
|
|
14
|
+
*
|
|
15
|
+
* 여는·닫는 상태는 `SideBar` 가 자기 안의 컨텍스트로 들고 있다. Layout 은
|
|
16
|
+
* 아무것도 주입하지 않으므로 슬롯을 좁힐 이유가 없다.
|
|
17
|
+
*/
|
|
18
|
+
sideBar?: React.ReactNode;
|
|
11
19
|
children?: React.ReactNode;
|
|
12
20
|
}
|
|
13
21
|
declare const Layout: React.FC<LayoutProps>;
|
|
@@ -16,5 +16,7 @@ type StatusType = "primary" | "success" | "error" | "warning" | "info";
|
|
|
16
16
|
type LegacyStatusType = "brand";
|
|
17
17
|
/** 컴포넌트가 받는 타입. 새 이름과 예전 이름을 모두 허용한다 */
|
|
18
18
|
type StatusTypeInput = StatusType | LegacyStatusType;
|
|
19
|
+
/** `brand` 로 들어온 값을 `primary` 로 정규화한다 */
|
|
20
|
+
declare const normalizeStatus: <T extends string>(value: T | LegacyStatusType) => Exclude<T, LegacyStatusType> | "primary";
|
|
19
21
|
|
|
20
|
-
export type
|
|
22
|
+
export { type LegacyStatusType as L, type StatusType as S, type StatusTypeInput as a, normalizeStatus as n };
|
|
@@ -16,5 +16,7 @@ type StatusType = "primary" | "success" | "error" | "warning" | "info";
|
|
|
16
16
|
type LegacyStatusType = "brand";
|
|
17
17
|
/** 컴포넌트가 받는 타입. 새 이름과 예전 이름을 모두 허용한다 */
|
|
18
18
|
type StatusTypeInput = StatusType | LegacyStatusType;
|
|
19
|
+
/** `brand` 로 들어온 값을 `primary` 로 정규화한다 */
|
|
20
|
+
declare const normalizeStatus: <T extends string>(value: T | LegacyStatusType) => Exclude<T, LegacyStatusType> | "primary";
|
|
19
21
|
|
|
20
|
-
export type
|
|
22
|
+
export { type LegacyStatusType as L, type StatusType as S, type StatusTypeInput as a, normalizeStatus as n };
|
package/dist/tokens/index.cjs
CHANGED
|
@@ -319,6 +319,7 @@ __export(tokens_exports, {
|
|
|
319
319
|
breakpoints: () => breakpoints,
|
|
320
320
|
cssVar: () => import_tokens_core2.cssVar,
|
|
321
321
|
gridColumns: () => gridColumns,
|
|
322
|
+
normalizeStatus: () => normalizeStatus,
|
|
322
323
|
semantic: () => import_tokens_core.semantic
|
|
323
324
|
});
|
|
324
325
|
module.exports = __toCommonJS(tokens_exports);
|
|
@@ -339,6 +340,9 @@ var gridColumns = {
|
|
|
339
340
|
// src/tokens/colors.ts
|
|
340
341
|
var import_tokens_core = require("@x-plat/tokens-core");
|
|
341
342
|
|
|
343
|
+
// src/tokens/interface/status.ts
|
|
344
|
+
var normalizeStatus = (value) => value === "brand" ? "primary" : value;
|
|
345
|
+
|
|
342
346
|
// src/tokens/svg/action/CopyIcon.tsx
|
|
343
347
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
344
348
|
var CopyIcon = () => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
@@ -6110,5 +6114,6 @@ var import_tokens_core2 = require("@x-plat/tokens-core");
|
|
|
6110
6114
|
breakpoints,
|
|
6111
6115
|
cssVar,
|
|
6112
6116
|
gridColumns,
|
|
6117
|
+
normalizeStatus,
|
|
6113
6118
|
semantic
|
|
6114
6119
|
});
|
package/dist/tokens/index.d.cts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export { B as BREAKPOINT_KEYS_ORDERED, a as BreakpointKey, G as GridColumnConfig, b as GridSpanFor, c as breakpoints, g as gridColumns } from '../breakpoints-CKkNxA-y.cjs';
|
|
2
2
|
export { TokenVar, cssVar, semantic } from '@x-plat/tokens-core';
|
|
3
|
+
export { B as ButtonAttributes, I as InputAttributes, T as TextareaAttributes } from '../attributes-DJIWir_0.cjs';
|
|
4
|
+
export { L as LegacyStatusType, S as StatusType, a as StatusTypeInput, n as normalizeStatus } from '../status-C70BBv2S.cjs';
|
|
5
|
+
export { V as Validation, a as ValidationStatus } from '../validation-BYpAI6Ct.cjs';
|
|
3
6
|
import React from 'react';
|
|
4
7
|
|
|
5
8
|
type SemanticTextToken = "semantic-text-primary" | "semantic-text-secondary" | "semantic-text-tertiary" | "semantic-text-brand-primary" | "semantic-text-brand-secondary" | "semantic-text-disabled" | "semantic-text-inverse" | "semantic-text-success" | "semantic-text-error" | "semantic-text-warning" | "semantic-text-info" | "semantic-text-link" | "semantic-text-accent-red" | "semantic-text-accent-blue";
|
package/dist/tokens/index.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export { B as BREAKPOINT_KEYS_ORDERED, a as BreakpointKey, G as GridColumnConfig, b as GridSpanFor, c as breakpoints, g as gridColumns } from '../breakpoints-CKkNxA-y.js';
|
|
2
2
|
export { TokenVar, cssVar, semantic } from '@x-plat/tokens-core';
|
|
3
|
+
export { B as ButtonAttributes, I as InputAttributes, T as TextareaAttributes } from '../attributes-DJIWir_0.js';
|
|
4
|
+
export { L as LegacyStatusType, S as StatusType, a as StatusTypeInput, n as normalizeStatus } from '../status-C70BBv2S.js';
|
|
5
|
+
export { V as Validation, a as ValidationStatus } from '../validation-BYpAI6Ct.js';
|
|
3
6
|
import React from 'react';
|
|
4
7
|
|
|
5
8
|
type SemanticTextToken = "semantic-text-primary" | "semantic-text-secondary" | "semantic-text-tertiary" | "semantic-text-brand-primary" | "semantic-text-brand-secondary" | "semantic-text-disabled" | "semantic-text-inverse" | "semantic-text-success" | "semantic-text-error" | "semantic-text-warning" | "semantic-text-info" | "semantic-text-link" | "semantic-text-accent-red" | "semantic-text-accent-blue";
|
package/dist/tokens/index.js
CHANGED
|
@@ -14,6 +14,9 @@ var gridColumns = {
|
|
|
14
14
|
// src/tokens/colors.ts
|
|
15
15
|
import { semantic } from "@x-plat/tokens-core";
|
|
16
16
|
|
|
17
|
+
// src/tokens/interface/status.ts
|
|
18
|
+
var normalizeStatus = (value) => value === "brand" ? "primary" : value;
|
|
19
|
+
|
|
17
20
|
// src/tokens/svg/action/CopyIcon.tsx
|
|
18
21
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
19
22
|
var CopyIcon = () => /* @__PURE__ */ jsxs(
|
|
@@ -5784,5 +5787,6 @@ export {
|
|
|
5784
5787
|
breakpoints,
|
|
5785
5788
|
cssVar,
|
|
5786
5789
|
gridColumns,
|
|
5790
|
+
normalizeStatus,
|
|
5787
5791
|
semantic
|
|
5788
5792
|
};
|
package/guidelines/MIGRATION.md
CHANGED
|
@@ -286,6 +286,44 @@ Dropdown · PopOver · TimePicker 가 전부 애니메이션 없이 툭 튀어
|
|
|
286
286
|
|
|
287
287
|
---
|
|
288
288
|
|
|
289
|
+
## Next.js App Router 에서 반드시 걸리는 것
|
|
290
|
+
|
|
291
|
+
**DS 는 `'use client'` 를 달고 나가지 않는다.** 컴포넌트들이 `useState` ·
|
|
292
|
+
`useEffect` · `useId` · 컨텍스트를 쓰므로 **서버 컴포넌트가 DS 를 끌어가면
|
|
293
|
+
터진다.** 버전과 무관하게 항상 그렇다.
|
|
294
|
+
|
|
295
|
+
곧장 import 하는 것은 금방 알아채지만, **진짜 어려운 것은 배럴을 타고 들어가는
|
|
296
|
+
경우다.**
|
|
297
|
+
|
|
298
|
+
```ts
|
|
299
|
+
// shared/context/index.ts — 배럴이 DS 를 재수출한다
|
|
300
|
+
export * from "./AuthContext";
|
|
301
|
+
export { SideBar } from "@x-plat/design-system"; // ← 이 한 줄이
|
|
302
|
+
|
|
303
|
+
// app/layout.tsx — 서버 컴포넌트
|
|
304
|
+
import { AuthProvider } from "@/shared/context"; // ← 여기를 터뜨린다
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
`AuthProvider` 만 가져왔는데도 배럴 전체가 평가되면서 DS 가 딸려 온다. 증상이
|
|
308
|
+
"DS 를 쓴 화면이 안 된다" 가 아니라 **"그 배럴을 쓰는 서버 컴포넌트가 안 된다"**
|
|
309
|
+
로 나타나서 원인을 찾기 어렵다.
|
|
310
|
+
|
|
311
|
+
**해결은 DS 를 감싸는 파일 한 곳을 두고 거기에만 `'use client'` 를 다는 것이다.**
|
|
312
|
+
|
|
313
|
+
```ts
|
|
314
|
+
// shared/ui/ds.ts
|
|
315
|
+
"use client";
|
|
316
|
+
export { Button, Input, Select, SideBar /* 쓰는 것만 */ } from "@x-plat/design-system";
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
앱은 이 파일에서만 가져다 쓴다. `agent-admin` 과 `xplat-template` 이 둘 다
|
|
320
|
+
이 방식으로 해결했다.
|
|
321
|
+
|
|
322
|
+
> 일반 배럴(`shared/context` 같은 것)에서 DS 를 재수출하지 말 것. 그 배럴을
|
|
323
|
+
> 쓰는 서버 컴포넌트가 전부 클라이언트로 끌려간다.
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
289
327
|
## 실제 이관에서 걸린 것 / 안 걸린 것
|
|
290
328
|
|
|
291
329
|
`xplat-shop-templat` (pnpm 모노레포, 워크스페이스 4개) 을 **0.6.1 → 0.12.0** 으로
|
|
@@ -308,7 +346,18 @@ Dropdown · PopOver · TimePicker 가 전부 애니메이션 없이 툭 튀어
|
|
|
308
346
|
|
|
309
347
|
---
|
|
310
348
|
|
|
311
|
-
##
|
|
349
|
+
## 확인 상태
|
|
350
|
+
|
|
351
|
+
이 저장소를 만지는 에이전트 세션들에는 브라우저가 없다. 빌드·타입·lint·
|
|
352
|
+
정적 검사까지는 돌지만 **눈으로 본 것과 추론한 것은 다르다.** 어느 쪽인지
|
|
353
|
+
적어 둔다.
|
|
354
|
+
|
|
355
|
+
| | 상태 |
|
|
356
|
+
|---|---|
|
|
357
|
+
| 오버레이 열림/닫힘 애니메이션 (0.14.2) | **사람이 화면에서 확인함** — 셀렉트가 부드럽게 내려온다 |
|
|
358
|
+
| `Layout` 타입 (0.14.2) | 소비자 흉내 프로젝트로 타입 검사 통과 |
|
|
359
|
+
| `ToggleChip` 커서·초점 테두리 | 마크업·CSS 만 확인. 눌러 본 사람 없음 |
|
|
360
|
+
| Editor | 아래 |
|
|
312
361
|
|
|
313
362
|
**Editor 는 브라우저에서 검증되지 않았다.** `contentEditable`·`execCommand`·IME 는
|
|
314
363
|
자동 테스트로 흉내 낼 수 없다. 특히 아래 넷은 직접 눌러 봐야 한다.
|