Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
f203baf
chore: rename package to flutter_border_beam and move to SimplifyJobs
rehmatsg Sep 1, 2026
20a098d
refactor(animation): ease the fade envelope with an in-package spring…
rehmatsg Sep 1, 2026
9c9b24c
ci: pin the SDK, gate the minimum Flutter, and publish releases over …
rehmatsg Sep 1, 2026
69a476b
fix(engine): value-equal palettes, continuous retiming, runtime reduc…
rehmatsg Sep 1, 2026
beb390f
test: pin the saveLayer budget, cover lifecycle and boundaries, widen…
rehmatsg Sep 1, 2026
fd470f9
docs(claude): describe how a release is cut
rehmatsg Sep 1, 2026
ac3c5e9
fix(painting): paint sub-2px boxes and keep the reduced-motion frame …
rehmatsg Sep 1, 2026
2491cd0
feat(api): describe a beam with BeamStyle, BeamShape, BeamTiming, Bea…
rehmatsg Sep 1, 2026
a17c03b
test: cover the value-object API end to end
rehmatsg Sep 1, 2026
f5c44a3
feat(example): expose the whole API in the playground with a shareabl…
rehmatsg Sep 1, 2026
15a0c5f
feat(api): declare the Phase 3 options on the value objects
rehmatsg Sep 1, 2026
0fbbeb9
feat(colors): seed, scheme, lerp, and seven new palettes with value-m…
rehmatsg Sep 1, 2026
8f9afcb
feat(motion): direction, multi-beam, repeat, driven progress, follow,…
rehmatsg Sep 1, 2026
1e7ae12
feat(painting): tail, glow spread, comet, sparkle, segments, edge, ri…
rehmatsg Sep 1, 2026
0caac2f
feat(widgets): BeamDecoration, BeamFocusRing, BeamHover, BeamPress
rehmatsg Sep 1, 2026
7b50a12
chore(community): contributor docs, issue and PR templates, and a Pag…
rehmatsg Sep 1, 2026
c312449
test(constants): prove every transcribed table against the upstream spec
rehmatsg Sep 1, 2026
afa9fc3
feat(engine): stock pulse-outside, inner size and render scale, offsc…
rehmatsg Sep 2, 2026
0f6ce81
docs: rewrite the README, add the doc guides, and complete the changelog
rehmatsg Sep 2, 2026
d79c74f
feat(example): every option in the playground, with palette, surface,…
rehmatsg Sep 2, 2026
c4a98a9
feat(shape): BeamSegment anchors and a measured perimeter for partial…
rehmatsg Sep 2, 2026
36042c5
feat(painting): paint segments in every variant and bend the line aro…
rehmatsg Sep 2, 2026
0e0b220
docs(segment): document partial contours and expose them in the playg…
rehmatsg Sep 2, 2026
c71ce29
chore: keep goldens out of the pub archive and the offscreen test on …
rehmatsg Sep 2, 2026
8918f73
test: drop the rendering import the offscreen test no longer needs
rehmatsg Sep 2, 2026
0091b02
test: hold on Flutter 3.35 as well as 3.44
rehmatsg Sep 2, 2026
ac6a536
fix(models): enforce timing and palette invariants
rehmatsg Sep 2, 2026
bb3710d
fix(playback): preserve scheduling and synchronized motion
rehmatsg Sep 2, 2026
977bc59
fix(painting): preserve segmented and faded layers
rehmatsg Sep 2, 2026
7feb5cb
fix(example): align playground state and playback controls
rehmatsg Sep 2, 2026
f4d7958
chore: harden release checks and contributor guidance
rehmatsg Sep 2, 2026
26a5bd0
test(goldens): update reviewed rendering baselines
rehmatsg Sep 2, 2026
7df65f4
fix: address second-round review on colors, sync, and retiming
rehmatsg Sep 2, 2026
d28c318
fix: keep the travel hand-back across retimes and resolver rebuilds
rehmatsg Sep 2, 2026
b61b83f
docs: restructure the README around a centered hero and layered sections
rehmatsg Sep 2, 2026
9479f13
fix: hold the line breathe and spike phases across a retime
rehmatsg Sep 2, 2026
e8c3da4
ci: move actions/checkout to v5 for the Node 24 runtime
rehmatsg Sep 2, 2026
84935d4
fix: drop timeline corrections when the clock restarts
rehmatsg Sep 2, 2026
3a66af8
fix: bind the reset listener to a replacement clock
rehmatsg Sep 2, 2026
292bb4e
test: make the variant-swap test prove the binding it claims
rehmatsg Sep 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Code owners are requested for review automatically on every PR.
# A GitHub team (e.g. @SimplifyJobs/mobile) can replace the individual owner
# once one exists — teams survive people changing roles.

