Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
f20b403
Hide scroll buttons & adjust padding of paper-tabs
maykar Oct 6, 2020
ba07a4f
"display: none" when sidebar is visible & margin for header
maykar Oct 6, 2020
6fc3d1f
Remove margin from menu-button + title
maykar Oct 6, 2020
9734a2a
Hide scroll buttons on paper-tabs
maykar Oct 6, 2020
1e11f75
Update ha-menu-button.ts
maykar Oct 6, 2020
1d4c6c9
adjust margins
maykar Oct 6, 2020
c21625e
Adjust margin of main-title
maykar Oct 6, 2020
22649e5
Remove margin from ha-menu-button
maykar Oct 6, 2020
c3b6ef6
Increase paper-tabs padding
maykar Oct 6, 2020
9268712
Adjust main-title and ha-menu-button margin
maykar Oct 6, 2020
4a1aeeb
Dev tools paper-tabs margin adjust
maykar Oct 6, 2020
3f3e062
update dev tools paper-tabs padding
maykar Oct 6, 2020
ae2d8fd
used modified paper-tabs
maykar Oct 11, 2020
49df7a2
Delete package-lock.json
maykar Oct 11, 2020
71d69d0
fix some linting errors in paper-tabs
maykar Oct 12, 2020
d0b9e8b
Delete package-lock.json
maykar Oct 12, 2020
e9d214b
eslint-disable-next-line no-implied-eval
maykar Oct 12, 2020
b8034b3
eslint @typescript disable
maykar Oct 12, 2020
200b0d0
disable correct line
maykar Oct 12, 2020
dcd70d9
Show scroll buttons in dev-tools panel
maykar Oct 12, 2020
d5a81cf
Show scroll buttons in Lovelace
maykar Oct 12, 2020
cc335f9
replace paper-tabs with ha-tabs
maykar Oct 12, 2020
8bf660f
Update package.json
maykar Oct 12, 2020
75f616f
Add scroll wheel support
maykar Oct 12, 2020
7a5eddd
Fix functions that were running twice, get tab width on _tabChanged
maykar Oct 12, 2020
6b2bf17
Remove scrollwheel behavior and line arrows up with elements above
maykar Oct 13, 2020
650a9d8
Remove ripple effect from scroll arrows
maykar Oct 13, 2020
a5b23ad
Comment for noink attribute
maykar Oct 13, 2020
cbfb764
Replace paper-tabs with ha-tabs
maykar Oct 13, 2020
fe079f3
Scroll selected tab into view if needed
maykar Oct 14, 2020
5748eaa
Move comment for clarification
maykar Oct 14, 2020
db0d459
js to ts and filter out hidden tabs
maykar Oct 14, 2020
9649534
Update ha-tabs.ts
maykar Oct 14, 2020
580ce2c
Update src/components/ha-tabs.ts
maykar Oct 14, 2020
0989097
Start conversion to TS
maykar Oct 14, 2020
d855bbf
Update src/components/ha-tabs.ts
maykar Oct 14, 2020
34268c7
Update src/components/ha-tabs.ts
maykar Oct 14, 2020
0b11952
Update src/components/ha-tabs.ts
maykar Oct 14, 2020
f3fe495
Update src/components/ha-tabs.ts
maykar Oct 14, 2020
0f178f8
Further TS conversion
maykar Oct 14, 2020
cc1ec46
Remove double import
maykar Oct 14, 2020
9c51df3
Update src/components/ha-tabs.ts
maykar Oct 14, 2020
4fa87ce
More TS conversion
maykar Oct 15, 2020
adf2d07
Update ha-tabs.ts
maykar Oct 15, 2020
7e645e4
Delete hui-dialog-edit-view.ts
maykar Oct 15, 2020
967585e
edit-view
maykar Oct 15, 2020
d6d3044
Update hui-dialog-edit-view.ts
maykar Oct 15, 2020
2b780af
Add return type on `get template()`
maykar Oct 15, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/components/ha-menu-button.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,8 @@ class HaMenuButton extends LitElement {
return;
}

this.style.visibility =
newNarrow || this._alwaysVisible ? "initial" : "hidden";
this.style.display =
newNarrow || this._alwaysVisible ? "initial" : "none";

