Skip to the content

@mylder/perron

0.10.1

Patch changes

  • The component docs name the new, fewer stories: a Default with every prop a control, a showcase per axis, such as Variants or States, and a story per feature.

    657a532

0.10.0

Minor changes

  • Two map icons, compass and cube, on the 16 px grid at icon.size.400. compass is a needle pointing north with its north half filled, for a caller to turn against the map's heading; cube stands for tilting the map into 3D and back to flat.

    7a98dcb
  • Map tokens for 3D buildings: color.map.building-3d (light #D3D9D4, dark #2A3338), the one colour an extruded building's walls and roof take, and opacity.map-building-3d (0.6), so the street behind a block shows through. docs/foundations/map.md gains a "3D buildings" section: buildings rise from zoom 14, heights come from OpenStreetMap and are approximate, and the map opens flat with 3D as a view the rider turns on.

    d412c06
  • MapControls takes an optional 3D toggle and an optional compass for the map's angle: given onTiltedChange(event, tilted), the bar adds a 3D toggle, and given onResetNorth(event), a compass, after the centre button and before the pause button, past a new separator (angleSeparator), in the same bar and arrow-key order, so the map's controls stay one tab stop. The screen holds tilted (default false), which the toggle's aria-pressed and its inverse on fill follow, through the new ToolbarButton selected, and heading (default 0, degrees clockwise from north), by which the compass's needle turns to point north on the map. While the needle is turned, the compass is described as "Map turned away from north" through aria-describedby pointing at visually hidden text, so a screen reader hears what the needle shows. New owned strings view3d ("3D view"), resetNorth ("Reset to north") and turnedFromNorth ("Map turned away from north"), in all four locales (a caller that supplies its own dictionaries adds them too), overridden by the new view3dLabel, resetNorthLabel and turnedFromNorthLabel props. Without onTiltedChange and onResetNorth the bar renders as before.

    ToolbarButton takes an optional selected, as Button does: given, it makes the button a toggle with aria-pressed, and while true sets data-selected and draws the on look, the inverse fill with its own hover and pressed steps and a Highlight fill in forced colours. Left out, the button is no toggle and renders as before.

    aa76ce3

Patch changes

  • The package's README names the components and patterns it ships, shows where to import each from, and links the docs site.

    7c50630

0.9.0

Minor changes

  • Section stacks its content's children space.200 (8 px) apart, so a paragraph, a row of buttons and a field given one after another no longer touch. The content is now a flex column: wrap a sentence that holds a link in one paragraph before passing it as children.

    f783b41

0.8.0

Minor changes

  • Adds the aircraft for a map that draws the planes over the city: the aircraft icon, a plane seen from above pointing north, on the 14 px grid at icon.size.325; color.map.aircraft, a magenta apart from every line, mode, status and the brand, at 3:1 or more on every map ground in both themes; map.aircraft-size.air and map.aircraft-size.ground for the glyph's box, and map.aircraft-stroke-width.ageing and map.aircraft-stroke-width.estimated for its rims, with the data states drawn as the Map page's Aircraft section says. VehicleDotLegend gains aircraftVisible, which adds the glyph beside "Planes" after the five states, and aircraftLabel, which overrides that word.

    8e8336b

0.7.0

Minor changes

  • MapControls takes centerMapDisabled, which disables the centre button alone, focusable and announced as dimmed, as zoomInDisabled and zoomOutDisabled do theirs. A screen whose map can't yet be moved sets the three instead of disabled, so the pause button stays pressable.

    52f84e1

0.6.0

Minor changes

  • DepartureRow gains the optional expected prop, the time real-time data expects the departure to leave, HH:MM, as StopTimeline's stops take it. For a live, ageing or estimated row it shows in the timetabled time's place, after a "~" when estimated, with the timetabled time struck through before it when the two differ, "08:14 08:16", heard as "Timetabled 08:14" and then the time; a timetable-only, no-signal or cancelled row, or one with an interval, shows time as before. New slotProps.expected and the label prop timetabledTimeLabel. Adds the owned string timetabledTime to every locale; a caller that supplies its own dictionaries adds it too.

    7d84b46
  • MapControls takes an optional pause button for the map's motion: given onPausedChange(event, paused), the bar adds it after the centre button, past a second separator, in the same bar and arrow-key order, so the map's controls stay one tab stop. The screen holds paused (default false); the button shows the pause icon and is named "Pause" while the map moves, and the play icon and "Resume" while it is paused, with no aria-pressed. New owned strings pause and resume, in all four locales (a caller that supplies its own dictionaries adds them too), overridden by the new pauseLabel and resumeLabel props. Without onPausedChange the bar renders as before.

    9873522
  • SourceLine's sources can say what each time is of, in the app's own words: a source's new label is a template with a {time} placeholder, such as 'position {time}', shown in place of "updated {time}", and dateTime gives the <time> element a machine-readable value for a time written as a date, such as '12 October'. name and time are now optional, so one provider's name can stand before two facts, "Rejseplanen · position 08:14:05 · times 08:14:20", and a fact can have no time, "times from the timetable". A labelled source whose outOfDate is set adds "may be out of date" after its label, through the new owned string sourceLabelOutOfDate, "{label}, may be out of date", overridden by the new sourceLabelOutOfDateLabel prop. Lines without a label render as before.

    7d84b46
  • TopBar's size takes 'responsive': one render that is the phone's layout, small, under breakpoint.phone and the wide one, medium, above it, switched by a media query with no JavaScript, for a page rendered before it knows the viewport's width. The groups keep the wide order in the DOM at both widths, and on a phone CSS places the tools on the first row and the filters on the second, with reading-flow: flex-visual so that a browser that supports it tabs in the order on screen. 'medium' and 'small' render as before, and the default is still 'medium'. No new owned strings.

    The breakpoint tokens' description now says what each one is, the width below which the screen changes, and how a media query writes it, (max-width: 759.98px) for breakpoint.phone's 760 px; no value changes.

    9873522

0.5.0

Minor changes

  • Adds map.strand.*, one number per line (M1 to M4, A, B, C, E, F, H): its place from a shared track's centre, in steps of its mode's map.track-spacing, so an app draws lines that share a track side by side, in a fixed order, instead of on top of each other.

    22f5566
  • Adds the pause and play icons to the Map set, on the 16 px grid at icon.size.400, for the map's control that stops the vehicles moving and sets them moving again.

    22f5566
  • Adds TopBar, and the owned strings topBarUpdated, topBarUpdatedOutOfDate and topBarFilters, in all four locales; a caller that supplies its own dictionaries adds them too.

    dfc0d48

0.4.0

Minor changes

  • Adds selected to Button, for a toggle such as "Follow": true or false sets aria-pressed and draws the button on (its colour's solid look) or off (its colour's outline look) in either variant, and true sets data-selected. Left out, the button is no toggle and has no aria-pressed. A toggle keeps its label the same off and on, "Follow", since aria-pressed says the state. No new owned strings.

    3f4aa6a
  • Adds DataStateKey, with its counts type DataStateKeyCounts, and the owned strings liveDescription, ageingDescription, estimatedDescription, timetableOnlyDescription, noSignalDescription, secondsDuration and minutesDuration, in all four locales; a caller that supplies its own dictionaries adds them too.

    87aa012
  • DepartureRow gains three optional props. cancelled keeps a departure that won't run in the list, "Cancelled" in place of the dot and the state's word, its countdown and time struck through and no delay, and sets data-cancelled on the root. interval takes the minutes between departures, one number or a [fewest, most] pair, for a line that runs to a headway such as the Metro, and shows "Every 3 min" or "Every 3 to 4 min" in place of the countdown, the time and the delay. platform shows the caller's platform or track label, "Track 4", after the state's word. countdown is now optional, since an interval row has none; left out, it shows "—". New slotProps keys platform and interval, and new label props cancelledLabel, everyLabel and everyRangeLabel. Adds the owned strings cancelled, every ("Every {minutes} min") and everyRange ("Every {from} to {to} min") to every locale, the last two templates each locale fills in its own word order, such as the Danish "Hvert 3. min"; a caller that supplies its own dictionaries adds them too.

    1767b0e
  • Adds stops, time and action to DisruptionCard. stops takes a list of stop names, "Affects Nørreport, Kongens Nytorv and 3 more", or a stretch, { from, to }, "Between Hellerup and Klampenborg". time takes { from, to }, "From 08:03", "Until 22:00" or "24 to 25 October". action holds one link or button, such as "Show on map". It also adds a fifth SeverityLabel kind, notice ("Service notice"), for a message whose fields don't say which kind it is, with the info-circle icon, the serviceNoticeLabel prop and the token color.transit.severity.notice, which DisruptionCard's severity takes too. New owned strings: serviceNotice, affectsStops, stopListEnd, moreStops, betweenStops, fromTime, untilTime and timeRange, the last seven with {name} placeholders, each with its *Label override on DisruptionCard.

    ccceaf6
  • Adds SourceLine, with its source type SourceLineSource, and the owned strings sourceUpdated, sourcePaused and sourceOutOfDate, in all four locales; a caller that supplies its own dictionaries adds them too.

    adb74b8
  • StopTimeline's stops gain two optional fields. cancelled keeps a call the vehicle won't make in the list, "Cancelled" under its name in the danger colour, its time and expected time struck through and no delay, and sets data-cancelled on its <li>, as DepartureRow marks a cancelled departure. expected takes the time real-time data expects at the stop, HH:MM, shown after the timetabled time as "~08:16" in a column of its own and heard as "Expected 08:16"; an empty one shows nothing. New label props cancelledLabel and expectedTimeLabel. Reuses the owned string cancelled and adds the owned string expectedTime ("Expected {time}"), a template each locale fills with the time, to every locale; a caller that supplies its own dictionaries adds it too.

    52a3b9f
  • VehicleTable gains sortable headers, a hideable Delay column and an optional Last seen column. sort marks the order the caller has put vehicles in, with aria-sort and an arrow on that column's header alone, and onSortChange(event, sort) makes every header a button that asks the caller for a sort; the table still reorders no row. delayColumnHidden leaves the Delay column out, and lastSeenColumnVisible shows Last seen before it, from a new optional lastSeen time on each vehicle, with lastSeenColumnLabel and unknownLabel to override its words. The pattern now exports the types VehicleTableSort and VehicleTableColumn. Adds the owned string lastSeenColumn ("Last seen") and the arrow-down icon, under Controls.

    f217972

Patch changes

  • Data states now says a vehicle with no signal keeps moving on the timetable plus its last known delay from where it was last seen, its cut glyph, not its place, carrying the doubt, and that the live and ageing thresholds are each app's to set from its feed's interval between reports. vehicle-dot.live-threshold (60 s) and vehicle-dot.ageing-threshold (5 min) keep their values as documented defaults, and their descriptions, color.data-state.no-signal's, the JSDoc of the live, ageing and noSignal owned strings and ReportStrip's counts fields no longer state "under a minute" or 5 minutes as fixed facts. The docs of VehicleDot, VehicleDotLabel, VehicleDotLegend, DepartureRow, ReportStrip, VehicleTable and Count point at the app's thresholds, and none says a silent vehicle is left where it was last seen.

    ae634c5

0.3.0

Minor changes

  • Adds Accordion, with AccordionItem, and their props types AccordionProps and AccordionItemProps. The chevron-down icon's use now names an accordion's panel too.

    e4d4c2c
  • Adds AlertDialog, and the token size.dialog-width (440 px), the widest it and Dialog get. Dialog now reads the token in place of its own 440 px, with no change to its width.

    a6ba2d9
  • Adds Alert, and the info-circle and exclamation-circle icons it shows for an info and a danger message, under a new Feedback category. The contract in the docs data now names IntentIcon among its shared parts and drawing among its shared helpers.

    The CloseButton part that Dialog, Popover, Sheet, SearchField and Alert share now sets its hover and pressed fills as background-color rather than background, with no visual change.

    7dc5c92
  • Adds Attribution. The contract in the docs data now names colour, the story helper that reads a token's colour, among its shared helpers.

    5f11855
  • Yellow becomes Perron's primary colour. Adds palette.yellow.600, color.surface.brand-hover and color.border.brand for the brand button, and the brand guidance now names the main action as the brand colour's job.

    6f3e854
  • Adds Brand. Adds the owned string brandName to every locale; a caller that supplies its own dictionaries adds it too.

    6b89f39
  • Adds Button.

    8baffcb
  • Adds CheckboxGroup, and parent to Checkbox, so a parent checkbox inside a group given allValues ticks or unticks the set.

    4807e9c
  • Adds Checkbox, and the size.checkbox token and the tick and dash icons it draws its box with.

    c036ef5
  • The contract in the docs data now lets components read color.transit.*, color.data-state.* and vehicle-dot.*, for Mylder's vocabulary of line badges, delays and vehicle dots.

    b9cc9e3
  • Adds Count.

    2095d0b
  • Adds DataStatePanel. Adds the owned strings noData and loadFailed to every locale; a caller that supplies its own dictionaries adds them too.

    ac6e681
  • Adds DayProfileChart. border.width.050's description now names the line of a chart beside the focus ring and a control's selected state.

    2f9442b
  • Adds Delay.

    2137886
  • Adds DepartureRow. Adds the owned string now to every locale; a caller that supplies its own dictionaries adds it too.

    189daf7
  • Adds DetailHeader.

    b847d7e
  • Adds DetailPanel. Sheet's title description now says how a pattern with a header of its own, DetailPanel, passes that header as title. DetailHeader's action description no longer offers it the panel's close button, which DetailPanel draws from the Sheet after the header. The contract in the docs data lists withClass, the shared helper that joins a Base UI part's class with the caller's, which Sheet, Dialog, MapTooltip and DetailPanel now import from one file.

    The contract in the docs data also lists closed and byTestId, two story helpers Sheet, Dialog and DetailPanel now import from one file.

    53e6abf
  • Adds Dialog.

    44a438e
  • Adds DisruptionCard. Adds the owned string affectedLines to every locale; a caller that supplies its own dictionaries adds it too.

    81f30fd
  • Adds EmptyState.

    2d0db45
  • Adds FactList.

    4411634
  • Adds Field. Adds the owned string optional to every locale; a caller that supplies its own dictionaries adds it too. The contract's Shared helpers table names the story helper lines.

    5081dbe
  • Adds Fieldset.

    0370fb4
  • Adds FilterChip.

    efff9a4
  • Adds HighlightChip.

    7fb2059
  • Adds IconButton.

    186776e
  • Adds Kbd.

    a88704f
  • Adds KioskBar.

    31230b3
  • Adds LineBadge.

    60fba34
  • Adds LinkButton.

    0fa05d9
  • Adds Link. The contract in the docs data now names three story helpers among its shared helpers: RouterLink, which stands in for a router's link component, and expectFollows and expectFocusRing, the keyboard and focus-ring checks Link and LinkButton share.

    44c5bf4
  • Adds MapControls.

    ff94dd3
  • Adds MapTooltip.

    cc8abfd
  • Adds Menu, with MenuItem, MenuLinkItem, MenuCheckboxItem, MenuRadioGroup, MenuRadioItem, MenuGroup, MenuSeparator and MenuSubmenu, and the chevron-right icon.

    bcae0a6
  • Adds Meter, and the token size.meter-track, the height of its track. It adds no owned string key: an unknown value says the unknown string Stat, FactList and Count already have.

    dc849f3
  • Adds NormalService, and the check-circle icon it shows for a line running normally.

    6ce5385
  • Adds NumberField, and the owned strings increase, decrease and numberField, in all four locales. The plus and minus icons' uses in icons.json now name the number field's steps too.

    d3b3fe7
  • Every interactive component answers the pointer: IconButton, ToolbarButton, FilterChip, HighlightChip, SegmentedControl, Tabs, Switch, Checkbox, RadioGroup and DisruptionCard's link press a step past their hover look, and IconButton, ToolbarButton, FilterChip, HighlightChip, LinkButton and a linked DisruptionCard take the pointer cursor (default while disabled). The selected tab no longer shows a hover or press, as a press does not change it. A new pointer-feedback gate fails a hover with no pressed look past it, or a hovered part with no pointer.

    69f1a33
  • Button and LinkButton answer the pointer: a pointer cursor on Button (default while disabled), a hover step the eye sees, and a pressed step past it. Adds color.surface.inverse-pressed, color.surface.brand-pressed, palette.neutral.400 and palette.yellow.550. color.surface.inverse-hover moves to palette.neutral.700 in light and color.surface.brand-hover to palette.yellow.550 in light, so hover shows on the components that use them. The contract's Pointer feedback rule asks the same of every part a pointer presses.

    0af6b9a
  • Adds Popover.

    bce9a1b
  • Adds Progress, and the owned string inProgress, in all four locales. Adds the token duration.progress-sweep, the loop of an indeterminate progress bar's segment, and size.meter-track and duration.meter now name a progress bar's track and fill too.

    18e6075
  • Adds RadioGroup, with its Radio.

    419c1c1
  • Adds ReportStrip, with its counts type ReportStripCounts. It owns no new strings. The contract in the docs data now names grouped, the helper that writes a count in digits grouped by a no-break space, among its shared helpers, which DayProfileChart now imports, with no change to what it writes.

    4315ba6
  • Adds ScaleBar, and the owned strings scale, metersUnit and kilometersUnit, in all four locales.

    88d933b
  • Adds SearchField, and the owned string noMatches, in all four locales.

    12f361a
  • Adds Section.

    8f81bbe
  • Adds SegmentedControl, with Segment, and their props types SegmentedControlProps and SegmentProps. The contract in the docs data now names rendered, the story helper that reads the value a token renders as, and onHover, the one that reads what the (hover: hover) rules set on an element, among its shared helpers.

    f85228a
  • Adds Select, with its SelectItem and SelectGroup types, and the chevron-down icon it opens its list with.

    8f3e72a
  • Adds Separator.

    3777e47
  • Adds SeverityLabel, and the owned strings diversions, plannedWorks and dataFeedProblems in all four locales; delays now also names the delay kind of disruption.

    259a80b
  • Adds Sheet.

    e78eb6e
  • Adds Slider, and the owned strings minimum and maximum, in all four locales. The token size.meter-track now describes the track of a meter or a slider.

    8ce125f
  • Adds Stat. Adds the owned string unknown to every locale; a caller that supplies its own dictionaries adds it too.

    e3568b9
  • Adds StationIcon.

    ea1e4d2
  • Adds StopTimeline. Adds the owned strings nextStop and passed to every locale; a caller that supplies its own dictionaries adds them too.

    aab1425
  • Adds color.surface.inverse-hover, the hover fill of a primary button, one step from color.surface.inverse in each theme.

    e468801
  • Adds Surface.

    56271c4
  • Adds Switch, and the token duration.switch (150 ms, 0.01 ms under reduced motion) for its thumb's slide and its track's fill.

    a714940
  • Adds Tabs, with TabsList, Tab and TabsPanel, and their props types TabsProps, TabsListProps, TabProps and TabsPanelProps.

    8e26504
  • Adds Tag.

    6175760
  • Adds TextArea.

    61586c3
  • Adds TextField.

    e0a2b63
  • Adds Text.

    55e3d5e
  • Adds Toast, and the owned string notifications, in all four locales, and the tokens size.toast-width (360 px), the width of the toast column, and duration.toast (200 ms, 0.01 ms with reduced motion), its slide in and out.

    PerronProvider now holds the app's one list of toasts and renders the region at the bottom of the screen that shows them, an empty "Notifications" region until a toast arrives, and takes notificationsLabel to rename it.

    d26f979
  • Adds Toolbar, with ToolbarButton, ToolbarGroup and ToolbarSeparator, and their props types ToolbarProps, ToolbarButtonProps, ToolbarGroupProps and ToolbarSeparatorProps.

    3a6f801
  • Adds Tooltip, a short label beside a control, shown on hover or keyboard focus. PerronProvider now groups the tooltips inside it, so once one is open the next opens at once.

    63f81b9
  • Adds the typography role typography.lead, the paragraph under a page title: the body family at 16 px, regular weight, with the normal line height.

    50df3c7
  • Adds VehicleDotLabel.

    5a7e510
  • Adds VehicleDotLegend, the key to the vehicle dots: the five data states, each as its dot beside its word.

    b08320a
  • Adds the vehicle-dot.no-signal.cut-width token: a no-signal vehicle dot is cut by a diagonal slash, so it keeps a shape of its own when colour is gone, as in Windows' contrast themes.

    fd6ec35
  • line is now optional on VehicleDot and VehicleDotLabel, with no default. Left out, the root sets no data-line and the dot draws in the colour of the text around it, for a dot that stands for a state across many lines, such as ReportStrip's counts; in forced colours it draws in the system's text colour, as every dot does.

    4315ba6
  • The prik.* tokens are now vehicle-dot.* and the --perron-prik-* custom properties are now --perron-vehicle-dot-*. The planned components Prik, PrikLabel and PrikLegend are now VehicleDot, VehicleDotLabel and VehicleDotLegend. docs/renames.md lists the change.

    213d4f9
  • Adds VehicleDot.

    12834ee
  • Adds VehicleTable, and the owned strings lineColumn, destinationColumn, positionColumn and delayColumn, in all four locales; a caller that supplies its own dictionaries adds them too.

    7247afb

Patch changes

  • The contract in the docs data now names components/<name>/, where a component's place in the factory loop is kept: its pipeline state, its review and its visual report.

    2d85a5d
  • The contract in the docs data says the props check now reads every *Props a component file exports, so a compound component's parts keep to the props vocabulary too.

    3693818
  • The contract in the docs data now gives Button's real class and variant names in its Styling examples (pn-Button-startIcon, data-variant='outline'), notes that 'outline' and 'outlined' have both shipped, and says the contract story renders a component's alphabetically first story when it has no Default.

    f5394bf
  • The contract in the docs data now has the docs check fail on a component whose code the docs page's docgen reads no props from.

    585d0ca
  • The contract in the docs data now says a docs page's props table lists the members a component's props type inherits from Base UI, and the spec template writes repo paths the docs site doesn't serve as code spans.

    e19cd28
  • The contract in the docs data now says the docs page shows each story's first render without its play, and how an overlay's stories open it and render in their own frame.

    94d8216
  • The contract in the docs data now says a docs page's props table shows a prop's @default where the component has no destructuring default to write, such as @default The locale's on an owned-string prop, and has the docs check fail on a prop whose default the table would show otherwise than the spec gives.

    edf133e
  • StationIcon and Delay inherit render from Base UI's useRender.ComponentProps<'span'> instead of declaring it again, so their docs show Base UI's own JSDoc for it, as every other component does. The prop accepts the same elements and functions as before.

    Text inherits render the same way; with no render it still renders a <p> for body and body-sm and a <span> for every other role.

    980ed79
  • The contract in the docs data now lists the penpot check, which holds each design read back from Penpot to Perron's tokens and its code map.

    3166408
  • The contract in the docs data says the props check now fails a render a component declares itself, since every component inherits it from Base UI.

    c3a427c
  • The docs data carries retro 10's contract: a Keyboard row no play test can reproduce says Untested: <reason>, a repeated child is a part exported from its parent's file, the shared-parts gate compares unit tests' helpers too, and rendered reads a border or outline width.

    9fd5338
  • The docs data's specs and contract: every component's and pattern's Props table now has rows for className, style and ref, which every docs page shows; the contract allows 1lh in component CSS; the spec template says how an answered question is written and which story the contract story renders; and Toolbar's spec states its decisions without an "Answered" label.

    4599bdd
  • The contract in the docs data now defines the subject story the contract story renders, says a play that measures text asserts relations rather than line counts, and that an overlay's play finds its popup through screen; DetailHeader's spec says its LongTitle subheader wraps.

  • Stat, FactList, EmptyState, Section, Tabs, Toolbar, MapControls, DetailHeader, DisruptionCard, DataStatePanel and KioskBar share one internal copy of their helpers, with no change to their props or what they render. The contract in the docs data now lists the shared helpers, and says a part a second component needs moves to the shared parts.

    7e668f1
  • A word longer than its line now breaks inside SeverityLabel's name, Sheet's content and StopTimeline's name column rather than overflowing them. The contract in the docs data now says every rule that sets a typography role decides what a long word does.

    f9d9f29
  • The contract in the docs data now says when a long word breaks with overflow-wrap: anywhere and when with break-word, that white-space: pre-wrap and pre-line leave it to overflow, and lists the heard and mounted story helpers among the shared helpers.

    d04aea7
  • Dialog, Sheet and MapTooltip share one internal copy of their class and token helpers (withClass, given, tokenValue), with no change to their props or what they render. The contract in the docs data now says a component reads a token in script from its custom property with tokenValue, never from tokens.ts, lists withClass, tokenValue and the unit tests' heardMarkup among the shared helpers, says a renamed copy of a helper fails the check, and says a component that floats as glass composes Surface's glass variant. SeverityLabel's page no longer suggests making it a link or button through render.

    69f5c5f
  • The contract in the docs data now lets a pattern compose the patterns its dependsOn names and use every internal helper that reads no Base UI, such as tokenValue and UnknownValue; says a boolean ending in Label, such as hiddenLabel, overrides no owned string; and lists the story helpers icon, resolve, stateRules and stateFill, with closed taking a role or a selector.

    c8594d7
  • Checkbox, Dialog, MapTooltip, SearchField, Sheet, Tooltip and DetailPanel write their event and slot types by Base UI's and Perron's public names, which the docs props table shows, in place of file-local aliases such as ChangeDetails; their parts with no props of their own take slotProps as a plain spread, with no mergeProps call; and the contract in the docs data says so. The story helpers' stateRules reads a rule whose state starts its selector, :hover > .x.

    b1ab34c
  • Popover writes its event types by Base UI's public name in place of a file-local ChangeDetails, spreads its slots that take no props of its own, and its spec in the docs data keeps its run notes below the intro.

    a89d3ac
  • The specs in the docs data now keep how each was made (the deferred design under ADR 0010, its sources) below a <!-- run notes --> line after the intro, which the docs page's intro stops above, and the spec template says to write them there.

    b46ed1b
  • The docs data carries retro 9's contract: the story helpers fill, edge, fieldPart, focusedClose and expectNoFocus in the Shared helpers table, the shared-parts and docs gates' new rules, and "Reaches the root" for React's props in every spec and in RadioGroup's JSDoc.

    b34be78
  • SearchField: a placeholder given through slotProps.input reaches the input when the placeholder prop is left out; before, the prop's undefined replaced it.

    98c3a94
  • The contract and the spec template give each prop a component inherits from Base UI, such as render, a row in the spec's Props table, marked inherited, while the component inherits it as it is.

    37d5edb
  • Every component, every pattern and PerronProvider open with the 'use client' directive, so a React Server Components app, such as a Next.js one, can import @mylder/perron from a server module: the components arrive as client references instead of failing with createContext is not a function.

    db037ab
  • VehicleDotLegend's dots no longer take a placeholder line='m1' recoloured by the legend's CSS: they take no line and draw in the legend's ink, as VehicleDot does with no line, so the dots lose their data-line and look the same. VehicleDot, VehicleDotLabel, VehicleDotLegend, DepartureRow and ReportStrip now read the five data states and their owned strings from one internal table; their markup is unchanged.

    86707a5

0.2.0

Minor changes

  • Depend on Base UI (@base-ui/react 1.9.0, pinned) and take react and react-dom 19 from the app as peer dependencies.

    5d5f868
  • The docs data now holds the component contract, with the rules its checks and story tests hold every component and pattern to, and the spec template, and search_docs finds both.

    84fa566
  • Add the @mylder/perron/patterns entry point, where Mylder's patterns are exported once they are built.

    a1df949
  • Add PerronProvider, whose locale (en, da, sv or nb) picks the language of every string a component owns, the useOwnedStrings hook that reads them, and the English, Danish, Swedish and Norwegian Bokmål dictionaries.

    d618c3c

0.1.0

Minor changes

  • The first release. @mylder/perron ships Perron's foundations: the design tokens as CSS custom properties and TypeScript, the fonts, the icons, the Mylder mark, and the token and docs data the MCP server reads. @mylder/perron-mcp is the MCP server, with list_tokens, search_docs and get_reference.

    3d522f8

@mylder/perron-mcp

0.2.7

Patch changes

  • Updated dependencies

    • @mylder/perron@0.10.0

0.2.6

Patch changes

  • Updated dependencies

    • @mylder/perron@0.9.0

0.2.5

Patch changes

  • Updated dependencies

    • @mylder/perron@0.8.0

0.2.4

Patch changes

  • Updated dependencies

    • @mylder/perron@0.7.0

0.2.3

Patch changes

  • Updated dependencies

    • @mylder/perron@0.6.0

0.2.2

Patch changes

  • Updated dependencies

    • @mylder/perron@0.5.0

0.2.1

Patch changes

  • Updated dependencies

    • @mylder/perron@0.4.0

0.2.0

Minor changes

  • Every tool takes dir, the project folder to read from, so an agent in a git worktree gets that worktree's tokens, docs and references rather than the checkout the server runs from; the data is read again when it changes.

    3615c6d

Patch changes

  • Updated dependencies

    • @mylder/perron@0.3.0

0.1.1

Patch changes

  • The docs data now holds the component contract, with the rules its checks and story tests hold every component and pattern to, and the spec template, and search_docs finds both.

    84fa566
  • Updated dependencies

    • @mylder/perron@0.2.0

0.1.0

Minor changes

  • The first release. @mylder/perron ships Perron's foundations: the design tokens as CSS custom properties and TypeScript, the fonts, the icons, the Mylder mark, and the token and docs data the MCP server reads. @mylder/perron-mcp is the MCP server, with list_tokens, search_docs and get_reference.

    3d522f8

Patch changes

  • Updated dependencies

    • @mylder/perron@0.1.0