PageSourceSearch

https://ross146.com/frontend_latest/2015.ae93538c148f73f9.js

js ross146.com collected 2026-09-28 01:53:58 UTC 19,461 bytes, 11 lines download raw bytes

1export const __webpack_ids__=["2015"];export const __webpack_modules__={67665:function(e,t,a){a(81738),a(22960),a(6989);var i=a(73742),r=(a(98334),a(59048)),o=a(26292),n=a(20480),d=a(39884);a(48017);class c extends r.oi{render(){return r.dy` <div> ${this.buttons.map(e=>e.iconPath?r.dy`<ha-icon-button .label="${e.label}" .path="${e.iconPath}" .value="${e.value}" ?active="${this.active===e.value}" @click="${this._handleClick}"></ha-icon-button>`:r.dy`<mwc-button style="${(0,n.V)({width:this.fullWidth?100/this.buttons.length+"%":"initial"})}" outlined .dense="${this.dense}" .value="${e.value}" ?active="${this.active===e.value}" @click="${this._handleClick}">${e.label}</mwc-button>`)} </div> `}updated(){this._buttons?.forEach(async e=>{await e.updateComplete,e.shadowRoot.querySelector("button").style.margin="0"})}_handleClick(e){this.active=e.currentTarget.value,(0,d.B)(this,"value-changed",{value:this.active})}constructor(...e){super(...e),this.fullWidth=!1,this.dense=!1}}c.styles=r.iv`div{display:flex;--mdc-icon-button-size:var(--button-toggle-size, 36px);--mdc-icon-size:var(--button-toggle-icon-size, 20px);direction:ltr}mwc-button{flex:1;--mdc-shape-small:0;--mdc-button-outline-width:1px 0 1px 1px;--mdc-button-outline-color:var(--primary-color)}ha-icon-button{border:1px solid var(--primary-color);border-right-width:0px}ha-icon-button,mwc-button{position:relative;cursor:pointer}ha-icon-button::before,mwc-button::before{top:0;left:0;width:100%;height:100%;position:absolute;background-color:var(--primary-color);opacity:0;pointer-events:none;content:"";transition:opacity 15ms linear,background-color 15ms linear}ha-icon-button[active]::before,mwc-button[active]::before{opacity:1}ha-icon-button[active]{--icon-primary-color:var(--text-primary-color)}mwc-button[active]{--mdc-theme-primary:var(--text-primary-color)}ha-icon-button:first-child,mwc-button:first-child{--mdc-shape-small:4px 0 0 4px;border-radius:4px 0 0 4px;--mdc-button-outline-width:1px}mwc-button:first-child::before{border-radius:4px 0 0 4px}ha-icon-button:last-child,mwc-button:last-child{border-radius:0 4px 4px 0;border-right-width:1px;--mdc-shape-small:0 4px 4px 0;--mdc-button-outline-width:1px}mwc-button:last-child::before{border-radius:0 4px 4px 0}ha-icon-button:only-child,mwc-button:only-child{--mdc-shape-small:4px;border-right-width:1px}`,(0,i.__decorate)([(0,o.Cb)({attribute:!1})],c.prototype,"buttons",void 0),(0,i.__decorate)([(0,o.Cb)()],c.prototype,"active",void 0),(0,i.__decorate)([(0,o.Cb)({attribute:"full-width",type:Boolean})],c.prototype,"fullWidth",void 0),(0,i.__decorate)([(0,o.Cb)({type:Boolean})],c.prototype,"dense",void 0),(0,i.__decorate)([(0,o.Kt)("mwc-button")],c.prototype,"_buttons",void 0),c=(0,i.__decorate)([(0,o.Mo)("ha-button-toggle-group")],c)},22852:function(e,t,a){a.r(t),a.d(t,{HaIconButtonNext:()=>d});var i=a(73742),r=a(59048),o=a(26292),n=a(83054);a(48017);class d extends r.oi{render(){return r.dy` <ha-icon-button .disabled="${this.disabled}" .label="${this.label||this.hass?.localize("ui.common.next")||"Next"}" .path="${this._icon}"></ha-icon-button> `}constructor(...e){super(...e),this.disabled=!1,this._icon="rtl"===n.E.document.dir?"M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z":"M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z"}}(0,i.__decorate)([(0,o.Cb)({attribute:!1})],d.prototype,"hass",void 0),(0,i.__decorate)([(0,o.Cb)({type:Boolean})],d.prototype,"disabled",void 0),(0,i.__decorate)([(0,o.Cb)()],d.prototype,"label",void 0),(0,i.__decorate)([(0,o.SB)()],d.prototype,"_icon",void 0),d=(0,i.__decorate)([(0,o.Mo)("ha-icon-button-next")],d)},29813:function(e,t,a){a.r(t),a.d(t,{HaIconButtonPrev:()=>d});var i=a(73742),r=a(59048),o=a(26292),n=a(83054);a(48017);class d extends r.oi{render(){return r.dy` <ha-icon-button .disabled="${this.disabled}" .label="${this.label||this.hass?.localize("ui.common.back")||"Back"}" .path="${this._icon}"></ha-icon-button> `}constructor(...e){super(...e),this.disabled=!1,this._icon="rtl"===n.E.document.dir?"M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z":"M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z"}}(0,i.__decorate)([(0,o.Cb)({attribute:!1})],d.prototype,"hass",void 0),(0,i.__decorate)([(0,o.Cb)({type:Boolean})],d.prototype,"disabled",void 0),(0,i.__decorate)([(0,o.Cb)()],d.prototype,"label",void 0),(0,i.__decorate)([(0,o.SB)()],d.prototype,"_icon",void 0),d=(0,i.__decorate)([(0,o.Mo)("ha-icon-button-prev")],d)},28146:function(e,t,a){a.d(t,{$5:()=>d,GL:()=>l,KI:()=>p,Vt:()=>c,d1:()=>v,fE:()=>u,tT:()=>h});a(2394),a(81738),a(94814),a(22960),a(6989);var i=a(55815);if(99387==a.j)var r=a(44272);if(99387==a.j)var o=a(15459);var n=a(16230),d=function(e){return e.THISEVENT="",e.THISANDFUTURE="THISANDFUTURE",e}({}),c=function(e){return e[e.CREATE_EVENT=1]="CREATE_EVENT",e[e.DELETE_EVENT=2]="DELETE_EVENT",e[e.UPDATE_EVENT=4]="UPDATE_EVENT",e}({});const l=async(e,t,a,i)=>{const r=encodeURI(`?start=${t.toISOString()}&end=${a.toISOString()}`),o=[],n=[],d=[];
1i.forEach(t=>{d.push(e.callApi("GET",`calendars/${t.entity_id}${r}`))});for(const[e,t]of d.entries()){let a;try{a=await t}catch(t){n.push(i[e].entity_id);continue}const r=i[e];a.forEach(e=>{const t=s(e.start),a=s(e.end);if(!t||!a)return;const i={uid:e.uid,summary:e.summary,description:e.description,dtstart:t,dtend:a,recurrence_id:e.recurrence_id,rrule:e.rrule},n={start:t,end:a,title:e.summary,backgroundColor:r.backgroundColor,borderColor:r.backgroundColor,calendar:r.entity_id,eventData:i};o.push(n)})}return{events:o,errors:n}},s=e=>"string"==typeof e?e:e.dateTime?e.dateTime:e.date?e.date:void 0,h=e=>Object.keys(e.states).filter(t=>"calendar"===(0,r.M)(t)&&!(0,n.rk)(e.states[t].state)&&!0!==e.entities[t]?.hidden).sort().map((t,a)=>({...e.states[t],name:(0,o.C)(e.states[t]),backgroundColor:(0,i.Eu)(a)})),u=(e,t,a)=>e.callWS({type:"calendar/event/create",entity_id:t,event:a}),p=(e,t,a,i,r,o)=>e.callWS({type:"calendar/event/update",entity_id:t,uid:a,recurrence_id:r,recurrence_range:o,event:i}),v=(e,t,a,i,r)=>e.callWS({type:"calendar/event/delete",entity_id:t,uid:a,recurrence_id:i,recurrence_range:r})},84144:function(e,t,a){a.a(e,async function(e,t){try{a(81738),a(94814),a(72489);var i=a(73742),r=a(65650),o=a(77704),n=a(57198),d=a(4939),c=a(48606),l=a(64346),s=(a(98334),a(59048)),h=a(26292),u=a(28105),p=a(34302),v=a(23648),b=a(39884),y=a(36590),g=(a(67665),a(80471),a(22852),a(29813),a(28146)),f=a(38763),m=a(95814),w=a(33089),_=a(10644),x=(a(99389),e([n,c,d,r]));[n,c,d,r]=x.then?(await x)():x;const V="M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z",k="M21 3H3C2.4 3 2 3.4 2 4V10C2 10.6 2.4 11 3 11H21C21.6 11 22 10.6 22 10V4C22 3.4 21.6 3 21 3M21 13H3C2.4 13 2 13.4 2 14V20C2 20.6 2.4 21 3 21H21C21.6 21 22 20.6 22 20V14C22 13.4 21.6 13 21 13Z",C="M2,3V6H21V3M20,8H3A1,1 0 0,0 2,9V15A1,1 0 0,0 3,16H20A1,1 0 0,0 21,15V9A1,1 0 0,0 20,8M2,21H21V18H2V21Z",E="M16,5V11H21V5M10,
111H15V5H10M16,18H21V12H16M10,18H15V12H10M4,18H9V12H4M4,11H9V5H4V11Z",$="M13,5H10A1,1 0 0,0 9,6V18A1,1 0 0,0 10,19H13A1,1 0 0,0 14,18V6A1,1 0 0,0 13,5M20,5H17A1,1 0 0,0 16,6V18A1,1 0 0,0 17,19H20A1,1 0 0,0 21,18V6A1,1 0 0,0 20,5M6,5H3A1,1 0 0,0 2,6V18A1,1 0 0,0 3,19H6A1,1 0 0,0 7,18V6A1,1 0 0,0 6,5Z",M={headerToolbar:!1,plugins:[n.Z,c.Z,d.ZP],initialView:"dayGridMonth",dayMaxEventRows:!0,height:"parent",handleWindowResize:!1,locales:o.Z,views:{listWeek:{type:"list",duration:{days:7}}}};class T extends s.oi{disconnectedCallback(){super.disconnectedCallback(),this.calendar?.destroy(),this.calendar=void 0,this.renderRoot.querySelector("style[data-fullcalendar]")?.remove()}connectedCallback(){super.connectedCallback(),this.hasUpdated&&!this.calendar&&this._loadCalendar(this._activeView)}render(){const e=this._viewToggleButtons(this.views,this.hass.localize);return s.dy` ${this.calendar?s.dy` ${this.error?s.dy`<hui-warning .hass="${this.hass}" severity="warning">${this.error}</hui-warning>`:""} <div class="header"> ${this.narrow?s.dy` <div class="controls"> <h1>${this.calendar.view.title}</h1> <div> <ha-icon-button-prev .label="${this.hass.localize("ui.common.previous")}" class="prev" @click="${this._handlePrev}"> </ha-icon-button-prev> <ha-icon-button-next .label="${this.hass.localize("ui.common.next")}" class="next" @click="${this._handleNext}"> </ha-icon-button-next> </div> </div> <div class="controls buttons"> <mwc-button outlined class="today" @click="${this._handleToday}">${this.hass.localize("ui.components.calendar.today")}</mwc-button> <ha-button-toggle-group .buttons="${e}" .active="${this._activeView}" @value-changed="${this._handleView}"></ha-button-toggle-group> </div> `:s.dy` <div class="navigation"> <mwc-button outlined class="today" @click="${this._handleToday}">${this.hass.localize("ui.components.calendar.today")}</mwc-button> <ha-icon-button-prev .label="${this.hass.localize("ui.common.previous")}" class="prev" @click="${this._handlePrev}"> </ha-icon-button-prev> <ha-icon-button-next .label="${this.hass.localize("ui.common.next")}" class="next" @click="${this._handleNext}"> </ha-icon-button-next> </div> <h1>${this.calendar.view.title}</h1> <ha-button-toggle-group .buttons="${e}" .active="${this._activeView}" @value-changed="${this._handleView}"></ha-button-toggle-group> `} </div> `:""} <div id="calendar"></div> ${this._hasMutableCalendars?s.dy`<ha-fab slot="fab" .label="${this.hass.localize("ui.components.calendar.event.add")}" extended @click="${this._createEvent}"> <ha-svg-icon slot="icon" .path="${V}"></ha-svg-icon> </ha-fab>`:s.Ld} `}willUpdate(e){if(super.willUpdate(e),!this.calendar)return;e.has("events")&&(this.calendar.removeAllEventSources(),this.calendar.addEventSource(this.events)),e.has("views")&&!this.views.includes(this._activeView)&&(this._activeView=this.initialView&&this.views.includes(this.initialView)?this.initialView:this.views[0],this.calendar.changeView(this._activeView),this._fireViewChanged()),e.has("eventDisplay")&&this.calendar.setOption("eventDisplay",this.eventDisplay);const t=e.get("hass");t&&t.language!==this.hass.language&&this.calendar.setOption("locale",this.hass.language)}firstUpdated(){this._loadCalendar(this.initialView),this._activeView=this.initialView}async _loadCalendar(e){const t=this.hass.locale.time_zone===f.c_.local?void 0:(await a.e("41902").then(a.bind(a,63427))).default,i={...M,plugins:this.hass.locale.time_zone===f.c_.local?M.plugins:[...M.plugins,t],locale:this.hass.language,timeZone:this.hass.locale.time_zone===f.c_.local?"local":this.hass.config.time_zone,firstDay:(0,p.Bt)(this.hass.locale),initialView:e,eventDisplay:this.eventDisplay,eventTimeFormat:{hour:(0,v.y)(this.hass.locale)?"numeric":"2-digit",minute:(0,v.y)(this.hass.locale)?"numeric":"2-digit",hour12:(0,v.y)(this.hass.locale)}};i.dateClick=e=>this._handleDateClick(e),i.eventClick=e=>this._handleEventClick(e),this.calendar=new r.f(this.shadowRoot.getElementById("calendar"),i),this.calendar.render(),this._fireViewChanged()}get _hasMutableCalendars(){return this.calendars.some(e=>{const t=this.hass.states[e.entity_id];return t&&(0,y.e)(t,g.Vt.CREATE_EVENT)})}_createEvent(e){(0,_.R)(this,{selectedDate:"dayGridWeek"===this._activeView||"dayGridDay"===this._activeView||"dayGridMonth"===this._activeView&&this.calendar.view.currentStart.getMonth()!==(new Date).getMonth()?this.calendar.view.currentStart:void 0,updated:()=>{this._fireViewChanged()}})}_handleEventClick(e){const t=this.hass.states[e.event.extendedProps.calendar],a=t&&(0,y.e)(t,g.Vt.UPDATE_EVENT),i=t&&(0,y.e)(t,g.Vt.DELETE_EVENT);(0,w.A)(this,{calendarId:e.event.extendedProps.calendar,entry:e.event.extendedProps.eventData,color:e.event.backgroundColor,updated:()=>{this._fireViewChanged()},canEdit:a,canDelete:i})}_handleDateClick(e){"dayGridMonth"===e.view.type&&(this._activeView="dayGridDay",this.calendar.changeView("dayGridDay"),this.calendar.gotoDate(e.dateStr),this._fireViewChanged())}_handleNext(){this.calendar.next(),this._fireViewChanged()}_handlePrev(){this.calendar.prev(),this._fireViewChanged()}_handleToday(){this.calendar.today(),this._fireViewChanged()}_handleView(e){this._activeView=e.detail.value,this.calendar.changeView(this._activeView),this._fireViewChanged()}_fireViewChanged(){(0,b.B)(this,"view-changed",{start:this.calendar.view.activeStart,end:this.calendar.view.activeEnd,view:this.calendar.view.type})}static get styles(){return[m.Qx,s.iv`:host{display:flex;flex-direction:column;
1--fc-theme-standard-border-color:var(--divider-color)}.header{display:flex;align-items:center;justify-content:space-between;padding-bottom:8px}:host([narrow]) .header{padding-right:8px;padding-left:8px;padding-inline-start:8px;padding-inline-end:8px;flex-direction:column;align-items:flex-start;justify-content:initial}.header{padding-right:var(--calendar-header-padding);padding-left:var(--calendar-header-padding);padding-inline-start:var(--calendar-header-padding);padding-inline-end:var(--calendar-header-padding)}.navigation{display:flex;align-items:center;flex-grow:0}a{color:var(--primary-color)}.controls{display:flex;justify-content:space-between;align-items:center;width:100%}.buttons{display:flex;flex-wrap:wrap}.buttons>*{margin-bottom:5px;box-sizing:border-box}.today{margin-right:20px;margin-inline-end:20px;margin-inline-start:initial;direction:var(--direction)}.next,.prev{--mdc-icon-button-size:32px}ha-button-toggle-group{color:var(--primary-color)}ha-fab{position:absolute;bottom:16px;right:16px;inset-inline-end:16px;inset-inline-start:initial;z-index:1}#calendar{flex-grow:1;background-color:var(--ha-card-background,var(--card-background-color,#fff));height:var(--calendar-height);--fc-neutral-bg-color:var(
2            --ha-card-background,
3            var(--card-background-color, white)
4          );--fc-list-event-hover-bg-color:var(
5            --ha-card-background,
6            var(--card-background-color, white)
7          );--fc-theme-standard-border-color:var(--divider-color);--fc-border-color:var(--divider-color);--fc-page-bg-color:var(
8            --ha-card-background,
9            var(--card-background-color, white)
10          )}a{color:inherit!important}.fc-theme-standard .fc-scrollgrid{border:1px solid var(--divider-color);border-width:var(--calendar-border-width,1px);border-radius:var(--calendar-border-radius,var(--mdc-shape-small,4px))}.fc-theme-standard td{border-bottom-left-radius:var(--mdc-shape-small,4px);border-bottom-right-radius:var(--mdc-shape-small,4px)}.fc-scrollgrid-section-header td{border:none}th.fc-col-header-cell.fc-day{background-color:var(--table-header-background-color);color:var(--primary-text-color);font-size:var(--ha-font-size-xs);font-weight:var(--ha-font-weight-bold);text-transform:uppercase}.fc-daygrid-dot-event:hover{background-color:inherit}.fc-daygrid-day-top{text-align:center;padding-top:5px;justify-content:center}
10table.fc-scrollgrid-sync-table tbody tr:first-child .fc-daygrid-day-top{padding-top:0}a.fc-daygrid-day-number{float:none!important;font-size:var(--ha-font-size-s);cursor:pointer}.fc .fc-daygrid-day-number{padding:3px!important}.fc .fc-daygrid-day.fc-day-today{background:inherit}td.fc-day-today .fc-daygrid-day-number{height:26px;color:var(--text-primary-color)!important;background-color:var(--primary-color);border-radius:50%;display:inline-block;text-align:center;white-space:nowrap;width:max-content;min-width:24px}.fc-daygrid-day-events{margin-top:4px}.fc-event{border-radius:4px;line-height:var(--ha-line-height-normal);cursor:pointer}.fc-daygrid-block-event .fc-event-main{padding:0 1px}.fc-day-past .fc-daygrid-day-events{opacity:.5}.fc-icon-x:before{font-family:var(--ha-font-family-body);content:"X"}.fc-popover{background-color:var(--primary-background-color)!important}.fc-popover-header{background-color:var(--secondary-background-color)!important}.fc-theme-standard .fc-list-day-frame{background-color:transparent}.fc-list-event.fc-event td,.fc-list.fc-view{border:none}.fc-list-day.fc-day th{border-bottom:none;border-top:1px solid var(--fc-theme-standard-border-color,#ddd)!important}.fc-list-day-text{font-size:var(--ha-font-size-l);font-weight:var(--ha-font-weight-normal)}.fc-list-day-side-text{font-size:var(--ha-font-size-l);font-weight:var(--ha-font-weight-normal);color:var(--primary-color)}.fc-list-day-frame,.fc-list-table td{padding-top:12px;padding-bottom:12px}:host([narrow]) .fc-dayGridMonth-view .fc-daygrid-dot-event .fc-event-time,:host([narrow]) .fc-dayGridMonth-view .fc-daygrid-dot-event .fc-event-title{display:none}:host([narrow]) .fc-dayGridMonth-view .fc-daygrid-event-harness{margin-top:0!important}:host([narrow]) .fc-dayGridMonth-view .fc-daygrid-day-events{display:flex;align-items:center;justify-content:center;flex-wrap:wrap}:host([narrow]) .fc-dayGridMonth-view .fc-scrollgrid-sync-table{overflow:hidden}.fc-scroller::-webkit-scrollbar{width:.4rem;height:.4rem}.fc-scroller::-webkit-scrollbar-thumb{-webkit-border-radius:4px;border-radius:4px;background:var(--scrollbar-thumb-color)}.fc-scroller{overflow-y:auto;scrollbar-color:var(--scrollbar-thumb-color) transparent;scrollbar-width:thin}`]}constructor(...e){super(...e),this.narrow=!1,this.events=[],this.calendars=[],this.views=["dayGridMonth","dayGridWeek","dayGridDay","listWeek"],this.initialView="dayGridMonth",this.eventDisplay="auto",this.error=void 0,this._activeView=this.initialView,this._resizeController=new l.Z(this,{callback:()=>this.calendar?.updateSize()}),this._viewToggleButtons=(0,u.Z)((e,t)=>(this._viewButtons||(this._viewButtons=[{label:t("ui.panel.lovelace.editor.card.calendar.views.dayGridMonth"),value:"dayGridMonth",iconPath:E},{label:t("ui.panel.lovelace.editor.card.calendar.views.dayGridWeek"),value:"dayGridWeek",iconPath:$},{label:t("ui.panel.lovelace.editor.card.calendar.views.dayGridDay"),value:"dayGridDay",iconPath:C},{label:t("ui.panel.lovelace.editor.card.calendar.views.listWeek"),value:"listWeek",iconPath:k}]),this._viewButtons.filter(t=>e.includes(t.value))))}}(0,i.__decorate)([(0,h.Cb)({type:Boolean,reflect:!0})],T.prototype,"narrow",void 0),(0,i.__decorate)([(0,h.Cb)({attribute:!1})],T.prototype,"events",void 0),(0,i.__decorate)([(0,h.Cb)({attribute:!1})],T.prototype,"calendars",void 0),(0,i.__decorate)([(0,h.Cb)({attribute:!1})],T.prototype,"views",void 0),(0,i.__decorate)([(0,h.Cb)({attribute:!1})],T.prototype,"initialView",void 0),(0,i.__decorate)([(0,h.Cb)({attribute:!1})],T.prototype,"eventDisplay",void 0),(0,i.__decorate)([(0,h.Cb)({attribute:!1})],T.prototype,"error",void 0),(0,i.__decorate)([(0,h.SB)()],T.prototype,"_activeView",void 0),T=(0,i.__decorate)([(0,h.Mo)("ha-full-calendar")],T),t()}catch(e){t(e)}})},33089:function(e,t,a){a.d(t,{A:()=>o});var i=a(39884);const r=()=>Promise.all([a.e("73614"),a.e("2243"),a.e("75696"),a.e("86689"),a.e("7850"),a.e("22092"),a.e("88688"),a.e("10868"),a.e("76782"),a.e("48778"),a.e("9036"),a.e("24391"),a.e("85483")]).then(a.bind(a,36357)),o=(e,t)=>{(0,i.B)(e,"show-dialog",{dialogTag:"dialog-calendar-event-detail",dialogImport:r,dialogParams:t})}},10644:function(e,t,a){a.d(t,{R:()=>o});var i=a(39884);const r=()=>Promise.all([a.e("73614"),a.e("2243"),a.e("97103"),a.e("75696"),a.e("86689"),a.e("22549"),a.e("7850"),a.e("91789"),a.e("15634"),a.e("26452"),a.e("88688"),a.e("10868"),a.e("6115"),a.e("76782"),a.e("48778"),a.e("60414"),a.e("89112"),a.e("9036"),a.e("19596"),a.e("24391"),a.e("43025")]).then(a.bind(a,16470)),o=(e,t)=>{(0,i.B)(e,"show-dialog",{dialogTag:"dialog-calendar-event-editor",dialogImport:r,dialogParams:t})}}};
11//# sourceMappingURL=2015.ae93538c148f73f9.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.