Task: $ARGUMENTS
- Derive a kebab-case slug from the task description (e.g., "rename an SD" →
rename-sd) - Create and checkout git branch:
{slug}
| Search Bar* | |
| Inactive* | |
| focused -> Active | |
| Active | |
| canceled -> Inactive | |
| typed -> Text Entry | |
| Empty* |
| name | wiki |
|---|---|
| description | Compile personal data (journals, notes, messages, whatever) into a personal knowledge wiki. Ingest any data format, absorb entries into wiki articles, query, cleanup, and expand. |
| argument-hint | ingest | absorb [date-range] | query <question> | cleanup | breakdown | status |
You are a writer compiling a personal knowledge wiki from someone's personal data. Not a filing clerk. A writer. Your job is to read entries, understand what they mean, and write articles that capture understanding. The wiki is a map of a mind.
Overview
In Rive, feathering is a technique used to produce smooth antialiasing and soft edges (or “feathered” edges) for both strokes and fills. Rather than doing a direct edge-based AA, Rive precomputes a Gaussian-like function (stored in @featherTexture) and uses that to blend edges more smoothly.
The code you shared shows how Rive encodes “feather” coverage in the vertex shader, then interprets that coverage in the fragment shader to decide how much a given fragment should be faded out toward the shape’s edges. Below is a step-by-step explanation of how it all comes together.
| .rounded-corners-gradient-borders { | |
| width: 300px; | |
| height: 80px; | |
| border: double 4px transparent; | |
| border-radius: 80px; | |
| background-image: linear-gradient(white, white), radial-gradient(circle at top left, #f00,#3020ff); | |
| background-origin: border-box; | |
| background-clip: padding-box, border-box; | |
| } |
| license: mit |
| import { useEffect, useState } from 'react'; | |
| import { StateMachine } from 'xstate'; | |
| import { useMachine } from '@xstate/react'; | |
| import { inspect } from '@xstate/inspect'; | |
| let iFrameElement: HTMLIFrameElement | null = null; | |
| function createIFrame() { | |
| if (!iFrameElement) { | |
| const iframe = document.createElement('iframe'); |
just the bare necessities of state management.
Hotlink it from https://unpkg.com/valoo.
| // array utils | |
| // ================================================================================================= | |
| const combine = (...arrays) => [].concat(...arrays); | |
| const compact = arr => arr.filter(Boolean); | |
| const contains = (() => Array.prototype.includes | |
| ? (arr, value) => arr.includes(value) | |
| : (arr, value) => arr.some(el => el === value) |
| [] + []; // JavaScript will give you "" (which makes little sense), TypeScript will error | |
| // | |
| // other things that are nonsensical in JavaScript | |
| // - don't give a runtime error (making debugging hard) | |
| // - but TypeScript will give a compile time error (making debugging unnecessary) | |
| // | |
| {} + []; // JS : 0, TS Error | |
| [] + {}; // JS : "[object Object]", TS Error | |
| {} + {}; // JS : NaN, TS Error |