junome

JunDS

웹 바닐라 Custom Elements 와 iOS 로 다시 짓는 디자인 시스템. 아래 목록과 상태는 라이브러리 원장(ledger)에서 빌드 타임에 파생됩니다 — 문서가 곧 라이브러리의 실상태입니다.

468 COMPONENTS445 WEB DONE142 iOS DONELEDGER 2026-07-27

01

Core13

토큰을 화면 골격으로 번역하는 프레임워크 코어.

02

Layout12

스택·그리드·페이지 — 배치를 담당하는 층.

03

Primitives51

버튼·입력·뱃지 — 더 쪼갤 수 없는 기본 단위.

Button웹 완료iOS 완료<jd-button>Input웹 완료iOS 완료<jd-text-field>Textarea웹 완료iOS 완료<jd-textarea>Badge웹 완료iOS 완료<jd-badge>Avatar웹 완료iOS 완료<jd-avatar>Spinner웹 완료iOS 완료<jd-spinner>Divider웹 완료iOS 완료<jd-divider>Toggle웹 완료iOS 완료<jd-toggle>Checkbox웹 완료iOS 완료<jd-checkbox>RadioGroup웹 완료iOS 완료<jd-radio-group>Label웹 완료iOS 완료<jd-label>Tag웹 완료iOS 완료<jd-tag>IconButton웹 완료iOS 완료<jd-icon-button>Kbd웹 완료iOS 완료<jd-kbd>Portal웹 완료<jd-portal>VisuallyHidden웹 완료iOS 완료<jd-visually-hidden>Slider웹 완료iOS 완료<jd-slider>NumberInput웹 완료iOS 완료<jd-number-input>CopyButton웹 완료iOS 완료<jd-copy-button>StatusDot웹 완료iOS 완료<jd-status-dot>FileUpload웹 완료iOS 완료<jd-file-upload>PasswordInput웹 완료iOS 완료<jd-password-input>PinInput웹 완료iOS 완료<jd-pin-input>Switch웹 완료iOS 완료<jd-switch>AspectRatio웹 완료iOS 완료<jd-aspect-ratio-box>ScrollArea웹 완료iOS 완료<jd-scroll-area>StarRating웹 완료iOS 완료<jd-star-rating>BackTop웹 완료iOS 완료<jd-back-top>ErrorBoundary웹 완료<jd-error-boundary>BatteryIndicator웹 완료iOS 완료<jd-battery-indicator>SeverityBadge웹 완료iOS 완료<jd-severity-badge>OTPInput웹 완료iOS 완료<jd-otp-input>CurrencyInput웹 완료iOS 완료<jd-currency-input>PhoneInput웹 완료iOS 완료<jd-phone-input>NumberFormatter웹 완료iOS 완료<jd-number-formatter>AnnouncerProvider웹 완료iOS 완료<jd-announcer>FocusGuard웹 완료<jd-focus-guard>RangeSlider웹 완료iOS 완료<jd-range-slider>Link웹 완료iOS 완료<jd-link>Image웹 완료iOS 완료<jd-image>Code웹 완료iOS 완료<jd-code>Mark웹 완료iOS 완료<jd-mark>Icon웹 완료iOS 완료<jd-icon>BookmarkButton웹 완료iOS 완료<jd-bookmark-button>LikeButton웹 완료iOS 완료<jd-like-button>FollowButton웹 완료iOS 완료<jd-follow-button>MentionChip웹 완료iOS 완료<jd-mention-chip>Hashtag웹 완료iOS 완료<jd-hashtag>Motion웹 완료iOS 완료<jd-motion>Highlight웹 완료iOS 완료<jd-highlight>KeyCap웹 완료iOS 완료<jd-key-cap>
04

Composites201

모달·탭·테이블 — 상태를 품은 조합 컴포넌트.

