chat / client / test / vectors / chrome-view.json
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
{
  "_": [
    "The frame — sueta.app.chrome (Phase 5d). `cases` is the pair of OTHER",
    "projections app/chrome takes (app/roster's and app/tiles') plus the context",
    "only the shell knows; `states` is what `project` answers and is also the",
    "input every snapshot is taken from.",
    "",
    "THE ROSTER AND CALL MAPS HERE ARE REDUCED to the keys app/chrome reads —",
    "`:count`/`:status` and the five call flags — and that is checked rather than",
    "asserted: chrome-view.test.mjs pipes a REAL app/roster and app/tiles",
    "projection through `chromeProject` and requires the same state out, so a",
    "future field this file omits would show up there rather than never.",
    "",
    "`html` is recorded for four states only. It is the weaker assertion (it",
    "cannot see which event a button is wired to) and it exists for the two",
    "things markup shows and hiccup does not: escaping, and the class attribute",
    "the CSS actually selects on (`.dot.ok`, `.cb.join.hidden`).",
    "",
    "There is NO generator script, on purpose — see tiles-view.json's `_`.",
    "",
    "`hostile` is a room label that is markup. It comes off this device's own",
    "room list, which is synced between a user's devices, and `esc` was what made",
    "it safe in the template this replaces."
  ],
  "cases": {
    "idle": {
      "roster": "{:count 0 :status \"ok\"}",
      "call": "{:in-call? false :any-call? false :count 0 :mic-on? false :cam-on? false}",
      "ctx": "{:room-label \"kitchen\" :bell-on? false :roster-open? false :thread-open? false :viewer-url nil}"
    },
    "offline": {
      "roster": "{:count 0 :status \"down\"}",
      "call": "{:in-call? false :any-call? false :count 0 :mic-on? false :cam-on? false}",
      "ctx": "{:room-label \"kitchen\" :bell-on? false :roster-open? false :thread-open? false :viewer-url nil}"
    },
    "peers": {
      "roster": "{:count 3 :status \"ok\"}",
      "call": "{:in-call? false :any-call? false :count 0 :mic-on? false :cam-on? false}",
      "ctx": "{:room-label \"kitchen\" :bell-on? false :roster-open? false :thread-open? false :viewer-url nil}"
    },
    "peers-idle": {
      "roster": "{:count 0 :status \"idle\"}",
      "call": "{:in-call? false :any-call? false :count 0 :mic-on? false :cam-on? false}",
      "ctx": "{:room-label \"kitchen\" :bell-on? false :roster-open? false :thread-open? false :viewer-url nil}"
    },
    "relabelled": {
      "roster": "{:count 0 :status \"ok\"}",
      "call": "{:in-call? false :any-call? false :count 0 :mic-on? false :cam-on? false}",
      "ctx": "{:room-label \"the kitchen table\" :bell-on? false :roster-open? false :thread-open? false :viewer-url nil}"
    },
    "bell": {
      "roster": "{:count 0 :status \"ok\"}",
      "call": "{:in-call? false :any-call? false :count 0 :mic-on? false :cam-on? false}",
      "ctx": "{:room-label \"kitchen\" :bell-on? true :roster-open? false :thread-open? false :viewer-url nil}"
    },
    "roster-open": {
      "roster": "{:count 3 :status \"ok\"}",
      "call": "{:in-call? false :any-call? false :count 0 :mic-on? false :cam-on? false}",
      "ctx": "{:room-label \"kitchen\" :bell-on? false :roster-open? true :thread-open? false :viewer-url nil}"
    },
    "thread-open": {
      "roster": "{:count 0 :status \"ok\"}",
      "call": "{:in-call? false :any-call? false :count 0 :mic-on? false :cam-on? false}",
      "ctx": "{:room-label \"kitchen\" :bell-on? false :roster-open? false :thread-open? true :viewer-url nil}"
    },
    "viewer": {
      "roster": "{:count 0 :status \"ok\"}",
      "call": "{:in-call? false :any-call? false :count 0 :mic-on? false :cam-on? false}",
      "ctx": "{:room-label \"kitchen\" :bell-on? false :roster-open? false :thread-open? false :viewer-url \"blob:https://chat.ardegazu.ro/9f1c\"}"
    },
    "watching": {
      "roster": "{:count 1 :status \"ok\"}",
      "call": "{:in-call? false :any-call? true :count 1 :mic-on? false :cam-on? false}",
      "ctx": "{:room-label \"kitchen\" :bell-on? false :roster-open? false :thread-open? false :viewer-url nil}"
    },
    "in-call": {
      "roster": "{:count 1 :status \"ok\"}",
      "call": "{:in-call? true :any-call? true :count 2 :mic-on? true :cam-on? false}",
      "ctx": "{:room-label \"kitchen\" :bell-on? false :roster-open? false :thread-open? false :viewer-url nil}"
    },
    "muted": {
      "roster": "{:count 1 :status \"ok\"}",
      "call": "{:in-call? true :any-call? true :count 2 :mic-on? false :cam-on? false}",
      "ctx": "{:room-label \"kitchen\" :bell-on? false :roster-open? false :thread-open? false :viewer-url nil}"
    },
    "cam-on": {
      "roster": "{:count 1 :status \"ok\"}",
      "call": "{:in-call? true :any-call? true :count 2 :mic-on? true :cam-on? true}",
      "ctx": "{:room-label \"kitchen\" :bell-on? false :roster-open? false :thread-open? false :viewer-url nil}"
    },
    "trio": {
      "roster": "{:count 2 :status \"ok\"}",
      "call": "{:in-call? true :any-call? true :count 3 :mic-on? true :cam-on? false}",
      "ctx": "{:room-label \"kitchen\" :bell-on? false :roster-open? false :thread-open? false :viewer-url nil}"
    },
    "hostile": {
      "roster": "{:count 0 :status \"ok\"}",
      "call": "{:in-call? false :any-call? false :count 0 :mic-on? false :cam-on? false}",
      "ctx": "{:room-label \"<img src=x onerror=alert(1)>\" :bell-on? false :roster-open? false :thread-open? false :viewer-url nil}"
    }
  },
  "states": {
    "idle": "{:any-call? false, :bell-on? false, :call-count 0, :cam-on? false, :in-call? false, :mic-on? false, :peers-label \"just you\", :room-label \"kitchen\", :roster-open? false, :status \"ok\", :thread-open? false, :viewer-url nil}",
    "offline": "{:any-call? false, :bell-on? false, :call-count 0, :cam-on? false, :in-call? false, :mic-on? false, :peers-label \"just you\", :room-label \"kitchen\", :roster-open? false, :status \"down\", :thread-open? false, :viewer-url nil}",
    "peers": "{:any-call? false, :bell-on? false, :call-count 0, :cam-on? false, :in-call? false, :mic-on? false, :peers-label \"4 here\", :room-label \"kitchen\", :roster-open? false, :status \"ok\", :thread-open? false, :viewer-url nil}",
    "peers-idle": "{:any-call? false, :bell-on? false, :call-count 0, :cam-on? false, :in-call? false, :mic-on? false, :peers-label \"just you\", :room-label \"kitchen\", :roster-open? false, :status \"idle\", :thread-open? false, :viewer-url nil}",
    "relabelled": "{:any-call? false, :bell-on? false, :call-count 0, :cam-on? false, :in-call? false, :mic-on? false, :peers-label \"just you\", :room-label \"the kitchen table\", :roster-open? false, :status \"ok\", :thread-open? false, :viewer-url nil}",
    "bell": "{:any-call? false, :bell-on? true, :call-count 0, :cam-on? false, :in-call? false, :mic-on? false, :peers-label \"just you\", :room-label \"kitchen\", :roster-open? false, :status \"ok\", :thread-open? false, :viewer-url nil}",
    "roster-open": "{:any-call? false, :bell-on? false, :call-count 0, :cam-on? false, :in-call? false, :mic-on? false, :peers-label \"4 here\", :room-label \"kitchen\", :roster-open? true, :status \"ok\", :thread-open? false, :viewer-url nil}",
    "thread-open": "{:any-call? false, :bell-on? false, :call-count 0, :cam-on? false, :in-call? false, :mic-on? false, :peers-label \"just you\", :room-label \"kitchen\", :roster-open? false, :status \"ok\", :thread-open? true, :viewer-url nil}",
    "viewer": "{:any-call? false, :bell-on? false, :call-count 0, :cam-on? false, :in-call? false, :mic-on? false, :peers-label \"just you\", :room-label \"kitchen\", :roster-open? false, :status \"ok\", :thread-open? false, :viewer-url \"blob:https://chat.ardegazu.ro/9f1c\"}",
    "watching": "{:any-call? true, :bell-on? false, :call-count 1, :cam-on? false, :in-call? false, :mic-on? false, :peers-label \"2 here\", :room-label \"kitchen\", :roster-open? false, :status \"ok\", :thread-open? false, :viewer-url nil}",
    "in-call": "{:any-call? true, :bell-on? false, :call-count 2, :cam-on? false, :in-call? true, :mic-on? true, :peers-label \"2 here\", :room-label \"kitchen\", :roster-open? false, :status \"ok\", :thread-open? false, :viewer-url nil}",
    "muted": "{:any-call? true, :bell-on? false, :call-count 2, :cam-on? false, :in-call? true, :mic-on? false, :peers-label \"2 here\", :room-label \"kitchen\", :roster-open? false, :status \"ok\", :thread-open? false, :viewer-url nil}",
    "cam-on": "{:any-call? true, :bell-on? false, :call-count 2, :cam-on? true, :in-call? true, :mic-on? true, :peers-label \"2 here\", :room-label \"kitchen\", :roster-open? false, :status \"ok\", :thread-open? false, :viewer-url nil}",
    "trio": "{:any-call? true, :bell-on? false, :call-count 3, :cam-on? false, :in-call? true, :mic-on? true, :peers-label \"3 here\", :room-label \"kitchen\", :roster-open? false, :status \"ok\", :thread-open? false, :viewer-url nil}",
    "hostile": "{:any-call? false, :bell-on? false, :call-count 0, :cam-on? false, :in-call? false, :mic-on? false, :peers-label \"just you\", :room-label \"<img src=x onerror=alert(1)>\", :roster-open? false, :status \"ok\", :thread-open? false, :viewer-url nil}"
  },
  "hiccup": {
    "idle": "([:div.app [:header.top [:button#rooms-btn.icon-btn {:title \"your rooms\", :on {:click [:go-lobby]}} \"☰\"] [:div.brand [:span.lock \"🔒\"] \" \" [:span#room-label \"kitchen\"] \" \" [:span.ver \"v0\"]] [:button#peers-pill.peers-pill {:on {:click [:toggle-roster]}} [:span#status-dot.dot {:class \"ok\"}] [:span#peer-count \"just you\"]] [:button#call-btn.icon-btn {:class nil, :title \"start a call\", :on {:click [:join-call false]}} \"📞\"] [:button#bell-btn.icon-btn {:title \"notifications\", :on {:click [:toggle-bell]}} \"🔕\"] [:button#invite-btn.icon-btn {:title \"copy invite link\", :on {:click [:invite]}} \"🔗\"]] [:div#roster.roster {:class \"hidden\"}] [:div#callbar.callbar {:class \"hidden\"} [:span#call-info.call-info \"📞 0 in call\"] [:button#call-join.cb.join {:class nil, :on {:click [:join-call false]}} \"join\"] [:button#call-join-video.cb.join {:class nil, :on {:click [:join-call true]}} \"join 📹\"] [:button#call-mic.cb {:class [\"hidden\"], :on {:click [:toggle-mic]}} \"🎤\"] [:button#call-cam.cb {:class [\"hidden\"], :on {:click [:toggle-cam]}} \"📷\"] [:button#call-leave.cb.danger {:class \"hidden\", :on {:click [:leave-call]}} \"leave\"]] [:div#tiles.tiles {:class \"hidden\"}] [:main#msgs.msgs] [:div#composer.composer] [:aside#thread.thread {:class \"hidden\"} [:header.top [:button#thread-close.icon-btn {:on {:click [:close-thread]}} \"←\"] [:div.brand \"thread\"]] [:main#thread-msgs.msgs] [:div#thread-composer.composer]] [:div#viewer.viewer {:class \"hidden\", :on {:click [:close-viewer]}} nil]] [:div#sheet] [:div#toasts])",
    "offline": "([:div.app [:header.top [:button#rooms-btn.icon-btn {:title \"your rooms\", :on {:click [:go-lobby]}} \"☰\"] [:div.brand [:span.lock \"🔒\"] \" \" [:span#room-label \"kitchen\"] \" \" [:span.ver \"v0\"]] [:button#peers-pill.peers-pill {:on {:click [:toggle-roster]}} [:span#status-dot.dot {:class \"down\"}] [:span#peer-count \"just you\"]] [:button#call-btn.icon-btn {:class nil, :title \"start a call\", :on {:click [:join-call false]}} \"📞\"] [:button#bell-btn.icon-btn {:title \"notifications\", :on {:click [:toggle-bell]}} \"🔕\"] [:button#invite-btn.icon-btn {:title \"copy invite link\", :on {:click [:invite]}} \"🔗\"]] [:div#roster.roster {:class \"hidden\"}] [:div#callbar.callbar {:class \"hidden\"} [:span#call-info.call-info \"📞 0 in call\"] [:button#call-join.cb.join {:class nil, :on {:click [:join-call false]}} \"join\"] [:button#call-join-video.cb.join {:class nil, :on {:click [:join-call true]}} \"join 📹\"] [:button#call-mic.cb {:class [\"hidden\"], :on {:click [:toggle-mic]}} \"🎤\"] [:button#call-cam.cb {:class [\"hidden\"], :on {:click [:toggle-cam]}} \"📷\"] [:button#call-leave.cb.danger {:class \"hidden\", :on {:click [:leave-call]}} \"leave\"]] [:div#tiles.tiles {:class \"hidden\"}] [:main#msgs.msgs] [:div#composer.composer] [:aside#thread.thread {:class \"hidden\"} [:header.top [:button#thread-close.icon-btn {:on {:click [:close-thread]}} \"←\"] [:div.brand \"thread\"]] [:main#thread-msgs.msgs] [:div#thread-composer.composer]] [:div#viewer.viewer {:class \"hidden\", :on {:click [:close-viewer]}} nil]] [:div#sheet] [:div#toasts])",
    "peers": "([:div.app [:header.top [:button#rooms-btn.icon-btn {:title \"your rooms\", :on {:click [:go-lobby]}} \"☰\"] [:div.brand [:span.lock \"🔒\"] \" \" [:span#room-label \"kitchen\"] \" \" [:span.ver \"v0\"]] [:button#peers-pill.peers-pill {:on {:click [:toggle-roster]}} [:span#status-dot.dot {:class \"ok\"}] [:span#peer-count \"4 here\"]] [:button#call-btn.icon-btn {:class nil, :title \"start a call\", :on {:click [:join-call false]}} \"📞\"] [:button#bell-btn.icon-btn {:title \"notifications\", :on {:click [:toggle-bell]}} \"🔕\"] [:button#invite-btn.icon-btn {:title \"copy invite link\", :on {:click [:invite]}} \"🔗\"]] [:div#roster.roster {:class \"hidden\"}] [:div#callbar.callbar {:class \"hidden\"} [:span#call-info.call-info \"📞 0 in call\"] [:button#call-join.cb.join {:class nil, :on {:click [:join-call false]}} \"join\"] [:button#call-join-video.cb.join {:class nil, :on {:click [:join-call true]}} \"join 📹\"] [:button#call-mic.cb {:class [\"hidden\"], :on {:click [:toggle-mic]}} \"🎤\"] [:button#call-cam.cb {:class [\"hidden\"], :on {:click [:toggle-cam]}} \"📷\"] [:button#call-leave.cb.danger {:class \"hidden\", :on {:click [:leave-call]}} \"leave\"]] [:div#tiles.tiles {:class \"hidden\"}] [:main#msgs.msgs] [:div#composer.composer] [:aside#thread.thread {:class \"hidden\"} [:header.top [:button#thread-close.icon-btn {:on {:click [:close-thread]}} \"←\"] [:div.brand \"thread\"]] [:main#thread-msgs.msgs] [:div#thread-composer.composer]] [:div#viewer.viewer {:class \"hidden\", :on {:click [:close-viewer]}} nil]] [:div#sheet] [:div#toasts])",
    "peers-idle": "([:div.app [:header.top [:button#rooms-btn.icon-btn {:title \"your rooms\", :on {:click [:go-lobby]}} \"☰\"] [:div.brand [:span.lock \"🔒\"] \" \" [:span#room-label \"kitchen\"] \" \" [:span.ver \"v0\"]] [:button#peers-pill.peers-pill {:on {:click [:toggle-roster]}} [:span#status-dot.dot {:class \"idle\"}] [:span#peer-count \"just you\"]] [:button#call-btn.icon-btn {:class nil, :title \"start a call\", :on {:click [:join-call false]}} \"📞\"] [:button#bell-btn.icon-btn {:title \"notifications\", :on {:click [:toggle-bell]}} \"🔕\"] [:button#invite-btn.icon-btn {:title \"copy invite link\", :on {:click [:invite]}} \"🔗\"]] [:div#roster.roster {:class \"hidden\"}] [:div#callbar.callbar {:class \"hidden\"} [:span#call-info.call-info \"📞 0 in call\"] [:button#call-join.cb.join {:class nil, :on {:click [:join-call false]}} \"join\"] [:button#call-join-video.cb.join {:class nil, :on {:click [:join-call true]}} \"join 📹\"] [:button#call-mic.cb {:class [\"hidden\"], :on {:click [:toggle-mic]}} \"🎤\"] [:button#call-cam.cb {:class [\"hidden\"], :on {:click [:toggle-cam]}} \"📷\"] [:button#call-leave.cb.danger {:class \"hidden\", :on {:click [:leave-call]}} \"leave\"]] [:div#tiles.tiles {:class \"hidden\"}] [:main#msgs.msgs] [:div#composer.composer] [:aside#thread.thread {:class \"hidden\"} [:header.top [:button#thread-close.icon-btn {:on {:click [:close-thread]}} \"←\"] [:div.brand \"thread\"]] [:main#thread-msgs.msgs] [:div#thread-composer.composer]] [:div#viewer.viewer {:class \"hidden\", :on {:click [:close-viewer]}} nil]] [:div#sheet] [:div#toasts])",
    "relabelled": "([:div.app [:header.top [:button#rooms-btn.icon-btn {:title \"your rooms\", :on {:click [:go-lobby]}} \"☰\"] [:div.brand [:span.lock \"🔒\"] \" \" [:span#room-label \"the kitchen table\"] \" \" [:span.ver \"v0\"]] [:button#peers-pill.peers-pill {:on {:click [:toggle-roster]}} [:span#status-dot.dot {:class \"ok\"}] [:span#peer-count \"just you\"]] [:button#call-btn.icon-btn {:class nil, :title \"start a call\", :on {:click [:join-call false]}} \"📞\"] [:button#bell-btn.icon-btn {:title \"notifications\", :on {:click [:toggle-bell]}} \"🔕\"] [:button#invite-btn.icon-btn {:title \"copy invite link\", :on {:click [:invite]}} \"🔗\"]] [:div#roster.roster {:class \"hidden\"}] [:div#callbar.callbar {:class \"hidden\"} [:span#call-info.call-info \"📞 0 in call\"] [:button#call-join.cb.join {:class nil, :on {:click [:join-call false]}} \"join\"] [:button#call-join-video.cb.join {:class nil, :on {:click [:join-call true]}} \"join 📹\"] [:button#call-mic.cb {:class [\"hidden\"], :on {:click [:toggle-mic]}} \"🎤\"] [:button#call-cam.cb {:class [\"hidden\"], :on {:click [:toggle-cam]}} \"📷\"] [:button#call-leave.cb.danger {:class \"hidden\", :on {:click [:leave-call]}} \"leave\"]] [:div#tiles.tiles {:class \"hidden\"}] [:main#msgs.msgs] [:div#composer.composer] [:aside#thread.thread {:class \"hidden\"} [:header.top [:button#thread-close.icon-btn {:on {:click [:close-thread]}} \"←\"] [:div.brand \"thread\"]] [:main#thread-msgs.msgs] [:div#thread-composer.composer]] [:div#viewer.viewer {:class \"hidden\", :on {:click [:close-viewer]}} nil]] [:div#sheet] [:div#toasts])",
    "bell": "([:div.app [:header.top [:button#rooms-btn.icon-btn {:title \"your rooms\", :on {:click [:go-lobby]}} \"☰\"] [:div.brand [:span.lock \"🔒\"] \" \" [:span#room-label \"kitchen\"] \" \" [:span.ver \"v0\"]] [:button#peers-pill.peers-pill {:on {:click [:toggle-roster]}} [:span#status-dot.dot {:class \"ok\"}] [:span#peer-count \"just you\"]] [:button#call-btn.icon-btn {:class nil, :title \"start a call\", :on {:click [:join-call false]}} \"📞\"] [:button#bell-btn.icon-btn {:title \"notifications\", :on {:click [:toggle-bell]}} \"🔔\"] [:button#invite-btn.icon-btn {:title \"copy invite link\", :on {:click [:invite]}} \"🔗\"]] [:div#roster.roster {:class \"hidden\"}] [:div#callbar.callbar {:class \"hidden\"} [:span#call-info.call-info \"📞 0 in call\"] [:button#call-join.cb.join {:class nil, :on {:click [:join-call false]}} \"join\"] [:button#call-join-video.cb.join {:class nil, :on {:click [:join-call true]}} \"join 📹\"] [:button#call-mic.cb {:class [\"hidden\"], :on {:click [:toggle-mic]}} \"🎤\"] [:button#call-cam.cb {:class [\"hidden\"], :on {:click [:toggle-cam]}} \"📷\"] [:button#call-leave.cb.danger {:class \"hidden\", :on {:click [:leave-call]}} \"leave\"]] [:div#tiles.tiles {:class \"hidden\"}] [:main#msgs.msgs] [:div#composer.composer] [:aside#thread.thread {:class \"hidden\"} [:header.top [:button#thread-close.icon-btn {:on {:click [:close-thread]}} \"←\"] [:div.brand \"thread\"]] [:main#thread-msgs.msgs] [:div#thread-composer.composer]] [:div#viewer.viewer {:class \"hidden\", :on {:click [:close-viewer]}} nil]] [:div#sheet] [:div#toasts])",
    "roster-open": "([:div.app [:header.top [:button#rooms-btn.icon-btn {:title \"your rooms\", :on {:click [:go-lobby]}} \"☰\"] [:div.brand [:span.lock \"🔒\"] \" \" [:span#room-label \"kitchen\"] \" \" [:span.ver \"v0\"]] [:button#peers-pill.peers-pill {:on {:click [:toggle-roster]}} [:span#status-dot.dot {:class \"ok\"}] [:span#peer-count \"4 here\"]] [:button#call-btn.icon-btn {:class nil, :title \"start a call\", :on {:click [:join-call false]}} \"📞\"] [:button#bell-btn.icon-btn {:title \"notifications\", :on {:click [:toggle-bell]}} \"🔕\"] [:button#invite-btn.icon-btn {:title \"copy invite link\", :on {:click [:invite]}} \"🔗\"]] [:div#roster.roster {:class nil}] [:div#callbar.callbar {:class \"hidden\"} [:span#call-info.call-info \"📞 0 in call\"] [:button#call-join.cb.join {:class nil, :on {:click [:join-call false]}} \"join\"] [:button#call-join-video.cb.join {:class nil, :on {:click [:join-call true]}} \"join 📹\"] [:button#call-mic.cb {:class [\"hidden\"], :on {:click [:toggle-mic]}} \"🎤\"] [:button#call-cam.cb {:class [\"hidden\"], :on {:click [:toggle-cam]}} \"📷\"] [:button#call-leave.cb.danger {:class \"hidden\", :on {:click [:leave-call]}} \"leave\"]] [:div#tiles.tiles {:class \"hidden\"}] [:main#msgs.msgs] [:div#composer.composer] [:aside#thread.thread {:class \"hidden\"} [:header.top [:button#thread-close.icon-btn {:on {:click [:close-thread]}} \"←\"] [:div.brand \"thread\"]] [:main#thread-msgs.msgs] [:div#thread-composer.composer]] [:div#viewer.viewer {:class \"hidden\", :on {:click [:close-viewer]}} nil]] [:div#sheet] [:div#toasts])",
    "thread-open": "([:div.app [:header.top [:button#rooms-btn.icon-btn {:title \"your rooms\", :on {:click [:go-lobby]}} \"☰\"] [:div.brand [:span.lock \"🔒\"] \" \" [:span#room-label \"kitchen\"] \" \" [:span.ver \"v0\"]] [:button#peers-pill.peers-pill {:on {:click [:toggle-roster]}} [:span#status-dot.dot {:class \"ok\"}] [:span#peer-count \"just you\"]] [:button#call-btn.icon-btn {:class nil, :title \"start a call\", :on {:click [:join-call false]}} \"📞\"] [:button#bell-btn.icon-btn {:title \"notifications\", :on {:click [:toggle-bell]}} \"🔕\"] [:button#invite-btn.icon-btn {:title \"copy invite link\", :on {:click [:invite]}} \"🔗\"]] [:div#roster.roster {:class \"hidden\"}] [:div#callbar.callbar {:class \"hidden\"} [:span#call-info.call-info \"📞 0 in call\"] [:button#call-join.cb.join {:class nil, :on {:click [:join-call false]}} \"join\"] [:button#call-join-video.cb.join {:class nil, :on {:click [:join-call true]}} \"join 📹\"] [:button#call-mic.cb {:class [\"hidden\"], :on {:click [:toggle-mic]}} \"🎤\"] [:button#call-cam.cb {:class [\"hidden\"], :on {:click [:toggle-cam]}} \"📷\"] [:button#call-leave.cb.danger {:class \"hidden\", :on {:click [:leave-call]}} \"leave\"]] [:div#tiles.tiles {:class \"hidden\"}] [:main#msgs.msgs] [:div#composer.composer] [:aside#thread.thread {:class nil} [:header.top [:button#thread-close.icon-btn {:on {:click [:close-thread]}} \"←\"] [:div.brand \"thread\"]] [:main#thread-msgs.msgs] [:div#thread-composer.composer]] [:div#viewer.viewer {:class \"hidden\", :on {:click [:close-viewer]}} nil]] [:div#sheet] [:div#toasts])",
    "viewer": "([:div.app [:header.top [:button#rooms-btn.icon-btn {:title \"your rooms\", :on {:click [:go-lobby]}} \"☰\"] [:div.brand [:span.lock \"🔒\"] \" \" [:span#room-label \"kitchen\"] \" \" [:span.ver \"v0\"]] [:button#peers-pill.peers-pill {:on {:click [:toggle-roster]}} [:span#status-dot.dot {:class \"ok\"}] [:span#peer-count \"just you\"]] [:button#call-btn.icon-btn {:class nil, :title \"start a call\", :on {:click [:join-call false]}} \"📞\"] [:button#bell-btn.icon-btn {:title \"notifications\", :on {:click [:toggle-bell]}} \"🔕\"] [:button#invite-btn.icon-btn {:title \"copy invite link\", :on {:click [:invite]}} \"🔗\"]] [:div#roster.roster {:class \"hidden\"}] [:div#callbar.callbar {:class \"hidden\"} [:span#call-info.call-info \"📞 0 in call\"] [:button#call-join.cb.join {:class nil, :on {:click [:join-call false]}} \"join\"] [:button#call-join-video.cb.join {:class nil, :on {:click [:join-call true]}} \"join 📹\"] [:button#call-mic.cb {:class [\"hidden\"], :on {:click [:toggle-mic]}} \"🎤\"] [:button#call-cam.cb {:class [\"hidden\"], :on {:click [:toggle-cam]}} \"📷\"] [:button#call-leave.cb.danger {:class \"hidden\", :on {:click [:leave-call]}} \"leave\"]] [:div#tiles.tiles {:class \"hidden\"}] [:main#msgs.msgs] [:div#composer.composer] [:aside#thread.thread {:class \"hidden\"} [:header.top [:button#thread-close.icon-btn {:on {:click [:close-thread]}} \"←\"] [:div.brand \"thread\"]] [:main#thread-msgs.msgs] [:div#thread-composer.composer]] [:div#viewer.viewer {:class nil, :on {:click [:close-viewer]}} [:img {:src \"blob:https://chat.ardegazu.ro/9f1c\", :alt \"shared image\"}]]] [:div#sheet] [:div#toasts])",
    "watching": "([:div.app [:header.top [:button#rooms-btn.icon-btn {:title \"your rooms\", :on {:click [:go-lobby]}} \"☰\"] [:div.brand [:span.lock \"🔒\"] \" \" [:span#room-label \"kitchen\"] \" \" [:span.ver \"v0\"]] [:button#peers-pill.peers-pill {:on {:click [:toggle-roster]}} [:span#status-dot.dot {:class \"ok\"}] [:span#peer-count \"2 here\"]] [:button#call-btn.icon-btn {:class \"hidden\", :title \"start a call\", :on {:click [:join-call false]}} \"📞\"] [:button#bell-btn.icon-btn {:title \"notifications\", :on {:click [:toggle-bell]}} \"🔕\"] [:button#invite-btn.icon-btn {:title \"copy invite link\", :on {:click [:invite]}} \"🔗\"]] [:div#roster.roster {:class \"hidden\"}] [:div#callbar.callbar {:class nil} [:span#call-info.call-info \"📞 1 in call\"] [:button#call-join.cb.join {:class nil, :on {:click [:join-call false]}} \"join\"] [:button#call-join-video.cb.join {:class nil, :on {:click [:join-call true]}} \"join 📹\"] [:button#call-mic.cb {:class [\"hidden\"], :on {:click [:toggle-mic]}} \"🎤\"] [:button#call-cam.cb {:class [\"hidden\"], :on {:click [:toggle-cam]}} \"📷\"] [:button#call-leave.cb.danger {:class \"hidden\", :on {:click [:leave-call]}} \"leave\"]] [:div#tiles.tiles {:class nil}] [:main#msgs.msgs] [:div#composer.composer] [:aside#thread.thread {:class \"hidden\"} [:header.top [:button#thread-close.icon-btn {:on {:click [:close-thread]}} \"←\"] [:div.brand \"thread\"]] [:main#thread-msgs.msgs] [:div#thread-composer.composer]] [:div#viewer.viewer {:class \"hidden\", :on {:click [:close-viewer]}} nil]] [:div#sheet] [:div#toasts])",
    "in-call": "([:div.app [:header.top [:button#rooms-btn.icon-btn {:title \"your rooms\", :on {:click [:go-lobby]}} \"☰\"] [:div.brand [:span.lock \"🔒\"] \" \" [:span#room-label \"kitchen\"] \" \" [:span.ver \"v0\"]] [:button#peers-pill.peers-pill {:on {:click [:toggle-roster]}} [:span#status-dot.dot {:class \"ok\"}] [:span#peer-count \"2 here\"]] [:button#call-btn.icon-btn {:class \"hidden\", :title \"start a call\", :on {:click [:join-call false]}} \"📞\"] [:button#bell-btn.icon-btn {:title \"notifications\", :on {:click [:toggle-bell]}} \"🔕\"] [:button#invite-btn.icon-btn {:title \"copy invite link\", :on {:click [:invite]}} \"🔗\"]] [:div#roster.roster {:class \"hidden\"}] [:div#callbar.callbar {:class nil} [:span#call-info.call-info \"📞 2 in call\"] [:button#call-join.cb.join {:class \"hidden\", :on {:click [:join-call false]}} \"join\"] [:button#call-join-video.cb.join {:class \"hidden\", :on {:click [:join-call true]}} \"join 📹\"] [:button#call-mic.cb {:class [], :on {:click [:toggle-mic]}} \"🎤\"] [:button#call-cam.cb {:class [\"off\"], :on {:click [:toggle-cam]}} \"📷\"] [:button#call-leave.cb.danger {:class nil, :on {:click [:leave-call]}} \"leave\"]] [:div#tiles.tiles {:class nil}] [:main#msgs.msgs] [:div#composer.composer] [:aside#thread.thread {:class \"hidden\"} [:header.top [:button#thread-close.icon-btn {:on {:click [:close-thread]}} \"←\"] [:div.brand \"thread\"]] [:main#thread-msgs.msgs] [:div#thread-composer.composer]] [:div#viewer.viewer {:class \"hidden\", :on {:click [:close-viewer]}} nil]] [:div#sheet] [:div#toasts])",
    "muted": "([:div.app [:header.top [:button#rooms-btn.icon-btn {:title \"your rooms\", :on {:click [:go-lobby]}} \"☰\"] [:div.brand [:span.lock \"🔒\"] \" \" [:span#room-label \"kitchen\"] \" \" [:span.ver \"v0\"]] [:button#peers-pill.peers-pill {:on {:click [:toggle-roster]}} [:span#status-dot.dot {:class \"ok\"}] [:span#peer-count \"2 here\"]] [:button#call-btn.icon-btn {:class \"hidden\", :title \"start a call\", :on {:click [:join-call false]}} \"📞\"] [:button#bell-btn.icon-btn {:title \"notifications\", :on {:click [:toggle-bell]}} \"🔕\"] [:button#invite-btn.icon-btn {:title \"copy invite link\", :on {:click [:invite]}} \"🔗\"]] [:div#roster.roster {:class \"hidden\"}] [:div#callbar.callbar {:class nil} [:span#call-info.call-info \"📞 2 in call\"] [:button#call-join.cb.join {:class \"hidden\", :on {:click [:join-call false]}} \"join\"] [:button#call-join-video.cb.join {:class \"hidden\", :on {:click [:join-call true]}} \"join 📹\"] [:button#call-mic.cb {:class [\"off\"], :on {:click [:toggle-mic]}} \"🔇\"] [:button#call-cam.cb {:class [\"off\"], :on {:click [:toggle-cam]}} \"📷\"] [:button#call-leave.cb.danger {:class nil, :on {:click [:leave-call]}} \"leave\"]] [:div#tiles.tiles {:class nil}] [:main#msgs.msgs] [:div#composer.composer] [:aside#thread.thread {:class \"hidden\"} [:header.top [:button#thread-close.icon-btn {:on {:click [:close-thread]}} \"←\"] [:div.brand \"thread\"]] [:main#thread-msgs.msgs] [:div#thread-composer.composer]] [:div#viewer.viewer {:class \"hidden\", :on {:click [:close-viewer]}} nil]] [:div#sheet] [:div#toasts])",
    "cam-on": "([:div.app [:header.top [:button#rooms-btn.icon-btn {:title \"your rooms\", :on {:click [:go-lobby]}} \"☰\"] [:div.brand [:span.lock \"🔒\"] \" \" [:span#room-label \"kitchen\"] \" \" [:span.ver \"v0\"]] [:button#peers-pill.peers-pill {:on {:click [:toggle-roster]}} [:span#status-dot.dot {:class \"ok\"}] [:span#peer-count \"2 here\"]] [:button#call-btn.icon-btn {:class \"hidden\", :title \"start a call\", :on {:click [:join-call false]}} \"📞\"] [:button#bell-btn.icon-btn {:title \"notifications\", :on {:click [:toggle-bell]}} \"🔕\"] [:button#invite-btn.icon-btn {:title \"copy invite link\", :on {:click [:invite]}} \"🔗\"]] [:div#roster.roster {:class \"hidden\"}] [:div#callbar.callbar {:class nil} [:span#call-info.call-info \"📞 2 in call\"] [:button#call-join.cb.join {:class \"hidden\", :on {:click [:join-call false]}} \"join\"] [:button#call-join-video.cb.join {:class \"hidden\", :on {:click [:join-call true]}} \"join 📹\"] [:button#call-mic.cb {:class [], :on {:click [:toggle-mic]}} \"🎤\"] [:button#call-cam.cb {:class [], :on {:click [:toggle-cam]}} \"📷\"] [:button#call-leave.cb.danger {:class nil, :on {:click [:leave-call]}} \"leave\"]] [:div#tiles.tiles {:class nil}] [:main#msgs.msgs] [:div#composer.composer] [:aside#thread.thread {:class \"hidden\"} [:header.top [:button#thread-close.icon-btn {:on {:click [:close-thread]}} \"←\"] [:div.brand \"thread\"]] [:main#thread-msgs.msgs] [:div#thread-composer.composer]] [:div#viewer.viewer {:class \"hidden\", :on {:click [:close-viewer]}} nil]] [:div#sheet] [:div#toasts])",
    "trio": "([:div.app [:header.top [:button#rooms-btn.icon-btn {:title \"your rooms\", :on {:click [:go-lobby]}} \"☰\"] [:div.brand [:span.lock \"🔒\"] \" \" [:span#room-label \"kitchen\"] \" \" [:span.ver \"v0\"]] [:button#peers-pill.peers-pill {:on {:click [:toggle-roster]}} [:span#status-dot.dot {:class \"ok\"}] [:span#peer-count \"3 here\"]] [:button#call-btn.icon-btn {:class \"hidden\", :title \"start a call\", :on {:click [:join-call false]}} \"📞\"] [:button#bell-btn.icon-btn {:title \"notifications\", :on {:click [:toggle-bell]}} \"🔕\"] [:button#invite-btn.icon-btn {:title \"copy invite link\", :on {:click [:invite]}} \"🔗\"]] [:div#roster.roster {:class \"hidden\"}] [:div#callbar.callbar {:class nil} [:span#call-info.call-info \"📞 3 in call\"] [:button#call-join.cb.join {:class \"hidden\", :on {:click [:join-call false]}} \"join\"] [:button#call-join-video.cb.join {:class \"hidden\", :on {:click [:join-call true]}} \"join 📹\"] [:button#call-mic.cb {:class [], :on {:click [:toggle-mic]}} \"🎤\"] [:button#call-cam.cb {:class [\"off\"], :on {:click [:toggle-cam]}} \"📷\"] [:button#call-leave.cb.danger {:class nil, :on {:click [:leave-call]}} \"leave\"]] [:div#tiles.tiles {:class nil}] [:main#msgs.msgs] [:div#composer.composer] [:aside#thread.thread {:class \"hidden\"} [:header.top [:button#thread-close.icon-btn {:on {:click [:close-thread]}} \"←\"] [:div.brand \"thread\"]] [:main#thread-msgs.msgs] [:div#thread-composer.composer]] [:div#viewer.viewer {:class \"hidden\", :on {:click [:close-viewer]}} nil]] [:div#sheet] [:div#toasts])",
    "hostile": "([:div.app [:header.top [:button#rooms-btn.icon-btn {:title \"your rooms\", :on {:click [:go-lobby]}} \"☰\"] [:div.brand [:span.lock \"🔒\"] \" \" [:span#room-label \"<img src=x onerror=alert(1)>\"] \" \" [:span.ver \"v0\"]] [:button#peers-pill.peers-pill {:on {:click [:toggle-roster]}} [:span#status-dot.dot {:class \"ok\"}] [:span#peer-count \"just you\"]] [:button#call-btn.icon-btn {:class nil, :title \"start a call\", :on {:click [:join-call false]}} \"📞\"] [:button#bell-btn.icon-btn {:title \"notifications\", :on {:click [:toggle-bell]}} \"🔕\"] [:button#invite-btn.icon-btn {:title \"copy invite link\", :on {:click [:invite]}} \"🔗\"]] [:div#roster.roster {:class \"hidden\"}] [:div#callbar.callbar {:class \"hidden\"} [:span#call-info.call-info \"📞 0 in call\"] [:button#call-join.cb.join {:class nil, :on {:click [:join-call false]}} \"join\"] [:button#call-join-video.cb.join {:class nil, :on {:click [:join-call true]}} \"join 📹\"] [:button#call-mic.cb {:class [\"hidden\"], :on {:click [:toggle-mic]}} \"🎤\"] [:button#call-cam.cb {:class [\"hidden\"], :on {:click [:toggle-cam]}} \"📷\"] [:button#call-leave.cb.danger {:class \"hidden\", :on {:click [:leave-call]}} \"leave\"]] [:div#tiles.tiles {:class \"hidden\"}] [:main#msgs.msgs] [:div#composer.composer] [:aside#thread.thread {:class \"hidden\"} [:header.top [:button#thread-close.icon-btn {:on {:click [:close-thread]}} \"←\"] [:div.brand \"thread\"]] [:main#thread-msgs.msgs] [:div#thread-composer.composer]] [:div#viewer.viewer {:class \"hidden\", :on {:click [:close-viewer]}} nil]] [:div#sheet] [:div#toasts])"
  },
  "html": {
    "idle": "<div class=\"app\"><header class=\"top\"><button title=\"your rooms\" id=\"rooms-btn\" class=\"icon-btn\">☰</button><div class=\"brand\"><span class=\"lock\">🔒</span> <span id=\"room-label\">kitchen</span> <span class=\"ver\">v0</span></div><button id=\"peers-pill\" class=\"peers-pill\"><span id=\"status-dot\" class=\"ok dot\"></span><span id=\"peer-count\">just you</span></button><button title=\"start a call\" id=\"call-btn\" class=\"icon-btn\">📞</button><button title=\"notifications\" id=\"bell-btn\" class=\"icon-btn\">🔕</button><button title=\"copy invite link\" id=\"invite-btn\" class=\"icon-btn\">🔗</button></header><div id=\"roster\" class=\"hidden roster\"></div><div id=\"callbar\" class=\"hidden callbar\"><span id=\"call-info\" class=\"call-info\">📞 0 in call</span><button id=\"call-join\" class=\"cb join\">join</button><button id=\"call-join-video\" class=\"cb join\">join 📹</button><button id=\"call-mic\" class=\"hidden cb\">🎤</button><button id=\"call-cam\" class=\"hidden cb\">📷</button><button id=\"call-leave\" class=\"hidden cb danger\">leave</button></div><div id=\"tiles\" class=\"hidden tiles\"></div><main id=\"msgs\" class=\"msgs\"></main><div id=\"composer\" class=\"composer\"></div><aside id=\"thread\" class=\"hidden thread\"><header class=\"top\"><button id=\"thread-close\" class=\"icon-btn\">←</button><div class=\"brand\">thread</div></header><main id=\"thread-msgs\" class=\"msgs\"></main><div id=\"thread-composer\" class=\"composer\"></div></aside><div id=\"viewer\" class=\"hidden viewer\"></div></div><div id=\"sheet\"></div><div id=\"toasts\"></div>",
    "viewer": "<div class=\"app\"><header class=\"top\"><button title=\"your rooms\" id=\"rooms-btn\" class=\"icon-btn\">☰</button><div class=\"brand\"><span class=\"lock\">🔒</span> <span id=\"room-label\">kitchen</span> <span class=\"ver\">v0</span></div><button id=\"peers-pill\" class=\"peers-pill\"><span id=\"status-dot\" class=\"ok dot\"></span><span id=\"peer-count\">just you</span></button><button title=\"start a call\" id=\"call-btn\" class=\"icon-btn\">📞</button><button title=\"notifications\" id=\"bell-btn\" class=\"icon-btn\">🔕</button><button title=\"copy invite link\" id=\"invite-btn\" class=\"icon-btn\">🔗</button></header><div id=\"roster\" class=\"hidden roster\"></div><div id=\"callbar\" class=\"hidden callbar\"><span id=\"call-info\" class=\"call-info\">📞 0 in call</span><button id=\"call-join\" class=\"cb join\">join</button><button id=\"call-join-video\" class=\"cb join\">join 📹</button><button id=\"call-mic\" class=\"hidden cb\">🎤</button><button id=\"call-cam\" class=\"hidden cb\">📷</button><button id=\"call-leave\" class=\"hidden cb danger\">leave</button></div><div id=\"tiles\" class=\"hidden tiles\"></div><main id=\"msgs\" class=\"msgs\"></main><div id=\"composer\" class=\"composer\"></div><aside id=\"thread\" class=\"hidden thread\"><header class=\"top\"><button id=\"thread-close\" class=\"icon-btn\">←</button><div class=\"brand\">thread</div></header><main id=\"thread-msgs\" class=\"msgs\"></main><div id=\"thread-composer\" class=\"composer\"></div></aside><div id=\"viewer\" class=\"viewer\"><img src=\"blob:https://chat.ardegazu.ro/9f1c\" alt=\"shared image\"></div></div><div id=\"sheet\"></div><div id=\"toasts\"></div>",
    "in-call": "<div class=\"app\"><header class=\"top\"><button title=\"your rooms\" id=\"rooms-btn\" class=\"icon-btn\">☰</button><div class=\"brand\"><span class=\"lock\">🔒</span> <span id=\"room-label\">kitchen</span> <span class=\"ver\">v0</span></div><button id=\"peers-pill\" class=\"peers-pill\"><span id=\"status-dot\" class=\"ok dot\"></span><span id=\"peer-count\">2 here</span></button><button title=\"start a call\" id=\"call-btn\" class=\"hidden icon-btn\">📞</button><button title=\"notifications\" id=\"bell-btn\" class=\"icon-btn\">🔕</button><button title=\"copy invite link\" id=\"invite-btn\" class=\"icon-btn\">🔗</button></header><div id=\"roster\" class=\"hidden roster\"></div><div id=\"callbar\" class=\"callbar\"><span id=\"call-info\" class=\"call-info\">📞 2 in call</span><button id=\"call-join\" class=\"hidden cb join\">join</button><button id=\"call-join-video\" class=\"hidden cb join\">join 📹</button><button id=\"call-mic\" class=\"cb\">🎤</button><button id=\"call-cam\" class=\"off cb\">📷</button><button id=\"call-leave\" class=\"cb danger\">leave</button></div><div id=\"tiles\" class=\"tiles\"></div><main id=\"msgs\" class=\"msgs\"></main><div id=\"composer\" class=\"composer\"></div><aside id=\"thread\" class=\"hidden thread\"><header class=\"top\"><button id=\"thread-close\" class=\"icon-btn\">←</button><div class=\"brand\">thread</div></header><main id=\"thread-msgs\" class=\"msgs\"></main><div id=\"thread-composer\" class=\"composer\"></div></aside><div id=\"viewer\" class=\"hidden viewer\"></div></div><div id=\"sheet\"></div><div id=\"toasts\"></div>",
    "hostile": "<div class=\"app\"><header class=\"top\"><button title=\"your rooms\" id=\"rooms-btn\" class=\"icon-btn\">☰</button><div class=\"brand\"><span class=\"lock\">🔒</span> <span id=\"room-label\">&lt;img src=x onerror=alert(1)&gt;</span> <span class=\"ver\">v0</span></div><button id=\"peers-pill\" class=\"peers-pill\"><span id=\"status-dot\" class=\"ok dot\"></span><span id=\"peer-count\">just you</span></button><button title=\"start a call\" id=\"call-btn\" class=\"icon-btn\">📞</button><button title=\"notifications\" id=\"bell-btn\" class=\"icon-btn\">🔕</button><button title=\"copy invite link\" id=\"invite-btn\" class=\"icon-btn\">🔗</button></header><div id=\"roster\" class=\"hidden roster\"></div><div id=\"callbar\" class=\"hidden callbar\"><span id=\"call-info\" class=\"call-info\">📞 0 in call</span><button id=\"call-join\" class=\"cb join\">join</button><button id=\"call-join-video\" class=\"cb join\">join 📹</button><button id=\"call-mic\" class=\"hidden cb\">🎤</button><button id=\"call-cam\" class=\"hidden cb\">📷</button><button id=\"call-leave\" class=\"hidden cb danger\">leave</button></div><div id=\"tiles\" class=\"hidden tiles\"></div><main id=\"msgs\" class=\"msgs\"></main><div id=\"composer\" class=\"composer\"></div><aside id=\"thread\" class=\"hidden thread\"><header class=\"top\"><button id=\"thread-close\" class=\"icon-btn\">←</button><div class=\"brand\">thread</div></header><main id=\"thread-msgs\" class=\"msgs\"></main><div id=\"thread-composer\" class=\"composer\"></div></aside><div id=\"viewer\" class=\"hidden viewer\"></div></div><div id=\"sheet\"></div><div id=\"toasts\"></div>"
  }
}

static mirror of HEAD · about · clone: git clone https://git.ardegazu.ro/chat.git