@pmax-lt/ui-react 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +50 -0
- package/dist/components/ActiveFilters.d.ts +11 -0
- package/dist/components/AddToCartButton.d.ts +14 -0
- package/dist/components/AnnouncementBar.d.ts +10 -0
- package/dist/components/ArticleCard.d.ts +8 -0
- package/dist/components/AttributeChip.d.ts +6 -0
- package/dist/components/AttributeList.d.ts +6 -0
- package/dist/components/Breadcrumbs.d.ts +9 -0
- package/dist/components/CartButton.d.ts +5 -0
- package/dist/components/CategoryRail.d.ts +6 -0
- package/dist/components/CategoryTile.d.ts +8 -0
- package/dist/components/CollapsiblePanel.d.ts +8 -0
- package/dist/components/CompareButton.d.ts +11 -0
- package/dist/components/ContactItem.d.ts +8 -0
- package/dist/components/Drawer.d.ts +10 -0
- package/dist/components/FilterChipGroup.d.ts +14 -0
- package/dist/components/FilterPanel.d.ts +13 -0
- package/dist/components/FilterSection.d.ts +7 -0
- package/dist/components/Footer.d.ts +19 -0
- package/dist/components/FulfillmentBadges.d.ts +8 -0
- package/dist/components/FulfillmentPanel.d.ts +12 -0
- package/dist/components/HeaderShell.d.ts +16 -0
- package/dist/components/HeroCarousel.d.ts +10 -0
- package/dist/components/HeroSlide.d.ts +14 -0
- package/dist/components/LangSwitcher.d.ts +7 -0
- package/dist/components/Logo.d.ts +14 -0
- package/dist/components/MediaBanner.d.ts +12 -0
- package/dist/components/Modal.d.ts +10 -0
- package/dist/components/NavBar.d.ts +19 -0
- package/dist/components/NavItem.d.ts +10 -0
- package/dist/components/Pagination.d.ts +7 -0
- package/dist/components/Price.d.ts +11 -0
- package/dist/components/PriceRangeFilter.d.ts +8 -0
- package/dist/components/ProductCard.d.ts +26 -0
- package/dist/components/ProductCarousel.d.ts +11 -0
- package/dist/components/ProductGallery.d.ts +7 -0
- package/dist/components/ProductGrid.d.ts +9 -0
- package/dist/components/PromoCard.d.ts +9 -0
- package/dist/components/Prose.d.ts +5 -0
- package/dist/components/SectionHeader.d.ts +8 -0
- package/dist/components/SkuChip.d.ts +5 -0
- package/dist/components/SortMenu.d.ts +7 -0
- package/dist/components/SpecGrid.d.ts +6 -0
- package/dist/components/SpecItem.d.ts +7 -0
- package/dist/components/Toast.d.ts +15 -0
- package/dist/components/WishlistButton.d.ts +6 -0
- package/dist/index.d.ts +63 -0
- package/dist/index.js +6956 -0
- package/dist/index.js.map +1 -0
- package/dist/pmax-ui-react.css +2 -0
- package/dist/primitives/Accordion.d.ts +12 -0
- package/dist/primitives/Button.d.ts +28 -0
- package/dist/primitives/Checkbox.d.ts +7 -0
- package/dist/primitives/Chip.d.ts +12 -0
- package/dist/primitives/CountPill.d.ts +6 -0
- package/dist/primitives/DisclosureToggle.d.ts +7 -0
- package/dist/primitives/Divider.d.ts +6 -0
- package/dist/primitives/Icon.d.ts +19 -0
- package/dist/primitives/IconButton.d.ts +31 -0
- package/dist/primitives/Input.d.ts +15 -0
- package/dist/primitives/Overlay.d.ts +6 -0
- package/dist/primitives/RangeSlider.d.ts +10 -0
- package/dist/primitives/SearchField.d.ts +10 -0
- package/dist/primitives/Select.d.ts +12 -0
- package/dist/primitives/Skeleton.d.ts +8 -0
- package/dist/primitives/Surface.d.ts +11 -0
- package/dist/primitives/Tag.d.ts +9 -0
- package/dist/primitives/Text.d.ts +19 -0
- package/dist/tokens.css +97 -0
- package/package.json +57 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
*,:before,:after{box-sizing:border-box}body{background:var(--surface);color:var(--ink);font-family:var(--font-body);font-size:var(--t-body-size);line-height:var(--t-body-lh);margin:0}img,svg{max-width:100%;display:block}button,input,select,textarea{font:inherit;color:inherit}:root{--brand:#f1f62a;--brand-tint:#fdffad;--brand-gradient-start:#f9fe2e;--ink:#020202;--ink-soft:#1e1b18;--surface:#fcfcfc;--surface-sunk:#f7f7f7;--surface-panel:#eee;--surface-media:#e9e9e9;--border:#dedede;--text-muted:#6e6e6e;--text-faint:#a9a9a9;--price-old:var(--text-faint);--badge-bg:var(--brand);--focus-ring:var(--ink);--overlay:#02020299;--r-xs:6px;--r-md:12px;--r-lg:20px;--r-pill:999px;--page-w:1920px;--content-w:1800px;--page-gutter:60px;--tile-w:344px;--tile-h:420px;--tile-ratio:5 / 6;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:20px;--sp-6:24px;--sp-7:32px;--sp-8:40px;--sp-9:60px;--sp-10:80px;--font-display:"Archivo", "Arial Narrow", system-ui, sans-serif;--font-body:"Inter", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:"JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;--t-display-1-size:56px;--t-display-1-lh:1.05;--t-display-1-tracking:.02em;--t-display-2-size:36px;--t-display-2-lh:1.1;--t-display-2-tracking:.02em;--t-display-3-size:24px;--t-display-3-lh:1.15;--t-display-3-tracking:.01em;--t-body-size:16px;--t-body-lh:1.5;--t-body-sm-size:14px;--t-body-sm-lh:1.5;--t-label-size:12px;--t-label-lh:1.4;--t-label-tracking:.04em;--t-mono-size:13px;--t-mono-lh:1.4;--dur-fast:.15s;--dur:.2s;--ease:cubic-bezier(.2, 0, .2, 1)}@media (prefers-reduced-motion:reduce){:root{--dur-fast:0s;--dur:0s}}._base_1d84w_1{margin:0}._display1_1d84w_5{font-family:var(--font-display);font-size:var(--t-display-1-size);line-height:var(--t-display-1-lh);letter-spacing:var(--t-display-1-tracking);text-transform:uppercase;font-weight:700}._display2_1d84w_14{font-family:var(--font-display);font-size:var(--t-display-2-size);line-height:var(--t-display-2-lh);letter-spacing:var(--t-display-2-tracking);text-transform:uppercase;font-weight:600}._display3_1d84w_23{font-family:var(--font-display);font-size:var(--t-display-3-size);line-height:var(--t-display-3-lh);letter-spacing:var(--t-display-3-tracking);text-transform:uppercase;font-weight:600}._body_1d84w_32{font-family:var(--font-body);font-size:var(--t-body-size);line-height:var(--t-body-lh);font-weight:400}._bodySm_1d84w_39{font-family:var(--font-body);font-size:var(--t-body-sm-size);line-height:var(--t-body-sm-lh);font-weight:400}._label_1d84w_46{font-family:var(--font-display);font-size:var(--t-label-size);line-height:var(--t-label-lh);letter-spacing:var(--t-label-tracking);text-transform:uppercase;font-weight:600}._mono_1d84w_55{font-family:var(--font-mono);font-size:var(--t-mono-size);line-height:var(--t-mono-lh);font-weight:400}._colorInk_1d84w_62{color:var(--ink)}._colorMuted_1d84w_66{color:var(--text-muted)}._colorFaint_1d84w_70{color:var(--text-faint)}._colorBrand_1d84w_74{color:var(--ink);background:var(--brand)}._clamp_1d84w_79{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}._base_gs53c_1{justify-content:center;align-items:center;gap:var(--sp-2);border-radius:var(--r-md);font-family:var(--font-display);letter-spacing:.01em;text-transform:uppercase;cursor:pointer;transition:background-color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease), opacity var(--dur-fast) var(--ease);white-space:nowrap;border:1px solid #0000;font-weight:600;display:inline-flex}._base_gs53c_1:disabled{opacity:.5;cursor:not-allowed}._sm_gs53c_27{height:40px;padding-inline:var(--sp-5);font-size:13px}._md_gs53c_33{height:48px;padding-inline:var(--sp-6);font-size:14px}._fullWidth_gs53c_39{width:100%}._primary_gs53c_43{background:var(--brand);color:var(--ink)}._primary_gs53c_43:hover:not(:disabled){background:var(--brand-tint)}._secondary_gs53c_54{background:var(--ink);color:#fff}._secondary_gs53c_54:hover:not(:disabled){box-shadow:0 8px 24px #f1f62a73}._tertiary_gs53c_63{color:var(--ink);background:0 0;border-color:#0000}._tertiary_gs53c_63:hover:not(:disabled){background:var(--surface-panel)}._outline_gs53c_73{color:var(--ink);border-color:var(--border);background:0 0}._outline_gs53c_73:hover:not(:disabled){border-color:var(--ink)}._spinner_gs53c_83{animation:.8s linear infinite _spin_gs53c_83}@media (prefers-reduced-motion:reduce){._spinner_gs53c_83{animation-duration:1.6s}}@keyframes _spin_gs53c_83{to{transform:rotate(360deg)}}._base_zgvpf_1{border-radius:var(--r-md);cursor:pointer;transition:background-color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);border:1px solid #0000;justify-content:center;align-items:center;display:inline-flex;position:relative}._base_zgvpf_1:disabled{opacity:.5;cursor:not-allowed}._sm_zgvpf_21{width:32px;height:32px}._md_zgvpf_26{width:40px;height:40px}._lg_zgvpf_31{width:48px;height:48px}._yellow_zgvpf_36{background:var(--brand);color:var(--ink)}._yellow_zgvpf_36:hover:not(:disabled){background:var(--brand-tint)}._ink_zgvpf_45{background:var(--ink);color:#fff}._ink_zgvpf_45:hover:not(:disabled){background:var(--ink-soft)}._ghost_zgvpf_54{color:var(--ink);background:0 0}._ghost_zgvpf_54:hover:not(:disabled){background:var(--surface-panel)}._outline_zgvpf_63{background:var(--surface);color:var(--ink);border-color:var(--border)}._outline_zgvpf_63:hover:not(:disabled){border-color:var(--ink)}._badge_zgvpf_73{border-radius:var(--r-pill);background:var(--ink);color:#fff;min-width:18px;height:18px;font-family:var(--font-mono);text-align:center;padding-inline:4px;font-size:10px;line-height:18px;position:absolute;top:-4px;right:-4px}._base_1cws8_1{border-radius:var(--r-pill);min-width:20px;height:20px;font-family:var(--font-mono);font-variant-numeric:tabular-nums;justify-content:center;align-items:center;padding-inline:6px;font-size:11px;line-height:1;display:inline-flex}._ink_1cws8_15{background:var(--ink);color:#fff}._subtle_1cws8_20{background:var(--surface);color:var(--text-muted)}._label_1grzc_1{align-items:center;gap:var(--sp-2);height:40px;padding-inline:var(--sp-4);border-radius:var(--r-md);cursor:pointer;font-family:var(--font-body);transition:background-color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);font-size:14px;font-weight:500;display:inline-flex}._disabled_1grzc_28{opacity:.5;cursor:not-allowed}._input_1grzc_33{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}._base_9ctoe_1{height:24px;padding-inline:var(--sp-2);border-radius:var(--r-xs);font-family:var(--font-body);white-space:nowrap;border:1px solid #0000;align-items:center;gap:4px;font-size:12px;font-weight:500;display:inline-flex}._yellow_9ctoe_15{background:var(--brand);color:var(--ink)}._dark_9ctoe_20{background:var(--ink-soft);color:#fff}._outline_9ctoe_25{border-color:var(--border);color:var(--ink);background:0 0}._wrap_10aoc_1{align-items:center;gap:var(--sp-2);width:100%;height:48px;padding-inline:var(--sp-4);border-radius:var(--r-md);background:var(--surface-panel);transition:background-color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);border:1px solid #0000;display:inline-flex}._wrap_10aoc_1:hover{background:var(--surface);border-color:var(--ink)}._wrap_10aoc_1:focus-within{background:var(--ink);border-color:var(--ink);color:#fff}._sm_10aoc_29{height:40px}._invalid_10aoc_33{border-color:#c62828}._disabled_10aoc_37{opacity:.5}._field_10aoc_41{min-width:0;color:inherit;font-family:var(--font-body);background:0 0;border:none;outline:none;flex:1;font-size:14px}._field_10aoc_41::placeholder{color:var(--text-faint)}._affix_10aoc_56{color:var(--text-muted);font-family:var(--font-body);flex:none;font-size:14px}._wrap_10aoc_1:focus-within ._affix_10aoc_56{color:#fff}._root_d1zhu_1{width:100%;position:relative}._wrap_d1zhu_6{align-items:center;gap:var(--sp-2);height:48px;padding-left:var(--sp-5);border-radius:var(--r-pill);background:var(--surface-panel);transition:background-color var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);border:1px solid #0000;padding-right:6px;display:flex}._wrap_d1zhu_6:hover{background:var(--surface);border-color:var(--ink)}._wrap_d1zhu_6:focus-within{background:var(--ink);border-color:var(--ink);color:#fff}._field_d1zhu_33{min-width:0;color:inherit;font-family:var(--font-body);background:0 0;border:none;outline:none;flex:1;font-size:14px}._field_d1zhu_33::placeholder{color:var(--text-faint)}._submit_d1zhu_48{border-radius:var(--r-pill);background:var(--brand);width:36px;height:36px;color:var(--ink);cursor:pointer;border:none;flex:none;justify-content:center;align-items:center;display:inline-flex}._results_d1zhu_62{z-index:20;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--sp-2);position:absolute;top:calc(100% + 8px);left:0;right:0;box-shadow:0 12px 32px #0000001f}._resultItem_d1zhu_75{text-align:left;width:100%;padding:var(--sp-2) var(--sp-3);border-radius:var(--r-xs);font-family:var(--font-body);cursor:pointer;background:0 0;border:none;font-size:14px;display:block}._resultItem_d1zhu_75:hover{background:var(--surface-panel)}._root_qyzuu_1{border-radius:var(--r-xs);border:1px solid var(--border);background:var(--surface);cursor:pointer;flex:none;justify-content:center;align-items:center;width:20px;height:20px;display:inline-flex}._root_qyzuu_1[data-state=checked],._root_qyzuu_1[data-state=indeterminate]{background:var(--ink);border-color:var(--ink);color:#fff}._label_qyzuu_22{align-items:center;gap:var(--sp-2);font-family:var(--font-body);cursor:pointer;font-size:14px;display:inline-flex}._root_yd6dz_1{touch-action:none;align-items:center;width:100%;height:24px;display:flex;position:relative}._track_yd6dz_10{background:var(--border);border-radius:var(--r-pill);flex:1;height:2px;position:relative}._range_yd6dz_18{background:var(--ink);border-radius:var(--r-pill);height:100%;position:absolute}._thumb_yd6dz_25{background:var(--ink);cursor:pointer;border-radius:50%;width:18px;height:18px;display:block}._thumb_yd6dz_25:hover{background:var(--ink-soft)}._root_yd6dz_1[data-disabled] ._thumb_yd6dz_25,._root_yd6dz_1[data-disabled] ._range_yd6dz_18{opacity:.5;cursor:not-allowed}._trigger_1rqb4_1{justify-content:space-between;align-items:center;gap:var(--sp-2);height:48px;padding-inline:var(--sp-4);border-radius:var(--r-md);background:var(--surface-panel);color:var(--ink);font-family:var(--font-body);cursor:pointer;transition:background-color var(--dur-fast) var(--ease);border:1px solid #0000;font-size:14px;display:inline-flex}._trigger_1rqb4_1:hover{background:var(--surface);border-color:var(--ink)}._trigger_1rqb4_1[data-state=open]{background:var(--ink);color:#fff}._sm_1rqb4_29{height:40px}._chevron_1rqb4_33{transition:transform var(--dur-fast) var(--ease)}._trigger_1rqb4_1[data-state=open] ._chevron_1rqb4_33{transform:rotate(180deg)}._content_1rqb4_41{min-width:var(--radix-dropdown-menu-trigger-width,160px);background:var(--ink);color:#fff;border-radius:var(--r-md);padding:var(--sp-2);z-index:30;box-shadow:0 12px 32px #00000040}._item_1rqb4_51{padding:var(--sp-2) var(--sp-3);border-radius:var(--r-xs);font-family:var(--font-body);cursor:pointer;outline:none;font-size:14px;display:block}._item_1rqb4_51[data-highlighted]{background:var(--ink-soft)}._item_1rqb4_51[data-state=checked]{color:var(--brand)}._base_1bycs_1{border-radius:var(--r-pill);border:1px solid var(--border);color:var(--ink);cursor:pointer;transition:background-color var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease), transform var(--dur-fast) var(--ease);background:0 0;justify-content:center;align-items:center;display:inline-flex}._base_1bycs_1:hover{background:var(--surface-panel);border-color:#0000}._base_1bycs_1:active{background:var(--surface);border-color:var(--ink)}._expanded_1bycs_27{background:var(--ink);border-color:var(--ink);color:#fff;transform:rotate(180deg)}._sm_1bycs_34{width:32px;height:32px}._md_1bycs_39{width:40px;height:40px}._item_1n84i_1{border-bottom:1px solid var(--border)}._header_1n84i_5{margin:0}._trigger_1n84i_9{width:100%;padding:var(--sp-4) 0;color:var(--ink);font-family:var(--font-display);text-transform:uppercase;letter-spacing:.01em;cursor:pointer;background:0 0;border:none;justify-content:space-between;align-items:center;font-size:15px;font-weight:600;display:flex}._chevron_1n84i_27{transition:transform var(--dur-fast) var(--ease)}._trigger_1n84i_9[data-state=open] ._chevron_1n84i_27{transform:rotate(180deg)}._content_1n84i_35{overflow:hidden}._content_1n84i_35[data-state=open]{animation:_open_1n84i_1 var(--dur) var(--ease)}._content_1n84i_35[data-state=closed]{animation:_close_1n84i_1 var(--dur) var(--ease)}._contentInner_1n84i_47{padding-bottom:var(--sp-4)}@keyframes _open_1n84i_1{0%{height:0}to{height:var(--radix-accordion-content-height)}}@keyframes _close_1n84i_1{0%{height:var(--radix-accordion-content-height)}to{height:0}}._shimmer_139c4_1{background:linear-gradient(90deg, var(--surface-panel) 25%, var(--surface-media) 37%, var(--surface-panel) 63%);background-size:400% 100%;animation:1.4s infinite _shimmer_139c4_1}._static_139c4_7{background:var(--surface-panel)}@keyframes _shimmer_139c4_1{0%{background-position:100%}to{background-position:0}}@media (prefers-reduced-motion:reduce){._shimmer_139c4_1{animation:none}}._bar_1wt48_1{justify-content:center;align-items:center;gap:var(--sp-2);border-radius:var(--r-md);background:var(--brand);height:48px;color:var(--ink);font-family:var(--font-body);max-width:var(--content-w);margin-inline:auto;font-size:14px;font-weight:500;display:flex;position:relative}._dismiss_1wt48_18{right:var(--sp-4);color:var(--ink);cursor:pointer;background:0 0;border:none;display:inline-flex;position:absolute;top:50%;transform:translateY(-50%)}._mark_i17hj_1{font-family:var(--font-display);text-transform:uppercase;letter-spacing:.02em;color:var(--ink);white-space:nowrap;align-items:center;font-weight:700;line-height:1;display:inline-flex}._v2_i17hj_13 ._accent_i17hj_13{background:var(--brand);padding:0 .12em}._v3_i17hj_18{background:var(--ink);color:#fff;border-radius:var(--r-xs);padding:.3em .5em}._symbol_i17hj_25{aspect-ratio:1;background:var(--brand);color:var(--ink);border-radius:var(--r-xs);justify-content:center;align-items:center;font-weight:700;display:inline-flex}._link_icul5_1{height:40px;padding-inline:var(--sp-4);border-radius:var(--r-pill);color:var(--ink);font-family:var(--font-body);transition:background-color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease);border:1px solid #0000;align-items:center;gap:4px;font-size:14px;font-weight:500;text-decoration:none;display:inline-flex}._link_icul5_1:hover{border-color:var(--ink)}._active_icul5_24{background:var(--brand);border-color:#0000}._chevron_icul5_29{transition:transform var(--dur-fast) var(--ease)}._open_icul5_33 ._chevron_icul5_29{transform:rotate(180deg)}._bar_k59n0_1{justify-content:space-between;align-items:center;gap:var(--sp-6);display:flex}._primary_k59n0_8,._secondary_k59n0_9{align-items:center;gap:var(--sp-2);display:flex}._item_k59n0_15{position:relative}._dropdown_k59n0_19{padding-top:var(--sp-2);z-index:30;opacity:0;visibility:hidden;transition:opacity var(--dur-fast) var(--ease), visibility var(--dur-fast) var(--ease);position:absolute;top:100%;left:0}._item_k59n0_15:hover ._dropdown_k59n0_19,._item_k59n0_15:focus-within ._dropdown_k59n0_19{opacity:1;visibility:visible}._panel_k59n0_38{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);min-width:220px;padding:var(--sp-2);gap:2px;display:grid;box-shadow:0 12px 32px #00000024}._panelLink_k59n0_49{padding:var(--sp-2) var(--sp-3);border-radius:var(--r-xs);color:var(--ink);font-family:var(--font-body);font-size:14px;text-decoration:none;display:block}._panelLink_k59n0_49:hover{background:var(--surface-panel)}._tile_iwfq7_1{justify-content:center;align-items:center;gap:var(--sp-2);border-radius:var(--r-md);background:var(--surface);width:140px;height:120px;color:var(--ink);text-align:center;scroll-snap-align:start;transition:border-color var(--dur-fast) var(--ease);border:1px solid #0000;flex-direction:column;flex:none;text-decoration:none;display:flex}._tile_iwfq7_1:hover{border-color:var(--border)}._selected_iwfq7_25{border-color:var(--ink)}._label_iwfq7_29{font-family:var(--font-body);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:13px;font-weight:500;line-height:1.3;display:-webkit-box;overflow:hidden}._rail_ia9r7_1{gap:var(--sp-3);padding:var(--sp-4);border-radius:var(--r-lg);background:var(--surface-panel);scroll-snap-type:x proximity;display:flex;overflow-x:auto}@media (width>=1200px){._rail_ia9r7_1{flex-wrap:wrap;overflow-x:visible}}._root_ulh45_1{background:var(--surface)}._sticky_ulh45_5{z-index:50;position:sticky;top:0}._inner_ulh45_11{max-width:var(--content-w);padding-inline:var(--page-gutter);margin-inline:auto}._announcementRow_ulh45_17{padding-block:var(--sp-3)}._chromeRow_ulh45_21{justify-content:space-between;align-items:center;gap:var(--sp-6);padding-block:var(--sp-4);display:flex}._railRow_ulh45_29{padding-block:var(--sp-4)}._row_1e6sz_1{align-items:baseline;gap:var(--sp-2);flex-wrap:wrap;display:inline-flex}._xl_1e6sz_8{font-size:48px}._lg_1e6sz_12{font-size:28px}._sm_1e6sz_16{font-size:16px}._amount_1e6sz_20{font-family:var(--font-display);color:var(--ink);align-items:baseline;font-size:1em;font-weight:700;display:inline-flex}._cents_1e6sz_29{font-size:.55em;position:relative;top:-.5em}._currency_1e6sz_35{margin-left:2px;font-size:.6em}._old_1e6sz_40{color:var(--price-old);font-family:var(--font-body);align-self:center;font-size:.4em;text-decoration:line-through}._note_1e6sz_48{color:var(--text-muted);font-family:var(--font-body);width:100%;font-size:12px}._card_qj9lp_1{color:var(--ink);border-radius:var(--r-lg);padding:var(--sp-3);transition:background-color var(--dur-fast) var(--ease);display:block;position:relative}._card_qj9lp_1:hover,._card_qj9lp_1:focus-within{background:var(--surface-sunk)}._linkOverlay_qj9lp_24{z-index:1;border-radius:var(--r-lg);position:absolute;inset:0}._tile_qj9lp_32{width:100%;aspect-ratio:var(--tile-ratio);border-radius:var(--r-md);background:var(--surface-media);position:relative;overflow:hidden}._image_qj9lp_41{object-fit:cover;width:100%;height:100%;transition:opacity var(--dur) var(--ease);position:absolute;inset:0}._imageSecondary_qj9lp_50,._card_qj9lp_1:hover ._imagePrimary_qj9lp_54,._card_qj9lp_1:focus-within ._imagePrimary_qj9lp_54{opacity:0}._card_qj9lp_1:hover ._imageSecondary_qj9lp_50,._card_qj9lp_1:focus-within ._imageSecondary_qj9lp_50{opacity:1}._badges_qj9lp_64{top:var(--sp-2);left:var(--sp-2);z-index:2;position:absolute}._actions_qj9lp_71{top:var(--sp-2);right:var(--sp-2);z-index:2;gap:var(--sp-2);flex-direction:column;display:flex;position:absolute}._compareSlot_qj9lp_81{opacity:0;transition:opacity var(--dur-fast) var(--ease)}._card_qj9lp_1:hover ._compareSlot_qj9lp_81,._card_qj9lp_1:focus-within ._compareSlot_qj9lp_81{opacity:1}._outOfStockOverlay_qj9lp_91{z-index:3;font-family:var(--font-display);text-transform:uppercase;letter-spacing:.04em;background:#fcfcfcb3;justify-content:center;align-items:center;font-size:13px;display:flex;position:absolute;inset:0}._body_qj9lp_105{padding-top:var(--sp-3);gap:var(--sp-2);flex-direction:column;display:flex}._title_qj9lp_112{font-family:var(--font-body);-webkit-line-clamp:3;-webkit-box-orient:vertical;margin:0;font-size:14px;font-weight:500;line-height:1.35;display:-webkit-box;overflow:hidden}._footer_qj9lp_124{justify-content:space-between;align-items:center;gap:var(--sp-2);display:flex}._root_hpqdf_1{position:relative}._track_hpqdf_5{gap:var(--sp-5);scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none;display:flex;overflow-x:auto}._track_hpqdf_5::-webkit-scrollbar{display:none}._slide_hpqdf_18{scroll-snap-align:start;flex:none}._arrow_hpqdf_23{border:1px solid var(--border);background:var(--surface);cursor:pointer;z-index:2;border-radius:50%;justify-content:center;align-items:center;width:44px;height:44px;display:inline-flex;position:absolute;top:40%;transform:translateY(-50%)}._arrowPrev_hpqdf_40{left:-8px}._arrowNext_hpqdf_44{right:-8px}._dots_hpqdf_48{margin-top:var(--sp-4);justify-content:center;gap:8px;display:flex}._dot_hpqdf_48{background:var(--border);cursor:pointer;border:none;border-radius:50%;width:8px;height:8px;padding:0}._dotActive_hpqdf_65{background:var(--ink)}._nav_1iq3h_1{align-items:center;gap:var(--sp-2);display:flex}._pageBtn_1iq3h_7{width:36px;height:36px;color:var(--ink);font-family:var(--font-mono);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:50%;justify-content:center;align-items:center;font-size:13px;display:inline-flex}._pageBtn_1iq3h_7:hover{border-color:var(--border)}._current_1iq3h_27{background:var(--ink);color:#fff}._ellipsis_1iq3h_32{text-align:center;width:36px;color:var(--text-faint);font-family:var(--font-mono);font-size:13px}._edge_1iq3h_40{height:36px;padding-inline:var(--sp-3);border-radius:var(--r-pill);border:1px solid var(--border);color:var(--ink);font-family:var(--font-body);cursor:pointer;background:0 0;align-items:center;gap:4px;font-size:13px;display:inline-flex}._edge_1iq3h_40:disabled{opacity:.4;cursor:not-allowed}._root_3ugbo_1{gap:var(--sp-3);flex-direction:column;display:flex}._main_3ugbo_7{border-radius:var(--r-lg);background:var(--surface-media);aspect-ratio:var(--tile-ratio);position:relative;overflow:hidden}._mainImage_3ugbo_15{object-fit:cover;width:100%;height:100%}._actions_3ugbo_21{top:var(--sp-3);right:var(--sp-3);gap:var(--sp-2);flex-direction:column;display:flex;position:absolute}._thumbs_3ugbo_30{gap:var(--sp-2);display:flex;overflow-x:auto}._thumb_3ugbo_30{border-radius:var(--r-md);border:1px solid var(--border);cursor:pointer;background:var(--surface-media);flex:none;width:72px;height:72px;padding:0;overflow:hidden}._thumbActive_3ugbo_49{border-color:var(--ink)}._thumbImage_3ugbo_53{object-fit:cover;width:100%;height:100%}._prose_29xo6_1{font-family:var(--font-body);color:var(--ink);max-width:78ch;font-size:15px;line-height:1.7}._prose_29xo6_1 p{margin:0 0 var(--sp-4)}._prose_29xo6_1 h4{font-family:var(--font-display);text-transform:uppercase;letter-spacing:.01em;margin:var(--sp-6) 0 var(--sp-2);font-size:15px;font-weight:600}._prose_29xo6_1 ul,._prose_29xo6_1 ol{margin:0 0 var(--sp-4);padding-left:20px}._prose_29xo6_1 li{margin:4px 0}._prose_29xo6_1 a{color:var(--ink);text-underline-offset:3px;text-decoration-thickness:1px}._slide_w5ynl_1{align-items:center;gap:var(--sp-6);border-radius:var(--r-lg);padding:var(--sp-8);grid-template-columns:1fr 1fr;min-height:420px;display:grid;position:relative;overflow:hidden}._yellow_w5ynl_13{background:linear-gradient(135deg, var(--brand-gradient-start) 0%, var(--brand-tint) 100%);color:var(--ink)}._dark_w5ynl_18{background:var(--ink-soft);color:#fff}._imageOnly_w5ynl_23{background:var(--surface-panel);color:var(--ink)}._eyebrow_w5ynl_28{font-family:var(--font-display);text-transform:uppercase;letter-spacing:.06em;margin-bottom:var(--sp-3);opacity:.75;font-size:13px}._title_w5ynl_37{font-family:var(--font-display);text-transform:uppercase;margin:0 0 var(--sp-4);font-size:40px;font-weight:700;line-height:1.05}._specs_w5ynl_46{margin-bottom:var(--sp-5);flex-direction:column;gap:4px;display:flex}._specRow_w5ynl_53{font-family:var(--font-body);gap:8px;font-size:14px;display:flex}._specLabel_w5ynl_60{opacity:.7}._media_w5ynl_64{object-fit:contain;width:100%;height:100%}._root_6zpaf_1{position:relative}._track_6zpaf_5{gap:var(--sp-5);scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none;display:flex;overflow-x:auto}._track_6zpaf_5::-webkit-scrollbar{display:none}._slide_6zpaf_18{scroll-snap-align:start;flex:none;width:88%}._controls_6zpaf_24{justify-content:center;align-items:center;gap:var(--sp-4);margin-top:var(--sp-4);display:flex}._dots_6zpaf_32{gap:8px;display:flex}._dot_6zpaf_32{background:var(--border);cursor:pointer;border:none;border-radius:50%;width:8px;height:8px;padding:0}._dotActive_6zpaf_47{background:var(--ink)}._pause_6zpaf_51{color:var(--ink);cursor:pointer;background:0 0;border:none;display:inline-flex}._root_vv90t_1{border-radius:var(--r-lg);min-height:320px;position:relative;overflow:hidden}._media_vv90t_8{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}._card_vv90t_16{top:var(--sp-6);bottom:var(--sp-6);justify-content:center;gap:var(--sp-3);width:min(360px,42%);padding:var(--sp-6);background:var(--surface);border-radius:var(--r-lg);flex-direction:column;display:flex;position:absolute}._left_vv90t_30{left:var(--sp-6)}._right_vv90t_34{right:var(--sp-6)}._title_vv90t_38{font-family:var(--font-display);text-transform:uppercase;margin:0;font-size:24px;font-weight:700}._subtitle_vv90t_46{font-family:var(--font-body);color:var(--text-muted);margin:0;font-size:14px}._root_1dvmb_1{background:linear-gradient(180deg, var(--surface) 0%, var(--brand-tint) 140%);padding:var(--sp-10) 0 var(--sp-6)}._inner_1dvmb_6{max-width:var(--content-w);padding-inline:var(--page-gutter);margin-inline:auto}._top_1dvmb_12{justify-content:space-between;align-items:flex-start;gap:var(--sp-8);margin-bottom:var(--sp-8);flex-wrap:wrap;display:flex}._columns_1dvmb_21{gap:var(--sp-6);grid-template-columns:repeat(4,1fr);display:grid}@media (width<=1023px){._columns_1dvmb_21{grid-template-columns:repeat(2,1fr)}}@media (width<=560px){._columns_1dvmb_21{grid-template-columns:1fr}}._columnTitle_1dvmb_39{font-family:var(--font-display);text-transform:uppercase;letter-spacing:.04em;margin:0 0 var(--sp-3);font-size:13px}._link_1dvmb_47{color:var(--text-muted);font-family:var(--font-body);padding:4px 0;font-size:14px;text-decoration:none;display:block}._link_1dvmb_47:hover{color:var(--ink)}._hoursPill_1dvmb_60{border-radius:var(--r-pill);background:var(--ink-soft);color:#fff;height:32px;font-family:var(--font-body);align-items:center;padding-inline:12px;font-size:12px;display:inline-flex}._legal_1dvmb_72{margin-top:var(--sp-8);padding-top:var(--sp-4);border-top:1px solid var(--border);font-family:var(--font-body);color:var(--text-faint);font-size:12px}._overlay_x45gp_1{background:var(--overlay);z-index:60;position:fixed;inset:0}._content_x45gp_8{z-index:61;background:var(--surface);border-radius:var(--r-lg);width:90vw;max-height:85vh;padding:var(--sp-6);position:fixed;top:50%;left:50%;overflow-y:auto;transform:translate(-50%,-50%)}._sm_x45gp_23{max-width:420px}._md_x45gp_27{max-width:640px}._lg_x45gp_31{max-width:900px}._header_x45gp_35{margin-bottom:var(--sp-4);justify-content:space-between;align-items:center;display:flex}._close_x45gp_42{cursor:pointer;color:var(--ink);background:0 0;border:none}._footer_x45gp_50{justify-content:flex-end;gap:var(--sp-3);margin-top:var(--sp-6);display:flex}._viewport_1oa8j_1{z-index:200;pointer-events:none;flex-direction:column;align-items:center;gap:8px;display:flex;position:fixed;bottom:24px;left:50%;transform:translate(-50%)}._toast_1oa8j_14{pointer-events:auto;border-radius:var(--r-md);background:var(--ink);color:#fff;max-width:360px;font-family:var(--font-body);opacity:0;transition:opacity var(--dur) var(--ease), transform var(--dur) var(--ease);padding:12px 20px;font-size:14px;transform:translateY(8px);box-shadow:0 12px 24px #0003}._visible_1oa8j_31{opacity:1;transform:translateY(0)}._success_1oa8j_36{background:var(--ink)}._error_1oa8j_40{background:#b3261e}._info_1oa8j_44{background:var(--ink-soft)}._focusRing_1w4a1_10{outline:none}._focusRing_1w4a1_10:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px;box-shadow:0 0 0 1px var(--surface)}._stateRest_1w4a1_20{background:var(--surface-panel);color:var(--ink);border:1px solid #0000}._stateHover_1w4a1_26:hover{background:var(--surface);border-color:var(--ink)}._stateSelected_1w4a1_31{background:var(--ink);color:#fff;border-color:var(--ink)}._statePrimary_1w4a1_37{background:var(--brand);color:var(--ink);border-color:#0000}._overlay_1vsks_1{background:var(--overlay);z-index:60;position:fixed;inset:0}._content_1vsks_8{z-index:61;background:var(--surface);padding:var(--sp-6);animation:_slide-in_1vsks_1 var(--dur) var(--ease);position:fixed;overflow-y:auto}._right_1vsks_18{width:min(420px,100vw);top:0;bottom:0;right:0}._left_1vsks_25{width:min(320px,100vw);top:0;bottom:0;left:0}._bottom_1vsks_32{border-radius:var(--r-lg) var(--r-lg) 0 0;max-height:80vh;bottom:0;left:0;right:0}@keyframes _slide-in_1vsks_1{0%{opacity:0}to{opacity:1}}._close_1vsks_49{cursor:pointer;color:var(--ink);top:var(--sp-4);right:var(--sp-4);background:0 0;border:none;position:absolute}
|
|
2
|
+
/*$vite$:1*/
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export type AccordionItem = {
|
|
3
|
+
value: string;
|
|
4
|
+
title: ReactNode;
|
|
5
|
+
content: ReactNode;
|
|
6
|
+
};
|
|
7
|
+
export type AccordionProps = {
|
|
8
|
+
items: AccordionItem[];
|
|
9
|
+
type?: "single" | "multiple";
|
|
10
|
+
defaultOpen?: string | string[];
|
|
11
|
+
};
|
|
12
|
+
export declare function Accordion({ items, type, defaultOpen }: AccordionProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ButtonHTMLAttributes, ElementType, ReactNode } from 'react';
|
|
2
|
+
import { VariantProps } from 'class-variance-authority';
|
|
3
|
+
declare const button: (props?: ({
|
|
4
|
+
variant?: "primary" | "secondary" | "tertiary" | "outline" | null | undefined;
|
|
5
|
+
size?: "sm" | "md" | null | undefined;
|
|
6
|
+
fullWidth?: boolean | null | undefined;
|
|
7
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
8
|
+
export type ButtonProps = {
|
|
9
|
+
as?: ElementType;
|
|
10
|
+
iconLeft?: ReactNode;
|
|
11
|
+
iconRight?: ReactNode;
|
|
12
|
+
loading?: boolean;
|
|
13
|
+
className?: string;
|
|
14
|
+
children?: ReactNode;
|
|
15
|
+
} & VariantProps<typeof button> & ButtonHTMLAttributes<HTMLButtonElement>;
|
|
16
|
+
export declare const Button: import('react').ForwardRefExoticComponent<{
|
|
17
|
+
as?: ElementType;
|
|
18
|
+
iconLeft?: ReactNode;
|
|
19
|
+
iconRight?: ReactNode;
|
|
20
|
+
loading?: boolean;
|
|
21
|
+
className?: string;
|
|
22
|
+
children?: ReactNode;
|
|
23
|
+
} & VariantProps<(props?: ({
|
|
24
|
+
variant?: "primary" | "secondary" | "tertiary" | "outline" | null | undefined;
|
|
25
|
+
size?: "sm" | "md" | null | undefined;
|
|
26
|
+
fullWidth?: boolean | null | undefined;
|
|
27
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string> & ButtonHTMLAttributes<HTMLButtonElement> & import('react').RefAttributes<HTMLButtonElement>>;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type CheckboxProps = {
|
|
2
|
+
checked: boolean | "indeterminate";
|
|
3
|
+
onCheckedChange: (checked: boolean | "indeterminate") => void;
|
|
4
|
+
label: string;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare function Checkbox({ checked, onCheckedChange, label, disabled }: CheckboxProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { InputHTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
export type ChipProps = {
|
|
3
|
+
selected: boolean;
|
|
4
|
+
onToggle: (selected: boolean) => void;
|
|
5
|
+
count?: number;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
/** "checkbox" for multi-select groups, "radio" for single-select. */
|
|
8
|
+
type?: "checkbox" | "radio";
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
className?: string;
|
|
11
|
+
} & Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "checked" | "onChange" | "onToggle" | "children">;
|
|
12
|
+
export declare function Chip({ selected, onToggle, count, disabled, type, children, className, name, value, ...rest }: ChipProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ButtonHTMLAttributes } from 'react';
|
|
2
|
+
export type DisclosureToggleProps = {
|
|
3
|
+
expanded: boolean;
|
|
4
|
+
size?: "sm" | "md";
|
|
5
|
+
label?: string;
|
|
6
|
+
} & ButtonHTMLAttributes<HTMLButtonElement>;
|
|
7
|
+
export declare function DisclosureToggle({ expanded, size, label, className, ...rest }: DisclosureToggleProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ReactElement, SVGProps } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* The PMAX icon set: 24×24 grid, 2px stroke, round caps, no fill,
|
|
4
|
+
* `currentColor` — so size and color are inherited from CSS, never baked
|
|
5
|
+
* into the SVG. Registry is intentionally a subset of the ~47 icons named
|
|
6
|
+
* in the design plan (§3 "Icons") — the ones the components in this
|
|
7
|
+
* package actually use. Extending it is just adding a path entry.
|
|
8
|
+
*/
|
|
9
|
+
declare const PATHS: Record<string, ReactElement>;
|
|
10
|
+
export type IconName = keyof typeof PATHS;
|
|
11
|
+
export type IconProps = {
|
|
12
|
+
name: IconName;
|
|
13
|
+
/** The design system's scale is 16/20/24/32, but this accepts any number
|
|
14
|
+
* for the odd in-between size (e.g. a 14px chevron next to 13px text). */
|
|
15
|
+
size?: number;
|
|
16
|
+
label?: string;
|
|
17
|
+
} & Omit<SVGProps<SVGSVGElement>, "name">;
|
|
18
|
+
export declare function Icon({ name, size, label, ...rest }: IconProps): import("react").JSX.Element | null;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ButtonHTMLAttributes, ElementType } from 'react';
|
|
2
|
+
import { VariantProps } from 'class-variance-authority';
|
|
3
|
+
import { IconName } from './Icon';
|
|
4
|
+
declare const iconButton: (props?: ({
|
|
5
|
+
variant?: "ink" | "outline" | "yellow" | "ghost" | null | undefined;
|
|
6
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
7
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
8
|
+
export type IconButtonProps = {
|
|
9
|
+
as?: ElementType;
|
|
10
|
+
/** Only meaningful when `as="a"`. */
|
|
11
|
+
href?: string;
|
|
12
|
+
icon: IconName;
|
|
13
|
+
/** Required — this button's only accessible name. */
|
|
14
|
+
label: string;
|
|
15
|
+
badge?: string | number;
|
|
16
|
+
className?: string;
|
|
17
|
+
} & VariantProps<typeof iconButton> & ButtonHTMLAttributes<HTMLButtonElement>;
|
|
18
|
+
export declare const IconButton: import('react').ForwardRefExoticComponent<{
|
|
19
|
+
as?: ElementType;
|
|
20
|
+
/** Only meaningful when `as="a"`. */
|
|
21
|
+
href?: string;
|
|
22
|
+
icon: IconName;
|
|
23
|
+
/** Required — this button's only accessible name. */
|
|
24
|
+
label: string;
|
|
25
|
+
badge?: string | number;
|
|
26
|
+
className?: string;
|
|
27
|
+
} & VariantProps<(props?: ({
|
|
28
|
+
variant?: "ink" | "outline" | "yellow" | "ghost" | null | undefined;
|
|
29
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
30
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string> & ButtonHTMLAttributes<HTMLButtonElement> & import('react').RefAttributes<HTMLButtonElement>>;
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { InputHTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
export type InputProps = {
|
|
3
|
+
prefix?: ReactNode;
|
|
4
|
+
suffix?: ReactNode;
|
|
5
|
+
invalid?: boolean;
|
|
6
|
+
size?: "sm" | "md";
|
|
7
|
+
wrapperClassName?: string;
|
|
8
|
+
} & Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "prefix">;
|
|
9
|
+
export declare const Input: import('react').ForwardRefExoticComponent<{
|
|
10
|
+
prefix?: ReactNode;
|
|
11
|
+
suffix?: ReactNode;
|
|
12
|
+
invalid?: boolean;
|
|
13
|
+
size?: "sm" | "md";
|
|
14
|
+
wrapperClassName?: string;
|
|
15
|
+
} & Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "prefix"> & import('react').RefAttributes<HTMLInputElement>>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type RangeSliderProps = {
|
|
2
|
+
min: number;
|
|
3
|
+
max: number;
|
|
4
|
+
step?: number;
|
|
5
|
+
value: [number, number];
|
|
6
|
+
onChange: (value: [number, number]) => void;
|
|
7
|
+
formatValue?: (value: number) => string;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare function RangeSlider({ min, max, step, value, onChange, formatValue, disabled }: RangeSliderProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type SearchFieldProps = {
|
|
2
|
+
value: string;
|
|
3
|
+
onChange: (value: string) => void;
|
|
4
|
+
onSearch: (value: string) => void;
|
|
5
|
+
placeholder?: string;
|
|
6
|
+
loading?: boolean;
|
|
7
|
+
suggestions?: string[];
|
|
8
|
+
onSuggestionSelect?: (value: string) => void;
|
|
9
|
+
};
|
|
10
|
+
export declare function SearchField({ value, onChange, onSearch, placeholder, loading, suggestions, onSuggestionSelect }: SearchFieldProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type SelectOption = {
|
|
2
|
+
label: string;
|
|
3
|
+
value: string;
|
|
4
|
+
};
|
|
5
|
+
export type SelectProps = {
|
|
6
|
+
options: SelectOption[];
|
|
7
|
+
value: string;
|
|
8
|
+
onChange: (value: string) => void;
|
|
9
|
+
size?: "sm" | "md";
|
|
10
|
+
triggerLabel?: (option: SelectOption | undefined) => string;
|
|
11
|
+
};
|
|
12
|
+
export declare function Select({ options, value, onChange, size, triggerLabel }: SelectProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type SkeletonProps = {
|
|
2
|
+
w?: number | string;
|
|
3
|
+
h?: number | string;
|
|
4
|
+
radius?: "xs" | "md" | "lg" | "pill";
|
|
5
|
+
circle?: boolean;
|
|
6
|
+
className?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function Skeleton({ w, h, radius, circle, className }: SkeletonProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ElementType, ComponentPropsWithoutRef } from 'react';
|
|
2
|
+
export type SurfaceTone = "page" | "sunk" | "panel" | "media" | "yellow" | "ink";
|
|
3
|
+
export type SurfaceProps<E extends ElementType = "div"> = {
|
|
4
|
+
as?: E;
|
|
5
|
+
tone?: SurfaceTone;
|
|
6
|
+
radius?: "xs" | "md" | "lg" | "pill" | "none";
|
|
7
|
+
border?: boolean;
|
|
8
|
+
padding?: number | string;
|
|
9
|
+
className?: string;
|
|
10
|
+
} & Omit<ComponentPropsWithoutRef<E>, "as" | "color">;
|
|
11
|
+
export declare function Surface<E extends ElementType = "div">({ as, tone, radius, border, padding, className, style, ...rest }: SurfaceProps<E>): import("react").JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { IconName } from './Icon';
|
|
3
|
+
export type TagProps = {
|
|
4
|
+
icon?: IconName;
|
|
5
|
+
tone?: "yellow" | "dark" | "outline";
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
className?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function Tag({ icon, tone, children, className }: TagProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ElementType, ComponentPropsWithoutRef } from 'react';
|
|
2
|
+
export type TextVariant = "display-1" | "display-2" | "display-3" | "body" | "body-sm" | "label" | "mono";
|
|
3
|
+
export type TextColor = "ink" | "muted" | "faint" | "brand";
|
|
4
|
+
export type TextProps<E extends ElementType = "p"> = {
|
|
5
|
+
as?: E;
|
|
6
|
+
variant?: TextVariant;
|
|
7
|
+
color?: TextColor;
|
|
8
|
+
/** Line-clamp to this many lines (product titles typically need 3). */
|
|
9
|
+
clamp?: number;
|
|
10
|
+
className?: string;
|
|
11
|
+
} & Omit<ComponentPropsWithoutRef<E>, "as" | "color">;
|
|
12
|
+
/**
|
|
13
|
+
* Not `forwardRef` — wrapping a polymorphic (`as`-driven) component in
|
|
14
|
+
* `forwardRef` collapses its generic type parameter in TypeScript (`as`
|
|
15
|
+
* ends up typed as only its default), rejecting `as="h2"` etc. at every
|
|
16
|
+
* call site. Nothing here needs a forwarded ref, so staying a plain
|
|
17
|
+
* generic function keeps `as` correctly typed per element.
|
|
18
|
+
*/
|
|
19
|
+
export declare function Text<E extends ElementType = "p">({ as, variant, color, clamp, className, style, ...rest }: TextProps<E>): import("react").JSX.Element;
|
package/dist/tokens.css
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/*
|
|
2
|
+
PMAX design tokens — values are exactly what's specified in the
|
|
3
|
+
Figma-derived component library plan (§3 "Foundations"). Components
|
|
4
|
+
reference these (or the semantic aliases below), never a raw hex/px.
|
|
5
|
+
Type ramp pixel values are NOT in that source (all text was outlined to
|
|
6
|
+
paths in the export) — the plan calls this out explicitly as the one
|
|
7
|
+
thing it can't give us, so the sizes below are a reasonable placeholder
|
|
8
|
+
ramp using the plan's own display/body/mono faces, to be replaced once
|
|
9
|
+
someone pulls the real numbers from the live Figma file.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
:root {
|
|
13
|
+
/* Color — role-named, never hue-named, so a second brand can swap in
|
|
14
|
+
without touching a single component. */
|
|
15
|
+
--brand: #f1f62a;
|
|
16
|
+
--brand-tint: #fdffad;
|
|
17
|
+
--brand-gradient-start: #f9fe2e;
|
|
18
|
+
--ink: #020202;
|
|
19
|
+
--ink-soft: #1e1b18;
|
|
20
|
+
|
|
21
|
+
--surface: #fcfcfc;
|
|
22
|
+
--surface-sunk: #f7f7f7;
|
|
23
|
+
--surface-panel: #eeeeee;
|
|
24
|
+
--surface-media: #e9e9e9;
|
|
25
|
+
|
|
26
|
+
--border: #dedede;
|
|
27
|
+
--text-muted: #6e6e6e;
|
|
28
|
+
--text-faint: #a9a9a9;
|
|
29
|
+
|
|
30
|
+
/* Semantic aliases */
|
|
31
|
+
--price-old: var(--text-faint);
|
|
32
|
+
--badge-bg: var(--brand);
|
|
33
|
+
--focus-ring: var(--ink);
|
|
34
|
+
--overlay: rgba(2, 2, 2, 0.6);
|
|
35
|
+
|
|
36
|
+
/* Radius */
|
|
37
|
+
--r-xs: 6px;
|
|
38
|
+
--r-md: 12px;
|
|
39
|
+
--r-lg: 20px;
|
|
40
|
+
--r-pill: 999px;
|
|
41
|
+
|
|
42
|
+
/* Layout */
|
|
43
|
+
--page-w: 1920px;
|
|
44
|
+
--content-w: 1800px;
|
|
45
|
+
--page-gutter: 60px;
|
|
46
|
+
--tile-w: 344px;
|
|
47
|
+
--tile-h: 420px;
|
|
48
|
+
--tile-ratio: 5 / 6;
|
|
49
|
+
|
|
50
|
+
/* Space scale */
|
|
51
|
+
--sp-1: 4px;
|
|
52
|
+
--sp-2: 8px;
|
|
53
|
+
--sp-3: 12px;
|
|
54
|
+
--sp-4: 16px;
|
|
55
|
+
--sp-5: 20px;
|
|
56
|
+
--sp-6: 24px;
|
|
57
|
+
--sp-7: 32px;
|
|
58
|
+
--sp-8: 40px;
|
|
59
|
+
--sp-9: 60px;
|
|
60
|
+
--sp-10: 80px;
|
|
61
|
+
|
|
62
|
+
/* Type */
|
|
63
|
+
--font-display: "Archivo", "Arial Narrow", system-ui, sans-serif;
|
|
64
|
+
--font-body: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
|
|
65
|
+
--font-mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;
|
|
66
|
+
|
|
67
|
+
--t-display-1-size: 56px;
|
|
68
|
+
--t-display-1-lh: 1.05;
|
|
69
|
+
--t-display-1-tracking: 0.02em;
|
|
70
|
+
--t-display-2-size: 36px;
|
|
71
|
+
--t-display-2-lh: 1.1;
|
|
72
|
+
--t-display-2-tracking: 0.02em;
|
|
73
|
+
--t-display-3-size: 24px;
|
|
74
|
+
--t-display-3-lh: 1.15;
|
|
75
|
+
--t-display-3-tracking: 0.01em;
|
|
76
|
+
--t-body-size: 16px;
|
|
77
|
+
--t-body-lh: 1.5;
|
|
78
|
+
--t-body-sm-size: 14px;
|
|
79
|
+
--t-body-sm-lh: 1.5;
|
|
80
|
+
--t-label-size: 12px;
|
|
81
|
+
--t-label-lh: 1.4;
|
|
82
|
+
--t-label-tracking: 0.04em;
|
|
83
|
+
--t-mono-size: 13px;
|
|
84
|
+
--t-mono-lh: 1.4;
|
|
85
|
+
|
|
86
|
+
/* Motion */
|
|
87
|
+
--dur-fast: 150ms;
|
|
88
|
+
--dur: 200ms;
|
|
89
|
+
--ease: cubic-bezier(0.2, 0, 0.2, 1);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@media (prefers-reduced-motion: reduce) {
|
|
93
|
+
:root {
|
|
94
|
+
--dur-fast: 0ms;
|
|
95
|
+
--dur: 0ms;
|
|
96
|
+
}
|
|
97
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pmax-lt/ui-react",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "PMAX design system — React components, built from the Figma-derived component library plan.",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public"
|
|
9
|
+
},
|
|
10
|
+
"sideEffects": [
|
|
11
|
+
"**/*.css"
|
|
12
|
+
],
|
|
13
|
+
"files": [
|
|
14
|
+
"dist",
|
|
15
|
+
"README.md"
|
|
16
|
+
],
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"import": "./dist/index.js"
|
|
21
|
+
},
|
|
22
|
+
"./styles.css": "./dist/pmax-ui-react.css",
|
|
23
|
+
"./tokens.css": "./dist/tokens.css"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "vite build && node ./scripts/copy-tokens.mjs",
|
|
27
|
+
"dev": "vite build --watch",
|
|
28
|
+
"typecheck": "tsc --noEmit",
|
|
29
|
+
"storybook": "storybook dev -p 6006",
|
|
30
|
+
"build-storybook": "storybook build"
|
|
31
|
+
},
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"react": "^19",
|
|
34
|
+
"react-dom": "^19"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@radix-ui/react-accordion": "^1.2.20",
|
|
38
|
+
"@radix-ui/react-checkbox": "^1.3.11",
|
|
39
|
+
"@radix-ui/react-dialog": "^1.1.23",
|
|
40
|
+
"@radix-ui/react-dropdown-menu": "^2.1.24",
|
|
41
|
+
"@radix-ui/react-slider": "^1.4.7",
|
|
42
|
+
"@radix-ui/react-tooltip": "^1.2.16",
|
|
43
|
+
"class-variance-authority": "^0.7.1",
|
|
44
|
+
"clsx": "^2.1.1"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@storybook/addon-a11y": "^10.6.0",
|
|
48
|
+
"@storybook/react-vite": "^10.6.0",
|
|
49
|
+
"@types/react": "^19",
|
|
50
|
+
"@types/react-dom": "^19",
|
|
51
|
+
"@vitejs/plugin-react": "^6.1.1",
|
|
52
|
+
"storybook": "^10.6.0",
|
|
53
|
+
"typescript": "^5",
|
|
54
|
+
"vite": "^8.2.2",
|
|
55
|
+
"vite-plugin-dts": "^5.1.0"
|
|
56
|
+
}
|
|
57
|
+
}
|