Mailing List Archive

[MediaWiki-commits] [Gerrit] marvin[master]: WIP: Update: add search box UI
Niedzielski has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/406077 )

Change subject: WIP: Update: add search box UI
......................................................................

WIP: Update: add search box UI

Refactor the Header component to use the Grid and add a search box.

Change-Id: I684392b9df09c1f798ca79d45d4040b68a1bd9fa
---
M package.json
M src/client/index.css
M src/common/components/header/header.css
M src/common/components/header/header.tsx
M src/common/components/icon/icon.tsx
A src/common/components/search-input/search-input.css
A src/common/components/search-input/search-input.tsx
7 files changed, 97 insertions(+), 30 deletions(-)


git pull ssh://gerrit.wikimedia.org:29418/marvin refs/changes/77/406077/1

diff --git a/package.json b/package.json
index 6f16817..a459c43 100644
--- a/package.json
+++ b/package.json
@@ -111,11 +111,11 @@
"bundlesize": [
{
"path": "dist/public/index.*.js",
- "maxSize": "4.1KB"
+ "maxSize": "4.8KB"
},
{
"path": "dist/public/index.*.css",
- "maxSize": "5.8KB"
+ "maxSize": "5.9KB"
},
{
"path": "dist/public/runtime.*.js",
diff --git a/src/client/index.css b/src/client/index.css
index 7a71189..1743b98 100644
--- a/src/client/index.css
+++ b/src/client/index.css
@@ -36,6 +36,7 @@

/* TODO: Upstream to wikimedia-ui-base once reviewed by design */
--space: 16px;
+ --quarter-space: calc(var(--space) / 4);
--half-space: calc(var(--space) / 2);
--double-space: calc(var(--space) * 2);

diff --git a/src/common/components/header/header.css b/src/common/components/header/header.css
index 1b925e3..8b80431 100644
--- a/src/common/components/header/header.css
+++ b/src/common/components/header/header.css
@@ -1,31 +1,21 @@
.Header {
- /* Header height set by design spec */
- height: 60px;
+ /* Header height set by design spec (but don't limit height when wrapping). */
+ min-height: 60px;

- /* Evenly space out placeholders and vertically align them */
- display: flex;
- justify-content: space-between;
+ /* Center items vertically. */
align-items: center;

- /* Spacing */
- padding: 0 var(--space);
+ /* The gutter is a half space. The top and bottom margins are also a half
+ space but must be broken up between container and children so that wrapping
+ items don't have a double margin. */
+ margin: var(--quarter-space) var(--half-space);
}

-/* Vertically align placeholder's contents too */
.Header-left,
-.Header-right,
-.Header-center {
- display: flex;
- align-items: center;
-}
-
-.Header-left > * {
- /* Contained items on the left part are spaced to the right */
- margin-right: var(--space);
-}
-.Header-right > * {
- /* Contained items on the right part are spaced to the left */
- margin-left: var(--space);
+.Header-right {
+ /* When items are stacked or layout horizontally, they have a cumulative
+ margin of a half space. */
+ margin: var(--quarter-space) 0;
}

.Header-wordmark {
diff --git a/src/common/components/header/header.tsx b/src/common/components/header/header.tsx
index e0148f5..7b3b790 100644
--- a/src/common/components/header/header.tsx
+++ b/src/common/components/header/header.tsx
@@ -1,21 +1,25 @@
import { h } from "preact";
+import { SearchInput } from "../search-input/search-input";
import Wordmark from "../wordmark/wordmark";
import Link from "../link/link";
import { ClassProps, classOf } from "../preact-utils";
import { home } from "../../router/routes";
import "./header.css";
+import { Grid, Size } from "../grid/grid";

export default function Header(props: ClassProps): JSX.Element {
return (
- <div class={classOf("Header", props.class)}>
- <div class="Header-left">
+ <Grid class={classOf("Header", props.class)} size={Size.MEDIUM}>
+ <div class="Header-left Grid-medium-span2 Grid-large-span2">
<Link href={home.toPath()} class="Header-wordmark">
<Wordmark />
</Link>
</div>
{/* The center placeholder will be used later for desktop sizes */}
- <div class="Header-center" />
- <div class="Header-right" />
- </div>
+ <div className="Header-center" />
+ <div className="Header-right Grid-column-grow">
+ <SearchInput />
+ </div>
+ </Grid>
);
}
diff --git a/src/common/components/icon/icon.tsx b/src/common/components/icon/icon.tsx
index 4d7492a..c58d4c0 100644
--- a/src/common/components/icon/icon.tsx
+++ b/src/common/components/icon/icon.tsx
@@ -1,4 +1,5 @@
import { h } from "preact";
+import { ClassProps, classOf } from "../preact-utils";
import menu from "./icons/menu.svg";
import search from "./icons/search.svg";
import "./icon.css";
@@ -9,6 +10,14 @@

export { menu, search };

-export default function Icon({ svg }: Props): JSX.Element {
- return <div class="Icon" dangerouslySetInnerHTML={{ __html: svg }} />;
+export default function Icon({
+ svg,
+ ...props
+}: Props & ClassProps): JSX.Element {
+ return (
+ <div
+ class={classOf("Icon", props.class)}
+ dangerouslySetInnerHTML={{ __html: svg }}
+ />
+ );
}
diff --git a/src/common/components/search-input/search-input.css b/src/common/components/search-input/search-input.css
new file mode 100644
index 0000000..aacca0c
--- /dev/null
+++ b/src/common/components/search-input/search-input.css
@@ -0,0 +1,48 @@
+.SearchInput {
+ /* Set the layout to flex to allow the input to grow. */
+ display: flex;
+}
+
+.SearchInput-input {
+ /* Button and input border width and padding are identical. */
+ border: var(--border-width-base) solid var(--wmui-color-base70);
+ border-radius: var(--border-radius-base);
+ padding: var(--quarter-space);
+
+ /* Allow the input to flex between 10 and 30rem. */
+ flex: 1;
+ width: 100%;
+ min-width: 10rem;
+ max-width: 25rem;
+
+ /* Align the input and button to the right. */
+ margin-left: auto;
+
+ /* Add a small space between the input and button. */
+ margin-right: var(--quarter-space);
+
+ background-color: var(--background-color-base);
+}
+
+.SearchInput-button {
+ /* Button and input border width and padding are identical. */
+ border: var(--border-width-base) solid transparent;
+ border-radius: var(--border-radius-base);
+ padding: var(--quarter-space);
+
+ /* Make the button a little wider. */
+ min-width: 2.5rem;
+
+ background-color: var(--wmui-color-accent50);
+}
+
+.SearchInput-icon {
+ /* Approximate the search icon to the apparent center of mass. */
+ vertical-align: top;
+
+ /* todo: */
+ margin-top: 3px;
+
+ /* Change the icon from grey to white. */
+ filter: brightness(0) invert(1);
+}
diff --git a/src/common/components/search-input/search-input.tsx b/src/common/components/search-input/search-input.tsx
new file mode 100644
index 0000000..61de013
--- /dev/null
+++ b/src/common/components/search-input/search-input.tsx
@@ -0,0 +1,15 @@
+import { h } from "preact";
+import Icon, { search } from "../icon/icon";
+import "./search-input.css";
+
+export function SearchInput() {
+ const autofocus = undefined;
+ return (
+ <div class="SearchInput">
+ <input class="SearchInput-input" autofocus={autofocus} />
+ <button class="SearchInput-button">
+ <Icon class="SearchInput-icon" svg={search} />
+ </button>
+ </div>
+ );
+}

--
To view, visit https://gerrit.wikimedia.org/r/406077
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I684392b9df09c1f798ca79d45d4040b68a1bd9fa
Gerrit-PatchSet: 1
Gerrit-Project: marvin
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <sniedzielski@wikimedia.org>
Gerrit-Reviewer: Sniedzielski <sniedzielski@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits