@heyramzi/ui 2.11.0 → 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/components/tags-input/tags-input.svelte +2 -0
- package/src/editor/markdown.ts +30 -35
package/dist/work/board-order.js
CHANGED
|
@@ -1,109 +1,113 @@
|
|
|
1
|
+
// Fractional indexing, so a move writes one row instead of renumbering a column; it's the
|
|
2
|
+
// CC0 algorithm from https://observablehq.com/@dgreensp/implementing-fractional-indexing.
|
|
1
3
|
const DIGITS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
|
2
4
|
const INT_DIGITS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
|
3
5
|
const ZERO = DIGITS.charAt(0);
|
|
4
6
|
function integerLength(head) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
const i = INT_DIGITS.indexOf(head);
|
|
8
|
+
if (i === -1) throw new Error("invalid order key head: " + head);
|
|
9
|
+
const half = INT_DIGITS.length / 2;
|
|
10
|
+
return i < half ? half - i + 1 : i - half + 2;
|
|
9
11
|
}
|
|
10
12
|
function integerPart(key) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
const length = integerLength(key.charAt(0));
|
|
14
|
+
if (length > key.length) throw new Error("invalid order key: " + key);
|
|
15
|
+
return key.slice(0, length);
|
|
14
16
|
}
|
|
15
17
|
function smallestInteger() {
|
|
16
|
-
|
|
18
|
+
return INT_DIGITS.charAt(0) + ZERO.repeat(INT_DIGITS.length / 2);
|
|
17
19
|
}
|
|
18
20
|
function midpoint(a, b) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
21
|
+
if (b != null && a >= b) throw new Error(a + " >= " + b);
|
|
22
|
+
if (a.slice(-1) === ZERO || b && b.slice(-1) === ZERO) throw new Error("trailing zero");
|
|
23
|
+
if (b) {
|
|
24
|
+
let n = 0;
|
|
25
|
+
while ((a[n] ?? ZERO) === b[n]) n++;
|
|
26
|
+
if (n > 0) return b.slice(0, n) + midpoint(a.slice(n), b.slice(n));
|
|
27
|
+
}
|
|
28
|
+
const digitA = a ? DIGITS.indexOf(a.charAt(0)) : 0;
|
|
29
|
+
const digitB = b != null ? DIGITS.indexOf(b.charAt(0)) : DIGITS.length;
|
|
30
|
+
if (digitB - digitA > 1) {
|
|
31
|
+
return DIGITS.charAt(Math.round(.5 * (digitA + digitB)));
|
|
32
|
+
}
|
|
33
|
+
if (b && b.length > 1) return b.slice(0, 1);
|
|
34
|
+
return DIGITS.charAt(digitA) + midpoint(a.slice(1), null);
|
|
33
35
|
}
|
|
34
36
|
function incrementInteger(x) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
37
|
+
const head = x.charAt(0);
|
|
38
|
+
let trailing = "";
|
|
39
|
+
for (let i = x.length - 1; i >= 1; i--) {
|
|
40
|
+
const d = DIGITS.indexOf(x.charAt(i)) + 1;
|
|
41
|
+
if (d === DIGITS.length) trailing = ZERO + trailing;
|
|
42
|
+
else return head + x.slice(1, i) + DIGITS.charAt(d) + trailing;
|
|
43
|
+
}
|
|
44
|
+
const headIndex = INT_DIGITS.indexOf(head);
|
|
45
|
+
if (headIndex === INT_DIGITS.length - 1) return null;
|
|
46
|
+
const h = INT_DIGITS.charAt(headIndex + 1);
|
|
47
|
+
const delta = integerLength(h) - integerLength(head);
|
|
48
|
+
return h + (delta > 0 ? trailing + ZERO : delta < 0 ? trailing.slice(1) : trailing);
|
|
47
49
|
}
|
|
48
50
|
function decrementInteger(x) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
51
|
+
const head = x.charAt(0);
|
|
52
|
+
const last = DIGITS.charAt(DIGITS.length - 1);
|
|
53
|
+
let trailing = "";
|
|
54
|
+
for (let i = x.length - 1; i >= 1; i--) {
|
|
55
|
+
const d = DIGITS.indexOf(x.charAt(i)) - 1;
|
|
56
|
+
if (d === -1) trailing = last + trailing;
|
|
57
|
+
else return head + x.slice(1, i) + DIGITS.charAt(d) + trailing;
|
|
58
|
+
}
|
|
59
|
+
const headIndex = INT_DIGITS.indexOf(head);
|
|
60
|
+
if (headIndex === 0) return null;
|
|
61
|
+
const h = INT_DIGITS.charAt(headIndex - 1);
|
|
62
|
+
const delta = integerLength(h) - integerLength(head);
|
|
63
|
+
return h + (delta > 0 ? trailing + last : delta < 0 ? trailing.slice(1) : trailing);
|
|
62
64
|
}
|
|
65
|
+
/** An order key that sorts strictly between `a` and `b`. Null means an open end. */
|
|
63
66
|
export function keyBetween(a, b) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (i == null) throw new Error("cannot increment any more");
|
|
91
|
-
if (i < b) return i;
|
|
92
|
-
return ia + midpoint(fa, null);
|
|
67
|
+
if (a != null && b != null && a > b) [a, b] = [b, a];
|
|
68
|
+
if (a == null) {
|
|
69
|
+
if (b == null) return INT_DIGITS.charAt(INT_DIGITS.length / 2) + ZERO;
|
|
70
|
+
const ib = integerPart(b);
|
|
71
|
+
const fb = b.slice(ib.length);
|
|
72
|
+
if (ib === smallestInteger()) return ib + midpoint("", fb);
|
|
73
|
+
if (ib < b) return ib;
|
|
74
|
+
const res = decrementInteger(ib);
|
|
75
|
+
if (res == null) throw new Error("cannot decrement any more");
|
|
76
|
+
return res;
|
|
77
|
+
}
|
|
78
|
+
if (b == null) {
|
|
79
|
+
const ia = integerPart(a);
|
|
80
|
+
const fa = a.slice(ia.length);
|
|
81
|
+
const i = incrementInteger(ia);
|
|
82
|
+
return i == null ? ia + midpoint(fa, null) : i;
|
|
83
|
+
}
|
|
84
|
+
const ia = integerPart(a);
|
|
85
|
+
const fa = a.slice(ia.length);
|
|
86
|
+
const ib = integerPart(b);
|
|
87
|
+
const fb = b.slice(ib.length);
|
|
88
|
+
if (ia === ib) return ia + midpoint(fa, fb);
|
|
89
|
+
const i = incrementInteger(ia);
|
|
90
|
+
if (i == null) throw new Error("cannot increment any more");
|
|
91
|
+
if (i < b) return i;
|
|
92
|
+
return ia + midpoint(fa, null);
|
|
93
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* The key a card should take when dropped at `index`. Rows may share a key or
|
|
96
|
+
* have none, so the bounds skip both and only compare against real keys.
|
|
97
|
+
*/
|
|
94
98
|
export function boardOrderAt(column, index, order) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
99
|
+
let lower = null;
|
|
100
|
+
for (const item of column.slice(0, index)) {
|
|
101
|
+
const key = order(item);
|
|
102
|
+
if (key != null && (lower === null || key > lower)) lower = key;
|
|
103
|
+
}
|
|
104
|
+
let upper = null;
|
|
105
|
+
for (const item of column.slice(index)) {
|
|
106
|
+
const key = order(item);
|
|
107
|
+
if (key != null && (lower === null || key > lower)) {
|
|
108
|
+
upper = key;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return keyBetween(lower, upper);
|
|
109
113
|
}
|
package/dist/work/dates.js
CHANGED
|
@@ -1,19 +1,26 @@
|
|
|
1
|
-
|
|
1
|
+
// Dates are plain "YYYY-MM-DD" strings, counted as whole UTC days. A timeline
|
|
2
|
+
// only needs days, and day numbers dodge every timezone and DST edge.
|
|
3
|
+
const DAY_MS = 864e5;
|
|
4
|
+
/** Days since 1970-01-01 for an ISO date. Anything after the date part is ignored. */
|
|
2
5
|
export function dayNumber(iso) {
|
|
3
|
-
|
|
4
|
-
|
|
6
|
+
const [y = 1970, m = 1, d = 1] = iso.slice(0, 10).split("-").map(Number);
|
|
7
|
+
return Math.round(Date.UTC(y, m - 1, d) / DAY_MS);
|
|
5
8
|
}
|
|
9
|
+
/** The ISO date for a day number. */
|
|
6
10
|
export function isoFromDay(day) {
|
|
7
|
-
|
|
11
|
+
return new Date(day * DAY_MS).toISOString().slice(0, 10);
|
|
8
12
|
}
|
|
13
|
+
/** Shift an ISO date by whole days. */
|
|
9
14
|
export function addDays(iso, days) {
|
|
10
|
-
|
|
15
|
+
return isoFromDay(dayNumber(iso) + days);
|
|
11
16
|
}
|
|
17
|
+
/** Today in the viewer's own timezone, as an ISO date. */
|
|
12
18
|
export function todayIso() {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
19
|
+
const now = new Date();
|
|
20
|
+
const local = new Date(now.getTime() - now.getTimezoneOffset() * 6e4);
|
|
21
|
+
return local.toISOString().slice(0, 10);
|
|
16
22
|
}
|
|
23
|
+
/** 0 is Sunday, as in `Date.getUTCDay`. */
|
|
17
24
|
export function weekday(day) {
|
|
18
|
-
|
|
25
|
+
return new Date(day * DAY_MS).getUTCDay();
|
|
19
26
|
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
export const DEFAULT_TASK_DETAIL_LABELS = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
2
|
+
markComplete: "Mark complete",
|
|
3
|
+
markIncomplete: "Mark incomplete",
|
|
4
|
+
editTitle: "Edit title",
|
|
5
|
+
description: "Description",
|
|
6
|
+
addDescription: "Add a description",
|
|
7
|
+
editDescription: "Edit description",
|
|
8
|
+
save: "Save",
|
|
9
|
+
saving: "Saving",
|
|
10
|
+
cancel: "Cancel",
|
|
11
|
+
comments: "Activity",
|
|
12
|
+
commentPlaceholder: "Leave a comment",
|
|
13
|
+
commentSend: "Comment",
|
|
14
|
+
commentEdit: "Edit comment",
|
|
15
|
+
commentDelete: "Delete comment",
|
|
16
|
+
commentEdited: "edited",
|
|
17
|
+
commentsEmpty: "No comments yet",
|
|
18
|
+
ai: "AI",
|
|
19
|
+
properties: "Properties"
|
|
20
20
|
};
|
package/dist/work/docs/edited.js
CHANGED
|
@@ -1,39 +1,42 @@
|
|
|
1
1
|
export function parseStamp(value) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
if (value === null || value === undefined || value === "") return null;
|
|
3
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
4
|
+
return Number.isNaN(date.getTime()) ? null : date;
|
|
5
5
|
}
|
|
6
6
|
function yearOf(date, { locale = "en-US", timeZone }) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
return new Intl.DateTimeFormat(locale, {
|
|
8
|
+
year: "numeric",
|
|
9
|
+
timeZone
|
|
10
|
+
}).format(date);
|
|
11
11
|
}
|
|
12
|
+
/** "Oct 23", or "Oct 23, 2025" when it isn't this year. Empty when the date can't be read. */
|
|
12
13
|
export function shortDate(value, options = {}) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
14
|
+
const date = parseStamp(value);
|
|
15
|
+
if (!date) return "";
|
|
16
|
+
const { locale = "en-US", timeZone, now = new Date() } = options;
|
|
17
|
+
const sameYear = yearOf(date, options) === yearOf(now, options);
|
|
18
|
+
return new Intl.DateTimeFormat(locale, {
|
|
19
|
+
month: "short",
|
|
20
|
+
day: "numeric",
|
|
21
|
+
year: sameYear ? undefined : "numeric",
|
|
22
|
+
timeZone
|
|
23
|
+
}).format(date);
|
|
23
24
|
}
|
|
25
|
+
/** "Oct 23, 14:44" for the last-edit row. Empty when the date can't be read. */
|
|
24
26
|
export function editStamp(value, options = {}) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
const date = parseStamp(value);
|
|
28
|
+
if (!date) return "";
|
|
29
|
+
const { locale = "en-US", timeZone } = options;
|
|
30
|
+
const time = new Intl.DateTimeFormat(locale, {
|
|
31
|
+
hour: "2-digit",
|
|
32
|
+
minute: "2-digit",
|
|
33
|
+
hour12: false,
|
|
34
|
+
timeZone
|
|
35
|
+
}).format(date);
|
|
36
|
+
return `${shortDate(date, options)}, ${time}`;
|
|
35
37
|
}
|
|
38
|
+
/** The chip's text. `label` is the word ("Edited"); a bad date leaves only the word. */
|
|
36
39
|
export function editedLabel(value, label = "Edited", options = {}) {
|
|
37
|
-
|
|
38
|
-
|
|
40
|
+
const day = shortDate(value, options);
|
|
41
|
+
return day ? `${label} ${day}` : label;
|
|
39
42
|
}
|
package/dist/work/docs/index.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The document surface: a page to write one, the "Edited" chip, the `…` menu and the outline
|
|
3
|
+
* logic behind the edge ticks. The app supplies the data and every handler.
|
|
4
|
+
*/
|
|
1
5
|
export { default as DocEditorPage } from "../../../src/work/docs/doc-editor-page.svelte";
|
|
2
6
|
export { default as DocMenu } from "../../../src/work/docs/doc-menu.svelte";
|
|
3
7
|
export { default as EditedChip } from "../../../src/work/docs/edited-chip.svelte";
|
package/dist/work/docs/labels.js
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
export const DEFAULT_DOC_LABELS = {
|
|
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
|
-
|
|
2
|
+
titlePlaceholder: "New document",
|
|
3
|
+
untitled: "Untitled",
|
|
4
|
+
edited: "Edited",
|
|
5
|
+
showAuthorNames: "Show author names",
|
|
6
|
+
ownedBy: "Owned by",
|
|
7
|
+
lastEditBy: "Last edit by",
|
|
8
|
+
showHistory: "Show document history",
|
|
9
|
+
menu: "Document actions",
|
|
10
|
+
filter: "Filter…",
|
|
11
|
+
noResults: "Nothing matches",
|
|
12
|
+
moveTo: "Move to",
|
|
13
|
+
duplicate: "Duplicate",
|
|
14
|
+
rename: "Rename",
|
|
15
|
+
template: "New template from document",
|
|
16
|
+
favorite: "Favorite",
|
|
17
|
+
unfavorite: "Remove from favorites",
|
|
18
|
+
copy: "Copy",
|
|
19
|
+
copyUrl: "Copy URL",
|
|
20
|
+
copyTitle: "Copy title",
|
|
21
|
+
copyTitleAsLink: "Copy title as link",
|
|
22
|
+
copyMarkdown: "Copy content as Markdown",
|
|
23
|
+
remind: "Remind me",
|
|
24
|
+
history: "Show document history",
|
|
25
|
+
delete: "Delete",
|
|
26
|
+
deleteTitle: (title) => `Delete "${title}"`,
|
|
27
|
+
deleteDetail: "This can't be undone.",
|
|
28
|
+
cancel: "Cancel",
|
|
29
|
+
back: "Back",
|
|
30
|
+
outline: "Outline",
|
|
31
|
+
copyLink: "Copy link"
|
|
32
32
|
};
|
|
33
33
|
export function docLabels(partial) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
return {
|
|
35
|
+
...DEFAULT_DOC_LABELS,
|
|
36
|
+
...partial
|
|
37
|
+
};
|
|
38
38
|
}
|