if (!newNarrow) {
this._hasNotifications = false;
Expand Down
97 changes: 97 additions & 0 deletions src/components/ha-tabs.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
import "@polymer/paper-tabs/paper-tabs";
import type { PaperIconButtonElement } from "@polymer/paper-icon-button/paper-icon-button";
import type { PaperTabElement } from "@polymer/paper-tabs/paper-tab";
import type { PaperTabsElement } from "@polymer/paper-tabs/paper-tabs";
import { customElement } from "lit-element";
import { Constructor } from "../types";

const PaperTabs = customElements.get("paper-tabs") as Constructor<
PaperTabsElement
>;

let subTemplate: HTMLTemplateElement;

@customElement("ha-tabs")
export class HaTabs extends PaperTabs {
private _firstTabWidth = 0;

private _lastTabWidth = 0;

private _lastLeftHiddenState = false;

static get template(): HTMLTemplateElement {
if (!subTemplate) {
subTemplate = (PaperTabs as any).template.cloneNode(true);

const superStyle = subTemplate.content.querySelector("style");

// Add "noink" attribute for scroll buttons to disable animation.
subTemplate.content
.querySelectorAll("paper-icon-button")
.forEach((arrow: PaperIconButtonElement) => {
arrow.setAttribute("noink", "");
});

superStyle!.appendChild(
document.createTextNode(`
.not-visible {
display: none;
}
:host > paper-icon-button:first-of-type {
padding-left: 0;
}
paper-icon-button {
margin: 0 -8px 0 0;
}
`)
);
}
return subTemplate;
}

// Get first and last tab's width for _affectScroll
public _tabChanged(tab: PaperTabElement, old: PaperTabElement): void {
super._tabChanged(tab, old);
const tabs = this.querySelectorAll("paper-tab:not(.hide-tab)");
if (tabs.length > 0) {
this._firstTabWidth = tabs[0].clientWidth;
this._lastTabWidth = tabs[tabs.length - 1].clientWidth;
}

// Scroll active tab into view if needed.
const selected = this.querySelector(".iron-selected");
if (selected) {
selected.scrollIntoView();
}
}

/**
* Modify _affectScroll so that when the scroll arrows appear
* while scrolling and the tab container shrinks we can counteract
* the jump in tab position so that the scroll still appears smooth.
*/
public _affectScroll(dx: number): void {
if (this._firstTabWidth === 0 || this._lastTabWidth === 0) {
return;
}

this.$.tabsContainer.scrollLeft += dx;

const scrollLeft = this.$.tabsContainer.scrollLeft;

this._leftHidden = scrollLeft - this._firstTabWidth < 0;
this._rightHidden =
scrollLeft + this._lastTabWidth > this._tabContainerScrollSize;

if (this._lastLeftHiddenState !== this._leftHidden) {
this._lastLeftHiddenState = this._leftHidden;
this.$.tabsContainer.scrollLeft += this._leftHidden ? -46 : 46;
}
}
}

declare global {
interface HTMLElementTagNameMap {
"ha-tabs": HaTabs;
}
}
11 changes: 6 additions & 5 deletions src/panels/developer-tools/ha-panel-developer-tools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import "@polymer/app-layout/app-toolbar/app-toolbar";
import "../../layouts/ha-app-layout";
import "../../components/ha-icon-button";
import "@polymer/paper-tabs/paper-tab";
import "@polymer/paper-tabs/paper-tabs";
import "../../components/ha-tabs";
import {
css,
CSSResultArray,
Expand Down Expand Up @@ -44,7 +44,7 @@ class PanelDeveloperTools extends LitElement {
></ha-menu-button>
<div main-title>${this.hass.localize("panel.developer_tools")}</div>
</app-toolbar>
<paper-tabs
<ha-tabs
scrollable
attr-for-selected="page-name"
.selected=${page}
Expand All @@ -70,7 +70,7 @@ class PanelDeveloperTools extends LitElement {
"ui.panel.developer-tools.tabs.events.title"
)}
</paper-tab>
</paper-tabs>
</ha-tabs>
</app-header>
<developer-tools-router
.route=${this.route}
Expand Down Expand Up @@ -106,8 +106,9 @@ class PanelDeveloperTools extends LitElement {
display: block;
height: calc(100vh - 112px);
}
paper-tabs {
margin-left: 12px;
ha-tabs {
margin-left: max(env(safe-area-inset-left), 24px);
margin-right: max(env(safe-area-inset-right), 24px);
--paper-tabs-selection-bar-color: #fff;
text-transform: uppercase;
}
Expand Down
12 changes: 6 additions & 6 deletions src/panels/lovelace/hui-root.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import "@polymer/app-layout/app-header/app-header";
import "@polymer/app-layout/app-scroll-effects/effects/waterfall";
import "@polymer/app-layout/app-toolbar/app-toolbar";
import "@polymer/paper-tabs/paper-tab";
import "@polymer/paper-tabs/paper-tabs";
import {
css,
CSSResult,
Expand All @@ -40,6 +39,7 @@ import "../../components/ha-icon-button-arrow-next";
import "../../components/ha-icon-button-arrow-prev";
import "../../components/ha-menu-button";
import "../../components/ha-svg-icon";
import "../../components/ha-tabs";
import type {
LovelaceConfig,
LovelacePanelConfig,
Expand Down Expand Up @@ -283,7 +283,7 @@ class HUIRoot extends LitElement {
${this.lovelace!.config.views.length > 1 || this._editMode
? html`
<div sticky>
<paper-tabs
<ha-tabs
scrollable
.selected="${this._curView}"
@iron-activate="${this._handleViewSelected}"
Expand Down Expand Up @@ -363,7 +363,7 @@ class HUIRoot extends LitElement {
</mwc-icon-button>
`
: ""}
</paper-tabs>
</ha-tabs>
</div>
`
: ""}
Expand Down Expand Up @@ -698,9 +698,9 @@ class HUIRoot extends LitElement {
ha-app-layout {
min-height: 100%;
}
paper-tabs {
margin-left: max(env(safe-area-inset-left), 12px);
margin-right: env(safe-area-inset-right);
ha-tabs {
margin-left: max(env(safe-area-inset-left), 24px);
margin-right: max(env(safe-area-inset-right), 24px);
--paper-tabs-selection-bar-color: var(--text-primary-color, #fff);
text-transform: uppercase;
}
Expand Down
13 changes: 10 additions & 3 deletions src/panels/mailbox/ha-panel-mailbox.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import "@polymer/paper-input/paper-textarea";
import "@polymer/paper-item/paper-item";
import "@polymer/paper-item/paper-item-body";
import "@polymer/paper-tabs/paper-tab";
import "@polymer/paper-tabs/paper-tabs";
import "../../components/ha-tabs";
import { html } from "@polymer/polymer/lib/utils/html-tag";
/* eslint-plugin-disable lit */
import { PolymerElement } from "@polymer/polymer/polymer-element";
Expand Down Expand Up @@ -46,6 +46,13 @@ class HaPanelMailbox extends EventsMixin(LocalizeMixin(PolymerElement)) {
cursor: pointer;
}

ha-tabs {
margin-left: max(env(safe-area-inset-left), 24px);
margin-right: max(env(safe-area-inset-right), 24px);
--paper-tabs-selection-bar-color: #fff;
text-transform: uppercase;
}

.empty {
text-align: center;
color: var(--secondary-text-color);
Expand Down Expand Up @@ -86,7 +93,7 @@ class HaPanelMailbox extends EventsMixin(LocalizeMixin(PolymerElement)) {
<div main-title>[[localize('panel.mailbox')]]</div>
</app-toolbar>
<div sticky hidden$="[[areTabsHidden(platforms)]]">
<paper-tabs
<ha-tabs
scrollable
selected="[[_currentPlatform]]"
on-iron-activate="handlePlatformSelected"
Expand All @@ -96,7 +103,7 @@ class HaPanelMailbox extends EventsMixin(LocalizeMixin(PolymerElement)) {
[[getPlatformName(item)]]
</paper-tab>
</template>
</paper-tabs>
</ha-tabs>
</div>
</app-header>
<div class="content">
Expand Down
10 changes: 6 additions & 4 deletions src/resources/styles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,12 @@ export const haStyle = css`
color: var(--app-header-text-color, white);
}

app-toolbar ha-menu-button + [main-title],
app-toolbar ha-icon-button-arrow-prev + [main-title],
app-toolbar ha-icon-button + [main-title] {
margin-left: 24px;
app-toolbar [main-title] {
margin-left: 20px;
}

ha-menu-button {
margin-left: 4px;
}

h1 {
Expand Down