Accordion웹 완료iOS 예정<jd-accordion>ActionSheet웹 완료iOS 완료<jd-action-sheet>AddressInput웹 완료iOS 예정<jd-address-input>Affix웹 완료iOS 예정<jd-affix>Alert웹 완료iOS 완료<jd-alert>AlertDialog웹 완료iOS 완료<jd-alert-dialog>AnimatedCounter웹 완료iOS 예정<jd-animated-counter>AudioPlayer웹 완료iOS 예정<jd-audio-player>AutoComplete웹 완료iOS 예정<jd-auto-complete>AutoHideHeader웹 완료iOS 예정<jd-auto-hide-header>AutoPlayDemo웹 완료iOS 예정<jd-auto-play-demo>AvatarStack웹 완료iOS 예정<jd-avatar-stack>Banner웹 완료iOS 완료<jd-banner>BentoGrid웹 완료iOS 예정<jd-bento-grid>BookCard웹 완료iOS 예정<jd-book-card>BottomSheet웹 완료iOS 완료<jd-bottom-sheet>Breadcrumb웹 완료iOS 예정<jd-breadcrumb>ButtonGroup웹 완료iOS 예정<jd-button-group>Callout웹 완료iOS 완료<jd-callout>Card웹 완료iOS 예정<jd-card>Carousel웹 완료iOS 예정<jd-carousel>ChatBubble웹 완료iOS 예정<jd-chat-bubble>CodeEditor웹 완료iOS 예정<jd-code-editor>Collapsible웹 완료iOS 예정<jd-collapsible>CollectionView웹 완료iOS 예정<jd-collection-view>ColorPicker웹 완료iOS 예정<jd-color-picker>ColorSwatch웹 완료iOS 예정<jd-color-swatch>Combobox웹 완료iOS 예정<jd-combobox>CompareSlider웹 완료iOS 예정<jd-compare-slider>ComparisonGrid웹 완료iOS 예정<jd-comparison-grid>ComponentShowcase웹 완료iOS 예정<jd-component-showcase>Confetti웹 완료iOS 예정<jd-confetti>ConfirmDialog웹 완료iOS 완료<jd-alert-dialog>ContextMenu웹 완료iOS 예정<jd-context-menu>CopyBlock웹 완료iOS 예정<jd-copy-block>CronExpression웹 완료iOS 예정<jd-cron-expression>DataGrid웹 완료iOS 예정<jd-data-grid>DateInput웹 완료iOS 예정<jd-date-input>DateRangeFilter웹 완료iOS 예정<jd-date-range-filter>DateRangePicker웹 완료iOS 예정<jd-date-range-picker>Descriptions웹 완료iOS 예정<jd-descriptions>DetailPanel웹 완료iOS 예정<jd-detail-panel>Disclosure웹 완료iOS 예정<jd-disclosure>DiffViewer웹 완료iOS 예정<jd-diff-viewer>Dock웹 완료iOS 예정<jd-dock-item>Drawer웹 완료iOS 완료<jd-drawer>Dropdown웹 완료iOS 예정<jd-dropdown>DsToastProvider웹 완료iOS 완료<jd-toast>EmojiPicker웹 완료iOS 예정<jd-emoji-picker>EmptyState웹 완료iOS 완료<jd-empty-state>FilterButtonGroup웹 완료iOS 예정<jd-filter-button-group>FloatingActionButton웹 완료iOS 예정<jd-floating-action-button>FormField웹 완료iOS 예정<jd-form-field>FunnelChart웹 완료iOS 예정<jd-funnel-chart>GaugeChart웹 완료iOS 예정<jd-gauge-chart>Globe웹 완료iOS 예정<jd-globe>GradientBorder웹 완료iOS 예정<jd-gradient-border>Heatmap웹 완료iOS 예정<jd-heatmap>HoverCard웹 완료iOS 예정<jd-hover-card>ImageCropper웹 완료iOS 예정<jd-image-cropper>ImageLightbox웹 완료iOS 예정<jd-image-lightbox>GlobalImageLightbox웹 예정iOS 예정CE 미제공 · 내부화InlineEdit웹 완료iOS 예정<jd-inline-edit>JSONViewer웹 완료iOS 예정<jd-json-viewer>KeyValueGrid웹 완료iOS 예정<jd-key-value-grid>LoadingOverlay웹 완료iOS 예정<jd-loading-overlay>MarkdownViewer웹 완료iOS 예정<jd-markdown-viewer>Marquee웹 완료iOS 예정<jd-marquee>Mention웹 완료iOS 예정<jd-mention>Menubar웹 완료iOS 예정<jd-menubar>MetricCard웹 완료iOS 예정<jd-metric-card>MiniChart웹 완료iOS 예정<jd-mini-chart>Modal웹 완료iOS 완료<jd-modal>MultiSelect웹 완료iOS 예정<jd-multi-select>NavigationMenu웹 완료iOS 예정<jd-navigation-menu>Notification웹 완료iOS 완료<jd-notification>Onboarding웹 완료iOS 예정<jd-onboarding>Pagination웹 완료iOS 예정<jd-pagination>Popover웹 완료iOS 예정<jd-popover>ProgressBar웹 완료iOS 예정<jd-progress-bar>ProgressSteps웹 완료iOS 예정<jd-progress-steps>ProgressRing웹 완료iOS 예정<jd-progress-ring>PullToRefresh웹 완료iOS 예정<jd-pull-to-refresh>QRCode웹 완료iOS 예정<jd-qr-code>Rating웹 완료iOS 예정<jd-rating>ReadingTime웹 완료iOS 예정<jd-reading-time>Resizable웹 완료iOS 예정<jd-resizable>Result웹 완료iOS 완료<jd-result>ScrollSpy웹 완료iOS 예정<jd-scroll-spy>SearchInput웹 완료iOS 예정<jd-search-input>SecurityBadge웹 완료iOS 예정<jd-security-badge>SegmentedControl웹 완료iOS 예정<jd-segmented-control>Select웹 완료iOS 예정<jd-select>Sheet웹 완료iOS 완료CE 미제공 · 내부화SignaturePad웹 완료iOS 예정<jd-signature-pad>Skeleton웹 완료iOS 예정<jd-skeleton>SkeletonPreset웹 완료iOS 예정<jd-skeleton-preset>SplitPane웹 완료iOS 예정<jd-split-pane>SpoilerBlock웹 완료iOS 예정<jd-spoiler-block>Spotlight웹 완료iOS 예정<jd-spotlight>SpotlightCard웹 완료iOS 예정<jd-spotlight-card>StatCard웹 완료iOS 예정<jd-stat-card>Stepper웹 완료iOS 예정<jd-stepper>Sticky웹 완료iOS 예정<jd-sticky>SwipeAction웹 완료iOS 예정<jd-swipe-action>Table웹 완료iOS 예정<jd-table>Tabs웹 완료iOS 예정<jd-tabs>TagInput웹 완료iOS 예정<jd-tag-input>TimePicker웹 완료iOS 예정<jd-time-picker>Timeline웹 완료iOS 예정<jd-timeline>Tooltip웹 완료iOS 예정<jd-tooltip>Transfer웹 완료iOS 예정<jd-transfer>TreeNav웹 완료iOS 예정<jd-tree-nav>TreeView웹 완료iOS 예정<jd-tree-view>TreemapChart웹 완료iOS 예정<jd-treemap-chart>TrustIndicator웹 완료iOS 예정<jd-trust-indicator>Typewriter웹 완료iOS 예정<jd-typewriter>VideoPlayer웹 완료iOS 예정<jd-video-player>VirtualScroll웹 완료iOS 예정<jd-virtual-scroll>Watermark웹 완료iOS 예정<jd-watermark>Countdown웹 완료iOS 예정<jd-countdown>Clock웹 완료iOS 예정<jd-clock>PageHeader웹 완료iOS 예정<jd-page-header-bar>AnnouncementBar웹 완료iOS 예정<jd-announcement-bar>ThinkingIndicator웹 완료iOS 예정<jd-thinking-indicator>PricingTable웹 완료iOS 예정<jd-pricing-table>CookieConsent웹 완료iOS 예정<jd-cookie-consent>MonthPicker웹 완료iOS 예정<jd-month-picker>YearPicker웹 완료iOS 예정<jd-year-picker>Snackbar웹 완료iOS 완료<jd-snackbar>Stat웹 완료iOS 예정<jd-stat>Blockquote웹 완료iOS 예정<jd-blockquote>LoadingButton웹 완료iOS 예정<jd-loading-button>LoadingScreen웹 완료iOS 예정<jd-loading-screen>OfflineIndicator웹 완료iOS 예정<jd-offline-indicator>Hint웹 완료iOS 예정<jd-hint>SocialShare웹 완료iOS 예정<jd-social-share>EmojiReaction웹 완료iOS 예정<jd-emoji-reaction>OnlineStatus웹 완료iOS 예정<jd-online-status>RadioCardGroup웹 완료iOS 예정<jd-radio-card-group>CheckboxCardGroup웹 완료iOS 예정<jd-checkbox-card-group>TextareaAutosize웹 완료iOS 예정<jd-textarea-autosize>PasswordStrength웹 완료iOS 예정<jd-password-strength>ScrollProgress웹 완료iOS 예정<jd-scroll-progress>TableOfContents웹 완료iOS 예정<jd-table-of-contents>TocHeading웹 예정iOS 예정CE 미제공 · 내부화LineChart웹 완료iOS 예정<jd-line-chart>BarChart웹 완료iOS 예정<jd-bar-chart>PieChart웹 완료iOS 예정<jd-pie-chart>TestimonialCard웹 완료iOS 예정<jd-testimonial-card>LogoCloud웹 완료iOS 예정<jd-logo-cloud>Newsletter웹 완료iOS 예정<jd-newsletter>CTASection웹 완료iOS 예정<jd-cta-section>ProductCard웹 완료iOS 예정<jd-product-card>CartItem웹 완료iOS 예정<jd-cart-item>QuantitySelector웹 완료iOS 예정<jd-quantity-selector>PriceDisplay웹 완료iOS 예정<jd-price-display>AreaChart웹 완료iOS 예정<jd-area-chart>RadarChart웹 완료iOS 예정<jd-radar-chart>ScatterPlot웹 완료iOS 예정<jd-scatter-plot>SankeyDiagram웹 완료iOS 예정<jd-sankey-diagram>BookShelf웹 완료iOS 예정<jd-book-shelf>ReadingProgress웹 완료iOS 예정<jd-reading-progress>ChapterList웹 완료iOS 예정<jd-chapter-list>ReadingStats웹 완료iOS 예정<jd-reading-stats>BookCover웹 완료iOS 예정<jd-book-cover>ReadingGoal웹 완료iOS 예정<jd-reading-goal>AnnotationNote웹 완료iOS 예정<jd-annotation-note>BookRating웹 완료iOS 예정<jd-book-rating>PhotoCard웹 완료iOS 예정<jd-photo-card>PhotoGrid웹 완료iOS 예정<jd-photo-grid>PhotoLightbox웹 완료iOS 예정<jd-photo-lightbox>PhotoCarousel웹 완료iOS 예정<jd-photo-carousel>ImageCompare웹 완료iOS 예정<jd-image-compare>ImageZoom웹 완료iOS 예정<jd-image-zoom>ExifPanel웹 완료iOS 예정<jd-exif-panel>PhotoFilters웹 완료iOS 예정<jd-photo-filters>PhotoUploader웹 완료iOS 예정<jd-photo-uploader>ImageWithFallback웹 완료iOS 예정<jd-image-with-fallback>PostCard웹 완료iOS 예정<jd-post-card>CommentThread웹 완료iOS 예정<jd-comment-thread>ProfileHeader웹 완료iOS 예정<jd-profile-header>StoryCircle웹 완료iOS 예정<jd-story-circle>ReactionPicker웹 완료iOS 예정<jd-reaction-picker>PollCard웹 완료iOS 예정<jd-poll-card>BrandSwitcher웹 완료iOS 예정<jd-brand-switcher>SearchBar웹 완료iOS 예정<jd-search-bar>SeoHead웹 예정iOS 예정CE 미제공 · 내부화Waveform웹 예정iOS 예정CE 미제공 · 내부화AlbumArt웹 예정iOS 예정CE 미제공 · 내부화NowPlayingBar웹 예정iOS 예정CE 미제공 · 내부화DocPager웹 예정iOS 예정CE 미제공 · 내부화ProjectCard웹 예정iOS 예정CE 미제공 · 내부화ScreenshotGrid웹 예정iOS 예정CE 미제공 · 내부화Lyrics웹 예정iOS 예정CE 미제공 · 내부화NowPlayingFull웹 예정iOS 예정CE 미제공 · 내부화RelatedPosts웹 예정iOS 예정CE 미제공 · 내부화DocHero웹 예정iOS 예정CE 미제공 · 내부화DocLinks웹 예정iOS 예정CE 미제공 · 내부화GlobeWireframe웹 예정iOS 예정CE 미제공 · 내부화BarList웹 예정iOS 예정CE 미제공 · 내부화
05

Patterns43

데이터테이블·칸반·폼위저드 — 화면 단위 패턴.

DataTable웹 완료iOS 예정<jd-data-table>FilterBar웹 완료iOS 예정<jd-filter-bar>CommandPalette웹 완료iOS 예정<jd-command-palette>DsSidebarProvider웹 완료iOS 예정<jd-sidebar-provider>DsSidebar웹 완료iOS 예정<jd-sidebar>SidebarLink웹 완료iOS 예정<jd-sidebar-link>SidebarSection웹 완료iOS 예정<jd-sidebar-section>DsCalendar웹 완료iOS 예정<jd-calendar>Kanban웹 완료iOS 예정<jd-kanban>StatsGrid웹 완료iOS 예정<jd-stats-grid>ActionBar웹 완료iOS 예정<jd-action-bar>FormBuilder웹 완료iOS 예정<jd-form-builder>InfiniteList웹 완료iOS 예정<jd-infinite-list>VirtualList웹 완료iOS 예정<jd-virtual-list>ChartCard웹 완료iOS 예정<jd-chart-card>NotificationCenter웹 완료iOS 예정<jd-notification-center>SortableList웹 완료iOS 예정<jd-sortable-list>RichTextEditor웹 완료iOS 예정<jd-rich-text-editor>SecurityChecklist웹 완료iOS 예정<jd-security-checklist>LoginForm웹 완료iOS 예정<jd-login-form>Tour웹 완료iOS 예정<jd-tour>FlowDiagram웹 완료iOS 예정<jd-flow-diagram>Starfield웹 완료iOS 예정<jd-starfield>MasonryGrid웹 완료iOS 예정<jd-masonry-grid>FormWizard웹 완료iOS 예정<jd-form-wizard>FormArray웹 완료iOS 예정<jd-form-array>Form웹 완료iOS 예정<jd-form>AuthLayout웹 완료iOS 예정<jd-auth-layout>SettingsLayout웹 완료iOS 예정<jd-settings-layout>PricingPage웹 완료iOS 예정<jd-pricing-page>GanttChart웹 완료iOS 예정<jd-gantt-chart>HeroSection웹 완료iOS 예정<jd-hero-section>FeatureGrid웹 완료iOS 예정<jd-feature-grid>FAQ웹 완료iOS 예정<jd-faq>BlogPost웹 완료iOS 예정<jd-blog-post>BookReader웹 완료iOS 예정<jd-book-reader>SocialFeed웹 완료iOS 예정<jd-social-feed>PhotoAlbum웹 완료iOS 예정<jd-photo-album>ChatThread웹 완료iOS 예정<jd-chat-thread>CalendarMonth웹 완료iOS 예정<jd-calendar-month>EmailInbox웹 완료iOS 예정<jd-email-inbox>ForumThread웹 완료iOS 예정<jd-forum-thread>OnboardingTour웹 완료iOS 예정<jd-onboarding-tour>
06

Finance86

시세·차트·호가 — 금융 도메인 전용 세트.

AlertButton웹 완료iOS 예정<jd-alert-button>AlertHeaderButton웹 완료iOS 예정<jd-alert-header-button>AlertManager웹 완료iOS 예정<jd-alert-manager>AlertSheet웹 완료iOS 예정<jd-alert-sheet>AppHeader웹 완료iOS 예정<jd-app-header>AppIcon웹 완료iOS 예정<jd-app-icon>AreaChart웹 완료iOS 예정<jd-area-chart>BmSwitch웹 완료iOS 예정<jd-bm-switch>BottomNav웹 완료iOS 예정<jd-bottom-nav>CandleChart웹 완료iOS 예정<jd-candle-chart>ChartRangePicker웹 완료iOS 예정<jd-chart-range-picker>CommandPaletteHost웹 완료iOS 예정<jd-command-palette-host>ConsensusScreener웹 완료iOS 예정<jd-consensus-screener>BacktestRunner웹 완료iOS 예정<jd-backtest-runner>DisclosureToneBadge웹 완료iOS 완료<jd-disclosure-tone-badge>PortfolioCouncil웹 완료iOS 예정<jd-portfolio-council>ThemeNewsSummary웹 완료iOS 예정<jd-theme-news-summary>TradeJournal웹 완료iOS 예정<jd-trade-journal>DailyThemesCalendar웹 완료iOS 예정<jd-daily-themes-calendar>DayDetailDrawer웹 완료iOS 예정<jd-day-detail-drawer>DisclosuresClient웹 완료iOS 예정<jd-disclosures>DonutChart웹 완료iOS 예정<jd-donut-chart>FXBoard웹 완료iOS 예정<jd-fx-board>FZoneCard웹 완료iOS 예정<jd-fzone-card>FZoneHelpModal웹 완료iOS 예정<jd-fzone-help-modal>HoldingFormModal웹 완료iOS 예정<jd-holding-form-modal>InvestorCouncil웹 완료iOS 예정<jd-investor-council>InvestorFlowChart웹 완료iOS 예정<jd-investor-flow-chart>InvestorRanking웹 완료iOS 예정<jd-investor-ranking>KeyValueGridClient웹 완료iOS 예정<jd-key-value-grid>LiveInvestorBoard웹 완료iOS 예정<jd-live-investor-board>LivePctBadge웹 완료iOS 완료<jd-live-pct-badge>LivePrice웹 완료iOS 완료<jd-live-price>LiveStatusDot웹 완료iOS 완료<jd-live-status-dot>LivePriceText웹 완료iOS 완료<jd-live-price-text>LivePctText웹 완료iOS 완료<jd-live-pct-text>LiveStackedCell웹 완료iOS 완료<jd-live-stacked-cell>GlobalKisSeeder웹 완료iOS 예정<jd-global-kis-seeder>LiveIndexCard웹 완료iOS 예정<jd-live-index-card>LiveMarketStats웹 완료iOS 예정<jd-live-market-stats>LiveSectorStrength웹 완료iOS 예정<jd-live-sector-strength>LiveInvestorFlowCards웹 완료iOS 예정<jd-live-investor-flow-cards>LiveMicroKpiRow웹 완료iOS 완료<jd-live-micro-kpi-row>LiveOrderBook웹 완료iOS 예정<jd-live-order-book>LiveStockHeroChart웹 완료iOS 예정<jd-live-stock-hero-chart>LiveStockTable웹 완료iOS 예정<jd-live-stock-table>LiveTicker웹 완료iOS 예정<jd-live-ticker>LiveTopMovers웹 완료iOS 예정<jd-live-top-movers>Logo웹 완료iOS 예정<jd-logo>MarketAlertBanner웹 완료iOS 예정<jd-market-alert-banner>MarketHeaderBadge웹 완료iOS 예정<jd-market-header-badge>MarketHeatmap웹 완료iOS 예정<jd-market-heatmap>MarketIndexChart웹 완료iOS 예정<jd-market-index-chart>ClosePicksCard웹 완료iOS 예정<jd-close-picks-card>LimitHitsCard웹 완료iOS 예정<jd-limit-hits-card>OpenPicksCard웹 완료iOS 예정<jd-open-picks-card>MiniCandle웹 완료iOS 예정<jd-mini-candle>MultiLineChart웹 완료iOS 예정<jd-multi-line-chart>MyPositionPanel웹 완료iOS 예정<jd-my-position-panel>NewsList웹 완료iOS 예정<jd-news-list>PageEmptyState웹 완료iOS 예정<jd-page-empty-state>PageShell웹 완료iOS 예정<jd-page-shell>PortfolioDayDetailModal웹 완료iOS 예정<jd-portfolio-day-detail-modal>PortfolioHeatmap웹 완료iOS 예정<jd-portfolio-heatmap>PositionBar웹 완료iOS 완료<jd-position-bar>HotPctChip웹 완료iOS 완료<jd-hot-pct-chip>PriceBadge웹 완료iOS 완료<jd-price-badge>QuarterBarChart웹 완료iOS 예정<jd-quarter-bar-chart>RealCandleChart웹 완료iOS 예정<jd-real-candle-chart>RealQuoteHeader웹 완료iOS 예정<jd-real-quote-header>RecentVisitTracker웹 완료iOS 예정<jd-recent-visit-tracker>RecentlyViewed웹 완료iOS 예정<jd-recently-viewed>SearchBox웹 완료iOS 예정<jd-search-box>SegmentedPill웹 완료iOS 예정<jd-segmented-pill>Sidebar웹 완료iOS 예정<jd-sidebar>Sparkline웹 완료iOS 완료<jd-sparkline>StarButton웹 완료iOS 예정<jd-star-button>StockTopBar웹 완료iOS 예정<jd-stock-top-bar>StrategyPanel웹 완료iOS 예정<jd-strategy-panel>ThemeCard웹 완료iOS 예정<jd-theme-card>ThemePillCard웹 완료iOS 예정<jd-theme-pill-card>ThemeDrillDown웹 완료iOS 예정<jd-theme-drill-down>ThemeTagList웹 완료iOS 완료<jd-theme-tag-list>ThemeToggle웹 완료iOS 예정<jd-theme-toggle>TopBar웹 완료iOS 예정<jd-top-bar>WatchlistWidget웹 완료iOS 예정<jd-watchlist-widget>
07

Hooks62

상태·이벤트·환경 감지를 캡슐화한 훅/Behavior.

useBreakpoint웹 완료iOS 완료CE 미제공 · 내부화useBreakpointValue웹 완료iOS 완료CE 미제공 · 내부화useClickOutside웹 완료CE 미제공 · 내부화useClipboard웹 완료iOS 완료CE 미제공 · 내부화useCopyToClipboard웹 완료iOS 완료CE 미제공 · 내부화useCountUp웹 완료iOS 완료CE 미제공 · 내부화useDebounce웹 완료iOS 완료CE 미제공 · 내부화useDisclosure웹 완료iOS 예정CE 미제공 · 내부화useElementSize웹 완료iOS 완료CE 미제공 · 내부화useEventListener웹 완료iOS 완료CE 미제공 · 내부화useFocusMode웹 완료iOS 완료CE 미제공 · 내부화useForm웹 완료iOS 완료CE 미제공 · 내부화useIdle웹 완료iOS 완료CE 미제공 · 내부화useIntersectionObserver웹 완료iOS 완료CE 미제공 · 내부화useInterval웹 완료iOS 완료CE 미제공 · 내부화useKeyboard웹 완료iOS 완료CE 미제공 · 내부화useLocalStorage웹 완료iOS 완료CE 미제공 · 내부화useLongPress웹 완료iOS 완료CE 미제공 · 내부화useMediaQuery웹 완료iOS 완료CE 미제공 · 내부화useMounted웹 완료iOS 예정CE 미제공 · 내부화useNetworkStatus웹 완료iOS 완료CE 미제공 · 내부화usePanelResize웹 완료iOS 완료CE 미제공 · 내부화usePrefersColorScheme웹 완료iOS 완료CE 미제공 · 내부화usePrevious웹 완료iOS 예정CE 미제공 · 내부화useReducedMotion웹 완료iOS 완료CE 미제공 · 내부화useScrollSpy웹 완료iOS 완료CE 미제공 · 내부화useSteps웹 완료iOS 예정CE 미제공 · 내부화useThrottle웹 완료iOS 완료CE 미제공 · 내부화useToggle웹 완료iOS 예정CE 미제공 · 내부화useWindowScroll웹 완료iOS 완료CE 미제공 · 내부화useHotkeys웹 완료iOS 완료CE 미제공 · 내부화useFocusTrap웹 완료CE 미제공 · 내부화useScrollLock웹 완료iOS 완료CE 미제공 · 내부화useDocumentTitle웹 완료iOS 완료CE 미제공 · 내부화useFavicon웹 완료CE 미제공 · 내부화useFullscreen웹 완료iOS 완료CE 미제공 · 내부화useResizeObserver웹 완료iOS 완료CE 미제공 · 내부화useTimeout웹 완료iOS 완료CE 미제공 · 내부화useAsync웹 완료iOS 예정CE 미제공 · 내부화useIsomorphicLayoutEffect웹 완료iOS 예정CE 미제공 · 내부화useUpdateEffect웹 완료iOS 예정CE 미제공 · 내부화useGeolocation웹 완료iOS 완료CE 미제공 · 내부화useSessionStorage웹 완료iOS 완료CE 미제공 · 내부화useCookie웹 완료iOS 완료CE 미제공 · 내부화useHover웹 완료iOS 완료CE 미제공 · 내부화useFocusVisible웹 완료CE 미제공 · 내부화useInfiniteFeed웹 완료iOS 완료CE 미제공 · 내부화useReadingProgress웹 완료iOS 완료CE 미제공 · 내부화useImagePreload웹 완료iOS 완료CE 미제공 · 내부화useResource웹 완료iOS 완료CE 미제공 · 내부화useMutation웹 완료iOS 완료CE 미제공 · 내부화useOptimisticState웹 완료iOS 예정CE 미제공 · 내부화useAnimationFrame웹 완료iOS 완료CE 미제공 · 내부화useKeyboardShortcut웹 완료iOS 완료CE 미제공 · 내부화useWindowSize웹 완료iOS 완료CE 미제공 · 내부화useCodeCopy웹 예정iOS 예정CE 미제공 · 내부화useJsonLd웹 예정iOS 예정CE 미제공 · 내부화useRevealOnScroll웹 예정iOS 예정CE 미제공 · 내부화useDominantColor웹 예정iOS 예정CE 미제공 · 내부화useAudioPlayer웹 예정iOS 예정CE 미제공 · 내부화useSeo웹 예정iOS 예정CE 미제공 · 내부화useUrlFilters웹 예정iOS 예정CE 미제공 · 내부화

