Skip to content

Instantly share code, notes, and snippets.

@jpluimers
Created January 10, 2022 16:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jpluimers/8226cd975d58e66efe873736d33d3dc8 to your computer and use it in GitHub Desktop.
Save jpluimers/8226cd975d58e66efe873736d33d3dc8 to your computer and use it in GitHub Desktop.
Source code from https://woordle.nl/
<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
<title>Woordle - Een dagelijks woordspelletje</title>
<meta name="description" content="Zes beurten om het woord te gokken. Elke dag een nieuwe puzzel.">
<!-- FB Meta Tags -->
<meta property="og:url" content="https://woordle.nl">
<meta property="og:type" content="website">
<meta property="og:title" content="Woordle - Een dagelijks woordspelletje">
<meta property="og:description" content="Zes beurten om het woord te gokken. Elke dag een nieuwe puzzel.">
<meta property="og:image" content="https://woordle.nl/woordle_og_1200x630.png">
<!-- Twitter Meta Tags -->
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="woordle.nl">
<meta name="theme-color" content="#6aaa64" />
<link rel="manifest" href="manifest.json" />
<link href="woordle_logo_32x32.png" rel="icon shortcut" sizes="3232" />
<link href="woordle_logo_192x192.png" rel="apple-touch-icon" />
<style>
/* Global Styles & Colors */
:root {
--green: #6aaa64;
--darkendGreen: #538d4e;
--yellow: #c9b458;
--darkendYellow: #b59f3b;
--lightGray: #d8d8d8;
--gray: #86888a;
--darkGray: #939598;
--white: #fff;
--black: #212121;
/* Colorblind colors */
--orange: #f5793a;
--blue: #85c0f9;
font-family: 'Clear Sans', 'Helvetica Neue', Arial, sans-serif;
font-size: 16px;
--header-height: 50px;
--keyboard-height: 200px;
--game-max-width: 500px;
}
/* Light theme colors */
:root {
--color-tone-1: #1a1a1b;
--color-tone-2: #787c7e;
--color-tone-3: #878a8c;
--color-tone-4: #d3d6da;
--color-tone-5: #edeff1;
--color-tone-6: #f6f7f8;
--color-tone-7: #ffffff;
--opacity-50: rgba(255, 255, 255, 0.5);
}
/* Dark Theme Colors */
.nightmode {
--color-tone-1: #d7dadc;
--color-tone-2: #818384;
--color-tone-3: #565758;
--color-tone-4: #3a3a3c;
--color-tone-5: #272729;
--color-tone-6: #1a1a1b;
--color-tone-7: #121213;
--opacity-50: rgba(0, 0, 0, 0.5);
}
/* Constant colors and colors derived from theme */
:root,
.nightmode {
--color-background: var(--color-tone-7);
}
:root {
--color-present: var(--yellow);
--color-correct: var(--green);
--color-absent: var(--color-tone-2);
--tile-text-color: var(--color-tone-7);
--key-text-color: var(--color-tone-1);
--key-evaluated-text-color: var(--color-tone-7);
--key-bg: var(--color-tone-4);
--key-bg-present: var(--color-present);
--key-bg-correct: var(--color-correct);
--key-bg-absent: var(--color-absent);
--modal-content-bg: var(--color-tone-7);
}
.nightmode {
--color-present: var(--darkendYellow);
--color-correct: var(--darkendGreen);
--color-absent: var(--color-tone-4);
--tile-text-color: var(--color-tone-1);
--key-text-color: var(--color-tone-1);
--key-evaluated-text-color: var(--color-tone-1);
--key-bg: var(--color-tone-2);
--key-bg-present: var(--color-present);
--key-bg-correct: var(--color-correct);
--key-bg-absent: var(--color-absent);
--modal-content-bg: var(--color-tone-7);
}
.colorblind {
--color-correct: var(--orange);
--color-present: var(--blue);
--tile-text-color: var(--white);
--key-bg-present: var(--color-present);
--key-bg-correct: var(--color-correct);
--key-bg-absent: var(--color-absent);
}
html {
height: 100%;
}
body {
height: 100%;
background-color: var(--color-background);
margin: 0;
padding: 0;
/* Prevent scrollbar appearing on page transition */
overflow-y: hidden;
}
</style>
</head>
<body>
<script>
(function () {
// Defining the hash before the main bundle allows the bundle access window.hash
window.wordle = window.wordle || {};
window.wordle.hash = 'db1931a8';
})();
</script>
<script src="main.db1931a8.js"></script>
<game-app></game-app>
</body>
</html>
this.wordle = this.wordle || {
},
this.wordle.bundle = function (e) {
'use strict';
function a(e) {
return (a = 'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator ? function (e) {
return typeof e
}
: function (e) {
return e && 'function' == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? 'symbol' : typeof e
}) (e)
}
function s(e, a) {
if (!(e instanceof a)) throw new TypeError('Cannot call a class as a function')
}
function t(e, a) {
for (var s = 0; s < a.length; s++) {
var t = a[s];
t.enumerable = t.enumerable || !1,
t.configurable = !0,
'value' in t && (t.writable = !0),
Object.defineProperty(e, t.key, t)
}
}
function o(e, a, s) {
return a && t(e.prototype, a),
s && t(e, s),
e
}
function r(e, a, s) {
return a in e ? Object.defineProperty(e, a, {
value: s,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[a] = s,
e
}
function n(e, a) {
if ('function' != typeof a && null !== a) throw new TypeError('Super expression must either be null or a function');
e.prototype = Object.create(a && a.prototype, {
constructor: {
value: e,
writable: !0,
configurable: !0
}
}),
a && l(e, a)
}
function i(e) {
return (i = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
return e.__proto__ || Object.getPrototypeOf(e)
}) (e)
}
function l(e, a) {
return (l = Object.setPrototypeOf || function (e, a) {
return e.__proto__ = a,
e
}) (e, a)
}
function d() {
if ('undefined' == typeof Reflect || !Reflect.construct) return !1;
if (Reflect.construct.sham) return !1;
if ('function' == typeof Proxy) return !0;
try {
return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [
], (function () {
}))),
!0
} catch (e) {
return !1
}
}
function u(e, a, s) {
return (u = d() ? Reflect.construct : function (e, a, s) {
var t = [
null
];
t.push.apply(t, a);
var o = new (Function.bind.apply(e, t));
return s && l(o, s.prototype),
o
}).apply(null, arguments)
}
function c(e) {
var a = 'function' == typeof Map ? new Map : void 0;
return (c = function (e) {
if (null === e || (s = e, - 1 === Function.toString.call(s).indexOf('[native code]'))) return e;
var s;
if ('function' != typeof e) throw new TypeError('Super expression must either be null or a function');
if (void 0 !== a) {
if (a.has(e)) return a.get(e);
a.set(e, t)
}
function t() {
return u(e, arguments, i(this).constructor)
}
return t.prototype = Object.create(e.prototype, {
constructor: {
value: t,
enumerable: !1,
writable: !0,
configurable: !0
}
}),
l(t, e)
}) (e)
}
function p(e) {
if (void 0 === e) throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called');
return e
}
function m(e, a) {
return !a || 'object' != typeof a && 'function' != typeof a ? p(e) : a
}
function h(e) {
var a = d();
return function () {
var s,
t = i(e);
if (a) {
var o = i(this).constructor;
s = Reflect.construct(t, arguments, o)
} else s = t.apply(this, arguments);
return m(this, s)
}
}
function y(e, a) {
return function (e) {
if (Array.isArray(e)) return e
}(e) || function (e, a) {
var s = null == e ? null : 'undefined' != typeof Symbol && e[Symbol.iterator] || e['@@iterator'];
if (null == s) return;
var t,
o,
r = [
],
n = !0,
i = !1;
try {
for (s = s.call(e); !(n = (t = s.next()).done) && (r.push(t.value), !a || r.length !== a); n = !0);
} catch (e) {
i = !0,
o = e
} finally {
try {
n || null == s.return || s.return()
} finally {
if (i) throw o
}
}
return r
}(e, a) || b(e, a) || function () {
throw new TypeError('Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.')
}()
}
function g(e) {
return function (e) {
if (Array.isArray(e)) return f(e)
}(e) || function (e) {
if ('undefined' != typeof Symbol && null != e[Symbol.iterator] || null != e['@@iterator']) return Array.from(e)
}(e) || b(e) || function () {
throw new TypeError('Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.')
}()
}
function b(e, a) {
if (e) {
if ('string' == typeof e) return f(e, a);
var s = Object.prototype.toString.call(e).slice(8, - 1);
return 'Object' === s && e.constructor && (s = e.constructor.name),
'Map' === s || 'Set' === s ? Array.from(e) : 'Arguments' === s || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(s) ? f(e, a) : void 0
}
}
function f(e, a) {
(null == a || a > e.length) && (a = e.length);
for (var s = 0, t = new Array(a); s < a; s++) t[s] = e[s];
return t
}
var k = document.createElement('template');
k.innerHTML = '\n<style>\n :host {\n display: inline-block;\n }\n .tile {\n width: 100%;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n font-size: 2rem;\n line-height: 2rem;\n font-weight: bold;\n vertical-align: middle;\n box-sizing: border-box;\n color: var(--tile-text-color);\n text-transform: uppercase;\n user-select: none;\n }\n .tile::before {\n content: \'\';\n display: inline-block;\n padding-bottom: 100%;\n }\n\n .tile[data-state=\'empty\'] {\n border: 2px solid var(--color-tone-4);\n }\n .tile[data-state=\'tbd\'] {\n background-color: var(--color-tone-7);\n border: 2px solid var(--color-tone-3);\n color: var(--color-tone-1);\n }\n .tile[data-state=\'correct\'] {\n background-color: var(--color-correct);\n }\n .tile[data-state=\'present\'] {\n background-color: var(--color-present);\n }\n .tile[data-state=\'absent\'] {\n background-color: var(--color-absent);\n }\n\n .tile[data-animation=\'pop\'] {\n animation-name: PopIn;\n animation-duration: 100ms;\n }\n\n @keyframes PopIn {\n from {\n transform: scale(0.8);\n opacity: 0;\n }\n\n 40% {\n transform: scale(1.1);\n opacity: 1;\n }\n }\n .tile[data-animation=\'flip-in\'] {\n animation-name: FlipIn;\n animation-duration: 250ms;\n animation-timing-function: ease-in;\n }\n @keyframes FlipIn {\n 0% {\n transform: rotateX(0);\n }\n 100% {\n transform: rotateX(-90deg);\n }\n }\n .tile[data-animation=\'flip-out\'] {\n animation-name: FlipOut;\n animation-duration: 250ms;\n animation-timing-function: ease-in;\n }\n @keyframes FlipOut {\n 0% {\n transform: rotateX(-90deg);\n }\n 100% {\n transform: rotateX(0);\n }\n }\n</style>\n<div class="tile" data-state="empty" data-animation="idle"></div>\n';
var v = function (e) {
n(t, e);
var a = h(t);
function t() {
var e;
return s(this, t),
r(p(e = a.call(this)), '_letter', ''),
r(p(e), '_state', 'empty'),
r(p(e), '_animation', 'idle'),
r(p(e), '_last', !1),
r(p(e), '_reveal', !1),
e.attachShadow({
mode: 'open'
}),
e
}
return o(t, [
{
key: 'last',
set: function (e) {
this._last = e
}
},
{
key: 'connectedCallback',
value: function () {
var e = this;
this.shadowRoot.appendChild(k.content.cloneNode(!0)),
this.$tile = this.shadowRoot.querySelector('.tile'),
this.$tile.addEventListener('animationend', (function (a) {
'PopIn' === a.animationName && (e._animation = 'idle'),
'FlipIn' === a.animationName && (e.$tile.dataset.state = e._state, e._animation = 'flip-out'),
'FlipOut' === a.animationName && (e._animation = 'idle', e._last && e.dispatchEvent(new CustomEvent('game-last-tile-revealed-in-row', {
bubbles: !0,
composed: !0
}))),
e._render()
})),
this._render()
}
},
{
key: 'attributeChangedCallback',
value: function (e, a, s) {
switch (e) {
case 'letter':
if (s === a) break;
var t = 'null' === s ? '' : s;
this._letter = t,
this._state = t ? 'tbd' : 'empty',
this._animation = t ? 'pop' : 'idle';
break;
case 'evaluation':
if (!s) break;
this._state = s;
break;
case 'reveal':
this._animation = 'flip-in',
this._reveal = !0
}
this._render()
}
},
{
key: '_render',
value: function () {
this.$tile && (this.$tile.textContent = this._letter, [
'empty',
'tbd'
].includes(this._state) && (this.$tile.dataset.state = this._state), (['empty',
'tbd'].includes(this._state) || this._reveal) && this.$tile.dataset.animation != this._animation && (this.$tile.dataset.animation = this._animation))
}
}
], [
{
key: 'observedAttributes',
get: function () {
return ['letter',
'evaluation',
'reveal']
}
}
]),
t
}(c(HTMLElement));
customElements.define('game-tile', v);
var w = document.createElement('template');
w.innerHTML = '\n <style>\n :host {\n display: block;\n }\n :host([invalid]){\n animation-name: Shake;\n animation-duration: 600ms;\n }\n .row {\n display: grid;\n grid-template-columns: repeat(5, 1fr);\n grid-gap: 5px;\n }\n .win {\n animation-name: Bounce;\n animation-duration: 1000ms;\n }\n\n @keyframes Bounce {\n 0%, 20% {\n transform: translateY(0);\n }\n 40% {\n transform: translateY(-30px);\n }\n 50% {\n transform: translateY(5px);\n }\n 60% {\n transform: translateY(-15px);\n }\n 80% {\n transform: translateY(2px);\n }\n 100% {\n transform: translateY(0);\n }\n }\n\n @keyframes Shake {\n 10%,\n 90% {\n transform: translateX(-1px);\n }\n\n 20%,\n 80% {\n transform: translateX(2px);\n }\n\n 30%,\n 50%,\n 70% {\n transform: translateX(-4px);\n }\n\n 40%,\n 60% {\n transform: translateX(4px);\n }\n }\n </style>\n <div class="row"></div>\n';
var x = function (e) {
n(t, e);
var a = h(t);
function t() {
var e;
return s(this, t),
(e = a.call(this)).attachShadow({
mode: 'open'
}),
e._letters = '',
e._evaluation = [
],
e._length,
e
}
return o(t, [
{
key: 'evaluation',
get: function () {
return this._evaluation
},
set: function (e) {
var a = this;
this._evaluation = e,
this.$tiles && this.$tiles.forEach((function (e, s) {
e.setAttribute('evaluation', a._evaluation[s]),
setTimeout((function () {
e.setAttribute('reveal', '')
}), 300 * s)
}))
}
},
{
key: 'connectedCallback',
value: function () {
var e = this;
this.shadowRoot.appendChild(w.content.cloneNode(!0)),
this.$row = this.shadowRoot.querySelector('.row');
for (var a = function (a) {
var s = document.createElement('game-tile'),
t = e._letters[a];
(t && s.setAttribute('letter', t), e._evaluation[a]) && (s.setAttribute('evaluation', e._evaluation[a]), setTimeout((function () {
s.setAttribute('reveal', '')
}), 100 * a));
a === e._length - 1 && (s.last = !0),
e.$row.appendChild(s)
}, s = 0; s < this._length; s++) a(s);
this.$tiles = this.shadowRoot.querySelectorAll('game-tile'),
this.addEventListener('animationend', (function (a) {
'Shake' === a.animationName && e.removeAttribute('invalid')
}))
}
},
{
key: 'attributeChangedCallback',
value: function (e, a, s) {
switch (e) {
case 'letters':
this._letters = s || '';
break;
case 'length':
this._length = parseInt(s, 10);
break;
case 'win':
if (null === s) {
this.$tiles.forEach((function (e) {
e.classList.remove('win')
}));
break
}
this.$tiles.forEach((function (e, a) {
e.classList.add('win'),
e.style.animationDelay = ''.concat(100 * a, 'ms')
}))
}
this._render()
}
},
{
key: '_render',
value: function () {
var e = this;
this.$row && this.$tiles.forEach((function (a, s) {
var t = e._letters[s];
t ? a.setAttribute('letter', t) : a.removeAttribute('letter')
}))
}
}
], [
{
key: 'observedAttributes',
get: function () {
return ['letters',
'length',
'invalid',
'win']
}
}
]),
t
}(c(HTMLElement));
customElements.define('game-row', x);
var z = document.createElement('template');
z.innerHTML = '\n <slot></slot>\n';
var j = 'darkTheme',
S = 'colorBlindTheme',
_ = function (e) {
n(t, e);
var a = h(t);
function t() {
var e;
s(this, t),
r(p(e = a.call(this)), 'isDarkTheme', !1),
r(p(e), 'isColorBlindTheme', !1),
e.attachShadow({
mode: 'open'
});
var o = JSON.parse(window.localStorage.getItem(j)),
n = window.matchMedia('(prefers-color-scheme: dark)').matches,
i = JSON.parse(window.localStorage.getItem(S));
return !0 === o || !1 === o ? e.setDarkTheme(o) : n && e.setDarkTheme(!0),
!0 !== i && !1 !== i || e.setColorBlindTheme(i),
e
}
return o(t, [
{
key: 'setDarkTheme',
value: function (e) {
var a = document.querySelector('body');
e && !a.classList.contains('nightmode') ? a.classList.add('nightmode') : a.classList.remove('nightmode'),
this.isDarkTheme = e,
window.localStorage.setItem(j, JSON.stringify(e))
}
},
{
key: 'setColorBlindTheme',
value: function (e) {
var a = document.querySelector('body');
e && !a.classList.contains('colorblind') ? a.classList.add('colorblind') : a.classList.remove('colorblind'),
this.isColorBlindTheme = e,
window.localStorage.setItem(S, JSON.stringify(e))
}
},
{
key: 'connectedCallback',
value: function () {
var e = this;
this.shadowRoot.appendChild(z.content.cloneNode(!0)),
this.shadowRoot.addEventListener('game-setting-change', (function (a) {
var s = a.detail,
t = s.name,
o = s.checked;
switch (t) {
case 'dark-theme':
return void e.setDarkTheme(o);
case 'color-blind-theme':
return void e.setColorBlindTheme(o)
}
}))
}
}
]),
t
}(c(HTMLElement));
function q(e, a) {
return e === a || e != e && a != a
}
function E(e, a) {
for (var s = e.length; s--; ) if (q(e[s][0], a)) return s;
return - 1
}
customElements.define('game-theme-manager', _);
var A = Array.prototype.splice;
function L(e) {
var a = - 1,
s = null == e ? 0 : e.length;
for (this.clear(); ++a < s; ) {
var t = e[a];
this.set(t[0], t[1])
}
}
L.prototype.clear = function () {
this.__data__ = [
],
this.size = 0
},
L.prototype.delete = function (e) {
var a = this.__data__,
s = E(a, e);
return !(s < 0) && (s == a.length - 1 ? a.pop() : A.call(a, s, 1), --this.size, !0)
},
L.prototype.get = function (e) {
var a = this.__data__,
s = E(a, e);
return s < 0 ? void 0 : a[s][1]
},
L.prototype.has = function (e) {
return E(this.__data__, e) > - 1
},
L.prototype.set = function (e, a) {
var s = this.__data__,
t = E(s, e);
return t < 0 ? (++this.size, s.push([e,
a])) : s[t][1] = a,
this
};
var T = 'object' == ('undefined' == typeof global ? 'undefined' : a(global)) && global && global.Object === Object && global,
I = 'object' == ('undefined' == typeof self ? 'undefined' : a(self)) && self && self.Object === Object && self,
C = T || I || Function('return this') (),
M = C.Symbol,
O = Object.prototype,
R = O.hasOwnProperty,
$ = O.toString,
P = M ? M.toStringTag : void 0;
var N = Object.prototype.toString;
var H = M ? M.toStringTag : void 0;
function G(e) {
return null == e ? void 0 === e ? '[object Undefined]' : '[object Null]' : H && H in Object(e) ? function (e) {
var a = R.call(e, P),
s = e[P];
try {
e[P] = void 0;
var t = !0
} catch (e) {
}
var o = $.call(e);
return t && (a ? e[P] = s : delete e[P]),
o
}(e) : function (e) {
return N.call(e)
}(e)
}
function D(e) {
var s = a(e);
return null != e && ('object' == s || 'function' == s)
}
function B(e) {
if (!D(e)) return !1;
var a = G(e);
return '[object Function]' == a || '[object GeneratorFunction]' == a || '[object AsyncFunction]' == a || '[object Proxy]' == a
}
var F,
W = C['__core-js_shared__'],
Y = (F = /[^.]+$/.exec(W && W.keys && W.keys.IE_PROTO || '')) ? 'Symbol(src)_1.' + F : '';
var J = Function.prototype.toString;
var U = /^\[object .+?Constructor\]$/,
X = Function.prototype,
K = Object.prototype,
V = X.toString,
Q = K.hasOwnProperty,
Z = RegExp('^' + V.call(Q).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$');
function ee(e) {
return !(!D(e) || (a = e, Y && Y in a)) && (B(e) ? Z : U).test(function (e) {
if (null != e) {
try {
return J.call(e)
} catch (e) {
}
try {
return e + ''
} catch (e) {
}
}
return ''
}(e));
var a
}
function ae(e, a) {
var s = function (e, a) {
return null == e ? void 0 : e[a]
}(e, a);
return ee(s) ? s : void 0
}
var se = ae(C, 'Map'),
te = ae(Object, 'create');
var oe = Object.prototype.hasOwnProperty;
var re = Object.prototype.hasOwnProperty;
function ne(e) {
var a = - 1,
s = null == e ? 0 : e.length;
for (this.clear(); ++a < s; ) {
var t = e[a];
this.set(t[0], t[1])
}
}
function ie(e, s) {
var t,
o,
r = e.__data__;
return ('string' == (o = a(t = s)) || 'number' == o || 'symbol' == o || 'boolean' == o ? '__proto__' !== t : null === t) ? r['string' == typeof s ? 'string' : 'hash'] : r.map
}
function le(e) {
var a = - 1,
s = null == e ? 0 : e.length;
for (this.clear(); ++a < s; ) {
var t = e[a];
this.set(t[0], t[1])
}
}
ne.prototype.clear = function () {
this.__data__ = te ? te(null) : {
},
this.size = 0
},
ne.prototype.delete = function (e) {
var a = this.has(e) && delete this.__data__[e];
return this.size -= a ? 1 : 0,
a
},
ne.prototype.get = function (e) {
var a = this.__data__;
if (te) {
var s = a[e];
return '__lodash_hash_undefined__' === s ? void 0 : s
}
return oe.call(a, e) ? a[e] : void 0
},
ne.prototype.has = function (e) {
var a = this.__data__;
return te ? void 0 !== a[e] : re.call(a, e)
},
ne.prototype.set = function (e, a) {
var s = this.__data__;
return this.size += this.has(e) ? 0 : 1,
s[e] = te && void 0 === a ? '__lodash_hash_undefined__' : a,
this
},
le.prototype.clear = function () {
this.size = 0,
this.__data__ = {
hash: new ne,
map: new (se || L),
string: new ne
}
},
le.prototype.delete = function (e) {
var a = ie(this, e).delete(e);
return this.size -= a ? 1 : 0,
a
},
le.prototype.get = function (e) {
return ie(this, e).get(e)
},
le.prototype.has = function (e) {
return ie(this, e).has(e)
},
le.prototype.set = function (e, a) {
var s = ie(this, e),
t = s.size;
return s.set(e, a),
this.size += s.size == t ? 0 : 1,
this
};
function de(e) {
var a = this.__data__ = new L(e);
this.size = a.size
}
de.prototype.clear = function () {
this.__data__ = new L,
this.size = 0
},
de.prototype.delete = function (e) {
var a = this.__data__,
s = a.delete(e);
return this.size = a.size,
s
},
de.prototype.get = function (e) {
return this.__data__.get(e)
},
de.prototype.has = function (e) {
return this.__data__.has(e)
},
de.prototype.set = function (e, a) {
var s = this.__data__;
if (s instanceof L) {
var t = s.__data__;
if (!se || t.length < 199) return t.push([e,
a]),
this.size = ++s.size,
this;
s = this.__data__ = new le(t)
}
return s.set(e, a),
this.size = s.size,
this
};
var ue = function () {
try {
var e = ae(Object, 'defineProperty');
return e({
}, '', {
}),
e
} catch (e) {
}
}();
function ce(e, a, s) {
'__proto__' == a && ue ? ue(e, a, {
configurable: !0,
enumerable: !0,
value: s,
writable: !0
}) : e[a] = s
}
function pe(e, a, s) {
(void 0 !== s && !q(e[a], s) || void 0 === s && !(a in e)) && ce(e, a, s)
}
var me,
he = function (e, a, s) {
for (var t = - 1, o = Object(e), r = s(e), n = r.length; n--; ) {
var i = r[me ? n : ++t];
if (!1 === a(o[i], i, o)) break
}
return e
},
ye = 'object' == (void 0 === e ? 'undefined' : a(e)) && e && !e.nodeType && e,
ge = ye && 'object' == ('undefined' == typeof module ? 'undefined' : a(module)) && module && !module.nodeType && module,
be = ge && ge.exports === ye ? C.Buffer : void 0,
fe = be ? be.allocUnsafe : void 0;
var ke = C.Uint8Array;
function ve(e, a) {
var s,
t,
o = a ? (s = e.buffer, t = new s.constructor(s.byteLength), new ke(t).set(new ke(s)), t) : e.buffer;
return new e.constructor(o, e.byteOffset, e.length)
}
var we = Object.create,
xe = function () {
function e() {
}
return function (a) {
if (!D(a)) return {
};
if (we) return we(a);
e.prototype = a;
var s = new e;
return e.prototype = void 0,
s
}
}();
var ze,
je,
Se = (ze = Object.getPrototypeOf, je = Object, function (e) {
return ze(je(e))
}),
_e = Object.prototype;
function qe(e) {
var a = e && e.constructor;
return e === ('function' == typeof a && a.prototype || _e)
}
function Ee(e) {
return null != e && 'object' == a(e)
}
function Ae(e) {
return Ee(e) && '[object Arguments]' == G(e)
}
var Le = Object.prototype,
Te = Le.hasOwnProperty,
Ie = Le.propertyIsEnumerable,
Ce = Ae(function () {
return arguments
}()) ? Ae : function (e) {
return Ee(e) && Te.call(e, 'callee') && !Ie.call(e, 'callee')
},
Me = Array.isArray;
function Oe(e) {
return 'number' == typeof e && e > - 1 && e % 1 == 0 && e <= 9007199254740991
}
function Re(e) {
return null != e && Oe(e.length) && !B(e)
}
var $e = 'object' == (void 0 === e ? 'undefined' : a(e)) && e && !e.nodeType && e,
Pe = $e && 'object' == ('undefined' == typeof module ? 'undefined' : a(module)) && module && !module.nodeType && module,
Ne = Pe && Pe.exports === $e ? C.Buffer : void 0,
He = (Ne ? Ne.isBuffer : void 0) || function () {
return !1
},
Ge = Function.prototype,
De = Object.prototype,
Be = Ge.toString,
Fe = De.hasOwnProperty,
We = Be.call(Object);
var Ye = {
};
Ye['[object Float32Array]'] = Ye['[object Float64Array]'] = Ye['[object Int8Array]'] = Ye['[object Int16Array]'] = Ye['[object Int32Array]'] = Ye['[object Uint8Array]'] = Ye['[object Uint8ClampedArray]'] = Ye['[object Uint16Array]'] = Ye['[object Uint32Array]'] = !0,
Ye['[object Arguments]'] = Ye['[object Array]'] = Ye['[object ArrayBuffer]'] = Ye['[object Boolean]'] = Ye['[object DataView]'] = Ye['[object Date]'] = Ye['[object Error]'] = Ye['[object Function]'] = Ye['[object Map]'] = Ye['[object Number]'] = Ye['[object Object]'] = Ye['[object RegExp]'] = Ye['[object Set]'] = Ye['[object String]'] = Ye['[object WeakMap]'] = !1;
var Je = 'object' == (void 0 === e ? 'undefined' : a(e)) && e && !e.nodeType && e,
Ue = Je && 'object' == ('undefined' == typeof module ? 'undefined' : a(module)) && module && !module.nodeType && module,
Xe = Ue && Ue.exports === Je && T.process,
Ke = function () {
try {
var e = Ue && Ue.require && Ue.require('util').types;
return e || Xe && Xe.binding && Xe.binding('util')
} catch (e) {
}
}(),
Ve = Ke && Ke.isTypedArray,
Qe = Ve ? function (e) {
return function (a) {
return e(a)
}
}(Ve) : function (e) {
return Ee(e) && Oe(e.length) && !!Ye[G(e)]
};
function Ze(e, a) {
if (('constructor' !== a || 'function' != typeof e[a]) && '__proto__' != a) return e[a]
}
var ea = Object.prototype.hasOwnProperty;
function aa(e, a, s) {
var t = e[a];
ea.call(e, a) && q(t, s) && (void 0 !== s || a in e) || ce(e, a, s)
}
var sa = /^(?:0|[1-9]\d*)$/;
function ta(e, s) {
var t = a(e);
return !!(s = null == s ? 9007199254740991 : s) && ('number' == t || 'symbol' != t && sa.test(e)) && e > - 1 && e % 1 == 0 && e < s
}
var oa = Object.prototype.hasOwnProperty;
function ra(e, a) {
var s = Me(e),
t = !s && Ce(e),
o = !s && !t && He(e),
r = !s && !t && !o && Qe(e),
n = s || t || o || r,
i = n ? function (e, a) {
for (var s = - 1, t = Array(e); ++s < e; ) t[s] = a(s);
return t
}(e.length, String) : [
],
l = i.length;
for (var d in e) !a && !oa.call(e, d) || n && ('length' == d || o && ('offset' == d || 'parent' == d) || r && ('buffer' == d || 'byteLength' == d || 'byteOffset' == d) || ta(d, l)) || i.push(d);
return i
}
var na = Object.prototype.hasOwnProperty;
function ia(e) {
if (!D(e)) return function (e) {
var a = [
];
if (null != e) for (var s in Object(e)) a.push(s);
return a
}(e);
var a = qe(e),
s = [
];
for (var t in e) ('constructor' != t || !a && na.call(e, t)) && s.push(t);
return s
}
function la(e) {
return Re(e) ? ra(e, !0) : ia(e)
}
function da(e) {
return function (e, a, s, t) {
var o = !s;
s || (s = {
});
for (var r = - 1, n = a.length; ++r < n; ) {
var i = a[r],
l = t ? t(s[i], e[i], i, s, e) : void 0;
void 0 === l && (l = e[i]),
o ? ce(s, i, l) : aa(s, i, l)
}
return s
}(e, la(e))
}
function ua(e, a, s, t, o, r, n) {
var i = Ze(e, s),
l = Ze(a, s),
d = n.get(l);
if (d) pe(e, s, d);
else {
var u,
c = r ? r(i, l, s + '', e, a, n) : void 0,
p = void 0 === c;
if (p) {
var m = Me(l),
h = !m && He(l),
y = !m && !h && Qe(l);
c = l,
m || h || y ? Me(i) ? c = i : Ee(u = i) && Re(u) ? c = function (e, a) {
var s = - 1,
t = e.length;
for (a || (a = Array(t)); ++s < t; ) a[s] = e[s];
return a
}(i) : h ? (p = !1, c = function (e, a) {
if (a) return e.slice();
var s = e.length,
t = fe ? fe(s) : new e.constructor(s);
return e.copy(t),
t
}(l, !0)) : y ? (p = !1, c = ve(l, !0)) : c = [
] : function (e) {
if (!Ee(e) || '[object Object]' != G(e)) return !1;
var a = Se(e);
if (null === a) return !0;
var s = Fe.call(a, 'constructor') && a.constructor;
return 'function' == typeof s && s instanceof s && Be.call(s) == We
}(l) || Ce(l) ? (c = i, Ce(i) ? c = da(i) : D(i) && !B(i) || (c = function (e) {
return 'function' != typeof e.constructor || qe(e) ? {
}
: xe(Se(e))
}(l))) : p = !1
}
p && (n.set(l, c), o(c, l, t, r, n), n.delete(l)),
pe(e, s, c)
}
}
function ca(e, a, s, t, o) {
e !== a && he(a, (function (r, n) {
if (o || (o = new de), D(r)) ua(e, a, n, s, ca, t, o);
else {
var i = t ? t(Ze(e, n), r, n + '', e, a, o) : void 0;
void 0 === i && (i = r),
pe(e, n, i)
}
}), la)
}
function pa(e) {
return e
}
function ma(e, a, s) {
switch (s.length) {
case 0:
return e.call(a);
case 1:
return e.call(a, s[0]);
case 2:
return e.call(a, s[0], s[1]);
case 3:
return e.call(a, s[0], s[1], s[2])
}
return e.apply(a, s)
}
var ha = Math.max;
var ya = ue ? function (e, a) {
return ue(e, 'toString', {
configurable: !0,
enumerable: !1,
value: (s = a, function () {
return s
}),
writable: !0
});
var s
}
: pa,
ga = Date.now;
var ba = function (e) {
var a = 0,
s = 0;
return function () {
var t = ga(),
o = 16 - (t - s);
if (s = t, o > 0) {
if (++a >= 800) return arguments[0]
} else a = 0;
return e.apply(void 0, arguments)
}
}(ya);
function fa(e, a) {
return ba(function (e, a, s) {
return a = ha(void 0 === a ? e.length - 1 : a, 0),
function () {
for (var t = arguments, o = - 1, r = ha(t.length - a, 0), n = Array(r); ++o < r; ) n[o] = t[a + o];
o = - 1;
for (var i = Array(a + 1); ++o < a; ) i[o] = t[o];
return i[a] = s(n),
ma(e, this, i)
}
}(e, a, pa), e + '')
}
var ka,
va = (ka = function (e, a, s) {
ca(e, a, s)
}, fa((function (e, s) {
var t = - 1,
o = s.length,
r = o > 1 ? s[o - 1] : void 0,
n = o > 2 ? s[2] : void 0;
for (r = ka.length > 3 && 'function' == typeof r ? (o--, r) : void 0, n && function (e, s, t) {
if (!D(t)) return !1;
var o = a(s);
return !!('number' == o ? Re(t) && ta(s, t.length) : 'string' == o && s in t) && q(t[s], e)
}(s[0], s[1], n) && (r = o < 3 ? void 0 : r, o = 1), e = Object(e); ++t < o; ) {
var i = s[t];
i && ka(e, i, t, r)
}
return e
}))),
wa = 'gameState',
xa = {
boardState: null,
evaluations: null,
rowIndex: null,
solution: null,
gameStatus: null,
lastPlayedTs: null,
lastCompletedTs: null,
restoringFromLocalStorage: null,
hardMode: !1
};
function za() {
var e = window.localStorage.getItem(wa) || JSON.stringify(xa);
return JSON.parse(e)
}
function ja(e) {
var a = za();
!function (e) {
window.localStorage.setItem(wa, JSON.stringify(e))
}(va(a, e))
}
var Sa = document.createElement('template');
Sa.innerHTML = '\n <style>\n .setting {\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-bottom: 1px solid var(--color-tone-4);\n padding: 16px 0;\n }\n\n a, a:visited {\n color: var(--color-tone-2);\n }\n\n .title {\n font-size: 18px;\n }\n .text {\n padding-right: 8px;\n }\n .description {\n font-size: 12px;\n color: var(--color-tone-2);\n }\n\n #footnote {\n position: absolute;\n bottom: 0;\n right: 0;\n padding: 16px;\n color: var(--color-tone-2);\n font-size: 12px;\n text-align: right;\n }\n\n @media only screen and (min-device-width : 320px) and (max-device-width : 480px) {\n .setting {\n padding: 16px;\n }\n }\n\n </style>\n <div class="sections">\n <section>\n <div class="setting">\n <div class="text">\n <div class="title">Hard Mode</div>\n <div class="description">Any revealed hints must be used in subsequent guesses</div>\n </div>\n <div class="control">\n <game-switch id="hard-mode" name="hard-mode"></game-switch>\n </div>\n </div>\n <div class="setting">\n <div class="text">\n <div class="title">Dark Theme</div>\n </div>\n <div class="control">\n <game-switch id="dark-theme" name="dark-theme"></game-switch>\n </div>\n </div>\n <div class="setting">\n <div class="text">\n <div class="title">Color Blind Mode</div>\n <div class="description">High contrast colors</div>\n </div>\n <div class="control">\n <game-switch id="color-blind-theme" name="color-blind-theme"></game-switch>\n </div>\n </div>\n </section>\n\n <section>\n <div class="setting">\n <div class="text">\n <div class="title">Feedback</div><div class="description">Code en design van Josh Wardle, vertaling door <a href="https://twitter.com/pingiun_">yele</a></div>\n </div>\n <div class="control">\n <a href="mailto:wordle@powerlanguage.co.uk?subject=Feedback" title="wordle@powerlanguage.co.uk">Email</a>\n |\n <a href="https://twitter.com/intent/tweet?screen_name=powerlanguish" target="blank" title="@powerlanguish">Twitter</a>\n </div>\n </div>\n </section>\n </div>\n <div id="footnote">\n <div id="puzzle-number"></div>\n <div id="hash"></div>\n <div>\n';
var _a = function (e) {
n(t, e);
var a = h(t);
function t() {
var e;
return s(this, t),
r(p(e = a.call(this)), 'gameApp', void 0),
e.attachShadow({
mode: 'open'
}),
e
}
return o(t, [
{
key: 'connectedCallback',
value: function () {
var e,
a = this;
this.shadowRoot.appendChild(Sa.content.cloneNode(!0)),
this.shadowRoot.querySelector('#hash').textContent = null === (e = window.wordle) || void 0 === e ? void 0 : e.hash,
this.shadowRoot.querySelector('#puzzle-number').textContent = '#'.concat(this.gameApp.dayOffset),
this.shadowRoot.addEventListener('game-switch-change', (function (e) {
e.stopPropagation();
var s = e.detail,
t = s.name,
o = s.checked,
r = s.disabled;
a.dispatchEvent(new CustomEvent('game-setting-change', {
bubbles: !0,
composed: !0,
detail: {
name: t,
checked: o,
disabled: r
}
})),
a.render()
})),
this.render()
}
},
{
key: 'render',
value: function () {
var e = document.querySelector('body');
e.classList.contains('nightmode') && this.shadowRoot.querySelector('#dark-theme').setAttribute('checked', ''),
e.classList.contains('colorblind') && this.shadowRoot.querySelector('#color-blind-theme').setAttribute('checked', '');
var a = za();
a.hardMode && this.shadowRoot.querySelector('#hard-mode').setAttribute('checked', ''),
a.hardMode || 'IN_PROGRESS' !== a.gameStatus || 0 === a.rowIndex || (this.shadowRoot.querySelector('#hard-mode').removeAttribute('checked'), this.shadowRoot.querySelector('#hard-mode').setAttribute('disabled', ''))
}
}
]),
t
}(c(HTMLElement));
customElements.define('game-settings', _a);
var qa = document.createElement('template');
qa.innerHTML = '\n <style>\n .toast {\n position: relative;\n margin: 16px;\n background-color: var(--color-tone-1);\n color: var(--color-tone-7);\n padding: 16px;\n border: none;\n border-radius: 4px;\n opacity: 1;\n transition: opacity 300ms cubic-bezier(0.645, 0.045, 0.355, 1);\n font-weight: 700;\n }\n .win {\n background-color: var(--color-correct);\n color: var(--tile-text-color);\n }\n .fade {\n opacity: 0;\n }\n </style>\n <div class="toast"></div>\n';
var Ea = function (e) {
n(t, e);
var a = h(t);
function t() {
var e;
return s(this, t),
r(p(e = a.call(this)), '_duration', void 0),
e.attachShadow({
mode: 'open'
}),
e
}
return o(t, [
{
key: 'connectedCallback',
value: function () {
var e = this;
this.shadowRoot.appendChild(qa.content.cloneNode(!0));
var a = this.shadowRoot.querySelector('.toast');
a.textContent = this.getAttribute('text'),
this._duration = this.getAttribute('duration') || 1000,
'Infinity' !== this._duration && setTimeout((function () {
a.classList.add('fade')
}), this._duration),
a.addEventListener('transitionend', (function (a) {
e.parentNode.removeChild(e)
}))
}
}
]),
t
}(c(HTMLElement));
customElements.define('game-toast', Ea);
var Aa = ['draag',
'palet',
'zakje',
'blaas',
'snede',
'tiara',
'acuut',
'vegen',
'wever',
'lotus',
'spelt',
'kunde',
'stamp',
'tarot',
'kater',
'zweet',
'gamer',
'egaal',
'dazen',
'korea',
'bever',
'plato',
'animo',
'zonet',
'karig',
'kweek',
'coupe',
'strik',
'serre',
'loser',
'sjeik',
'wreed',
'dorst',
'foton',
'havik',
'kampt',
'breng',
'drink',
'vries',
'lease',
'leunt',
'potje',
'zwemt',
'aders',
'waait',
'otter',
'slijm',
'sloep',
'donor',
'busje',
'lunch',
'garen',
'visum',
'rogge',
'idool',
'botst',
'pacht',
'troef',
'lepra',
'eicel',
'kassa',
'heute',
'drift',
'ester',
'loden',
'riekt',
'folie',
'linea',
'koord',
'nihil',
'woest',
'haver',
'getij',
'fotos',
'kraai',
'lanen',
'dozen',
'gebak',
'dagje',
'kazen',
'rozet',
'snoep',
'sinus',
'pinda',
'vezel',
'weven',
'abuis',
'inham',
'stern',
'adder',
'dunkt',
'peren',
'daten',
'kreet',
'pizza',
'deugt',
'wagon',
'khaki',
'arend',
'nobel',
'terra',
'gevat',
'plaag',
'opium',
'niche',
'stijf',
'rebel',
'pinot',
'rover',
'kleed',
'zalig',
'zucht',
'rotor',
'laken',
'koker',
'globe',
'meeuw',
'alien',
'sifon',
'ninja',
'roest',
'krijt',
'flyer',
'twist',
'cacao',
'smaad',
'stomp',
'hulde',
'kraag',
'lelie',
'jongs',
'emmer',
'keken',
'zwijn',
'riool',
'stout',
'alert',
'shock',
'notie',
'zeden',
'staaf',
'schub',
'pasta',
'doelt',
'polis',
'bizar',
'astma',
'ivoor',
'einen',
'pluim',
'baken',
'genot',
'aroma',
'deler',
'cloud',
'huwen',
'omweg',
'spoed',
'jasje',
'doorn',
'afzet',
'groef',
'akten',
'retro',
'klauw',
'kegel',
'akker',
'panda',
'kreek',
'rouge',
'scout',
'barst',
'kaars',
'talig',
'drost',
'linde',
'stunt',
'amber',
'folio',
'preek',
'breda',
'kloon',
'begaf',
'drang',
'debut',
'weide',
'hitje',
'kruid',
'frans',
'stoep',
'plint',
'bitje',
'fries',
'troep',
'tango',
'angel',
'taart',
'vuist',
'kruin',
'gunst',
'taboe',
'spoel',
'gebit',
'sober',
'lonen',
'jarig',
'sonde',
'stoet',
'peper',
'pupil',
'alarm',
'holte',
'schok',
'snaar',
'chips',
'omver',
'spook',
'asiel',
'schop',
'tiran',
'vloed',
'zenuw',
'korst',
'banjo',
'oogje',
'magma',
'steil',
'beige',
'haard',
'viola',
'slank',
'gekko',
'deugd',
'polka',
'truck',
'boren',
'dogma',
'koets',
'lobby',
'parel',
'prive',
'menig',
'kubus',
'poets',
'diner',
'immer',
'duwen',
'oraal',
'botje',
'worst',
'baton',
'schil',
'bruto',
'clown',
'beren',
'kudde',
'speer',
'cobra',
'turbo',
'bonen',
'dwang',
'racer',
'neven',
'baden',
'nevel',
'loods',
'saldo',
'psalm',
'tumor',
'kluis',
'hymne',
'ketel',
'netto',
'gewas',
'hecht',
'naald',
'emoji',
'balie',
'griep',
'schap',
'kolen',
'slurf',
'poker',
'rozen',
'loper',
'kraan',
'druif',
'zwaan',
'prent',
'boter',
'flauw',
'algen',
'voogd',
'blank',
'zadel',
'wijde',
'maagd',
'weren',
'flank',
'racen',
'manen',
'huren',
'zebra',
'beest',
'hekel',
'femme',
'kerst',
'quasi',
'sigma',
'stoot',
'sekte',
'swing',
'bloot',
'dosis',
'draai',
'revue',
'buigt',
'buste',
'gerst',
'split',
'azuur',
'teelt',
'hitte',
'baard',
'drukt',
'ophef',
'haaks',
'zusje',
'casus',
'vloek',
'genie',
'hamer',
'erven',
'strak',
'indie',
'tenue',
'stier',
'trant',
'urine',
'kaken',
'glans',
'laser',
'ernst',
'fulva',
'dezen',
'hofje',
'ionen',
'tarwe',
'zegen',
'tombe',
'brein',
'genen',
'eiken',
'disco',
'paden',
'haken',
'koken',
'joods',
'traag',
'marge',
'spier',
'etage',
'opzij',
'kapot',
'elpee',
'atoom',
'depot',
'stoom',
'omega',
'vecht',
'spion',
'modus',
'bruid',
'blijk',
'china',
'laden',
'opdat',
'dieet',
'besef',
'pauze',
'ovaal',
'gilde',
'theta',
'corps',
'palen',
'fjord',
'joint',
'tabak',
'roken',
'canon',
'vlieg',
'oogst',
'salon',
'kogel',
'daken',
'gemak',
'naakt',
'email',
'doodt',
'decor',
'motie',
'annex',
'fraai',
'slaaf',
'zonde',
'fiche',
'deken',
'lever',
'vinyl',
'blond',
'ritme',
'jager',
'appel',
'kloof',
'eiwit',
'bonus',
'poule',
'tenen',
'print',
'paars',
'gedoe',
'rente',
'larve',
'natie',
'stuur',
'steek',
'koren',
'broek',
'arena',
'enzym',
'degen',
'hevig',
'schot',
'trans',
'radar',
'toets',
'buren',
'zacht',
'atlas',
'trend',
'chaos',
'icoon',
'fonds',
'woede',
'party',
'raden',
'komma',
'kabel',
'snuit',
'zegel',
'minus',
'mythe',
'trots',
'spijt',
'magie',
'stoel',
'blind',
'shirt',
'garde',
'dwerg',
'audio',
'engel',
'anker',
'barok',
'draad',
'vacht',
'gebed',
'boete',
'plots',
'slaap',
'proef',
'bloei',
'blijf',
'afrit',
'fagot',
'jagen',
'afval',
'imago',
'knoop',
'claim',
'heide',
'rijst',
'klant',
'plank',
'manga',
'schat',
'voegt',
'haren',
'farao',
'delta',
'humor',
'stapt',
'sloop',
'haast',
'tsaar',
'sabel',
'dader',
'bende',
'drugs',
'flora',
'draak',
'essay',
'remix',
'graan',
'amper',
'super',
'maten',
'dwars',
'rugby',
'inval',
'kring',
'prooi',
'brood',
'benen',
'hobby',
'matig',
'focus',
'droom',
'lente',
'breuk',
'klank',
'mager',
'vrees',
'kanon',
'tocht',
'regen',
'keten',
'debat',
'tenor',
'fruit',
'droog',
'fauna',
'sluis',
'greep',
'korps',
'linie',
'borst',
'kolom',
'krans',
'wraak',
'forum',
'exact',
'ijzer',
'halte',
'nader',
'grijs',
'bocht',
'hielp',
'kiest',
'stage',
'slang',
'tante',
'grand',
'zoons',
'uniek',
'tempo',
'stuks',
'oever',
'fluit',
'sfeer',
'zocht',
'egels',
'vloer',
'tafel',
'geluk',
'maker',
'ramen',
'hoeve',
'nicht',
'beleg',
'ruzie',
'beton',
'kopie',
'vlees',
'promo',
'games',
'angst',
'raket',
'beurs',
'hoorn',
'koper',
'bijen',
'koers',
'leeuw',
'jacht',
'kwijt',
'varen',
'blues',
'hemel',
'zicht',
'kwaad',
'staal',
'godin',
'bruin',
'waard',
'intro',
'aldus',
'wagen',
'vocht',
'wacht',
'visie',
'drank',
'virus',
'straf',
'liter',
'vaart',
'flink',
'stopt',
'wiens',
'omzet',
'graad',
'feest',
'troon',
'enorm',
'kopen',
'bloem',
'inzet',
'bezet',
'wijst',
'noord',
'krijg',
'taken',
'opzet',
'alsof',
'elite',
'banen',
'fiets',
'smaak',
'firma',
'agent',
'spits',
'islam',
'kwart',
'poort',
'drama',
'thans',
'steeg',
'gezag',
'storm',
'kroon',
'geest',
'cello',
'serif',
'slaan',
'erbij',
'boord',
'vorst',
'vrede',
'onzin',
'wezen',
'motto',
'bloed',
'kamer',
'zover',
'klaar',
'bodem',
'villa',
'sluit',
'bevel',
'avond',
'voren',
'optie',
'dames',
'lezer',
'ouder',
'beurt',
'vloot',
'spoor',
'alias',
'bomen',
'hotel',
'vaker',
'plein',
'apart',
'allen',
'deden',
'groei',
'kruis',
'teken',
'drums',
'paard',
'trouw',
'gevel',
'brief',
'keuze',
'steen',
'abdij',
'viool',
'dicht',
'nogal',
'prima',
'moord',
'baron',
'zetel',
'nacht',
'tabel',
'heren',
'uilen',
'kroeg',
'fusie',
'opera',
'kader',
'gezin',
'regel',
'breed',
'lucht',
'trein',
'getal',
'plaat',
'brand',
'groet',
'zijde',
'massa',
'route',
'haven',
'video',
'zwaar',
'wegen',
'aarde',
'sloot',
'negen',
'keren',
'roood',
'spons',
'radio',
'thuis',
'deels',
'doden',
'halen',
'zwart',
'lezen',
'cover',
'steun',
'markt',
'kapel',
'actie',
'prins',
'krant',
'wonen',
'metro',
'beker',
'hoger',
'thema',
'coach',
'lopen',
'vroeg',
'gezet',
'jeugd',
'motor',
'orgel',
'molen',
'zomer',
'nabij',
'bezig',
'maand',
'roman',
'ieder',
'vogel',
'graag',
'circa',
'licht',
'bezit',
'macht',
'neemt',
'bleek',
'grens',
'juist',
'groen',
'hoofd',
'zeven',
'toren',
'blauw',
'kever',
'ploeg',
'graaf',
'kunst',
'prijs',
'kleur',
'regie',
'media',
'beeld',
'grond',
'helft',
'recht',
'reeks',
'broer',
'plant',
'klein',
'piano',
'zeker',
'talen',
'reden',
'sport',
'woord',
'winst',
'leger',
'buurt',
'sterk',
'naast',
'lemma',
'bijna',
'alles',
'vraag',
'meest',
'niets',
'delen',
'zodat',
'nodig',
'basis',
'enkel',
'ander',
'dagen',
'namen',
'goals',
'genus',
'nooit',
'heden',
'stijl',
'nieuw',
'schip',
'nemen',
'leden',
'extra',
'beter',
'geven',
'zelfs',
'start',
'geval',
'vrouw',
'bleef',
'shift',
'genre',
'zowel',
'brons',
'laten',
'boven',
'moest',
'stond',
'taxon',
'vader',
'robot',
'begon',
'einde',
'groot',
'groep',
'score',
'tekst',
'serie',
'leven',
'komen',
'wapen',
'begin',
'sinds',
'kaart',
'terug',
'samen',
'water',
'lijst',
'eigen',
'album',
'index',
'vanaf',
'maken',
'omdat',
'adres',
'meter',
'ronde',
'later',
'staan',
'zoals',
'links',
'regio',
'jaren',
'waren',
'tegen',
'label',
'april',
'maart',
'titel',
'onder',
'heeft',
'eerst',
'soort',
'datum',
'model',
'tonen',
'palet',
'zakje',
'blaas',
'snede',
'tiara',
'acuut',
'vegen',
'wever',
'lotus',
'spelt',
'kunde',
'stamp',
'tarot',
'kater',
'zweet',
'gamer',
'egaal',
'dazen',
'korea',
'bever',
'plato',
'animo',
'zonet',
'karig',
'kweek',
'coupe',
'strik',
'serre',
'loser',
'sjeik',
'wreed',
'dorst',
'foton',
'havik',
'kampt',
'breng',
'drink',
'vries',
'lease',
'leunt',
'potje',
'zwemt',
'aders',
'otter',
'slijm',
'sloep',
'donor',
'busje',
'lunch',
'garen',
'visum',
'rogge',
'idool',
'botst',
'pacht',
'troef',
'lepra',
'eicel',
'kassa',
'heute',
'drift',
'ester',
'loden',
'folie',
'linea',
'koord',
'nihil',
'woest',
'haver',
'getij',
'fotos',
'kraai',
'lanen',
'dozen',
'gebak',
'dagje',
'kazen',
'rozet',
'snoep',
'sinus',
'pinda',
'vezel',
'weven',
'abuis',
'inham',
'stern',
'adder',
'dunkt',
'peren',
'daten',
'kreet',
'pizza',
'wagon',
'khaki',
'arend',
'nobel',
'terra',
'gevat',
'plaag',
'opium',
'niche',
'stijf',
'rebel',
'pinot',
'rover',
'kleed',
'zalig',
'zucht',
'rotor',
'laken',
'koker',
'globe',
'meeuw',
'alien',
'sifon',
'ninja',
'roest',
'krijt',
'flyer',
'twist',
'cacao',
'smaad',
'stomp',
'hulde',
'kraag',
'lelie',
'jongs',
'emmer',
'keken',
'zwijn',
'riool',
'stout',
'alert',
'shock',
'notie',
'zeden',
'staaf',
'schub',
'pasta',
'polis',
'bizar',
'astma',
'ivoor',
'pluim',
'baken',
'genot',
'aroma',
'deler',
'cloud',
'huwen',
'omweg',
'spoed',
'jasje',
'doorn',
'afzet',
'groef',
'akten',
'retro',
'klauw',
'kegel',
'akker',
'panda',
'kreek',
'rouge',
'scout',
'barst',
'kaars',
'talig',
'drost',
'linde',
'stunt',
'amber',
'folio',
'preek',
'breda',
'kloon',
'begaf',
'drang',
'debut',
'weide',
'hitje',
'kruid',
'frans',
'stoep',
'plint',
'bitje',
'fries',
'troep',
'tango',
'angel',
'taart',
'vuist',
'kruin',
'gunst',
'taboe'],
La = ['aagje',
'aaide',
'aaien',
'aanga',
'aapje',
'aapte',
'aarde',
'aards',
'aardt',
'aasde',
'aasje',
'abaci',
'abaja',
'abces',
'abdij',
'abdis',
'abeel',
'abele',
'abten',
'abuis',
'acces',
'acres',
'acryl',
'actes',
'actie',
'actio',
'actor',
'actum',
'acute',
'acuut',
'addax',
'adder',
'adelt',
'ademt',
'adept',
'aders',
'adert',
'adieu',
'adios',
'adobe',
'adres',
'adult',
'aequo',
'afbad',
'afbak',
'afbek',
'afbel',
'afbet',
'afbid',
'afbik',
'afbod',
'afbol',
'afdak',
'afdam',
'afdek',
'afdoe',
'afdok',
'afdop',
'afduw',
'afeet',
'affix',
'afgaf',
'afgod',
'afhak',
'afhap',
'afhel',
'afhol',
'afijn',
'afkam',
'afkan',
'afkap',
'afkom',
'afkon',
'aflag',
'aflak',
'aflap',
'aflas',
'afleg',
'aflek',
'aflig',
'aflik',
'aflos',
'afmat',
'afmik',
'afnam',
'afoog',
'afpak',
'afpas',
'afpen',
'afpik',
'afren',
'afrij',
'afris',
'afrit',
'afrol',
'afros',
'afrot',
'afrui',
'afruk',
'afsla',
'afsol',
'afsop',
'afsta',
'aftak',
'aftap',
'aftar',
'aftel',
'aften',
'aftik',
'aftip',
'aftob',
'afton',
'aftop',
'aftyp',
'afval',
'afvel',
'afvis',
'afwas',
'afwen',
'afwis',
'afwon',
'afzag',
'afzak',
'afzat',
'afzeg',
'afzei',
'afzet',
'afzie',
'afzit',
'agaat',
'agame',
'agape',
'agave',
'ageer',
'agens',
'agent',
'agger',
'agiel',
'agoge',
'agoog',
'agora',
'ahorn',
'aioli',
'airco',
'ajour',
'ajuin',
'ajuus',
'akant',
'akela',
'akers',
'akker',
'aksen',
'akten',
'aktes',
'alaaf',
'alaam',
'alant',
'alarm',
'alben',
'album',
'aldra',
'aldus',
'aleer',
'alert',
'algen',
'alias',
'alibi',
'alien',
'alken',
'alkyn',
'allee',
'allen',
'aller',
'alles',
'almee',
'aloud',
'alpen',
'alras',
'alree',
'alsem',
'alsnu',
'alsof',
'alten',
'alter',
'aluin',
'alver',
'amahs',
'amant',
'amber',
'amice',
'amict',
'amigo',
'amine',
'amish',
'amorf',
'ampel',
'amper',
'ampex',
'ampul',
'amsoi',
'amuse',
'anaal',
'anale',
'ander',
'angel',
'angst',
'anijs',
'anima',
'anime',
'animo',
'anion',
'anita',
'anjer',
'anker',
'annex',
'anode',
'anten',
'aorta',
'apart',
'apert',
'apneu',
'appel',
'appen',
'appje',
'appte',
'april',
'apsis',
'arden',
'arena',
'arend',
'argon',
'argot',
'argus',
'aride',
'arken',
'armee',
'armen',
'armer',
'armoe',
'armst',
'aroma',
'aroom',
'array',
'arren',
'artes',
'asbak',
'asemt',
'asgat',
'asiel',
'askar',
'asman',
'aspic',
'aspot',
'assem',
'assen',
'asten',
'aster',
'astma',
'aston',
'asurn',
'atjar',
'atlas',
'atoom',
'atria',
'atten',
'audio',
'audit',
'avant',
'avers',
'aviso',
'avond',
'awara',
'awari',
'axels',
'azijn',
'azuki',
'azuur',
'baadt',
'baalt',
'baant',
'baard',
'baars',
'baart',
'baast',
'babes',
'baboe',
'babok',
'bacil',
'backs',
'backt',
'bacon',
'baden',
'bader',
'badge',
'badje',
'bagel',
'baggy',
'bagno',
'bahai',
'bahco',
'bajes',
'baken',
'baker',
'bakje',
'bakra',
'bakte',
'balba',
'balde',
'balen',
'balie',
'balkt',
'balsa',
'balts',
'bamba',
'bamis',
'banco',
'bande',
'bands',
'banen',
'banga',
'bange',
'banjo',
'bankt',
'bapao',
'barak',
'baren',
'baret',
'barok',
'baron',
'barre',
'barse',
'barst',
'basen',
'bases',
'baset',
'basic',
'basis',
'basso',
'basta',
'baste',
'batch',
'baten',
'batig',
'batik',
'batje',
'baton',
'batte',
'bauwt',
'bavet',
'bazel',
'bazen',
'bazig',
'bazin',
'beaam',
'beaat',
'beate',
'beats',
'bebop',
'bebos',
'bedam',
'bedde',
'bedek',
'bedel',
'beden',
'bedes',
'bedil',
'bedje',
'bedoe',
'bedot',
'beeft',
'beeld',
'beemd',
'beent',
'beert',
'beest',
'befte',
'begaf',
'begin',
'begon',
'behuw',
'beide',
'beidt',
'beien',
'beier',
'beige',
'beits',
'bejag',
'bekaf',
'bekak',
'bekap',
'beken',
'beker',
'bekje',
'bekom',
'bekte',
'belas',
'belde',
'beleg',
'belen',
'belet',
'belik',
'belle',
'bello',
'beman',
'bemat',
'bemin',
'benam',
'bench',
'bende',
'benen',
'benig',
'bente',
'bents',
'benul',
'benut',
'beoog',
'bepak',
'bepek',
'bepte',
'berde',
'beren',
'berge',
'bergt',
'beril',
'berin',
'berst',
'besef',
'besje',
'besla',
'besom',
'besta',
'beste',
'betel',
'beten',
'beter',
'beton',
'bette',
'beugt',
'beukt',
'beult',
'beunt',
'beurs',
'beurt',
'bevak',
'beval',
'bevat',
'bevek',
'bevel',
'beven',
'bever',
'bevis',
'bevit',
'bewal',
'bewas',
'bezag',
'bezak',
'bezat',
'bezem',
'bezet',
'bezie',
'bezig',
'bezin',
'bezit',
'bezon',
'bidet',
'bidon',
'biebs',
'biedt',
'biels',
'biest',
'biets',
'bigde',
'bigot',
'bijas',
'bijen',
'bijna',
'bijou',
'biken',
'biker',
'bikte',
'bilan',
'bilde',
'bilge',
'bindt',
'bingo',
'binst',
'biopt',
'bisam',
'biste',
'bitch',
'bitse',
'bitst',
'bivak',
'bizar',
'bizon',
'blaag',
'blaak',
'blaam',
'blaar',
'blaas',
'blaat',
'black',
'blaft',
'blank',
'blauw',
'bleef',
'bleek',
'blees',
'blein',
'bleke',
'blekt',
'bleue',
'blief',
'bliek',
'bliep',
'blies',
'blije',
'blijf',
'blijk',
'blikt',
'blind',
'blink',
'blits',
'blitz',
'block',
'blode',
'bloed',
'bloei',
'bloem',
'bloes',
'blogs',
'blogt',
'blokt',
'blond',
'blonk',
'bloos',
'bloot',
'blote',
'blouw',
'blowt',
'blues',
'bluft',
'blust',
'bluts',
'board',
'bobby',
'bobde',
'bocht',
'bodem',
'boden',
'bodes',
'boede',
'boeit',
'boekt',
'boent',
'boers',
'boert',
'boete',
'bofte',
'bogen',
'bogey',
'bogie',
'bokje',
'bokst',
'bokte',
'bolde',
'bolle',
'bolst',
'bolus',
'bomde',
'bomen',
'bomer',
'bomig',
'bomma',
'bompa',
'bonen',
'bongo',
'bonje',
'bonkt',
'bonne',
'bonst',
'bonte',
'bonus',
'bonze',
'boogt',
'boomt',
'boord',
'boort',
'boost',
'boots',
'borat',
'borax',
'boren',
'borgt',
'borst',
'bosje',
'boson',
'boste',
'bosui',
'botaf',
'botel',
'boten',
'boter',
'botje',
'botox',
'botst',
'botte',
'boude',
'boute',
'bouwt',
'boven',
'bowls',
'bowlt',
'boxen',
'boxer',
'bozer',
'bozig',
'braad',
'braaf',
'braai',
'braak',
'braam',
'brabo',
'brace',
'bralt',
'brand',
'brasa',
'brast',
'brave',
'bravo',
'break',
'brede',
'breed',
'breek',
'breel',
'breid',
'brein',
'breit',
'brems',
'breng',
'breuk',
'breve',
'brief',
'briek',
'bries',
'briet',
'brijn',
'brilt',
'brink',
'brits',
'brode',
'brodt',
'broed',
'broei',
'broek',
'broer',
'broes',
'broge',
'brokt',
'bromt',
'bronk',
'brons',
'brood',
'broom',
'broos',
'brost',
'brouw',
'broze',
'bruid',
'bruin',
'bruis',
'bruls',
'brult',
'brute',
'bruto',
'bruut',
'bucht',
'buddy',
'bufen',
'bugel',
'buggy',
'buide',
'buien',
'buigt',
'buiig',
'built',
'buist',
'bukte',
'bulkt',
'bully',
'bunny',
'buren',
'buret',
'burin',
'busbo',
'busje',
'buste',
'buten',
'butst',
'buurt',
'buxus',
'bytes',
'caban',
'cacao',
'cache',
'caddy',
'cadet',
'cadre',
'cajun',
'cakes',
'camee',
'camel',
'cameo',
'camjo',
'campo',
'camps',
'campy',
'candy',
'canon',
'canto',
'capes',
'caput',
'caret',
'carga',
'cargo',
'carne',
'carte',
'carve',
'casco',
'cases',
'casht',
'casts',
'casus',
'catch',
'cauda',
'causa',
'cavia',
'cedel',
'ceder',
'celen',
'cella',
'cello',
'cents',
'chant',
'chaos',
'chape',
'charm',
'chart',
'chats',
'chaud',
'cheat',
'check',
'cheek',
'chefs',
'chemo',
'chick',
'chijl',
'chili',
'chill',
'chimp',
'chino',
'chips',
'choco',
'choke',
'chole',
'chook',
'choro',
'chose',
'chris',
'chute',
'cider',
'cijns',
'cinch',
'circa',
'cirri',
'citer',
'civet',
'claim',
'clans',
'clark',
'clash',
'claus',
'clave',
'clean',
'click',
'clips',
'close',
'cloud',
'clous',
'clown',
'clubs',
'coach',
'cobra',
'cocci',
'cocon',
'codec',
'codes',
'codex',
'codon',
'cokes',
'colli',
'collo',
'colon',
'colts',
'combi',
'combo',
'comic',
'conga',
'conti',
'conto',
'conus',
'coole',
'cools',
'corgi',
'corps',
'corsa',
'corso',
'costa',
'couch',
'coupe',
'coups',
'coupt',
'cours',
'court',
'cover',
'coxen',
'crack',
'crank',
'crash',
'crawl',
'crazy',
'credo',
'creep',
'crews',
'crime',
'crisp',
'croon',
'cross',
'crost',
'crown',
'crude',
'crypt',
'culpa',
'cumul',
'cunet',
'cupje',
'curie',
'curry',
'curve',
'cyaan',
'cycli',
'cyste',
'daags',
'daagt',
'daalt',
'daast',
'dabde',
'dacht',
'dadel',
'daden',
'dader',
'dagen',
'dager',
'dagge',
'dagje',
'daisy',
'daken',
'dakje',
'dalai',
'dalem',
'dalen',
'daler',
'damar',
'damde',
'dames',
'dampt',
'dance',
'dandy',
'danig',
'dankt',
'danse',
'dansi',
'danst',
'darde',
'darts',
'daten',
'dates',
'datet',
'datje',
'datum',
'dauwt',
'daver',
'davit',
'dawet',
'dazen',
'deals',
'dealt',
'death',
'debat',
'debet',
'debug',
'decks',
'decor',
'deden',
'deels',
'deelt',
'deern',
'deert',
'degel',
'degen',
'deins',
'deint',
'deken',
'dekje',
'dekte',
'delen',
'deler',
'delft',
'delgt',
'delta',
'demon',
'dempt',
'denim',
'denke',
'denkt',
'dente',
'depot',
'depri',
'depte',
'derby',
'derde',
'deren',
'derft',
'derny',
'desem',
'desks',
'detox',
'deuce',
'deugd',
'deugt',
'deukt',
'deunt',
'dezen',
'dezer',
'dezes',
'dicht',
'dieet',
'dieft',
'diene',
'diens',
'dient',
'diepe',
'diept',
'diere',
'diets',
'dijde',
'dijen',
'dijkt',
'dikke',
'dikst',
'dikte',
'dildo',
'dille',
'dimde',
'dinar',
'diner',
'dingo',
'dingt',
'dinky',
'diode',
'dipje',
'dipte',
'disco',
'discs',
'disks',
'diste',
'ditje',
'divan',
'dixie',
'dixit',
'dizzy',
'djaks',
'djakt',
'djati',
'djinn',
'dobbe',
'doble',
'docht',
'doden',
'doder',
'doekt',
'doelt',
'doemt',
'doend',
'doffe',
'dofst',
'dofte',
'dogen',
'doges',
'dogla',
'dogma',
'doken',
'dokte',
'dolby',
'dolce',
'dolde',
'dolen',
'doler',
'dolik',
'dolle',
'dolly',
'dolma',
'dolst',
'dombo',
'domen',
'domig',
'domme',
'dompt',
'domst',
'donna',
'donor',
'donut',
'doods',
'doodt',
'dooft',
'dooie',
'dooit',
'doolt',
'doomt',
'doopt',
'doorn',
'dopen',
'doper',
'dopes',
'dopje',
'dopte',
'dorde',
'doren',
'dorps',
'dorre',
'dorst',
'doses',
'dosis',
'doste',
'dotje',
'doubt',
'douch',
'douwt',
'doven',
'dover',
'dovig',
'downs',
'dozen',
'draad',
'draaf',
'draag',
'draai',
'draak',
'draal',
'drain',
'drama',
'dramt',
'drang',
'drank',
'drast',
'draws',
'dreef',
'dregt',
'dreig',
'drein',
'drens',
'dreun',
'drieg',
'dries',
'drift',
'drijf',
'drilt',
'dring',
'drink',
'drive',
'droef',
'droeg',
'droes',
'droge',
'dromt',
'drone',
'drong',
'dronk',
'droog',
'droom',
'droop',
'droos',
'drops',
'dropt',
'drost',
'drugs',
'druif',
'druil',
'druip',
'druis',
'drukt',
'drums',
'drumt',
'drupt',
'druus',
'duaal',
'duale',
'dubde',
'dubio',
'ducht',
'duels',
'duffe',
'dufst',
'duidt',
'duikt',
'duimt',
'duist',
'duldt',
'dulia',
'dummy',
'dumps',
'dumpt',
'dunde',
'dunkt',
'dunne',
'dunst',
'dunte',
'dupes',
'duplo',
'duren',
'durft',
'dutje',
'dutte',
'duurs',
'duurt',
'duvel',
'duwde',
'duwen',
'duwer',
'dwaal',
'dwaas',
'dwang',
'dwars',
'dwaze',
'dweep',
'dweil',
'dwerg',
'dwing',
'dwong',
'dyade',
'dynes',
'dyogo',
'ebben',
'ebden',
'ebola',
'ecart',
'echec',
'echel',
'echie',
'echte',
'ecrue',
'edele',
'edels',
'edict',
'edoch',
'educt',
'eenre',
'eerde',
'eerst',
'effen',
'egaal',
'egale',
'egard',
'egden',
'egels',
'eggen',
'eggig',
'eiber',
'eicel',
'eider',
'eigen',
'eikel',
'eiken',
'eiker',
'einde',
'eindt',
'einze',
'eisen',
'eiser',
'eiste',
'eitje',
'eivol',
'eiwit',
'eject',
'eland',
'elect',
'elfde',
'elfen',
'elfje',
'elger',
'elite',
'ellen',
'eloge',
'elpee',
'elpen',
'elven',
'elzen',
'email',
'emelt',
'emirs',
'emmer',
'emmes',
'emoes',
'enden',
'enfin',
'engel',
'enger',
'engst',
'engte',
'enige',
'enkel',
'enken',
'enorm',
'enten',
'enter',
'entte',
'enzym',
'eonen',
'epiek',
'epoxy',
'eraan',
'erbij',
'erfde',
'erger',
'ergon',
'ergst',
'erica',
'erken',
'erker',
'ermee',
'ernst',
'ertoe',
'eruit',
'ervan',
'erven',
'espen',
'essay',
'essen',
'ester',
'etage',
'etend',
'eters',
'ether',
'ethos',
'ethyl',
'ethyn',
'etnie',
'etsen',
'etser',
'etste',
'etter',
'etude',
'etuis',
'euvel',
'euzie',
'event',
'evers',
'exact',
'exces',
'exoot',
'expat',
'extra',
'ezels',
'ezelt',
'faalt',
'fabel',
'facet',
'facie',
'facit',
'facta',
'facto',
'faden',
'fagot',
'faire',
'fairs',
'faken',
'faket',
'fakir',
'falen',
'falie',
'fancy',
'farad',
'farao',
'farce',
'farde',
'farms',
'fasen',
'fases',
'fatum',
'fatwa',
'fauna',
'faxen',
'faxte',
'fazen',
'feces',
'fecit',
'feeks',
'feest',
'feilt',
'feite',
'felle',
'felst',
'femel',
'femme',
'fenol',
'ferme',
'ferry',
'fezel',
'fiber',
'fiche',
'fichu',
'ficus',
'field',
'fielt',
'fiere',
'fiets',
'fijne',
'fijns',
'fikse',
'fikst',
'files',
'filet',
'films',
'filmt',
'fiool',
'firma',
'fitis',
'fitst',
'fitte',
'fixen',
'fixer',
'fixus',
'fjord',
'flair',
'flank',
'flans',
'flapt',
'flard',
'flash',
'flati',
'flats',
'flauw',
'fleem',
'fleer',
'flens',
'flest',
'flets',
'fleur',
'flexi',
'flier',
'flikt',
'flink',
'flint',
'flipt',
'flirt',
'flits',
'floep',
'floer',
'floot',
'flops',
'flopt',
'flora',
'floss',
'flost',
'fluim',
'fluit',
'fluks',
'fluor',
'flyer',
'fnuik',
'fobie',
'focus',
'foert',
'fokte',
'folie',
'folio',
'folky',
'folly',
'fonds',
'fonts',
'fopte',
'forel',
'foren',
'forma',
'forse',
'forst',
'forte',
'forti',
'forto',
'forum',
'fossa',
'foton',
'foute',
'fouts',
'foxen',
'foyer',
'fraai',
'frame',
'franc',
'frank',
'frase',
'frats',
'freak',
'frees',
'freon',
'frets',
'fries',
'friet',
'frigo',
'frijn',
'frist',
'frons',
'front',
'fruit',
'frust',
'fuift',
'fundi',
'fungi',
'funky',
'furie',
'fusee',
'fusie',
'futen',
'futon',
'fuzzy',
'fylum',
'fysio',
'gaand',
'gaans',
'gaapt',
'gaard',
'gaart',
'gabbe',
'gaden',
'gaffe',
'gagel',
'gages',
'gaine',
'gajes',
'gakte',
'galde',
'galei',
'galen',
'galmt',
'galon',
'galop',
'gamay',
'gamba',
'gamel',
'gamen',
'gamer',
'games',
'gamet',
'gamma',
'ganse',
'gapen',
'gaper',
'gapte',
'garde',
'garen',
'garft',
'garoe',
'garst',
'garve',
'gasla',
'gaste',
'gaten',
'gates',
'gauss',
'gaven',
'gaver',
'gazel',
'gazen',
'gazet',
'gazon',
'geard',
'gebak',
'gebal',
'gebat',
'gebbe',
'gebed',
'gebel',
'gebep',
'gebet',
'gebid',
'gebit',
'gebod',
'gebot',
'gedag',
'gedek',
'gedij',
'gedoe',
'gedut',
'geduw',
'geeft',
'geeks',
'geels',
'geelt',
'geers',
'geert',
'geest',
'geeuw',
'gefit',
'gegak',
'gegil',
'gehad',
'gehak',
'gehol',
'gehop',
'gehos',
'gehot',
'geide',
'geien',
'geile',
'geilt',
'gejat',
'gejij',
'gejou',
'gejut',
'gekap',
'gekat',
'gekef',
'gekir',
'gekit',
'gekke',
'gekko',
'gekst',
'gekte',
'gekus',
'gekut',
'gelag',
'gelal',
'gelat',
'gelde',
'geldt',
'gelee',
'gelei',
'gelek',
'gelen',
'geler',
'gelet',
'gelid',
'gelig',
'gelik',
'gelok',
'gelui',
'geluk',
'gelul',
'geluw',
'gemak',
'gemat',
'gemet',
'gemis',
'gemma',
'gemok',
'gemor',
'gemot',
'genas',
'genat',
'genen',
'gener',
'genet',
'genie',
'genot',
'genre',
'genst',
'genua',
'genus',
'genut',
'geode',
'geoha',
'gepak',
'gepas',
'gepen',
'gepit',
'gepot',
'gepuf',
'geput',
'geram',
'gerat',
'gered',
'gerei',
'gerel',
'gerem',
'geren',
'gerij',
'gerit',
'gerol',
'gerot',
'gerst',
'geruk',
'gesar',
'gesco',
'gesel',
'gesis',
'gesol',
'gespt',
'gesse',
'geste',
'getal',
'getij',
'getik',
'getob',
'getto',
'getut',
'geuit',
'geurt',
'geuze',
'geval',
'gevat',
'gevel',
'geven',
'gever',
'gevet',
'gevit',
'gevut',
'gewag',
'gewas',
'gewed',
'gewei',
'gewen',
'gewet',
'gewin',
'gewis',
'gewit',
'gewon',
'gezag',
'gezel',
'gezet',
'gezin',
'gezon',
'gibus',
'gidst',
'giert',
'gigue',
'gijle',
'gijns',
'gijpt',
'gilde',
'gilet',
'ginds',
'ginst',
'gipst',
'gipsy',
'giraf',
'gispt',
'gisse',
'giste',
'gladt',
'glans',
'gleed',
'gleis',
'gleuf',
'glijd',
'glimp',
'glimt',
'glipt',
'globe',
'gloed',
'gloei',
'glooi',
'gloop',
'gloor',
'gluip',
'gluur',
'gneis',
'gnoes',
'gnoom',
'gnuif',
'goals',
'goden',
'godin',
'goede',
'goeds',
'goeie',
'gogen',
'gogme',
'gojim',
'gojse',
'gokje',
'gokte',
'golem',
'golft',
'gomde',
'gomma',
'gongs',
'gonje',
'gonst',
'gooit',
'goors',
'gordt',
'gorig',
'goten',
'goths',
'gouda',
'gouwe',
'gozer',
'graad',
'graaf',
'graag',
'graai',
'graal',
'graan',
'graas',
'graat',
'graft',
'grage',
'grand',
'grapt',
'grata',
'grauw',
'grave',
'greed',
'green',
'greep',
'grein',
'grens',
'grief',
'griek',
'griel',
'grien',
'griep',
'gries',
'griet',
'grift',
'grijn',
'grijp',
'grijs',
'grill',
'grilt',
'grime',
'grimt',
'grind',
'grint',
'griot',
'grise',
'grist',
'groef',
'groei',
'groen',
'groep',
'groes',
'groet',
'grogs',
'grolt',
'gromt',
'grond',
'groos',
'groot',
'grote',
'grove',
'gruis',
'gruwt',
'guano',
'guave',
'gulle',
'gulpt',
'gulst',
'gumde',
'gummi',
'gunde',
'gunst',
'guppy',
'guste',
'gutst',
'gymde',
'gyros',
'haagt',
'haait',
'haaks',
'haakt',
'haalt',
'haard',
'haars',
'haart',
'haast',
'hacks',
'hackt',
'hadji',
'hagel',
'hagen',
'hager',
'haiku',
'haken',
'haker',
'hakje',
'hakte',
'halal',
'halen',
'haler',
'hallo',
'halls',
'halma',
'halst',
'halte',
'halve',
'hamam',
'hamas',
'hamei',
'hamel',
'hamen',
'hamer',
'hands',
'handt',
'handy',
'hanen',
'hangt',
'hanig',
'hapax',
'haper',
'hapje',
'happy',
'hapte',
'haram',
'harde',
'hards',
'hardt',
'harem',
'haren',
'harig',
'harkt',
'harpt',
'harre',
'harst',
'harte',
'haten',
'hater',
'haute',
'haven',
'haver',
'havik',
'hazen',
'heats',
'heavy',
'hecht',
'heden',
'heeft',
'heelt',
'heers',
'heest',
'heffe',
'hegge',
'hegje',
'heide',
'heien',
'heier',
'heiig',
'heisa',
'hekel',
'heken',
'hekje',
'hekst',
'helde',
'helen',
'heler',
'helft',
'helix',
'helle',
'helpe',
'helpt',
'helse',
'helst',
'hemde',
'hemel',
'hemen',
'henen',
'henna',
'henry',
'hepen',
'heren',
'herig',
'herik',
'herin',
'herop',
'heros',
'hertz',
'hesen',
'heser',
'hesje',
'heten',
'heter',
'hetze',
'heugt',
'heult',
'heuse',
'heust',
'hevea',
'hevel',
'heven',
'hevig',
'hiaat',
'hield',
'hielp',
'hielt',
'hieuw',
'highe',
'hihat',
'hijgt',
'hijst',
'hiken',
'hikte',
'hinde',
'hinkt',
'hints',
'hippe',
'hipst',
'hipte',
'hitje',
'hitst',
'hitte',
'hobby',
'hocus',
'hoede',
'hoedt',
'hoeft',
'hoeks',
'hoekt',
'hoela',
'hoera',
'hoeri',
'hoert',
'hoest',
'hoeve',
'hoezo',
'hofje',
'hogen',
'hoger',
'hokje',
'hokte',
'holde',
'holen',
'holes',
'holle',
'holst',
'holte',
'homes',
'honds',
'honen',
'honig',
'honkt',
'hoofd',
'hoofs',
'hoogt',
'hooit',
'hoolt',
'hoont',
'hoopt',
'hoorn',
'hoort',
'hoost',
'hopen',
'hopje',
'hopla',
'hoppa',
'hoppe',
'hopsa',
'hopte',
'horde',
'hordt',
'horen',
'horig',
'horst',
'hosta',
'hoste',
'hosts',
'hotel',
'hotst',
'hotte',
'houdt',
'house',
'houwt',
'hoven',
'hozen',
'https',
'huift',
'huilt',
'huist',
'huize',
'hukte',
'hulde',
'hulst',
'humde',
'humor',
'humus',
'hunne',
'hupse',
'hupst',
'hupte',
'huren',
'hurkt',
'husky',
'hutje',
'hutst',
'huurt',
'huwde',
'huwen',
'hydra',
'hyena',
'hyfen',
'hymen',
'hymne',
'hypen',
'hyper',
'hypes',
'hypet',
'hysop',
'hyven',
'iaden',
'icing',
'icoon',
'idiot',
'idool',
'iebel',
'ieder',
'iepen',
'ijdel',
'ijken',
'ijker',
'ijkte',
'ijlde',
'ijlen',
'ijler',
'ijlst',
'ijsco',
'ijsde',
'ijsje',
'ijver',
'ijzel',
'ijzen',
'ijzer',
'ijzig',
'ikken',
'image',
'imago',
'imams',
'imker',
'immer',
'immes',
'inbed',
'inbel',
'inbox',
'indam',
'indek',
'inden',
'index',
'indik',
'indom',
'indut',
'induw',
'ineen',
'inent',
'inert',
'infra',
'ingaf',
'ingot',
'inhak',
'inham',
'inhei',
'inkom',
'inkop',
'inlap',
'inlas',
'inlay',
'inleg',
'inlog',
'inlos',
'inmat',
'innam',
'innen',
'innig',
'inpak',
'inpek',
'inpik',
'input',
'inren',
'inrij',
'inrit',
'inrol',
'inruk',
'insla',
'insop',
'insta',
'insuf',
'intik',
'intro',
'intyp',
'inval',
'invet',
'invul',
'inwin',
'inwit',
'inwon',
'inzag',
'inzak',
'inzat',
'inzet',
'inzie',
'inzit',
'ionen',
'ippon',
'islam',
'ismen',
'ismes',
'issue',
'items',
'ivoor',
'jaagt',
'jaapt',
'jaars',
'jabot',
'jacht',
'jacks',
'jaden',
'jagen',
'jager',
'jajem',
'jalap',
'jalon',
'jambe',
'jamde',
'janet',
'jankt',
'janus',
'japen',
'japon',
'jaren',
'jarig',
'jasje',
'jaste',
'jatte',
'javel',
'jawel',
'jawls',
'jazzy',
'jeans',
'jeeps',
'jeint',
'jelui',
'jemig',
'jende',
'jetje',
'jeton',
'jeugd',
'jeukt',
'jeune',
'jicht',
'jihad',
'jijde',
'jijen',
'jingo',
'jiven',
'jobde',
'jodel',
'joden',
'jodin',
'joego',
'joelt',
'joept',
'jofel',
'jogde',
'joint',
'joken',
'joker',
'jokes',
'jokte',
'jolde',
'jolen',
'jolig',
'jonas',
'jonde',
'jonen',
'jonge',
'jongs',
'jongt',
'joods',
'jookt',
'joolt',
'jopen',
'joude',
'jouen',
'joule',
'jours',
'jouwe',
'jouwt',
'jozef',
'jubee',
'jubel',
'judas',
'judex',
'juich',
'juicy',
'juist',
'jukte',
'jumbo',
'junks',
'junta',
'juten',
'jutte',
'kaait',
'kaakt',
'kaamt',
'kaant',
'kaapt',
'kaard',
'kaars',
'kaart',
'kaast',
'kaats',
'kabas',
'kabel',
'kadee',
'kaden',
'kader',
'kades',
'kadet',
'kaffa',
'kafir',
'kafje',
'kagen',
'kagie',
'kajak',
'kakel',
'kaken',
'kaker',
'kakje',
'kakte',
'kalde',
'kalen',
'kaler',
'kalft',
'kalig',
'kalis',
'kalkt',
'kalle',
'kalme',
'kalot',
'kamde',
'kamen',
'kamer',
'kamig',
'kampt',
'kanen',
'kanis',
'kanji',
'kanon',
'kante',
'kapel',
'kapen',
'kaper',
'kapje',
'kapok',
'kapot',
'kappa',
'kapte',
'karaf',
'karde',
'karen',
'karet',
'karig',
'karma',
'karnt',
'karos',
'karot',
'karst',
'karts',
'kasba',
'kasje',
'kassa',
'kaste',
'kater',
'katje',
'katte',
'kauri',
'kauwt',
'kavel',
'kawai',
'kazak',
'kazen',
'kazer',
'kebab',
'kebon',
'keelt',
'keept',
'keert',
'keest',
'kefir',
'kefte',
'kegel',
'kegge',
'kegje',
'keien',
'keilt',
'keken',
'keker',
'kekke',
'kelen',
'kelim',
'kelly',
'kemel',
'kenau',
'kende',
'kendo',
'kenen',
'kepel',
'kepen',
'keper',
'kepie',
'kerel',
'keren',
'kerft',
'kerke',
'kerks',
'kerkt',
'kermt',
'kerst',
'ketch',
'ketel',
'keten',
'ketje',
'keton',
'ketst',
'keude',
'keuen',
'keure',
'keurs',
'keurt',
'keuze',
'kevel',
'keven',
'kever',
'kevie',
'keyen',
'kezen',
'kicks',
'kickt',
'kidde',
'kiekt',
'kielt',
'kiemt',
'kiene',
'kient',
'kiept',
'kiert',
'kiese',
'kiest',
'kieuw',
'kijft',
'kijkt',
'kikte',
'kilde',
'kille',
'kilst',
'kilte',
'kilts',
'kimde',
'kimme',
'kinds',
'kinky',
'kiosk',
'kipje',
'kipte',
'kirde',
'kiste',
'kiten',
'kitst',
'kitte',
'klaaf',
'klaag',
'klaar',
'klaas',
'kladt',
'klakt',
'klamp',
'klank',
'klant',
'klapt',
'klare',
'klats',
'klauw',
'kleed',
'kleef',
'klein',
'kleit',
'klemt',
'klept',
'klerk',
'klets',
'kleum',
'kleun',
'kleur',
'klief',
'kliek',
'klier',
'klijn',
'kliko',
'klikt',
'klimt',
'kling',
'klink',
'klist',
'kloef',
'kloek',
'kloet',
'klojo',
'klokt',
'klomp',
'klonk',
'klont',
'kloof',
'klooi',
'kloon',
'kloot',
'klopt',
'klost',
'klote',
'klots',
'klove',
'kluft',
'kluif',
'kluis',
'kluit',
'kluns',
'klust',
'kluts',
'kluun',
'kluut',
'knaag',
'knaak',
'knaap',
'knakt',
'knalt',
'knapt',
'knarp',
'knars',
'knauw',
'kneed',
'kneep',
'knelt',
'kneus',
'kniel',
'knier',
'knies',
'knijp',
'knikt',
'knipt',
'knoei',
'knoet',
'knokt',
'knook',
'knoop',
'knopt',
'knorf',
'knort',
'knots',
'knust',
'koala',
'kobbe',
'kocht',
'kodak',
'kodde',
'koekt',
'koele',
'koelt',
'koene',
'koers',
'koert',
'koest',
'koets',
'kogel',
'kogen',
'kogge',
'koine',
'koken',
'koker',
'koket',
'kokos',
'kolde',
'kolen',
'kolft',
'kolkt',
'kolom',
'kolos',
'komaf',
'komen',
'komma',
'komst',
'konen',
'kooit',
'kookt',
'koopt',
'koord',
'koost',
'kopal',
'kopen',
'koper',
'kopie',
'kopij',
'kopje',
'kopra',
'kopse',
'kopte',
'koran',
'korde',
'koren',
'korft',
'korps',
'korre',
'korst',
'korte',
'koste',
'koten',
'koter',
'kotje',
'kotst',
'koude',
'kouds',
'kouwe',
'kovel',
'koven',
'kozak',
'kozen',
'kraag',
'kraai',
'kraak',
'kraal',
'kraam',
'kraan',
'krabt',
'krach',
'krakt',
'kramp',
'kramt',
'krank',
'krans',
'krant',
'krapa',
'krast',
'krats',
'krauw',
'kreeg',
'kreek',
'krees',
'kreet',
'kreng',
'krent',
'krept',
'kreuk',
'kreun',
'kribt',
'kriek',
'kriel',
'krijg',
'krijn',
'krijs',
'krijt',
'krikt',
'krill',
'krimi',
'krimp',
'kring',
'krist',
'kroeg',
'kroel',
'kroep',
'kroes',
'krols',
'krolt',
'kromp',
'kromt',
'krook',
'kroon',
'kroop',
'kroos',
'kroot',
'kropt',
'kruch',
'kruid',
'kruif',
'kruik',
'kruim',
'kruin',
'kruip',
'kruis',
'kruit',
'krukt',
'krult',
'kubbe',
'kubus',
'kucht',
'kudde',
'kuier',
'kuift',
'kuilt',
'kuipt',
'kuise',
'kuist',
'kulas',
'kulde',
'kunde',
'kunne',
'kunst',
'kuras',
'kuren',
'kurkt',
'kusje',
'kuste',
'kutje',
'kuurt',
'kwaad',
'kwaak',
'kwaal',
'kwade',
'kwakt',
'kwant',
'kwark',
'kwart',
'kwast',
'kwats',
'kweek',
'kweel',
'kween',
'kweet',
'kwekt',
'kwelm',
'kwelt',
'kwets',
'kwiek',
'kwijl',
'kwijn',
'kwijt',
'kwint',
'kwips',
'kwist',
'laadt',
'laaft',
'laaie',
'laait',
'laakt',
'laars',
'laats',
'label',
'lacht',
'laden',
'lader',
'lades',
'laffe',
'lafst',
'lagen',
'lager',
'lakei',
'laken',
'lakse',
'lakst',
'lakte',
'lalde',
'lamel',
'lamet',
'lamme',
'lamst',
'lande',
'lands',
'landt',
'lanen',
'lange',
'langs',
'langt',
'lapel',
'lapis',
'lapje',
'lapte',
'laren',
'large',
'largo',
'larie',
'larve',
'laser',
'lasso',
'laste',
'latei',
'laten',
'later',
'latex',
'latin',
'latje',
'latte',
'latuw',
'laude',
'lauwe',
'lavas',
'laven',
'lavet',
'lazen',
'lazer',
'lease',
'lebbe',
'leden',
'leder',
'ledig',
'leeft',
'leegt',
'leekt',
'leemt',
'leent',
'leers',
'leert',
'leest',
'leeuw',
'legde',
'legen',
'leger',
'leges',
'legio',
'leidt',
'leien',
'leken',
'lekje',
'lekke',
'lekst',
'lekte',
'lelde',
'lelie',
'lemen',
'lemma',
'lende',
'lenen',
'lener',
'lengt',
'lenig',
'lenst',
'lente',
'lento',
'lenze',
'lepel',
'leper',
'lepra',
'lepte',
'leren',
'lesbo',
'lesje',
'leste',
'lette',
'leuke',
'leuks',
'leunt',
'leurt',
'leute',
'leuze',
'level',
'leven',
'lever',
'lezen',
'lezer',
'liaan',
'liane',
'libel',
'licet',
'licht',
'lidje',
'liefs',
'liegt',
'lieve',
'lijdt',
'lijft',
'lijkt',
'lijmt',
'lijnt',
'lijpe',
'lijst',
'lijve',
'liken',
'likes',
'likje',
'likte',
'lilde',
'liman',
'limbo',
'limes',
'limit',
'linde',
'linea',
'linie',
'linke',
'links',
'linkt',
'linze',
'lipje',
'lipte',
'lires',
'lispt',
'liter',
'litho',
'lives',
'lobby',
'lobje',
'locus',
'loden',
'loeft',
'loeit',
'loens',
'loert',
'lofts',
'logde',
'logee',
'logen',
'loges',
'logge',
'login',
'logos',
'logst',
'loipe',
'loken',
'loket',
'lokte',
'lokus',
'lolde',
'lolly',
'lomer',
'lomig',
'lompe',
'lonen',
'lonkt',
'loods',
'loodt',
'looft',
'loogt',
'looit',
'looms',
'loont',
'loops',
'loopt',
'loost',
'lopen',
'loper',
'lorde',
'lords',
'lorre',
'lorum',
'loser',
'losse',
'loste',
'loten',
'lotje',
'lotto',
'lotus',
'loven',
'lover',
'lozen',
'lozer',
'lubde',
'lucht',
'lucky',
'luide',
'luidt',
'luien',
'luier',
'luikt',
'luimt',
'luist',
'lukte',
'lulde',
'lullo',
'lumen',
'lumme',
'lunch',
'lunet',
'lunst',
'lupus',
'luren',
'lurex',
'lurkt',
'lusje',
'lutje',
'luwde',
'luwen',
'luwer',
'luwst',
'luwte',
'luxer',
'luxes',
'lycea',
'lycra',
'lymfe',
'lynch',
'lysis',
'lysol',
'maagd',
'maait',
'maakt',
'maalt',
'maand',
'maant',
'maart',
'maast',
'maats',
'macha',
'macho',
'macht',
'macro',
'madam',
'maden',
'mades',
'maffe',
'mafje',
'mafst',
'mafte',
'magen',
'mager',
'maggi',
'magie',
'magma',
'magot',
'mails',
'mailt',
'majem',
'major',
'makam',
'makel',
'maken',
'maker',
'makke',
'makst',
'malde',
'malen',
'maler',
'malie',
'malle',
'malls',
'malse',
'malst',
'malta',
'malus',
'malve',
'mamba',
'mambo',
'mamma',
'manco',
'mande',
'manen',
'maner',
'manga',
'mango',
'manie',
'manke',
'mankt',
'manna',
'manou',
'manse',
'manta',
'mapje',
'marde',
'maren',
'marge',
'markt',
'marlt',
'marot',
'maske',
'massa',
'masse',
'match',
'maten',
'mater',
'mates',
'matig',
'matje',
'matse',
'matst',
'matte',
'mauve',
'mauwt',
'maxim',
'mayor',
'mazel',
'mazen',
'meden',
'media',
'medio',
'medoc',
'meeat',
'meega',
'meelt',
'meent',
'meers',
'meert',
'meest',
'meeuw',
'meien',
'meier',
'mekka',
'mekte',
'melde',
'meldt',
'melen',
'melig',
'melis',
'melkt',
'meluw',
'memel',
'mende',
'menen',
'mengt',
'menie',
'menig',
'mensa',
'mepte',
'merci',
'merel',
'meren',
'merkt',
'mesje',
'meson',
'metal',
'meten',
'meter',
'metra',
'metro',
'metst',
'meukt',
'meurt',
'meute',
'mezen',
'mezzo',
'miauw',
'micro',
'miept',
'miert',
'miese',
'mijdt',
'mijne',
'mijns',
'mijnt',
'mikte',
'mikwa',
'mikwe',
'milde',
'mille',
'mimen',
'mimer',
'mimes',
'minde',
'mines',
'minks',
'minne',
'minor',
'minst',
'minus',
'mirre',
'mirte',
'misga',
'misse',
'miste',
'mitra',
'mitst',
'mixed',
'mixen',
'mixer',
'mixte',
'mocht',
'mocro',
'model',
'modem',
'modes',
'modus',
'moede',
'moeit',
'moeke',
'moert',
'moest',
'mofje',
'mogen',
'mogol',
'moker',
'mokka',
'mokte',
'molde',
'molen',
'molik',
'molmt',
'momde',
'monde',
'mondt',
'money',
'moogt',
'mooie',
'moois',
'moord',
'mopje',
'morde',
'morel',
'moren',
'mores',
'morse',
'morst',
'motel',
'moten',
'motet',
'motie',
'motje',
'motor',
'motse',
'motst',
'motte',
'motto',
'mount',
'moven',
'moves',
'movet',
'mudde',
'muffe',
'mufst',
'mufte',
'mugje',
'muien',
'muikt',
'muist',
'muite',
'mulat',
'mulch',
'mulle',
'mulst',
'mungo',
'muren',
'murwe',
'murwt',
'musea',
'music',
'musje',
'musts',
'muzak',
'muzen',
'mythe',
'naait',
'naakt',
'naald',
'naars',
'naast',
'nabij',
'nabob',
'nacho',
'nacht',
'nadar',
'nadat',
'naden',
'nader',
'nadir',
'nadoe',
'nafta',
'nagaf',
'nagel',
'naken',
'nakie',
'nakom',
'nalas',
'namat',
'namen',
'nanny',
'naoog',
'napje',
'nappa',
'narde',
'nasla',
'naste',
'natel',
'natie',
'natje',
'natst',
'natte',
'nauwe',
'navel',
'naven',
'nawee',
'nazag',
'nazat',
'nazeg',
'nazei',
'nazet',
'nazie',
'nazin',
'nazit',
'nebbe',
'nebje',
'necro',
'neder',
'neemt',
'negen',
'neger',
'negge',
'negus',
'neigt',
'nekje',
'nekte',
'nemen',
'nemer',
'nepen',
'neppe',
'nepte',
'nerds',
'neren',
'nerts',
'nesse',
'netel',
'neten',
'netje',
'netst',
'nette',
'netto',
'neukt',
'neust',
'nevel',
'neven',
'nexus',
'niche',
'nicht',
'niest',
'niets',
'nieuw',
'nihil',
'nijgt',
'nijpt',
'nikab',
'nikte',
'nimby',
'ninja',
'nipje',
'nipte',
'nisje',
'nixen',
'nobel',
'noden',
'nodig',
'noemt',
'noest',
'nogal',
'noirs',
'nokte',
'nolle',
'nomen',
'nonen',
'nonet',
'nonna',
'noodt',
'nooit',
'noopt',
'noord',
'nopen',
'nopte',
'noren',
'noria',
'norse',
'norst',
'noten',
'notie',
'novae',
'novum',
'nozem',
'nufje',
'nuken',
'nulde',
'nurks',
'nurse',
'nutst',
'nutte',
'nylon',
'oasen',
'oases',
'oasis',
'obees',
'obers',
'obese',
'oblie',
'obool',
'octet',
'oculi',
'odeur',
'odium',
'oefen',
'oehoe',
'oempa',
'oenen',
'oenig',
'oeros',
'oever',
'offer',
'ofwel',
'ogend',
'ogief',
'ohade',
'ohmse',
'ojief',
'okapi',
'oksel',
'olies',
'oliet',
'olijf',
'olijk',
'olmen',
'omarm',
'omber',
'omdat',
'omdoe',
'omduw',
'omega',
'omgaf',
'omhak',
'omhul',
'omina',
'omkat',
'omkom',
'omleg',
'omrij',
'omrit',
'omrol',
'omsla',
'omsta',
'omval',
'omvat',
'omver',
'omwal',
'omwas',
'omweg',
'omwip',
'omzag',
'omzeg',
'omzei',
'omzet',
'omzie',
'omzit',
'onder',
'oneer',
'onera',
'ongel',
'onkel',
'onmin',
'onnet',
'onnut',
'onpas',
'onsen',
'onsje',
'ontga',
'ontij',
'onwel',
'onwil',
'onwis',
'onzen',
'onzer',
'onzes',
'onzin',
'oogde',
'oogje',
'oogst',
'ooien',
'ootje',
'opaak',
'opaal',
'opake',
'opart',
'opbak',
'opbel',
'opbod',
'opdat',
'opdis',
'opdoe',
'opdof',
'opduw',
'opeen',
'opeet',
'opeis',
'opens',
'opent',
'opera',
'opfok',
'opgaf',
'ophad',
'opheb',
'ophef',
'opium',
'opjut',
'opkam',
'opkan',
'opkap',
'opkom',
'oplap',
'oplas',
'opleg',
'oplet',
'oplos',
'opmat',
'opnam',
'opoes',
'oppak',
'oppas',
'opper',
'oppik',
'oppor',
'oppot',
'oprek',
'oprij',
'opril',
'oprit',
'oprol',
'oprot',
'oprui',
'opruk',
'opsla',
'opsom',
'opsta',
'optas',
'optel',
'optie',
'optil',
'opval',
'opvat',
'opvis',
'opvul',
'opwas',
'opwek',
'opwel',
'opzag',
'opzak',
'opzat',
'opzeg',
'opzei',
'opzet',
'opzie',
'opzij',
'opzit',
'oraal',
'orale',
'orden',
'order',
'ordes',
'oreer',
'orgel',
'orgie',
'oribi',
'ossen',
'otium',
'otter',
'ouden',
'ouder',
'oudje',
'oudst',
'ounce',
'ouwel',
'ovaal',
'ovale',
'ovens',
'overs',
'oxers',
'oxide',
'paait',
'paalt',
'paaps',
'paard',
'paars',
'paart',
'pacen',
'pacet',
'pacht',
'packs',
'paddo',
'paddy',
'paden',
'padie',
'padje',
'paffe',
'pafte',
'pager',
'pages',
'pairs',
'pakje',
'pakte',
'palen',
'palet',
'palmt',
'palts',
'pampa',
'panda',
'pandt',
'panel',
'panen',
'pangi',
'pangs',
'panna',
'panne',
'panty',
'papen',
'paper',
'papil',
'papje',
'pappa',
'papte',
'parel',
'paren',
'pareo',
'paret',
'paria',
'parka',
'parse',
'party',
'parwa',
'pasar',
'pasja',
'pasje',
'passe',
'passt',
'pasta',
'paste',
'patat',
'patch',
'pater',
'patio',
'patst',
'paukt',
'pauze',
'pedel',
'pedis',
'peelt',
'peest',
'pegel',
'peies',
'peilt',
'peins',
'pekel',
'pekte',
'pelde',
'pelen',
'peluw',
'pence',
'pende',
'penen',
'penis',
'penny',
'peper',
'pepte',
'peren',
'perkt',
'perse',
'perst',
'pesto',
'peten',
'peter',
'petit',
'petje',
'petto',
'peurt',
'pezen',
'pezig',
'piais',
'piano',
'piece',
'piekt',
'piepa',
'piept',
'piert',
'piest',
'pijen',
'pijne',
'pijnt',
'pijpt',
'piket',
'pikje',
'pikol',
'pikte',
'pilav',
'pilde',
'pilot',
'pinas',
'pinda',
'pinde',
'pingo',
'pinkt',
'pioen',
'pions',
'pipet',
'pipse',
'pipst',
'piste',
'pitch',
'pitje',
'pitst',
'pitte',
'pixel',
'pizza',
'plaag',
'plaat',
'plagt',
'plaid',
'plakt',
'plane',
'plank',
'plano',
'plans',
'plant',
'plast',
'plats',
'plebs',
'pleeg',
'plees',
'pleet',
'plein',
'pleit',
'plekt',
'plemp',
'pleng',
'plens',
'plets',
'pleur',
'plint',
'ploeg',
'ploft',
'plomp',
'plons',
'plooi',
'ploos',
'ploot',
'plots',
'plugt',
'pluim',
'pluis',
'plukt',
'plume',
'plurk',
'pluut',
'pocht',
'pocus',
'podia',
'poefs',
'poeha',
'poema',
'poept',
'poert',
'poets',
'pofte',
'pogen',
'poger',
'poken',
'poker',
'pokte',
'polak',
'polen',
'polio',
'polis',
'polka',
'polls',
'polst',
'pompt',
'ponem',
'ponen',
'ponst',
'poogt',
'pooit',
'pookt',
'pools',
'poort',
'poost',
'popel',
'popen',
'popes',
'popje',
'poppy',
'porde',
'porem',
'porie',
'porno',
'porti',
'porto',
'posen',
'poses',
'poste',
'potas',
'poten',
'poter',
'potig',
'potje',
'potte',
'poule',
'pover',
'power',
'pozen',
'praai',
'praal',
'praam',
'praat',
'prach',
'prakt',
'prang',
'prauw',
'preek',
'prees',
'prefs',
'prent',
'prest',
'priel',
'priem',
'prijk',
'prijs',
'prikt',
'prima',
'prime',
'primo',
'prins',
'print',
'prion',
'prior',
'proef',
'profs',
'promo',
'pronk',
'pront',
'prooi',
'propt',
'prots',
'prove',
'provo',
'proxy',
'proza',
'pruik',
'pruil',
'pruim',
'prune',
'pruts',
'psalm',
'psych',
'puber',
'pubis',
'pucks',
'pufte',
'puien',
'puike',
'puilt',
'puimt',
'puist',
'pukje',
'pulkt',
'pulls',
'pulst',
'pumps',
'punch',
'punks',
'punky',
'pupil',
'puppy',
'puree',
'puren',
'pusht',
'puste',
'putje',
'putse',
'putst',
'putte',
'putti',
'putto',
'putts',
'puurs',
'puurt',
'pylon',
'pyrex',
'quads',
'quant',
'quark',
'quasi',
'qubit',
'query',
'queue',
'quilt',
'quizt',
'quoot',
'quorn',
'quota',
'quote',
'raadt',
'raagt',
'raait',
'raakt',
'raamt',
'raapt',
'raars',
'raast',
'rabat',
'rabbi',
'racen',
'racer',
'races',
'racet',
'radar',
'radde',
'raden',
'rader',
'radii',
'radio',
'radix',
'radja',
'radje',
'radon',
'radst',
'rafel',
'ragde',
'ragen',
'rages',
'raids',
'rails',
'rakel',
'raken',
'raker',
'raket',
'rakia',
'rally',
'rambo',
'ramde',
'ramee',
'ramen',
'rames',
'ramin',
'ramsj',
'rance',
'ranch',
'randt',
'range',
'ranja',
'ranke',
'rankt',
'ranse',
'ranst',
'ranze',
'rapen',
'rappe',
'rapst',
'rapte',
'rarae',
'raspt',
'rasse',
'rasta',
'ratel',
'raten',
'ratio',
'ratje',
'ratst',
'ratte',
'rauwe',
'raven',
'ravot',
'rayon',
'razen',
'reaal',
'reach',
'ready',
'realo',
'rebbe',
'rebel',
'rebus',
'reces',
'recht',
'recta',
'recto',
'recul',
'redde',
'reden',
'reder',
'redes',
'redox',
'reeds',
'reedt',
'reeft',
'reeks',
'reent',
'reept',
'reeuw',
'regde',
'regel',
'regen',
'regie',
'regio',
'reide',
'reien',
'reiki',
'reikt',
'reilt',
'reine',
'reins',
'reist',
'rekel',
'reken',
'rekje',
'rekke',
'rekte',
'relax',
'relde',
'relen',
'remde',
'remix',
'remme',
'rende',
'renen',
'renet',
'rente',
'repel',
'repen',
'reply',
'repro',
'repte',
'resem',
'reset',
'reten',
'retor',
'retro',
'reuen',
'reuma',
'reuze',
'reven',
'revue',
'rezen',
'rials',
'riant',
'ribbe',
'ribde',
'ribes',
'richt',
'rider',
'riekt',
'riemt',
'rigor',
'rijde',
'rijdt',
'rijen',
'rijer',
'rijft',
'rijgt',
'rijke',
'rijks',
'rijmt',
'rijns',
'rijpe',
'rijpt',
'rijst',
'rikte',
'rilde',
'rille',
'rilst',
'ringt',
'rinks',
'rinse',
'rinst',
'rioja',
'riool',
'ripte',
'risee',
'riste',
'riten',
'rites',
'ritje',
'ritme',
'ritst',
'ritte',
'ritus',
'rivet',
'riyal',
'robes',
'robot',
'rocks',
'rockt',
'rodel',
'roden',
'rodeo',
'roder',
'roede',
'roeit',
'roemt',
'roept',
'roers',
'roert',
'roest',
'rogge',
'rogje',
'roken',
'roker',
'rokje',
'rokte',
'rolde',
'roman',
'romen',
'romer',
'romig',
'ronde',
'rondo',
'rondt',
'ronin',
'ronkt',
'roods',
'rooft',
'rooie',
'rooit',
'rookt',
'rooms',
'roomt',
'roost',
'roots',
'ropij',
'ropte',
'rosse',
'roste',
'rotan',
'roten',
'rotje',
'rotor',
'rotst',
'rotte',
'rouge',
'route',
'rouwe',
'rouwt',
'rouxs',
'roven',
'rover',
'rowan',
'rozen',
'rozet',
'rozig',
'ruche',
'rugby',
'rugje',
'ruide',
'ruien',
'ruift',
'ruige',
'ruikt',
'ruilt',
'ruime',
'ruimt',
'ruist',
'rukte',
'rulle',
'rulst',
'rumba',
'runde',
'runen',
'ruste',
'ruwde',
'ruwen',
'ruwer',
'ruwst',
'ruwte',
'ruzie',
'saaie',
'saais',
'sabel',
'sabra',
'sacra',
'safer',
'safes',
'sagen',
'sajet',
'salam',
'saldi',
'saldo',
'salet',
'salie',
'salmi',
'salon',
'salsa',
'salto',
'salut',
'salvo',
'samba',
'sambo',
'samen',
'saoto',
'sapje',
'sappe',
'sarde',
'sarin',
'saste',
'satan',
'sater',
'sauna',
'saust',
'saven',
'savet',
'saxen',
'scala',
'scalp',
'scans',
'scant',
'scart',
'scene',
'schab',
'schaf',
'schal',
'schap',
'schar',
'schat',
'schee',
'scheg',
'schei',
'schel',
'schep',
'schik',
'schil',
'schim',
'schip',
'schob',
'schok',
'schol',
'schop',
'schor',
'schot',
'schro',
'schub',
'schud',
'schul',
'schup',
'schut',
'schuw',
'scifi',
'scone',
'scoop',
'scoor',
'scope',
'score',
'scout',
'scrip',
'scrol',
'scrub',
'scrum',
'scuba',
'sealt',
'secce',
'secco',
'sedan',
'seder',
'sedum',
'seint',
'seist',
'sekse',
'sekst',
'sekte',
'sepia',
'sepot',
'seraf',
'sereh',
'serge',
'serie',
'serre',
'serum',
'serve',
'servo',
'sesam',
'setje',
'sfeer',
'sfinx',
'shake',
'shaky',
'shawl',
'sheet',
'shell',
'shift',
'shirt',
'shock',
'shogi',
'shops',
'shopt',
'short',
'shots',
'shows',
'showt',
'showy',
'shoyu',
'shunt',
'sibbe',
'sicav',
'siena',
'siert',
'sifon',
'sigma',
'signa',
'sikhs',
'sikje',
'silex',
'simde',
'sinas',
'sinds',
'sinjo',
'sinus',
'sippe',
'sipst',
'sirih',
'sisal',
'sissy',
'siste',
'sitar',
'sites',
'sjaak',
'sjaal',
'sjahs',
'sjako',
'sjans',
'sjapt',
'sjees',
'sjeik',
'sjerp',
'sjiek',
'sjilp',
'sjirk',
'sjirp',
'sjoel',
'sjokt',
'sjort',
'sjouw',
'sjwas',
'skaat',
'skald',
'skate',
'skeet',
'skiet',
'skiff',
'skimt',
'skins',
'skunk',
'slaaf',
'slaag',
'slaak',
'slaan',
'slaap',
'slaat',
'slams',
'slang',
'slank',
'slapt',
'slash',
'slede',
'sleed',
'sleep',
'sleet',
'slemp',
'slenk',
'sleuf',
'sleur',
'slibt',
'slice',
'slick',
'sliep',
'slier',
'sliet',
'slijk',
'slijm',
'slijp',
'slijt',
'slikt',
'slims',
'slink',
'slips',
'slipt',
'slist',
'sloef',
'sloeg',
'sloep',
'sloft',
'slokt',
'slome',
'slomp',
'slonk',
'slons',
'sloof',
'slooi',
'slook',
'sloom',
'sloop',
'sloor',
'sloot',
'slorp',
'slots',
'sluif',
'sluik',
'sluip',
'sluis',
'sluit',
'slump',
'slums',
'slurf',
'slurp',
'sluwe',
'smaad',
'smaak',
'smaal',
'smack',
'smakt',
'small',
'smalt',
'smart',
'smash',
'smeed',
'smeek',
'smeer',
'smeet',
'smelt',
'smeue',
'smeul',
'smijt',
'smith',
'smoel',
'smoes',
'smokt',
'smolt',
'smook',
'smoor',
'smots',
'smous',
'smout',
'smukt',
'smult',
'smurf',
'snaai',
'snaak',
'snaar',
'snack',
'snakt',
'snapt',
'snars',
'snauw',
'snede',
'sneed',
'sneef',
'sneep',
'sneer',
'snees',
'snelt',
'snerk',
'snerp',
'snert',
'sneue',
'snibt',
'snijd',
'snikt',
'snobs',
'snode',
'snoef',
'snoei',
'snoek',
'snoep',
'snoer',
'snoes',
'snoet',
'snoge',
'snokt',
'snood',
'snoof',
'snoot',
'snork',
'snort',
'snuft',
'snuif',
'snuit',
'snurk',
'soaps',
'sober',
'soefi',
'soeks',
'soeps',
'soera',
'soesa',
'soest',
'softe',
'softs',
'sokje',
'solde',
'solen',
'solex',
'somde',
'somma',
'sonar',
'sonde',
'songs',
'soort',
'sopje',
'sopte',
'sores',
'sorry',
'sotto',
'sound',
'sozen',
'spaad',
'spaak',
'spaan',
'spaar',
'spaat',
'spade',
'spahi',
'spalk',
'spang',
'spant',
'spast',
'spats',
'speed',
'speek',
'speel',
'speen',
'speer',
'speet',
'spekt',
'speld',
'spelt',
'spert',
'speur',
'spied',
'spiek',
'spier',
'spies',
'spijk',
'spijl',
'spijs',
'spijt',
'spike',
'spilt',
'spina',
'spins',
'spint',
'spion',
'spits',
'split',
'spoed',
'spoel',
'spong',
'spons',
'spoog',
'spook',
'spoor',
'spoot',
'spore',
'sport',
'spots',
'spouw',
'sprak',
'spray',
'sprei',
'sprik',
'sprot',
'spruw',
'spuit',
'spurt',
'spuug',
'spuwt',
'squaw',
'staaf',
'staag',
'staak',
'staal',
'staan',
'staar',
'staat',
'stade',
'stads',
'stage',
'stalk',
'stalt',
'stamp',
'stamt',
'stand',
'stang',
'stank',
'stans',
'stapt',
'stars',
'start',
'state',
'statu',
'steak',
'stede',
'steef',
'steeg',
'steek',
'steel',
'steen',
'stege',
'steil',
'stekt',
'stele',
'stelp',
'stelt',
'stemt',
'steng',
'steno',
'stens',
'stent',
'steps',
'stept',
'sterf',
'sterk',
'stern',
'steun',
'steur',
'stick',
'stiel',
'stier',
'stiet',
'stift',
'stijf',
'stijg',
'stijl',
'stikt',
'stilt',
'stink',
'stins',
'stint',
'stipt',
'stock',
'stoei',
'stoel',
'stoep',
'stoer',
'stoet',
'stoft',
'stokt',
'stola',
'stolp',
'stolt',
'stoma',
'stomp',
'stoms',
'stond',
'stonk',
'stoof',
'stook',
'stool',
'stoom',
'stoop',
'stoor',
'stoot',
'stops',
'stopt',
'store',
'storm',
'stort',
'story',
'stout',
'stouw',
'straf',
'strak',
'stram',
'stras',
'strek',
'strem',
'stres',
'strik',
'strip',
'strop',
'stros',
'strot',
'study',
'stuff',
'stuft',
'stuif',
'stuik',
'stuip',
'stuit',
'stuks',
'stulp',
'stunt',
'stuur',
'stuwt',
'style',
'stylo',
'suave',
'suffe',
'sufst',
'sufte',
'suilt',
'suist',
'suite',
'sujet',
'sulde',
'sulky',
'sumak',
'summa',
'super',
'surah',
'surft',
'sushi',
'suste',
'swami',
'swaps',
'swing',
'swipi',
'sylfe',
'syrah',
'taaie',
'taakt',
'taalt',
'taant',
'taart',
'taats',
'tabak',
'tabee',
'tabel',
'tabla',
'taboe',
'tafel',
'tafia',
'tahin',
'tahoe',
'taiga',
'takel',
'taken',
'takje',
'takte',
'talen',
'talib',
'talie',
'talig',
'talmt',
'talon',
'talud',
'tamme',
'tampt',
'tamst',
'tandt',
'tanen',
'tanga',
'tange',
'tango',
'tanig',
'tanks',
'tankt',
'tante',
'tapas',
'tapen',
'tapes',
'tapet',
'tapir',
'tapse',
'tapte',
'tarde',
'tarnt',
'tarok',
'tarot',
'tarra',
'tarwe',
'taser',
'tasje',
'taste',
'tater',
'taupe',
'taxol',
'taxon',
'taxus',
'teams',
'teddy',
'teder',
'teelt',
'teems',
'teemt',
'teers',
'teert',
'teeuw',
'tegel',
'tegen',
'teint',
'teken',
'tekst',
'telco',
'telde',
'telen',
'teler',
'telex',
'teloh',
'temde',
'temen',
'temer',
'temet',
'tempo',
'tenen',
'tenge',
'tenor',
'tenue',
'tepel',
'teren',
'tergt',
'terig',
'terne',
'terra',
'terts',
'terug',
'tesla',
'tests',
'tetra',
'tetse',
'tetst',
'teute',
'teven',
'tezen',
'thans',
'thees',
'theet',
'thema',
'these',
'thuis',
'thuja',
'thyrs',
'tiaar',
'tiara',
'tibbe',
'ticje',
'tiend',
'tiens',
'tiert',
'tijde',
'tijds',
'tijen',
'tijgt',
'tikje',
'tikte',
'tilde',
'timen',
'timer',
'timet',
'tinas',
'tinkt',
'tinne',
'tinto',
'tipje',
'tipse',
'tipsy',
'tipte',
'tiran',
'tiras',
'titan',
'titel',
'titer',
'tjalk',
'tjerk',
'tjilp',
'tjirp',
'tjokt',
'toast',
'tobbe',
'tobde',
'tocht',
'toddy',
'toean',
'toeft',
'toega',
'toert',
'toets',
'toffe',
'tofoe',
'tofst',
'togen',
'toges',
'token',
'tokte',
'tolde',
'tolkt',
'tombe',
'tomen',
'tommy',
'tonde',
'tonen',
'toner',
'tonic',
'tonus',
'tooit',
'tools',
'toomt',
'toont',
'toorn',
'toost',
'topas',
'topic',
'topje',
'topoi',
'topos',
'topse',
'topte',
'toque',
'toren',
'tornt',
'toros',
'torso',
'torst',
'torus',
'toste',
'tosti',
'totem',
'toten',
'totok',
'touch',
'tours',
'tourt',
'touwt',
'tover',
'traaf',
'traag',
'traan',
'track',
'tract',
'trafo',
'trage',
'train',
'tramp',
'trams',
'tramt',
'trans',
'trant',
'trapt',
'trash',
'trast',
'trays',
'trede',
'treed',
'treef',
'treek',
'treem',
'trees',
'treft',
'treil',
'trein',
'trekt',
'trema',
'trend',
'trens',
'treur',
'trial',
'trias',
'trick',
'trien',
'triep',
'trijp',
'trijs',
'trike',
'trilt',
'trimt',
'trips',
'tript',
'trits',
'troef',
'troel',
'troep',
'tromp',
'tromt',
'tronk',
'troon',
'troop',
'trost',
'trots',
'trouw',
'truck',
'trucs',
'trust',
'tsaar',
'tsuba',
'tuben',
'tubes',
'tucht',
'tufte',
'tuide',
'tuien',
'tuier',
'tuigt',
'tuint',
'tuist',
'tukje',
'tukke',
'tukst',
'tukte',
'tulen',
'tumor',
'tunen',
'tuner',
'tunes',
'turbo',
'turen',
'turft',
'turkt',
'turnt',
'tuten',
'tutje',
'tutor',
'tutte',
'tutti',
'tuurt',
'tweak',
'tweed',
'tweet',
'twens',
'twijg',
'twijn',
'twint',
'twist',
'tyfus',
'typen',
'types',
'typte',
'uiers',
'uiige',
'uilen',
'uilig',
'uitat',
'uiten',
'uitga',
'uitje',
'uitte',
'uiver',
'ukjes',
'ukken',
'ukkie',
'ulaan',
'ulcus',
'ultra',
'unica',
'unief',
'uniek',
'unies',
'units',
'unzip',
'uppen',
'upper',
'uppie',
'uraan',
'urban',
'ureum',
'urine',
'urmde',
'urmen',
'urnen',
'uwent',
'uzelf',
'vaags',
'vaagt',
'vaalt',
'vaars',
'vaart',
'vaats',
'vacht',
'vacua',
'vadem',
'vader',
'vagen',
'vager',
'vaker',
'vakje',
'valer',
'valig',
'valse',
'valst',
'vamen',
'vamps',
'vanaf',
'vanen',
'vangt',
'vanop',
'varen',
'varia',
'vaste',
'vaten',
'vatte',
'vazal',
'vazen',
'vecht',
'vedel',
'veder',
'veegt',
'veelt',
'veert',
'veest',
'vegen',
'veger',
'veile',
'veils',
'veilt',
'veine',
'veins',
'velde',
'velen',
'veler',
'velum',
'vemen',
'venae',
'vendu',
'venen',
'venig',
'vents',
'veraf',
'veras',
'verba',
'veren',
'verft',
'verga',
'vergt',
'verre',
'versa',
'verse',
'verso',
'verst',
'verte',
'verve',
'veste',
'veten',
'veter',
'vetes',
'vetst',
'vette',
'vezel',
'vezen',
'video',
'vides',
'viert',
'viest',
'vieux',
'vieve',
'views',
'vieze',
'vijlt',
'vijst',
'vilde',
'villa',
'vindt',
'vinkt',
'vinyl',
'viola',
'viool',
'vipje',
'viral',
'virus',
'visie',
'visje',
'vista',
'viste',
'visum',
'vitae',
'vitse',
'vitte',
'vivat',
'vlaag',
'vlaai',
'vlaak',
'vlade',
'vlagt',
'vlakt',
'vlamt',
'vlast',
'vlees',
'vleet',
'vleit',
'vlekt',
'vlerk',
'vleug',
'vleze',
'vlied',
'vlieg',
'vliem',
'vlier',
'vlies',
'vliet',
'vlijm',
'vlijt',
'vloed',
'vloei',
'vloek',
'vloer',
'vlogs',
'vlokt',
'vlood',
'vloog',
'vlooi',
'vloot',
'vlouw',
'vocal',
'vocht',
'vodde',
'vodje',
'voedt',
'voege',
'voegt',
'voelt',
'voert',
'vogel',
'voile',
'volde',
'volgt',
'volks',
'volle',
'volop',
'volst',
'volta',
'volte',
'volts',
'vonkt',
'voogd',
'voois',
'voord',
'voorn',
'voort',
'voost',
'voren',
'vorig',
'vormt',
'vorst',
'votum',
'voute',
'vouwt',
'vozen',
'vozer',
'vraag',
'vraat',
'vrank',
'vrede',
'vrees',
'vreet',
'vreze',
'vries',
'vrije',
'vrijt',
'vrind',
'vroed',
'vroeg',
'vroem',
'vrome',
'vroom',
'vroon',
'vroor',
'vrouw',
'vucht',
'vuige',
'vuile',
'vuist',
'vulde',
'vulgo',
'vulva',
'vunst',
'vunze',
'vuren',
'vurig',
'vutte',
'vuurt',
'waadt',
'waagt',
'waait',
'waaks',
'waakt',
'waant',
'waard',
'waars',
'waart',
'wacht',
'waden',
'wafel',
'wagen',
'wagon',
'waken',
'waker',
'wakes',
'wakke',
'wakst',
'walde',
'walen',
'walgt',
'walkt',
'walmt',
'walst',
'wamde',
'wamen',
'wande',
'wanen',
'wanne',
'wants',
'wapen',
'warde',
'waren',
'warme',
'warms',
'warmt',
'wasco',
'wasem',
'washi',
'wasje',
'waste',
'water',
'watje',
'watts',
'wauwe',
'waven',
'waves',
'waxen',
'wazen',
'wazig',
'webbe',
'weber',
'weckt',
'wedde',
'weden',
'weder',
'weeft',
'weegs',
'weegt',
'weeks',
'weekt',
'weent',
'weeps',
'weerd',
'weert',
'weest',
'wegel',
'wegen',
'weger',
'wegga',
'wegge',
'wegje',
'weide',
'weids',
'weidt',
'weien',
'weken',
'weker',
'wekte',
'welde',
'welen',
'welft',
'welig',
'welke',
'welks',
'welkt',
'welnu',
'wemel',
'wende',
'wendt',
'wenen',
'wener',
'wenkt',
'wenst',
'wepel',
'weren',
'werft',
'werkt',
'werpt',
'werst',
'wessi',
'weten',
'wetje',
'wette',
'weven',
'wever',
'wezel',
'wezen',
'whist',
'white',
'wicca',
'wicht',
'wiedt',
'wiegt',
'wiekt',
'wielt',
'wieme',
'wiens',
'wierf',
'wierp',
'wiers',
'wigge',
'wigje',
'wijde',
'wijds',
'wijdt',
'wijkt',
'wijle',
'wijlt',
'wijst',
'wijze',
'wikke',
'wikte',
'wilde',
'wilds',
'wille',
'winch',
'winde',
'windt',
'winst',
'winti',
'wipte',
'wisse',
'wiste',
'witje',
'witst',
'witte',
'wodka',
'woede',
'woedt',
'woelt',
'woerd',
'woest',
'wogen',
'wokte',
'wonde',
'wondt',
'wonen',
'woont',
'woord',
'wordt',
'worgt',
'worst',
'wraak',
'wrake',
'wrang',
'wraps',
'wrede',
'wreed',
'wreef',
'wreek',
'wrens',
'wrijf',
'wrikt',
'wring',
'wroeg',
'wroet',
'wrokt',
'wrong',
'wufte',
'wuien',
'wuift',
'wulps',
'wurgt',
'wurmt',
'xenon',
'xeres',
'xerox',
'yanks',
'yards',
'yelde',
'yells',
'yield',
'yuans',
'yucca',
'zaagt',
'zaait',
'zaaks',
'zacht',
'zadel',
'zaden',
'zagen',
'zager',
'zaken',
'zakje',
'zakte',
'zalen',
'zalft',
'zalig',
'zambo',
'zamel',
'zandt',
'zanik',
'zapte',
'zaten',
'zatst',
'zatte',
'zavel',
'zeboe',
'zebra',
'zeden',
'zedig',
'zeeft',
'zeelt',
'zeemt',
'zeept',
'zegde',
'zegel',
'zegen',
'zeges',
'zegge',
'zegje',
'zeide',
'zeikt',
'zeilt',
'zeken',
'zeker',
'zelen',
'zelfs',
'zelve',
'zemel',
'zemen',
'zemig',
'zendt',
'zenen',
'zengt',
'zenig',
'zenit',
'zenuw',
'zepen',
'zeper',
'zepig',
'zerpe',
'zesde',
'zesje',
'zeste',
'zetel',
'zetje',
'zette',
'zeult',
'zeurt',
'zeven',
'zever',
'zicht',
'ziedt',
'zieke',
'ziekt',
'ziele',
'ziend',
'ziens',
'ziezo',
'zijde',
'zijgt',
'zijig',
'zijnd',
'zijne',
'zijns',
'zilte',
'zinde',
'zingt',
'zinkt',
'zipte',
'zitje',
'zloty',
'zoals',
'zocht',
'zodat',
'zoden',
'zodra',
'zoeft',
'zoekt',
'zoele',
'zoemt',
'zoent',
'zoete',
'zoets',
'zogen',
'zolen',
'zomen',
'zomer',
'zomin',
'zonde',
'zonen',
'zones',
'zonet',
'zoogt',
'zoolt',
'zoomt',
'zoons',
'zopas',
'zopen',
'zopie',
'zorgt',
'zotje',
'zotst',
'zotte',
'zoude',
'zoudt',
'zoute',
'zover',
'zowat',
'zowel',
'zucht',
'zuigt',
'zuipt',
'zulke',
'zulks',
'zulle',
'zulte',
'zumba',
'zuren',
'zurig',
'zusje',
'zuurt',
'zwaai',
'zwaan',
'zwaar',
'zwade',
'zwakt',
'zwalk',
'zwalp',
'zwamp',
'zwamt',
'zwang',
'zwans',
'zware',
'zwart',
'zweed',
'zweef',
'zweeg',
'zweel',
'zweem',
'zweep',
'zweer',
'zweet',
'zwelg',
'zwelt',
'zwemt',
'zwenk',
'zwerf',
'zwerk',
'zwerm',
'zwets',
'zwiep',
'zwier',
'zwijg',
'zwijm',
'zwijn',
'zwikt',
'zwilk',
'zwing',
'zwoeg',
'zwoel',
'zwoer',
'zwolg',
'zwoor', 'lingo'],
Ta = 'present',
Ia = 'correct',
Ca = 'absent';
var Ma = {
unknown: 0,
absent: 1,
present: 2,
correct: 3
};
function Oa(e, a) {
var s = {
};
return e.forEach((function (e, t) {
if (a[t]) for (var o = 0; o < e.length; o++) {
var r = e[o],
n = a[t][o],
i = s[r] || 'unknown';
Ma[n] > Ma[i] && (s[r] = n)
}
})),
s
}
var Ra = new Date(2021, 5, 19, 0, 0, 0, 0);
function $a(e, a) {
var s = new Date(e),
t = new Date(a).setHours(0, 0, 0, 0) - s.setHours(0, 0, 0, 0);
return Math.floor(t / 86400000)
}
function Pa(e) {
var a,
s = Na(e);
return a = s % Aa.length,
Aa[a]
}
function Na(e) {
return $a(Ra, e)
}
var Ha,
Ga = 'abcdefghijklmnopqrstuvwxyz';
function Da() {
dataLayer.push(arguments)
}
window.dataLayer = window.dataLayer || [
],
Da('js', new Date);
Da('config', 'G-2SSGMHY3NP', {
app_version: null === (Ha = window.wordle) || void 0 === Ha ? void 0 : Ha.hash,
debug_mode: !1
});
var Ba = [
].concat(g(Ga.split('').slice(13)), g(Ga.split('').slice(0, 13)));
function Fa(e) {
for (var a = '', s = 0; s < e.length; s++) {
var t = Ga.indexOf(e[s]);
a += t >= 0 ? Ba[t] : '_'
}
return a
}
var Wa = 'statistics',
Ya = 'fail',
Ja = {
currentStreak: 0,
maxStreak: 0,
guesses: r({
1: 0,
2: 0,
3: 0,
4: 0,
5: 0,
6: 0
}, Ya, 0),
winPercentage: 0,
gamesPlayed: 0,
gamesWon: 0,
averageGuesses: 0
};
function Ua() {
var e = window.localStorage.getItem(Wa) || JSON.stringify(Ja);
return JSON.parse(e)
}
function Xa(e) {
var a = e.isWin,
s = e.isStreak,
t = e.numGuesses,
o = Ua();
a ? (o.guesses[t] += 1, s ? o.currentStreak += 1 : o.currentStreak = 1) : (o.currentStreak = 0, o.guesses.fail += 1),
o.maxStreak = Math.max(o.currentStreak, o.maxStreak),
o.gamesPlayed += 1,
o.gamesWon += a ? 1 : 0,
o.winPercentage = Math.round(o.gamesWon / o.gamesPlayed * 100),
o.averageGuesses = Math.round(Object.entries(o.guesses).reduce((function (e, a) {
var s = y(a, 2),
t = s[0],
o = s[1];
return t !== Ya ? e += t * o : e
}), 0) / o.gamesWon),
function (e) {
window.localStorage.setItem(Wa, JSON.stringify(e))
}(o)
}
var Ka = document.createElement('template');
Ka.innerHTML = '\n <style>\n .toaster {\n position: absolute;\n top: 10%;\n left: 50%;\n transform: translate(-50%, 0);\n pointer-events: none;\n width: fit-content;\n }\n #game-toaster {\n z-index: '.concat(1000, ';\n }\n #system-toaster {\n z-index: ').concat(4000, ';\n }\n\n #game {\n width: 100%;\n max-width: var(--game-max-width);\n margin: 0 auto;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n height: var(--header-height);\n color: var(--color-tone-1);\n border-bottom: 1px solid var(--color-tone-4);\n }\n header .title {\n font-weight: 700;\n font-size: 36px;\n letter-spacing: 0.2rem;\n text-transform: uppercase;\n text-align: center;\n }\n\n #board-container {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-grow: 1;\n overflow: hidden;\n }\n #board {\n display: grid;\n grid-template-rows: repeat(6, 1fr);\n grid-gap: 5px;\n padding:10px;\n box-sizing: border-box;\n }\n button.icon {\n background: none;\n border: none;\n cursor: pointer;\n }\n #debug-tools {\n position: absolute;\n bottom: 0;\n }\n\n </style>\n <game-theme-manager>\n <div id="game">\n <header>\n <div class="menu">\n <button id="help" class="icon">\n <game-icon icon="help"></game-icon>\n </button>\n </div>\n <div class="title">\n WOORDLE\n </div>\n <div class="menu">\n <button id="settings" class="icon">\n <game-icon icon="settings"></game-icon>\n </button>\n </div>\n </header>\n <div id="board-container">\n <div id="board"></div>\n </div>\n <game-keyboard></game-keyboard>\n <game-modal></game-modal>\n <game-page></game-page>\n <div class="toaster" id="game-toaster"></div>\n <div class="toaster" id="system-toaster"></div>\n </div>\n </game-theme-manager>\n <div id="debug-tools"></div>\n');
var Va = document.createElement('template');
Va.innerHTML = '\n<button id="reveal">reveal</button>\n<button id="shake">shake</button>\n<button id="bounce">bounce</button>\n<button id="toast">toast</button>\n<button id="modal">modal</button>\n';
var Qa = 'IN_PROGRESS',
Za = 'WIN',
es = 'FAIL',
as = [
'Genius',
'Magnificent',
'Impressive',
'Splendid',
'Great',
'Nice'
],
ss = function (e) {
n(t, e);
var a = h(t);
function t() {
var e;
s(this, t),
r(p(e = a.call(this)), 'tileIndex', 0),
r(p(e), 'rowIndex', 0),
r(p(e), 'solution', void 0),
r(p(e), 'boardState', void 0),
r(p(e), 'evaluations', void 0),
r(p(e), 'canInput', !0),
r(p(e), 'gameStatus', Qa),
r(p(e), 'letterEvaluations', {
}),
r(p(e), '$board', void 0),
r(p(e), '$keyboard', void 0),
r(p(e), '$game', void 0),
r(p(e), 'today', void 0),
r(p(e), 'lastPlayedTs', void 0),
r(p(e), 'lastCompletedTs', void 0),
r(p(e), 'hardMode', void 0),
r(p(e), 'dayOffset', void 0),
e.attachShadow({
mode: 'open'
}),
e.today = new Date;
var o = za();
return e.lastPlayedTs = o.lastPlayedTs,
!e.lastPlayedTs || $a(new Date(e.lastPlayedTs), e.today) >= 1 ? (e.boardState = new Array(6).fill(''), e.evaluations = new Array(6).fill(null), e.solution = Pa(e.today), e.dayOffset = Na(e.today), e.lastCompletedTs = o.lastCompletedTs, e.hardMode = o.hardMode, e.restoringFromLocalStorage = !1, ja({
rowIndex: e.rowIndex,
boardState: e.boardState,
evaluations: e.evaluations,
solution: e.solution,
gameStatus: e.gameStatus
}), Da('event', 'level_start', {
level_name: Fa(e.solution)
})) : (e.boardState = o.boardState, e.evaluations = o.evaluations, e.rowIndex = o.rowIndex, e.solution = o.solution, e.dayOffset = Na(e.today), e.letterEvaluations = Oa(e.boardState, e.evaluations), e.gameStatus = o.gameStatus, e.lastCompletedTs = o.lastCompletedTs, e.hardMode = o.hardMode, e.gameStatus !== Qa && (e.canInput = !1), e.restoringFromLocalStorage = !0),
e
}
return o(t, [
{
key: 'evaluateRow',
value: function () {
if (5 === this.tileIndex && !(this.rowIndex >= 6)) {
var e,
a = this.$board.querySelectorAll('game-row') [this.rowIndex],
s = this.boardState[this.rowIndex];
if (e = s, !La.includes(e) && !Aa.includes(e)) return a.setAttribute('invalid', ''),
void this.addToast('Geen bekend woord');
if (this.hardMode) {
var t = function (e, a, s) {
if (!e || !a || !s) return {
validGuess: !0
};
for (var t = 0; t < s.length; t++) if (s[t] === Ia && e[t] !== a[t]) return {
validGuess: !1,
errorMessage: ''.concat((o = t + 1, r = void 0, n = void 0, r = [
'th',
'st',
'nd',
'rd'
], n = o % 100, o + (r[(n - 20) % 10] || r[n] || r[0])), ' letter moet dit zijn: ').concat(a[t].toUpperCase())
};
for (var o, r, n, i = {
}, l = 0; l < s.length; l++) [Ia,
Ta].includes(s[l]) && (i[a[l]] ? i[a[l]] += 1 : i[a[l]] = 1);
var d = e.split('').reduce((function (e, a) {
return e[a] ? e[a] += 1 : e[a] = 1,
e
}), {
});
for (var u in i) if ((d[u] || 0) < i[u]) return {
validGuess: !1,
errorMessage: 'Gok moet dit bevatten: '.concat(u.toUpperCase())
};
return {
validGuess: !0
}
}(s, this.boardState[this.rowIndex - 1], this.evaluations[this.rowIndex - 1]),
o = t.validGuess,
r = t.errorMessage;
if (!o) return a.setAttribute('invalid', ''),
void this.addToast(r || 'Dit kan niet in hard mode')
}
var n = function (e, a) {
for (var s = Array(a.length).fill(Ca), t = Array(a.length).fill(!0), o = Array(a.length).fill(!0), r = 0; r < e.length; r++) e[r] === a[r] && o[r] && (s[r] = Ia, t[r] = !1, o[r] = !1);
for (var n = 0; n < e.length; n++) {
var i = e[n];
if (t[n]) for (var l = 0; l < a.length; l++) {
var d = a[l];
if (o[l] && i === d) {
s[n] = Ta,
o[l] = !1;
break
}
}
}
return s
}(s, this.solution);
this.evaluations[this.rowIndex] = n,
this.letterEvaluations = Oa(this.boardState, this.evaluations),
a.evaluation = this.evaluations[this.rowIndex],
this.rowIndex += 1;
var i = this.rowIndex >= 6,
l = n.every((function (e) {
return 'correct' === e
}));
if (i || l) Xa({
isWin: l,
isStreak: !!this.lastCompletedTs && 1 === $a(new Date(this.lastCompletedTs), new Date),
numGuesses: this.rowIndex
}),
ja({
lastCompletedTs: Date.now()
}),
this.gameStatus = l ? Za : es,
Da('event', 'level_end', {
level_name: Fa(this.solution),
num_guesses: this.rowIndex,
success: l
});
this.tileIndex = 0,
this.canInput = !1,
ja({
rowIndex: this.rowIndex,
boardState: this.boardState,
evaluations: this.evaluations,
solution: this.solution,
gameStatus: this.gameStatus,
lastPlayedTs: Date.now()
})
}
}
},
{
key: 'addLetter',
value: function (e) {
this.gameStatus === Qa && (this.canInput && (this.tileIndex >= 5 || (this.boardState[this.rowIndex] += e, this.$board.querySelectorAll('game-row') [this.rowIndex].setAttribute('letters', this.boardState[this.rowIndex]), this.tileIndex += 1)))
}
},
{
key: 'removeLetter',
value: function () {
if (this.gameStatus === Qa && this.canInput && !(this.tileIndex <= 0)) {
this.boardState[this.rowIndex] = this.boardState[this.rowIndex].slice(0, this.boardState[this.rowIndex].length - 1);
var e = this.$board.querySelectorAll('game-row') [this.rowIndex];
this.boardState[this.rowIndex] ? e.setAttribute('letters', this.boardState[this.rowIndex]) : e.removeAttribute('letters'),
e.removeAttribute('invalid'),
this.tileIndex -= 1
}
}
},
{
key: 'submitGuess',
value: function () {
if (this.gameStatus === Qa && this.canInput) {
if (5 !== this.tileIndex) return this.$board.querySelectorAll('game-row') [this.rowIndex].setAttribute('invalid', ''),
void this.addToast('Not enough letters');
this.evaluateRow()
}
}
},
{
key: 'addToast',
value: function (e, a) {
var s = arguments.length > 2 && void 0 !== arguments[2] && arguments[2],
t = document.createElement('game-toast');
t.setAttribute('text', e),
a && t.setAttribute('duration', a),
s ? this.shadowRoot.querySelector('#system-toaster').prepend(t) : this.shadowRoot.querySelector('#game-toaster').prepend(t)
}
},
{
key: 'sizeBoard',
value: function () {
var e = this.shadowRoot.querySelector('#board-container'),
a = Math.min(Math.floor(e.clientHeight * (5 / 6)), 350),
s = 6 * Math.floor(a / 5);
this.$board.style.width = ''.concat(a, 'px'),
this.$board.style.height = ''.concat(s, 'px')
}
},
{
key: 'showStatsModal',
value: function () {
var e = this.$game.querySelector('game-modal'),
a = document.createElement('game-stats');
this.gameStatus === Za && this.rowIndex <= 6 && a.setAttribute('highlight-guess', this.rowIndex),
a.gameApp = this,
e.appendChild(a),
e.setAttribute('open', '')
}
},
{
key: 'showHelpModal',
value: function () {
var e = this.$game.querySelector('game-modal');
e.appendChild(document.createElement('game-help')),
e.setAttribute('open', '')
}
},
{
key: 'connectedCallback',
value: function () {
var e = this;
this.shadowRoot.appendChild(Ka.content.cloneNode(!0)),
this.$game = this.shadowRoot.querySelector('#game'),
this.$board = this.shadowRoot.querySelector('#board'),
this.$keyboard = this.shadowRoot.querySelector('game-keyboard'),
this.sizeBoard(),
this.lastPlayedTs || setTimeout((function () {
return e.showHelpModal()
}), 100);
for (var a = 0; a < 6; a++) {
var s = document.createElement('game-row');
s.setAttribute('letters', this.boardState[a]),
s.setAttribute('length', 5),
this.evaluations[a] && (s.evaluation = this.evaluations[a]),
this.$board.appendChild(s)
}
this.$game.addEventListener('game-key-press', (function (a) {
var s = a.detail.key;
'←' === s || 'Backspace' === s ? e.removeLetter() : '↵' === s || 'Enter' === s ? e.submitGuess() : Ga.includes(s.toLowerCase()) && e.addLetter(s.toLowerCase())
})),
this.$game.addEventListener('game-last-tile-revealed-in-row', (function (a) {
e.$keyboard.letterEvaluations = e.letterEvaluations,
e.rowIndex < 6 && (e.canInput = !0);
var s = e.$board.querySelectorAll('game-row') [e.rowIndex - 1];
(a.path || a.composedPath && a.composedPath()).includes(s) && ([Za,
es].includes(e.gameStatus) && (e.restoringFromLocalStorage ? e.showStatsModal() : (e.gameStatus === Za && (s.setAttribute('win', ''), e.addToast(as[e.rowIndex - 1], 2000)), e.gameStatus === es && e.addToast(e.solution.toUpperCase(), 1 / 0), setTimeout((function () {
e.showStatsModal()
}), 2500))), e.restoringFromLocalStorage = !1)
})),
this.shadowRoot.addEventListener('game-setting-change', (function (a) {
var s = a.detail,
t = s.name,
o = s.checked,
r = s.disabled;
switch (t) {
case 'hard-mode':
return void (r ? e.addToast('Hard mode can only be enabled at the start of a round', 1500, !0) : (e.hardMode = o, ja({
hardMode: o
})))
}
})),
this.shadowRoot.getElementById('settings').addEventListener('click', (function (a) {
var s = e.$game.querySelector('game-page'),
t = document.createTextNode('Settings');
s.appendChild(t);
var o = document.createElement('game-settings');
o.setAttribute('slot', 'content'),
o.gameApp = e,
s.appendChild(o),
s.setAttribute('open', '')
})),
this.shadowRoot.getElementById('help').addEventListener('click', (function (a) {
var s = e.$game.querySelector('game-page'),
t = document.createTextNode('Instructies');
s.appendChild(t);
var o = document.createElement('game-help');
o.setAttribute('page', ''),
o.setAttribute('slot', 'content'),
s.appendChild(o),
s.setAttribute('open', '')
})),
window.addEventListener('resize', this.sizeBoard.bind(this))
}
},
{
key: 'disconnectedCallback',
value: function () {
}
},
{
key: 'debugTools',
value: function () {
var e = this;
this.shadowRoot.getElementById('debug-tools').appendChild(Va.content.cloneNode(!0)),
this.shadowRoot.getElementById('toast').addEventListener('click', (function (a) {
e.addToast('hello world')
})),
this.shadowRoot.getElementById('modal').addEventListener('click', (function (a) {
var s = e.$game.querySelector('game-modal');
s.textContent = 'hello plz',
s.setAttribute('open', '')
})),
this.shadowRoot.getElementById('reveal').addEventListener('click', (function () {
e.evaluateRow()
})),
this.shadowRoot.getElementById('shake').addEventListener('click', (function () {
e.$board.querySelectorAll('game-row') [e.rowIndex].setAttribute('invalid', '')
})),
this.shadowRoot.getElementById('bounce').addEventListener('click', (function () {
var a = e.$board.querySelectorAll('game-row') [e.rowIndex - 1];
'' === a.getAttribute('win') ? a.removeAttribute('win') : a.setAttribute('win', '')
}))
}
}
]),
t
}(c(HTMLElement));
customElements.define('game-app', ss);
var ts = document.createElement('template');
ts.innerHTML = '\n <style>\n .overlay {\n display: none;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n justify-content: center;\n align-items: center;\n background-color: var(--opacity-50);\n z-index: '.concat(3000, ';\n }\n\n :host([open]) .overlay {\n display: flex;\n }\n\n .content {\n position: relative;\n border-radius: 8px;\n border: 1px solid var(--color-tone-6);\n background-color: var(--modal-content-bg);\n color: var(--color-tone-1);\n box-shadow: 0 4px 23px 0 rgba(0, 0, 0, 0.2);\n width: 90%;\n max-height: 90%;\n overflow-y: auto;\n animation: SlideIn 200ms;\n max-width: var(--game-max-width);\n padding: 16px;\n box-sizing: border-box;\n }\n\n .content.closing {\n animation: SlideOut 200ms;\n }\n\n .close-icon {\n width: 24px;\n height: 24px;\n position: absolute;\n top: 16px;\n right: 16px;\n }\n\n game-icon {\n position: fixed;\n user-select: none;\n cursor: pointer;\n }\n\n @keyframes SlideIn {\n 0% {\n transform: translateY(30px);\n opacity: 0;\n }\n 100% {\n transform: translateY(0px);\n opacity: 1;\n }\n }\n @keyframes SlideOut {\n 0% {\n transform: translateY(0px);\n opacity: 1;\n }\n 90% {\n opacity: 0;\n }\n 100% {\n opacity: 0;\n transform: translateY(60px);\n }\n }\n </style>\n <div class="overlay">\n <div class="content">\n <slot></slot>\n <div class="close-icon">\n <game-icon icon="close"></game-icon>\n </div>\n </div>\n </div>\n');
var os = function (e) {
n(t, e);
var a = h(t);
function t() {
var e;
return s(this, t),
(e = a.call(this)).attachShadow({
mode: 'open'
}),
e
}
return o(t, [
{
key: 'connectedCallback',
value: function () {
var e = this;
this.shadowRoot.appendChild(ts.content.cloneNode(!0)),
this.addEventListener('click', (function (a) {
e.shadowRoot.querySelector('.content').classList.add('closing')
})),
this.shadowRoot.addEventListener('animationend', (function (a) {
'SlideOut' === a.animationName && (e.shadowRoot.querySelector('.content').classList.remove('closing'), e.removeChild(e.firstChild), e.removeAttribute('open'))
}))
}
}
]),
t
}(c(HTMLElement));
customElements.define('game-modal', os);
var rs = document.createElement('template');
rs.innerHTML = '\n <style>\n :host {\n height: var(--keyboard-height);\n }\n #keyboard {\n margin: 0 8px;\n user-select: none;\n }\n \n .row {\n display: flex;\n width: 100%;\n margin: 0 auto 8px;\n /* https://stackoverflow.com/questions/46167604/ios-html-disable-double-tap-to-zoom */\n touch-action: manipulation;\n }\n \n button {\n font-family: inherit;\n font-weight: bold;\n border: 0;\n padding: 0;\n margin: 0 6px 0 0;\n height: 58px;\n border-radius: 4px;\n cursor: pointer;\n user-select: none;\n background-color: var(--key-bg);\n color: var(--key-text-color);\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n text-transform: uppercase;\n -webkit-tap-highlight-color: rgba(0,0,0,0.3);\n }\n\n button:focus {\n outline: none;\n }\n\n button.fade {\n transition: background-color 0.1s ease, color 0.1s ease;\n }\n \n button:last-of-type {\n margin: 0;\n }\n \n .half {\n flex: 0.5;\n }\n \n .one {\n flex: 1;\n }\n\n .one-and-a-half {\n flex: 1.5;\n font-size: 12px;\n }\n \n .two {\n flex: 2;\n }\n\n button[data-state=\'correct\'] {\n background-color: var(--key-bg-correct);\n color: var(--key-evaluated-text-color);\n }\n\n button[data-state=\'present\'] {\n background-color: var(--key-bg-present);\n color: var(--key-evaluated-text-color);\n }\n\n button[data-state=\'absent\'] {\n background-color: var(--key-bg-absent);\n color: var(--key-evaluated-text-color);\n }\n\n </style>\n <div id="keyboard"></div>\n';
var ns = document.createElement('template');
ns.innerHTML = '\n <button>key</button>\n';
var is = document.createElement('template');
is.innerHTML = '\n <div class="spacer"></div>\n';
var ls = [
['q',
'w',
'e',
'r',
't',
'y',
'u',
'i',
'o',
'p'],
[
'-',
'a',
's',
'd',
'f',
'g',
'h',
'j',
'k',
'l',
'-'
],
[
'↵',
'z',
'x',
'c',
'v',
'b',
'n',
'm',
'←'
]
],
ds = function (e) {
n(t, e);
var a = h(t);
function t() {
var e;
return s(this, t),
r(p(e = a.call(this)), '_letterEvaluations', {
}),
e.attachShadow({
mode: 'open'
}),
e
}
return o(t, [
{
key: 'letterEvaluations',
set: function (e) {
this._letterEvaluations = e,
this._render()
}
},
{
key: 'dispatchKeyPressEvent',
value: function (e) {
this.dispatchEvent(new CustomEvent('game-key-press', {
bubbles: !0,
composed: !0,
detail: {
key: e
}
}))
}
},
{
key: 'connectedCallback',
value: function () {
var e = this;
this.shadowRoot.appendChild(rs.content.cloneNode(!0)),
this.$keyboard = this.shadowRoot.getElementById('keyboard'),
this.$keyboard.addEventListener('click', (function (a) {
var s = a.target.closest('button');
s && e.$keyboard.contains(s) && e.dispatchKeyPressEvent(s.dataset.key)
})),
window.addEventListener('keydown', (function (a) {
if (!0 !== a.repeat) {
var s = a.key,
t = a.metaKey,
o = a.ctrlKey;
t || o || (Ga.includes(s.toLowerCase()) || 'Backspace' === s || 'Enter' === s) && e.dispatchKeyPressEvent(s)
}
})),
this.$keyboard.addEventListener('transitionend', (function (a) {
var s = a.target.closest('button');
s && e.$keyboard.contains(s) && s.classList.remove('fade')
})),
ls.forEach((function (a) {
var s = document.createElement('div');
s.classList.add('row'),
a.forEach((function (e) {
var a;
if (e >= 'a' && e <= 'z' || '←' === e || '↵' === e) {
if ((a = ns.content.cloneNode(!0).firstElementChild).dataset.key = e, a.textContent = e, '←' === e) {
var t = document.createElement('game-icon');
t.setAttribute('icon', 'backspace'),
a.textContent = '',
a.appendChild(t),
a.classList.add('one-and-a-half')
}
'↵' == e && (a.textContent = 'enter', a.classList.add('one-and-a-half'))
} else (a = is.content.cloneNode(!0).firstElementChild).classList.add(1 === e.length ? 'half' : 'one');
s.appendChild(a)
})),
e.$keyboard.appendChild(s)
})),
this._render()
}
},
{
key: '_render',
value: function () {
for (var e in this._letterEvaluations) {
var a = this.$keyboard.querySelector('[data-key="'.concat(e, '"]'));
a.dataset.state = this._letterEvaluations[e],
a.classList.add('fade')
}
}
}
]),
t
}(c(HTMLElement));
function us(e, a, s) {
try {
if (o = navigator.userAgent || navigator.vendor || window.opera, (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(o) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(o.substr(0, 4))) && void 0 !== navigator.share && navigator.canShare && navigator.canShare(e)) navigator.share(e);
else {
var t = document.createElement('textarea');
t.textContent = e.text,
document.body.appendChild(t),
t.select(),
document.execCommand('copy'),
document.body.removeChild(t),
a()
}
} catch (e) {
s()
}
var o
}
customElements.define('game-keyboard', ds);
var cs = document.createElement('template');
cs.innerHTML = '\n <style>\n .container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 16px 0; \n }\n h1 {\n font-weight: 700;\n font-size: 16px;\n letter-spacing: 0.5px;\n text-transform: uppercase;\n text-align: center;\n margin-bottom: 10px;\n }\n \n #statistics {\n display: flex;\n margin-bottom: \n }\n\n .statistic-container {\n flex: 1;\n }\n\n .statistic-container .statistic {\n font-size: 36px;\n font-weight: 400;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n letter-spacing: 0.05em;\n font-variant-numeric: proportional-nums;\n }\n\n .statistic.timer {\n font-variant-numeric: initial;\n }\n\n .statistic-container .label {\n font-size: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n }\n\n #guess-distribution {\n width: 80%;\n }\n\n .graph-container {\n width: 100%;\n height: 20px;\n display: flex;\n align-items: center;\n padding-bottom: 4px;\n font-size: 14px;\n line-height: 20px;\n }\n\n .graph-container .graph {\n width: 100%;\n height: 100%;\n padding-left: 4px;\n }\n\n .graph-container .graph .graph-bar {\n height: 100%;\n /* Assume no wins */\n width: 0%;\n position: relative;\n background-color: var(--color-absent);\n display: flex;\n justify-content: center;\n }\n\n .graph-container .graph .graph-bar.highlight {\n background-color: var(--color-correct);\n }\n\n .graph-container .graph .graph-bar.align-right {\n justify-content: flex-end;\n padding-right: 8px;\n }\n\n .graph-container .graph .num-guesses {\n font-weight: bold;\n color: var(--tile-text-color);\n }\n\n #statistics,\n #guess-distribution {\n padding-bottom: 10px;\n }\n\n .footer {\n display: flex;\n width: 100%;\n }\n\n .countdown {\n border-right: 1px solid var(--color-tone-1);\n padding-right: 12px;\n width: 50%;\n }\n\n .share {\n display: flex;\n justify-content: center;\n align-items: center;\n padding-left: 12px;\n width: 50%;\n }\n\n button#share-button {\n background-color: var(--key-bg-correct);\n color: var(--key-evaluated-text-color);\n font-family: inherit;\n font-weight: bold;\n border-radius: 4px;\n cursor: pointer;\n border: none;\n user-select: none;\n display: flex;\n justify-content: center;\n align-items: center;\n text-transform: uppercase;\n -webkit-tap-highlight-color: rgba(0,0,0,0.3);\n width: 80%;\n font-size: 20px;\n height: 52px;\n -webkit-filter: brightness(100%);\n }\n button#share-button:hover {\n opacity: 0.9;\n }\n button#share-button game-icon {\n width: 24px;\n height: 24px;\n padding-left: 8px;\n }\n </style>\n\n <div class="container">\n <h1>Statistiek</h1>\n <div id="statistics"></div>\n <h1>Gok verdeling</h1>\n <div id="guess-distribution"></div>\n <div class="footer">\n <div class="countdown">\n <h1>Volgende WOORDLE</h1>\n <div id="timer">\n <div class="statistic-container">\n <div class="statistic timer">\n <countdown-timer></countdown-timer>\n </div>\n </div>\n </div>\n </div>\n <div class="share">\n <button id="share-button">\n Delen <game-icon icon="share"></game-icon>\n </button>\n </div>\n </div>\n<div><p>Kan je niet wachten op de volgende WOORDLE? Probeer ook de <a href="https://www.powerlanguage.co.uk/wordle/">originele WORDLE</a> (in het Engels)!</p></div> </div>\n';
var ps = document.createElement('template');
ps.innerHTML = '\n <div class="statistic-container">\n <div class="statistic"></div>\n <div class="label"></div>\n </div>\n';
var ms = document.createElement('template');
ms.innerHTML = '\n <div class="graph-container">\n <div class="guess"></div>\n <div class="graph">\n <div class="graph-bar">\n <div class="num-guesses">\n </div>\n </div>\n </div>\n </div>\n';
var hs = {
currentStreak: 'Huidige Reeks',
maxStreak: 'Max Reeks',
winPercentage: 'Win %',
gamesPlayed: 'Gespeeld',
gamesWon: 'Gewonnen',
averageGuesses: 'Gem. Gokken'
},
ys = function (e) {
n(t, e);
var a = h(t);
function t() {
var e;
return s(this, t),
r(p(e = a.call(this)), 'stats', {
}),
r(p(e), 'gameApp', void 0),
e.attachShadow({
mode: 'open'
}),
e.stats = Ua(),
e
}
return o(t, [
{
key: 'connectedCallback',
value: function () {
var e = this;
this.shadowRoot.appendChild(cs.content.cloneNode(!0));
for (var a = this.shadowRoot.getElementById('statistics'), s = this.shadowRoot.getElementById('guess-distribution'), t = Math.max.apply(Math, g(Object.values(this.stats.guesses))), o = 1; o < Object.keys(this.stats.guesses).length; o++) {
var r = o,
n = this.stats.guesses[o],
i = ms.content.cloneNode(!0),
l = Math.max(7, Math.round(n / t * 100));
i.querySelector('.guess').textContent = r;
var d = i.querySelector('.graph-bar');
if (d.style.width = ''.concat(l, '%'), 'number' == typeof n) {
i.querySelector('.num-guesses').textContent = n,
n > 0 && d.classList.add('align-right');
var u = parseInt(this.getAttribute('highlight-guess'), 10);
u && o === u && d.classList.add('highlight')
}
s.appendChild(i)
}
[
'gamesPlayed',
'winPercentage',
'currentStreak',
'maxStreak'
].forEach((function (s) {
var t = hs[s],
o = e.stats[s],
r = ps.content.cloneNode(!0);
r.querySelector('.label').textContent = t,
r.querySelector('.statistic').textContent = o,
a.appendChild(r)
})),
this.shadowRoot.querySelector('button#share-button').addEventListener('click', (function (a) {
a.preventDefault(),
a.stopPropagation();
us(function (e) {
var a = e.evaluations,
s = e.dayOffset,
t = e.rowIndex,
o = e.isHardMode,
r = e.isWin,
n = JSON.parse(window.localStorage.getItem(j)),
i = JSON.parse(window.localStorage.getItem(S)),
l = 'Woordle '.concat(s);
l += ' '.concat(r ? t : 'X', '/').concat(6),
o && (l += '*');
var d = '';
return a.forEach((function (e) {
e && (e.forEach((function (e) {
if (e) {
var a = '';
switch (e) {
case Ia:
a = function (e) {
return e ? '🟧' : '🟩'
}(i);
break;
case Ta:
a = function (e) {
return e ? '🟦' : '🟨'
}(i);
break;
case Ca:
a = function (e) {
return e ? '⬛' : '⬜'
}(n)
}
d += a
}
})), d += '\n')
})),
{
text: ''.concat(l, '\n\n').concat(d.trimEnd())
}
}({
evaluations: e.gameApp.evaluations,
dayOffset: e.gameApp.dayOffset,
rowIndex: e.gameApp.rowIndex,
isHardMode: e.gameApp.hardMode,
isWin: e.gameApp.gameStatus === Za
}), (function () {
e.gameApp.addToast('Copied results to clipboard', 2000, !0)
}), (function () {
e.gameApp.addToast('Share failed', 2000, !0)
}))
}))
}
}
]),
t
}(c(HTMLElement));
customElements.define('game-stats', ys);
var gs = document.createElement('template');
gs.innerHTML = '\n <style>\n :host {\n }\n .container {\n display: flex;\n justify-content: space-between;\n }\n .switch {\n height: 20px;\n width: 32px;\n vertical-align: middle;\n /* not quite right */\n background: var(--color-tone-3);\n border-radius: 999px;\n display: block;\n position: relative;\n }\n .knob {\n display: block;\n position: absolute;\n left: 2px;\n top: 2px;\n height: calc(100% - 4px);\n width: 50%;\n border-radius: 8px;\n background: var(--white);\n transform: translateX(0);\n transition: transform 0.3s;\n }\n :host([checked]) .switch {\n background: var(--color-correct);\n }\n :host([checked]) .knob {\n transform: translateX(calc(100% - 4px));\n }\n :host([disabled]) .switch {\n opacity: 0.5;\n }\n </style>\n <div class="container">\n <label><slot></slot></label>\n <div class="switch">\n <span class="knob"></div>\n </div>\n </div>\n';
var bs = function (e) {
n(t, e);
var a = h(t);
function t() {
var e;
return s(this, t),
(e = a.call(this)).attachShadow({
mode: 'open'
}),
e
}
return o(t, [
{
key: 'connectedCallback',
value: function () {
var e = this;
this.shadowRoot.appendChild(gs.content.cloneNode(!0)),
this.shadowRoot.querySelector('.container').addEventListener('click', (function (a) {
a.stopPropagation(),
e.hasAttribute('checked') ? e.removeAttribute('checked') : e.setAttribute('checked', ''),
e.dispatchEvent(new CustomEvent('game-switch-change', {
bubbles: !0,
composed: !0,
detail: {
name: e.getAttribute('name'),
checked: e.hasAttribute('checked'),
disabled: e.hasAttribute('disabled')
}
}))
}))
}
}
], [
{
key: 'observedAttributes',
get: function () {
return ['checked']
}
}
]),
t
}(c(HTMLElement));
customElements.define('game-switch', bs);
var fs = document.createElement('template');
fs.innerHTML = '\n <style>\n .instructions {\n font-size: 14px;\n color: var(--color-tone-1)\n }\n\n .examples {\n border-bottom: 1px solid var(--color-tone-4);\n border-top: 1px solid var(--color-tone-4);\n }\n\n .example {\n margin-top: 24px;\n margin-bottom: 24px;\n }\n\n game-tile {\n width: 40px;\n height: 40px;\n }\n\n :host([page]) section {\n padding: 16px;\n padding-top: 0px;\n }\n\n </style>\n <section>\n <div class="instructions">\n <p>Gok het <strong>WOORDLE</strong> in 6 keer.</p>\n <p>Na elke gok zullen de kleuren van de vakjes aangeven hoe dichtbij je was.</p>\n <div class="examples">\n <div class="example">\n <div class="row">\n <game-tile letter="w" evaluation="correct" reveal></game-tile>\n <game-tile letter="o"></game-tile>\n <game-tile letter="o"></game-tile>\n <game-tile letter="r"></game-tile>\n <game-tile letter="d"></game-tile>\n </div>\n <p>De letter <strong>W</strong> zit op de juiste plek in het woord.</p>\n </div>\n <div class="example">\n <div class="row">\n <game-tile letter="p"></game-tile>\n <game-tile letter="u" evaluation="present" reveal></game-tile>\n <game-tile letter="p"></game-tile>\n <game-tile letter="i"></game-tile>\n <game-tile letter="l"></game-tile>\n </div>\n <p>De letter <strong>U</strong> zit in het woord maar op een andere plek.</p>\n </div>\n <div class="example">\n <div class="row">\n <game-tile letter="t"></game-tile>\n <game-tile letter="r"></game-tile>\n <game-tile letter="o"></game-tile>\n <game-tile letter="e" evaluation="absent" reveal></game-tile>\n <game-tile letter="p"></game-tile>\n </div>\n <p>De letter <strong>E</strong> zit helemaal niet in het woord.</p>\n </div>\n </div>\n <p><strong>Elke dag komt er een nieuwe WOORDLE beschikbaar!<strong></p><p>WORDLE is a game by <a href="https://twitter.com/powerlanguish">Josh Wardle</a>, the original can be found here: <a href="https://www.powerlanguage.co.uk/wordle/">www.powerlanguage.co.uk/wordle</a>. This version was translated by <a href="https://twitter.com/pingiun_">yele</a>.</p>\n </div>\n </section>\n';
var ks = function (e) {
n(t, e);
var a = h(t);
function t() {
var e;
return s(this, t),
(e = a.call(this)).attachShadow({
mode: 'open'
}),
e
}
return o(t, [
{
key: 'connectedCallback',
value: function () {
this.shadowRoot.appendChild(fs.content.cloneNode(!0))
}
}
]),
t
}(c(HTMLElement));
customElements.define('game-help', ks);
var vs = document.createElement('template');
vs.innerHTML = '\n <style>\n .overlay {\n display: none;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n justify-content: center;\n background-color: var(--color-background);\n animation: SlideIn 100ms linear;\n z-index: '.concat(2000, ';\n }\n\n :host([open]) .overlay {\n display: flex;\n }\n\n .content {\n position: relative;\n color: var(--color-tone-1);\n padding: 0 32px;\n max-width: var(--game-max-width);\n width: 100%;\n overflow-y: auto;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n\n .content-container {\n height: 100%;\n }\n\n .overlay.closing {\n animation: SlideOut 150ms linear;\n }\n\n header {\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n }\n\n h1 {\n font-weight: 700;\n font-size: 16px;\n letter-spacing: 0.5px;\n text-transform: uppercase;\n text-align: center;\n margin-bottom: 10px;\n }\n\n game-icon {\n position: absolute;\n right: 0;\n user-select: none;\n cursor: pointer;\n }\n\n @media only screen and (min-device-width : 320px) and (max-device-width : 480px) {\n .content {\n max-width: 100%;\n padding: 0;\n }\n game-icon {\n padding: 0 16px;\n }\n }\n\n @keyframes SlideIn {\n 0% {\n transform: translateY(30px);\n opacity: 0;\n }\n 100% {\n transform: translateY(0px);\n opacity: 1;\n }\n }\n @keyframes SlideOut {\n 0% {\n transform: translateY(0px);\n opacity: 1;\n }\n 90% {\n opacity: 0;\n }\n 100% {\n opacity: 0;\n transform: translateY(60px);\n }\n }\n </style>\n <div class="overlay">\n <div class="content">\n <header>\n <h1><slot></slot></h1>\n <game-icon icon="close"></game-icon>\n </header>\n <div class="content-container">\n <slot name="content"></slot>\n </div>\n </div>\n </div>\n');
var ws = function (e) {
n(t, e);
var a = h(t);
function t() {
var e;
return s(this, t),
(e = a.call(this)).attachShadow({
mode: 'open'
}),
e
}
return o(t, [
{
key: 'connectedCallback',
value: function () {
var e = this;
this.shadowRoot.appendChild(vs.content.cloneNode(!0)),
this.shadowRoot.querySelector('game-icon').addEventListener('click', (function (a) {
e.shadowRoot.querySelector('.overlay').classList.add('closing')
})),
this.shadowRoot.addEventListener('animationend', (function (a) {
'SlideOut' === a.animationName && (e.shadowRoot.querySelector('.overlay').classList.remove('closing'), Array.from(e.childNodes).forEach((function (a) {
e.removeChild(a)
})), e.removeAttribute('open'))
}))
}
}
]),
t
}(c(HTMLElement));
customElements.define('game-page', ws);
var xs = document.createElement('template');
xs.innerHTML = '\n <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24">\n <path fill=var(--color-tone-3) />\n </svg>\n';
var zs = {
help: 'M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z',
settings: 'M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z',
backspace: 'M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53.9.89 1.59.89h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H7.07L2.4 12l4.66-7H22v14zm-11.59-2L14 13.41 17.59 17 19 15.59 15.41 12 19 8.41 17.59 7 14 10.59 10.41 7 9 8.41 12.59 12 9 15.59z',
close: 'M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z',
share: 'M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92s2.92-1.31 2.92-2.92c0-1.61-1.31-2.92-2.92-2.92zM18 4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM6 13c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm12 7.02c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z'
},
js = function (e) {
n(t, e);
var a = h(t);
function t() {
var e;
return s(this, t),
(e = a.call(this)).attachShadow({
mode: 'open'
}),
e
}
return o(t, [
{
key: 'connectedCallback',
value: function () {
this.shadowRoot.appendChild(xs.content.cloneNode(!0));
var e = this.getAttribute('icon');
this.shadowRoot.querySelector('path').setAttribute('d', zs[e]),
'backspace' === e && this.shadowRoot.querySelector('path').setAttribute('fill', 'var(--color-tone-1)'),
'share' === e && this.shadowRoot.querySelector('path').setAttribute('fill', 'var(--white)')
}
}
]),
t
}(c(HTMLElement));
customElements.define('game-icon', js);
var Ss = document.createElement('template');
Ss.innerHTML = '\n <div id="timer"></div>\n';
var _s = 60000,
qs = 3600000,
Es = function (e) {
n(t, e);
var a = h(t);
function t() {
var e;
s(this, t),
r(p(e = a.call(this)), 'targetEpochMS', void 0),
r(p(e), 'intervalId', void 0),
r(p(e), '$timer', void 0),
e.attachShadow({
mode: 'open'
});
var o = new Date;
return o.setDate(o.getDate() + 1),
o.setHours(0, 0, 0, 0),
e.targetEpochMS = o.getTime(),
e
}
return o(t, [
{
key: 'padDigit',
value: function (e) {
return e.toString().padStart(2, '0')
}
},
{
key: 'updateTimer',
value: function () {
var e = (new Date).getTime(),
a = Math.floor(this.targetEpochMS - e),
s = Math.floor(a % 86400000 / qs),
t = Math.floor(a % qs / _s),
o = Math.floor(a % _s / 1000),
r = ''.concat(this.padDigit(s), ':').concat(this.padDigit(t), ':').concat(this.padDigit(o));
this.$timer.textContent = r
}
},
{
key: 'connectedCallback',
value: function () {
var e = this;
this.shadowRoot.appendChild(Ss.content.cloneNode(!0)),
this.$timer = this.shadowRoot.querySelector('#timer'),
this.intervalId = setInterval((function () {
e.updateTimer()
}), 200)
}
}
]),
t
}(c(HTMLElement));
return customElements.define('countdown-timer', Es),
e.CountdownTimer = Es,
e.GameApp = ss,
e.GameHelp = ks,
e.GameIcon = js,
e.GameKeyboard = ds,
e.GameModal = os,
e.GamePage = ws,
e.GameRow = x,
e.GameSettings = _a,
e.GameStats = ys,
e.GameSwitch = bs,
e.GameThemeManager = _,
e.GameTile = v,
e.GameToast = Ea,
Object.defineProperty(e, '__esModule', {
value: !0
}),
e
}({
});
{
"short_name": "Woordle",
"name": "Woordle",
"icons": [
{
"src": "woordle_logo_48x48.png",
"type": "image/png",
"sizes": "48x48"
},
{
"src": "woordle_logo_72x72.png",
"type": "image/png",
"sizes": "72x72"
},
{
"src": "woordle_logo_96x96.png",
"type": "image/png",
"sizes": "96x96"
},
{
"src": "woordle_logo_144x144.png",
"type": "image/png",
"sizes": "144x144"
},
{
"src": "woordle_logo_168x168.png",
"type": "image/png",
"sizes": "168x168"
},
{
"src": "woordle_logo_192x192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "woordle_logo_512x512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": "https://woordle.nl",
"background_color": "#6aaa64",
"display": "standalone",
"theme_color": "#6aaa64",
"description": "Een dagelijks woordspelletje"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment