From bfae6507676fadea7632e2f7f66924935c04ca2a Mon Sep 17 00:00:00 2001 From: Lucas Oliveira Date: Fri, 4 Sep 2026 10:12:09 -0300 Subject: [PATCH 1/7] feat(remix_cli): add the sidebar registry item MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `remix` exports `RemixSidebar`, but the open-code registry had no item for it: the panel landed in #168 after the catalog was written, so a consumer installing the whole catalog got every component except the one that frames them. The recipe paints the panel as `background` plus a trailing hairline — the card's choice, for the card's reason — pads the scrolling region, keeps section labels at `mutedForeground`, and builds destinations from the application's own ghost toggle widened to the panel and pinned to a 48px target. `SidebarSpec.destination` is a `ToggleStyler`, so the item depends on `toggle` the way `data_table` depends on its four controls: handing the spec the application's own recipe is what keeps a selected destination and a selected toggle the same colour. `sidebar` requires `remix` 1.0.0-beta.8 or newer. `RemixSidebar` postdates the 1.0.0-beta.7 floor this registry pins, so `add sidebar` fails code generation until that release is published and `tool/sync_registry_remix.dart` raises the floor. The README, the catalog docs, and the CHANGELOG all say so, and `open-code:check` stays red until then. Co-Authored-By: Claude Opus 5 (1M context) --- .../playground/lib/ui/components/sidebar.dart | 128 ++++++++++++++++++ .../lib/ui/components/sidebar.g.dart | 93 +++++++++++++ apps/playground/lib/ui/ui.dart | 1 + docs/open-code.mdx | 13 +- docs/remix-cli-guide.html | 8 +- open_code/README.md | 7 +- open_code/fixture/test/open_code_test.dart | 111 +++++++++++++++ packages/remix_cli/CHANGELOG.md | 8 +- packages/remix_cli/README.md | 14 +- .../lib/src/registry/default/registry.yaml | 17 +++ .../templates/sidebar/sidebar.dart.tmpl | 128 ++++++++++++++++++ packages/remix_cli/test/registry_test.dart | 20 +-- test/tool/check_open_code_test.dart | 1 + tool/check_open_code.dart | 1 + 14 files changed, 521 insertions(+), 29 deletions(-) create mode 100644 apps/playground/lib/ui/components/sidebar.dart create mode 100644 apps/playground/lib/ui/components/sidebar.g.dart create mode 100644 packages/remix_cli/lib/src/registry/default/templates/sidebar/sidebar.dart.tmpl diff --git a/apps/playground/lib/ui/components/sidebar.dart b/apps/playground/lib/ui/components/sidebar.dart new file mode 100644 index 00000000..7f396aa8 --- /dev/null +++ b/apps/playground/lib/ui/components/sidebar.dart @@ -0,0 +1,128 @@ +import 'package:flutter/widgets.dart'; +import 'package:mix_annotations/mix_annotations.dart'; +import 'package:remix/remix.dart'; + +import '../theme/tokens.dart'; +import 'toggle.dart'; + +part 'sidebar.g.dart'; + +/// The application's Sidebar recipe. +/// +/// A sidebar is the navigation panel down one edge of an application shell. +/// Remix owns the rendering, the header/content/footer stacking, Tab traversal +/// across destinations, the selection semantics, and the navigation +/// landmark; this recipe owns the panel surface, the region insets, the +/// section rhythm, and the label type. +/// +/// It takes no variant and no size. There is one panel per shell, and the +/// thing that actually varies between applications — how wide it is — is not +/// the recipe's to decide: the host sizes the panel, because the same panel +/// is usually presented as a drawer at narrow widths and the drawer's width +/// is a layout decision. Nothing here sets a width, and nothing here pads the +/// header, whose metrics normally have to line up with an application top bar. +/// +/// This recipe **depends on the `toggle` item**, which is why its registry +/// entry lists `toggle` beside `theme`. A destination is a toggle: it is a +/// control that stays pressed, and `SidebarSpec` takes its style as a +/// `ToggleStyler` field. Handing it the application's own ghost toggle recipe +/// is what keeps a selected destination and a selected toggle the same colour +/// without restating one component inside another. +/// +/// The panel fill is `background`, the same token the page uses, and the +/// trailing hairline in `border` is what separates the two — the same choice +/// the card recipe makes, for the same reason. +/// +/// [style] is merged **last**, so a single call site can override any part of +/// the resolved recipe without forking it: +/// +/// ```dart +/// PlaygroundSidebar( +/// style: SidebarStyler().width(_shellSidebarWidth), +/// sections: sections, +/// selectedValue: current, +/// onSelected: go, +/// ) +/// ``` +@MixWidget(target: RemixSidebar.new) +SidebarStyler playgroundSidebarStyle({ + SidebarStyler style = const SidebarStyler.create(), +}) => SidebarStyler( + container: FlexBoxStyler() + .color(PlaygroundTokens.background()) + .border(.end(.color(PlaygroundTokens.border()).width(_borderWidth))), + content: FlexBoxStyler() + .padding( + .symmetric(horizontal: _contentPaddingX, vertical: _contentPaddingY), + ) + .spacing(_sectionGap), + footer: BoxStyler() + .border(.top(.color(PlaygroundTokens.border()).width(_borderWidth))) + .padding(.all(_contentPaddingX)), + // A section label names the group below it. It is deliberately the + // quietest text in the panel: `mutedForeground` at the smallest size, so + // it reads as a heading for the destinations rather than as one of them. + sectionLabel: TextStyler() + .color(PlaygroundTokens.mutedForeground()) + .fontSize(_sectionLabelSize) + .fontWeight(FontWeight.w500) + .letterSpacing(_sectionLabelTracking) + .wrap( + .padding( + .symmetric( + horizontal: _sectionLabelPaddingX, + vertical: _sectionLabelPaddingY, + ), + ), + ), + destinations: FlexBoxStyler().spacing(_destinationGap), + // The application's own toggle, stretched to the panel width and pinned to + // a comfortable target height. `ghost` is the right weight here: a column + // of outlined destinations would draw more lines than the panel has room + // for, and selection already reads through the `accent` fill. + destination: playgroundToggleStyle(variant: .ghost, size: .medium) + .minHeight(_destinationMinHeight) + .container(.mainAxisSize(.max).mainAxisAlignment(.start)), +).merge(style); + +/// Width of the panel's trailing edge and the footer's top divider. +const _borderWidth = 1.0; + +/// Horizontal inset of the scrolling destination region. +const _contentPaddingX = 12.0; + +/// Vertical inset of the scrolling destination region. +const _contentPaddingY = 16.0; + +/// Gap between adjacent sections. +const _sectionGap = 16.0; + +/// Gap between adjacent destinations inside one section. +/// +/// Much tighter than [_sectionGap]: destinations in a section are one list, +/// and the whitespace is what tells a reader where that list ends. +const _destinationGap = 2.0; + +/// Type scale for a section label. +const _sectionLabelSize = 12.0; + +/// Extra tracking on a section label, which small uppercase-ish headings need +/// to stay legible. +const _sectionLabelTracking = 0.4; + +/// Horizontal inset of a section label. +/// +/// Two pixels narrower than the destination's own `padding`, so the label's +/// first glyph sits over the destination text below it rather than over the +/// destination's edge. +const _sectionLabelPaddingX = 10.0; + +/// Vertical inset of a section label. +const _sectionLabelPaddingY = 6.0; + +/// Minimum height of one destination. +/// +/// Taller than the 36px `medium` toggle it is built from: a destination is a +/// primary navigation target, often reached on a touch screen, and this is +/// the one place in this layer that meets the 48px guidance outright. +const _destinationMinHeight = 48.0; diff --git a/apps/playground/lib/ui/components/sidebar.g.dart b/apps/playground/lib/ui/components/sidebar.g.dart new file mode 100644 index 00000000..1a494c99 --- /dev/null +++ b/apps/playground/lib/ui/components/sidebar.g.dart @@ -0,0 +1,93 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'sidebar.dart'; + +// ************************************************************************** +// MixWidgetGenerator +// ************************************************************************** + +/// The application's Sidebar recipe. +/// +/// A sidebar is the navigation panel down one edge of an application shell. +/// Remix owns the rendering, the header/content/footer stacking, Tab traversal +/// across destinations, the selection semantics, and the navigation +/// landmark; this recipe owns the panel surface, the region insets, the +/// section rhythm, and the label type. +/// +/// It takes no variant and no size. There is one panel per shell, and the +/// thing that actually varies between applications — how wide it is — is not +/// the recipe's to decide: the host sizes the panel, because the same panel +/// is usually presented as a drawer at narrow widths and the drawer's width +/// is a layout decision. Nothing here sets a width, and nothing here pads the +/// header, whose metrics normally have to line up with an application top bar. +/// +/// This recipe **depends on the `toggle` item**, which is why its registry +/// entry lists `toggle` beside `theme`. A destination is a toggle: it is a +/// control that stays pressed, and `SidebarSpec` takes its style as a +/// `ToggleStyler` field. Handing it the application's own ghost toggle recipe +/// is what keeps a selected destination and a selected toggle the same colour +/// without restating one component inside another. +/// +/// The panel fill is `background`, the same token the page uses, and the +/// trailing hairline in `border` is what separates the two — the same choice +/// the card recipe makes, for the same reason. +/// +/// [style] is merged **last**, so a single call site can override any part of +/// the resolved recipe without forking it: +/// +/// ```dart +/// PlaygroundSidebar( +/// style: SidebarStyler().width(_shellSidebarWidth), +/// sections: sections, +/// selectedValue: current, +/// onSelected: go, +/// ) +/// ``` +class PlaygroundSidebar extends StatelessWidget { + const PlaygroundSidebar({ + super.key, + this.style = const SidebarStyler.create(), + this.header, + required this.sections, + required this.selectedValue, + this.onSelected, + this.footer, + this.enabled = true, + this.semanticLabel, + this.excludeSemantics = false, + }); + + final SidebarStyler style; + + final Widget? header; + + final List> sections; + + final T? selectedValue; + + final ValueChanged? onSelected; + + final Widget? footer; + + final bool enabled; + + final String? semanticLabel; + + final bool excludeSemantics; + + @override + Widget build(BuildContext context) { + return RemixSidebar( + key: this.key, + style: playgroundSidebarStyle(style: this.style), + header: this.header, + sections: this.sections, + selectedValue: this.selectedValue, + onSelected: this.onSelected, + footer: this.footer, + enabled: this.enabled, + semanticLabel: this.semanticLabel, + excludeSemantics: this.excludeSemantics, + ); + } +} diff --git a/apps/playground/lib/ui/ui.dart b/apps/playground/lib/ui/ui.dart index 78ecfe80..c7b5911e 100644 --- a/apps/playground/lib/ui/ui.dart +++ b/apps/playground/lib/ui/ui.dart @@ -22,6 +22,7 @@ export 'components/progress.dart'; export 'components/radio.dart'; export 'components/segmented_control.dart'; export 'components/select.dart'; +export 'components/sidebar.dart'; export 'components/skeleton.dart'; export 'components/slider.dart'; export 'components/spinner.dart'; diff --git a/docs/open-code.mdx b/docs/open-code.mdx index a5a83ccc..c642d150 100644 --- a/docs/open-code.mdx +++ b/docs/open-code.mdx @@ -534,11 +534,15 @@ depends on it: `theme` installs `tokens.dart`, `theme_data.dart`, and `theme_scope.dart`, giving you `UiTokens`, `UiThemeData`, and `UiThemeScope`. Every component item installs one authored file plus its generated adapter under -`components/.dart`. Three items differ: `icons` installs app-owned +`components/.dart`. Four items differ: `icons` installs app-owned `icons.dart` with no generated adapter; `chart` generates three adapters over -`mix_chart`; and `data_table` also pulls in +`mix_chart`; `data_table` also pulls in `checkbox`, `icon_button`, and `select`, because its selection column, pager, -and page-size control *are* those components — adding it installs all four. +and page-size control *are* those components — adding it installs all four; and +`sidebar` pulls in `toggle`, because a destination *is* one. + +The registry requires Remix beta.9, which includes `RemixSidebar`. +The installer rejects older resolved versions before it writes source. | Item | Surface you get | Axes | |---|---|---| @@ -564,6 +568,7 @@ and page-size control *are* those components — adding it installs all four. | `radio` | `UiRadio` | — | | `segmented_control` | `UiSegmentedControl` | — | | `select` | `UiSelect` | — | +| `sidebar` | `UiSidebar` | — | | `skeleton` | `UiSkeleton` | — | | `slider` | `UiSlider` | — | | `spinner` | `UiSpinner` | — | @@ -575,7 +580,7 @@ and page-size control *are* those components — adding it installs all four. | `tooltip` | `UiTooltip` | — | The `fortal` catalog contains every item above and adds `base_button`, `code`, -`heading`, `kbd`, `sidebar`, `text`, and `typography`. `base_button` and +`heading`, `kbd`, `text`, and `typography`. `base_button` and `typography` are shared authored recipes that arrive transitively with the components that use them. Fortal's component names use the configured prefix, so an Acme installation exposes `AcmeSidebar`, `AcmeHeading`, and diff --git a/docs/remix-cli-guide.html b/docs/remix-cli-guide.html index 12e5d4c3..b51c792a 100644 --- a/docs/remix-cli-guide.html +++ b/docs/remix-cli-guide.html @@ -914,9 +914,10 @@

Add the component

Special cases: dependency order, and the icons item -

Every component item depends on theme. Only data_table depends on - other components, because its selection column is a checkbox, its pager is a pair of icon buttons, - and its page-size control is a select. One command installs all four prerequisites, in order.

+

Every default component item depends on theme. + data_table also depends on checkbox, icon_button, and select. + sidebar depends on toggle for its destinations. + The CLI installs these dependencies before the requested component.

Preview the dependency order
@@ -1574,6 +1575,7 @@

Catalog

radioAcmeRadio segmented_controlAcmeSegmentedControl selectAcmeSelect + sidebarAcmeSidebar skeletonAcmeSkeleton sliderAcmeSlider spinnerAcmeSpinner diff --git a/open_code/README.md b/open_code/README.md index 545b9477..c2071ea8 100644 --- a/open_code/README.md +++ b/open_code/README.md @@ -29,11 +29,12 @@ One `add` installs one item. The catalog is `theme`, the opt-in `icons` seam, the optional `chart` extension, plus `accordion`, `avatar`, `badge`, `button`, `callout`, `card`, `checkbox`, `data_list`, `data_table`, `dialog`, `disclosure`, `divider`, `icon_button`, `link`, `menu`, `popover`, `progress`, -`radio`, `segmented_control`, `select`, `skeleton`, `slider`, `spinner`, -`switch`, `tabs`, `textfield`, `toggle`, `toggle_group`, and `tooltip`. +`radio`, `segmented_control`, `select`, `sidebar`, `skeleton`, `slider`, +`spinner`, `switch`, `tabs`, `textfield`, `toggle`, `toggle_group`, and +`tooltip`. The `fortal` preset contains that complete surface plus `base_button`, `code`, -`heading`, `kbd`, `sidebar`, `text`, and `typography`. +`heading`, `kbd`, `text`, and `typography`. `chart` is the one optional extension outside the core Remix component surface. It builds directly on `mix_chart`, installs no Fortal code, and diff --git a/open_code/fixture/test/open_code_test.dart b/open_code/fixture/test/open_code_test.dart index 55e080a4..c13c859d 100644 --- a/open_code/fixture/test/open_code_test.dart +++ b/open_code/fixture/test/open_code_test.dart @@ -3874,6 +3874,117 @@ void main() { }); }); + group('acmeSidebarStyle', () { + for (final theme in _themes) { + testWidgets('the panel is the page plus one edge in ${theme.name}', ( + tester, + ) async { + final spec = await _resolve( + tester, + acmeSidebarStyle(), + theme: theme.data, + ); + + // The same choice the card makes: one surface token, and the hairline + // is what separates the panel from the content beside it. + expect( + _flexDecoration(spec.spec.container)?.color, + theme.data.background, + ); + expect( + _flexBorder(spec.spec.container), + BorderDirectional( + end: BorderSide(color: theme.data.border, width: 1), + ), + ); + expect( + _boxBorder(spec.spec.footer), + Border(top: BorderSide(color: theme.data.border, width: 1)), + ); + }); + + testWidgets('a section label reads quieter than a destination in ' + '${theme.name}', (tester) async { + final spec = await _resolve( + tester, + acmeSidebarStyle(), + theme: theme.data, + ); + + expect( + spec.spec.sectionLabel.spec.style?.color, + theme.data.mutedForeground, + ); + expect( + spec.spec.destination.spec.label.spec.style?.color, + theme.data.foreground, + ); + _expectReadable( + spec.spec.sectionLabel.spec.style!.color!, + const Color(0x00000000), + page: theme.data.background, + floor: 4.5, + reason: 'sidebar section label', + ); + }); + } + + testWidgets('a destination is the application toggle, widened', ( + tester, + ) async { + const theme = AcmeThemeData.light(); + final sidebar = await _resolve(tester, acmeSidebarStyle(), theme: theme); + final toggle = await _resolve(tester, acmeToggleStyle(), theme: theme); + + final destination = sidebar.spec.destination.spec.container.spec; + // The recipe reuses the ghost toggle rather than restating it, so the + // resting fill and the type scale come from the toggle's own recipe. + expect( + destination.box?.spec.decoration, + toggle.spec.container.spec.box?.spec.decoration, + ); + expect( + sidebar.spec.destination.spec.label.spec.style?.fontSize, + toggle.spec.label.spec.style?.fontSize, + ); + // What the sidebar does add: full panel width, leading content, and a + // 48px target rather than the toggle's 36. + expect(destination.box?.spec.constraints?.minHeight, 48); + expect(destination.flex?.spec.mainAxisSize, MainAxisSize.max); + expect(destination.flex?.spec.mainAxisAlignment, MainAxisAlignment.start); + }); + + testWidgets('renders its sections through Remix', (tester) async { + var selected = 'overview'; + await _pumpInScope( + tester, + AcmeSidebar( + sections: const [ + RemixSidebarSection( + label: 'Workspace', + destinations: [ + RemixSidebarDestination(value: 'overview', label: 'Overview'), + RemixSidebarDestination(value: 'reports', label: 'Reports'), + ], + ), + ], + selectedValue: selected, + onSelected: (value) => selected = value, + ), + ); + await tester.pumpAndSettle(); + + expect(find.byType(RemixSidebar), findsOneWidget); + expect(find.text('Workspace'), findsOneWidget); + expect(find.text('Overview'), findsOneWidget); + + await tester.tap(find.text('Reports')); + await tester.pumpAndSettle(); + + expect(selected, 'reports'); + }); + }); + group('acmeDataListStyle', () { for (final theme in _themes) { testWidgets('labels read quieter than their values in ${theme.name}', ( diff --git a/packages/remix_cli/CHANGELOG.md b/packages/remix_cli/CHANGELOG.md index 68ef1ca2..50d9fdb5 100644 --- a/packages/remix_cli/CHANGELOG.md +++ b/packages/remix_cli/CHANGELOG.md @@ -19,8 +19,10 @@ `remix`: accordion, avatar, badge, button, callout, card, checkbox, data_list, data_table, dialog, disclosure, divider, icon_button, link, menu, popover, - progress, radio, segmented_control, select, skeleton, slider, spinner, - switch, tabs, textfield, toggle, toggle_group, and tooltip. + progress, radio, segmented_control, select, skeleton, slider, + spinner, switch, tabs, textfield, toggle, toggle_group, and tooltip. +- Add a default `sidebar` recipe backed by `RemixSidebar` in beta.8. + Destinations use the application's `toggle` recipe. - Adds an opt-in `icons` seam backed by `remix_ui_icons` for application-owned glyph aliases. - Adds an optional `chart` item backed directly by `mix_chart`. One editable @@ -30,6 +32,8 @@ - Every item depends on `theme`. `data_table` also depends on `checkbox`, `icon_button`, and `select`, because its selection column, pager, and page-size control are those components; `add data_table` installs all four. + `sidebar` also depends on `toggle`, because a destination is one; `add + sidebar` installs both. - `add` reports when the resolved `remix` is newer than the version this registry snapshot was authored against. The install still completes; `--dry-run` and `--diff` never print it, because they stop before diff --git a/packages/remix_cli/README.md b/packages/remix_cli/README.md index d3ed2bd0..d606ea7c 100644 --- a/packages/remix_cli/README.md +++ b/packages/remix_cli/README.md @@ -10,13 +10,13 @@ The 0.1.0 catalog includes an opt-in `icons` seam and covers the core Remix component surface: `accordion`, `avatar`, `badge`, `button`, `callout`, `card`, `checkbox`, `data_list`, `data_table`, `dialog`, `disclosure`, `divider`, `icon_button`, `link`, `menu`, `popover`, `progress`, `radio`, -`segmented_control`, `select`, `skeleton`, `slider`, `spinner`, `switch`, -`tabs`, `textfield`, `toggle`, `toggle_group`, and `tooltip`, each depending on -`theme`. The Fortal preset contains the same surface plus `base_button`, -`code`, `heading`, `kbd`, `sidebar`, `text`, and `typography`. `data_table` -also depends on `checkbox`, `icon_button`, and `select`, -because its selection column, pager, and page-size control are those -components. The catalog also offers `chart` as an optional extension over +`segmented_control`, `select`, `sidebar`, `skeleton`, `slider`, `spinner`, +`switch`, `tabs`, `textfield`, `toggle`, `toggle_group`, and `tooltip`, each +with a `theme` dependency. The Fortal preset also includes `base_button`, +`code`, `heading`, `kbd`, `text`, and `typography`. The `data_table` item uses +`checkbox`, `icon_button`, and `select` for its controls. The default `sidebar` +item uses the application's `toggle` recipe for destinations. +The catalog also offers `chart` as an optional extension over `mix_chart`; it does not depend on `remix_fortal`. There is no remote registry, update command, registry lockfile, or content-hash protocol. diff --git a/packages/remix_cli/lib/src/registry/default/registry.yaml b/packages/remix_cli/lib/src/registry/default/registry.yaml index ba575c45..391c72d1 100644 --- a/packages/remix_cli/lib/src/registry/default/registry.yaml +++ b/packages/remix_cli/lib/src/registry/default/registry.yaml @@ -366,6 +366,23 @@ items: exports: - components/toggle_group.dart + sidebar: + registryDependencies: + - theme + - toggle + dependencies: + mix_annotations: ^2.2.0-beta.1 + devDependencies: + build_runner: ^2.10.1 + mix_generator: ^2.2.0-beta.3 + files: + - source: templates/sidebar/sidebar.dart.tmpl + target: "@ui/components/sidebar.dart" + generated: + - "@ui/components/sidebar.g.dart" + exports: + - components/sidebar.dart + accordion: registryDependencies: - theme diff --git a/packages/remix_cli/lib/src/registry/default/templates/sidebar/sidebar.dart.tmpl b/packages/remix_cli/lib/src/registry/default/templates/sidebar/sidebar.dart.tmpl new file mode 100644 index 00000000..fd5a5ffd --- /dev/null +++ b/packages/remix_cli/lib/src/registry/default/templates/sidebar/sidebar.dart.tmpl @@ -0,0 +1,128 @@ +import 'package:flutter/widgets.dart'; +import 'package:mix_annotations/mix_annotations.dart'; +import 'package:remix/remix.dart'; + +import '../theme/tokens.dart'; +import 'toggle.dart'; + +part 'sidebar.g.dart'; + +/// The application's Sidebar recipe. +/// +/// A sidebar is the navigation panel down one edge of an application shell. +/// Remix owns the rendering, the header/content/footer stacking, Tab traversal +/// across destinations, the selection semantics, and the navigation +/// landmark; this recipe owns the panel surface, the region insets, the +/// section rhythm, and the label type. +/// +/// It takes no variant and no size. There is one panel per shell, and the +/// thing that actually varies between applications — how wide it is — is not +/// the recipe's to decide: the host sizes the panel, because the same panel +/// is usually presented as a drawer at narrow widths and the drawer's width +/// is a layout decision. Nothing here sets a width, and nothing here pads the +/// header, whose metrics normally have to line up with an application top bar. +/// +/// This recipe **depends on the `toggle` item**, which is why its registry +/// entry lists `toggle` beside `theme`. A destination is a toggle: it is a +/// control that stays pressed, and `SidebarSpec` takes its style as a +/// `ToggleStyler` field. Handing it the application's own ghost toggle recipe +/// is what keeps a selected destination and a selected toggle the same colour +/// without restating one component inside another. +/// +/// The panel fill is `background`, the same token the page uses, and the +/// trailing hairline in `border` is what separates the two — the same choice +/// the card recipe makes, for the same reason. +/// +/// [style] is merged **last**, so a single call site can override any part of +/// the resolved recipe without forking it: +/// +/// ```dart +/// {{typePrefix}}Sidebar( +/// style: SidebarStyler().width(_shellSidebarWidth), +/// sections: sections, +/// selectedValue: current, +/// onSelected: go, +/// ) +/// ``` +@MixWidget(target: RemixSidebar.new) +SidebarStyler {{valuePrefix}}SidebarStyle({ + SidebarStyler style = const SidebarStyler.create(), +}) => SidebarStyler( + container: FlexBoxStyler() + .color({{typePrefix}}Tokens.background()) + .border(.end(.color({{typePrefix}}Tokens.border()).width(_borderWidth))), + content: FlexBoxStyler() + .padding( + .symmetric(horizontal: _contentPaddingX, vertical: _contentPaddingY), + ) + .spacing(_sectionGap), + footer: BoxStyler() + .border(.top(.color({{typePrefix}}Tokens.border()).width(_borderWidth))) + .padding(.all(_contentPaddingX)), + // A section label names the group below it. It is deliberately the + // quietest text in the panel: `mutedForeground` at the smallest size, so + // it reads as a heading for the destinations rather than as one of them. + sectionLabel: TextStyler() + .color({{typePrefix}}Tokens.mutedForeground()) + .fontSize(_sectionLabelSize) + .fontWeight(FontWeight.w500) + .letterSpacing(_sectionLabelTracking) + .wrap( + .padding( + .symmetric( + horizontal: _sectionLabelPaddingX, + vertical: _sectionLabelPaddingY, + ), + ), + ), + destinations: FlexBoxStyler().spacing(_destinationGap), + // The application's own toggle, stretched to the panel width and pinned to + // a comfortable target height. `ghost` is the right weight here: a column + // of outlined destinations would draw more lines than the panel has room + // for, and selection already reads through the `accent` fill. + destination: {{valuePrefix}}ToggleStyle(variant: .ghost, size: .medium) + .minHeight(_destinationMinHeight) + .container(.mainAxisSize(.max).mainAxisAlignment(.start)), +).merge(style); + +/// Width of the panel's trailing edge and the footer's top divider. +const _borderWidth = 1.0; + +/// Horizontal inset of the scrolling destination region. +const _contentPaddingX = 12.0; + +/// Vertical inset of the scrolling destination region. +const _contentPaddingY = 16.0; + +/// Gap between adjacent sections. +const _sectionGap = 16.0; + +/// Gap between adjacent destinations inside one section. +/// +/// Much tighter than [_sectionGap]: destinations in a section are one list, +/// and the whitespace is what tells a reader where that list ends. +const _destinationGap = 2.0; + +/// Type scale for a section label. +const _sectionLabelSize = 12.0; + +/// Extra tracking on a section label, which small uppercase-ish headings need +/// to stay legible. +const _sectionLabelTracking = 0.4; + +/// Horizontal inset of a section label. +/// +/// Two pixels narrower than the destination's own `padding`, so the label's +/// first glyph sits over the destination text below it rather than over the +/// destination's edge. +const _sectionLabelPaddingX = 10.0; + +/// Vertical inset of a section label. +const _sectionLabelPaddingY = 6.0; + +/// Minimum height of one destination. +/// +/// Taller than the 36px `medium` toggle it is built from: a destination is a +/// primary navigation target, often reached on a touch screen, and this is +/// the one place in this layer that meets the 48px guidance outright. +const _destinationMinHeight = 48.0; diff --git a/packages/remix_cli/test/registry_test.dart b/packages/remix_cli/test/registry_test.dart index 8cb7c2ac..6f2f6b1e 100644 --- a/packages/remix_cli/test/registry_test.dart +++ b/packages/remix_cli/test/registry_test.dart @@ -285,16 +285,15 @@ items: final item = catalog.items[name]; expect(item, isNotNull, reason: name); // Dependency-first order, and `theme` always leads because every - // component declares it. `data_table` is the one item that needs more: - // its selection column, pager, and page-size control are the - // application's own checkbox, icon button, and select. - expect( - catalog.resolve(name).map((item) => item.name), - name == 'data_table' - ? ['theme', 'checkbox', 'icon_button', 'select', name] - : ['theme', name], - reason: name, - ); + // component declares it. Two items need more: `data_table`'s selection + // column, pager, and page-size control are the application's own + // checkbox, icon button, and select, and a `sidebar` destination is the + // application's own toggle. + expect(catalog.resolve(name).map((item) => item.name), switch (name) { + 'data_table' => ['theme', 'checkbox', 'icon_button', 'select', name], + 'sidebar' => ['theme', 'toggle', name], + _ => ['theme', name], + }, reason: name); if (name == 'icons') { expect(item!.files.single.target, '@ui/icons.dart'); expect(item.generated, isEmpty); @@ -435,6 +434,7 @@ const _componentSurfaces = 'radio': (widgets: ['Radio'], types: []), 'segmented_control': (widgets: ['SegmentedControl'], types: []), 'select': (widgets: ['Select'], types: []), + 'sidebar': (widgets: ['Sidebar'], types: []), 'skeleton': (widgets: ['Skeleton'], types: []), 'slider': (widgets: ['Slider'], types: []), 'spinner': (widgets: ['Spinner'], types: []), diff --git a/test/tool/check_open_code_test.dart b/test/tool/check_open_code_test.dart index 9bea512e..d1f6dc4c 100644 --- a/test/tool/check_open_code_test.dart +++ b/test/tool/check_open_code_test.dart @@ -308,6 +308,7 @@ const _registryItems = [ 'radio', 'segmented_control', 'select', + 'sidebar', 'skeleton', 'slider', 'spinner', diff --git a/tool/check_open_code.dart b/tool/check_open_code.dart index 90bff963..c8697b5e 100644 --- a/tool/check_open_code.dart +++ b/tool/check_open_code.dart @@ -52,6 +52,7 @@ const _defaultRegistryItems = [ 'radio', 'segmented_control', 'select', + 'sidebar', 'skeleton', 'slider', 'spinner', From b2453a6eb8e1f19d6353f2f7b9d083736e0d46fa Mon Sep 17 00:00:00 2001 From: Leo Farias Date: Mon, 7 Sep 2026 14:07:29 -0400 Subject: [PATCH 2/7] docs(remix_cli): add a screenshot tutorial for both presets --- .../remix-cli-tutorial/default-dialog.jpg | Bin 0 -> 61908 bytes .../remix-cli-tutorial/default-finished.jpg | Bin 0 -> 51326 bytes docs/assets/remix-cli-tutorial/evidence.json | 186 +++ .../remix-cli-tutorial/first-render.jpg | Bin 0 -> 3498 bytes .../assets/remix-cli-tutorial/fortal-dark.jpg | Bin 0 -> 52461 bytes .../remix-cli-tutorial/fortal-dialog.jpg | Bin 0 -> 61134 bytes .../assets/remix-cli-tutorial/recipe-edit.jpg | Bin 0 -> 203814 bytes .../remix-cli-tutorial/sample-projects.zip | Bin 0 -> 191524 bytes docs/assets/remix-cli-tutorial/saved.jpg | Bin 0 -> 21988 bytes docs/assets/remix-cli-tutorial/saving.jpg | Bin 0 -> 19881 bytes docs/remix-cli-guide.html | 2 + docs/remix-cli-tutorial.html | 1233 +++++++++++++++++ 12 files changed, 1421 insertions(+) create mode 100644 docs/assets/remix-cli-tutorial/default-dialog.jpg create mode 100644 docs/assets/remix-cli-tutorial/default-finished.jpg create mode 100644 docs/assets/remix-cli-tutorial/evidence.json create mode 100644 docs/assets/remix-cli-tutorial/first-render.jpg create mode 100644 docs/assets/remix-cli-tutorial/fortal-dark.jpg create mode 100644 docs/assets/remix-cli-tutorial/fortal-dialog.jpg create mode 100644 docs/assets/remix-cli-tutorial/recipe-edit.jpg create mode 100644 docs/assets/remix-cli-tutorial/sample-projects.zip create mode 100644 docs/assets/remix-cli-tutorial/saved.jpg create mode 100644 docs/assets/remix-cli-tutorial/saving.jpg create mode 100644 docs/remix-cli-tutorial.html diff --git a/docs/assets/remix-cli-tutorial/default-dialog.jpg b/docs/assets/remix-cli-tutorial/default-dialog.jpg new file mode 100644 index 0000000000000000000000000000000000000000..955cee078c44f53358fccae093eba54253039c0c GIT binary patch literal 61908 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 literal 0 HcmV?d00001 diff --git a/docs/assets/remix-cli-tutorial/evidence.json b/docs/assets/remix-cli-tutorial/evidence.json new file mode 100644 index 00000000..56b124ad --- /dev/null +++ b/docs/assets/remix-cli-tutorial/evidence.json @@ -0,0 +1,186 @@ +{ + "review_date": "2026-09-07", + "source_checkout": "bfae6507676fadea7632e2f7f66924935c04ca2a", + "toolchain": { + "flutter": "3.44.0", + "dart": "3.12.0", + "remix": "1.0.0-beta.9", + "remix_cli": "0.1.0" + }, + "capture": "Actual Chrome application renders and VS Code web. Detail images use browser screenshot crops.", + "screenshots": [ + { + "file": "default-dialog.jpg", + "sha256": "ce74dc4a7dfccb9e9ae13c7cd208f841992089946b34a5c7947677e543ed1c98", + "bytes": 61908 + }, + { + "file": "default-finished.jpg", + "sha256": "423a23eea0750abd8c39cc8bc43d337e00743131746509e52f9ab7e03613e153", + "bytes": 51326 + }, + { + "file": "first-render.jpg", + "sha256": "ca40c02ea3691b1d1e60521dcfa81b10b356d34edcbc045d0833b3954a6fcb9e", + "bytes": 3498 + }, + { + "file": "fortal-dark.jpg", + "sha256": "3b6ed40836934a0796248714a6bc9a0dc592ea99633331b7eb948203bce1d125", + "bytes": 52461 + }, + { + "file": "fortal-dialog.jpg", + "sha256": "7e493ff0bb93bbf6cec0fe96490f127ef92cdc60df52595c8dffaf86d91b96fb", + "bytes": 61134 + }, + { + "file": "recipe-edit.jpg", + "sha256": "173218812562927a40eab0e70ad6a2faec176b3590882a1e967749740c33e3d8", + "bytes": 203814 + }, + { + "file": "saved.jpg", + "sha256": "cc9dbe3fe9401633a06463b65f1e82378751c8951b65d6b11fecbcef463b73d2", + "bytes": 21988 + }, + { + "file": "saving.jpg", + "sha256": "6c401cd2affe46987081aa00ec8bc064c4eb767f2d3f18aec3d01aa8f801f6d5", + "bytes": 19881 + } + ], + "source": [ + { + "preset": "default", + "main_sha256": "3363bee62ba14a4dcf7ca554424038ef1de5cdf663ca9f392e367497afc1dada", + "test_sha256": "4e658d39ca93c2a63259ec6bacd55aeef1aaa87660f3b7457a34069f0f0354f6" + }, + { + "preset": "fortal", + "main_sha256": "06f6da57e236173a36a8fd1356040ef8e9e62e209cfe975bd2ec83b3b7c50e97", + "test_sha256": "cd0d26434ccc79e629f95e89ce1e42b4985d2e180d00ea4bdee0990b329222a4" + } + ], + "archive_sha256": "119bfedd657e6933736875d8b70909e049aa5f9c3f882da9eece0c08c062716a", + "first_render_source_sha256": "f8f43244e34277e0c7b27d92def68ced08fa93b0852e56dd20beb5a33821f10e", + "validation": { + "fresh_default_replay": "Passed project creation, installation, first render, composition, customization, diff preservation, ordinary add preservation, analysis, four tests, and release web builds.", + "downloaded_default": "Passed dependency resolution, analysis, and four tests after checkout path substitution.", + "downloaded_fortal": "Passed dependency resolution, analysis, and four tests after checkout path substitution.", + "command_results": [ + { + "label": "create-default", + "exit_code": 0 + }, + { + "label": "install-local-cli-0", + "exit_code": 0 + }, + { + "label": "install-local-cli-1", + "exit_code": 0 + }, + { + "label": "init-default-0", + "exit_code": 0 + }, + { + "label": "preview-button-0", + "exit_code": 0 + }, + { + "label": "install-button-command-0", + "exit_code": 0 + }, + { + "label": "first-render-build", + "exit_code": 0 + }, + { + "label": "install-screen-0", + "exit_code": 0 + }, + { + "label": "install-screen-1", + "exit_code": 0 + }, + { + "label": "install-screen-2", + "exit_code": 0 + }, + { + "label": "install-screen-3", + "exit_code": 0 + }, + { + "label": "install-screen-4", + "exit_code": 0 + }, + { + "label": "diff-button-0", + "exit_code": 0 + }, + { + "label": "preserve-button-0", + "exit_code": 0 + }, + { + "label": "validate-sample-0", + "exit_code": 0 + }, + { + "label": "validate-sample-1", + "exit_code": 0 + }, + { + "label": "validate-sample-2", + "exit_code": 0 + }, + { + "label": "download-default-pub-get", + "exit_code": 0 + }, + { + "label": "download-default-analyze", + "exit_code": 0 + }, + { + "label": "download-default-test", + "exit_code": 0 + }, + { + "label": "download-fortal-pub-get", + "exit_code": 0 + }, + { + "label": "download-fortal-analyze", + "exit_code": 0 + }, + { + "label": "download-fortal-test", + "exit_code": 0 + } + ], + "source_consistency": "The HTML examples match the archived main.dart and tests. Archived lib, test, and web files match the validated downloads.", + "browser": "Chrome at 2257 by 1273 pixels. Reviewed three sections in 390 by 844 pixel frames.", + "browser_checks": [ + "Section links", + "Source disclosure", + "Copy success feedback", + "Full-size screenshot link", + "No reported console warnings or errors" + ], + "structure": { + "unique_ids": 34, + "url_references_checked": 48, + "screenshots": 8, + "archive_entries": 78 + }, + "limits": [ + "The sample application targets desktop browsers.", + "Generated adapters have an analyzer exclusion for current generator lint findings.", + "Hosted package validation requires publication." + ] + } +} diff --git a/docs/assets/remix-cli-tutorial/first-render.jpg b/docs/assets/remix-cli-tutorial/first-render.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f77385f84b60e6ca319996b3054c4f318f189d6d GIT binary patch literal 3498 zcmeHHdr*^C7QZ1O!N>sF1f&s2iVFl=3rNCCD65cAERmu{)EZfWNf3M>gjW$NsaTyE=fglY}A%sUI$V0O?r5)Wr+?m#${mXOb-us*1 z`F-b}bH4k12Bl#bSnXznG5`Vr00ItR(3ns{gMy+y*c;9W4Ws|$FtG*DQ0@SnJS9ln z8?uXh@X%p0W_bMxqc1upDZ#kE#9&-~pD{WBz1v=*`ET@wW89<|D42s&kO&Wl$sU84 zz+cB{M$B2q`9_>7NDx5HKa4nW|K1>ouR=`WzkoR};FyF&qka%-{7;@pHlAfPW5(v( zQ>=Y(KM1EC2mz z*ybM86! zyvGUAiP1lWL&4RAy9}|5+;;go0Bb2D}5vur6cn zUWNf!2O4FHHbtS)rf3WXZHBeNVmEBS5-cputu_&CZ8s5YY>4(wB;w{Rb~ZNTx5-F(;g>XC@2@-X z|Lg!~CdIa-G=-6M*Kx?pApoB^GjOq!+UubBM7zfKJ5Ac&nno-rW9RaP?Vj{z=>*Qx zQ#NsXtvt%keEP{V%f;r#_>z;{6Rvsnq^aCk3CCsZKHdQCyhoO{Q?5R=&}Lo3d}VX# z2eqj03(B8fg{z)F8%wo*c;#}bO}D(NY-?@qWNplZ%;WxY#_9JLEgB@$=2f->>kXgC zik3=U2`@k(cW5qJbE;YN&~Qu7-A#TMrSL2uC_9+=De;YXF)z?ZXaH7N_-}tjLm9w` z=xOm41NdwC+EnOng^aZ7NjHEu1D7BCEnDqRh@11W5BdCJlPte_+kp-j{!!{m-SXBQ z5y5NXw267)58p?Rancy89YOK$SNA2`YbO_c587UhQLYB^c+JsvHepSfp?H znx5<&vU}0Av@GCKI)P5>?+~RfyQylOOD4;^T@>0fCsn=w??+;v%~pKr_fY{m|LkOU z$EJk|=eC?&p2&s9r0Qd}^8IIIO=TI`7o~I2*=={__rsH^{P=}Ne9fIZQWGgFW>Cvw z)9Cmk`YMU5w4-RP`01A6Y4O4mJMhyTQ%l4nHJ7K|dKlIzJZVoDix9m0URme-9F1TRdadu_`o)e_I!$J&4*!+k z!o;2_nomlCYx_~OuJra1$t*6)Mw4@`f26fYG(Isfg*mPeSU9ib5odU}I`i!=eDU3_ zrovPeOCQcF43w&k)mqnU`Elr=PUG>YZv>Z);_|KXAyN5kjGYt!`e zvTNT8BL6~ciDFATD?Z#4sccMbn3715-BO^GE z)!MM{MD3EUOIJH{YR}A!(DAGYoWFvW@+6nzn63$ES7zb-h!Y{I2czFISXy?0xAP!( zSaJTN+!{G$x|&jndcn|TX}U*nWSByk zBaW%>3On1{+PYGA==7X-()m3Nk>^bM{3BJXjLh`ZcbNMeS|mcDa0Jff1&hXtwy=)s z#lY1JlD@{Lau)A49T5I(NcL1}y5|)?0RWJ9+c+(6dDr-%PsUL$wc2f*|2(cMJX4v= zE2$KfTPKn7WeyJl3pqO4igr|0E1yp4uT_7~E2%2K#mU^;pJ(aDs_kkW^K|!c8yvYH zAE3$u$Nxy|+wAz`Ii{{4^-<+hk@w@FNkvwPNJ&)xFX$n0v7}O5R4m~Oh5Bks>#UEJ zkGu0?n$-vEHg7pTs=1d}*eOs|Tnms?^wXF}tMtKHZd_S!+RMLkZ$IS%Hvs($h X9?M}t{;%A=*8yI4;J0*uWa$4lbGa#E literal 0 HcmV?d00001 diff --git a/docs/assets/remix-cli-tutorial/fortal-dark.jpg b/docs/assets/remix-cli-tutorial/fortal-dark.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5a6c1e290807ed989612a6c352a53700c098ac23 GIT binary patch literal 52461 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 I)=Iq%Q0_k|Ef6Va#mn)zp4#{Z@$FoRD_$#uTOW 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 L|BTk3{v!AvKrBNe literal 0 HcmV?d00001 diff --git a/docs/assets/remix-cli-tutorial/fortal-dialog.jpg b/docs/assets/remix-cli-tutorial/fortal-dialog.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ebd76041c955194b74250516cc0105a942657c33 GIT binary patch literal 61134 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%0Ac1x7jSHYFCQU0l-%64PGK-inMe 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 z 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 YGd($&+f&RYlu7tX03+0P7V0JS509GWl>h($ literal 0 HcmV?d00001 diff --git a/docs/assets/remix-cli-tutorial/saved.jpg b/docs/assets/remix-cli-tutorial/saved.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e5e41cdd401cf6a8861d9e09783b71471f2f3c0 GIT binary patch literal 21988 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

Own the recipe. Remix keeps the behavior.

+

Build a complete sample with the screenshot tutorial. + It includes both presets, full application source, file preservation checks, and downloadable projects.

Remix is a Flutter component library. remix_cli copies your theme and your visual recipes into your app as readable Dart. mix_generator connects those recipes to Remix widgets, which keep interaction, focus, loading, disabled behavior, and diff --git a/docs/remix-cli-tutorial.html b/docs/remix-cli-tutorial.html new file mode 100644 index 00000000..dabc0eb5 --- /dev/null +++ b/docs/remix-cli-tutorial.html @@ -0,0 +1,1233 @@ + + +Build an application with Remix CLI — screenshot tutorial + + +

remix / open codeScreenshot tutorial · Flutter 3.44.0Reference guide
+
+

A practical tutorial

Build an application
with Remix CLI.

+

Follow the commands. Inspect the source. Compare the screenshots. Then verify that your edits stay yours.

+

This page follows one complete application from an empty Flutter project to a working settings screen. +Every step names the files you change and the result you should observe.

+

Start here

What you will build

Build a small settings screen from editable Remix recipes.

+

The sample is named Launchpad. It is a fictional application used only for this tutorial. +You write its screen, layout, and callbacks. The Remix CLI installs its theme and component recipes.

+

You will create a Flutter project, install the default preset, and render a Button. +Then you will compose the screen, customize a recipe, and verify source preservation. +An optional section repeats the setup with Fortal.

+

This tutorial assumes basic Flutter knowledge and access to a terminal. +Use a desktop browser for the sample. The sample does not include a mobile layout or a backend.

+
Finished default sample with workspace settings, a sidebar, and a cyan preview button
The finished sample. This capture includes the 44-pixel Button customization from Step 7. The CLI does not generate this complete screen. Open at full size.
+
+ + + + + +
PartResponsibilityWhere to inspect it
FlutterCreates and runs the application.lib/main.dart
Remix CLIInstalls the theme and recipes. It runs adapter generation.remix.yaml and lib/ui/
Your applicationOwns the screen, callbacks, theme, and recipes.SampleApp, WorkspacePage, and authored lib/ui/ files
RemixProvides widget rendering and interaction behavior.package:remix/remix.dart
CIRuns automated repository checks on GitHub.The PR checks, separate from this application
+

Download both complete sample projects

+

Follow the steps to build the sample yourself. Use the archive to compare your files or inspect the final result. +The archive includes generated adapters and four behavior tests for each preset.

+

1 · Prepare

Create the Flutter project

Start from an empty project so each CLI change is visible.

+

This tutorial uses Flutter 3.44.0, Dart 3.12.0, and Git. +Put the intended Flutter SDK on PATH. The CLI checks the Flutter executable found there.

+
Check the tools
flutter --version
+dart --version
+git --version
+

Run these commands from the directory where you keep sample applications.

+
Create the default sample
flutter create --empty --platforms=web remix_default_demo
+cd remix_default_demo
+

The following commands run inside remix_default_demo, beside its pubspec.yaml. +The project name also appears in the test import provided later.

+
Check the result

Flutter creates the project and its starter lib/main.dart. No Remix recipe exists yet.

2 · Set up the CLI

Use the reviewed checkout

Use one CLI invocation throughout this tutorial.

+
Release status for this tutorial +

The September 7, 2026 review used Remix 1.0.0-beta.9 and CLI 0.1.0 from a checkout. +Those releases were not published at review time. The instructions below work with that checkout.

+

Use the complete PR stack, including Sidebar. The reviewed checkout is bfae6507676fadea7632e2f7f66924935c04ca2a.

+
Get the reviewed checkout +

Open a second terminal in the directory where you keep repositories. Run these commands there.

+
Get the exact reviewed source
git clone https://github.com/conceptadev/remix.git remix-review
+git -C remix-review checkout bfae6507676fadea7632e2f7f66924935c04ca2a
+git -C remix-review rev-parse --show-toplevel
+

The last command prints the checkout path. Use that path wherever the tutorial shows /path/to/remix.

+

Return to the first terminal in remix_default_demo for the remaining commands.

+

Replace /path/to/remix with your Remix checkout path. +Create pubspec_overrides.yaml in the sample project.

+
pubspec_overrides.yaml
dependency_overrides:
+  remix:
+    path: /path/to/remix/packages/remix
Install the CLI as a development dependency
dart pub add "dev:remix_cli@{path: /path/to/remix/packages/remix_cli}"
+dart run remix_cli:remix --version
Expected version
0.1.0
+

The CLI installation updates development dependencies and the lockfile. +The Remix override selects the reviewed runtime when the CLI adds the Remix dependency.

+
Use hosted packages after publication +

Use the reference installation instructions after both packages are available. +Remove the checkout override and replace the CLI path dependency with the published version. +Run flutter pub get and repeat analysis and tests.

+
Check the result

The version command prints 0.1.0. The application still has no installed theme or recipe.

3 · Initialize

Choose the preset and prefix

The configuration fixes the preset, generated names, and installation path.

Initialize the default preset
dart run remix_cli:remix init --prefix Acme --preset default
Observed output from the fresh sample
Initialized remix.yaml and lib/ui/ui.dart.
remix.yaml
schema: 2
+prefix: Acme
+preset: default
+paths:
+  ui: lib/ui
+

Acme is the application prefix. It produces names such as AcmeButton and acmeButtonStyle. +The CLI writes an empty managed barrel at lib/ui/ui.dart.

+

The preset selects the theme and recipe vocabulary. Choose Fortal in a separate project; do not change this project's preset later.

+
Check the result

Open remix.yaml and confirm schema 2 and preset default. +Open lib/ui/ui.dart and confirm its export markers. No component renders yet.

4 · Preview and install

Add the first component

Read the plan, then allow the CLI to install Button and its theme.

Preview the plan
dart run remix_cli:remix add button --dry-run
Observed plan before installation
Items: theme -> button
+Dependencies: remix@^1.0.0-beta.9, mix_annotations@^2.2.0-beta.1, dev:build_runner@^2.10.1, dev:mix_generator@^2.2.0-beta.3
+theme: missing; lib/ui/theme/tokens.dart, lib/ui/theme/theme_data.dart, lib/ui/theme/theme_scope.dart
+button: missing; lib/ui/components/button.dart
+Exports: theme/tokens.dart, theme/theme_data.dart, theme/theme_scope.dart, components/button.dart
+Generated: lib/ui/components/button.g.dart
+

theme -> button is the installation order. Both items are missing in a fresh project. +The dry-run reports the plan and writes no files.

+
Install Button
dart run remix_cli:remix add button
Observed result after the plan
Added theme.
+Added button.
+Generated lib/ui/components/button.g.dart.
Files to inspect
lib/ui/
+├── ui.dart
+├── theme/
+│   ├── tokens.dart
+│   ├── theme_data.dart
+│   └── theme_scope.dart
+└── components/
+    ├── button.dart
+    └── button.g.dart
+

Open button.dart, acmeButtonStyle, to inspect the recipe. +Open button.g.dart, AcmeButton, to inspect the generated adapter.

+

Edit the authored recipe. Let mix_generator produce the adapter. +The CLI also adds required dependencies, updates the barrel exports, and runs generation.

+
Check the result

The three theme files, Button recipe, and generated adapter exist. +The CLI reports successful generation. The application screen still uses Flutter's starter code.

5 · Render

Put Button in the application

This is the first step that changes the visible application.

+

Replace lib/main.dart with this complete example. +It imports the managed barrel and places the Button below AcmeThemeScope.

+
Show the complete first-render main.dart
lib/main.dart · first render
import 'package:flutter/widgets.dart';
+
+import 'ui/ui.dart';
+
+void main() => runApp(const AcmeApp());
+
+class AcmeApp extends StatelessWidget {
+  const AcmeApp({super.key});
+
+  @override
+  Widget build(BuildContext context) {
+    return WidgetsApp(
+      color: const Color(0xFF000000),
+      builder: (_, _) => Overlay(
+        initialEntries: [
+          OverlayEntry(
+            builder: (_) => const AcmeThemeScope(
+              data: AcmeThemeData.light(),
+              child: HomePage(),
+            ),
+          ),
+        ],
+      ),
+    );
+  }
+}
+
+class HomePage extends StatelessWidget {
+  const HomePage({super.key});
+
+  @override
+  Widget build(BuildContext context) {
+    final theme = AcmeTheme.of(context);
+    return ColoredBox(
+      color: theme.background,
+      child: Center(
+        child: AcmeButton.primary(
+          label: 'Continue',
+          onPressed: () {},
+        ),
+      ),
+    );
+  }
+}
Run the application
flutter run -d chrome
A single black Continue button centered on a white application surface
First render. This detail capture comes from the complete example above, built with the installed default recipe. Open at full size.
+

The sample uses WidgetsApp and an Overlay. +The larger application below uses MaterialApp for its navigation host.

+
Check the result

Chrome shows a centered Continue button. The callback is intentionally empty in this first example.

6 · Compose the screen

Add the settings controls

Install the remaining recipes, then write the application that uses them.

Install one item per command
dart run remix_cli:remix add checkbox
+dart run remix_cli:remix add textfield
+dart run remix_cli:remix add dialog
+dart run remix_cli:remix add card
+dart run remix_cli:remix add sidebar
+

The existing theme stays installed. Sidebar also installs its toggle dependency. +Each command generates the required adapters and updates lib/ui/ui.dart.

+

Replace lib/main.dart with the complete sample below. +The sample imports only Flutter, Remix, and the application barrel.

+
Show the complete settings-screen main.dart
lib/main.dart · default sample
import 'package:flutter/material.dart';
+import 'package:remix/remix.dart';
+
+import 'ui/ui.dart';
+
+void main() => runApp(const SampleApp());
+
+class SampleApp extends StatefulWidget {
+  const SampleApp({super.key});
+
+  @override
+  State<SampleApp> createState() => _SampleAppState();
+}
+
+class _SampleAppState extends State<SampleApp> {
+  bool dark = false;
+
+  @override
+  Widget build(BuildContext context) {
+    return MaterialApp(
+      title: 'Launchpad — default preset',
+      debugShowCheckedModeBanner: false,
+      theme: ThemeData(brightness: dark ? Brightness.dark : Brightness.light),
+      builder: (context, child) => DefaultTextStyle(
+        style: Theme.of(context).textTheme.bodyMedium!,
+        child: AcmeThemeScope(
+          data: dark ? const AcmeThemeData.dark() : const AcmeThemeData.light(),
+          child: child!,
+        ),
+      ),
+      home: WorkspacePage(
+        dark: dark,
+        onTheme: () => setState(() => dark = !dark),
+      ),
+    );
+  }
+}
+
+class WorkspacePage extends StatefulWidget {
+  const WorkspacePage({super.key, required this.dark, required this.onTheme});
+  final bool dark;
+  final VoidCallback onTheme;
+
+  @override
+  State<WorkspacePage> createState() => _WorkspacePageState();
+}
+
+class _WorkspacePageState extends State<WorkspacePage> {
+  final name = TextEditingController(text: 'Launchpad');
+  bool summary = true;
+  bool saving = false;
+  int saves = 0;
+  String destination = 'settings';
+  String status = 'No changes saved yet.';
+
+  @override
+  void dispose() {
+    name.dispose();
+    super.dispose();
+  }
+
+  Future<void> save() async {
+    setState(() => saving = true);
+    await Future<void>.delayed(const Duration(milliseconds: 1500));
+    if (!mounted) return;
+    setState(() {
+      saving = false;
+      saves += 1;
+      status =
+          'Saved ${name.text}. Save count: $saves. Summary: ${summary ? 'on' : 'off'}.';
+    });
+  }
+
+  Future<void> invite() async {
+    final confirmed = await showRemixDialog<bool>(
+      context: context,
+      barrierLabel: 'Close invitation preview',
+      builder: (context) => Center(
+        child: AcmeDialog(
+          title: 'Invite a teammate',
+          description:
+              'This sample records your choice locally. It sends no invitation.',
+          actions: [
+            AcmeButton.outline(
+              label: 'Cancel',
+              onPressed: () => Navigator.pop(context, false),
+            ),
+            AcmeButton.primary(
+              label: 'Confirm',
+              onPressed: () => Navigator.pop(context, true),
+            ),
+          ],
+        ),
+      ),
+    );
+    if (confirmed == true && mounted) {
+      setState(() => status = 'Invitation confirmed in this sample.');
+    }
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    final foreground = widget.dark
+        ? const Color(0xFFFAFAFA)
+        : const Color(0xFF171717);
+    final muted = widget.dark
+        ? const Color(0xFFA3A3A3)
+        : const Color(0xFF737373);
+    final background = widget.dark
+        ? const Color(0xFF0A0A0A)
+        : const Color(0xFFFAFAFA);
+    return DefaultTextStyle(
+      style: TextStyle(color: foreground, fontSize: 15, height: 1.5),
+      child: ColoredBox(
+        color: background,
+        child: SafeArea(
+          child: Row(
+            crossAxisAlignment: CrossAxisAlignment.stretch,
+            children: [
+              SizedBox(
+                width: 230,
+                child: AcmeSidebar<String>(
+                  semanticLabel: 'Workspace navigation',
+                  header: const Padding(
+                    padding: EdgeInsets.all(24),
+                    child: Text(
+                      'LAUNCHPAD',
+                      style: TextStyle(
+                        fontSize: 18,
+                        fontWeight: FontWeight.w700,
+                        letterSpacing: 2,
+                      ),
+                    ),
+                  ),
+                  sections: const [
+                    RemixSidebarSection(
+                      label: 'WORKSPACE',
+                      destinations: [
+                        RemixSidebarDestination(
+                          value: 'overview',
+                          label: 'Overview',
+                        ),
+                        RemixSidebarDestination(
+                          value: 'settings',
+                          label: 'Settings',
+                        ),
+                        RemixSidebarDestination(
+                          value: 'billing',
+                          label: 'Billing',
+                          enabled: false,
+                        ),
+                      ],
+                    ),
+                  ],
+                  selectedValue: destination,
+                  onSelected: (value) => setState(() => destination = value),
+                  footer: Text(
+                    'default preset\nApplication-owned source',
+                    style: TextStyle(fontSize: 12, color: muted),
+                  ),
+                ),
+              ),
+              Expanded(
+                child: SingleChildScrollView(
+                  padding: const EdgeInsets.symmetric(
+                    horizontal: 48,
+                    vertical: 44,
+                  ),
+                  child: Align(
+                    alignment: Alignment.topLeft,
+                    child: ConstrainedBox(
+                      constraints: const BoxConstraints(maxWidth: 820),
+                      child: Column(
+                        crossAxisAlignment: CrossAxisAlignment.stretch,
+                        children: [
+                          Row(
+                            children: [
+                              Expanded(
+                                child: Text(
+                                  'WORKSPACE / ${destination.toUpperCase()}',
+                                  style: TextStyle(
+                                    color: muted,
+                                    fontSize: 12,
+                                    letterSpacing: 1.5,
+                                  ),
+                                ),
+                              ),
+                              AcmeButton.outline(
+                                label: widget.dark
+                                    ? 'Use light theme'
+                                    : 'Use dark theme',
+                                onPressed: widget.onTheme,
+                              ),
+                            ],
+                          ),
+                          const SizedBox(height: 32),
+                          Text(
+                            destination == 'settings'
+                                ? 'Workspace settings'
+                                : 'Workspace overview',
+                            style: const TextStyle(
+                              fontSize: 36,
+                              fontWeight: FontWeight.w600,
+                              height: 1.2,
+                            ),
+                          ),
+                          const SizedBox(height: 12),
+                          Text(
+                            'A real Flutter application built from the default preset.',
+                            style: TextStyle(color: muted),
+                          ),
+                          const SizedBox(height: 32),
+                          AcmeCard(
+                            child: Column(
+                              crossAxisAlignment: CrossAxisAlignment.stretch,
+                              children: [
+                                const Text(
+                                  'General',
+                                  style: TextStyle(
+                                    fontSize: 20,
+                                    fontWeight: FontWeight.w600,
+                                  ),
+                                ),
+                                const SizedBox(height: 8),
+                                Text(
+                                  'Set the workspace name and your email preference.',
+                                  style: TextStyle(color: muted),
+                                ),
+                                const SizedBox(height: 24),
+                                AcmeTextField(
+                                  controller: name,
+                                  label: 'Workspace name',
+                                  semanticLabel: 'Workspace name',
+                                  helperText:
+                                      'The application owns this text field recipe.',
+                                ),
+                                const SizedBox(height: 16),
+                                AcmeCheckbox(
+                                  label: 'Send a weekly summary',
+                                  selected: summary,
+                                  onChanged: (value) =>
+                                      setState(() => summary = value ?? false),
+                                ),
+                                const SizedBox(height: 24),
+                                Wrap(
+                                  spacing: 12,
+                                  runSpacing: 12,
+                                  children: [
+                                    AcmeButton.primary(
+                                      label: 'Save changes',
+                                      loading: saving,
+                                      onPressed: save,
+                                    ),
+                                    AcmeButton.outline(
+                                      label: 'Preview invitation',
+                                      onPressed: invite,
+                                    ),
+                                    AcmeButton.outline(
+                                      label: 'Delete workspace',
+                                      enabled: false,
+                                      onPressed: () => setState(
+                                        () => status =
+                                            'ERROR: disabled action ran.',
+                                      ),
+                                    ),
+                                  ],
+                                ),
+                                const SizedBox(height: 20),
+                                Semantics(
+                                  liveRegion: true,
+                                  child: Text(
+                                    status,
+                                    style: TextStyle(
+                                      color: muted,
+                                      fontSize: 13,
+                                    ),
+                                  ),
+                                ),
+                              ],
+                            ),
+                          ),
+                          const SizedBox(height: 24),
+                          AcmeCard(
+                            child: Column(
+                              crossAxisAlignment: CrossAxisAlignment.start,
+                              children: [
+                                const Text(
+                                  'One instance override',
+                                  style: TextStyle(
+                                    fontSize: 20,
+                                    fontWeight: FontWeight.w600,
+                                  ),
+                                ),
+                                const SizedBox(height: 8),
+                                Text(
+                                  'This button uses the same recipe with a local style override.',
+                                  style: TextStyle(color: muted),
+                                ),
+                                const SizedBox(height: 20),
+                                AcmeButton.primary(
+                                  label: 'Run preview',
+                                  style: ButtonStyler()
+                                      .color(const Color(0xFF0E7490))
+                                      .label(.color(const Color(0xFFFFFFFF)))
+                                      .onPressed(
+                                        ButtonStyler().color(
+                                          const Color(0xFF164E63),
+                                        ),
+                                      )
+                                      .onHovered(
+                                        ButtonStyler().color(
+                                          const Color(0xFF155E75),
+                                        ),
+                                      )
+                                      .borderRadius(
+                                        .all(const Radius.circular(999)),
+                                      ),
+                                  onPressed: () => setState(
+                                    () => status =
+                                        'Preview completed. The instance override keeps the callback.',
+                                  ),
+                                ),
+                              ],
+                            ),
+                          ),
+                          const SizedBox(height: 24),
+                          Text(
+                            'Source: lib/ui/  ·  Config: remix.yaml  ·  Preset: default',
+                            style: TextStyle(color: muted, fontSize: 12),
+                          ),
+                        ],
+                      ),
+                    ),
+                  ),
+                ),
+              ),
+            ],
+          ),
+        ),
+      ),
+    );
+  }
+}
+
+ + + + + +
Open this symbolWhat it does
SampleAppCreates the application host and switches the theme.
_SampleAppState.buildPlaces AcmeThemeScope below MaterialApp through its builder.
_WorkspacePageState.buildComposes the installed controls and passes their current values.
_WorkspacePageState.saveSimulates a save, then records the name, count, and checkbox value.
_WorkspacePageState.inviteOpens a dialog and reads its local confirmation result.
+

The application owns the TextEditingController and disposes it in dispose. +It owns the selected destination, save state, and callbacks. No request leaves the application.

+

Place the scope below the host

+

MaterialApp.builder wraps the navigation child with the text defaults and recipe scope. +Routes and dialogs can then inherit those values.

+
lib/main.dart · _SampleAppState.build
builder: (context, child) => DefaultTextStyle(
+  style: Theme.of(context).textTheme.bodyMedium!,
+  child: AcmeThemeScope(
+    data: dark ? const AcmeThemeData.dark() : const AcmeThemeData.light(),
+    child: child!,
+  ),
+),
+

Restart the application after replacing its root widget. +In the terminal running flutter run, press R for a hot restart.

+
Check the result

The settings screen shows Sidebar, TextField, Checkbox, Card, and Button. +The default medium buttons remain 36 pixels tall until Step 7.

7 · Customize

Change appearance at the correct level

Use a call-site override, a recipe edit, or a theme value according to the intended scope.

+

One instance: the cyan preview button

+

Open lib/main.dart, _WorkspacePageState.build, and find the Run preview button. +Its style overrides one instance.

+
lib/main.dart · the Run preview style
style: ButtonStyler()
+    .color(const Color(0xFF0E7490))
+    .label(.color(const Color(0xFFFFFFFF)))
+    .onPressed(ButtonStyler().color(const Color(0xFF164E63)))
+    .onHovered(ButtonStyler().color(const Color(0xFF155E75)))
+    .borderRadius(.all(const Radius.circular(999))),
+

The explicit hover and pressed fragments override those recipe states too. +The neighboring Button keeps its recipe. The onPressed callback still belongs to the application.

+

One component family: make medium buttons taller

+

Open lib/ui/components/button.dart, _metricsFor. +Change only the medium minHeight from 36.0 to 44.0.

+
lib/ui/components/button.dart · _metricsFor
.medium => (
+  minHeight: 44.0,
+  paddingX: 16.0,
+  gap: 8.0,
+  labelSize: 14.0,
+  iconSize: 16.0,
+),
VS Code web showing minHeight 44.0 in the medium Button metrics
The saved recipe edit. The editor shows the application-owned file. The terminal shows a later dry-run against the installed project. Open at full size.
+

Restart or reload the running application to see the change. +This edit changes a recipe value. It does not change the generated widget signature.

+

When you change recipe parameters, enums, or annotations, regenerate the adapter.

+
Regenerate after a recipe API change
dart run build_runner build --delete-conflicting-outputs
+

The theme: shared values and runtime switching

+

Open lib/ui/theme/theme_data.dart, AcmeThemeData, for shared values. +Open lib/main.dart, _SampleAppState.build, for the light and dark switch.

+

A new token also needs an entry in AcmeThemeData.tokens. +Include its value in constructors, copyWith, equality, and hashCode.

+

See the customization reference for token and theme examples.

+
Check the result

Every default medium Button uses the 44-pixel minimum height. +The cyan Button keeps its instance override. The review measured Save changes at 44 CSS pixels with device pixel ratio 1.

8 · Exercise the application

Check the visible behavior

A screenshot shows a state. These actions verify how the application reaches that state.

+
    +
  1. Reload the sample to reset its local state.
  2. +
  3. Enter Launchpad Studio in Workspace name.
  4. +
  5. Clear Send a weekly summary.
  6. +
  7. Select Save changes. Try a second press while the spinner is visible.
  8. +
  9. Wait for the result. Confirm Save count: 1 and Summary: off.
  10. +
+
The Save changes button showing a spinner with Launchpad Studio entered and the summary checkbox cleared
Saving. Remix renders the loading state and disables the Button. The application supplies loading: saving. Open at full size.
The saved result names Launchpad Studio, save count 1, and summary off
Saved. The application callback retains the entered values and reports one completed save. Open at full size.
+
+ + + + + +
ActionExpected resultCode to inspect
Select Delete workspace.The disabled callback does not run.enabled: false in _WorkspacePageState.build
Select Run preview.The status reports that the preview completed.The instance Button's onPressed
Select Overview, then Billing.Overview selects. Disabled Billing does not select.AcmeSidebar and RemixSidebarDestination
Select Use dark theme.The scope receives dark theme data._SampleAppState.build
Use the Tab key.Enabled controls receive keyboard focus. Sidebar uses ordinary Tab traversal.The installed widget adapters and Remix behavior
+

Open and confirm a dialog

+

Select Preview invitation, then Confirm. +The dialog closes and the status reports a local confirmation. It sends no invitation.

+
Centered default dialog in dark mode with Cancel and Confirm buttons
Default dialog. The panel is centered and its text has no fallback underline. This capture follows a dark-theme switch. Open at full size.
+

Open lib/main.dart, _WorkspacePageState.invite. +Its showRemixDialog builder wraps AcmeDialog in Center, so the panel's maximum width can apply.

+

The host supplies the intended DefaultTextStyle before the dialog captures inherited themes.

+
Check the result

The form keeps its values, loading prevents duplicate saves, disabled controls stay inactive, and the dialog returns its result.

9 · Review updates

Keep the source you edited

Use a diff to inspect the bundled recipe without replacing your source.

Compare the edited Button with its bundled template
dart run remix_cli:remix add button --diff
Relevant lines from the observed diff
-    minHeight: 44.0,
++    minHeight: 36.0,
+

current is your file. proposed is the bundled template. +The removed line is your 44-pixel edit. The added line is the upstream 36-pixel value.

+

The diff reports the difference and leaves the project source unchanged.

+
Run an ordinary add again
dart run remix_cli:remix add button
Observed preservation result after the plan
Preserved theme.
+Preserved button.
+Preserved lib/ui/components/button.g.dart.
+

Confirm that the medium minHeight still equals 44.0 in button.dart.

+
Optional: replace the requested recipe +

Commit or copy your edit before this experiment. The command below replaces the requested Button recipe with the bundled version.

+
Replace Button with the bundled source
dart run remix_cli:remix add button --overwrite
+

Button returns to 36 pixels. An already-installed theme remains unchanged. +Restore the 44-pixel edit if you want the final sample to match the screenshots.

+

Diff each installed item when you update the CLI. Button's diff omits an already-installed theme.

+
Review the theme separately
dart run remix_cli:remix add theme --diff
Check the result

Dry-run, diff, and ordinary add preserve your authored source. +Explicit Button overwrite replaces Button and preserves installed registry dependencies.

10 · Optional preset

Build the same sample with Fortal

Repeat the workflow in a separate Flutter project.

+

Run these commands from the directory above the default sample.

+
Create the Fortal project
flutter create --empty --platforms=web remix_fortal_demo
+cd remix_fortal_demo
+

Repeat Step 2 to add the Remix override and the checkout CLI in this project.

+
Initialize and install Fortal recipes
dart run remix_cli:remix init --prefix Acme --preset fortal
+dart run remix_cli:remix add button
+dart run remix_cli:remix add checkbox
+dart run remix_cli:remix add textfield
+dart run remix_cli:remix add dialog
+dart run remix_cli:remix add card
+dart run remix_cli:remix add sidebar
+

Fortal Button installs theme -> base_button -> button. +The theme and shared source files differ from the default preset.

+
+ + + + +
DefaultFortal
AcmeThemeScopeAcmeScope
AcmeButton.primaryAcmeButton.solid
A small token vocabularyA Radix-inspired theme and recipe vocabulary
Button's local _metricsFor tableFortal-specific sizing and shared control styles
+

Use the Fortal source below for lib/main.dart. +It uses the same application flow with the Fortal API. The default Button height edit does not apply to this project.

+
Show the complete Fortal main.dart
lib/main.dart · Fortal sample
import 'package:flutter/material.dart';
+import 'package:remix/remix.dart';
+
+import 'ui/ui.dart';
+
+void main() => runApp(const SampleApp());
+
+class SampleApp extends StatefulWidget {
+  const SampleApp({super.key});
+
+  @override
+  State<SampleApp> createState() => _SampleAppState();
+}
+
+class _SampleAppState extends State<SampleApp> {
+  bool dark = false;
+
+  @override
+  Widget build(BuildContext context) {
+    return MaterialApp(
+      title: 'Launchpad — fortal preset',
+      debugShowCheckedModeBanner: false,
+      theme: ThemeData(brightness: dark ? Brightness.dark : Brightness.light),
+      builder: (context, child) => DefaultTextStyle(
+        style: Theme.of(context).textTheme.bodyMedium!,
+        child: AcmeScope(
+          accent: AcmeAccentColor.violet,
+          brightness: dark ? Brightness.dark : Brightness.light,
+          child: child!,
+        ),
+      ),
+      home: WorkspacePage(
+        dark: dark,
+        onTheme: () => setState(() => dark = !dark),
+      ),
+    );
+  }
+}
+
+class WorkspacePage extends StatefulWidget {
+  const WorkspacePage({super.key, required this.dark, required this.onTheme});
+  final bool dark;
+  final VoidCallback onTheme;
+
+  @override
+  State<WorkspacePage> createState() => _WorkspacePageState();
+}
+
+class _WorkspacePageState extends State<WorkspacePage> {
+  final name = TextEditingController(text: 'Launchpad');
+  bool summary = true;
+  bool saving = false;
+  int saves = 0;
+  String destination = 'settings';
+  String status = 'No changes saved yet.';
+
+  @override
+  void dispose() {
+    name.dispose();
+    super.dispose();
+  }
+
+  Future<void> save() async {
+    setState(() => saving = true);
+    await Future<void>.delayed(const Duration(milliseconds: 1500));
+    if (!mounted) return;
+    setState(() {
+      saving = false;
+      saves += 1;
+      status =
+          'Saved ${name.text}. Save count: $saves. Summary: ${summary ? 'on' : 'off'}.';
+    });
+  }
+
+  Future<void> invite() async {
+    final confirmed = await showRemixDialog<bool>(
+      context: context,
+      barrierLabel: 'Close invitation preview',
+      builder: (context) => Center(
+        child: AcmeDialog(
+          title: 'Invite a teammate',
+          description:
+              'This sample records your choice locally. It sends no invitation.',
+          actions: [
+            AcmeButton.outline(
+              label: 'Cancel',
+              onPressed: () => Navigator.pop(context, false),
+            ),
+            AcmeButton.solid(
+              label: 'Confirm',
+              onPressed: () => Navigator.pop(context, true),
+            ),
+          ],
+        ),
+      ),
+    );
+    if (confirmed == true && mounted) {
+      setState(() => status = 'Invitation confirmed in this sample.');
+    }
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    final foreground = widget.dark
+        ? const Color(0xFFFAFAFA)
+        : const Color(0xFF171717);
+    final muted = widget.dark
+        ? const Color(0xFFA3A3A3)
+        : const Color(0xFF737373);
+    final background = widget.dark
+        ? const Color(0xFF0A0A0A)
+        : const Color(0xFFFAFAFA);
+    return DefaultTextStyle(
+      style: TextStyle(color: foreground, fontSize: 15, height: 1.5),
+      child: ColoredBox(
+        color: background,
+        child: SafeArea(
+          child: Row(
+            crossAxisAlignment: CrossAxisAlignment.stretch,
+            children: [
+              SizedBox(
+                width: 230,
+                child: AcmeSidebar<String>(
+                  semanticLabel: 'Workspace navigation',
+                  header: const Padding(
+                    padding: EdgeInsets.all(24),
+                    child: Text(
+                      'LAUNCHPAD',
+                      style: TextStyle(
+                        fontSize: 18,
+                        fontWeight: FontWeight.w700,
+                        letterSpacing: 2,
+                      ),
+                    ),
+                  ),
+                  sections: const [
+                    RemixSidebarSection(
+                      label: 'WORKSPACE',
+                      destinations: [
+                        RemixSidebarDestination(
+                          value: 'overview',
+                          label: 'Overview',
+                        ),
+                        RemixSidebarDestination(
+                          value: 'settings',
+                          label: 'Settings',
+                        ),
+                        RemixSidebarDestination(
+                          value: 'billing',
+                          label: 'Billing',
+                          enabled: false,
+                        ),
+                      ],
+                    ),
+                  ],
+                  selectedValue: destination,
+                  onSelected: (value) => setState(() => destination = value),
+                  footer: Text(
+                    'fortal preset\nApplication-owned source',
+                    style: TextStyle(fontSize: 12, color: muted),
+                  ),
+                ),
+              ),
+              Expanded(
+                child: SingleChildScrollView(
+                  padding: const EdgeInsets.symmetric(
+                    horizontal: 48,
+                    vertical: 44,
+                  ),
+                  child: Align(
+                    alignment: Alignment.topLeft,
+                    child: ConstrainedBox(
+                      constraints: const BoxConstraints(maxWidth: 820),
+                      child: Column(
+                        crossAxisAlignment: CrossAxisAlignment.stretch,
+                        children: [
+                          Row(
+                            children: [
+                              Expanded(
+                                child: Text(
+                                  'WORKSPACE / ${destination.toUpperCase()}',
+                                  style: TextStyle(
+                                    color: muted,
+                                    fontSize: 12,
+                                    letterSpacing: 1.5,
+                                  ),
+                                ),
+                              ),
+                              AcmeButton.outline(
+                                label: widget.dark
+                                    ? 'Use light theme'
+                                    : 'Use dark theme',
+                                onPressed: widget.onTheme,
+                              ),
+                            ],
+                          ),
+                          const SizedBox(height: 32),
+                          Text(
+                            destination == 'settings'
+                                ? 'Workspace settings'
+                                : 'Workspace overview',
+                            style: const TextStyle(
+                              fontSize: 36,
+                              fontWeight: FontWeight.w600,
+                              height: 1.2,
+                            ),
+                          ),
+                          const SizedBox(height: 12),
+                          Text(
+                            'A real Flutter application built from the fortal preset.',
+                            style: TextStyle(color: muted),
+                          ),
+                          const SizedBox(height: 32),
+                          AcmeCard(
+                            child: Column(
+                              crossAxisAlignment: CrossAxisAlignment.stretch,
+                              children: [
+                                const Text(
+                                  'General',
+                                  style: TextStyle(
+                                    fontSize: 20,
+                                    fontWeight: FontWeight.w600,
+                                  ),
+                                ),
+                                const SizedBox(height: 8),
+                                Text(
+                                  'Set the workspace name and your email preference.',
+                                  style: TextStyle(color: muted),
+                                ),
+                                const SizedBox(height: 24),
+                                AcmeTextField(
+                                  controller: name,
+                                  label: 'Workspace name',
+                                  semanticLabel: 'Workspace name',
+                                  helperText:
+                                      'The application owns this text field recipe.',
+                                ),
+                                const SizedBox(height: 16),
+                                AcmeCheckbox(
+                                  label: 'Send a weekly summary',
+                                  selected: summary,
+                                  onChanged: (value) =>
+                                      setState(() => summary = value ?? false),
+                                ),
+                                const SizedBox(height: 24),
+                                Wrap(
+                                  spacing: 12,
+                                  runSpacing: 12,
+                                  children: [
+                                    AcmeButton.solid(
+                                      label: 'Save changes',
+                                      loading: saving,
+                                      onPressed: save,
+                                    ),
+                                    AcmeButton.outline(
+                                      label: 'Preview invitation',
+                                      onPressed: invite,
+                                    ),
+                                    AcmeButton.outline(
+                                      label: 'Delete workspace',
+                                      enabled: false,
+                                      onPressed: () => setState(
+                                        () => status =
+                                            'ERROR: disabled action ran.',
+                                      ),
+                                    ),
+                                  ],
+                                ),
+                                const SizedBox(height: 20),
+                                Semantics(
+                                  liveRegion: true,
+                                  child: Text(
+                                    status,
+                                    style: TextStyle(
+                                      color: muted,
+                                      fontSize: 13,
+                                    ),
+                                  ),
+                                ),
+                              ],
+                            ),
+                          ),
+                          const SizedBox(height: 24),
+                          AcmeCard(
+                            child: Column(
+                              crossAxisAlignment: CrossAxisAlignment.start,
+                              children: [
+                                const Text(
+                                  'One instance override',
+                                  style: TextStyle(
+                                    fontSize: 20,
+                                    fontWeight: FontWeight.w600,
+                                  ),
+                                ),
+                                const SizedBox(height: 8),
+                                Text(
+                                  'This button uses the same recipe with a local style override.',
+                                  style: TextStyle(color: muted),
+                                ),
+                                const SizedBox(height: 20),
+                                AcmeButton.solid(
+                                  label: 'Run preview',
+                                  style: ButtonStyler()
+                                      .color(const Color(0xFF0E7490))
+                                      .label(.color(const Color(0xFFFFFFFF)))
+                                      .onPressed(
+                                        ButtonStyler().color(
+                                          const Color(0xFF164E63),
+                                        ),
+                                      )
+                                      .onHovered(
+                                        ButtonStyler().color(
+                                          const Color(0xFF155E75),
+                                        ),
+                                      )
+                                      .borderRadius(
+                                        .all(const Radius.circular(999)),
+                                      ),
+                                  onPressed: () => setState(
+                                    () => status =
+                                        'Preview completed. The instance override keeps the callback.',
+                                  ),
+                                ),
+                              ],
+                            ),
+                          ),
+                          const SizedBox(height: 24),
+                          Text(
+                            'Source: lib/ui/  ·  Config: remix.yaml  ·  Preset: fortal',
+                            style: TextStyle(color: muted, fontSize: 12),
+                          ),
+                        ],
+                      ),
+                    ),
+                  ),
+                ),
+              ),
+            ],
+          ),
+        ),
+      ),
+    );
+  }
+}
The Fortal sample in dark mode with purple controls and the cyan instance override
The Fortal sample. The application supplies the layout. Installed Fortal recipes supply the control appearance. Open at full size.
Fortal dialog in dark mode with a centered panel and normal text decoration
Fortal dialog. AcmeScope sits below the application host. Routes inherit its tokens and text defaults. Open at full size.
Check the result

The separate project records preset: fortal and uses AcmeScope and AcmeButton.solid. +Repeat the behavior checks from Step 8.

11 · Validate

Run the checks yourself

Use analysis, behavior tests, and a release build to verify more than appearance.

+

Apply this configuration in each sample's analysis_options.yaml. +The current generator produces lint findings in adapters. Keep authored recipes under analysis.

+
analysis_options.yaml
include: package:flutter_lints/flutter.yaml
+
+analyzer:
+  exclude:
+    - lib/ui/**/*.g.dart
+

Create test/workflow_test.dart with the matching test source below. +The imports assume the project names used in Steps 1 and 10.

+
Show the four default sample tests
test/workflow_test.dart · default
import 'package:flutter/material.dart';
+import 'package:flutter/rendering.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:remix_default_demo/main.dart';
+
+void main() {
+  Future<void> start(WidgetTester tester) async {
+    tester.view.physicalSize = const Size(1400, 1000);
+    tester.view.devicePixelRatio = 1;
+    addTearDown(tester.view.resetPhysicalSize);
+    addTearDown(tester.view.resetDevicePixelRatio);
+    await tester.pumpWidget(const SampleApp());
+    await tester.pumpAndSettle();
+  }
+
+  testWidgets(
+    'the form saves once while loading and keeps the entered values',
+    (tester) async {
+      await start(tester);
+      await tester.enterText(find.byType(EditableText), 'Launchpad Studio');
+      await tester.tap(find.text('Send a weekly summary'));
+      await tester.tap(find.text('Save changes'));
+      await tester.pump(const Duration(milliseconds: 100));
+      expect(find.textContaining('Save count:'), findsNothing);
+      await tester.tap(find.text('Save changes'), warnIfMissed: false);
+      await tester.pump(const Duration(milliseconds: 1600));
+      await tester.pumpAndSettle();
+      expect(
+        find.text('Saved Launchpad Studio. Save count: 1. Summary: off.'),
+        findsOneWidget,
+      );
+      expect(tester.takeException(), isNull);
+    },
+  );
+
+  testWidgets(
+    'disabled actions stay inactive and the instance override works',
+    (tester) async {
+      await start(tester);
+      await tester.tap(find.text('Delete workspace'), warnIfMissed: false);
+      await tester.pumpAndSettle();
+      expect(find.text('ERROR: disabled action ran.'), findsNothing);
+      await tester.tap(find.text('Run preview'));
+      await tester.pumpAndSettle();
+      expect(
+        find.text(
+          'Preview completed. The instance override keeps the callback.',
+        ),
+        findsOneWidget,
+      );
+      expect(tester.takeException(), isNull);
+    },
+  );
+
+  testWidgets(
+    'the dialog returns its result and the theme changes at runtime',
+    (tester) async {
+      await start(tester);
+      await tester.tap(find.text('Use dark theme'));
+      await tester.pumpAndSettle();
+      expect(find.text('Use light theme'), findsOneWidget);
+      await tester.tap(find.text('Preview invitation'));
+      await tester.pumpAndSettle();
+      expect(find.text('Invite a teammate'), findsOneWidget);
+      final title = tester.renderObject<RenderParagraph>(
+        find.text('Invite a teammate'),
+      );
+      expect(
+        title.text.style?.decoration?.contains(TextDecoration.underline) ??
+            false,
+        isFalse,
+      );
+      await tester.tap(find.text('Confirm'));
+      await tester.pumpAndSettle();
+      expect(find.text('Invite a teammate'), findsNothing);
+      expect(find.text('Invitation confirmed in this sample.'), findsOneWidget);
+      expect(tester.takeException(), isNull);
+    },
+  );
+
+  testWidgets(
+    'Sidebar changes the destination and skips the disabled destination',
+    (tester) async {
+      await start(tester);
+      await tester.tap(find.text('Overview'));
+      await tester.pumpAndSettle();
+      expect(find.text('Workspace overview'), findsOneWidget);
+      await tester.tap(find.text('Billing'), warnIfMissed: false);
+      await tester.pumpAndSettle();
+      expect(find.text('Workspace overview'), findsOneWidget);
+      expect(tester.takeException(), isNull);
+    },
+  );
+}
Show the four Fortal sample tests
test/workflow_test.dart · Fortal
import 'package:flutter/material.dart';
+import 'package:flutter/rendering.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:remix_fortal_demo/main.dart';
+
+void main() {
+  Future<void> start(WidgetTester tester) async {
+    tester.view.physicalSize = const Size(1400, 1000);
+    tester.view.devicePixelRatio = 1;
+    addTearDown(tester.view.resetPhysicalSize);
+    addTearDown(tester.view.resetDevicePixelRatio);
+    await tester.pumpWidget(const SampleApp());
+    await tester.pumpAndSettle();
+  }
+
+  testWidgets(
+    'the form saves once while loading and keeps the entered values',
+    (tester) async {
+      await start(tester);
+      await tester.enterText(find.byType(EditableText), 'Launchpad Studio');
+      await tester.tap(find.text('Send a weekly summary'));
+      await tester.tap(find.text('Save changes'));
+      await tester.pump(const Duration(milliseconds: 100));
+      expect(find.textContaining('Save count:'), findsNothing);
+      await tester.tap(find.text('Save changes'), warnIfMissed: false);
+      await tester.pump(const Duration(milliseconds: 1600));
+      await tester.pumpAndSettle();
+      expect(
+        find.text('Saved Launchpad Studio. Save count: 1. Summary: off.'),
+        findsOneWidget,
+      );
+      expect(tester.takeException(), isNull);
+    },
+  );
+
+  testWidgets(
+    'disabled actions stay inactive and the instance override works',
+    (tester) async {
+      await start(tester);
+      await tester.tap(find.text('Delete workspace'), warnIfMissed: false);
+      await tester.pumpAndSettle();
+      expect(find.text('ERROR: disabled action ran.'), findsNothing);
+      await tester.tap(find.text('Run preview'));
+      await tester.pumpAndSettle();
+      expect(
+        find.text(
+          'Preview completed. The instance override keeps the callback.',
+        ),
+        findsOneWidget,
+      );
+      expect(tester.takeException(), isNull);
+    },
+  );
+
+  testWidgets(
+    'the dialog returns its result and the theme changes at runtime',
+    (tester) async {
+      await start(tester);
+      await tester.tap(find.text('Use dark theme'));
+      await tester.pumpAndSettle();
+      expect(find.text('Use light theme'), findsOneWidget);
+      await tester.tap(find.text('Preview invitation'));
+      await tester.pumpAndSettle();
+      expect(find.text('Invite a teammate'), findsOneWidget);
+      final title = tester.renderObject<RenderParagraph>(
+        find.text('Invite a teammate'),
+      );
+      expect(
+        title.text.style?.decoration?.contains(TextDecoration.underline) ??
+            false,
+        isFalse,
+      );
+      await tester.tap(find.text('Confirm'));
+      await tester.pumpAndSettle();
+      expect(find.text('Invite a teammate'), findsNothing);
+      expect(find.text('Invitation confirmed in this sample.'), findsOneWidget);
+      expect(tester.takeException(), isNull);
+    },
+  );
+
+  testWidgets(
+    'Sidebar changes the destination and skips the disabled destination',
+    (tester) async {
+      await start(tester);
+      await tester.tap(find.text('Overview'));
+      await tester.pumpAndSettle();
+      expect(find.text('Workspace overview'), findsOneWidget);
+      await tester.tap(find.text('Billing'), warnIfMissed: false);
+      await tester.pumpAndSettle();
+      expect(find.text('Workspace overview'), findsOneWidget);
+      expect(tester.takeException(), isNull);
+    },
+  );
+}
Run from either sample directory
flutter analyze
+flutter test
+flutter build web --release
+

The tests verify retained form values, one save during loading, disabled controls, the instance callback, dialog results, text decoration, and Sidebar selection.

+

A screenshot cannot prove callback behavior or file preservation. The tests and file comparisons provide that evidence.

+

What GitHub CI adds

+

CI means continuous integration. GitHub runs the repository's automated checks when the PR changes.

+

The repository checks install both presets in fresh consumers and check source derivation, documentation, and other package contracts. +These checks run outside Launchpad.

+

For the repository workflow, open .github/workflows/ci.yaml. +For the consumer checks, open tool/check_open_code.dart and the open_code/ fixtures.

+
Check the result

Each sample reports no analyzer issues, passes four tests, and builds its web application. +Hosted package validation remains a release step after publication.

12 · Troubleshoot

Resolve the common failures

Use the reported file or command to find the smallest correction.

+
+ + + + + + + + + +
SymptomInspectCorrection
The CLI rejects the Flutter version.flutter --version from the same terminalPut Flutter 3.44.0 on PATH.
Pub cannot resolve Remix beta.9.pubspec_overrides.yamlUse the checkout path from Step 2 until the required release is available.
The CLI asks you to initialize.The terminal directory and remix.yamlRun from the Flutter package root.
The generated class is missing.The CLI generation output and the recipe's part declarationFix the reported error and rerun the add command or build_runner.
The text field lacks an Overlay.lib/main.dart, _SampleAppState.buildUse the complete application host from Step 6.
The default dialog fills the viewport._WorkspacePageState.inviteWrap its AcmeDialog in Center.
Dialog text has an underline.The invoking context's DefaultTextStyle and scope placementUse the host builder from Step 6.
Fortal has no primary constructor.The selected preset and AcmeButtonUse the Fortal source and AcmeButton.solid.
Analysis reports adapter lints.analysis_options.yamlApply the generated-file exclusion from Step 11.
+

The reference guide also covers partial installs, dependency declarations, and command errors.

+

Review notes

What the screenshots establish

Each screenshot has one purpose and a stated capture context.

+

The screenshots contain real browser or editor pixels. Application detail images use browser screenshot crops. +The screenshot links open the original files used by this page.

+
+ + + + + +
EvidenceWhat it establishesWhat else to check
First renderThe installed default Button renders in the supplied host.Read the installation output from Step 4.
EditorThe saved application recipe contains the 44-pixel edit.Run diff and preservation checks from Step 9.
Loading and saved resultThe application displays both states with the entered values.Run the duplicate-save behavior test.
Default and Fortal dialogsThe supplied hosts render centered panels and normal text.Run the dialog result and text-decoration test.
Fortal dark themeThe separate preset renders its theme and controls.Verify the separate preset configuration and generated source.
+

The captures came from Flutter 3.44.0 release web builds and VS Code web during the September 7, 2026 review. +The current screenshots cover desktop behavior. They do not certify every component or native platform.

+

The sample archive records the reviewed source and required checkout paths. +The evidence manifest records screenshot and source digests.

+

Read the reference guide for the full catalog, configuration rules, and source ownership model.

+
+
Reviewed September 7, 2026. Commands use the checkout CLI. Screenshots show real applications and the actual editor.
+ From 6f78643767731d988f7b88bd2cfe1dc1d463a30e Mon Sep 17 00:00:00 2001 From: Leo Farias Date: Tue, 8 Sep 2026 18:00:39 -0400 Subject: [PATCH 3/7] docs(remix_cli): improve the tutorial design and walkthrough --- docs/assets/remix-cli-tutorial/README.md | 27 + docs/assets/remix-cli-tutorial/evidence.json | 248 +++++ .../fonts/JetBrains-OFL.txt | 93 ++ .../remix-cli-tutorial/fonts/Plex-LICENSE.txt | 93 ++ .../fonts/jetbrains-mono.woff2 | Bin 0 -> 31340 bytes .../remix-cli-tutorial/fonts/plex-sans.woff2 | Bin 0 -> 40240 bytes docs/assets/remix-cli-tutorial/prism/LICENSE | 21 + .../assets/remix-cli-tutorial/prism/README.md | 8 + .../prism/prism-bash.min.js | 1 + .../prism/prism-clike.min.js | 1 + .../prism/prism-core.min.js | 1 + .../prism/prism-dart.min.js | 1 + .../prism/prism-diff.min.js | 1 + .../prism/prism-yaml.min.js | 1 + .../remix-cli-tutorial/tutorial-preview.jpg | Bin 0 -> 101370 bytes docs/assets/remix-cli-tutorial/tutorial.css | 968 ++++++++++++++++++ docs/assets/remix-cli-tutorial/tutorial.js | 73 ++ docs/remix-cli-tutorial.html | 183 ++-- 18 files changed, 1615 insertions(+), 105 deletions(-) create mode 100644 docs/assets/remix-cli-tutorial/README.md create mode 100644 docs/assets/remix-cli-tutorial/fonts/JetBrains-OFL.txt create mode 100644 docs/assets/remix-cli-tutorial/fonts/Plex-LICENSE.txt create mode 100644 docs/assets/remix-cli-tutorial/fonts/jetbrains-mono.woff2 create mode 100644 docs/assets/remix-cli-tutorial/fonts/plex-sans.woff2 create mode 100644 docs/assets/remix-cli-tutorial/prism/LICENSE create mode 100644 docs/assets/remix-cli-tutorial/prism/README.md create mode 100644 docs/assets/remix-cli-tutorial/prism/prism-bash.min.js create mode 100644 docs/assets/remix-cli-tutorial/prism/prism-clike.min.js create mode 100644 docs/assets/remix-cli-tutorial/prism/prism-core.min.js create mode 100644 docs/assets/remix-cli-tutorial/prism/prism-dart.min.js create mode 100644 docs/assets/remix-cli-tutorial/prism/prism-diff.min.js create mode 100644 docs/assets/remix-cli-tutorial/prism/prism-yaml.min.js create mode 100644 docs/assets/remix-cli-tutorial/tutorial-preview.jpg create mode 100644 docs/assets/remix-cli-tutorial/tutorial.css create mode 100644 docs/assets/remix-cli-tutorial/tutorial.js diff --git a/docs/assets/remix-cli-tutorial/README.md b/docs/assets/remix-cli-tutorial/README.md new file mode 100644 index 00000000..21eb244f --- /dev/null +++ b/docs/assets/remix-cli-tutorial/README.md @@ -0,0 +1,27 @@ +# Tutorial assets + +Open `docs/remix-cli-tutorial.html` with this directory beside it at `assets/remix-cli-tutorial`. +The tutorial uses local styles, scripts, fonts, screenshots, and sample projects. +The reader can open the complete tutorial without a server or an internet connection. + +## Source and editing + +Edit the tutorial HTML for instructions and complete code examples. +Edit `tutorial.css` for layout and syntax colors. Edit `tutorial.js` for navigation, wrapping, and copying. +The page needs no build step. Keep each code block's `language-*` class consistent with its source. + +The screenshot files contain actual application or editor captures. +Keep their captions and capture context accurate when replacing them. +`evidence.json` records the source checkout, toolchain, and screenshot digests. + +`sample-projects.zip` contains the complete default and Fortal projects. +Its README explains how to set the local checkout paths and run the samples. + +## Third-party files + +- [Prism 1.30.0](https://github.com/PrismJS/prism/tree/v1.30.0) provides syntax highlighting. Its MIT license is in `prism/LICENSE`. +- [IBM Plex Sans](https://github.com/IBM/plex) provides the text font. Its license is in `fonts/Plex-LICENSE.txt`. +- [JetBrains Mono](https://github.com/JetBrains/JetBrainsMono) provides the code font. Its license is in `fonts/JetBrains-OFL.txt`. + +The font files match the fonts embedded in `docs/remix-cli-guide.html`. +The tutorial loads the Prism language files directly. It does not use a CDN or an autoloader. diff --git a/docs/assets/remix-cli-tutorial/evidence.json b/docs/assets/remix-cli-tutorial/evidence.json index 56b124ad..fedb15d3 100644 --- a/docs/assets/remix-cli-tutorial/evidence.json +++ b/docs/assets/remix-cli-tutorial/evidence.json @@ -182,5 +182,253 @@ "Generated adapters have an analyzer exclusion for current generator lint findings.", "Hosted package validation requires publication." ] + }, + "tutorial_design_review": { + "date": "2026-09-08", + "source_checkout": "b2453a6eb8e1f19d6353f2f7b9d083736e0d46fa", + "changes": [ + "Reference guide typography", + "Local syntax highlighting", + "Source ownership explanation", + "Compact navigation with the current section", + "Code wrapping and keyboard access", + "Explicit terminal and Fortal directory instructions" + ], + "content_checks": { + "code_blocks": 35, + "unchanged_code_blocks": 34, + "command_change": "Fortal setup now starts with cd .. from remix_default_demo.", + "unique_ids": 39, + "url_references": 64, + "screenshots_unchanged": 8, + "archive_unchanged": true, + "syntax_contrast": { + "#e0c4f4": 11.82, + "#b7c0d1": 10.14, + "#c5adff": 9.54, + "#a7d8b4": 11.6, + "#a8b0c0": 8.52, + "#ffada6": 10.42, + "#8fd8eb": 11.66, + "#e5c58d": 11.23, + "#ffc48f": 11.98 + }, + "heading_hierarchy": "passed" + }, + "fresh_default": "Passed installation, first render, composition, preservation, analysis, four tests, and release web builds.", + "fresh_fortal": "Passed the displayed directory change, installation, analysis, four tests, and a release web build.", + "downloads": "Both archived projects passed dependency resolution, analysis, and four tests each.", + "command_results": [ + { + "label": "create-default", + "directory": "tutorial-replay", + "exit_code": 0 + }, + { + "label": "install-local-cli-0", + "directory": "remix_default_demo", + "exit_code": 0 + }, + { + "label": "install-local-cli-1", + "directory": "remix_default_demo", + "exit_code": 0 + }, + { + "label": "init-default-0", + "directory": "remix_default_demo", + "exit_code": 0 + }, + { + "label": "preview-button-0", + "directory": "remix_default_demo", + "exit_code": 0 + }, + { + "label": "install-button-command-0", + "directory": "remix_default_demo", + "exit_code": 0 + }, + { + "label": "first-render-build", + "directory": "remix_default_demo", + "exit_code": 0 + }, + { + "label": "install-screen-0", + "directory": "remix_default_demo", + "exit_code": 0 + }, + { + "label": "install-screen-1", + "directory": "remix_default_demo", + "exit_code": 0 + }, + { + "label": "install-screen-2", + "directory": "remix_default_demo", + "exit_code": 0 + }, + { + "label": "install-screen-3", + "directory": "remix_default_demo", + "exit_code": 0 + }, + { + "label": "install-screen-4", + "directory": "remix_default_demo", + "exit_code": 0 + }, + { + "label": "diff-button-0", + "directory": "remix_default_demo", + "exit_code": 0 + }, + { + "label": "preserve-button-0", + "directory": "remix_default_demo", + "exit_code": 0 + }, + { + "label": "validate-sample-0", + "directory": "remix_default_demo", + "exit_code": 0 + }, + { + "label": "validate-sample-1", + "directory": "remix_default_demo", + "exit_code": 0 + }, + { + "label": "validate-sample-2", + "directory": "remix_default_demo", + "exit_code": 0 + }, + { + "label": "create-fortal-1", + "directory": "tutorial-replay", + "exit_code": 0 + }, + { + "label": "install-local-cli-0", + "directory": "remix_fortal_demo", + "exit_code": 0 + }, + { + "label": "install-local-cli-1", + "directory": "remix_fortal_demo", + "exit_code": 0 + }, + { + "label": "install-fortal-0", + "directory": "remix_fortal_demo", + "exit_code": 0 + }, + { + "label": "install-fortal-1", + "directory": "remix_fortal_demo", + "exit_code": 0 + }, + { + "label": "install-fortal-2", + "directory": "remix_fortal_demo", + "exit_code": 0 + }, + { + "label": "install-fortal-3", + "directory": "remix_fortal_demo", + "exit_code": 0 + }, + { + "label": "install-fortal-4", + "directory": "remix_fortal_demo", + "exit_code": 0 + }, + { + "label": "install-fortal-5", + "directory": "remix_fortal_demo", + "exit_code": 0 + }, + { + "label": "install-fortal-6", + "directory": "remix_fortal_demo", + "exit_code": 0 + }, + { + "label": "validate-fortal-0", + "directory": "remix_fortal_demo", + "exit_code": 0 + }, + { + "label": "validate-fortal-1", + "directory": "remix_fortal_demo", + "exit_code": 0 + }, + { + "label": "validate-fortal-2", + "directory": "remix_fortal_demo", + "exit_code": 0 + }, + { + "label": "download-default-pub-get", + "directory": "default_demo", + "exit_code": 0 + }, + { + "label": "download-default-analyze", + "directory": "default_demo", + "exit_code": 0 + }, + { + "label": "download-default-test", + "directory": "default_demo", + "exit_code": 0 + }, + { + "label": "download-fortal-pub-get", + "directory": "fortal_demo", + "exit_code": 0 + }, + { + "label": "download-fortal-analyze", + "directory": "fortal_demo", + "exit_code": 0 + }, + { + "label": "download-fortal-test", + "directory": "fortal_demo", + "exit_code": 0 + } + ], + "browser": { + "surface": "Chrome", + "desktop": [ + 2257, + 1273 + ], + "narrow_frames": [ + 390, + 320 + ], + "checks": [ + "Syntax tokens rendered", + "Current section updates", + "Contents opens with Enter and closes after navigation", + "Wrap control updates code layout", + "Tab focuses code and ArrowDown scrolls it", + "Copy success feedback", + "Clipboard read displayed the expected YAML values", + "No tutorial console errors or warnings" + ], + "limits": [ + "The browser policy blocks automated file URL access. The Downloads copy requires a file comparison.", + "The virtual clipboard cannot inspect the operating system clipboard. The browser review confirmed YAML values and a 58-character clipboard read.", + "The narrow frames validate the tutorial layout, not the sample application." + ] + }, + "preview": { + "file": "tutorial-preview.jpg", + "sha256": "0a841b84199550677fda1ca7345da17103e6a60a73648f7d9065140f09ea315c" + } } } diff --git a/docs/assets/remix-cli-tutorial/fonts/JetBrains-OFL.txt b/docs/assets/remix-cli-tutorial/fonts/JetBrains-OFL.txt new file mode 100644 index 00000000..675d198b --- /dev/null +++ b/docs/assets/remix-cli-tutorial/fonts/JetBrains-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/docs/assets/remix-cli-tutorial/fonts/Plex-LICENSE.txt b/docs/assets/remix-cli-tutorial/fonts/Plex-LICENSE.txt new file mode 100644 index 00000000..670c6c04 --- /dev/null +++ b/docs/assets/remix-cli-tutorial/fonts/Plex-LICENSE.txt @@ -0,0 +1,93 @@ +Copyright © 2017 IBM Corp. with Reserved Font Name "Plex" + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/docs/assets/remix-cli-tutorial/fonts/jetbrains-mono.woff2 b/docs/assets/remix-cli-tutorial/fonts/jetbrains-mono.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2ca6ac605954ee884442db8ea1d61093000bcc29 GIT binary patch literal 31340 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∓Jw5)|1+k+LPLo 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

@c9dd0tdWKJRyVy<;N5h+G* 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 literal 0 HcmV?d00001 diff --git a/docs/assets/remix-cli-tutorial/prism/LICENSE b/docs/assets/remix-cli-tutorial/prism/LICENSE new file mode 100644 index 00000000..528949f4 --- /dev/null +++ b/docs/assets/remix-cli-tutorial/prism/LICENSE @@ -0,0 +1,21 @@ +MIT LICENSE + +Copyright (c) 2012 Lea Verou + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/docs/assets/remix-cli-tutorial/prism/README.md b/docs/assets/remix-cli-tutorial/prism/README.md new file mode 100644 index 00000000..f447f07d --- /dev/null +++ b/docs/assets/remix-cli-tutorial/prism/README.md @@ -0,0 +1,8 @@ +# Prism 1.30.0 + +These files come from the PrismJS v1.30.0 release. The MIT license is included. + +Source: https://github.com/PrismJS/prism/tree/v1.30.0 + +The tutorial loads only core, C-like, Dart, YAML, Bash, and Diff. +The files run locally without a CDN or an autoloader. diff --git a/docs/assets/remix-cli-tutorial/prism/prism-bash.min.js b/docs/assets/remix-cli-tutorial/prism/prism-bash.min.js new file mode 100644 index 00000000..f1659f1e --- /dev/null +++ b/docs/assets/remix-cli-tutorial/prism/prism-bash.min.js @@ -0,0 +1 @@ +!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",a={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},n={bash:a,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:n},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:a}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:n},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:n.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:n.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},a.inside=e.languages.bash;for(var s=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=n.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}; \ No newline at end of file diff --git a/docs/assets/remix-cli-tutorial/prism/prism-core.min.js b/docs/assets/remix-cli-tutorial/prism/prism-core.min.js new file mode 100644 index 00000000..ea490af6 --- /dev/null +++ b/docs/assets/remix-cli-tutorial/prism/prism-core.min.js @@ -0,0 +1 @@ +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(e){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,r={},a={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof i?new i(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=g.reach);A+=w.value.length,w=w.next){var P=w.value;if(n.length>e.length)return;if(!(P instanceof i)){var E,S=1;if(y){if(!(E=l(b,A,e,m))||E.index>=e.length)break;var L=E.index,O=E.index+E[0].length,C=A;for(C+=w.value.length;L>=C;)C+=(w=w.next).value.length;if(A=C-=w.value.length,w.value instanceof i)continue;for(var j=w;j!==n.tail&&(Cg.reach&&(g.reach=W);var I=w.prev;if(_&&(I=u(n,I,_),A+=_.length),c(n,I,S),w=u(n,I,new i(f,p?a.tokenize(N,p):N,k,N)),M&&u(n,w,M),S>1){var T={cause:f+","+d,reach:W};o(e,n,t,w.prev,A,T),g&&T.reach>g.reach&&(g.reach=T.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function c(e,n,t){for(var r=n.next,a=0;a"+i.content+""},!e.document)return e.addEventListener?(a.disableWorkerMessageHandler||e.addEventListener("message",(function(n){var t=JSON.parse(n.data),r=t.language,i=t.code,l=t.immediateClose;e.postMessage(a.highlight(i,a.languages[r],r)),l&&e.close()}),!1),a):a;var g=a.util.currentScript();function f(){a.manual||a.highlightAll()}if(g&&(a.filename=g.src,g.hasAttribute("data-manual")&&(a.manual=!0)),!a.manual){var h=document.readyState;"loading"===h||"interactive"===h&&g&&g.defer?document.addEventListener("DOMContentLoaded",f):window.requestAnimationFrame?window.requestAnimationFrame(f):window.setTimeout(f,16)}return a}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); \ No newline at end of file diff --git a/docs/assets/remix-cli-tutorial/prism/prism-dart.min.js b/docs/assets/remix-cli-tutorial/prism/prism-dart.min.js new file mode 100644 index 00000000..e16ca211 --- /dev/null +++ b/docs/assets/remix-cli-tutorial/prism/prism-dart.min.js @@ -0,0 +1 @@ +!function(e){var a=[/\b(?:async|sync|yield)\*/,/\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|covariant|default|deferred|do|dynamic|else|enum|export|extends|extension|external|factory|final|finally|for|get|hide|if|implements|import|in|interface|library|mixin|new|null|on|operator|part|rethrow|return|set|show|static|super|switch|sync|this|throw|try|typedef|var|void|while|with|yield)\b/],n="(^|[^\\w.])(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*",s={pattern:RegExp(n+"[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b"),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}}}};e.languages.dart=e.languages.extend("clike",{"class-name":[s,{pattern:RegExp(n+"[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()])"),lookbehind:!0,inside:s.inside}],keyword:a,operator:/\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/}),e.languages.insertBefore("dart","string",{"string-literal":{pattern:/r?(?:("""|''')[\s\S]*?\1|(["'])(?:\\.|(?!\2)[^\\\r\n])*\2(?!\2))/,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,lookbehind:!0,inside:{punctuation:/^\$\{?|\}$/,expression:{pattern:/[\s\S]+/,inside:e.languages.dart}}},string:/[\s\S]+/}},string:void 0}),e.languages.insertBefore("dart","class-name",{metadata:{pattern:/@\w+/,alias:"function"}}),e.languages.insertBefore("dart","class-name",{generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":s,keyword:a,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})}(Prism); \ No newline at end of file diff --git a/docs/assets/remix-cli-tutorial/prism/prism-diff.min.js b/docs/assets/remix-cli-tutorial/prism/prism-diff.min.js new file mode 100644 index 00000000..16d9fe0a --- /dev/null +++ b/docs/assets/remix-cli-tutorial/prism/prism-diff.min.js @@ -0,0 +1 @@ +!function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var n={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(n).forEach((function(a){var i=n[a],r=[];/^\w+$/.test(a)||r.push(/\w+/.exec(a)[0]),"diff"===a&&r.push("bold"),e.languages.diff[a]={pattern:RegExp("^(?:["+i+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:r,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(a)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:n})}(Prism); \ No newline at end of file diff --git a/docs/assets/remix-cli-tutorial/prism/prism-yaml.min.js b/docs/assets/remix-cli-tutorial/prism/prism-yaml.min.js new file mode 100644 index 00000000..5cd16d3d --- /dev/null +++ b/docs/assets/remix-cli-tutorial/prism/prism-yaml.min.js @@ -0,0 +1 @@ +!function(e){var n=/[*&][^\s[\]{},]+/,r=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,t="(?:"+r.source+"(?:[ \t]+"+n.source+")?|"+n.source+"(?:[ \t]+"+r.source+")?)",a="(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*".replace(//g,(function(){return"[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]"})),d="\"(?:[^\"\\\\\r\n]|\\\\.)*\"|'(?:[^'\\\\\r\n]|\\\\.)*'";function o(e,n){n=(n||"").replace(/m/g,"")+"m";var r="([:\\-,[{]\\s*(?:\\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\\]|\\}|(?:[\r\n]\\s*)?#))".replace(/<>/g,(function(){return t})).replace(/<>/g,(function(){return e}));return RegExp(r,n)}e.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\\S[^\r\n]*(?:\\2[^\r\n]+)*)".replace(/<>/g,(function(){return t}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp("((?:^|[:\\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\\s*:\\s)".replace(/<>/g,(function(){return t})).replace(/<>/g,(function(){return"(?:"+a+"|"+d+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:o("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:o("false|true","i"),lookbehind:!0,alias:"important"},null:{pattern:o("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:o(d),lookbehind:!0,greedy:!0},number:{pattern:o("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:r,important:n,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism); \ No newline at end of file diff --git a/docs/assets/remix-cli-tutorial/tutorial-preview.jpg b/docs/assets/remix-cli-tutorial/tutorial-preview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f89b703b51c47f9cf256548c227aada1b6a553cb GIT binary patch literal 101370 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� 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 hJtr-y)wBpG3havdwf?)sv literal 0 HcmV?d00001 diff --git a/docs/assets/remix-cli-tutorial/tutorial.css b/docs/assets/remix-cli-tutorial/tutorial.css new file mode 100644 index 00000000..3a713eca --- /dev/null +++ b/docs/assets/remix-cli-tutorial/tutorial.css @@ -0,0 +1,968 @@ +@font-face { + font-family:Plex; + src:url(fonts/plex-sans.woff2) format('woff2'); + font-weight:100 700; + font-display:swap +} + +@font-face { + font-family:JetBrains; + src:url(fonts/jetbrains-mono.woff2) format('woff2'); + font-weight:100 800; + font-display:swap +} + +:root { + color-scheme:dark; + --bg:#08090c; + --surface:#111319; + --raised:#171b25; + --line:#2a2f3c; + --fg:#e8eaf0; + --body:#c5cbd8; + --muted:#a3aab9; + --accent:#b1baff; + --code:#dce1ed; + --sans:Plex,system-ui,sans-serif; + --mono:JetBrains,ui-monospace,monospace +} + +* { + box-sizing:border-box +} + +html { + scroll-padding-top:100px; + text-size-adjust:100% +} + +body { + margin:0; + background:var(--bg); + color:var(--fg); + font:17px/1.65 var(--sans); + -webkit-font-smoothing:antialiased +} + +a { + color:var(--accent); + text-underline-offset:4px; + text-decoration-thickness:1px +} + +a:hover { + color:#d4daff +} + +button,input,summary { + font:inherit +} + +a,button,summary,label { + touch-action:manipulation +} + +:where(a,button,summary,input,pre):focus-visible { + outline:2px solid var(--accent); + outline-offset:4px +} + +::selection { + background:#484698; + color:#fff +} + +.skip { + position:fixed; + top:-100px; + left:20px; + z-index:20; + background:var(--surface); + padding:12px +} + +.skip:focus { + top:12px +} + +header { + position:sticky; + top:0; + z-index:5; + background:var(--bg); + border-bottom:1px solid var(--line) +} + +.top { + max-width:1360px; + margin:auto; + padding:16px 28px; + display:flex; + align-items:center; + justify-content:space-between; + gap:24px; + font-size:14px +} + +.brand { + font-family:var(--mono); + font-weight:600; + color:var(--fg); + text-decoration:none +} + +.top-links { + display:flex; + align-items:center; + gap:24px +} + +.top-label { + color:var(--muted) +} + +.layout { + display:grid; + grid-template-columns:220px minmax(0,936px); + gap:64px; + align-items:start; + max-width:1276px; + margin:auto; + padding:56px 28px 100px +} + +main { + min-width:0 +} + +.sidebar { + position:sticky; + top:94px; + max-height:calc(100vh - 120px); + overflow:auto; + font-size:14px; + padding:0 6px 6px +} + +.contents { + border:0; + margin:0; + padding:0 +} + +.contents>summary { + display:block; + cursor:pointer; + font-weight:600; + padding:0 0 15px +} + +.contents>summary::-webkit-details-marker { + display:none +} + +.current-location { + display:none +} + +.contents nav { + display:grid; + gap:3px +} + +.contents nav a { + display:grid; + grid-template-columns:36px 1fr; + gap:8px; + align-items:start; + padding:8px 9px; + color:var(--muted); + text-decoration:none; + border-left:2px solid transparent; + line-height:1.4 +} + +.contents nav a span { + font-size:12px; + font-variant-numeric:tabular-nums; + padding-top:2px +} + +.contents nav a:hover { + background:var(--surface); + color:var(--fg) +} + +.contents nav a[aria-current=location] { + border-left-color:var(--accent); + color:var(--fg); + background:var(--surface) +} + +.contents nav a[aria-current=location] span { + color:var(--accent) +} + +.reading-tools { + border-top:1px solid var(--line); + margin-top:22px; + padding-top:12px +} + +.reading-tools label { + display:flex; + align-items:center; + gap:10px; + padding:10px 0; + cursor:pointer; + color:var(--muted); + font-size:13px +} + +.reading-tools input { + accent-color:#8e9bff; + width:16px; + height:16px; + margin:0 +} + +.sidebar-note { + font-size:12px; + color:var(--muted); + margin:2px 0 +} + +h1,h2,h3 { + color:var(--fg); + font-weight:600; + letter-spacing:-.025em; + line-height:1.18 +} + +h1 { + font-size:clamp(38px,4.5vw,54px); + margin:0 0 24px; + max-width:24ch +} + +h2 { + font-size:32px; + margin:0 0 16px; + max-width:30ch +} + +h3 { + font-size:22px; + margin:36px 0 14px +} + +.lead { + font-size:21px; + line-height:1.5; + max-width:57ch; + color:var(--body); + margin-bottom:24px +} + +p { + color:var(--body); + max-width:68ch; + margin:0 0 18px +} + +strong { + font-weight:600; + color:var(--fg) +} + +.eyebrow { + font-size:14px; + font-weight:500; + color:var(--accent); + margin:0 0 14px; + letter-spacing:0 +} + +.version-note { + color:var(--muted); + font-size:14px; + max-width:none; + margin-top:24px +} + +.intro-actions { + display:flex; + flex-wrap:wrap; + gap:14px; + align-items:center; + margin:28px 0 +} + +.action { + display:inline-flex; + align-items:center; + justify-content:center; + min-height:44px; + padding:9px 17px; + border:1px solid var(--line); + border-radius:7px; + text-decoration:none; + font-weight:500; + font-size:15px; + color:var(--fg) +} + +.action.primary { + background:#dfe3ff; + color:#171932; + border-color:#dfe3ff +} + +.action:hover { + border-color:var(--accent) +} + +section { + border-top:1px solid var(--line); + margin-top:60px; + padding-top:44px +} + +section#start { + border:0; + padding:0; + margin:0 +} + +section#start>.lead { + max-width:57ch +} + +ul,ol { + padding-left:24px; + color:var(--body) +} + +li { + margin:10px 0 +} + +li::marker { + color:var(--muted) +} + +.result { + border-left:3px solid #8e9bff; + padding:6px 0 6px 20px; + margin:28px 0 0 +} + +.result>strong { + font-size:14px; + color:var(--accent) +} + +.result p { + margin:6px 0 0 +} + +.note { + background:#151826; + border:1px solid #373d59; + border-radius:7px; + padding:20px 22px; + margin:24px 0 +} + +.note p { + margin:8px 0 0 +} + +.note strong { + font-size:15px +} + +code,kbd,pre { + font-family:var(--mono); + font-variant-ligatures:none +} + +code { + font-size:.83em; + overflow-wrap:anywhere +} + +p code,li code,td code,th code { + color:#d9def7; + background:#191d29; + padding:2px 5px; + border-radius:3px +} + +kbd { + border:1px solid #6b7384; + padding:2px 6px; + border-radius:3px; + font-size:.85em +} + +.code { + margin:24px 0; + border:1px solid var(--line); + border-radius:8px; + overflow:hidden; + background:var(--surface) +} + +.code figcaption { + display:flex; + align-items:center; + justify-content:space-between; + gap:12px; + padding:10px 16px; + border-bottom:1px solid var(--line); + font-size:13px; + background:#171b24 +} + +.code-heading { + display:flex; + flex-wrap:wrap; + align-items:baseline; + gap:8px 14px; + min-width:0; + color:var(--fg) +} + +.code-heading>span:first-child { + overflow-wrap:anywhere +} + +.language-label { + color:var(--muted); + font-size:12px; + font-family:var(--sans) +} + +.copy { + flex:none; + min-height:32px; + padding:4px 12px; + border:1px solid #596174; + border-radius:5px; + background:transparent; + color:var(--fg); + cursor:pointer; + font-size:12px +} + +.copy:hover { + background:#282e3e +} + +pre { + margin:0; + padding:22px 24px; + overflow:auto; + font:14px/1.75 var(--mono); + tab-size:2; + color:var(--code) +} + +pre code { + font:inherit; + white-space:pre; + overflow-wrap:normal; + word-break:normal; + text-shadow:none +} + +.output pre { + color:#bcc4d4 +} + +.output pre code,.wrap-code pre code { + white-space:pre-wrap; + overflow-wrap:anywhere +} + +.output { + border-left:3px solid #596774 +} + +.output figcaption { + background:var(--surface) +} + +.output .language-label { + color:var(--muted) +} + +.token.comment,.token.prolog,.token.doctype,.token.cdata { + color:#a8b0c0 +} + +.token.punctuation { + color:#b7c0d1 +} + +.token.keyword,.token.atrule,.token.important { + color:#c5adff +} + +.token.string,.token.char,.token.inserted,.token.attr-value { + color:#a7d8b4 +} + +.token.number,.token.boolean,.token.constant { + color:#ffc48f +} + +.token.function,.token.class-name,.token.builtin { + color:#8fd8eb +} + +.token.operator,.token.entity,.token.url { + color:#e0c4f4 +} + +.token.property,.token.tag,.token.symbol,.token.key,.token.attr-name { + color:#e5c58d +} + +.token.deleted { + color:#ffada6 +} + +.token.bold { + font-weight:600 +} + +.token.italic { + font-style:italic +} + +details { + margin:26px 0; + padding:0; + border:1px solid var(--line); + border-radius:8px +} + +summary { + padding:16px 18px; + cursor:pointer; + font-size:15px; + font-weight:500; + color:var(--fg) +} + +details[open]>summary { + border-bottom:1px solid var(--line) +} + +details>p,details>h3 { + margin:18px 20px +} + +details>.code { + margin:0; + border:0; + border-radius:0 0 8px 8px +} + +details>p+.code { + margin-top:18px +} + +details pre { + max-height:660px +} + +.contents[open]>summary { + border:0 +} + +.shot { + margin:32px 0; + background:transparent; + border:1px solid var(--line); + border-radius:8px; + overflow:hidden +} + +.shot img { + display:block; + width:100%; + height:auto +} + +.shot figcaption { + padding:15px 18px; + font-size:14px; + line-height:1.55; + color:var(--muted); + background:var(--surface) +} + +.figure-label { + display:block; + color:var(--accent); + font-size:12px; + margin-bottom:5px +} + +.shot a:focus-visible { + display:block; + outline-offset:-4px +} + +.shot figcaption a:focus-visible { + display:inline +} + +.download { + font-size:16px; + font-weight:500 +} + +.ownership { + margin:36px 0 +} + +.ownership>h2,.before-heading { + font-size:24px; + margin:36px 0 14px +} + +.source-flow { + display:grid; + grid-template-columns:repeat(3,minmax(0,1fr)); + list-style:none; + counter-reset:source; + margin:24px 0 0; + padding:0; + border-top:1px solid var(--line); + border-bottom:1px solid var(--line) +} + +.source-flow li { + position:relative; + margin:0; + padding:22px 20px 22px 0; + counter-increment:source +} + +.source-flow li+li { + border-left:1px solid var(--line); + padding-left:20px +} + +.source-flow h3 { + font-size:16px; + font-weight:500; + margin:0 0 14px +} + +.source-flow h3::before { + content:counter(source) '. '; + color:var(--accent) +} + +.source-flow p { + font-size:14px; + line-height:1.55; + margin-bottom:12px +} + +.source-flow p:last-child { + margin:0 +} + +.source-file { + display:block; + line-height:1.7 +} + +.source-owner { + font-size:12px; + color:var(--muted) +} + +.runtime-note { + font-size:14px; + color:var(--muted); + padding:16px 0; + margin:0 +} + +.scope-note { + font-size:14px +} + +.table-wrap { + overflow-x:auto; + margin:28px 0; + border-top:1px solid var(--line); + border-bottom:1px solid var(--line) +} + +table { + border-collapse:collapse; + width:100%; + font-size:15px; + line-height:1.5 +} + +th,td { + text-align:left; + vertical-align:top; + padding:15px 16px; + border-bottom:1px solid var(--line) +} + +th { + font-weight:500; + color:var(--fg) +} + +td { + color:var(--body) +} + +thead { + background:var(--surface) +} + +tbody tr:last-child>* { + border-bottom:0 +} + +thead th:first-child,tbody th:first-child { + padding-left:8px +} + +footer { + margin-top:56px; + padding-top:24px; + border-top:1px solid var(--line); + font-size:13px; + color:var(--muted) +} + +.sr-only { + position:absolute; + width:1px; + height:1px; + padding:0; + margin:-1px; + overflow:hidden; + clip:rect(0,0,0,0); + white-space:nowrap; + border:0 +} + +@media(max-width:1060px) { + .layout { + display:block; + max-width:940px; + padding-top:26px + } + .sidebar { + position:static; + max-height:none; + padding:0; + overflow:visible; + margin-bottom:38px + } + .contents { + border:1px solid var(--line); + border-radius:7px + } + .contents>summary { + display:flex; + justify-content:space-between; + align-items:center; + gap:16px; + padding:13px 16px + } + .contents>summary::after { + content:'+'; + font-size:21px; + font-weight:400 + } + .contents[open]>summary::after { + content:'−' + } + .current-location { + display:block; + color:var(--muted); + font-size:13px; + font-weight:400; + margin-left:auto + } + .contents nav { + padding:0 10px 12px; + grid-template-columns:repeat(2,minmax(0,1fr)) + } + .reading-tools { + margin:0; + border:0; + display:flex; + justify-content:space-between; + align-items:center; + gap:16px; + padding:6px 0 0 + } + .sidebar-note { + font-size:12px + } + h1 { + font-size:44px + } +} + +@media(max-width:600px) { + body { + font-size:16px + } + .layout { + padding:20px 18px 64px + } + .top { + padding:14px 18px; + gap:14px + } + .top-label,.top-download { + display:none + } + .top-links { + gap:0 + } + .brand { + font-size:12px + } + .top a { + font-size:13px + } + .sidebar { + margin-bottom:28px + } + .contents nav { + grid-template-columns:1fr + } + .contents nav a { + padding:11px 8px + } + .current-location { + font-size:12px; + max-width:55%; + text-align:right + } + .sidebar-note { + display:none + } + h1 { + font-size:36px; + max-width:20ch + } + h2 { + font-size:28px + } + h3 { + font-size:21px + } + .lead { + font-size:19px + } + section { + padding-top:32px; + margin-top:44px + } + .intro-actions { + gap:10px; + margin:24px 0 + } + .action { + font-size:14px; + padding:9px 13px + } + .eyebrow { + font-size:13px + } + .version-note { + font-size:13px + } + .code figcaption { + padding:10px 12px + } + .code-heading { + gap:2px 8px; + display:block + } + .language-label { + display:block; + font-size:11px + } + .code-heading>span:first-child { + font-size:12px + } + .copy { + min-height:36px; + padding:6px 10px + } + pre { + padding:18px 16px; + font-size:12px; + line-height:1.8 + } + .table-wrap table { + min-width:540px + } + .source-flow { + grid-template-columns:1fr + } + .source-flow li { + padding:18px 0 + } + .source-flow li+li { + border-left:0; + border-top:1px solid var(--line); + padding:18px 0 + } + .source-flow h3 { + margin-bottom:8px + } + .source-flow p { + max-width:40ch + } + .note { + padding:16px + } + .shot figcaption { + padding:14px + } + .contents>summary { + font-size:14px + } + summary { + font-size:14px + } + .result { + padding-left:16px + } +} + +@media(pointer:coarse) { + .copy { + min-height:44px; + min-width:44px + } + .reading-tools label { + min-height:44px + } + .top a { + padding-top:8px; + padding-bottom:8px + } +} diff --git a/docs/assets/remix-cli-tutorial/tutorial.js b/docs/assets/remix-cli-tutorial/tutorial.js new file mode 100644 index 00000000..b0555029 --- /dev/null +++ b/docs/assets/remix-cli-tutorial/tutorial.js @@ -0,0 +1,73 @@ +/* Keep the tutorial usable when opened directly from a local folder. */ +if (window.Prism) Prism.highlightAll(); + +const copyStatus = document.querySelector('#copy-status'); +document.querySelectorAll('.copy').forEach((button) => { + button.addEventListener('click', async () => { + const code = button.closest('figure').querySelector('code'); + const label = button.getAttribute('aria-label').replace(/^Copy /, ''); + let copied = false; + try { + await navigator.clipboard.writeText(code.textContent); + copied = true; + } catch { + const selection = window.getSelection(); + const range = document.createRange(); + range.selectNodeContents(code); + selection.removeAllRanges(); + selection.addRange(range); + try { copied = document.execCommand('copy'); } catch { /* Keep the text selected. */ } + if (copied) selection.removeAllRanges(); + } + button.textContent = copied ? 'Copied' : 'Selected'; + copyStatus.textContent = copied + ? `${label} copied.` + : 'Code selected. Press Control+C or Command+C to copy.'; + setTimeout(() => { button.textContent = 'Copy'; }, 1800); + }); +}); + +document.querySelector('#wrap-code').addEventListener('change', (event) => { + document.body.classList.toggle('wrap-code', event.target.checked); +}); + +const contents = document.querySelector('.contents'); +const narrowScreen = window.matchMedia('(max-width: 1060px)'); +const setContents = () => { contents.open = !narrowScreen.matches; }; +setContents(); +narrowScreen.addEventListener('change', setContents); + +const links = [...document.querySelectorAll('.contents nav a')]; +const sections = links.map((link) => document.querySelector(link.getAttribute('href'))); +const locationLabel = document.querySelector('#current-location'); +let scheduled = false; +function updateLocation() { + let current = 0; + sections.forEach((section, index) => { + if (section.getBoundingClientRect().top <= Math.max(160, window.innerHeight * 0.35)) current = index; + }); + links.forEach((link, index) => { + if (index === current) link.setAttribute('aria-current', 'location'); + else link.removeAttribute('aria-current'); + }); + locationLabel.textContent = links[current].dataset.label; + scheduled = false; +} +function scheduleLocation() { + if (!scheduled) { + scheduled = true; + requestAnimationFrame(updateLocation); + } +} +window.addEventListener('scroll', scheduleLocation, { passive: true }); +window.addEventListener('resize', scheduleLocation); +window.addEventListener('hashchange', scheduleLocation); +document.querySelectorAll('details').forEach((details) => { + details.addEventListener('toggle', scheduleLocation); +}); +links.forEach((link) => { + link.addEventListener('click', () => { + if (narrowScreen.matches) contents.open = false; + }); +}); +updateLocation(); diff --git a/docs/remix-cli-tutorial.html b/docs/remix-cli-tutorial.html index dabc0eb5..0512dbaf 100644 --- a/docs/remix-cli-tutorial.html +++ b/docs/remix-cli-tutorial.html @@ -1,67 +1,40 @@ -Build an application with Remix CLI — screenshot tutorial +Build a settings screen with Remix CLI - -
remix / open codeScreenshot tutorial · Flutter 3.44.0Reference guide
-
-

A practical tutorial

Build an application
with Remix CLI.

-

Follow the commands. Inspect the source. Compare the screenshots. Then verify that your edits stay yours.

-

This page follows one complete application from an empty Flutter project to a working settings screen. -Every step names the files you change and the result you should observe.

-

Start here

What you will build

Build a small settings screen from editable Remix recipes.

-

The sample is named Launchpad. It is a fictional application used only for this tutorial. -You write its screen, layout, and callbacks. The Remix CLI installs its theme and component recipes.

-

You will create a Flutter project, install the default preset, and render a Button. -Then you will compose the screen, customize a recipe, and verify source preservation. -An optional section repeats the setup with Fortal.

-

This tutorial assumes basic Flutter knowledge and access to a terminal. -Use a desktop browser for the sample. The sample does not include a mobile layout or a backend.

-
Finished default sample with workspace settings, a sidebar, and a cyan preview button
The finished sample. This capture includes the 44-pixel Button customization from Step 7. The CLI does not generate this complete screen. Open at full size.
-
- - - - - -
PartResponsibilityWhere to inspect it
FlutterCreates and runs the application.lib/main.dart
Remix CLIInstalls the theme and recipes. It runs adapter generation.remix.yaml and lib/ui/
Your applicationOwns the screen, callbacks, theme, and recipes.SampleApp, WorkspacePage, and authored lib/ui/ files
RemixProvides widget rendering and interaction behavior.package:remix/remix.dart
CIRuns automated repository checks on GitHub.The PR checks, separate from this application
-

Download both complete sample projects

-

Follow the steps to build the sample yourself. Use the archive to compare your files or inspect the final result. -The archive includes generated adapters and four behavior tests for each preset.

+ +
+
+

Remix CLI tutorial

Build a settings screen
with Remix CLI.

+

Install editable Flutter recipes, build a working screen, and make the source your own.

+

The sample is named Launchpad. You write its layout and callbacks. The CLI installs its theme and component recipes.

+ +

Tested with Flutter 3.44.0 and Dart 3.12.0. The steps use a pinned Remix checkout.

+
Finished default sample with workspace settings, a sidebar, and a cyan preview button
Figure 1The finished sample. This capture includes the 44-pixel Button customization from Step 7. The CLI does not generate this complete screen. Open at full size.
+

How the pieces fit together

+

The CLI installs source in your application. The generator connects that source to Remix widgets.

+
    +
  1. Install the recipe

    Add Button with the CLI.

    lib/ui/components/button.dart

    The recipe defines Button styles. The CLI also installs the theme.

    Your editable source

  2. +
  3. Generate the adapter

    The CLI runs build_runner with mix_generator.

    lib/ui/components/button.g.dart

    The adapter exposes AcmeButton. Regenerate it after recipe API changes.

    Generated source

  4. +
  5. Build the screen

    Use the installed widgets.

    lib/main.dart

    Your application supplies the layout, state, and callbacks.

    Your application code

  6. +
+

At runtime: the adapter uses package:remix/remix.dart for rendering and interaction behavior.

+

GitHub CI runs repository checks separately. Step 11 explains the checks and how to test your sample.

+
+

Before you start

+

You need basic Flutter knowledge, Git, a terminal, and an installed Flutter SDK. +The sample targets desktop browsers and uses local state. It has no backend or mobile layout.

+

Follow the steps to build the default sample. Step 10 covers Fortal in a separate project. +The download includes both complete projects, generated adapters, and four tests per preset.

+

1 · Prepare

Create the Flutter project

Start from an empty project so each CLI change is visible.

This tutorial uses Flutter 3.44.0, Dart 3.12.0, and Git. Put the intended Flutter SDK on PATH. The CLI checks the Flutter executable found there.

-
Check the tools
flutter --version
+
Check the toolsTerminal
flutter --version
 dart --version
 git --version

Run these commands from the directory where you keep sample applications.

-
Create the default sample
flutter create --empty --platforms=web remix_default_demo
+
Create the default sampleTerminal
flutter create --empty --platforms=web remix_default_demo
 cd remix_default_demo

The following commands run inside remix_default_demo, beside its pubspec.yaml. The project name also appears in the test import provided later.

@@ -70,26 +43,26 @@

The September 7, 2026 review used Remix 1.0.0-beta.9 and CLI 0.1.0 from a checkout. Those releases were not published at review time. The instructions below work with that checkout.

Use the complete PR stack, including Sidebar. The reviewed checkout is bfae6507676fadea7632e2f7f66924935c04ca2a.

-
Get the reviewed checkout +
Get the reviewed checkout

Open a second terminal in the directory where you keep repositories. Run these commands there.

-
Get the exact reviewed source
git clone https://github.com/conceptadev/remix.git remix-review
+
Get the exact reviewed sourceTerminal
git clone https://github.com/conceptadev/remix.git remix-review
 git -C remix-review checkout bfae6507676fadea7632e2f7f66924935c04ca2a
 git -C remix-review rev-parse --show-toplevel

The last command prints the checkout path. Use that path wherever the tutorial shows /path/to/remix.

Return to the first terminal in remix_default_demo for the remaining commands.

Replace /path/to/remix with your Remix checkout path. Create pubspec_overrides.yaml in the sample project.

-
pubspec_overrides.yaml
dependency_overrides:
+
pubspec_overrides.yamlYAML
dependency_overrides:
   remix:
-    path: /path/to/remix/packages/remix
Install the CLI as a development dependency
dart pub add "dev:remix_cli@{path: /path/to/remix/packages/remix_cli}"
-dart run remix_cli:remix --version
Expected version
0.1.0
+ path: /path/to/remix/packages/remix
Install the CLI as a development dependencyTerminal
dart pub add "dev:remix_cli@{path: /path/to/remix/packages/remix_cli}"
+dart run remix_cli:remix --version
Expected versionOutput
0.1.0

The CLI installation updates development dependencies and the lockfile. The Remix override selects the reviewed runtime when the CLI adds the Remix dependency.

Use hosted packages after publication

Use the reference installation instructions after both packages are available. Remove the checkout override and replace the CLI path dependency with the published version. Run flutter pub get and repeat analysis and tests.

-
Check the result

The version command prints 0.1.0. The application still has no installed theme or recipe.

3 · Initialize

Choose the preset and prefix

The configuration fixes the preset, generated names, and installation path.

Initialize the default preset
dart run remix_cli:remix init --prefix Acme --preset default
Observed output from the fresh sample
Initialized remix.yaml and lib/ui/ui.dart.
remix.yaml
schema: 2
+
Check the result

The version command prints 0.1.0. The application still has no installed theme or recipe.

3 · Initialize

Choose the preset and prefix

The configuration fixes the preset, generated names, and installation path.

Initialize the default presetTerminal
dart run remix_cli:remix init --prefix Acme --preset default
Observed output from the fresh sampleOutput
Initialized remix.yaml and lib/ui/ui.dart.
remix.yamlYAML
schema: 2
 prefix: Acme
 preset: default
 paths:
@@ -98,7 +71,7 @@
 The CLI writes an empty managed barrel at lib/ui/ui.dart.

The preset selects the theme and recipe vocabulary. Choose Fortal in a separate project; do not change this project's preset later.

Check the result

Open remix.yaml and confirm schema 2 and preset default. -Open lib/ui/ui.dart and confirm its export markers. No component renders yet.

4 · Preview and install

Add the first component

Read the plan, then allow the CLI to install Button and its theme.

Preview the plan
dart run remix_cli:remix add button --dry-run
Observed plan before installation
Items: theme -> button
+Open lib/ui/ui.dart and confirm its export markers. No component renders yet.

4 · Preview and install

Add the first component

Read the plan, then allow the CLI to install Button and its theme.

Preview the planTerminal
dart run remix_cli:remix add button --dry-run
Observed plan before installationOutput
Items: theme -> button
 Dependencies: remix@^1.0.0-beta.9, mix_annotations@^2.2.0-beta.1, dev:build_runner@^2.10.1, dev:mix_generator@^2.2.0-beta.3
 theme: missing; lib/ui/theme/tokens.dart, lib/ui/theme/theme_data.dart, lib/ui/theme/theme_scope.dart
 button: missing; lib/ui/components/button.dart
@@ -106,9 +79,9 @@
 Generated: lib/ui/components/button.g.dart

theme -> button is the installation order. Both items are missing in a fresh project. The dry-run reports the plan and writes no files.

-
Install Button
dart run remix_cli:remix add button
Observed result after the plan
Added theme.
+
Install ButtonTerminal
dart run remix_cli:remix add button
Observed result after the planOutput
Added theme.
 Added button.
-Generated lib/ui/components/button.g.dart.
Files to inspect
lib/ui/
+Generated lib/ui/components/button.g.dart.
Files to inspectOutput
lib/ui/
 ├── ui.dart
 ├── theme/
 │   ├── tokens.dart
@@ -125,7 +98,7 @@
 The CLI reports successful generation. The application screen still uses Flutter's starter code.

5 · Render

Put Button in the application

This is the first step that changes the visible application.

Replace lib/main.dart with this complete example. It imports the managed barrel and places the Button below AcmeThemeScope.

-
Show the complete first-render main.dart
lib/main.dart · first render
import 'package:flutter/widgets.dart';
+
Complete first-render main.dart
lib/main.dart · first renderDart
import 'package:flutter/widgets.dart';
 
 import 'ui/ui.dart';
 
@@ -168,10 +141,11 @@
       ),
     );
   }
-}
Run the application
flutter run -d chrome
A single black Continue button centered on a white application surface
First render. This detail capture comes from the complete example above, built with the installed default recipe. Open at full size.
-

The sample uses WidgetsApp and an Overlay. +}

Run the applicationTerminal
flutter run -d chrome
A single black Continue button centered on a white application surface
Figure 2First render. This detail capture comes from the complete example above, built with the installed default recipe. Open at full size.
+

Keep the flutter run terminal open. Open another terminal in the same sample directory for the following CLI commands.

+

The first example uses WidgetsApp and an Overlay. The larger application below uses MaterialApp for its navigation host.

-
Check the result

Chrome shows a centered Continue button. The callback is intentionally empty in this first example.

6 · Compose the screen

Add the settings controls

Install the remaining recipes, then write the application that uses them.

Install one item per command
dart run remix_cli:remix add checkbox
+
Check the result

Chrome shows a centered Continue button. The callback is intentionally empty in this first example.

6 · Compose the screen

Add the settings controls

Install the remaining recipes, then write the application that uses them.

Install one item per commandTerminal
dart run remix_cli:remix add checkbox
 dart run remix_cli:remix add textfield
 dart run remix_cli:remix add dialog
 dart run remix_cli:remix add card
@@ -180,7 +154,7 @@
 Each command generates the required adapters and updates lib/ui/ui.dart.

Replace lib/main.dart with the complete sample below. The sample imports only Flutter, Remix, and the application barrel.

-
Show the complete settings-screen main.dart
lib/main.dart · default sample
import 'package:flutter/material.dart';
+
Complete settings-screen main.dart
lib/main.dart · default sampleDart
import 'package:flutter/material.dart';
 import 'package:remix/remix.dart';
 
 import 'ui/ui.dart';
@@ -535,7 +509,7 @@
 

Place the scope below the host

MaterialApp.builder wraps the navigation child with the text defaults and recipe scope. Routes and dialogs can then inherit those values.

-
lib/main.dart · _SampleAppState.build
builder: (context, child) => DefaultTextStyle(
+
lib/main.dart · _SampleAppState.buildDart
builder: (context, child) => DefaultTextStyle(
   style: Theme.of(context).textTheme.bodyMedium!,
   child: AcmeThemeScope(
     data: dark ? const AcmeThemeData.dark() : const AcmeThemeData.light(),
@@ -543,13 +517,13 @@ 

Place the scope below the host

), ),

Restart the application after replacing its root widget. -In the terminal running flutter run, press R for a hot restart.

+Return to the terminal running flutter run. Press R for a hot restart.

Check the result

The settings screen shows Sidebar, TextField, Checkbox, Card, and Button. -The default medium buttons remain 36 pixels tall until Step 7.

7 · Customize

Change appearance at the correct level

Use a call-site override, a recipe edit, or a theme value according to the intended scope.

+The default medium buttons remain 36 pixels tall until Step 7.

7 · Customize

Customize a Button or the theme

Choose an instance override, a recipe edit, or a theme value based on which controls should change.

One instance: the cyan preview button

Open lib/main.dart, _WorkspacePageState.build, and find the Run preview button. Its style overrides one instance.

-
lib/main.dart · the Run preview style
style: ButtonStyler()
+
lib/main.dart · the Run preview styleDart
style: ButtonStyler()
     .color(const Color(0xFF0E7490))
     .label(.color(const Color(0xFFFFFFFF)))
     .onPressed(ButtonStyler().color(const Color(0xFF164E63)))
@@ -560,24 +534,24 @@ 

One instance: the cyan preview button

One component family: make medium buttons taller

Open lib/ui/components/button.dart, _metricsFor. Change only the medium minHeight from 36.0 to 44.0.

-
lib/ui/components/button.dart · _metricsFor
.medium => (
+
lib/ui/components/button.dart · _metricsForDart
.medium => (
   minHeight: 44.0,
   paddingX: 16.0,
   gap: 8.0,
   labelSize: 14.0,
   iconSize: 16.0,
-),
VS Code web showing minHeight 44.0 in the medium Button metrics
The saved recipe edit. The editor shows the application-owned file. The terminal shows a later dry-run against the installed project. Open at full size.
+),
VS Code web showing minHeight 44.0 in the medium Button metrics
Figure 3The saved recipe edit. The editor shows the application-owned file. The terminal shows a later dry-run against the installed project. Open at full size.

Restart or reload the running application to see the change. This edit changes a recipe value. It does not change the generated widget signature.

When you change recipe parameters, enums, or annotations, regenerate the adapter.

-
Regenerate after a recipe API change
dart run build_runner build --delete-conflicting-outputs
+
Regenerate after a recipe API changeTerminal
dart run build_runner build --delete-conflicting-outputs

The theme: shared values and runtime switching

Open lib/ui/theme/theme_data.dart, AcmeThemeData, for shared values. Open lib/main.dart, _SampleAppState.build, for the light and dark switch.

A new token also needs an entry in AcmeThemeData.tokens. Include its value in constructors, copyWith, equality, and hashCode.

See the customization reference for token and theme examples.

-
Check the result

Every default medium Button uses the 44-pixel minimum height. +

Check the result

Every medium Button in this default sample uses the 44-pixel minimum height. The cyan Button keeps its instance override. The review measured Save changes at 44 CSS pixels with device pixel ratio 1.

8 · Exercise the application

Check the visible behavior

A screenshot shows a state. These actions verify how the application reaches that state.

  1. Reload the sample to reset its local state.
  2. @@ -586,7 +560,7 @@

    The theme: shared values and runtime switching

  3. Select Save changes. Try a second press while the spinner is visible.
  4. Wait for the result. Confirm Save count: 1 and Summary: off.
-
The Save changes button showing a spinner with Launchpad Studio entered and the summary checkbox cleared
Saving. Remix renders the loading state and disables the Button. The application supplies loading: saving. Open at full size.
The saved result names Launchpad Studio, save count 1, and summary off
Saved. The application callback retains the entered values and reports one completed save. Open at full size.
+
The Save changes button showing a spinner with Launchpad Studio entered and the summary checkbox cleared
Figure 4Saving. Remix renders the loading state and disables the Button. The application supplies loading: saving. Open at full size.
The saved result names Launchpad Studio, save count 1, and summary off
Figure 5Saved. The application callback retains the entered values and reports one completed save. Open at full size.
@@ -597,32 +571,33 @@

The theme: shared values and runtime switching

Open and confirm a dialog

Select Preview invitation, then Confirm. The dialog closes and the status reports a local confirmation. It sends no invitation.

-
Centered default dialog in dark mode with Cancel and Confirm buttons
Default dialog. The panel is centered and its text has no fallback underline. This capture follows a dark-theme switch. Open at full size.
+
Centered default dialog in dark mode with Cancel and Confirm buttons
Figure 6Default dialog. The panel is centered and its text has no fallback underline. This capture follows a dark-theme switch. Open at full size.

Open lib/main.dart, _WorkspacePageState.invite. Its showRemixDialog builder wraps AcmeDialog in Center, so the panel's maximum width can apply.

The host supplies the intended DefaultTextStyle before the dialog captures inherited themes.

-
Check the result

The form keeps its values, loading prevents duplicate saves, disabled controls stay inactive, and the dialog returns its result.

9 · Review updates

Keep the source you edited

Use a diff to inspect the bundled recipe without replacing your source.

Compare the edited Button with its bundled template
dart run remix_cli:remix add button --diff
Relevant lines from the observed diff
-    minHeight: 44.0,
+
Check the result

The form keeps its values, loading prevents duplicate saves, disabled controls stay inactive, and the dialog returns its result.

9 · Review updates

Keep the source you edited

Use a diff to inspect the bundled recipe without replacing your source.

Compare the edited Button with its bundled templateTerminal
dart run remix_cli:remix add button --diff
Relevant lines from the observed diffDiff
-    minHeight: 44.0,
 +    minHeight: 36.0,

current is your file. proposed is the bundled template. The removed line is your 44-pixel edit. The added line is the upstream 36-pixel value.

The diff reports the difference and leaves the project source unchanged.

-
Run an ordinary add again
dart run remix_cli:remix add button
Observed preservation result after the plan
Preserved theme.
+
Run an ordinary add againTerminal
dart run remix_cli:remix add button
Observed preservation result after the planOutput
Preserved theme.
 Preserved button.
 Preserved lib/ui/components/button.g.dart.

Confirm that the medium minHeight still equals 44.0 in button.dart.

Optional: replace the requested recipe

Commit or copy your edit before this experiment. The command below replaces the requested Button recipe with the bundled version.

-
Replace Button with the bundled source
dart run remix_cli:remix add button --overwrite
+
Replace Button with the bundled sourceTerminal
dart run remix_cli:remix add button --overwrite

Button returns to 36 pixels. An already-installed theme remains unchanged. Restore the 44-pixel edit if you want the final sample to match the screenshots.

Diff each installed item when you update the CLI. Button's diff omits an already-installed theme.

-
Review the theme separately
dart run remix_cli:remix add theme --diff
Check the result

Dry-run, diff, and ordinary add preserve your authored source. +

Review the theme separatelyTerminal
dart run remix_cli:remix add theme --diff
Check the result

Dry-run, diff, and ordinary add preserve your authored source. Explicit Button overwrite replaces Button and preserves installed registry dependencies.

10 · Optional preset

Build the same sample with Fortal

Repeat the workflow in a separate Flutter project.

-

Run these commands from the directory above the default sample.

-
Create the Fortal project
flutter create --empty --platforms=web remix_fortal_demo
+

Use the CLI terminal in remix_default_demo. These commands move to its parent directory and create the Fortal project.

+
Create the Fortal projectTerminal
cd ..
+flutter create --empty --platforms=web remix_fortal_demo
 cd remix_fortal_demo

Repeat Step 2 to add the Remix override and the checkout CLI in this project.

-
Initialize and install Fortal recipes
dart run remix_cli:remix init --prefix Acme --preset fortal
+
Initialize and install Fortal recipesTerminal
dart run remix_cli:remix init --prefix Acme --preset fortal
 dart run remix_cli:remix add button
 dart run remix_cli:remix add checkbox
 dart run remix_cli:remix add textfield
@@ -639,7 +614,7 @@ 

Open and confirm a dialog

ActionExpected resultCode to inspect
Select Delete workspace.The disabled callback does not run.enabled: false in _WorkspacePageState.build
Select Run preview.The status reports that the preview completed.The instance Button's onPressed

Use the Fortal source below for lib/main.dart. It uses the same application flow with the Fortal API. The default Button height edit does not apply to this project.

-
Show the complete Fortal main.dart
lib/main.dart · Fortal sample
import 'package:flutter/material.dart';
+
Complete Fortal main.dart
lib/main.dart · Fortal sampleDart
import 'package:flutter/material.dart';
 import 'package:remix/remix.dart';
 
 import 'ui/ui.dart';
@@ -982,18 +957,18 @@ 

Open and confirm a dialog

), ); } -}
The Fortal sample in dark mode with purple controls and the cyan instance override
The Fortal sample. The application supplies the layout. Installed Fortal recipes supply the control appearance. Open at full size.
Fortal dialog in dark mode with a centered panel and normal text decoration
Fortal dialog. AcmeScope sits below the application host. Routes inherit its tokens and text defaults. Open at full size.
Check the result

The separate project records preset: fortal and uses AcmeScope and AcmeButton.solid. +}

The Fortal sample in dark mode with purple controls and the cyan instance override
Figure 7The Fortal sample. The application supplies the layout. Installed Fortal recipes supply the control appearance. Open at full size.
Fortal dialog in dark mode with a centered panel and normal text decoration
Figure 8Fortal dialog. AcmeScope sits below the application host. Routes inherit its tokens and text defaults. Open at full size.
Check the result

The separate project records preset: fortal and uses AcmeScope and AcmeButton.solid. Repeat the behavior checks from Step 8.

11 · Validate

Run the checks yourself

Use analysis, behavior tests, and a release build to verify more than appearance.

Apply this configuration in each sample's analysis_options.yaml. -The current generator produces lint findings in adapters. Keep authored recipes under analysis.

-
analysis_options.yaml
include: package:flutter_lints/flutter.yaml
+The generator version in this checkout produces lint findings in adapters. Keep authored recipes under analysis.

+
analysis_options.yamlYAML
include: package:flutter_lints/flutter.yaml
 
 analyzer:
   exclude:
     - lib/ui/**/*.g.dart

Create test/workflow_test.dart with the matching test source below. The imports assume the project names used in Steps 1 and 10.

-
Show the four default sample tests
test/workflow_test.dart · default
import 'package:flutter/material.dart';
+
Four default sample tests
test/workflow_test.dart · defaultDart
import 'package:flutter/material.dart';
 import 'package:flutter/rendering.dart';
 import 'package:flutter_test/flutter_test.dart';
 import 'package:remix_default_demo/main.dart';
@@ -1086,7 +1061,7 @@ 

Open and confirm a dialog

expect(tester.takeException(), isNull); }, ); -}
Show the four Fortal sample tests
test/workflow_test.dart · Fortal
import 'package:flutter/material.dart';
+}
Four Fortal sample tests
test/workflow_test.dart · FortalDart
import 'package:flutter/material.dart';
 import 'package:flutter/rendering.dart';
 import 'package:flutter_test/flutter_test.dart';
 import 'package:remix_fortal_demo/main.dart';
@@ -1179,7 +1154,7 @@ 

Open and confirm a dialog

expect(tester.takeException(), isNull); }, ); -}
Run from either sample directory
flutter analyze
+}
Run from either sample directoryTerminal
flutter analyze
 flutter test
 flutter build web --release

The tests verify retained form values, one save during loading, disabled controls, the instance callback, dialog results, text decoration, and Sidebar selection.

@@ -1206,7 +1181,7 @@

What GitHub CI adds

The reference guide also covers partial installs, dependency declarations, and command errors.

Review notes

What the screenshots establish

Each screenshot has one purpose and a stated capture context.

The screenshots contain real browser or editor pixels. Application detail images use browser screenshot crops. -The screenshot links open the original files used by this page.

+Each screenshot link opens its full resolution file.

@@ -1220,14 +1195,12 @@

What GitHub CI adds

The evidence manifest records screenshot and source digests.

Read the reference guide for the full catalog, configuration rules, and source ownership model.

-
Reviewed September 7, 2026. Commands use the checkout CLI. Screenshots show real applications and the actual editor.
- +
Examples reviewed September 7, 2026. Tutorial design reviewed September 8, 2026. Commands use the checkout CLI. Screenshots show real applications and the actual editor. Assets and licenses.
+

+ + + + + + + From 3c63fe44f7209e8b4de70106ad68aabfb0a4b8a7 Mon Sep 17 00:00:00 2001 From: Leo Farias Date: Wed, 9 Sep 2026 12:07:47 -0400 Subject: [PATCH 4/7] docs: organize Remix content and add native CLI tutorial --- docs.json | 19 +- docs/README.md | 52 ++++ docs/assets/remix-cli-tutorial/README.md | 14 + docs/getting-started.mdx | 80 ++++++ docs/guides/styling-components.mdx | 78 ++++++ docs/index.mdx | 288 ++++---------------- docs/open-code.mdx | 4 + docs/remix-cli-tutorial.html | 4 +- docs/tutorials/settings-screen.mdx | 327 +++++++++++++++++++++++ pubspec.yaml | 2 + tool/check_tutorial_assets.py | 134 ++++++++++ tool/test_tutorial_assets.py | 75 ++++++ 12 files changed, 837 insertions(+), 240 deletions(-) create mode 100644 docs/README.md create mode 100644 docs/getting-started.mdx create mode 100644 docs/guides/styling-components.mdx create mode 100644 docs/tutorials/settings-screen.mdx create mode 100644 tool/check_tutorial_assets.py create mode 100644 tool/test_tutorial_assets.py diff --git a/docs.json b/docs.json index 2400cd1a..98460e89 100644 --- a/docs.json +++ b/docs.json @@ -65,9 +65,17 @@ "group": "Introduction", "pages": [ { - "title": "Getting Started", + "title": "Introduction", "href": "/" }, + { + "title": "Getting Started", + "href": "/getting-started" + }, + { + "title": "Styling Components", + "href": "/guides/styling-components" + }, { "title": "Styler API", "href": "/styler-api" @@ -78,6 +86,15 @@ } ] }, + { + "group": "Tutorials", + "pages": [ + { + "title": "Build a Settings Screen", + "href": "/tutorials/settings-screen" + } + ] + }, { "group": "Components", "pages": [ diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..a17b6965 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,52 @@ +# Maintaining Remix documentation + +The content in `docs/` is owned by this repository. `docs.json` defines its +navigation. The website is a publication surface, not a second authority for +Remix APIs or release versions. + +## Content organization + +- `index.mdx`: what Remix supplies, workflow choices, and host requirements. +- `getting-started.mdx`: checkout installation and a complete first component. +- `guides/styling-components.mdx`: states, animation, and style reuse. +- `open-code.mdx`: CLI command and configuration reference. +- `tutorials/settings-screen.mdx`: guided default/Fortal application walkthrough. +- `components/` and `fortal/`: the existing component and preset references. + +The introduction/setup/styling revision draws on the explanations in +`conceptadev/website` at `fb1c11e928144ff8a6e4ad9df22bc55a268d064f`, under +`src/content/documentation/remix/index.mdx`. Its content was adapted, not +mirrored: obsolete convenience methods, the `{latest_version}` placeholder, +and package-owned Fortal installation assumptions were not imported. The local +package source and analyzer remain authoritative for examples. + +## Tutorial source and evidence + +`remix-cli-tutorial.html` keeps the complete reviewed walkthrough, full source +listings, and offline presentation. The MDX tutorial is a condensed reading +path through the same workflow. Each fenced block carries a hidden +`tutorial-source` marker naming its corresponding HTML figure. The checker +compares that exact block, including its language and whitespace. + +Keep screenshots, sample projects, capture pins, and licenses under +`assets/remix-cli-tutorial/`. Do not relabel old captures as new validation. +See that directory's README for editing and evidence rules. New prose still +needs review; matching excerpts cannot prove every instruction is accurate. + +## Validation + +Use the pinned Flutter SDK and Python 3.9 or newer: + +```bash +fvm dart run melos run docs:check +``` + +This validates navigation, known retired APIs, analyzable Dart snippets, +generated catalog consistency, tutorial asset/source hashes, native tutorial +excerpt parity, and local links in the introduction/setup/styling/tutorial +pages. Regression tests deliberately corrupt fixtures in temporary directories. + +The tutorial's application-relative `ui/ui.dart` example is checked against +the reviewed HTML, not compiled against the workspace package. Replay the +downloaded Flutter samples when application code or CLI behavior changes. +These content checks do not build or deploy a documentation website. diff --git a/docs/assets/remix-cli-tutorial/README.md b/docs/assets/remix-cli-tutorial/README.md index 21eb244f..f71596b4 100644 --- a/docs/assets/remix-cli-tutorial/README.md +++ b/docs/assets/remix-cli-tutorial/README.md @@ -7,6 +7,12 @@ The reader can open the complete tutorial without a server or an internet connec ## Source and editing Edit the tutorial HTML for instructions and complete code examples. +`docs/tutorials/settings-screen.mdx` is the condensed documentation walkthrough. +Its fenced code blocks use hidden `tutorial-source` markers to identify their +exact figures in the reviewed HTML; the +asset checker enforces this along with the checkout pin and local content links. +Update both presentations deliberately when instructions change. Do not add a +second independently maintained copy of the full sample applications. Edit `tutorial.css` for layout and syntax colors. Edit `tutorial.js` for navigation, wrapping, and copying. The page needs no build step. Keep each code block's `language-*` class consistent with its source. @@ -17,6 +23,14 @@ Keep their captions and capture context accurate when replacing them. `sample-projects.zip` contains the complete default and Fortal projects. Its README explains how to set the local checkout paths and run the samples. +Check the recorded screenshot, archive, and sample-source hashes from the +repository root with `python3 tool/check_tutorial_assets.py`. This requires +only Python's standard library and does not extract the archive. It verifies +the recorded evidence; replay the Flutter instructions separately when the +CLI, examples, or dependencies change. `melos run docs:check` includes this check +and its regression tests. Do not update hashes to bypass a failed +check without reviewing the replacement assets. + ## Third-party files - [Prism 1.30.0](https://github.com/PrismJS/prism/tree/v1.30.0) provides syntax highlighting. Its MIT license is in `prism/LICENSE`. diff --git a/docs/getting-started.mdx b/docs/getting-started.mdx new file mode 100644 index 00000000..dfc9e0e0 --- /dev/null +++ b/docs/getting-started.mdx @@ -0,0 +1,80 @@ +--- +title: Getting started +description: Install Remix from this checkout and render your first styled button +--- + +Remix can be used directly as a widget library. You do not need the CLI or a +preset for this path. If you want editable component recipes instead, follow +the [CLI tutorial](/tutorials/settings-screen). + +## Installation + +These docs describe the code in this repository, whose Remix package version +is `1.0.0-beta.9`. Do not substitute a stable `1.0.0` dependency: the repository +version is a prerelease, not evidence that a stable release exists. + +For this checkout, use Flutter 3.44.0 and its bundled Dart 3.12.0, matching +`.fvmrc`. The runtime package's consumer floor is Flutter 3.41 / Dart 3.11; +the CLI and this repository's development workflow use the newer toolchain. + +Create an application, then add the local runtime package. Replace +`/path/to/remix` with the absolute path to your checkout: + +```bash +flutter create remix_example +cd remix_example +flutter pub add "remix:{path: /path/to/remix/packages/remix}" +``` + +For a registry installation, check the available versions on +[pub.dev](https://pub.dev/packages/remix/versions) and select docs matching that +release. A plain `flutter pub add remix` does not select an unpublished checkout. + +## Your first component + +Replace `lib/main.dart` with this example: + +```dart +import 'package:flutter/material.dart'; +import 'package:remix/remix.dart'; + +void main() => runApp(const ExampleApp()); + +class ExampleApp extends StatelessWidget { + const ExampleApp({super.key}); + + @override + Widget build(BuildContext context) { + final button = ButtonStyler() + .padding(.horizontal(16)) + .padding(.vertical(10)) + .color(Colors.blue) + .borderRadius(.circular(8)) + .label(.color(Colors.white)); + + return MaterialApp( + home: Scaffold( + body: Center( + child: button( + label: 'Click me', + onPressed: () => debugPrint('Button pressed'), + ), + ), + ), + ); + } +} +``` + +Run `flutter run`. You should see a blue button with a white label, and pressing +it should print `Button pressed` in the debug console. + +`ButtonStyler` holds the appearance. Calling it produces a `RemixButton`; +your callback supplies the application action. `MaterialApp` and `Scaffold` +are convenient hosts here, not requirements imposed by Remix. + +## Next steps + +- [Style states and reuse a base style](/guides/styling-components). +- [Check host requirements](/#host-capabilities) before adding menus or dialogs. +- [Build a settings screen with the CLI](/tutorials/settings-screen) to learn the application-owned recipe workflow. diff --git a/docs/guides/styling-components.mdx b/docs/guides/styling-components.mdx new file mode 100644 index 00000000..f5515eaa --- /dev/null +++ b/docs/guides/styling-components.mdx @@ -0,0 +1,78 @@ +--- +title: Styling components +description: Define appearance, respond to interaction states, and reuse Remix styles +--- + +Start a style with the component's concrete styler and chain the properties you +need. Keep application values and callbacks on the widget; put appearance in +the styler. This is the same separation used throughout Mix. + +## Respond to interaction states + +```dart +import 'package:flutter/material.dart'; +import 'package:remix/remix.dart'; + +final buttonStyle = ButtonStyler() + .padding(.horizontal(16)) + .padding(.vertical(10)) + .color(Colors.blue) + .borderRadius(.circular(8)) + .label(.color(Colors.white)) + .onHovered(.color(Colors.blue.shade700)) + .onPressed(.scale(0.95)); +``` + +Remix tracks hover and press for the component. The state-specific styles +describe the appearance to apply; you do not need another hover detector to +drive these variants. Use the [component reference](/components/button) for +its disabled, loading, and focus behavior. + +## Animate style changes + +```dart +import 'package:flutter/material.dart'; +import 'package:remix/remix.dart'; + +final animatedButton = ButtonStyler() + .color(Colors.blue) + .onHovered(.color(Colors.blue.shade700)) + .onPressed(.scale(0.95)) + .animate(AnimationConfig.spring(300.ms)); +``` + +The animation applies to style transitions, including the color and scale in +this example. It does not supply application behavior such as saving data or +deciding when a loading state begins. + +## Reuse a base style + +```dart +import 'package:flutter/material.dart'; +import 'package:remix/remix.dart'; + +final baseButton = ButtonStyler() + .padding(.horizontal(16)) + .padding(.vertical(10)) + .borderRadius(.circular(8)); + +final primaryButton = baseButton + .color(Colors.blue) + .label(.color(Colors.white)); + +final destructiveButton = baseButton + .color(Colors.red) + .label(.color(Colors.white)); +``` + +Each chain returns a new style, leaving `baseButton` unchanged. Both variants +retain the shared spacing and radius while defining their own colors. + +## Choose between a style and an installed recipe + +Use a styler directly when the application only needs a reusable appearance. +Use [Open Code](/open-code) when you want a local token system, named component +variants, and generated widget adapters that your team can maintain. + +Follow the [Styler API](/styler-api) for method names and contextual shorthand. +Use canonical calls such as `.padding(.horizontal(16))` for spacing. diff --git a/docs/index.mdx b/docs/index.mdx index e54ad43b..ba0b0634 100644 --- a/docs/index.mdx +++ b/docs/index.mdx @@ -1,203 +1,68 @@ --- title: Introduction -description: Customizable Flutter components with powerful styling +description: Build custom Flutter interfaces with Remix behavior and Mix styling --- -!["Remix banner"](https://jtmo7uveygl6pnag.public.blob.vercel-storage.com/remix_banner.png) - -A comprehensive Flutter component library that combines headless UI behavior with Mix's powerful styling system, giving you complete freedom to build and customize components that match your design system perfectly. - -Remix brings together the best of both worlds: the robust interaction behavior and accessibility of Naked UI with the flexible, composable styling capabilities of Mix. This combination enables you to create components that are fully customizable, reusable, and maintainable. +Remix is a Flutter component library built on [Mix](https://github.com/conceptadev/mix) +and [Naked UI](https://github.com/conceptadev/naked_ui). It provides interaction +behavior, focus handling, and accessibility semantics while leaving the visual +design to your application. ## Why Remix? -### The Problem - -Flutter developers commonly face these challenges when building custom UIs: - -- **Verbose styling** - Deep widget nesting makes code difficult to read and maintain -- **Complex state management** - Handling hover, focus, and press states requires extensive boilerplate -- **Style reusability** - Creating consistent, reusable component styles often leads to copied code -- **Animation overhead** - Adding smooth transitions requires significant setup - -### The Solution - -```dart -import 'package:flutter/material.dart'; -import 'package:remix/remix.dart'; - -final style = ButtonStyler() - .padding(.horizontal(16)) - .padding(.vertical(10)) - .color(Colors.blue) - .borderRadius(.all(const Radius.circular(8))) - .animate(AnimationConfig.spring(300.ms)) - .onHovered(.color(Colors.blue.shade700)); - -final styledButton = RemixButton( - onPressed: () {}, - label: 'Click me', - style: style, -); -``` - -Or using callable styles: -```dart -import 'package:flutter/material.dart'; -import 'package:remix/remix.dart'; - -final button = ButtonStyler() - .padding(.horizontal(16)) - .padding(.vertical(10)) - .color(Colors.blue) - .borderRadius(.all(const Radius.circular(8))) - .onHovered(.color(Colors.blue.shade700)) - .animate(AnimationConfig.spring(300.ms)); - -final fluentButton = button( - label: 'Click me', - onPressed: () {}, -); // return RemixButton Widget. -``` +Custom controls need more than a different color. Buttons need loading and +disabled behavior; menus need focus and keyboard handling; dialogs need to work +with the application's navigator. Remix supplies those component behaviors so +you can concentrate on the interface and its application state. -With Remix, you get: -- **Ready-to-use components** with all the behavior, accessibility, and keyboard navigation built-in -- **Complete styling freedom** using Mix's powerful, chainable styling API -- **State-aware styling** with built-in support for hover, focus, press, and custom states -- **Smooth animations** that work seamlessly with your style definitions +Use a component styler to define appearance, reuse it across instances, and +change styles in response to hover, focus, or press. Your application still owns +layout, values, callbacks, and persistence. ## Quick Start -### Installation - -Add Remix to your project: - -```bash -flutter pub add remix -``` - -Or add it to your `pubspec.yaml`: - -```yaml -dependencies: - remix: ^1.0.0 -``` - -### Your First Component - -Let's build your first button with Remix. This simple example demonstrates how easy it is to create a fully customizable component using Remix's styling API. - -```dart -import 'package:flutter/material.dart'; -import 'package:remix/remix.dart'; - -class MyApp extends StatelessWidget { - - final button = ButtonStyler() - .padding(.horizontal(16)) - .padding(.vertical(10)) - .color(Colors.blue) - .borderRadius(.all(const Radius.circular(8))) - .label(TextStyler().color(Colors.white)); - - @override - Widget build(BuildContext context) { - return WidgetsApp( - color: Colors.blue, - builder: (_, _) => Center( - child: button( - label: 'Click Me', - onPressed: () => debugPrint('Button pressed!'), - ), - ), - ); - } -} -``` - -### Adding Interaction States +Choose the workflow that matches what you want to own: -Easily define how components should look in different interaction states. +| Workflow | What you write | Start here | +| --- | --- | --- | +| Use Remix directly | Component instances and Mix stylers | [Install and render a button](/getting-started) | +| Install editable recipes | Local theme and component source, plus your application | [Open Code reference](/open-code) | +| Learn through a complete screen | A settings form, save behavior, dialog, and sidebar | [CLI settings-screen tutorial](/tutorials/settings-screen) | -```dart -final style = ButtonStyler() - .padding(.horizontal(16)) - .padding(.vertical(10)) - .color(Colors.blue) - .borderRadius(.all(const Radius.circular(8))) - .label(TextStyler().color(Colors.white)) - .onHovered(.color(Colors.blue.shade700)) // [!code ++] - .onPressed(.scale(0.95)); // [!code ++] -``` +The CLI tutorial uses a pinned checkout, not an assumed published CLI release. +It covers the small `default` preset and the separate `fortal` preset. -### Adding Animation - -Make your button style smoothly animate when its state changes by chaining `.animate()` with your state-specific styles. You can use `AnimationConfig.spring` to get natural, spring-based motion. - -```dart -final style = ButtonStyler() - .padding(.horizontal(16)) - .padding(.vertical(10)) - .color(Colors.blue) - .borderRadius(.all(const Radius.circular(8))) - .animate(AnimationConfig.spring(300.ms)) // [!code ++] - .onHovered(.color(Colors.blue.shade700)) - .onPressed(.scale(0.95)); -``` +## Styling components -This example animates both the color on hover and the scale on press, creating a smooth interactive experience for your users. - -> **Note:** Animation support is built using the powerful Mix API. To dive deeper into animated styles, visit the [Mix Repository](https://github.com/btwld/mix) for more capabilities and advanced examples with keyframes and Phase Animations. - -### Style Composition and Reuse - -Create base styles and extend them to build variants: - -```dart -final baseButtonStyle = ButtonStyler() - .padding(.horizontal(16)) - .padding(.vertical(10)) - .borderRadius(.all(const Radius.circular(8))); - -final primaryButton = baseButtonStyle - .color(Colors.blue) - .label(TextStyler().color(Colors.white)); - -final destructiveButton = baseButtonStyle - .color(Colors.red) - .label(TextStyler().color(Colors.white)); -``` +A styler defines appearance; the widget supplies behavior. Start with the +[styling guide](/guides/styling-components) for states, animation, and reuse. +The [Styler API](/styler-api) documents the canonical methods and shorthand +rules. Individual [component pages](/components/button) cover their own slots +and interaction contracts. ## Theming with Fortal -Remix ships no theme of its own. If you want a polished, Radix Themes-inspired -starting point instead of authoring every style yourself, initialize the -application-owned Fortal preset: +The [Fortal preset](/fortal) provides a Radix Themes-inspired starting point. +The CLI installs its tokens, scope, and recipes into your application. You own +those files; the preset does not add a `remix_fortal` dependency to your app. -```bash -flutter pub add dev:remix_cli -dart run remix_cli:remix init --prefix Fortal --preset fortal -dart run remix_cli:remix add button -``` - -It copies `FortalScope`, the token system, `fortal*Style()` recipes, and the -components you add into your application. +Use the [tutorial's Fortal step](/tutorials/settings-screen#try-fortal-separately) +to compare it with the default preset. Keep the two presets in separate +initialized projects: their token systems and component constructors differ. -See the [Fortal overview](/fortal) to get started. +## Host capabilities -## Host Capabilities +Remix composes inside your Flutter host. It does not require a `MaterialApp`, +`Scaffold`, or Remix-owned application wrapper. -Remix composes inside your existing Flutter host. It does not require a -`MaterialApp`, `Scaffold`, or Remix-owned application wrapper. +| UI | Caller provides | +| --- | --- | +| Ordinary `Remix*` widgets | The inherited Flutter services used by the widget subtree | +| Widgets styled by the [Fortal preset](/fortal) | The preset's token scope, plus the widget's normal Flutter services | +| Menu, select, popover, and tooltip | An `Overlay`; use `Overlay.wrap` when no `Navigator` is needed | +| `showRemixDialog` and `showRemixAlertDialog` | A caller-owned `Navigator` above the invoking context | -| UI | Caller provides | Compatible hosts | -|----|-----------------|------------------| -| Ordinary `Remix*` widgets | The inherited Flutter services used by the widget subtree | Material, Cupertino, Widgets, and router-based hosts | -| Widgets styled by the [Fortal preset](/fortal) | The preset's token scope, in addition to the widget's normal Flutter services | Any Flutter host | -| Menu, select, popover, and tooltip | An `Overlay` | Any host exposing an overlay; use `Overlay.wrap` when no `Navigator` is needed | -| `showRemixDialog` and `showRemixAlertDialog` | A `Navigator` | Any host with a caller-owned navigator | - -For a portal-based interface without routing, provide only an overlay: +For a portal-based interface without routing, provide an overlay: ```dart import 'package:flutter/widgets.dart'; @@ -220,67 +85,16 @@ Widget buildPortalHost() { } ``` -A `MaterialApp`, `CupertinoApp`, `WidgetsApp`, or router with routing configured -commonly provides a `Navigator` and its overlay already. Dialog helpers push -routes, so their calling context must be below that caller-owned `Navigator`. - -## Components - -Remix provides a comprehensive set of production-ready components: - -### Interactive Elements -- **Button** - Clickable actions with full styling control -- **IconButton** - Icon-based actions -- **Switch** - Toggle controls -- **Toggle** - Two-state on/off buttons -- **Checkbox** - Multiple selection -- **Radio** - Single selection from a group -- **Slider** - Continuous value selection - -### Input Components -- **TextField** - Text input with validation support -- **Select** - Dropdown selection with keyboard navigation - -### Display Components -- **Avatar** - User avatars and images -- **Badge** - Status indicators and labels -- **Card** - Content containers -- **Divider** - Visual separators -- **Progress** - Progress indicators -- **Spinner** - Loading states - -### Layout & Navigation -- **Tabs** - Tabbed navigation -- **Accordion** - Collapsible content sections -- **Disclosure** - A standalone trigger and inline expandable panel -- **Menu** - Context menus and dropdowns - -### Overlays -- **Dialog** - Modal dialogs -- **Tooltip** - Contextual help -- **Callout** - Highlighted information blocks - -## Who is Remix for? - -Remix is ideal for: -- **Teams building custom design systems** who need full control over component appearance -- **Developers requiring complex state management** with multiple variants and interaction states -- **Applications needing consistent styling** across dozens of components +Material, Cupertino, Widgets, and router-based hosts can all supply these +services. The [settings-screen tutorial](/tutorials/settings-screen) shows a +complete host, including the scope placement used by its dialog. ## Examples -Live examples: - -- [Fortal dashboard](https://conceptadev.github.io/remix/dashboard/) — a polished product dashboard with responsive layouts, charts, data, and live theme controls. -- [Component catalog](https://conceptadev.github.io/remix/) — the Widgetbook catalog for reviewing Remix and Fortal components, variants, and states. - -Check out `apps/dashboard`, `apps/demo`, and the per-package examples in -`packages/remix/example` and `packages/remix_fortal/example` for complete working examples demonstrating: -- Component usage patterns -- Style composition techniques -- Design system implementation -- Advanced customization - ---- +- [Fortal dashboard](https://conceptadev.github.io/remix/dashboard/): an application with layouts, data, and theme controls. +- [Component catalog](https://conceptadev.github.io/remix/): components, variants, and interaction states. +- [Download both tutorial projects](/assets/remix-cli-tutorial/sample-projects.zip): default and Fortal examples with source and behavior tests. -Built with ❤️ using [Mix](https://github.com/btwld/mix) and [Naked UI](https://github.com/btwld/naked_ui) +The repository also contains `apps/dashboard`, `apps/demo`, +`packages/remix/example`, and `packages/remix_fortal/example`. The last is an +authoring-package example, not a dependency the CLI adds to consumer apps. diff --git a/docs/open-code.mdx b/docs/open-code.mdx index c642d150..5ed59360 100644 --- a/docs/open-code.mdx +++ b/docs/open-code.mdx @@ -3,6 +3,10 @@ title: Open Code description: Install editable Remix component source into your app with the remix CLI --- +For a guided walkthrough with screenshots and runnable sample projects, start +with [Build a settings screen](/tutorials/settings-screen). This page is the +command and configuration reference. + **Open code** copies a theme and component recipes **into your application**. From that moment your team owns those files: no wrapper, no subclass, and no package-level theme override standing between you and the source. Choose the diff --git a/docs/remix-cli-tutorial.html b/docs/remix-cli-tutorial.html index 0512dbaf..f8c3b313 100644 --- a/docs/remix-cli-tutorial.html +++ b/docs/remix-cli-tutorial.html @@ -45,7 +45,7 @@

Before you start

Use the complete PR stack, including Sidebar. The reviewed checkout is bfae6507676fadea7632e2f7f66924935c04ca2a.

Get the reviewed checkout

Open a second terminal in the directory where you keep repositories. Run these commands there.

-
Get the exact reviewed sourceTerminal
git clone https://github.com/conceptadev/remix.git remix-review
+
Get the exact reviewed sourceTerminal
git clone https://github.com/conceptadev/remix.git remix-review
 git -C remix-review checkout bfae6507676fadea7632e2f7f66924935c04ca2a
 git -C remix-review rev-parse --show-toplevel

The last command prints the checkout path. Use that path wherever the tutorial shows /path/to/remix.

@@ -141,7 +141,7 @@

Before you start

), ); } -}
Run the applicationTerminal
flutter run -d chrome
A single black Continue button centered on a white application surface
Figure 2First render. This detail capture comes from the complete example above, built with the installed default recipe. Open at full size.
+}
Run the applicationTerminal
flutter run -d chrome
A single black Continue button centered on a white application surface
Figure 2First render. This detail capture comes from the complete example above, built with the installed default recipe. Open at full size.

Keep the flutter run terminal open. Open another terminal in the same sample directory for the following CLI commands.

The first example uses WidgetsApp and an Overlay. The larger application below uses MaterialApp for its navigation host.

diff --git a/docs/tutorials/settings-screen.mdx b/docs/tutorials/settings-screen.mdx new file mode 100644 index 00000000..a9bbdbfc --- /dev/null +++ b/docs/tutorials/settings-screen.mdx @@ -0,0 +1,327 @@ +--- +title: Build a settings screen +description: Use Remix CLI recipes to build, customize, and test a Flutter settings screen +--- + +Build **Launchpad**, a desktop-browser settings screen with a form, save state, +dialog, and sidebar. You write the application; the CLI installs editable +component recipes and their theme. + +![Launchpad with the default preset and a cyan preview button](/assets/remix-cli-tutorial/default-finished.jpg) + +The finished screenshot includes the medium Button height edit below. It is +an application example, not a screen the CLI generates for you. + +This walkthrough uses the same reviewed code as the +[complete offline tutorial](/remix-cli-tutorial.html). The +[sample download](/assets/remix-cli-tutorial/sample-projects.zip) contains +both projects, generated adapters, and four behavior tests per preset. + +## Before you start + +Use Flutter **3.44.0**, its bundled Dart **3.12.0**, Git, and a desktop browser. +The samples use local state, with no backend or responsive mobile layout. + +The September 7, 2026 captures used checkout +`bfae6507676fadea7632e2f7f66924935c04ca2a`, with Remix `1.0.0-beta.9` and +CLI `0.1.0`. These are recorded checkout versions, not a claim that those +packages are published. Keep the pin when reproducing the screenshots. + +## Prepare the project and CLI + +In the directory where you keep applications: + +{/* tutorial-source: create-default */} + +```bash +flutter create --empty --platforms=web remix_default_demo +cd remix_default_demo +``` + +In a second terminal, get the reviewed Remix checkout: + +{/* tutorial-source: reviewed-checkout */} + +```bash +git clone https://github.com/conceptadev/remix.git remix-review +git -C remix-review checkout bfae6507676fadea7632e2f7f66924935c04ca2a +git -C remix-review rev-parse --show-toplevel +``` + +Use the printed absolute path in place of `/path/to/remix` below. Back in +`remix_default_demo`, create `pubspec_overrides.yaml`: + +{/* tutorial-source: remix-override */} + +```yaml +dependency_overrides: + remix: + path: /path/to/remix/packages/remix +``` + +Then install the checkout CLI as a project-local development dependency: + +{/* tutorial-source: install-local-cli */} + +```bash +dart pub add "dev:remix_cli@{path: /path/to/remix/packages/remix_cli}" +dart run remix_cli:remix --version +``` + +The version should be `0.1.0`. Keep running CLI commands from the sample's +package root, beside `pubspec.yaml`. + +## Initialize and install Button + +{/* tutorial-source: init-default */} + +```bash +dart run remix_cli:remix init --prefix Acme --preset default +``` + +`Acme` controls local names such as `AcmeButton` and `acmeButtonStyle`. +Initialization writes `remix.yaml` and a managed barrel at `lib/ui/ui.dart`. +It does not install a component yet. + +Preview the first install: + +{/* tutorial-source: preview-button */} + +```bash +dart run remix_cli:remix add button --dry-run +``` + +The plan should install `theme` before `button`. No source is written by +`--dry-run`. Install when the plan matches: + +{/* tutorial-source: install-button-command */} + +```bash +dart run remix_cli:remix add button +``` + +Inspect `lib/ui/components/button.dart`, the recipe you own, and +`button.g.dart`, the adapter produced by the generator. Edit the recipe, not +the generated file. The CLI also adds the required dependencies and exports. + +## Render the first button + +Replace `lib/main.dart` with this complete example: + +{/* tutorial-source: first-main */} + +```dart +import 'package:flutter/widgets.dart'; + +import 'ui/ui.dart'; + +void main() => runApp(const AcmeApp()); + +class AcmeApp extends StatelessWidget { + const AcmeApp({super.key}); + + @override + Widget build(BuildContext context) { + return WidgetsApp( + color: const Color(0xFF000000), + builder: (_, _) => Overlay( + initialEntries: [ + OverlayEntry( + builder: (_) => const AcmeThemeScope( + data: AcmeThemeData.light(), + child: HomePage(), + ), + ), + ], + ), + ); + } +} + +class HomePage extends StatelessWidget { + const HomePage({super.key}); + + @override + Widget build(BuildContext context) { + final theme = AcmeTheme.of(context); + return ColoredBox( + color: theme.background, + child: Center( + child: AcmeButton.primary( + label: 'Continue', + onPressed: () {}, + ), + ), + ); + } +} +``` + +{/* tutorial-source: run-application */} + +```bash +flutter run -d chrome +``` + +![The default Continue button on a white surface](/assets/remix-cli-tutorial/first-render.jpg) + +You should see **Continue** centered in the app. Its callback is deliberately +empty at this stage. Keep this terminal open; use another terminal in the same +sample directory for the remaining CLI commands. + +## Build the settings screen + +Install the remaining recipes, one item per command: + +{/* tutorial-source: install-screen */} + +```bash +dart run remix_cli:remix add checkbox +dart run remix_cli:remix add textfield +dart run remix_cli:remix add dialog +dart run remix_cli:remix add card +dart run remix_cli:remix add sidebar +``` + +The existing theme is preserved. Sidebar also installs its `toggle` +dependency. Each command updates the barrel and generates the needed adapters. + +Download and unzip the [reviewed samples](/assets/remix-cli-tutorial/sample-projects.zip). +Copy `default_demo/lib/main.dart` into your application's `lib/main.dart`. +You can also read and copy the [complete source inline](/remix-cli-tutorial.html#compose). +Keep your CLI-installed `lib/ui` files; the next step changes one of them. + +The complete app owns the form values, save counter, loading flag, dialog +result, and sidebar selection. It uses `MaterialApp` as the navigation host. +Keep its host builder and scope placement together: the text field needs an +overlay, and the dialog needs the invoking context's navigator and text defaults. + +## Customize your recipe + +Open `lib/ui/components/button.dart`. In `_metricsFor`, change the medium +`minHeight` from `36.0` to `44.0`. Reload the app. All medium default buttons +should use the taller recipe, while the cyan preview button keeps its +instance-specific colors and rounded shape. + +![The application-owned recipe with minHeight set to 44.0](/assets/remix-cli-tutorial/recipe-edit.jpg) + +This changes a recipe value, not the generated widget signature. If you change +recipe parameters, enums, or annotations, regenerate the adapter as described +in the [customization reference](/remix-cli-guide.html#customize). + +## Check behavior and preserve edits + +1. Reload to reset local state. Enter **Launchpad Studio** as the workspace name. +2. Clear **Send a weekly summary**, then press **Save changes** twice while loading. +3. Confirm **Save count: 1** and **Summary: off** when the save completes. +4. Open and confirm the invitation dialog. Check that its result reaches the screen. +5. Change the sidebar selection and test the preview button's callback. + +![Saved form values with one completed save and summary off](/assets/remix-cli-tutorial/saved.jpg) + +Now compare your edited Button with its bundled recipe: + +{/* tutorial-source: diff-button */} + +```bash +dart run remix_cli:remix add button --diff +``` + +The diff's `current` side contains your `44.0` edit; `proposed` contains the +bundled `36.0`. The command does not replace your source. Repeat ordinary add: + +{/* tutorial-source: preserve-button */} + +```bash +dart run remix_cli:remix add button +``` + +Confirm the medium height remains `44.0`. `--overwrite` is an explicit +replacement operation; do not use it to inspect an update. See +[source-preservation details](/remix-cli-tutorial.html#preserve) before trying it. + +## Try Fortal separately + +Do not switch the default project's preset. From its directory, create a +second application: + +{/* tutorial-source: create-fortal */} + +```bash +cd .. +flutter create --empty --platforms=web remix_fortal_demo +cd remix_fortal_demo +``` + +Repeat the checkout override and CLI installation from the first step in this +new project. Then initialize Fortal and install its recipes: + +{/* tutorial-source: install-fortal */} + +```bash +dart run remix_cli:remix init --prefix Acme --preset fortal +dart run remix_cli:remix add button +dart run remix_cli:remix add checkbox +dart run remix_cli:remix add textfield +dart run remix_cli:remix add dialog +dart run remix_cli:remix add card +dart run remix_cli:remix add sidebar +``` + +Copy `fortal_demo/lib/main.dart` from the download to this app's `lib/main.dart`. +The Fortal example uses `AcmeScope` and `AcmeButton.solid`, rather than +`AcmeThemeScope` and `AcmeButton.primary`. Keep its complete host configuration. +Do not apply the default preset's Button metrics edit to Fortal. + +![The Fortal settings screen in dark mode](/assets/remix-cli-tutorial/fortal-dark.jpg) + +Fortal supplies a different theme and recipe vocabulary, not a second runtime +for your form. Repeat the same behavior checks. Neither preset adds a +`remix_fortal` package dependency to the consumer application. + +## Run the tests + +Copy `test/workflow_test.dart` from the matching downloaded project into each +sample. Keep the project names used above; the tests import those names. +Replace `analysis_options.yaml` with the reviewed configuration: + +{/* tutorial-source: analysis-options */} + +```yaml +include: package:flutter_lints/flutter.yaml + +analyzer: + exclude: + - lib/ui/**/*.g.dart +``` + +This excludes generated adapters from the pinned generator's lint findings, +not your authored recipes. Run from each sample directory: + +{/* tutorial-source: validate-sample */} + +```bash +flutter analyze +flutter test +flutter build web --release +``` + +Each sample has four tests covering form/save behavior, disabled controls, +callbacks, dialog results and text decoration, and sidebar selection. Fix +failures before treating a screenshot as evidence that the sample works. + +## Troubleshooting and evidence + +- **Pub cannot resolve beta.9:** check the absolute checkout path in `pubspec_overrides.yaml`. +- **Missing generated class:** inspect the add command's generation error and the recipe's `part` declaration. +- **Missing overlay or incorrect dialog text:** restore the complete sample's application host and scope placement. +- **No `primary` constructor:** use the default sample with `default`, or the `solid` constructor with `fortal`. + +See the [full troubleshooting table](/remix-cli-tutorial.html#troubleshoot) +and [Open Code reference](/open-code) for configuration and command details. + +Screenshots were captured from Flutter release web builds and an editor during +the September 7 review. They show desktop states, not certification of all +components or platforms. [Recorded evidence](/assets/remix-cli-tutorial/evidence.json) +tracks their hashes and source checkout. [Asset licenses](/assets/remix-cli-tutorial/README.md) +and the original offline HTML remain alongside this documentation. diff --git a/pubspec.yaml b/pubspec.yaml index 9867eb38..0ab85e39 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -197,4 +197,6 @@ melos: steps: - dart run tool/validate_docs.dart - dart run tool/generate_fortal_catalog.dart --check + - python3 tool/check_tutorial_assets.py + - python3 -m unittest discover -s tool -p 'test_tutorial_assets.py' description: Validate docs, reject retired APIs, and fail on catalog drift diff --git a/tool/check_tutorial_assets.py b/tool/check_tutorial_assets.py new file mode 100644 index 00000000..d1954bf3 --- /dev/null +++ b/tool/check_tutorial_assets.py @@ -0,0 +1,134 @@ +"""Check the tutorial's recorded assets and downloadable source without extraction. + +Run from any directory with Python 3; no third-party packages are required. +This verifies recorded evidence, not a fresh Flutter replay or visual review. +""" + +import hashlib +from html.parser import HTMLParser +import json +from pathlib import Path +import re +import zipfile + + +class TutorialCode(HTMLParser): + """Read literal pre/code blocks, decoding HTML entities once.""" + + def __init__(self): + super().__init__() + self.in_pre = False + self.language = None + self.text = [] + self.figure = None + self.blocks = {} + + def handle_starttag(self, tag, attrs): + if tag == "figure": + self.figure = dict(attrs).get("id") + if tag == "pre": + self.in_pre = True + if tag == "code" and self.in_pre: + classes = dict(attrs).get("class", "").split() + self.language = next( + (name.removeprefix("language-") for name in classes + if name.startswith("language-")), "text") + self.text = [] + + def handle_data(self, data): + if self.language is not None: + self.text.append(data) + + def handle_endtag(self, tag): + if tag == "code" and self.language is not None: + language = "text" if self.language == "none" else self.language + if self.figure: + self.blocks[self.figure] = (language, "".join(self.text)) + self.language = None + if tag == "pre": + self.in_pre = False + if tag == "figure": + self.figure = None + + +def check_assets(root): + assets = root / "docs/assets/remix-cli-tutorial" + evidence = json.loads((assets / "evidence.json").read_text()) + failures = [] + + def check(label, data, expected): + if hashlib.sha256(data).hexdigest() != expected: + failures.append(f"{label}: SHA-256 differs from evidence.json") + + for screenshot in evidence["screenshots"]: + data = (assets / screenshot["file"]).read_bytes() + check(screenshot["file"], data, screenshot["sha256"]) + if len(data) != screenshot["bytes"]: + failures.append(f"{screenshot['file']}: recorded size differs") + + archive = assets / "sample-projects.zip" + check(archive.name, archive.read_bytes(), evidence["archive_sha256"]) + with zipfile.ZipFile(archive) as samples: + for source in evidence["source"]: + prefix = source["preset"] + "_demo/" + for path, key in (("lib/main.dart", "main_sha256"), + ("test/workflow_test.dart", "test_sha256")): + check(prefix + path, samples.read(prefix + path), source[key]) + + return failures + + +def check_content(root): + failures = [] + offline = TutorialCode() + offline.feed((root / "docs/remix-cli-tutorial.html").read_text()) + native = root / "docs/tutorials/settings-screen.mdx" + source = native.read_text() + blocks = re.findall( + r"\{/\* tutorial-source: ([\w-]+) \*/\}\n\n```(\w+)\n([\s\S]*?)\n```", + source, + ) + if not blocks: + failures.append("Native tutorial has no checked code blocks") + if len(blocks) != len(re.findall(r"^```\w+", source, re.MULTILINE)): + failures.append("Every native tutorial code block needs a tutorial-source marker") + for block_id, language, code in blocks: + if offline.blocks.get(block_id) != (language, code): + failures.append(f"Native tutorial code block {block_id} differs from the offline tutorial") + + # The capture pin describes the evidence, not the latest branch head. + evidence = json.loads((root / "docs/assets/remix-cli-tutorial/evidence.json").read_text()) + # The first checkout command in the reviewed HTML is the reproducibility pin. + pin = re.search(r"git -C remix-review checkout ([a-f0-9]{40})", source) + if not pin or pin.group(1) != evidence["source_checkout"]: + failures.append("Native tutorial checkout pin differs from recorded evidence") + + for page in [native, root / "docs/index.mdx", root / "docs/getting-started.mdx", + root / "docs/guides/styling-components.mdx"]: + for href in re.findall(r"\]\((/[^)]+)\)", page.read_text()): + path = href.split("#", 1)[0].split("?", 1)[0] + target = root / "docs" / path.lstrip("/") + if path == "/": + target = target / "index.mdx" + elif not target.suffix: + target = target.with_suffix(".mdx") + if not target.is_file(): + failures.append(f"{page.relative_to(root)}: missing link target {href}") + elif target.suffix == ".html" and "#" in href: + anchor = href.split("#", 1)[1] + if anchor not in re.findall(r'\bid="([^"]+)"', target.read_text()): + failures.append(f"{page.relative_to(root)}: missing HTML anchor {href}") + return failures + + +def main(): + root = Path(__file__).resolve().parents[1] + failures = check_assets(root) + check_content(root) + + if failures: + raise SystemExit("Tutorial asset drift:\n" + "\n".join(failures)) + print("Tutorial assets, sample sources, native code excerpts, checkout pin, and content links passed.") + + +if __name__ == "__main__": + main() diff --git a/tool/test_tutorial_assets.py b/tool/test_tutorial_assets.py new file mode 100644 index 00000000..122e5595 --- /dev/null +++ b/tool/test_tutorial_assets.py @@ -0,0 +1,75 @@ +"""Regression tests for the recorded-evidence and documentation drift gate.""" + +import json +from pathlib import Path +import shutil +import tempfile +import unittest + +from check_tutorial_assets import check_assets, check_content, TutorialCode + + +class TutorialAssetTests(unittest.TestCase): + def setUp(self): + self.temp = tempfile.TemporaryDirectory() + self.addCleanup(self.temp.cleanup) + self.root = Path(self.temp.name) + source = Path(__file__).resolve().parents[1] + # Isolate mutations from the user's checkout and preserve real fixtures. + shutil.copytree(source / "docs", self.root / "docs") + + def test_reviewed_content_and_assets_pass(self): + self.assertEqual(check_assets(self.root) + check_content(self.root), []) + + def test_screenshot_corruption_fails(self): + assets = self.root / "docs/assets/remix-cli-tutorial" + evidence = json.loads((assets / "evidence.json").read_text()) + (assets / evidence["screenshots"][0]["file"]).write_bytes(b"changed") + self.assertTrue(any("SHA-256 differs" in error for error in check_assets(self.root))) + + def test_archived_source_hash_drift_fails(self): + path = self.root / "docs/assets/remix-cli-tutorial/evidence.json" + evidence = json.loads(path.read_text()) + evidence["source"][0]["main_sha256"] = "0" * 64 + path.write_text(json.dumps(evidence)) + self.assertTrue(any("main.dart" in error for error in check_assets(self.root))) + + def test_native_command_drift_fails(self): + path = self.root / "docs/tutorials/settings-screen.mdx" + path.write_text(path.read_text().replace("--dry-run", "--overwrite")) + self.assertTrue(any("code block" in error for error in check_content(self.root))) + + def test_missing_download_fails(self): + (self.root / "docs/assets/remix-cli-tutorial/sample-projects.zip").unlink() + self.assertTrue(any("sample-projects.zip" in error for error in check_content(self.root))) + + def test_no_excerpts_cannot_pass(self): + path = self.root / "docs/tutorials/settings-screen.mdx" + path.write_text("---\ntitle: Empty\n---\n") + self.assertTrue(any("no checked code blocks" in error for error in check_content(self.root))) + + def test_unmarked_excerpt_fails(self): + path = self.root / "docs/tutorials/settings-screen.mdx" + path.write_text(path.read_text().replace("{/* tutorial-source: preview-button */}", "")) + self.assertTrue(any("needs a tutorial-source marker" in error for error in check_content(self.root))) + + def test_capture_pin_drift_fails(self): + path = self.root / "docs/assets/remix-cli-tutorial/evidence.json" + evidence = json.loads(path.read_text()) + evidence["source_checkout"] = "0" * 40 + path.write_text(json.dumps(evidence)) + self.assertTrue(any("checkout pin" in error for error in check_content(self.root))) + + def test_broken_offline_section_fails(self): + path = self.root / "docs/tutorials/settings-screen.mdx" + path.write_text(path.read_text().replace(".html#compose", ".html#missing-section")) + self.assertTrue(any("missing HTML anchor" in error for error in check_content(self.root))) + + def test_parser_decodes_entities_and_keeps_literal_code(self): + parser = TutorialCode() + parser.feed('ignore
a < b && c
') + self.assertEqual(parser.blocks, {"example": ("dart", "a < b && c")}) + + +if __name__ == "__main__": + unittest.main() From eb4a121cf576d17106854c19e4661cdb8f964d17 Mon Sep 17 00:00:00 2001 From: Leo Farias Date: Wed, 9 Sep 2026 12:29:53 -0400 Subject: [PATCH 5/7] docs: migrate tutorial to shared Fumadocs app --- apps/docs/.gitignore | 7 + apps/docs/README.md | 58 + apps/docs/app/[[...slug]]/page.tsx | 25 + apps/docs/app/api/search/route.ts | 3 + apps/docs/app/global.css | 4 + apps/docs/app/layout.tsx | 16 + apps/docs/components/mdx.tsx | 22 + apps/docs/docs.config.ts | 15 + apps/docs/lib/source.ts | 9 + apps/docs/next.config.mjs | 12 + apps/docs/package.json | 35 + apps/docs/pnpm-lock.yaml | 3577 +++++++++++++++++ apps/docs/pnpm-workspace.yaml | 10 + apps/docs/postcss.config.mjs | 1 + apps/docs/tsconfig.json | 41 + docs/README.md | 27 +- docs/assets/remix-cli-tutorial/README.md | 58 +- .../remix-cli-tutorial/code-evidence.json | 66 + .../fonts/JetBrains-OFL.txt | 93 - .../remix-cli-tutorial/fonts/Plex-LICENSE.txt | 93 - .../fonts/jetbrains-mono.woff2 | Bin 31340 -> 0 bytes .../remix-cli-tutorial/fonts/plex-sans.woff2 | Bin 40240 -> 0 bytes docs/assets/remix-cli-tutorial/prism/LICENSE | 21 - .../assets/remix-cli-tutorial/prism/README.md | 8 - .../prism/prism-bash.min.js | 1 - .../prism/prism-clike.min.js | 1 - .../prism/prism-core.min.js | 1 - .../prism/prism-dart.min.js | 1 - .../prism/prism-diff.min.js | 1 - .../prism/prism-yaml.min.js | 1 - docs/assets/remix-cli-tutorial/tutorial.css | 968 ----- docs/assets/remix-cli-tutorial/tutorial.js | 73 - docs/remix-cli-guide.html | 2211 ---------- docs/remix-cli-tutorial.html | 1206 ------ docs/tutorials/settings-screen.mdx | 57 +- tool/check_tutorial_assets.py | 62 +- tool/prepare_docs_site.py | 59 + tool/test_tutorial_assets.py | 48 +- 38 files changed, 4095 insertions(+), 4796 deletions(-) create mode 100644 apps/docs/.gitignore create mode 100644 apps/docs/README.md create mode 100644 apps/docs/app/[[...slug]]/page.tsx create mode 100644 apps/docs/app/api/search/route.ts create mode 100644 apps/docs/app/global.css create mode 100644 apps/docs/app/layout.tsx create mode 100644 apps/docs/components/mdx.tsx create mode 100644 apps/docs/docs.config.ts create mode 100644 apps/docs/lib/source.ts create mode 100644 apps/docs/next.config.mjs create mode 100644 apps/docs/package.json create mode 100644 apps/docs/pnpm-lock.yaml create mode 100644 apps/docs/pnpm-workspace.yaml create mode 100644 apps/docs/postcss.config.mjs create mode 100644 apps/docs/tsconfig.json create mode 100644 docs/assets/remix-cli-tutorial/code-evidence.json delete mode 100644 docs/assets/remix-cli-tutorial/fonts/JetBrains-OFL.txt delete mode 100644 docs/assets/remix-cli-tutorial/fonts/Plex-LICENSE.txt delete mode 100644 docs/assets/remix-cli-tutorial/fonts/jetbrains-mono.woff2 delete mode 100644 docs/assets/remix-cli-tutorial/fonts/plex-sans.woff2 delete mode 100644 docs/assets/remix-cli-tutorial/prism/LICENSE delete mode 100644 docs/assets/remix-cli-tutorial/prism/README.md delete mode 100644 docs/assets/remix-cli-tutorial/prism/prism-bash.min.js delete mode 100644 docs/assets/remix-cli-tutorial/prism/prism-clike.min.js delete mode 100644 docs/assets/remix-cli-tutorial/prism/prism-core.min.js delete mode 100644 docs/assets/remix-cli-tutorial/prism/prism-dart.min.js delete mode 100644 docs/assets/remix-cli-tutorial/prism/prism-diff.min.js delete mode 100644 docs/assets/remix-cli-tutorial/prism/prism-yaml.min.js delete mode 100644 docs/assets/remix-cli-tutorial/tutorial.css delete mode 100644 docs/assets/remix-cli-tutorial/tutorial.js delete mode 100644 docs/remix-cli-guide.html delete mode 100644 docs/remix-cli-tutorial.html create mode 100644 tool/prepare_docs_site.py diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore new file mode 100644 index 00000000..e10d215a --- /dev/null +++ b/apps/docs/.gitignore @@ -0,0 +1,7 @@ +node_modules/ +.next/ +.source/ +.generated/ +public/assets/ +*.tsbuildinfo +next-env.d.ts diff --git a/apps/docs/README.md b/apps/docs/README.md new file mode 100644 index 00000000..a46cd660 --- /dev/null +++ b/apps/docs/README.md @@ -0,0 +1,58 @@ +# Remix Fumadocs app + +This app renders the canonical `../../docs` content with the shared Concepta +Fumadocs theme. It does not contain a second editable copy of the documentation. + +## Run + +Use Node 24.14+, pnpm 11.5.3, and Python 3.9+: + +```bash +cd apps/docs +pnpm install --frozen-lockfile +pnpm dev +``` + +Open `http://localhost:3000/tutorials/settings-screen`. Production checks: + +```bash +pnpm typecheck +pnpm build +pnpm start +``` + +Set `NEXT_PUBLIC_SITE_URL` to the deployment origin before building metadata. +This is a server deployment: `/api/search` uses the native Fumadocs endpoint. +Static export and deployment under a path prefix are not configured. + +## Theme access and release limitation + +The theme is not published on npm yet. `package.json` and the lockfile pin the +reviewed `conceptadev/docs-theme` commit +`57be8044beaf23c5414a671693b297615560095c`. pnpm fetches this GitHub dependency +over SSH and builds it; only this exact Git source is allowed to run scripts. +Installation requires GitHub access to that currently internal repository. +No theme source or credentials are vendored here. + +This is ready for authorized local development, not anonymous installation or +public CI. Once the theme's license and publication are resolved, replace the +Git dependency with its verified npm release, regenerate the lockfile, and +repeat the production/browser checks. Do not add a token to this repository +or bypass access controls to make the dependency resolve. + +## Content ownership + +Edit MDX and assets under `../../docs`; edit navigation in `../../docs.json`. +`pnpm content` validates evidence, stages generated MDX in `.generated/content`, +and copies assets into `public/assets`. These directories are disposable and +gitignored. Restart `pnpm dev` after editing canonical content to stage changes. + +`TutorialSource` is a build-time include, not a runtime React component. The +four source panels read the exact Dart files from the checked sample ZIP and +become native Fumadocs fenced blocks. Fumadocs owns highlighting, copying, +search, navigation, and responsive layout. The small MDX compatibility map +retains existing `Info`, `Note`, `Warning`, and single-example `CodeGroup` tags. + +The retired standalone tutorial and guide URLs redirect to their native MDX +replacements. Old HTML files and their renderer dependencies remain recoverable +from Git history, not shipped alongside the new app. diff --git a/apps/docs/app/[[...slug]]/page.tsx b/apps/docs/app/[[...slug]]/page.tsx new file mode 100644 index 00000000..affe57c3 --- /dev/null +++ b/apps/docs/app/[[...slug]]/page.tsx @@ -0,0 +1,25 @@ +import { createPageMetadata, createSourceUrl } from '@conceptadev/docs-theme'; +import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/layouts/docs/page'; +import { createRelativeLink } from 'fumadocs-ui/mdx'; +import { notFound } from 'next/navigation'; +import { getMDXComponents } from '@/components/mdx'; +import { docsConfig } from '@/docs.config'; +import { source } from '@/lib/source'; + +export default async function Page({ params }: PageProps<'/[[...slug]]'>) { + const page = source.getPage((await params).slug); + if (!page) notFound(); + const MDX = page.data.body; + return + {page.data.title} + {page.data.description} + + View page source + ; +} +export function generateStaticParams() { return source.generateParams(); } +export async function generateMetadata({ params }: PageProps<'/[[...slug]]'>) { + const page = source.getPage((await params).slug); + if (!page) notFound(); + return createPageMetadata(docsConfig, { title: page.data.title, description: page.data.description, path: page.url }); +} diff --git a/apps/docs/app/api/search/route.ts b/apps/docs/app/api/search/route.ts new file mode 100644 index 00000000..1716cb7b --- /dev/null +++ b/apps/docs/app/api/search/route.ts @@ -0,0 +1,3 @@ +import { createFromSource } from 'fumadocs-core/search/server'; +import { source } from '@/lib/source'; +export const { GET } = createFromSource(source); diff --git a/apps/docs/app/global.css b/apps/docs/app/global.css new file mode 100644 index 00000000..429c060e --- /dev/null +++ b/apps/docs/app/global.css @@ -0,0 +1,4 @@ +@import 'tailwindcss'; +@import 'fumadocs-ui/css/neutral.css'; +@import 'fumadocs-ui/css/preset.css'; +@import '@conceptadev/docs-theme/theme.css'; diff --git a/apps/docs/app/layout.tsx b/apps/docs/app/layout.tsx new file mode 100644 index 00000000..80117f91 --- /dev/null +++ b/apps/docs/app/layout.tsx @@ -0,0 +1,16 @@ +import { createSiteMetadata, createBaseLayoutOptions } from '@conceptadev/docs-theme'; +import { DocsLayout } from 'fumadocs-ui/layouts/docs'; +import { RootProvider } from 'fumadocs-ui/provider/next'; +import type { ReactNode } from 'react'; +import { docsConfig } from '@/docs.config'; +import { source } from '@/lib/source'; +import './global.css'; + +export const metadata = createSiteMetadata(docsConfig); +export default function RootLayout({ children }: { children: ReactNode }) { + return + + {children} + + ; +} diff --git a/apps/docs/components/mdx.tsx b/apps/docs/components/mdx.tsx new file mode 100644 index 00000000..4d301f35 --- /dev/null +++ b/apps/docs/components/mdx.tsx @@ -0,0 +1,22 @@ +import { getConceptaMDXComponents } from '@conceptadev/docs-theme/mdx'; +import { Callout } from 'fumadocs-ui/components/callout'; +import type { ReactNode } from 'react'; +import type { MDXComponents } from 'mdx/types'; + +// Existing content uses these names. Fumadocs still owns the code blocks, +// highlighting, copy controls, and callout presentation. +function CodeGroup({ title, children }: { title?: string; defaultLanguage?: string; children: ReactNode }) { + return
{title ?

{title}

: null}{children}
; +} + +export function getMDXComponents(overrides?: MDXComponents) { + return getConceptaMDXComponents({ + CodeGroup, + Info: ({ children }: { children: ReactNode }) => {children}, + Note: ({ children }: { children: ReactNode }) => {children}, + Warning: ({ children }: { children: ReactNode }) => {children}, + ...overrides, + }); +} +export const useMDXComponents = getMDXComponents; +declare global { type MDXProvidedComponents = ReturnType; } diff --git a/apps/docs/docs.config.ts b/apps/docs/docs.config.ts new file mode 100644 index 00000000..2062123c --- /dev/null +++ b/apps/docs/docs.config.ts @@ -0,0 +1,15 @@ +import { defineDocsConfig } from '@conceptadev/docs-theme'; + +export const docsConfig = defineDocsConfig({ + organization: { name: 'Concepta', homeUrl: 'https://concepta.dev' }, + site: { + title: 'Remix Documentation', + description: 'Flutter components, application-owned recipes, and working examples.', + url: process.env.NEXT_PUBLIC_SITE_URL ?? 'http://localhost:3000', + docsPath: '/', + }, + project: { + id: 'remix', name: 'Remix', docsUrl: '/', + repository: { url: 'https://github.com/conceptadev/remix', branch: 'main', contentPath: 'docs' }, + }, +}); diff --git a/apps/docs/lib/source.ts b/apps/docs/lib/source.ts new file mode 100644 index 00000000..ec1a6ca3 --- /dev/null +++ b/apps/docs/lib/source.ts @@ -0,0 +1,9 @@ +import { loader } from 'fumadocs-core/source'; +import { defineDocs } from 'fumadocs-mdx/macro'; + +const docs = defineDocs({ + dir: '.generated/content', + docs: { postprocess: { includeProcessedMarkdown: true } }, +}); + +export const source = loader({ baseUrl: '/', source: docs.toFumadocsSource() }); diff --git a/apps/docs/next.config.mjs b/apps/docs/next.config.mjs new file mode 100644 index 00000000..d2be6f73 --- /dev/null +++ b/apps/docs/next.config.mjs @@ -0,0 +1,12 @@ +import { createMDX } from 'fumadocs-mdx/next'; + +export default createMDX()({ + reactStrictMode: true, + transpilePackages: ['@conceptadev/docs-theme'], + async redirects() { + return [ + { source: '/remix-cli-tutorial.html', destination: '/tutorials/settings-screen', permanent: true }, + { source: '/remix-cli-guide.html', destination: '/open-code', permanent: true }, + ]; + }, +}); diff --git a/apps/docs/package.json b/apps/docs/package.json new file mode 100644 index 00000000..91ebc5aa --- /dev/null +++ b/apps/docs/package.json @@ -0,0 +1,35 @@ +{ + "name": "@conceptadev/remix-docs", + "private": true, + "type": "module", + "packageManager": "pnpm@11.5.3", + "engines": { "node": ">=24.14.0" }, + "scripts": { + "content": "python3 ../../tool/prepare_docs_site.py", + "dev": "pnpm content && next dev", + "build": "pnpm content && next build", + "typecheck": "pnpm content && next typegen && tsc --noEmit", + "start": "next start" + }, + "dependencies": { + "@conceptadev/docs-theme": "git+https://github.com/conceptadev/docs-theme.git#57be8044beaf23c5414a671693b297615560095c", + "@base-ui/react": "1.7.0", + "fumadocs-core": "16.15.8", + "fumadocs-mdx": "15.4.0", + "fumadocs-ui": "npm:@fumadocs/base-ui@16.15.8", + "next": "16.3.4", + "react": "19.2.8", + "react-dom": "19.2.8", + "zod": "4.4.3" + }, + "devDependencies": { + "@tailwindcss/postcss": "4.3.3", + "@types/mdx": "2.0.14", + "@types/node": "26.3.0", + "@types/react": "19.2.18", + "@types/react-dom": "19.2.5", + "postcss": "8.5.26", + "tailwindcss": "4.3.3", + "typescript": "6.0.3" + } +} diff --git a/apps/docs/pnpm-lock.yaml b/apps/docs/pnpm-lock.yaml new file mode 100644 index 00000000..8374c6ad --- /dev/null +++ b/apps/docs/pnpm-lock.yaml @@ -0,0 +1,3577 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@base-ui/react': + specifier: 1.7.0 + version: 1.7.0(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@conceptadev/docs-theme': + specifier: git+https://github.com/conceptadev/docs-theme.git#57be8044beaf23c5414a671693b297615560095c + version: git+ssh://git@github.com/conceptadev/docs-theme.git#57be8044beaf23c5414a671693b297615560095c(@fumadocs/base-ui@16.15.8(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.15.8(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3))(@types/mdx@2.0.14)(fumadocs-core@16.15.8(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + fumadocs-core: + specifier: 16.15.8 + version: 16.15.8(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3) + fumadocs-mdx: + specifier: 15.4.0 + version: 15.4.0(@types/mdast@4.0.4)(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.15.8(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8) + fumadocs-ui: + specifier: npm:@fumadocs/base-ui@16.15.8 + version: '@fumadocs/base-ui@16.15.8(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.15.8(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3)' + next: + specifier: 16.3.4 + version: 16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: + specifier: 19.2.8 + version: 19.2.8 + react-dom: + specifier: 19.2.8 + version: 19.2.8(react@19.2.8) + zod: + specifier: 4.4.3 + version: 4.4.3 + devDependencies: + '@tailwindcss/postcss': + specifier: 4.3.3 + version: 4.3.3 + '@types/mdx': + specifier: 2.0.14 + version: 2.0.14 + '@types/node': + specifier: 26.3.0 + version: 26.3.0 + '@types/react': + specifier: 19.2.18 + version: 19.2.18 + '@types/react-dom': + specifier: 19.2.5 + version: 19.2.5(@types/react@19.2.18) + postcss: + specifier: 8.5.26 + version: 8.5.26 + tailwindcss: + specifier: 4.3.3 + version: 4.3.3 + typescript: + specifier: 6.0.3 + version: 6.0.3 + +packages: + + '@alloc/quick-lru@5.3.0': + resolution: {integrity: sha512-U4+70Pc5ZS9osnCBCE5Jha/ciHM+Yp+CNMNC/7HvYbNRk1Ldd+f7qO65W5qfhu/TCv+/ozljlXXe9Nj8419DMA==} + engines: {node: '>=10'} + + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} + engines: {node: '>=6.9.0'} + + '@base-ui/react@1.7.0': + resolution: {integrity: sha512-j+8QjX44C32jrXD/qyEAGpFr70FRpGL2CY61mQd9nBPWN737CK0xxD1ceJ055rW4RtdvFDT1e7otzdlfxvsYug==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@date-fns/tz': ^1.2.0 + '@types/react': ^17 || ^18 || ^19 + date-fns: ^4.0.0 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@date-fns/tz': + optional: true + '@types/react': + optional: true + date-fns: + optional: true + + '@base-ui/utils@0.3.2': + resolution: {integrity: sha512-oWy1aq/I2GmYjpl4PhEAhzflF8VPGKgZeq0xAWTbfD5KBWyxcN0ZP2+WHSUm/5Z6lVMBDLReLcoXwSYoRc/zNQ==} + peerDependencies: + '@types/react': ^17 || ^18 || ^19 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@types/react': + optional: true + + '@conceptadev/docs-theme@git+ssh://git@github.com/conceptadev/docs-theme.git#57be8044beaf23c5414a671693b297615560095c': + resolution: {commit: 57be8044beaf23c5414a671693b297615560095c, repo: git@github.com:conceptadev/docs-theme.git, type: git} + version: 0.0.1 + engines: {node: '>=24.14.0'} + peerDependencies: + '@types/mdx': '>=2' + fumadocs-core: '>=16.15.8 <17' + fumadocs-ui: '>=16.15.8 <17' + next: '>=16.3.4 <17' + react: '>=19.2.0 <20' + react-dom: '>=19.2.0 <20' + + '@emnapi/runtime@1.11.3': + resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} + + '@esbuild/aix-ppc64@0.28.2': + resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.28.2': + resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.28.2': + resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.28.2': + resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.28.2': + resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.28.2': + resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.28.2': + resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.28.2': + resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.28.2': + resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.28.2': + resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.28.2': + resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.28.2': + resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.28.2': + resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.28.2': + resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.28.2': + resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.28.2': + resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.28.2': + resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.28.2': + resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.28.2': + resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.28.2': + resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.28.2': + resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.28.2': + resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.28.2': + resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.28.2': + resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.28.2': + resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.28.2': + resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@floating-ui/core@1.8.0': + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} + + '@floating-ui/dom@1.8.0': + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} + + '@floating-ui/react-dom@2.1.9': + resolution: {integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.12': + resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} + + '@fuma-translate/react@1.0.2': + resolution: {integrity: sha512-uOiOtBx3nRXR8Nu1GzBf1tApgF1FErDBTHxRIAQeyQdyOoZbrNRN6H4kDCWObY4qyGeGbHydG0DHzgeUgFDMIw==} + peerDependencies: + '@types/react': '*' + react: ^19.2.0 + react-dom: ^19.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@fumadocs/base-ui@16.15.8': + resolution: {integrity: sha512-zbtEwDIDnbGqCu3ZbyaAAQG8Pxvh/cMfFzH8mtuKjn4QQEPw3tggelElzftOxD8vKy9QdDGHzvmUfVX71U+/LQ==} + peerDependencies: + '@types/mdx': '*' + '@types/react': '*' + fumadocs-core: 16.15.8 + next: 16.x.x + react: ^19.2.0 + react-dom: ^19.2.0 + takumi-js: '*' + peerDependenciesMeta: + '@types/mdx': + optional: true + '@types/react': + optional: true + next: + optional: true + takumi-js: + optional: true + + '@fumadocs/tailwind@0.1.1': + resolution: {integrity: sha512-BnPe52UxSaG8yKlHMKBxXw8h6GpK5qO55ci6+Qd5JnquTvIw6SpfbC1P+qAi82PuPWv1KZAWY8bxRk4+x9ctXw==} + peerDependencies: + tailwindcss: ^4.0.0 + peerDependenciesMeta: + tailwindcss: + optional: true + + '@fumari/image-size@0.1.0': + resolution: {integrity: sha512-x2o9u6P8uKUK15B8XgEoRhR3PgLoLSbQKK6FUCd14JzumEw+e8FXZPelij/dZ4VQVMp4r61VD3DcvSo3aEhLAA==} + + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.35.4': + resolution: {integrity: sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.35.4': + resolution: {integrity: sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [darwin] + + '@img/sharp-freebsd-wasm32@0.35.4': + resolution: {integrity: sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA==} + engines: {node: '>=20.9.0'} + os: [freebsd] + + '@img/sharp-libvips-darwin-arm64@1.3.3': + resolution: {integrity: sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.3.3': + resolution: {integrity: sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.3.3': + resolution: {integrity: sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.3.3': + resolution: {integrity: sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.3.3': + resolution: {integrity: sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-riscv64@1.3.3': + resolution: {integrity: sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.3.3': + resolution: {integrity: sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.3.3': + resolution: {integrity: sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linuxmusl-arm64@1.3.3': + resolution: {integrity: sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.3.3': + resolution: {integrity: sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-linux-arm64@0.35.4': + resolution: {integrity: sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.35.4': + resolution: {integrity: sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A==} + engines: {node: '>=20.9.0'} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-ppc64@0.35.4': + resolution: {integrity: sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ==} + engines: {node: '>=20.9.0'} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-riscv64@0.35.4': + resolution: {integrity: sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA==} + engines: {node: '>=20.9.0'} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.35.4': + resolution: {integrity: sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ==} + engines: {node: '>=20.9.0'} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.35.4': + resolution: {integrity: sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linuxmusl-arm64@0.35.4': + resolution: {integrity: sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-x64@0.35.4': + resolution: {integrity: sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.35.4': + resolution: {integrity: sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==} + engines: {node: '>=20.9.0'} + + '@img/sharp-webcontainers-wasm32@0.35.4': + resolution: {integrity: sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA==} + engines: {node: '>=20.9.0'} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.35.4': + resolution: {integrity: sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.35.4': + resolution: {integrity: sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw==} + engines: {node: ^20.9.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.35.4': + resolution: {integrity: sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [win32] + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.6.0': + resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + + '@next/env@16.3.4': + resolution: {integrity: sha512-cjWZnUUa6jZq2kFaNe/ZyJdZonOZ/QoN0Zka2nz/FLOrfx14pQuM9c5RaSVkWMqgdt4ksgPAMWPyHSs/CyV48Q==} + + '@next/swc-darwin-arm64@16.3.4': + resolution: {integrity: sha512-iBr3I5LZNk5/bgl5//iTgD2tcym14MX0Xo7fD//u9dYAEgGzza1y9oywluPtf74YnOswVdH1908aK9xVz7zQTw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@16.3.4': + resolution: {integrity: sha512-2dpiSyl2Jw/NrBPaU2MAKGSa+2MR82pJIn4Sm5Rjr+gxAeuh0z158Su3Z2O8zn7UNNq+ej4bToed6RcRN/Lydg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@16.3.4': + resolution: {integrity: sha512-+t+U8HZT+fApePCS5h89CSH3datz29MkzyfCn+6fpsZBG/oiEOhINcb9rtkv6sdpToLGFn2e6146NzaKCXkqrA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-arm64-musl@16.3.4': + resolution: {integrity: sha512-mx03GNs1ocQA5JQ4FxDMmIsNkdrZh8cuezKCrId28e5/gIPU/l7Kcy2+vmCCzdjnnmXJy+iOAu+7K0QppO6Urg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@next/swc-linux-x64-gnu@16.3.4': + resolution: {integrity: sha512-YIhGY6fSMfha52bnVxnzc9zaVBzJg+cqQTOD8tXIBSx4fuv0pVMxQTE0PaS59YhnMOiYiG09IMwxJAf/CFm/Dw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-x64-musl@16.3.4': + resolution: {integrity: sha512-+eaaX6axpDb0yF1GCpiERe6njplvdC+nks/fKfcHu3XPGRrald8P3/X7yv7QLdjA51knnxwl9pxdIJsg+w1L+Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@next/swc-win32-arm64-msvc@16.3.4': + resolution: {integrity: sha512-0jcXW7Xs/uzICrmgV3MhDYDeRy++1CqnpDIerlPIqYO4bhzB4WNbX/aRnQclustsAyTkFKB0z6rbcjmNg5tR8A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@16.3.4': + resolution: {integrity: sha512-vvBzwu1pYQCp92maZCFCIw/XgOTMR5tur9GjakwIo2cmwRTMKajRZZDS9+e4KsUZWKu1E007WUeAFXRRjZeuzw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@shikijs/core@4.4.3': + resolution: {integrity: sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg==} + engines: {node: '>=20'} + + '@shikijs/engine-javascript@4.4.3': + resolution: {integrity: sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ==} + engines: {node: '>=20'} + + '@shikijs/engine-oniguruma@4.4.3': + resolution: {integrity: sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w==} + engines: {node: '>=20'} + + '@shikijs/langs@4.4.3': + resolution: {integrity: sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A==} + engines: {node: '>=20'} + + '@shikijs/primitive@4.4.3': + resolution: {integrity: sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ==} + engines: {node: '>=20'} + + '@shikijs/themes@4.4.3': + resolution: {integrity: sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw==} + engines: {node: '>=20'} + + '@shikijs/types@4.4.3': + resolution: {integrity: sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g==} + engines: {node: '>=20'} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@swc/helpers@0.5.23': + resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} + + '@tailwindcss/node@4.3.3': + resolution: {integrity: sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==} + + '@tailwindcss/oxide-android-arm64@4.3.3': + resolution: {integrity: sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.3.3': + resolution: {integrity: sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.3.3': + resolution: {integrity: sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.3.3': + resolution: {integrity: sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + resolution: {integrity: sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + resolution: {integrity: sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + resolution: {integrity: sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + resolution: {integrity: sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-x64-musl@4.3.3': + resolution: {integrity: sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-wasm32-wasi@4.3.3': + resolution: {integrity: sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + resolution: {integrity: sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + resolution: {integrity: sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.3.3': + resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==} + engines: {node: '>= 20'} + + '@tailwindcss/postcss@4.3.3': + resolution: {integrity: sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==} + + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdx@2.0.14': + resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/node@26.3.0': + resolution: {integrity: sha512-L3fgrnchriRC2ExBflb8j4uZZURHZfQsmQeyVzhjcHW4kkwVyo8/0h1B2MVzMTrYUJYu6G7EWs14hW/L9putqw==} + + '@types/react-dom@19.2.5': + resolution: {integrity: sha512-fMPwH9v7r/pp43yUd2/Mbiex5KouJwwR3dzHkhLREUC6764VyDsqxhAxv6OFEYR1RhjOyD1naqba8ECDBe7ZQg==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.18': + resolution: {integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@ungap/structured-clone@1.4.0': + resolution: {integrity: sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==} + + '@yuku-analyzer/binding-android-arm64@0.9.5': + resolution: {integrity: sha512-Rvr0/EkPfPgc0C1wx8dz4bv6o4I4yeYI06tcHUL0f4ZdwSyIreABoLHNW51Ap0VNA7aDRVQ4izRNQh/LuykofA==} + cpu: [arm64] + os: [android] + + '@yuku-analyzer/binding-darwin-arm64@0.9.5': + resolution: {integrity: sha512-sh9DaXzkVmedM9aWvjCAAluRtvz/trk5VSosF7dPhqDf3IhrJW2DOh9iuA+YQzWSktP/ILsKfKili2UZ/ZjRzw==} + cpu: [arm64] + os: [darwin] + + '@yuku-analyzer/binding-darwin-x64@0.9.5': + resolution: {integrity: sha512-qPKyWlGK92vjwwFdAKwGkfqF3rye4UR8X2WPvzhOSt/plATd2pPJFyMBhF1aclRMBNbk20YnctWYRYLS8FBgAg==} + cpu: [x64] + os: [darwin] + + '@yuku-analyzer/binding-freebsd-x64@0.9.5': + resolution: {integrity: sha512-LeSbxDQ7k0WFyddM3BiFW3i55eSkWwi4hgG8PmqNBGL9dZ4sysYOwcy3We8vyxc/fyhuhc0CYxa6p6v14+UBow==} + cpu: [x64] + os: [freebsd] + + '@yuku-analyzer/binding-linux-arm-gnu@0.9.5': + resolution: {integrity: sha512-GVtm5UmUhKMnicVz/Q4QgRr7OFyvxDrr7j9u0Mrgnisj/GmABhcFhzqVwW+rbS+EFnUHY7yIamwY2Fc3CoCTCw==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@yuku-analyzer/binding-linux-arm-musl@0.9.5': + resolution: {integrity: sha512-c/9lCWXRwp0eaAvbTZslrplIjaLhiFCdc5bF/hCV13HrYYyICSwEcCgx3/OEEpwfHpdQsqejhsntUKc/0Ylbfg==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@yuku-analyzer/binding-linux-arm64-gnu@0.9.5': + resolution: {integrity: sha512-BwZYDPfnuP9gh8KphdjClzN3XRV0smbc2nNGkxvSOEYB/uRW0e+S2Jh82QKMSCK5TptQfovmFWe55Z5lToLAfA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@yuku-analyzer/binding-linux-arm64-musl@0.9.5': + resolution: {integrity: sha512-xglOsssSkPQGwendJdWud5maVWoM6h5SwlouStfg0eUACjxV8uLvnub2NT+euQJQMVzH3aRc5RuPPqzvMFeDTA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@yuku-analyzer/binding-linux-x64-gnu@0.9.5': + resolution: {integrity: sha512-X7J/LWSnNsyx1E4hv6CFofXQft4GMePfc4pDn00B4lG6BO3HNR/zGlYZ5ayQsxhRNLxtAlvSFSaguaSuyz6p6g==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@yuku-analyzer/binding-linux-x64-musl@0.9.5': + resolution: {integrity: sha512-gmi9vazzSs4PLpHjgkFLPGCDMzG7ths3mcip0qZEHhLwLJthH5PTA+LYKi+7FRKHNQT4A50RTVox5CjdUC+prw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@yuku-analyzer/binding-win32-arm64@0.9.5': + resolution: {integrity: sha512-0iKC5sGOCrFqumzSHLv2qCQa0OTytK605dSJrdHah5CoLT13oStEfk3jwNltYB77J3BiSagg896d5YmTY8HQPA==} + cpu: [arm64] + os: [win32] + + '@yuku-analyzer/binding-win32-x64@0.9.5': + resolution: {integrity: sha512-dSb5o6D9JugPmKRsjVLDLpgHRdSd1oCvNhY6AP6+OCzMwn0kbiNxhf2DwXYtt4xIBjliYQnw+ZsvIy1d0lHtSg==} + cpu: [x64] + os: [win32] + + '@yuku-toolchain/types@0.9.5': + resolution: {integrity: sha512-KiuLNNgX9uNealaWAR+G3/cMXnRk9x4TY2EkYe/KIag+UPdwiA0RRf1hr1WAxzTP8KGzCTkqUdLPvqh32sEO3w==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.18.0: + resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==} + engines: {node: '>=0.4.0'} + hasBin: true + + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + baseline-browser-mapping@2.11.21: + resolution: {integrity: sha512-uh8vpY/1/YyFkunIDFH/12p7/7VdPKA1hejMVEbdkEaWnUz0Hesvx5EbiU6XxjyHZIOju+ZMbQJkRh+es3/spQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + caniuse-lite@1.0.30001810: + resolution: {integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + cn@0.2.6: + resolution: {integrity: sha512-+i4L0zUGgRcEnhsxueVrP7iBGxBx5iD0WOTYg1MwFEu2ZyCmH5Ov2V1cul2Ht5UchRQQgftCf4be/RxspuW6QQ==} + engines: {node: '>=20'} + hasBin: true + + collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + compute-scroll-into-view@3.1.1: + resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + enhanced-resolve@5.24.5: + resolution: {integrity: sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==} + engines: {node: '>=10.13.0'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + + esbuild@0.28.2: + resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} + engines: {node: '>=18'} + hasBin: true + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + + estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + estree-util-scope@1.0.1: + resolution: {integrity: sha512-B0np3dcdxqILX5e9nEi5/Fr4K7gL4oYFVPV1zRa2e9wRCbQoZZNWOZFYyoInvXUPJXBXjss+QXlWLJChDEHDkA==} + + estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + + estree-util-value-to-estree@3.5.0: + resolution: {integrity: sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==} + + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + framer-motion@13.2.0: + resolution: {integrity: sha512-9E33ebgMaO33w1nN/jEdW8z3/GO483fMi4rqbMG9rt83XgW9QLKRe4NcmJ8s+fQ3O34++UHrIQwlIWGIWTITjA==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + fumadocs-core@16.15.8: + resolution: {integrity: sha512-becV45sD2Mki57WgICAocwp0ufvydy3nj+AWIBnik7Im00MrAx81DW9a6lIa94NDSHGLZFNfDMdaNeHuUuya/A==} + peerDependencies: + '@mdx-js/mdx': '*' + '@mixedbread/sdk': 0.x.x + '@orama/core': 1.x.x + '@oramacloud/client': 2.x.x + '@tanstack/react-router': 1.x.x + '@types/estree-jsx': '*' + '@types/hast': '*' + '@types/mdast': '*' + '@types/react': '*' + algoliasearch: 5.x.x + flexsearch: '*' + lucide-react: '*' + next: 16.x.x + react: ^19.2.0 + react-dom: ^19.2.0 + react-router: 7.x.x || 8.x.x + waku: '*' + zod: 4.x.x + peerDependenciesMeta: + '@mdx-js/mdx': + optional: true + '@mixedbread/sdk': + optional: true + '@orama/core': + optional: true + '@oramacloud/client': + optional: true + '@tanstack/react-router': + optional: true + '@types/estree-jsx': + optional: true + '@types/hast': + optional: true + '@types/mdast': + optional: true + '@types/react': + optional: true + algoliasearch: + optional: true + flexsearch: + optional: true + lucide-react: + optional: true + next: + optional: true + react: + optional: true + react-dom: + optional: true + react-router: + optional: true + waku: + optional: true + zod: + optional: true + + fumadocs-mdx@15.4.0: + resolution: {integrity: sha512-bJCQfsckKUQ4x2pyz8OdASEAARVMB49kOej7njaJ3t+tYsP1HnwkmqiO8e/jdQHcv6JH3XkXWidTho3ZC/WBcA==} + hasBin: true + peerDependencies: + '@fumadocs/satteri': 0.x.x + '@types/mdast': '*' + '@types/mdx': '*' + '@types/react': '*' + fumadocs-core: ^16.15.3 + mdast-util-directive: '*' + next: ^15.3.0 || ^16.0.0 + react: ^19.2.0 + rolldown: '*' + satteri: ^0.10.5 + vite: 7.x.x || 8.x.x + peerDependenciesMeta: + '@fumadocs/satteri': + optional: true + '@types/mdast': + optional: true + '@types/mdx': + optional: true + '@types/react': + optional: true + mdast-util-directive: + optional: true + next: + optional: true + react: + optional: true + rolldown: + optional: true + satteri: + optional: true + vite: + optional: true + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + + hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + + hast-util-to-parse5@8.0.1: + resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + lucide-react@1.43.0: + resolution: {integrity: sha512-ubtnda1fVK5ky0PNEpOmB0wiwhpZUyJiol4K14KCm+QKvuCkfUu54Et/rIjyupJpwiJ5Hg+BLQE86/GEsS+IgQ==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + magic-string@1.2.3: + resolution: {integrity: sha512-Bpb0W2TbLKOZ7vJnOUnVRGq3WL2p+ISV29M6hYPL1AFCpyKZpdr5ytiXoTSSxRVhg8YW7f65+6gbG8WG6PCa/g==} + + markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + + motion-dom@13.2.0: + resolution: {integrity: sha512-N6gdSoWRDk0Rh/fVtlqUtLs+fEN3ELFZI3cn3IQE9Mnf3E+Mh8wjO6MstzCOPFh4Yf0L1as5m2eUyYWj8ylVSQ==} + + motion-utils@13.0.0: + resolution: {integrity: sha512-7DnN7TmbLcYXcG4RVadXIihWlyuM9afoUww8Y5Agg431kGKiuL2/OMyP4mJ5wLz+pvN3t5ySClLOaVXJ+wekRQ==} + + motion@13.2.0: + resolution: {integrity: sha512-4Hrb5vD6HhjFstLUiCmWvtpsw+WTpP4R+QXfSDYZBz7+uxE/LrRg3aV0ReJxHrTRffHhbIE6svEqnotngXvesQ==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.18: + resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + + next@16.3.4: + resolution: {integrity: sha512-/Ztf6CeRH+ejEXUrYtqI4gkS66eFIHuSwqi60RgcpWKodxFZx2/dqVCMKBwILfAHXQ+F1b1vAudgj3mnxqtoIA==} + engines: {node: '>=20.9.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + npm-to-yarn@3.2.0: + resolution: {integrity: sha512-K1HmQeZT2HrjpsR6KgqbN2FAXL2NrJJmNUSD9ck7HGTVu1JKXox8n9SB+tjbU8m8JGLF4OscrroPepew/L7/Xw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + oniguruma-parser@0.12.2: + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} + + oniguruma-to-es@4.3.6: + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + + postcss@8.5.23: + resolution: {integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.26: + resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} + engines: {node: ^10 || ^12 || >=14} + + property-information@7.2.0: + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} + + react-dom@19.2.8: + resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==} + peerDependencies: + react: ^19.2.8 + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.7.2: + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react@19.2.8: + resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==} + engines: {node: '>=0.10.0'} + + readdirp@5.1.1: + resolution: {integrity: sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==} + engines: {node: '>= 20.19.0'} + + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + remark@15.0.1: + resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} + + reselect@5.3.0: + resolution: {integrity: sha512-XGoLeRAVzUTcJ1qkxPQhDJyIZ5d6zzZD9nT7AEZOaaU9UbWclhycElmhO+VD5bFeLuzhPBaOV2oXC8uG35ZSpg==} + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + sharp@0.35.4: + resolution: {integrity: sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==} + engines: {node: '>=20.9.0'} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + shiki@4.4.3: + resolution: {integrity: sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==} + engines: {node: '>=20'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} + + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + tailwindcss@4.3.3: + resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==} + + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + + tinyexec@1.3.1: + resolution: {integrity: sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==} + engines: {node: '>=18'} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@8.3.0: + resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + + yuku-analyzer@0.9.5: + resolution: {integrity: sha512-wUPmylpfXlJAIOQ6F73kPbWii7LEeyPWx++NWlJ+6NihQbO/D1YeQQjMY4Lwqg2o1RKDCHQqBfgc4ZLs0eYs5A==} + + yuku-ast@0.9.5: + resolution: {integrity: sha512-Q8qW8WwQnN5Cm0ZZivdRIfv0sRLTjUq0YumXJkw8CYN1aCdICH9rk4C47/4n6kA5EqDtlj+F608twoTSV2MwdQ==} + + zbsearch@4.0.0: + resolution: {integrity: sha512-gm4zfO31n2ZdruTTRQoWVWO4Q2+zrDt2GlrvIc+5JulRQNAm4IanCxER82vQ7Ug96FYkGqWUJBXFe1kGAcDWaQ==} + engines: {node: '>= 20.0.0'} + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@alloc/quick-lru@5.3.0': {} + + '@babel/runtime@7.29.7': {} + + '@base-ui/react@1.7.0(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@babel/runtime': 7.29.7 + '@base-ui/utils': 0.3.2(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@floating-ui/react-dom': 2.1.9(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@floating-ui/utils': 0.2.12 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + use-sync-external-store: 1.6.0(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + + '@base-ui/utils@0.3.2(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@babel/runtime': 7.29.7 + '@floating-ui/utils': 0.2.12 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + reselect: 5.3.0 + use-sync-external-store: 1.6.0(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + + ? '@conceptadev/docs-theme@git+ssh://git@github.com/conceptadev/docs-theme.git#57be8044beaf23c5414a671693b297615560095c(@fumadocs/base-ui@16.15.8(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.15.8(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3))(@types/mdx@2.0.14)(fumadocs-core@16.15.8(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)' + : dependencies: + '@types/mdx': 2.0.14 + fumadocs-core: 16.15.8(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3) + fumadocs-ui: '@fumadocs/base-ui@16.15.8(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.15.8(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3)' + next: 16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + '@emnapi/runtime@1.11.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.28.2': + optional: true + + '@esbuild/android-arm64@0.28.2': + optional: true + + '@esbuild/android-arm@0.28.2': + optional: true + + '@esbuild/android-x64@0.28.2': + optional: true + + '@esbuild/darwin-arm64@0.28.2': + optional: true + + '@esbuild/darwin-x64@0.28.2': + optional: true + + '@esbuild/freebsd-arm64@0.28.2': + optional: true + + '@esbuild/freebsd-x64@0.28.2': + optional: true + + '@esbuild/linux-arm64@0.28.2': + optional: true + + '@esbuild/linux-arm@0.28.2': + optional: true + + '@esbuild/linux-ia32@0.28.2': + optional: true + + '@esbuild/linux-loong64@0.28.2': + optional: true + + '@esbuild/linux-mips64el@0.28.2': + optional: true + + '@esbuild/linux-ppc64@0.28.2': + optional: true + + '@esbuild/linux-riscv64@0.28.2': + optional: true + + '@esbuild/linux-s390x@0.28.2': + optional: true + + '@esbuild/linux-x64@0.28.2': + optional: true + + '@esbuild/netbsd-arm64@0.28.2': + optional: true + + '@esbuild/netbsd-x64@0.28.2': + optional: true + + '@esbuild/openbsd-arm64@0.28.2': + optional: true + + '@esbuild/openbsd-x64@0.28.2': + optional: true + + '@esbuild/openharmony-arm64@0.28.2': + optional: true + + '@esbuild/sunos-x64@0.28.2': + optional: true + + '@esbuild/win32-arm64@0.28.2': + optional: true + + '@esbuild/win32-ia32@0.28.2': + optional: true + + '@esbuild/win32-x64@0.28.2': + optional: true + + '@floating-ui/core@1.8.0': + dependencies: + '@floating-ui/utils': 0.2.12 + + '@floating-ui/dom@1.8.0': + dependencies: + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 + + '@floating-ui/react-dom@2.1.9(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@floating-ui/dom': 1.8.0 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + '@floating-ui/utils@0.2.12': {} + + '@fuma-translate/react@1.0.2(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + + '@fumadocs/base-ui@16.15.8(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.15.8(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3)': + dependencies: + '@base-ui/react': 1.7.0(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@fuma-translate/react': 1.0.2(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@fumadocs/tailwind': 0.1.1(tailwindcss@4.3.3) + class-variance-authority: 0.7.1 + cn: 0.2.6 + fumadocs-core: 16.15.8(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3) + lucide-react: 1.43.0(react@19.2.8) + motion: 13.2.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + next-themes: 0.4.6(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + react-remove-scroll: 2.7.2(@types/react@19.2.18)(react@19.2.8) + rehype-raw: 7.0.0 + scroll-into-view-if-needed: 3.1.0 + shiki: 4.4.3 + unist-util-visit: 5.1.0 + optionalDependencies: + '@types/mdx': 2.0.14 + '@types/react': 19.2.18 + next: 16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + transitivePeerDependencies: + - '@date-fns/tz' + - date-fns + - tailwindcss + + '@fumadocs/tailwind@0.1.1(tailwindcss@4.3.3)': + optionalDependencies: + tailwindcss: 4.3.3 + + '@fumari/image-size@0.1.0': {} + + '@img/colour@1.1.0': + optional: true + + '@img/sharp-darwin-arm64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.3.3 + optional: true + + '@img/sharp-darwin-x64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.3.3 + optional: true + + '@img/sharp-freebsd-wasm32@0.35.4': + dependencies: + '@img/sharp-wasm32': 0.35.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.3.3': + optional: true + + '@img/sharp-libvips-darwin-x64@1.3.3': + optional: true + + '@img/sharp-libvips-linux-arm64@1.3.3': + optional: true + + '@img/sharp-libvips-linux-arm@1.3.3': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.3.3': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.3.3': + optional: true + + '@img/sharp-libvips-linux-s390x@1.3.3': + optional: true + + '@img/sharp-libvips-linux-x64@1.3.3': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.3.3': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.3.3': + optional: true + + '@img/sharp-linux-arm64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.3.3 + optional: true + + '@img/sharp-linux-arm@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.3.3 + optional: true + + '@img/sharp-linux-ppc64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.3.3 + optional: true + + '@img/sharp-linux-riscv64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.3.3 + optional: true + + '@img/sharp-linux-s390x@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.3.3 + optional: true + + '@img/sharp-linux-x64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.3.3 + optional: true + + '@img/sharp-linuxmusl-arm64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.3.3 + optional: true + + '@img/sharp-linuxmusl-x64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.3.3 + optional: true + + '@img/sharp-wasm32@0.35.4': + dependencies: + '@emnapi/runtime': 1.11.3 + optional: true + + '@img/sharp-webcontainers-wasm32@0.35.4': + dependencies: + '@img/sharp-wasm32': 0.35.4 + optional: true + + '@img/sharp-win32-arm64@0.35.4': + optional: true + + '@img/sharp-win32-ia32@0.35.4': + optional: true + + '@img/sharp-win32-x64@0.35.4': + optional: true + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.6.0': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.6.0 + + '@mdx-js/mdx@3.1.1': + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdx': 2.0.14 + acorn: 8.18.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.1 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.18.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@next/env@16.3.4': {} + + '@next/swc-darwin-arm64@16.3.4': + optional: true + + '@next/swc-darwin-x64@16.3.4': + optional: true + + '@next/swc-linux-arm64-gnu@16.3.4': + optional: true + + '@next/swc-linux-arm64-musl@16.3.4': + optional: true + + '@next/swc-linux-x64-gnu@16.3.4': + optional: true + + '@next/swc-linux-x64-musl@16.3.4': + optional: true + + '@next/swc-win32-arm64-msvc@16.3.4': + optional: true + + '@next/swc-win32-x64-msvc@16.3.4': + optional: true + + '@shikijs/core@4.4.3': + dependencies: + '@shikijs/primitive': 4.4.3 + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 + + '@shikijs/engine-oniguruma@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + + '@shikijs/primitive@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + '@shikijs/themes@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + + '@shikijs/types@4.4.3': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@standard-schema/spec@1.1.0': {} + + '@swc/helpers@0.5.23': + dependencies: + tslib: 2.8.1 + + '@tailwindcss/node@4.3.3': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.24.5 + jiti: 2.7.0 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.3.3 + + '@tailwindcss/oxide-android-arm64@4.3.3': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.3.3': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.3.3': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.3.3': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.3.3': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + optional: true + + '@tailwindcss/oxide@4.3.3': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-x64': 4.3.3 + '@tailwindcss/oxide-freebsd-x64': 4.3.3 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.3 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.3 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-x64-musl': 4.3.3 + '@tailwindcss/oxide-wasm32-wasi': 4.3.3 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 + + '@tailwindcss/postcss@4.3.3': + dependencies: + '@alloc/quick-lru': 5.3.0 + '@tailwindcss/node': 4.3.3 + '@tailwindcss/oxide': 4.3.3 + postcss: 8.5.26 + tailwindcss: 4.3.3 + + '@types/debug@4.1.13': + dependencies: + '@types/ms': 2.1.0 + + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.9 + + '@types/estree@1.0.9': {} + + '@types/hast@3.0.5': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdx@2.0.14': {} + + '@types/ms@2.1.0': {} + + '@types/node@26.3.0': + dependencies: + undici-types: 8.3.0 + + '@types/react-dom@19.2.5(@types/react@19.2.18)': + dependencies: + '@types/react': 19.2.18 + + '@types/react@19.2.18': + dependencies: + csstype: 3.2.3 + + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@ungap/structured-clone@1.4.0': {} + + '@yuku-analyzer/binding-android-arm64@0.9.5': + optional: true + + '@yuku-analyzer/binding-darwin-arm64@0.9.5': + optional: true + + '@yuku-analyzer/binding-darwin-x64@0.9.5': + optional: true + + '@yuku-analyzer/binding-freebsd-x64@0.9.5': + optional: true + + '@yuku-analyzer/binding-linux-arm-gnu@0.9.5': + optional: true + + '@yuku-analyzer/binding-linux-arm-musl@0.9.5': + optional: true + + '@yuku-analyzer/binding-linux-arm64-gnu@0.9.5': + optional: true + + '@yuku-analyzer/binding-linux-arm64-musl@0.9.5': + optional: true + + '@yuku-analyzer/binding-linux-x64-gnu@0.9.5': + optional: true + + '@yuku-analyzer/binding-linux-x64-musl@0.9.5': + optional: true + + '@yuku-analyzer/binding-win32-arm64@0.9.5': + optional: true + + '@yuku-analyzer/binding-win32-x64@0.9.5': + optional: true + + '@yuku-toolchain/types@0.9.5': {} + + acorn-jsx@5.3.2(acorn@8.18.0): + dependencies: + acorn: 8.18.0 + + acorn@8.18.0: {} + + astring@1.9.0: {} + + bail@2.0.2: {} + + baseline-browser-mapping@2.11.21: {} + + caniuse-lite@1.0.30001810: {} + + ccount@2.0.1: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + + chokidar@5.0.0: + dependencies: + readdirp: 5.1.1 + + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + + client-only@0.0.1: {} + + clsx@2.1.1: {} + + cn@0.2.6: {} + + collapse-white-space@2.1.0: {} + + comma-separated-tokens@2.0.3: {} + + compute-scroll-into-view@3.1.1: {} + + csstype@3.2.3: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + + dequal@2.0.3: {} + + detect-libc@2.1.2: {} + + detect-node-es@1.1.0: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + enhanced-resolve@5.24.5: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + + entities@6.0.1: {} + + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.18.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 + + esbuild@0.28.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.2 + '@esbuild/android-arm': 0.28.2 + '@esbuild/android-arm64': 0.28.2 + '@esbuild/android-x64': 0.28.2 + '@esbuild/darwin-arm64': 0.28.2 + '@esbuild/darwin-x64': 0.28.2 + '@esbuild/freebsd-arm64': 0.28.2 + '@esbuild/freebsd-x64': 0.28.2 + '@esbuild/linux-arm': 0.28.2 + '@esbuild/linux-arm64': 0.28.2 + '@esbuild/linux-ia32': 0.28.2 + '@esbuild/linux-loong64': 0.28.2 + '@esbuild/linux-mips64el': 0.28.2 + '@esbuild/linux-ppc64': 0.28.2 + '@esbuild/linux-riscv64': 0.28.2 + '@esbuild/linux-s390x': 0.28.2 + '@esbuild/linux-x64': 0.28.2 + '@esbuild/netbsd-arm64': 0.28.2 + '@esbuild/netbsd-x64': 0.28.2 + '@esbuild/openbsd-arm64': 0.28.2 + '@esbuild/openbsd-x64': 0.28.2 + '@esbuild/openharmony-arm64': 0.28.2 + '@esbuild/sunos-x64': 0.28.2 + '@esbuild/win32-arm64': 0.28.2 + '@esbuild/win32-ia32': 0.28.2 + '@esbuild/win32-x64': 0.28.2 + + escape-string-regexp@5.0.0: {} + + estree-util-attach-comments@3.0.0: + dependencies: + '@types/estree': 1.0.9 + + estree-util-build-jsx@3.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + + estree-util-is-identifier-name@3.0.0: {} + + estree-util-scope@1.0.1: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + + estree-util-to-js@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 + + estree-util-value-to-estree@3.5.0: + dependencies: + '@types/estree': 1.0.9 + + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.9 + + extend@3.0.2: {} + + fdir@6.5.0(picomatch@4.0.7): + optionalDependencies: + picomatch: 4.0.7 + + framer-motion@13.2.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + motion-dom: 13.2.0 + motion-utils: 13.0.0 + tslib: 2.8.1 + optionalDependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + fumadocs-core@16.15.8(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3): + dependencies: + '@fumari/image-size': 0.1.0 + estree-util-value-to-estree: 3.5.0 + github-slugger: 2.0.0 + hast-util-to-estree: 3.1.3 + hast-util-to-jsx-runtime: 2.3.6 + mdast-util-mdx: 3.0.0 + mdast-util-to-markdown: 2.1.2 + npm-to-yarn: 3.2.0 + remark: 15.0.1 + remark-gfm: 4.0.1 + remark-rehype: 11.1.2 + scroll-into-view-if-needed: 3.1.0 + shiki: 4.4.3 + tinyglobby: 0.2.17 + unified: 11.0.5 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + yaml: 2.9.0 + zbsearch: 4.0.0 + optionalDependencies: + '@mdx-js/mdx': 3.1.1 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@types/react': 19.2.18 + lucide-react: 1.43.0(react@19.2.8) + next: 16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + zod: 4.4.3 + transitivePeerDependencies: + - supports-color + + fumadocs-mdx@15.4.0(@types/mdast@4.0.4)(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.15.8(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8): + dependencies: + '@mdx-js/mdx': 3.1.1 + '@standard-schema/spec': 1.1.0 + chokidar: 5.0.0 + esbuild: 0.28.2 + estree-util-value-to-estree: 3.5.0 + fumadocs-core: 16.15.8(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3) + github-slugger: 2.0.0 + magic-string: 1.2.3 + mdast-util-mdx: 3.0.0 + picocolors: 1.1.1 + picomatch: 4.0.7 + tinyexec: 1.3.1 + tinyglobby: 0.2.17 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + yaml: 2.9.0 + yuku-analyzer: 0.9.5 + zod: 4.4.3 + optionalDependencies: + '@types/mdast': 4.0.4 + '@types/mdx': 2.0.14 + '@types/react': 19.2.18 + next: 16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: 19.2.8 + transitivePeerDependencies: + - supports-color + + get-nonce@1.0.1: {} + + github-slugger@2.0.0: {} + + graceful-fs@4.2.11: {} + + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.2.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.5 + + hast-util-raw@9.1.0: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.4.0 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.1 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + parse5: 7.3.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-to-estree@3.1.3: + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + hast-util-to-parse5@8.0.1: + dependencies: + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.5 + + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + + html-void-elements@3.0.0: {} + + inline-style-parser@0.2.7: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + + is-decimal@2.0.1: {} + + is-hexadecimal@2.0.1: {} + + is-plain-obj@4.1.0: {} + + jiti@2.7.0: {} + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + longest-streak@3.1.0: {} + + lucide-react@1.43.0(react@19.2.8): + dependencies: + react: 19.2.8 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 + + magic-string@1.2.3: + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 + + markdown-extensions@2.0.0: {} + + markdown-table@3.0.4: {} + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.3: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.4.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-expression@3.0.1: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-mdx-expression@2.0.3: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-events-to-acorn@2.0.3: + dependencies: + '@types/estree': 1.0.9 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.13 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + motion-dom@13.2.0: + dependencies: + motion-utils: 13.0.0 + + motion-utils@13.0.0: {} + + motion@13.2.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + framer-motion: 13.2.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + tslib: 2.8.1 + optionalDependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + ms@2.1.3: {} + + nanoid@3.3.18: {} + + next-themes@0.4.6(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + next@16.3.4(@types/node@26.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + '@next/env': 16.3.4 + '@swc/helpers': 0.5.23 + baseline-browser-mapping: 2.11.21 + caniuse-lite: 1.0.30001810 + postcss: 8.5.23 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + styled-jsx: 5.1.6(react@19.2.8) + optionalDependencies: + '@next/swc-darwin-arm64': 16.3.4 + '@next/swc-darwin-x64': 16.3.4 + '@next/swc-linux-arm64-gnu': 16.3.4 + '@next/swc-linux-arm64-musl': 16.3.4 + '@next/swc-linux-x64-gnu': 16.3.4 + '@next/swc-linux-x64-musl': 16.3.4 + '@next/swc-win32-arm64-msvc': 16.3.4 + '@next/swc-win32-x64-msvc': 16.3.4 + sharp: 0.35.4(@types/node@26.3.0) + transitivePeerDependencies: + - '@babel/core' + - '@types/node' + - babel-plugin-macros + + npm-to-yarn@3.2.0: {} + + oniguruma-parser@0.12.2: {} + + oniguruma-to-es@4.3.6: + dependencies: + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 + + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.3.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + + picocolors@1.1.1: {} + + picomatch@4.0.7: {} + + postcss@8.5.23: + dependencies: + nanoid: 3.3.18 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.26: + dependencies: + nanoid: 3.3.18 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + property-information@7.2.0: {} + + react-dom@19.2.8(react@19.2.8): + dependencies: + react: 19.2.8 + scheduler: 0.27.0 + + react-remove-scroll-bar@2.3.8(@types/react@19.2.18)(react@19.2.8): + dependencies: + react: 19.2.8 + react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.2.8) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.18 + + react-remove-scroll@2.7.2(@types/react@19.2.18)(react@19.2.8): + dependencies: + react: 19.2.8 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.18)(react@19.2.8) + react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.2.8) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.2.18)(react@19.2.8) + use-sidecar: 1.1.3(@types/react@19.2.18)(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + + react-style-singleton@2.2.3(@types/react@19.2.18)(react@19.2.8): + dependencies: + get-nonce: 1.0.1 + react: 19.2.8 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.18 + + react@19.2.8: {} + + readdirp@5.1.1: {} + + recma-build-jsx@1.0.0: + dependencies: + '@types/estree': 1.0.9 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 + + recma-jsx@1.0.1(acorn@8.18.0): + dependencies: + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.9 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: + dependencies: + '@types/estree': 1.0.9 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + + rehype-raw@7.0.0: + dependencies: + '@types/hast': 3.0.5 + hast-util-raw: 9.1.0 + vfile: 6.0.3 + + rehype-recma@1.0.0: + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.5 + hast-util-to-estree: 3.1.3 + transitivePeerDependencies: + - supports-color + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-mdx@3.1.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + remark@15.0.1: + dependencies: + '@types/mdast': 4.0.4 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + reselect@5.3.0: {} + + scheduler@0.27.0: {} + + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.1 + + semver@7.8.5: + optional: true + + sharp@0.35.4(@types/node@26.3.0): + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.35.4 + '@img/sharp-darwin-x64': 0.35.4 + '@img/sharp-freebsd-wasm32': 0.35.4 + '@img/sharp-libvips-darwin-arm64': 1.3.3 + '@img/sharp-libvips-darwin-x64': 1.3.3 + '@img/sharp-libvips-linux-arm': 1.3.3 + '@img/sharp-libvips-linux-arm64': 1.3.3 + '@img/sharp-libvips-linux-ppc64': 1.3.3 + '@img/sharp-libvips-linux-riscv64': 1.3.3 + '@img/sharp-libvips-linux-s390x': 1.3.3 + '@img/sharp-libvips-linux-x64': 1.3.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.3 + '@img/sharp-libvips-linuxmusl-x64': 1.3.3 + '@img/sharp-linux-arm': 0.35.4 + '@img/sharp-linux-arm64': 0.35.4 + '@img/sharp-linux-ppc64': 0.35.4 + '@img/sharp-linux-riscv64': 0.35.4 + '@img/sharp-linux-s390x': 0.35.4 + '@img/sharp-linux-x64': 0.35.4 + '@img/sharp-linuxmusl-arm64': 0.35.4 + '@img/sharp-linuxmusl-x64': 0.35.4 + '@img/sharp-webcontainers-wasm32': 0.35.4 + '@img/sharp-win32-arm64': 0.35.4 + '@img/sharp-win32-ia32': 0.35.4 + '@img/sharp-win32-x64': 0.35.4 + '@types/node': 26.3.0 + optional: true + + shiki@4.4.3: + dependencies: + '@shikijs/core': 4.4.3 + '@shikijs/engine-javascript': 4.4.3 + '@shikijs/engine-oniguruma': 4.4.3 + '@shikijs/langs': 4.4.3 + '@shikijs/themes': 4.4.3 + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + source-map-js@1.2.1: {} + + source-map@0.7.6: {} + + space-separated-tokens@2.0.2: {} + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + style-to-js@1.1.21: + dependencies: + style-to-object: 1.0.14 + + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + + styled-jsx@5.1.6(react@19.2.8): + dependencies: + client-only: 0.0.1 + react: 19.2.8 + + tailwindcss@4.3.3: {} + + tapable@2.3.3: {} + + tinyexec@1.3.1: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 + + trim-lines@3.0.1: {} + + trough@2.2.0: {} + + tslib@2.8.1: {} + + typescript@6.0.3: {} + + undici-types@8.3.0: {} + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position-from-estree@2.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + use-callback-ref@1.3.3(@types/react@19.2.18)(react@19.2.8): + dependencies: + react: 19.2.8 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.18 + + use-sidecar@1.1.3(@types/react@19.2.18)(react@19.2.8): + dependencies: + detect-node-es: 1.1.0 + react: 19.2.8 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.18 + + use-sync-external-store@1.6.0(react@19.2.8): + dependencies: + react: 19.2.8 + + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + web-namespaces@2.0.1: {} + + yaml@2.9.0: {} + + yuku-analyzer@0.9.5: + dependencies: + '@yuku-toolchain/types': 0.9.5 + yuku-ast: 0.9.5 + optionalDependencies: + '@yuku-analyzer/binding-android-arm64': 0.9.5 + '@yuku-analyzer/binding-darwin-arm64': 0.9.5 + '@yuku-analyzer/binding-darwin-x64': 0.9.5 + '@yuku-analyzer/binding-freebsd-x64': 0.9.5 + '@yuku-analyzer/binding-linux-arm-gnu': 0.9.5 + '@yuku-analyzer/binding-linux-arm-musl': 0.9.5 + '@yuku-analyzer/binding-linux-arm64-gnu': 0.9.5 + '@yuku-analyzer/binding-linux-arm64-musl': 0.9.5 + '@yuku-analyzer/binding-linux-x64-gnu': 0.9.5 + '@yuku-analyzer/binding-linux-x64-musl': 0.9.5 + '@yuku-analyzer/binding-win32-arm64': 0.9.5 + '@yuku-analyzer/binding-win32-x64': 0.9.5 + + yuku-ast@0.9.5: + dependencies: + '@yuku-toolchain/types': 0.9.5 + + zbsearch@4.0.0: {} + + zod@4.4.3: {} + + zwitch@2.0.4: {} diff --git a/apps/docs/pnpm-workspace.yaml b/apps/docs/pnpm-workspace.yaml new file mode 100644 index 00000000..9303bf37 --- /dev/null +++ b/apps/docs/pnpm-workspace.yaml @@ -0,0 +1,10 @@ +packages: [] +strictPeerDependencies: true +engineStrict: true +allowBuilds: + esbuild: true + '@conceptadev/docs-theme@git+ssh://git@github.com/conceptadev/docs-theme.git#57be8044beaf23c5414a671693b297615560095c': true +minimumReleaseAgeStrict: true +minimumReleaseAgeExclude: + - '@fumadocs/base-ui@16.15.8' + - 'fumadocs-core@16.15.8' diff --git a/apps/docs/postcss.config.mjs b/apps/docs/postcss.config.mjs new file mode 100644 index 00000000..d1840a7c --- /dev/null +++ b/apps/docs/postcss.config.mjs @@ -0,0 +1 @@ +export default { plugins: { '@tailwindcss/postcss': {} } }; diff --git a/apps/docs/tsconfig.json b/apps/docs/tsconfig.json new file mode 100644 index 00000000..552c7a51 --- /dev/null +++ b/apps/docs/tsconfig.json @@ -0,0 +1,41 @@ +{ + "compilerOptions": { + "target": "ESNext", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "strict": true, + "skipLibCheck": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "paths": { + "@/*": [ + "./*" + ] + }, + "plugins": [ + { + "name": "next" + } + ], + "allowJs": true + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/docs/README.md b/docs/README.md index a17b6965..f2d3512a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,8 +1,9 @@ # Maintaining Remix documentation The content in `docs/` is owned by this repository. `docs.json` defines its -navigation. The website is a publication surface, not a second authority for -Remix APIs or release versions. +navigation. `apps/docs` renders it with the shared Concepta Fumadocs theme. +See [the app README](../apps/docs/README.md) for run commands and the temporary +GitHub-access requirement while the theme is unpublished. ## Content organization @@ -22,11 +23,15 @@ package source and analyzer remain authoritative for examples. ## Tutorial source and evidence -`remix-cli-tutorial.html` keeps the complete reviewed walkthrough, full source -listings, and offline presentation. The MDX tutorial is a condensed reading -path through the same workflow. Each fenced block carries a hidden -`tutorial-source` marker naming its corresponding HTML figure. The checker -compares that exact block, including its language and whitespace. +`tutorials/settings-screen.mdx` is the tutorial. Full application and test +panels use build-time `TutorialSource` includes from the checked sample ZIP. +There is no second HTML tutorial or separate source listing to keep in sync. + +Each authored fenced block carries a hidden `tutorial-source` marker matched +against `assets/remix-cli-tutorial/code-evidence.json`. The hashes preserve the +reviewed commands and first-render example from commit `3c63fe44f`; they are +not another editable copy of the code. Review any intentional change before +updating that evidence. The old HTML presentations are recoverable in Git. Keep screenshots, sample projects, capture pins, and licenses under `assets/remix-cli-tutorial/`. Do not relabel old captures as new validation. @@ -42,11 +47,11 @@ fvm dart run melos run docs:check ``` This validates navigation, known retired APIs, analyzable Dart snippets, -generated catalog consistency, tutorial asset/source hashes, native tutorial -excerpt parity, and local links in the introduction/setup/styling/tutorial +generated catalog consistency, tutorial asset/source hashes, recorded snippet +parity, complete source-panel inclusion, and local links in the introduction/setup/styling/tutorial pages. Regression tests deliberately corrupt fixtures in temporary directories. The tutorial's application-relative `ui/ui.dart` example is checked against -the reviewed HTML, not compiled against the workspace package. Replay the +recorded evidence, not compiled against the workspace package. Replay the downloaded Flutter samples when application code or CLI behavior changes. -These content checks do not build or deploy a documentation website. +Run `pnpm typecheck` and `pnpm build` inside `apps/docs` to validate the site. diff --git a/docs/assets/remix-cli-tutorial/README.md b/docs/assets/remix-cli-tutorial/README.md index f71596b4..9ce2fe05 100644 --- a/docs/assets/remix-cli-tutorial/README.md +++ b/docs/assets/remix-cli-tutorial/README.md @@ -1,41 +1,27 @@ # Tutorial assets -Open `docs/remix-cli-tutorial.html` with this directory beside it at `assets/remix-cli-tutorial`. -The tutorial uses local styles, scripts, fonts, screenshots, and sample projects. -The reader can open the complete tutorial without a server or an internet connection. +These assets belong to `docs/tutorials/settings-screen.mdx`, rendered by the +Fumadocs app in `apps/docs`. The old standalone HTML, custom CSS/JavaScript, +Prism bundles, and standalone fonts have been removed; Git history preserves them. -## Source and editing - -Edit the tutorial HTML for instructions and complete code examples. -`docs/tutorials/settings-screen.mdx` is the condensed documentation walkthrough. -Its fenced code blocks use hidden `tutorial-source` markers to identify their -exact figures in the reviewed HTML; the -asset checker enforces this along with the checkout pin and local content links. -Update both presentations deliberately when instructions change. Do not add a -second independently maintained copy of the full sample applications. -Edit `tutorial.css` for layout and syntax colors. Edit `tutorial.js` for navigation, wrapping, and copying. -The page needs no build step. Keep each code block's `language-*` class consistent with its source. - -The screenshot files contain actual application or editor captures. -Keep their captions and capture context accurate when replacing them. -`evidence.json` records the source checkout, toolchain, and screenshot digests. +## Samples and evidence `sample-projects.zip` contains the complete default and Fortal projects. -Its README explains how to set the local checkout paths and run the samples. - -Check the recorded screenshot, archive, and sample-source hashes from the -repository root with `python3 tool/check_tutorial_assets.py`. This requires -only Python's standard library and does not extract the archive. It verifies -the recorded evidence; replay the Flutter instructions separately when the -CLI, examples, or dependencies change. `melos run docs:check` includes this check -and its regression tests. Do not update hashes to bypass a failed -check without reviewing the replacement assets. - -## Third-party files - -- [Prism 1.30.0](https://github.com/PrismJS/prism/tree/v1.30.0) provides syntax highlighting. Its MIT license is in `prism/LICENSE`. -- [IBM Plex Sans](https://github.com/IBM/plex) provides the text font. Its license is in `fonts/Plex-LICENSE.txt`. -- [JetBrains Mono](https://github.com/JetBrains/JetBrainsMono) provides the code font. Its license is in `fonts/JetBrains-OFL.txt`. - -The font files match the fonts embedded in `docs/remix-cli-guide.html`. -The tutorial loads the Prism language files directly. It does not use a CDN or an autoloader. +Its README explains the local checkout paths and run commands. The app expands +its four source panels directly from the archive, so inline code and downloads +cannot diverge. Do not maintain additional copies of those Dart files. + +Screenshots contain actual application/editor captures. `evidence.json` records +the capture checkout, toolchain, image hashes, archive hash, and source hashes. +Keep captions and capture context accurate; these are not new captures. +`code-evidence.json` records the approved MDX command/first-render blocks from +the content review at `3c63fe44f`. Update evidence only after reviewing a real +source change, never merely to bypass a failing check. + +Run `python3 tool/check_tutorial_assets.py` from the repository root, or run +`fvm dart run melos run docs:check` for the full documentation gate and tests. +These checks do not replace a fresh Flutter replay when the samples or CLI change. + +The screenshots and downloadable projects are unchanged by the presentation +migration. Fumadocs now supplies the site's typography and code highlighting; +no separate third-party font or Prism bundle is distributed in this directory. diff --git a/docs/assets/remix-cli-tutorial/code-evidence.json b/docs/assets/remix-cli-tutorial/code-evidence.json new file mode 100644 index 00000000..33646018 --- /dev/null +++ b/docs/assets/remix-cli-tutorial/code-evidence.json @@ -0,0 +1,66 @@ +{ + "create-default": { + "language": "bash", + "sha256": "6b402b1fae2b9056ddf55d364389a19a43be74d1b7f5d33c2f8df5d298ec0b01" + }, + "reviewed-checkout": { + "language": "bash", + "sha256": "ebae21090d5a1d680bb1d61c36696a5394e166a86c935d87b507cd943ef5c8b5" + }, + "remix-override": { + "language": "yaml", + "sha256": "20d0455d269012b7df71529d90bc01db476e55d55bd16bc9ccaba2828e092f22" + }, + "install-local-cli": { + "language": "bash", + "sha256": "3f45157108b8f87576852d677f59940a201dac20771b0f00b1b76b774aba3426" + }, + "init-default": { + "language": "bash", + "sha256": "a2ea41d47eacad1542cc7ff4eee9f6eb8aa61f46ca27d54e231ea5fa60505aed" + }, + "preview-button": { + "language": "bash", + "sha256": "25992687a0f803bf6ce6e7641726c7d2b5dad71d93b2c17c173aa51a570ab94b" + }, + "install-button-command": { + "language": "bash", + "sha256": "06e2196d76f7330d87721f248db67169493e11eb1e65421c36043e05e2077a3e" + }, + "first-main": { + "language": "dart", + "sha256": "12570e3eaa5ec42ea2f6243cdf656c30502478671a3a87e5bb97627c6d441c06" + }, + "run-application": { + "language": "bash", + "sha256": "3946ab439bb751405eaf71a4e738d0dd998d84a7d0c84915225448a9f3f42071" + }, + "install-screen": { + "language": "bash", + "sha256": "e6f3f00e8572276571f39d08b3d150ce265c1c06d16e77ddb44ad0d5d047ef97" + }, + "diff-button": { + "language": "bash", + "sha256": "34ad896c421e5526af279c388379b943e8b7e522f2bc3cf7557b42aaac70ce8b" + }, + "preserve-button": { + "language": "bash", + "sha256": "06e2196d76f7330d87721f248db67169493e11eb1e65421c36043e05e2077a3e" + }, + "create-fortal": { + "language": "bash", + "sha256": "6d5f4103d5227b04843590891841d5c93959ae2b95dbd0fb0012f1ff647e6026" + }, + "install-fortal": { + "language": "bash", + "sha256": "9c4f5f83748974101bf0a84b0f6e9435baf7560379d160c05c716d768ea1143f" + }, + "analysis-options": { + "language": "yaml", + "sha256": "9e0ee70644542f397b40fd33dda804291d279e330218fc6d61c10e8f0b99b725" + }, + "validate-sample": { + "language": "bash", + "sha256": "ce7ff34dc4931caf81a358e0ebe8bce5ca8af34c6f8b8658fdfaced0c674823f" + } +} diff --git a/docs/assets/remix-cli-tutorial/fonts/JetBrains-OFL.txt b/docs/assets/remix-cli-tutorial/fonts/JetBrains-OFL.txt deleted file mode 100644 index 675d198b..00000000 --- a/docs/assets/remix-cli-tutorial/fonts/JetBrains-OFL.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -https://openfontlicense.org - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/docs/assets/remix-cli-tutorial/fonts/Plex-LICENSE.txt b/docs/assets/remix-cli-tutorial/fonts/Plex-LICENSE.txt deleted file mode 100644 index 670c6c04..00000000 --- a/docs/assets/remix-cli-tutorial/fonts/Plex-LICENSE.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright © 2017 IBM Corp. with Reserved Font Name "Plex" - -This Font Software is licensed under the SIL Open Font License, Version 1.1. - -This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/docs/assets/remix-cli-tutorial/fonts/jetbrains-mono.woff2 b/docs/assets/remix-cli-tutorial/fonts/jetbrains-mono.woff2 deleted file mode 100644 index 2ca6ac605954ee884442db8ea1d61093000bcc29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31340 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∓Jw5)|1+k+LPLo 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

@c9dd0tdWKJRyVy<;N5h+G* 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 diff --git a/docs/assets/remix-cli-tutorial/prism/LICENSE b/docs/assets/remix-cli-tutorial/prism/LICENSE deleted file mode 100644 index 528949f4..00000000 --- a/docs/assets/remix-cli-tutorial/prism/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT LICENSE - -Copyright (c) 2012 Lea Verou - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/docs/assets/remix-cli-tutorial/prism/README.md b/docs/assets/remix-cli-tutorial/prism/README.md deleted file mode 100644 index f447f07d..00000000 --- a/docs/assets/remix-cli-tutorial/prism/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Prism 1.30.0 - -These files come from the PrismJS v1.30.0 release. The MIT license is included. - -Source: https://github.com/PrismJS/prism/tree/v1.30.0 - -The tutorial loads only core, C-like, Dart, YAML, Bash, and Diff. -The files run locally without a CDN or an autoloader. diff --git a/docs/assets/remix-cli-tutorial/prism/prism-bash.min.js b/docs/assets/remix-cli-tutorial/prism/prism-bash.min.js deleted file mode 100644 index f1659f1e..00000000 --- a/docs/assets/remix-cli-tutorial/prism/prism-bash.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",a={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},n={bash:a,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:n},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:a}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:n},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:n.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:n.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},a.inside=e.languages.bash;for(var s=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=n.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}; \ No newline at end of file diff --git a/docs/assets/remix-cli-tutorial/prism/prism-core.min.js b/docs/assets/remix-cli-tutorial/prism/prism-core.min.js deleted file mode 100644 index ea490af6..00000000 --- a/docs/assets/remix-cli-tutorial/prism/prism-core.min.js +++ /dev/null @@ -1 +0,0 @@ -var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(e){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,r={},a={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof i?new i(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=g.reach);A+=w.value.length,w=w.next){var P=w.value;if(n.length>e.length)return;if(!(P instanceof i)){var E,S=1;if(y){if(!(E=l(b,A,e,m))||E.index>=e.length)break;var L=E.index,O=E.index+E[0].length,C=A;for(C+=w.value.length;L>=C;)C+=(w=w.next).value.length;if(A=C-=w.value.length,w.value instanceof i)continue;for(var j=w;j!==n.tail&&(Cg.reach&&(g.reach=W);var I=w.prev;if(_&&(I=u(n,I,_),A+=_.length),c(n,I,S),w=u(n,I,new i(f,p?a.tokenize(N,p):N,k,N)),M&&u(n,w,M),S>1){var T={cause:f+","+d,reach:W};o(e,n,t,w.prev,A,T),g&&T.reach>g.reach&&(g.reach=T.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function c(e,n,t){for(var r=n.next,a=0;a"+i.content+""},!e.document)return e.addEventListener?(a.disableWorkerMessageHandler||e.addEventListener("message",(function(n){var t=JSON.parse(n.data),r=t.language,i=t.code,l=t.immediateClose;e.postMessage(a.highlight(i,a.languages[r],r)),l&&e.close()}),!1),a):a;var g=a.util.currentScript();function f(){a.manual||a.highlightAll()}if(g&&(a.filename=g.src,g.hasAttribute("data-manual")&&(a.manual=!0)),!a.manual){var h=document.readyState;"loading"===h||"interactive"===h&&g&&g.defer?document.addEventListener("DOMContentLoaded",f):window.requestAnimationFrame?window.requestAnimationFrame(f):window.setTimeout(f,16)}return a}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); \ No newline at end of file diff --git a/docs/assets/remix-cli-tutorial/prism/prism-dart.min.js b/docs/assets/remix-cli-tutorial/prism/prism-dart.min.js deleted file mode 100644 index e16ca211..00000000 --- a/docs/assets/remix-cli-tutorial/prism/prism-dart.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){var a=[/\b(?:async|sync|yield)\*/,/\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|covariant|default|deferred|do|dynamic|else|enum|export|extends|extension|external|factory|final|finally|for|get|hide|if|implements|import|in|interface|library|mixin|new|null|on|operator|part|rethrow|return|set|show|static|super|switch|sync|this|throw|try|typedef|var|void|while|with|yield)\b/],n="(^|[^\\w.])(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*",s={pattern:RegExp(n+"[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b"),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}}}};e.languages.dart=e.languages.extend("clike",{"class-name":[s,{pattern:RegExp(n+"[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()])"),lookbehind:!0,inside:s.inside}],keyword:a,operator:/\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/}),e.languages.insertBefore("dart","string",{"string-literal":{pattern:/r?(?:("""|''')[\s\S]*?\1|(["'])(?:\\.|(?!\2)[^\\\r\n])*\2(?!\2))/,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,lookbehind:!0,inside:{punctuation:/^\$\{?|\}$/,expression:{pattern:/[\s\S]+/,inside:e.languages.dart}}},string:/[\s\S]+/}},string:void 0}),e.languages.insertBefore("dart","class-name",{metadata:{pattern:/@\w+/,alias:"function"}}),e.languages.insertBefore("dart","class-name",{generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":s,keyword:a,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})}(Prism); \ No newline at end of file diff --git a/docs/assets/remix-cli-tutorial/prism/prism-diff.min.js b/docs/assets/remix-cli-tutorial/prism/prism-diff.min.js deleted file mode 100644 index 16d9fe0a..00000000 --- a/docs/assets/remix-cli-tutorial/prism/prism-diff.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var n={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(n).forEach((function(a){var i=n[a],r=[];/^\w+$/.test(a)||r.push(/\w+/.exec(a)[0]),"diff"===a&&r.push("bold"),e.languages.diff[a]={pattern:RegExp("^(?:["+i+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:r,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(a)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:n})}(Prism); \ No newline at end of file diff --git a/docs/assets/remix-cli-tutorial/prism/prism-yaml.min.js b/docs/assets/remix-cli-tutorial/prism/prism-yaml.min.js deleted file mode 100644 index 5cd16d3d..00000000 --- a/docs/assets/remix-cli-tutorial/prism/prism-yaml.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){var n=/[*&][^\s[\]{},]+/,r=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,t="(?:"+r.source+"(?:[ \t]+"+n.source+")?|"+n.source+"(?:[ \t]+"+r.source+")?)",a="(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*".replace(//g,(function(){return"[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]"})),d="\"(?:[^\"\\\\\r\n]|\\\\.)*\"|'(?:[^'\\\\\r\n]|\\\\.)*'";function o(e,n){n=(n||"").replace(/m/g,"")+"m";var r="([:\\-,[{]\\s*(?:\\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\\]|\\}|(?:[\r\n]\\s*)?#))".replace(/<>/g,(function(){return t})).replace(/<>/g,(function(){return e}));return RegExp(r,n)}e.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\\S[^\r\n]*(?:\\2[^\r\n]+)*)".replace(/<>/g,(function(){return t}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp("((?:^|[:\\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\\s*:\\s)".replace(/<>/g,(function(){return t})).replace(/<>/g,(function(){return"(?:"+a+"|"+d+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:o("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:o("false|true","i"),lookbehind:!0,alias:"important"},null:{pattern:o("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:o(d),lookbehind:!0,greedy:!0},number:{pattern:o("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:r,important:n,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism); \ No newline at end of file diff --git a/docs/assets/remix-cli-tutorial/tutorial.css b/docs/assets/remix-cli-tutorial/tutorial.css deleted file mode 100644 index 3a713eca..00000000 --- a/docs/assets/remix-cli-tutorial/tutorial.css +++ /dev/null @@ -1,968 +0,0 @@ -@font-face { - font-family:Plex; - src:url(fonts/plex-sans.woff2) format('woff2'); - font-weight:100 700; - font-display:swap -} - -@font-face { - font-family:JetBrains; - src:url(fonts/jetbrains-mono.woff2) format('woff2'); - font-weight:100 800; - font-display:swap -} - -:root { - color-scheme:dark; - --bg:#08090c; - --surface:#111319; - --raised:#171b25; - --line:#2a2f3c; - --fg:#e8eaf0; - --body:#c5cbd8; - --muted:#a3aab9; - --accent:#b1baff; - --code:#dce1ed; - --sans:Plex,system-ui,sans-serif; - --mono:JetBrains,ui-monospace,monospace -} - -* { - box-sizing:border-box -} - -html { - scroll-padding-top:100px; - text-size-adjust:100% -} - -body { - margin:0; - background:var(--bg); - color:var(--fg); - font:17px/1.65 var(--sans); - -webkit-font-smoothing:antialiased -} - -a { - color:var(--accent); - text-underline-offset:4px; - text-decoration-thickness:1px -} - -a:hover { - color:#d4daff -} - -button,input,summary { - font:inherit -} - -a,button,summary,label { - touch-action:manipulation -} - -:where(a,button,summary,input,pre):focus-visible { - outline:2px solid var(--accent); - outline-offset:4px -} - -::selection { - background:#484698; - color:#fff -} - -.skip { - position:fixed; - top:-100px; - left:20px; - z-index:20; - background:var(--surface); - padding:12px -} - -.skip:focus { - top:12px -} - -header { - position:sticky; - top:0; - z-index:5; - background:var(--bg); - border-bottom:1px solid var(--line) -} - -.top { - max-width:1360px; - margin:auto; - padding:16px 28px; - display:flex; - align-items:center; - justify-content:space-between; - gap:24px; - font-size:14px -} - -.brand { - font-family:var(--mono); - font-weight:600; - color:var(--fg); - text-decoration:none -} - -.top-links { - display:flex; - align-items:center; - gap:24px -} - -.top-label { - color:var(--muted) -} - -.layout { - display:grid; - grid-template-columns:220px minmax(0,936px); - gap:64px; - align-items:start; - max-width:1276px; - margin:auto; - padding:56px 28px 100px -} - -main { - min-width:0 -} - -.sidebar { - position:sticky; - top:94px; - max-height:calc(100vh - 120px); - overflow:auto; - font-size:14px; - padding:0 6px 6px -} - -.contents { - border:0; - margin:0; - padding:0 -} - -.contents>summary { - display:block; - cursor:pointer; - font-weight:600; - padding:0 0 15px -} - -.contents>summary::-webkit-details-marker { - display:none -} - -.current-location { - display:none -} - -.contents nav { - display:grid; - gap:3px -} - -.contents nav a { - display:grid; - grid-template-columns:36px 1fr; - gap:8px; - align-items:start; - padding:8px 9px; - color:var(--muted); - text-decoration:none; - border-left:2px solid transparent; - line-height:1.4 -} - -.contents nav a span { - font-size:12px; - font-variant-numeric:tabular-nums; - padding-top:2px -} - -.contents nav a:hover { - background:var(--surface); - color:var(--fg) -} - -.contents nav a[aria-current=location] { - border-left-color:var(--accent); - color:var(--fg); - background:var(--surface) -} - -.contents nav a[aria-current=location] span { - color:var(--accent) -} - -.reading-tools { - border-top:1px solid var(--line); - margin-top:22px; - padding-top:12px -} - -.reading-tools label { - display:flex; - align-items:center; - gap:10px; - padding:10px 0; - cursor:pointer; - color:var(--muted); - font-size:13px -} - -.reading-tools input { - accent-color:#8e9bff; - width:16px; - height:16px; - margin:0 -} - -.sidebar-note { - font-size:12px; - color:var(--muted); - margin:2px 0 -} - -h1,h2,h3 { - color:var(--fg); - font-weight:600; - letter-spacing:-.025em; - line-height:1.18 -} - -h1 { - font-size:clamp(38px,4.5vw,54px); - margin:0 0 24px; - max-width:24ch -} - -h2 { - font-size:32px; - margin:0 0 16px; - max-width:30ch -} - -h3 { - font-size:22px; - margin:36px 0 14px -} - -.lead { - font-size:21px; - line-height:1.5; - max-width:57ch; - color:var(--body); - margin-bottom:24px -} - -p { - color:var(--body); - max-width:68ch; - margin:0 0 18px -} - -strong { - font-weight:600; - color:var(--fg) -} - -.eyebrow { - font-size:14px; - font-weight:500; - color:var(--accent); - margin:0 0 14px; - letter-spacing:0 -} - -.version-note { - color:var(--muted); - font-size:14px; - max-width:none; - margin-top:24px -} - -.intro-actions { - display:flex; - flex-wrap:wrap; - gap:14px; - align-items:center; - margin:28px 0 -} - -.action { - display:inline-flex; - align-items:center; - justify-content:center; - min-height:44px; - padding:9px 17px; - border:1px solid var(--line); - border-radius:7px; - text-decoration:none; - font-weight:500; - font-size:15px; - color:var(--fg) -} - -.action.primary { - background:#dfe3ff; - color:#171932; - border-color:#dfe3ff -} - -.action:hover { - border-color:var(--accent) -} - -section { - border-top:1px solid var(--line); - margin-top:60px; - padding-top:44px -} - -section#start { - border:0; - padding:0; - margin:0 -} - -section#start>.lead { - max-width:57ch -} - -ul,ol { - padding-left:24px; - color:var(--body) -} - -li { - margin:10px 0 -} - -li::marker { - color:var(--muted) -} - -.result { - border-left:3px solid #8e9bff; - padding:6px 0 6px 20px; - margin:28px 0 0 -} - -.result>strong { - font-size:14px; - color:var(--accent) -} - -.result p { - margin:6px 0 0 -} - -.note { - background:#151826; - border:1px solid #373d59; - border-radius:7px; - padding:20px 22px; - margin:24px 0 -} - -.note p { - margin:8px 0 0 -} - -.note strong { - font-size:15px -} - -code,kbd,pre { - font-family:var(--mono); - font-variant-ligatures:none -} - -code { - font-size:.83em; - overflow-wrap:anywhere -} - -p code,li code,td code,th code { - color:#d9def7; - background:#191d29; - padding:2px 5px; - border-radius:3px -} - -kbd { - border:1px solid #6b7384; - padding:2px 6px; - border-radius:3px; - font-size:.85em -} - -.code { - margin:24px 0; - border:1px solid var(--line); - border-radius:8px; - overflow:hidden; - background:var(--surface) -} - -.code figcaption { - display:flex; - align-items:center; - justify-content:space-between; - gap:12px; - padding:10px 16px; - border-bottom:1px solid var(--line); - font-size:13px; - background:#171b24 -} - -.code-heading { - display:flex; - flex-wrap:wrap; - align-items:baseline; - gap:8px 14px; - min-width:0; - color:var(--fg) -} - -.code-heading>span:first-child { - overflow-wrap:anywhere -} - -.language-label { - color:var(--muted); - font-size:12px; - font-family:var(--sans) -} - -.copy { - flex:none; - min-height:32px; - padding:4px 12px; - border:1px solid #596174; - border-radius:5px; - background:transparent; - color:var(--fg); - cursor:pointer; - font-size:12px -} - -.copy:hover { - background:#282e3e -} - -pre { - margin:0; - padding:22px 24px; - overflow:auto; - font:14px/1.75 var(--mono); - tab-size:2; - color:var(--code) -} - -pre code { - font:inherit; - white-space:pre; - overflow-wrap:normal; - word-break:normal; - text-shadow:none -} - -.output pre { - color:#bcc4d4 -} - -.output pre code,.wrap-code pre code { - white-space:pre-wrap; - overflow-wrap:anywhere -} - -.output { - border-left:3px solid #596774 -} - -.output figcaption { - background:var(--surface) -} - -.output .language-label { - color:var(--muted) -} - -.token.comment,.token.prolog,.token.doctype,.token.cdata { - color:#a8b0c0 -} - -.token.punctuation { - color:#b7c0d1 -} - -.token.keyword,.token.atrule,.token.important { - color:#c5adff -} - -.token.string,.token.char,.token.inserted,.token.attr-value { - color:#a7d8b4 -} - -.token.number,.token.boolean,.token.constant { - color:#ffc48f -} - -.token.function,.token.class-name,.token.builtin { - color:#8fd8eb -} - -.token.operator,.token.entity,.token.url { - color:#e0c4f4 -} - -.token.property,.token.tag,.token.symbol,.token.key,.token.attr-name { - color:#e5c58d -} - -.token.deleted { - color:#ffada6 -} - -.token.bold { - font-weight:600 -} - -.token.italic { - font-style:italic -} - -details { - margin:26px 0; - padding:0; - border:1px solid var(--line); - border-radius:8px -} - -summary { - padding:16px 18px; - cursor:pointer; - font-size:15px; - font-weight:500; - color:var(--fg) -} - -details[open]>summary { - border-bottom:1px solid var(--line) -} - -details>p,details>h3 { - margin:18px 20px -} - -details>.code { - margin:0; - border:0; - border-radius:0 0 8px 8px -} - -details>p+.code { - margin-top:18px -} - -details pre { - max-height:660px -} - -.contents[open]>summary { - border:0 -} - -.shot { - margin:32px 0; - background:transparent; - border:1px solid var(--line); - border-radius:8px; - overflow:hidden -} - -.shot img { - display:block; - width:100%; - height:auto -} - -.shot figcaption { - padding:15px 18px; - font-size:14px; - line-height:1.55; - color:var(--muted); - background:var(--surface) -} - -.figure-label { - display:block; - color:var(--accent); - font-size:12px; - margin-bottom:5px -} - -.shot a:focus-visible { - display:block; - outline-offset:-4px -} - -.shot figcaption a:focus-visible { - display:inline -} - -.download { - font-size:16px; - font-weight:500 -} - -.ownership { - margin:36px 0 -} - -.ownership>h2,.before-heading { - font-size:24px; - margin:36px 0 14px -} - -.source-flow { - display:grid; - grid-template-columns:repeat(3,minmax(0,1fr)); - list-style:none; - counter-reset:source; - margin:24px 0 0; - padding:0; - border-top:1px solid var(--line); - border-bottom:1px solid var(--line) -} - -.source-flow li { - position:relative; - margin:0; - padding:22px 20px 22px 0; - counter-increment:source -} - -.source-flow li+li { - border-left:1px solid var(--line); - padding-left:20px -} - -.source-flow h3 { - font-size:16px; - font-weight:500; - margin:0 0 14px -} - -.source-flow h3::before { - content:counter(source) '. '; - color:var(--accent) -} - -.source-flow p { - font-size:14px; - line-height:1.55; - margin-bottom:12px -} - -.source-flow p:last-child { - margin:0 -} - -.source-file { - display:block; - line-height:1.7 -} - -.source-owner { - font-size:12px; - color:var(--muted) -} - -.runtime-note { - font-size:14px; - color:var(--muted); - padding:16px 0; - margin:0 -} - -.scope-note { - font-size:14px -} - -.table-wrap { - overflow-x:auto; - margin:28px 0; - border-top:1px solid var(--line); - border-bottom:1px solid var(--line) -} - -table { - border-collapse:collapse; - width:100%; - font-size:15px; - line-height:1.5 -} - -th,td { - text-align:left; - vertical-align:top; - padding:15px 16px; - border-bottom:1px solid var(--line) -} - -th { - font-weight:500; - color:var(--fg) -} - -td { - color:var(--body) -} - -thead { - background:var(--surface) -} - -tbody tr:last-child>* { - border-bottom:0 -} - -thead th:first-child,tbody th:first-child { - padding-left:8px -} - -footer { - margin-top:56px; - padding-top:24px; - border-top:1px solid var(--line); - font-size:13px; - color:var(--muted) -} - -.sr-only { - position:absolute; - width:1px; - height:1px; - padding:0; - margin:-1px; - overflow:hidden; - clip:rect(0,0,0,0); - white-space:nowrap; - border:0 -} - -@media(max-width:1060px) { - .layout { - display:block; - max-width:940px; - padding-top:26px - } - .sidebar { - position:static; - max-height:none; - padding:0; - overflow:visible; - margin-bottom:38px - } - .contents { - border:1px solid var(--line); - border-radius:7px - } - .contents>summary { - display:flex; - justify-content:space-between; - align-items:center; - gap:16px; - padding:13px 16px - } - .contents>summary::after { - content:'+'; - font-size:21px; - font-weight:400 - } - .contents[open]>summary::after { - content:'−' - } - .current-location { - display:block; - color:var(--muted); - font-size:13px; - font-weight:400; - margin-left:auto - } - .contents nav { - padding:0 10px 12px; - grid-template-columns:repeat(2,minmax(0,1fr)) - } - .reading-tools { - margin:0; - border:0; - display:flex; - justify-content:space-between; - align-items:center; - gap:16px; - padding:6px 0 0 - } - .sidebar-note { - font-size:12px - } - h1 { - font-size:44px - } -} - -@media(max-width:600px) { - body { - font-size:16px - } - .layout { - padding:20px 18px 64px - } - .top { - padding:14px 18px; - gap:14px - } - .top-label,.top-download { - display:none - } - .top-links { - gap:0 - } - .brand { - font-size:12px - } - .top a { - font-size:13px - } - .sidebar { - margin-bottom:28px - } - .contents nav { - grid-template-columns:1fr - } - .contents nav a { - padding:11px 8px - } - .current-location { - font-size:12px; - max-width:55%; - text-align:right - } - .sidebar-note { - display:none - } - h1 { - font-size:36px; - max-width:20ch - } - h2 { - font-size:28px - } - h3 { - font-size:21px - } - .lead { - font-size:19px - } - section { - padding-top:32px; - margin-top:44px - } - .intro-actions { - gap:10px; - margin:24px 0 - } - .action { - font-size:14px; - padding:9px 13px - } - .eyebrow { - font-size:13px - } - .version-note { - font-size:13px - } - .code figcaption { - padding:10px 12px - } - .code-heading { - gap:2px 8px; - display:block - } - .language-label { - display:block; - font-size:11px - } - .code-heading>span:first-child { - font-size:12px - } - .copy { - min-height:36px; - padding:6px 10px - } - pre { - padding:18px 16px; - font-size:12px; - line-height:1.8 - } - .table-wrap table { - min-width:540px - } - .source-flow { - grid-template-columns:1fr - } - .source-flow li { - padding:18px 0 - } - .source-flow li+li { - border-left:0; - border-top:1px solid var(--line); - padding:18px 0 - } - .source-flow h3 { - margin-bottom:8px - } - .source-flow p { - max-width:40ch - } - .note { - padding:16px - } - .shot figcaption { - padding:14px - } - .contents>summary { - font-size:14px - } - summary { - font-size:14px - } - .result { - padding-left:16px - } -} - -@media(pointer:coarse) { - .copy { - min-height:44px; - min-width:44px - } - .reading-tools label { - min-height:44px - } - .top a { - padding-top:8px; - padding-bottom:8px - } -} diff --git a/docs/assets/remix-cli-tutorial/tutorial.js b/docs/assets/remix-cli-tutorial/tutorial.js deleted file mode 100644 index b0555029..00000000 --- a/docs/assets/remix-cli-tutorial/tutorial.js +++ /dev/null @@ -1,73 +0,0 @@ -/* Keep the tutorial usable when opened directly from a local folder. */ -if (window.Prism) Prism.highlightAll(); - -const copyStatus = document.querySelector('#copy-status'); -document.querySelectorAll('.copy').forEach((button) => { - button.addEventListener('click', async () => { - const code = button.closest('figure').querySelector('code'); - const label = button.getAttribute('aria-label').replace(/^Copy /, ''); - let copied = false; - try { - await navigator.clipboard.writeText(code.textContent); - copied = true; - } catch { - const selection = window.getSelection(); - const range = document.createRange(); - range.selectNodeContents(code); - selection.removeAllRanges(); - selection.addRange(range); - try { copied = document.execCommand('copy'); } catch { /* Keep the text selected. */ } - if (copied) selection.removeAllRanges(); - } - button.textContent = copied ? 'Copied' : 'Selected'; - copyStatus.textContent = copied - ? `${label} copied.` - : 'Code selected. Press Control+C or Command+C to copy.'; - setTimeout(() => { button.textContent = 'Copy'; }, 1800); - }); -}); - -document.querySelector('#wrap-code').addEventListener('change', (event) => { - document.body.classList.toggle('wrap-code', event.target.checked); -}); - -const contents = document.querySelector('.contents'); -const narrowScreen = window.matchMedia('(max-width: 1060px)'); -const setContents = () => { contents.open = !narrowScreen.matches; }; -setContents(); -narrowScreen.addEventListener('change', setContents); - -const links = [...document.querySelectorAll('.contents nav a')]; -const sections = links.map((link) => document.querySelector(link.getAttribute('href'))); -const locationLabel = document.querySelector('#current-location'); -let scheduled = false; -function updateLocation() { - let current = 0; - sections.forEach((section, index) => { - if (section.getBoundingClientRect().top <= Math.max(160, window.innerHeight * 0.35)) current = index; - }); - links.forEach((link, index) => { - if (index === current) link.setAttribute('aria-current', 'location'); - else link.removeAttribute('aria-current'); - }); - locationLabel.textContent = links[current].dataset.label; - scheduled = false; -} -function scheduleLocation() { - if (!scheduled) { - scheduled = true; - requestAnimationFrame(updateLocation); - } -} -window.addEventListener('scroll', scheduleLocation, { passive: true }); -window.addEventListener('resize', scheduleLocation); -window.addEventListener('hashchange', scheduleLocation); -document.querySelectorAll('details').forEach((details) => { - details.addEventListener('toggle', scheduleLocation); -}); -links.forEach((link) => { - link.addEventListener('click', () => { - if (narrowScreen.matches) contents.open = false; - }); -}); -updateLocation(); diff --git a/docs/remix-cli-guide.html b/docs/remix-cli-guide.html deleted file mode 100644 index 3a71fc81..00000000 --- a/docs/remix-cli-guide.html +++ /dev/null @@ -1,2211 +0,0 @@ - - - - - - -remix: own the recipe, Remix keeps the behavior - - - - - - - -

-
- remix - - remix_cli 0.1.0 - remix 1.0.0-beta.9 - -
-
- -
-
- - - -
- -
-

Own the recipe. Remix keeps the behavior.

-

Build a complete sample with the screenshot tutorial. - It includes both presets, full application source, file preservation checks, and downloadable projects.

-

Remix is a Flutter component library. remix_cli copies your theme and - your visual recipes into your app as readable Dart. mix_generator connects those - recipes to Remix widgets, which keep interaction, focus, loading, disabled behavior, and - accessibility.

- -
Primary, secondary, outline, ghost, and destructive buttons at the small, medium, and large sizes.
Five variants at three sizes, drawn by the application after remix add button. This is an app render, never terminal output.
- -
-
lib/ui/components/button.dart — the recipe that produced it
-
@MixWidget(target: RemixButton.new)
-ButtonStyler acmeButtonStyle({
-  AcmeButtonVariant variant = .primary,
-  AcmeButtonSize size = .medium,
-  ButtonStyler style = const ButtonStyler.create(),
-}) {
-  return _base(_metricsFor(size))
-      .merge(_variantStyle(variant))
-      .onFocusVisible(_focusVisibleStyle())
-      .onDisabled(_disabledStyle())
-      .merge(style);
-}
-
-

This function decides appearance. RemixButton drives the - interaction state and the semantics. ButtonStyler is a Mix styler: a chainable - description of how one Remix widget looks in each state.

-
- - - -
-
-

What you own

-

Four ideas explain the whole workflow.

-
- -
-
-

Open recipes

-

Your theme, variants, sizes, and state styles are ordinary Dart files in your repository. - You read them, edit them, and review them like any other source.

-
-
-

Packaged behavior

-

Remix keeps rendering, pointer and keyboard input, focus, semantics, loading, and disabled - rules. A fix there reaches you through flutter pub upgrade.

-
-
-

Typed seam

-

mix_generator writes a typed adapter between each recipe and its Remix widget. - The adapter is the only file you do not edit.

-
-
-

Deliberate distribution

-

remix_cli installs source and compares source. It replaces a file you own only - when you pass --overwrite.

-
-
- -

Shadcn/ui says you own the component. Remix is more exact: you own the theme and the - visual recipes, and Remix stays the behavioral component library. That is why an upstream - accessibility fix still reaches your app without a copy-and-paste round.

-
- -
-
-

The ownership seam

-

Theme and recipe, generated adapter, Remix widget. Each layer updates a different way.

-
- -

Three things land in your repository: source you own, one generated adapter for each component, - and a dependency on package:remix.

- - - - - -

The adapter is the seam. Its build method calls RemixButton and passes - your recipe as the style. Nothing in Remix reads your files. Nothing in your files reimplements Remix.

- -
-
lib/ui/components/button.g.dart, generated
-
class AcmeButton extends StatelessWidget {
-  // …one field for each recipe parameter, plus every safe RemixButton parameter
-
-  @override
-  Widget build(BuildContext context) {
-    return RemixButton(
-      style: acmeButtonStyle(variant: variant, size: size, style: style),
-      label: label,
-      leadingIcon: leadingIcon,
-      loading: loading,
-      enabled: enabled,
-      onPressed: onPressed,
-      focusNode: focusNode,
-      semanticLabel: semanticLabel,
-      // …
-    );
-  }
-}
-
- -

Each layer has one owner and one update route.

- -
EvidenceWhat it establishesWhat else to check
First renderThe installed default Button renders in the supplied host.Read the installation output from Step 4.
EditorThe saved application recipe contains the 44-pixel edit.Run diff and preservation checks from Step 9.
- - - - - - - -
LayerOwnerHow it updates
Theme and recipeYour applicationYou edit the file.
Generated adaptermix_generatorRun build_runner.
Widget behaviorpackage:remixUpgrade remix.
Bundled recipe templateThe remix_cli registryUpgrade the CLI, then review with --diff.
- -
-
How do upstream updates reach me?
-

Upgrade remix for behavior and accessibility fixes. Upgrade remix_cli - and run remix add button --diff to read the changes to the bundled recipe. The CLI - never replaces your customized source on its own.

-

Step 6 shows the complete loop.

-
-
- -
-
-

Choose a preset

-

One application-owned source tree, with the visual language chosen at initialization.

-
- -

Open code includes the minimal default preset and the Radix Themes-inspired Fortal - preset. Both copy editable source into your application and build on the same Remix widgets.

- -
- - - - - - - - -
DefaultFortal
Initializeremix init --prefix Acmeremix init --prefix Acme --preset fortal
Visual directionA compact foundation for your own systemA complete Radix-inspired token and recipe system
Appearance lives inSource files in your lib/Source files in your lib/
Behavioral foundationRemixRemix
UpdatesReview source with --diffReview source with --diff
- -

The preset is recorded in remix.yaml and cannot change after initialization. - Recipes from different presets do not mix because their tokens and variant vocabularies differ.

-

The following walkthrough, file trees, and catalog use the default preset with the Acme prefix. - Fortal uses AcmeScope and constructors such as AcmeButton.solid. - Its theme files and component axes differ.

-

Place AcmeScope below the application host. - In a routed Material app, wrap the child of MaterialApp.builder with AcmeScope. - Routes and dialogs then inherit its tokens and text defaults. - See the example in lib/ui/theme/theme_scope.dart.

-
- - - -
-
-

The six steps

-

The whole journey on one screen, before the detail.

-
- -
-
Where this path starts
-

Every step below runs inside an existing Flutter package. remix_cli - does not create the application. Run the commands from the directory that owns - pubspec.yaml.

-
- - - -

Steps 1 to 4 are the CLI. Step 5 is your application code. Step 6 is the loop you repeat for - the life of the project. Between step 5 and step 6, two sections explain - where to change appearance and - which states Remix drives.

-
- -
-
1
-

Install the CLI

-

This walkthrough uses one command name all the way through: remix.

-
- -

The CLI has not been published. The hosted commands below require its first release and Remix beta.9. - Use a checkout until both packages are available.

- -
- Use a checkout before publication -

Create pubspec_overrides.yaml in your Flutter application. Replace both checkout paths with your local repository path.

-
-
pubspec_overrides.yaml
-
dependency_overrides:
-  remix:
-    path: /path/to/remix/packages/remix
-
-
-
Install the checkout CLI in the application
-
dart pub add "dev:remix_cli@{path: /path/to/remix/packages/remix_cli}"
-dart run remix_cli:remix --version
-
-

For each following command, replace remix with dart run remix_cli:remix. - After publication, remove the Remix override and run flutter pub get.

-
- -

After publication, install the exact CLI version this guide was written against. If Dart prints a - PATH instruction, follow it and reopen the shell before you continue.

- -
-
Install and verify
-
$ dart pub global activate remix_cli 0.1.0
-$ remix --version
-0.1.0
-
- -
RESULT

The command is ready. - Global activation leaves your application unchanged. Project-local installation updates its development dependencies and lockfile.

- -

Requirements

-
    -
  • Flutter 3.44 or newer on PATH. The CLI inspects that SDK before installation or --diff.
  • -
  • A Flutter package root. Its pubspec.yaml must list the Flutter SDK under dependencies.
  • -
  • Git on PATH, for --diff only.
  • -
- -
- Pin the CLI to the project, for a team or for CI -

Use a development dependency when the CLI version must live in the project's lockfile. The - registry travels with the CLI, so the lockfile then pins the bundled templates too.

-
-
Project-local installation
-
$ flutter pub add dev:remix_cli
-$ dart run remix_cli:remix --version
-0.1.0
-
-

In that mode every command in this guide keeps its arguments and changes its prefix. Read - remix add button --diff as dart run remix_cli:remix add button --diff. - Do not mix the two invocation styles inside one project.

-
-
- -
-
2
-

Initialize

-

Two files, written once. They decide every name the CLI generates.

-
- -

Run init from the package root. --prefix sets every - generated name. --ui-path selects the directory that receives installed - source; it defaults to lib/ui.

- -
-
Create the project configuration
-
$ remix init --prefix Acme
-Initialized remix.yaml and lib/ui/ui.dart.
-
- -
RESULT

The project is configured. - The command writes exactly two files: remix.yaml and an empty managed barrel at - lib/ui/ui.dart. No component source exists, and nothing renders yet.

- -
-
-
remix.yaml
-
schema: 2
-prefix: Acme
-preset: default
-paths:
-  ui: lib/ui
-
-
-
lib/ui/ui.dart
-
library;
-
-// remix_cli:exports:start
-// remix_cli:exports:end
-
-
- -

remix.yaml is the contract. prefix: Acme turns the registry item - button into AcmeButton, AcmeButtonVariant, and - acmeButtonStyle. ui.dart is the managed barrel: the CLI - owns the lines between its marker comments and preserves everything outside them.

- -
- Advanced: rerun, repair, and prefix changes -

init doubles as a repair command. It recreates the missing file and names exactly - what it touched.

- -
- - - - - - - -
State on diskWhat init prints
Neither fileInitialized remix.yaml and lib/ui/ui.dart.
Barrel onlyCreated remix.yaml; preserved lib/ui/ui.dart.
Config onlyCreated lib/ui/ui.dart; preserved remix.yaml.
Both presentRemix is already initialized.
- -

A rerun with a different --prefix or --ui-path - fails. The CLI will not rename source you own. Install state is tracked by path, not by the symbols - inside the file, so after a manual prefix change remix add button still finds - lib/ui/components/button.dart, reports Preserved button., and keeps the - old names.

- -

The prefix must be an ASCII UpperCamel Dart identifier, and its lowercased form cannot be a - reserved word. Remix and Mix are reserved for runtime dependencies. - paths.ui must stay inside lib/.

-
-
- -
-
3
-

Preview before you write

-

Two read-only modes. Neither one writes to your project.

-
- -
- - - - - -
ModeWhat it showsWhat it writes
--dry-runItems, dependencies, files, exports, and generated targetsNothing
--diffThe proposed authored Dart source, as a real git diffNothing in your project
- -

--dry-run shows the plan

- -
-
Preview the install order and file state
-
$ remix add button --dry-run
-Items: theme -> button
-Dependencies: remix@^1.0.0-beta.9, mix_annotations@^2.2.0-beta.1, dev:build_runner@^2.10.1, dev:mix_generator@^2.2.0-beta.3
-theme: missing; lib/ui/theme/tokens.dart, lib/ui/theme/theme_data.dart, lib/ui/theme/theme_scope.dart
-button: missing; lib/ui/components/button.dart
-Exports: theme/tokens.dart, theme/theme_data.dart, theme/theme_scope.dart, components/button.dart
-Generated: lib/ui/components/button.g.dart
-
- -
RESULT

This is the plan, and the CLI stopped before running it. - missing means the CLI would write the item. After a successful install the same - command reports complete for both lines and still writes nothing.

- -

--diff shows the source

-

--diff renders and formats the proposed files into a temporary tree, - then runs a real git diff against your source. Before the first install every file is - new, so the whole diff is additions. This excerpt keeps the plan lines and the first few lines of - the first file.

- -
-
Before installation
-
$ remix add button --diff
-Items: theme -> button
-… the same six plan lines as --dry-run …
-diff --git a/proposed/lib/ui/components/button.dart b/proposed/lib/ui/components/button.dart
-new file mode 100644
---- /dev/null
-+++ b/proposed/lib/ui/components/button.dart
-@@ -0,0 +1,267 @@
-+import 'package:flutter/widgets.dart';
-+import 'package:mix_annotations/mix_annotations.dart';
-+import 'package:remix/remix.dart';
-… 264 more added lines, then theme_data.dart, theme_scope.dart, tokens.dart, and the barrel …
-
- -

The command reports one of three things, and the third one is the important one.

- -
- - - - - - -
When you run itWhat it prints
Before installationEvery proposed file as an addition.
After a clean installationNo authored-source differences.
After you edit your copyA real diff. current is your file; proposed is the bundled template.
- -
-
--diff covers the item you name
-

It includes the requested item, any missing registry dependency, and the barrel. It omits - dependencies that are already installed. To review Theme on its own, run - remix add theme --diff.

-
- -

The two modes differ in what they run. --dry-run starts no process - at all. --diff resolves your Flutter toolchain, renders the proposal - into a temporary directory, formats it there with your project's Dart, and runs - git diff on that directory. It formats with your project's Dart on purpose: a - different formatter version would report differences that no install could produce.

- -

Neither mode reaches flutter pub get. Neither adds a dependency, runs - generation, writes anything under lib/, or changes what the app renders.

-
- -
-
4
-

Add the component

-

One add installs one item. Registry dependencies arrive first.

-
- -
-
Install the button recipe
-
$ remix add button
-… the same six plan lines as --dry-run …
-Added theme.
-Added button.
-Generated lib/ui/components/button.g.dart.
-
- -
RESULT

The source is installed. - The CLI writes the theme, button.dart, the generated adapter, and the barrel exports. - It does not place a button on a screen. Step 5 does that.

- -

The file tree is the part worth reading. Everything below lib/ui/ now belongs to - the application.

- -
-
acme_app/ — after remix init and remix add button
-
acme_app/
-├── pubspec.yaml                   # remix and mix_annotations added
-├── remix.yaml                     # written by init
-└── lib/
-    ├── main.dart
-    └── ui/                        # paths.ui — everything here is yours
-        ├── ui.dart                # managed barrel
-        ├── theme/
-        │   ├── tokens.dart        # AcmeTokens
-        │   ├── theme_data.dart    # AcmeThemeData.light() / .dark()
-        │   └── theme_scope.dart   # AcmeThemeScope, AcmeTheme.of
-        └── components/
-            ├── button.dart        # the recipe — edit this
-            └── button.g.dart      # generated adapter — do not edit
-
- -

Each item reports one status word. The word tells you whether the CLI wrote your file.

- -
-
Added
The file did not exist, so the CLI wrote it.
-
Preserved
The file already existed and was left untouched.
-
Updated
You passed --overwrite for that item.
-
- -

A second remix add button is a successful no-op.

- -
-
Run it again
-
$ remix add button
-… plan lines, now reporting both items as complete …
-Preserved theme.
-Preserved button.
-Preserved lib/ui/components/button.g.dart.
-
- -
- Special cases: dependency order, and the icons item -

Every default component item depends on theme. - data_table also depends on checkbox, icon_button, and select. - sidebar depends on toggle for its destinations. - The CLI installs these dependencies before the requested component.

- -
-
Preview the dependency order
-
$ remix add data_table --dry-run
-Items: theme -> checkbox -> icon_button -> select -> data_table
-… their files, exports, adapters, and combined constraints …
-
- -

icons is optional and has no generated adapter. Install it when your application - wants named icon aliases. The complete 318-glyph catalog stays available through - RemixIcons, and static references stay tree-shakable.

- -
-
Install the icon aliases
-
$ remix add icons
-… plan lines …
-Preserved theme.
-Added icons.
-
- -
-
lib/ui/icons.dart
-
import 'package:flutter/widgets.dart';
-import 'package:remix_ui_icons/remix_ui_icons.dart';
-
-/// Application-owned aliases for the icons used by this UI layer.
-abstract final class AcmeIcons {
-  /// Confirms a successful or selected action.
-  static const IconData check = RemixIcons.check;
-
-  /// Dismisses, clears, or marks a failed action.
-  static const IconData cross = RemixIcons.cross2;
-
-  /// Opens content positioned below the current control.
-  static const IconData chevronDown = RemixIcons.chevronDown;
-}
-
-
-
- -
-
5
-

The first render

-

One scope at the root. After that, the adapter is an ordinary widget.

-
- -

This example needs only theme and button. Import the barrel, then put - a theme scope above every recipe-backed widget.

- -
-
-
the part that matters
-
AcmeThemeScope(
-  data: const AcmeThemeData.light(),
-  child: AcmeButton.primary(
-    label: 'Continue',
-    onPressed: () {},
-  ),
-)
-
-
A black Continue button on a white background.
The same code, built and rendered. AcmeThemeData.light() resolves primary to near-black.
-
- -
RESULT

This is the first visual step. - Step 4 supplied the source. Your widget tree decides where that source appears.

- -

A fresh Flutter project can report generated-code lints. Apply the - generated adapter exclusion before running flutter analyze. - Keep authored recipes under analysis.

- -

AcmeButton.primary(…) is a named constructor. The generator emits one for each - value of the variant enum, so AcmeButton.destructive(label: 'Delete') - works the same way.

- -
Primary, Secondary, Outline, Ghost, and Delete named constructor buttons.
One constructor for each variant value. The check and cross glyphs come from the optional icons item.
- -
- Show the complete host-neutral main.dart -

The explicit Overlay matches the host-neutral shell behind every render in this - guide. It supplies portal content without adding Material or Cupertino.

-
-
lib/main.dart
-
import 'package:flutter/widgets.dart';
-
-import 'ui/ui.dart';
-
-void main() => runApp(const AcmeApp());
-
-class AcmeApp extends StatelessWidget {
-  const AcmeApp({super.key});
-
-  @override
-  Widget build(BuildContext context) {
-    return WidgetsApp(
-      color: const Color(0xFF000000),
-      builder: (_, _) => Overlay(
-        initialEntries: [
-          OverlayEntry(
-            builder: (_) => const AcmeThemeScope(
-              data: AcmeThemeData.light(),
-              child: HomePage(),
-            ),
-          ),
-        ],
-      ),
-    );
-  }
-}
-
-class HomePage extends StatelessWidget {
-  const HomePage({super.key});
-
-  @override
-  Widget build(BuildContext context) {
-    final theme = AcmeTheme.of(context);
-    return ColoredBox(
-      color: theme.background,
-      child: Center(
-        child: AcmeButton.primary(
-          label: 'Continue',
-          onPressed: () {},
-        ),
-      ),
-    );
-  }
-}
-
-
- -

Light and dark switching changes only the value passed to the scope. - Make it yours shows both renders.

-
- -
-
-

Make it yours

-

Three scopes. Choose the smallest one that solves the problem.

-
- -

Every visual change belongs at one of three levels: one call site, one component family, or the - whole theme. Each level is a different file, and each has a different blast radius.

- -
-

One call site SMALLEST

-

The generated adapter merges its style parameter last, so a call - site can override any part of the resolved recipe without forking it.

- -
-
one call site, in your own screen code
-
AcmeButton.primary(
-  label: 'Just this one',
-  style: ButtonStyler()
-      .color(const Color(0xFF7C3AED))
-      .borderRadius(.all(const Radius.circular(999)))
-      .padding(.horizontal(28))
-      .minHeight(48)
-      .label(.color(const Color(0xFFFFFFFF)).fontWeight(FontWeight.w700))
-      .onHovered(ButtonStyler().color(const Color(0xFF5B21B6))),
-  onPressed: publish,
-)
-
- -
A purple pill button labeled Just this one beside an untouched black neighbour.
The same call site, built and rendered. Its neighbour keeps the recipe.
- -
EFFECT

One button changes. - No file in lib/ui/ was touched, so remix add button --diff still reports - no authored-source differences.

- -
-
State fragments merge by state, not by depth
-

An override that must beat the recipe's hover fill needs a hover fragment of its own. A bare - .color(…) replaces the idle value only. That is why the snippet above declares - .onHovered(…).

-
-
- -
-

One component family THE RECIPE

-

Open lib/ui/components/button.dart. Geometry lives in one record for each size. - This is the table you edit when a touch target is too small.

- -
-
lib/ui/components/button.dart
-
_AcmeButtonMetrics _metricsFor(AcmeButtonSize size) => switch (size) {
-  .small  => (minHeight: 32.0, paddingX: 12.0, gap: 6.0, labelSize: 14.0, iconSize: 16.0),
-  .medium => (minHeight: 36.0, paddingX: 16.0, gap: 8.0, labelSize: 14.0, iconSize: 16.0),
-  .large  => (minHeight: 40.0, paddingX: 20.0, gap: 8.0, labelSize: 16.0, iconSize: 18.0),
-};
-
- -

Raise the medium height from 36 to 44 for a touch-first application. That is the whole edit.

- -
-
your edit
-
   .medium => (
--    minHeight: 36.0,
-+    minHeight: 44.0,
-     paddingX: 16.0,
-
- -
-
A Save changes button 36 logical pixels tall.
Before: minHeight: 36.0
-
The same Save changes button, now 44 logical pixels tall.
After: minHeight: 44.0. Same call site, same theme, one recipe line.
-
- -
EFFECT

Every medium button changes. - The two frames above are the same size, so the taller control is the change. Nothing else in the - application moved.

- -

There is no lockfile for installed source, so the CLI cannot merge. It can only show you the - difference, and it reads from the template's point of view.

- -
-
how the CLI reports your edit
-
$ remix add button --diff
-… plan lines …
-diff --git a/current/lib/ui/components/button.dart b/proposed/lib/ui/components/button.dart
---- a/current/lib/ui/components/button.dart
-+++ b/proposed/lib/ui/components/button.dart
-@@ -152,7 +152,7 @@ _AcmeButtonMetrics _metricsFor(AcmeButtonSize size) => switch (size) {
-     iconSize: 16.0,
-   ),
-   .medium => (
--    minHeight: 44.0,
-+    minHeight: 36.0,
-     paddingX: 16.0,
-
- -

Read the direction with care. current is your file and proposed is - the bundled template, so your 44.0 is the removal and the - upstream 36.0 is the addition. The command reports; it never - writes.

- -
- Show the rest of the recipe: variants and state fragments -

Each variant is a fill, a foreground, and two state fragments. Solid variants dim their own - fill on hover and further on press. Quiet variants use the accent token to make - interaction visible.

- -
-
lib/ui/components/button.dart
-
ButtonStyler _variantStyle(AcmeButtonVariant variant) =>
-    switch (variant) {
-      .primary => _filled(
-        fill: AcmeTokens.primary(),
-        foreground: AcmeTokens.primaryForeground(),
-        hoverFill: _primaryHoverFill(),
-        pressedFill: _primaryPressedFill(),
-      ),
-      .secondary => _filled(/* the secondary tokens */),
-      .destructive => _filled(
-        fill: AcmeTokens.destructive(),
-        foreground: AcmeTokens.destructiveForeground(),
-        hoverFill: _destructiveHoverFill(),
-        pressedFill: _destructivePressedFill(),
-      ),
-      .outline => _quiet(bordered: true),
-      .ghost => _quiet(bordered: false),
-    };
-
- -

The highlighted case paints the red column in the render at the top of this guide. It names - AcmeTokens.destructive(), so one theme value paints every destructive button.

- -

.primary and .horizontal(…) are contextual shorthand: they name a - member of the type the parameter expects. The styler methods come from Mix, and the - Styler API page lists them. The - complete file is in the reference.

- -

After you add or rename an enum value, run dart run build_runner build. The named - constructors come from that enum. Commit button.g.dart, and do not edit it.

-
-
- -
-

The whole theme WIDEST

-

Remix ships no theme. The names in tokens.dart are your vocabulary. A - MixToken is only an identity; its value comes from the nearest - AcmeThemeScope, which installs AcmeThemeData and a matching - MixScope together.

- -
-
-
lib/ui/theme/tokens.dart
-
abstract final class AcmeTokens {
-  static const background = ColorToken('ui.color.background');
-  static const foreground = ColorToken('ui.color.foreground');
-  static const primary = ColorToken('ui.color.primary');
-  static const secondary = ColorToken('ui.color.secondary');
-  static const muted = ColorToken('ui.color.muted');
-  static const accent = ColorToken('ui.color.accent');
-  static const destructive = ColorToken('ui.color.destructive');
-  static const border = ColorToken('ui.color.border');
-  static const focusRing = ColorToken('ui.color.focus-ring');
-  static const radius = RadiusToken('ui.radius');
-  // …and one foreground token for each surface
-}
-
-
-
lib/ui/theme/theme_data.dart
-
const AcmeThemeData.light()
-  : background = const Color(0xFFFFFFFF),
-    foreground = const Color(0xFF171717),
-    primary = const Color(0xFF171717),
-    primaryForeground = const Color(0xFFFAFAFA),
-    secondary = const Color(0xFFF5F5F5),
-    muted = const Color(0xFFF5F5F5),
-    accent = const Color(0xFFE5E5E5),
-    destructive = const Color(0xFFB91C1C),
-    border = const Color(0xFFE5E5E5),
-    focusRing = const Color(0xFF737373),
-    radius = const Radius.circular(8);
-
-
- -

Add the token to tokens.dart, its value to AcmeThemeData, and its mapping to AcmeThemeData.tokens. - Include the value in constructors, copyWith, equality, and hashCode. - The scope reads this explicit map. A token does not enter the map automatically.

-

Recipes that read AcmeTokens.radius share that radius value. Controls with fixed or circular geometry keep their own shape.

- -
-
lib/main.dart — one value changed between two builds
-
final brandTheme = const AcmeThemeData.light().copyWith(
--  radius: const Radius.circular(12),
-+  radius: const Radius.circular(20),
-);
-
- -
-
The brand theme buttons with a radius token of 12.
Before: radius token 12
-
The same brand theme buttons with a radius token of 20, which makes pill buttons.
After: radius token 20
-
- -
EFFECT

Recipes that use the radius token change. - The recipe files were untouched between these two builds. Only the theme value moved.

- -

Light and dark are the same mechanism. Switching at runtime changes only the value passed to - the scope.

- -
-
choose the theme value at runtime
-
data: dark
-    ? const AcmeThemeData.dark()
-    : const AcmeThemeData.light(),
-
- -
-
Checkboxes, tabs, badges, and icon buttons using the light theme values.
Same recipes, AcmeThemeData.light()
-
The same checkboxes, tabs, badges, and icon buttons using dark theme values.
Same recipes, AcmeThemeData.dark(). No recipe names a color.
-
-
-
- -
-
-

States

-

Remix decides when a state applies. Your recipe decides how it looks.

-
- -

One control, six states, captured from one build of the same application.

- -
-
A primary medium button at rest.
Idle. AcmeTokens.primary() fills the control.
-
The same button under the pointer, with a dimmed fill.
Hover. .onHovered(…) dims that fill to 90 %.
-
The same button held down, with a further dimmed fill and a focus ring.
Pressed. .onPressed(…) dims it to 80 %. On a desktop pointer, a press also gives focus, so the ring appears too.
-
The same button reached with the Tab key, showing a focus ring.
Keyboard focus. .onFocusVisible(…) draws the ring outside the box, so nothing reflows.
-
The same button faded, because it is disabled.
Disabled. .onDisabled(…) fades the control and clears the ring.
-
The same button showing a spinner in place of its label.
Loading. Remix hides the label behind the spinner and refuses the press.
-
- -

Read the table left to right: the state, what decides that it applies, and - the one line in your recipe that styles it.

- -
- - - - - - - - -
StateWhat decides it appliesWhat the recipe declares
HoverPointer tracking in RemixButton.onHovered(…) fill and content color
PressedGesture handling in RemixButton.onPressed(…) fill and content color
Keyboard focusFlutter focus, in traditional highlight mode.onFocusVisible(…) outline color, width, and offset
Disabledenabled: false on the widget.onDisabled(…) opacity, and no focus ring
Loadingloading: true on the widget.spinner(…) size, color, opacity, and duration
- -

Loading also refuses interaction, so RemixButton reports the disabled state at the - same time. That is why the loading render is faded: the same .onDisabled(…) fragment - applies.

- -

The recipe never asks whether the pointer is down, and never blocks a tap while the button - loads. Remix does both. That is the whole reason the behavior stays in the package.

-
- -
-
6
-

Update

-

The CLI shows you the difference, then waits for your decision.

-
- -

Two different things update, and they update separately.

- -
- - - - - -
What changedWhat you runWhat happens to your files
Remix behavior or accessibilityflutter pub upgrade remixNothing. The fix arrives inside the package.
A bundled recipe templatedart pub global activate remix_cli
remix add button --diff
Nothing, until you ask for a replacement.
- -
-
Refresh the CLI, then review
-
$ dart pub global activate remix_cli
-$ remix add button --diff
-
- -

A new remix_cli carries a new bundled registry. If you pinned the CLI to the - project, use flutter pub upgrade remix_cli for the first command. An empty diff after - a CLI bump is normal: a tool-only release can leave every template unchanged.

- -
-
One diff covers one item
-

remix add button --diff omits an already-installed theme, so it can come back - clean while the theme template moved. After a CLI upgrade, diff each item you installed, and - run remix add theme --diff as well.

-

An edited file also keeps its diff non-empty forever. Read the hunks; do not read an empty - result as the only sign that you are current.

-
- -

If you want the upstream version of one recipe, take it whole.

- -
-
Replace one recipe
-
$ remix add button --overwrite
-… plan lines …
-Preserved theme.
-Updated button.
-Generated lib/ui/components/button.g.dart.
-
- -

--overwrite replaces only the item you name, and preserves installed - registry dependencies. An update to Button never rewrites a customized theme.

- -

The Remix drift notice

-

Each registry is authored against one remix version. A caret constraint can resolve - a newer one. add reports that gap after it resolves your lockfile, and continues.

- -
-
The message names both versions
-

“Resolved remix <the version your lockfile picked>; this remix_cli registry - was authored against <the snapshot version>. Run flutter pub upgrade remix_cli, - then review with --diff.”

-
- -

The notice does not fail the install and does not touch your files. A resolved - remix below the authored version does fail, because the registry source was - never compiled against it.

- -

A new remix can change a styler API. Your recipe then stops compiling, the compiler - names the line, and add --diff shows the new template.

- -
- Show reinstall behavior for every install state -
- - - - - - -
State of the itemaddadd --overwrite
Not installedInstalls it and reports AddedInstalls it and reports Added
Fully installedNo-op, and reports PreservedRe-renders and reports Updated
Partially installedError. The CLI refuses to guess.Re-renders every file and reports Updated
-

A partial install is an error, not a silent repair. Look with --diff, - then choose --overwrite.

-
- -

Removing an item

-

There is no remove command. Delete the item's files and its managed exports. The - next add treats the item as missing.

-
- - - -
-
-

What the recipe can generate next

-

Your recipe is a declaration in source. A generator can read it, and emit more than the adapter.

-
- -
-
This section is a design preview
-

The other sections describe implemented CLI features. Hosted commands require package publication. - This section is not built yet. It describes the intended direction. The two - contracts it targets already exist, so the shapes below are real; the generator that would - emit them is not.

-
- -

Today the CLI generates one artifact from your recipe: the adapter that calls - RemixButton. The same declaration carries enough to generate two more.

- -
- - - - - - - - -
What the recipe already holdsWhat a generator can derive from it
The variant and size enums, and their defaultsThe axes, and the exact value vocabulary both schemas need
Every combination of those enumsThe recipe matrix
The styler returned for each combinationOne resolved style for each recipe and slot
Your theme, with .light() and .dark()The theme documents
@MixWidget(target: RemixButton.new)The widget each schema names
- -

A rendered widget tree cannot supply any of this. It is a result, and it does not keep the - enum that produced a value. The recipe is the declaration, which is why reading it works.

- -

The Muse A2UI catalog schema

-

A Muse host declares a component catalog. A model then proposes A2UI - surfaces using only the components in that catalog. The catalog is a JSON Schema with - model-facing descriptions, pinned by a catalog ID and a canonical schema hash, so a host fails - closed when the catalog it expects is absent.

- -

Muse writes that catalog by hand today. Generating it from your installed recipes makes your - own design system the vocabulary the model is allowed to use.

- -
-
the catalog entry a generator would emit for AcmeButton
-
{
-  "component": { "const": "AcmeButton" },
-  "description": "A labeled control that dispatches an allowed action. Use AcmeIconButton for a compact control without visible text.",
-  "properties": {
-    "label":   { "type": "string",
-                 "description": "Visible action label." },
-    "variant": { "enum": ["primary", "secondary", "outline", "ghost", "destructive"],
-                 "description": "Visual weight; one of the button variant tokens." },
-    "size":    { "enum": ["small", "medium", "large"],
-                 "description": "Control density; one of the button size tokens." },
-    "enabled": { "type": "boolean",
-                 "description": "Whether the control accepts input." },
-    "action":  { "$ref": "common_types.json#/$defs/Action" }
-  },
-  "required": ["component", "label"]
-}
-
- -

The two highlighted blocks come straight from your enums. Rename a variant in - button.dart, and the vocabulary the model may use changes with it. The - descriptions are the part a person still writes: they are prompt text, and Muse caps them at - 180 characters for a component and 140 for a property.

- -

The component capture, with every state

-

The second artifact is a portable component document. It records the complete matrix as - data: the properties, every state, the slots, one recipe for each cell, and the resolved style - behind each one. Mix Atlas already defines this contract as - mix/component-capture/component/v1, and already produces it for Fortal.

- -
-
the capture a generator would emit for the button recipe — abridged
-
{
-  "schema": "mix/component-capture/component/v1",
-  "id": "button",
-  "properties": [
-    { "id": "variant", "kind": "enum",
-      "values": ["primary", "secondary", "outline", "ghost", "destructive"],
-      "required": true, "default": "primary" },
-    { "id": "size", "kind": "enum",
-      "values": ["small", "medium", "large"],
-      "required": true, "default": "medium" }
-  ],
-  "states": [
-    { "id": "default",  "widgetStates": [] },
-    { "id": "hovered",  "widgetStates": ["hovered"] },
-    { "id": "pressed",  "widgetStates": ["pressed"] },
-    { "id": "focused",  "widgetStates": ["focused"] },
-    { "id": "disabled", "widgetStates": ["disabled"],
-      "properties": { "enabled": false } },
-    { "id": "loading",  "widgetStates": ["disabled"],
-      "properties": { "enabled": false, "loading": true } }
-  ],
-  "slots": [
-    { "id": "container", "kind": "flex_box" },
-    { "id": "icon",      "kind": "icon" },
-    { "id": "label",     "kind": "text" }
-  ],
-  "recipes": [
-    { "id": "primary-medium",
-      "properties": { "variant": "primary", "size": "medium" },
-      "styles": { "container": "primary-medium/container",
-                  "label": "primary-medium/label" } }
-    // …one entry for each of the 15 combinations
-  ],
-  "styles": { /* one resolved Mix Protocol style for each recipe and slot */ }
-}
-
- -

Five variants and three sizes give 15 recipes. Six states give 90 cells for each theme. The - six renders in States are those six states, drawn by the real component. - The document is the same matrix as data, so a tool can read it without a Flutter runtime.

- -

What still needs you

-

A generator can derive the axes, the recipes, the styles, and the themes. It cannot derive - meaning. Stable slot names, the semantic role, where a nested component starts, and behavioral - geometry such as a slider fraction stay authored, because a wrong guess there is an - accessibility defect rather than a cosmetic one.

- -

The target is a generated schema with a small authored file beside it, never a schema with - no author.

-
- - - -
-
-

Catalog

-

29 core components, plus theme, icons, and the optional chart extension.

-
- -

These images are app renders, not CLI output. They show the installed widgets after the fixture - places them in a widget tree.

- -
-
Tabs and badges from the installed gallery.
Tabs and badges
-
Switches, radio buttons, and a slider from the installed gallery.
Switches, radios, and slider
-
Text inputs including a slug field with an error state.
Text inputs and an error state
-
A toggle group, segmented control, and overlay triggers.
Toggle group, segmented control, and overlays
-
A card containing neutral and destructive callouts plus a divider.
Card, callouts, and divider
-
An accordion and an open disclosure.
Accordion and disclosure
-
A delete workspace dialog with Cancel and Delete actions.
Dialog
-
A data list above a selectable data table.
Data list and data table
-
- -

An axis is an enum a recipe declares. A variant axis also creates - one named constructor for each value. Six items declare axes: badge, - button, callout, icon_button, toggle, and - toggle_group. A parameter is not an axis: divider takes Flutter's - Axis as an ordinary parameter and has no named constructors.

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ItemSurface you get
iconsAcmeIcons
accordionAcmeAccordion
avatarAcmeAvatar
badgeAcmeBadge
buttonAcmeButton
calloutAcmeCallout
cardAcmeCard
chartAcmeLineChart, AcmeBarChart, AcmePieChart
checkboxAcmeCheckbox, AcmeCheckboxGroupItem
data_listAcmeDataList
data_tableAcmeDataTable
dialogAcmeDialog
disclosureAcmeDisclosure
dividerAcmeDivider
icon_buttonAcmeIconButton
linkAcmeLink
menuAcmeMenu
popoverAcmePopover
progressAcmeProgress
radioAcmeRadio
segmented_controlAcmeSegmentedControl
selectAcmeSelect
sidebarAcmeSidebar
skeletonAcmeSkeleton
sliderAcmeSlider
spinnerAcmeSpinner
switchAcmeSwitch
tabsAcmeTabBar, AcmeTab, AcmeTabView
textfieldAcmeTextField, AcmeTextArea
toggleAcmeToggle
toggle_groupAcmeToggleGroup
tooltipAcmeTooltip
- -

Four items take their options as data: toggle_group, - segmented_control, menu, and select. The parent recipe styles - every row.

- -

Four Remix widgets carry behavior with no style, so they have no registry item. Import - RemixCheckboxGroup, RemixRadioGroup, RemixTabs, and - RemixAccordionGroup from package:remix/remix.dart, and put the installed - adapters inside them.

- -

Charts outside Fortal

-

remix add chart installs one editable source file with line, grouped bar, and pie - charts. It adds mix_chart and no Fortal dependency. Set a positive - centerRadius to turn the pie into a donut.

- -
Line, grouped bar, and donut charts rendered by the generated open-code components.
One recipe, three generated chart families. This is the verified fixture, not a mockup.
- -
-
using the installed chart widgets
-
AcmeLineChart(
-  series: revenueSeries,
-  showMarkers: true,
-)
-
-AcmeBarChart(groups: orderGroups)
-
-AcmePieChart(
-  slices: channelSlices,
-  centerRadius: 38,
-)
-
- -

mix_chart keeps ownership of data, painting, gestures, transitions, tooltips, and - semantics. Your local recipe owns the palette, axes, grid, geometry, and tooltip styling. It reads - the same theme tokens, so it works with a theme installed before chart support existed.

-
- -
-
-

Reference

-

Every detail the walkthrough kept out of the way.

-
- -

Files it writes

-

The application owns the installed source below lib/ui/. - The CLI also writes remix.yaml and updates dependency declarations in pubspec.yaml. - Pub updates the lockfile and package metadata. The generator writes adapters and its build cache.

- -
- - - - - - - - - -
FileWhat it holdsGenerated?
theme/tokens.dartSemantic MixToken identities. Your vocabulary, not a Remix contract.No. Yours to edit.
theme/theme_data.dartValues for those tokens, with .light() and .dark().No. Yours to edit.
theme/theme_scope.dartInstalls the data and a matching MixScope.No. Yours to edit.
components/button.dartThe recipe: geometry, typography, variants, and state fragments.No. Yours to edit.
components/button.g.dartThe adapter from mix_generator.Yes, by build_runner.
ui.dartThe managed barrel.No, but the CLI rewrites its marker block.
- -

The CLI sorts the exports and rewrites only the lines between the markers.

- -
-
lib/ui/ui.dart — after add button and add icons
-
library;
-
-// remix_cli:exports:start
-export 'components/button.dart';
-export 'icons.dart';
-export 'theme/theme_data.dart';
-export 'theme/theme_scope.dart';
-export 'theme/tokens.dart';
-
-// remix_cli:exports:end
-
- -

Names come from the prefix. With prefix: Acme, the button recipe produces these - symbols. The generator drops a trailing Style and capitalizes the function name, so - renaming the recipe renames the widget.

- -
-
the symbols you get
-
enum AcmeButtonVariant { primary, secondary, outline, ghost, destructive }
-enum AcmeButtonSize { small, medium, large }
-
-// the recipe you edit
-ButtonStyler acmeButtonStyle({ ... })
-
-// generated into button.g.dart from the recipe
-class AcmeButton extends StatelessWidget {
-  const AcmeButton({ ... });
-  const AcmeButton.primary({ ... });
-  const AcmeButton.secondary({ ... });
-  const AcmeButton.outline({ ... });
-  const AcmeButton.ghost({ ... });
-  const AcmeButton.destructive({ ... });
-}
-
- -

Dependency rules

-

The CLI reads your pubspec.yaml and adds only the packages you do not declare. It - preserves hosted, path, Git, custom-hosted, and override declarations byte for byte. Runtime - packages must stay under dependencies.

- -
- - - - - - - - - -
PackageRequired sectionWhy
remixdependenciesInstalled source imports it at runtime.
mix_annotationsdependenciesInstalled source imports it at runtime.
mix_chartdependenciesThe chart item imports it at runtime.
remix_ui_iconsdependenciesThe icons item imports it at runtime.
build_runnerEither sectionBuild time only.
mix_generatorEither sectionBuild time only.
- -
-
Runtime packages belong in dependencies
-

If remix sits under dev_dependencies, remix add button - stops before it writes anything. A package declared in both sections fails the same way. Move the - package, then run the command again.

-
- -

An incompatible constraint also fails preflight. The CLI never widens a constraint you chose.

- -

When something fails

-

These checks cover common problems in a fresh app.

- -

Your linter flags the generated adapters. A default Flutter app includes - flutter_lints, and the current generator emits explicit this. qualifiers. - Exclude generated adapters from consumer linting.

- -
-
analysis_options.yaml
-
include: package:flutter_lints/flutter.yaml
-
-analyzer:
-  exclude:
-    - lib/ui/**/*.g.dart
-
- -

With that exclude, flutter analyze lib reports No issues found!.

- -

Text field selection handles fail. An installed text field needs an - Overlay ancestor once it takes focus. MaterialApp, CupertinoApp, and any routed - WidgetsApp already provide one; a bare WidgetsApp(builder: …) does not.

- -

A default dialog fills the viewport. The default recipe styles the panel. - Wrap AcmeDialog in Center inside the showRemixDialog builder. - This lets the panel's maximum width apply. The Fortal recipe supplies its own viewport alignment.

- -

Dialog text has unexpected decoration. The dialog captures the invoking context's inherited themes. - Use a context below your intended DefaultTextStyle. - For Fortal, place AcmeScope in the application builder, below the host.

- -

“Run remix init before remix add.” The current directory has no - remix.yaml. Run the CLI from the package that owns pubspec.yaml. In a - workspace, use the member package, not the workspace root.

- -

Use the message to choose the next command.

- -
- - - - - - - - - -
What you seeExitWhat to do
add requires exactly one item64Run one remix add command for each item.
modes are mutually exclusive64Choose one of --dry-run, --diff, or --overwrite.
Unknown registry item1Use a name from the catalog.
Registry dependency … is partially installed1Name that dependency, and run remix add theme --overwrite. A partial dependency blocks every mode, including both previews.
Requested item … is partially installed1Inspect with --diff, then use --overwrite to take the bundled source. A partially installed requested item still previews.
No error0Success, including previews and no-op reruns.
- -
-
A late failure leaves authored source on disk
-

Generation or analysis can fail after the write. The source stays for inspection. Fix the - reported problem, then run the same command again.

-
- -

Commands

-
- - - - - - - - - - -
GoalCommandResult
Check the CLIremix --versionPrints the CLI version.
Initializeremix init --prefix AcmeWrites the config and the managed barrel.
Preview the planremix add button --dry-runReports the intended work; writes nothing.
Review sourceremix add button --diffShows authored-source differences; writes nothing.
Installremix add buttonWrites missing source and generates the adapter.
Replace one itemremix add button --overwriteReplaces Button; preserves installed dependencies.
See all optionsremix help addPrints the current add help.
- -
- Show what add runs internally -
    -
  1. PreflightChecks paths, the barrel, dependencies, registry resolution, and install state. A failure leaves the project byte-identical.
  2. -
  3. flutter --version --machineFinds the toolchain, and requires Flutter 3.44 or newer.
  4. -
  5. flutter pub addAdds only the requirements you do not declare.
  6. -
  7. flutter pub getResolves packages, verifies locked versions, and reports Remix drift.
  8. -
  9. Write source and barrelUses an atomic temporary-file rename for each write.
  10. -
  11. dart formatFormats only the files the CLI wrote.
  12. -
  13. dart run build_runner buildUses build filters for the declared adapters. A missing adapter triggers generation.
  14. -
  15. dart analyze lib/uiRequires the installed UI to analyze cleanly.
  16. -
-
- -

remix.yaml keys

-
- - - - - - - -
KeyDefaultRule
schema2New files use schema 2. Legacy schema 1 remains readable and selects the default preset.
prefixUiASCII UpperCamel. Its lowercase form cannot be a Dart reserved word. Remix and Mix are reserved for runtime dependencies.
presetdefaultSchema 2 requires default or fortal. Schema 1 has no preset key. Choose the preset at initialization.
paths.uilib/uiNormalized, project-relative, and inside lib/.
- -

These are the only keys. An unknown key fails instead of falling back to a default.

- -

The complete recipe

-

This is lib/ui/components/button.dart exactly as remix add button - installs and formats it, with prefix: Acme. Nothing is elided.

- -
- Show button.dart in full (267 lines) -
-
lib/ui/components/button.dart
-
import 'package:flutter/widgets.dart';
-import 'package:mix_annotations/mix_annotations.dart';
-import 'package:remix/remix.dart';
-
-import '../theme/tokens.dart';
-
-part 'button.g.dart';
-
-/// The visual weights this application offers for a button.
-enum AcmeButtonVariant {
-  /// Highest emphasis: a solid `primary` fill.
-  primary,
-
-  /// Medium emphasis: a solid `secondary` fill.
-  secondary,
-
-  /// Low emphasis with a hairline `border`.
-  outline,
-
-  /// Low emphasis with no fill and no border.
-  ghost,
-
-  /// Highest emphasis for irreversible actions.
-  destructive,
-}
-
-/// The control densities this application offers for a button.
-///
-/// The 32/36/40px heights are compact, web-oriented defaults. A touch-first
-/// application should raise them to meet platform hit-target guidance.
-enum AcmeButtonSize {
-  /// 32px minimum height.
-  small,
-
-  /// 36px minimum height. The default.
-  medium,
-
-  /// 40px minimum height.
-  large,
-}
-
-/// The application's Button recipe.
-///
-/// Everything visual about a button lives in this function: geometry,
-/// typography, the five variants, and the hover/pressed/focus/disabled
-/// fragments. Remix keeps ownership of rendering, pointer and keyboard
-/// behavior, accessibility semantics, and the loading/disabled interaction
-/// rules — this recipe never reimplements any of that.
-///
-/// `@MixWidget(target: RemixButton.new)` generates `AcmeButton` into
-/// `button.g.dart`: an adapter whose constructor is this function's
-/// parameters plus every safe `RemixButton` parameter, and whose `build`
-/// calls `RemixButton(style: acmeButtonStyle(...), ...)`. Because
-/// [variant] is a non-nullable enum, the generator also emits one named
-/// constructor per enum value.
-///
-/// The widget's name comes from this function's name — the generator drops a
-/// trailing `Style` and capitalises what is left — so renaming the recipe
-/// renames the widget. There is nothing to keep in sync.
-///
-/// [style] is merged **last**, so a single call site can override any part of
-/// the resolved recipe without forking it:
-///
-/// ```dart
-/// AcmeButton.primary(
-///   label: 'Publish',
-///   style: ButtonStyler().color(const Color(0xFF7C3AED)),
-///   onPressed: publish,
-/// )
-/// ```
-///
-/// State fragments merge by state, not by depth: an override that must beat
-/// the recipe's hover fill has to be declared as a hover fragment too
-/// (`ButtonStyler().onHovered(...)`).
-@MixWidget(target: RemixButton.new)
-ButtonStyler acmeButtonStyle({
-  AcmeButtonVariant variant = .primary,
-  AcmeButtonSize size = .medium,
-  ButtonStyler style = const ButtonStyler.create(),
-}) {
-  return _base(_metricsFor(size))
-      .merge(_variantStyle(variant))
-      .onFocusVisible(_focusVisibleStyle())
-      .onDisabled(_disabledStyle())
-      .merge(style);
-}
-
-/// Alpha applied to a variant's own fill while hovered.
-const _hoverAlpha = 0.9;
-
-/// Alpha applied to the active fill while pressed.
-const _pressedAlpha = 0.8;
-
-/// A fill derived from [source] at [alpha], resolved from the active scope.
-///
-/// The obvious spelling would be `AcmeTokens.primary().withValues(alpha: 0.9)`,
-/// but that records a Mix *directive*, and directives accumulate through every
-/// later merge. A caller who replaced the hover fill would still get this
-/// recipe's alpha applied on top of their own color. A `ContextToken` does the
-/// arithmetic during resolution instead, so each state fragment holds one
-/// plain color that a caller can replace outright.
-///
-/// Declared as top-level finals because `ContextToken` equality is resolver
-/// identity: rebuilding one per call would make two identical recipes compare
-/// unequal.
-ContextToken<Color> _dimmed(ColorToken source, double alpha) =>
-    ContextToken<Color>(
-      (context) => source.resolve(context).withValues(alpha: alpha),
-    );
-
-final _primaryHoverFill = _dimmed(AcmeTokens.primary, _hoverAlpha);
-final _primaryPressedFill = _dimmed(AcmeTokens.primary, _pressedAlpha);
-final _secondaryHoverFill = _dimmed(AcmeTokens.secondary, _hoverAlpha);
-final _secondaryPressedFill = _dimmed(AcmeTokens.secondary, _pressedAlpha);
-final _destructiveHoverFill = _dimmed(AcmeTokens.destructive, _hoverAlpha);
-final _destructivePressedFill = _dimmed(AcmeTokens.destructive, _pressedAlpha);
-final _accentPressedFill = _dimmed(AcmeTokens.accent, _pressedAlpha);
-
-/// Opacity of the loading spinner, so it reads as secondary to the label.
-const _spinnerOpacity = 0.65;
-
-/// One full spinner revolution.
-const _spinnerDuration = Duration(milliseconds: 800);
-
-/// Width of the keyboard focus ring.
-const _focusRingWidth = 2.0;
-
-/// Distance between the control edge and its focus ring.
-const _focusRingOffset = 2.0;
-
-/// Opacity applied to the whole control while disabled.
-const _disabledOpacity = 0.5;
-
-/// A fill that paints nothing, used by `outline` and `ghost`.
-const _noFill = Color(0x00000000);
-
-/// Geometry and type scale for one [AcmeButtonSize].
-typedef _AcmeButtonMetrics = ({
-  double minHeight,
-  double paddingX,
-  double gap,
-  double labelSize,
-  double iconSize,
-});
-
-_AcmeButtonMetrics _metricsFor(AcmeButtonSize size) => switch (size) {
-  .small => (
-    minHeight: 32.0,
-    paddingX: 12.0,
-    gap: 6.0,
-    labelSize: 14.0,
-    iconSize: 16.0,
-  ),
-  .medium => (
-    minHeight: 36.0,
-    paddingX: 16.0,
-    gap: 8.0,
-    labelSize: 14.0,
-    iconSize: 16.0,
-  ),
-  .large => (
-    minHeight: 40.0,
-    paddingX: 20.0,
-    gap: 8.0,
-    labelSize: 16.0,
-    iconSize: 18.0,
-  ),
-};
-
-/// Layout, typography, and spinner defaults shared by every variant.
-ButtonStyler _base(_AcmeButtonMetrics metrics) => ButtonStyler()
-    .direction(.horizontal)
-    .mainAxisSize(.min)
-    .mainAxisAlignment(.center)
-    .crossAxisAlignment(.center)
-    .minHeight(metrics.minHeight)
-    .padding(.horizontal(metrics.paddingX))
-    .spacing(metrics.gap)
-    .borderRadius(.all(AcmeTokens.radius()))
-    .label(.fontSize(metrics.labelSize).fontWeight(FontWeight.w500))
-    .icon(.size(metrics.iconSize))
-    .spinner(
-      .size(
-        metrics.iconSize,
-      ).opacity(_spinnerOpacity).duration(_spinnerDuration),
-    );
-
-ButtonStyler _variantStyle(AcmeButtonVariant variant) => switch (variant) {
-  .primary => _filled(
-    fill: AcmeTokens.primary(),
-    foreground: AcmeTokens.primaryForeground(),
-    hoverFill: _primaryHoverFill(),
-    pressedFill: _primaryPressedFill(),
-  ),
-  .secondary => _filled(
-    fill: AcmeTokens.secondary(),
-    foreground: AcmeTokens.secondaryForeground(),
-    hoverFill: _secondaryHoverFill(),
-    pressedFill: _secondaryPressedFill(),
-  ),
-  .destructive => _filled(
-    fill: AcmeTokens.destructive(),
-    foreground: AcmeTokens.destructiveForeground(),
-    hoverFill: _destructiveHoverFill(),
-    pressedFill: _destructivePressedFill(),
-  ),
-  .outline => _quiet(bordered: true),
-  .ghost => _quiet(bordered: false),
-};
-
-/// A solid variant: its own fill, dimmed on hover and further on press.
-ButtonStyler _filled({
-  required Color fill,
-  required Color foreground,
-  required Color hoverFill,
-  required Color pressedFill,
-}) => _content(
-  .color(fill),
-  foreground,
-).onHovered(.color(hoverFill)).onPressed(.color(pressedFill));
-
-/// A transparent variant: `accent` is what makes interaction visible.
-ButtonStyler _quiet({required bool bordered}) {
-  var style = _content(.color(_noFill), AcmeTokens.foreground());
-  if (bordered) {
-    style = style.border(.color(AcmeTokens.border()).width(1));
-  }
-
-  return style
-      .onHovered(
-        _content(.color(AcmeTokens.accent()), AcmeTokens.accentForeground()),
-      )
-      // Content color is re-applied on press, not only on hover: a touch
-      // device never reports hover, so a press that changed the fill alone
-      // would paint the accent surface under the default foreground.
-      .onPressed(
-        _content(.color(_accentPressedFill()), AcmeTokens.accentForeground()),
-      );
-}
-
-/// Applies one content color to the label, the icons, and the spinner.
-ButtonStyler _content(ButtonStyler style, Color foreground) => style
-    .label(.color(foreground))
-    .icon(.color(foreground))
-    .spinner(.color(foreground));
-
-/// The keyboard focus ring.
-///
-/// An outline rather than a border: `RemixBoxEffects` paints it outside the
-/// box without taking layout space, so focusing a button never reflows the
-/// row it sits in.
-ButtonStyler _focusVisibleStyle() => ButtonStyler().containerEffects(
-  .outline(
-    .color(
-      AcmeTokens.focusRing(),
-    ).width(_focusRingWidth).strokeAlign(BorderSide.strokeAlignInside),
-  ).outlineOffset(_focusRingOffset),
-);
-
-/// Declared last so it wins over every other state fragment.
-///
-/// A disabled control keeps whatever fill its variant gives it and simply
-/// fades; the focus ring is cleared because a disabled button that still
-/// draws a focus ring reads as actionable.
-ButtonStyler _disabledStyle() => ButtonStyler()
-    .containerEffects(.outline(.style(.none)))
-    .wrap(.opacity(_disabledOpacity));
-
-
- -
- -
-
-

Provenance

-

What produced the commands, the source, and the images on this page.

-
- -

The command examples describe CLI 0.1.0. Hosted installation requires publication; the checkout workflow works before publication. - The September 7, 2026 review repeated initialization and component installation in fresh applications for both presets. - Long planning output is shortened, and each shortened block marks the elision.

- -

One part is different. - What the recipe can generate next is a design preview, and it says so at - the top of that section. Its two JSON shapes follow contracts that exist today — the Muse - A2UI component catalog, and mix/component-capture/component/v1 — but no - generator emits them from a recipe yet. Read that section as direction, and the rest as - evidence.

- -

Every image is an application render, encoded as lossless WebP. No image shows terminal output. - The button renders come from a specimen application built from the source that - remix add button installed. The catalog, theme, and chart renders come from the - host-neutral gallery fixture that tool/check_open_code.dart installs. Both use the - same installed lib/ui/ layer.

- -

The embedded renders predate the beta.9 release target. They show the default recipes, not a hosted beta.9 installation. - The table below describes the current checkout verification toolchain.

- -
- - - - - - - - - - - - -
ComponentVersion
remix_cli0.1.0
Flutter3.44.0 stable, framework 559ffa3f75
Dart3.12.0 stable
remix1.0.0-beta.9, the current registry target; verified from a checkout before publication
mix2.2.0-beta.5
mix_annotations2.2.0-beta.1
mix_generator2.2.0-beta.3
build_runner2.15.1
remix_ui_icons0.1.0
- -

The renders in Make it yours that compare - minHeight: 36.0 with minHeight: 44.0 come from two release web builds of - the same application, captured in the same viewport at a device pixel ratio of 2. The measured - control heights are 72 and 88 device pixels, which is 36 and 44 logical pixels.

-
- - - -
-

A guide to remix_cli 0.1.0. The registry is authored against - remix 1.0.0-beta.9. See Provenance for the complete - toolchain and for how each example was produced.

-
- - - - - - - diff --git a/docs/remix-cli-tutorial.html b/docs/remix-cli-tutorial.html deleted file mode 100644 index f8c3b313..00000000 --- a/docs/remix-cli-tutorial.html +++ /dev/null @@ -1,1206 +0,0 @@ - - -Build a settings screen with Remix CLI - - -
-
-

Remix CLI tutorial

Build a settings screen
with Remix CLI.

-

Install editable Flutter recipes, build a working screen, and make the source your own.

-

The sample is named Launchpad. You write its layout and callbacks. The CLI installs its theme and component recipes.

- -

Tested with Flutter 3.44.0 and Dart 3.12.0. The steps use a pinned Remix checkout.

-
Finished default sample with workspace settings, a sidebar, and a cyan preview button
Figure 1The finished sample. This capture includes the 44-pixel Button customization from Step 7. The CLI does not generate this complete screen. Open at full size.
-

How the pieces fit together

-

The CLI installs source in your application. The generator connects that source to Remix widgets.

-
    -
  1. Install the recipe

    Add Button with the CLI.

    lib/ui/components/button.dart

    The recipe defines Button styles. The CLI also installs the theme.

    Your editable source

  2. -
  3. Generate the adapter

    The CLI runs build_runner with mix_generator.

    lib/ui/components/button.g.dart

    The adapter exposes AcmeButton. Regenerate it after recipe API changes.

    Generated source

  4. -
  5. Build the screen

    Use the installed widgets.

    lib/main.dart

    Your application supplies the layout, state, and callbacks.

    Your application code

  6. -
-

At runtime: the adapter uses package:remix/remix.dart for rendering and interaction behavior.

-

GitHub CI runs repository checks separately. Step 11 explains the checks and how to test your sample.

-
-

Before you start

-

You need basic Flutter knowledge, Git, a terminal, and an installed Flutter SDK. -The sample targets desktop browsers and uses local state. It has no backend or mobile layout.

-

Follow the steps to build the default sample. Step 10 covers Fortal in a separate project. -The download includes both complete projects, generated adapters, and four tests per preset.

- -

1 · Prepare

Create the Flutter project

Start from an empty project so each CLI change is visible.

-

This tutorial uses Flutter 3.44.0, Dart 3.12.0, and Git. -Put the intended Flutter SDK on PATH. The CLI checks the Flutter executable found there.

-
Check the toolsTerminal
flutter --version
-dart --version
-git --version
-

Run these commands from the directory where you keep sample applications.

-
Create the default sampleTerminal
flutter create --empty --platforms=web remix_default_demo
-cd remix_default_demo
-

The following commands run inside remix_default_demo, beside its pubspec.yaml. -The project name also appears in the test import provided later.

-
Check the result

Flutter creates the project and its starter lib/main.dart. No Remix recipe exists yet.

2 · Set up the CLI

Use the reviewed checkout

Use one CLI invocation throughout this tutorial.

-
Release status for this tutorial -

The September 7, 2026 review used Remix 1.0.0-beta.9 and CLI 0.1.0 from a checkout. -Those releases were not published at review time. The instructions below work with that checkout.

-

Use the complete PR stack, including Sidebar. The reviewed checkout is bfae6507676fadea7632e2f7f66924935c04ca2a.

-
Get the reviewed checkout -

Open a second terminal in the directory where you keep repositories. Run these commands there.

-
Get the exact reviewed sourceTerminal
git clone https://github.com/conceptadev/remix.git remix-review
-git -C remix-review checkout bfae6507676fadea7632e2f7f66924935c04ca2a
-git -C remix-review rev-parse --show-toplevel
-

The last command prints the checkout path. Use that path wherever the tutorial shows /path/to/remix.

-

Return to the first terminal in remix_default_demo for the remaining commands.

-

Replace /path/to/remix with your Remix checkout path. -Create pubspec_overrides.yaml in the sample project.

-
pubspec_overrides.yamlYAML
dependency_overrides:
-  remix:
-    path: /path/to/remix/packages/remix
Install the CLI as a development dependencyTerminal
dart pub add "dev:remix_cli@{path: /path/to/remix/packages/remix_cli}"
-dart run remix_cli:remix --version
Expected versionOutput
0.1.0
-

The CLI installation updates development dependencies and the lockfile. -The Remix override selects the reviewed runtime when the CLI adds the Remix dependency.

-
Use hosted packages after publication -

Use the reference installation instructions after both packages are available. -Remove the checkout override and replace the CLI path dependency with the published version. -Run flutter pub get and repeat analysis and tests.

-
Check the result

The version command prints 0.1.0. The application still has no installed theme or recipe.

3 · Initialize

Choose the preset and prefix

The configuration fixes the preset, generated names, and installation path.

Initialize the default presetTerminal
dart run remix_cli:remix init --prefix Acme --preset default
Observed output from the fresh sampleOutput
Initialized remix.yaml and lib/ui/ui.dart.
remix.yamlYAML
schema: 2
-prefix: Acme
-preset: default
-paths:
-  ui: lib/ui
-

Acme is the application prefix. It produces names such as AcmeButton and acmeButtonStyle. -The CLI writes an empty managed barrel at lib/ui/ui.dart.

-

The preset selects the theme and recipe vocabulary. Choose Fortal in a separate project; do not change this project's preset later.

-
Check the result

Open remix.yaml and confirm schema 2 and preset default. -Open lib/ui/ui.dart and confirm its export markers. No component renders yet.

4 · Preview and install

Add the first component

Read the plan, then allow the CLI to install Button and its theme.

Preview the planTerminal
dart run remix_cli:remix add button --dry-run
Observed plan before installationOutput
Items: theme -> button
-Dependencies: remix@^1.0.0-beta.9, mix_annotations@^2.2.0-beta.1, dev:build_runner@^2.10.1, dev:mix_generator@^2.2.0-beta.3
-theme: missing; lib/ui/theme/tokens.dart, lib/ui/theme/theme_data.dart, lib/ui/theme/theme_scope.dart
-button: missing; lib/ui/components/button.dart
-Exports: theme/tokens.dart, theme/theme_data.dart, theme/theme_scope.dart, components/button.dart
-Generated: lib/ui/components/button.g.dart
-

theme -> button is the installation order. Both items are missing in a fresh project. -The dry-run reports the plan and writes no files.

-
Install ButtonTerminal
dart run remix_cli:remix add button
Observed result after the planOutput
Added theme.
-Added button.
-Generated lib/ui/components/button.g.dart.
Files to inspectOutput
lib/ui/
-├── ui.dart
-├── theme/
-│   ├── tokens.dart
-│   ├── theme_data.dart
-│   └── theme_scope.dart
-└── components/
-    ├── button.dart
-    └── button.g.dart
-

Open button.dart, acmeButtonStyle, to inspect the recipe. -Open button.g.dart, AcmeButton, to inspect the generated adapter.

-

Edit the authored recipe. Let mix_generator produce the adapter. -The CLI also adds required dependencies, updates the barrel exports, and runs generation.

-
Check the result

The three theme files, Button recipe, and generated adapter exist. -The CLI reports successful generation. The application screen still uses Flutter's starter code.

5 · Render

Put Button in the application

This is the first step that changes the visible application.

-

Replace lib/main.dart with this complete example. -It imports the managed barrel and places the Button below AcmeThemeScope.

-
Complete first-render main.dart
lib/main.dart · first renderDart
import 'package:flutter/widgets.dart';
-
-import 'ui/ui.dart';
-
-void main() => runApp(const AcmeApp());
-
-class AcmeApp extends StatelessWidget {
-  const AcmeApp({super.key});
-
-  @override
-  Widget build(BuildContext context) {
-    return WidgetsApp(
-      color: const Color(0xFF000000),
-      builder: (_, _) => Overlay(
-        initialEntries: [
-          OverlayEntry(
-            builder: (_) => const AcmeThemeScope(
-              data: AcmeThemeData.light(),
-              child: HomePage(),
-            ),
-          ),
-        ],
-      ),
-    );
-  }
-}
-
-class HomePage extends StatelessWidget {
-  const HomePage({super.key});
-
-  @override
-  Widget build(BuildContext context) {
-    final theme = AcmeTheme.of(context);
-    return ColoredBox(
-      color: theme.background,
-      child: Center(
-        child: AcmeButton.primary(
-          label: 'Continue',
-          onPressed: () {},
-        ),
-      ),
-    );
-  }
-}
Run the applicationTerminal
flutter run -d chrome
A single black Continue button centered on a white application surface
Figure 2First render. This detail capture comes from the complete example above, built with the installed default recipe. Open at full size.
-

Keep the flutter run terminal open. Open another terminal in the same sample directory for the following CLI commands.

-

The first example uses WidgetsApp and an Overlay. -The larger application below uses MaterialApp for its navigation host.

-
Check the result

Chrome shows a centered Continue button. The callback is intentionally empty in this first example.

6 · Compose the screen

Add the settings controls

Install the remaining recipes, then write the application that uses them.

Install one item per commandTerminal
dart run remix_cli:remix add checkbox
-dart run remix_cli:remix add textfield
-dart run remix_cli:remix add dialog
-dart run remix_cli:remix add card
-dart run remix_cli:remix add sidebar
-

The existing theme stays installed. Sidebar also installs its toggle dependency. -Each command generates the required adapters and updates lib/ui/ui.dart.

-

Replace lib/main.dart with the complete sample below. -The sample imports only Flutter, Remix, and the application barrel.

-
Complete settings-screen main.dart
lib/main.dart · default sampleDart
import 'package:flutter/material.dart';
-import 'package:remix/remix.dart';
-
-import 'ui/ui.dart';
-
-void main() => runApp(const SampleApp());
-
-class SampleApp extends StatefulWidget {
-  const SampleApp({super.key});
-
-  @override
-  State<SampleApp> createState() => _SampleAppState();
-}
-
-class _SampleAppState extends State<SampleApp> {
-  bool dark = false;
-
-  @override
-  Widget build(BuildContext context) {
-    return MaterialApp(
-      title: 'Launchpad — default preset',
-      debugShowCheckedModeBanner: false,
-      theme: ThemeData(brightness: dark ? Brightness.dark : Brightness.light),
-      builder: (context, child) => DefaultTextStyle(
-        style: Theme.of(context).textTheme.bodyMedium!,
-        child: AcmeThemeScope(
-          data: dark ? const AcmeThemeData.dark() : const AcmeThemeData.light(),
-          child: child!,
-        ),
-      ),
-      home: WorkspacePage(
-        dark: dark,
-        onTheme: () => setState(() => dark = !dark),
-      ),
-    );
-  }
-}
-
-class WorkspacePage extends StatefulWidget {
-  const WorkspacePage({super.key, required this.dark, required this.onTheme});
-  final bool dark;
-  final VoidCallback onTheme;
-
-  @override
-  State<WorkspacePage> createState() => _WorkspacePageState();
-}
-
-class _WorkspacePageState extends State<WorkspacePage> {
-  final name = TextEditingController(text: 'Launchpad');
-  bool summary = true;
-  bool saving = false;
-  int saves = 0;
-  String destination = 'settings';
-  String status = 'No changes saved yet.';
-
-  @override
-  void dispose() {
-    name.dispose();
-    super.dispose();
-  }
-
-  Future<void> save() async {
-    setState(() => saving = true);
-    await Future<void>.delayed(const Duration(milliseconds: 1500));
-    if (!mounted) return;
-    setState(() {
-      saving = false;
-      saves += 1;
-      status =
-          'Saved ${name.text}. Save count: $saves. Summary: ${summary ? 'on' : 'off'}.';
-    });
-  }
-
-  Future<void> invite() async {
-    final confirmed = await showRemixDialog<bool>(
-      context: context,
-      barrierLabel: 'Close invitation preview',
-      builder: (context) => Center(
-        child: AcmeDialog(
-          title: 'Invite a teammate',
-          description:
-              'This sample records your choice locally. It sends no invitation.',
-          actions: [
-            AcmeButton.outline(
-              label: 'Cancel',
-              onPressed: () => Navigator.pop(context, false),
-            ),
-            AcmeButton.primary(
-              label: 'Confirm',
-              onPressed: () => Navigator.pop(context, true),
-            ),
-          ],
-        ),
-      ),
-    );
-    if (confirmed == true && mounted) {
-      setState(() => status = 'Invitation confirmed in this sample.');
-    }
-  }
-
-  @override
-  Widget build(BuildContext context) {
-    final foreground = widget.dark
-        ? const Color(0xFFFAFAFA)
-        : const Color(0xFF171717);
-    final muted = widget.dark
-        ? const Color(0xFFA3A3A3)
-        : const Color(0xFF737373);
-    final background = widget.dark
-        ? const Color(0xFF0A0A0A)
-        : const Color(0xFFFAFAFA);
-    return DefaultTextStyle(
-      style: TextStyle(color: foreground, fontSize: 15, height: 1.5),
-      child: ColoredBox(
-        color: background,
-        child: SafeArea(
-          child: Row(
-            crossAxisAlignment: CrossAxisAlignment.stretch,
-            children: [
-              SizedBox(
-                width: 230,
-                child: AcmeSidebar<String>(
-                  semanticLabel: 'Workspace navigation',
-                  header: const Padding(
-                    padding: EdgeInsets.all(24),
-                    child: Text(
-                      'LAUNCHPAD',
-                      style: TextStyle(
-                        fontSize: 18,
-                        fontWeight: FontWeight.w700,
-                        letterSpacing: 2,
-                      ),
-                    ),
-                  ),
-                  sections: const [
-                    RemixSidebarSection(
-                      label: 'WORKSPACE',
-                      destinations: [
-                        RemixSidebarDestination(
-                          value: 'overview',
-                          label: 'Overview',
-                        ),
-                        RemixSidebarDestination(
-                          value: 'settings',
-                          label: 'Settings',
-                        ),
-                        RemixSidebarDestination(
-                          value: 'billing',
-                          label: 'Billing',
-                          enabled: false,
-                        ),
-                      ],
-                    ),
-                  ],
-                  selectedValue: destination,
-                  onSelected: (value) => setState(() => destination = value),
-                  footer: Text(
-                    'default preset\nApplication-owned source',
-                    style: TextStyle(fontSize: 12, color: muted),
-                  ),
-                ),
-              ),
-              Expanded(
-                child: SingleChildScrollView(
-                  padding: const EdgeInsets.symmetric(
-                    horizontal: 48,
-                    vertical: 44,
-                  ),
-                  child: Align(
-                    alignment: Alignment.topLeft,
-                    child: ConstrainedBox(
-                      constraints: const BoxConstraints(maxWidth: 820),
-                      child: Column(
-                        crossAxisAlignment: CrossAxisAlignment.stretch,
-                        children: [
-                          Row(
-                            children: [
-                              Expanded(
-                                child: Text(
-                                  'WORKSPACE / ${destination.toUpperCase()}',
-                                  style: TextStyle(
-                                    color: muted,
-                                    fontSize: 12,
-                                    letterSpacing: 1.5,
-                                  ),
-                                ),
-                              ),
-                              AcmeButton.outline(
-                                label: widget.dark
-                                    ? 'Use light theme'
-                                    : 'Use dark theme',
-                                onPressed: widget.onTheme,
-                              ),
-                            ],
-                          ),
-                          const SizedBox(height: 32),
-                          Text(
-                            destination == 'settings'
-                                ? 'Workspace settings'
-                                : 'Workspace overview',
-                            style: const TextStyle(
-                              fontSize: 36,
-                              fontWeight: FontWeight.w600,
-                              height: 1.2,
-                            ),
-                          ),
-                          const SizedBox(height: 12),
-                          Text(
-                            'A real Flutter application built from the default preset.',
-                            style: TextStyle(color: muted),
-                          ),
-                          const SizedBox(height: 32),
-                          AcmeCard(
-                            child: Column(
-                              crossAxisAlignment: CrossAxisAlignment.stretch,
-                              children: [
-                                const Text(
-                                  'General',
-                                  style: TextStyle(
-                                    fontSize: 20,
-                                    fontWeight: FontWeight.w600,
-                                  ),
-                                ),
-                                const SizedBox(height: 8),
-                                Text(
-                                  'Set the workspace name and your email preference.',
-                                  style: TextStyle(color: muted),
-                                ),
-                                const SizedBox(height: 24),
-                                AcmeTextField(
-                                  controller: name,
-                                  label: 'Workspace name',
-                                  semanticLabel: 'Workspace name',
-                                  helperText:
-                                      'The application owns this text field recipe.',
-                                ),
-                                const SizedBox(height: 16),
-                                AcmeCheckbox(
-                                  label: 'Send a weekly summary',
-                                  selected: summary,
-                                  onChanged: (value) =>
-                                      setState(() => summary = value ?? false),
-                                ),
-                                const SizedBox(height: 24),
-                                Wrap(
-                                  spacing: 12,
-                                  runSpacing: 12,
-                                  children: [
-                                    AcmeButton.primary(
-                                      label: 'Save changes',
-                                      loading: saving,
-                                      onPressed: save,
-                                    ),
-                                    AcmeButton.outline(
-                                      label: 'Preview invitation',
-                                      onPressed: invite,
-                                    ),
-                                    AcmeButton.outline(
-                                      label: 'Delete workspace',
-                                      enabled: false,
-                                      onPressed: () => setState(
-                                        () => status =
-                                            'ERROR: disabled action ran.',
-                                      ),
-                                    ),
-                                  ],
-                                ),
-                                const SizedBox(height: 20),
-                                Semantics(
-                                  liveRegion: true,
-                                  child: Text(
-                                    status,
-                                    style: TextStyle(
-                                      color: muted,
-                                      fontSize: 13,
-                                    ),
-                                  ),
-                                ),
-                              ],
-                            ),
-                          ),
-                          const SizedBox(height: 24),
-                          AcmeCard(
-                            child: Column(
-                              crossAxisAlignment: CrossAxisAlignment.start,
-                              children: [
-                                const Text(
-                                  'One instance override',
-                                  style: TextStyle(
-                                    fontSize: 20,
-                                    fontWeight: FontWeight.w600,
-                                  ),
-                                ),
-                                const SizedBox(height: 8),
-                                Text(
-                                  'This button uses the same recipe with a local style override.',
-                                  style: TextStyle(color: muted),
-                                ),
-                                const SizedBox(height: 20),
-                                AcmeButton.primary(
-                                  label: 'Run preview',
-                                  style: ButtonStyler()
-                                      .color(const Color(0xFF0E7490))
-                                      .label(.color(const Color(0xFFFFFFFF)))
-                                      .onPressed(
-                                        ButtonStyler().color(
-                                          const Color(0xFF164E63),
-                                        ),
-                                      )
-                                      .onHovered(
-                                        ButtonStyler().color(
-                                          const Color(0xFF155E75),
-                                        ),
-                                      )
-                                      .borderRadius(
-                                        .all(const Radius.circular(999)),
-                                      ),
-                                  onPressed: () => setState(
-                                    () => status =
-                                        'Preview completed. The instance override keeps the callback.',
-                                  ),
-                                ),
-                              ],
-                            ),
-                          ),
-                          const SizedBox(height: 24),
-                          Text(
-                            'Source: lib/ui/  ·  Config: remix.yaml  ·  Preset: default',
-                            style: TextStyle(color: muted, fontSize: 12),
-                          ),
-                        ],
-                      ),
-                    ),
-                  ),
-                ),
-              ),
-            ],
-          ),
-        ),
-      ),
-    );
-  }
-}
-
- - - - - -
Open this symbolWhat it does
SampleAppCreates the application host and switches the theme.
_SampleAppState.buildPlaces AcmeThemeScope below MaterialApp through its builder.
_WorkspacePageState.buildComposes the installed controls and passes their current values.
_WorkspacePageState.saveSimulates a save, then records the name, count, and checkbox value.
_WorkspacePageState.inviteOpens a dialog and reads its local confirmation result.
-

The application owns the TextEditingController and disposes it in dispose. -It owns the selected destination, save state, and callbacks. No request leaves the application.

-

Place the scope below the host

-

MaterialApp.builder wraps the navigation child with the text defaults and recipe scope. -Routes and dialogs can then inherit those values.

-
lib/main.dart · _SampleAppState.buildDart
builder: (context, child) => DefaultTextStyle(
-  style: Theme.of(context).textTheme.bodyMedium!,
-  child: AcmeThemeScope(
-    data: dark ? const AcmeThemeData.dark() : const AcmeThemeData.light(),
-    child: child!,
-  ),
-),
-

Restart the application after replacing its root widget. -Return to the terminal running flutter run. Press R for a hot restart.

-
Check the result

The settings screen shows Sidebar, TextField, Checkbox, Card, and Button. -The default medium buttons remain 36 pixels tall until Step 7.

7 · Customize

Customize a Button or the theme

Choose an instance override, a recipe edit, or a theme value based on which controls should change.

-

One instance: the cyan preview button

-

Open lib/main.dart, _WorkspacePageState.build, and find the Run preview button. -Its style overrides one instance.

-
lib/main.dart · the Run preview styleDart
style: ButtonStyler()
-    .color(const Color(0xFF0E7490))
-    .label(.color(const Color(0xFFFFFFFF)))
-    .onPressed(ButtonStyler().color(const Color(0xFF164E63)))
-    .onHovered(ButtonStyler().color(const Color(0xFF155E75)))
-    .borderRadius(.all(const Radius.circular(999))),
-

The explicit hover and pressed fragments override those recipe states too. -The neighboring Button keeps its recipe. The onPressed callback still belongs to the application.

-

One component family: make medium buttons taller

-

Open lib/ui/components/button.dart, _metricsFor. -Change only the medium minHeight from 36.0 to 44.0.

-
lib/ui/components/button.dart · _metricsForDart
.medium => (
-  minHeight: 44.0,
-  paddingX: 16.0,
-  gap: 8.0,
-  labelSize: 14.0,
-  iconSize: 16.0,
-),
VS Code web showing minHeight 44.0 in the medium Button metrics
Figure 3The saved recipe edit. The editor shows the application-owned file. The terminal shows a later dry-run against the installed project. Open at full size.
-

Restart or reload the running application to see the change. -This edit changes a recipe value. It does not change the generated widget signature.

-

When you change recipe parameters, enums, or annotations, regenerate the adapter.

-
Regenerate after a recipe API changeTerminal
dart run build_runner build --delete-conflicting-outputs
-

The theme: shared values and runtime switching

-

Open lib/ui/theme/theme_data.dart, AcmeThemeData, for shared values. -Open lib/main.dart, _SampleAppState.build, for the light and dark switch.

-

A new token also needs an entry in AcmeThemeData.tokens. -Include its value in constructors, copyWith, equality, and hashCode.

-

See the customization reference for token and theme examples.

-
Check the result

Every medium Button in this default sample uses the 44-pixel minimum height. -The cyan Button keeps its instance override. The review measured Save changes at 44 CSS pixels with device pixel ratio 1.

8 · Exercise the application

Check the visible behavior

A screenshot shows a state. These actions verify how the application reaches that state.

-
    -
  1. Reload the sample to reset its local state.
  2. -
  3. Enter Launchpad Studio in Workspace name.
  4. -
  5. Clear Send a weekly summary.
  6. -
  7. Select Save changes. Try a second press while the spinner is visible.
  8. -
  9. Wait for the result. Confirm Save count: 1 and Summary: off.
  10. -
-
The Save changes button showing a spinner with Launchpad Studio entered and the summary checkbox cleared
Figure 4Saving. Remix renders the loading state and disables the Button. The application supplies loading: saving. Open at full size.
The saved result names Launchpad Studio, save count 1, and summary off
Figure 5Saved. The application callback retains the entered values and reports one completed save. Open at full size.
-
- - - - - -
ActionExpected resultCode to inspect
Select Delete workspace.The disabled callback does not run.enabled: false in _WorkspacePageState.build
Select Run preview.The status reports that the preview completed.The instance Button's onPressed
Select Overview, then Billing.Overview selects. Disabled Billing does not select.AcmeSidebar and RemixSidebarDestination
Select Use dark theme.The scope receives dark theme data._SampleAppState.build
Use the Tab key.Enabled controls receive keyboard focus. Sidebar uses ordinary Tab traversal.The installed widget adapters and Remix behavior
-

Open and confirm a dialog

-

Select Preview invitation, then Confirm. -The dialog closes and the status reports a local confirmation. It sends no invitation.

-
Centered default dialog in dark mode with Cancel and Confirm buttons
Figure 6Default dialog. The panel is centered and its text has no fallback underline. This capture follows a dark-theme switch. Open at full size.
-

Open lib/main.dart, _WorkspacePageState.invite. -Its showRemixDialog builder wraps AcmeDialog in Center, so the panel's maximum width can apply.

-

The host supplies the intended DefaultTextStyle before the dialog captures inherited themes.

-
Check the result

The form keeps its values, loading prevents duplicate saves, disabled controls stay inactive, and the dialog returns its result.

9 · Review updates

Keep the source you edited

Use a diff to inspect the bundled recipe without replacing your source.

Compare the edited Button with its bundled templateTerminal
dart run remix_cli:remix add button --diff
Relevant lines from the observed diffDiff
-    minHeight: 44.0,
-+    minHeight: 36.0,
-

current is your file. proposed is the bundled template. -The removed line is your 44-pixel edit. The added line is the upstream 36-pixel value.

-

The diff reports the difference and leaves the project source unchanged.

-
Run an ordinary add againTerminal
dart run remix_cli:remix add button
Observed preservation result after the planOutput
Preserved theme.
-Preserved button.
-Preserved lib/ui/components/button.g.dart.
-

Confirm that the medium minHeight still equals 44.0 in button.dart.

-
Optional: replace the requested recipe -

Commit or copy your edit before this experiment. The command below replaces the requested Button recipe with the bundled version.

-
Replace Button with the bundled sourceTerminal
dart run remix_cli:remix add button --overwrite
-

Button returns to 36 pixels. An already-installed theme remains unchanged. -Restore the 44-pixel edit if you want the final sample to match the screenshots.

-

Diff each installed item when you update the CLI. Button's diff omits an already-installed theme.

-
Review the theme separatelyTerminal
dart run remix_cli:remix add theme --diff
Check the result

Dry-run, diff, and ordinary add preserve your authored source. -Explicit Button overwrite replaces Button and preserves installed registry dependencies.

10 · Optional preset

Build the same sample with Fortal

Repeat the workflow in a separate Flutter project.

-

Use the CLI terminal in remix_default_demo. These commands move to its parent directory and create the Fortal project.

-
Create the Fortal projectTerminal
cd ..
-flutter create --empty --platforms=web remix_fortal_demo
-cd remix_fortal_demo
-

Repeat Step 2 to add the Remix override and the checkout CLI in this project.

-
Initialize and install Fortal recipesTerminal
dart run remix_cli:remix init --prefix Acme --preset fortal
-dart run remix_cli:remix add button
-dart run remix_cli:remix add checkbox
-dart run remix_cli:remix add textfield
-dart run remix_cli:remix add dialog
-dart run remix_cli:remix add card
-dart run remix_cli:remix add sidebar
-

Fortal Button installs theme -> base_button -> button. -The theme and shared source files differ from the default preset.

-
- - - - -
DefaultFortal
AcmeThemeScopeAcmeScope
AcmeButton.primaryAcmeButton.solid
A small token vocabularyA Radix-inspired theme and recipe vocabulary
Button's local _metricsFor tableFortal-specific sizing and shared control styles
-

Use the Fortal source below for lib/main.dart. -It uses the same application flow with the Fortal API. The default Button height edit does not apply to this project.

-
Complete Fortal main.dart
lib/main.dart · Fortal sampleDart
import 'package:flutter/material.dart';
-import 'package:remix/remix.dart';
-
-import 'ui/ui.dart';
-
-void main() => runApp(const SampleApp());
-
-class SampleApp extends StatefulWidget {
-  const SampleApp({super.key});
-
-  @override
-  State<SampleApp> createState() => _SampleAppState();
-}
-
-class _SampleAppState extends State<SampleApp> {
-  bool dark = false;
-
-  @override
-  Widget build(BuildContext context) {
-    return MaterialApp(
-      title: 'Launchpad — fortal preset',
-      debugShowCheckedModeBanner: false,
-      theme: ThemeData(brightness: dark ? Brightness.dark : Brightness.light),
-      builder: (context, child) => DefaultTextStyle(
-        style: Theme.of(context).textTheme.bodyMedium!,
-        child: AcmeScope(
-          accent: AcmeAccentColor.violet,
-          brightness: dark ? Brightness.dark : Brightness.light,
-          child: child!,
-        ),
-      ),
-      home: WorkspacePage(
-        dark: dark,
-        onTheme: () => setState(() => dark = !dark),
-      ),
-    );
-  }
-}
-
-class WorkspacePage extends StatefulWidget {
-  const WorkspacePage({super.key, required this.dark, required this.onTheme});
-  final bool dark;
-  final VoidCallback onTheme;
-
-  @override
-  State<WorkspacePage> createState() => _WorkspacePageState();
-}
-
-class _WorkspacePageState extends State<WorkspacePage> {
-  final name = TextEditingController(text: 'Launchpad');
-  bool summary = true;
-  bool saving = false;
-  int saves = 0;
-  String destination = 'settings';
-  String status = 'No changes saved yet.';
-
-  @override
-  void dispose() {
-    name.dispose();
-    super.dispose();
-  }
-
-  Future<void> save() async {
-    setState(() => saving = true);
-    await Future<void>.delayed(const Duration(milliseconds: 1500));
-    if (!mounted) return;
-    setState(() {
-      saving = false;
-      saves += 1;
-      status =
-          'Saved ${name.text}. Save count: $saves. Summary: ${summary ? 'on' : 'off'}.';
-    });
-  }
-
-  Future<void> invite() async {
-    final confirmed = await showRemixDialog<bool>(
-      context: context,
-      barrierLabel: 'Close invitation preview',
-      builder: (context) => Center(
-        child: AcmeDialog(
-          title: 'Invite a teammate',
-          description:
-              'This sample records your choice locally. It sends no invitation.',
-          actions: [
-            AcmeButton.outline(
-              label: 'Cancel',
-              onPressed: () => Navigator.pop(context, false),
-            ),
-            AcmeButton.solid(
-              label: 'Confirm',
-              onPressed: () => Navigator.pop(context, true),
-            ),
-          ],
-        ),
-      ),
-    );
-    if (confirmed == true && mounted) {
-      setState(() => status = 'Invitation confirmed in this sample.');
-    }
-  }
-
-  @override
-  Widget build(BuildContext context) {
-    final foreground = widget.dark
-        ? const Color(0xFFFAFAFA)
-        : const Color(0xFF171717);
-    final muted = widget.dark
-        ? const Color(0xFFA3A3A3)
-        : const Color(0xFF737373);
-    final background = widget.dark
-        ? const Color(0xFF0A0A0A)
-        : const Color(0xFFFAFAFA);
-    return DefaultTextStyle(
-      style: TextStyle(color: foreground, fontSize: 15, height: 1.5),
-      child: ColoredBox(
-        color: background,
-        child: SafeArea(
-          child: Row(
-            crossAxisAlignment: CrossAxisAlignment.stretch,
-            children: [
-              SizedBox(
-                width: 230,
-                child: AcmeSidebar<String>(
-                  semanticLabel: 'Workspace navigation',
-                  header: const Padding(
-                    padding: EdgeInsets.all(24),
-                    child: Text(
-                      'LAUNCHPAD',
-                      style: TextStyle(
-                        fontSize: 18,
-                        fontWeight: FontWeight.w700,
-                        letterSpacing: 2,
-                      ),
-                    ),
-                  ),
-                  sections: const [
-                    RemixSidebarSection(
-                      label: 'WORKSPACE',
-                      destinations: [
-                        RemixSidebarDestination(
-                          value: 'overview',
-                          label: 'Overview',
-                        ),
-                        RemixSidebarDestination(
-                          value: 'settings',
-                          label: 'Settings',
-                        ),
-                        RemixSidebarDestination(
-                          value: 'billing',
-                          label: 'Billing',
-                          enabled: false,
-                        ),
-                      ],
-                    ),
-                  ],
-                  selectedValue: destination,
-                  onSelected: (value) => setState(() => destination = value),
-                  footer: Text(
-                    'fortal preset\nApplication-owned source',
-                    style: TextStyle(fontSize: 12, color: muted),
-                  ),
-                ),
-              ),
-              Expanded(
-                child: SingleChildScrollView(
-                  padding: const EdgeInsets.symmetric(
-                    horizontal: 48,
-                    vertical: 44,
-                  ),
-                  child: Align(
-                    alignment: Alignment.topLeft,
-                    child: ConstrainedBox(
-                      constraints: const BoxConstraints(maxWidth: 820),
-                      child: Column(
-                        crossAxisAlignment: CrossAxisAlignment.stretch,
-                        children: [
-                          Row(
-                            children: [
-                              Expanded(
-                                child: Text(
-                                  'WORKSPACE / ${destination.toUpperCase()}',
-                                  style: TextStyle(
-                                    color: muted,
-                                    fontSize: 12,
-                                    letterSpacing: 1.5,
-                                  ),
-                                ),
-                              ),
-                              AcmeButton.outline(
-                                label: widget.dark
-                                    ? 'Use light theme'
-                                    : 'Use dark theme',
-                                onPressed: widget.onTheme,
-                              ),
-                            ],
-                          ),
-                          const SizedBox(height: 32),
-                          Text(
-                            destination == 'settings'
-                                ? 'Workspace settings'
-                                : 'Workspace overview',
-                            style: const TextStyle(
-                              fontSize: 36,
-                              fontWeight: FontWeight.w600,
-                              height: 1.2,
-                            ),
-                          ),
-                          const SizedBox(height: 12),
-                          Text(
-                            'A real Flutter application built from the fortal preset.',
-                            style: TextStyle(color: muted),
-                          ),
-                          const SizedBox(height: 32),
-                          AcmeCard(
-                            child: Column(
-                              crossAxisAlignment: CrossAxisAlignment.stretch,
-                              children: [
-                                const Text(
-                                  'General',
-                                  style: TextStyle(
-                                    fontSize: 20,
-                                    fontWeight: FontWeight.w600,
-                                  ),
-                                ),
-                                const SizedBox(height: 8),
-                                Text(
-                                  'Set the workspace name and your email preference.',
-                                  style: TextStyle(color: muted),
-                                ),
-                                const SizedBox(height: 24),
-                                AcmeTextField(
-                                  controller: name,
-                                  label: 'Workspace name',
-                                  semanticLabel: 'Workspace name',
-                                  helperText:
-                                      'The application owns this text field recipe.',
-                                ),
-                                const SizedBox(height: 16),
-                                AcmeCheckbox(
-                                  label: 'Send a weekly summary',
-                                  selected: summary,
-                                  onChanged: (value) =>
-                                      setState(() => summary = value ?? false),
-                                ),
-                                const SizedBox(height: 24),
-                                Wrap(
-                                  spacing: 12,
-                                  runSpacing: 12,
-                                  children: [
-                                    AcmeButton.solid(
-                                      label: 'Save changes',
-                                      loading: saving,
-                                      onPressed: save,
-                                    ),
-                                    AcmeButton.outline(
-                                      label: 'Preview invitation',
-                                      onPressed: invite,
-                                    ),
-                                    AcmeButton.outline(
-                                      label: 'Delete workspace',
-                                      enabled: false,
-                                      onPressed: () => setState(
-                                        () => status =
-                                            'ERROR: disabled action ran.',
-                                      ),
-                                    ),
-                                  ],
-                                ),
-                                const SizedBox(height: 20),
-                                Semantics(
-                                  liveRegion: true,
-                                  child: Text(
-                                    status,
-                                    style: TextStyle(
-                                      color: muted,
-                                      fontSize: 13,
-                                    ),
-                                  ),
-                                ),
-                              ],
-                            ),
-                          ),
-                          const SizedBox(height: 24),
-                          AcmeCard(
-                            child: Column(
-                              crossAxisAlignment: CrossAxisAlignment.start,
-                              children: [
-                                const Text(
-                                  'One instance override',
-                                  style: TextStyle(
-                                    fontSize: 20,
-                                    fontWeight: FontWeight.w600,
-                                  ),
-                                ),
-                                const SizedBox(height: 8),
-                                Text(
-                                  'This button uses the same recipe with a local style override.',
-                                  style: TextStyle(color: muted),
-                                ),
-                                const SizedBox(height: 20),
-                                AcmeButton.solid(
-                                  label: 'Run preview',
-                                  style: ButtonStyler()
-                                      .color(const Color(0xFF0E7490))
-                                      .label(.color(const Color(0xFFFFFFFF)))
-                                      .onPressed(
-                                        ButtonStyler().color(
-                                          const Color(0xFF164E63),
-                                        ),
-                                      )
-                                      .onHovered(
-                                        ButtonStyler().color(
-                                          const Color(0xFF155E75),
-                                        ),
-                                      )
-                                      .borderRadius(
-                                        .all(const Radius.circular(999)),
-                                      ),
-                                  onPressed: () => setState(
-                                    () => status =
-                                        'Preview completed. The instance override keeps the callback.',
-                                  ),
-                                ),
-                              ],
-                            ),
-                          ),
-                          const SizedBox(height: 24),
-                          Text(
-                            'Source: lib/ui/  ·  Config: remix.yaml  ·  Preset: fortal',
-                            style: TextStyle(color: muted, fontSize: 12),
-                          ),
-                        ],
-                      ),
-                    ),
-                  ),
-                ),
-              ),
-            ],
-          ),
-        ),
-      ),
-    );
-  }
-}
The Fortal sample in dark mode with purple controls and the cyan instance override
Figure 7The Fortal sample. The application supplies the layout. Installed Fortal recipes supply the control appearance. Open at full size.
Fortal dialog in dark mode with a centered panel and normal text decoration
Figure 8Fortal dialog. AcmeScope sits below the application host. Routes inherit its tokens and text defaults. Open at full size.
Check the result

The separate project records preset: fortal and uses AcmeScope and AcmeButton.solid. -Repeat the behavior checks from Step 8.

11 · Validate

Run the checks yourself

Use analysis, behavior tests, and a release build to verify more than appearance.

-

Apply this configuration in each sample's analysis_options.yaml. -The generator version in this checkout produces lint findings in adapters. Keep authored recipes under analysis.

-
analysis_options.yamlYAML
include: package:flutter_lints/flutter.yaml
-
-analyzer:
-  exclude:
-    - lib/ui/**/*.g.dart
-

Create test/workflow_test.dart with the matching test source below. -The imports assume the project names used in Steps 1 and 10.

-
Four default sample tests
test/workflow_test.dart · defaultDart
import 'package:flutter/material.dart';
-import 'package:flutter/rendering.dart';
-import 'package:flutter_test/flutter_test.dart';
-import 'package:remix_default_demo/main.dart';
-
-void main() {
-  Future<void> start(WidgetTester tester) async {
-    tester.view.physicalSize = const Size(1400, 1000);
-    tester.view.devicePixelRatio = 1;
-    addTearDown(tester.view.resetPhysicalSize);
-    addTearDown(tester.view.resetDevicePixelRatio);
-    await tester.pumpWidget(const SampleApp());
-    await tester.pumpAndSettle();
-  }
-
-  testWidgets(
-    'the form saves once while loading and keeps the entered values',
-    (tester) async {
-      await start(tester);
-      await tester.enterText(find.byType(EditableText), 'Launchpad Studio');
-      await tester.tap(find.text('Send a weekly summary'));
-      await tester.tap(find.text('Save changes'));
-      await tester.pump(const Duration(milliseconds: 100));
-      expect(find.textContaining('Save count:'), findsNothing);
-      await tester.tap(find.text('Save changes'), warnIfMissed: false);
-      await tester.pump(const Duration(milliseconds: 1600));
-      await tester.pumpAndSettle();
-      expect(
-        find.text('Saved Launchpad Studio. Save count: 1. Summary: off.'),
-        findsOneWidget,
-      );
-      expect(tester.takeException(), isNull);
-    },
-  );
-
-  testWidgets(
-    'disabled actions stay inactive and the instance override works',
-    (tester) async {
-      await start(tester);
-      await tester.tap(find.text('Delete workspace'), warnIfMissed: false);
-      await tester.pumpAndSettle();
-      expect(find.text('ERROR: disabled action ran.'), findsNothing);
-      await tester.tap(find.text('Run preview'));
-      await tester.pumpAndSettle();
-      expect(
-        find.text(
-          'Preview completed. The instance override keeps the callback.',
-        ),
-        findsOneWidget,
-      );
-      expect(tester.takeException(), isNull);
-    },
-  );
-
-  testWidgets(
-    'the dialog returns its result and the theme changes at runtime',
-    (tester) async {
-      await start(tester);
-      await tester.tap(find.text('Use dark theme'));
-      await tester.pumpAndSettle();
-      expect(find.text('Use light theme'), findsOneWidget);
-      await tester.tap(find.text('Preview invitation'));
-      await tester.pumpAndSettle();
-      expect(find.text('Invite a teammate'), findsOneWidget);
-      final title = tester.renderObject<RenderParagraph>(
-        find.text('Invite a teammate'),
-      );
-      expect(
-        title.text.style?.decoration?.contains(TextDecoration.underline) ??
-            false,
-        isFalse,
-      );
-      await tester.tap(find.text('Confirm'));
-      await tester.pumpAndSettle();
-      expect(find.text('Invite a teammate'), findsNothing);
-      expect(find.text('Invitation confirmed in this sample.'), findsOneWidget);
-      expect(tester.takeException(), isNull);
-    },
-  );
-
-  testWidgets(
-    'Sidebar changes the destination and skips the disabled destination',
-    (tester) async {
-      await start(tester);
-      await tester.tap(find.text('Overview'));
-      await tester.pumpAndSettle();
-      expect(find.text('Workspace overview'), findsOneWidget);
-      await tester.tap(find.text('Billing'), warnIfMissed: false);
-      await tester.pumpAndSettle();
-      expect(find.text('Workspace overview'), findsOneWidget);
-      expect(tester.takeException(), isNull);
-    },
-  );
-}
Four Fortal sample tests
test/workflow_test.dart · FortalDart
import 'package:flutter/material.dart';
-import 'package:flutter/rendering.dart';
-import 'package:flutter_test/flutter_test.dart';
-import 'package:remix_fortal_demo/main.dart';
-
-void main() {
-  Future<void> start(WidgetTester tester) async {
-    tester.view.physicalSize = const Size(1400, 1000);
-    tester.view.devicePixelRatio = 1;
-    addTearDown(tester.view.resetPhysicalSize);
-    addTearDown(tester.view.resetDevicePixelRatio);
-    await tester.pumpWidget(const SampleApp());
-    await tester.pumpAndSettle();
-  }
-
-  testWidgets(
-    'the form saves once while loading and keeps the entered values',
-    (tester) async {
-      await start(tester);
-      await tester.enterText(find.byType(EditableText), 'Launchpad Studio');
-      await tester.tap(find.text('Send a weekly summary'));
-      await tester.tap(find.text('Save changes'));
-      await tester.pump(const Duration(milliseconds: 100));
-      expect(find.textContaining('Save count:'), findsNothing);
-      await tester.tap(find.text('Save changes'), warnIfMissed: false);
-      await tester.pump(const Duration(milliseconds: 1600));
-      await tester.pumpAndSettle();
-      expect(
-        find.text('Saved Launchpad Studio. Save count: 1. Summary: off.'),
-        findsOneWidget,
-      );
-      expect(tester.takeException(), isNull);
-    },
-  );
-
-  testWidgets(
-    'disabled actions stay inactive and the instance override works',
-    (tester) async {
-      await start(tester);
-      await tester.tap(find.text('Delete workspace'), warnIfMissed: false);
-      await tester.pumpAndSettle();
-      expect(find.text('ERROR: disabled action ran.'), findsNothing);
-      await tester.tap(find.text('Run preview'));
-      await tester.pumpAndSettle();
-      expect(
-        find.text(
-          'Preview completed. The instance override keeps the callback.',
-        ),
-        findsOneWidget,
-      );
-      expect(tester.takeException(), isNull);
-    },
-  );
-
-  testWidgets(
-    'the dialog returns its result and the theme changes at runtime',
-    (tester) async {
-      await start(tester);
-      await tester.tap(find.text('Use dark theme'));
-      await tester.pumpAndSettle();
-      expect(find.text('Use light theme'), findsOneWidget);
-      await tester.tap(find.text('Preview invitation'));
-      await tester.pumpAndSettle();
-      expect(find.text('Invite a teammate'), findsOneWidget);
-      final title = tester.renderObject<RenderParagraph>(
-        find.text('Invite a teammate'),
-      );
-      expect(
-        title.text.style?.decoration?.contains(TextDecoration.underline) ??
-            false,
-        isFalse,
-      );
-      await tester.tap(find.text('Confirm'));
-      await tester.pumpAndSettle();
-      expect(find.text('Invite a teammate'), findsNothing);
-      expect(find.text('Invitation confirmed in this sample.'), findsOneWidget);
-      expect(tester.takeException(), isNull);
-    },
-  );
-
-  testWidgets(
-    'Sidebar changes the destination and skips the disabled destination',
-    (tester) async {
-      await start(tester);
-      await tester.tap(find.text('Overview'));
-      await tester.pumpAndSettle();
-      expect(find.text('Workspace overview'), findsOneWidget);
-      await tester.tap(find.text('Billing'), warnIfMissed: false);
-      await tester.pumpAndSettle();
-      expect(find.text('Workspace overview'), findsOneWidget);
-      expect(tester.takeException(), isNull);
-    },
-  );
-}
Run from either sample directoryTerminal
flutter analyze
-flutter test
-flutter build web --release
-

The tests verify retained form values, one save during loading, disabled controls, the instance callback, dialog results, text decoration, and Sidebar selection.

-

A screenshot cannot prove callback behavior or file preservation. The tests and file comparisons provide that evidence.

-

What GitHub CI adds

-

CI means continuous integration. GitHub runs the repository's automated checks when the PR changes.

-

The repository checks install both presets in fresh consumers and check source derivation, documentation, and other package contracts. -These checks run outside Launchpad.

-

For the repository workflow, open .github/workflows/ci.yaml. -For the consumer checks, open tool/check_open_code.dart and the open_code/ fixtures.

-
Check the result

Each sample reports no analyzer issues, passes four tests, and builds its web application. -Hosted package validation remains a release step after publication.

12 · Troubleshoot

Resolve the common failures

Use the reported file or command to find the smallest correction.

-
- - - - - - - - - -
SymptomInspectCorrection
The CLI rejects the Flutter version.flutter --version from the same terminalPut Flutter 3.44.0 on PATH.
Pub cannot resolve Remix beta.9.pubspec_overrides.yamlUse the checkout path from Step 2 until the required release is available.
The CLI asks you to initialize.The terminal directory and remix.yamlRun from the Flutter package root.
The generated class is missing.The CLI generation output and the recipe's part declarationFix the reported error and rerun the add command or build_runner.
The text field lacks an Overlay.lib/main.dart, _SampleAppState.buildUse the complete application host from Step 6.
The default dialog fills the viewport._WorkspacePageState.inviteWrap its AcmeDialog in Center.
Dialog text has an underline.The invoking context's DefaultTextStyle and scope placementUse the host builder from Step 6.
Fortal has no primary constructor.The selected preset and AcmeButtonUse the Fortal source and AcmeButton.solid.
Analysis reports adapter lints.analysis_options.yamlApply the generated-file exclusion from Step 11.
-

The reference guide also covers partial installs, dependency declarations, and command errors.

-

Review notes

What the screenshots establish

Each screenshot has one purpose and a stated capture context.

-

The screenshots contain real browser or editor pixels. Application detail images use browser screenshot crops. -Each screenshot link opens its full resolution file.

-
- - - - - -
EvidenceWhat it establishesWhat else to check
First renderThe installed default Button renders in the supplied host.Read the installation output from Step 4.
EditorThe saved application recipe contains the 44-pixel edit.Run diff and preservation checks from Step 9.
Loading and saved resultThe application displays both states with the entered values.Run the duplicate-save behavior test.
Default and Fortal dialogsThe supplied hosts render centered panels and normal text.Run the dialog result and text-decoration test.
Fortal dark themeThe separate preset renders its theme and controls.Verify the separate preset configuration and generated source.
-

The captures came from Flutter 3.44.0 release web builds and VS Code web during the September 7, 2026 review. -The current screenshots cover desktop behavior. They do not certify every component or native platform.

-

The sample archive records the reviewed source and required checkout paths. -The evidence manifest records screenshot and source digests.

-

Read the reference guide for the full catalog, configuration rules, and source ownership model.

-
-
Examples reviewed September 7, 2026. Tutorial design reviewed September 8, 2026. Commands use the checkout CLI. Screenshots show real applications and the actual editor. Assets and licenses.
-

- - - - - - - diff --git a/docs/tutorials/settings-screen.mdx b/docs/tutorials/settings-screen.mdx index a9bbdbfc..db4dc9b8 100644 --- a/docs/tutorials/settings-screen.mdx +++ b/docs/tutorials/settings-screen.mdx @@ -12,9 +12,8 @@ component recipes and their theme. The finished screenshot includes the medium Button height edit below. It is an application example, not a screen the CLI generates for you. -This walkthrough uses the same reviewed code as the -[complete offline tutorial](/remix-cli-tutorial.html). The -[sample download](/assets/remix-cli-tutorial/sample-projects.zip) contains +This walkthrough includes the complete application and test source below. +The [sample download](/assets/remix-cli-tutorial/sample-projects.zip) contains both projects, generated adapters, and four behavior tests per preset. ## Before you start @@ -186,11 +185,19 @@ dart run remix_cli:remix add sidebar The existing theme is preserved. Sidebar also installs its `toggle` dependency. Each command updates the barrel and generates the needed adapters. -Download and unzip the [reviewed samples](/assets/remix-cli-tutorial/sample-projects.zip). -Copy `default_demo/lib/main.dart` into your application's `lib/main.dart`. -You can also read and copy the [complete source inline](/remix-cli-tutorial.html#compose). +Replace your application's `lib/main.dart` with the complete default source below. +The same file is `default_demo/lib/main.dart` in the +[reviewed samples](/assets/remix-cli-tutorial/sample-projects.zip). Keep your CLI-installed `lib/ui` files; the next step changes one of them. + + + + + + + + The complete app owns the form values, save counter, loading flag, dialog result, and sidebar selection. It uses `MaterialApp` as the navigation host. Keep its host builder and scope placement together: the text field needs an @@ -207,7 +214,7 @@ instance-specific colors and rounded shape. This changes a recipe value, not the generated widget signature. If you change recipe parameters, enums, or annotations, regenerate the adapter as described -in the [customization reference](/remix-cli-guide.html#customize). +in the [customization reference](/open-code#the-three-levels-of-customization). ## Check behavior and preserve edits @@ -238,7 +245,7 @@ dart run remix_cli:remix add button Confirm the medium height remains `44.0`. `--overwrite` is an explicit replacement operation; do not use it to inspect an update. See -[source-preservation details](/remix-cli-tutorial.html#preserve) before trying it. +[source-preservation details](/open-code#updating) before trying it. ## Try Fortal separately @@ -268,7 +275,17 @@ dart run remix_cli:remix add card dart run remix_cli:remix add sidebar ``` -Copy `fortal_demo/lib/main.dart` from the download to this app's `lib/main.dart`. +Replace this app's `lib/main.dart` with the complete Fortal source below, also +available as `fortal_demo/lib/main.dart` in the download. + + + + + + + + + The Fortal example uses `AcmeScope` and `AcmeButton.solid`, rather than `AcmeThemeScope` and `AcmeButton.primary`. Keep its complete host configuration. Do not apply the default preset's Button metrics edit to Fortal. @@ -283,6 +300,20 @@ for your form. Repeat the same behavior checks. Neither preset adds a Copy `test/workflow_test.dart` from the matching downloaded project into each sample. Keep the project names used above; the tests import those names. + + + + + + + + + + + + + + Replace `analysis_options.yaml` with the reviewed configuration: {/* tutorial-source: analysis-options */} @@ -317,11 +348,11 @@ failures before treating a screenshot as evidence that the sample works. - **Missing overlay or incorrect dialog text:** restore the complete sample's application host and scope placement. - **No `primary` constructor:** use the default sample with `default`, or the `solid` constructor with `fortal`. -See the [full troubleshooting table](/remix-cli-tutorial.html#troubleshoot) -and [Open Code reference](/open-code) for configuration and command details. +See the [Open Code reference](/open-code) for configuration and command details. Screenshots were captured from Flutter release web builds and an editor during the September 7 review. They show desktop states, not certification of all components or platforms. [Recorded evidence](/assets/remix-cli-tutorial/evidence.json) -tracks their hashes and source checkout. [Asset licenses](/assets/remix-cli-tutorial/README.md) -and the original offline HTML remain alongside this documentation. +tracks their hashes and source checkout. [Assets and evidence](/assets/remix-cli-tutorial/README.md) +remain alongside this documentation. Source panels above are expanded from the +same archive during the documentation build, not maintained as separate copies. diff --git a/tool/check_tutorial_assets.py b/tool/check_tutorial_assets.py index d1954bf3..68f4d298 100644 --- a/tool/check_tutorial_assets.py +++ b/tool/check_tutorial_assets.py @@ -5,50 +5,12 @@ """ import hashlib -from html.parser import HTMLParser import json from pathlib import Path import re import zipfile - -class TutorialCode(HTMLParser): - """Read literal pre/code blocks, decoding HTML entities once.""" - - def __init__(self): - super().__init__() - self.in_pre = False - self.language = None - self.text = [] - self.figure = None - self.blocks = {} - - def handle_starttag(self, tag, attrs): - if tag == "figure": - self.figure = dict(attrs).get("id") - if tag == "pre": - self.in_pre = True - if tag == "code" and self.in_pre: - classes = dict(attrs).get("class", "").split() - self.language = next( - (name.removeprefix("language-") for name in classes - if name.startswith("language-")), "text") - self.text = [] - - def handle_data(self, data): - if self.language is not None: - self.text.append(data) - - def handle_endtag(self, tag): - if tag == "code" and self.language is not None: - language = "text" if self.language == "none" else self.language - if self.figure: - self.blocks[self.figure] = (language, "".join(self.text)) - self.language = None - if tag == "pre": - self.in_pre = False - if tag == "figure": - self.figure = None +from prepare_docs_site import SOURCE_TAG def check_assets(root): @@ -80,8 +42,7 @@ def check(label, data, expected): def check_content(root): failures = [] - offline = TutorialCode() - offline.feed((root / "docs/remix-cli-tutorial.html").read_text()) + recorded = json.loads((root / "docs/assets/remix-cli-tutorial/code-evidence.json").read_text()) native = root / "docs/tutorials/settings-screen.mdx" source = native.read_text() blocks = re.findall( @@ -93,12 +54,21 @@ def check_content(root): if len(blocks) != len(re.findall(r"^```\w+", source, re.MULTILINE)): failures.append("Every native tutorial code block needs a tutorial-source marker") for block_id, language, code in blocks: - if offline.blocks.get(block_id) != (language, code): - failures.append(f"Native tutorial code block {block_id} differs from the offline tutorial") + expected = recorded.get(block_id, {}) + if expected.get("language") != language or expected.get("sha256") != hashlib.sha256(code.encode()).hexdigest(): + failures.append(f"Native tutorial code block {block_id} differs from recorded evidence") + if {block[0] for block in blocks} != set(recorded): + failures.append("Native tutorial is missing a recorded code block") + expected_sources = {(preset, file) for preset in ["default", "fortal"] + for file in ["lib/main.dart", "test/workflow_test.dart"]} + if set(SOURCE_TAG.findall(source)) != expected_sources: + failures.append("Tutorial must include both complete applications and both test files") + if "') + + +def expand_sources(text, archive): + def replace(match): + path = f"{match[1]}_demo/{match[2]}" + code = archive.read(path).decode().rstrip("\n") + return f"```dart title=\"{match[2]}\"\n{code}\n```" + result = SOURCE_TAG.sub(replace, text) + if "ignore
a < b && c
') - self.assertEqual(parser.blocks, {"example": ("dart", "a < b && c")}) + path.write_text(path.read_text().replace('', '')) + self.assertTrue(any("both complete applications" in error for error in check_content(self.root))) + + def test_panels_use_exact_downloaded_source(self): + with zipfile.ZipFile(self.root / "docs/assets/remix-cli-tutorial/sample-projects.zip") as archive: + for preset in ["default", "fortal"]: + for file in ["lib/main.dart", "test/workflow_test.dart"]: + rendered = expand_sources(f'', archive) + self.assertIn(archive.read(f"{preset}_demo/{file}").decode().rstrip("\n"), rendered) + self.assertTrue(rendered.startswith('```dart title=')) + + def test_unknown_source_include_is_rejected(self): + with self.assertRaises(ValueError): + expand_sources('', None) + + def test_staging_is_repeatable_and_preserves_authoring_source(self): + source = Path(__file__).resolve().parents[1] + shutil.copyfile(source / "docs.json", self.root / "docs.json") + page = self.root / "docs/tutorials/settings-screen.mdx" + before = page.read_bytes() + prepare(self.root) + staged = self.root / "apps/docs/.generated/content/tutorials/settings-screen.mdx" + first = staged.read_bytes() + prepare(self.root) + self.assertEqual(staged.read_bytes(), first) + self.assertEqual(page.read_bytes(), before) + self.assertNotIn(b" Date: Wed, 9 Sep 2026 13:05:35 -0400 Subject: [PATCH 6/7] feat(docs): apply shared Concepta theme and embed live component examples --- apps/demo/lib/components/checkbox_group.dart | 51 +++ apps/demo/lib/components/sidebar.dart | 57 +++ apps/demo/lib/components/skeleton.dart | 38 ++ apps/demo/lib/main.directories.g.dart | 31 ++ apps/demo/test/docs_preview_test.dart | 100 ++++++ apps/demo/web/index.html | 8 + apps/docs/.gitignore | 1 + apps/docs/README.md | 32 +- apps/docs/app/[[...slug]]/page.tsx | 10 +- apps/docs/app/global.css | 17 + apps/docs/app/layout.tsx | 11 +- apps/docs/components/flutter-preview.tsx | 52 +++ apps/docs/components/mdx.tsx | 2 + apps/docs/docs.config.ts | 8 +- apps/docs/next.config.mjs | 7 + apps/docs/package.json | 7 +- apps/docs/pnpm-lock.yaml | 22 +- apps/docs/pnpm-workspace.yaml | 2 +- apps/docs/scripts/build-previews.mjs | 6 + docs.json | 6 +- docs/component-previews.json | 350 +++++++++++++++++++ docs/components/accordion.mdx | 2 +- docs/components/avatar.mdx | 2 +- docs/components/badge.mdx | 2 +- docs/components/button.mdx | 2 +- docs/components/callout.mdx | 2 +- docs/components/card.mdx | 2 +- docs/components/checkbox.mdx | 2 +- docs/components/checkbox_group.mdx | 2 +- docs/components/dialog.mdx | 2 +- docs/components/divider.mdx | 2 +- docs/components/icon_button.mdx | 2 +- docs/components/link.mdx | 4 +- docs/components/menu.mdx | 2 +- docs/components/progress.mdx | 2 +- docs/components/radio.mdx | 2 +- docs/components/select.mdx | 2 +- docs/components/slider.mdx | 2 +- docs/components/spinner.mdx | 2 +- docs/components/switch.mdx | 2 +- docs/components/tabs.mdx | 2 +- docs/components/textfield.mdx | 2 +- docs/components/toggle.mdx | 2 +- docs/components/toggle_group.mdx | 2 +- docs/components/tooltip.mdx | 2 +- tool/prepare_docs_site.py | 21 +- tool/test_tutorial_assets.py | 4 + 47 files changed, 845 insertions(+), 48 deletions(-) create mode 100644 apps/demo/lib/components/checkbox_group.dart create mode 100644 apps/demo/lib/components/sidebar.dart create mode 100644 apps/demo/lib/components/skeleton.dart create mode 100644 apps/demo/test/docs_preview_test.dart create mode 100644 apps/docs/components/flutter-preview.tsx create mode 100644 apps/docs/scripts/build-previews.mjs create mode 100644 docs/component-previews.json diff --git a/apps/demo/lib/components/checkbox_group.dart b/apps/demo/lib/components/checkbox_group.dart new file mode 100644 index 00000000..0da7f3fa --- /dev/null +++ b/apps/demo/lib/components/checkbox_group.dart @@ -0,0 +1,51 @@ +import 'package:flutter/material.dart'; +import 'package:remix/remix.dart'; +import 'package:remix_fortal/remix_fortal.dart'; +import 'package:widgetbook_annotation/widgetbook_annotation.dart' as widgetbook; + +@widgetbook.UseCase(name: 'Interests', type: RemixCheckboxGroup) +Widget buildCheckboxGroupUseCase(BuildContext context) => + const CheckboxGroupExample(); + +class CheckboxGroupExample extends StatefulWidget { + const CheckboxGroupExample({super.key}); + + @override + State createState() => _CheckboxGroupExampleState(); +} + +class _CheckboxGroupExampleState extends State { + Set _values = {'Design'}; + + @override + Widget build(BuildContext context) => Scaffold( + body: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + spacing: 16, + children: [ + RemixCheckboxGroup( + values: _values, + onChanged: (values) => setState(() => _values = values), + semanticLabel: 'Interests', + child: const Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + FortalCheckboxGroupItem(value: 'Design', label: 'Design'), + FortalCheckboxGroupItem(value: 'Code', label: 'Code'), + FortalCheckboxGroupItem( + value: 'Research', + label: 'Research', + enabled: false, + ), + ], + ), + ), + Text('Selected: ${_values.isEmpty ? 'none' : _values.join(', ')}'), + ], + ), + ), + ); +} diff --git a/apps/demo/lib/components/sidebar.dart b/apps/demo/lib/components/sidebar.dart new file mode 100644 index 00000000..a6179add --- /dev/null +++ b/apps/demo/lib/components/sidebar.dart @@ -0,0 +1,57 @@ +import 'package:flutter/material.dart'; +import 'package:remix/remix.dart'; +import 'package:remix_fortal/remix_fortal.dart'; +import 'package:widgetbook_annotation/widgetbook_annotation.dart' as widgetbook; + +@widgetbook.UseCase(name: 'Workspace navigation', type: RemixSidebar) +Widget buildSidebarUseCase(BuildContext context) => const SidebarExample(); + +class SidebarExample extends StatefulWidget { + const SidebarExample({super.key}); + + @override + State createState() => _SidebarExampleState(); +} + +class _SidebarExampleState extends State { + String _selected = 'Overview'; + + @override + Widget build(BuildContext context) => Scaffold( + body: Center( + child: SizedBox( + width: 256, + height: 320, + child: FortalSidebar( + sections: const [ + RemixSidebarSection( + label: 'Workspace', + destinations: [ + RemixSidebarDestination( + value: 'Overview', + label: 'Overview', + icon: Icons.space_dashboard_outlined, + ), + RemixSidebarDestination( + value: 'Settings', + label: 'Settings', + icon: Icons.settings_outlined, + ), + RemixSidebarDestination( + value: 'Billing', + label: 'Billing', + icon: Icons.credit_card, + enabled: false, + ), + ], + ), + ], + selectedValue: _selected, + onSelected: (value) => setState(() => _selected = value), + semanticLabel: 'Workspace navigation', + footer: Text('Selected: $_selected'), + ), + ), + ), + ); +} diff --git a/apps/demo/lib/components/skeleton.dart b/apps/demo/lib/components/skeleton.dart new file mode 100644 index 00000000..bfa0ce40 --- /dev/null +++ b/apps/demo/lib/components/skeleton.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:remix/remix.dart'; +import 'package:remix_fortal/remix_fortal.dart'; +import 'package:widgetbook_annotation/widgetbook_annotation.dart' as widgetbook; + +@widgetbook.UseCase(name: 'Loading content', type: RemixSkeleton) +Widget buildSkeletonUseCase(BuildContext context) => const SkeletonExample(); + +class SkeletonExample extends StatefulWidget { + const SkeletonExample({super.key}); + + @override + State createState() => _SkeletonExampleState(); +} + +class _SkeletonExampleState extends State { + bool _loading = true; + + @override + Widget build(BuildContext context) => Scaffold( + body: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + spacing: 24, + children: [ + FortalSkeleton( + loading: _loading, + child: const Text('Your workspace is ready'), + ), + FortalButton.outline( + label: _loading ? 'Show content' : 'Show skeleton', + onPressed: () => setState(() => _loading = !_loading), + ), + ], + ), + ), + ); +} diff --git a/apps/demo/lib/main.directories.g.dart b/apps/demo/lib/main.directories.g.dart index 71fce2c3..ba05e834 100644 --- a/apps/demo/lib/main.directories.g.dart +++ b/apps/demo/lib/main.directories.g.dart @@ -17,6 +17,8 @@ import 'package:demo/components/button.dart' as _demo_components_button; import 'package:demo/components/callout.dart' as _demo_components_callout; import 'package:demo/components/card.dart' as _demo_components_card; import 'package:demo/components/checkbox.dart' as _demo_components_checkbox; +import 'package:demo/components/checkbox_group.dart' + as _demo_components_checkbox_group; import 'package:demo/components/code.dart' as _demo_components_code; import 'package:demo/components/data_list.dart' as _demo_components_data_list; import 'package:demo/components/data_table.dart' as _demo_components_data_table; @@ -35,6 +37,8 @@ import 'package:demo/components/radio.dart' as _demo_components_radio; import 'package:demo/components/segmented_control.dart' as _demo_components_segmented_control; import 'package:demo/components/select.dart' as _demo_components_select; +import 'package:demo/components/sidebar.dart' as _demo_components_sidebar; +import 'package:demo/components/skeleton.dart' as _demo_components_skeleton; import 'package:demo/components/slider.dart' as _demo_components_slider; import 'package:demo/components/spinner.dart' as _demo_components_spinner; import 'package:demo/components/switch.dart' as _demo_components_switch; @@ -197,6 +201,15 @@ final directories = <_widgetbook.WidgetbookNode>[ ), ], ), + _widgetbook.WidgetbookComponent( + name: 'RemixCheckboxGroup', + useCases: [ + _widgetbook.WidgetbookUseCase( + name: 'Interests', + builder: _demo_components_checkbox_group.buildCheckboxGroupUseCase, + ), + ], + ), _widgetbook.WidgetbookComponent( name: 'RemixDataList', useCases: [ @@ -342,6 +355,24 @@ final directories = <_widgetbook.WidgetbookNode>[ ), ], ), + _widgetbook.WidgetbookComponent( + name: 'RemixSidebar', + useCases: [ + _widgetbook.WidgetbookUseCase( + name: 'Workspace navigation', + builder: _demo_components_sidebar.buildSidebarUseCase, + ), + ], + ), + _widgetbook.WidgetbookComponent( + name: 'RemixSkeleton', + useCases: [ + _widgetbook.WidgetbookUseCase( + name: 'Loading content', + builder: _demo_components_skeleton.buildSkeletonUseCase, + ), + ], + ), _widgetbook.WidgetbookComponent( name: 'RemixSlider', useCases: [ diff --git a/apps/demo/test/docs_preview_test.dart b/apps/demo/test/docs_preview_test.dart new file mode 100644 index 00000000..c8a94ff6 --- /dev/null +++ b/apps/demo/test/docs_preview_test.dart @@ -0,0 +1,100 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:demo/components/checkbox_group.dart'; +import 'package:demo/components/sidebar.dart'; +import 'package:demo/components/skeleton.dart'; +import 'package:demo/main.directories.g.dart'; +import 'package:demo/main.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:remix_fortal/remix_fortal.dart'; +import 'package:widgetbook/widgetbook.dart'; + +void main() { + test('preview theme query matches the catalog addon contract', () { + final addon = FortalThemeAddon(); + expect(addon.groupName, 'theme'); + for (final name in ['light', 'dark']) { + expect(addon.valueFromQueryGroup({'name': name}).name, name); + } + }); + + test('every documentation component maps to real Widgetbook routes', () { + final root = WidgetbookRoot(children: directories); + final routes = root.leaves + .whereType() + .map((node) => node.path) + .toSet(); + final manifest = + jsonDecode( + File('../../docs/component-previews.json').readAsStringSync(), + ) + as Map; + final pages = Directory('../../docs/components') + .listSync() + .whereType() + .map((file) => file.uri.pathSegments.last.replaceAll('.mdx', '')) + .toSet(); + expect(manifest.keys.toSet(), pages); + for (final entry in manifest.entries) { + expect(File('lib/components/${entry.key}.dart').existsSync(), isTrue); + final cases = entry.value['cases'] as List; + expect(cases, isNotEmpty); + for (final example in cases) { + expect( + routes, + contains(example['path']), + reason: '${entry.key}: ${example['name']}', + ); + } + } + }); + + Future show(WidgetTester tester, Widget child) async { + await tester.pumpWidget(MaterialApp(home: FortalScope(child: child))); + await tester.pump(const Duration(milliseconds: 100)); + expect(tester.takeException(), isNull); + } + + testWidgets( + 'checkbox example changes its controlled set and keeps research disabled', + (tester) async { + await show(tester, const CheckboxGroupExample()); + await tester.tap(find.text('Code')); + await tester.pump(); + expect(find.text('Selected: Design, Code'), findsOneWidget); + await tester.tap(find.text('Research')); + await tester.pump(); + expect(find.text('Selected: Design, Code'), findsOneWidget); + }, + ); + + testWidgets('sidebar example changes selection and keeps billing disabled', ( + tester, + ) async { + await show(tester, const SidebarExample()); + await tester.tap(find.text('Settings')); + await tester.pump(); + expect(find.text('Selected: Settings'), findsOneWidget); + await tester.tap(find.text('Billing')); + await tester.pump(); + expect(find.text('Selected: Settings'), findsOneWidget); + }); + + testWidgets('skeleton example can reveal its content', (tester) async { + await show(tester, const SkeletonExample()); + expect( + tester.widget(find.byType(FortalSkeleton)).loading, + isTrue, + ); + await tester.tap(find.text('Show content')); + await tester.pump(); + expect( + tester.widget(find.byType(FortalSkeleton)).loading, + isFalse, + ); + expect(find.text('Show skeleton'), findsOneWidget); + await tester.pumpWidget(const SizedBox.shrink()); + }); +} diff --git a/apps/demo/web/index.html b/apps/demo/web/index.html index f70557de..a83f9fd7 100644 --- a/apps/demo/web/index.html +++ b/apps/demo/web/index.html @@ -34,6 +34,14 @@ + diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore index e10d215a..09ec4f91 100644 --- a/apps/docs/.gitignore +++ b/apps/docs/.gitignore @@ -3,5 +3,6 @@ node_modules/ .source/ .generated/ public/assets/ +public/previews/ *.tsbuildinfo next-env.d.ts diff --git a/apps/docs/README.md b/apps/docs/README.md index a46cd660..a29eb032 100644 --- a/apps/docs/README.md +++ b/apps/docs/README.md @@ -5,7 +5,8 @@ Fumadocs theme. It does not contain a second editable copy of the documentation. ## Run -Use Node 24.14+, pnpm 11.5.3, and Python 3.9+: +Use Node 24.14+, pnpm 11.5.3, Python 3.9+, and FVM with the repository's +pinned Flutter SDK. Run `fvm flutter pub get` in `apps/demo` first: ```bash cd apps/docs @@ -29,7 +30,7 @@ Static export and deployment under a path prefix are not configured. The theme is not published on npm yet. `package.json` and the lockfile pin the reviewed `conceptadev/docs-theme` commit -`57be8044beaf23c5414a671693b297615560095c`. pnpm fetches this GitHub dependency +`75c0bc67a2b075b8d64da7daa206e9f341d00c84`. pnpm fetches this GitHub dependency over SSH and builds it; only this exact Git source is allowed to run scripts. Installation requires GitHub access to that currently internal repository. No theme source or credentials are vendored here. @@ -56,3 +57,30 @@ retains existing `Info`, `Note`, `Warning`, and single-example `CodeGroup` tags. The retired standalone tutorial and guide URLs redirect to their native MDX replacements. Old HTML files and their renderer dependencies remain recoverable from Git history, not shipped alongside the new app. + +## Live component examples + +Every component page pairs a live Widgetbook preview with its real catalog +source. `docs/component-previews.json` selects the generated Widgetbook routes; +`tool/prepare_docs_site.py` includes `apps/demo/lib/components/.dart` +directly. Edit these sources, not the generated MDX. Source panels are catalog +examples with Fortal styling, not standalone applications. + +Both `pnpm dev` and `pnpm build` build that same Flutter catalog into ignored +`public/previews`. `/previews/` opens the full catalog; embedded routes use +Widgetbook's native preview mode. No separate renderer or remote deployment +is required. To iterate on docs alone after the initial build, run `pnpm content` +and `pnpm exec next dev`. Rebuild previews after changing Flutter examples. + +`apps/demo/test/docs_preview_test.dart` checks page coverage, actual generated +routes, and the new interactive examples. Run it from `apps/demo` with +`fvm flutter test test/docs_preview_test.dart test/catalog_test.dart`. + +The build uses the current Git commit for page-source links. Set +`DOCS_SOURCE_REF` explicitly when building without a Git checkout. Configure +`NEXT_PUBLIC_SITE_URL` separately for canonical metadata. + +Shared fonts, reading styles, and logo support belong in `conceptadev/docs-theme`. +Remix owns its existing artwork, green accent, and Flutter preview integration. +The theme documents its Concepta design-system reference; private design-system +source and assets are not copied into this repository. diff --git a/apps/docs/app/[[...slug]]/page.tsx b/apps/docs/app/[[...slug]]/page.tsx index affe57c3..996ca28c 100644 --- a/apps/docs/app/[[...slug]]/page.tsx +++ b/apps/docs/app/[[...slug]]/page.tsx @@ -10,11 +10,13 @@ export default async function Page({ params }: PageProps<'/[[...slug]]'>) { const page = source.getPage((await params).slug); if (!page) notFound(); const MDX = page.data.body; - return - {page.data.title} - {page.data.description} + return item.depth <= 3)} full={page.data.full}> +
+ {page.data.title} + {page.data.description} +
- View page source + View page source on GitHub
; } export function generateStaticParams() { return source.generateParams(); } diff --git a/apps/docs/app/global.css b/apps/docs/app/global.css index 429c060e..ee873fe9 100644 --- a/apps/docs/app/global.css +++ b/apps/docs/app/global.css @@ -2,3 +2,20 @@ @import 'fumadocs-ui/css/neutral.css'; @import 'fumadocs-ui/css/preset.css'; @import '@conceptadev/docs-theme/theme.css'; + +/* Product identity stays here; the shared theme owns reading/layout rules. */ +.remix-docs { + --docs-primary-light: #087a0a; + --docs-primary-dark: #00eb03; +} +.remix-docs-label { font-size: 0.875rem; color: var(--color-fd-muted-foreground); } +.remix-preview { margin-block: 0 2rem; } +.remix-preview-toolbar { display: flex; align-items: center; flex-wrap: wrap; gap: 0.75rem; padding: 0.75rem 1rem; border-bottom: 1px solid var(--color-fd-border); font-size: 0.875rem; } +.remix-preview-toolbar select { max-width: 100%; min-height: 2.75rem; padding: 0.375rem 0.75rem; background: var(--color-fd-background); border: 1px solid var(--color-fd-border); border-radius: 0.375rem; color: var(--color-fd-foreground); } +.remix-preview-toolbar a { margin-left: auto; text-decoration: underline; text-underline-offset: 0.2em; } +.remix-preview-stage { position: relative; height: 400px; background: var(--color-fd-background); } +.remix-preview-stage iframe { width: 100%; height: 100%; border: 0; } +.remix-preview-status { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1rem; padding: 1.5rem; text-align: center; background: var(--color-fd-background); } +.remix-preview-status button { min-height: 2.75rem; padding: 0.5rem 1rem; border-radius: 0.375rem; background: var(--color-fd-primary); color: var(--color-fd-primary-foreground); font-weight: 600; } +.remix-preview-caption { padding: 0.75rem 1rem; border-top: 1px solid var(--color-fd-border); color: var(--color-fd-muted-foreground); font-size: 0.875rem; line-height: 1.5; } +.remix-preview-caption a { text-decoration: underline; text-underline-offset: 0.2em; } diff --git a/apps/docs/app/layout.tsx b/apps/docs/app/layout.tsx index 80117f91..160f8a46 100644 --- a/apps/docs/app/layout.tsx +++ b/apps/docs/app/layout.tsx @@ -6,11 +6,16 @@ import { docsConfig } from '@/docs.config'; import { source } from '@/lib/source'; import './global.css'; -export const metadata = createSiteMetadata(docsConfig); +export const metadata = { + ...createSiteMetadata(docsConfig), + icons: { icon: '/assets/favicon.png' }, +}; export default function RootLayout({ children }: { children: ReactNode }) { - return + return - {children} + Documentation }} + >{children} ; } diff --git a/apps/docs/components/flutter-preview.tsx b/apps/docs/components/flutter-preview.tsx new file mode 100644 index 00000000..2215f677 --- /dev/null +++ b/apps/docs/components/flutter-preview.tsx @@ -0,0 +1,52 @@ +'use client'; + +import { useEffect, useId, useRef, useState } from 'react'; + +export function FlutterPreview({ title, cases }: { + title: string; + cases: { name: string; path: string }[]; +}) { + const id = useId(); + const frame = useRef(null); + const [path, setPath] = useState(cases[0].path); + const [mode, setMode] = useState('light'); + const [attempt, setAttempt] = useState(0); + const [status, setStatus] = useState<'loading' | 'ready' | 'slow'>('loading'); + const query = new URLSearchParams({ path, theme: `{name:${mode}}` }); + const catalogUrl = `/previews/#/?${query}`; + const previewUrl = `${catalogUrl}&preview&attempt=${attempt}`; + + useEffect(() => { + setStatus('loading'); + const timeout = window.setTimeout(() => setStatus('slow'), 25000); + const onMessage = (event: MessageEvent) => { + if (event.origin !== window.location.origin || event.source !== frame.current?.contentWindow || event.data?.type !== 'remix-preview-ready') return; + window.clearTimeout(timeout); + setStatus('ready'); + }; + window.addEventListener('message', onMessage); + return () => { window.clearTimeout(timeout); window.removeEventListener('message', onMessage); }; + }, [previewUrl]); + + return
+
+ + + + + Open catalog +
+
+

<^oZ)iNPh|?hBiSSF! zO}^zk*!wpNaAxOqY$m)$U7Wf-(j*i4vUtu0w94L* zQztEwTh2xK?AxH^WL)O#TB;?@CJ`@kYnn1LDhA&Lbt4teD1HG%VoKfLMw<85*ApvR z8k;7cO+H(v+Lf3o%>LrFHgucwCAxlGnG}3GhnIXZL zVO3;JM^A2UWM%std9|fo`{j_9WJkD)oM8K7gMt5xdl7$LF8v3m&)@nPKR6|iejV>x z2O&LuUUGZ>R9RyUdsFl^oSJ6j72VwJoliMeXE~1YA5d#hwNlWg#1PzPaB-9T zj|b%r9<5L89ein^2+Ul4<#}%4M?~%`&08bgRWe{MTid??srl}MhGy+mRpoaDn}k z+SMIA1r^yO+E1lj1|RW#y8=PLvToqcoh>&=Z-Y7@voEM(x<*}xqaJ-7M67xUt)%x| zy)#K@tLQ9NcPSs1jT_W39{X+LO90l5Y}b45nQ{$tSIxXfq|#+sb`6n2$z|2{H?c)>JenWxCzQxAe~1n&HmoZy z<~zr^UXA1;XF}InF1aR*S1ff?aE#_;`##X3F2QtO=)r0Q``NY5_vDm zN~ZyYCM=dOKZ+GHwP?l^Vg>4iJT}4(e&K<%*~a!=S9URVc6I-T;aY z3xH)3p$WB{U#D}cQ8{&2t;&)0ro%U1Qm22;F5@xuzHi^j%)-(-hii^Zh6@uhQl#yAZ=Y{iVb^}4!c*gcdUSy~MXRT`;B!wbm`{4>waI@E8A z(&gOv(UCDT+iVZ7TbyHL>SH-b@CnR2!MPZOrlZX>O)FgpBP7z*`33TgLr>R{o;i`083+ zofad8M-ue9Lm;lVv2o~1kt`a>wyg7DfCNwEU05>*g!I!#cO%+s_%Tfu$0V`AYqmO? z3_|vf1Hvn%u3#?Ooi4JNWNisHVgv2!Uz43p>Yu*Ody|L0^|Y)%1QWkMN4nqMfexqK z{<7sZtFYA06y$Q|7o`QA6%gStpdh#l)LfJ zTI?9=z~z&nT-&*n{L>W0!iMIlV(hAcZly?2x~^64Mo5io=Pv+v4EIf2*r##0c!PBH z6H@?T9+oe>J80c&y!vjk>-7v?#qGpS@J?Od<&NrB0i%0Lckq;{&+;1zV5LM~!Vh!r z^YRY~VEbt;oi;aVyIw{@+!yX>?t=#Gm-y}P+N4zjakHb&K3;P!HIFBH)~)lUweu18 zIU6_S{9oxU20K(~cnqlAzPc(ohyq@J;yfFY`Gvo!yq@?(@c*VlLIRsqdy8ap8 z#fQ)RH=meuibQtrq%4VGP>hWLvlk!Cl&6e)>nC-P zYoD3I8!!aPl&|B~HQKJ9EJ}==F9nZm4Oi=DsW#yo^WZF8l-H|kRzg_u_%#`3uFRYZ zH{NpXf{^pE=@^~@_)$-zk(Phj`k2RkcoCj{t!YXP_Sx0mu zH-M?O{RV*gzNL>4fz^{jY?-DZSwG^Tv(5=Zc0_Ej-z%>SBfW{4R1Rp=dMcVPC7nG+ zo}bz3{yG6W?P5eG8ak%{D|6h=%|SNu+$(vVmVP}PbE>wRh00dHBXZ-l5_rO2AmF@pbdKP}eRTu{?D%-SDZKvz3`nhqbh#cO9Pu3 zmjQTseR)XgT0bZB=$lRBH49K4K8j@tC(UQhZJ@N|fwFe86=vS4|B&|cO}Udti~=L5|8A%$FEkD zFCv~K-W+_;PUzX#SGz8?L&TZgceK1+$7vJehl7GXOQepL>T1B}F(@Ag8;_SLqxMDO zqPw>}b3J`XM)sA3#ni_&RrZWG9@Ku^ufpne6Vz6Np<`;RVX{G#cXHFCV(zm{IFx%b zFdTpHj`HpSPK0UEOUr&kEDz`9!gGnNVc6i{Ow?|-qmSB>prTHNQ3yQOkaKIJ&#IjG}gPZ`iQJnyv^#XL^pMb zGstCyz}f{bN74@|Ziv>~=Y~I4g}g$($GW(vTC7x7x?aKm0x9U9ZAJSA>kLWZJoT|m*38!m{2K?SL-&9;ufoE1%^gK* zYn$R?A)lPWQ`rde989Q+5P?l(3{LYieOy{M!&Oi>wGN+Z14B_l_xsq`*pk`%xw8Thhhc&eKbfm^O|}N=S+5zQKeOe! zcap_>yYdvtA5Ho+=xAT|W;DG^>sR%U)0lbvU5c$C%pW)g^s%u6fBPWiY@X`z*wp^N zRZ#usALa^wEgO*ln0C%gNudYI-BSE^!C!H+t2_FW(pN?-m)2PCj zpP&e7F_Bz$b&f?#Sw*?w29`Ij9?L&zG9x zhQC&(x8YD=?>rn9pklm6^C1(||Eb~}_7S@zbeWIylOUJA6ZYd9??kMeK*PqTE^EC( zl^tl6;iy`(n>-3S4y!#of;P_Fad~jt+(pDv_kBon$UaKB^UXpeQu@=lK$t&|3^G*cqX3il_U&0`T8;|?<7QI0 z>tG-i!aY-?tpBatSE-Fbm7KoG517k0v~7Zg;B}GNpMm@@T1j7D_I(Q)7?@LsOn>_N z^izv=V*wI}@57LgQaz6EN=WP6e(aZI2x$u#L&>#1N*4*p_7%=w<9HZDRh z{wT4o%Ip72hz|X$eE`Wn$x}sCjEoRlFCY`CJV$l{Qq3!YG)S&8VET9>SaG7F4^&)I zR;?)KFIzO5xd9#<@Cr<5@T3OuxTXmfcT4+@wNDkc$DkAiOw|e5195YxhST|D5^Ihn zpW>W-c92WDTs{6OZ-J-kL%zH2br_R`G+EkoiHY4$%J~Zqx@{u zI5YUt%Qm;6#a*CyR>IpJo6T+C9Na_Z%{e}dW6EOKtuLn}(dmL@^VZf!vkrknnzJpZ ztUi3j#SZ*0L>_nhu=91z1#rw0=f%~s2Eb9HDZj=iO{$t;yqeV!#KyWTO&)yRo;677 zXLjzq4TZURJG%Q?n39p;U^4lQ!>4y*FetX7g?h8hmsC!*RL4jg8##QBPfo3`%*G;m zMNW?410_`WiJ%~y0F_Z~vl@5$@%JU>8c93;PC`=BU*#1RDY^{)=B~GXjc)XTX?>Iz z_SqS!X4-lu0{5FrGAMo6-{bksDi@pqJN@7ci+yR7tDInYYW$w3G`>({@m1@}+An}m z#uoU8Y-PYwhsQ~e`55^OT=eNLKx?s;H8vu5Oevk&Ni$;8@9}mbyLtn(2+VN9aE5z% zSjBW)Ufqi-ja34Wk$dI*N?*KRnK_=%({M-?_(3%{h9s`Jl|XQ+#;mH*kVAT(~g`Axi7z~D)sC}iBGXKg$4h{J!EdLSoUF; zm>?P^$};eYh67C+Pb*(UF6BwMYJJ|fN4fH_cePyTshYgb>Lfk7vpEfN!skE z2_<2f0kxbm9$eZq&8nVw2NVcH5rzERuig&@bm-8bl-OMEhN%14W~a@IL6WFK?$%A# zN}Za?eXZ|T)jkv8qiOQ$oXTc+A(_&n^hSk?Msdj|Gog2oTq38jIf|6+==vk}9XdCCl@1S<+xf*2fsQ*XIh51Wz5s z$e^3iHD9BEf+@Rz@(pena#%cRKV&^ltkzcY6d|Wt%Q%+RBI!%w?O8ffGn`71TQ7L~ z%S%FzFHPsPl+K5_?V3ny)Z8;`KUS_ggC8*|?%_4hSTQc%EL0IupWDG7HM$FV=frKA zsy-Ne77WchV1l_dlQ7#O+|NwCr+ou5rZ=bkQ1!(b#Zs^uUpb}x&_VHvkzRUXnL-3? zCOX(WZRbP%p*D0!7d|(GfNziJj*fNTEr@XN>(iE3tdpAn>6b}rXyRm6vlBm-zKmS> zLe!a|%G{wO6s{xQd#??D<2coA8oJF?W1acDTvP7g{P8%1$TOkyAk`@DnI^ z+l(ZQpm#2ETR--6@lyUi1GxzHCt4OG422-n?3kJD{#>PYC&>6U;=@sikhw(RY@y8ngv)QD`Q0 z-;saUy)Ujw^lQfvRIV?D*TUUXqpfe*bsS3l@PmCuTikHMqe^~%^mW!%sEw5@M#xKD zify;HaiNe{GTvof9toPpZ(U zeg9+4JJ|CgACoc7iQo{|$~*(-(~Q`;QdClW3TyyS%3L{btHya4MsQT5rpmbgP@ZDd z{xah275BPu$2F0SxMFvyRbDss4OxyK84)&z#rF{i>hvSsrY}-KpR=($wHI&ZZm7Sg z>jl|p25z9yT}A>c{sH+K0e7=%#oHaM-r!k1!f%9ZjV2w9=nknGh{6J(GZ7^HPFg}< zalZgKlzdM2^DCtl9{2{?WVXxa_HQF$js}SaL!-=`M^d<&q33LxVMJrr4O+P@vzo!5 zy#gSkD;w3vqqo?^#Ag~jtq~7clZ1CUZV2R7I(`&q#`V%-4>#snEp_37#Ur1vq_pelq%yJT!jY6lIB zH_J!j##FUCY6;9RK}Q)JidIHmXu^s1(e)~Xv#3h`H-g8Szs~~c)LLD3uaMINk{P?t z{s!Z3%5pXWDkKZbab*ir>hFs@1QC|2Pxj--090n_Fqx%t-;Cs7%d%Gtt{;Il9iyY7 zgPe?CqV90I(|c{x48~<{6NE$7OZ}`Z-GRX2fsk0kD~r9(jh}%=8pfM2;>2%!4X{K} z;K~Nee*Q4KZuTw79?+}4vyflNGdd4ryz##IZIbA0Udj-yu?SvtHac{b_U^~A4tu<& zuT7Jk0d&5w?%?jv`#BoMgbkOWp@k_3h&!6K^RM6zW?~OF-w-) zt8tzE$F~Pucbq6*>O^BVhO3nigszF-Uqpc2-*usLOl$eQesZgm?D&0sg{xSp$~tP< zr>b5oX*BR>e3j9w_a#8q?a}GyG{U?L>=3ZR?cRp5iRpPBXs!`s1C~R|6n*1}%Ar`& zcdL{upy1@#9wEIDy18{G5k@S_9QDzs!^5K&qQWd%h4KL6UbF}f<+?9WS7W3*Q)pFM z(+^S>>>USIHRxH$Dyn;JbYxn{Sl_){_P-Wu{*MS_|9?f(VBKLwzAu%8!>S(4b?rBY zgM8Sf^}Ur@KT=O?BaauUp7dVtRiBurttEbKlDoBpOr-J3AJh%^=#0$zjyC1xp{8q| zQDksMrN9)<`Tx~u_>Y$G{n4|X%tFPBzg*@5yuII+&dd+5Ui~LmoZg@pzX}&rjVLRs z)74toz>^ZGV?}mi8fw?b?9^NV$1SbXd&isM5n$mNq&sC%9(x>o7ZL7y``U)Y46oh{DG&Kbx701wA4ltBOX8!B%xT@yk2MQ^L0{OS&Q^uo@A7t zpTMl4f(gGGP>zzTOv1=?c z4q?|cWm$@f_sb(Q(1nP^Hf6{7r73WbC&arbevir>_jA0(TXqQLU8+d5mA2~}6zGVs zl9I<#FPkp-S7Y97d>;CJM4>}n&?2^12UkGr9_9v+x#7#`=h+&yrZJU@G?%jxMUhn> z;8kv(2S1|D{oiZrzL-H)OF~i^yQ47W5)FDLIybEWXF-aykIWczOig{^NRRsk1zc@6 zizduiWYRgA*>gq%vh`=yeQe9?2cg}n!zvrlCwEolL4eW9(=_%$#2MkzNUNRB4F23D zib>pa7K`ADu8QZ8=dlFVMTOLE^#T4hZPd`lR{1r+hU;zUys+Y5!% zcT_0JHkD-3=$HcCa>s@mO9^5ED)a;amI1Hysk~{7%VH2n zyqOKB8E<+{1{$)@0k`*Q29*i9^h0mRjIq=2;lPW*(rT&dT2~7_H8Gpawup>H^}yun zpdXJLjG*ZUX|66sHD>Fx>VktT#go)w84_J0RD$Q_qLw^*51IPPb$)DMvqQt*=vjo;YEdf6VwcYL+&#JHt`aqxpEU- zn@?Al7K?j8`I66=w>`iTKP3`+bI7<5WvY zT@zR}tlL8E4rwBO6??z8M1}v;mjZX_MjTcur+==L;|3La0_331F{?2#F}-86+-;5y z9gh^(nUsku)wb1x)5!gU4ZgdMB9bj-%q;s4k5eMl%Zcio|K(2f@5%iCey8u>!TbNa z{L8IBQvSe-4v!y?u8;o3$J9i{`8j**Zi>P`3FcsDyHvT9E&c^i@4sQZP*~=vX&sf5 z6d%?(-XzLq4MX{H#H#HOrag87`_C*aK-qlutC^-P3K5PHVNd7Ux7E{OLL;95xD28e_7riqo0l!)IygGVng(Ce;`3YI}NJ+3%A9w*M(=9jEsl(TxJ(Dq&q`P zdo~)uGz}?TFd!!7ov@%6^g1GC0Qf*+j?}YjzweD)#T#UjjwyeMli_B7U{MiGVd!Fd z6<$Kc^htXDjb5@CZK)1}(^1K`o6FX3BT;dgp`WwRKUM1}dY#kmm>VINl9ioej>oU^ zO+PwVrH~tJ9uQvigZM!DBxij-?#)iYcTdh7zZ80oEiqb420B{mRW(+$Q;rv5Xk!Ny zr(NqWqBzcD`a^^mf!yt4M@L`6n#zwh_gL54ieE6gSWI%%3!`fx&MnY(9yq?>G( z4Sf|5u&mSTG8c3LSD@eZyCTFkhqVU?YgVJ}8!W9`ga6v*kZ`@Cl_eu_Jqev@#9`%r;Z9_KE?Z?2k*nTZy4!K zXF?}l`==yT;bK6`X_=jXSIV?pi&hSGdS(kqmLiNOpQnv+eoR>(U^H*iRjQe^HtW=F z{u^U!6hFM|XbF86VdMDZ0Xe}euRel@*&cqIEc6r1lpr2$k6;yMB?sK5N~v{~t)5Y3 z%#NK-tp2Lc>WKq##lLN{{*A1mcz|il!UO8NFI>-G>E2Y--JkCF2%X%;d%M)mWCN;Xr_%fsaQ3~ zM69eiGsf_+ncC#mrTSylO;pvvW|kS0maA1E-ohW>>$wL(XI{rGhIEkah4=*Wt`=34 zmzNzu3R{Z&fE+QY2a|ba(_A}l+T_|j@K!_KGeme1Sa{rMyyFS*ik5%lDnPd+*`6!ZkZABI#QE+a52Hgpr`L;+iL^pRn+W^5daY_h{4`9x@bzFi&$OG>_AmYUWz|hFoPCF&0VV%Xeb_dh+1@ zcS)_6MX2m!Mll>s=+UZ%+rZjm;%hxzRKT9n!nRW-Br9(ud1LR(k%2{|ZFPs_gA6Gk zb)O)D6Aq#>6$kaX$JCepyt}ArN85U@L0yMI8pN54LYt%zYKq)bhFIlg1rf^hJ$*6WXNYiAf!cfd^NJ*F*+q7mwO z4=3sC6RG0-=opvH6#O>AI-q;|>2rk(-a<>HLfk=kGC`A&Gxn3cS^I(ZkFM65jr&zy zlKfGS>TvPOG0HsKSNSSoK^?FLo))btDUlkj3$W+URWMT>|L;N>T2D|A%=SIik1b_R zel?t);jL*3(?PCze-*;|6=Z$Q8ebD|>x(vl-s}nsfJG-2eWkfi(Wj z^ZplkY^}KVVpWADZUK9(U%)b0{du||+_eKrlGLsnkUKbvO&pr2IA|(QG#n!EEq&RW zckpw+2XM+?(;?er^|Tf$Ur{$Q5PQT*Xw&S8OK7(mu^E{W3%7<3x%mRu>fnz4+^5h+ z*jv}(@wZqtB1~-)pB!{nlS?%x zLztF0LdL1C4H7)XCBJgnC}TH(5}OV@4?+e*ipk>ZEw}8sAarBSC2DhAmP^kSPoR9C zJ%a0l(K%kaDO&i6Df@YJhLJ{>7{aSGUfg6TT=FW>~x^57i zu-?a=0odw|v$+adxR>v46F_(4Wt5R&z|;pHA222)pTmQFVX!p2fw|X=j>alPzhg%)s;K zoU$H`*wB;BNMmmLwx?X>2ueZ$dG!WSP`A5hrvIOa-BJb)wVw$&`-9#69~NvpIoemxv9NlRT7mX}K?vpVPCbnj4+{2Z4)$Rs??3h+^WLE&kRIi^@#@Tn zY;EW9zm3IGB2?niXv}u%GpH-IoG)87F3oAkj-Oa-dxHH(Z53wC>W0K?Np+f8HoeVX zv^C7EZygcmowm!vmAJeq%}Dn&*0Hc4b*@+dAYOx3CAcFXXWo~MM!6zdfBdxeN zJYv%lCKe81PR~9k{SZ#uP|BY{*Q9)6Wz;4{gMXOwVTk#0lCCNZ&`qij!6{oKwQb1( zQ1bQmFfYR&Yr5fk%rv^I7?fMKFlb{NGU~Vn;cy7 z?JNqrJ{^Ev0(GNUeK8Itzwb%h5|#xr2_G6O?T3>eohBV6D(0Z0Hopqg^lMLBVwKg- zR>sCzvxQXBX$fL5sjfbknnGOlcn{KG5n&*wXI&8*dZ03vkoy}+PgQjA0^Yrz8~YNz z{9)Fi;?%?;CmUJclswS$zR)iZ!S0Iy5#oOiuGOo&3_Zx{~_Tb(vvw7@RSKX3POI+Lbj-xl6I_rCe# z{pfT`_Y}EquPR7R{K-*SZc&CMcgvljO1A}R=+)7Zhbu{nzD3o~@5k4wT>3X^bW118 zrnOG;@wGd_`v9wG(#&1OBai1Ic+98SA^fIIE^yzyOKJTrXS38mq{G}a4tx0wIo>}N~} zi+gLhRlCN*#sG4-pZ07&^cNrk!8h49V7ifw?$Yvln8xK7lIIbUJn8PWMLXyHx^F@Z zNK9V8-mAFLJPm$I{n_QRN$soJ{TtQ}*GZ+rc1XSE9laHg^`8spFE;cz8r+u@|)-~oA? zK+QfU0i|3@qkMgGL&wJT2Q29}idpyCDCgMT-605jdk52gzSVnQ*4-0l@uJ{m%}5)K z7B@Fke?&&q3YinO_P>?zm*kmsjt`;{9&o0^=NSh$B zO4qa71h^d+&h7maMo9XPX?REl)(h20xq{@@ADVc*|ETy}$K?Lk)@?mxJ_F%**>(pE z@b;wGi3?>v;zPL1#{hL=@Pipjw*DZZef~i`{%CzMVem_-sEmI0JCZ5Q`laR@4n-^MLk~D4B4?pNd@&eh27LCEA#tev9O0Q( z7vs{C!Iu6M5E56{y0KXsIEQ?7W1!c$z6Ew;keH@ezO2^myxC8}CX%n%fI6leqVUgg$0 zlKd6IBWL)wTEqLA#vzq`Zoa4lN{L-$NM&J~h9FFP-n=VN`q)m;H&bjuGr(F_ z-O0cDcu{S+M4YboW~!Fj?L|{7R{%&AM1|+cnX|AdThylgH2m4AD7OfXzM7Msmmk1E zx4KM|J|Ki+7|xKDgBVue!6wRg7|5;j$w z2$o5%otRica3YKeL9AoZ016k%d#P=-(H=h@E1Ug!&ip^&^uGY2pcv{|gI{703{ZaZ z8=o1kuzFT4YH3lfN8D<*THuIf{u-arc%Fs@83iv?S<BnIKsgNxM-`Z~nwdzElY0Xm*rqiL9mM;m@LQ)RT3B>_4dfAJeYUm%wZjz7^1gqo%l2H+}f49-{Y-U zj<#>S@BN!DNbxa=Pmu+l1l;Svs1&O8nHOH7H|w6Vrp9Vhat6LBehfsu0+^P|Dscyx z0r>)V!{%t@WU+b&6CG-r?rf=Ox|0|Rr_NJw`^F$ZfeG&y(Q=%X7AuWb{2? zI7u&H>ncPhnz8;du-BQ?<=85Gh?mmwnd%ecNg^01GV^tOHH6Ysmc7VsbZ?~?OI0n- z@OsePl*RZfEL@D7oTO^&L;;irt|!zP4o}cbhMEn9d_Y(JAo_=CB>D(1inyi+Bsgu{EHu z)I}943kDEEFFn_E%0}byRy2Z^QU`P{BoHECT$k3VA=r^|oDWfKzwB|)3(}mLDl%is zvw}N@3D5T`DXElNzYf9nz70p};L}U&*#bwW_r*nDAEW@a<1Y<L5`xw4IT+ykLa6nTPP*aQdKRaV+$|T*v&z(cbJHY z^@)S0Hsu^d`>qYP<4MG1+Yu~kdGQv@a~DrGd$U3!^X9h2|HIyU1~nb`+rB{%P>K|h zUX&(PTIfZjOYgl&4S~>mks?(>i4r9O(t8aA0!T-yw9pAi?_KFC-aPm0bN9?SyPVnc zyxQl!&SWx~{PQd8yVhs<;e2~kA{q*B{LJ5()N@sNOi+UI{@ae*{_7jeKV#V*^*$r5 zSe<|RS^us=;qXKINrmTfwO$WW@T{qyy8=k@YVZ3$95+H$mBmR}^b<9xj~__-vCG|_ z8&|w0ecQeewtdL5s;k+@1l0C#o3Zeq#>}+jofx%br}}C!0NV;d0QAZR#5-q(ydo~B z+|oZhr6A#`UIkQIP?LnnulpKZqGBjT?j`vxCEmNy>R!L`+3w-{`lT|6fe@m_wJ2J` zO_DUN7VVHX2<cPm{K3oo{_q&~8_NYW2p`hHo~Wi(L%Vi3{oGRc$^ zm|?HXFGD`;9O4h=QK!o60*HKJGS2R<@`2h?_LnJE?QQG-*w*E z&INb=wRLOmdPbu&+(EHehK_9tew;MRl)~>XDpZNi`WV-`pxt8% zI;8w5sE>JhgP|UyYrFNkmnVj-A~fXZNolV>SYco%x8n z=CJfLWah5Fs znmC@gMV9Hyhcr!fnPmQouWOgL*{0q5C^<4mQ^{BP#fVi=sfK>Ix(A=VuQU1G>j)o= z&LNqtOW*ae7U^~y(co3c$whdfG%WPXB|TR~ImkoK_b*_2ZhRZ~ZlVnhtpX4ZbOV{C z27Ib+{ut_q#zl|#$Y7Xov0dt1y;!7P{Y@3%ZML2y| zpFOBYxKYQkpAN(Q zqGeyjmxooGvB+B}k?FS|zDdt_uh%Ly>x_ri5)_IaMd95~%~kgXKP!^@Xht3?TxQ}G z5MERuPEI3ecaFGaui zaI>Q{BVB^`G!);~nT{N+X@SwI&CPh%&Xsq_|45im&m!X9%EE`8RQ%=q4jqx6l*P%> z!71RlFhX&e5^4+XHYE+Mg^w$RPFlv)4ZSwk1U}-bs1iN0r2>u^WIWY87&2?a3eRai zYw)9SE-y-N9`U=fCv(O=+SrI$X`|nSuJ*IuVwN!hhrf>g0`^60Dy;83c_#DX|04PA z|NN^y`-kP^&p+~TZ&=GkL#}RV!@80G;yjQ1KkT%8Y^+dFE29{pBg8cE^D)nM*mBZ6 zc8Cbmwph$BsuC~g57h}qD|Lm*lD~kXyAk94e2kg4+>s6qcEQgTWwO6x-CX@Kt7^&^ z%!-?fyItgS?grJ)=7Mt;-r89MovTbTBPw~b>j@O>jx9@%S-;7V#4g(E88f~41+?3@ z$3-HrN5$*)<7#LP&Ezm+U8$}$H&(MXjB>lv-kyzbGor%bs|APHQ_XL1K8^>x=&qh zoqmyL_9XmAbU&yhuW`iCFA1|itMRbm2L{Gu#g@a<$@Tbi@8|?Q4m2iTBzG~PYqh}p z7U!ExdCgNRp9f9r0PK=+OZ6bUSJaX!o4|e&PpdGq7?IVd)6Am9t{LmSqEhTBKy7|7(EAh_-ezl)PNp4!cIS$yiIrc zban}=5rMKKyjy14SG^pSq6kn5CT(zL#>m4 zN+lBr0T%5G8tx3QkytM$@KsHULoe2bLZPBLyC2snLzSMqLk3Pm%@|Y8n2qnQVZC8N zhnEb}Wjv!??$oF)(UleQaF?cY6L{^!k=1?wc6Y7Z7T zs!N*Wo9pge3-dXE8Ds{f6w&~_JsHIjZl5K;z zd*v!VhO1dmA3J}SePKwlj1#S?&+dfR%DUPBioiDM&-Z35)#X9STzj5(5-aFa{wKDl z|C{d_{|x6JffbHXI5TB=Wzd+Pq^4#dh9jhvavm~9ys6rhu^9@=WPkg8CUTqQCv<35 z7g99q(e|j}i)4cvAkrH>h64wM;NDN^t^7zcqkVaY_Ws_&&L)i5bsd~Yxibyh7Lz!I z4&pnsd)@E<3g4eL=9FV}BS48^rtmmIw8F}i4TRUF9y|yTK9Z>{$W{3{aP?<$xpd@i z`=+gDWkX{NubV5K6KJcsXq2-P0AO?*Ji6<_xxViJC2lgXf;g8$QL7DJ@zRp_I)lMk zOgf4T7EFgJ1JX07DnS9)yZszd(;-&j!>Na7G?y=f1uo4WquQX=6)6Dw5^w>yXHhdI z0S~)ECFBF>60cl;>mh)#P*b$H3F2ih%xO-K(Ip+5EJ~3^Iqo~J7LqA(uHHP$8?sv=!Ye(37*iuf)U@g4#9ya}K?3BiGSqcu zKH>S};wA5gwf9t88o_=BNWw?jhKyOH9@0PG<@HKNF5<(8*@)cVCKs&rTYJKZcPxQ8 zB4Slic}~6%XNs90l$#(@seU}o)cN1f6#myU(APm7dgg;?KaFPM=t=Y`P2Fy}l#>*fl2fVVn_Z`~-F@{< z?~XNB?h1(yW1$QEG?H|vowweA!B)M3pN10YOigk!BfDB1+;2zS1ZKQdfy@qF-Huu7 zhqiPsSd{G?J=7P^PJ6Kp{8?{FH;Z=fYqAwZMb(}>4u8o7SMEda3Ahqm<(?%Z$PQfK z*c0hpm9B!miJgGJN<-hmN1wkei6dA{6+UjI&-M96i%z!ETa5C0SBb&Z6Q^y~$JlQ` z*ck5Pw6QfM#4hRCjgUT6KF)%3DmijYAAl#LV{t z1z<9H14byE0c*ZlzUBM+aLOUX(v`+Ah(0@=`n6)&cjNJ=!aEh9edRuc_A7d8k_+|+ zpf1MB*deba`@GU-10(%KM*b%HWyUrtLq^2*g-)CFb9pHX7RDw`{a|-r%Z;MqiaZ2w zpPCv6C2FIIOwe0;QO3IZ&*@Q%c026t)`?O;^IVN6TK#50{cg3qWvjuDrQa@1-)}$v zGPW=D^SjijGPxNL(4W@Vrjd$0@O{fdT9lri6B!6m)MgAsW#~;9%IB9WGV%Y`k;AT< zdja8>-_e1Ij^T}ga_7Y%X4{ddqdSsu#i$;cT`yMT@|3kJf0zPp820d6u}I_7-AugL z&Cv)Ux|Ih8y4sVf*mHW`yp(bVmjQyGMAG7cXbJj1NSY7aUmvwdoZhWoHFZBL#dk^x z6#4k=AZ>{Nl?x*zzrymW_$Qz%MmQDMiWk-h#+PiF9j_E3m7oqRXw*m1RHF%#9yaq;(Q0rvmYLHUINva>jW*I|M9e!W zMDEEbpwMgwG(j(j^E#xZE$+9dktiu2AS8rZJVINE$|QeVUtMxR+mqhL79mwUR@6C? z=0|D}IfPS);nS_>IZn^a1 z<9RWUvzw$j(B3Yn$eU`ac_bMx3*LafwY-C*9V>PJj_{zE($l@vt0@oj(qu%izo}cm zkNVBlnk%_?C+o1;A}C_QQkyBi?F-gZ&?^4Xz}gdTnG35K)`9mEO%wXASYzFu?tW)S zpP}8qfGB#1=p4jqJ8W#LDe39kZ3#L))~_cVe}k<86bfs_f5HNCpXoG)=<6pd5Vys+TL_KG8WjYn{kZtdoay4u=pZQ>XN;LQK_sD?@%1A zR_}sxSdcqj(ZzTMz}q5Oggv&I?+TPk>0MbgAhM9A^X04w>-OkTHJxs z%ihmjkZiD%o0(AE3Yf#tBI9S!0&kiCd8(S!HPkq~A!L^R^k_rEaIkZ?W&XZfOFL0> zl!o5mW+fsoO}%@bB%JLFDa#LOE@;d3o_z_7Q0rt?=hn*ZFTk+jgTn<#As@Mc&VeUw zVS%HTjwoR@!^D`mYH z+)=ZpUiS(htCZeG5Bpdo!fG+?g_``;@Zg<|l$Z7;0CB_l(0g=bEK*1M)*da5jL?V1 zM%99G&owpZj{9{d9G~UP2>>6V4~-wrT(@yqSkxIY%}SUL2&1-J!{e`?$uepi((L6; zOblyl3$$KAok(``sfox3$hi$8IoytM>&OIU*wx9;vWT%2F|m4)O`x1Y(Q37*TqY>} z;{Z24yKZEsfk$(?d5_u9&?kMg8mG2UE{uYGT#+pK;;p|c2Oc!FP0V9iZ>Gm$K3iu^ z*`S@)(SaOosf%6v7A!2tadgz^i4!uZ;(8+?LtRbk3hpp{o$h|( z;nD1rKSH&VGw>YnVT&cSrMfY;0Y&B&O*UgypeuplTK=>=Qk^?la3LlLZN%b{Ux4<^}fb+ZP2TI50@Zs=YYo|O)O&VaK&W%(Kc_Q<(iY_@n;27v+ zUhGpKF`5O?Bn@xm;qZ6#&q=m4WqPj*t%H^&4Mexv6|!K}rT0TOYVG|B_Mo^a5l#Wh>WW>6|hGDz45uOXNra?Qx2Emif8_ zlM9f67&HXE$YsdnhM(k2%Z+}DS!nfDIIR2<9O})W*ER4w5hY9#P za+&Vjt>VCs_VFI~n7Um5YU~quwfnRhPOYnCV6FC)JnW&*5PM7pyOKY!#6zXkMUMOt ztev+xs4=IQF|2kJ``)gdmq%nT3}ADe(o5l8!Weiq~M z?eytgW^E6CVFPjKRc2~BN?QMo-4?SE7U`l3u>-(~zxAEErxQgi9e1I!abP#9gkxQ{}g{ShN9xF0MpN+uaAfJ-8P z@{x$aL#>ALy`LuHowprnvEsl41qsjN@|Y2Q{WMQ#EY&)j@+o#h@084rx@ z^LAo)Sxy3JOU~M5?Mv$@`e1Gbpl9S}@!BYTv&}J+oVGp(>JD$FV^x)-RuZ@V zhyAlxKq?JCFK9~~%scB@e*S~3<%kjO*@SY4PEA4Y^!syY*vu)8&QhWpto88=DEY@| zSMFxNj|lnJ=a^<;?5Ev@HmY;|z%g!y>tf&G-C{|s0DZ+iN_k{te1WgU-}^`c5e+qf%`-c9Lk*_!VfQ$Mh! zv5SpKGUZ^KkrONZ+*hz3zb#QYuSN%lR5K98 z-w0wiDQDM$5AaoXV1tZiyxIf&W2&2(T6%&%BpjXuh zRGN^n*7)pj$^?GySbTFxVRR1O(_%0KD|^l#xnntv%Zi#D3o!WU(fPADwDdhsq(S>z zr9g7}XVXw~=8$zfzqQpb$oVh{u4N^5cB1_5#)VRksM{z_CeEuV3kfzqg7eP7&LgYX zngnq1nlzz!KFH(zHhuUEuH5xoNZnUS=D8!z{CW9o;3|3-(qO&h6|Vdt#7)?M4KCTt z&H?pqksB6WT+jYsc@jKaHKu!9vl~{U*=F{&;lm>pHen+X9?g$iXi4B9XNmWBa<%P@ zZwq_R4jY%+gtuH8KYY?;Pqr97Yjsy^%!*X}eN$CKAo9q|KiME#5AoD$_H}?6x$c*3 z?w@93F$E;JOQg;+{Pr)vL}11O0v9_IL(v$Wi*^ojmkcHz(U0pI;3n0h;d#v&Mt&yo z$Y6SFaVK|D!Ph)7IEuz!z@w;}N(;sj|IrWeJmw~Q_sa7=V4OEmV_Q8%)zG}oNX@q? z>jkD#vGtHZxK_2`;ED3}dgiI>ZUKSFi*c)Q@3aR2UJ6bsUEhx+5+GG2MXiter1WXU ziARz4@E3o&7C-haNyu-m@onC&TR+aj%owU^U8?*RM{0Ycjsyh{@fO%XeZbCa`!)#6=%DrbeD6c5^=hhETP2PPZbMa6A+&_}g)&^^<7H>ad}QW-@E6cC%iQmQ z%ZIg;H%@mN%plt}wq}PwnaKi?nZrznk=*oyL~_&x7~|`;Gm(PsQ6E(_^ctv(TjcZTAC16aX|Z=EeMC#^e*q<2KD;XyH>;{Uklf zM(-;GSzUL<1mU|x%x|FywdyxiR?FM3p*gjwMH595Z_5)Q_`?pKqenaXwFqJQ!}SKqfs4enOz)9bNb_9DYS*~V_I>TAkzbWM!*=s3Yyx_Vm}EHL-Hhm``zuLgOU=g6E#h-9loCzGtlJF%1D99g6+IGGwJD>=Sku_tgB~^fJJ952sFRQ zn65T{8GE$)65l8Z_w;WQm^z@|j{GGSGS*Q0cpkZ+QQ9Bu-l?pMz`=Y{YbtgnesQ+= z4b&bR4r{tpmljLrJY~5Wd;D{?t1xx7o;>0&0JAiv*m7M(OZ(l8t@_u(IdgT6q*Qd( zBA=xydq88<2P4V4`O$3r2H!dY!Iw8kLD7TD1kc%eBkV{?h8hK^q`8rMQoLTyTld*1 zd%yJ{kqphdix}NqqnRL5Kg>S5Pt2&v$fb^Zjd>MJ--^}_Fo$h5c) zg!m%N+rlsY0w5!2Vl`-y<`dy*cNYOzI&9`LYIWMN+T@R>Nl9tU(3hfT=1)!dVde%;!TOWDd0fCJ|B`VA+O(8O;w>z2?WYY^2^}u!GBn` z?-Aw|#&>9TF-D4vE3(PB~C0#E)CW-QgRx9eSQYfI;@wIy6cQ;ckXWWNm3htF zzLk=w{%%bsYVRbgRZL0&%&VkaS9hJm!{y$(RlLg@Pnb(B8ybV%7}c%kZyz~&DZI4{ z=p3DY>@;Pv3<~mJ+%;$JnOrSNGRJ4pWMwC`VVoaxh1NBa&zo*eWz}ORA;|oovRs&3 zqWMGNhUOpYD>Dt`h404Mw-RCf)SC`Y@1*Ih@B*Y)0#|*qED27`5B<)kQ!A1ztN6In z55OWlY>x}Y@S;y9u366C^-I~+4%7bRZ#7IvjbPGrWWB9y3s}Dj{;d0YYx(Tg@tNE9 z=H!znKN|nLg=_v9QJI8hEuMo6)5I94Lj|dBP*<3{``0Mw6fr))rP$}?vVj`&0}6R~ zdS05Yj!T%wd}WXqJ$~-gy&n5Wy~SB9-)^Ed6`KTYhs!f}^DyV&Ni8gNV@2fPWNVBJhV zY4`Sn*Ixht*%$&fTy!iz6FbAQ$6&m{Jy8MzUUv`3yZQr6$E&h{?v2xiQS_Fi>Y7TQz$Ft#I5jsBi9fz=J-T;qMwN~UPi`AsdKyT*B$&kq zYU(n$0ax)?!G2sNf;_nbx-HYA31AefYcm;VLl7#Yp+&jJ_;{42!Ns7wV{lkC0mZg# zwvJqSv)u57%|oQ7zJK-^>9#d9bp;F4inFkTs#icCk(NuxQ%MnP+o2YR(c>UgJBUbNM!3Td``a99YGz_mXq3zmbk2C#$h7YAa| z>YLE|4(*my-IZ3p>iR{Cp)1_NY@|8ZY}DI70ANV=NE133m-dWBd}nDCcP%;#q<>Nw z-Yv45<2Sn1oZ>aOTXe+mns~H}h}L7Bh0XoFF|C=0bL^$YA+<;*%$Ho0(&5FLqm zB^Q0K>$mkV73?&;b@_HoP=d8}y=id^QBDVX+nWxYGH9+0=13H0gW-FrDNP4{Tg4hO zQd??9(SVQmZ`m(OgS~xkEkPJh`0!MX|`S0$%L_>D)MMFFCC`N zCPrG_g}cYvn_5=Q(tqUJDRV1)rAf4}$&kuSbe4^s(7Ke(mk5TJWqI&o_`Rao z1swl5URrbw6T&(eG4VeUh7#JU>;ms87jZsi8d0!~&|Va^@|)15n))Geaa`7OX!Fkk7_vl|b9MW(@B|{um&?B6?x2YOL%WIoaL0?NTOV zm*wJ{5$n`E#woDpHjp(B;$@kn6_YEV6rKY&Guy&Rub(^o8N>{ z^hNX8^)M4>-fE1pBws|8v{65i46ki< zQ@KnyL7m>DiY&@oiBDT67rzkvoJe)GGy8=2gy*-yGgIwDkIQ(q;!jtlW%iDwaR_3p zZaT5M9q|w0`4g-M{KbUr{ys>c0oH;?A9jNDefX=t+(d$mGdtHerWVUfJIV!HGBszG zYn#^7doj4rK@~^0u;yJ<7?8rCBccGz3KAW&z+Lzv_JuE;$K0x6AeP}j-CWJR30N8_ zGWs1+dP$Za$XE5){Hn7VJxtQlU@1j|y2hSAURL&BfPYEZTB3c+R43LuoD8V^@W-@o zWY*)Bv*GeV<#8!Q$>mo*9vwNg`O~$=WgA689z%rr>#&zH$5fw_h!Bh!2_3x60bim42f{Un&iqDD;&y+^WhN zyQp(k=I~jw)g*7(tt0PA;&xqTfCb&vOnFXx!pPRhjwvJX!FR#pl+u^;`2uN84=_T$ z)QEt&tI8pn=^st;jw(3A}b0rQ9*AXI!Quni8AMP1tO0 zZt?PJi@it^bFtH2mcA^f+`6i{vKZzkuI+`JK+17MWz&=3|-JFh=nrFA0fCZeG{XET{QUt|)j?4Kq;zau4 zUa3z~Rjw0)Z{w$QuChba=Cvz?+y?(% z-*cHG;r719UlE=QG&I#oaY;kyp!nPKBL4l&mmsES;_ViI++K%nV=>$ zi@kvz9!9hE4?2%s(>_xjI7J|*Ax^#(=87*D`k7U|NtEBLB=6yT0BU>9nyD-z%Y78) zB_(-bhDOLVd4`kgxy$5+c4j&FyQr)BcJJ6v4v4a>*S&rsGe)}VLocO27QBys;+I-V zPS(k251rf2hh&S+PpBzrFgs>=V>*YL8H;|33$d)OSWiKtPq0q-%m!Qf2B>LE9c68% zqmER_tl{ieH*`Sx>kf3%l2{EwI(QvHD+{w2G-ERV3|KiJUwM8+l54rqeY!d6S$JFT z%~g5QQ;fnrv&bAo9Gs5sl-CCn$Gc;jl14pUR zmISj9Mi@D)yd>>{^eBl%Hky2;ORwBStrk4)Sa=ZE;}mb`&@hebN&DnPI;|XyI~Aow zsOe15WAWT6CF~vB%^;|8`IUuBeM5$=EL;X#mq@kk z1Gl4EzWw7}ed~rEbGdxM=_{u;$75wnQ-7-R+HCRT9BYRh5vY5L#iB|#;X~zG^6#RPkP0pah9Gb`AA2edkj%j`4W@}$++{q&*PjdeOan_AcHTHAP}X}S z7f#06O-UBcPoo#_Mw%mZvE5J9;e(_kk=Tp}mM;UTUAJ@_x$<T4sP6U zY))f!W`r?TYVeik`cVHva=_g6Q;F8|iAkod9Oeybmd>U1f?I*OKLPqh4cIc?jq;-0 z!nk6s4>;u&yp+?-=H#3YK_shTcYA+MO?D9gF@0ukmel^gkRfU0=<4K-bZ$)9wp&3NQ~I+Tc$yIri)cVRN6P&=3ADKTV|HIzHN;mA8w{tqzyT}t+;w~$%%_f=Hl=)MQH=`yKw6tG^Mr`}P zNO_*!+*n9V%#4Zop~&MATk=^F`Vex$`pNIoR1c`TFW)Zd(it>XAL=p>PM?!jHnp#c zrEZ7~FidC;PSW8kQtjc*E%lqwy3j7bg{n&=xb^NS%wQ?9`U`LGXey5BLrmxM2*!f2<`&DZ(>osV}U(&{j_&BHj;?O$m(p#mK~d(xQVDO9zNLW@~k! zbuciFpnU>dQ2b@izSWx7Lsmhk6bRItlFp(>&<{Cmg6`(VJl+$rAVSAGc-9o7RX7?9 z#m&~?>P*jN$FcjaWxRX%ycJgFx)dPaLUwvKKma{Gw|#oX$&F@_ zhXlE~B~9;Fr_$ynYeP$8YtD|3r+PC_>Egw3K1D={uL(? z)e_$mGzoABY0i5U(O&Xiu%bs>SL4i2~J2oQbRp1x+96K)TYRpT z_U@^avMs_q*=?bys40K?C8D|Y93D>i(@p3P<>%>8FU~i~k!k_GG%B55v2vWO3xV`~ zZsl^)E=qbs!EQM#JIPv87qwXwEMgnvW2Epb3&%ZY!T6J|OHRWNSe;dVkh8+JUj{*%n?kdlR8-bl=B~=!vaSl_xTcA_Jhh*9 z_S7&Wj%p13S@|@%(R_kkYnz=}EQvNfz00Xw9SR~&Kz~pTc+;pi1HkvWw?9oZt>Q1$ zEFGzF+c@`TOOE@5%7Q$^|E^rkr4?>8@4OM!&%#9tj+&`?aocK6qJP%{pS%8 zwV}y^8iPFSSJ;zb4P9&1*;%iI1f^)H~v zl7A`2c?z`BbaJ|#=Oj4yHyYPy$Vo9H!Tu?1uEzf8(r{0o5})I9+bf3>EMBy{=o*P& zVz4dB^{8N{TO==MvJWd={iU2Sb+J7w&SuNS>F(j67R=541Hd{F;cfiAeON`#LynA7 zg^425(GLYloM*+%BrIheLi;v}K7A&;zmJ6^w=9C(%xO8JsVTvXS=o;d0`6fs{5vhr zhnFQ&T1GUrO-&(19y0Uv>2dW}T}NzE>Gf*vP3&J>y8Lmd?CAfmJ2XZi=hJWTuNcBbP?qX1+SF88$C7VS5z50k$lUvq@&K<@>EqNI&*`iLA02_;$Jq9yk zNmmw@O}DqqVizyL4xdF|mAJp6w^-qDDCol>iyiF(9TwZhZJ+X8-$MCgPlVL3mI;!B zK%>N9#62RST)mPt28HI&zLlBj28m0LYG)4 z?|0d&*>@btGQE+uT?(Ix=^`1% z;GGsQiYK|;=4kre)zxjixHRMUWrL)McUV7BA(Rtw#C8bJ7v&pnXWHc9zY^u5l94_ipz=Ocm|wlj+s3IcrVAZ0{KxKd0r zXxo&LZMnyp*!v$MF!gzv!m|^ zoGn%|mMaHd!n4%4LXm)**V?*QaL-}#)Y#oJh^(R+A77FGj*#|4WV{G7zrZa;zYE*O zw#@3QvCazw;*tIoA`|qr;>f38HX!fdNS!qmDZv;D$K>F~6gexdnf#SyWWHy^x*T?> zHg!Q)0@9T8UvBN#YD~NI{S@%r_;0$!5p8aUPo-qqm&viCr!HJaKz|E28{#6T_G?{h zpJprGXAj$B^-T?~uJbASfjC`=Fd6JU`VOWcW!aihHyse8csJab7(+i+LYXNRmHe7A z1+u<$ZLbzv4g2o#WR;z6zy+?P!+ilw?SM(D$Ztob%Uj{_4YZJULZl@-3Lhuj^I`ltNGiivPi6)*8sb06# zTYdR!slBLPQHNzjH_mQmfU(pUVDD?5Om!%UQN*z!j>F8IYg;ltgtTj+D5YKJ1{~9x zt0qe$XWm7XQXehn^4;%w7gfa-*O)T3?e;*^GzNL`(5P{)HP9qY5wX=a((RDP_Tgsz-{U zBn4hleeVimP9NN90tefBzvJ739rllP8X4L!T0l(2pJQVn(TScdks{(jShkGf>NANlOjVb(fNw%*l+CI|?~oOfgMyHSmA^>WLbr`jR@ zD*kFx$CD+RN=jy(A^~Ks%U?DQvjkvIW`Y-werNz!lvOhR-LTPr^B4XJQT*pBWos1` zmGJwmG3@RsZzM>)J2}u2w-ru0+wD2rL*s)?<5m-k-e^-(OWv+;?S=6lQnY5~YbM>kGrSrE*KB7ctAEKSyQI#TD z)1G`OM~Pp$f?Oz!%p`jce#bp-8T_TSGR_|e-k(eujGEHUw^ACNayuf+vj)(pS3pk- zm6wF#-sP(%8!QRLOIn|j6X6spoaJ(oo)g6nXY@$Z5~!7aEKYL%@*0==KBZ16$^S<4 zzW8O_{g3{W0B1Fv*@lqfFhi->*wGxd19ds3HJRw8Cl7k@@$vKjDBr#6 z(Em5{V_G4XzXh%{RD}1JPnx#$EIwVkw&VRUGAzEecorF!@sNQ|L$b1W4i zebKkm)dc^I7!(=QmeR>o{Vs%j!zMQ;VVD^Tw38BxHG^imuttJbqTc z)6wfy2JiIGLD&wGe*}Hl#Q_~s6vgmEqrzO;V{{y_?`uW4rTM?S1tDPk|b9LXub(8)vP#l+>OyQ9?d!s zbkJI89dwOcgFEaYcl%Ec<90n-rmeV~ctUru_zq`-PS4ULvvoqTY2=|%{ZTe$2Omta z%xb30_(b0Ys>xIGjt78DvtluHJK`+zo3lKIIty`9-`sH>1ex)*4V#70fk#+}@3fky zQkx-_7q>ZN&2FP~6&2M%;hOdZunq9yj*W5wMO`w!K%alK?uLREC`i7#c=(b=#mLq_ zDU*}xmZyQb47!9SGR%Ir0yvi3uQr~VS)i}rE21=fv7{SJuo9u9Dc9p~oE7||-$d6B`=K2dN&ld3!y_=!NWTu_J-NIeCtOG?Mkc32{M)Q+2kBDS z(wdZu7Rh;oQN!PDDh~<<=k(KpHrLtJR!6V*9u0x39@1Kby4Ryn)1MPy*eS0!rjXsOeOVceMw+I$Ycv#T#vV(s?K5}sjc6izP^xFsG zWs>r|Qr~PQM~XgRY$O10@DSqjnwxlz8>LNIUQpneHhCjinpAGi%yoDh51=E@TA^;) zHJ7n9isbpL?HnbR2k$c%3(Hf>(Au{0@^C7F0*> zK7=v#ZABkxj*2|*f~bntT?$wq#~n8flO^$GsNh#ORAo)K#db@`ztqUPo1L|8R3#Ht ztB`)A@3XP-C3Eq|&(M0V;?Gj$t9%DmtY04`J;HM3oN0OZO^YbcIru-+qxE1+^zw7u zoug1)IcPkcJ3@V^@E_WwY0o~p7%HdzN~W~Muo1?YLN46IPT49$>WG(9QKMg09+x?O zZ-Z1+{Yk3A)Y`rNgZtm$SEigQJ<}&@r;bz`x5_}e|l0DiFV*Wl*QR$UL&<32?@=IO9+~r@apmf|MJaC5ywZKrYP+({HalW=%s-SI7s)z|dr!6rtxIdp zglD^a(;G|~l4fS^?K0{d*}o%ly*~1dIk8wHx^)M%x4eCN{o$UM)f7=A)TuZ-ZXQ$` zT`$|@vlSE%Sh+}iV%?{@9e&x1JZW27cA_+zXRl(9H;0J9bm<&6w>oOqE1cudRBC}* z*&k*oiHJJk6&)nzMU5tU(%T9p5}97qVhrewKIb6cx5%z}0XZeY&v=6;hsCSjC~rEH zNZk6};(L`dHqM#$2nmIce*s_TB|W(Weuz?z1+lu?Jb|XG&M5cQL3d`7@ow0zmRO0F z%PRy8X0ZFL+Q#NCY2s~Xh$SZK=1DhqIy<~K9?k6d90w8^UmhE&Q4DIk$JS4s(vXGA zEI1JK&=)@olEN}@&8=jgNG$KV#$>OA`Wqvcypvi44L4g%rfS{Dzxf!+9R&2AgQNQO zvuBn6gRyx+!u|gtLX`8Q+WZB?c8Ekz{jc>ETk`)w(QcN`wP!#GFN1VQ9ocBWSDDWw z>%!0P`5|H=1qLALSuQ5SCCaSw>sXbe;^LR(FWp|2yN-zYO~iL(KH`RsNh=XAqMD`V ztA77HBR;3Yej|I(ImO_Eclm7Uxw0~a%g@QzabusRr|5s5Ew9#Zo%>Pzt9}qmTNZc) zd);R|?wa?-$k_G>$7!#MV^F8N+Ry2JT>1>6Y3AL`OuiqBoae17h8H6y6$**Xn7aFg zWD&Hq!2VW|xENdth}O1_KX7Jk_i1s;JST}(9de0-vgNr> zaib_~Jtp~F{`}Wnp^8-(?34UzX!PFfj}iXbH6r7UN3e-n=U;xzUhQw*7TeN7tSycg zZilC?&n_0W#5Glr3CQ=~rM^)McN2CGtiPkjcg_@N`JJ-)K=BI;Yks5tr0(6LxZu3# zs=SfJw5VBgIspM+3!;Rvvy8Jh8mE~7hv$DHIyUyaF5w2R3myebF6?KDiF97QI+JpQ zQOuh;4w6Yqk}uv09&84$_1*u3qVWfEOxODqP-2X*oBUnD(um)9)cq0FE3|$cOj}J1 z3G|ZmaxX^}s3)CfJ8GJn#{M7n-a4wSZ)+QcLXl!MJXnEJB)Cg~QmnXJkQTQThvL%W z1PE;?!QI`1LkVsP?o!-atVnxv-rpJTIOlxh-uJ#^-22_}efRvecXn2?_nKqwwdPv$ zna}fHuraFgOJmWCb9s3KoOf>>e;q@3<$gIM*B0lbCAlGmraaU=+E;7=Qu0&?yg`X~L!b`T~JbKV+m^RF{6ZAMbYE>ekEa0#Q)TTbl=w zO7*@oKJ>bIFKAMn^J%m*q1GGlHzf9GPYY)Q1LZ{f(oK+t=br0S>&s`AMOlT}Dbvkt zS&75r+kD%)q1qaOUGR>vl8G*xrXGuEJd|Fq>V`bf%0HsDqw4gzQMI>Ya&c}z^2{UE zKxs*v`olZY!m*+<*Gb{NHy6573$zBB80j6wPNX1G$=hlEhlkKu3vYUQzoytxHhTZ z0po$9z!hSoFb}p<$+19J?^6oc{Ju4Y-e+*{g7@oN;7%XF;>i+Xv3N*Qv;FxHC)KWL z4(~RW*};>Lbr-_EV2mVtCch=5HK-+M=&{56uPGoM^UDeDBv;k~M9BuLlSbWiw6aa~ z3tZP=T4q@%L!X2e*5;Echf2+y-~V9Qrf~s}*ZMht?lth1@JK{M4jV;#mN*G8+2A~QR|enzo;XQWahdkS zU9#DsFp<1k`yFi$N35b;F%}$IPVPRwD9{ZYAEi~Ts?s?$87v1 z!as^r?cov0&#}BYMB-kj-E-kfTz`WhJ|A*iTfWzhnzyrzL9?$A#5F(v@clh7h0SeS zYy>xb@Lj>4hV*Ma$Dd#J(m`A{vd-;Uy# zRH@@fb+XZ~7gc-vt>`^^gc(%+g{AO+`;YhkrfFzi`Zv+qu=BsGRq1P`&h(wMY(0GR zNK0UU4s%BSbga@AqhqCuvCw_7yVse77=8A!J(eqtf&2fh_~*YSPwBfW)zZ;(F-00D ztnc}xT}AMXfXl0t@JX3l#JX>96dD)y%U$cwbiYuFZ`Xvv?4LO<(bu@G`o;mLk0(4X zX`M+%pZB`u6qLqQOit^*p2K>{_|V%t!NksfPPP9aOdW zE@_tbg*79W3ygJoTH`u8=xZQI{JW#!wk7P~0wfpCPwGNB0lTk;VQ4fP+)MQYOvNHo zzJIFlb48OfOK_e2mpse=se6QXUuu0t$Gfy%R*&}RX{_URaNvviHCWQGa>WOF2By@P zae95kPcL7LVpO;)tgBeI&X&|#IF&u>N_0tv$Glkrvgp_nmEkTi~NXb46Gq}A_Z5i z0A(^rjQv$gLHwiLd&zIOlasaQzMk=)0A_|-2$*W zTThBMs`~aRjM+KaY!%3I!VD z;ccZp*#uJZzID-)HXZsOM*(-g3ovrlu6iE&5<&rj!&_6GJ9|t}{tu+!v9wiN6##*Y z1X!HBwZlE9Xl*9C!jH}XpiUMoLP%&i#tU#d>?p)>Yt%9+%1JzqhNQ&%shDkj8wU|` zGp2zFSu#Ix(&zNp7H|5hm4uq<;JW@~|9VJFN5e0SBlYyxq6xguETAoDq6xhOrhK5z z8mX%xsb4rm%tzz(`hv2h)OyUhnZ=^f`O^3W_v^c?fE~+{hswJ9nhD4c3cTZZbZE(~ zrohr>3O|c7Yr{s=g95DSVJ2`xFfXrbVn|I@cHYyG!lzXPG>7kA8lvb*^y5I0WSPF}uFJtOCc_zn~nag0G#~U7m5lK9^=RF9IrRx}? zyUCwF{E%m@N5l<2i}r1%;`s1r&+k5U+Py{lTN5knnq4k`0eMGAo>;>0UIgD5AY74Z z+--@=uCr^Ub=$KJ8VWIJ`+?GFJ7yhq&$Z`fMG#7OqUUZKb`UF(>wVm_L(=Sr(o=UM zeK?nQ=OcMpkZjbXn*Pp+9Q6~1Je|H5cBC`{DFlli?;-mZd+m(r(|gLCDe}5@dp7A4 zeE|3p?d){Mi9o4~q|ym$*x&L$1>2reGLW9lpWG0Ii(+YuQ@J~~v@bHF;M3~)LJn17xM^Di> z-=#ch%UJq|l0#Z>j`P3_#RQrtEay9-==HLFyx6#T?C$8*D24Q*aD2P`$`OL0O{TBF zS3+zSDNT>T)U;8?ne)_~icqzL?H`|ic{HFV6rQv8WGr_#+zUxRs$(?IwHV4WfJ>a- zZ?f-kxffNbZ+tUZGwQ6{NKlep7!@Cd61Qm=j$@&~tg$T_69C?$5BAxwOd@s*%HSD& zj?u=`;^N6QP+l9$jwj}gcJwE{m*t;5K2PW(a>RX%ByydeD^%fA2tuc~D-uBK__9gs zVVk;_e!cMrF`r6aaO>z#fj-?AuuZA@gHEC1q*j(H&pTrcoh zZw)wBlfVCZBwA6N-6pE}OZ5d#)#W`rVXRnduWFY=C=CZf)ahb&XK&G53y0m1S|DEg zA|!%g#5cRjXy*mBoV-I;VXjqqdX>C7vPuaBV8|nOz`aKX3JyzK-!n##;(yi$)?Jqf2`2IGQ2Gy=hBI9itrE>Gc7@uXBUW%^jTEz)iqGx+u}PrX8<@P2Pth zHV1epMEy*H0)h&xj_o32lKy{4hxq>l*WrId5Bqu^8!c(rT{{%!kLTn5mel__riPoUyz@hlvhhaQovv{+w1c${9=>qj z>E{#;Ve_F!yxmp@DG3j%Q+O&d7L2b87+JqFRrG^K7c{I7npm^&W42S#uMai6Je8kk z*LvM@Q7`pnnZLq)l-L9sISyZM(HoIW($$HMG||v|`Z#z#a$cFl%TVL|QG#q2)BA5w zEUdU-(!-!T0`6$Zxqwv3?VYs04q>O6V`{%?U%odmEa#6}c^>WspWe_qVp}@a-5NTW z+m?RK@cBPe`G!>~@7{vL0nMYgimgd&|Jmee;ykn8X*y#X_nR){lg0gA_C4S`xOloa zi?gDD_bVIlyy96{CJv-j9QJK6kOg68BBis{BoE*T`ME{agNJSDai9^n`6eQKcPB63 zpDgWVszRu>{p~|4S*iF#vD>=^9!2u?ubTqtcNC6O>$JCLFu%J1Yl$V`eL46JZr6t0 zhNxp*T#M;y+U7e`p9}<551qobaX;s74vZ>oE;doQokoc^f#C8{^|6ujT8@2%?$4R& zG4jr2)tPpt1*Tk0^uw+mtUe95!P4p;J+td(u~5Yk-0#9#ahlsow^F1Sa+#b%{?%l! z_m|f}QwL~ze(0AO%E>P7T+pC{gKz9BOFW9!eMSJ;H}~d6F2pi3tT42sqVDsN<@)p- ze4xja3M}gmFqCVF?5D;*Gtx_wCRas|&as6Tyn#(M*lp6}Bvwb>h`pr(QZa59n^jQQ zmmZ8Y>VX{T0Pv3}eEABQpu9g=WLW-;Z00@7sca3mcYmcz~Dj+~lgQ8a0 zjOTZg@3xOp>(nj(11eCXA)r#PaBxYnm*62bwe%?}lR@pU6kRzJv;__xZDEZaW_s?*Ho>9DDrA| z{NUm9{4&GGXp<`QFS>vyGP)4y}7tA5$!;72epEk_X7`5rR9 zBQW!%U`;7&Z74qmwa-#N-NlL_Qc3)SRZ_jy)y+oG^}D=2*%GJO8LTTXHBW*|?miyJ zly>c{V1>ftyH#3T>TCJYP4ZOIfD6Fd?XIn@=GwfR{i$wzM8FWVfdPd;WfqBr@}RUc zS!PY~u?}T|)36znqT>D1*f{TekeKcSg(XHT-OV(kA4uJ``$@EkHSy%GX6~|lV648s zZ(*M}A*xu;ax=V9Rki{Qm7Sh>QuO@{X*v_Zapd*Y`R5AvJ3c_7t|S#v3H*2V+IRxr zxE)F73-L($UB_<3U5k%m?kNu1hf$xG?R1(vwsJa}}0UD`m1(>RKiN;qaE7rB;398QViQZ(Pf4iRj<7MP=*0 zjw>q$qBaGNxzQN{8iP*nxp-_H?yUnX!OC6=S4?V)bg%c`h`U|KJ+0UCbducq-kzsQ zPiC35-NBILp8f-n-*HG&!S}8d(c@B>V@oy(a*UlEw#`>UcFN`UeY*?CcM41w!9T5Q zRk*(PTF4G>c;Gep8mae_IYB}b14<#`#>H9-i<1f6bbydF>Y^5QOH#Nd&-4eJfpKVJ zW#YKF3ho}+smRn&zR5#0HAM?uztW8tf!ILP;VJib^KS0uW-_jeY{`Ow7jR# zmFv>=+=3dnd@=1drn1j3vYX<`QyO_L(}_bvwUI7{TK;%GJ$0JDRina`UH_F+{>aZ- zp0Jq4nycW;!a$*o1BsW+C@s3#Y1fCk%J6%A`>`jSN16Qdk9H+mR<6aFH|EqLwe?f|2ir-wNW=qQxX&g}T({*A za1^hc+Z{xTeQ?vS?fpO}DEF|g52&gNsXjl|<=6lDE(MKns)JD+Y$ssjJ45uHtxJ4+ zY@O9q3L&9d62o6-w3v;DZq7^*i3RjV)&Ptewh z?nyB4wE3Ooj(y*?6;N+=kP?W;rB=!vNuH}64UGEh5Xto~fnjL>zZ?85PX4zY{#q#f z+YbL9+Tm{uZ4W?yJwOLBH1nq6!`Q_ANt^T2Tkc;Uw+8+;oXT%zeQ)mLmU@$mdd8S? zesE>_^Fg%jOzoQYFb5;1Bw=Gu@6r&-_E)2{|M*2Iea0Gz{9sMEl>fCpa+hDYr;8c?50?EK zzmGzc9D`KnKX*-N^ZFOaaAO(n^6?be+j)Lwmbj&^|G^TwE_p`yfQg^sC)GAk|P^9RNEcAFuE83gxe{DKWLvptL)Ese(-vuUv9n z{-4jdxy0-p;j1pjTWJqvk2t;vCFrQA0e;}UEKt{#!>>DJoxOu=?1cW+h2p>ZQ}oXr zEAh}v(Eql}ZuOY2=H)XPW>Uu(kjM$+r-V@de>7DQhJ7ZkKs+ipeM+s8-^za!A;n>KUC%oF zRrh=1w=J7+=DhUqW_jGY()_i{a~$S%Q<;KYm?lcyV2+mJ^+uC?(Bn`$a-f zs^jaCY||F{M)6l#+TU;6_EvLoci*u>Fkydd{LQS*B(IRTa6jM1oR92yb#?z@^%(Pp zwBG(--e76caV)KIT{iXl*MInh&R>_c9%}rfx9B~>{rA_Hcjw<``41=gw>$j%E%}GJ z4ET(xAZ=cDg{^RgpszJn4`+DGQ%iQ;f^A!e~MKq#B=t)89Y!bdC|VzP@iMaqy_?kn7xuIZRoy|fh>+h=x!E(NDO&3BBLDw zOGCj#bji6ti#BI39e{FPO2{SKg=@|3}>Q$74@=sd_Kr1 zC;_WFL*;0(iQNa>!$2}UWUea&0w4ZyCbXPVHX9UOQBhL?Y9X7x7r9djuaFY69HW8M zmpu9<$VF!l&+6)7YgMk4a&Jw*xJ!@+#Xs6uHytHRNJm7=lATu#@k-c;3lSB)J*j$8 zDOgYOt0dn$_kn-(*Da=skWQ-z|DWTrkE&%e|K?hoR7$Rv5U>81OqRx_ES32}WCa0| zVAoATY1)*<^_AVx8&9M_Sk=JGwoIb-w-}5I?%x40I)7dHTRFquE4GUYrHhi*q*ww&t@6Ec}dK&UNuLoU$lH4idZSj6p#^dS$dXYX&M4s$VWUmo%wb}Q^X+<^Gohi82 zD^o648h46DUgGa9xN-gXKMie`IZ1?&?PGc@!1fV#t2&5BC_YlgE7k#BD!bbtHH48H z-xS_6+$u|%)ZaU9|8!x%U#IZf5T&~N;O?kInztdOKldgRFCIrs;bB`q` zx3zb`qtYd?)t;G@?zfn^OhI9I3dCB{DXzjVk13bhJ&Id8h2@JCpb$$_&bgo&%^x!9 zF5K{L-Ga+0mR}TUeDJnYFr-mEru4Opx%d+d-0+*emoZpiT3=sZn9<&BHZt)D^^*x3 zf#Fp-GnaqOz`o82>^oN8C=ud^p=IevUJE|fm4Z0BtYgTt8$|YpY7XuZtYG`Lnt-mC zpN*7kU>K4L#Fq>JWW7jI6x`|?;WqpQ+2_K)Hk%Qb^xPyqT$}K4yLj>1T9;)rVP??<&V3?7 zC*dTIn{NxnYF?i1zvT4&-8YW+!c2NyNA8dIc|zd6CBE!=+ln|u%i|Xm5#e#8WG*YX z<<1v5CR2z4V+l1!ds;1ZHrG!RBSu(WX46%{Kd_|k+*T>UkuR+Vsjj zB2Z-) zV08n#$S@u0illXEp253v7(@0Xxb`N&(8ru$>c={Or8C@Hl4N(zz>z z=O>xiXf^w<%0N}^#rdn1vUS+oTc;x$fSk)=BgrLC)n9)qMe!cPY0De-9cD%?ycc6? z3T!CgDDnv{c=SAC&zi!97<|Wsj3w(CzpRuL>Bh)PDO-pC!E!DNkkq%W9!`fi8nLG` zi~X+RSM=GVoC)~r-!fuEE`q+wo{%!-x6ZgM;cy(BgAsCXKXz%}U}VjYicp8L`4x^9 ziFx-xtDpl&6Lx@f*zR6V+v)2m%^|9yl0rZF3yLT{Wg=yIsVs%1)lakk^su4R$2Vi> z-=#v9THQPF_1}ffRwe(kS$NLHTX1Yd}Ip0ZxufwgY2y6TM9vJTrmdR@XM)-B%dF@<&HjMtY)-|y$z;{`2dJ8UPPccxvV)ZDuy#AW+p}wD#33 zq-iYcv4pY|BI$l!Kd=3QQ^s)SgNv#UX5o*dIDLl#Rf% zw>Y9K3evU;@SIp*itR0)iS9{z)>+ch(jWze;;2Y)FnRK}XC!P76Bgo0+rHrmuexoF z+hn*%yUE-R-u3^%QWcN?F8v4V+5D7_tO3qyNx0aWPfu=Q_K5cu>5$&<=#$GoSdq@s zzik;N?sdu?Nxr&BFx)$hAdPr>5_a=Yaf@R24GjK3iTXYlUl$P`Ex?(?F^ExEPqtIV zskAb$xl5VKZ%)lS4_$PR1#a_F7!&p!@5cI6Bu6MgD}G5RaY0*1Tz2H%Mny2(z>jA* zpCbnBD>Kv0owAElsb+*E=nn#|xaNJH6?{rS%L6p4-j-q1MC>lHC+<^_=yjktY*Nvj z&$e{n0gs0A%LhiQ_-gxHjrzmzU@JT4d}_O2pg(qdUq-P`&RA@lgo}JQ<`jE`#}af` zU-SnHkLM~+yJd-~{(%uk47D29V)66Dwb+k#?qO-_v#i-|3r$=Tw67}?NEhHV8cntg z{B2o1CC%g7T73q3CTb*HUnc}M9Sv_|V;{S?iNE!&*Aqv~DH^bFhy3gwFnt11wI0D& zzODWAIg(AXx(hc+^`hp*yxFDbsvtJ>&3BGNA%ppb<(#O`TXfIiFq;GpI6A?WZkdZ} zNPXKq&&w|C!ITSR)0_Jx$8h=5R{~oFRPmA3+*t_tRBB&p z!k3o3vWRjrZ=+pu=@;fncg2KMx zh8rSwJ3~~xtkPCBM#iUMjNDp?T+hkXKy`ME6EhBP0PoLsvPoFQmU~~@0&X3+be$q= zUJj!Mh8^p_hfW7~3-@WuNc9@^eK~vg^Q}}Mq>EBo4N1X~skCVjf9_){asC>^yG+ss z;-4rY^D@{(M}A!hu!7m@OzCN(8_G}Lm~{;TxpC>(-0*rXyFIMi>;u6xixrqlrjZvKjbcFA2TGcA-$Fq!(2-JHaU7K-mFhw@a>kE>4pC|S7s(VcZEG5fC z!;@p{C@rzl4x#*&LqjGgGZ5=;eTV#*wreKY)J&iJ{a#2hR9(l=(q{;h!MAMslxVl^ zC$!$+pyKSWNB-#EHeXh3unR_=$YsoDFqydUt2&4$HrFkN^w>SOcEPr?d34@a6pLT! zAc5aS9PG_#;Zxz(2sx-+8~TKtaShqRdgr(qZf5eFi#2;yL|=G?PGm>FdVTEW6|!aw z;6Gy)6W4w^MM*Y);J#QbI76=twvnr&t80sQWt6^7u)xPjS_?Mav)lgU%yJskx zotY6!!TneM`lzzgp|+bPxM3~_wfJ5kGs@Y^!RK|Y9>4OIs~4^oFLve!ZXnLNamN`_ z>}uF>m->;V1pg2luY{Qr(2j)J$&&>KlQs7hn%ZAmh>7PmtB7j*;MrfN3o^1Shh~3n zq{{P@1b?|p#?J1D8ew_c=@VO|g7ngIE-wqsM@1_{ycBpcdywF9V3G##L{hx8d3lHd z6b-d`tjwXFp-(n{Lv9?bJq2QDsEEsbm|-ez3QAZT-<+xzdM{?V&Sq%KLc?hqCDB6j z8N1B*wyVUkjikpo%$~ld(-)b{N#67sKWp>kvoPA&_i@&p^#-3)TRIIhRk*m*Re8xU z({k#$O2J_}Lmua+!sVM;0=U7ZSF$ctxR+LiW-qt_`CPn3-gR0nDJEWX-`e| zxV$aQ!$vD@iDlh$Az<;U@mi25yf%M(Q+UkNYP93Otk6c-WXK8Z1wHNt$n>}`L7%>;j4N9& zDRq`SI}Xpt)J@#+NvXkKJyL)UTNeCMZ{Dz48#9@4c5ag&&_3<0X}F=o#QFl-4?fty zv!E07u|6S*vBzlZUv3+zmRz2C7sa`yg2z#nmi3C^ZL1E8wp1+JIb$O|CJRB`?qK!Q zmD`KsgZ)H1%k_Og1KOP21^QL3pW8~qy?#U7Bc!z8j=jj>Y_#--gVflFo6rKK;0^RS>gwL5 zIH*x=<4lfmZMTR~V|X&p+LCJJ2`|N2qEDnfORjsog}0uo+m$@C zb~@FajJ7b57X^;;yBKABd?;NiVeK)A=FiDs&zZ?lh-fq+q6-yhQNm?#rIytNS)*f1 zoG(>!85}GRVe`?xANEZ2Zb5_0jFEK~!B#k@RvQ*I8|$?qlm>?OJM}LK06QfN+%OdZ z<34d9++(c<>E5B!&@cWGM6O6XX7FWCb|5i>YN#KcV~4HFDQwNf0EuZ$I;aO@N^JGvyY7gi`gWFk7f zq-9$_txw3lUHMUc-X|BDRo#pP87`$}?lIo4DqDAyr<-e-kM5jr6pIBuYORL^tvY7l z!IG^kL_^(p!`xz2c%IBNw~3=1()Pp5W><)q60eDZfs=Adc1%6E2@LU7n`%=J&$}bME}QxUy&wf>}By9+!Sgnfs$sUN{nrI}>&sKHYs9@AJ!{ExfwP z4Zw%}mrYe`cj0wS_RRH(je!{IF4uIa8VMce3HTgX9gmO}P!R(&+}@v}r7N`weANDH z793U~pN|=CKQ|H-aco05QUJ(%dmnIpm*Rk1_9%cGFX8C!f6>p+w0Xu3oQG0src3a7 zrpDbZYpBrSY!a+F*SP^WY7lM4QLBrZo)j*hsENz|+2CXK>9lTJnafYE%EiUCU0AkN zJ`9XNfnH=9sQ;qHAtV#%z9Mqrcbf^8=?kP3a@}xM?EakWy|DRsrhghGSD+Zd_XDr` z*xk@$v%;|sQ}fHO>19_pnS8DB3if7qj(Bo1uB_PJa+WzV!t3NB4ARq5+pzyYU2JW3 zKj873OJV=;1p7@a`mu9+gLV(4sXr4_auaYGx4r}X(xDfVITGo6HTGxzK1QBC>pV`5tFjt6Q3bo^Cw*FcxV_<3CO!){4 z04NKj!N|?jUvkit_}Z1&eXu^tD;9d#B(0D2!BIWC&_&VbRCYY4yA|}V-Xy;?r6Mp^ zD6#hR%@3Dp5lrGTO@{tQbF=8Ae5c2)%#B~1-fMLaUE;5lVymLC{XUuL=5HGor2P_4 z4KMaGRU1)Lb`xV!HTD?EC9DnUlJAuuuOZW)6AZ6s#`{c2+8r_i>F2EMylte|bc_Kb zubV9OJF^b89QG>~V>S^pxRSdiAEEu88%a;_jwJw_qn0uYVr&vXgZr-O9Z@^%rccfc z22?p%3W)=;W+hZ2u~#2sqtl**h84??>A0%3&U03L`SPesR!ys)pF#<>G>_NNoK-*P zLWPvtJ6MmAD698=uZkfKU7wF=XRDuh6dS>d0mX))vk63$nvYo4eVk4-zp@ur6qUPw zc-WIi*{Fj90m)F2(P?N?wEyZoZ@8Y@D6ADWw0Dkco=hqE$gj|CMug+hoZllm3c_#0 ze;4y5HTLcMC&tcNsQxR*Y^RE1ZWNRI{N?LD5jxPbqz)%Cay(boD_7i$finGzYbi-j zx50(f^jkKm!+tCj}J1widm+{ z#-;_*$CUrCSN;hI7(6wnoY$+EqEmnq7RN&6vkSSuMTjAT^1Ls(E2+{`ljfv(n^of0 z5e#)L)+Ov`;~MH#P#}qTdV$){*gse*emBX60e&wj{kxCHgm@1tR<@d4mKJZ0JFc}J zQQ~|2Pucb6Ne;T;NwoLl0j7D`7HNX?DywCDZ>75Q=ed(iFfXW@9xO`}=b z_n#iyr=EQsRCflAtG|QRe=(Hyo(3_W+#XMyrRFz4_Lb}_1P_XW6AsCC6UWO)sn$}x zNgAq5EZx;~3k;I!Q`3R;SUAD8N69pfrcA}BHl<7M)7-&o3GE7Zc{P6d0 zcqY4N_U<>~TVf=4TBf=KvQAB{8zkaL3ZTl*Lt}N-^ap697<8(Z2k3Gef>?Lg_V#YM z{1p`yH%_LfPVW0vOg*kc>7sNIlx;OrY7D?(EczkgAl2A4&&dnluU9qO9*@7xIuu)m zN?Ns5fZdcZq>kPdZiR=>;Gye-?DpTPdj}vn?wZpbI-M*HFDq~)(!Z=XuW$yUo@aZw z^?>u@D){;&1e^0(9!mgOzFXE1AjK=1)m5Y^Yr`ocXs;xe{$O=nqsQ+u&BTs9J@uGl zc1qZ-(sWfgzxxLV{{Zkx)Zj<>F1lPkFwLfX-~K$CKIMJ%r;KQ`L#9}+fk}LbF8fQ= zJGjG6rW{3yuaSdMf0}g~wI~bByNTrf2-q|aGOfIO zY#LDDi-1$8m@Bb!(4~E2eT*dm$-1`*J8x}uULo;xWDw5?NaJ~I2nHxic{+z1Ybm?s zI&-zB1FEGy#j^qJ!7c$CD~M0#SO$ngElxF7HCB~uzXhP~#E->J?1Ng{v;I+vp+o%W zePH#XowFcRS@7w*9ES#_iJj~8@C&6wy4qhabno(XG(kr4Kv9hJ8{ee51I^5y4=${4 zs?*lJW?uTBWvQbcqLL4(Q@aZ zxcgPE*N}COztw&l5|)uO1AHnp@zR$)ozr~OQT-RrN!t6k$-y6cM?8S5fYH>usT=id zp+#E#X(dZ2TdxG*nMbaUl|9YZab!}<)u)7}`tr2`_7D9Lk70cZ+!6&SR2m4h|Z#>}yr-z@W2R;~p; zcdf-Fbxee0wfjrqbIk9#no)e$O8rNjC!B?NpiCaa(S@HkL49DOc(cQ^KUj{_CsV&$ z!kl%Vh|iFZ&gf|f(y%0s_s_~8bBqCmD_K%QL8gjcrNYYQBp7sm_nR(84>+F4_ohas z<)5F1PemRtJ4;G*C(RX;$Z@jdLzErZ?ETI|ZbhuXrpv#N?@w!ZmK9p(so52IOhE~@ zoVd4ylbw>qI>A!=)VCul3nQ3n!g$3GD-)H?CVSa8vUSUhpHOHOWng<&B)uX5xlXJ&#?@Gl z;|I550maE5Q@q+c=WS}zYsD4%=|;f8DkoUz%tJ%6b(M5P^b+wTS(BM#3ad%+{6#lo ztXJJOoeWdk_XKZ~TRN#rj37Jxho6X}yv4>JE$JBZ*z&PGSjuWfj5&J>{Is&>s-3Lw zYVv?^b1~9&?MPA}OM^KUJk!S!@RD%%Cy^Nic8lGe*sNu9cl`Xd4uRt>B+w;0SOtTu zbGM>9ya(VL10rB{BRJaofbjFveW~%gek@RAX8GzaX#ZaAr_zOQpX*_bvWmp&AC)!dQ$EzbMg|)( z^X2!w!yZ#FsWImH>FU(TZsPb9iuNT6vq}2;Y}&NQi?0&D!1Y+qn_A)b^JuiP#?x4z zsPzvVCKL_**raiJUMFO(_x%c+hkmE)cbU-13ovDE@%k$H^TaAC3dqnU)7@O(FMqom z0BRg#TTl8GWEyzm?$L_x1ADPsK`wkDOVVyku!2|fvuLxzg)uN!T4?oz1m!3XBBQw4 z`yTzmgs&t+b9I1bBVlchE%7;R6u<>4VHfD33FSTkJ&M+H0=0Q`M>%! zbV&MUpX5Vs%=muRchzOp!%SUpVpeQOZDSYxdEXzb2=l-(&~K3vM>E@9@87q-Y;|3} zT$FG$Zx!b{>zTT9uoZ-Vco(h&A7MgtP7>~;yR=8TzMOf$>_E{(KLTXqkpYV;N?^UL!}oF(giPV<%1z(F&PU86EP*qlFJN}R<=)l@*He{Gi+ zdoqU9V&`v2Pbv`1zHih+sRNIL{4gB46t|{*#_&6-4(a#$w$uwH;7fIy{7_1`4>w6= zM$oQBrtMwo=;Y34w+LJMyFOnldd=G@UD-u#_aa6 z$r7`9Y5q*j_Vc+5MIc#8gBfT;PS!wme$Mf2DYU_6u=`T1(=ALz=-#@JZNb&(kh$BM zV|r=CRYUz)eo@A;Q%Qh_W?kHqoxl)M+GG(@Ak!>MoGIwl+(@s%gJq@~d1VEQx)INe zB-F>Q<;1~gi!GRCjZiH{&nCB}LnNYUq*48ua7tF56C_+Y7YeP@Z6tP=gWn3;dpkK1 zh4%#{KZm<_C%2>nzUV<3y37WBsdky8jy==`f26o`8xl;q@M5C`rfi0~XCyu~ob5+s z^_h57=9hRp>fi1KxFG09bH+jIvyf|<0h|I1t2w#Z(Ji~w7Nn0vkSx#R>?otLPH7(& z4j|3**>G8`2>VzHrX(Vv)0-w>$}s$TI{3Mto(Ox=4~SA`b3R=U8zVPy0P6}a2fsZl zF)k{}bs7a)4$)!aHx?^fe}(~P``FRKs3|Up*pO^uVryHuw+|`fW2q~K1Y-ziyNYG> z(#|AVMNvhmGmERR%&=(n5iV5ROXTwXQdo#yugJ~hW5nzgki2P991lr9@haweWorz5c^QL@y=C8Q6UP}Ae4YTpn$ zL!ZCYKcW^;H)3};oAwg2QZUBzn-}-C8AH0udzM5TLG9Q%?Cot!&w`0eMdOu;kyre6 zbjXF+Gdd`#@M-sXeZ!G(D7$^wvCo;?wgfRo&KbhJyx{d!eQtpPT5do{Eegr0iS}Ax zx6XlN3c4a$rsn|bE*D}=Or5qRvHrGN1FZ&Qc6>(VZj-%2T1EGdd6S82q$I-fNcy{^ zt_HjEZeGC)MEb~c*bFE;`z@_)EWL$#b9K(VKqx!~GObWeC+=1W^Gow3&6yd4F4y!# zy%DYcx1nkGtZ-mRTSFRgfWzplQS!cNZ)1z|bT9eS8Weg&Y0o#sl!%ChFF_7IW2qeL z9M`o+(SSw@8C1|V>32DueON1iZ`5U8CtgGg^h0e|& zkLz|Wx!3I{LdAls^RtNe#lQ-9Il@@q@nC_(2%WjIGyO&#MN>tkL01oJt14yMkfDz7 zY1rWK5zV^vUZqLbIet_HxpPi-Wlm)gBzv@|3{Kg(RUgMJXKcc@ifa}71hToHsUkV4 zsbYXtP~?Y`_fguME3w7X!j?z{cwGZ#DsC_?k1K&hA~73mS+A+ggz%~n>NPa7VnEus zaVw*8e$5r0a}-q!_(?B|uks{Kzu~aNdy1yR^yu-qgUeD@d1M0|O11j5#tlO?c?=gT zWDym^h(^2;k7EYUv;?HL8-KmJ*j3nT-pmtxs9VEM@Js|@1ot>Z6N3jYBtEGbJTzx_ z$n~)K+?$>AmRYb#G=g+UiG`$#ZBf(8rLAo4z+)2Hk*d>L&wpc-p^_K0w;rT=zkj4_ zM)715zPvR)c*C+b**V#doKm2=c)M9P4DJcv(Ck0q%)7ZRpeJu$=B6mNXUTzl2q6D) z&uq4faSu5ke6ql)V~(u%+Sd~@MUD>I&b;a0$qBGH#1|TSu1$L@iFX`l`ih{Z$J^0U z9FW|mFv{TL(UkM+sN#q@ET>7LO-gl z>UmWlz8jfVyl-d2Nx&fcvCfRvf{nE^%hSVr=$d5Lk>&C>u8;D zCvSZ|deA!)kws4OsWyV|kk~IgDT^W*?})UFJke^MVr#&9J8M+8e=#KM?>`fKnQZUw9t*JzHl=)Q zoY!o!%U(>Z^@G#if%hOJhyCjhJbaK~$Z?a1f8F~AfbrrXIw$1V3Xt?Zy1@*gk*h1QF>()dM6ysPrK8>WV%n;Mls+c?Y#U%s zraj&zucEu7>H~RG%wA^?#z|qO0nOmVTKJq950Oz%F2AdUWGvt~7Oz>I_U&3vv{kS? zG^3t#cWvt0%Tjvs>W)UIXoy^Kd4t(Q3 zVexv)O6TkmG6K&jDLxz*+Os2l)YO4PGC;yceXQAWa`_Ns-K?fTSHiXo%vsW(@HcIfJZyam2$NtDAFi%p&NYB94 zlf1abc*hz_=#Z&Rb@`HS9!;MFi|}#-iH!E%7j+BWP_!y5gHg#}uQ8Wkx_CkLgSS5> zHT`QR^1E#|b4gdVA-GP6a&X6@etx^W(2+4W&o7h62HdgUx&sDz3IarO74^zd({sSiy}X*9Qx zmiU+Ho7l6TLo857pHFU?0P_} ze1$@jP=29KN4OHL?Kki38CRg~wakJZd~*JhMsz>+xcFg}!ev|2Ez5Rog2c~eD%qr- zNpfjl(~6lFv7UO`KbT^hMElgJnZleP6FeXO5AxnKsL8fp`wfOFRgs#2ARr0^r4x!b zNS7wkt6*qJAe7J)5QLj51PB-)0wTQz2t6o8AT+6=NR{5Jf?&aW^Q`Atv*%rVX03VF zdiUP%n)M|!$>hT|nOxU-p8w-Ge#cq+zTGLE_xo>?5`)d>pKRUo@Hwp7ncuU&a6VV5 zhPyM7XNX2V4V;E;NsEMK`Pt<&q8Gv!3&ya@hOj&va}V zzm0zuyY8_DLq_k%F)pGPRJzdtjOV7}+)kJV3<(LB8y z$sSgu;I*vQzTGgvi7YT&F7@2c^*8JfS}*j}Md$N6#>;%(lTYJTS%=?w+hb5={GExV%%m6z-^id|T!%->8g`_9E z*Q)Xme)eV9+Mj5m&et$+ceWZge6{(Aq(E0&&yF9nZKz0z#Qa`MRBs=|?dX|y<-82? z;OvFVnMDd^i}RmCyOaemBXih*&)uk|_;V9aLc!Zc+uw&3Ikyo^AxCV^CR;4fjy{n+ zfM@E$-KLp4b?{proUX>kr%_Mq)$J`#Ki)vs*X?!`Y(E`a!SrsmZpvFaFf>_A%%eP- zdzqY!T-So0(EX3o-Lb^M;kAq$Ep6Sn#u9r|vL3m^6{rw+C(^=Gi)4tt-wZ`z2~f z`1Ezm2fWOvJ5u(#@+o5mF7R_X0#Utm(?Bq*2J`yO^2wFU9l6{#IsvE)yquzJc~NgPf8 z%`_ABo;i;bN@(G%WQ}@R#AP%XyW>8#C+(TA@#FRU0;%&~XqQ|?CxIJ(0kl?sd<&8M z9!0sQpHp~@M|WbJ-anf!iGBGx?;law+ix6(qdwm)xk$%eM*oPr$9_>=@Mc`^@D29z zKhBr8LPwA+>tL(gEU!L?E2>i=RiGx6(8 zzo&X^@0oCRxH@IF5XFnIx^44~q5(Dxo)?Pbr7c!mZ92mSPu>1j!}Uj`@SjAkuj03+ z^PF(Xa#Bo+fl1eWHxv;KWqm%O4GNDwbcSLW^7DBLosA38_}h- z#%QatjV8JLQc)`3cg7zATGsl;%%>*ChD`v)7q#2?AvCa_DT2k@0>9>8-h4NK@+w;0JKz5m1cOvYcwQ>5hCxD$|JdSs6$mo2F z6E@D!zlK{82j)5YS*7Ib22phv6Bv{WhsD=x6{~ZEt|smNm^QHDv-HlnX{xW=TbL46 zfl>3PijG_e9I~)aigbtYzmCUmx9Jyq%I3Th2t1r&RO5Ch_b_4_kBr$&yiY`i8fqGO zkQL^ZoEp6_>PPp5Amn5QYP}}a6%RlA>vVR=)n(i42I7~2IyRF>m(k#zE`UqP`Y{RSJH41vxyYNDrD=C5VaFaiqH>gKOkJ z8ET6qq|R(@5ahG*5uxh$5uuG_wBTY_WC`JJ;jVc$`Aa|2>1@}c$B!P?j52#e@m8vyl1 zkA&K1?*7pk#fZHwuWHK6*Pb`?h6d7z8jRqr0#TaE^-Dn8gq+_abGHlwD&PLptSW?^ z^F|Qzu+V)ao5kyWyP8zfq+W6!Jr4k-&b7X_Z1$b|X>H5f$nZVyK48}bX7zm)GkQjy zB7p@2tI7z)tR)RTjyaQ$=zGj(#=%jW0rN9E8h^mwAE3Az&BXe3XdwG9fZo2u@(im^ zX?babh2{9eFU1(z>WtZ&Pi?~DYBOjb*9@yCTa>*{@bVjfICtGQeinY51XBm@IM4_hx&ZX{1S~m1`^hmCT0u%Rco_5NmNrW2<xluiYOtlgizYFDteWerD_8EXKy;95x4Jx3D_3bw+xMz?LtzLv$r=11cX*?i4)I zqeiQX&$Co&W~y4@`#tO#@tKSosUmgUq!fs+krq`M{e!|x>DQQyN21g z6bN~FV|Mi_U7VU6HPaJ21s49rODp@ow7M)@N5f^&FE^9|*o5M?mbmi^ZB%aM( zNqL>&ZqD)vi9yT*_toNT41WVx!Xp1Nc=FA>i;ioN%QA7*0D~{%><|KLCqjnR6HdBu}(io|Hgxo)aR(E)pHdG4T)Brz=AVlpk zp$M9uS#>bJnJ3WGB#wkCi^k0b`K8u37NK{54=EHwy{##pTh~F$o-%8wXu2RisN#N~ zqGiM3D;na1(t?VL(&Kp7(Rbs$bG| zM;Cq>OWLO2kvy7{GuCn|YV7kbk^fYjc;EuV?-{u6#ex->d*PpznI!fFm->;rX_VF? z0ydAfxgrOv*2AgdGzg_;vxN9!i`xEF+@JN$ZnU&rewA!Sx_N1N`{5zIJJ41iv*;(( zCiY7wu;ns=ul`d($dd-_gGd#Xyp7E(OO?_AVO63}yyeMjkJB;r1;2$-FJhE`0X}2P z!=IGA`!X$O2ziTJf5fVjLD$AAG8mxVD@6Cz_Gyq((!p)<+hRK<%_L|wrFW!f3&2t- z>~Yuoeqa4U^EFN@#fWD?cQ`(d2*F->5M=}ER)juJz4v(R_ts@W*>)So#c)H0$hs{- zNAnqHmSttE{pD=PqwS}h_hB}*xz9KQLVwyG5=1lDfmM$IPXD?Gta|Uc4LMGw3{uw} zaj(JhgP4Jki{O5Zg8=E_uwQ9IrzvQs6hAdc|I2`7zTh`f4gnL5T}zjIYCp4=v9nRRX_>5gIcXBRNV&ZbG{UG?O0QXKYcL(_{ zsmuDiRj^VR$H0Y+yH_T>a^#}ZN#EK#0%6&Ewha<8$gWM7U278h%45&W+;G`O(J`Pb z73BBTtuyD~siJjnJ%)Q_S?bLnqM~2zn}4P=Qsz+J<`WhcO1DIukH%tT(x$4JV6`R8 zL^b777WS71Q}*`$qYj2-i9{Ys>dKpETPDWoi3f#muJqk3{Gqsgr*_9& zCP}(z$&@R<@4=^{G)|&I))tDFz9(R3wuuvKYd87hb@tdZI4>FSod-wTqzGf)sh-<# znY!^toYnQ9`>Snh@l8eEnAG>4-4oB##A#rK@YhzTlxEajx@L#S$dX%mZ!yrF>zn?l z3Rpp~9(s;m36o8}Q1IUSl~gQ$cqa2)95-l(7e7xqeOZaM7J<1}p3qhvt<+ycFLfg4 zXp7l@K(=q}_%`T;@;?=BXm&r7Oi9lWj|y$?q%o^cG1+kw!S+uv(C;ETCRZZ%;uOic zj~gVJ3Tx+XAui0c2vyq5W54R5&0{V0m%##Z;aTn=tZ|$&tVHV-(o_DKtxE)cn6ue^ zG29dbrx|kOo(orgcNYhGJooLJiF`vDfxF#9yI9@N0|02ZnOtS^hu%9OYI1WaJ1g+) zjSX$_Zu7o*kZ?Dgu}(E3K*vDkn0#hK5MAO$3E%<;?Ctfot`)`SK5CB4z9Jl*Z5VJ@ zPawfxU==Kx!iN6pUCA^$RWmmJ!rIi({3duln@(H}ohg> zz@ArNt+YuRhnavdGn1DL`rvO1LK38)>xwh$FJ_!TG2pD{R*x$eNw-TjOZMwuHQFd? zD=Frdueo=)I|@rB_91<#ROQ&GsQu|9Uwi$~@No9C_`$26D8YmjDyzJ>RSN*j3m__< zq3OOM=|J(5cdEjTQUM&V0{Um7b++n`eTlk75}OPmPq(JW=Y^w2^O)_ma-d$x^G`}k zi%XrK@PIfYrdL=lLVjqYcC7Ch%Z7g(a%pPBVH>4=;#(SOL_KQo3F^g6t#H@{mdaWA zzUDPb8_&;MoD{vYOSG^wGo6%o)sq;D=^vH!<@HIdZRp`Yu^o(NEaU^kLj;65y`9yu7<@56M5~_j`0>BVUElHozr^N?YxVUB>84$H_}Zyz4k@9@v9!#jcVZO^0YTl}`>h<{5H``9UT zR24K0+WSQe^9XS2gc_xjTwu(@W8yJ8*0%on1+e`1%dHj(oY9vw zxaV+<0_+qMRd4Mdv%2n{$Hzr^&vNvE)V0Z5V7mLufWFfumm4fk8Y4V8QtZwJll%?+ zbqYuo(L8xUlw#cSe59WO@Ok!j<&t}TRV5z3=3QJ^5xkZYub}-T1cORf4&Y)s5m3Ao zoUR!QH9o#NviTW2REigE)cunO!>D^bePgrtkWmu(F z)4@0-0BZ!Sc{8o%9V$$j81Sp8XeJe<9E*-U^`tQNO1ewc6ztP(h@#$G8pO&@mV-8P z@t0dFKWtE^e9`m|c_;NcA%J^KkIvWEd{@4$d2ct*)6?8eD*RKTQN-pa09AN>WiR)( zZ|IJ5>_x$I=aGYGQ3*$Vn%rG!-9PIJUkqUkkWS-MOneY1w?Mc$qdgss>8Oq-#8UrN zs|`YN(_Z4HsFHhTw&2pPkdWjafMv};Hqyb<`*k;@Z|ni$_EtfmyD%IQobMy*u_4vi z_O4P^g-efP3|~`!%FZF@Tt70#)zj}xL{5g$<}n0g_7(Trd+i?xtV?9^>A5#kEVS$& z-z|u?dFC#HX7VPV%5~?`MtIxY)e{AIy-18=j=l^<@rss&iXh(zrzMR&K`!{7D%6%B z`g+H;HvkZlz~m>-F!b!S=FCi46O5{cH=Aa(8UUn1+9pelul}6uyK-?W{8Nn*|3813 z4)?#z3bx+cfBy?G`t<)}Zot20&rE2GKG|Ingyu}f4;c1MQ0B_EZwnqXIO9~tn+F4UDf!iVaqU8R+d(-n zYs1bd8ym#*?NUid$*TyQi41H_pGPHcKA0=9ZUdD2X%MlrRrQdF^d#wLJ#5f@S&Db) zomnb~Obic@TAC{hLXlCAgFte1Q#QF?5ec+{;;vm@uGle_fTxN_RKcFO0b9?v7=11FQo&0Pf9y_7b7v`ua`K3!PRA}cQh-0T2Zu~lD8ww zK|2o*_vHHVKWU(e6Ef-|x8foMgkjl23X)110jh6H`1{o7Ck{{W4H!I@K=I1Ky>=JG zW@4NlGwQZqEOR#-9vXvp@$ooqGdR24k!+moZ$1ss3Xo^Burn{qs)UA5V%%?;Gurgy zhaNKEmn2;Ogt=}UTJ&GKXMHP*mhTxj}-+8BbBnX0QxtrX{s9lzp%CO7E z`dr+fGxgQIiz2GK&gOpl9d@186V~~R9NnR+dY@ZvDIv|V6YhRP^|tOM*-{^)b7;wr zzb~SQlGkL@#dOBzZs(R2g)PUscg`Gq2DCQ|q)3`Gg&}Q&}OxsIa?ifybP|E^Vos zoZCt$eLiqVhRqtLezMDMm*nJPfVy68rQGf6$Gig~Wu!8EQNyg3iHRY`fY?5zBymxpC#~?=nN$B^ zGbpyfh8y!n zNE!ZjFhvl*wS6|<3<4wAWXtDS9?xsF5{%^ka3iD1xjqJzvJfdUS&lAusqm)}tia1K zrDoWE43^(bhl#W>lRRo1m&&hQ`$Fk(Y0#m5o2NUi$Bpc?FU<|V>%G_WV%~F-!ZF>+OZJ7I04=JQJKiq;c&tvqA93g6iN;Gjj~Egf7{CF~Bfvmk zN>y!)cTFrzesElNWNc> zKhb!K(V6`$^Xa2=pRuqt-CI;cqS{JHuZ@_p=b1y5zg!w;q`psF%_av?C6NiOhBgpj z+f6vA9yWh|xz-NCLg2u7$ol$r%dv|KmwVnz_J@Zg!U1dVvmD{GWz6$48-|D?_DLR1 zmyU2P#&sW2QK|}>p11op$eycTcFh`JD&$X^=$TxT=1Q0Av>S|Fgt^H!t%ChNv~k-K z6vQ5A+X|zEO0F6M%bbfiu55XaI45u^_)hsjDUmfc`hoOQ9qp;p>-aQFrTU4KW=wD% zwb@tvnC?VkxT>*3iF8v#dc+p$%5WEM*025~7pL@qKcse(nHs=rw@iha_xUcdshAW~ zBAj1O83qFyZfafgR;?lP(?JM=B$%iWvk&#E$NPIzw$@$p%9YN3HAZhV@L)a$lSjzQPZzk- zAgV3BFzi`u`qQv?7Xn`bjsG&%vb8iZmbf;>P-duJnK?!hZO|slciHBt3NCsCk^`Xq z-JOBTE?Ol0#fEc=d)**vf^p&WW9PtLGl^DNYJbG&I~jcu{cL*F=Y7m+FlFwmr5$}y zE69We)>3>~{E2 zr4R+tQ_6eKlZ40gt%aS2U;eP6Hu`jy^;}m0ePn-4<&lI}bZyQP)^&NDrGiLDuCoI7 z=OZ`ZyNXY!qrooUnG9RPEoc=BY-V?rDxp#Tb=$+0)=yUc@;@_{l^E+~{ZKd4M-fZd zKn1ls$a?L?&T?+=4(6fRs3Z}Nzx53@N5o8;6$4o`ftJ%J&D2-w=U@ZHA2wy8nS(o`JxJMPfshaGq9LJ}C3l5zb znyrvMd^p|-F_`ch3e{in@gs8KROsgmF0I5cZFt6*@m#ahFcxK{%!@H*GZ7%PI0o0> zd34S)j|0BDcbKZcV4VFnM^>k%6VSaFEfqrW00V266RCQP#po_)JmZ~fogHE5`vZ0y z;5j9$@J8NXnr z>L0!ju0(p#&f4p_MpKvqL8cIj4nz|Ve`)Y1_fUi#WzhSx(c*RAU23i(9~wanLLKHJ z8TUlsYr^!W#F}FMV^Esre>2_u|Aos1hmw!%S!e8t6W4yYixx}kaYknwQEq-GhZVj* zAE@~I3EDRhr0Vw>9xzbx5Rn^^)gw%rk!>+}4TJtJIt?UL|6QQ}{HEB-?`PnzQ#-|H zjc+X5yatG|u}#YVx>@)K-}-Ny>c6AR5=JHDvOUJMhCWx$|bNU{{v) z4jh!Fw{Z@`TABV&cZo~)MuG^$Sw3W&iT!}rndbU&uncy=tC<&MB!VKs^ zxpyO^Fy&4Pv?IjD?OsWaE zV*C4J32NNKVGwi07UaY ztLkTwJjPG`da6M0-XTJR>)yDlSXz5xRy5!RSiRi*3pP1XJ4t7JSAnSGzW1i@{=XLv z#r1D}xN;yFNeBN3ZZr?19eJHqFPnb(hh?1cE2oz;OwI|MVskxN?YHos-PNjX-zz+zqKvuER#HFqG#?gL8E_zfOJlL zN4zKw-4YUN0k#wJ|LX$2y`me_%J%TkUx2A|zt!*Q5ZH>o&wn9gXe&xRX4vUHT_$O% zmsgybN*TXr!H|mvFfj{;JHp=a7kU)e$OqVHHiBNh@k-X^7Xgg3NyT~3DF%l#LS4F@ zQ+E!2NXkIZxfR4;nY{~z*P1?fQtTpJem|tru zePr!>Q^(Mp(J=)hq>bCiB?teqe2w=vQ1VLpV`AsbW1TM)9ei~D$4(mYJfC8>?fi0N zmhG;-3iZU@blOY0$zk(Y+CbquvhSX%4$TK~{-96v1cTSVZ2y@6=@_VogBtmy+Ty1l z9m+AQ%8ut``(R%jwce!Mv)FVDd_hUY?50Kqdoet;6)wX+=?$uua*^QqT zz%%RyDz8yP4!F;SU)QtP4tQT3E5ug`?RiM=^;DQ|(zFSY6F+R|h244RSz`=Z=-qcE){y4yH+7Po&W$!AP>)bMT5TiCHA_IZ$ZRc{9p7 zgY7Y!@Hd~VD+>*fm3!BNZ{D?A%pTSJ{!$3)gXFc_W$nEd^XKM`a!juNBZvMiWVATGUqX+?E<~qL!KOZV0Kru% zft4onI?WiP=49VKmr}e=ePSH(BSSG0)Jq~d;Yy?3F2I2mID$8%ZCKfIEiuRMyKiIy zdh8X+EK*U4zUNyrE{EBts?XaFzJ9K%&HB$}3Lm;r*}g3-z~G2W)ZEX&HR&t0Q7 z@Y~BNNmo>iMf9IcP6Gr->o5yc`vO&dr_eA;*(Y&WNs+TGn9Qoj8g&#$zwQnsuC#@z z5eas8jD4CrEX}R0HgjL4_B;R&nL4yfVTN+$`vCg|ibi+Z?EU>GH^0xxLNQqBPX0dTpX#T3 zg7??H#fbPvzZ>n|^dIrP>2)(;xJ*HJL|biob}{MM=B?J@O0yxA{?}0k4oM>7Pw)?I zdKb`zO&7_~*(%hcjh-jkb{iF_w^e}T2ClkV@h&bUC=fc)+3ELkJfA*$?$u#XxOG$& z2KwD*|2tNnd{EqI(P!z2!8Kq@>%LHit;lrzxO~2q+m~aa@wa!~STtx62oiuWp|9Duzfq7Nr=|s|AYij3Td&a_&n-?FgxKR=I zc7jxcN!b$__7>Py3IzRre$osLTqCa?;`fw)w|;(;_`5>U+sy*VuXxz@|FBwx+cJeXTI!y(533zHo&nM{Djxt4csYnr!T0aQOK01v11p9QYtg4*|YiPzrRx@dy;&v z)D6-IIr~W)g415*6*j@};Hjm2{T7&`oxJjH<;6c<`YVlhRTH;k8ICBX>aj|+wpkM7 zOSDp&^R}-MfT5FEv97RZ>WlS{dW!ST%V$L9HXIn!3NCjx!-jzm4s@T%P9 z^7+qEqVGmOEfu{u#^hvECcnk;`HpnH7*7JDK(9vreMh!=<$ubMam@YBG6dJd(K1?c z-QL9BVn%n_<3)xKY>q+LZ`W)8a|_+2^7!K1h;2#v$!>F0Jt!-s$E1?5V3Mn>`^|dj zkMg2{r|1R^pPYG#{S?C6(&Lg&dO(ZDbd0lK=dgiSRN3ZVvFlsD)&m$J~4@^8~L+*t7hv#F4G$Mu&iIeBaRLJ5hTY?#%X)Pj~W_@xZ ziFUu{#5H97cm3)GEX*k8dNB%a>ir|M^Qq4Y9R`Hom0rOdE!W&`va3%fHhlG~a=zLv0V$CRU~&@( zfKhL}%X;&S*}gadQDvv#T^TXG`L)xKPhUt*qyAcgBn!)k_ad;Ng9jKo>Egv9J>XPl zhuqp0$t`_B+JH|938SfC`f5CrzHsg3Dw6L* z`ttcW`cv;_<*{r!uNC*Cj=Al{Ql$$3y_3HrlU?@_Vl%z+mGP_oql!Qt{mFL)Ks9$XCk|TtI3p0z2=I@est6)uL6FxLw zaAgYGa046On^$G@BV)aH>mt<{x)3-WwbTD4-+;$Ma*thl+z>=ZitncS-mh{SKC-e&&I4-6y|-lCkA z%7V^Ntpg%1{#vRqS7+?tt&qyA8-m5$v&tS9Y4dlV97!glAKXfc@EGj@LsKeutY|cD z)tSwAicOswoVzCcQ#*6~nE1$AbNDGm#?T=J)VvoCS7NEQ`<5KAn{_hnvA(Q?FZYii zDp{&CyC4N#YpG3uPH?!z>K(Y?G!*_xqPgk8WrFEG7bwbZmx&h6}F`n0>*(L0w_d;KNq6&mdw#is=)l$KZG)~~ZKSE4gS{?wK#%y4%{63;b2 zJAo~Hpm4Ol@%_6Gy_3)LOnXcpbA(*0bddv}ygl}>ETyS|net7$BY$cDxLESVn3i`c zA`i>79D3s3-SC;dlxvwr;klnskm_1Mg9Ew=*7MDy`} zhUOHfZ>&!Mi&Q#Qqvi8_WG9Y$_j%6xr1_+={T~Ix5Ixttb7oXWr8|%rR#q}@)=ye$=m_N(6B~{ShdZF_u0jo6 z+_9q1%P+b`8;>ev*+w5J&Ha!vNjFR0<*MUaNgsDk{9Cu~U}w1JgvHrrZbg%cX*`u@ zO5K60Yq%R#_n@c%)>mqLLtqJos4yAyeOnblD8m)u?&;mdU6HkhOI#SgroBuen>*;` zEM5<8qag20EKEj;^Lhg+0#G+=^%T7lkFzJug5x`%rX|qTXlaw)kTy!g^V^R#RqIk8S#R7?Z9K|yh%$!iah;e zriV1GV%G2iLem9o$<%f$KV|m@mPd`{%2IA>HK4_$Q%${ksZ}6n%hp8aF-n$0iqdI8 zM*m65OM54a1$4fEy#Sq}Ecy=ub8EZ7>0&rjqDEn1`+k_#GIrS5FaWy*T9dhl6_cL2 zQmlyz#y@j|CU1l>*`}3V(Y>3dhhj;gWoTqf4Pxs8wM_#owecJkMn1* zTZ+J3nT|v4$Tfp-__%uFkid%T=?3E_W5zOuwQ!jM@fZ>s%3W4?tb`kD4mW0#gs@yN zmLoP$Qsa@yk%L}W=6IgFn!?~u)3Q(t4lz_oKgm%|5fo~!I7x$$qNlfE1rTBQNRMj!@sRJ=>|dNX zies|R;8ZMP5d##46codpC+(>A9xNruHpxq2np`*KIrnc7=gN8XH6C9)t%q>3;4G$` z13;bpf?Q?U(xzAHr}zBxe+X8mo5$#`2!Biph~8CxN~io{#3hhXQ}IcxcbbZdNXfD8 z6K8|;hwF{%G=w3k63$2p$WOhBbQDte>g(tuTV`{8Nt0Qtg&;@t8^hsABNhON|Gmt< zZ4QX^da%O$9?(!m1efEkf3k^%f_nf<<1WQ?9mrcjN;rIBz4VmjgxQavCX#j5$5s=D z81G2{sNfjjMe)Qf4|_yU7^}$crwrnY5XC(7!b;ZQQ>t+J0gURxEt%2(ZuX&n<97N# z%uPhc_g_m69W)gM8>(X6j+mqjJtbk+!D;Kc(4inEaP<@ypH|bS{Tc|H_x$<*gpY=X zeXk-_v(793N_`RltRyN6SA-}hQG@6EcP!D1jFs)?HFGbc^m(CDtxzWy{S0#Qda`!% zJo%@;EkQO~FmOpJU3&Z%t~tChc9-eRCIg8$!0A(`?_Y5zy3XS);TP1@Bp?1S&tU&GdlId}bvyBrOsD91hZ#D{xoJJ&b@_ME zO1JsK!Sq8mbHP(ezi*I?k;O%r70c6?A_V>veP(4_6|*m!>+c4p-FX1f38`6*G}As> zSj-9Yl_s)iabAg>HjwRA?GuGsJvg1RN>)(#`-TCR%7&31k-WI^nunnd!49wj(K2l8on_~eRcTb;sXcKdSo=cD3VRu_-w z-13qFOfUx5ME5253LpSQlq!j!RRbmK_*-^PB4(5j4_XXcpV@fkMn7txxjyL2Gm#rH-yZkF4hY=#(`B>)2l;kgSBH(l6gs2fY?# z@fomzVw89p`nKk?J9~iRkJoaXo~4i77LI`CzS@tm$TP~NwsjXWV)zWhTDH}J>dEso zMLA;zXv@jVu)Cu;X4Wvb$8IK+7v(~80k$pwgf%HS3|LvsRa(3QIl& znXn6JCgwa8=5D81^w1{!Ss&E0poq22hcqZHDVOf~SX@s2#5>dY?j16q>St^FFK*?N z&6XKPRpRHqV@7{I1rZG9o&m%)x+!Aut~_WPfqd1K;P z9BOJS`%B&O{GpmO zO}2*IUq#)R*4kR@AQvYuxT*;$)nqNEytx#a_`fCd^Vr(IY;JoR$)~Q1yqVA`yw3TR zf3QX5Qy;1m^;*J85z$SfQg>+WnbL8~9V`DxoA+=E;V!@gR`yv8RPUWDD6LvzQEr$k z_MDhJD|F_Nj0m z@MK9?J3#$hD}1r#OFyGw(=+~CxBnP#d-a_vkzC?H_gLrf_;Wn!1$FF{+MASItm zh9){eAuQXp!O2F9g-oXpUVF$%wURO`Lq?Li+V^IR*J~|g&16$72CX?Hm?|=82b5u# z^Z=XS{Q{QViZtr~>9VQ%+W+D&e&%KQJnY!v?}ZoYnwsh||B_$kxb_ch>xF7d^LMFJ z>>qZii#CjZv*q~r-d^je3j6Rm)9hc%$}X{*T>o(ILA>|h{Zi`vp~a>HrXQrG>B|be z%L;>|Bv2u5D@ziG&>HGc0DJYmT{Z{A{#siQ5qBWhAUDcWUN`iTwMdejB-%c@ZgW@pi8uWw zDMvJ8($xE85{GYifY5)55OFL_Gx+rV5!v`wqeJ(KCzQMcv+U-?D~Tb>GK&*miF~*< zDDiG;>z7V?u>;*xvQkjRgCXeB4D^Qc6gcyV^GB%;;Y76E*m|&F&%HqIbrr|(3VW&WSqkWe*b&i!mm!YOQ#Ku zg}>}bk;gXNVL7|3v~^d*1i1KveqbH0;!bH)K6=P#_F0=;OR296S-!EjAxr0YHDE{y zEUvTTB7XFcOR%b%5k4xIjy!UbE=HBbk*t@;L>nlpoXa4Dq zkqK^~W2+OePv`jI*Z`zG+AIPFiO}JDlN$q=tJ~RK`UDm5SFc+dHIgv9gux+{d>A!u zuRFn30MEIAtvcUN=6&VH(>`zQdHmAwsH|i?4kH!0$fowN(79h4(L_z9bAg>{v^%0kI3ff&{)tPHP2;!|Rv!f=J&M_^SudDV2Uc`i$307HL~8 z?zSAWh#o)S7pa@lVoIBEjw>?+*_`F{pd%TNIh!s~3f#Qqdt%kUUMBF!$sRMs<6B#C zYzrENc~~I3z5SJ7n;z6;?8l7ZW4C6{;>0=&BW@Qh;_~(k@42Ux?MCJZB`%A8d=kto z_&%oqM&+NLBhzq!2@JYupu$&=vNNkBF$FtV{aPyaUes2~*{zx_<{q&n$oE@25dw>) z#^m<$Gq&7OZ>wGPj`(zf=%Fq3s)m+a(o6d4J{M=vV*ikvqSfPrNlX2oUiw2TK0Z52 zSoC=665tmIFH?+O^6+mU+=9ar_bP(vHC&4J4XW5UhS(i%gHkesNTQq-k&9NP@ z+4xP{ya-2T&oNM+-s!(5R%>CONW|COtJV`%f_ecn`Tc86c=e+h$mql$0`qzQ(=EII zw`2MLDDy58@@3hymQZDlI>d?`ZKexz`W(_E*X5bB+${c>**@$i?_YrYbf5;av+Q1R zw3SFmO^fb@m|0WcoY+1zzvI^9@1KTy=G9X6Mo(2M6mmN=0X8?;C&Rr<7ay~6r=w~;*!0wL;r)PS(=wDTCd#o`|}d006|^fvgk=-8oIHxQ#eDU_~WoIPU>n5 zsmGtc5f?%`tS7JcPtskIWq#??%-5c!-XRx(2)sXY*(%@9XjMmiZW3Nxk`S)%8*Hk; zvrkvl;jGbPZk{*6K^WMQtN&0gb+1Ib_alp=s6%QgVUk|)fCnhbJ#oREtsB*P@I#FK zq4QgpkkLNH#E;0@*csVu-vIlD&WjcD9T?&tvEq(RGkv6#nf9@?BBJ3Tf(K;72U;9` zJKY)X0|lJI7>kRFn;K)w-7+4Y&z!+LL=sibVM_H`Fk=H$oy<{10?Dk0uX4D-)a(Lq zY~{u*FiwBW_R)E^TzCr0NWa`DFMce^dGjeq^>V35*KVzBtleK%VONYnm?Cd%ulK{OFZD6p+D z>gU9D{VVG$MQ@s; z$hOn!f$)rtNAdIGLm~8Ivg0#FwG-RMj_< z@tmW+=MkcGDOjwtIU$A8zg~Z?4w;IOnR|;^(uE&*zMn%BHaTc8J$XCmVTd%gs80ZT z#Www%deHPA1KdCk(7K6*GelnW+;)Jul9jVliKxyKSCtJwPNM3-{okPXda{jh5Q+?Nw@V-v#9VNl?oCsaaeZ}Dp#Knspsl-piHr-E zsaR{~=8gRXOsQz`G29qqx|a5_xGb&$S^Ao_Q1^R6$druICm{ESxtxL)V2j}P-iIkf zdDKu2-NTpWVTQO7LOreT+Un)*El2V&F} z-9gXqEH?@j^*qmvqUnskb7l6Rj;SbqO89Q?Eb=&goTyEw`fGR-GA`TrcFZ3p#B(gC zV0HGpEV|)+>PVj^!s$gaEq&X|f`CReMk#Bhotp0fM2B;3m3a7mW`hy9R#1p_m78b8 zk7Uo_fw}Re6&{$rZ!p`qqp-SEBQXl375#Xm=Nrs zzK659SDvT63C1RN1-S|Xv9AgydJDXt0jde??`K-siI5H4Si2O7WlG2bw4t%2&WhB# zM%9#r6&~{R5L=*bYp~x6FX_2pMGnOP)e!5+L7w)MaXzr4AY5^9P9K83M z5s^^n8Ks!Y=izQUMZ>#h9%llLtoc(*D_P;9LT!L0x`3Bywf0s1Do%m9W%>D@G*T~F zJ@q6V(RS)UoE-a$WZjDGQ=~N-=7*S^`j7t?bMO7uR2z4D2B``OpmYeJfJh0_2~FXlcj+a7 zU}zzf0HH`xii9GeL;;C_^iF7@BhsWu@4fd93WD{Syyu;nYkryYp1H0wGv_bJwX^rV z_xHZnTAzi~A8(Oua@7Vx1-f|wDwNdru}$s#n+mN4#}`Zu0n_z`2|F!S>FF)<{Nx;< zg=a5*9AewZi5f$kOVg|bFk{d6Crgf@Lw+ut+4hwWU9#5`7}h`eUh4Ineux9Zf3;}N z_FO&k_;l@2-1p4k$h#z&Ja|j-aSXqLnQ`U2$?;Jr&?jE*F(}9Z%D&v^p!{br`t>mr zhe!b?@>V?lp(ezc*&$p0y>wf{esXh zbnL2*Ab;Qky)s=ru-~CeBa-E1&P*(eas_rpGXL0EPE$$pXuV0l?=<1Jz$@qZjRXL5 zYqAa^9NL+8OU>;ewsKqk`GGbwV_VTqvPgGKoGk9Sll@xwUqJ7(!7vOa=)o%OHinhO zBI?N`AAan_@I!aHzZf+j`4*^?Rmi2){vfF9RMlKdbKw@8g?j;K+p*IWNiFIwNY0y* z6#Sb@{oq!jP)UmxKWZV*>2tzc?TKL!3c_Kd%IkGg@haz#5p}8LZK-NtE0!kMi7HOS zyY0hEZ~IwGx8=ql*iZq!6H0ROU+OJ6bTr(n@GZ++%tZ5qJiMU!OUmdYzv8=VY5EX7_U&sh_#3 zKHi4RVCeQ|CHNm-w{5i7Yj&Twtf+RK0kDcZ=npIBi}DuZ<>QBiO(X6i2hSXc3J+eh z(~xIwtSyJ7yeYSkiik>X<)^TXjxX9~WgSI^%^>SVr8B>j3SjOBD{Yg~`EX=#qw$2V z3Sbvi7xeX5=6wu*Nm0hzZ#qg$$Jr{hjyt+DteMC2Ai=PPWoq@;yG!6+8zC?K4V%82 z>S?NpQByW2T-Ws?fAB(YIJjVI4V2F(eB~uv`XScCb3LGTAE+)9sr|eyja3S#DhALn`j75&Qj882q@;$gg$C8rSA&vyrioJdH} zZUbtf@8T#Teb=+u3l<-IQ2H&9;$a**ih&-qb2Al` zw!@a}5A~j%eA{P39fJKMok9OLK|}k;U?a-JqLRu|{4IZP-kId%bZo7dF*MzOfl6er?RL%eKeEXJ( zCunwR@=@uLR4lQN&867&Kd)BjKs>5QBX3Rj%j+b{xpEO_$*EBdCR{(M3Qd$ED@}Pa z7P-D*>Ri7-=`mdB4BHOVj>aOhzi*zsDX*zMUG;ed78Y{{2{{!d+|r`gX*F`c{P3zr zK;dWL*Wi~shqaSqB*eZ<@#(EWsnXoES>=hh!P?JLt1*X&qwhL16QCc|t$Cy`1pQ-f zj$0i2UNem*W@r-Ag@hdf8v0#nlVtZbboh8 z)*k+D=G}^o)b&pWIRy6wxJ8WRuxGZU$dmu=lf{E>n=4tV{iGL-h`0py1a}{g3^Ayi z<6&mplcnp%SWn{g_ZmGFq2@@d;)It311(%-!oCGN}W6#hEg|NA%B!cA*0nH0-GWRbHvSvAeO ziD!PqHK&wh1)L=T(7uH9ZWIagcS^sd*$LKw*rwEA3@7uG!+Rt0VW2m&j7mc4B`xzK;B?SNmU#kj| zuS6*`qCzb{Thbf|7S$W480h)tiA@UhDnA)VhFbYoh6TkG(+LUQ{^HyA^UmZeg3kn!hZo@_WZ1@ zjvEyQ-!ETtJwcZ=2Pg71slpQpdVG16c%t!V9T^ob|Hpdv_8cgB`)G&%fr*RS>-F2p zjUsCg+1J=GWpyI6xSZ{=!j@B_gDAp{Tww&35>bK;mj{C>>V`Ea>QT4cW2zOj)h@pd za5h>{p`z}xf&(^%_6YurrV9oJlro;m?ZH*rKuDU&NWz3K2fvqLa3;J>bG7fx(udRY z+=N~u%Rm>3&=ShM+KY`?+P?1M$b(Bh80% zU_BunoySD%i0a8+smJEHx#vf-QEw05#S$#a$((DZe{2@4K*T=eKxxt()7_40(&!)T zxq2Y_^0|dgNr^RIM!%dY+XnzGa@O3B>Wo^MpRA*2G~@m@_saJhNP6|m&TJR1J%!Z z9pXPImF&ET)hm<)E!NIDNE6AU+HbDdbQ#B`tG+}!$;4JW^$=#CUl_^ZEQK{0a0S3Cw9BZ-nV zb)?G7>-DT*WY(RiI0P>j`l^yS>NPUI63yY5s!%dA#B=(4 z+W3iMd_Z>u=f(a9%I>L2i-B%inmNKZJ*CStTvz$9|o zX5zk|huixiMC_&;@1!%4f|c&3j8a6c(xRloxq@>}%Aod%xs7D}(^`{drDfX+?~||P zZG0NlzIX*+Li++lLs>NkhnQEg>>VS^Z2C)HXY@PO)_194Ib#1$>u+kKk06u1*F$`a z9&dp^FD~<)%>c*sX3EL)Ko63CAZ^VO+?u7&JN!X4@aD-8Uali+#=^6}VOBs!EI)nt1V5zyDuATYUlMZ&TMsaf@9ER7|n- zQ=heRP$4jNO!HphPJb_HHVW5Md3kxKY3Yi0AM8+q8&#&5{Z&x}k1>O)4$<{W)2|~s z!G@W;AD@BfkwV8CBGcokZ|Trxm*J{I9)>_FN%>%|m2SghLB6t0?@X;8CehX>lPmf- zm_W(B#_^45ac8zn>YIwN`#2uT>3aOsfcMmusky~$H*GG{ z@f(IF=&tE|?2<&ym(33rhxJuQ-@n1=3@Wl~1$7>{JZ6?&rhhUEjihdSD3eYQDBD;p zuxOLT&6`u)r)IMm;PbQEZQfpPOa96Mi>N+qq0g&S`tMV|DDl}1+zK0V?Z?)N_ndCW zoAlT4+4ik@429El@Fr}ARv6VSe!6Y9mD6NvKM$$DI7uD8&v5s}=REP1d4M~`V?n4Q zTJ=-Wy6?#n=QPcw|fb z**1}QD*G-;wZwqm)eW|M#>xf+t!X87n}KZe3t!FKCmJdhA%*XR*@E z?1|>Rcs$EL{oRAz95dlm`OUow+2xjhu^%q-Pe(tV*dB9LY5k=aOwZiwduSom?(e!% z?PZe9`^m-=Bl#uRMRMP^&pYbFntIsJ?hmAyi(7>1eVmA$xksdKnxE^&trpfgJzocG zU0Om2vBz)LXCvylR<{|WR#szR}l0!{68ENep}O?8ncmkYu39PTD`qck_B_Zc1)65 z#n6zYh}7qI+MWLEx8JayF*<`D&1f8XvC81*dg z+(qtOJpbVd(3zu%8bqIWe^uL^VycbSSj+H3!GdsV>+&QguR8<&P!()3A*euCF7KAGw*RMOt|^|GDx; z0##R92H4u$_knh1VtCm;V{%$LQ%nq1x^rO%Rx2Rwg8j?P9EsF8ipniZT=yxt;BXzE z=vK@hXEKBwh0omZ$??*8#DARB_2~De7K2f))q)Mz<1&Kg>B%5p;OWC=zwZMlvWkKn zOYPrEtMHNT#j@EhnjH3X3p;K5Zpw-g_X!GZyppqXxhhC3~?J{ z)0t-EPnKK#+NBu1?{@g;q5y|@7`pG`F)=iwP|)0-dqVfPtJ?+u97Nxc8woUOc~W}{ zuDq0Z{VIihp8Ar7Jo0ortHv5W%B*8lW61DcXapI4%ooSGIy{eI^c#) z@H&Ztee%sfx%SGnQO&bF?#zgvRc?S6iC3MNB=-$GzXei)8=N2US_u~y4*J-lE?@SNc_DeQi11(H`V)1 z_7$F=RvwMop_`r-?asi4B87w9@G~T78p4m0eVjel1 zreRSlM}#uyx}X6oflZ`I67x3%l7(&hnJ zVDpTcZ)~@@k$AYICIUiUbH`Sk%O_I#hix(KlE|Jnb*it&RI06xo%*jJY=)aynn7?) z`4iqd?b6v9%bw-JWy15Hl?=3ImbHvEJQVzI>@C=dhJzEG+`PA0KT`E_(-dqQiiojt z%h~U#;FP%LZKc%Hw3@B;w0eZG`jLpFig;`Z`75C+x(9HpBQS(R;Nb96VbhZ@o$>rSg-6pS+ zO=+5JUz|(IR=a6wvG3KL#HQmG%lx6=IvlH)AEp)_Fb7!M z)u#4IaHO^rq;=o0uJW<>N*)!*CdRd;Yvq2pf}1%HBjow1>2SKkg*BfIdRS>&h0B&@ zJUp=D3M$W%v^zw-WCcI@HqCpt={@baqFU&17HH3-8CFcVn}i)A6*;8`d{yg5cu}bw zw#>qs(qlDN1c&|n4HOHad(+1^*>9VTg2LC9j_x5iclob8q8ip;u>K3s$~*^d>|4?f zuI!aHi-AHC^_F&eXIWj_no9dR1J=9Dxs;8SJ- z|JjWtB<42T@xv?qiK7|oBhi)7zgS`~zMoO$to_bhJ8rTlEG}t1+y476fa{ydl-)hQ z(x;p@_6t@E>IU5rza5%)KV4^Uft3@-fvKq+WyNJ>74Nf@4RpLEUH5@JucQGSV*r2y z{jl19k?80Hn;O6bfhfLbt;3?sxgp!e>ORF72WbQ@782(m7tG9(=0--eaNKh)TPGA}tKf@fTLI=T zm-Z|7>!xQdYR+JrWf*IAeRuW>oixQXT5&ZPwpMC3*Sgx=eC*7Kz7M#vX$;CDyRmBDpU?+m{H?OtW1lp z<02DT6nQt=-JtCqFuzCqduxPL5GcN5^@$MNqvj*!b<2KDw+9vK%^xgP=cZ z)n)7P90dNxl^yg+MP5=`XNB8~5wa1s<>A{pQOgw-Eg`17?dHpr=CD=MJNLvN>30pw zFIV>V?E0m4tzP5TRsG?|)8>YSMHK~kB^d2B1{ZsKo11?{vI>9Jic^20^nUR4dGmSL z*SmrKkcMSbI-gE1#-@QXnw2$@D>tFl!(r>Px1Z$&StAVbUjOGJ)?XS;3YP*+=U_}G zaQiG##6ZW=o5UzGXPaw-hJE+l_;3EW+PrMxr#f%Dc6<8=U!xQ4Grz~mQ!58=Rq)jP zbZ;v6?kzesx8Q5iW5-yiQ=z)J(L@HHNRE?R{4MOrCV&}<*p?u#c zsql;47il3t146^DsijvIA+~|oGdA|eCR`LAe4y-i(uI9`O9KL74?EczK(O_1LoxL4DHI+g991Ulrtm0;C z-r|$RPuK4Wmym5+!Gd_aRmT0McWk?@wR)jp*sK{T)p3hloeEc64ngI-23ULAs7{tI{zlv4*) zNJ%g8y3z7UT_%Z;_{LNol5y;3{}Pm+rM}h*pJbOm3zD4s>p#h7t2$n zthkI^&!0&|CHT)(`pez6XepbgNEO`~?O{egbV=LlB`Jn#X1h;Ir&W|<1_CET~Siq|eoIY$Ct zG%d}uFJO-YP$VgjH@a^9J<^lKCRkQwPCEVLcth?bK>pNk>3I^_$bgSL-$#_>|G?|` z!GHNCRbABST4+i`E?K@WkQ(BH=Xnc^@45b&n`Za3G1MXJ=Ev2!9VJhk1G~-^@QuUP zTs|$V{dD?tY?RpEo~si}O0NyW2W?AFWk6}F+6Srv^5XS4ne#rrrLQM*{m+4rjyYFF zLP^pm=y=baJqy{i82W?ql-6Ih{mZ`wPgH-7Fcv2gPEGCno6I|XV?SF`s=iX+K|pvg zvMCrG)xUsj%W^Fm6WAWofq8oRVOfDELrKaIeLPitXF`&m3gCa=i26Rm6T}#Q{Uak6 zTvo%0%oqRCA3n;@@U1W>D)DIZ#q00uJ*+D{IfMe4gvv}4*fz$stM`_l(rDaYKz)lU z<%%LMsxA;Djw%RXBgoO@c-Tfg;p)@>4yU-i!`O6ysuojvXmbcGnp6!e+nO}*`cZa2 z$fGFh{nrIJQdJPhnV2yW@&mTL``R9ZN|_;4aVl zXnTTIf*I}0Fh7}h!ruzAGvJcc+_y(r%T{ej<1}dl*auXJjc0R>wocjc`zTDJ&gzo` z09^bVw~o(%OZ83uHAVJ6siK)OYA!9yUQ8Ica<9q{ibTqa<&nEloHuqq_7P4*jGt9C z+lkG(H;Z97f;sjPoSsg`>%$In%{|De(;jh^PEO`Qt2D@Uizyx?2qpWT;KyF9PJHR~&+@VVrF zzmdQ;%a!RVB;a7Cb`v~dE#xLlDhkx>om9v(<&5Yh^8)z!hkVtx(}+K`b0;p9LE8&! zOii_CC5v1&s?ye0d+#0X8bf*MA{orvST$t8%;1^YhC?mwJ}oBZ&`LH49R)_B8RDfP zNMg*dCHb_FI@2-2FlT1wk;DfJb7hBOUQQEOzCfxD%@9&V+_luI&D^ije_~$Cv$iRw1`rsfRzwB6CktV^#mB7*@_wMPU z!fTpt@qk0z4G`|Mt5KxzEBg=cym)uK%|dUV4G(!iY;~q|FP9yLYWHpdK)au|;J><) zX@sJpZ|F^WmE0Cie_BYg1yqZi|9Q$+ZHaX9`EJdS?`(YjJDqw~D~~ro&Km^ndukpuT+qsyBZ#>t|M>`5b|AlxQnh;x`I8ZY@DIDJ2q zMCSL=mnayMYL{B4cjT@%4;`}^(>KlQ5BqOSKVq>zH|ViBwI*Gto0APv;{k!U;MQu! z`hwY+!<_lMDr@t6{k=sv5X}kHnkFi<4pj~b(0#2Z)+n@B5I$K`>uckPpt#-Dzqqg} zFTd)qZ~`hWUwBhYGA(03y?Fhbj z_q3__@auWe=z`=~gag9sx`VvfT#Rq+C+BfU*-lA$5zYp#VY;^+H6b)u&$dJYipeh* zaNU+{F;l&ssmB5xfNpF6IsofKjZQPOMpG*!;f}`s8_R}7%j&NAf+?;wa`Fax6rdIS zCy+$YA0u&yKw-V`c>KOk+A1v_%2*#R(Y3Nhciz+fHj*5 zlr_!PF69`!Fmm`yM2gmzzTCh8{bllIb-Z&OogtzI@v?7l z98^?B!9)KmCu{x}6RzUWO{NQbe}rp3SAXMs&Ff0Ms>l8dc;2at8${+KVLG095tZ*J z0P$3Ew>J$x#%y%*DWg!tm+oe@GbjxY22-0z;yVP?j31bOJ%o$MnqdtAna zx+Sc#kpl^o`Kl0G8g|>5@7aYZSCR*GhJ7f&Cvlg{E2@R0T!@jz#bZ@f0qINS*rH-2 zem`4hMB+M*|II3{s6yY{98w-s8o zrGwf7F_+b$I%Cv5V-t^ek2_}hAuNQS>EzpgXUE{Z4usBuj?mT#d4-9!Hck7vp0<^A zIG0}XmGLoFf8L;n@6IXPpF{K3&b_K|-+x7O9{X2B?>s=nkSHzT2nV)wQyq?aVB$Yt zh;usyZDUKDd1apHHVqrWcQrpQEN@}u&k|DD!SlR{C6C_Kn=L6j7baG|op~LqU(Qy7 z6nZx z%yvLSVv~IHB}k;v6^lFh$`e;rN22MtERNQW0$oWDj3yq@k!^w&*^Y0ho>Tirq1QPz zM)q|qVH!HpC`lLmbD_EGEp%qv#}4e0ya9lqyRYGf8}(!<2Zshw+1ebY^10o|PRPAI zyBXVPy1;E^7w(t%n>ptt$b4qfU5{yDk;u> zfH)8;<1dQ%x{ot7rq)xvOA7OxM>IS^-+{TgRzBeQx zF=>1)A50q}m`m;vooeumWx-G)uVx`jBQ&)hlv@)2wk8ofj;==r@?{FMs0qI&+u%tB%OCH7*(y1vpmua3_;hO~WgzufA$*iU1SxqZh^0VD? zp9IF*AG6dg1ceihqVk+(iH7&)=E_bu6Kyu9X&SPE#1*xhY$K|Rq0vangX~WD2DzRW z;Z^(qe{L~J{s_>kQo9G&n;TzvP7V&vmq}uaZc+0HnlPbgNTo&1f*n+)eHxrc?El60ccV$KDgtQ-U9te3vu#s*5Z4$@kV&X-x$-P4sql~<*W;VpO&-@VE-mb?@_tMI*J0)N zLusa3vsIC($}4tgbgBhG!x*C_`+>nUqrR2R)zu>B$eo%q=NF`5)xZ;@U9vegFA#b< z`1*DB6)O}Mc<@3k=jjLkv9NW4z?_Mn=#;M?j0e0Wh8An>5>l!cm)bp%jZ<>35!{gJ zqxOb#Q;4TuUQoR5J%KU#R|r4UGoS;1Rx)ukAEV zy`<>jHd+rF?DmV4JE3{>LCc|T+(b`Li^Si>yHXD@nH?dy*L-gR98w~FJ!CCY6nRkY zE_Q)7EP5w3VJ8hlCCj-SF4iX;XTRQI`p)|o+^p*1Ja#MQNo}yP2mXzYrygxK?Wa54 zdiC-jJ8lQSLaJyRVAO0d2O_dCvhvMhj)YTitlkgn^FVRW6>ZgvTbvpV5y`TcRUQ3> zfadDhT%^2X4=dH0CyvTzmJE6FeS|AF&$(;YqfwUD<7s!wRHaV@c8`r*hkK{-Q_h#| z>xTGcQ-^v^Pr7lFt{+dCDH?RPBel?z{17)kkPgJBW5n>#VN+nIF6O9q@|M+p>3Xv* zBC4Kd&}Sh0Kg7}-r(bx2L70^9Ex(4%#!Y(;Q>pL>K{T&+$BwMZ*oIVs5?4@_XN?Wa zPwxK0o<>KjaT(Lm&YMW7a`us%>}Mi7SFP~X-r0dXB56yOwyE+f%nz|8UW4^enj9k6 z_9Bm}4Y8B!ogb5}wy&HScpwIn@B!L6)#6>hs^6B(sXpw*(Tjsx8KbbZ;8gswLws3Y z-l%tDw<%K<#@e9>$<2+jzX<^Ul0WaTZg~E{siA{(EHXx9QJ=Fe!~*#p=;#2dw8`sY zJoQiPsxIzW%`?3*;(PZm;2)(7p-lGq+lX-zJx|lGW*#9_ah$g%{L3GhU3Tlb49-fk zRv7ACTFlJfq%P zKYGp0)L`Kp9K8ut5#iL4Ka`bUPZnTq!JIvmY1KVV2#Y()}>ECUa@KGNHSX50>nhSC%a>HSoBeq>HFSY z^kl8oE3Bx4m@*C&K+Bzv33}0Db>Qxi))J>?!^uxfY3|GkP~mq4pwDc17Ctu3n5~2f z&pt(=8zPu1CME|SB!-#zN!rjLV}(jw*de6GvVTI~6qF1}~vR~A?1F-)m?rGC`` zJ=;;5A}_22H@rK~ykV%?PhZ&mjHqh=a}RLe#BDQbG^l8M0!Icbs}z}x&8@<+z1F0VZ>s`9q`+l zBI&r(9(r%oyY6X~+4+Lf_V2c{C9D1>!@3Zbh-`lO)xWYi)_zL4Iz;Co{T5 zouQ(jm{5enH_(&`ZLx)#R4XTPp9Kg5iHq;ab3NOW|Jfr^^X_`Rp&8-h;|X_H&VK)a zIWtx!HGosY*@ILY*us9W)+dY*n%k`di);7y`PM-!cH{}plzg@m6Ex8|STQm0K)=il zrJI5uUGjjUZIEZlv+@mP(85aWxtRgQKSKP-PYe&ez@J_mdNX;%-`BdM#^(S;+K2O!PM%ntj*JJqY~r%! zOtrMQELHfDG!gDuJqxAxi#;{@5K~dlEIoZ^0YYl~kg1H+niOy0UG3uVsRqyOHN-}J zi0t!A3|bXrwkw3&a_y~B^3nq?ps%=id?;N^QGf7hd5HZ=*=v_fs2)Fh2$>DWswB%% zlRtvO)K#nM=RE^(o5+T7V^+Xyuryr~?`;(Yl|}v!Q>ENowH!ij!`TaN+i$Y?x#LG* ztA9Q>bp|X4SC;Y4{uyw;(B6M>lzU;dy<5wp<$@W&`C~T8=J|IChhO*M^>zi=D?Mi* za+9*cUmciCqF_fhC7q>3a1xvI}86yUvdql~x5vmrWNaEV<*f8nYw?I7ijI>Boh_uC1JnLnZB z#2mfNRCdKIs}7-!)1mDqv|A(t^)57AQb(}alaYEe9Cf#YA%OR)QoT*W0iXJI((2gP zRN^G1Mgb?;+q`T`C4Tc%1QjcNvK~VIifl&Fm}yOx0m1i|jiQO_xZ%WSvF!u%dmZnh zg0hOzNM)%RZT^hy&!2mwrTzB+ZgZZqJrzV%!vAe$P=yfmaSYc2mPHRupDowNPrNve z|7SK597Ck0i`4A<=$%3xo9|>S3B|K>0+2T2;efpxT?MrZdkZrYFt;3}%SHIT2y9Q& zWR>G}wf3kj7bKE*=D&Ebz7Hzb%GT5@mMqLrVW>LBI5BAno(&wkWG6o0LuCf{-T&T5 zAo||39luDIV%(QotNUX$ot5OI5%b|co%$W4QaesX(GcP^Z8|mVm5(dRl_4O%3+2Q14y5)oo>FAee?(9uWidwkzR zj8yb~aiPjGm^exZY=m#f+8RKtQK2|d{$6cT)3?cAO}t}LKl@oezTad(E16l6G{t;%369mCZ9r-La&k~a63eY zzgAZe(qr2`j0~Gjms>1Z_I2oXPXJ0rB)m{^EgHPl7+om^t74jZD@~NN=@&jBi%d zFgE&>5V{|`r!}joBzfGVJ-T< zb`-v1Qdht8pY009`u|y=@E@0G`e91v>;o<@^KYKftKZ4S|Bq@I^@Fc|Lw=-cNF1)7 zHSRp&y=45&w^dS1U6QoUBcRUV_3$G%_xjJ*ZycP}@S7ZCV0EIa~Ky za6n79@J(rE?CMHQPRWB`c$J7U#ZM@(y>qKM_5?0R$Hs=#X-gKFRPly9xthd~=Z5=y zuT_DLe|H^1W`&e%{{?uqqp-?cvIiM^LLxcHEx(Ppb8>RH7{qbxH$WSJ&5DX@+`PVb zu7Siw&O+Kf+s(p|7BNlkLY+&H^AfsdRmpx(pJEFtD0q+-QEB$(5Mp^tXk z$C01fu~N~wSTN_btFPhQj`<~{#r!6wrf!m@5mxF9^x=JjgJB|ypBd5zShj{?FEWh< z`pmqdPUaq17$q+S6fC3@FyKCDY z^?W{=vCFnzwj7#^GTj~!$)`y7<@fOF?40;IHtTRaFJM3FpVv0QQSPx3M3ETVCY?BG z$R$UfOPjr}2mCT0T#~KXso{k-^v*S%88qfB6a($ZR3X)2?i{dW|B$pp%>Ie=%&z3g z0}UeuE&6{DNNHBEvdS^M>LbN9=`W-P&Tmzf#y_{2;9zI+3eZvB&e{JxG6+L&>e7b! z7uMa((6VDzCw-c~@KfFEjNs1FQdkN`dj)$nESY=YzI9JeG4#*v;FTm!+1*g`>{m{7 z6?Z+GW}Y53+FX~cg@KjLOg__%yme3RE2#gB9T}4EXB&|_i25AJh+1wTa7JsG8DtYu zlkW6!ZVf~E>rWumdXl?f!;Ynsk7nmp^b<=TRF$7Q>+uYtwzO^NU6m^p0;ZNSk4s$H zZLyC5whz`C4~iR?G9gc3Wsdj;H?~==a^kE+v8iD#tu|QsP^>kge8=DDp3Q@KK4E-s z`lq^KriGWqt+=DVaKbgHf%`tu;JIwmA$hrf3q+}L@1fh^J07e+#|=Hz{?2*fhZXTZ zl*t`JQ%oj;&CQ0UzOmS0#3gdlS*hCAyvQ~CL^A47VFtAqyX}~GLTY{O%xANM0hp9b z^GKhdVdR>vW~CZmGg^tqyR@)z*wQaaV`5XPtn7XAi8YiiiLV4s4r`dFxXS6N_X#7} zL{sHB8U_qBIJGm)P1~e&d>q*QR9^Tb&|UVK?=M-a{L~9=z|H5RHNU+rbBs0&Ps6Fg z!y&w6HRR7&>X)Pflpr$iH~x8F^B$>A_`lLQ~QH+2Yq) z0ivq8+tSp4VpP;aqK9vcr?7B@*C~^%T`?IwdG48ZizB$vf>rg&uIwEqN$q{~UqOjV zgqYjkHHp;I z^ITINPN^oQerrCC@WHvsA{90=07LNcxYKZFy-`l9nh_ZIuyF3hVf=mVD_J2a3FW+{ zy}x{chc%0NpzORqUXe$G$nE4AD3PU)A_*z;0_=s>o0I;5I&aEsST=?zt-jX*84U4M_|WRBC<52{%o5z9`!n{yer}I%*Q~*f zKki(L;y^S+tp=0HAlKQoRry<>2UUyX(P=cH^~Z;p3+Ufgo{%5e-b)=8C2L|#2sZ?2 z3n~T|tPR$@jvM+LO@5M=t9D1jW13$lPStNKCAa4euOdCTwcm@N^xUR5yNZEwx5|vYSaAx0}vFj41Hud#1AL z5u@Mi*u&DoEm11aJwZnw+U9h_*pv8hH7Gv zCm*jHyPGEbv_iJFIwEWToEd)zC{s)yBRv5fVit0*lbsb^|Gj8MO=CQIsD zh`Z3$ygKM)%*sNs?3%Qx=6?2H({9^d(q1ISkeiJ6_R=LSjOUg)#<+fBG6MXyZ2K-e z^Jcuo2!Qj&|%V08?m3I287=aHF57=`JUxDnI?^37weVrj;`4VvAvx6 zsk!(ZSdw3gDSEIiP}8dR=_c>(G0i~0re_-I3!F|{S5?!u*JLzIto&rG~xoo79BM7@_En+@M{B-g)yj#(ujM6ADq)Me-RZ2Y`3vUY3X zR`Az@;>T$-@A%!s26$o{*#>RNMs8C0+uRJ2EKEQ6lBAYXRZxj%U)evrA2%kS05@ct zN$XbxB&3~$4GwY9+s|*H-%RXLeXvMxg*uykZ3TZgPR$AF{N3*#kbR$MSN>GTyW)=i zO!J!W%FM?~URH@7z}Zbe8cvS((e6_{WDdTe-4Q6Q_V78yW+)J|g;N1|`8L_Jl9Uon z4ult4dNgvG`fe(*c52Fq7wYyI>NuHIj}ZLM&Z#%-p=9nAMww%wWye%K{du3rEPd8I zt~)?(yW2~3(+#})iJC^lV-ptU6lfE9p9!7nS%4j%{PKhUK8wEfzMPD;y5>#!8De9XDZSp2fPe=0H4N(g#riO%ED5GuNDNz}Jw1rY7Q=V= zU#akIx42Y8!3H3x7a03<-DbWkP*?0uasH06!lr?rf3NH}o`C=tzYA6dTSYNGsN!|b zo|uv;qM??0)<{V-O+q}R)On(p8>3dtn3O~t0MgXb=9+JK!p({-eW3vQ@P>guEuZkKE% zC3L?B%TsEYT_%#C-XSpVciC4AM+hIvN(%CZ%9*a|o`BXuD%Wm8)8ZF@y}z z+_E4e$M3a-?b<;!*mLuT$FJ*moGdhj*a4`=Q{T#E2$uu+?s(xy2JRBWosxj5?s` z2r?!d<#KZXKynkjV402a7JurAnl-5nn)^;n8>HRjO^b>s0jj;oe^wpj+x07u+<30+ zDO;MtW6hMatwv+7o9yI@xM0y+aZpTO$8AXtVZ3kVPtOK6g_8r& z9jMNU1^@btwm=S3wij_UwwEX`Y!s!bj8VNTEVeX^@|mhUhQ3v0D}hKMI0hA1;h`b5 z#5OH2LJ6VX7Gh9@E5hj9#1v_%4{&^E$zHVCpqcx7XC;b-TO!B%_LAsy71Os)V`e2m zz1ZY|JKW1!YzTqvoICBZ)-mxFdAkDCMM*jd9|?asFWixOnH|3oVu0H=AWhJqx$k=X zm*Ul@TyKZ{!+J3UN!#NLvhXHFuTNb83YTEH-m-L3>36wso-~?S`m{8=h+{y+#Umwy zc8TnjbanDmto2f$s}mU9h;0hq7RfJYirnelw{^m3hr7A?$cL!>=2!eGzuz)ab52=% z?ZWaUMt3jD_ItZv@7k=ZUO0+^xVGL6k80Tv{H07N%g;^=E_2(=z(`&X#(DpY68e@v z_kF=o>N@O~=mHFUu;A!Nr+X^P5C?(ve8Fc79_39lw?qWG z4k274`H`hlQzx+sM%oi66DGZ<}t`zDXkgJibX zR20GfT!%jUGPbgZSVhe>6DkJ;y{)Q#w!|$-lP&3q{ z#OyMmXBbyq8EyE4%|`F83)dE%E9a%EUJT3J9=rZe{C6s|e}vg~B))=-|6|uMG5UL? z*b7QU z8=GCM`VG)#t03*mzbQ}btObA&W%Qd-&beOmMd94IKArhfv;*LYvx$#PQQ4}w?U(dE zE&UOvIwQJdq8vMj@|Xj&tocvUPdgWuZu_4Zq}C#a@SoN&z7sJ3*q6RUX(lHHX%-l1HIIVo$rl%Gano2Xqf!`V{8!zrWRx8_xs^Q{oQ6l6`>d@ zDR(BE`r8hklZe-SA4TEM5dUtOlZSVk8wVwVMgIj19nlAGQsVx&Z;0{WaKg9Vzy5ns zUP2!-Z`fzRZ#XfFxzi9J@Uc>`$g<}9OH1_!Kg5mgIIldUnHkNd2ldBx+y#b3k@ez- zd^+R+;8>V6gQn)XA9JX)w>QJ$(S`4=_|ikLp7_}J24xB5le=>h8?-hw)Sj@4x&11J zRkv5SjcdC}@o4Q3O?#9gOXdr%piF}A`{@6zz3+^QYRSTFE+8T~rzQ!A3XP;DBXY@- zb4C=9(1eC=GDwmjl94D`a+K8Mj7`otNzOSV2)@30XDw&edlTN8nKgIT{OKQXPMxYc zwQKLQ>)YSAuWDq|H)eNL9I&nlwMJ?ue7;AV%u>r0TdUsqAu=q!6+iKB?4=V`VTG`n z{DS)rSqp=2D@+B%nuFV#1$Z!4yuGTLaFknTAGoD2$$NJ1f_YK85_+!LWYNkX$#AZe z=L8nGSmHZ=KC`l$O^ZD^yR&#QFY-KI=xkh5%d|z!NmVnO;_k_9_zC}&9TWix&y5bU z_CRA|%*akTlp}?o6lTHJtUJn@*Lf?m8swOufc~s;^*544!M-DWk%i^yPW&Bp_rX=g zj0oMV05*S#_q@$DktoGpR|}+JmUqNZWRx^%zCeDDqGQ+$7^bhyXd>Zi2ZE$tP_O%B z6+1(jNs?n}m!=#8-z+yw=}M@b4_yL3YW8k;qpkM28;lFrCxzG{u0V<-{>7)@iH9z! z;^&6_h{Rggq;u@_?@Ud@66IaC*ifX>r(0X$q1I$^_XgD`;xq-nA}U&##GPcnN>wBE z7Vx36O!=pl%WRmFvKAcd?o8gJagF@Q5fU$wwj=-pF&dMAD75C11E*SCUzsO66NF0P zGYC%I&}tkDUwR?5eD<-9g_KAa*(&#ai!{!ar808DdPHdj-wbfaDN)sjfY53soB>J6 zXX0}bsFe+F%&(~ebXyrc6CD1;Z00KwAS|DVA4gJN>bI0HP}Xf@TkZDz#Hnwiozj#T zW}ggf5b8k{JMe^Fa@ZF5+c`UHju}4Q@y(aru$)2>Eqa(mXke!-$)ojDp;b4}cy^z+ z18MZ1*%uYR87-@yT`md0z8A&U+46J}I3f6fT@b^UXV4|-*4c-ULQb_|4LQTFLZyta zxv7BbN1eoYj9JYU$t_eg7i4U4R5KQkU5!gC^RPv#M8UM|Sgnnbyi7~Wu~cWJtQS)* zFWvNuGAf3LRLc^D8m$RO<@jyQCB+Hc#qCiN#`ZNc4>b(<9TAfkitn<6-Tf2kG$MQ0 zmV;GZ3_=fDrSWg?+;j?I@1JdO6e1dR6-_Eu3w>oO6Pxg>z*&U@P8k%tjx&)SReB47 z$zYWzUHp277shkzCP_8D7BuF}>t>m?I>nkmO=W1BDXAiH`{q_g(YwbkGoh-Dc+|AX z&Gt@D9$U; z(f&w10lK4YFiY7nORa##uBO&SW@h9bJS?7-eWEKqx`5BEJA!ox7yV>D zerT8x5S*A_?3xjlSuNS2*3;*d+V1M+=q=nuiH_A^Ov5r2 z_QW<$fV`rL+4dGxxceAZb%;?#W4INYGRmQGpezq!k5T5bjQALcP%?7Bwdow@#-`e5 zd~b*}5R<&nS9J)1rJ1P%k)pet)e%$J77Y9hXJKtkxrTSXtcv}jr8c>}aW^+Ras;|< zL)5ubb@3rNju5Slhsn)!cf@S83}@ugs9E%|XJ@w}i8QRAXZ-~}R}S4bz|bwcXH@z# z?R;0FK;Mjfw+^*lUeTg(1!eajC*Eq`abL6!HsJelSHtNSXXtt$Qzq8gH?D`M@g zCvWC|7$Gm-JbEj=Nwri*MDV$1olowL=A#gKTKW&N7Y_QlRTv?tqeD@0Z5;L4`#Tk* z&N`d=U|t*l;_R3K>rluOe4)fS=7lrojyK{}l7GllG=}6~;P+hD+o!&8#Q194QW}7X z!U+aTWG2cNoqKxyqskay5;QoeuJ&z&Dy zz4;HqjlKc=o49>`WTd48zDx5yWEiwB>dv1s51N^s+}g@VDa2`4sRZ>f>6Xx5U?jOL zT3A&hQUmj{bNJ=<9X}^NK)0IihLNB?tj_s3dA%oq0V!#=wcD%tiN`jv!R0!ktHlJN z(?%WOmOhxWJ;pC$EE&$2>h<#M6Y}rkST(rwDp%U4Ox!6=Y|(Y7LNR=ClpGxV@KeJc zLJ}ZhQ!h_~r-#(zlQk$&6rUEN4Xo;hg@pE>xo;_P+0t8947SOz;1OiPESRc0yI6^8 z3SESBS~9nz%XSeoc;|+SEdHh1Dq3UO<62`w9lSQN4lRXGbqpiMeGon&X!B!M84KO| zaMG7kPSrDp^3vU`eIyz8EE0Yc9;w$oL9Y?l`<G8o z>2R_VW>yGnmOx=8E@^+EBJ#i=Q*EbIZ4$4D)U$R{_>jsBODczNTIT`fcrscoO-fFM?ALeq8wbCf#Dqmn4{1~SMdE_* zO80JN5>@(NO2=Ul z^5e>!OP*-U@AhY7Iebx5y3pHl=4$DM;plKLEZ`d!WZ=?(ZjM>R$TgI0JWeaXHeoby z7?#(pq`clW6GNO}bL8i``*fQOq5IE6_bgamugi5v^$j1y2(zENi96PGUsWW1*~Tce zPXAP7tD`qaQ;y~Qg(K>AJEsgGEQxY(PDzjzJ?}hiy*gVjQGWujOIcgQI=AG+G9AOh z9hbYwK4hKU_RF4j&Fn+tr8-ff(7voZ;w5PXVI>GQ$Q{QGFNm@2)oPqqWeYs(wX!OR zZ8M9Ea8y!{mZX_UWfaFvAcRmFTZe*(R&ih6JPzTj!GitYR7px zO7YCa{)g3`%PipjklFyqC&NbS5zbE7Ge#3v<5xf)StnS^-s#8cXIqTb&$by^&I-s# zdP@OVk3T4LR%u~V>rnIUN33U@OSQl&;?(uJuU;3CMH^7bv&BC*J+i`FxD{wk2L+on z6>mQtX*(E(j_iUR+_W>fmF45BGN}scjY=xFG$+LX?w_YRa|p;JwZ8*Z|quHj9~*h(=@d1OI{0$T;#%V1wW;p##3# zX_rpwMv~K&lqg7QFI!#|^rSF3rYHyxmm^v!8ys)jz#&v#ZvRpIigs_`u4>BCDi70{ z(BMnd5iLW20JX3!B#GL|7^a&<{Pb&sy{Ap(acQiCDhnP7WRJ1(i36p49lMZM(2n$R zSbtlw68Yz2^PI-uJDqIiS$Wy_^z^!AI3wt0>Dz%5;5HgUH_VbcsG(?YoFc5IbVTjW z!w%_-mcrM>@UF?pv*bG7B!TcwFu2LWp~XH{pm0f#oa%NinGT1kN0IH&ht`+I<{or! z`2s`lrEK=(RZ_c~6qC$Q=~$t^i3PdGT22+OMkbxk&~D$Y^4(Q`tj>JO1^d#A2bl(} z9aY|1ZI}&MKHZ-4Z=1b4E&MJ2BG@bdMA;_~D$$9( zQ=y*j;o00YuTqAkIcH)~Ex$?sR6^|)ur$FN-p=W^>o0e4FsL#i?^IbEl|gBl6M&{d z-)FrKW5S$7%M{EMunS9zaeD=*`XmqHjhUd@Y`6pQYnaYo}FcV@bNY5Wd!u`0TUbv=-ZF}>ZB zomlOGi-Su1#yTHUWdJ}>p=;^yKGVy+b#w6o9 zZK3w5a8q{hRY+;@R54y=%noOnEBKc`)hwWw7)}(hVyWqIz{euBwR;~h#-=1<8?*tr z8v5)l(9)8~Lx|;&GYiJxas6|`F(_EG-|8WgR_6*_iA)k}6V}4)a5ju0-O{cxN_|rt zac~-|S71sqS8QvlG5AR{KrTMSf8Qyr8LgNZu;-UQJ8jK5W4X1dtF8{lSY53sCnx_E zXkb7oA@NZ@tlu6v+1lcKyWNHqF6K7-Hus+Os3!BLzU<*Xw6u-3_n8rnfh5tRVn9Z0Muw#&rY!ek>FVAupC>xc7i@PGX*q8x&2g>a6Mo2f8~7r) zxS@1%Ci~W#CnR``O`oXU_3?LX{qF1{)rSnW?&ee^Cf>1{cK0|nilEkK&q}7sT;Y|S zO+wK)x$FQJkSKbM3fw3q0FK`h9Z5lrJ!fomva%G&5NsxQl6{m3m&y@opsrl>X$s;u zR$AZ)j+&5C{NzkMKGDbGXiBvG!K07egk}mK!W9|CFYK!_KHFFKwpg2H7h$gAMq8FK zruhv0nac1(YTSGLBC%n*fapARZLo;HB*YHjG1sUJ>sp-q2$z zENk1_Ebe~ZAp2-#QRJd3R+^%1K%%Y=4W3A%!}wzQj3of|vO5HD9@Nvy0iB(-4LQKd zHA6Ta#~P0r^yz@NlG!2RyD9s4b`lq zX_Ua4eaw6LI6Y(w87da%wN*9vT{uQb(%`e*!^d{#n^f0>CUf@+eIpv@WV^eLupS&c z1PJ#R(npOPm?2N0VJmhOzeLAqoT*26(QrF$pcsyJD_xvZBFSy}^9{@G8}ug|bQ(xZwTW203LrkPVpNL&wG*VPzR-W!9&DcRwG&8QBi0%A6`i z*6A!{KBA@!5u6;&W5@&4r+UN~D$rwp-R4lI_nsv`JNseqdmGa7c7SQPPciJtrmu{% zLyrwFZoa2H!<$NCUhq)>;2dp`WYoLXNVlX-6j*xUQFT!^@7X9Pj;!ja&1=m&mH;C% z@{@W|xA9L3tXlD*42PYq4vYX~b71AUt3^R9=F7S|*@7Qcv? z#V)T`Z9Y>y~i#Rx7vq0?rX=$NH88~>flB%AEq!d>1Ef%OUy`UyJQ9cX6tKcy{ zc}+zHO)|de2j)S5E_!r>HJ=fTu)Woqp4W+`JskK7Wi<+wRlPP}4co&DX(&I_e~M6S#dKJO@y0MRrj8* zIYN3(Fm{Wt1_gY6GN>o<)`!L>P_W~e`MgBKsm_y3a%2cqwcf{fBuA zUi%5Uu!8J?-R!bXD}FBSXa#G=exbsY;lA%LF%6tVUxCPX3Ioxv7NOq&o0!8*udDki zf#Ncn=kV|_s%vTzT6GM`_>+{bQMc25WX~3VkJo2JVlan$+Bz?P{5bexmcDgCPaMf9 z<2IxtfZu0br7W+jj5jzSmMOc{?J_&(1`lP&8y>vXhF)KsBvS8UfAe7e)qHf$J*w4I zJ8B0Jb5TuYtOFYxvc-4M;QV_}8AB79T+tEAPiU?iM6@A>+Pbm=Zug8V3|=P5h?G}= z$4qFM@FoR{lALHnv^MWERjP0Y$Ur=KEGL;@h}kMi*5_9b-)h#&$Wf+c5)Bh>y*$zn zlHJhZnz|-;SVMM!mtTD@5IBmRyAmu&0E<~6tgOOUH;YEbo)AcIx$7veQ7Z3gmA)f; zbfr);HlXp)P)eaI!z6D~$=68I=1)eqtq3wh&Oc)_c(`G3j2kK-0E5@$w9_IE(aiV~ zZ)r59e{7!)toY6B*1wxw{p_%V0(kQqz^Ex;rCt<8lkn{Ds0WMc8B0!VW1~}T@Kd=} zW*LG5x(>DXg#fjAhW~7HfFYqitt`?BHGY*b~+|D}My4x3?v2Vem z!!#b{ZK8&n@Y2e!Q-PLkl_)grV*w`Qi>v`2q^fu%6MxFje<8JPy&id(dkm) zIFfbqbwD$7@gd-wEa5i`@TlIxv35al8Ju-2{whny<% zX&S>G50JCalcPD%*oey4>z=zgZ!dh^PnJT9f~n1)(8?Z?=&jYHRo4tap~Aa4W;3JE z21NFSEm%cD;KWHCf&Bs!-^al$@C%>tqWRd=ZcL1IenHi+vRbcYtgPNTE_^m*r}U^s z)WNBV;^0_sIYqST(fsjs5}1I2BI91gW@zTe?d_zUsx>At?1pE~wB@!gbb39GHWlGj&P>%48@?^9vW0g!9yLKoO|4j(e9 zd$YH!Sz)-@Wz$!Y>VBk~_7Q0qDi)|EO)+R(Hodu=Yf3(Se@camM;HA`go}WQ*VyCL z%1c1T72@q+TV;?S-cUh@5?88QNB6+|Rh@G1;(ooTXU@Fc^kt)*~zgD8A#$&mnon^uo|-q=1^Z_c2d$Wb9Lvsga)*VXa3KC zmGD!WtEL1(BIFdcYYt%`-hk5U^Akgb*!S?5rP`-=WVAwvRGwQ#nB+jH_S9?w`lm}Z zW;E+H0*^6T6B19&g(^)1`@d+ft~Na`^dkCH1m8x~D_?tLM+X((YfL;AbrfwaLIei~ zNO!imVrefp3HgNVH-36$SQ3~2nWP#gsWrte$b>d4-5t zT|*EU5lm&6OVNR@w_H%X;GFlV?aaa?R-lOQOojtDlynE}LXe7b9?P+3#k|N-RIKBm zH!I#{qAF{C^TyKvSg#5Xjx7r^#4}X4WzWtj%=TrthaXa1RRQP6s$akPFh)S~jDt^} zGN9}}BYxr_dRbef=ce{Vz!+pP<_a+HZgdyXWxb3#3p1yq-c8q*_qZ;cWIG zcQvRt@+loNwRBq<+Bd*--B?Lc#qjv-23tP*JQ&+O-L|+B7Jw79FVIOx#b(@)V8$V^ zEK1KUKNhP!Dk;^M{tqE`|M(aGhiN7MH66wOiZ6|S#sFP^7OXUS{}V=?5Cu5@9gQya zyNV?tYTA^%R9RbJJq?CkzIjY?gp#=Y2SD_gKhWr!zpGe2@f(#n2uA_j=`zG#d&K4N1pN;*CC-`5`{Qqq1k7d^Xv$21H5&Vlc_kYC3$m7BaURE6>Bi*zua@mQb z_jh5ll&E8t`&=k-QbZ%d>M><{SYh)ra4d#^YXo^XmgX(rxsPo7Bv)ClO$e`l%hJyW zd`vC(jMQ%yr)>5rjNH)>+}P0?FwK^RP!D!i|0GhzC&~e0(vqVsOuB)rdztce3OF6= zT{hk=SFoaF3`|H4h4hS>@6#OkhQz2L@`b z=A>igFJ9Q~^aNS$4F+GzsHkx*4)-xNH)DA+0Hbe=PS4#3@Mem~aPtzPS`1pUV&KD+ zSr!MQLgDtEI`|9Sx>pozS!;{R^O%adt98eCcmrF$yd+gY7Y%WD)Qcyq!en2>zoN={ zh5lCAU2iDlBC0m;S~3;;%cE|KyV<@14>C+ukmx!{emsi#_@GIr1)ktDQomL^2M1d(mA;+dpXIdc(#*-BPlLlQ7%r`Rcfdy zOu{Q8+PS|Nt=}s3`)sfv+R1m}9CRK1TSH4Wvo^ZQE{=6?3tM~GHdcy#b+-H!9AxNl zLz#IA*L?9gVY6C}S7AG`Z$&Eia^WlbisSc9LNBxZKxl0?W$Pd9Mg#=_5wy~@OJb&N z^)fq+j+$pNzz|c!MOs*_K53QHfPSxu&f3$?9=gHd9kUK7fnpiH)@6BkwUzJoxuN6u zeOo-ZeIti{r%9#-jC)rA;L9n8?%^mtvWOa^f^hq*9?3nfkNiPW5wjT-+&9{6@)gIt zTSFz(j?12c12uMouD?At9yOq!C&wrfD+zUPSD;Jyl$#_Sbf4(z9;%CGn}q+q%P)9B zCw#t_fc`J&{{R2J_-6zJMvnYffqQ;R_aAal#A+Gn-Ob5}{QTxNL!2;Xwl>icHd-SV ztLJNh^T7G`uUzUjzG-S>6f$6u)!Nq%$b&Ot5$-{P>X@eS`91nth}}8C99DmFtA|v( zwz>A9^?1IQOx38$u!P;C2uL!jqm#Mbz*;3=BVfrYC>irCV+hE;_@>&8Rqe4% zb({rW%yc4_^d6S-E2qoPs8e$2^@zS#^{b7?ijG&0muQMAWYod=LM11*`VUrn7|l7m zJGj2E_eYJ}ea3Faur0TnMRTZDv#)^m{Yvl7doRABf5(BcdDkv2)jtQh?J z_y}a{w|^Vr_g4Id9|`@|kfP1a;#Jzo+y0+=D|+`oaQq?Jw)C|K0BC zANVH!kLlXq=TgZ?2TIIa_v1Ch+coC*`Rg3r+4(H#6;*q4GE2x5j4{lze;x4!2r`63 zhpk@rfSqx*M>KUU^Y@^QNo|@+TW!%CdiwX*glYS+Xt{G*3A^-dmhQZlCEpS{Z>Zpm zv%~c%hNS3;p>a?R3q5yTV8ipw-uSYfPCjiXY0cfSX|OMss&d0$XB~Pzhb7hKoX3%p zpsX*qp-nA_&YH6Z1K?A~FYMs@iuIBqepK(T+zj|xCcC7i(BC{zR8Oo;bG#GvwWfG% ziCV_|(o1t(`G;pkMaLBUxic48@5U#nJ`{|B4f!1(!@e4O<)}_pU53eS?Ck6#^c`)feZK^T#cLp0q2IQ@}BitZNF~&U8n`i>0oGb3a({8k^QOwQ&t^ixOpvg zc$G?WC<^|JDy<)XRJ&U*u55FH{8qOlX5|2vi8sXtW)!?gki*xBGIpwrxJQTH42uiY3w5>KQHKiCoe zJ_PIEi*)@jy-uX6ph@iV5$kt2@FQc}eODub?-q$l1&aTkCnR0jsVUi`!a5SWUfm&- z7RPXpaH#6PT`}HapPQX&>ijgI;ZV63y4ou}V9`(QfX0kB&g{e%M`)0j`e~Fm#a~`w zjgMS|3ZtBOeu*g4#Mpi@X67!QXY7!a*#}<4q^n9?0=|KP!SZO79P8-;4)aj58jnML2{2b4i#sTez;cbb3P{1|8l)jC@p(QJhCn zf+bF7{7neRpB8vS6rhWN!0nLUvfsqmU$D9$EN$#5cSbNf+dD=X3q_YhKDjD_7Rs$WjR! z`IPgdTRx*vrMsF@+QW%~Bac(~1&&_77wp}$w>w$)47)%=ozSAY-cFTwlSEULo4|EDSzX=1em*z%M{*q_4pe6mTfM{=HwU_a40*xUct?_I&@L zAL(dG*4n2{(ocI`iNIwoPTtg3dFN)BhttfcA{khud{lOF@lDpgdlyQN7>_$agnQSVFx6`gu8~|!xx}nvD@#XsjI=ncuKJu3of2?5Cm!gvN{ccr4 z<)6BtAxZMnc*uzU!)|mTlE#;yBv@(4VE78tTMPuq)Ia($34f?z{DEfte_j3Wu$=$B z$N%>CNLs*VxiP2o&~(s>g|MSkC`FvXX2jU7@ZHZlI>k;I_x*Y15(twq2P_FnjivT< zOuRid@vXwSz{4-^I7N_ObZG`4492)-bJCpnurj=y@9s(IyT_=^3A#^X7ln|}1`;)t zrkDYHU132G2^}5aPSmaD!X8IB|83mS-Q+_2kvC~k6y}RASTv_dLj9i{j82?>C2iiv z#4b8|o(d_H%!?eeKo_2gIIEpQR@t&VJd2E!`}pptj>GT-xOt(nkAYCehf4g_PYz3J z>?7Yw_bd~a z`t1B6?udC6+cT9%Db#Rsz_2!L`sg>8`lH=DL4OvlWH6-uGUmkg;c*qEYZs)v>~nl{Ci|3J{-5K6aeT(A+NH~T)Oio7?)!hO6-+{k zct3fBJIn_aPA;zoFkz2SP>dA#S}}? zen!mAJ>e}aBN008hW+z2I95ie%Ft|OqF9_wK?1Cg-2L?U4w*5-o$6JmlhGmcoE|HP zdr}zDg6+7;@xyKmy*~||B3LMX`$2-pT~(S(>=$s`?a=9k+t$Oy7gzYjmc$Q zz^IyiYt;@)>XdaLfcwdHr+l)9)0Wc!uY(X1lg>FOdJo33YS(5GylXy3gX-tW$QbJR z#OGp#qEgA0og=Le?7VcvP<%BP&1f64Cww(%`y<}`5iUtl=f_*>bf6-y=`S=Sa{H(i zFS8|kTlA+D^%rk`__N)Ss&;K~z?3R9H;hP?^UaQN=<5h>18KQoD3)(a`QdxpUwvVa z!W_gzR~Jg8XDDKQ-+L{Pcs4dd>{7+?&wBc2t0+fa7t2GO{#UFG>yDqm6uWXslD^_ znAFEdTC^4A*%Qt4#=32>$1+X#2W^%<+SW_hRE`Q!cbO4$bFn8?GryB;OBw0WlaNL+ z$@QpMLD%DSJ#ED zE?QB$?rHfl=i3whIvru?eJkTQ2agFfNny^KP3V+yze9Fv_0C(}Htit0Ga>n89=gta zY6I$m$3Sea8@g;!P4EL^HC z?DefyFouV<%B;e_77nj%JzlHnvp>M=o`2MehCvkJ9%26t;HY)|Kovbxxn`HQ0mwDw`Pb%XY2%rg4aaynp&Hd{hYu)TubP=U>^)clOVc1aLH;m_BCPE zT$?HBM#-yn?8DdC0{}`}5q|}U7j>t|L(I~V)&MrWeJ?S?`PVh1Znl>1L}Va@n|Fa8 zxQvt0w6?6NZ1&O>7UrmX;7#9#k|RI!0?E65wB>ti)BAC@=p@E00gtD3iuXpBhGAG^ zCL6D$FdZ^ysHkUU42jn*beNow#@?FXB}z%?I4dk>dfo)pG@ncT1cv(`RAtwP1YDJm zoN9gpNC~)q1GMv%d;{=?Zy*k(J3pA(a}|bqqd@b`7PNrdf_1=>nnNkgVIjR*D^)2n z{>xsDHv_M#1VT9gi#6z?+)CWF@IPpI_dokPS-jsq!Na<|fAZlyQ;OTG5#l&mFg?lx zrC4A4Y8~*2Mv`(n`P9Q)tIVphu&iP-(xYF|dlr!r-h#*sG4`;xr6|5p(lAQ_=?Sua z{)9fDb#io7g;K9AUwm@E`?7`q8*jQy6eTxfQB0G|NrXvLU@BsttShiL3hF+=bSn9Lni z+9(v9ke(hZuF1eq>eFXQEsn>*e2%tM$1C1!u({>8&lfN>)|k<_il@MXprEXA4T_^! z#$#WN^lR)xI@Fy=Vjh3-ycc`9HnmhIt_o_V+Q`b`R(sldSp1yPmMU_3YHAF@-RK?k zSiiMm$5Rsl@x(N-RjAge%`ZeA(kzVKA1OSO?f0e@B2*HJ_OnZ`t)F=8JFhAOk}5NT z+pG0quN^Z9;g$&;GY=b~pKaNv>=%u+kn#Td&?SM?IEos%U>YUYQ6J@{sX-5}8I)j2 z(KJ>Bzi-s`U9QK)22KX2`#Gai*C?jgNtL!2aSmlG7X0nP9K}siE(`Tl?{i2a4>`a_6hODf#6l1hSqw z6ap0-5-o?@N1)hN#~Njk6jIQfcZY@n($eP=q+}oupB#BPqGi@P0kN|A41BFF>!Pc( zQw<2j(sB+uK5Y;5sCnNNWYrUI=qpZz0YB_cB~khOtW8^XJvVs46oP&?CzIWsrqBxJ zZm#a){+$eumqJvn8&@ir`=Ih{Z$tqZ@vzn z;Ts_8dRg(}MMK)+zJ&>a-&=3X^M%MNw;7F*Hcj;OykNofSN*1;_?BN=o4huTE(*WsiVjA;TZJ~fBW#PXx;?UvrlgPgIq_Q-e;^rz-QLGILp$Bfhx z;$7Rxaf7N@y|yQsO`Do*2@(%-vkN|$Sn130hDR}`iGJPHqwJf-0n9tNt*9x{ctibI zb1NFHKESL`L2%5YM!qrNnSGR?=?>Pf9@@hw-tdZ}gdW>iV@paT*6J)Ot?~t|o^NaL z{F6hwF8;G6Y-fWNct5ECA_%(6g!g{rd2G}=eVRUVY69sD7Dbte z71CfaB)R38TJ1Dw!s4~F&_lOu{)1x^{E;tosH_@+9*CF zf3SqXtG(qt2z*b1{N9yo1>?+ZC1yu0&}!Nf1WONfU(Ak>Dq`taT2NVbv08H|4OryY z%&`RPVcYB$W#oqyC^Gl1b{Y)#IW)9CU2u>HzzT40EY4BIbtFWI30OzU4tJEcG4?TG z5c;iE?B+G-Ei}w-Y~9PwFMJaNAFSw9Ad)_NMZULo{5IJeUz$&sFJ0BD2r=I1y9Ba{ zLI~V76P{=0sz;h&dQVVl1~E`G@mp23vBt>7>v95t22PfpyG zVK}$dmJJd(ws)Mqwl4CWw-2Mf%^Le5_31??ED;cz-VAX@>3mcfj#H4xF6x6FF|@mB zLMlQy8&lr((aN>GHHk@-g(S++7O}o6Xpp2Nugx=q80Y6iQRk+=8IEYZJG$U7E}Y(i z^_U7rln6@{c?v&4y48P_g0 zQIL(2=f34I_XN5x6#vfdI36fJI2K`5%`hZVGrB7o+HdHsL=#=pOeOq|9`SMrF(M6$ hEE8fPF~rf~M8DnnrEv6rPX3=AFZ|!y6aO~#e*lZ`ltlml literal 0 HcmV?d00001 diff --git a/docs/assets/remix-cli-tutorial/sample-projects.zip b/docs/assets/remix-cli-tutorial/sample-projects.zip new file mode 100644 index 0000000000000000000000000000000000000000..c4642fa674aa724e2ab7adb67a9165bd9a7bf9e9 GIT binary patch literal 191524 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%0Aj4i1)UrO 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�th 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 z%0A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