기반 요소19

위 목록은 원장 468행에서 파생됩니다 — 웹 CE와 iOS 컴포넌트가 짝을 이루는 것들입니다. 토큰·배치 컨테이너·측정 규칙·모디파이어는 그 짝이 아니라서 원장에 행이 없고, 그래서 카탈로그에 나타나지 않습니다. 그런데 468종을 한꺼번에 바꾸는 것은 대개 이쪽입니다.

배치 (Layout)

UIKit에서 화면을 짜는 일 자체를 줄인 층. 웹은 CSS가 이미 하는 일이라 원장에 대응 행이 없고, 그래서 카탈로그에 안 나타난다 — 실제로는 이번에 가장 크게 바뀐 부분이다.

JdVStack · JdHStack · JdFlex

iOSDEC-042 · DEC-043

자식을 블록으로 적으면 트리와 제약이 한 표현식으로 완성되는 선언형 생성자.

이전에는 뷰마다 생성 → addSubview → 제약 세 단계를 손으로 반복했고, 순서를 어기면 preconditionFailure로 앱이 죽었다. 빌더가 자식을 넣으므로 그 함정이 문법적으로 사라진다.

packages/ios/Sources/JunDSUIKit/Layout/JdViewBuilder.swift

JdColumnsView

iOSDEC-042 · DEC-043

