ui-foundations 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/README.md +259 -0
- package/dist/assets/fonts/README.md +5 -0
- package/dist/assets/icons/location-roundtrip.svg +5 -0
- package/dist/assets/icons/location-track.svg +4 -0
- package/dist/assets/icons/location.svg +4 -0
- package/dist/assets/icons/lock-checkmark.svg +4 -0
- package/dist/assets/icons/lock-close.svg +4 -0
- package/dist/assets/icons/lock-open.svg +5 -0
- package/dist/assets/icons/login.svg +4 -0
- package/dist/assets/icons/logout.svg +3 -0
- package/dist/assets/icons/loudspeaker.svg +3 -0
- package/dist/assets/icons/lounge-chair.svg +5 -0
- package/dist/assets/icons/luggage-backpack.svg +4 -0
- package/dist/assets/icons/luggage-backpacker.svg +4 -0
- package/dist/assets/icons/luggage-box.svg +5 -0
- package/dist/assets/icons/luggage-extra.svg +4 -0
- package/dist/assets/icons/luggage-golf.svg +4 -0
- package/dist/assets/icons/luggage-hand-plus.svg +5 -0
- package/dist/assets/icons/luggage-hand.svg +4 -0
- package/dist/assets/icons/luggage-liquids.svg +6 -0
- package/dist/assets/icons/luggage-notincluded.svg +3 -0
- package/dist/assets/icons/luggage-plus.svg +5 -0
- package/dist/assets/icons/luggage-sport.svg +4 -0
- package/dist/assets/icons/luggage-suitcase-extra.svg +5 -0
- package/dist/assets/icons/luggage-suitcase.svg +4 -0
- package/dist/assets/icons/luggage-trolley-extra.svg +5 -0
- package/dist/assets/icons/luggage-trolley.svg +3 -0
- package/dist/assets/icons/luggage-weekender.svg +4 -0
- package/dist/assets/icons/luggage.svg +3 -0
- package/dist/assets/icons/lying-chair.svg +4 -0
- package/dist/assets/icons/magnet.svg +3 -0
- package/dist/assets/icons/mail.svg +4 -0
- package/dist/assets/icons/map.svg +3 -0
- package/dist/assets/icons/meal-serving-plate.svg +5 -0
- package/dist/assets/icons/meal.svg +5 -0
- package/dist/assets/icons/medal.svg +4 -0
- package/dist/assets/icons/megaphone.svg +5 -0
- package/dist/assets/icons/menu-filter.svg +3 -0
- package/dist/assets/icons/menu.svg +3 -0
- package/dist/assets/icons/message-alert.svg +3 -0
- package/dist/assets/icons/message-info.svg +4 -0
- package/dist/assets/icons/message-love.svg +4 -0
- package/dist/assets/icons/message-push.svg +4 -0
- package/dist/assets/icons/message-text.svg +4 -0
- package/dist/assets/icons/message.svg +3 -0
- package/dist/assets/icons/mic.svg +4 -0
- package/dist/assets/icons/miniclub.svg +5 -0
- package/dist/assets/icons/minimize.svg +3 -0
- package/dist/assets/icons/minus-circled.svg +4 -0
- package/dist/assets/icons/minus-heavy.svg +3 -0
- package/dist/assets/icons/minus.svg +3 -0
- package/dist/assets/icons/moon.svg +3 -0
- package/dist/assets/icons/moose.svg +5 -0
- package/dist/assets/icons/mountain.svg +4 -0
- package/dist/assets/icons/mouth.svg +3 -0
- package/dist/assets/icons/muffin.svg +4 -0
- package/dist/assets/icons/museum.svg +3 -0
- package/dist/assets/icons/mustache.svg +3 -0
- package/dist/assets/icons/network.svg +3 -0
- package/dist/assets/icons/newsletter.svg +6 -0
- package/dist/assets/icons/none.svg +3 -0
- package/dist/assets/icons/nordic-walking.svg +3 -0
- package/dist/assets/icons/notepad.svg +3 -0
- package/dist/assets/icons/number.svg +3 -0
- package/dist/assets/icons/on-board-meals.svg +4 -0
- package/dist/assets/icons/paperjet.svg +4 -0
- package/dist/assets/icons/parasol.svg +4 -0
- package/dist/assets/icons/parking-garage.svg +4 -0
- package/dist/assets/icons/parking-time.svg +4 -0
- package/dist/assets/icons/pass-boarding.svg +4 -0
- package/dist/assets/icons/paw.svg +3 -0
- package/dist/assets/icons/pencil.svg +3 -0
- package/dist/assets/icons/pharmacy.svg +4 -0
- package/dist/assets/icons/phone-checkin.svg +4 -0
- package/dist/assets/icons/phone-push.svg +5 -0
- package/dist/assets/icons/phone.svg +3 -0
- package/dist/assets/icons/picture-mountain.svg +5 -0
- package/dist/assets/icons/picture-stack.svg +5 -0
- package/dist/assets/icons/picture-sunset.svg +4 -0
- package/dist/assets/icons/picture.svg +3 -0
- package/dist/assets/icons/piggy-bank.svg +5 -0
- package/dist/assets/icons/pin.svg +3 -0
- package/dist/assets/icons/play-circled.svg +4 -0
- package/dist/assets/icons/play-next.svg +3 -0
- package/dist/assets/icons/play-pause.svg +3 -0
- package/dist/assets/icons/play-prev.svg +3 -0
- package/dist/assets/icons/play-stop-circled.svg +4 -0
- package/dist/assets/icons/play-stop.svg +3 -0
- package/dist/assets/icons/play.svg +3 -0
- package/dist/assets/icons/plug.svg +3 -0
- package/dist/assets/icons/plus-circled.svg +4 -0
- package/dist/assets/icons/plus-heavy.svg +3 -0
- package/dist/assets/icons/plus.svg +3 -0
- package/dist/assets/icons/popsicle.svg +3 -0
- package/dist/assets/icons/postit.svg +4 -0
- package/dist/assets/icons/pricetag.svg +4 -0
- package/dist/assets/icons/printer.svg +5 -0
- package/dist/assets/icons/projector-canvas.svg +3 -0
- package/dist/assets/icons/puzzle.svg +3 -0
- package/dist/assets/icons/question-mark-bold.svg +4 -0
- package/dist/assets/icons/question-mark-circled.svg +4 -0
- package/dist/assets/icons/question-mark-ultrabold.svg +4 -0
- package/dist/assets/icons/question-mark.svg +3 -0
- package/dist/assets/icons/rainbow.svg +5 -0
- package/dist/assets/icons/reduced-circled.svg +4 -0
- package/dist/assets/icons/reduced.svg +3 -0
- package/dist/assets/icons/relax.svg +4 -0
- package/dist/assets/icons/resize.svg +4 -0
- package/dist/assets/icons/robot-smile.svg +16 -0
- package/dist/assets/icons/robot.svg +8 -0
- package/dist/assets/icons/room-location.svg +5 -0
- package/dist/assets/icons/room-selection.svg +5 -0
- package/dist/assets/icons/room-upgrade.svg +5 -0
- package/dist/assets/icons/running-shoe.svg +4 -0
- package/dist/assets/icons/sail.svg +3 -0
- package/dist/assets/icons/sailboat.svg +4 -0
- package/dist/assets/icons/sailing-yawl.svg +3 -0
- package/dist/assets/icons/save.svg +4 -0
- package/dist/assets/icons/scan-code.svg +5 -0
- package/dist/assets/icons/scissors.svg +4 -0
- package/dist/assets/icons/seal.svg +4 -0
- package/dist/assets/icons/search-heart.svg +4 -0
- package/dist/assets/icons/search-list.svg +4 -0
- package/dist/assets/icons/search.svg +4 -0
- package/dist/assets/icons/seat-check.svg +3 -0
- package/dist/assets/icons/seat-child.svg +4 -0
- package/dist/assets/icons/seat-comfort.svg +3 -0
- package/dist/assets/icons/seat-extra-legroom.svg +5 -0
- package/dist/assets/icons/seat-extra-space.svg +5 -0
- package/dist/assets/icons/seat-extra.svg +5 -0
- package/dist/assets/icons/seat-plus.svg +3 -0
- package/dist/assets/icons/seat-premium.svg +4 -0
- package/dist/assets/icons/seat-selection.svg +10 -0
- package/dist/assets/icons/seat-star.svg +3 -0
- package/dist/assets/icons/seat-top-booked.svg +5 -0
- package/dist/assets/icons/seat-top.svg +4 -0
- package/dist/assets/icons/seat.svg +3 -0
- package/dist/assets/icons/security-check.svg +7 -0
- package/dist/assets/icons/select.svg +3 -0
- package/dist/assets/icons/send.svg +3 -0
- package/dist/assets/icons/service-bell.svg +3 -0
- package/dist/assets/icons/serving-trolley.svg +6 -0
- package/dist/assets/icons/settings.svg +4 -0
- package/dist/assets/icons/sex-diversity.svg +3 -0
- package/dist/assets/icons/sex-female.svg +3 -0
- package/dist/assets/icons/sex-male.svg +3 -0
- package/dist/assets/icons/share-box.svg +4 -0
- package/dist/assets/icons/share.svg +6 -0
- package/dist/assets/icons/shield-check.svg +4 -0
- package/dist/assets/icons/shield-flex.svg +6 -0
- package/dist/assets/icons/shield-warning.svg +3 -0
- package/dist/assets/icons/shield.svg +3 -0
- package/dist/assets/icons/ship-river.svg +4 -0
- package/dist/assets/icons/ship.svg +5 -0
- package/dist/assets/icons/shoe.svg +3 -0
- package/dist/assets/icons/shop.svg +4 -0
- package/dist/assets/icons/shopping-bag-tui.svg +4 -0
- package/dist/assets/icons/shopping-bag.svg +4 -0
- package/dist/assets/icons/shoppingcart.svg +6 -0
- package/dist/assets/icons/shower-rain.svg +3 -0
- package/dist/assets/icons/shower.svg +3 -0
- package/dist/assets/icons/sign-airport.svg +4 -0
- package/dist/assets/icons/sign-bio.svg +5 -0
- package/dist/assets/icons/sign-directions.svg +12 -0
- package/dist/assets/icons/sign-first-aid.svg +4 -0
- package/dist/assets/icons/sign-gluten-free.svg +7 -0
- package/dist/assets/icons/sign-hotel.svg +3 -0
- package/dist/assets/icons/sign-info.svg +5 -0
- package/dist/assets/icons/sign-parking.svg +4 -0
- package/dist/assets/icons/sign-vegan.svg +4 -0
- package/dist/assets/icons/sign-vegetarian.svg +5 -0
- package/dist/assets/icons/signpost-direction.svg +3 -0
- package/dist/assets/icons/signpost-directions.svg +3 -0
- package/dist/assets/icons/signpost-hotel.svg +3 -0
- package/dist/assets/icons/ski-crosscountry.svg +4 -0
- package/dist/assets/icons/ski-mountain.svg +3 -0
- package/dist/assets/icons/snow.svg +3 -0
- package/dist/assets/icons/social-distancing.svg +5 -0
- package/dist/assets/icons/sort.svg +3 -0
- package/dist/assets/icons/square.svg +3 -0
- package/dist/assets/icons/star-circled.svg +4 -0
- package/dist/assets/icons/star-half.svg +3 -0
- package/dist/assets/icons/star.svg +3 -0
- package/dist/assets/icons/stats-bar.svg +3 -0
- package/dist/assets/icons/stats-growth.svg +4 -0
- package/dist/assets/icons/stats-pie.svg +4 -0
- package/dist/assets/icons/stats-rise.svg +3 -0
- package/dist/assets/icons/steering-wheel.svg +7 -0
- package/dist/assets/icons/steering.svg +3 -0
- package/dist/assets/icons/stewardess.svg +5 -0
- package/dist/assets/icons/suitcase-purchase.svg +5 -0
- package/dist/assets/icons/sum.svg +3 -0
- package/dist/assets/icons/sun-circled.svg +4 -0
- package/dist/assets/icons/sun-hours.svg +5 -0
- package/dist/assets/icons/sun-set.svg +3 -0
- package/dist/assets/icons/sun-tui-half.svg +4 -0
- package/dist/assets/icons/sun-tui.svg +4 -0
- package/dist/assets/icons/sun.svg +4 -0
- package/dist/assets/icons/surfing.svg +4 -0
- package/dist/assets/icons/swimming-bath.svg +3 -0
- package/dist/assets/icons/swimming-pool.svg +3 -0
- package/dist/assets/icons/sync-failed.svg +4 -0
- package/dist/assets/icons/sync.svg +4 -0
- package/dist/assets/icons/tape-measure.svg +4 -0
- package/dist/assets/icons/target-blank.svg +3 -0
- package/dist/assets/icons/target.svg +5 -0
- package/dist/assets/icons/teddy.svg +5 -0
- package/dist/assets/icons/temp-air.svg +5 -0
- package/dist/assets/icons/temp-low.svg +4 -0
- package/dist/assets/icons/temp-time.svg +7 -0
- package/dist/assets/icons/temp-water.svg +5 -0
- package/dist/assets/icons/temp.svg +4 -0
- package/dist/assets/icons/tennis-ball.svg +4 -0
- package/dist/assets/icons/tennis.svg +5 -0
- package/dist/assets/icons/tent.svg +4 -0
- package/dist/assets/icons/thumbnails.svg +3 -0
- package/dist/assets/icons/thumbs-up--down.svg +3 -0
- package/dist/assets/icons/thumbs-up.svg +3 -0
- package/dist/assets/icons/thunder.svg +3 -0
- package/dist/assets/icons/ticket-coins.svg +5 -0
- package/dist/assets/icons/ticket-envelope.svg +5 -0
- package/dist/assets/icons/ticket.svg +3 -0
- package/dist/assets/icons/tickets.svg +3 -0
- package/dist/assets/icons/tipi.svg +4 -0
- package/dist/assets/icons/toilet-paper.svg +5 -0
- package/dist/assets/icons/toilet.svg +3 -0
- package/dist/assets/icons/toolkit-cases-open.svg +3 -0
- package/dist/assets/icons/toolkit-cases.svg +3 -0
- package/dist/assets/icons/toolkit.svg +4 -0
- package/dist/assets/icons/towel.svg +3 -0
- package/dist/assets/icons/track.svg +3 -0
- package/dist/assets/icons/train.svg +4 -0
- package/dist/assets/icons/transfer-private.svg +5 -0
- package/dist/assets/icons/transfer-taxi.svg +4 -0
- package/dist/assets/icons/transfers-coach.svg +6 -0
- package/dist/assets/icons/transfers-train.svg +4 -0
- package/dist/assets/icons/trash-crossed.svg +3 -0
- package/dist/assets/icons/trash.svg +4 -0
- package/dist/assets/icons/travel-documents.svg +6 -0
- package/dist/assets/icons/travel-guide.svg +5 -0
- package/dist/assets/icons/travel-money.svg +4 -0
- package/dist/assets/icons/treats-in-flight.svg +4 -0
- package/dist/assets/icons/trolley-purchase.svg +5 -0
- package/dist/assets/icons/tub.svg +5 -0
- package/dist/assets/icons/tui-card.svg +4 -0
- package/dist/assets/icons/tui-chat.svg +5 -0
- package/dist/assets/icons/tui-cloud.svg +3 -0
- package/dist/assets/icons/tui-extras.svg +4 -0
- package/dist/assets/icons/typography.svg +3 -0
- package/dist/assets/icons/ui-banner.svg +4 -0
- package/dist/assets/icons/umbrella.svg +5 -0
- package/dist/assets/icons/undo.svg +4 -0
- package/dist/assets/icons/upload.svg +3 -0
- package/dist/assets/icons/user-business.svg +4 -0
- package/dist/assets/icons/user-casual.svg +4 -0
- package/dist/assets/icons/user-chat.svg +4 -0
- package/dist/assets/icons/user-circled.svg +4 -0
- package/dist/assets/icons/user-couple.svg +3 -0
- package/dist/assets/icons/user-driver.svg +6 -0
- package/dist/assets/icons/user-drivers.svg +4 -0
- package/dist/assets/icons/user-expert.svg +4 -0
- package/dist/assets/icons/user-family.svg +4 -0
- package/dist/assets/icons/user-friends.svg +3 -0
- package/dist/assets/icons/user-group.svg +4 -0
- package/dist/assets/icons/user-passport.svg +5 -0
- package/dist/assets/icons/user-plus.svg +3 -0
- package/dist/assets/icons/user-skipass.svg +4 -0
- package/dist/assets/icons/user-visa.svg +6 -0
- package/dist/assets/icons/user.svg +3 -0
- package/dist/assets/icons/users.svg +4 -0
- package/dist/assets/icons/view-hidden.svg +4 -0
- package/dist/assets/icons/view.svg +4 -0
- package/dist/assets/icons/villa.svg +4 -0
- package/dist/assets/icons/virtualtour.svg +4 -0
- package/dist/assets/icons/warehouse.svg +3 -0
- package/dist/assets/icons/wash-hands.svg +3 -0
- package/dist/assets/icons/watch.svg +3 -0
- package/dist/assets/icons/water-boiler.svg +4 -0
- package/dist/assets/icons/water-slide.svg +4 -0
- package/dist/assets/icons/water.svg +3 -0
- package/dist/assets/icons/welcome-pack.svg +3 -0
- package/dist/assets/icons/wellness.svg +6 -0
- package/dist/assets/icons/whatsapp.svg +4 -0
- package/dist/assets/icons/wheel.svg +6 -0
- package/dist/assets/icons/wheelchair.svg +4 -0
- package/dist/assets/icons/wifi.svg +3 -0
- package/dist/assets/icons/wind-surfing.svg +3 -0
- package/dist/assets/icons/world-globe.svg +4 -0
- package/dist/assets/icons/world-travel.svg +5 -0
- package/dist/assets/icons/world.svg +5 -0
- package/dist/core/base/base.css +13 -0
- package/dist/core/base/fonts.css +1 -0
- package/dist/core/base/reset.css +48 -0
- package/dist/core/base/typography.css +119 -0
- package/dist/core/index.css +12 -0
- package/dist/core/recipes/layout.css +24 -0
- package/dist/core/themes/mode.css +5 -0
- package/dist/main.css +1044 -0
- package/dist/react/button.js +95 -0
- package/dist/react/checkbox.js +43 -0
- package/dist/react/icon.js +50 -0
- package/dist/react/index.js +5 -0
- package/dist/react/input.js +12 -0
- package/dist/react/label.js +125 -0
- package/dist/tokens/css/brand-a.tokens.css +22 -0
- package/dist/tokens/css/brand-b.tokens.css +22 -0
- package/dist/tokens/css/color.dark.tokens.css +32 -0
- package/dist/tokens/css/color.light.tokens.css +32 -0
- package/dist/tokens/css/component.tokens.css +103 -0
- package/dist/tokens/css/primitives.tokens.css +127 -0
- package/dist/tokens/css/semantic.tokens.css +35 -0
- package/dist/tokens/json/brand-a.tokens.json +192 -0
- package/dist/tokens/json/brand-b.tokens.json +192 -0
- package/dist/tokens/json/color.dark.tokens.json +364 -0
- package/dist/tokens/json/color.light.tokens.json +364 -0
- package/dist/tokens/json/component.tokens.json +1101 -0
- package/dist/tokens/json/primitives.tokens.json +1077 -0
- package/dist/tokens/json/semantic.tokens.json +206 -0
- package/dist/tokens/tokens.yaml +4400 -0
- package/dist/tokens/ts/brand-a.tokens.ts +32 -0
- package/dist/tokens/ts/brand-b.tokens.ts +32 -0
- package/dist/tokens/ts/color.dark.tokens.ts +36 -0
- package/dist/tokens/ts/color.light.tokens.ts +36 -0
- package/dist/tokens/ts/component.tokens.ts +107 -0
- package/dist/tokens/ts/primitives.tokens.ts +152 -0
- package/dist/tokens/ts/semantic.tokens.ts +42 -0
- package/dist/ui/index.css +5 -0
- package/dist/ui/patterns/button.css +241 -0
- package/dist/ui/patterns/checkbox.css +97 -0
- package/dist/ui/patterns/icon.css +20 -0
- package/dist/ui/patterns/input.css +76 -0
- package/dist/ui/patterns/label.css +49 -0
- package/docs/foundations/foundation-001-token-layering.md +27 -0
- package/docs/foundations/foundation-002-naming-and-grouping.md +38 -0
- package/docs/foundations/foundation-003-color-semantics-and-status.md +35 -0
- package/docs/foundations/foundation-004-typography-scale-and-line-height.md +39 -0
- package/docs/foundations/foundation-005-responsive-breakpoints-and-containers.md +23 -0
- package/docs/foundations/foundation-006-z-index-layering.md +31 -0
- package/docs/foundations/foundation-007-typography-selectors-and-specificity.md +24 -0
- package/docs/foundations/foundation-008-mode-activation-and-consumer-control.md +27 -0
- package/docs/foundations/foundation-009-component-boundaries-and-utility.md +30 -0
- package/package.json +64 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { LabelContent } from "./label.js";
|
|
3
|
+
|
|
4
|
+
function normalizeOrientation(value) {
|
|
5
|
+
return value === "vertical" ? "vertical" : "horizontal";
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function normalizeJustify(value) {
|
|
9
|
+
return value === "stretch" ? "stretch" : "start";
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function Button({
|
|
13
|
+
variant = "solid",
|
|
14
|
+
className = "",
|
|
15
|
+
type = "button",
|
|
16
|
+
label,
|
|
17
|
+
startIcon,
|
|
18
|
+
endIcon,
|
|
19
|
+
iconOnly,
|
|
20
|
+
ariaLabel,
|
|
21
|
+
children,
|
|
22
|
+
...props
|
|
23
|
+
}) {
|
|
24
|
+
const classes = ["button"];
|
|
25
|
+
|
|
26
|
+
if (variant === "outline") classes.push("outline");
|
|
27
|
+
if (variant === "ghost") classes.push("ghost");
|
|
28
|
+
if (className) classes.push(className);
|
|
29
|
+
|
|
30
|
+
const content = children ?? label;
|
|
31
|
+
const hasReadableLabel =
|
|
32
|
+
typeof content === "string"
|
|
33
|
+
? content.trim().length > 0
|
|
34
|
+
: content !== null && content !== undefined && content !== false;
|
|
35
|
+
const resolvedIconOnly = iconOnly ?? !hasReadableLabel;
|
|
36
|
+
const iconStart = resolvedIconOnly ? startIcon || endIcon : startIcon;
|
|
37
|
+
const iconEnd = resolvedIconOnly ? undefined : endIcon;
|
|
38
|
+
|
|
39
|
+
if (resolvedIconOnly) classes.push("button--icon-only");
|
|
40
|
+
|
|
41
|
+
const buttonProps = {
|
|
42
|
+
type,
|
|
43
|
+
className: classes.join(" "),
|
|
44
|
+
...props,
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
if (resolvedIconOnly && !buttonProps["aria-label"] && ariaLabel) {
|
|
48
|
+
buttonProps["aria-label"] = ariaLabel;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (resolvedIconOnly && !buttonProps["aria-label"]) {
|
|
52
|
+
console.warn(
|
|
53
|
+
"[ui-foundations] iconOnly Button should include `ariaLabel` or `aria-label`.",
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return React.createElement(
|
|
58
|
+
"button",
|
|
59
|
+
buttonProps,
|
|
60
|
+
React.createElement(
|
|
61
|
+
LabelContent,
|
|
62
|
+
{
|
|
63
|
+
startIcon: iconStart,
|
|
64
|
+
endIcon: iconEnd,
|
|
65
|
+
iconOnly: resolvedIconOnly,
|
|
66
|
+
},
|
|
67
|
+
content,
|
|
68
|
+
),
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export function ButtonGroup({
|
|
73
|
+
className = "",
|
|
74
|
+
orientation = "horizontal",
|
|
75
|
+
attached = false,
|
|
76
|
+
justify = "start",
|
|
77
|
+
children,
|
|
78
|
+
...props
|
|
79
|
+
}) {
|
|
80
|
+
const classes = ["button-group"];
|
|
81
|
+
if (className) classes.push(className);
|
|
82
|
+
|
|
83
|
+
return React.createElement(
|
|
84
|
+
"div",
|
|
85
|
+
{
|
|
86
|
+
role: "group",
|
|
87
|
+
className: classes.join(" "),
|
|
88
|
+
"data-orientation": normalizeOrientation(orientation),
|
|
89
|
+
"data-attached": attached ? "true" : "false",
|
|
90
|
+
"data-justify": normalizeJustify(justify),
|
|
91
|
+
...props,
|
|
92
|
+
},
|
|
93
|
+
children,
|
|
94
|
+
);
|
|
95
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
function hasLabelContent(value) {
|
|
4
|
+
if (value === null || value === undefined || value === false) return false;
|
|
5
|
+
if (typeof value === "string") return value.trim().length > 0;
|
|
6
|
+
if (Array.isArray(value)) return value.some(hasLabelContent);
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function Checkbox({
|
|
11
|
+
className = "",
|
|
12
|
+
wrapperClassName = "",
|
|
13
|
+
label,
|
|
14
|
+
children,
|
|
15
|
+
...props
|
|
16
|
+
}) {
|
|
17
|
+
const classes = ["checkbox"];
|
|
18
|
+
if (className) classes.push(className);
|
|
19
|
+
|
|
20
|
+
const content = children ?? label;
|
|
21
|
+
const hasLabel = hasLabelContent(content);
|
|
22
|
+
const disabled = Boolean(props.disabled);
|
|
23
|
+
const input = React.createElement("input", {
|
|
24
|
+
type: "checkbox",
|
|
25
|
+
className: classes.join(" "),
|
|
26
|
+
...props,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
if (!hasLabel) return input;
|
|
30
|
+
|
|
31
|
+
const wrapperClasses = ["checkbox-field"];
|
|
32
|
+
if (disabled) wrapperClasses.push("is-disabled");
|
|
33
|
+
if (wrapperClassName) wrapperClasses.push(wrapperClassName);
|
|
34
|
+
|
|
35
|
+
return React.createElement(
|
|
36
|
+
"label",
|
|
37
|
+
{
|
|
38
|
+
className: wrapperClasses.join(" "),
|
|
39
|
+
},
|
|
40
|
+
input,
|
|
41
|
+
React.createElement("span", { className: "checkbox-field__text" }, content),
|
|
42
|
+
);
|
|
43
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
function resolveIconUrl(name, folder, src) {
|
|
4
|
+
if (src) return src;
|
|
5
|
+
return new URL(`../assets/${folder}/${name}.svg`, import.meta.url).href;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function humanizeName(name) {
|
|
9
|
+
return String(name || "")
|
|
10
|
+
.replace(/[-_]+/g, " ")
|
|
11
|
+
.trim();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function Icon({
|
|
15
|
+
name,
|
|
16
|
+
src,
|
|
17
|
+
label,
|
|
18
|
+
folder = "icons",
|
|
19
|
+
decorative,
|
|
20
|
+
className = "",
|
|
21
|
+
style,
|
|
22
|
+
...props
|
|
23
|
+
}) {
|
|
24
|
+
if (!name && !src) return null;
|
|
25
|
+
|
|
26
|
+
const iconUrl = resolveIconUrl(name, folder, src);
|
|
27
|
+
const isDecorative = decorative ?? !label;
|
|
28
|
+
const classes = ["icon"];
|
|
29
|
+
if (className) classes.push(className);
|
|
30
|
+
|
|
31
|
+
const mergedStyle = {
|
|
32
|
+
"--icon-src": `url(${JSON.stringify(iconUrl)})`,
|
|
33
|
+
...style,
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const accessibilityProps = {};
|
|
37
|
+
if (isDecorative) {
|
|
38
|
+
accessibilityProps["aria-hidden"] = true;
|
|
39
|
+
} else {
|
|
40
|
+
accessibilityProps.role = "img";
|
|
41
|
+
accessibilityProps["aria-label"] = label || humanizeName(name);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return React.createElement("span", {
|
|
45
|
+
className: classes.join(" "),
|
|
46
|
+
style: mergedStyle,
|
|
47
|
+
...accessibilityProps,
|
|
48
|
+
...props,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
export function Input({ className = "", type = "text", ...props }) {
|
|
4
|
+
const classes = ["input"];
|
|
5
|
+
if (className) classes.push(className);
|
|
6
|
+
|
|
7
|
+
return React.createElement("input", {
|
|
8
|
+
type,
|
|
9
|
+
className: classes.join(" "),
|
|
10
|
+
...props,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Icon } from "./icon.js";
|
|
3
|
+
|
|
4
|
+
function hasTextContent(value) {
|
|
5
|
+
if (value === null || value === undefined || value === false) return false;
|
|
6
|
+
if (typeof value === "string") return value.trim().length > 0;
|
|
7
|
+
if (Array.isArray(value)) return value.some(hasTextContent);
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function renderIcon(icon, position) {
|
|
12
|
+
if (!icon) return null;
|
|
13
|
+
|
|
14
|
+
if (React.isValidElement(icon)) {
|
|
15
|
+
return React.cloneElement(icon, {
|
|
16
|
+
"data-slot": position,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (typeof icon === "string") {
|
|
21
|
+
return React.createElement(Icon, {
|
|
22
|
+
name: icon,
|
|
23
|
+
decorative: true,
|
|
24
|
+
"data-slot": position,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (typeof icon === "object") {
|
|
29
|
+
const iconProps = { ...icon };
|
|
30
|
+
if (iconProps.decorative === undefined) {
|
|
31
|
+
iconProps.decorative = true;
|
|
32
|
+
}
|
|
33
|
+
iconProps["data-slot"] = position;
|
|
34
|
+
return React.createElement(Icon, iconProps);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function LabelContent({
|
|
41
|
+
children,
|
|
42
|
+
text,
|
|
43
|
+
startIcon,
|
|
44
|
+
endIcon,
|
|
45
|
+
iconOnly,
|
|
46
|
+
className = "",
|
|
47
|
+
...props
|
|
48
|
+
}) {
|
|
49
|
+
const content = children ?? text;
|
|
50
|
+
const resolvedIconOnly = iconOnly ?? !hasTextContent(content);
|
|
51
|
+
const classes = ["label-content"];
|
|
52
|
+
|
|
53
|
+
if (resolvedIconOnly) classes.push("is-icon-only");
|
|
54
|
+
if (className) classes.push(className);
|
|
55
|
+
|
|
56
|
+
const textNode = hasTextContent(content)
|
|
57
|
+
? React.createElement("span", { className: "label-content__text" }, content)
|
|
58
|
+
: null;
|
|
59
|
+
|
|
60
|
+
return React.createElement(
|
|
61
|
+
"span",
|
|
62
|
+
{
|
|
63
|
+
className: classes.join(" "),
|
|
64
|
+
...props,
|
|
65
|
+
},
|
|
66
|
+
renderIcon(startIcon, "start"),
|
|
67
|
+
textNode,
|
|
68
|
+
renderIcon(endIcon, "end"),
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export function FieldLabel({
|
|
73
|
+
htmlFor,
|
|
74
|
+
required = false,
|
|
75
|
+
requiredText = "required",
|
|
76
|
+
className = "",
|
|
77
|
+
children,
|
|
78
|
+
text,
|
|
79
|
+
startIcon,
|
|
80
|
+
endIcon,
|
|
81
|
+
iconOnly,
|
|
82
|
+
...props
|
|
83
|
+
}) {
|
|
84
|
+
const classes = ["field-label"];
|
|
85
|
+
if (className) classes.push(className);
|
|
86
|
+
|
|
87
|
+
const requiredBadge = required
|
|
88
|
+
? React.createElement(
|
|
89
|
+
"span",
|
|
90
|
+
{
|
|
91
|
+
className: "field-label__required",
|
|
92
|
+
"aria-hidden": true,
|
|
93
|
+
},
|
|
94
|
+
"*",
|
|
95
|
+
)
|
|
96
|
+
: null;
|
|
97
|
+
|
|
98
|
+
const requiredA11yText = required
|
|
99
|
+
? React.createElement(
|
|
100
|
+
"span",
|
|
101
|
+
{ className: "field-label__required-text" },
|
|
102
|
+
` (${requiredText})`,
|
|
103
|
+
)
|
|
104
|
+
: null;
|
|
105
|
+
|
|
106
|
+
return React.createElement(
|
|
107
|
+
"label",
|
|
108
|
+
{
|
|
109
|
+
htmlFor,
|
|
110
|
+
className: classes.join(" "),
|
|
111
|
+
...props,
|
|
112
|
+
},
|
|
113
|
+
React.createElement(
|
|
114
|
+
LabelContent,
|
|
115
|
+
{
|
|
116
|
+
startIcon,
|
|
117
|
+
endIcon,
|
|
118
|
+
iconOnly,
|
|
119
|
+
},
|
|
120
|
+
children ?? text,
|
|
121
|
+
),
|
|
122
|
+
requiredBadge,
|
|
123
|
+
requiredA11yText,
|
|
124
|
+
);
|
|
125
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* Auto-generated design tokens from Figma */
|
|
2
|
+
/* Generated on 2026-03-04T20:50:34.061Z */
|
|
3
|
+
|
|
4
|
+
:root[data-brand="a"] {
|
|
5
|
+
--brand-color-primary: var(--color-brand-a-purple-600);
|
|
6
|
+
--brand-color-primary-dark: var(--color-brand-a-purple-800);
|
|
7
|
+
--brand-color-accent: var(--color-brand-a-blue-500);
|
|
8
|
+
--brand-color-subtle: var(--color-neutral-500);
|
|
9
|
+
--brand-color-subtle-light: var(--color-neutral-200);
|
|
10
|
+
--brand-color-subtle-dark: var(--color-neutral-800);
|
|
11
|
+
--brand-color-accent-dark: var(--color-brand-a-blue-700);
|
|
12
|
+
--brand-color-functional-base: var(--color-brand-a-blue-700);
|
|
13
|
+
--brand-color-functional-base-dark: var(--color-brand-a-blue-800);
|
|
14
|
+
--brand-color-functional-success: var(--color-brand-a-green);
|
|
15
|
+
--brand-color-functional-danger: var(--color-brand-a-red);
|
|
16
|
+
--brand-font-lead: var(--font-family-serif);
|
|
17
|
+
--brand-font-base: var(--font-family-sans);
|
|
18
|
+
--brand-corner-button: var(--size-radius-full);
|
|
19
|
+
--brand-corner-input: var(--size-radius-200);
|
|
20
|
+
--brand-corner-card: var(--size-radius-200);
|
|
21
|
+
--brand-corner-modal: var(--size-radius-400);
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* Auto-generated design tokens from Figma */
|
|
2
|
+
/* Generated on 2026-03-04T20:50:34.063Z */
|
|
3
|
+
|
|
4
|
+
:root[data-brand="b"] {
|
|
5
|
+
--brand-color-primary: var(--color-brand-b-blue-500);
|
|
6
|
+
--brand-color-primary-dark: var(--color-brand-b-blue-700);
|
|
7
|
+
--brand-color-accent: var(--color-brand-b-purple-600);
|
|
8
|
+
--brand-color-subtle: var(--color-neutral-500);
|
|
9
|
+
--brand-color-subtle-light: var(--color-neutral-200);
|
|
10
|
+
--brand-color-subtle-dark: var(--color-neutral-800);
|
|
11
|
+
--brand-color-accent-dark: var(--color-brand-b-purple-800);
|
|
12
|
+
--brand-color-functional-base: var(--color-brand-b-purple-600);
|
|
13
|
+
--brand-color-functional-base-dark: var(--color-brand-b-purple-800);
|
|
14
|
+
--brand-color-functional-success: var(--color-brand-b-green);
|
|
15
|
+
--brand-color-functional-danger: var(--color-brand-b-red);
|
|
16
|
+
--brand-font-lead: var(--font-family-serif);
|
|
17
|
+
--brand-font-base: var(--font-family-sans);
|
|
18
|
+
--brand-corner-button: var(--size-radius-000);
|
|
19
|
+
--brand-corner-input: var(--size-radius-000);
|
|
20
|
+
--brand-corner-card: var(--size-radius-100);
|
|
21
|
+
--brand-corner-modal: var(--size-radius-200);
|
|
22
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/* Auto-generated design tokens from Figma */
|
|
2
|
+
/* Generated on 2026-03-04T20:50:34.068Z */
|
|
3
|
+
|
|
4
|
+
:root[data-mode="dark"] {
|
|
5
|
+
--color-focus: var(--brand-color-primary-dark);
|
|
6
|
+
--color-text-default: var(--color-neutral-800);
|
|
7
|
+
--color-text-inverse: var(--color-neutral-1000);
|
|
8
|
+
--color-text-disabled: var(--color-neutral-600);
|
|
9
|
+
--color-text-brand: var(--brand-color-primary-dark);
|
|
10
|
+
--color-text-subtle: var(--brand-color-subtle-dark);
|
|
11
|
+
--color-text-strong: var(--color-neutral-1000);
|
|
12
|
+
--color-text-danger: var(--brand-color-functional-danger);
|
|
13
|
+
--color-text-success: var(--brand-color-functional-success);
|
|
14
|
+
--color-fill-surface: var(--color-neutral-1000);
|
|
15
|
+
--color-fill-disabled: var(--color-neutral-300);
|
|
16
|
+
--color-fill-hover: var(--color-neutral-alpha-500);
|
|
17
|
+
--color-fill-brand: var(--brand-color-primary);
|
|
18
|
+
--color-fill-subtle: var(--brand-color-subtle);
|
|
19
|
+
--color-fill-active: var(--brand-color-accent);
|
|
20
|
+
--color-fill-danger: var(--brand-color-functional-danger);
|
|
21
|
+
--color-fill-success: var(--brand-color-functional-success);
|
|
22
|
+
--color-border-default: var(--color-neutral-800);
|
|
23
|
+
--color-border-subtle: var(--brand-color-subtle-dark);
|
|
24
|
+
--color-border-strong: var(--color-neutral-1000);
|
|
25
|
+
--color-border-brand: var(--brand-color-primary);
|
|
26
|
+
--color-border-disabled: var(--color-neutral-500);
|
|
27
|
+
--color-border-danger: var(--brand-color-functional-danger);
|
|
28
|
+
--color-overlay-backdrop: var(--color-neutral-alpha-400);
|
|
29
|
+
--color-overlay-hover: var(--color-neutral-alpha-200);
|
|
30
|
+
--color-overlay-active: var(--color-neutral-alpha-400);
|
|
31
|
+
--color-overlay-selected: var(--color-neutral-alpha-600);
|
|
32
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/* Auto-generated design tokens from Figma */
|
|
2
|
+
/* Generated on 2026-03-04T20:50:34.069Z */
|
|
3
|
+
|
|
4
|
+
:root {
|
|
5
|
+
--color-focus: var(--brand-color-primary);
|
|
6
|
+
--color-text-default: var(--color-neutral-800);
|
|
7
|
+
--color-text-inverse: var(--color-neutral-000);
|
|
8
|
+
--color-text-disabled: var(--color-neutral-600);
|
|
9
|
+
--color-text-brand: var(--brand-color-primary);
|
|
10
|
+
--color-text-subtle: var(--brand-color-subtle);
|
|
11
|
+
--color-text-strong: var(--color-neutral-1000);
|
|
12
|
+
--color-text-danger: var(--brand-color-functional-danger);
|
|
13
|
+
--color-text-success: var(--brand-color-functional-success);
|
|
14
|
+
--color-fill-surface: var(--color-neutral-000);
|
|
15
|
+
--color-fill-disabled: var(--color-neutral-300);
|
|
16
|
+
--color-fill-hover: var(--color-neutral-alpha-500);
|
|
17
|
+
--color-fill-brand: var(--brand-color-primary);
|
|
18
|
+
--color-fill-subtle: var(--brand-color-subtle-light);
|
|
19
|
+
--color-fill-active: var(--brand-color-accent);
|
|
20
|
+
--color-fill-danger: var(--brand-color-functional-danger);
|
|
21
|
+
--color-fill-success: var(--brand-color-functional-success);
|
|
22
|
+
--color-border-default: var(--color-neutral-800);
|
|
23
|
+
--color-border-subtle: var(--brand-color-subtle);
|
|
24
|
+
--color-border-strong: var(--color-neutral-1000);
|
|
25
|
+
--color-border-brand: var(--brand-color-primary);
|
|
26
|
+
--color-border-disabled: var(--color-neutral-500);
|
|
27
|
+
--color-border-danger: var(--brand-color-functional-danger);
|
|
28
|
+
--color-overlay-backdrop: var(--color-neutral-alpha-400);
|
|
29
|
+
--color-overlay-hover: var(--color-neutral-alpha-200);
|
|
30
|
+
--color-overlay-active: var(--color-neutral-alpha-400);
|
|
31
|
+
--color-overlay-selected: var(--color-neutral-alpha-600);
|
|
32
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/* Auto-generated design tokens from Figma */
|
|
2
|
+
/* Generated on 2026-03-04T20:50:34.066Z */
|
|
3
|
+
|
|
4
|
+
:root {
|
|
5
|
+
--button-font-family: var(--brand-font-lead);
|
|
6
|
+
--button-font-weight: var(--typography-label-font-weight);
|
|
7
|
+
--button-font-size: var(--typography-label-font-size);
|
|
8
|
+
--button-line-height: var(--typography-label-line-height);
|
|
9
|
+
--button-border-size-default: var(--size-border-000);
|
|
10
|
+
--button-border-size-hover: var(--size-border-100);
|
|
11
|
+
--button-border-size-active: var(--size-border-200);
|
|
12
|
+
--button-border-radius: var(--brand-corner-button);
|
|
13
|
+
--button-padding-inline: var(--size-spacing-400);
|
|
14
|
+
--button-padding-inline-icon-only: var(--size-spacing-200);
|
|
15
|
+
--button-padding-block: var(--size-spacing-200);
|
|
16
|
+
--button-gap: var(--size-spacing-200);
|
|
17
|
+
--button-text-color-disabled: var(--color-text-disabled);
|
|
18
|
+
--button-border-color-disabled: var(--color-border-disabled);
|
|
19
|
+
--button-container-background-disabled: var(--color-fill-disabled);
|
|
20
|
+
--button-overlay-hover: var(--color-overlay-hover);
|
|
21
|
+
--button-overlay-active: var(--color-overlay-active);
|
|
22
|
+
--button-height: 2.5rem;
|
|
23
|
+
--button-solid-text-color-default: var(--color-text-inverse);
|
|
24
|
+
--button-solid-text-color-hover: var(--color-text-inverse);
|
|
25
|
+
--button-solid-text-color-active: var(--color-text-inverse);
|
|
26
|
+
--button-solid-border-color-default: var(--color-border-brand);
|
|
27
|
+
--button-solid-border-color-hover: var(--color-border-brand);
|
|
28
|
+
--button-solid-border-color-focus: var(--color-border-brand);
|
|
29
|
+
--button-solid-border-color-active: var(--color-border-brand);
|
|
30
|
+
--button-solid-container-background-default: var(--color-fill-brand);
|
|
31
|
+
--button-solid-container-background-hover: var(--color-fill-brand);
|
|
32
|
+
--button-solid-container-background-focus: var(--color-fill-brand);
|
|
33
|
+
--button-solid-container-background-active: var(--color-fill-brand);
|
|
34
|
+
--button-outline-text-color-default: var(--color-text-brand);
|
|
35
|
+
--button-outline-text-color-hover: var(--color-text-brand);
|
|
36
|
+
--button-outline-text-color-active: var(--color-text-brand);
|
|
37
|
+
--button-outline-border-color-default: var(--color-border-brand);
|
|
38
|
+
--button-outline-border-color-hover: var(--color-border-brand);
|
|
39
|
+
--button-outline-border-color-active: var(--color-border-brand);
|
|
40
|
+
--button-outline-border-color-focus: var(--color-border-brand);
|
|
41
|
+
--button-outline-container-background-default: var(--color-fill-surface);
|
|
42
|
+
--button-outline-container-background-hover: var(--color-fill-surface);
|
|
43
|
+
--button-outline-container-background-focus: var(--color-fill-surface);
|
|
44
|
+
--button-outline-container-background-active: var(--color-fill-surface);
|
|
45
|
+
--button-ghost-text-color-default: var(--color-text-brand);
|
|
46
|
+
--button-ghost-text-color-hover: var(--color-text-brand);
|
|
47
|
+
--button-ghost-text-color-active: var(--color-text-brand);
|
|
48
|
+
--button-ghost-border-color-default: var(--color-transparent);
|
|
49
|
+
--button-ghost-border-color-hover: var(--color-transparent);
|
|
50
|
+
--button-ghost-border-color-focus: var(--color-transparent);
|
|
51
|
+
--button-ghost-border-color-active: var(--color-transparent);
|
|
52
|
+
--button-ghost-container-background-default: var(--color-fill-surface);
|
|
53
|
+
--button-ghost-container-background-hover: var(--color-fill-surface);
|
|
54
|
+
--button-ghost-container-background-focus: var(--color-fill-surface);
|
|
55
|
+
--button-ghost-container-background-active: var(--color-fill-surface);
|
|
56
|
+
--modal-backdrop-color: var(--color-overlay-backdrop);
|
|
57
|
+
--modal-surface-color: var(--color-fill-surface);
|
|
58
|
+
--modal-surface-border-radius: var(--brand-corner-modal);
|
|
59
|
+
--input-font-family: var(--brand-font-base);
|
|
60
|
+
--input-font-weight: var(--typography-body-font-weight);
|
|
61
|
+
--input-font-size: var(--typography-label-font-size);
|
|
62
|
+
--input-line-height: var(--typography-body-line-height);
|
|
63
|
+
--input-border-size-default: var(--size-border-100);
|
|
64
|
+
--input-border-size-hover: var(--size-border-100);
|
|
65
|
+
--input-border-size-active: var(--size-border-200);
|
|
66
|
+
--input-border-radius: var(--brand-corner-input);
|
|
67
|
+
--input-padding-inline: var(--size-spacing-200);
|
|
68
|
+
--input-padding-inline-icon-only: var(--size-spacing-200);
|
|
69
|
+
--input-padding-block: var(--size-spacing-200);
|
|
70
|
+
--input-gap: var(--size-spacing-200);
|
|
71
|
+
--input-text-color-disabled: var(--color-text-disabled);
|
|
72
|
+
--input-border-color-disabled: var(--color-border-disabled);
|
|
73
|
+
--input-container-background-disabled: var(--color-fill-disabled);
|
|
74
|
+
--input-overlay-hover: var(--color-transparent);
|
|
75
|
+
--input-overlay-active: var(--color-transparent);
|
|
76
|
+
--input-height: 2.5rem;
|
|
77
|
+
--input-text-text-color-placeholder: var(--color-text-subtle);
|
|
78
|
+
--input-text-text-color-default: var(--color-text-default);
|
|
79
|
+
--input-text-text-color-hover: var(--color-text-default);
|
|
80
|
+
--input-text-text-color-active: var(--color-text-default);
|
|
81
|
+
--input-text-border-color-default: var(--color-border-default);
|
|
82
|
+
--input-text-border-color-hover: var(--color-border-brand);
|
|
83
|
+
--input-text-border-color-active: var(--color-border-brand);
|
|
84
|
+
--input-text-border-color-focus: var(--color-border-brand);
|
|
85
|
+
--input-text-border-color-invalid: var(--color-border-danger);
|
|
86
|
+
--input-text-border-color-valid: var(--color-border-strong);
|
|
87
|
+
--input-text-container-background-default: var(--color-fill-surface);
|
|
88
|
+
--input-text-container-background-hover: var(--color-fill-surface);
|
|
89
|
+
--input-text-container-background-focus: var(--color-fill-surface);
|
|
90
|
+
--input-text-container-background-active: var(--color-fill-surface);
|
|
91
|
+
--form-gap: var(--size-spacing-400);
|
|
92
|
+
--form-padding-inline: var(--size-spacing-400);
|
|
93
|
+
--form-padding-block: var(--size-spacing-400);
|
|
94
|
+
--form-border-radius: var(--brand-corner-card);
|
|
95
|
+
--form-border-size: var(--size-border-100);
|
|
96
|
+
--form-container-background: var(--color-fill-surface);
|
|
97
|
+
--form-container-border-color: var(--color-border-subtle);
|
|
98
|
+
--form-group-gap: var(--size-spacing-400);
|
|
99
|
+
--form-group-title-color: var(--color-text-default);
|
|
100
|
+
--form-field-gap: var(--size-spacing-200);
|
|
101
|
+
--form-field-helper-text-color-default: var(--color-text-subtle);
|
|
102
|
+
--form-field-helper-text-color-invalid: var(--color-text-danger);
|
|
103
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/* Auto-generated design tokens from Figma */
|
|
2
|
+
/* Generated on 2026-03-04T20:50:34.071Z */
|
|
3
|
+
|
|
4
|
+
:root {
|
|
5
|
+
--color-transparent: rgba(0 0 0 / 0);
|
|
6
|
+
--color-neutral-100: rgb(230 230 230);
|
|
7
|
+
--color-neutral-200: rgb(204 204 204);
|
|
8
|
+
--color-neutral-300: rgb(179 179 179);
|
|
9
|
+
--color-neutral-400: rgb(128 128 128);
|
|
10
|
+
--color-neutral-500: rgb(128 128 128);
|
|
11
|
+
--color-neutral-600: rgb(102 102 102);
|
|
12
|
+
--color-neutral-700: rgb(77 77 77);
|
|
13
|
+
--color-neutral-800: rgb(51 51 51);
|
|
14
|
+
--color-neutral-900: rgb(26 26 26);
|
|
15
|
+
--color-neutral-1000: rgb(0 0 0);
|
|
16
|
+
--color-neutral-000: rgb(255 255 255);
|
|
17
|
+
--color-neutral-alpha-100: rgba(0 0 0 / 0.1);
|
|
18
|
+
--color-neutral-alpha-200: rgba(0 0 0 / 0.2);
|
|
19
|
+
--color-neutral-alpha-300: rgba(0 0 0 / 0.3);
|
|
20
|
+
--color-neutral-alpha-400: rgba(0 0 0 / 0.4);
|
|
21
|
+
--color-neutral-alpha-500: rgba(0 0 0 / 0.5);
|
|
22
|
+
--color-neutral-alpha-600: rgba(0 0 0 / 0.6);
|
|
23
|
+
--color-neutral-alpha-700: rgba(0 0 0 / 0.7);
|
|
24
|
+
--color-neutral-alpha-800: rgba(0 0 0 / 0.8);
|
|
25
|
+
--color-neutral-alpha-900: rgba(0 0 0 / 0.9);
|
|
26
|
+
--color-neutral-alpha-000: rgba(0 0 0 / 0);
|
|
27
|
+
--color-brand-a-red: rgb(255 0 0);
|
|
28
|
+
--color-brand-a-green: rgb(19 174 92);
|
|
29
|
+
--color-brand-a-purple-200: rgb(222 192 255);
|
|
30
|
+
--color-brand-a-purple-600: rgb(151 71 255);
|
|
31
|
+
--color-brand-a-purple-800: rgb(85 26 139);
|
|
32
|
+
--color-brand-a-blue-200: rgb(226 244 253);
|
|
33
|
+
--color-brand-a-blue-500: rgb(112 203 244);
|
|
34
|
+
--color-brand-a-blue-700: rgb(12 75 243);
|
|
35
|
+
--color-brand-a-blue-800: rgb(27 17 92);
|
|
36
|
+
--color-brand-b-red: rgb(204 0 0);
|
|
37
|
+
--color-brand-b-green: rgb(14 129 68);
|
|
38
|
+
--color-brand-b-purple-200: rgb(196 143 255);
|
|
39
|
+
--color-brand-b-purple-600: rgb(122 20 255);
|
|
40
|
+
--color-brand-b-purple-800: rgb(58 18 95);
|
|
41
|
+
--color-brand-b-blue-200: rgb(179 226 250);
|
|
42
|
+
--color-brand-b-blue-500: rgb(66 186 240);
|
|
43
|
+
--color-brand-b-blue-700: rgb(10 60 194);
|
|
44
|
+
--color-brand-b-blue-800: rgb(14 9 47);
|
|
45
|
+
--font-size-xs: .75rem;
|
|
46
|
+
--font-size-sm: .875rem;
|
|
47
|
+
--font-size-md: 1rem;
|
|
48
|
+
--font-size-lg: 1.25rem;
|
|
49
|
+
--font-size-xl: 1.5rem;
|
|
50
|
+
--font-size-xxl: 2rem;
|
|
51
|
+
--font-size-xxxl: 2.5rem;
|
|
52
|
+
--font-weight-100: 100;
|
|
53
|
+
--font-weight-200: 200;
|
|
54
|
+
--font-weight-300: 300;
|
|
55
|
+
--font-weight-400: 400;
|
|
56
|
+
--font-weight-500: 500;
|
|
57
|
+
--font-weight-600: 600;
|
|
58
|
+
--font-weight-700: 700;
|
|
59
|
+
--font-weight-800: 800;
|
|
60
|
+
--font-weight-900: 900;
|
|
61
|
+
--font-family-sans: Inter;
|
|
62
|
+
--font-family-serif: Rokkitt;
|
|
63
|
+
--font-family-mono: SFMono-Regular;
|
|
64
|
+
--line-height-xs: 1rem;
|
|
65
|
+
--line-height-sm: 1.25rem;
|
|
66
|
+
--line-height-md: 1.5rem;
|
|
67
|
+
--line-height-lg: 1.75rem;
|
|
68
|
+
--line-height-xl: 2rem;
|
|
69
|
+
--line-height-xxl: 2.75rem;
|
|
70
|
+
--line-height-xxxl: 3.5rem;
|
|
71
|
+
--size-spacing-100: .25rem;
|
|
72
|
+
--size-spacing-200: .5rem;
|
|
73
|
+
--size-spacing-300: .75rem;
|
|
74
|
+
--size-spacing-400: 1rem;
|
|
75
|
+
--size-spacing-500: 1.25rem;
|
|
76
|
+
--size-spacing-600: 1.5rem;
|
|
77
|
+
--size-spacing-700: 2rem;
|
|
78
|
+
--size-spacing-800: 2.5rem;
|
|
79
|
+
--size-spacing-900: 3rem;
|
|
80
|
+
--size-spacing-1000: 4rem;
|
|
81
|
+
--size-spacing-000: 0;
|
|
82
|
+
--size-radius-100: .125rem;
|
|
83
|
+
--size-radius-200: .25rem;
|
|
84
|
+
--size-radius-300: .375rem;
|
|
85
|
+
--size-radius-400: .5rem;
|
|
86
|
+
--size-radius-500: .75rem;
|
|
87
|
+
--size-radius-600: 1rem;
|
|
88
|
+
--size-radius-700: 1.25rem;
|
|
89
|
+
--size-radius-800: 1.5rem;
|
|
90
|
+
--size-radius-900: 2rem;
|
|
91
|
+
--size-radius-000: 0;
|
|
92
|
+
--size-radius-full: 625rem;
|
|
93
|
+
--shadow-focus: .5rem;
|
|
94
|
+
--breakpoint-100: 580px;
|
|
95
|
+
--breakpoint-200: 760px;
|
|
96
|
+
--breakpoint-300: 960px;
|
|
97
|
+
--breakpoint-400: 1200px;
|
|
98
|
+
--breakpoint-500: 1440px;
|
|
99
|
+
--breakpoint-600: 1920px;
|
|
100
|
+
--container-100: 192px;
|
|
101
|
+
--container-200: 384px;
|
|
102
|
+
--container-300: 576px;
|
|
103
|
+
--container-400: 768px;
|
|
104
|
+
--container-500: 960px;
|
|
105
|
+
--container-600: 1152px;
|
|
106
|
+
--layout-base-grid: .25rem;
|
|
107
|
+
--layout-columns: 12;
|
|
108
|
+
--layout-gutter: 1rem;
|
|
109
|
+
--layout-max-width: 1236px;
|
|
110
|
+
--layout-column-max-width: 412px;
|
|
111
|
+
--layout-float-breakpoint: 1220px;
|
|
112
|
+
--size-border-100: .0625rem;
|
|
113
|
+
--size-border-200: .125rem;
|
|
114
|
+
--size-border-300: .1875rem;
|
|
115
|
+
--size-border-000: 0;
|
|
116
|
+
--zindex-hidden: -1;
|
|
117
|
+
--zindex-base: 0;
|
|
118
|
+
--zindex-raised: 1;
|
|
119
|
+
--zindex-dropdown-base: 900;
|
|
120
|
+
--zindex-dropdown: 1000;
|
|
121
|
+
--zindex-sticky: 1020;
|
|
122
|
+
--zindex-fixed: 1030;
|
|
123
|
+
--zindex-modal-overlay: 1040;
|
|
124
|
+
--zindex-modal: 1050;
|
|
125
|
+
--zindex-popover: 1060;
|
|
126
|
+
--zindex-tooltip: 1070;
|
|
127
|
+
}
|