@contraagent/elements 0.0.0-stage → 0.2.0
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/README.md +83 -2
- package/custom-elements.json +5022 -0
- package/dist/charts/bar-chart.d.ts +32 -0
- package/dist/charts/bar-chart.d.ts.map +1 -0
- package/dist/charts/bar-chart.js +70 -0
- package/dist/charts/bar-chart.js.map +1 -0
- package/dist/charts/base.d.ts +48 -0
- package/dist/charts/base.d.ts.map +1 -0
- package/dist/charts/base.js +203 -0
- package/dist/charts/base.js.map +1 -0
- package/dist/charts/column-chart.d.ts +42 -0
- package/dist/charts/column-chart.d.ts.map +1 -0
- package/dist/charts/column-chart.js +146 -0
- package/dist/charts/column-chart.js.map +1 -0
- package/dist/charts/heatmap.d.ts +42 -0
- package/dist/charts/heatmap.d.ts.map +1 -0
- package/dist/charts/heatmap.js +124 -0
- package/dist/charts/heatmap.js.map +1 -0
- package/dist/charts/index.d.ts +9 -0
- package/dist/charts/index.d.ts.map +1 -0
- package/dist/charts/index.js +11 -0
- package/dist/charts/index.js.map +1 -0
- package/dist/charts/line-chart.d.ts +36 -0
- package/dist/charts/line-chart.d.ts.map +1 -0
- package/dist/charts/line-chart.js +118 -0
- package/dist/charts/line-chart.js.map +1 -0
- package/dist/charts/scale.d.ts +32 -0
- package/dist/charts/scale.d.ts.map +1 -0
- package/dist/charts/scale.js +50 -0
- package/dist/charts/scale.js.map +1 -0
- package/dist/charts/state-grid.d.ts +64 -0
- package/dist/charts/state-grid.d.ts.map +1 -0
- package/dist/charts/state-grid.js +223 -0
- package/dist/charts/state-grid.js.map +1 -0
- package/dist/charts/types.d.ts +34 -0
- package/dist/charts/types.d.ts.map +1 -0
- package/dist/charts/types.js +11 -0
- package/dist/charts/types.js.map +1 -0
- package/dist/checks/check-table.d.ts +32 -0
- package/dist/checks/check-table.d.ts.map +1 -0
- package/dist/checks/check-table.js +94 -0
- package/dist/checks/check-table.js.map +1 -0
- package/dist/checks/index.d.ts +4 -0
- package/dist/checks/index.d.ts.map +1 -0
- package/dist/checks/index.js +6 -0
- package/dist/checks/index.js.map +1 -0
- package/dist/checks/styles.d.ts +5 -0
- package/dist/checks/styles.d.ts.map +1 -0
- package/dist/checks/styles.js +30 -0
- package/dist/checks/styles.js.map +1 -0
- package/dist/checks/types.d.ts +35 -0
- package/dist/checks/types.d.ts.map +1 -0
- package/dist/checks/types.js +12 -0
- package/dist/checks/types.js.map +1 -0
- package/dist/code/code.d.ts +83 -0
- package/dist/code/code.d.ts.map +1 -0
- package/dist/code/code.js +206 -0
- package/dist/code/code.js.map +1 -0
- package/dist/code/highlight.d.ts +25 -0
- package/dist/code/highlight.d.ts.map +1 -0
- package/dist/code/highlight.js +312 -0
- package/dist/code/highlight.js.map +1 -0
- package/dist/code/index.d.ts +3 -0
- package/dist/code/index.d.ts.map +1 -0
- package/dist/code/index.js +5 -0
- package/dist/code/index.js.map +1 -0
- package/dist/core/clock.d.ts +20 -0
- package/dist/core/clock.d.ts.map +1 -0
- package/dist/core/clock.js +45 -0
- package/dist/core/clock.js.map +1 -0
- package/dist/core/define.d.ts +3 -0
- package/dist/core/define.d.ts.map +1 -0
- package/dist/core/define.js +8 -0
- package/dist/core/define.js.map +1 -0
- package/dist/core/events.d.ts +78 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +8 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/format.d.ts +8 -0
- package/dist/core/format.d.ts.map +1 -0
- package/dist/core/format.js +28 -0
- package/dist/core/format.js.map +1 -0
- package/dist/core/frame.d.ts +4 -0
- package/dist/core/frame.d.ts.map +1 -0
- package/dist/core/frame.js +5 -0
- package/dist/core/frame.js.map +1 -0
- package/dist/core/strings.d.ts +3 -0
- package/dist/core/strings.d.ts.map +1 -0
- package/dist/core/strings.js +14 -0
- package/dist/core/strings.js.map +1 -0
- package/dist/core/tone.d.ts +8 -0
- package/dist/core/tone.d.ts.map +1 -0
- package/dist/core/tone.js +9 -0
- package/dist/core/tone.js.map +1 -0
- package/dist/count/count.d.ts +22 -0
- package/dist/count/count.d.ts.map +1 -0
- package/dist/count/count.js +60 -0
- package/dist/count/count.js.map +1 -0
- package/dist/count/elapsed.d.ts +18 -0
- package/dist/count/elapsed.d.ts.map +1 -0
- package/dist/count/elapsed.js +33 -0
- package/dist/count/elapsed.js.map +1 -0
- package/dist/count/index.d.ts +3 -0
- package/dist/count/index.d.ts.map +1 -0
- package/dist/count/index.js +5 -0
- package/dist/count/index.js.map +1 -0
- package/dist/define/all.d.ts +15 -0
- package/dist/define/all.d.ts.map +1 -0
- package/dist/define/all.js +16 -0
- package/dist/define/all.js.map +1 -0
- package/dist/define/charts.d.ts +8 -0
- package/dist/define/charts.d.ts.map +1 -0
- package/dist/define/charts.js +15 -0
- package/dist/define/charts.js.map +1 -0
- package/dist/define/check-table.d.ts +4 -0
- package/dist/define/check-table.d.ts.map +1 -0
- package/dist/define/check-table.js +7 -0
- package/dist/define/check-table.js.map +1 -0
- package/dist/define/code.d.ts +4 -0
- package/dist/define/code.d.ts.map +1 -0
- package/dist/define/code.js +7 -0
- package/dist/define/code.js.map +1 -0
- package/dist/define/count.d.ts +5 -0
- package/dist/define/count.d.ts.map +1 -0
- package/dist/define/count.js +9 -0
- package/dist/define/count.js.map +1 -0
- package/dist/define/data-table.d.ts +4 -0
- package/dist/define/data-table.d.ts.map +1 -0
- package/dist/define/data-table.js +7 -0
- package/dist/define/data-table.js.map +1 -0
- package/dist/define/graph.d.ts +6 -0
- package/dist/define/graph.d.ts.map +1 -0
- package/dist/define/graph.js +9 -0
- package/dist/define/graph.js.map +1 -0
- package/dist/define/json-tree.d.ts +4 -0
- package/dist/define/json-tree.d.ts.map +1 -0
- package/dist/define/json-tree.js +7 -0
- package/dist/define/json-tree.js.map +1 -0
- package/dist/define/lanes.d.ts +4 -0
- package/dist/define/lanes.d.ts.map +1 -0
- package/dist/define/lanes.js +7 -0
- package/dist/define/lanes.js.map +1 -0
- package/dist/define/markdown.d.ts +4 -0
- package/dist/define/markdown.d.ts.map +1 -0
- package/dist/define/markdown.js +7 -0
- package/dist/define/markdown.js.map +1 -0
- package/dist/define/matrix.d.ts +4 -0
- package/dist/define/matrix.d.ts.map +1 -0
- package/dist/define/matrix.js +7 -0
- package/dist/define/matrix.js.map +1 -0
- package/dist/define/segmented.d.ts +4 -0
- package/dist/define/segmented.d.ts.map +1 -0
- package/dist/define/segmented.js +7 -0
- package/dist/define/segmented.js.map +1 -0
- package/dist/define/tiles.d.ts +5 -0
- package/dist/define/tiles.d.ts.map +1 -0
- package/dist/define/tiles.js +9 -0
- package/dist/define/tiles.js.map +1 -0
- package/dist/define/transcript.d.ts +4 -0
- package/dist/define/transcript.d.ts.map +1 -0
- package/dist/define/transcript.js +7 -0
- package/dist/define/transcript.js.map +1 -0
- package/dist/define/tree.d.ts +4 -0
- package/dist/define/tree.d.ts.map +1 -0
- package/dist/define/tree.js +7 -0
- package/dist/define/tree.js.map +1 -0
- package/dist/graph/arrange.d.ts +43 -0
- package/dist/graph/arrange.d.ts.map +1 -0
- package/dist/graph/arrange.js +390 -0
- package/dist/graph/arrange.js.map +1 -0
- package/dist/graph/card.d.ts +71 -0
- package/dist/graph/card.d.ts.map +1 -0
- package/dist/graph/card.js +185 -0
- package/dist/graph/card.js.map +1 -0
- package/dist/graph/host.d.ts +82 -0
- package/dist/graph/host.d.ts.map +1 -0
- package/dist/graph/host.js +21 -0
- package/dist/graph/host.js.map +1 -0
- package/dist/graph/icons.d.ts +7 -0
- package/dist/graph/icons.d.ts.map +1 -0
- package/dist/graph/icons.js +18 -0
- package/dist/graph/icons.js.map +1 -0
- package/dist/graph/index.d.ts +15 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +17 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/layered-graph.d.ts +226 -0
- package/dist/graph/layered-graph.d.ts.map +1 -0
- package/dist/graph/layered-graph.js +396 -0
- package/dist/graph/layered-graph.js.map +1 -0
- package/dist/graph/layout.d.ts +80 -0
- package/dist/graph/layout.d.ts.map +1 -0
- package/dist/graph/layout.js +264 -0
- package/dist/graph/layout.js.map +1 -0
- package/dist/graph/marks.d.ts +24 -0
- package/dist/graph/marks.d.ts.map +1 -0
- package/dist/graph/marks.js +38 -0
- package/dist/graph/marks.js.map +1 -0
- package/dist/graph/nav.d.ts +14 -0
- package/dist/graph/nav.d.ts.map +1 -0
- package/dist/graph/nav.js +14 -0
- package/dist/graph/nav.js.map +1 -0
- package/dist/graph/pan-zoom.d.ts +80 -0
- package/dist/graph/pan-zoom.d.ts.map +1 -0
- package/dist/graph/pan-zoom.js +191 -0
- package/dist/graph/pan-zoom.js.map +1 -0
- package/dist/graph/paths.d.ts +9 -0
- package/dist/graph/paths.d.ts.map +1 -0
- package/dist/graph/paths.js +44 -0
- package/dist/graph/paths.js.map +1 -0
- package/dist/graph/place-card.d.ts +36 -0
- package/dist/graph/place-card.d.ts.map +1 -0
- package/dist/graph/place-card.js +68 -0
- package/dist/graph/place-card.js.map +1 -0
- package/dist/graph/strings.d.ts +50 -0
- package/dist/graph/strings.d.ts.map +1 -0
- package/dist/graph/strings.js +37 -0
- package/dist/graph/strings.js.map +1 -0
- package/dist/graph/styles.d.ts +2 -0
- package/dist/graph/styles.d.ts.map +1 -0
- package/dist/graph/styles.js +203 -0
- package/dist/graph/styles.js.map +1 -0
- package/dist/graph/types.d.ts +184 -0
- package/dist/graph/types.d.ts.map +1 -0
- package/dist/graph/types.js +2 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/graph/view.d.ts +17 -0
- package/dist/graph/view.d.ts.map +1 -0
- package/dist/graph/view.js +21 -0
- package/dist/graph/view.js.map +1 -0
- package/dist/graph/views/dag.d.ts +10 -0
- package/dist/graph/views/dag.d.ts.map +1 -0
- package/dist/graph/views/dag.js +292 -0
- package/dist/graph/views/dag.js.map +1 -0
- package/dist/graph/views/foot.d.ts +8 -0
- package/dist/graph/views/foot.d.ts.map +1 -0
- package/dist/graph/views/foot.js +103 -0
- package/dist/graph/views/foot.js.map +1 -0
- package/dist/graph/views/node-table.d.ts +17 -0
- package/dist/graph/views/node-table.d.ts.map +1 -0
- package/dist/graph/views/node-table.js +80 -0
- package/dist/graph/views/node-table.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/json/index.d.ts +2 -0
- package/dist/json/index.d.ts.map +1 -0
- package/dist/json/index.js +3 -0
- package/dist/json/index.js.map +1 -0
- package/dist/json/json-tree.d.ts +21 -0
- package/dist/json/json-tree.d.ts.map +1 -0
- package/dist/json/json-tree.js +51 -0
- package/dist/json/json-tree.js.map +1 -0
- package/dist/lanes/index.d.ts +5 -0
- package/dist/lanes/index.d.ts.map +1 -0
- package/dist/lanes/index.js +7 -0
- package/dist/lanes/index.js.map +1 -0
- package/dist/lanes/lanes.d.ts +56 -0
- package/dist/lanes/lanes.d.ts.map +1 -0
- package/dist/lanes/lanes.js +160 -0
- package/dist/lanes/lanes.js.map +1 -0
- package/dist/lanes/stack.d.ts +26 -0
- package/dist/lanes/stack.d.ts.map +1 -0
- package/dist/lanes/stack.js +43 -0
- package/dist/lanes/stack.js.map +1 -0
- package/dist/lanes/styles.d.ts +2 -0
- package/dist/lanes/styles.d.ts.map +1 -0
- package/dist/lanes/styles.js +30 -0
- package/dist/lanes/styles.js.map +1 -0
- package/dist/lanes/types.d.ts +41 -0
- package/dist/lanes/types.d.ts.map +1 -0
- package/dist/lanes/types.js +6 -0
- package/dist/lanes/types.js.map +1 -0
- package/dist/markdown/cae-markdown.d.ts +37 -0
- package/dist/markdown/cae-markdown.d.ts.map +1 -0
- package/dist/markdown/cae-markdown.js +68 -0
- package/dist/markdown/cae-markdown.js.map +1 -0
- package/dist/markdown/highlight.d.ts +2 -0
- package/dist/markdown/highlight.d.ts.map +1 -0
- package/dist/markdown/highlight.js +3 -0
- package/dist/markdown/highlight.js.map +1 -0
- package/dist/markdown/index.d.ts +4 -0
- package/dist/markdown/index.d.ts.map +1 -0
- package/dist/markdown/index.js +6 -0
- package/dist/markdown/index.js.map +1 -0
- package/dist/markdown/markdown.d.ts +4 -0
- package/dist/markdown/markdown.d.ts.map +1 -0
- package/dist/markdown/markdown.js +105 -0
- package/dist/markdown/markdown.js.map +1 -0
- package/dist/matrix/grid-step.d.ts +8 -0
- package/dist/matrix/grid-step.d.ts.map +1 -0
- package/dist/matrix/grid-step.js +69 -0
- package/dist/matrix/grid-step.js.map +1 -0
- package/dist/matrix/index.d.ts +5 -0
- package/dist/matrix/index.d.ts.map +1 -0
- package/dist/matrix/index.js +7 -0
- package/dist/matrix/index.js.map +1 -0
- package/dist/matrix/mark-matrix.d.ts +97 -0
- package/dist/matrix/mark-matrix.d.ts.map +1 -0
- package/dist/matrix/mark-matrix.js +272 -0
- package/dist/matrix/mark-matrix.js.map +1 -0
- package/dist/matrix/styles.d.ts +4 -0
- package/dist/matrix/styles.d.ts.map +1 -0
- package/dist/matrix/styles.js +47 -0
- package/dist/matrix/styles.js.map +1 -0
- package/dist/matrix/types.d.ts +79 -0
- package/dist/matrix/types.d.ts.map +1 -0
- package/dist/matrix/types.js +5 -0
- package/dist/matrix/types.js.map +1 -0
- package/dist/primitives/fact-line.d.ts +14 -0
- package/dist/primitives/fact-line.d.ts.map +1 -0
- package/dist/primitives/fact-line.js +18 -0
- package/dist/primitives/fact-line.js.map +1 -0
- package/dist/primitives/icon.d.ts +14 -0
- package/dist/primitives/icon.d.ts.map +1 -0
- package/dist/primitives/icon.js +19 -0
- package/dist/primitives/icon.js.map +1 -0
- package/dist/primitives/index.d.ts +10 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +13 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/legend.d.ts +28 -0
- package/dist/primitives/legend.d.ts.map +1 -0
- package/dist/primitives/legend.js +28 -0
- package/dist/primitives/legend.js.map +1 -0
- package/dist/primitives/pill.d.ts +23 -0
- package/dist/primitives/pill.d.ts.map +1 -0
- package/dist/primitives/pill.js +40 -0
- package/dist/primitives/pill.js.map +1 -0
- package/dist/primitives/roving-focus.d.ts +47 -0
- package/dist/primitives/roving-focus.d.ts.map +1 -0
- package/dist/primitives/roving-focus.js +111 -0
- package/dist/primitives/roving-focus.js.map +1 -0
- package/dist/primitives/segmented.d.ts +41 -0
- package/dist/primitives/segmented.d.ts.map +1 -0
- package/dist/primitives/segmented.js +88 -0
- package/dist/primitives/segmented.js.map +1 -0
- package/dist/primitives/share-bar.d.ts +37 -0
- package/dist/primitives/share-bar.d.ts.map +1 -0
- package/dist/primitives/share-bar.js +69 -0
- package/dist/primitives/share-bar.js.map +1 -0
- package/dist/primitives/states.d.ts +19 -0
- package/dist/primitives/states.d.ts.map +1 -0
- package/dist/primitives/states.js +11 -0
- package/dist/primitives/states.js.map +1 -0
- package/dist/primitives/window.d.ts +24 -0
- package/dist/primitives/window.d.ts.map +1 -0
- package/dist/primitives/window.js +56 -0
- package/dist/primitives/window.js.map +1 -0
- package/dist/styles/chips.d.ts +2 -0
- package/dist/styles/chips.d.ts.map +1 -0
- package/dist/styles/chips.js +18 -0
- package/dist/styles/chips.js.map +1 -0
- package/dist/styles/facts.d.ts +2 -0
- package/dist/styles/facts.d.ts.map +1 -0
- package/dist/styles/facts.js +7 -0
- package/dist/styles/facts.js.map +1 -0
- package/dist/styles/index.d.ts +16 -0
- package/dist/styles/index.d.ts.map +1 -0
- package/dist/styles/index.js +15 -0
- package/dist/styles/index.js.map +1 -0
- package/dist/styles/layout.d.ts +2 -0
- package/dist/styles/layout.d.ts.map +1 -0
- package/dist/styles/layout.js +33 -0
- package/dist/styles/layout.js.map +1 -0
- package/dist/styles/marks.d.ts +2 -0
- package/dist/styles/marks.d.ts.map +1 -0
- package/dist/styles/marks.js +30 -0
- package/dist/styles/marks.js.map +1 -0
- package/dist/styles/meter.d.ts +3 -0
- package/dist/styles/meter.d.ts.map +1 -0
- package/dist/styles/meter.js +9 -0
- package/dist/styles/meter.js.map +1 -0
- package/dist/styles/motion.d.ts +2 -0
- package/dist/styles/motion.d.ts.map +1 -0
- package/dist/styles/motion.js +27 -0
- package/dist/styles/motion.js.map +1 -0
- package/dist/styles/prose.d.ts +3 -0
- package/dist/styles/prose.d.ts.map +1 -0
- package/dist/styles/prose.js +64 -0
- package/dist/styles/prose.js.map +1 -0
- package/dist/styles/reset.d.ts +2 -0
- package/dist/styles/reset.d.ts.map +1 -0
- package/dist/styles/reset.js +13 -0
- package/dist/styles/reset.js.map +1 -0
- package/dist/styles/status.d.ts +2 -0
- package/dist/styles/status.d.ts.map +1 -0
- package/dist/styles/status.js +52 -0
- package/dist/styles/status.js.map +1 -0
- package/dist/styles/text.d.ts +2 -0
- package/dist/styles/text.d.ts.map +1 -0
- package/dist/styles/text.js +21 -0
- package/dist/styles/text.js.map +1 -0
- package/dist/styles/tokens.d.ts +8 -0
- package/dist/styles/tokens.d.ts.map +1 -0
- package/dist/styles/tokens.js +32 -0
- package/dist/styles/tokens.js.map +1 -0
- package/dist/table/data-table.d.ts +106 -0
- package/dist/table/data-table.d.ts.map +1 -0
- package/dist/table/data-table.js +408 -0
- package/dist/table/data-table.js.map +1 -0
- package/dist/table/index.d.ts +4 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/table/index.js +6 -0
- package/dist/table/index.js.map +1 -0
- package/dist/table/styles.d.ts +2 -0
- package/dist/table/styles.d.ts.map +1 -0
- package/dist/table/styles.js +32 -0
- package/dist/table/styles.js.map +1 -0
- package/dist/table/types.d.ts +48 -0
- package/dist/table/types.d.ts.map +1 -0
- package/dist/table/types.js +30 -0
- package/dist/table/types.js.map +1 -0
- package/dist/themes/boot.d.ts +7 -0
- package/dist/themes/boot.d.ts.map +1 -0
- package/dist/themes/boot.js +14 -0
- package/dist/themes/boot.js.map +1 -0
- package/dist/themes/choice.d.ts +16 -0
- package/dist/themes/choice.d.ts.map +1 -0
- package/dist/themes/choice.js +45 -0
- package/dist/themes/choice.js.map +1 -0
- package/dist/themes/data.d.ts +43 -0
- package/dist/themes/data.d.ts.map +1 -0
- package/dist/themes/data.js +408 -0
- package/dist/themes/data.js.map +1 -0
- package/dist/themes/index.d.ts +7 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +11 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/themes/sheet.d.ts +16 -0
- package/dist/themes/sheet.d.ts.map +1 -0
- package/dist/themes/sheet.js +28 -0
- package/dist/themes/sheet.js.map +1 -0
- package/dist/themes/token-meanings.d.ts +3 -0
- package/dist/themes/token-meanings.d.ts.map +1 -0
- package/dist/themes/token-meanings.js +67 -0
- package/dist/themes/token-meanings.js.map +1 -0
- package/dist/themes/tokens-list.d.ts +14 -0
- package/dist/themes/tokens-list.d.ts.map +1 -0
- package/dist/themes/tokens-list.js +69 -0
- package/dist/themes/tokens-list.js.map +1 -0
- package/dist/tiles/index.d.ts +4 -0
- package/dist/tiles/index.d.ts.map +1 -0
- package/dist/tiles/index.js +6 -0
- package/dist/tiles/index.js.map +1 -0
- package/dist/tiles/stat-tiles.d.ts +40 -0
- package/dist/tiles/stat-tiles.d.ts.map +1 -0
- package/dist/tiles/stat-tiles.js +99 -0
- package/dist/tiles/stat-tiles.js.map +1 -0
- package/dist/tiles/styles.d.ts +2 -0
- package/dist/tiles/styles.d.ts.map +1 -0
- package/dist/tiles/styles.js +23 -0
- package/dist/tiles/styles.js.map +1 -0
- package/dist/tiles/types.d.ts +22 -0
- package/dist/tiles/types.d.ts.map +1 -0
- package/dist/tiles/types.js +2 -0
- package/dist/tiles/types.js.map +1 -0
- package/dist/transcript/follow-scroll.d.ts +21 -0
- package/dist/transcript/follow-scroll.d.ts.map +1 -0
- package/dist/transcript/follow-scroll.js +76 -0
- package/dist/transcript/follow-scroll.js.map +1 -0
- package/dist/transcript/index.d.ts +5 -0
- package/dist/transcript/index.d.ts.map +1 -0
- package/dist/transcript/index.js +7 -0
- package/dist/transcript/index.js.map +1 -0
- package/dist/transcript/styles.d.ts +2 -0
- package/dist/transcript/styles.d.ts.map +1 -0
- package/dist/transcript/styles.js +114 -0
- package/dist/transcript/styles.js.map +1 -0
- package/dist/transcript/tags.d.ts +6 -0
- package/dist/transcript/tags.d.ts.map +1 -0
- package/dist/transcript/tags.js +13 -0
- package/dist/transcript/tags.js.map +1 -0
- package/dist/transcript/tool-card.d.ts +16 -0
- package/dist/transcript/tool-card.d.ts.map +1 -0
- package/dist/transcript/tool-card.js +87 -0
- package/dist/transcript/tool-card.js.map +1 -0
- package/dist/transcript/transcript.d.ts +103 -0
- package/dist/transcript/transcript.d.ts.map +1 -0
- package/dist/transcript/transcript.js +397 -0
- package/dist/transcript/transcript.js.map +1 -0
- package/dist/transcript/types.d.ts +161 -0
- package/dist/transcript/types.d.ts.map +1 -0
- package/dist/transcript/types.js +25 -0
- package/dist/transcript/types.js.map +1 -0
- package/dist/tree/index.d.ts +2 -0
- package/dist/tree/index.d.ts.map +1 -0
- package/dist/tree/index.js +4 -0
- package/dist/tree/index.js.map +1 -0
- package/dist/tree/tree.d.ts +83 -0
- package/dist/tree/tree.d.ts.map +1 -0
- package/dist/tree/tree.js +251 -0
- package/dist/tree/tree.js.map +1 -0
- package/docs/charts.md +58 -0
- package/docs/check-table.md +40 -0
- package/docs/code.md +55 -0
- package/docs/data-table.md +57 -0
- package/docs/examples/charts.ts +61 -0
- package/docs/examples/check-table.ts +19 -0
- package/docs/examples/ci-pipeline.ts +271 -0
- package/docs/examples/code.ts +28 -0
- package/docs/examples/data-table.ts +39 -0
- package/docs/examples/graph.ts +57 -0
- package/docs/examples/lanes.ts +40 -0
- package/docs/examples/matrix.ts +56 -0
- package/docs/examples/page.css +34 -0
- package/docs/examples/segmented.ts +18 -0
- package/docs/examples/status.ts +30 -0
- package/docs/examples/theme.css +54 -0
- package/docs/examples/tiles.ts +27 -0
- package/docs/examples/transcript.ts +59 -0
- package/docs/examples/tree.ts +44 -0
- package/docs/graph.md +112 -0
- package/docs/lanes.md +48 -0
- package/docs/matrix.md +34 -0
- package/docs/page.md +87 -0
- package/docs/primitives.md +57 -0
- package/docs/strings.md +16 -0
- package/docs/theming.md +147 -0
- package/docs/tiles.md +40 -0
- package/docs/transcript.md +73 -0
- package/docs/tree.md +44 -0
- package/docs/tsconfig.json +20 -0
- package/package.json +177 -4
- package/src/charts/bar-chart.ts +74 -0
- package/src/charts/base.ts +188 -0
- package/src/charts/column-chart.ts +153 -0
- package/src/charts/heatmap.ts +129 -0
- package/src/charts/index.ts +10 -0
- package/src/charts/line-chart.ts +128 -0
- package/src/charts/scale.ts +61 -0
- package/src/charts/state-grid.ts +245 -0
- package/src/charts/types.ts +48 -0
- package/src/checks/check-table.ts +85 -0
- package/src/checks/index.ts +5 -0
- package/src/checks/styles.ts +31 -0
- package/src/checks/types.ts +48 -0
- package/src/code/code.ts +199 -0
- package/src/code/highlight.ts +378 -0
- package/src/code/index.ts +4 -0
- package/src/core/clock.ts +46 -0
- package/src/core/define.ts +7 -0
- package/src/core/events.ts +89 -0
- package/src/core/format.ts +25 -0
- package/src/core/frame.ts +5 -0
- package/src/core/strings.ts +11 -0
- package/src/core/tone.ts +14 -0
- package/src/count/count.ts +54 -0
- package/src/count/elapsed.ts +33 -0
- package/src/count/index.ts +4 -0
- package/src/define/all.ts +15 -0
- package/src/define/charts.ts +17 -0
- package/src/define/check-table.ts +9 -0
- package/src/define/code.ts +9 -0
- package/src/define/count.ts +11 -0
- package/src/define/data-table.ts +9 -0
- package/src/define/graph.ts +11 -0
- package/src/define/json-tree.ts +9 -0
- package/src/define/lanes.ts +9 -0
- package/src/define/markdown.ts +9 -0
- package/src/define/matrix.ts +9 -0
- package/src/define/segmented.ts +9 -0
- package/src/define/tiles.ts +11 -0
- package/src/define/transcript.ts +9 -0
- package/src/define/tree.ts +9 -0
- package/src/graph/arrange.ts +399 -0
- package/src/graph/card.ts +209 -0
- package/src/graph/host.ts +100 -0
- package/src/graph/icons.ts +23 -0
- package/src/graph/index.ts +16 -0
- package/src/graph/layered-graph.ts +417 -0
- package/src/graph/layout.ts +331 -0
- package/src/graph/marks.ts +42 -0
- package/src/graph/nav.ts +19 -0
- package/src/graph/pan-zoom.ts +219 -0
- package/src/graph/paths.ts +41 -0
- package/src/graph/place-card.ts +93 -0
- package/src/graph/strings.ts +86 -0
- package/src/graph/styles.ts +204 -0
- package/src/graph/types.ts +202 -0
- package/src/graph/view.ts +28 -0
- package/src/graph/views/dag.ts +294 -0
- package/src/graph/views/foot.ts +109 -0
- package/src/graph/views/node-table.ts +90 -0
- package/src/index.ts +27 -0
- package/src/json/index.ts +2 -0
- package/src/json/json-tree.ts +49 -0
- package/src/lanes/index.ts +6 -0
- package/src/lanes/lanes.ts +143 -0
- package/src/lanes/stack.ts +51 -0
- package/src/lanes/styles.ts +30 -0
- package/src/lanes/types.ts +51 -0
- package/src/markdown/cae-markdown.ts +64 -0
- package/src/markdown/highlight.ts +2 -0
- package/src/markdown/index.ts +5 -0
- package/src/markdown/markdown.ts +110 -0
- package/src/matrix/grid-step.ts +58 -0
- package/src/matrix/index.ts +6 -0
- package/src/matrix/mark-matrix.ts +285 -0
- package/src/matrix/styles.ts +48 -0
- package/src/matrix/types.ts +83 -0
- package/src/primitives/fact-line.ts +26 -0
- package/src/primitives/icon.ts +26 -0
- package/src/primitives/index.ts +12 -0
- package/src/primitives/legend.ts +56 -0
- package/src/primitives/pill.ts +58 -0
- package/src/primitives/roving-focus.ts +138 -0
- package/src/primitives/segmented.ts +92 -0
- package/src/primitives/share-bar.ts +94 -0
- package/src/primitives/states.ts +28 -0
- package/src/primitives/window.ts +65 -0
- package/src/styles/chips.ts +18 -0
- package/src/styles/facts.ts +7 -0
- package/src/styles/index.ts +19 -0
- package/src/styles/layout.ts +33 -0
- package/src/styles/marks.ts +30 -0
- package/src/styles/meter.ts +9 -0
- package/src/styles/motion.ts +27 -0
- package/src/styles/prose.ts +64 -0
- package/src/styles/reset.ts +13 -0
- package/src/styles/status.ts +52 -0
- package/src/styles/text.ts +21 -0
- package/src/styles/tokens.ts +35 -0
- package/src/table/data-table.ts +367 -0
- package/src/table/index.ts +5 -0
- package/src/table/styles.ts +32 -0
- package/src/table/types.ts +73 -0
- package/src/themes/boot.ts +14 -0
- package/src/themes/choice.ts +47 -0
- package/src/themes/data.ts +433 -0
- package/src/themes/index.ts +10 -0
- package/src/themes/sheet.ts +29 -0
- package/src/themes/token-meanings.ts +67 -0
- package/src/themes/tokens-list.ts +82 -0
- package/src/tiles/index.ts +5 -0
- package/src/tiles/stat-tiles.ts +92 -0
- package/src/tiles/styles.ts +23 -0
- package/src/tiles/types.ts +20 -0
- package/src/transcript/follow-scroll.ts +72 -0
- package/src/transcript/index.ts +6 -0
- package/src/transcript/styles.ts +114 -0
- package/src/transcript/tags.ts +18 -0
- package/src/transcript/tool-card.ts +103 -0
- package/src/transcript/transcript.ts +358 -0
- package/src/transcript/types.ts +167 -0
- package/src/tree/index.ts +3 -0
- package/src/tree/tree.ts +263 -0
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
// Syntax highlighting: a small tokenizer for a fixed set of languages, no library.
|
|
2
|
+
// Each language is a few regular expressions and its words; a token is a piece of
|
|
3
|
+
// the text and what it is. `highlight` returns escaped HTML: every token is escaped
|
|
4
|
+
// before it is wrapped, so no input can inject markup.
|
|
5
|
+
import { esc } from '../core/format.js';
|
|
6
|
+
|
|
7
|
+
/** What a token is; '' for text of no colour. */
|
|
8
|
+
export type TokenType =
|
|
9
|
+
| 'comment'
|
|
10
|
+
| 'doc'
|
|
11
|
+
| 'string'
|
|
12
|
+
| 'number'
|
|
13
|
+
| 'keyword'
|
|
14
|
+
| 'constant'
|
|
15
|
+
| 'builtin'
|
|
16
|
+
| 'type'
|
|
17
|
+
| 'function'
|
|
18
|
+
| 'class'
|
|
19
|
+
| 'decorator'
|
|
20
|
+
| 'key'
|
|
21
|
+
| 'tag'
|
|
22
|
+
| 'attribute'
|
|
23
|
+
| 'inserted'
|
|
24
|
+
| 'deleted'
|
|
25
|
+
| 'meta'
|
|
26
|
+
| '';
|
|
27
|
+
|
|
28
|
+
/** A piece of the text and what it is. */
|
|
29
|
+
export interface CodeToken {
|
|
30
|
+
text: string;
|
|
31
|
+
type: TokenType;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** The languages highlighted, by name; `languageOf` reads their other names and file extensions. */
|
|
35
|
+
export const LANGUAGES = ['python', 'json', 'javascript', 'typescript', 'c', 'cpp', 'java', 'go', 'rust', 'shell', 'toml', 'yaml', 'sql', 'xml', 'diff'] as const;
|
|
36
|
+
export type Language = (typeof LANGUAGES)[number];
|
|
37
|
+
|
|
38
|
+
interface Grammar {
|
|
39
|
+
/** The patterns, tried in order at each place: a token type and a regular expression with no capturing group. */
|
|
40
|
+
rules: readonly (readonly [TokenType, string])[];
|
|
41
|
+
keywords?: ReadonlySet<string>;
|
|
42
|
+
constants?: ReadonlySet<string>;
|
|
43
|
+
builtins?: ReadonlySet<string>;
|
|
44
|
+
/** The words after which a name is a function's or a type's own name. */
|
|
45
|
+
defines?: Readonly<Record<string, 'function' | 'class'>>;
|
|
46
|
+
/** A capitalized name (`Path`) is a type. */
|
|
47
|
+
types?: boolean;
|
|
48
|
+
/** The words compare in any case (SQL). */
|
|
49
|
+
caseless?: boolean;
|
|
50
|
+
/** A name; none: the words outside the rules have no colour. */
|
|
51
|
+
name?: string | null;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const words = (s: string): ReadonlySet<string> => new Set(s.split(' '));
|
|
55
|
+
|
|
56
|
+
const LINE_C = ['comment', '//[^\\n]*|/\\*[\\s\\S]*?\\*/'] as const;
|
|
57
|
+
const DQ = '"(?:[^"\\\\\\n]|\\\\.)*"';
|
|
58
|
+
const SQ = "'(?:[^'\\\\\\n]|\\\\.)*'";
|
|
59
|
+
const CHAR = "'(?:[^'\\\\\\n]|\\\\.)'";
|
|
60
|
+
const NUMBER = ['number', "\\b(?:0[xX][\\da-fA-F_']+|0[bB][01_]+|\\d[\\d_']*(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)[uUlLfFn]*\\b"] as const;
|
|
61
|
+
const NAME = '[A-Za-z_$][\\w$]*';
|
|
62
|
+
|
|
63
|
+
const JS_KW =
|
|
64
|
+
'break case catch class const continue debugger default delete do else export extends finally for from function if import in instanceof let new of return static super switch throw try typeof var void while with yield async await as';
|
|
65
|
+
const C_KW =
|
|
66
|
+
'auto break case char const continue default do double else enum extern float for goto if inline int long register restrict return short signed sizeof static struct switch typedef union unsigned void volatile while bool';
|
|
67
|
+
const C_DEFINES = { struct: 'class', class: 'class', enum: 'class', union: 'class' } as const;
|
|
68
|
+
|
|
69
|
+
const GRAMMARS: Record<Language, Grammar> = {
|
|
70
|
+
python: {
|
|
71
|
+
rules: [
|
|
72
|
+
['comment', '#[^\\n]*'],
|
|
73
|
+
['doc', '(?:[rRbBfFuU]{0,2})(?:"""[\\s\\S]*?"""|\'\'\'[\\s\\S]*?\'\'\')'],
|
|
74
|
+
['string', `(?:[rRbBfFuU]{0,2})(?:${DQ}|${SQ})`],
|
|
75
|
+
['decorator', '@[A-Za-z_][\\w.]*'],
|
|
76
|
+
['number', '\\b\\d[\\d_]*(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b'],
|
|
77
|
+
],
|
|
78
|
+
keywords: words(
|
|
79
|
+
'and as assert async await break class continue def del elif else except finally for from global if import in is lambda nonlocal not or pass raise return try while with yield match case',
|
|
80
|
+
),
|
|
81
|
+
constants: words('None True False self cls'),
|
|
82
|
+
builtins: words('str int float bool list dict set tuple bytes object type len range print isinstance super Optional Literal Any Union Path'),
|
|
83
|
+
defines: { def: 'function', class: 'class' },
|
|
84
|
+
types: true,
|
|
85
|
+
name: '[A-Za-z_]\\w*',
|
|
86
|
+
},
|
|
87
|
+
json: {
|
|
88
|
+
rules: [
|
|
89
|
+
['key', `${DQ}(?=\\s*:)`],
|
|
90
|
+
['string', DQ],
|
|
91
|
+
['comment', '//[^\\n]*|/\\*[\\s\\S]*?\\*/'],
|
|
92
|
+
['number', '-?\\b\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b'],
|
|
93
|
+
],
|
|
94
|
+
constants: words('true false null'),
|
|
95
|
+
name: '[A-Za-z_]\\w*',
|
|
96
|
+
},
|
|
97
|
+
javascript: {
|
|
98
|
+
rules: [LINE_C, ['string', `${DQ}|${SQ}|\`(?:[^\`\\\\]|\\\\.)*\``], ['decorator', '@[A-Za-z_$][\\w$.]*'], NUMBER],
|
|
99
|
+
keywords: words(JS_KW),
|
|
100
|
+
constants: words('true false null undefined this NaN Infinity'),
|
|
101
|
+
builtins: words('console Math JSON Promise Array Object String Number Boolean Map Set WeakMap Symbol Error Date RegExp BigInt globalThis window document'),
|
|
102
|
+
defines: { function: 'function', class: 'class' },
|
|
103
|
+
types: true,
|
|
104
|
+
},
|
|
105
|
+
typescript: {
|
|
106
|
+
rules: [LINE_C, ['string', `${DQ}|${SQ}|\`(?:[^\`\\\\]|\\\\.)*\``], ['decorator', '@[A-Za-z_$][\\w$.]*'], NUMBER],
|
|
107
|
+
keywords: words(
|
|
108
|
+
`${JS_KW} interface type enum implements namespace declare abstract private protected public readonly keyof infer is satisfies module override`,
|
|
109
|
+
),
|
|
110
|
+
constants: words('true false null undefined this NaN Infinity'),
|
|
111
|
+
builtins: words(
|
|
112
|
+
'console Math JSON Promise Array Object String Number Boolean Map Set WeakMap Symbol Error Date RegExp BigInt globalThis string number boolean unknown never any void Record Partial Readonly',
|
|
113
|
+
),
|
|
114
|
+
defines: { function: 'function', class: 'class', interface: 'class', type: 'class', enum: 'class' },
|
|
115
|
+
types: true,
|
|
116
|
+
},
|
|
117
|
+
c: {
|
|
118
|
+
rules: [['meta', '^[ \\t]*#[ \\t]*\\w+'], LINE_C, ['string', `${DQ}|${CHAR}`], NUMBER],
|
|
119
|
+
keywords: words(C_KW),
|
|
120
|
+
constants: words('NULL true false'),
|
|
121
|
+
builtins: words('printf fprintf malloc calloc realloc free size_t memcpy memset strlen strcmp FILE'),
|
|
122
|
+
defines: C_DEFINES,
|
|
123
|
+
types: true,
|
|
124
|
+
},
|
|
125
|
+
cpp: {
|
|
126
|
+
rules: [['meta', '^[ \\t]*#[ \\t]*\\w+'], LINE_C, ['string', `${DQ}|${CHAR}`], NUMBER],
|
|
127
|
+
keywords: words(
|
|
128
|
+
`${C_KW} alignas alignof catch class constexpr consteval const_cast decltype delete dynamic_cast explicit export friend mutable namespace new noexcept operator private protected public reinterpret_cast static_assert static_cast template this thread_local throw try typeid typename using virtual co_await co_return co_yield concept requires override final`,
|
|
129
|
+
),
|
|
130
|
+
constants: words('nullptr NULL true false'),
|
|
131
|
+
builtins: words('std string vector map set unordered_map array optional cout cerr endl unique_ptr shared_ptr make_unique make_shared size_t'),
|
|
132
|
+
defines: C_DEFINES,
|
|
133
|
+
types: true,
|
|
134
|
+
},
|
|
135
|
+
java: {
|
|
136
|
+
rules: [LINE_C, ['string', `"""[\\s\\S]*?"""|${DQ}|${CHAR}`], ['decorator', '@[A-Za-z_][\\w.]*'], NUMBER],
|
|
137
|
+
keywords: words(
|
|
138
|
+
'abstract assert boolean break byte case catch char class continue default do double else enum extends final finally float for if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while var record yield sealed permits',
|
|
139
|
+
),
|
|
140
|
+
constants: words('true false null'),
|
|
141
|
+
builtins: words('String System Object Integer Long Double Boolean List Map Set Optional Exception RuntimeException'),
|
|
142
|
+
defines: { class: 'class', interface: 'class', enum: 'class', record: 'class' },
|
|
143
|
+
types: true,
|
|
144
|
+
},
|
|
145
|
+
go: {
|
|
146
|
+
rules: [LINE_C, ['string', `${DQ}|\`[^\`]*\`|${CHAR}`], NUMBER],
|
|
147
|
+
keywords: words(
|
|
148
|
+
'break case chan const continue default defer else fallthrough for func go goto if import interface map package range return select struct switch type var',
|
|
149
|
+
),
|
|
150
|
+
constants: words('true false nil iota'),
|
|
151
|
+
builtins: words(
|
|
152
|
+
'append cap close complex copy delete imag len make new panic print println real recover string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 byte rune error bool float32 float64 any',
|
|
153
|
+
),
|
|
154
|
+
defines: { func: 'function', type: 'class' },
|
|
155
|
+
types: true,
|
|
156
|
+
},
|
|
157
|
+
rust: {
|
|
158
|
+
rules: [
|
|
159
|
+
LINE_C,
|
|
160
|
+
['string', 'b?r#*"[\\s\\S]*?"#*|b?"(?:[^"\\\\]|\\\\.)*"'],
|
|
161
|
+
['string', `b?${CHAR}`],
|
|
162
|
+
['type', "'[A-Za-z_]\\w*\\b(?!')"],
|
|
163
|
+
['decorator', '#!?\\[[^\\]\\n]*\\]'],
|
|
164
|
+
['builtin', '\\b[A-Za-z_]\\w*!(?=\\s*[\\[({])'],
|
|
165
|
+
NUMBER,
|
|
166
|
+
],
|
|
167
|
+
keywords: words(
|
|
168
|
+
'as async await break const continue crate dyn else enum extern fn for if impl in let loop match mod move mut pub ref return self Self static struct super trait type unsafe use where while',
|
|
169
|
+
),
|
|
170
|
+
constants: words('true false None Some Ok Err'),
|
|
171
|
+
builtins: words('Vec String Option Result Box Rc Arc HashMap str usize isize u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 bool char'),
|
|
172
|
+
defines: { fn: 'function', struct: 'class', enum: 'class', trait: 'class', type: 'class' },
|
|
173
|
+
types: true,
|
|
174
|
+
},
|
|
175
|
+
shell: {
|
|
176
|
+
rules: [
|
|
177
|
+
['comment', '(?:^|(?<=\\s))#[^\\n]*'],
|
|
178
|
+
['string', `"(?:[^"\\\\]|\\\\.)*"|'[^']*'`],
|
|
179
|
+
['builtin', '\\$(?:\\{[^}\\n]*\\}|\\w+|[@*#?$!0-9-])'],
|
|
180
|
+
['number', '\\b\\d+\\b'],
|
|
181
|
+
],
|
|
182
|
+
keywords: words('if then else elif fi for while until do done case esac in function select return local export readonly declare set unset shift break continue exit source alias'),
|
|
183
|
+
builtins: words('echo cd printf read test eval exec trap pwd'),
|
|
184
|
+
name: '[A-Za-z_][\\w-]*',
|
|
185
|
+
},
|
|
186
|
+
toml: {
|
|
187
|
+
rules: [
|
|
188
|
+
['comment', '#[^\\n]*'],
|
|
189
|
+
['class', '^[ \\t]*\\[\\[?[^\\]\\n]*\\]\\]?'],
|
|
190
|
+
['key', '^[ \\t]*[A-Za-z0-9_.\\-"\']+(?=[ \\t]*=)'],
|
|
191
|
+
['string', `"""[\\s\\S]*?"""|'''[\\s\\S]*?'''|${DQ}|'[^'\\n]*'`],
|
|
192
|
+
['number', '\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?(?:Z|[+-]\\d{2}:\\d{2})?)?'],
|
|
193
|
+
['number', '[+-]?\\b\\d[\\d_]*(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b'],
|
|
194
|
+
],
|
|
195
|
+
constants: words('true false inf nan'),
|
|
196
|
+
name: '[A-Za-z_]\\w*',
|
|
197
|
+
},
|
|
198
|
+
yaml: {
|
|
199
|
+
rules: [
|
|
200
|
+
['comment', '(?:^|(?<=\\s))#[^\\n]*'],
|
|
201
|
+
['meta', '^(?:---|\\.\\.\\.)(?=\\s|$)'],
|
|
202
|
+
['key', '[A-Za-z0-9_.\\-/]+(?=:(?:[ \\t]|$))'],
|
|
203
|
+
['string', `${DQ}|'(?:[^'\\n]|'')*'`],
|
|
204
|
+
['decorator', '[&*][\\w-]+'],
|
|
205
|
+
['number', '[+-]?\\b\\d[\\d_]*(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b'],
|
|
206
|
+
],
|
|
207
|
+
constants: words('true false null yes no on off True False Null'),
|
|
208
|
+
name: '[A-Za-z_]\\w*',
|
|
209
|
+
},
|
|
210
|
+
sql: {
|
|
211
|
+
rules: [['comment', '--[^\\n]*|/\\*[\\s\\S]*?\\*/'], ['string', "'(?:[^']|'')*'"], ['key', '"(?:[^"]|"")*"'], ['number', '\\b\\d+(?:\\.\\d+)?\\b']],
|
|
212
|
+
keywords: words(
|
|
213
|
+
'select from where and or not insert into values update set delete create table drop alter add column index primary key foreign references join left right inner outer full cross on as group by order having limit offset union all distinct case when then else end is in exists between like returning with view default unique constraint if begin commit rollback transaction asc desc',
|
|
214
|
+
),
|
|
215
|
+
constants: words('true false null'),
|
|
216
|
+
builtins: words('count sum avg min max coalesce cast lower upper now integer int text varchar char boolean date timestamp real numeric bigint serial float double'),
|
|
217
|
+
caseless: true,
|
|
218
|
+
name: '[A-Za-z_]\\w*',
|
|
219
|
+
},
|
|
220
|
+
xml: {
|
|
221
|
+
rules: [
|
|
222
|
+
['comment', '<!--[\\s\\S]*?-->'],
|
|
223
|
+
['meta', '<\\?[\\s\\S]*?\\?>|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>|<![A-Za-z][^>]*>'],
|
|
224
|
+
['tag', '</?[A-Za-z_][\\w:.-]*|/?>'],
|
|
225
|
+
['attribute', '[A-Za-z_:][\\w:.-]*(?=\\s*=\\s*["\'])'],
|
|
226
|
+
['string', '(?<==\\s*)(?:"[^"]*"|\'[^\']*\')'],
|
|
227
|
+
['constant', '&#?\\w+;'],
|
|
228
|
+
],
|
|
229
|
+
name: null,
|
|
230
|
+
},
|
|
231
|
+
diff: {
|
|
232
|
+
rules: [
|
|
233
|
+
['meta', '^(?:diff |index |--- |\\+\\+\\+ |@@)[^\\n]*'],
|
|
234
|
+
['inserted', '^\\+[^\\n]*'],
|
|
235
|
+
['deleted', '^-[^\\n]*'],
|
|
236
|
+
],
|
|
237
|
+
name: null,
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
/** The other names and the file extensions of each language. */
|
|
242
|
+
const ALIASES: Record<string, Language> = {
|
|
243
|
+
py: 'python', python3: 'python', pyi: 'python', pyw: 'python',
|
|
244
|
+
jsonc: 'json', jsonl: 'json', json5: 'json', geojson: 'json',
|
|
245
|
+
js: 'javascript', mjs: 'javascript', cjs: 'javascript', jsx: 'javascript', node: 'javascript',
|
|
246
|
+
ts: 'typescript', tsx: 'typescript', mts: 'typescript', cts: 'typescript',
|
|
247
|
+
h: 'c',
|
|
248
|
+
'c++': 'cpp', cc: 'cpp', cxx: 'cpp', hpp: 'cpp', hh: 'cpp', hxx: 'cpp',
|
|
249
|
+
golang: 'go',
|
|
250
|
+
rs: 'rust',
|
|
251
|
+
sh: 'shell', bash: 'shell', zsh: 'shell', ksh: 'shell', shellscript: 'shell',
|
|
252
|
+
ini: 'toml', cfg: 'toml',
|
|
253
|
+
yml: 'yaml',
|
|
254
|
+
html: 'xml', htm: 'xml', xhtml: 'xml', svg: 'xml', plist: 'xml', xsd: 'xml', xsl: 'xml',
|
|
255
|
+
patch: 'diff',
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
/** The language `hint` names: a language's name, another name of it, a file name or its extension; '' for any other. */
|
|
259
|
+
export function languageOf(hint: string | null | undefined): Language | '' {
|
|
260
|
+
const h = String(hint || '').trim().toLowerCase().replace(/^.*\//, '');
|
|
261
|
+
const known = (s: string): Language | '' => ((LANGUAGES as readonly string[]).includes(s) ? (s as Language) : (ALIASES[s] ?? ''));
|
|
262
|
+
return known(h) || (h.includes('.') ? known(h.replace(/^.*\./, '')) : '');
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
const compiled = new Map<Language, RegExp>();
|
|
266
|
+
|
|
267
|
+
function patternOf(lang: Language): RegExp {
|
|
268
|
+
let re = compiled.get(lang);
|
|
269
|
+
if (!re) {
|
|
270
|
+
const g = GRAMMARS[lang];
|
|
271
|
+
const parts = g.rules.map(([, src]) => `(${src})`);
|
|
272
|
+
const name = g.name === undefined ? NAME : g.name;
|
|
273
|
+
if (name) parts.push(`(${name})`);
|
|
274
|
+
re = new RegExp(parts.join('|'), 'gm');
|
|
275
|
+
compiled.set(lang, re);
|
|
276
|
+
}
|
|
277
|
+
return re;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/** The type of a name: a keyword, a constant, a function's or a type's own name, a built-in or a type; '' for any other. */
|
|
281
|
+
function nameType(g: Grammar, word: string, prev: string): TokenType {
|
|
282
|
+
const w = g.caseless ? word.toLowerCase() : word;
|
|
283
|
+
if (g.keywords?.has(w)) return 'keyword';
|
|
284
|
+
if (g.constants?.has(w)) return 'constant';
|
|
285
|
+
const defined = g.defines?.[prev];
|
|
286
|
+
if (defined) return defined;
|
|
287
|
+
if (g.builtins?.has(w)) return 'builtin';
|
|
288
|
+
if (g.types && /^[A-Z]\w*$/.test(word) && word.length > 1 && /[a-z]/.test(word)) return 'type';
|
|
289
|
+
return '';
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/** `code` as tokens of `hint`'s language (`languageOf`); the whole text as one plain token for any other. */
|
|
293
|
+
export function tokenize(code: string, hint?: string | null): CodeToken[] {
|
|
294
|
+
const lang = languageOf(hint);
|
|
295
|
+
if (!lang || !code) return code ? [{ text: code, type: '' }] : [];
|
|
296
|
+
const g = GRAMMARS[lang];
|
|
297
|
+
const re = patternOf(lang);
|
|
298
|
+
const out: CodeToken[] = [];
|
|
299
|
+
const push = (text: string, type: TokenType) => {
|
|
300
|
+
if (!text) return;
|
|
301
|
+
const last = out[out.length - 1];
|
|
302
|
+
if (last && last.type === type) last.text += text;
|
|
303
|
+
else out.push({ text, type });
|
|
304
|
+
};
|
|
305
|
+
let at = 0;
|
|
306
|
+
let prev = '';
|
|
307
|
+
re.lastIndex = 0;
|
|
308
|
+
for (let m = re.exec(code); m; m = re.exec(code)) {
|
|
309
|
+
if (!m[0]) {
|
|
310
|
+
re.lastIndex++;
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
const gap = code.slice(at, m.index);
|
|
314
|
+
if (/\S/.test(gap)) prev = '';
|
|
315
|
+
push(gap, '');
|
|
316
|
+
at = re.lastIndex;
|
|
317
|
+
const rule = m.findIndex((x, i) => i > 0 && x !== undefined) - 1;
|
|
318
|
+
if (rule < g.rules.length) {
|
|
319
|
+
push(m[0], g.rules[rule]![0]);
|
|
320
|
+
prev = '';
|
|
321
|
+
} else {
|
|
322
|
+
push(m[0], nameType(g, m[0], prev));
|
|
323
|
+
prev = m[0];
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
push(code.slice(at), '');
|
|
327
|
+
return out;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/** The classes of a token's type in the markup (`prose` colours them). */
|
|
331
|
+
const CLASS: Record<Exclude<TokenType, ''>, string> = {
|
|
332
|
+
comment: 'hl-c',
|
|
333
|
+
doc: 'hl-s hl-doc',
|
|
334
|
+
string: 'hl-s',
|
|
335
|
+
number: 'hl-n',
|
|
336
|
+
keyword: 'hl-k',
|
|
337
|
+
constant: 'hl-k hl-const',
|
|
338
|
+
builtin: 'hl-b',
|
|
339
|
+
type: 'hl-t',
|
|
340
|
+
function: 'hl-f',
|
|
341
|
+
class: 'hl-cls',
|
|
342
|
+
decorator: 'hl-d',
|
|
343
|
+
key: 'hl-key',
|
|
344
|
+
tag: 'hl-tag',
|
|
345
|
+
attribute: 'hl-attr',
|
|
346
|
+
inserted: 'hl-ins',
|
|
347
|
+
deleted: 'hl-del',
|
|
348
|
+
meta: 'hl-meta',
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
/** Tokens as escaped HTML, each but plain text in a `<span>` of its type's class. */
|
|
352
|
+
export function tokensHtml(tokens: readonly CodeToken[]): string {
|
|
353
|
+
return tokens.map((t) => (t.type ? `<span class="${CLASS[t.type]}">${esc(t.text)}</span>` : esc(t.text))).join('');
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/** Tokens split into lines at each line break: a token across lines becomes one piece per line. */
|
|
357
|
+
export function tokenLines(tokens: readonly CodeToken[]): CodeToken[][] {
|
|
358
|
+
const lines: CodeToken[][] = [[]];
|
|
359
|
+
for (const t of tokens) {
|
|
360
|
+
const parts = t.text.split('\n');
|
|
361
|
+
parts.forEach((text, i) => {
|
|
362
|
+
if (i > 0) lines.push([]);
|
|
363
|
+
if (text) lines[lines.length - 1]!.push({ text, type: t.type });
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
return lines;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
/** Highlighted, escaped HTML. `hint` is a language (`python`), another name of it, or a file name (`schema.py`); anything unknown is plain. */
|
|
370
|
+
export function highlight(code: string, hint?: string | null): string {
|
|
371
|
+
return tokensHtml(tokenize(code, hint));
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/** Python as highlighted, escaped HTML. */
|
|
375
|
+
export const hlPython = (src: string): string => highlight(src, 'python');
|
|
376
|
+
|
|
377
|
+
/** JSON as highlighted, escaped HTML. */
|
|
378
|
+
export const hlJson = (src: string): string => highlight(src, 'json');
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// One shared once-a-second tick for every element that shows a running clock.
|
|
2
|
+
import type { ReactiveController, ReactiveControllerHost } from 'lit';
|
|
3
|
+
|
|
4
|
+
const hosts = new Set<ReactiveControllerHost>();
|
|
5
|
+
let timer: ReturnType<typeof setInterval> | null = null;
|
|
6
|
+
|
|
7
|
+
function tick(): void {
|
|
8
|
+
for (const h of hosts) h.requestUpdate();
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** Re-renders its host every second while it is connected. */
|
|
12
|
+
export class ClockController implements ReactiveController {
|
|
13
|
+
constructor(private readonly host: ReactiveControllerHost) {
|
|
14
|
+
host.addController(this);
|
|
15
|
+
}
|
|
16
|
+
hostConnected(): void {
|
|
17
|
+
hosts.add(this.host);
|
|
18
|
+
timer ??= setInterval(tick, 1000);
|
|
19
|
+
}
|
|
20
|
+
hostDisconnected(): void {
|
|
21
|
+
hosts.delete(this.host);
|
|
22
|
+
if (!hosts.size && timer) {
|
|
23
|
+
clearInterval(timer);
|
|
24
|
+
timer = null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Start times that stay put. A process reports its age in whole seconds, so
|
|
31
|
+
* `now - age` jitters by a second between updates; the first value seen for an
|
|
32
|
+
* id is kept while later ones stay within a few seconds of it.
|
|
33
|
+
*/
|
|
34
|
+
export class StableStarts {
|
|
35
|
+
private readonly seen = new Map<string, number>();
|
|
36
|
+
at(id: string, ageS: number, now = Date.now()): number {
|
|
37
|
+
const t0 = Math.round(now - ageS * 1000);
|
|
38
|
+
const prev = this.seen.get(id);
|
|
39
|
+
if (prev !== undefined && Math.abs(prev - t0) < 5000) return prev;
|
|
40
|
+
this.seen.set(id, t0);
|
|
41
|
+
return t0;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Shared by every view, so the same process shows the same start everywhere. */
|
|
46
|
+
export const starts = new StableStarts();
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Registration. The element classes are plain classes: a `define/` module (or
|
|
2
|
+
// the host, under a tag name of its own) registers them.
|
|
3
|
+
|
|
4
|
+
/** Registers `cls` as `tag`, unless the tag is already registered. */
|
|
5
|
+
export function defineElement(tag: string, cls: CustomElementConstructor): void {
|
|
6
|
+
if (!customElements.get(tag)) customElements.define(tag, cls);
|
|
7
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// The events the generic elements send. Each bubbles and crosses shadow roots
|
|
2
|
+
// (`composed`), so a host listens on any ancestor. An element states what the
|
|
3
|
+
// reader did; its host decides what happens.
|
|
4
|
+
|
|
5
|
+
/** A control's value changed (a segmented control). */
|
|
6
|
+
export interface ChangeDetail {
|
|
7
|
+
value: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** An item, by its id (a row's key). */
|
|
11
|
+
export interface ItemDetail {
|
|
12
|
+
id: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** An item opened (`open`) or closed. */
|
|
16
|
+
export interface ToggleDetail {
|
|
17
|
+
id: string;
|
|
18
|
+
open: boolean;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** The item chosen as the selection; null when the selection was cleared. */
|
|
22
|
+
export interface SelectDetail {
|
|
23
|
+
id: string | null;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** A column to order the items by, and the direction. */
|
|
27
|
+
export interface SortDetail {
|
|
28
|
+
id: string;
|
|
29
|
+
direction: 'asc' | 'desc';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** A view of the same data: a drawing, or a table. */
|
|
33
|
+
export interface ViewDetail {
|
|
34
|
+
view: 'graph' | 'table';
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** A named action of an item (a tile's link): the item's id and the action's id. */
|
|
38
|
+
export interface ActionDetail {
|
|
39
|
+
id: string;
|
|
40
|
+
action: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** A section of a list of sections (a transcript's), by its 0-based index; null: the latest. */
|
|
44
|
+
export interface SectionDetail {
|
|
45
|
+
index: number | null;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Every `cae-*` event and its detail. */
|
|
49
|
+
export interface CaeEventMap {
|
|
50
|
+
'cae-change': ChangeDetail;
|
|
51
|
+
/** The item's primary action (a click or Enter on an item that has one). */
|
|
52
|
+
'cae-activate': ItemDetail;
|
|
53
|
+
'cae-select': SelectDetail;
|
|
54
|
+
'cae-sort': SortDetail;
|
|
55
|
+
'cae-action': ActionDetail;
|
|
56
|
+
/** Enter an item's inner view (a cluster, a node or a mark that has one). */
|
|
57
|
+
'cae-drill': ItemDetail;
|
|
58
|
+
/** The reader opened or closed an item (`open`: it is to be drawn open). */
|
|
59
|
+
'cae-toggle': ToggleDetail;
|
|
60
|
+
/** The reader chose another view. */
|
|
61
|
+
'cae-view-change': ViewDetail;
|
|
62
|
+
/** The reader picked a section (null: follow the latest). */
|
|
63
|
+
'cae-section-change': SectionDetail;
|
|
64
|
+
/** The section on screen changed (-1: none). */
|
|
65
|
+
'cae-section-shown': { index: number };
|
|
66
|
+
/** The reader asked for the content before what is loaded. */
|
|
67
|
+
'cae-load-earlier': Record<string, never>;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
declare global {
|
|
71
|
+
interface HTMLElementEventMap {
|
|
72
|
+
'cae-change': CustomEvent<ChangeDetail>;
|
|
73
|
+
'cae-activate': CustomEvent<ItemDetail>;
|
|
74
|
+
'cae-select': CustomEvent<SelectDetail>;
|
|
75
|
+
'cae-sort': CustomEvent<SortDetail>;
|
|
76
|
+
'cae-action': CustomEvent<ActionDetail>;
|
|
77
|
+
'cae-drill': CustomEvent<ItemDetail>;
|
|
78
|
+
'cae-toggle': CustomEvent<ToggleDetail>;
|
|
79
|
+
'cae-view-change': CustomEvent<ViewDetail>;
|
|
80
|
+
'cae-section-change': CustomEvent<SectionDetail>;
|
|
81
|
+
'cae-section-shown': CustomEvent<{ index: number }>;
|
|
82
|
+
'cae-load-earlier': CustomEvent<Record<string, never>>;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** Sends a `cae-*` event from `el`: bubbling and composed. */
|
|
87
|
+
export function emit<K extends keyof CaeEventMap>(el: EventTarget, name: K, detail: CaeEventMap[K]): boolean {
|
|
88
|
+
return el.dispatchEvent(new CustomEvent(name, { detail, bubbles: true, composed: true }));
|
|
89
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Formats that read the same in every language: a duration, and HTML escaping
|
|
2
|
+
// for the few places that build markup as a string.
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A duration in seconds, in one format: `<0.1s`, `4.2s`, `37s`, `2m 05s`,
|
|
6
|
+
* `1h 02m`; '—' when unknown.
|
|
7
|
+
*/
|
|
8
|
+
export function fmtDur(s: number | null | undefined): string {
|
|
9
|
+
if (s === null || s === undefined || Number.isNaN(s)) return '—';
|
|
10
|
+
const v = Math.max(0, s);
|
|
11
|
+
if (v < 0.05) return '<0.1s';
|
|
12
|
+
if (v < 9.95) return `${v.toFixed(1)}s`;
|
|
13
|
+
const r = Math.round(v);
|
|
14
|
+
if (r < 60) return `${r}s`;
|
|
15
|
+
if (r < 3600) return `${Math.floor(r / 60)}m ${String(r % 60).padStart(2, '0')}s`;
|
|
16
|
+
return `${Math.floor(r / 3600)}h ${String(Math.floor((r % 3600) / 60)).padStart(2, '0')}m`;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** HTML-escape a text for the few places that build markup as a string (markdown, highlighting). */
|
|
20
|
+
export const esc = (s: string | number | null | undefined): string =>
|
|
21
|
+
String(s ?? '')
|
|
22
|
+
.replace(/&/g, '&')
|
|
23
|
+
.replace(/</g, '<')
|
|
24
|
+
.replace(/>/g, '>')
|
|
25
|
+
.replace(/"/g, '"');
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// An element's visible words. Each element takes `strings: Partial<XStrings>`
|
|
2
|
+
// and falls back to its English defaults (`DEFAULT_X_STRINGS`) for a word it is
|
|
3
|
+
// not given; a word with a number is a function, so plural rules and word order
|
|
4
|
+
// belong to the host.
|
|
5
|
+
|
|
6
|
+
/** `given` over `defaults`: a word left out (or undefined) keeps its default. */
|
|
7
|
+
export function withDefaults<T extends object>(defaults: Readonly<T>, given: Partial<T> | null | undefined): T {
|
|
8
|
+
const out = { ...defaults };
|
|
9
|
+
if (given) for (const [k, v] of Object.entries(given)) if (v !== undefined) (out as Record<string, unknown>)[k] = v;
|
|
10
|
+
return out;
|
|
11
|
+
}
|
package/src/core/tone.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// A tone: the status colour a value takes. The names are the token names
|
|
2
|
+
// (`--ca-status-<tone>`); `neutral` is the text colour, with no `data-tone`.
|
|
3
|
+
// An element shows a tone as `data-tone` (styles/status.ts draws it).
|
|
4
|
+
import { nothing } from 'lit';
|
|
5
|
+
|
|
6
|
+
/** A status colour, or `neutral` for the text colour. */
|
|
7
|
+
export type Tone = 'failed' | 'attention' | 'done' | 'running' | 'muted' | 'neutral';
|
|
8
|
+
|
|
9
|
+
/** Every tone with a status colour (a `data-tone` value): each but `neutral`. */
|
|
10
|
+
export const TONES: readonly Exclude<Tone, 'neutral'>[] = ['failed', 'attention', 'done', 'running', 'muted'];
|
|
11
|
+
|
|
12
|
+
/** The `data-tone` attribute of a tone: none for `neutral` (or no tone). */
|
|
13
|
+
export const toneAttr = (tone: Tone | null | undefined): Exclude<Tone, 'neutral'> | typeof nothing =>
|
|
14
|
+
tone && tone !== 'neutral' ? tone : nothing;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { LitElement, type PropertyValues } from 'lit';
|
|
2
|
+
import { property, state } from 'lit/decorators.js';
|
|
3
|
+
|
|
4
|
+
const reducedMotion = () => globalThis.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A number that counts up (or down) to its new value when it changes; at once
|
|
8
|
+
* for a reader who asks for reduced motion.
|
|
9
|
+
*
|
|
10
|
+
* @tagname cae-count
|
|
11
|
+
*/
|
|
12
|
+
export class CaeCount extends LitElement {
|
|
13
|
+
@property({ type: Number }) value = 0;
|
|
14
|
+
@state() private shown = 0;
|
|
15
|
+
private frame = 0;
|
|
16
|
+
|
|
17
|
+
protected override createRenderRoot() {
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
protected override willUpdate(changed: PropertyValues<this>): void {
|
|
22
|
+
if (!changed.has('value')) return;
|
|
23
|
+
const from = this.shown;
|
|
24
|
+
const to = this.value;
|
|
25
|
+
cancelAnimationFrame(this.frame);
|
|
26
|
+
if (reducedMotion() || from === to || !Number.isFinite(to) || !this.isConnected) {
|
|
27
|
+
this.shown = to;
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const t0 = performance.now();
|
|
31
|
+
const tick = (now: number) => {
|
|
32
|
+
const k = Math.min(1, (now - t0) / 700);
|
|
33
|
+
this.shown = Math.round(from + (to - from) * (1 - Math.pow(1 - k, 3)));
|
|
34
|
+
if (k < 1) this.frame = requestAnimationFrame(tick);
|
|
35
|
+
};
|
|
36
|
+
this.frame = requestAnimationFrame(tick);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
override disconnectedCallback(): void {
|
|
40
|
+
super.disconnectedCallback();
|
|
41
|
+
cancelAnimationFrame(this.frame);
|
|
42
|
+
this.shown = this.value;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
override render() {
|
|
46
|
+
return String(this.shown);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
declare global {
|
|
51
|
+
interface HTMLElementTagNameMap {
|
|
52
|
+
'cae-count': CaeCount;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
import { property } from 'lit/decorators.js';
|
|
3
|
+
import { ClockController } from '../core/clock.js';
|
|
4
|
+
import { fmtDur } from '../core/format.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Time since `since` (epoch ms), ticking every second: `42s`, `3m 05s`, `1h 02m`.
|
|
8
|
+
*
|
|
9
|
+
* @tagname cae-elapsed
|
|
10
|
+
*/
|
|
11
|
+
export class CaeElapsed extends LitElement {
|
|
12
|
+
@property({ type: Number }) since = 0;
|
|
13
|
+
|
|
14
|
+
constructor() {
|
|
15
|
+
super();
|
|
16
|
+
new ClockController(this);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Plain text in the light DOM: it takes the font and colour of where it is put.
|
|
20
|
+
protected override createRenderRoot() {
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
override render() {
|
|
25
|
+
return this.since ? fmtDur((Date.now() - this.since) / 1000) : '';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
declare global {
|
|
30
|
+
interface HTMLElementTagNameMap {
|
|
31
|
+
'cae-elapsed': CaeElapsed;
|
|
32
|
+
}
|
|
33
|
+
}
|