@heyramzi/ui 2.11.1 → 2.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/helpers.js +38 -38
- package/dist/agents/page-state.js +49 -50
- package/dist/agents/vendor/color.js +146 -127
- package/dist/agents/vendor/draw.js +617 -508
- package/dist/agents/vendor/engine.js +698 -599
- package/dist/agents/vendor/mesh.js +653 -683
- package/dist/agents/vendor/plastic.js +3913 -3112
- package/dist/agents/vendor/presets.js +163 -164
- package/dist/agents/vendor/shapes.js +21 -20
- package/dist/agents/vendor/ticker.js +41 -42
- package/dist/agents/vendor/types.js +1 -0
- package/dist/agents/vendor/wear.js +1421 -1448
- package/dist/ai/confirmation/confirmation-context.svelte.js +6 -6
- package/dist/ai/confirmation/index.js +3 -1
- package/dist/ai/index.js +33 -0
- package/dist/ai/prompt-input/index.js +3 -1
- package/dist/ai/reasoning/index.js +3 -1
- package/dist/ai/reasoning/reasoning-context.svelte.js +6 -6
- package/dist/ai/suggestion/index.js +3 -1
- package/dist/ai/typing-dots/index.js +3 -1
- package/dist/animations/text-swap.js +24 -24
- package/dist/brand/index.js +54 -48
- package/dist/canvas/card/resize.js +5 -3
- package/dist/canvas/edges/edge-path.js +255 -242
- package/dist/canvas/editor/context-menu.js +39 -36
- package/dist/canvas/editor/dispatch.svelte.js +154 -151
- package/dist/canvas/editor/editor-context.js +7 -2
- package/dist/canvas/editor/editor-mode.js +1 -0
- package/dist/canvas/editor/frame.js +73 -76
- package/dist/canvas/editor/hand-context.js +5 -2
- package/dist/canvas/editor/history-core.js +163 -191
- package/dist/canvas/editor/keymap.js +95 -169
- package/dist/canvas/editor/layout-actions.js +143 -144
- package/dist/canvas/editor/lock.js +52 -51
- package/dist/canvas/editor/rebase.js +217 -240
- package/dist/canvas/editor/style.js +132 -137
- package/dist/canvas/editor/text-field-context.js +7 -2
- package/dist/canvas/editor/z-order.js +65 -70
- package/dist/canvas/headless/alignment.js +22 -16
- package/dist/canvas/headless/break-apart-find.js +286 -279
- package/dist/canvas/headless/break-apart-pieces.js +62 -58
- package/dist/canvas/headless/break-apart-plan.js +299 -325
- package/dist/canvas/headless/break-apart-style.js +75 -70
- package/dist/canvas/headless/break-apart.js +188 -181
- package/dist/canvas/headless/canvas-cleanup.js +78 -58
- package/dist/canvas/headless/edge-anchors.js +115 -116
- package/dist/canvas/headless/edge-memo.js +24 -22
- package/dist/canvas/headless/edge-serialization.js +17 -27
- package/dist/canvas/headless/figure-geometry.js +232 -264
- package/dist/canvas/headless/fit-viewport.js +84 -67
- package/dist/canvas/headless/grid.js +88 -86
- package/dist/canvas/headless/icon-node.js +44 -36
- package/dist/canvas/headless/index.js +1 -0
- package/dist/canvas/headless/linkify.js +17 -19
- package/dist/canvas/headless/pen-marks.js +101 -95
- package/dist/canvas/headless/sketch.js +231 -209
- package/dist/canvas/headless/snap-guides.js +99 -83
- package/dist/canvas/headless/svg-figure.js +133 -117
- package/dist/canvas/headless/table-layout.js +146 -107
- package/dist/canvas/index.js +2 -0
- package/dist/canvas/lod/lod-mode.svelte.js +20 -18
- package/dist/canvas/lod/render-all.svelte.js +36 -39
- package/dist/canvas/ops/arrange.js +78 -71
- package/dist/canvas/ops/ops.js +260 -255
- package/dist/canvas/pen/colors.js +37 -35
- package/dist/canvas/pen/eraser.js +28 -27
- package/dist/canvas/pen/geometry.js +120 -130
- package/dist/canvas/pen/index.js +1 -0
- package/dist/canvas/pen/ops.js +11 -11
- package/dist/canvas/pen/pen-session.js +150 -159
- package/dist/canvas/pen/plugin.js +107 -104
- package/dist/canvas/pen/shapes.js +73 -68
- package/dist/canvas/pen/stroke-path.js +32 -30
- package/dist/canvas/pen/types.js +21 -21
- package/dist/canvas/pen/ui.js +10 -8
- package/dist/canvas/plugin.js +46 -46
- package/dist/canvas/screen/glyphs.js +12 -11
- package/dist/canvas/screen/labels.js +22 -22
- package/dist/canvas/screen/parts.js +98 -111
- package/dist/canvas/screen/plugin.js +47 -56
- package/dist/canvas/screen/types.js +30 -35
- package/dist/canvas/screen/ui.js +7 -7
- package/dist/canvas/test-utils.js +14 -14
- package/dist/canvas/types.js +1 -0
- package/dist/canvas/ui/forward-wheel.js +24 -25
- package/dist/canvas/ui/icons.js +64 -131
- package/dist/canvas/ui/place-panel.js +58 -49
- package/dist/canvas/ui/shortcut-tip.js +14 -12
- package/dist/canvas/ui/tools.js +300 -385
- package/dist/charts/dashboard/chart.js +4 -0
- package/dist/charts/dashboard/data-table.js +11 -0
- package/dist/charts/dashboard/windows.js +8 -3
- package/dist/charts/edge-fade.js +10 -5
- package/dist/charts/hover-band.js +16 -11
- package/dist/charts/index.js +0 -1
- package/dist/charts/motion.js +11 -7
- package/dist/charts/primitives/chart-utils.js +12 -12
- package/dist/components/copy/clipboard.js +32 -32
- package/dist/components/copy/copied.svelte.js +31 -23
- package/dist/components/data-table/data-table.js +39 -39
- package/dist/components/docs/index.js +4 -0
- package/dist/components/docs/scroll-spy.svelte.js +73 -68
- package/dist/components/list-page/filter-section.js +4 -1
- package/dist/components/list-page/index.js +2 -0
- package/dist/components/list-page/list-table.js +7 -2
- package/dist/components/list-page/queue-rail.js +14 -0
- package/dist/components/list-page/section-host.js +4 -2
- package/dist/components/list-page/step.js +4 -3
- package/dist/components/list-page/types.js +1 -0
- package/dist/components/picker/trigger.js +48 -30
- package/dist/components/picker/types.js +1 -0
- package/dist/components/segmented/collapse.js +38 -27
- package/dist/components/segmented/index.js +8 -0
- package/dist/components/segmented/segmented.js +67 -42
- package/dist/components/star-rating-input/index.js +3 -1
- package/dist/components/table-view/types.js +1 -0
- package/dist/components/tags-input/tags.js +81 -69
- package/dist/components/theme/index.js +4 -0
- package/dist/components/toolbar/index.js +4 -0
- package/dist/components/toolbar/toolbar-trigger.js +14 -1
- package/dist/editor/anchors.js +17 -13
- package/dist/editor/block-id.js +52 -51
- package/dist/editor/block-ops.js +108 -80
- package/dist/editor/doc-blocks.js +155 -166
- package/dist/editor/extensions.js +139 -180
- package/dist/editor/index.js +4 -0
- package/dist/editor/markdown-test-helpers.js +4 -2
- package/dist/editor/markdown.js +420 -408
- package/dist/editor/serializer.js +204 -200
- package/dist/editor/slash-items.js +89 -101
- package/dist/editor/youtube-url.js +25 -20
- package/dist/effects/animated-beam/path-calculator.svelte.js +43 -38
- package/dist/effects/animated-beam/types.js +1 -0
- package/dist/effects/border-beam/css.js +92 -78
- package/dist/effects/border-beam/presets.js +1705 -1720
- package/dist/effects/border-beam/register-properties.js +43 -33
- package/dist/effects/border-beam/types.js +1 -0
- package/dist/effects/image-comparison/compare.js +3 -2
- package/dist/effects/image-reveal/types.js +1 -0
- package/dist/effects/magnetic/magnetic.js +58 -52
- package/dist/effects/reveal/observe.js +50 -40
- package/dist/effects/reveal/types.js +1 -0
- package/dist/effects/shader-gradient/color.js +36 -29
- package/dist/effects/shader-gradient/renderer.js +384 -295
- package/dist/effects/shader-gradient/shaders.js +31 -0
- package/dist/effects/shader-gradient/types.js +1 -0
- package/dist/icons/apple-symbol-exports.js +99 -124
- package/dist/icons/sf-symbols.js +357 -461
- package/dist/icons/trades.js +43 -28
- package/dist/inbox/index.js +1 -0
- package/dist/inbox/logic.js +126 -122
- package/dist/inbox/types.js +43 -43
- package/dist/lib/arrive.js +19 -12
- package/dist/lib/icon-types.js +1 -0
- package/dist/lib/initials.js +16 -10
- package/dist/lib/layout.js +5 -0
- package/dist/lib/panel.js +13 -0
- package/dist/lib/result.js +22 -22
- package/dist/lib/sliding-pill.js +59 -44
- package/dist/lib/theme-transition.js +43 -43
- package/dist/lib/tone.js +31 -24
- package/dist/lib/utils.js +3 -1
- package/dist/onboarding/define-tours.js +24 -23
- package/dist/onboarding/onboarding.svelte.js +16 -12
- package/dist/onboarding/pick.js +10 -6
- package/dist/onboarding/stores.js +40 -41
- package/dist/onboarding/wait.js +24 -23
- package/dist/panel/side-panel-types.js +1 -0
- package/dist/record/demo-data.js +459 -486
- package/dist/record/fields.js +129 -131
- package/dist/record/format.js +70 -82
- package/dist/record/gutter.js +1 -0
- package/dist/record/kinds.js +95 -105
- package/dist/record/logic.js +238 -219
- package/dist/record/types.js +49 -48
- package/dist/shadcn/accordion/index.js +3 -1
- package/dist/shadcn/alert/index.js +3 -1
- package/dist/shadcn/alert-dialog/index.js +3 -1
- package/dist/shadcn/attachment/index.js +3 -1
- package/dist/shadcn/avatar/index.js +3 -1
- package/dist/shadcn/breadcrumb/index.js +3 -1
- package/dist/shadcn/bubble/index.js +3 -1
- package/dist/shadcn/button/index.js +3 -1
- package/dist/shadcn/calendar/index.js +3 -1
- package/dist/shadcn/card/index.js +3 -1
- package/dist/shadcn/checkbox/index.js +3 -1
- package/dist/shadcn/code-block/index.js +3 -1
- package/dist/shadcn/collapsible/index.js +3 -1
- package/dist/shadcn/command/index.js +4 -1
- package/dist/shadcn/context-menu/index.js +3 -1
- package/dist/shadcn/dialog/index.js +3 -1
- package/dist/shadcn/dropdown-menu/menu-item.js +40 -20
- package/dist/shadcn/empty/index.js +3 -1
- package/dist/shadcn/field/index.js +3 -1
- package/dist/shadcn/hooks/highlighter.js +77 -75
- package/dist/shadcn/hooks/is-mobile.svelte.js +3 -3
- package/dist/shadcn/hooks/use-highlighted-code.svelte.js +62 -62
- package/dist/shadcn/input/index.js +3 -1
- package/dist/shadcn/kbd/index.js +3 -1
- package/dist/shadcn/label/index.js +3 -1
- package/dist/shadcn/marker/index.js +3 -1
- package/dist/shadcn/message/index.js +3 -1
- package/dist/shadcn/message-scroller/index.js +3 -1
- package/dist/shadcn/popover/index.js +3 -1
- package/dist/shadcn/progress/index.js +3 -1
- package/dist/shadcn/progress/tone.js +8 -7
- package/dist/shadcn/radio-group/index.js +3 -1
- package/dist/shadcn/scroll-area/index.js +3 -1
- package/dist/shadcn/select/index.js +3 -1
- package/dist/shadcn/separator/index.js +3 -1
- package/dist/shadcn/sheet/index.js +3 -1
- package/dist/shadcn/sidebar/context.svelte.js +42 -28
- package/dist/shadcn/sidebar/index.js +3 -1
- package/dist/shadcn/skeleton/index.js +3 -1
- package/dist/shadcn/slider/index.js +3 -1
- package/dist/shadcn/switch/index.js +3 -1
- package/dist/shadcn/table/index.js +3 -1
- package/dist/shadcn/tabs/index.js +3 -1
- package/dist/shadcn/textarea/index.js +3 -1
- package/dist/shadcn/toggle/index.js +3 -1
- package/dist/shadcn/toggle-group/index.js +3 -1
- package/dist/shadcn/tooltip/context.js +7 -2
- package/dist/shadcn/tooltip/index.js +3 -1
- package/dist/shadcn/trace/index.js +3 -1
- package/dist/slides/bridges.js +65 -59
- package/dist/slides/deck-controller.svelte.js +210 -207
- package/dist/slides/export/capture.js +66 -71
- package/dist/slides/export/ffmpeg.js +76 -72
- package/dist/slides/export/index.js +3 -0
- package/dist/slides/export/launch.js +9 -6
- package/dist/slides/export/pdf.js +60 -54
- package/dist/slides/export/types.js +1 -0
- package/dist/slides/labels.js +24 -24
- package/dist/slides/layout.js +39 -41
- package/dist/slides/model.js +9 -7
- package/dist/slides/navigation.js +78 -73
- package/dist/slides/types.js +2 -2
- package/dist/status/define-statuses.js +18 -14
- package/dist/status/status-types.js +1 -0
- package/dist/test-setup.js +24 -20
- package/dist/thread/logic.js +73 -77
- package/dist/thread/types.js +21 -21
- package/dist/work/board-order.js +94 -90
- package/dist/work/dates.js +16 -9
- package/dist/work/detail/detail-types.js +18 -18
- package/dist/work/docs/edited.js +32 -29
- package/dist/work/docs/index.js +4 -0
- package/dist/work/docs/labels.js +34 -34
- package/dist/work/docs/menu.js +113 -106
- package/dist/work/docs/outline.js +39 -29
- package/dist/work/gantt/logic.js +211 -235
- package/dist/work/inbox/inbox-logic.js +71 -75
- package/dist/work/inbox/inbox-statuses.js +75 -72
- package/dist/work/inbox/inbox-types.js +1 -0
- package/dist/work/kanban-drag.js +27 -22
- package/dist/work/kanban-types.js +1 -0
- package/dist/work/presets/sales.js +36 -32
- package/dist/work/reorder.js +9 -8
- package/dist/work/task-types.js +1 -0
- package/dist/work/time/duration.js +51 -46
- package/dist/work/time/time-types.js +23 -23
- package/dist/work/use-kanban-dnd.svelte.js +126 -125
- package/package.json +3 -1
- package/src/components/list-page/master-detail.svelte +3 -1
- package/src/components/list-page/rail-row.svelte +4 -4
- package/src/editor/markdown.ts +30 -35
|
@@ -1,39 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WHY this exists at all, when generateCss already emits the same @property rules: Chrome ignores an @property rule that sits inside a shadow root,
|
|
3
|
+
*/
|
|
4
|
+
/*
|
|
5
|
+
* so a beam rendered in one has no registration.
|
|
6
|
+
*/
|
|
7
|
+
/*
|
|
8
|
+
* Unregistered, the angle cannot be interpolated and, worse, every mask that reads it is invalid at computed-value time, which resolves the mask to none and floods the whole element instead
|
|
9
|
+
*/
|
|
10
|
+
/*
|
|
11
|
+
* of drawing a border. This call registers on the document, which is why the ids are unique per instance.
|
|
12
|
+
*/
|
|
1
13
|
export function registerBorderBeamProperties(id, size) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
14
|
+
const registry = globalThis.CSS;
|
|
15
|
+
if (typeof registry?.registerProperty !== "function") return;
|
|
16
|
+
for (const registration of getBorderBeamPropertyRegistrations(id, size)) {
|
|
17
|
+
// A second register of the same name throws. The first one already holds, so there is nothing to do.
|
|
18
|
+
try {
|
|
19
|
+
registry.registerProperty?.(registration);
|
|
20
|
+
} catch {}
|
|
21
|
+
}
|
|
9
22
|
}
|
|
10
23
|
function getBorderBeamPropertyRegistrations(id, size) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
},
|
|
29
|
-
numberProperty(`--beam-opacity-${id}`, "0")
|
|
30
|
-
];
|
|
24
|
+
if (size === "line") {
|
|
25
|
+
return [
|
|
26
|
+
numberProperty(`--beam-x-${id}`, "0"),
|
|
27
|
+
numberProperty(`--beam-w-${id}`, "1"),
|
|
28
|
+
numberProperty(`--beam-h-${id}`, "1"),
|
|
29
|
+
numberProperty(`--beam-spike-${id}`, "1"),
|
|
30
|
+
numberProperty(`--beam-spike2-${id}`, "1"),
|
|
31
|
+
numberProperty(`--beam-edge-${id}`, "1"),
|
|
32
|
+
numberProperty(`--beam-opacity-${id}`, "0")
|
|
33
|
+
];
|
|
34
|
+
}
|
|
35
|
+
return [{
|
|
36
|
+
name: `--beam-angle-${id}`,
|
|
37
|
+
syntax: "<angle>",
|
|
38
|
+
initialValue: "0deg",
|
|
39
|
+
inherits: true
|
|
40
|
+
}, numberProperty(`--beam-opacity-${id}`, "0")];
|
|
31
41
|
}
|
|
32
42
|
function numberProperty(name, initialValue) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
43
|
+
return {
|
|
44
|
+
name,
|
|
45
|
+
syntax: "<number>",
|
|
46
|
+
initialValue,
|
|
47
|
+
inherits: true
|
|
48
|
+
};
|
|
39
49
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
+
/** Where the handle sits for a pointer at `clientX`, as a 0-100 percentage of the frame. */
|
|
1
2
|
export function positionAt(clientX, left, width) {
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
if (width <= 0) return 50;
|
|
4
|
+
return Math.min(Math.max((clientX - left) / width * 100, 0), 100);
|
|
4
5
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,54 +1,60 @@
|
|
|
1
1
|
const EASE = "cubic-bezier(0.22, 1, 0.36, 1)";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Pulls an element toward the pointer while it is inside `range`.
|
|
4
|
+
* Port of motion-primitives' `Magnetic` with a CSS transition instead of a spring.
|
|
5
|
+
*/
|
|
6
|
+
export const magnetic = (node, options) => {
|
|
7
|
+
let intensity = options?.intensity ?? .6;
|
|
8
|
+
let range = options?.range ?? 100;
|
|
9
|
+
let from = options?.from ?? "self";
|
|
10
|
+
let duration = options?.duration ?? 350;
|
|
11
|
+
let armed = false;
|
|
12
|
+
// WHY: the pull is a hover affordance with no state behind it, so reduced-motion
|
|
13
|
+
// gets a no-op rather than a shorter version of the same movement.
|
|
14
|
+
const reduced = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
15
|
+
const zone = () => from === "parent" ? node.parentElement ?? node : node;
|
|
16
|
+
const reset = () => {
|
|
17
|
+
node.style.transition = `translate ${duration}ms ${EASE}`;
|
|
18
|
+
node.style.translate = "0px 0px";
|
|
19
|
+
};
|
|
20
|
+
const onMove = (event) => {
|
|
21
|
+
if (!armed || reduced.matches) return;
|
|
22
|
+
const rect = node.getBoundingClientRect();
|
|
23
|
+
const dx = event.clientX - (rect.left + rect.width / 2);
|
|
24
|
+
const dy = event.clientY - (rect.top + rect.height / 2);
|
|
25
|
+
const distance = Math.hypot(dx, dy);
|
|
26
|
+
if (distance > range) return reset();
|
|
27
|
+
const falloff = intensity * (1 - distance / range);
|
|
28
|
+
node.style.transition = "translate 0ms";
|
|
29
|
+
node.style.translate = `${dx * falloff}px ${dy * falloff}px`;
|
|
30
|
+
};
|
|
31
|
+
const arm = () => armed = true;
|
|
32
|
+
const disarm = () => {
|
|
33
|
+
armed = false;
|
|
34
|
+
reset();
|
|
35
|
+
};
|
|
36
|
+
let target = zone();
|
|
37
|
+
target.addEventListener("pointerenter", arm);
|
|
38
|
+
target.addEventListener("pointerleave", disarm);
|
|
39
|
+
document.addEventListener("pointermove", onMove);
|
|
40
|
+
return {
|
|
41
|
+
update(next) {
|
|
42
|
+
intensity = next?.intensity ?? .6;
|
|
43
|
+
range = next?.range ?? 100;
|
|
44
|
+
duration = next?.duration ?? 350;
|
|
45
|
+
const nextFrom = next?.from ?? "self";
|
|
46
|
+
if (nextFrom === from) return;
|
|
47
|
+
target.removeEventListener("pointerenter", arm);
|
|
48
|
+
target.removeEventListener("pointerleave", disarm);
|
|
49
|
+
from = nextFrom;
|
|
50
|
+
target = zone();
|
|
51
|
+
target.addEventListener("pointerenter", arm);
|
|
52
|
+
target.addEventListener("pointerleave", disarm);
|
|
53
|
+
},
|
|
54
|
+
destroy() {
|
|
55
|
+
target.removeEventListener("pointerenter", arm);
|
|
56
|
+
target.removeEventListener("pointerleave", disarm);
|
|
57
|
+
document.removeEventListener("pointermove", onMove);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
54
60
|
};
|
|
@@ -1,43 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs `onChange` when `el` enters or leaves the viewport. Returns the teardown.
|
|
3
|
+
* Shared by InView, AnimatedGroup and TextEffect so there is one observer contract.
|
|
4
|
+
*/
|
|
1
5
|
export function observeInView(el, options, onChange) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
// WHY: no IntersectionObserver means SSR or an ancient engine; reveal the
|
|
7
|
+
// content rather than leaving it stuck at the hidden keyframe.
|
|
8
|
+
if (typeof IntersectionObserver === "undefined") {
|
|
9
|
+
onChange(true);
|
|
10
|
+
return () => {};
|
|
11
|
+
}
|
|
12
|
+
const observer = new IntersectionObserver(([entry]) => {
|
|
13
|
+
if (entry.isIntersecting) {
|
|
14
|
+
onChange(true);
|
|
15
|
+
if (options.once !== false) observer.disconnect();
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (options.once === false) onChange(false);
|
|
19
|
+
}, {
|
|
20
|
+
threshold: options.amount ?? 0,
|
|
21
|
+
rootMargin: options.margin ?? "0px"
|
|
22
|
+
});
|
|
23
|
+
observer.observe(el);
|
|
24
|
+
return () => observer.disconnect();
|
|
19
25
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Svelte action that calls back when the node enters or leaves the viewport.
|
|
28
|
+
* Options are read at call time, so a `use:onInView={...}` update swaps the callbacks.
|
|
29
|
+
*/
|
|
30
|
+
export const onInView = (node, initial) => {
|
|
31
|
+
let options = initial ?? {};
|
|
32
|
+
let entered = false;
|
|
33
|
+
const { amount = .1, margin, once } = options;
|
|
34
|
+
const stop = observeInView(node, {
|
|
35
|
+
amount,
|
|
36
|
+
margin,
|
|
37
|
+
once
|
|
38
|
+
}, (inView) => {
|
|
39
|
+
if (inView && !entered) {
|
|
40
|
+
entered = true;
|
|
41
|
+
options.onEnter?.();
|
|
42
|
+
} else if (!inView && entered) {
|
|
43
|
+
entered = false;
|
|
44
|
+
options.onLeave?.();
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
return {
|
|
48
|
+
update(next) {
|
|
49
|
+
options = next ?? {};
|
|
50
|
+
},
|
|
51
|
+
destroy: stop
|
|
52
|
+
};
|
|
43
53
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,34 +1,41 @@
|
|
|
1
1
|
let probe;
|
|
2
2
|
function getProbe() {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
});
|
|
7
|
-
return probe;
|
|
3
|
+
if (probe !== undefined) return probe;
|
|
4
|
+
probe = document.createElement("canvas").getContext("2d", { willReadFrequently: true });
|
|
5
|
+
return probe;
|
|
8
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Any CSS color to a 0..1 RGB triplet, `var(--token)` included.
|
|
9
|
+
*/
|
|
10
|
+
/*
|
|
11
|
+
* The values go through a 1x1 canvas rather than a hand-written parser because the brand palette is authored in oklch, and the canvas gives the browser's own conversion for every
|
|
12
|
+
*/
|
|
13
|
+
/*
|
|
14
|
+
* color space it supports instead of a second implementation that has to keep up.
|
|
15
|
+
*/
|
|
9
16
|
export function resolveColor(input, scope) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
17
|
+
const fallback = [
|
|
18
|
+
0,
|
|
19
|
+
0,
|
|
20
|
+
0
|
|
21
|
+
];
|
|
22
|
+
if (typeof document === "undefined") return fallback;
|
|
23
|
+
let value = input.trim();
|
|
24
|
+
const token = /^var\(\s*(--[\w-]+)\s*(?:,\s*([\s\S]+))?\)$/.exec(value);
|
|
25
|
+
if (token) {
|
|
26
|
+
const resolved = getComputedStyle(scope ?? document.documentElement).getPropertyValue(token[1]).trim();
|
|
27
|
+
value = resolved || token[2]?.trim() || "";
|
|
28
|
+
}
|
|
29
|
+
if (!value) return fallback;
|
|
30
|
+
const context = getProbe();
|
|
31
|
+
if (!context) return fallback;
|
|
32
|
+
context.fillStyle = value;
|
|
33
|
+
context.clearRect(0, 0, 1, 1);
|
|
34
|
+
context.fillRect(0, 0, 1, 1);
|
|
35
|
+
const [r, g, b] = context.getImageData(0, 0, 1, 1).data;
|
|
36
|
+
return [
|
|
37
|
+
r / 255,
|
|
38
|
+
g / 255,
|
|
39
|
+
b / 255
|
|
40
|
+
];
|
|
34
41
|
}
|