모든 행을 한 번에 측정해 열 폭을 공유하는 격자. fixed · fit(max:) · flex(weight:).

UIStackView의 행들은 서로를 몰라서 1행의 종목명 폭과 2행의 폭이 각자 정해진다 — 표가 어긋난다. 해결책이 여태 “UICollectionViewCompositionalLayout을 직접 세우기”였다.

packages/ios/Sources/JunDSUIKit/Layout/JdColumnsView.swift

JdWrapView

iOSDEC-041

줄바꿈 흐름 컨테이너. 고유 폭 흐름(칩)과 균등 분할 격자(KPI 셀) 두 모드.

UIStackView는 줄바꿈을 못 한다. SwiftUI엔 JdFlowLayout이 있었지만 UIKit엔 대응물이 없어 웹에서 한 줄이던 배치가 iOS에서는 컬렉션 뷰 한 채였다.

packages/ios/Sources/JunDSUIKit/Layout/JdWrapView.swift

JdAdaptiveStackView

iOSDEC-042

폭이 임계값 미만이면 축을 뒤집는 스택 (웹 미디어쿼리 대응).

layoutSubviews에서 axis를 잘못 쓰면 레이아웃 루프가 생긴다. 판정을 한 타입에 가두고 값이 실제로 바뀔 때만 쓴다. 폭 0(첫 프레임)은 좁다고 판정하지 않는다.

packages/ios/Sources/JunDSUIKit/Layout/JdViewBuilder.swift

JdMeasure.flowSize

iOSDEC-047

흐름 배치 전용 측정 — 자연 폭으로 먼저 재고, 컨테이너보다 넓을 때만 폭을 강제한다.

격자는 열 폭을 강제하는 것이 맞지만 흐름에서 그러면 칩마다 컨테이너 폭을 요구해 한 줄에 하나씩 놓인다. 게다가 .greatestFiniteMagnitude 는 유한해서(isFinite==true) "무제한" 센티널로 쓰면 "폭 1.8e308으로 강제"가 된다 — 태그 칩 8개가 폭 900에서도 8줄로 깔렸다.

packages/ios/Sources/JunDSUIKit/Layout/JdMeasure.swift

JdMeasure

iOSDEC-046

자식 측정의 단일 규칙 — systemLayoutSizeFitting → sizeThatFits → intrinsicContentSize 순.

UIView.sizeThatFits의 기본 구현은 bounds(=0)를 돌려주고, 내부 제약으로 크기가 정해지는 컨테이너는 고유 크기가 없다. 두 API만 묻던 코드가 KPI 카드를 0높이로 접어 화면이 비었다 — 테스트 737개가 통과하는 상태에서 시뮬레이터로 잡았다.

packages/ios/Sources/JunDSUIKit/Layout/JdMeasure.swift

JdAlign · JdJustify · JdEdge

iOSDEC-043

정렬·분배·여백 어휘. 웹 align-items / justify-content 값 집합과 동일.

배치 표면이 UIStackView.Alignment를 그대로 노출하면 플랫폼 타입이 소비자 코드로 새고, 같은 개념을 웹은 stretch·iOS는 .fill로 불러 3플랫폼 문서가 갈라진다.

packages/ios/Sources/JunDSCore/JdAlign.swift

시각·촉감 (Elevation · Motion)

“컴포넌트가 몇 개인가”로는 보이지 않는 층. 같은 컴포넌트가 눌리고 떠 보이게 만드는 공용 규칙이다.

JdElevation

iOSDEC-039

토큰 그림자를 겹 단위로 적용하는 모디파이어 (다크는 헤어라인 링 + 주변광).

그림자 토큰이 2겹이 된 뒤로 각 컴포넌트가 첫 장만 꺼내 쓰고 있었다 — 라이트에서 주변광을 버리고 다크에서는 링을 그림자로 오해해 아무것도 그리지 않는다. 8곳을 이 렌더러로 이전했다.

packages/ios/Sources/JunDSSwiftUI/Bridge/JdElevation.swift

JdPressable · JdMotion 프리셋

iOSDEC-039

프레스 스케일 + 스프링. Reduce Motion은 JdMotion 단일 진입점을 경유한다.

SwiftUI 53종 중 움직임을 가진 것이 14종뿐이었고 버튼조차 배경색 교체만 했다. 손가락이 픽셀을 가리는 터치에서 색 변화만으로는 “먹었다”가 전달되지 않는다.