* @rehmatsg

/.github/ @rehmatsg
110 changes: 110 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: Bug report
description: Something renders, animates, or behaves incorrectly.
title: "[bug]: "
labels: [bug]
body:
- type: markdown
attributes:
value: |
Thanks for the report. If you can reproduce it in the
[live playground](https://simplifyjobs.github.io/flutter_border_beam/),
paste the share link — it carries the exact configuration and saves
everyone a round trip.

Security issues do **not** belong here — see
[SECURITY.md](https://github.com/SimplifyJobs/flutter_border_beam/blob/main/SECURITY.md).

- type: textarea
id: description
attributes:
label: What happened
description: A short description of the bug.
validations:
required: true

- type: textarea
id: repro
attributes:
label: Minimal reproduction
description: >-
The smallest widget tree that shows the problem — ideally one that
drops straight into a fresh `flutter create` app. A playground share
link works too.
render: dart
placeholder: |
BorderBeam.rotate(
colors: BeamColors.ocean,
child: const SizedBox(width: 240, height: 120),
)
validations:
required: true

- type: textarea
id: expected
attributes:
label: Expected behavior
validations:
required: true

- type: textarea
id: actual
attributes:
label: Actual behavior
validations:
required: true

- type: input
id: variant
attributes:
label: Variant(s) and palette
description: Which `BeamVariant` and which `BeamColors` (or custom colors).
placeholder: "rotate + line; BeamColors.colorful"
validations:
required: true

- type: textarea
id: flutter-version
attributes:
label: "`flutter --version` output"
description: Paste the whole thing — the Dart version and channel matter.
render: shell
validations:
required: true

- type: input
id: package-version
attributes:
label: flutter_border_beam version
placeholder: "0.1.0"
validations:
required: true

- type: input
id: platform
attributes:
label: Device / OS
description: >-
Include the web renderer (canvaskit or skwasm) and the browser if this
is on web; include the simulator/emulator vs. physical device
otherwise.
placeholder: "iPhone 16 simulator, iOS 26.0 / Chrome 141 on macOS, canvaskit"
validations:
required: true

- type: textarea
id: media
attributes:
label: Screenshot or video
description: >-
Strongly encouraged — this package is a visual one, and a five-second
screen recording usually says more than a paragraph. Drag files in.
validations:
required: false

- type: textarea
id: context
attributes:
label: Anything else
description: Logs, a stack trace, what you already tried.
validations:
required: false
11 changes: 11 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
blank_issues_enabled: false
contact_links:
- name: Question or idea
url: https://github.com/SimplifyJobs/flutter_border_beam/discussions
about: Ask how to do something, or float an idea before it becomes a proposal.
- name: Live playground
url: https://simplifyjobs.github.io/flutter_border_beam/
about: Try variants and palettes in the browser, then share the exact configuration.
- name: Security vulnerability
url: https://github.com/SimplifyJobs/flutter_border_beam/security/advisories/new
about: Report privately. Never in a public issue.
74 changes: 74 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
name: Feature request
description: Propose a new variant, option, palette, or API.
title: "[feat]: "
labels: [enhancement]
body:
- type: markdown
attributes:
value: |
This package is a port of the
[border-beam](https://github.com/Jakubantalik/border-beam) React
library. Features that exist upstream are the easiest sell — say so if
yours does, and link the source. Flutter-only additions are welcome
too; they just need to stay out of the parity tables.

- type: textarea
id: problem
attributes:
label: The problem
description: >-
What are you trying to build, and where does the package get in the
way? Describe the situation, not the solution.
validations:
required: true

- type: textarea
id: api
attributes:
label: Proposed API
description: >-
A sketch of the call site as you would want to write it. Rough is
fine — the shape is what matters.
render: dart
placeholder: |
BorderBeam.rotate(
style: const BeamStyle(tailLength: 0.4),
child: ...,
)
validations:
required: true

- type: textarea
id: alternatives
attributes:
label: Alternatives considered
description: >-
What can you do today instead, and why is it not enough? Include any
workaround you are currently shipping.
validations:
required: true

- type: dropdown
id: rendering-defaults
attributes:
label: Does this change rendering defaults?
description: >-
Would an existing `BorderBeam` with no new arguments look or animate
differently? That makes it a breaking visual change, which needs a
much stronger case and regenerated goldens.
options:
- "No — purely additive, defaults unchanged"
- "Yes — existing beams would render differently"
- "Not sure"
validations:
required: true

- type: textarea
id: context
attributes:
label: Anything else
description: >-
References, a link to the React implementation, screenshots or a
mockup of the effect.
validations:
required: false
56 changes: 56 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
## Summary

<!--
What changed and why, in a short paragraph. Link the issue it closes
(`Closes #12`). If this changes what a beam looks like, say so here — that is
the first thing a reviewer needs to know.
-->

## Changes

<!--
Bullets, each opening with a bold lead-in naming the area:

- **Painting** (`lib/src/painting/`) — …
- **Docs** — …
-->

-

## Testing

<!--
What you actually ran, and what it said. Do not claim a check you skipped —
"goldens not run (no macOS)" is a fine and useful answer.
-->

- [ ] `dart format .` — clean
- [ ] `flutter analyze --fatal-infos` — zero issues (package and `example/`)
- [ ] `flutter test` — green (`--exclude-tags golden` if you are not on macOS)

**Goldens** — none regenerated / regenerated:

<!--
If you regenerated any: list which scenes, and why the pixels legitimately
moved (a new blur radius, a corrected gradient stop, a Flutter pin bump).
Goldens are macOS-only and pinned to Flutter 3.44.2; regenerate only your own
new scenes, with `--plain-name`.
-->

**saveLayer budget** — unchanged / changed:

<!--
If `test/painting/save_layer_budget_test.dart`'s table changed: which variants,
the new counts, and what the added layer composites that no existing layer
could. Both the test and CLAUDE.md's table have to move together.
-->

## Checklist

- [ ] No values in `lib/src/constants/` were tweaked (they are verbatim
transcriptions of the React source); Flutter-only additions live in a
clearly headed file
- [ ] New public API has doc comments (`public_member_api_docs` is enforced)
- [ ] Docs and comments describe current behavior — no change-history prose
- [ ] `CHANGELOG.md` updated
- [ ] README updated if this changes what a user reaches for first
34 changes: 34 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Weekly dependency updates, grouped so each ecosystem lands as a single PR
# rather than one PR per bump.
version: 2

updates:
# GitHub Actions used by ci.yaml and release.yaml.
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
labels:
- dependencies
commit-message:
prefix: ci
groups:
github-actions:
patterns:
- "*"

# Dart/Flutter dependencies for the package and the example gallery.
- package-ecosystem: pub
directories:
- /
- /example
schedule:
interval: weekly
labels:
- dependencies
commit-message:
prefix: chore
groups:
pub:
patterns:
- "*"
41 changes: 41 additions & 0 deletions .github/labels.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# The repository's label set, kept in version control so it is reviewable.
#
# Nothing syncs this automatically yet — applying it means either creating the
# labels by hand or wiring a sync action (e.g. crazy-max/ghaction-github-labeler)
# that reads this file. Until then, treat it as the source of truth a human
# reconciles against.
#
# `dependencies` is the one label that is already load-bearing: dependabot.yml
# applies it to every update PR it opens.

- name: bug
color: d73a4a
description: Something renders, animates, or behaves incorrectly.

- name: enhancement
color: a2eeef
description: A new variant, option, palette, or API.

- name: documentation
color: 0075ca
description: README, doc comments, or the guides in this repo.

- name: rendering
color: 8a63d2
description: Painting, geometry, gradients, goldens — anything about the pixels.

- name: performance
color: fbca04
description: Frame cost, saveLayer budget, repaint churn, memory.

- name: good first issue
color: 7057ff
description: Self-contained and well-scoped — a good place to start.

- name: help wanted
color: 008672
description: Maintainers would welcome a contributor picking this up.

- name: dependencies
color: 0366d6
description: Dependency and GitHub Actions updates (applied by dependabot).
Loading
Loading