@react-x11/components 0.1.0 → 0.2.1
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 +979 -21
- package/dist/ansi/cast.d.ts +48 -0
- package/dist/ansi/cast.d.ts.map +1 -0
- package/dist/ansi/cast.js +135 -0
- package/dist/ansi/cast.js.map +1 -0
- package/dist/ansi/index.d.ts +10 -0
- package/dist/ansi/index.d.ts.map +1 -0
- package/dist/ansi/index.js +27 -0
- package/dist/ansi/index.js.map +1 -0
- package/dist/ansi/palette.d.ts +79 -0
- package/dist/ansi/palette.d.ts.map +1 -0
- package/dist/ansi/palette.js +155 -0
- package/dist/ansi/palette.js.map +1 -0
- package/dist/ansi/parse.d.ts +114 -0
- package/dist/ansi/parse.d.ts.map +1 -0
- package/dist/ansi/parse.js +687 -0
- package/dist/ansi/parse.js.map +1 -0
- package/dist/ansi/sgr.d.ts +87 -0
- package/dist/ansi/sgr.d.ts.map +1 -0
- package/dist/ansi/sgr.js +302 -0
- package/dist/ansi/sgr.js.map +1 -0
- package/dist/ansi/utf8.d.ts +15 -0
- package/dist/ansi/utf8.d.ts.map +1 -0
- package/dist/ansi/utf8.js +82 -0
- package/dist/ansi/utf8.js.map +1 -0
- package/dist/calendar/Calendar.d.ts +136 -0
- package/dist/calendar/Calendar.d.ts.map +1 -0
- package/dist/calendar/Calendar.js +460 -0
- package/dist/calendar/Calendar.js.map +1 -0
- package/dist/calendar/DatePicker.d.ts +52 -0
- package/dist/calendar/DatePicker.d.ts.map +1 -0
- package/dist/calendar/DatePicker.js +257 -0
- package/dist/calendar/DatePicker.js.map +1 -0
- package/dist/calendar/dates.d.ts +90 -0
- package/dist/calendar/dates.d.ts.map +1 -0
- package/dist/calendar/dates.js +236 -0
- package/dist/calendar/dates.js.map +1 -0
- package/dist/calendar/index.d.ts +8 -0
- package/dist/calendar/index.d.ts.map +1 -0
- package/dist/calendar/index.js +15 -0
- package/dist/calendar/index.js.map +1 -0
- package/dist/charts/components.d.ts +141 -0
- package/dist/charts/components.d.ts.map +1 -0
- package/dist/charts/components.js +580 -0
- package/dist/charts/components.js.map +1 -0
- package/dist/charts/data.d.ts +198 -0
- package/dist/charts/data.d.ts.map +1 -0
- package/dist/charts/data.js +616 -0
- package/dist/charts/data.js.map +1 -0
- package/dist/charts/hx.d.ts +21 -0
- package/dist/charts/hx.d.ts.map +1 -0
- package/dist/charts/hx.js +15 -0
- package/dist/charts/hx.js.map +1 -0
- package/dist/charts/index.d.ts +27 -0
- package/dist/charts/index.d.ts.map +1 -0
- package/dist/charts/index.js +38 -0
- package/dist/charts/index.js.map +1 -0
- package/dist/charts/node.d.ts +96 -0
- package/dist/charts/node.d.ts.map +1 -0
- package/dist/charts/node.js +720 -0
- package/dist/charts/node.js.map +1 -0
- package/dist/charts/render.d.ts +153 -0
- package/dist/charts/render.d.ts.map +1 -0
- package/dist/charts/render.js +762 -0
- package/dist/charts/render.js.map +1 -0
- package/dist/charts/scale.d.ts +42 -0
- package/dist/charts/scale.d.ts.map +1 -0
- package/dist/charts/scale.js +173 -0
- package/dist/charts/scale.js.map +1 -0
- package/dist/charts/spec.d.ts +91 -0
- package/dist/charts/spec.d.ts.map +1 -0
- package/dist/charts/spec.js +33 -0
- package/dist/charts/spec.js.map +1 -0
- package/dist/charts/timers.d.ts +6 -0
- package/dist/charts/timers.d.ts.map +1 -0
- package/dist/charts/timers.js +14 -0
- package/dist/charts/timers.js.map +1 -0
- package/dist/code/hx.d.ts +24 -0
- package/dist/code/hx.d.ts.map +1 -0
- package/dist/code/hx.js +25 -0
- package/dist/code/hx.js.map +1 -0
- package/dist/code/index.d.ts +45 -0
- package/dist/code/index.d.ts.map +1 -0
- package/dist/code/index.js +93 -0
- package/dist/code/index.js.map +1 -0
- package/dist/code-editor/completion.d.ts +26 -0
- package/dist/code-editor/completion.d.ts.map +1 -0
- package/dist/code-editor/completion.js +129 -0
- package/dist/code-editor/completion.js.map +1 -0
- package/dist/code-editor/doc.d.ts +35 -0
- package/dist/code-editor/doc.d.ts.map +1 -0
- package/dist/code-editor/doc.js +162 -0
- package/dist/code-editor/doc.js.map +1 -0
- package/dist/code-editor/hx.d.ts +13 -0
- package/dist/code-editor/hx.d.ts.map +1 -0
- package/dist/code-editor/hx.js +10 -0
- package/dist/code-editor/hx.js.map +1 -0
- package/dist/code-editor/index.d.ts +88 -0
- package/dist/code-editor/index.d.ts.map +1 -0
- package/dist/code-editor/index.js +401 -0
- package/dist/code-editor/index.js.map +1 -0
- package/dist/code-editor/node.d.ts +343 -0
- package/dist/code-editor/node.d.ts.map +1 -0
- package/dist/code-editor/node.js +1521 -0
- package/dist/code-editor/node.js.map +1 -0
- package/dist/code-language/hljs.d.ts +47 -0
- package/dist/code-language/hljs.d.ts.map +1 -0
- package/dist/code-language/hljs.js +211 -0
- package/dist/code-language/hljs.js.map +1 -0
- package/dist/code-language/index.d.ts +22 -0
- package/dist/code-language/index.d.ts.map +1 -0
- package/dist/code-language/index.js +20 -0
- package/dist/code-language/index.js.map +1 -0
- package/dist/code-language/languages/glsl.d.ts +4 -0
- package/dist/code-language/languages/glsl.d.ts.map +1 -0
- package/dist/code-language/languages/glsl.js +99 -0
- package/dist/code-language/languages/glsl.js.map +1 -0
- package/dist/code-language/languages/javascript.d.ts +10 -0
- package/dist/code-language/languages/javascript.d.ts.map +1 -0
- package/dist/code-language/languages/javascript.js +360 -0
- package/dist/code-language/languages/javascript.js.map +1 -0
- package/dist/code-language/languages/json.d.ts +4 -0
- package/dist/code-language/languages/json.d.ts.map +1 -0
- package/dist/code-language/languages/json.js +68 -0
- package/dist/code-language/languages/json.js.map +1 -0
- package/dist/code-language/languages/shell.d.ts +4 -0
- package/dist/code-language/languages/shell.d.ts.map +1 -0
- package/dist/code-language/languages/shell.js +189 -0
- package/dist/code-language/languages/shell.js.map +1 -0
- package/dist/code-language/languages/sql.d.ts +11 -0
- package/dist/code-language/languages/sql.d.ts.map +1 -0
- package/dist/code-language/languages/sql.js +133 -0
- package/dist/code-language/languages/sql.js.map +1 -0
- package/dist/code-language/lezer.d.ts +24 -0
- package/dist/code-language/lezer.d.ts.map +1 -0
- package/dist/code-language/lezer.js +148 -0
- package/dist/code-language/lezer.js.map +1 -0
- package/dist/code-language/registry.d.ts +19 -0
- package/dist/code-language/registry.d.ts.map +1 -0
- package/dist/code-language/registry.js +56 -0
- package/dist/code-language/registry.js.map +1 -0
- package/dist/code-language/runs.d.ts +35 -0
- package/dist/code-language/runs.d.ts.map +1 -0
- package/dist/code-language/runs.js +88 -0
- package/dist/code-language/runs.js.map +1 -0
- package/dist/code-language/stream.d.ts +70 -0
- package/dist/code-language/stream.d.ts.map +1 -0
- package/dist/code-language/stream.js +243 -0
- package/dist/code-language/stream.js.map +1 -0
- package/dist/code-language/textmate.d.ts +27 -0
- package/dist/code-language/textmate.d.ts.map +1 -0
- package/dist/code-language/textmate.js +86 -0
- package/dist/code-language/textmate.js.map +1 -0
- package/dist/code-language/theme.d.ts +26 -0
- package/dist/code-language/theme.d.ts.map +1 -0
- package/dist/code-language/theme.js +108 -0
- package/dist/code-language/theme.js.map +1 -0
- package/dist/code-language/timers.d.ts +7 -0
- package/dist/code-language/timers.d.ts.map +1 -0
- package/dist/code-language/timers.js +22 -0
- package/dist/code-language/timers.js.map +1 -0
- package/dist/code-language/types.d.ts +173 -0
- package/dist/code-language/types.d.ts.map +1 -0
- package/dist/code-language/types.js +41 -0
- package/dist/code-language/types.js.map +1 -0
- package/dist/codeblock/index.d.ts +69 -0
- package/dist/codeblock/index.d.ts.map +1 -0
- package/dist/codeblock/index.js +85 -0
- package/dist/codeblock/index.js.map +1 -0
- package/dist/color-picker/ColorField.d.ts +39 -0
- package/dist/color-picker/ColorField.d.ts.map +1 -0
- package/dist/color-picker/ColorField.js +239 -0
- package/dist/color-picker/ColorField.js.map +1 -0
- package/dist/color-picker/ColorPicker.d.ts +109 -0
- package/dist/color-picker/ColorPicker.d.ts.map +1 -0
- package/dist/color-picker/ColorPicker.js +757 -0
- package/dist/color-picker/ColorPicker.js.map +1 -0
- package/dist/color-picker/color.d.ts +105 -0
- package/dist/color-picker/color.d.ts.map +1 -0
- package/dist/color-picker/color.js +313 -0
- package/dist/color-picker/color.js.map +1 -0
- package/dist/color-picker/index.d.ts +8 -0
- package/dist/color-picker/index.d.ts.map +1 -0
- package/dist/color-picker/index.js +19 -0
- package/dist/color-picker/index.js.map +1 -0
- package/dist/desktop-calendar/eds.d.ts +102 -0
- package/dist/desktop-calendar/eds.d.ts.map +1 -0
- package/dist/desktop-calendar/eds.js +356 -0
- package/dist/desktop-calendar/eds.js.map +1 -0
- package/dist/desktop-calendar/ical.d.ts +63 -0
- package/dist/desktop-calendar/ical.d.ts.map +1 -0
- package/dist/desktop-calendar/ical.js +57 -0
- package/dist/desktop-calendar/ical.js.map +1 -0
- package/dist/desktop-calendar/index.d.ts +72 -0
- package/dist/desktop-calendar/index.d.ts.map +1 -0
- package/dist/desktop-calendar/index.js +213 -0
- package/dist/desktop-calendar/index.js.map +1 -0
- package/dist/embed/client.d.ts +121 -0
- package/dist/embed/client.d.ts.map +1 -0
- package/dist/embed/client.js +203 -0
- package/dist/embed/client.js.map +1 -0
- package/dist/embed/host.d.ts +96 -0
- package/dist/embed/host.d.ts.map +1 -0
- package/dist/embed/host.js +266 -0
- package/dist/embed/host.js.map +1 -0
- package/dist/embed/index.d.ts +5 -0
- package/dist/embed/index.d.ts.map +1 -0
- package/dist/embed/index.js +13 -0
- package/dist/embed/index.js.map +1 -0
- package/dist/embed/timers.d.ts +6 -0
- package/dist/embed/timers.d.ts.map +1 -0
- package/dist/embed/timers.js +16 -0
- package/dist/embed/timers.js.map +1 -0
- package/dist/flow/draw.d.ts +45 -0
- package/dist/flow/draw.d.ts.map +1 -0
- package/dist/flow/draw.js +295 -0
- package/dist/flow/draw.js.map +1 -0
- package/dist/flow/index.d.ts +64 -0
- package/dist/flow/index.d.ts.map +1 -0
- package/dist/flow/index.js +306 -0
- package/dist/flow/index.js.map +1 -0
- package/dist/flow/model.d.ts +158 -0
- package/dist/flow/model.d.ts.map +1 -0
- package/dist/flow/model.js +566 -0
- package/dist/flow/model.js.map +1 -0
- package/dist/flow/node.d.ts +429 -0
- package/dist/flow/node.d.ts.map +1 -0
- package/dist/flow/node.js +3025 -0
- package/dist/flow/node.js.map +1 -0
- package/dist/flow/paths.d.ts +43 -0
- package/dist/flow/paths.d.ts.map +1 -0
- package/dist/flow/paths.js +327 -0
- package/dist/flow/paths.js.map +1 -0
- package/dist/flow/types.d.ts +561 -0
- package/dist/flow/types.d.ts.map +1 -0
- package/dist/flow/types.js +2 -0
- package/dist/flow/types.js.map +1 -0
- package/dist/formula/hx.d.ts +24 -0
- package/dist/formula/hx.d.ts.map +1 -0
- package/dist/formula/hx.js +25 -0
- package/dist/formula/hx.js.map +1 -0
- package/dist/formula/index.d.ts +74 -0
- package/dist/formula/index.d.ts.map +1 -0
- package/dist/formula/index.js +155 -0
- package/dist/formula/index.js.map +1 -0
- package/dist/formula/katex.d.ts +78 -0
- package/dist/formula/katex.d.ts.map +1 -0
- package/dist/formula/katex.js +130 -0
- package/dist/formula/katex.js.map +1 -0
- package/dist/formula/layout.d.ts +103 -0
- package/dist/formula/layout.d.ts.map +1 -0
- package/dist/formula/layout.js +716 -0
- package/dist/formula/layout.js.map +1 -0
- package/dist/formula/node.d.ts +50 -0
- package/dist/formula/node.d.ts.map +1 -0
- package/dist/formula/node.js +351 -0
- package/dist/formula/node.js.map +1 -0
- package/dist/html/controls.d.ts +48 -0
- package/dist/html/controls.d.ts.map +1 -0
- package/dist/html/controls.js +195 -0
- package/dist/html/controls.js.map +1 -0
- package/dist/html/css/cascade.d.ts +51 -0
- package/dist/html/css/cascade.d.ts.map +1 -0
- package/dist/html/css/cascade.js +552 -0
- package/dist/html/css/cascade.js.map +1 -0
- package/dist/html/css/parse.d.ts +74 -0
- package/dist/html/css/parse.d.ts.map +1 -0
- package/dist/html/css/parse.js +464 -0
- package/dist/html/css/parse.js.map +1 -0
- package/dist/html/css/style.d.ts +142 -0
- package/dist/html/css/style.d.ts.map +1 -0
- package/dist/html/css/style.js +1145 -0
- package/dist/html/css/style.js.map +1 -0
- package/dist/html/css/ua.d.ts +5 -0
- package/dist/html/css/ua.d.ts.map +1 -0
- package/dist/html/css/ua.js +171 -0
- package/dist/html/css/ua.js.map +1 -0
- package/dist/html/css/values.d.ts +78 -0
- package/dist/html/css/values.d.ts.map +1 -0
- package/dist/html/css/values.js +330 -0
- package/dist/html/css/values.js.map +1 -0
- package/dist/html/dom.d.ts +112 -0
- package/dist/html/dom.d.ts.map +1 -0
- package/dist/html/dom.js +374 -0
- package/dist/html/dom.js.map +1 -0
- package/dist/html/hx.d.ts +24 -0
- package/dist/html/hx.d.ts.map +1 -0
- package/dist/html/hx.js +29 -0
- package/dist/html/hx.js.map +1 -0
- package/dist/html/index.d.ts +137 -0
- package/dist/html/index.d.ts.map +1 -0
- package/dist/html/index.js +339 -0
- package/dist/html/index.js.map +1 -0
- package/dist/html/layout/block.d.ts +58 -0
- package/dist/html/layout/block.d.ts.map +1 -0
- package/dist/html/layout/block.js +724 -0
- package/dist/html/layout/block.js.map +1 -0
- package/dist/html/layout/boxes.d.ts +261 -0
- package/dist/html/layout/boxes.d.ts.map +1 -0
- package/dist/html/layout/boxes.js +725 -0
- package/dist/html/layout/boxes.js.map +1 -0
- package/dist/html/layout/flex.d.ts +16 -0
- package/dist/html/layout/flex.d.ts.map +1 -0
- package/dist/html/layout/flex.js +242 -0
- package/dist/html/layout/flex.js.map +1 -0
- package/dist/html/layout/floats.d.ts +50 -0
- package/dist/html/layout/floats.d.ts.map +1 -0
- package/dist/html/layout/floats.js +110 -0
- package/dist/html/layout/floats.js.map +1 -0
- package/dist/html/layout/inline.d.ts +44 -0
- package/dist/html/layout/inline.d.ts.map +1 -0
- package/dist/html/layout/inline.js +700 -0
- package/dist/html/layout/inline.js.map +1 -0
- package/dist/html/layout/table.d.ts +5 -0
- package/dist/html/layout/table.d.ts.map +1 -0
- package/dist/html/layout/table.js +340 -0
- package/dist/html/layout/table.js.map +1 -0
- package/dist/html/node.d.ts +149 -0
- package/dist/html/node.d.ts.map +1 -0
- package/dist/html/node.js +861 -0
- package/dist/html/node.js.map +1 -0
- package/dist/html/paint.d.ts +48 -0
- package/dist/html/paint.d.ts.map +1 -0
- package/dist/html/paint.js +495 -0
- package/dist/html/paint.js.map +1 -0
- package/dist/html/resources.d.ts +48 -0
- package/dist/html/resources.d.ts.map +1 -0
- package/dist/html/resources.js +156 -0
- package/dist/html/resources.js.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +92 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/heights.d.ts +88 -0
- package/dist/internal/heights.d.ts.map +1 -0
- package/dist/internal/heights.js +203 -0
- package/dist/internal/heights.js.map +1 -0
- package/dist/internal/hx.d.ts +24 -0
- package/dist/internal/hx.d.ts.map +1 -0
- package/dist/internal/hx.js +27 -0
- package/dist/internal/hx.js.map +1 -0
- package/dist/internal/scroll.d.ts +62 -0
- package/dist/internal/scroll.d.ts.map +1 -0
- package/dist/internal/scroll.js +224 -0
- package/dist/internal/scroll.js.map +1 -0
- package/dist/internal/text.d.ts +6 -0
- package/dist/internal/text.d.ts.map +1 -0
- package/dist/internal/text.js +44 -0
- package/dist/internal/text.js.map +1 -0
- package/dist/internal/timers.d.ts +8 -0
- package/dist/internal/timers.d.ts.map +1 -0
- package/dist/internal/timers.js +22 -0
- package/dist/internal/timers.js.map +1 -0
- package/dist/internal/widget.d.ts +40 -0
- package/dist/internal/widget.d.ts.map +1 -0
- package/dist/internal/widget.js +44 -0
- package/dist/internal/widget.js.map +1 -0
- package/dist/markdown/ast.d.ts +126 -0
- package/dist/markdown/ast.d.ts.map +1 -0
- package/dist/markdown/ast.js +8 -0
- package/dist/markdown/ast.js.map +1 -0
- package/dist/markdown/hx.d.ts +24 -0
- package/dist/markdown/hx.d.ts.map +1 -0
- package/dist/markdown/hx.js +25 -0
- package/dist/markdown/hx.js.map +1 -0
- package/dist/markdown/index.d.ts +90 -0
- package/dist/markdown/index.d.ts.map +1 -0
- package/dist/markdown/index.js +413 -0
- package/dist/markdown/index.js.map +1 -0
- package/dist/markdown/parse.d.ts +8 -0
- package/dist/markdown/parse.d.ts.map +1 -0
- package/dist/markdown/parse.js +911 -0
- package/dist/markdown/parse.js.map +1 -0
- package/dist/markdown/spans.d.ts +20 -0
- package/dist/markdown/spans.d.ts.map +1 -0
- package/dist/markdown/spans.js +96 -0
- package/dist/markdown/spans.js.map +1 -0
- package/dist/media-player/backends.d.ts +64 -0
- package/dist/media-player/backends.d.ts.map +1 -0
- package/dist/media-player/backends.js +110 -0
- package/dist/media-player/backends.js.map +1 -0
- package/dist/media-player/control.d.ts +40 -0
- package/dist/media-player/control.d.ts.map +1 -0
- package/dist/media-player/control.js +44 -0
- package/dist/media-player/control.js.map +1 -0
- package/dist/media-player/hx.d.ts +24 -0
- package/dist/media-player/hx.d.ts.map +1 -0
- package/dist/media-player/hx.js +25 -0
- package/dist/media-player/hx.js.map +1 -0
- package/dist/media-player/index.d.ts +107 -0
- package/dist/media-player/index.d.ts.map +1 -0
- package/dist/media-player/index.js +219 -0
- package/dist/media-player/index.js.map +1 -0
- package/dist/media-player/mpv.d.ts +4 -0
- package/dist/media-player/mpv.d.ts.map +1 -0
- package/dist/media-player/mpv.js +120 -0
- package/dist/media-player/mpv.js.map +1 -0
- package/dist/media-player/vlc.d.ts +8 -0
- package/dist/media-player/vlc.d.ts.map +1 -0
- package/dist/media-player/vlc.js +83 -0
- package/dist/media-player/vlc.js.map +1 -0
- package/dist/richtext/index.d.ts +19 -0
- package/dist/richtext/index.d.ts.map +1 -0
- package/dist/richtext/index.js +4 -0
- package/dist/richtext/index.js.map +1 -0
- package/dist/richtext/links.d.ts +12 -0
- package/dist/richtext/links.d.ts.map +1 -0
- package/dist/richtext/links.js +64 -0
- package/dist/richtext/links.js.map +1 -0
- package/dist/richtext/menu.d.ts +11 -0
- package/dist/richtext/menu.d.ts.map +1 -0
- package/dist/richtext/menu.js +43 -0
- package/dist/richtext/menu.js.map +1 -0
- package/dist/richtext/node.d.ts +151 -0
- package/dist/richtext/node.d.ts.map +1 -0
- package/dist/richtext/node.js +255 -0
- package/dist/richtext/node.js.map +1 -0
- package/dist/richtext/runs.d.ts +92 -0
- package/dist/richtext/runs.d.ts.map +1 -0
- package/dist/richtext/runs.js +158 -0
- package/dist/richtext/runs.js.map +1 -0
- package/dist/table/hx.d.ts +24 -0
- package/dist/table/hx.d.ts.map +1 -0
- package/dist/table/hx.js +25 -0
- package/dist/table/hx.js.map +1 -0
- package/dist/table/index.d.ts +169 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/table/index.js +890 -0
- package/dist/table/index.js.map +1 -0
- package/dist/table/rows.d.ts +136 -0
- package/dist/table/rows.d.ts.map +1 -0
- package/dist/table/rows.js +146 -0
- package/dist/table/rows.js.map +1 -0
- package/dist/terminal/backends.d.ts +105 -0
- package/dist/terminal/backends.d.ts.map +1 -0
- package/dist/terminal/backends.js +185 -0
- package/dist/terminal/backends.js.map +1 -0
- package/dist/terminal/hx.d.ts +24 -0
- package/dist/terminal/hx.d.ts.map +1 -0
- package/dist/terminal/hx.js +25 -0
- package/dist/terminal/hx.js.map +1 -0
- package/dist/terminal/index.d.ts +160 -0
- package/dist/terminal/index.d.ts.map +1 -0
- package/dist/terminal/index.js +344 -0
- package/dist/terminal/index.js.map +1 -0
- package/dist/terminal/title.d.ts +24 -0
- package/dist/terminal/title.d.ts.map +1 -0
- package/dist/terminal/title.js +129 -0
- package/dist/terminal/title.js.map +1 -0
- package/dist/terminal/vt/colors.d.ts +63 -0
- package/dist/terminal/vt/colors.d.ts.map +1 -0
- package/dist/terminal/vt/colors.js +203 -0
- package/dist/terminal/vt/colors.js.map +1 -0
- package/dist/terminal/vt/diff.d.ts +117 -0
- package/dist/terminal/vt/diff.d.ts.map +1 -0
- package/dist/terminal/vt/diff.js +358 -0
- package/dist/terminal/vt/diff.js.map +1 -0
- package/dist/terminal/vt/fonts.d.ts +92 -0
- package/dist/terminal/vt/fonts.d.ts.map +1 -0
- package/dist/terminal/vt/fonts.js +178 -0
- package/dist/terminal/vt/fonts.js.map +1 -0
- package/dist/terminal/vt/index.d.ts +78 -0
- package/dist/terminal/vt/index.d.ts.map +1 -0
- package/dist/terminal/vt/index.js +312 -0
- package/dist/terminal/vt/index.js.map +1 -0
- package/dist/terminal/vt/keys.d.ts +74 -0
- package/dist/terminal/vt/keys.d.ts.map +1 -0
- package/dist/terminal/vt/keys.js +309 -0
- package/dist/terminal/vt/keys.js.map +1 -0
- package/dist/terminal/vt/mouse.d.ts +44 -0
- package/dist/terminal/vt/mouse.d.ts.map +1 -0
- package/dist/terminal/vt/mouse.js +106 -0
- package/dist/terminal/vt/mouse.js.map +1 -0
- package/dist/terminal/vt/node.d.ts +246 -0
- package/dist/terminal/vt/node.d.ts.map +1 -0
- package/dist/terminal/vt/node.js +1068 -0
- package/dist/terminal/vt/node.js.map +1 -0
- package/dist/terminal/vt/pty.d.ts +81 -0
- package/dist/terminal/vt/pty.d.ts.map +1 -0
- package/dist/terminal/vt/pty.js +201 -0
- package/dist/terminal/vt/pty.js.map +1 -0
- package/dist/terminal/vt/renderer.d.ts +179 -0
- package/dist/terminal/vt/renderer.d.ts.map +1 -0
- package/dist/terminal/vt/renderer.js +357 -0
- package/dist/terminal/vt/renderer.js.map +1 -0
- package/dist/terminal/vt/timers.d.ts +6 -0
- package/dist/terminal/vt/timers.d.ts.map +1 -0
- package/dist/terminal/vt/timers.js +16 -0
- package/dist/terminal/vt/timers.js.map +1 -0
- package/dist/terminal/vt/xterm.d.ts +142 -0
- package/dist/terminal/vt/xterm.d.ts.map +1 -0
- package/dist/terminal/vt/xterm.js +32 -0
- package/dist/terminal/vt/xterm.js.map +1 -0
- package/dist/terminal-output/hx.d.ts +24 -0
- package/dist/terminal-output/hx.d.ts.map +1 -0
- package/dist/terminal-output/hx.js +25 -0
- package/dist/terminal-output/hx.js.map +1 -0
- package/dist/terminal-output/index.d.ts +92 -0
- package/dist/terminal-output/index.d.ts.map +1 -0
- package/dist/terminal-output/index.js +179 -0
- package/dist/terminal-output/index.js.map +1 -0
- package/dist/terminal-output/runs.d.ts +27 -0
- package/dist/terminal-output/runs.d.ts.map +1 -0
- package/dist/terminal-output/runs.js +66 -0
- package/dist/terminal-output/runs.js.map +1 -0
- package/dist/three/canvas.d.ts +46 -0
- package/dist/three/canvas.d.ts.map +1 -0
- package/dist/three/canvas.js +305 -0
- package/dist/three/canvas.js.map +1 -0
- package/dist/three/events.d.ts +64 -0
- package/dist/three/events.d.ts.map +1 -0
- package/dist/three/events.js +146 -0
- package/dist/three/events.js.map +1 -0
- package/dist/three/geometries.d.ts +89 -0
- package/dist/three/geometries.d.ts.map +1 -0
- package/dist/three/geometries.js +345 -0
- package/dist/three/geometries.js.map +1 -0
- package/dist/three/globals.d.ts +7 -0
- package/dist/three/globals.d.ts.map +1 -0
- package/dist/three/globals.js +20 -0
- package/dist/three/globals.js.map +1 -0
- package/dist/three/hx.d.ts +9 -0
- package/dist/three/hx.d.ts.map +1 -0
- package/dist/three/hx.js +10 -0
- package/dist/three/hx.js.map +1 -0
- package/dist/three/index.d.ts +22 -0
- package/dist/three/index.d.ts.map +1 -0
- package/dist/three/index.js +24 -0
- package/dist/three/index.js.map +1 -0
- package/dist/three/jsx-dev-runtime.d.ts +19 -0
- package/dist/three/jsx-dev-runtime.d.ts.map +1 -0
- package/dist/three/jsx-dev-runtime.js +2 -0
- package/dist/three/jsx-dev-runtime.js.map +1 -0
- package/dist/three/jsx-runtime.d.ts +19 -0
- package/dist/three/jsx-runtime.d.ts.map +1 -0
- package/dist/three/jsx-runtime.js +2 -0
- package/dist/three/jsx-runtime.js.map +1 -0
- package/dist/three/jsx.d.ts +198 -0
- package/dist/three/jsx.d.ts.map +1 -0
- package/dist/three/jsx.js +2 -0
- package/dist/three/jsx.js.map +1 -0
- package/dist/three/materials.d.ts +125 -0
- package/dist/three/materials.d.ts.map +1 -0
- package/dist/three/materials.js +229 -0
- package/dist/three/materials.js.map +1 -0
- package/dist/three/math.d.ts +146 -0
- package/dist/three/math.d.ts.map +1 -0
- package/dist/three/math.js +464 -0
- package/dist/three/math.js.map +1 -0
- package/dist/three/objects.d.ts +185 -0
- package/dist/three/objects.d.ts.map +1 -0
- package/dist/three/objects.js +309 -0
- package/dist/three/objects.js.map +1 -0
- package/dist/three/passes.d.ts +54 -0
- package/dist/three/passes.d.ts.map +1 -0
- package/dist/three/passes.js +78 -0
- package/dist/three/passes.js.map +1 -0
- package/dist/three/postprocess.d.ts +85 -0
- package/dist/three/postprocess.d.ts.map +1 -0
- package/dist/three/postprocess.js +503 -0
- package/dist/three/postprocess.js.map +1 -0
- package/dist/three/raycast.d.ts +24 -0
- package/dist/three/raycast.d.ts.map +1 -0
- package/dist/three/raycast.js +138 -0
- package/dist/three/raycast.js.map +1 -0
- package/dist/three/reconciler.d.ts +48 -0
- package/dist/three/reconciler.d.ts.map +1 -0
- package/dist/three/reconciler.js +416 -0
- package/dist/three/reconciler.js.map +1 -0
- package/dist/three/renderer-direct.d.ts +102 -0
- package/dist/three/renderer-direct.d.ts.map +1 -0
- package/dist/three/renderer-direct.js +782 -0
- package/dist/three/renderer-direct.js.map +1 -0
- package/dist/three/renderer-indirect.d.ts +68 -0
- package/dist/three/renderer-indirect.d.ts.map +1 -0
- package/dist/three/renderer-indirect.js +438 -0
- package/dist/three/renderer-indirect.js.map +1 -0
- package/dist/three/store.d.ts +81 -0
- package/dist/three/store.d.ts.map +1 -0
- package/dist/three/store.js +110 -0
- package/dist/three/store.js.map +1 -0
- package/dist/timeline/hx.d.ts +18 -0
- package/dist/timeline/hx.d.ts.map +1 -0
- package/dist/timeline/hx.js +10 -0
- package/dist/timeline/hx.js.map +1 -0
- package/dist/timeline/index.d.ts +152 -0
- package/dist/timeline/index.d.ts.map +1 -0
- package/dist/timeline/index.js +383 -0
- package/dist/timeline/index.js.map +1 -0
- package/dist/tray-host/hx.d.ts +24 -0
- package/dist/tray-host/hx.d.ts.map +1 -0
- package/dist/tray-host/hx.js +25 -0
- package/dist/tray-host/hx.js.map +1 -0
- package/dist/tray-host/index.d.ts +110 -0
- package/dist/tray-host/index.d.ts.map +1 -0
- package/dist/tray-host/index.js +191 -0
- package/dist/tray-host/index.js.map +1 -0
- package/dist/tray-host/manager.d.ts +137 -0
- package/dist/tray-host/manager.d.ts.map +1 -0
- package/dist/tray-host/manager.js +462 -0
- package/dist/tray-host/manager.js.map +1 -0
- package/dist/tray-host/notify.d.ts +22 -0
- package/dist/tray-host/notify.d.ts.map +1 -0
- package/dist/tray-host/notify.js +74 -0
- package/dist/tray-host/notify.js.map +1 -0
- package/dist/tray-host/protocol.d.ts +106 -0
- package/dist/tray-host/protocol.d.ts.map +1 -0
- package/dist/tray-host/protocol.js +191 -0
- package/dist/tray-host/protocol.js.map +1 -0
- package/dist/tree/hx.d.ts +24 -0
- package/dist/tree/hx.d.ts.map +1 -0
- package/dist/tree/hx.js +25 -0
- package/dist/tree/hx.js.map +1 -0
- package/dist/tree/index.d.ts +221 -0
- package/dist/tree/index.d.ts.map +1 -0
- package/dist/tree/index.js +751 -0
- package/dist/tree/index.js.map +1 -0
- package/dist/tree/internal.d.ts +18 -0
- package/dist/tree/internal.d.ts.map +1 -0
- package/dist/tree/internal.js +66 -0
- package/dist/tree/internal.js.map +1 -0
- package/dist/tree/rows.d.ts +177 -0
- package/dist/tree/rows.d.ts.map +1 -0
- package/dist/tree/rows.js +179 -0
- package/dist/tree/rows.js.map +1 -0
- package/package.json +166 -12
- package/src/ansi/cast.ts +159 -0
- package/src/ansi/index.ts +53 -0
- package/src/ansi/palette.ts +226 -0
- package/src/ansi/parse.ts +780 -0
- package/src/ansi/sgr.ts +380 -0
- package/src/ansi/utf8.ts +84 -0
- package/src/calendar/Calendar.ts +744 -0
- package/src/calendar/DatePicker.ts +368 -0
- package/src/calendar/dates.ts +307 -0
- package/src/calendar/index.ts +51 -0
- package/src/charts/components.ts +864 -0
- package/src/charts/data.ts +776 -0
- package/src/charts/hx.ts +39 -0
- package/src/charts/index.ts +99 -0
- package/src/charts/node.ts +932 -0
- package/src/charts/render.ts +982 -0
- package/src/charts/scale.ts +214 -0
- package/src/charts/spec.ts +122 -0
- package/src/charts/timers.ts +24 -0
- package/src/code/hx.ts +51 -0
- package/src/code/index.ts +174 -0
- package/src/code-editor/completion.ts +161 -0
- package/src/code-editor/doc.ts +198 -0
- package/src/code-editor/hx.ts +26 -0
- package/src/code-editor/index.ts +615 -0
- package/src/code-editor/node.ts +1926 -0
- package/src/code-language/hljs.ts +302 -0
- package/src/code-language/index.ts +51 -0
- package/src/code-language/languages/glsl.ts +120 -0
- package/src/code-language/languages/javascript.ts +419 -0
- package/src/code-language/languages/json.ts +72 -0
- package/src/code-language/languages/shell.ts +221 -0
- package/src/code-language/languages/sql.ts +165 -0
- package/src/code-language/lezer.ts +190 -0
- package/src/code-language/registry.ts +66 -0
- package/src/code-language/runs.ts +128 -0
- package/src/code-language/stream.ts +306 -0
- package/src/code-language/textmate.ts +134 -0
- package/src/code-language/theme.ts +124 -0
- package/src/code-language/timers.ts +36 -0
- package/src/code-language/types.ts +252 -0
- package/src/codeblock/index.ts +146 -0
- package/src/color-picker/ColorField.ts +333 -0
- package/src/color-picker/ColorPicker.ts +1069 -0
- package/src/color-picker/color.ts +399 -0
- package/src/color-picker/index.ts +50 -0
- package/src/desktop-calendar/eds.ts +484 -0
- package/src/desktop-calendar/ical.ts +119 -0
- package/src/desktop-calendar/index.ts +287 -0
- package/src/embed/client.ts +311 -0
- package/src/embed/host.ts +432 -0
- package/src/embed/index.ts +33 -0
- package/src/embed/timers.ts +32 -0
- package/src/flow/draw.ts +418 -0
- package/src/flow/index.ts +473 -0
- package/src/flow/model.ts +687 -0
- package/src/flow/node.ts +3694 -0
- package/src/flow/paths.ts +403 -0
- package/src/flow/types.ts +634 -0
- package/src/formula/hx.ts +51 -0
- package/src/formula/index.ts +243 -0
- package/src/formula/katex.ts +209 -0
- package/src/formula/layout.ts +876 -0
- package/src/formula/node.ts +467 -0
- package/src/html/controls.ts +244 -0
- package/src/html/css/cascade.ts +606 -0
- package/src/html/css/parse.ts +500 -0
- package/src/html/css/style.ts +1371 -0
- package/src/html/css/ua.ts +174 -0
- package/src/html/css/values.ts +358 -0
- package/src/html/dom.ts +410 -0
- package/src/html/hx.ts +55 -0
- package/src/html/index.ts +545 -0
- package/src/html/layout/block.ts +876 -0
- package/src/html/layout/boxes.ts +981 -0
- package/src/html/layout/flex.ts +297 -0
- package/src/html/layout/floats.ts +125 -0
- package/src/html/layout/inline.ts +870 -0
- package/src/html/layout/table.ts +380 -0
- package/src/html/node.ts +967 -0
- package/src/html/paint.ts +605 -0
- package/src/html/resources.ts +214 -0
- package/src/index.ts +638 -0
- package/src/internal/heights.ts +222 -0
- package/src/internal/hx.ts +53 -0
- package/src/internal/scroll.ts +288 -0
- package/src/internal/text.ts +44 -0
- package/src/internal/timers.ts +44 -0
- package/src/internal/widget.ts +92 -0
- package/src/markdown/ast.ts +163 -0
- package/src/markdown/hx.ts +51 -0
- package/src/markdown/index.ts +686 -0
- package/src/markdown/parse.ts +1037 -0
- package/src/markdown/spans.ts +143 -0
- package/src/media-player/backends.ts +155 -0
- package/src/media-player/control.ts +70 -0
- package/src/media-player/hx.ts +51 -0
- package/src/media-player/index.ts +378 -0
- package/src/media-player/mpv.ts +146 -0
- package/src/media-player/vlc.ts +97 -0
- package/src/richtext/index.ts +42 -0
- package/src/richtext/links.ts +78 -0
- package/src/richtext/menu.ts +49 -0
- package/src/richtext/node.ts +406 -0
- package/src/richtext/runs.ts +253 -0
- package/src/table/hx.ts +51 -0
- package/src/table/index.ts +1270 -0
- package/src/table/rows.ts +275 -0
- package/src/terminal/backends.ts +242 -0
- package/src/terminal/hx.ts +51 -0
- package/src/terminal/index.ts +574 -0
- package/src/terminal/title.ts +172 -0
- package/src/terminal/vt/colors.ts +247 -0
- package/src/terminal/vt/diff.ts +467 -0
- package/src/terminal/vt/fonts.ts +233 -0
- package/src/terminal/vt/index.ts +443 -0
- package/src/terminal/vt/keys.ts +369 -0
- package/src/terminal/vt/mouse.ts +144 -0
- package/src/terminal/vt/node.ts +1242 -0
- package/src/terminal/vt/pty.ts +334 -0
- package/src/terminal/vt/renderer.ts +555 -0
- package/src/terminal/vt/timers.ts +31 -0
- package/src/terminal/vt/xterm.ts +193 -0
- package/src/terminal-output/hx.ts +51 -0
- package/src/terminal-output/index.ts +340 -0
- package/src/terminal-output/runs.ts +79 -0
- package/src/three/canvas.ts +451 -0
- package/src/three/events.ts +197 -0
- package/src/three/geometries.ts +429 -0
- package/src/three/globals.ts +34 -0
- package/src/three/hx.ts +22 -0
- package/src/three/index.ts +98 -0
- package/src/three/jsx-dev-runtime.ts +27 -0
- package/src/three/jsx-runtime.ts +38 -0
- package/src/three/jsx.ts +275 -0
- package/src/three/materials.ts +270 -0
- package/src/three/math.ts +585 -0
- package/src/three/objects.ts +397 -0
- package/src/three/passes.ts +90 -0
- package/src/three/postprocess.ts +677 -0
- package/src/three/raycast.ts +189 -0
- package/src/three/react-reconciler.d.ts +50 -0
- package/src/three/reconciler.ts +624 -0
- package/src/three/renderer-direct.ts +1055 -0
- package/src/three/renderer-indirect.ts +570 -0
- package/src/three/store.ts +207 -0
- package/src/timeline/hx.ts +31 -0
- package/src/timeline/index.ts +603 -0
- package/src/tray-host/hx.ts +51 -0
- package/src/tray-host/index.ts +331 -0
- package/src/tray-host/manager.ts +639 -0
- package/src/tray-host/notify.ts +102 -0
- package/src/tray-host/protocol.ts +235 -0
- package/src/tree/hx.ts +51 -0
- package/src/tree/index.ts +1127 -0
- package/src/tree/internal.ts +87 -0
- package/src/tree/rows.ts +334 -0
- package/src/index.d.ts +0 -2
- package/src/index.js +0 -9
- package/src/sparkline/index.d.ts +0 -29
- package/src/sparkline/index.js +0 -50
- package/src/sparkline/node.js +0 -72
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
// The manager selection, and everything that arrives because of it.
|
|
2
|
+
//
|
|
3
|
+
// A tray host is three things on the wire: it owns `_NET_SYSTEM_TRAY_S<n>`,
|
|
4
|
+
// it publishes two properties saying how it wants to be drawn into, and it
|
|
5
|
+
// answers `_NET_SYSTEM_TRAY_OPCODE` messages addressed to the window that
|
|
6
|
+
// owns that selection. None of it is React-shaped, so none of it is in the
|
|
7
|
+
// component — `./index.ts` owns the icon list as state and this owns the
|
|
8
|
+
// protocol that changes it.
|
|
9
|
+
//
|
|
10
|
+
// ### Why this listens on `X.on('event')` rather than `onClientMessage`
|
|
11
|
+
//
|
|
12
|
+
// Core has an element-scoped ClientMessage seam now, and it is the right
|
|
13
|
+
// thing for an application — but it is a **`<window>`** prop, and the window
|
|
14
|
+
// the tray opcodes are addressed to is not an element. It cannot be: the
|
|
15
|
+
// selection has to be held on something that outlives the render, so this
|
|
16
|
+
// creates its own window with `X.CreateWindow` rather than rendering one. A
|
|
17
|
+
// `<TrayHost>` that unmounted while its panel stayed up would otherwise take
|
|
18
|
+
// the selection with it and leave the desktop with no tray.
|
|
19
|
+
//
|
|
20
|
+
// That is exactly the case core's own `src/clientmessage.js` carves out:
|
|
21
|
+
// filtering `X.on('event')` "is the right shape *there*, because a settings
|
|
22
|
+
// daemon's window is nobody's element". A tray's manager window is the same
|
|
23
|
+
// kind of window.
|
|
24
|
+
//
|
|
25
|
+
// The timestamp is the other half, and that one core does answer:
|
|
26
|
+
// `serverTime()` is a current server timestamp for an operation no user
|
|
27
|
+
// action caused, and its own documentation names a tray taking its manager
|
|
28
|
+
// selection as the case. ICCCM 2.1 forbids `CurrentTime` here.
|
|
29
|
+
import { serverTime } from 'react-x11';
|
|
30
|
+
import { BalloonAssembler, MANAGER_ATOM, MESSAGE_DATA_ATOM, OPCODE_ATOM, ORIENTATION_ATOM, SYSTEM_TRAY_BEGIN_MESSAGE, SYSTEM_TRAY_CANCEL_MESSAGE, SYSTEM_TRAY_REQUEST_DOCK, VISUAL_ATOM, argbVisualOf, orientationValue, selectionNameFor, } from './protocol.js';
|
|
31
|
+
// Core event codes and masks, written out for the same reason
|
|
32
|
+
// `src/xsettings.js` writes them out: they are protocol constants, and
|
|
33
|
+
// naming them here is cheaper than reaching into node-x11 for a number that
|
|
34
|
+
// has not changed since 1987.
|
|
35
|
+
const SELECTION_CLEAR = 29;
|
|
36
|
+
const CLIENT_MESSAGE = 33;
|
|
37
|
+
const STRUCTURE_NOTIFY_MASK = 131072; // x11.eventMask.StructureNotify
|
|
38
|
+
const INPUT_ONLY = 2;
|
|
39
|
+
/** Predefined atoms — no InternAtom round trip for these. */
|
|
40
|
+
const XA_CARDINAL = 6;
|
|
41
|
+
const XA_VISUALID = 32;
|
|
42
|
+
/**
|
|
43
|
+
* The tray host's half of the system tray protocol.
|
|
44
|
+
*
|
|
45
|
+
* ```ts
|
|
46
|
+
* const manager = new TrayManager(app, 0);
|
|
47
|
+
* manager.handlers = { onIcons: setIcons };
|
|
48
|
+
* await manager.start({ orientation: 'horizontal', hostWindowId: id });
|
|
49
|
+
* // …
|
|
50
|
+
* manager.stop();
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* Public because a panel that draws its own tray — one that does not want
|
|
54
|
+
* `<TrayHost>`'s layout — should not have to reimplement selection
|
|
55
|
+
* ownership, and because it is what the tests drive. Same reason
|
|
56
|
+
* `ProcessHost` is exported from `../embed/`.
|
|
57
|
+
*/
|
|
58
|
+
export class TrayManager {
|
|
59
|
+
#app;
|
|
60
|
+
#screen;
|
|
61
|
+
#X;
|
|
62
|
+
#root;
|
|
63
|
+
#selectionAtom = 0;
|
|
64
|
+
#opcodeAtom = 0;
|
|
65
|
+
#orientationAtom = 0;
|
|
66
|
+
#visualAtom = 0;
|
|
67
|
+
#messageDataAtom = 0;
|
|
68
|
+
#managerAtom = 0;
|
|
69
|
+
/** The window that owns the selection, and the address the opcodes are
|
|
70
|
+
* sent to. Created here rather than rendered, because a selection held on
|
|
71
|
+
* a node that can unmount is a tray that silently stops being one. */
|
|
72
|
+
#window = 0;
|
|
73
|
+
/** The timestamp the selection was taken with; ICCCM 2.3 wants it back
|
|
74
|
+
* when the selection is given up. */
|
|
75
|
+
#ownedAt = 0;
|
|
76
|
+
#icons = [];
|
|
77
|
+
#balloons = new BalloonAssembler();
|
|
78
|
+
#status = 'starting';
|
|
79
|
+
#conflict = null;
|
|
80
|
+
#orientation = 'horizontal';
|
|
81
|
+
#visual = 0;
|
|
82
|
+
/**
|
|
83
|
+
* The current run, or `null` between `stop()` and the next `start()`.
|
|
84
|
+
*
|
|
85
|
+
* A token rather than a pair of booleans for the reason `ForeignNode._start`
|
|
86
|
+
* uses one: taking the selection is a chain of round trips, and a run that
|
|
87
|
+
* was stopped part-way through must not have its stale continuation report
|
|
88
|
+
* success or leave a window behind. It is also what makes the manager
|
|
89
|
+
* genuinely restartable — React remounts an effect on the same instance in
|
|
90
|
+
* development, and a one-shot manager would come back dead.
|
|
91
|
+
*/
|
|
92
|
+
#run = null;
|
|
93
|
+
#listener = null;
|
|
94
|
+
/** Assign, do not construct with: the component replaces these every
|
|
95
|
+
* render so an inline handler is not a reason to restart anything. */
|
|
96
|
+
handlers = {};
|
|
97
|
+
constructor(app, screen = 0) {
|
|
98
|
+
this.#app = app;
|
|
99
|
+
this.#screen = screen;
|
|
100
|
+
this.#X = app?.X ?? null;
|
|
101
|
+
this.#root = app?.display?.screen?.[screen]?.root ?? 0;
|
|
102
|
+
}
|
|
103
|
+
get status() {
|
|
104
|
+
return this.#status;
|
|
105
|
+
}
|
|
106
|
+
get conflict() {
|
|
107
|
+
return this.#conflict;
|
|
108
|
+
}
|
|
109
|
+
/** The manager selection window, once there is one. */
|
|
110
|
+
get windowId() {
|
|
111
|
+
return this.#window || 0;
|
|
112
|
+
}
|
|
113
|
+
get icons() {
|
|
114
|
+
return this.#icons;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Take the selection, if nobody else has it.
|
|
118
|
+
*
|
|
119
|
+
* The order is the spec's: publish the properties, *then* take the
|
|
120
|
+
* selection, *then* broadcast `MANAGER`. A client that starts docking on
|
|
121
|
+
* the broadcast reads the properties immediately afterwards, so they have
|
|
122
|
+
* to be there before the announcement rather than after it.
|
|
123
|
+
*/
|
|
124
|
+
async start(options) {
|
|
125
|
+
if (this.#run)
|
|
126
|
+
return;
|
|
127
|
+
const run = {};
|
|
128
|
+
this.#run = run;
|
|
129
|
+
/** Still the run that started this line? */
|
|
130
|
+
const live = () => this.#run === run;
|
|
131
|
+
this.#orientation = options.orientation;
|
|
132
|
+
this.#setStatus('starting', null);
|
|
133
|
+
const X = this.#X;
|
|
134
|
+
// No raw protocol on this connection — a headless mock. Not an error to
|
|
135
|
+
// report: there is simply no display to be the tray of.
|
|
136
|
+
if (!X || typeof X.SetSelectionOwner !== 'function' || !this.#root) {
|
|
137
|
+
this.#setStatus('unavailable', null);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
await this.#internAtoms(X);
|
|
142
|
+
if (!live())
|
|
143
|
+
return;
|
|
144
|
+
const existing = await this.#selectionOwner(X);
|
|
145
|
+
if (!live())
|
|
146
|
+
return;
|
|
147
|
+
if (existing) {
|
|
148
|
+
// A second panel on one display is a configuration mistake, not an
|
|
149
|
+
// exception. It says so and embeds nothing.
|
|
150
|
+
this.#setStatus('conflict', { owner: existing, screen: this.#screen });
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
this.#window = X.AllocID();
|
|
154
|
+
// InputOnly, never mapped, 1x1 off-screen: this window exists to be an
|
|
155
|
+
// address and to hold two properties, which InputOnly windows do. It
|
|
156
|
+
// selects nothing — a ClientMessage reaches the client that created the
|
|
157
|
+
// window whatever its event mask is, which is how the opcodes arrive.
|
|
158
|
+
X.CreateWindow(this.#window, this.#root, -1, -1, 1, 1, 0, 0, INPUT_ONLY, 0, {
|
|
159
|
+
eventMask: 0,
|
|
160
|
+
});
|
|
161
|
+
this.#visual = await this.#resolveVisual(X, options.hostWindowId);
|
|
162
|
+
// Stopped mid-flight: the window above is ours and nothing else will
|
|
163
|
+
// drop it, because `stop()` ran before there was one to drop.
|
|
164
|
+
if (!live()) {
|
|
165
|
+
this.#destroyWindow();
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
this.#writeOrientation();
|
|
169
|
+
this.#writeVisual();
|
|
170
|
+
// ICCCM 2.1: never `CurrentTime`. Nothing the user did caused this, so
|
|
171
|
+
// it is a fresh server timestamp rather than `lastInputTime()`.
|
|
172
|
+
const time = await serverTime(this.#app);
|
|
173
|
+
if (!live()) {
|
|
174
|
+
this.#destroyWindow();
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
X.SetSelectionOwner(this.#window, this.#selectionAtom, time);
|
|
178
|
+
this.#ownedAt = time;
|
|
179
|
+
// Ask rather than assume. Two panels starting together both saw an
|
|
180
|
+
// unowned selection above, and only one of them has it now.
|
|
181
|
+
const owner = await this.#selectionOwner(X);
|
|
182
|
+
if (!live()) {
|
|
183
|
+
X.SetSelectionOwner(0, this.#selectionAtom, time);
|
|
184
|
+
this.#destroyWindow();
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (owner !== this.#window) {
|
|
188
|
+
this.#setStatus('conflict', { owner, screen: this.#screen });
|
|
189
|
+
this.#destroyWindow();
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
this.#listen(X);
|
|
193
|
+
this.#broadcastManager(X, time);
|
|
194
|
+
this.#setStatus('owned', null);
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
this.#fail(err);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Give the selection back and drop the manager window.
|
|
202
|
+
*
|
|
203
|
+
* The icons are *not* reparented here: each one is a `<foreign>`, and
|
|
204
|
+
* handing a client back untouched on unmount is that element's promise.
|
|
205
|
+
* All this does is stop being the tray.
|
|
206
|
+
*/
|
|
207
|
+
stop() {
|
|
208
|
+
if (!this.#run)
|
|
209
|
+
return;
|
|
210
|
+
this.#run = null;
|
|
211
|
+
const X = this.#X;
|
|
212
|
+
this.#unlisten();
|
|
213
|
+
this.#balloons.clear();
|
|
214
|
+
this.#replaceIcons([]);
|
|
215
|
+
if (X && this.#window) {
|
|
216
|
+
try {
|
|
217
|
+
// ICCCM 2.3: relinquish with the timestamp it was acquired at.
|
|
218
|
+
X.SetSelectionOwner(0, this.#selectionAtom, this.#ownedAt);
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
// the connection is going away, which releases it anyway
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
this.#destroyWindow();
|
|
225
|
+
this.#setStatus('released', null);
|
|
226
|
+
}
|
|
227
|
+
/** Republish `_NET_SYSTEM_TRAY_ORIENTATION`. Cheap and idempotent. */
|
|
228
|
+
setOrientation(orientation) {
|
|
229
|
+
if (orientation === this.#orientation)
|
|
230
|
+
return;
|
|
231
|
+
this.#orientation = orientation;
|
|
232
|
+
this.#writeOrientation();
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* The icon's client went away — `<foreign onClientGone>`, which is the
|
|
236
|
+
* ordinary case here rather than an error: tray icons come and go with the
|
|
237
|
+
* applications that own them.
|
|
238
|
+
*/
|
|
239
|
+
undock(id) {
|
|
240
|
+
const icon = this.#icons.find((entry) => entry.id === id);
|
|
241
|
+
if (!icon)
|
|
242
|
+
return;
|
|
243
|
+
// A new array, never a splice: the component holds this as state, and
|
|
244
|
+
// React compares identities — mutating in place removes the icon from
|
|
245
|
+
// the list and leaves it on screen.
|
|
246
|
+
this.#icons = this.#icons.filter((entry) => entry !== icon);
|
|
247
|
+
this.#balloons.forget(id);
|
|
248
|
+
this.#emitIcons();
|
|
249
|
+
this.#safely(() => this.handlers.onUndock?.(icon));
|
|
250
|
+
}
|
|
251
|
+
// --- the wire ------------------------------------------------------
|
|
252
|
+
#listen(X) {
|
|
253
|
+
const listener = (ev) => {
|
|
254
|
+
if (!this.#run)
|
|
255
|
+
return;
|
|
256
|
+
try {
|
|
257
|
+
this.#onEvent(ev);
|
|
258
|
+
}
|
|
259
|
+
catch (err) {
|
|
260
|
+
this.#fail(err);
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
this.#listener = listener;
|
|
264
|
+
X.on('event', listener);
|
|
265
|
+
}
|
|
266
|
+
#unlisten() {
|
|
267
|
+
const listener = this.#listener;
|
|
268
|
+
this.#listener = null;
|
|
269
|
+
if (listener)
|
|
270
|
+
this.#X?.removeListener?.('event', listener);
|
|
271
|
+
}
|
|
272
|
+
#onEvent(ev) {
|
|
273
|
+
if (ev.type === SELECTION_CLEAR) {
|
|
274
|
+
// Another tray took over. Letting the icons go is the whole job here:
|
|
275
|
+
// a panel that keeps drawing dead icons after losing the selection is
|
|
276
|
+
// the failure users report as "my tray is empty".
|
|
277
|
+
if (ev.selection !== this.#selectionAtom)
|
|
278
|
+
return;
|
|
279
|
+
if (this.#window && ev.owner !== this.#window)
|
|
280
|
+
return;
|
|
281
|
+
this.#unlisten();
|
|
282
|
+
this.#balloons.clear();
|
|
283
|
+
this.#replaceIcons([]);
|
|
284
|
+
this.#destroyWindow();
|
|
285
|
+
this.#setStatus('released', null);
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
if (ev.type !== CLIENT_MESSAGE)
|
|
289
|
+
return;
|
|
290
|
+
if (ev.message_type === this.#opcodeAtom) {
|
|
291
|
+
// A dock request names the manager window; a balloon message names the
|
|
292
|
+
// icon it is about, and both are *sent to* the manager window. So the
|
|
293
|
+
// event's window field is only ever one of those two.
|
|
294
|
+
const from = ev.wid ?? 0;
|
|
295
|
+
if (from !== this.#window && !this.#hasIcon(from))
|
|
296
|
+
return;
|
|
297
|
+
this.#onOpcode(from, ev.data ?? []);
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
if (ev.message_type === this.#messageDataAtom && ev.format === 8) {
|
|
301
|
+
const from = ev.wid ?? 0;
|
|
302
|
+
if (!this.#hasIcon(from))
|
|
303
|
+
return;
|
|
304
|
+
const message = this.#balloons.data(from, ev.data ?? []);
|
|
305
|
+
if (message)
|
|
306
|
+
this.#safely(() => this.handlers.onMessage?.(message));
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
#onOpcode(from, data) {
|
|
310
|
+
const opcode = data[1];
|
|
311
|
+
if (opcode === SYSTEM_TRAY_REQUEST_DOCK) {
|
|
312
|
+
this.#dock(data[2] ?? 0);
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
if (opcode === SYSTEM_TRAY_BEGIN_MESSAGE) {
|
|
316
|
+
if (!this.#hasIcon(from))
|
|
317
|
+
return;
|
|
318
|
+
const message = this.#balloons.begin(from, {
|
|
319
|
+
timeout: data[2] ?? 0,
|
|
320
|
+
length: data[3] ?? 0,
|
|
321
|
+
id: data[4] ?? 0,
|
|
322
|
+
});
|
|
323
|
+
if (message)
|
|
324
|
+
this.#safely(() => this.handlers.onMessage?.(message));
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
if (opcode === SYSTEM_TRAY_CANCEL_MESSAGE) {
|
|
328
|
+
if (!this.#hasIcon(from))
|
|
329
|
+
return;
|
|
330
|
+
const id = data[2] ?? 0;
|
|
331
|
+
if (this.#balloons.cancel(from, id)) {
|
|
332
|
+
this.#safely(() => this.handlers.onCancelMessage?.({ windowId: from, id }));
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
#dock(id) {
|
|
337
|
+
if (!id || this.#status !== 'owned' || this.#hasIcon(id))
|
|
338
|
+
return;
|
|
339
|
+
const icon = { id };
|
|
340
|
+
this.#icons = [...this.#icons, icon];
|
|
341
|
+
this.#emitIcons();
|
|
342
|
+
this.#safely(() => this.handlers.onDock?.(icon));
|
|
343
|
+
}
|
|
344
|
+
#hasIcon(id) {
|
|
345
|
+
return this.#icons.some((icon) => icon.id === id);
|
|
346
|
+
}
|
|
347
|
+
#replaceIcons(next) {
|
|
348
|
+
if (this.#icons.length === 0 && next.length === 0)
|
|
349
|
+
return;
|
|
350
|
+
const gone = this.#icons;
|
|
351
|
+
this.#icons = next;
|
|
352
|
+
this.#emitIcons();
|
|
353
|
+
for (const icon of gone) {
|
|
354
|
+
if (!next.includes(icon))
|
|
355
|
+
this.#safely(() => this.handlers.onUndock?.(icon));
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
#emitIcons() {
|
|
359
|
+
const icons = this.#icons;
|
|
360
|
+
this.#safely(() => this.handlers.onIcons?.(icons));
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* ICCCM 2.8's `MANAGER` broadcast: clients that were waiting for a tray
|
|
364
|
+
* start docking on this, which is the only reason an application launched
|
|
365
|
+
* before the panel ever gets an icon.
|
|
366
|
+
*/
|
|
367
|
+
#broadcastManager(X, time) {
|
|
368
|
+
X.SendEvent(this.#root, 0, STRUCTURE_NOTIFY_MASK, {
|
|
369
|
+
name: 'ClientMessage',
|
|
370
|
+
format: 32,
|
|
371
|
+
wid: this.#root,
|
|
372
|
+
message_type: this.#managerAtom,
|
|
373
|
+
data: [time, this.#selectionAtom, this.#window, 0, 0],
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
#writeOrientation() {
|
|
377
|
+
const X = this.#X;
|
|
378
|
+
if (!X || !this.#window)
|
|
379
|
+
return;
|
|
380
|
+
X.ChangeProperty(0, this.#window, this.#orientationAtom, XA_CARDINAL, 32, [
|
|
381
|
+
orientationValue(this.#orientation),
|
|
382
|
+
]);
|
|
383
|
+
}
|
|
384
|
+
#writeVisual() {
|
|
385
|
+
const X = this.#X;
|
|
386
|
+
// Absent rather than zero when there is nothing honest to say: a client
|
|
387
|
+
// reads "is the property there" and a 0 visual id is not a visual.
|
|
388
|
+
if (!X || !this.#window || !this.#visual)
|
|
389
|
+
return;
|
|
390
|
+
X.ChangeProperty(0, this.#window, this.#visualAtom, XA_VISUALID, 32, [
|
|
391
|
+
this.#visual,
|
|
392
|
+
]);
|
|
393
|
+
}
|
|
394
|
+
async #resolveVisual(X, hostWindowId) {
|
|
395
|
+
if (!hostWindowId)
|
|
396
|
+
return 0;
|
|
397
|
+
try {
|
|
398
|
+
const attrs = await new Promise((resolve, reject) => X.GetWindowAttributes(hostWindowId, (err, value) => err ? reject(err) : resolve(value)));
|
|
399
|
+
const screen = this.#app.display?.screen?.[this.#screen];
|
|
400
|
+
return argbVisualOf(screen, attrs?.visual ?? 0);
|
|
401
|
+
}
|
|
402
|
+
catch {
|
|
403
|
+
// The window went away, or the server would not say. No property, and
|
|
404
|
+
// the icons fall back to guessing a background — which always worked.
|
|
405
|
+
return 0;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
#selectionOwner(X) {
|
|
409
|
+
return new Promise((resolve, reject) => X.GetSelectionOwner(this.#selectionAtom, (err, owner) => err ? reject(err) : resolve(owner >>> 0)));
|
|
410
|
+
}
|
|
411
|
+
async #internAtoms(X) {
|
|
412
|
+
const intern = (name) => new Promise((resolve, reject) => X.InternAtom(false, name, (err, atom) => err ? reject(err) : resolve(atom)));
|
|
413
|
+
const [selection, opcode, orientation, visual, messageData, manager] = await Promise.all([
|
|
414
|
+
intern(selectionNameFor(this.#screen)),
|
|
415
|
+
intern(OPCODE_ATOM),
|
|
416
|
+
intern(ORIENTATION_ATOM),
|
|
417
|
+
intern(VISUAL_ATOM),
|
|
418
|
+
intern(MESSAGE_DATA_ATOM),
|
|
419
|
+
intern(MANAGER_ATOM),
|
|
420
|
+
]);
|
|
421
|
+
this.#selectionAtom = selection ?? 0;
|
|
422
|
+
this.#opcodeAtom = opcode ?? 0;
|
|
423
|
+
this.#orientationAtom = orientation ?? 0;
|
|
424
|
+
this.#visualAtom = visual ?? 0;
|
|
425
|
+
this.#messageDataAtom = messageData ?? 0;
|
|
426
|
+
this.#managerAtom = manager ?? 0;
|
|
427
|
+
}
|
|
428
|
+
#destroyWindow() {
|
|
429
|
+
const id = this.#window;
|
|
430
|
+
this.#window = 0;
|
|
431
|
+
if (!id)
|
|
432
|
+
return;
|
|
433
|
+
try {
|
|
434
|
+
this.#X?.DestroyWindow(id);
|
|
435
|
+
}
|
|
436
|
+
catch {
|
|
437
|
+
// the connection is closing; the server drops it with us
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
#setStatus(status, conflict) {
|
|
441
|
+
if (this.#status === status && this.#conflict === conflict)
|
|
442
|
+
return;
|
|
443
|
+
this.#status = status;
|
|
444
|
+
this.#conflict = conflict;
|
|
445
|
+
this.#safely(() => this.handlers.onStatus?.(status, conflict));
|
|
446
|
+
}
|
|
447
|
+
#fail(err) {
|
|
448
|
+
const wrapped = err instanceof Error ? err : new Error(String(err));
|
|
449
|
+
this.#safely(() => this.handlers.onError?.(wrapped));
|
|
450
|
+
}
|
|
451
|
+
/** One handler throwing must not take the X event loop with it — the same
|
|
452
|
+
* rule `xsettings.js` applies to its subscribers. */
|
|
453
|
+
#safely(fn) {
|
|
454
|
+
try {
|
|
455
|
+
fn();
|
|
456
|
+
}
|
|
457
|
+
catch {
|
|
458
|
+
/* a listener's problem, not the tray's */
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/tray-host/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { TrayMessage } from './protocol.js';
|
|
2
|
+
/**
|
|
3
|
+
* A lazily-acquired claim on the session bus, and the `Notify` call over it.
|
|
4
|
+
*
|
|
5
|
+
* Lazy on purpose: a panel that never receives a balloon message never dials
|
|
6
|
+
* the bus, and `sessionBus()` is shared, so the claim costs a reference
|
|
7
|
+
* rather than a connection.
|
|
8
|
+
*/
|
|
9
|
+
export declare class BalloonNotifier {
|
|
10
|
+
#private;
|
|
11
|
+
/**
|
|
12
|
+
* Show `message`. Resolves false when there was nothing to show it with.
|
|
13
|
+
*
|
|
14
|
+
* The balloon's timeout passes straight through: both protocols measure it
|
|
15
|
+
* in milliseconds and both read 0 as "until the user dismisses it".
|
|
16
|
+
*/
|
|
17
|
+
send(message: TrayMessage, appName?: string): Promise<boolean>;
|
|
18
|
+
/** Drop the claim. Never closes the connection — that is the app's call,
|
|
19
|
+
* and every other consumer is on the same socket. */
|
|
20
|
+
dispose(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=notify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/tray-host/notify.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAoBjD;;;;;;GAMG;AACH,qBAAa,eAAe;;IAqB1B;;;;;OAKG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,SAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAqB1E;IAED;0DACsD;IAChD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7B;CACF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// Balloon messages, forwarded to the desktop's notification service.
|
|
2
|
+
//
|
|
3
|
+
// `SYSTEM_TRAY_BEGIN_MESSAGE` is the pre-notification-daemon way an icon says
|
|
4
|
+
// something, and older applications still emit it. A host that ignores it
|
|
5
|
+
// leaves them silently unable to speak — so the default is to hand the text
|
|
6
|
+
// to whatever the desktop already uses for notifications, and `onMessage` is
|
|
7
|
+
// the seam for a panel that would rather draw its own bubble.
|
|
8
|
+
//
|
|
9
|
+
// **Nothing here opens a bus.** `sessionBus()` hands over react-x11's shared
|
|
10
|
+
// connection, so the tray, the app's exported service and its menu are one
|
|
11
|
+
// name on the bus rather than three. No bus, or no notification service, is
|
|
12
|
+
// an ordinary state of a healthy machine: the message is dropped, and the
|
|
13
|
+
// error says so for a caller that wants to know.
|
|
14
|
+
import { sessionBus } from 'react-x11';
|
|
15
|
+
const SERVICE = 'org.freedesktop.Notifications';
|
|
16
|
+
const PATH = '/org/freedesktop/Notifications';
|
|
17
|
+
/**
|
|
18
|
+
* A lazily-acquired claim on the session bus, and the `Notify` call over it.
|
|
19
|
+
*
|
|
20
|
+
* Lazy on purpose: a panel that never receives a balloon message never dials
|
|
21
|
+
* the bus, and `sessionBus()` is shared, so the claim costs a reference
|
|
22
|
+
* rather than a connection.
|
|
23
|
+
*/
|
|
24
|
+
export class BalloonNotifier {
|
|
25
|
+
#ref = null;
|
|
26
|
+
#acquiring = null;
|
|
27
|
+
#disposed = false;
|
|
28
|
+
async #bus() {
|
|
29
|
+
if (this.#ref)
|
|
30
|
+
return this.#ref;
|
|
31
|
+
// Not cached as a failure: `sessionBus()` never caches one either, so a
|
|
32
|
+
// bus that appears later is found.
|
|
33
|
+
this.#acquiring ??= sessionBus().finally(() => {
|
|
34
|
+
this.#acquiring = null;
|
|
35
|
+
});
|
|
36
|
+
const ref = await this.#acquiring;
|
|
37
|
+
if (this.#disposed) {
|
|
38
|
+
void ref?.release();
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
this.#ref = ref;
|
|
42
|
+
return ref;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Show `message`. Resolves false when there was nothing to show it with.
|
|
46
|
+
*
|
|
47
|
+
* The balloon's timeout passes straight through: both protocols measure it
|
|
48
|
+
* in milliseconds and both read 0 as "until the user dismisses it".
|
|
49
|
+
*/
|
|
50
|
+
async send(message, appName = 'System Tray') {
|
|
51
|
+
const ref = await this.#bus();
|
|
52
|
+
if (!ref || this.#disposed)
|
|
53
|
+
return false;
|
|
54
|
+
const iface = (await ref.bus
|
|
55
|
+
.getService(SERVICE)
|
|
56
|
+
.getInterface(PATH, SERVICE));
|
|
57
|
+
// A balloon is one string. The first line reads as a title everywhere a
|
|
58
|
+
// notification is drawn, so it is used as one rather than padding the
|
|
59
|
+
// summary with the application's name.
|
|
60
|
+
const [summary = '', ...rest] = message.text.split('\n');
|
|
61
|
+
await iface.Notify(appName, 0, '', summary, rest.join('\n'), [], [], message.timeout);
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
/** Drop the claim. Never closes the connection — that is the app's call,
|
|
65
|
+
* and every other consumer is on the same socket. */
|
|
66
|
+
async dispose() {
|
|
67
|
+
this.#disposed = true;
|
|
68
|
+
const ref = this.#ref;
|
|
69
|
+
this.#ref = null;
|
|
70
|
+
if (ref)
|
|
71
|
+
await ref.release();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=notify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/tray-host/notify.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,4EAA4E;AAC5E,6EAA6E;AAC7E,8DAA8D;AAC9D,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,0EAA0E;AAC1E,iDAAiD;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAKvC,MAAM,OAAO,GAAG,+BAA+B,CAAC;AAChD,MAAM,IAAI,GAAG,gCAAgC,CAAC;AAiB9C;;;;;;GAMG;AACH,MAAM,OAAO,eAAe;IAC1B,IAAI,GAAkB,IAAI,CAAC;IAC3B,UAAU,GAAkC,IAAI,CAAC;IACjD,SAAS,GAAG,KAAK,CAAC;IAElB,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QAChC,wEAAwE;QACxE,mCAAmC;QACnC,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC5C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,KAAK,GAAG,EAAE,OAAO,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,OAAoB,EAAE,OAAO,GAAG,aAAa;QACtD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QACzC,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG;aACzB,UAAU,CAAC,OAAO,CAAC;aACnB,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAuB,CAAC;QACtD,wEAAwE;QACxE,sEAAsE;QACtE,uCAAuC;QACvC,MAAM,CAAC,OAAO,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,KAAK,CAAC,MAAM,CAChB,OAAO,EACP,CAAC,EACD,EAAE,EACF,OAAO,EACP,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EACf,EAAE,EACF,EAAE,EACF,OAAO,CAAC,OAAO,CAChB,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;0DACsD;IACtD,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,GAAG;YAAE,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;CACF"}
|