packages/ios/Sources/JunDSSwiftUI/Bridge/JdPress.swift

JdShadowDominant

iOSDEC-039

CALayer용 — blur가 가장 큰 겹(주변광)을 고른다.

CALayer는 그림자를 한 장만 가질 수 있다. “첫 장”은 라이트에서 접지 겹, 다크에서 헤어라인 링이라 두 모드 모두 틀린 장이다.

packages/ios/Sources/JunDSCore/JdShadowDominant.swift

JdFontBridge.scaledDigitFont

iOSDEC-040

숫자만 등폭인 폰트 — 웹 font-variant-numeric: tabular-nums의 정확한 대응.

기존 scaledMonoFont는 글자까지 등폭이라 한글 라벨이 타자기처럼 보인다. 시세는 값이 갱신될 때 자리수가 바뀌어도 폭이 흔들리지 않는 것만 필요하다.

packages/ios/Sources/JunDSUIKit/Bridge/JdFontBridge.swift

finance 공통 어휘

finance 86종이 공유하는 판정·색·포맷. 웹은 33개 CSS 파일이 같은 팔레트를 각자 재선언하고 있었다.

JdTrend · JdTrendPolicy

iOSDEC-040 · DEC-041

추세 판정. 규칙이 세 개이고 그 차이가 타입이다 — live(|v|<0.005 보합) · exact(0만 보합) · gainOrEven(보합 없음).

웹에 세 규칙이 실제로 공존한다. 같은 -0.003이 실시간 배지에서는 보합, 확정 등락률 배지에서는 하락이다. 하나로 합치면 표면이 달라지므로 규칙 자체를 값으로 올렸다.

packages/ios/Sources/JunDSCore/Specs/JdFinanceSpecs.swift

JdFinanceTheme

iOSDEC-040

상승·하락·보합·라이브 색의 단일 소스 + 앱 override.

기본값은 웹과 같은 초록 상승이다. 한국 시장 관례(적상승)를 기본으로 삼지 않은 이유는 웹이 이미 초록으로 출고돼 3플랫폼 표면이 갈라지기 때문 — 전환은 앱이 한 줄로 한다.

packages/ios/Sources/JunDSCore/Specs/JdFinanceSpecs.swift

JdFinanceTheme.categoryPalette · onTint

iOSDEC-047

테마 카테고리 회전 팔레트 5종 + 틴트 위 글자색 규칙.

12~14% 틴트 배경에 원색 글자를 얹으면 대비가 무너진다(웹 실측 amber 약 1.9:1). 색상은 유지한 채 foreground 쪽으로 섞어 올리는 계산을 스펙이 소유한다 — 컴포넌트마다 다시 쓰면 반드시 어긋난다. 회전 순서도 웹과 같게 고정했다(다르면 같은 목록이 두 플랫폼에서 다른 색이 된다).

packages/ios/Sources/JunDSCore/Specs/JdFinanceChipSpecs.swift

JdFinanceFormat

iOSDEC-040

부호·소수·퍼센트·가격 포맷. 로케일은 인자로만 받는다(Locale.current를 읽지 않는다).

기기 지역 설정이 결과에 새면 스냅샷·테스트·디자인 대조가 전부 흔들린다. 웹의 프리렌더 결정성 규칙과 같은 이유가 iOS에도 그대로 산다.

packages/ios/Sources/JunDSCore/Specs/JdFinanceSpecs.swift

토큰 층 (양 플랫폼)

tokens/*.json 하나에서 CSS 변수·Swift·React TS 세 산출물이 나온다. 여기가 바뀌면 전 컴포넌트가 함께 바뀐다.

neutral 램프 11단

웹 · iOSDEC-039

다크에서 반전되는 중성 램프 — “숫자가 클수록 대비가 높다”가 두 모드에서 같다.

웹 컴포넌트 32개 파일이 Tailwind 회색을 하드코딩해 다크에서 밝은 슬래브로 뒤집혔다. 램프가 모드를 알면 컴포넌트는 모드 분기 없이 토큰 하나만 쓰면 된다.

tokens/color.json

엘리베이션 2겹

웹 · iOSDEC-039

각 단이 접지 그림자 + 주변광 그림자. 다크는 첫 겹을 헤어라인 링으로 교체.

1겹 단일 그림자는 물체가 “떠 있다”가 아니라 “얼룩이 묻었다”로 읽힌다. 다크에서 융기를 읽게 하는 것은 그림자가 아니라 윗면의 빛이다.

tokens/shadow.json

모션 5종 추가

웹 · iOSDEC-039

duration press(90ms)·snap·emphasis, easing emphasized·overshoot.

overshoot는 스위치 썸·체크 표식처럼 자리를 잡는 움직임 전용이다 — 색·투명도에 쓰면 깜빡임으로 읽힌다.

tokens/motion.json

포커스 링 단일 레시피

DEC-039

--jd-focus-ring 하나로 168개 CSS의 링 조제를 통일.

box-shadow가 아니라 outline인 이유: border-radius를 따라가고, overflow:hidden 조상 안에서도 잘리지 않는다.

packages/web/src/styles/base.css