(function(l, r) { if (l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (window.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(window.document); var app = (function () { 'use strict'; function noop() { } const identity = x => x; function assign(tar, src) { // @ts-ignore for (const k in src) tar[k] = src[k]; return tar; } function add_location(element, file, line, column, char) { element.__svelte_meta = { loc: { file, line, column, char } }; } function run(fn) { return fn(); } function blank_object() { return Object.create(null); } function run_all(fns) { fns.forEach(run); } function is_function(thing) { return typeof thing === 'function'; } function safe_not_equal(a, b) { return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function'); } function is_empty(obj) { return Object.keys(obj).length === 0; } function subscribe(store, ...callbacks) { if (store == null) { return noop; } const unsub = store.subscribe(...callbacks); return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; } function action_destroyer(action_result) { return action_result && is_function(action_result.destroy) ? action_result.destroy : noop; } function append(target, node) { target.appendChild(node); } function insert(target, node, anchor) { target.insertBefore(node, anchor || null); } function detach(node) { node.parentNode.removeChild(node); } function destroy_each(iterations, detaching) { for (let i = 0; i < iterations.length; i += 1) { if (iterations[i]) iterations[i].d(detaching); } } function element(name) { return document.createElement(name); } function svg_element(name) { return document.createElementNS('http://www.w3.org/2000/svg', name); } function text(data) { return document.createTextNode(data); } function space() { return text(' '); } function empty() { return text(''); } function listen(node, event, handler, options) { node.addEventListener(event, handler, options); return () => node.removeEventListener(event, handler, options); } function attr(node, attribute, value) { if (value == null) node.removeAttribute(attribute); else if (node.getAttribute(attribute) !== value) node.setAttribute(attribute, value); } function set_custom_element_data(node, prop, value) { if (prop in node) { node[prop] = value; } else { attr(node, prop, value); } } function xlink_attr(node, attribute, value) { node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value); } function children(element) { return Array.from(element.childNodes); } function toggle_class(element, name, toggle) { element.classList[toggle ? 'add' : 'remove'](name); } function custom_event(type, detail) { const e = document.createEvent('CustomEvent'); e.initCustomEvent(type, false, false, detail); return e; } class HtmlTag { constructor(anchor = null) { this.a = anchor; this.e = this.n = null; } m(html, target, anchor = null) { if (!this.e) { this.e = element(target.nodeName); this.t = target; this.h(html); } this.i(anchor); } h(html) { this.e.innerHTML = html; this.n = Array.from(this.e.childNodes); } i(anchor) { for (let i = 0; i < this.n.length; i += 1) { insert(this.t, this.n[i], anchor); } } p(html) { this.d(); this.h(html); this.i(this.a); } d() { this.n.forEach(detach); } } let current_component; function set_current_component(component) { current_component = component; } function get_current_component() { if (!current_component) throw new Error('Function called outside component initialization'); return current_component; } function onMount(fn) { get_current_component().$$.on_mount.push(fn); } function afterUpdate(fn) { get_current_component().$$.after_update.push(fn); } function createEventDispatcher() { const component = get_current_component(); return (type, detail) => { const callbacks = component.$$.callbacks[type]; if (callbacks) { // TODO are there situations where events could be dispatched // in a server (non-DOM) environment? const event = custom_event(type, detail); callbacks.slice().forEach(fn => { fn.call(component, event); }); } }; } // TODO figure out if we still want to support // shorthand events, or if we want to implement // a real bubbling mechanism function bubble(component, event) { const callbacks = component.$$.callbacks[event.type]; if (callbacks) { callbacks.slice().forEach(fn => fn(event)); } } const dirty_components = []; const binding_callbacks = []; const render_callbacks = []; const flush_callbacks = []; const resolved_promise = Promise.resolve(); let update_scheduled = false; function schedule_update() { if (!update_scheduled) { update_scheduled = true; resolved_promise.then(flush); } } function tick() { schedule_update(); return resolved_promise; } function add_render_callback(fn) { render_callbacks.push(fn); } let flushing = false; const seen_callbacks = new Set(); function flush() { if (flushing) return; flushing = true; do { // first, call beforeUpdate functions // and update components for (let i = 0; i < dirty_components.length; i += 1) { const component = dirty_components[i]; set_current_component(component); update(component.$$); } set_current_component(null); dirty_components.length = 0; while (binding_callbacks.length) binding_callbacks.pop()(); // then, once components are updated, call // afterUpdate functions. This may cause // subsequent updates... for (let i = 0; i < render_callbacks.length; i += 1) { const callback = render_callbacks[i]; if (!seen_callbacks.has(callback)) { // ...so guard against infinite loops seen_callbacks.add(callback); callback(); } } render_callbacks.length = 0; } while (dirty_components.length); while (flush_callbacks.length) { flush_callbacks.pop()(); } update_scheduled = false; flushing = false; seen_callbacks.clear(); } function update($$) { if ($$.fragment !== null) { $$.update(); run_all($$.before_update); const dirty = $$.dirty; $$.dirty = [-1]; $$.fragment && $$.fragment.p($$.ctx, dirty); $$.after_update.forEach(add_render_callback); } } const outroing = new Set(); let outros; function group_outros() { outros = { r: 0, c: [], p: outros // parent group }; } function check_outros() { if (!outros.r) { run_all(outros.c); } outros = outros.p; } function transition_in(block, local) { if (block && block.i) { outroing.delete(block); block.i(local); } } function transition_out(block, local, detach, callback) { if (block && block.o) { if (outroing.has(block)) return; outroing.add(block); outros.c.push(() => { outroing.delete(block); if (callback) { if (detach) block.d(1); callback(); } }); block.o(local); } } const globals = (typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : global); function get_spread_update(levels, updates) { const update = {}; const to_null_out = {}; const accounted_for = { $$scope: 1 }; let i = levels.length; while (i--) { const o = levels[i]; const n = updates[i]; if (n) { for (const key in o) { if (!(key in n)) to_null_out[key] = 1; } for (const key in n) { if (!accounted_for[key]) { update[key] = n[key]; accounted_for[key] = 1; } } levels[i] = n; } else { for (const key in o) { accounted_for[key] = 1; } } } for (const key in to_null_out) { if (!(key in update)) update[key] = undefined; } return update; } function get_spread_object(spread_props) { return typeof spread_props === 'object' && spread_props !== null ? spread_props : {}; } function create_component(block) { block && block.c(); } function mount_component(component, target, anchor) { const { fragment, on_mount, on_destroy, after_update } = component.$$; fragment && fragment.m(target, anchor); // onMount happens before the initial afterUpdate add_render_callback(() => { const new_on_destroy = on_mount.map(run).filter(is_function); if (on_destroy) { on_destroy.push(...new_on_destroy); } else { // Edge case - component was destroyed immediately, // most likely as a result of a binding initialising run_all(new_on_destroy); } component.$$.on_mount = []; }); after_update.forEach(add_render_callback); } function destroy_component(component, detaching) { const $$ = component.$$; if ($$.fragment !== null) { run_all($$.on_destroy); $$.fragment && $$.fragment.d(detaching); // TODO null out other refs, including component.$$ (but need to // preserve final state?) $$.on_destroy = $$.fragment = null; $$.ctx = []; } } function make_dirty(component, i) { if (component.$$.dirty[0] === -1) { dirty_components.push(component); schedule_update(); component.$$.dirty.fill(0); } component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31)); } function init(component, options, instance, create_fragment, not_equal, props, dirty = [-1]) { const parent_component = current_component; set_current_component(component); const prop_values = options.props || {}; const $$ = component.$$ = { fragment: null, ctx: null, // state props, update: noop, not_equal, bound: blank_object(), // lifecycle on_mount: [], on_destroy: [], before_update: [], after_update: [], context: new Map(parent_component ? parent_component.$$.context : []), // everything else callbacks: blank_object(), dirty, skip_bound: false }; let ready = false; $$.ctx = instance ? instance(component, prop_values, (i, ret, ...rest) => { const value = rest.length ? rest[0] : ret; if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) { if (!$$.skip_bound && $$.bound[i]) $$.bound[i](value); if (ready) make_dirty(component, i); } return ret; }) : []; $$.update(); ready = true; run_all($$.before_update); // `false` as a special case of no DOM component $$.fragment = create_fragment ? create_fragment($$.ctx) : false; if (options.target) { if (options.hydrate) { const nodes = children(options.target); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion $$.fragment && $$.fragment.l(nodes); nodes.forEach(detach); } else { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion $$.fragment && $$.fragment.c(); } if (options.intro) transition_in(component.$$.fragment); mount_component(component, options.target, options.anchor); flush(); } set_current_component(parent_component); } class SvelteComponent { $destroy() { destroy_component(this, 1); this.$destroy = noop; } $on(type, callback) { const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = [])); callbacks.push(callback); return () => { const index = callbacks.indexOf(callback); if (index !== -1) callbacks.splice(index, 1); }; } $set($$props) { if (this.$$set && !is_empty($$props)) { this.$$.skip_bound = true; this.$$set($$props); this.$$.skip_bound = false; } } } function dispatch_dev(type, detail) { document.dispatchEvent(custom_event(type, Object.assign({ version: '3.30.0' }, detail))); } function append_dev(target, node) { dispatch_dev('SvelteDOMInsert', { target, node }); append(target, node); } function insert_dev(target, node, anchor) { dispatch_dev('SvelteDOMInsert', { target, node, anchor }); insert(target, node, anchor); } function detach_dev(node) { dispatch_dev('SvelteDOMRemove', { node }); detach(node); } function listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) { const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : []; if (has_prevent_default) modifiers.push('preventDefault'); if (has_stop_propagation) modifiers.push('stopPropagation'); dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers }); const dispose = listen(node, event, handler, options); return () => { dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers }); dispose(); }; } function attr_dev(node, attribute, value) { attr(node, attribute, value); if (value == null) dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute }); else dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value }); } function set_data_dev(text, data) { data = '' + data; if (text.wholeText === data) return; dispatch_dev('SvelteDOMSetData', { node: text, data }); text.data = data; } function validate_each_argument(arg) { if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) { let msg = '{#each} only iterates over array-like objects.'; if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) { msg += ' You can use a spread to convert this iterable into an array.'; } throw new Error(msg); } } function validate_slots(name, slot, keys) { for (const slot_key of Object.keys(slot)) { if (!~keys.indexOf(slot_key)) { console.warn(`<${name}> received an unexpected slot "${slot_key}".`); } } } class SvelteComponentDev extends SvelteComponent { constructor(options) { if (!options || (!options.target && !options.$$inline)) { throw new Error("'target' is a required option"); } super(); } $destroy() { super.$destroy(); this.$destroy = () => { console.warn('Component was already destroyed'); // eslint-disable-line no-console }; } $capture_state() { } $inject_state() { } } /** * @typedef {Object} WrappedComponent Object returned by the `wrap` method * @property {SvelteComponent} component - Component to load (this is always asynchronous) * @property {RoutePrecondition[]} [conditions] - Route pre-conditions to validate * @property {Object} [props] - Optional dictionary of static props * @property {Object} [userData] - Optional user data dictionary * @property {bool} _sveltesparouter - Internal flag; always set to true */ /** * @callback AsyncSvelteComponent * @returns {Promise} Returns a Promise that resolves with a Svelte component */ /** * @callback RoutePrecondition * @param {RouteDetail} detail - Route detail object * @returns {boolean|Promise} If the callback returns a false-y value, it's interpreted as the precondition failed, so it aborts loading the component (and won't process other pre-condition callbacks) */ /** * @typedef {Object} WrapOptions Options object for the call to `wrap` * @property {SvelteComponent} [component] - Svelte component to load (this is incompatible with `asyncComponent`) * @property {AsyncSvelteComponent} [asyncComponent] - Function that returns a Promise that fulfills with a Svelte component (e.g. `{asyncComponent: () => import('Foo.svelte')}`) * @property {SvelteComponent} [loadingComponent] - Svelte component to be displayed while the async route is loading (as a placeholder); when unset or false-y, no component is shown while component * @property {object} [loadingParams] - Optional dictionary passed to the `loadingComponent` component as params (for an exported prop called `params`) * @property {object} [userData] - Optional object that will be passed to events such as `routeLoading`, `routeLoaded`, `conditionsFailed` * @property {object} [props] - Optional key-value dictionary of static props that will be passed to the component. The props are expanded with {...props}, so the key in the dictionary becomes the name of the prop. * @property {RoutePrecondition[]|RoutePrecondition} [conditions] - Route pre-conditions to add, which will be executed in order */ /** * Wraps a component to enable multiple capabilities: * 1. Using dynamically-imported component, with (e.g. `{asyncComponent: () => import('Foo.svelte')}`), which also allows bundlers to do code-splitting. * 2. Adding route pre-conditions (e.g. `{conditions: [...]}`) * 3. Adding static props that are passed to the component * 4. Adding custom userData, which is passed to route events (e.g. route loaded events) or to route pre-conditions (e.g. `{userData: {foo: 'bar}}`) * * @param {WrapOptions} args - Arguments object * @returns {WrappedComponent} Wrapped component */ function wrap(args) { if (!args) { throw Error('Parameter args is required') } // We need to have one and only one of component and asyncComponent // This does a "XNOR" if (!args.component == !args.asyncComponent) { throw Error('One and only one of component and asyncComponent is required') } // If the component is not async, wrap it into a function returning a Promise if (args.component) { args.asyncComponent = () => Promise.resolve(args.component); } // Parameter asyncComponent and each item of conditions must be functions if (typeof args.asyncComponent != 'function') { throw Error('Parameter asyncComponent must be a function') } if (args.conditions) { // Ensure it's an array if (!Array.isArray(args.conditions)) { args.conditions = [args.conditions]; } for (let i = 0; i < args.conditions.length; i++) { if (!args.conditions[i] || typeof args.conditions[i] != 'function') { throw Error('Invalid parameter conditions[' + i + ']') } } } // Check if we have a placeholder component if (args.loadingComponent) { args.asyncComponent.loading = args.loadingComponent; args.asyncComponent.loadingParams = args.loadingParams || undefined; } // Returns an object that contains all the functions to execute too // The _sveltesparouter flag is to confirm the object was created by this router const obj = { component: args.asyncComponent, userData: args.userData, conditions: (args.conditions && args.conditions.length) ? args.conditions : undefined, props: (args.props && Object.keys(args.props).length) ? args.props : {}, _sveltesparouter: true }; return obj } const subscriber_queue = []; /** * Creates a `Readable` store that allows reading by subscription. * @param value initial value * @param {StartStopNotifier}start start and stop notifications for subscriptions */ function readable(value, start) { return { subscribe: writable(value, start).subscribe }; } /** * Create a `Writable` store that allows both updating and reading by subscription. * @param {*=}value initial value * @param {StartStopNotifier=}start start and stop notifications for subscriptions */ function writable(value, start = noop) { let stop; const subscribers = []; function set(new_value) { if (safe_not_equal(value, new_value)) { value = new_value; if (stop) { // store is ready const run_queue = !subscriber_queue.length; for (let i = 0; i < subscribers.length; i += 1) { const s = subscribers[i]; s[1](); subscriber_queue.push(s, value); } if (run_queue) { for (let i = 0; i < subscriber_queue.length; i += 2) { subscriber_queue[i][0](subscriber_queue[i + 1]); } subscriber_queue.length = 0; } } } } function update(fn) { set(fn(value)); } function subscribe(run, invalidate = noop) { const subscriber = [run, invalidate]; subscribers.push(subscriber); if (subscribers.length === 1) { stop = start(set) || noop; } run(value); return () => { const index = subscribers.indexOf(subscriber); if (index !== -1) { subscribers.splice(index, 1); } if (subscribers.length === 0) { stop(); stop = null; } }; } return { set, update, subscribe }; } function derived(stores, fn, initial_value) { const single = !Array.isArray(stores); const stores_array = single ? [stores] : stores; const auto = fn.length < 2; return readable(initial_value, (set) => { let inited = false; const values = []; let pending = 0; let cleanup = noop; const sync = () => { if (pending) { return; } cleanup(); const result = fn(single ? values[0] : values, set); if (auto) { set(result); } else { cleanup = is_function(result) ? result : noop; } }; const unsubscribers = stores_array.map((store, i) => subscribe(store, (value) => { values[i] = value; pending &= ~(1 << i); if (inited) { sync(); } }, () => { pending |= (1 << i); })); inited = true; sync(); return function stop() { run_all(unsubscribers); cleanup(); }; }); } function regexparam (str, loose) { if (str instanceof RegExp) return { keys:false, pattern:str }; var c, o, tmp, ext, keys=[], pattern='', arr = str.split('/'); arr[0] || arr.shift(); while (tmp = arr.shift()) { c = tmp[0]; if (c === '*') { keys.push('wild'); pattern += '/(.*)'; } else if (c === ':') { o = tmp.indexOf('?', 1); ext = tmp.indexOf('.', 1); keys.push( tmp.substring(1, !!~o ? o : !!~ext ? ext : tmp.length) ); pattern += !!~o && !~ext ? '(?:/([^/]+?))?' : '/([^/]+?)'; if (!!~ext) pattern += (!!~o ? '?' : '') + '\\' + tmp.substring(ext); } else { pattern += '/' + tmp; } } return { keys: keys, pattern: new RegExp('^' + pattern + (loose ? '(?=$|\/)' : '\/?$'), 'i') }; } /* node_modules/svelte-spa-router/Router.svelte generated by Svelte v3.30.0 */ const { Error: Error_1, Object: Object_1, console: console_1 } = globals; // (209:0) {:else} function create_else_block(ctx) { let switch_instance; let switch_instance_anchor; let current; const switch_instance_spread_levels = [/*props*/ ctx[2]]; var switch_value = /*component*/ ctx[0]; function switch_props(ctx) { let switch_instance_props = {}; for (let i = 0; i < switch_instance_spread_levels.length; i += 1) { switch_instance_props = assign(switch_instance_props, switch_instance_spread_levels[i]); } return { props: switch_instance_props, $$inline: true }; } if (switch_value) { switch_instance = new switch_value(switch_props()); switch_instance.$on("routeEvent", /*routeEvent_handler_1*/ ctx[7]); } const block = { c: function create() { if (switch_instance) create_component(switch_instance.$$.fragment); switch_instance_anchor = empty(); }, m: function mount(target, anchor) { if (switch_instance) { mount_component(switch_instance, target, anchor); } insert_dev(target, switch_instance_anchor, anchor); current = true; }, p: function update(ctx, dirty) { const switch_instance_changes = (dirty & /*props*/ 4) ? get_spread_update(switch_instance_spread_levels, [get_spread_object(/*props*/ ctx[2])]) : {}; if (switch_value !== (switch_value = /*component*/ ctx[0])) { if (switch_instance) { group_outros(); const old_component = switch_instance; transition_out(old_component.$$.fragment, 1, 0, () => { destroy_component(old_component, 1); }); check_outros(); } if (switch_value) { switch_instance = new switch_value(switch_props()); switch_instance.$on("routeEvent", /*routeEvent_handler_1*/ ctx[7]); create_component(switch_instance.$$.fragment); transition_in(switch_instance.$$.fragment, 1); mount_component(switch_instance, switch_instance_anchor.parentNode, switch_instance_anchor); } else { switch_instance = null; } } else if (switch_value) { switch_instance.$set(switch_instance_changes); } }, i: function intro(local) { if (current) return; if (switch_instance) transition_in(switch_instance.$$.fragment, local); current = true; }, o: function outro(local) { if (switch_instance) transition_out(switch_instance.$$.fragment, local); current = false; }, d: function destroy(detaching) { if (detaching) detach_dev(switch_instance_anchor); if (switch_instance) destroy_component(switch_instance, detaching); } }; dispatch_dev("SvelteRegisterBlock", { block, id: create_else_block.name, type: "else", source: "(209:0) {:else}", ctx }); return block; } // (202:0) {#if componentParams} function create_if_block(ctx) { let switch_instance; let switch_instance_anchor; let current; const switch_instance_spread_levels = [{ params: /*componentParams*/ ctx[1] }, /*props*/ ctx[2]]; var switch_value = /*component*/ ctx[0]; function switch_props(ctx) { let switch_instance_props = {}; for (let i = 0; i < switch_instance_spread_levels.length; i += 1) { switch_instance_props = assign(switch_instance_props, switch_instance_spread_levels[i]); } return { props: switch_instance_props, $$inline: true }; } if (switch_value) { switch_instance = new switch_value(switch_props()); switch_instance.$on("routeEvent", /*routeEvent_handler*/ ctx[6]); } const block = { c: function create() { if (switch_instance) create_component(switch_instance.$$.fragment); switch_instance_anchor = empty(); }, m: function mount(target, anchor) { if (switch_instance) { mount_component(switch_instance, target, anchor); } insert_dev(target, switch_instance_anchor, anchor); current = true; }, p: function update(ctx, dirty) { const switch_instance_changes = (dirty & /*componentParams, props*/ 6) ? get_spread_update(switch_instance_spread_levels, [ dirty & /*componentParams*/ 2 && { params: /*componentParams*/ ctx[1] }, dirty & /*props*/ 4 && get_spread_object(/*props*/ ctx[2]) ]) : {}; if (switch_value !== (switch_value = /*component*/ ctx[0])) { if (switch_instance) { group_outros(); const old_component = switch_instance; transition_out(old_component.$$.fragment, 1, 0, () => { destroy_component(old_component, 1); }); check_outros(); } if (switch_value) { switch_instance = new switch_value(switch_props()); switch_instance.$on("routeEvent", /*routeEvent_handler*/ ctx[6]); create_component(switch_instance.$$.fragment); transition_in(switch_instance.$$.fragment, 1); mount_component(switch_instance, switch_instance_anchor.parentNode, switch_instance_anchor); } else { switch_instance = null; } } else if (switch_value) { switch_instance.$set(switch_instance_changes); } }, i: function intro(local) { if (current) return; if (switch_instance) transition_in(switch_instance.$$.fragment, local); current = true; }, o: function outro(local) { if (switch_instance) transition_out(switch_instance.$$.fragment, local); current = false; }, d: function destroy(detaching) { if (detaching) detach_dev(switch_instance_anchor); if (switch_instance) destroy_component(switch_instance, detaching); } }; dispatch_dev("SvelteRegisterBlock", { block, id: create_if_block.name, type: "if", source: "(202:0) {#if componentParams}", ctx }); return block; } function create_fragment(ctx) { let current_block_type_index; let if_block; let if_block_anchor; let current; const if_block_creators = [create_if_block, create_else_block]; const if_blocks = []; function select_block_type(ctx, dirty) { if (/*componentParams*/ ctx[1]) return 0; return 1; } current_block_type_index = select_block_type(ctx); if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); const block = { c: function create() { if_block.c(); if_block_anchor = empty(); }, l: function claim(nodes) { throw new Error_1("options.hydrate only works if the component was compiled with the `hydratable: true` option"); }, m: function mount(target, anchor) { if_blocks[current_block_type_index].m(target, anchor); insert_dev(target, if_block_anchor, anchor); current = true; }, p: function update(ctx, [dirty]) { let previous_block_index = current_block_type_index; current_block_type_index = select_block_type(ctx); if (current_block_type_index === previous_block_index) { if_blocks[current_block_type_index].p(ctx, dirty); } else { group_outros(); transition_out(if_blocks[previous_block_index], 1, 1, () => { if_blocks[previous_block_index] = null; }); check_outros(); if_block = if_blocks[current_block_type_index]; if (!if_block) { if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); if_block.c(); } else { if_block.p(ctx, dirty); } transition_in(if_block, 1); if_block.m(if_block_anchor.parentNode, if_block_anchor); } }, i: function intro(local) { if (current) return; transition_in(if_block); current = true; }, o: function outro(local) { transition_out(if_block); current = false; }, d: function destroy(detaching) { if_blocks[current_block_type_index].d(detaching); if (detaching) detach_dev(if_block_anchor); } }; dispatch_dev("SvelteRegisterBlock", { block, id: create_fragment.name, type: "component", source: "", ctx }); return block; } function wrap$1(component, userData, ...conditions) { // Use the new wrap method and show a deprecation warning // eslint-disable-next-line no-console console.warn("Method `wrap` from `svelte-spa-router` is deprecated and will be removed in a future version. Please use `svelte-spa-router/wrap` instead. See http://bit.ly/svelte-spa-router-upgrading"); return wrap({ component, userData, conditions }); } /** * @typedef {Object} Location * @property {string} location - Location (page/view), for example `/book` * @property {string} [querystring] - Querystring from the hash, as a string not parsed */ /** * Returns the current location from the hash. * * @returns {Location} Location object * @private */ function getLocation() { const hashPosition = window.location.href.indexOf("#/"); let location = hashPosition > -1 ? window.location.href.substr(hashPosition + 1) : "/"; // Check if there's a querystring const qsPosition = location.indexOf("?"); let querystring = ""; if (qsPosition > -1) { querystring = location.substr(qsPosition + 1); location = location.substr(0, qsPosition); } return { location, querystring }; } const loc = readable(null, // eslint-disable-next-line prefer-arrow-callback function start(set) { set(getLocation()); const update = () => { set(getLocation()); }; window.addEventListener("hashchange", update, false); return function stop() { window.removeEventListener("hashchange", update, false); }; }); const location = derived(loc, $loc => $loc.location); const querystring = derived(loc, $loc => $loc.querystring); async function push(location) { if (!location || location.length < 1 || location.charAt(0) != "/" && location.indexOf("#/") !== 0) { throw Error("Invalid parameter location"); } // Execute this code when the current call stack is complete await tick(); // Note: this will include scroll state in history even when restoreScrollState is false history.replaceState( { scrollX: window.scrollX, scrollY: window.scrollY }, undefined, undefined ); window.location.hash = (location.charAt(0) == "#" ? "" : "#") + location; } async function pop() { // Execute this code when the current call stack is complete await tick(); window.history.back(); } async function replace(location) { if (!location || location.length < 1 || location.charAt(0) != "/" && location.indexOf("#/") !== 0) { throw Error("Invalid parameter location"); } // Execute this code when the current call stack is complete await tick(); const dest = (location.charAt(0) == "#" ? "" : "#") + location; try { window.history.replaceState(undefined, undefined, dest); } catch(e) { // eslint-disable-next-line no-console console.warn("Caught exception while replacing the current page. If you're running this in the Svelte REPL, please note that the `replace` method might not work in this environment."); } // The method above doesn't trigger the hashchange event, so let's do that manually window.dispatchEvent(new Event("hashchange")); } function link(node, hrefVar) { // Only apply to tags if (!node || !node.tagName || node.tagName.toLowerCase() != "a") { throw Error("Action \"link\" can only be used with tags"); } updateLink(node, hrefVar || node.getAttribute("href")); return { update(updated) { updateLink(node, updated); } }; } // Internal function used by the link function function updateLink(node, href) { // Destination must start with '/' if (!href || href.length < 1 || href.charAt(0) != "/") { throw Error("Invalid value for \"href\" attribute: " + href); } // Add # to the href attribute node.setAttribute("href", "#" + href); node.addEventListener("click", scrollstateHistoryHandler); } /** * The handler attached to an anchor tag responsible for updating the * current history state with the current scroll state * * @param {HTMLElementEventMap} event - an onclick event attached to an anchor tag */ function scrollstateHistoryHandler(event) { // Prevent default anchor onclick behaviour event.preventDefault(); const href = event.currentTarget.getAttribute("href"); // Setting the url (3rd arg) to href will break clicking for reasons, so don't try to do that history.replaceState( { scrollX: window.scrollX, scrollY: window.scrollY }, undefined, undefined ); // This will force an update as desired, but this time our scroll state will be attached window.location.hash = href; } function instance($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; validate_slots("Router", slots, []); let { routes = {} } = $$props; let { prefix = "" } = $$props; let { restoreScrollState = false } = $$props; /** * Container for a route: path, component */ class RouteItem { /** * Initializes the object and creates a regular expression from the path, using regexparam. * * @param {string} path - Path to the route (must start with '/' or '*') * @param {SvelteComponent|WrappedComponent} component - Svelte component for the route, optionally wrapped */ constructor(path, component) { if (!component || typeof component != "function" && (typeof component != "object" || component._sveltesparouter !== true)) { throw Error("Invalid component object"); } // Path must be a regular or expression, or a string starting with '/' or '*' if (!path || typeof path == "string" && (path.length < 1 || path.charAt(0) != "/" && path.charAt(0) != "*") || typeof path == "object" && !(path instanceof RegExp)) { throw Error("Invalid value for \"path\" argument"); } const { pattern, keys } = regexparam(path); this.path = path; // Check if the component is wrapped and we have conditions if (typeof component == "object" && component._sveltesparouter === true) { this.component = component.component; this.conditions = component.conditions || []; this.userData = component.userData; this.props = component.props || {}; } else { // Convert the component to a function that returns a Promise, to normalize it this.component = () => Promise.resolve(component); this.conditions = []; this.props = {}; } this._pattern = pattern; this._keys = keys; } /** * Checks if `path` matches the current route. * If there's a match, will return the list of parameters from the URL (if any). * In case of no match, the method will return `null`. * * @param {string} path - Path to test * @returns {null|Object.} List of paramters from the URL if there's a match, or `null` otherwise. */ match(path) { // If there's a prefix, remove it before we run the matching if (prefix) { if (typeof prefix == "string" && path.startsWith(prefix)) { path = path.substr(prefix.length) || "/"; } else if (prefix instanceof RegExp) { const match = path.match(prefix); if (match && match[0]) { path = path.substr(match[0].length) || "/"; } } } // Check if the pattern matches const matches = this._pattern.exec(path); if (matches === null) { return null; } // If the input was a regular expression, this._keys would be false, so return matches as is if (this._keys === false) { return matches; } const out = {}; let i = 0; while (i < this._keys.length) { // In the match parameters, URL-decode all values try { out[this._keys[i]] = decodeURIComponent(matches[i + 1] || "") || null; } catch(e) { out[this._keys[i]] = null; } i++; } return out; } /** * Dictionary with route details passed to the pre-conditions functions, as well as the `routeLoading`, `routeLoaded` and `conditionsFailed` events * @typedef {Object} RouteDetail * @property {string|RegExp} route - Route matched as defined in the route definition (could be a string or a reguar expression object) * @property {string} location - Location path * @property {string} querystring - Querystring from the hash * @property {object} [userData] - Custom data passed by the user * @property {SvelteComponent} [component] - Svelte component (only in `routeLoaded` events) * @property {string} [name] - Name of the Svelte component (only in `routeLoaded` events) */ /** * Executes all conditions (if any) to control whether the route can be shown. Conditions are executed in the order they are defined, and if a condition fails, the following ones aren't executed. * * @param {RouteDetail} detail - Route detail * @returns {bool} Returns true if all the conditions succeeded */ async checkConditions(detail) { for (let i = 0; i < this.conditions.length; i++) { if (!await this.conditions[i](detail)) { return false; } } return true; } } // Set up all routes const routesList = []; if (routes instanceof Map) { // If it's a map, iterate on it right away routes.forEach((route, path) => { routesList.push(new RouteItem(path, route)); }); } else { // We have an object, so iterate on its own properties Object.keys(routes).forEach(path => { routesList.push(new RouteItem(path, routes[path])); }); } // Props for the component to render let component = null; let componentParams = null; let props = {}; // Event dispatcher from Svelte const dispatch = createEventDispatcher(); // Just like dispatch, but executes on the next iteration of the event loop async function dispatchNextTick(name, detail) { // Execute this code when the current call stack is complete await tick(); dispatch(name, detail); } // If this is set, then that means we have popped into this var the state of our last scroll position let previousScrollState = null; if (restoreScrollState) { window.addEventListener("popstate", event => { // If this event was from our history.replaceState, event.state will contain // our scroll history. Otherwise, event.state will be null (like on forward // navigation) if (event.state && event.state.scrollY) { previousScrollState = event.state; } else { previousScrollState = null; } }); afterUpdate(() => { // If this exists, then this is a back navigation: restore the scroll position if (previousScrollState) { window.scrollTo(previousScrollState.scrollX, previousScrollState.scrollY); } else { // Otherwise this is a forward navigation: scroll to top window.scrollTo(0, 0); } }); } // Always have the latest value of loc let lastLoc = null; // Current object of the component loaded let componentObj = null; // Handle hash change events // Listen to changes in the $loc store and update the page // Do not use the $: syntax because it gets triggered by too many things loc.subscribe(async newLoc => { lastLoc = newLoc; // Find a route matching the location let i = 0; while (i < routesList.length) { const match = routesList[i].match(newLoc.location); if (!match) { i++; continue; } const detail = { route: routesList[i].path, location: newLoc.location, querystring: newLoc.querystring, userData: routesList[i].userData }; // Check if the route can be loaded - if all conditions succeed if (!await routesList[i].checkConditions(detail)) { // Don't display anything $$invalidate(0, component = null); componentObj = null; // Trigger an event to notify the user, then exit dispatchNextTick("conditionsFailed", detail); return; } // Trigger an event to alert that we're loading the route // We need to clone the object on every event invocation so we don't risk the object to be modified in the next tick dispatchNextTick("routeLoading", Object.assign({}, detail)); // If there's a component to show while we're loading the route, display it const obj = routesList[i].component; // Do not replace the component if we're loading the same one as before, to avoid the route being unmounted and re-mounted if (componentObj != obj) { if (obj.loading) { $$invalidate(0, component = obj.loading); componentObj = obj; $$invalidate(1, componentParams = obj.loadingParams); $$invalidate(2, props = {}); // Trigger the routeLoaded event for the loading component // Create a copy of detail so we don't modify the object for the dynamic route (and the dynamic route doesn't modify our object too) dispatchNextTick("routeLoaded", Object.assign({}, detail, { component, name: component.name })); } else { $$invalidate(0, component = null); componentObj = null; } // Invoke the Promise const loaded = await obj(); // Now that we're here, after the promise resolved, check if we still want this component, as the user might have navigated to another page in the meanwhile if (newLoc != lastLoc) { // Don't update the component, just exit return; } // If there is a "default" property, which is used by async routes, then pick that $$invalidate(0, component = loaded && loaded.default || loaded); componentObj = obj; } // Set componentParams only if we have a match, to avoid a warning similar to ` was created with unknown prop 'params'` // Of course, this assumes that developers always add a "params" prop when they are expecting parameters if (match && typeof match == "object" && Object.keys(match).length) { $$invalidate(1, componentParams = match); } else { $$invalidate(1, componentParams = null); } // Set static props, if any $$invalidate(2, props = routesList[i].props); // Dispatch the routeLoaded event then exit // We need to clone the object on every event invocation so we don't risk the object to be modified in the next tick dispatchNextTick("routeLoaded", Object.assign({}, detail, { component, name: component.name })); return; } // If we're still here, there was no match, so show the empty component $$invalidate(0, component = null); componentObj = null; }); const writable_props = ["routes", "prefix", "restoreScrollState"]; Object_1.keys($$props).forEach(key => { if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console_1.warn(` was created with unknown prop '${key}'`); }); function routeEvent_handler(event) { bubble($$self, event); } function routeEvent_handler_1(event) { bubble($$self, event); } $$self.$$set = $$props => { if ("routes" in $$props) $$invalidate(3, routes = $$props.routes); if ("prefix" in $$props) $$invalidate(4, prefix = $$props.prefix); if ("restoreScrollState" in $$props) $$invalidate(5, restoreScrollState = $$props.restoreScrollState); }; $$self.$capture_state = () => ({ readable, derived, tick, _wrap: wrap, wrap: wrap$1, getLocation, loc, location, querystring, push, pop, replace, link, updateLink, scrollstateHistoryHandler, createEventDispatcher, afterUpdate, regexparam, routes, prefix, restoreScrollState, RouteItem, routesList, component, componentParams, props, dispatch, dispatchNextTick, previousScrollState, lastLoc, componentObj }); $$self.$inject_state = $$props => { if ("routes" in $$props) $$invalidate(3, routes = $$props.routes); if ("prefix" in $$props) $$invalidate(4, prefix = $$props.prefix); if ("restoreScrollState" in $$props) $$invalidate(5, restoreScrollState = $$props.restoreScrollState); if ("component" in $$props) $$invalidate(0, component = $$props.component); if ("componentParams" in $$props) $$invalidate(1, componentParams = $$props.componentParams); if ("props" in $$props) $$invalidate(2, props = $$props.props); if ("previousScrollState" in $$props) previousScrollState = $$props.previousScrollState; if ("lastLoc" in $$props) lastLoc = $$props.lastLoc; if ("componentObj" in $$props) componentObj = $$props.componentObj; }; if ($$props && "$$inject" in $$props) { $$self.$inject_state($$props.$$inject); } $$self.$$.update = () => { if ($$self.$$.dirty & /*restoreScrollState*/ 32) { // Update history.scrollRestoration depending on restoreScrollState history.scrollRestoration = restoreScrollState ? "manual" : "auto"; } }; return [ component, componentParams, props, routes, prefix, restoreScrollState, routeEvent_handler, routeEvent_handler_1 ]; } class Router extends SvelteComponentDev { constructor(options) { super(options); init(this, options, instance, create_fragment, safe_not_equal, { routes: 3, prefix: 4, restoreScrollState: 5 }); dispatch_dev("SvelteRegisterComponent", { component: this, tagName: "Router", options, id: create_fragment.name }); } get routes() { throw new Error_1(": Props cannot be read directly from the component instance unless compiling with 'accessors: true' or ''"); } set routes(value) { throw new Error_1(": Props cannot be set directly on the component instance unless compiling with 'accessors: true' or ''"); } get prefix() { throw new Error_1(": Props cannot be read directly from the component instance unless compiling with 'accessors: true' or ''"); } set prefix(value) { throw new Error_1(": Props cannot be set directly on the component instance unless compiling with 'accessors: true' or ''"); } get restoreScrollState() { throw new Error_1(": Props cannot be read directly from the component instance unless compiling with 'accessors: true' or ''"); } set restoreScrollState(value) { throw new Error_1(": Props cannot be set directly on the component instance unless compiling with 'accessors: true' or ''"); } } /* src/components/Icon.svelte generated by Svelte v3.30.0 */ const file = "src/components/Icon.svelte"; function create_fragment$1(ctx) { let span; let svg; let use; let use_xlink_href_value; let svg_class_value; let svg_stroke_value; const block = { c: function create() { span = element("span"); svg = svg_element("svg"); use = svg_element("use"); xlink_attr(use, "xlink:href", use_xlink_href_value = "/icons/feather-sprite.svg#" + /*name*/ ctx[7]); add_location(use, file, 32, 2, 670); attr_dev(svg, "class", svg_class_value = "icon-" + /*name*/ ctx[7] + " svelte-1iby9by"); attr_dev(svg, "width", /*size*/ ctx[0]); attr_dev(svg, "height", /*size*/ ctx[0]); attr_dev(svg, "fill", /*fill*/ ctx[1]); attr_dev(svg, "stroke", svg_stroke_value = /*light*/ ctx[3] ? /*light_color*/ ctx[9] : /*color*/ ctx[2]); attr_dev(svg, "stroke-width", /*width*/ ctx[4]); attr_dev(svg, "stroke-linecap", /*linecap*/ ctx[5]); attr_dev(svg, "stroke-linejoin", /*linejoin*/ ctx[6]); toggle_class(svg, "inactive", /*inactive*/ ctx[8]); add_location(svg, file, 23, 2, 436); add_location(span, file, 22, 0, 427); }, l: function claim(nodes) { throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); }, m: function mount(target, anchor) { insert_dev(target, span, anchor); append_dev(span, svg); append_dev(svg, use); }, p: function update(ctx, [dirty]) { if (dirty & /*name*/ 128 && use_xlink_href_value !== (use_xlink_href_value = "/icons/feather-sprite.svg#" + /*name*/ ctx[7])) { xlink_attr(use, "xlink:href", use_xlink_href_value); } if (dirty & /*name*/ 128 && svg_class_value !== (svg_class_value = "icon-" + /*name*/ ctx[7] + " svelte-1iby9by")) { attr_dev(svg, "class", svg_class_value); } if (dirty & /*size*/ 1) { attr_dev(svg, "width", /*size*/ ctx[0]); } if (dirty & /*size*/ 1) { attr_dev(svg, "height", /*size*/ ctx[0]); } if (dirty & /*fill*/ 2) { attr_dev(svg, "fill", /*fill*/ ctx[1]); } if (dirty & /*light, light_color, color*/ 524 && svg_stroke_value !== (svg_stroke_value = /*light*/ ctx[3] ? /*light_color*/ ctx[9] : /*color*/ ctx[2])) { attr_dev(svg, "stroke", svg_stroke_value); } if (dirty & /*width*/ 16) { attr_dev(svg, "stroke-width", /*width*/ ctx[4]); } if (dirty & /*linecap*/ 32) { attr_dev(svg, "stroke-linecap", /*linecap*/ ctx[5]); } if (dirty & /*linejoin*/ 64) { attr_dev(svg, "stroke-linejoin", /*linejoin*/ ctx[6]); } if (dirty & /*name, inactive*/ 384) { toggle_class(svg, "inactive", /*inactive*/ ctx[8]); } }, i: noop, o: noop, d: function destroy(detaching) { if (detaching) detach_dev(span); } }; dispatch_dev("SvelteRegisterBlock", { block, id: create_fragment$1.name, type: "component", source: "", ctx }); return block; } function instance$1($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; validate_slots("Icon", slots, []); let { size = "24" } = $$props; let { fill = "none" } = $$props; let { color = "var(--color)" } = $$props; let { light = false } = $$props; let { width = "2" } = $$props; let { linecap = "round" } = $$props; let { linejoin = "round" } = $$props; let { name } = $$props; let { inactive = false } = $$props; let { light_color = "var(--color)" } = $$props; const writable_props = [ "size", "fill", "color", "light", "width", "linecap", "linejoin", "name", "inactive", "light_color" ]; Object.keys($$props).forEach(key => { if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(` was created with unknown prop '${key}'`); }); $$self.$$set = $$props => { if ("size" in $$props) $$invalidate(0, size = $$props.size); if ("fill" in $$props) $$invalidate(1, fill = $$props.fill); if ("color" in $$props) $$invalidate(2, color = $$props.color); if ("light" in $$props) $$invalidate(3, light = $$props.light); if ("width" in $$props) $$invalidate(4, width = $$props.width); if ("linecap" in $$props) $$invalidate(5, linecap = $$props.linecap); if ("linejoin" in $$props) $$invalidate(6, linejoin = $$props.linejoin); if ("name" in $$props) $$invalidate(7, name = $$props.name); if ("inactive" in $$props) $$invalidate(8, inactive = $$props.inactive); if ("light_color" in $$props) $$invalidate(9, light_color = $$props.light_color); }; $$self.$capture_state = () => ({ size, fill, color, light, width, linecap, linejoin, name, inactive, light_color }); $$self.$inject_state = $$props => { if ("size" in $$props) $$invalidate(0, size = $$props.size); if ("fill" in $$props) $$invalidate(1, fill = $$props.fill); if ("color" in $$props) $$invalidate(2, color = $$props.color); if ("light" in $$props) $$invalidate(3, light = $$props.light); if ("width" in $$props) $$invalidate(4, width = $$props.width); if ("linecap" in $$props) $$invalidate(5, linecap = $$props.linecap); if ("linejoin" in $$props) $$invalidate(6, linejoin = $$props.linejoin); if ("name" in $$props) $$invalidate(7, name = $$props.name); if ("inactive" in $$props) $$invalidate(8, inactive = $$props.inactive); if ("light_color" in $$props) $$invalidate(9, light_color = $$props.light_color); }; if ($$props && "$$inject" in $$props) { $$self.$inject_state($$props.$$inject); } return [ size, fill, color, light, width, linecap, linejoin, name, inactive, light_color ]; } class Icon extends SvelteComponentDev { constructor(options) { super(options); init(this, options, instance$1, create_fragment$1, safe_not_equal, { size: 0, fill: 1, color: 2, light: 3, width: 4, linecap: 5, linejoin: 6, name: 7, inactive: 8, light_color: 9 }); dispatch_dev("SvelteRegisterComponent", { component: this, tagName: "Icon", options, id: create_fragment$1.name }); const { ctx } = this.$$; const props = options.props || {}; if (/*name*/ ctx[7] === undefined && !("name" in props)) { console.warn(" was created without expected prop 'name'"); } } get size() { throw new Error(": Props cannot be read directly from the component instance unless compiling with 'accessors: true' or ''"); } set size(value) { throw new Error(": Props cannot be set directly on the component instance unless compiling with 'accessors: true' or ''"); } get fill() { throw new Error(": Props cannot be read directly from the component instance unless compiling with 'accessors: true' or ''"); } set fill(value) { throw new Error(": Props cannot be set directly on the component instance unless compiling with 'accessors: true' or ''"); } get color() { throw new Error(": Props cannot be read directly from the component instance unless compiling with 'accessors: true' or ''"); } set color(value) { throw new Error(": Props cannot be set directly on the component instance unless compiling with 'accessors: true' or ''"); } get light() { throw new Error(": Props cannot be read directly from the component instance unless compiling with 'accessors: true' or ''"); } set light(value) { throw new Error(": Props cannot be set directly on the component instance unless compiling with 'accessors: true' or ''"); } get width() { throw new Error(": Props cannot be read directly from the component instance unless compiling with 'accessors: true' or ''"); } set width(value) { throw new Error(": Props cannot be set directly on the component instance unless compiling with 'accessors: true' or ''"); } get linecap() { throw new Error(": Props cannot be read directly from the component instance unless compiling with 'accessors: true' or ''"); } set linecap(value) { throw new Error(": Props cannot be set directly on the component instance unless compiling with 'accessors: true' or ''"); } get linejoin() { throw new Error(": Props cannot be read directly from the component instance unless compiling with 'accessors: true' or ''"); } set linejoin(value) { throw new Error(": Props cannot be set directly on the component instance unless compiling with 'accessors: true' or ''"); } get name() { throw new Error(": Props cannot be read directly from the component instance unless compiling with 'accessors: true' or ''"); } set name(value) { throw new Error(": Props cannot be set directly on the component instance unless compiling with 'accessors: true' or ''"); } get inactive() { throw new Error(": Props cannot be read directly from the component instance unless compiling with 'accessors: true' or ''"); } set inactive(value) { throw new Error(": Props cannot be set directly on the component instance unless compiling with 'accessors: true' or ''"); } get light_color() { throw new Error(": Props cannot be read directly from the component instance unless compiling with 'accessors: true' or ''"); } set light_color(value) { throw new Error(": Props cannot be set directly on the component instance unless compiling with 'accessors: true' or ''"); } } /* src/Home.svelte generated by Svelte v3.30.0 */ const file$1 = "src/Home.svelte"; function create_fragment$2(ctx) { let hero; let h10; let t1; let p0; let t2; let b0; let t4; let b1; let t6; let t7; let hr0; let t8; let section0; let aside0; let h30; let t10; let icon0; let t11; let p1; let t12; let a0; let t14; let t15; let aside1; let h31; let t17; let icon1; let t18; let p2; let t19; let a1; let t21; let a2; let t23; let t24; let aside2; let h32; let t26; let icon2; let t27; let p3; let t29; let rationale; let section1; let h11; let t31; let p4; let t32; let b2; let t34; let t35; let p5; let t37; let section2; let aside3; let pre0; let t39; let p6; let t41; let section3; let aside4; let pre1; let t43; let hr1; let t44; let section4; let p7; let t45; let a3; let t47; let t48; let a4; let button; let link_action; let t50; let hr2; let t51; let h12; let t53; let p8; let t55; let ol0; let li0; let t56; let b3; let t58; let t59; let li1; let t60; let b4; let t62; let b5; let t64; let t65; let li2; let t67; let h20; let t69; let p9; let t70; let b6; let t72; let a5; let t74; let t75; let pre2; let code0; let t77; let p10; let t78; let b7; let t80; let b8; let t82; let t83; let pre3; let code1; let t85; let p11; let t86; let b9; let t88; let b10; let t90; let t91; let pre4; let code2; let t93; let p12; let t95; let p13; let t96; let a6; let t98; let t99; let quote0; let t101; let p14; let t102; let a7; let t104; let t105; let p15; let t106; let b11; let t108; let t109; let h33; let t111; let p16; let t112; let b12; let t114; let t115; let ol1; let li3; let t117; let li4; let t119; let li5; let t120; let b13; let t122; let b14; let t124; let t125; let li6; let t127; let li7; let t129; let p17; let t131; let ol2; let li8; let t133; let li9; let t134; let b15; let t136; let li10; let t138; let p18; let t140; let h21; let t142; let p19; let t143; let a8; let t145; let t146; let pre5; let code3; let t148; let p20; let t149; let b16; let t151; let b17; let t153; let t154; let ol3; let li11; let b18; let t156; let t157; let li12; let b19; let t159; let t160; let li13; let t161; let b20; let t163; let b21; let t165; let a9; let t167; let h34; let t169; let p21; let t170; let b22; let t172; let a10; let t174; let b23; let t176; let b24; let t178; let t179; let pre6; let code4; let t181; let pre7; let code5; let t183; let p22; let t184; let b25; let t186; let b26; let t188; let b27; let t190; let b28; let t192; let t193; let p23; let t195; let pre8; let code6; let t197; let p24; let t198; let b29; let t200; let b30; let t202; let t203; let h35; let t205; let p25; let t206; let b31; let t208; let b32; let t210; let b33; let t212; let t213; let pre9; let code7; let t215; let p26; let t216; let b34; let t218; let b35; let t220; let b36; let t222; let t223; let p27; let t224; let a11; let t226; let t227; let pre10; let code8; let t229; let p28; let t230; let b37; let t232; let b38; let t234; let b39; let t236; let b40; let t238; let t239; let h22; let t241; let p29; let t242; let a12; let t244; let a13; let t246; let t247; let quote1; let p30; let t249; let p31; let t251; let p32; let t253; let p33; let t254; let b41; let t256; let em; let t258; let t259; let p34; let t261; let quote2; let ol4; let li14; let t263; let li15; let t265; let li16; let t267; let p35; let t269; let quote3; let ol5; let li17; let t271; let li18; let t273; let li19; let t275; let li20; let t277; let li21; let t279; let li22; let t281; let li23; let t283; let li24; let t285; let p36; let t286; let b42; let t288; let b43; let t290; let b44; let t292; let a14; let t294; let b45; let t296; let t297; let p37; let t298; let b46; let t300; let t301; let ol6; let li25; let t303; let li26; let t305; let li27; let t307; let p38; let t309; let p39; let t310; let b47; let t312; let t313; let ol7; let li28; let t315; let li29; let t317; let p40; let t318; let b48; let t320; let t321; let h23; let t323; let p41; let t325; let ol8; let li30; let t327; let li31; let t328; let b49; let t330; let b50; let t332; let t333; let li32; let t334; let b51; let t336; let t337; let p42; let t338; let b52; let t340; let b53; let t342; let t343; let h24; let t345; let p43; let t347; let ol9; let li33; let b54; let t349; let b55; let t351; let t352; let li34; let b56; let t354; let b57; let t356; let b58; let t358; let t359; let li35; let b59; let t361; let b60; let t363; let t364; let li36; let b61; let t366; let t367; let li37; let b62; let t369; let b63; let t371; let t372; let li38; let b64; let t374; let b65; let t376; let t377; let li39; let b66; let t379; let b67; let t381; let t382; let current; let mounted; let dispose; icon0 = new Icon({ props: { name: "code", size: "64" }, $$inline: true }); icon1 = new Icon({ props: { name: "box", size: "64" }, $$inline: true }); icon2 = new Icon({ props: { name: "sliders", size: "64" }, $$inline: true }); const block = { c: function create() { hero = element("hero"); h10 = element("h1"); h10.textContent = "fsck CSS"; t1 = space(); p0 = element("p"); t2 = text("An experiment in cleaning up CSS and HTML with modern tools like "); b0 = element("b"); b0.textContent = "flexbox"; t4 = text(" and "); b1 = element("b"); b1.textContent = "grids"; t6 = text("."); t7 = space(); hr0 = element("hr"); t8 = space(); section0 = element("section"); aside0 = element("aside"); h30 = element("h3"); h30.textContent = "Remove Classes"; t10 = space(); create_component(icon0.$$.fragment); t11 = space(); p1 = element("p"); t12 = text("Using a classless style like "); a0 = element("a"); a0.textContent = "MVP.css"; t14 = text(", you\n bring back CSS specificity to its original intent."); t15 = space(); aside1 = element("aside"); h31 = element("h3"); h31.textContent = "Add Flexbox + Grids"; t17 = space(); create_component(icon1.$$.fragment); t18 = space(); p2 = element("p"); t19 = text("Using "); a1 = element("a"); a1.textContent = "flexbox"; t21 = text(" and "); a2 = element("a"); a2.textContent = "CSS grids"; t23 = text(" you can layout anything you want without structure divs."); t24 = space(); aside2 = element("aside"); h32 = element("h3"); h32.textContent = "Modify with Variables"; t26 = space(); create_component(icon2.$$.fragment); t27 = space(); p3 = element("p"); p3.textContent = "Using CSS variables you can replace many uses of classes and ids, avoiding most specificity\n issues. Try the dark mode button below."; t29 = space(); rationale = element("rationale"); section1 = element("section"); h11 = element("h1"); h11.textContent = "Cleaner CSS"; t31 = space(); p4 = element("p"); t32 = text("This website is nothing more than a set of small demos for the idea of\n using flexbox and grids to clean up and simplify CSS. Most everything else\n about CSS stays. Filters, transforms, attributes, and everything that\n applies to the visual display of the components of a design. What gets\n removed is "); b2 = element("b"); b2.textContent = "div"; t34 = text(" heavy, class heavy, not-semantic-at-all layout\n systems cluttering the real information available through simple HTML\n tags."); t35 = space(); p5 = element("p"); p5.textContent = "In short, if you're writing this:"; t37 = space(); section2 = element("section"); aside3 = element("aside"); pre0 = element("pre"); pre0.textContent = "
\n
\n ...\n
\n
"; t39 = space(); p6 = element("p"); p6.textContent = "You could write this if you use flexbox, grids, and variables:"; t41 = space(); section3 = element("section"); aside4 = element("aside"); pre1 = element("pre"); pre1.textContent = "\n ...\n"; t43 = space(); hr1 = element("hr"); t44 = space(); section4 = element("section"); p7 = element("p"); t45 = text("I demonstrate the idea with a series of copies of existing websites and other layout problems \n people frequently encounter. If you have a suggested layout challenge for me, then tell me on Twitter "); a3 = element("a"); a3.textContent = "@lzsthw"; t47 = text(" and I'll give it a shot."); t48 = space(); a4 = element("a"); button = element("button"); button.textContent = "View The Demos"; t50 = space(); hr2 = element("hr"); t51 = space(); h12 = element("h1"); h12.textContent = "Discussion"; t53 = space(); p8 = element("p"); p8.textContent = "We can analyze the problems with modern CSS by looking at how popular frameworks use specificity and the cascade:"; t55 = space(); ol0 = element("ol"); li0 = element("li"); t56 = text("Relying on "); b3 = element("b"); b3.textContent = "div"; t58 = text(" to structure layout, which breaks the separation between display and content originally intended for CSS and HTML."); t59 = space(); li1 = element("li"); t60 = text("Relying on "); b4 = element("b"); b4.textContent = "class"; t62 = text(" (or worse "); b5 = element("b"); b5.textContent = "tag.class=tag"; t64 = text(") which subverts the normal specificity rules originally intended to reduce duplication."); t65 = space(); li2 = element("li"); li2.textContent = "Relying on the vaguely defined cascade rules to dominate the entire CSS cascade using #1 and #2."; t67 = space(); h20 = element("h2"); h20.textContent = "
as Structure"; t69 = space(); p9 = element("p"); t70 = text("The simplest criticism is the use of "); b6 = element("b"); b6.textContent = "div"; t72 = text(" as a structure element in the HTML. Take this example from "); a5 = element("a"); a5.textContent = "Bootstrap"; t74 = text(":"); t75 = space(); pre2 = element("pre"); code0 = element("code"); code0.textContent = "
\n
\n
Column
\n
Column
\n
\n
Column
\n
Column
\n
\n
"; t77 = space(); p10 = element("p"); t78 = text("This simple example shows how a large proportion of modern CSS frameworks rely on "); b7 = element("b"); b7.textContent = "div"; t80 = text(" to create structure and layouts when the "); b8 = element("b"); b8.textContent = "div"; t82 = text(" has absolutely nothing to do with the content. Another example from bootstrap is their image carousel:"); t83 = space(); pre3 = element("pre"); code1 = element("code"); code1.textContent = "
\n
\n
\n \"First\n
\n
\n \"Second\n
\n
\n \"Third\n
\n
\n
"; t85 = space(); p11 = element("p"); t86 = text("This snippet of code is 13 lines long of which only 3 are actually image content. It also contains both "); b9 = element("b"); b9.textContent = "id"; t88 = text(" and "); b10 = element("b"); b10.textContent = "class"; t90 = text(" specificity, making it nearly impossible to override when used locally. If you compare that my Carousel demo you can see it much simpler:"); t91 = space(); pre4 = element("pre"); code2 = element("code"); code2.textContent = "\n
\n \"Stock\n
Image 1
\n
\n\n \n
\n \"Stock\n
Image 2
\n
\n \n \n
"; t93 = space(); p12 = element("p"); p12.textContent = "This is the same numbe of lines of code, but every line is clearly idenfitied and easy to understand. Each part of the display is named, matches its use in the display, and is semantically related to the concept of images."; t95 = space(); p13 = element("p"); t96 = text("CSS was designed to be a style sheet language used for describing the presentation of a document. You can read from "); a6 = element("a"); a6.textContent = "Mozilla their own explanation as well"; t98 = text(":"); t99 = space(); quote0 = element("quote"); quote0.textContent = "While HTML is used to define the structure and semantics of your content, CSS is used to style it and lay it out. For example, you can use CSS to alter the font, color, size, and spacing of your content, split it into multiple columns, or add animations and other decorative features."; t101 = space(); p14 = element("p"); t102 = text("The original intent of CSS--and still a major factor in its design--is that the HTML content doesn't have to change to alter the display for different situations. "); a7 = element("a"); a7.textContent = "CSS Zen Garden"; t104 = text(" is the classic example of the principle, with a single HTML document being styled in many different ways using only CSS."); t105 = space(); p15 = element("p"); t106 = text("The above examples from Bootstrap (and most other CSS frameworks) subverts this original CSS design by forcing you to add non-semantic "); b11 = element("b"); b11.textContent = "div"; t108 = text(" tags only to create a display structure (not information structure) for their CSS properties."); t109 = space(); h33 = element("h3"); h33.textContent = "The Impact"; t111 = space(); p16 = element("p"); t112 = text("What's the impact of this "); b12 = element("b"); b12.textContent = "div.class"; t114 = text(" heavy design? By subverting CSS's original separation from the HTML you end up with the following usability problems:"); t115 = space(); ol1 = element("ol"); li3 = element("li"); li3.textContent = "Reasoning about the CSS visuals becomes more difficult due to the overlay of complicated boxes that have nothing to do with the visually perceived content."; t117 = space(); li4 = element("li"); li4.textContent = "Understanding the document structure is more difficult because of the semantically irrelevant structure divs adding noise."; t119 = space(); li5 = element("li"); t120 = text("Changing the structure--or even just fixing it--becomes more challenging since you have to alter "); b13 = element("b"); b13.textContent = "both"; t122 = text(" your own CSS "); b14 = element("b"); b14.textContent = "and"; t124 = text(" the HTML that uses their CSS structure divs."); t125 = space(); li6 = element("li"); li6.textContent = "Debugging layout issues using the browser inspector tool is more difficult because you have to troll through the entire CSS structure div tree to find the style impacting your design decision."; t127 = space(); li7 = element("li"); li7.textContent = "Debugging why your local design changes aren't working becomes a process of trolling through the CSS via the structure divs and slowly turning off CSS rules until you find the one breaking your design."; t129 = space(); p17 = element("p"); p17.textContent = "A succinct way to put all of the above is this infection of CSS rules into the HTML document means you no longer have a single place to go when there's a problem with one, but instead have to constantly work in both to fix anything. If a button isn't the right size, you can't simply go to the CSS and fix it. You have to go to:"; t131 = space(); ol2 = element("ol"); li8 = element("li"); li8.textContent = "Your local CSS"; t133 = space(); li9 = element("li"); t134 = text("Your HTML with their "); b15 = element("b"); b15.textContent = "divs"; t136 = space(); li10 = element("li"); li10.textContent = "Their CSS classes for each div"; t138 = space(); p18 = element("p"); p18.textContent = "This turns one target area for debugging the presentation (the CSS), into 3 potential interacting locations making it more difficult to solve the problem. If you stick to \"layout and style is in CSS\" then when you have a problem with the layout or style...you just go to the CSS."; t140 = space(); h21 = element("h2"); h21.textContent = "class as Configuration"; t142 = space(); p19 = element("p"); t143 = text("Let's take a look at a simple example from "); a8 = element("a"); a8.textContent = "Bulma"; t145 = text(" to explain what's happening:"); t146 = space(); pre5 = element("pre"); code3 = element("code"); code3.textContent = "\n\n"; t148 = space(); p20 = element("p"); t149 = text("In this example we see that Bulma is using "); b16 = element("b"); b16.textContent = "both"; t151 = text(" tags "); b17 = element("b"); b17.textContent = "and"; t153 = text(" classes to style buttons. This means that Bulma effectively corrupts 2/3rds of the specificity rules for its design (not to mention is needlessly repetitive). If you used this code in a part of your app, but needed to slightly change the padding, you'd be forced to struggle with Bulma taking over 2 of the 3 slots reserved for specificity:"); t154 = space(); ol3 = element("ol"); li11 = element("li"); b18 = element("b"); b18.textContent = "button as a tag"; t156 = text(" means Bulma has taken over the specificity at the tag level."); t157 = space(); li12 = element("li"); b19 = element("b"); b19.textContent = "class=button"; t159 = text(" means it's also taken the primary slot of class specificity."); t160 = space(); li13 = element("li"); t161 = text("That leaves you with "); b20 = element("b"); b20.textContent = "id"; t163 = text(" as your only way to modify a button, "); b21 = element("b"); b21.textContent = "!important"; t165 = text(", or strange specificity hacks like doubling your "); a9 = element("a"); a9.textContent = "classes as recommended by Mozilla."; t167 = space(); h34 = element("h3"); h34.textContent = "Mozilla as Patient Zero"; t169 = space(); p21 = element("p"); t170 = text("Mozilla's recommendations are another source of confusion in CSS frameworks and is most likely the "); b22 = element("b"); b22.textContent = "cause of frameworks using structure divs"; t172 = text(". "); a10 = element("a"); a10.textContent = "Mozilla recommends"; t174 = text(" that instead of using "); b23 = element("b"); b23.textContent = "!important"; t176 = text(" you add a structure "); b24 = element("b"); b24.textContent = "div"; t178 = text(" to get one more level of specificity:"); t179 = space(); pre6 = element("pre"); code4 = element("code"); code4.textContent = "
\n Text\n
"; t181 = space(); pre7 = element("pre"); code5 = element("code"); code5.textContent = "div#test span { color: green; }\ndiv span { color: blue; }\nspan { color: red; }"; t183 = space(); p22 = element("p"); t184 = text("In this \"fix\" for "); b25 = element("b"); b25.textContent = "!important"; t186 = text(" your only choice is to wrap the component you want to modify with even more "); b26 = element("b"); b26.textContent = "div"; t188 = text(" structure and then create a more specific path with the new class. The problem with this fix is it overcomplicates the HTML but "); b27 = element("b"); b27.textContent = "also"; t190 = text(" breaks separation of content from style. Rather than keep your content in HTML, and your style in CSS, you're now forced to infect your HTML with helpers for CSS, all because someone else thinks you shouldn't use "); b28 = element("b"); b28.textContent = "!important"; t192 = text(" to override their classes."); t193 = space(); p23 = element("p"); p23.textContent = "The other odd hack they recommend is simply doubling the class:"; t195 = space(); pre8 = element("pre"); code6 = element("code"); code6.textContent = "#myId#myId span { color: yellow; }\n.myClass.myClass span { color: orange; }"; t197 = space(); p24 = element("p"); t198 = text("There's no explanation regarding why this odd quirk of browsers isn't just a hack, but it's put forward as superior to the very clear "); b29 = element("b"); b29.textContent = "!important"; t200 = text(". It'd be incredibly easy to miss this double-class hack if you were trying to find it in the CSS, but finding "); b30 = element("b"); b30.textContent = "!important"; t202 = text(" is trivial to find and fix later if you want. In fact, I can't actually see why this is better if it does the same thing as !important but in a sneaky way."); t203 = space(); h35 = element("h3"); h35.textContent = "The Impact"; t205 = space(); p25 = element("p"); t206 = text("The end result of these recommendations from Mozilla is people solve specificity by adding on more and more "); b31 = element("b"); b31.textContent = "divs"; t208 = text(" because they've used "); b32 = element("b"); b32.textContent = "class"; t210 = text(" everywhere and can't get around the specificity calculations any other way. You can see this in how Bulma uses extra "); b33 = element("b"); b33.textContent = "divs"; t212 = text(" in its forms:"); t213 = space(); pre9 = element("pre"); code7 = element("code"); code7.textContent = "
\n \n
\n
\n \n
\n
\n
"; t215 = space(); p26 = element("p"); t216 = text("You have three levels of "); b34 = element("b"); b34.textContent = "divs"; t218 = text(" just to style a plain "); b35 = element("b"); b35.textContent = "select"; t220 = text(" tag. Most likely the use of classes forces Bulma to add more divs to increase specificity because they have hijacked the class "); b36 = element("b"); b36.textContent = "specificity"; t222 = text(" everywhere."); t223 = space(); p27 = element("p"); t224 = text("Meanwhile, similar styling is done in "); a11 = element("a"); a11.textContent = "MVP.css"; t226 = text(" and other \"classless\" frameworks by using perfectly normal and valid tag based selectors:"); t227 = space(); pre10 = element("pre"); code8 = element("code"); code8.textContent = "select {\n display: block;\n font-size: inherit;\n max-width: var(--width-card-wide);\n border: 1px solid var(--color-bg-secondary);\n border-radius: var(--border-radius);\n margin-bottom: 1rem;\n padding: 0.4rem 0.8rem;\n}"; t229 = space(); p28 = element("p"); t230 = text("We can also say that "); b37 = element("b"); b37.textContent = "if"; t232 = text(" there is some failing of CSS that requires extra class divs then where is the explanation for this limitation? Why can't we just use a simple tag selector to completely alter the appearance of a "); b38 = element("b"); b38.textContent = "select"; t234 = text("? Why is it suddenly these problems go away when I slather on a mountain of "); b39 = element("b"); b39.textContent = "divs"; t236 = text("? If this is really the situation then that means CSS has a serious flaw as the \"styling and layout\" component of the web and everyone advocating for it needs to be honest and stop blaming others for not knowing it well enough. My understanding though is CSS is perfectly fine at styling a "); b40 = element("b"); b40.textContent = "select"; t238 = text(" tag all you want, and it's the way CSS is used today that's causing the problems."); t239 = space(); h22 = element("h2"); h22.textContent = "The Cascade"; t241 = space(); p29 = element("p"); t242 = text("At first glance most of the criticism might seem minor. Who cares if a single .class in a single .css file overrides my local CSS? That'd be fairly easy to find right? Where this turns into a usability nightmare is when "); a12 = element("a"); a12.textContent = "the cascade"; t244 = text(" is added to the system. The cascade's purpose is to allow for CSS styles to come from different sources, but combine in a kind of hierarchy of importance. From "); a13 = element("a"); a13.textContent = "Mozilla's documentation"; t246 = text(" we can see an initial problem:"); t247 = space(); quote1 = element("quote"); p30 = element("p"); p30.textContent = "Only CSS declarations, that is property/value pairs, participate in the cascade. This means that at-rules containing entities other than declarations, such as a @font-face rule containing descriptors, don't participate in the cascade. In these cases, only the at-rule as a whole participates in the cascade: here, the @font-face identified by its font-family descriptor. If several @font-face rules with the same descriptor are defined, only the most appropriate @font-face, as a whole, is considered."; t249 = space(); p31 = element("p"); p31.textContent = "While the declarations contained in most at-rules — such as those in @media, @document, or @supports — participate in the cascade, declarations contained in @keyframes don't. As with @font-face, only the at-rule as a whole is selected via the cascade algorithm."; t251 = space(); p32 = element("p"); p32.textContent = "Finally, note that @import and @charset obey specific algorithms and aren't affected by the cascade algorithm."; t253 = space(); p33 = element("p"); t254 = text("So the cascade combines properties from "); b41 = element("b"); b41.textContent = "different sources"; t256 = text(" but only properties that aren't @at-rules containing "); em = element("em"); em.textContent = "descriptors"; t258 = text(", and @import or @charset follow another set of rules entirely. Got it? Great. So easy and consistent, and we're not done yet."); t259 = space(); p34 = element("p"); p34.textContent = "Mozilla goes on to define the order these rules are processed (minus all the edge cases of @at-rules):"; t261 = space(); quote2 = element("quote"); ol4 = element("ol"); li14 = element("li"); li14.textContent = "It first filters all the rules from the different sources to keep only the rules that apply to a given element."; t263 = space(); li15 = element("li"); li15.textContent = "Then it sorts these rules according to their importance, that is, whether or not they are followed by !important, and by their origin."; t265 = space(); li16 = element("li"); li16.textContent = "In case of equality, the specificity of a value is considered to choose one or the other."; t267 = space(); p35 = element("p"); p35.textContent = "What is this ordering of rules? Why a handy list in this order (which isn't clearly described as being in most or least important ordering):"; t269 = space(); quote3 = element("quote"); ol5 = element("ol"); li17 = element("li"); li17.textContent = "user agent == normal"; t271 = space(); li18 = element("li"); li18.textContent = "user == normal"; t273 = space(); li19 = element("li"); li19.textContent = "author == normal"; t275 = space(); li20 = element("li"); li20.textContent = "animations =="; t277 = space(); li21 = element("li"); li21.textContent = "author == !important"; t279 = space(); li22 = element("li"); li22.textContent = "user == !important"; t281 = space(); li23 = element("li"); li23.textContent = "user agent == !important"; t283 = space(); li24 = element("li"); li24.textContent = "transitions"; t285 = space(); p36 = element("p"); t286 = text("However, these calculations are completely pointless because "); b42 = element("b"); b42.textContent = "user style sheets have been slowly phased out."; t288 = text(" A \"user style\" is a piece of CSS that someone who is "); b43 = element("b"); b43.textContent = "using"; t290 = text(" a browser adds--on their own computer--to change the defaults set by the "); b44 = element("b"); b44.textContent = "author"; t292 = text(" of the site. The catch is, Chrome "); a14 = element("a"); a14.textContent = "does not support user style sheets"; t294 = text(", and it's the most popular browser. That means they are completely dead for practical purposes. That leaves the user agent, which is usually reset by designers anyway, and \"author\" styles which is simply, "); b45 = element("b"); b45.textContent = "\"all of the CSS you write\""; t296 = text("."); t297 = space(); p37 = element("p"); t298 = text("The confusing part of this description is it makes it "); b46 = element("b"); b46.textContent = "seem"; t300 = text(" like someone writing a web page is having to contend with these rules that include user styles when you actually have zero control over them, so they don't matter. The real calculations for practical purposes should be (from least to most important):"); t301 = space(); ol6 = element("ol"); li25 = element("li"); li25.textContent = "Sort by !important."; t303 = space(); li26 = element("li"); li26.textContent = "Sort by specificity."; t305 = space(); li27 = element("li"); li27.textContent = "Sort by order, later wins over earlier."; t307 = space(); p38 = element("p"); p38.textContent = "That's it. User agent styles are so low level they are easily replaced with a reset style. No user agents have !important rules (that I know of), and if they do this means you probably can't change them anyway. You can't control user styles as that's added by the user out of your control, so trying to add them to your calculations is meaningless. That leaves only the rules for cascade precedence in the CSS you write, and this simplifies the ordering."; t309 = space(); p39 = element("p"); t310 = text("Remember how you were admonished to never use "); b47 = element("b"); b47.textContent = "!important"; t312 = text("? If you follow that edict, then, that means we finally arrive at only two sorting rules:"); t313 = space(); ol7 = element("ol"); li28 = element("li"); li28.textContent = "Sort by specificity."; t315 = space(); li29 = element("li"); li29.textContent = "Sort by order, later wins over earlier."; t317 = space(); p40 = element("p"); t318 = text("But finally, the last rule of sorting by order is "); b48 = element("b"); b48.textContent = "only if there's a tie"; t320 = text(" in the previous sorting. That means there's really only 1 rule, or maybe 1.5 rules, where you sort by specificity only and then order wins in a tie."); t321 = space(); h23 = element("h2"); h23.textContent = "The Impact"; t323 = space(); p41 = element("p"); p41.textContent = "I call these simplified practical rules the \"real cascade\" because they're the practical sorting rules you actually have to deal with, and they also help finally describe how modern CSS breaks this sorting cascade to make CSS harder:"; t325 = space(); ol8 = element("ol"); li30 = element("li"); li30.textContent = "If we sort by !important, but nobody uses !important, then the only sorting done is by specificity."; t327 = space(); li31 = element("li"); t328 = text("If we sort by specificity 99% of the time, then modern CSS forces itself into the second highest priority of the sorting calculation leaving no room for your own local "); b49 = element("b"); b49.textContent = "class"; t330 = text(" or "); b50 = element("b"); b50.textContent = "tag"; t332 = text(" styles."); t333 = space(); li32 = element("li"); t334 = text("If we then sort by order of declaration "); b51 = element("b"); b51.textContent = "on specificity ties"; t336 = text(" it doesn't matter because #2 means the CSS framework will win unless we add an additional structure div to increase specificity, use the double-class trick, or add !important (which everyone says not to do)."); t337 = space(); p42 = element("p"); t338 = text("Effectively, this situation promotes CSS frameworks winning over your own styles, encourages convoluted nested "); b52 = element("b"); b52.textContent = "div"; t340 = text(" structure to hack specificity, and complicates cascade calculations needlessly by changing the priority of an author style that uses "); b53 = element("b"); b53.textContent = "div.class"; t342 = text(" such that it's difficult to modify design elements locally."); t343 = space(); h24 = element("h2"); h24.textContent = "An Alternative Approach"; t345 = space(); p43 = element("p"); p43.textContent = "Can we simplify CSS usage to avoid as many pitfalls as possible while still allowing for modern visual presentation? Since CSS lacks clear rules for the cascade, and has overly complicated rules governing the calculations of specificity using these unclear cascade rules, a good approach is to simply avoid as many of these rules as possible. We can do this by realizing that...we can just not use most of this:"; t347 = space(); ol9 = element("ol"); li33 = element("li"); b54 = element("b"); b54.textContent = "Simplify specificity"; t349 = text(" by using tag selectors (aka type selectors) instead "); b55 = element("b"); b55.textContent = "classes"; t351 = text("."); t352 = space(); li34 = element("li"); b56 = element("b"); b56.textContent = "Simplify HTML"; t354 = text(" by using actual "); b57 = element("b"); b57.textContent = ""; t356 = text(" instead of "); b58 = element("b"); b58.textContent = ""; t358 = text("."); t359 = space(); li35 = element("li"); b59 = element("b"); b59.textContent = "Simplify layout and HTML"; t361 = text(" by using flexbox and CSS grids instead of convoluted structure "); b60 = element("b"); b60.textContent = "divs"; t363 = text("."); t364 = space(); li36 = element("li"); b61 = element("b"); b61.textContent = "Simplify visual reasoning"; t366 = text(" by naming tags to match their actual role in the visual display."); t367 = space(); li37 = element("li"); b62 = element("b"); b62.textContent = "Simplify interactions"; t369 = text(" by using "); b63 = element("b"); b63.textContent = "class"; t371 = text(" sparingly for variants or state changes."); t372 = space(); li38 = element("li"); b64 = element("b"); b64.textContent = "Simplify extension and modification"; t374 = text(" by using "); b65 = element("b"); b65.textContent = "id"; t376 = text(" for specific local elements that have their own style changes overriding the previous definitions."); t377 = space(); li39 = element("li"); b66 = element("b"); b66.textContent = "Simplify development"; t379 = text(" by adding more complicated CSS "); b67 = element("b"); b67.textContent = "after"; t381 = text(" you get simpler CSS working."); t382 = text("\n\nLinks:\n\nhttps://www.w3.org/TR/CSS22/cascade.html#specificity"); attr_dev(h10, "class", "svelte-1nza6iy"); add_location(h10, file$1, 41, 0, 660); add_location(b0, file$1, 42, 68, 746); add_location(b1, file$1, 42, 87, 765); add_location(p0, file$1, 42, 0, 678); attr_dev(hero, "class", "svelte-1nza6iy"); add_location(hero, file$1, 40, 0, 653); add_location(hr0, file$1, 45, 0, 792); add_location(h30, file$1, 49, 4, 822); attr_dev(a0, "href", "https://andybrewer.github.io/mvp/"); attr_dev(a0, "class", "svelte-1nza6iy"); add_location(a0, file$1, 51, 36, 917); add_location(p1, file$1, 51, 4, 885); attr_dev(aside0, "class", "svelte-1nza6iy"); add_location(aside0, file$1, 48, 2, 810); add_location(h31, file$1, 56, 4, 1065); attr_dev(a1, "href", "https://css-tricks.com/snippets/css/a-guide-to-flexbox/"); attr_dev(a1, "class", "svelte-1nza6iy"); add_location(a1, file$1, 58, 13, 1141); attr_dev(a2, "href", "https://css-tricks.com/snippets/css/complete-guide-grid/"); attr_dev(a2, "class", "svelte-1nza6iy"); add_location(a2, file$1, 58, 95, 1223); add_location(p2, file$1, 58, 4, 1132); attr_dev(aside1, "class", "svelte-1nza6iy"); add_location(aside1, file$1, 55, 2, 1053); add_location(h32, file$1, 62, 4, 1391); add_location(p3, file$1, 64, 4, 1464); add_location(aside2, file$1, 61, 2, 1379); add_location(section0, file$1, 47, 0, 798); add_location(h11, file$1, 73, 2, 1662); add_location(section1, file$1, 72, 0, 1650); add_location(b2, file$1, 80, 13, 2006); add_location(p4, file$1, 76, 0, 1695); add_location(p5, file$1, 84, 0, 2149); add_location(pre0, file$1, 88, 4, 2215); add_location(aside3, file$1, 87, 2, 2203); add_location(section2, file$1, 86, 0, 2191); add_location(p6, file$1, 98, 0, 2347); add_location(pre1, file$1, 102, 4, 2442); add_location(aside4, file$1, 101, 2, 2430); add_location(section3, file$1, 100, 0, 2418); add_location(hr1, file$1, 110, 0, 2515); attr_dev(a3, "href", "https://twitter.com/lzsthw"); add_location(a3, file$1, 113, 107, 2737); add_location(p7, file$1, 112, 2, 2532); add_location(button, file$1, 115, 28, 2846); attr_dev(a4, "href", "/demos"); add_location(a4, file$1, 115, 2, 2820); add_location(section4, file$1, 111, 0, 2520); add_location(hr2, file$1, 118, 0, 2894); add_location(h12, file$1, 119, 0, 2899); add_location(p8, file$1, 121, 0, 2920); add_location(b3, file$1, 123, 17, 3063); add_location(li0, file$1, 123, 2, 3048); add_location(b4, file$1, 124, 17, 3211); add_location(b5, file$1, 124, 40, 3234); add_location(li1, file$1, 124, 2, 3196); add_location(li2, file$1, 125, 2, 3350); add_location(ol0, file$1, 122, 0, 3041); add_location(h20, file$1, 128, 0, 3463); add_location(b6, file$1, 130, 40, 3538); attr_dev(a5, "href", "https://getbootstrap.com/docs/4.0/layout/grid/"); add_location(a5, file$1, 130, 111, 3609); add_location(p9, file$1, 130, 0, 3498); attr_dev(code0, "class", "language-html svelte-1nza6iy"); add_location(code0, file$1, 133, 0, 3692); attr_dev(pre2, "class", "svelte-1nza6iy"); add_location(pre2, file$1, 132, 0, 3686); add_location(b7, file$1, 146, 85, 4132); add_location(b8, file$1, 146, 137, 4184); add_location(p10, file$1, 146, 0, 4047); attr_dev(code1, "class", "language-html svelte-1nza6iy"); add_location(code1, file$1, 149, 0, 4310); attr_dev(pre3, "class", "svelte-1nza6iy"); add_location(pre3, file$1, 148, 0, 4304); add_location(b9, file$1, 166, 108, 4992); add_location(b10, file$1, 166, 122, 5006); add_location(p11, file$1, 166, 0, 4884); attr_dev(code2, "class", "language-html svelte-1nza6iy"); add_location(code2, file$1, 169, 0, 5168); attr_dev(pre4, "class", "svelte-1nza6iy"); add_location(pre4, file$1, 168, 0, 5162); add_location(p12, file$1, 187, 0, 5720); attr_dev(a6, "href", "https://developer.mozilla.org/en-US/docs/Learn/CSS"); add_location(a6, file$1, 189, 120, 6071); add_location(p13, file$1, 189, 0, 5951); attr_dev(quote0, "class", "svelte-1nza6iy"); add_location(quote0, file$1, 191, 0, 6180); attr_dev(a7, "href", "https://developer.mozilla.org/en-US/docs/Learn/CSS"); add_location(a7, file$1, 195, 167, 6652); add_location(p14, file$1, 195, 0, 6485); add_location(b11, file$1, 197, 138, 6996); add_location(p15, file$1, 197, 0, 6858); add_location(h33, file$1, 199, 0, 7106); add_location(b12, file$1, 201, 29, 7156); add_location(p16, file$1, 201, 0, 7127); add_location(li3, file$1, 204, 2, 7304); add_location(li4, file$1, 205, 2, 7471); add_location(b13, file$1, 206, 103, 7706); add_location(b14, file$1, 206, 128, 7731); add_location(li5, file$1, 206, 2, 7605); add_location(li6, file$1, 207, 2, 7794); add_location(li7, file$1, 208, 2, 7998); add_location(ol1, file$1, 203, 0, 7297); add_location(p17, file$1, 211, 0, 8216); add_location(li8, file$1, 214, 2, 8562); add_location(b15, file$1, 215, 27, 8613); add_location(li9, file$1, 215, 2, 8588); add_location(li10, file$1, 216, 2, 8632); add_location(ol2, file$1, 213, 0, 8555); add_location(p18, file$1, 219, 0, 8679); add_location(h21, file$1, 221, 0, 8968); attr_dev(a8, "href", "https://bulma.io/documentation/overview/modular/"); add_location(a8, file$1, 223, 46, 9047); add_location(p19, file$1, 223, 0, 9001); attr_dev(code3, "class", "language-html svelte-1nza6iy"); add_location(code3, file$1, 226, 4, 9160); attr_dev(pre5, "class", "svelte-1nza6iy"); add_location(pre5, file$1, 225, 0, 9150); add_location(b16, file$1, 237, 46, 9385); add_location(b17, file$1, 237, 63, 9402); add_location(p20, file$1, 237, 0, 9339); add_location(b18, file$1, 240, 6, 9772); add_location(li11, file$1, 240, 2, 9768); add_location(b19, file$1, 241, 6, 9867); add_location(li12, file$1, 241, 2, 9863); add_location(b20, file$1, 242, 27, 9980); add_location(b21, file$1, 242, 74, 10027); attr_dev(a9, "href", "https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity#The_!important_exception"); add_location(a9, file$1, 242, 141, 10094); add_location(li13, file$1, 242, 2, 9955); add_location(ol3, file$1, 239, 0, 9761); add_location(h34, file$1, 245, 0, 10241); add_location(b22, file$1, 247, 102, 10377); attr_dev(a10, "href", "https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity#The_!important_exception"); add_location(a10, file$1, 247, 152, 10427); add_location(b23, file$1, 247, 293, 10568); add_location(b24, file$1, 247, 331, 10606); add_location(p21, file$1, 247, 0, 10275); attr_dev(code4, "class", "language-html svelte-1nza6iy"); add_location(code4, file$1, 250, 0, 10666); attr_dev(pre6, "class", "svelte-1nza6iy"); add_location(pre6, file$1, 249, 0, 10660); attr_dev(code5, "class", "language-css svelte-1nza6iy"); add_location(code5, file$1, 258, 0, 10784); attr_dev(pre7, "class", "svelte-1nza6iy"); add_location(pre7, file$1, 257, 0, 10778); add_location(b25, file$1, 265, 21, 10970); add_location(b26, file$1, 265, 115, 11064); add_location(b27, file$1, 265, 255, 11204); add_location(b28, file$1, 265, 481, 11430); add_location(p22, file$1, 265, 0, 10949); add_location(p23, file$1, 267, 0, 11480); attr_dev(code6, "class", "language-css svelte-1nza6iy"); add_location(code6, file$1, 270, 0, 11558); attr_dev(pre8, "class", "svelte-1nza6iy"); add_location(pre8, file$1, 269, 0, 11552); add_location(b29, file$1, 276, 137, 11829); add_location(b30, file$1, 276, 266, 11958); add_location(p24, file$1, 276, 0, 11692); add_location(h35, file$1, 278, 0, 12137); add_location(b31, file$1, 280, 111, 12269); add_location(b32, file$1, 280, 144, 12302); add_location(b33, file$1, 280, 274, 12432); add_location(p25, file$1, 280, 0, 12158); attr_dev(code7, "class", "language-html svelte-1nza6iy"); add_location(code7, file$1, 283, 0, 12469); attr_dev(pre9, "class", "svelte-1nza6iy"); add_location(pre9, file$1, 282, 0, 12463); add_location(b34, file$1, 298, 28, 12871); add_location(b35, file$1, 298, 62, 12905); add_location(b36, file$1, 298, 204, 13047); add_location(p26, file$1, 298, 0, 12843); attr_dev(a11, "href", "https://andybrewer.github.io/mvp/"); add_location(a11, file$1, 301, 41, 13125); add_location(p27, file$1, 301, 0, 13084); attr_dev(code8, "class", "language-css svelte-1nza6iy"); add_location(code8, file$1, 304, 0, 13282); attr_dev(pre10, "class", "svelte-1nza6iy"); add_location(pre10, file$1, 303, 0, 13276); add_location(b37, file$1, 317, 24, 13601); add_location(b38, file$1, 317, 230, 13807); add_location(b39, file$1, 317, 320, 13897); add_location(b40, file$1, 317, 623, 14200); add_location(p28, file$1, 317, 0, 13577); add_location(h22, file$1, 319, 0, 14301); attr_dev(a12, "href", "https://developer.mozilla.org/en-US/docs/Web/CSS/Cascade"); add_location(a12, file$1, 321, 226, 14549); attr_dev(a13, "href", "https://developer.mozilla.org/en-US/docs/Web/CSS/Cascade"); add_location(a13, file$1, 321, 471, 14794); add_location(p29, file$1, 321, 0, 14323); add_location(p30, file$1, 324, 0, 14933); add_location(p31, file$1, 326, 0, 15443); add_location(p32, file$1, 328, 0, 15713); attr_dev(quote1, "class", "svelte-1nza6iy"); add_location(quote1, file$1, 323, 0, 14925); add_location(b41, file$1, 331, 43, 15884); add_location(em, file$1, 331, 121, 15962); add_location(p33, file$1, 331, 0, 15841); add_location(p34, file$1, 333, 0, 16116); add_location(li14, file$1, 337, 2, 16242); add_location(li15, file$1, 338, 2, 16365); add_location(li16, file$1, 339, 2, 16511); add_location(ol4, file$1, 336, 0, 16235); attr_dev(quote2, "class", "svelte-1nza6iy"); add_location(quote2, file$1, 335, 0, 16227); add_location(p35, file$1, 343, 0, 16626); add_location(li17, file$1, 347, 2, 16791); add_location(li18, file$1, 348, 2, 16823); add_location(li19, file$1, 349, 2, 16849); add_location(li20, file$1, 350, 2, 16877); add_location(li21, file$1, 351, 2, 16903); add_location(li22, file$1, 352, 2, 16935); add_location(li23, file$1, 353, 2, 16965); add_location(li24, file$1, 354, 2, 17001); add_location(ol5, file$1, 346, 0, 16784); attr_dev(quote3, "class", "svelte-1nza6iy"); add_location(quote3, file$1, 345, 0, 16776); add_location(b42, file$1, 358, 64, 17102); add_location(b43, file$1, 358, 171, 17209); add_location(b44, file$1, 358, 257, 17295); attr_dev(a14, "href", "https://bugs.chromium.org/p/chromium/issues/detail?id=347016"); add_location(a14, file$1, 358, 305, 17343); add_location(b45, file$1, 358, 621, 17659); add_location(p36, file$1, 358, 0, 17038); add_location(b46, file$1, 360, 57, 17756); add_location(p37, file$1, 360, 0, 17699); add_location(li25, file$1, 363, 2, 18032); add_location(li26, file$1, 364, 2, 18063); add_location(li27, file$1, 365, 2, 18095); add_location(ol6, file$1, 362, 0, 18025); add_location(p38, file$1, 368, 0, 18151); add_location(b47, file$1, 370, 49, 18667); add_location(p39, file$1, 370, 0, 18618); add_location(li28, file$1, 373, 2, 18787); add_location(li29, file$1, 374, 2, 18819); add_location(ol7, file$1, 372, 0, 18780); add_location(b48, file$1, 377, 53, 18928); add_location(p40, file$1, 377, 0, 18875); add_location(h23, file$1, 380, 0, 19113); add_location(p41, file$1, 382, 0, 19134); add_location(li30, file$1, 385, 2, 19383); add_location(b49, file$1, 386, 174, 19666); add_location(b50, file$1, 386, 190, 19682); add_location(li31, file$1, 386, 2, 19494); add_location(b51, file$1, 387, 46, 19752); add_location(li32, file$1, 387, 2, 19708); add_location(ol8, file$1, 384, 0, 19376); add_location(b52, file$1, 390, 114, 20113); add_location(b53, file$1, 390, 258, 20257); add_location(p42, file$1, 390, 0, 19999); add_location(h24, file$1, 392, 0, 20339); add_location(p43, file$1, 394, 0, 20373); add_location(b54, file$1, 397, 6, 20806); add_location(b55, file$1, 397, 86, 20886); add_location(li33, file$1, 397, 2, 20802); add_location(b56, file$1, 398, 6, 20913); add_location(b57, file$1, 398, 43, 20950); add_location(b58, file$1, 398, 74, 20981); add_location(li34, file$1, 398, 2, 20909); add_location(b59, file$1, 399, 6, 21036); add_location(b60, file$1, 399, 101, 21131); add_location(li35, file$1, 399, 2, 21032); add_location(b61, file$1, 400, 6, 21155); add_location(li36, file$1, 400, 2, 21151); add_location(b62, file$1, 401, 6, 21264); add_location(b63, file$1, 401, 44, 21302); add_location(li37, file$1, 401, 2, 21260); add_location(b64, file$1, 402, 6, 21367); add_location(b65, file$1, 402, 58, 21419); add_location(li38, file$1, 402, 2, 21363); add_location(b66, file$1, 403, 6, 21539); add_location(b67, file$1, 403, 65, 21598); add_location(li39, file$1, 403, 2, 21535); add_location(ol9, file$1, 396, 0, 20795); attr_dev(rationale, "class", "svelte-1nza6iy"); add_location(rationale, file$1, 71, 0, 1638); }, l: function claim(nodes) { throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); }, m: function mount(target, anchor) { insert_dev(target, hero, anchor); append_dev(hero, h10); append_dev(hero, t1); append_dev(hero, p0); append_dev(p0, t2); append_dev(p0, b0); append_dev(p0, t4); append_dev(p0, b1); append_dev(p0, t6); insert_dev(target, t7, anchor); insert_dev(target, hr0, anchor); insert_dev(target, t8, anchor); insert_dev(target, section0, anchor); append_dev(section0, aside0); append_dev(aside0, h30); append_dev(aside0, t10); mount_component(icon0, aside0, null); append_dev(aside0, t11); append_dev(aside0, p1); append_dev(p1, t12); append_dev(p1, a0); append_dev(p1, t14); append_dev(section0, t15); append_dev(section0, aside1); append_dev(aside1, h31); append_dev(aside1, t17); mount_component(icon1, aside1, null); append_dev(aside1, t18); append_dev(aside1, p2); append_dev(p2, t19); append_dev(p2, a1); append_dev(p2, t21); append_dev(p2, a2); append_dev(p2, t23); append_dev(section0, t24); append_dev(section0, aside2); append_dev(aside2, h32); append_dev(aside2, t26); mount_component(icon2, aside2, null); append_dev(aside2, t27); append_dev(aside2, p3); insert_dev(target, t29, anchor); insert_dev(target, rationale, anchor); append_dev(rationale, section1); append_dev(section1, h11); append_dev(rationale, t31); append_dev(rationale, p4); append_dev(p4, t32); append_dev(p4, b2); append_dev(p4, t34); append_dev(rationale, t35); append_dev(rationale, p5); append_dev(rationale, t37); append_dev(rationale, section2); append_dev(section2, aside3); append_dev(aside3, pre0); append_dev(rationale, t39); append_dev(rationale, p6); append_dev(rationale, t41); append_dev(rationale, section3); append_dev(section3, aside4); append_dev(aside4, pre1); append_dev(rationale, t43); append_dev(rationale, hr1); append_dev(rationale, t44); append_dev(rationale, section4); append_dev(section4, p7); append_dev(p7, t45); append_dev(p7, a3); append_dev(p7, t47); append_dev(section4, t48); append_dev(section4, a4); append_dev(a4, button); append_dev(rationale, t50); append_dev(rationale, hr2); append_dev(rationale, t51); append_dev(rationale, h12); append_dev(rationale, t53); append_dev(rationale, p8); append_dev(rationale, t55); append_dev(rationale, ol0); append_dev(ol0, li0); append_dev(li0, t56); append_dev(li0, b3); append_dev(li0, t58); append_dev(ol0, t59); append_dev(ol0, li1); append_dev(li1, t60); append_dev(li1, b4); append_dev(li1, t62); append_dev(li1, b5); append_dev(li1, t64); append_dev(ol0, t65); append_dev(ol0, li2); append_dev(rationale, t67); append_dev(rationale, h20); append_dev(rationale, t69); append_dev(rationale, p9); append_dev(p9, t70); append_dev(p9, b6); append_dev(p9, t72); append_dev(p9, a5); append_dev(p9, t74); append_dev(rationale, t75); append_dev(rationale, pre2); append_dev(pre2, code0); append_dev(rationale, t77); append_dev(rationale, p10); append_dev(p10, t78); append_dev(p10, b7); append_dev(p10, t80); append_dev(p10, b8); append_dev(p10, t82); append_dev(rationale, t83); append_dev(rationale, pre3); append_dev(pre3, code1); append_dev(rationale, t85); append_dev(rationale, p11); append_dev(p11, t86); append_dev(p11, b9); append_dev(p11, t88); append_dev(p11, b10); append_dev(p11, t90); append_dev(rationale, t91); append_dev(rationale, pre4); append_dev(pre4, code2); append_dev(rationale, t93); append_dev(rationale, p12); append_dev(rationale, t95); append_dev(rationale, p13); append_dev(p13, t96); append_dev(p13, a6); append_dev(p13, t98); append_dev(rationale, t99); append_dev(rationale, quote0); append_dev(rationale, t101); append_dev(rationale, p14); append_dev(p14, t102); append_dev(p14, a7); append_dev(p14, t104); append_dev(rationale, t105); append_dev(rationale, p15); append_dev(p15, t106); append_dev(p15, b11); append_dev(p15, t108); append_dev(rationale, t109); append_dev(rationale, h33); append_dev(rationale, t111); append_dev(rationale, p16); append_dev(p16, t112); append_dev(p16, b12); append_dev(p16, t114); append_dev(rationale, t115); append_dev(rationale, ol1); append_dev(ol1, li3); append_dev(ol1, t117); append_dev(ol1, li4); append_dev(ol1, t119); append_dev(ol1, li5); append_dev(li5, t120); append_dev(li5, b13); append_dev(li5, t122); append_dev(li5, b14); append_dev(li5, t124); append_dev(ol1, t125); append_dev(ol1, li6); append_dev(ol1, t127); append_dev(ol1, li7); append_dev(rationale, t129); append_dev(rationale, p17); append_dev(rationale, t131); append_dev(rationale, ol2); append_dev(ol2, li8); append_dev(ol2, t133); append_dev(ol2, li9); append_dev(li9, t134); append_dev(li9, b15); append_dev(ol2, t136); append_dev(ol2, li10); append_dev(rationale, t138); append_dev(rationale, p18); append_dev(rationale, t140); append_dev(rationale, h21); append_dev(rationale, t142); append_dev(rationale, p19); append_dev(p19, t143); append_dev(p19, a8); append_dev(p19, t145); append_dev(rationale, t146); append_dev(rationale, pre5); append_dev(pre5, code3); append_dev(rationale, t148); append_dev(rationale, p20); append_dev(p20, t149); append_dev(p20, b16); append_dev(p20, t151); append_dev(p20, b17); append_dev(p20, t153); append_dev(rationale, t154); append_dev(rationale, ol3); append_dev(ol3, li11); append_dev(li11, b18); append_dev(li11, t156); append_dev(ol3, t157); append_dev(ol3, li12); append_dev(li12, b19); append_dev(li12, t159); append_dev(ol3, t160); append_dev(ol3, li13); append_dev(li13, t161); append_dev(li13, b20); append_dev(li13, t163); append_dev(li13, b21); append_dev(li13, t165); append_dev(li13, a9); append_dev(rationale, t167); append_dev(rationale, h34); append_dev(rationale, t169); append_dev(rationale, p21); append_dev(p21, t170); append_dev(p21, b22); append_dev(p21, t172); append_dev(p21, a10); append_dev(p21, t174); append_dev(p21, b23); append_dev(p21, t176); append_dev(p21, b24); append_dev(p21, t178); append_dev(rationale, t179); append_dev(rationale, pre6); append_dev(pre6, code4); append_dev(rationale, t181); append_dev(rationale, pre7); append_dev(pre7, code5); append_dev(rationale, t183); append_dev(rationale, p22); append_dev(p22, t184); append_dev(p22, b25); append_dev(p22, t186); append_dev(p22, b26); append_dev(p22, t188); append_dev(p22, b27); append_dev(p22, t190); append_dev(p22, b28); append_dev(p22, t192); append_dev(rationale, t193); append_dev(rationale, p23); append_dev(rationale, t195); append_dev(rationale, pre8); append_dev(pre8, code6); append_dev(rationale, t197); append_dev(rationale, p24); append_dev(p24, t198); append_dev(p24, b29); append_dev(p24, t200); append_dev(p24, b30); append_dev(p24, t202); append_dev(rationale, t203); append_dev(rationale, h35); append_dev(rationale, t205); append_dev(rationale, p25); append_dev(p25, t206); append_dev(p25, b31); append_dev(p25, t208); append_dev(p25, b32); append_dev(p25, t210); append_dev(p25, b33); append_dev(p25, t212); append_dev(rationale, t213); append_dev(rationale, pre9); append_dev(pre9, code7); append_dev(rationale, t215); append_dev(rationale, p26); append_dev(p26, t216); append_dev(p26, b34); append_dev(p26, t218); append_dev(p26, b35); append_dev(p26, t220); append_dev(p26, b36); append_dev(p26, t222); append_dev(rationale, t223); append_dev(rationale, p27); append_dev(p27, t224); append_dev(p27, a11); append_dev(p27, t226); append_dev(rationale, t227); append_dev(rationale, pre10); append_dev(pre10, code8); append_dev(rationale, t229); append_dev(rationale, p28); append_dev(p28, t230); append_dev(p28, b37); append_dev(p28, t232); append_dev(p28, b38); append_dev(p28, t234); append_dev(p28, b39); append_dev(p28, t236); append_dev(p28, b40); append_dev(p28, t238); append_dev(rationale, t239); append_dev(rationale, h22); append_dev(rationale, t241); append_dev(rationale, p29); append_dev(p29, t242); append_dev(p29, a12); append_dev(p29, t244); append_dev(p29, a13); append_dev(p29, t246); append_dev(rationale, t247); append_dev(rationale, quote1); append_dev(quote1, p30); append_dev(quote1, t249); append_dev(quote1, p31); append_dev(quote1, t251); append_dev(quote1, p32); append_dev(rationale, t253); append_dev(rationale, p33); append_dev(p33, t254); append_dev(p33, b41); append_dev(p33, t256); append_dev(p33, em); append_dev(p33, t258); append_dev(rationale, t259); append_dev(rationale, p34); append_dev(rationale, t261); append_dev(rationale, quote2); append_dev(quote2, ol4); append_dev(ol4, li14); append_dev(ol4, t263); append_dev(ol4, li15); append_dev(ol4, t265); append_dev(ol4, li16); append_dev(rationale, t267); append_dev(rationale, p35); append_dev(rationale, t269); append_dev(rationale, quote3); append_dev(quote3, ol5); append_dev(ol5, li17); append_dev(ol5, t271); append_dev(ol5, li18); append_dev(ol5, t273); append_dev(ol5, li19); append_dev(ol5, t275); append_dev(ol5, li20); append_dev(ol5, t277); append_dev(ol5, li21); append_dev(ol5, t279); append_dev(ol5, li22); append_dev(ol5, t281); append_dev(ol5, li23); append_dev(ol5, t283); append_dev(ol5, li24); append_dev(rationale, t285); append_dev(rationale, p36); append_dev(p36, t286); append_dev(p36, b42); append_dev(p36, t288); append_dev(p36, b43); append_dev(p36, t290); append_dev(p36, b44); append_dev(p36, t292); append_dev(p36, a14); append_dev(p36, t294); append_dev(p36, b45); append_dev(p36, t296); append_dev(rationale, t297); append_dev(rationale, p37); append_dev(p37, t298); append_dev(p37, b46); append_dev(p37, t300); append_dev(rationale, t301); append_dev(rationale, ol6); append_dev(ol6, li25); append_dev(ol6, t303); append_dev(ol6, li26); append_dev(ol6, t305); append_dev(ol6, li27); append_dev(rationale, t307); append_dev(rationale, p38); append_dev(rationale, t309); append_dev(rationale, p39); append_dev(p39, t310); append_dev(p39, b47); append_dev(p39, t312); append_dev(rationale, t313); append_dev(rationale, ol7); append_dev(ol7, li28); append_dev(ol7, t315); append_dev(ol7, li29); append_dev(rationale, t317); append_dev(rationale, p40); append_dev(p40, t318); append_dev(p40, b48); append_dev(p40, t320); append_dev(rationale, t321); append_dev(rationale, h23); append_dev(rationale, t323); append_dev(rationale, p41); append_dev(rationale, t325); append_dev(rationale, ol8); append_dev(ol8, li30); append_dev(ol8, t327); append_dev(ol8, li31); append_dev(li31, t328); append_dev(li31, b49); append_dev(li31, t330); append_dev(li31, b50); append_dev(li31, t332); append_dev(ol8, t333); append_dev(ol8, li32); append_dev(li32, t334); append_dev(li32, b51); append_dev(li32, t336); append_dev(rationale, t337); append_dev(rationale, p42); append_dev(p42, t338); append_dev(p42, b52); append_dev(p42, t340); append_dev(p42, b53); append_dev(p42, t342); append_dev(rationale, t343); append_dev(rationale, h24); append_dev(rationale, t345); append_dev(rationale, p43); append_dev(rationale, t347); append_dev(rationale, ol9); append_dev(ol9, li33); append_dev(li33, b54); append_dev(li33, t349); append_dev(li33, b55); append_dev(li33, t351); append_dev(ol9, t352); append_dev(ol9, li34); append_dev(li34, b56); append_dev(li34, t354); append_dev(li34, b57); append_dev(li34, t356); append_dev(li34, b58); append_dev(li34, t358); append_dev(ol9, t359); append_dev(ol9, li35); append_dev(li35, b59); append_dev(li35, t361); append_dev(li35, b60); append_dev(li35, t363); append_dev(ol9, t364); append_dev(ol9, li36); append_dev(li36, b61); append_dev(li36, t366); append_dev(ol9, t367); append_dev(ol9, li37); append_dev(li37, b62); append_dev(li37, t369); append_dev(li37, b63); append_dev(li37, t371); append_dev(ol9, t372); append_dev(ol9, li38); append_dev(li38, b64); append_dev(li38, t374); append_dev(li38, b65); append_dev(li38, t376); append_dev(ol9, t377); append_dev(ol9, li39); append_dev(li39, b66); append_dev(li39, t379); append_dev(li39, b67); append_dev(li39, t381); append_dev(rationale, t382); current = true; if (!mounted) { dispose = action_destroyer(link_action = link.call(null, a4)); mounted = true; } }, p: noop, i: function intro(local) { if (current) return; transition_in(icon0.$$.fragment, local); transition_in(icon1.$$.fragment, local); transition_in(icon2.$$.fragment, local); current = true; }, o: function outro(local) { transition_out(icon0.$$.fragment, local); transition_out(icon1.$$.fragment, local); transition_out(icon2.$$.fragment, local); current = false; }, d: function destroy(detaching) { if (detaching) detach_dev(hero); if (detaching) detach_dev(t7); if (detaching) detach_dev(hr0); if (detaching) detach_dev(t8); if (detaching) detach_dev(section0); destroy_component(icon0); destroy_component(icon1); destroy_component(icon2); if (detaching) detach_dev(t29); if (detaching) detach_dev(rationale); mounted = false; dispose(); } }; dispatch_dev("SvelteRegisterBlock", { block, id: create_fragment$2.name, type: "component", source: "", ctx }); return block; } function instance$2($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; validate_slots("Home", slots, []); const writable_props = []; Object.keys($$props).forEach(key => { if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(` was created with unknown prop '${key}'`); }); $$self.$capture_state = () => ({ link, Icon }); return []; } class Home extends SvelteComponentDev { constructor(options) { super(options); init(this, options, instance$2, create_fragment$2, safe_not_equal, {}); dispatch_dev("SvelteRegisterComponent", { component: this, tagName: "Home", options, id: create_fragment$2.name }); } } /* src/thumbs/Google.svelte generated by Svelte v3.30.0 */ const file$2 = "src/thumbs/Google.svelte"; function create_fragment$3(ctx) { let content; let header; let nav; let nav_left; let a0; let t1; let a1; let t3; let ul; let li0; let t5; let li1; let t7; let li2; let icon; let t8; let li3; let button0; let t10; let figure; let a2; let img; let img_src_value; let link_action; let t11; let search; let input; let t12; let buttons; let button1; let t14; let button2; let current; let mounted; let dispose; icon = new Icon({ props: { name: "grid", color: "#000" }, $$inline: true }); const block = { c: function create() { content = element("content"); header = element("header"); nav = element("nav"); nav_left = element("nav-left"); a0 = element("a"); a0.textContent = "About"; t1 = space(); a1 = element("a"); a1.textContent = "Store"; t3 = space(); ul = element("ul"); li0 = element("li"); li0.textContent = "Gmail"; t5 = space(); li1 = element("li"); li1.textContent = "Image"; t7 = space(); li2 = element("li"); create_component(icon.$$.fragment); t8 = space(); li3 = element("li"); button0 = element("button"); button0.textContent = "Sign In"; t10 = space(); figure = element("figure"); a2 = element("a"); img = element("img"); t11 = space(); search = element("search"); input = element("input"); t12 = space(); buttons = element("buttons"); button1 = element("button"); button1.textContent = "Google Search"; t14 = space(); button2 = element("button"); button2.textContent = "I'm Feeling Lucky"; attr_dev(a0, "class", "svelte-1xw0xeo"); add_location(a0, file$2, 74, 8, 1064); attr_dev(a1, "class", "svelte-1xw0xeo"); add_location(a1, file$2, 75, 8, 1085); add_location(nav_left, file$2, 73, 6, 1045); add_location(li0, file$2, 78, 6, 1133); add_location(li1, file$2, 79, 6, 1154); add_location(li2, file$2, 80, 6, 1175); attr_dev(button0, "class", "svelte-1xw0xeo"); add_location(button0, file$2, 81, 10, 1228); add_location(li3, file$2, 81, 6, 1224); add_location(ul, file$2, 77, 6, 1122); attr_dev(nav, "class", "svelte-1xw0xeo"); add_location(nav, file$2, 72, 4, 1033); attr_dev(header, "class", "svelte-1xw0xeo"); add_location(header, file$2, 71, 2, 1020); if (img.src !== (img_src_value = "http://via.placeholder.com/500x200?text=Google+Doodle")) attr_dev(img, "src", img_src_value); add_location(img, file$2, 88, 6, 1349); attr_dev(a2, "href", "/demos/google"); attr_dev(a2, "class", "svelte-1xw0xeo"); add_location(a2, file$2, 87, 4, 1309); attr_dev(figure, "class", "svelte-1xw0xeo"); add_location(figure, file$2, 86, 2, 1296); attr_dev(input, "type", "text"); attr_dev(input, "class", "svelte-1xw0xeo"); add_location(input, file$2, 93, 2, 1450); attr_dev(button1, "class", "svelte-1xw0xeo"); add_location(button1, file$2, 95, 6, 1490); attr_dev(button2, "class", "svelte-1xw0xeo"); add_location(button2, file$2, 96, 6, 1527); attr_dev(buttons, "class", "svelte-1xw0xeo"); add_location(buttons, file$2, 94, 4, 1474); attr_dev(search, "class", "svelte-1xw0xeo"); add_location(search, file$2, 92, 2, 1439); attr_dev(content, "class", "svelte-1xw0xeo"); add_location(content, file$2, 70, 0, 1008); }, l: function claim(nodes) { throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); }, m: function mount(target, anchor) { insert_dev(target, content, anchor); append_dev(content, header); append_dev(header, nav); append_dev(nav, nav_left); append_dev(nav_left, a0); append_dev(nav_left, t1); append_dev(nav_left, a1); append_dev(nav, t3); append_dev(nav, ul); append_dev(ul, li0); append_dev(ul, t5); append_dev(ul, li1); append_dev(ul, t7); append_dev(ul, li2); mount_component(icon, li2, null); append_dev(ul, t8); append_dev(ul, li3); append_dev(li3, button0); append_dev(content, t10); append_dev(content, figure); append_dev(figure, a2); append_dev(a2, img); append_dev(content, t11); append_dev(content, search); append_dev(search, input); append_dev(search, t12); append_dev(search, buttons); append_dev(buttons, button1); append_dev(buttons, t14); append_dev(buttons, button2); current = true; if (!mounted) { dispose = action_destroyer(link_action = link.call(null, a2)); mounted = true; } }, p: noop, i: function intro(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o: function outro(local) { transition_out(icon.$$.fragment, local); current = false; }, d: function destroy(detaching) { if (detaching) detach_dev(content); destroy_component(icon); mounted = false; dispose(); } }; dispatch_dev("SvelteRegisterBlock", { block, id: create_fragment$3.name, type: "component", source: "", ctx }); return block; } function instance$3($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; validate_slots("Google", slots, []); const writable_props = []; Object.keys($$props).forEach(key => { if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(` was created with unknown prop '${key}'`); }); $$self.$capture_state = () => ({ link, Icon }); return []; } class Google extends SvelteComponentDev { constructor(options) { super(options); init(this, options, instance$3, create_fragment$3, safe_not_equal, {}); dispatch_dev("SvelteRegisterComponent", { component: this, tagName: "Google", options, id: create_fragment$3.name }); } } /* src/thumbs/Twitter.svelte generated by Svelte v3.30.0 */ const file$3 = "src/thumbs/Twitter.svelte"; function create_fragment$4(ctx) { let content; let middle; let header; let nav; let back; let icon0; let t0; let name; let h4; let t2; let span; let t4; let images; let figure0; let img0; let img0_src_value; let t5; let figure1; let img1; let img1_src_value; let t6; let button; let t8; let profile; let h3; let t10; let p0; let t12; let p1; let t14; let p2; let icon1; let t15; let icon2; let t16; let a; let t18; let icon3; let t19; let t20; let p3; let b0; let t22; let b1; let t24; let current; icon0 = new Icon({ props: { name: "arrow-left" }, $$inline: true }); icon1 = new Icon({ props: { name: "map", size: "24", color: "var(--color-bg-secondary)" }, $$inline: true }); icon2 = new Icon({ props: { name: "link", size: "24", color: "var(--color-bg-secondary)" }, $$inline: true }); icon3 = new Icon({ props: { name: "calendar", size: "24", color: "var(--color-bg-secondary)" }, $$inline: true }); const block = { c: function create() { content = element("content"); middle = element("middle"); header = element("header"); nav = element("nav"); back = element("back"); create_component(icon0.$$.fragment); t0 = space(); name = element("name"); h4 = element("h4"); h4.textContent = "Zed A. Shaw, Writer"; t2 = space(); span = element("span"); span.textContent = "7,754 Tweets"; t4 = space(); images = element("images"); figure0 = element("figure"); img0 = element("img"); t5 = space(); figure1 = element("figure"); img1 = element("img"); t6 = space(); button = element("button"); button.textContent = "Follow"; t8 = space(); profile = element("profile"); h3 = element("h3"); h3.textContent = "Zed A. Shaw, Writer"; t10 = space(); p0 = element("p"); p0.textContent = "@lzsthw"; t12 = space(); p1 = element("p"); p1.textContent = "The author of The Hard Way Series published by Addison/Wesley including Learn Python The Hard Way and many more. Follow me here for coding tips and book news."; t14 = space(); p2 = element("p"); create_component(icon1.$$.fragment); t15 = text(" Some Place, KY "); create_component(icon2.$$.fragment); t16 = space(); a = element("a"); a.textContent = "learnjsthehardway.org"; t18 = space(); create_component(icon3.$$.fragment); t19 = text(" Joined Jan, 1999."); t20 = space(); p3 = element("p"); b0 = element("b"); b0.textContent = "167"; t22 = text(" Following "); b1 = element("b"); b1.textContent = "10.4k"; t24 = text(" Followers"); attr_dev(back, "class", "svelte-1prpjq7"); add_location(back, file$3, 103, 8, 1582); attr_dev(h4, "class", "svelte-1prpjq7"); add_location(h4, file$3, 105, 10, 1647); attr_dev(span, "class", "svelte-1prpjq7"); add_location(span, file$3, 106, 10, 1686); add_location(name, file$3, 104, 8, 1630); attr_dev(nav, "class", "svelte-1prpjq7"); add_location(nav, file$3, 102, 6, 1568); attr_dev(header, "class", "svelte-1prpjq7"); add_location(header, file$3, 101, 4, 1553); attr_dev(img0, "alt", "Profile background"); if (img0.src !== (img0_src_value = "/header_pic.jpg")) attr_dev(img0, "src", img0_src_value); attr_dev(img0, "class", "svelte-1prpjq7"); add_location(img0, file$3, 113, 8, 1808); attr_dev(figure0, "id", "background"); attr_dev(figure0, "class", "svelte-1prpjq7"); add_location(figure0, file$3, 112, 6, 1775); attr_dev(img1, "alt", "Profile picture"); if (img1.src !== (img1_src_value = "/profile_pic.jpg")) attr_dev(img1, "src", img1_src_value); attr_dev(img1, "class", "svelte-1prpjq7"); add_location(img1, file$3, 117, 8, 1913); attr_dev(button, "id", "follow"); attr_dev(button, "class", "svelte-1prpjq7"); add_location(button, file$3, 118, 8, 1972); attr_dev(figure1, "id", "avatar"); attr_dev(figure1, "class", "svelte-1prpjq7"); add_location(figure1, file$3, 116, 6, 1884); attr_dev(images, "class", "svelte-1prpjq7"); add_location(images, file$3, 111, 4, 1760); add_location(h3, file$3, 123, 6, 2059); add_location(p0, file$3, 124, 6, 2094); add_location(p1, file$3, 125, 6, 2115); add_location(a, file$3, 126, 153, 2434); add_location(p2, file$3, 126, 6, 2287); add_location(b0, file$3, 127, 9, 2564); add_location(b1, file$3, 127, 30, 2585); add_location(p3, file$3, 127, 6, 2561); attr_dev(profile, "class", "svelte-1prpjq7"); add_location(profile, file$3, 122, 4, 2043); attr_dev(middle, "class", "svelte-1prpjq7"); add_location(middle, file$3, 100, 2, 1540); attr_dev(content, "class", "svelte-1prpjq7"); add_location(content, file$3, 99, 0, 1528); }, l: function claim(nodes) { throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); }, m: function mount(target, anchor) { insert_dev(target, content, anchor); append_dev(content, middle); append_dev(middle, header); append_dev(header, nav); append_dev(nav, back); mount_component(icon0, back, null); append_dev(nav, t0); append_dev(nav, name); append_dev(name, h4); append_dev(name, t2); append_dev(name, span); append_dev(middle, t4); append_dev(middle, images); append_dev(images, figure0); append_dev(figure0, img0); append_dev(images, t5); append_dev(images, figure1); append_dev(figure1, img1); append_dev(figure1, t6); append_dev(figure1, button); append_dev(middle, t8); append_dev(middle, profile); append_dev(profile, h3); append_dev(profile, t10); append_dev(profile, p0); append_dev(profile, t12); append_dev(profile, p1); append_dev(profile, t14); append_dev(profile, p2); mount_component(icon1, p2, null); append_dev(p2, t15); mount_component(icon2, p2, null); append_dev(p2, t16); append_dev(p2, a); append_dev(p2, t18); mount_component(icon3, p2, null); append_dev(p2, t19); append_dev(profile, t20); append_dev(profile, p3); append_dev(p3, b0); append_dev(p3, t22); append_dev(p3, b1); append_dev(p3, t24); current = true; }, p: noop, i: function intro(local) { if (current) return; transition_in(icon0.$$.fragment, local); transition_in(icon1.$$.fragment, local); transition_in(icon2.$$.fragment, local); transition_in(icon3.$$.fragment, local); current = true; }, o: function outro(local) { transition_out(icon0.$$.fragment, local); transition_out(icon1.$$.fragment, local); transition_out(icon2.$$.fragment, local); transition_out(icon3.$$.fragment, local); current = false; }, d: function destroy(detaching) { if (detaching) detach_dev(content); destroy_component(icon0); destroy_component(icon1); destroy_component(icon2); destroy_component(icon3); } }; dispatch_dev("SvelteRegisterBlock", { block, id: create_fragment$4.name, type: "component", source: "", ctx }); return block; } function instance$4($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; validate_slots("Twitter", slots, []); const writable_props = []; Object.keys($$props).forEach(key => { if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(` was created with unknown prop '${key}'`); }); $$self.$capture_state = () => ({ Icon }); return []; } class Twitter extends SvelteComponentDev { constructor(options) { super(options); init(this, options, instance$4, create_fragment$4, safe_not_equal, {}); dispatch_dev("SvelteRegisterComponent", { component: this, tagName: "Twitter", options, id: create_fragment$4.name }); } } /* src/thumbs/Youtube.svelte generated by Svelte v3.30.0 */ const file$4 = "src/thumbs/Youtube.svelte"; function create_fragment$5(ctx) { let content; let header; let nav; let nav_left; let a0; let icon0; let t0; let icon1; let t1; let logo; let t3; let input; let t4; let ul; let li0; let icon2; let t5; let li1; let icon3; let t6; let li2; let icon4; let t7; let li3; let button; let icon5; let t8; let t9; let main; let left; let figure; let img; let img_src_value; let t10; let figcaption; let a1; let t12; let a2; let t14; let p; let t16; let video_actions; let likes; let t18; let video_buttons; let icon6; let t19; let icon7; let t20; let icon8; let t21; let icon9; let t22; let icon10; let current; icon0 = new Icon({ props: { name: "menu" }, $$inline: true }); icon1 = new Icon({ props: { name: "youtube" }, $$inline: true }); icon2 = new Icon({ props: { name: "camera", color: "#000" }, $$inline: true }); icon3 = new Icon({ props: { name: "more-vertical", color: "#000" }, $$inline: true }); icon4 = new Icon({ props: { name: "grid", color: "#000" }, $$inline: true }); icon5 = new Icon({ props: { name: "user" }, $$inline: true }); icon6 = new Icon({ props: { name: "thumbs-up", color: "#999" }, $$inline: true }); icon7 = new Icon({ props: { name: "thumbs-down", color: "#999" }, $$inline: true }); icon8 = new Icon({ props: { name: "corner-up-right", color: "#999" }, $$inline: true }); icon9 = new Icon({ props: { name: "menu", color: "#999" }, $$inline: true }); icon10 = new Icon({ props: { name: "vertical-more" }, $$inline: true }); const block = { c: function create() { content = element("content"); header = element("header"); nav = element("nav"); nav_left = element("nav-left"); a0 = element("a"); create_component(icon0.$$.fragment); t0 = space(); create_component(icon1.$$.fragment); t1 = space(); logo = element("logo"); logo.textContent = "Youtube"; t3 = space(); input = element("input"); t4 = space(); ul = element("ul"); li0 = element("li"); create_component(icon2.$$.fragment); t5 = space(); li1 = element("li"); create_component(icon3.$$.fragment); t6 = space(); li2 = element("li"); create_component(icon4.$$.fragment); t7 = space(); li3 = element("li"); button = element("button"); create_component(icon5.$$.fragment); t8 = text(" Sign In"); t9 = space(); main = element("main"); left = element("left"); figure = element("figure"); img = element("img"); t10 = space(); figcaption = element("figcaption"); a1 = element("a"); a1.textContent = "#tag"; t12 = space(); a2 = element("a"); a2.textContent = "#anothertag"; t14 = space(); p = element("p"); p.textContent = "Title And Stuff"; t16 = space(); video_actions = element("video-actions"); likes = element("likes"); likes.textContent = "Stats Stats"; t18 = space(); video_buttons = element("video-buttons"); create_component(icon6.$$.fragment); t19 = text(" 1.1K\n "); create_component(icon7.$$.fragment); t20 = text(" 22\n "); create_component(icon8.$$.fragment); t21 = text(" SHARE\n "); create_component(icon9.$$.fragment); t22 = text(" SAVE\n "); create_component(icon10.$$.fragment); attr_dev(logo, "class", "svelte-oxwxiv"); add_location(logo, file$4, 78, 56, 1184); add_location(a0, file$4, 78, 8, 1136); add_location(nav_left, file$4, 77, 6, 1117); attr_dev(input, "id", "search"); attr_dev(input, "placeholder", "Search"); attr_dev(input, "name", "search"); attr_dev(input, "class", "svelte-oxwxiv"); add_location(input, file$4, 80, 6, 1233); add_location(li0, file$4, 82, 8, 1307); add_location(li1, file$4, 83, 8, 1360); add_location(li2, file$4, 84, 8, 1420); attr_dev(button, "class", "svelte-oxwxiv"); add_location(button, file$4, 85, 12, 1475); add_location(li3, file$4, 85, 8, 1471); add_location(ul, file$4, 81, 6, 1294); attr_dev(nav, "class", "svelte-oxwxiv"); add_location(nav, file$4, 76, 4, 1105); attr_dev(header, "class", "svelte-oxwxiv"); add_location(header, file$4, 75, 2, 1092); if (img.src !== (img_src_value = "http://via.placeholder.com/800x450?text=Video")) attr_dev(img, "src", img_src_value); add_location(img, file$4, 92, 8, 1604); attr_dev(a1, "class", "svelte-oxwxiv"); add_location(a1, file$4, 94, 10, 1693); attr_dev(a2, "class", "svelte-oxwxiv"); add_location(a2, file$4, 94, 22, 1705); attr_dev(p, "class", "svelte-oxwxiv"); add_location(p, file$4, 95, 10, 1734); add_location(likes, file$4, 97, 12, 1795); add_location(video_buttons, file$4, 98, 12, 1834); set_custom_element_data(video_actions, "class", "svelte-oxwxiv"); add_location(video_actions, file$4, 96, 10, 1767); attr_dev(figcaption, "class", "svelte-oxwxiv"); add_location(figcaption, file$4, 93, 8, 1670); add_location(figure, file$4, 91, 6, 1587); add_location(left, file$4, 90, 4, 1574); attr_dev(main, "class", "svelte-oxwxiv"); add_location(main, file$4, 89, 2, 1563); attr_dev(content, "class", "svelte-oxwxiv"); add_location(content, file$4, 74, 0, 1080); }, l: function claim(nodes) { throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); }, m: function mount(target, anchor) { insert_dev(target, content, anchor); append_dev(content, header); append_dev(header, nav); append_dev(nav, nav_left); append_dev(nav_left, a0); mount_component(icon0, a0, null); append_dev(a0, t0); mount_component(icon1, a0, null); append_dev(a0, t1); append_dev(a0, logo); append_dev(nav, t3); append_dev(nav, input); append_dev(nav, t4); append_dev(nav, ul); append_dev(ul, li0); mount_component(icon2, li0, null); append_dev(ul, t5); append_dev(ul, li1); mount_component(icon3, li1, null); append_dev(ul, t6); append_dev(ul, li2); mount_component(icon4, li2, null); append_dev(ul, t7); append_dev(ul, li3); append_dev(li3, button); mount_component(icon5, button, null); append_dev(button, t8); append_dev(content, t9); append_dev(content, main); append_dev(main, left); append_dev(left, figure); append_dev(figure, img); append_dev(figure, t10); append_dev(figure, figcaption); append_dev(figcaption, a1); append_dev(figcaption, t12); append_dev(figcaption, a2); append_dev(figcaption, t14); append_dev(figcaption, p); append_dev(figcaption, t16); append_dev(figcaption, video_actions); append_dev(video_actions, likes); append_dev(video_actions, t18); append_dev(video_actions, video_buttons); mount_component(icon6, video_buttons, null); append_dev(video_buttons, t19); mount_component(icon7, video_buttons, null); append_dev(video_buttons, t20); mount_component(icon8, video_buttons, null); append_dev(video_buttons, t21); mount_component(icon9, video_buttons, null); append_dev(video_buttons, t22); mount_component(icon10, video_buttons, null); current = true; }, p: noop, i: function intro(local) { if (current) return; transition_in(icon0.$$.fragment, local); transition_in(icon1.$$.fragment, local); transition_in(icon2.$$.fragment, local); transition_in(icon3.$$.fragment, local); transition_in(icon4.$$.fragment, local); transition_in(icon5.$$.fragment, local); transition_in(icon6.$$.fragment, local); transition_in(icon7.$$.fragment, local); transition_in(icon8.$$.fragment, local); transition_in(icon9.$$.fragment, local); transition_in(icon10.$$.fragment, local); current = true; }, o: function outro(local) { transition_out(icon0.$$.fragment, local); transition_out(icon1.$$.fragment, local); transition_out(icon2.$$.fragment, local); transition_out(icon3.$$.fragment, local); transition_out(icon4.$$.fragment, local); transition_out(icon5.$$.fragment, local); transition_out(icon6.$$.fragment, local); transition_out(icon7.$$.fragment, local); transition_out(icon8.$$.fragment, local); transition_out(icon9.$$.fragment, local); transition_out(icon10.$$.fragment, local); current = false; }, d: function destroy(detaching) { if (detaching) detach_dev(content); destroy_component(icon0); destroy_component(icon1); destroy_component(icon2); destroy_component(icon3); destroy_component(icon4); destroy_component(icon5); destroy_component(icon6); destroy_component(icon7); destroy_component(icon8); destroy_component(icon9); destroy_component(icon10); } }; dispatch_dev("SvelteRegisterBlock", { block, id: create_fragment$5.name, type: "component", source: "", ctx }); return block; } function instance$5($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; validate_slots("Youtube", slots, []); let cards = [1, 2, 3, 4]; const writable_props = []; Object.keys($$props).forEach(key => { if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(` was created with unknown prop '${key}'`); }); $$self.$capture_state = () => ({ Icon, cards }); $$self.$inject_state = $$props => { if ("cards" in $$props) cards = $$props.cards; }; if ($$props && "$$inject" in $$props) { $$self.$inject_state($$props.$$inject); } return []; } class Youtube extends SvelteComponentDev { constructor(options) { super(options); init(this, options, instance$5, create_fragment$5, safe_not_equal, {}); dispatch_dev("SvelteRegisterComponent", { component: this, tagName: "Youtube", options, id: create_fragment$5.name }); } } /* src/thumbs/Instagram.svelte generated by Svelte v3.30.0 */ const file$5 = "src/thumbs/Instagram.svelte"; function get_each_context(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[1] = list[i]; return child_ctx; } // (108:2) {#each pins as pin} function create_each_block(ctx) { let figure; let img; let img_src_value; let t; const block = { c: function create() { figure = element("figure"); img = element("img"); t = space(); attr_dev(img, "alt", "Stock photo"); if (img.src !== (img_src_value = "http://via.placeholder.com/82x82?text=Story")) attr_dev(img, "src", img_src_value); add_location(img, file$5, 109, 6, 1888); add_location(figure, file$5, 108, 4, 1873); }, m: function mount(target, anchor) { insert_dev(target, figure, anchor); append_dev(figure, img); append_dev(figure, t); }, d: function destroy(detaching) { if (detaching) detach_dev(figure); } }; dispatch_dev("SvelteRegisterBlock", { block, id: create_each_block.name, type: "each", source: "(108:2) {#each pins as pin}", ctx }); return block; } function create_fragment$6(ctx) { let content; let header; let nav; let b0; let icon; let t0; let t1; let input; let t2; let ul; let li0; let button0; let t4; let li1; let a0; let t6; let profile; let figure; let img; let img_src_value; let t7; let info; let p0; let b1; let t9; let button1; let t11; let p1; let b2; let t13; let b3; let t15; let b4; let t17; let p2; let b5; let t19; let p3; let t20; let br; let t21; let a1; let t23; let pins_1; let current; icon = new Icon({ props: { name: "instagram", color: "var(--color-text)" }, $$inline: true }); let each_value = /*pins*/ ctx[0]; validate_each_argument(each_value); let each_blocks = []; for (let i = 0; i < each_value.length; i += 1) { each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i)); } const block = { c: function create() { content = element("content"); header = element("header"); nav = element("nav"); b0 = element("b"); create_component(icon.$$.fragment); t0 = text(" Instagram"); t1 = space(); input = element("input"); t2 = space(); ul = element("ul"); li0 = element("li"); button0 = element("button"); button0.textContent = "Log In"; t4 = space(); li1 = element("li"); a0 = element("a"); a0.textContent = "Sign Up"; t6 = space(); profile = element("profile"); figure = element("figure"); img = element("img"); t7 = space(); info = element("info"); p0 = element("p"); b1 = element("b"); b1.textContent = "zedshaw"; t9 = space(); button1 = element("button"); button1.textContent = "follow"; t11 = space(); p1 = element("p"); b2 = element("b"); b2.textContent = "280"; t13 = text(" posts "); b3 = element("b"); b3.textContent = "4,695 followers"; t15 = space(); b4 = element("b"); b4.textContent = "1,778 following"; t17 = space(); p2 = element("p"); b5 = element("b"); b5.textContent = "Zed A. Shaw"; t19 = space(); p3 = element("p"); t20 = text("Painter in oil, watercolor, and pastel. I’m doing live streams of little paintings on Twitch:"); br = element("br"); t21 = space(); a1 = element("a"); a1.textContent = "www.twitch.tv/zedashaw"; t23 = space(); pins_1 = element("pins"); for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } add_location(b0, file$5, 76, 6, 1071); attr_dev(input, "placeholder", "Search"); add_location(input, file$5, 77, 6, 1146); attr_dev(button0, "class", "svelte-oov5yx"); add_location(button0, file$5, 79, 12, 1198); add_location(li0, file$5, 79, 8, 1194); attr_dev(a0, "class", "svelte-oov5yx"); add_location(a0, file$5, 80, 12, 1239); add_location(li1, file$5, 80, 8, 1235); add_location(ul, file$5, 78, 6, 1181); attr_dev(nav, "class", "svelte-oov5yx"); add_location(nav, file$5, 75, 4, 1059); attr_dev(header, "class", "svelte-oov5yx"); add_location(header, file$5, 74, 2, 1046); attr_dev(img, "alt", "Zed's Face"); if (img.src !== (img_src_value = "http://via.placeholder.com/256x256?text=Zed's Face")) attr_dev(img, "src", img_src_value); add_location(img, file$5, 87, 6, 1326); attr_dev(figure, "class", "svelte-oov5yx"); add_location(figure, file$5, 86, 4, 1311); add_location(b1, file$5, 92, 8, 1450); attr_dev(button1, "class", "svelte-oov5yx"); add_location(button1, file$5, 92, 23, 1465); attr_dev(p0, "class", "svelte-oov5yx"); add_location(p0, file$5, 91, 6, 1438); add_location(b2, file$5, 96, 8, 1519); add_location(b3, file$5, 96, 25, 1536); add_location(b4, file$5, 96, 48, 1559); attr_dev(p1, "class", "svelte-oov5yx"); add_location(p1, file$5, 95, 6, 1507); add_location(b5, file$5, 99, 9, 1603); attr_dev(p2, "class", "svelte-oov5yx"); add_location(p2, file$5, 99, 6, 1600); add_location(br, file$5, 100, 102, 1728); attr_dev(a1, "href", "www.twitch.tv/zedashaw"); attr_dev(a1, "class", "svelte-oov5yx"); add_location(a1, file$5, 101, 8, 1741); attr_dev(p3, "class", "svelte-oov5yx"); add_location(p3, file$5, 100, 6, 1632); attr_dev(info, "class", "svelte-oov5yx"); add_location(info, file$5, 90, 4, 1425); attr_dev(profile, "class", "svelte-oov5yx"); add_location(profile, file$5, 85, 2, 1297); attr_dev(pins_1, "class", "svelte-oov5yx"); add_location(pins_1, file$5, 106, 2, 1840); attr_dev(content, "class", "svelte-oov5yx"); add_location(content, file$5, 73, 0, 1034); }, l: function claim(nodes) { throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); }, m: function mount(target, anchor) { insert_dev(target, content, anchor); append_dev(content, header); append_dev(header, nav); append_dev(nav, b0); mount_component(icon, b0, null); append_dev(b0, t0); append_dev(nav, t1); append_dev(nav, input); append_dev(nav, t2); append_dev(nav, ul); append_dev(ul, li0); append_dev(li0, button0); append_dev(ul, t4); append_dev(ul, li1); append_dev(li1, a0); append_dev(content, t6); append_dev(content, profile); append_dev(profile, figure); append_dev(figure, img); append_dev(profile, t7); append_dev(profile, info); append_dev(info, p0); append_dev(p0, b1); append_dev(p0, t9); append_dev(p0, button1); append_dev(info, t11); append_dev(info, p1); append_dev(p1, b2); append_dev(p1, t13); append_dev(p1, b3); append_dev(p1, t15); append_dev(p1, b4); append_dev(info, t17); append_dev(info, p2); append_dev(p2, b5); append_dev(info, t19); append_dev(info, p3); append_dev(p3, t20); append_dev(p3, br); append_dev(p3, t21); append_dev(p3, a1); append_dev(content, t23); append_dev(content, pins_1); for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].m(pins_1, null); } current = true; }, p: noop, i: function intro(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o: function outro(local) { transition_out(icon.$$.fragment, local); current = false; }, d: function destroy(detaching) { if (detaching) detach_dev(content); destroy_component(icon); destroy_each(each_blocks, detaching); } }; dispatch_dev("SvelteRegisterBlock", { block, id: create_fragment$6.name, type: "component", source: "", ctx }); return block; } function instance$6($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; validate_slots("Instagram", slots, []); let pins = [1, 2, 3, 4]; const writable_props = []; Object.keys($$props).forEach(key => { if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(` was created with unknown prop '${key}'`); }); $$self.$capture_state = () => ({ link, Icon, pins }); $$self.$inject_state = $$props => { if ("pins" in $$props) $$invalidate(0, pins = $$props.pins); }; if ($$props && "$$inject" in $$props) { $$self.$inject_state($$props.$$inject); } return [pins]; } class Instagram extends SvelteComponentDev { constructor(options) { super(options); init(this, options, instance$6, create_fragment$6, safe_not_equal, {}); dispatch_dev("SvelteRegisterComponent", { component: this, tagName: "Instagram", options, id: create_fragment$6.name }); } } /* src/thumbs/Pinterest.svelte generated by Svelte v3.30.0 */ const file$6 = "src/thumbs/Pinterest.svelte"; function create_fragment$7(ctx) { let content; let header; let nav; let left; let logo; let icon; let t0; let t1; let a0; let t3; let a1; let t5; let input; let t6; let ul; let li0; let button0; let t8; let li1; let button1; let t10; let profile; let info; let h1; let t12; let p0; let t14; let p1; let b0; let t16; let b1; let t18; let t19; let p2; let t21; let figure; let img; let img_src_value; let current; icon = new Icon({ props: { name: "pinterest", color: "var(--color)" }, $$inline: true }); const block = { c: function create() { content = element("content"); header = element("header"); nav = element("nav"); left = element("left"); logo = element("logo"); create_component(icon.$$.fragment); t0 = text(" Pinterest"); t1 = space(); a0 = element("a"); a0.textContent = "Today"; t3 = space(); a1 = element("a"); a1.textContent = "Explore"; t5 = space(); input = element("input"); t6 = space(); ul = element("ul"); li0 = element("li"); button0 = element("button"); button0.textContent = "Log In"; t8 = space(); li1 = element("li"); button1 = element("button"); button1.textContent = "Sign Up"; t10 = space(); profile = element("profile"); info = element("info"); h1 = element("h1"); h1.textContent = "Vincent van Gogh"; t12 = space(); p0 = element("p"); p0.textContent = "Collection by A Person"; t14 = space(); p1 = element("p"); b0 = element("b"); b0.textContent = "420"; t16 = text(" Pins • "); b1 = element("b"); b1.textContent = "3.59k"; t18 = text(" Followers"); t19 = space(); p2 = element("p"); p2.textContent = "\"I dream my painting and I paint my dream.\" ~ Vincent van Gogh"; t21 = space(); figure = element("figure"); img = element("img"); attr_dev(logo, "class", "svelte-1w7ltga"); add_location(logo, file$6, 99, 6, 1437); attr_dev(a0, "class", "svelte-1w7ltga"); add_location(a0, file$6, 100, 8, 1515); attr_dev(a1, "class", "svelte-1w7ltga"); add_location(a1, file$6, 101, 8, 1536); attr_dev(left, "class", "svelte-1w7ltga"); add_location(left, file$6, 98, 6, 1424); attr_dev(input, "placeholder", "Search"); attr_dev(input, "class", "svelte-1w7ltga"); add_location(input, file$6, 104, 6, 1572); attr_dev(button0, "class", "svelte-1w7ltga"); add_location(button0, file$6, 107, 12, 1625); attr_dev(li0, "class", "svelte-1w7ltga"); add_location(li0, file$6, 107, 8, 1621); attr_dev(button1, "id", "signup"); attr_dev(button1, "class", "svelte-1w7ltga"); add_location(button1, file$6, 108, 12, 1666); attr_dev(li1, "class", "svelte-1w7ltga"); add_location(li1, file$6, 108, 8, 1662); attr_dev(ul, "class", "svelte-1w7ltga"); add_location(ul, file$6, 106, 6, 1608); attr_dev(nav, "class", "svelte-1w7ltga"); add_location(nav, file$6, 97, 4, 1412); attr_dev(header, "class", "svelte-1w7ltga"); add_location(header, file$6, 96, 2, 1399); attr_dev(h1, "class", "svelte-1w7ltga"); add_location(h1, file$6, 115, 2, 1767); attr_dev(p0, "class", "svelte-1w7ltga"); add_location(p0, file$6, 116, 2, 1795); attr_dev(b0, "class", "svelte-1w7ltga"); add_location(b0, file$6, 117, 5, 1830); attr_dev(b1, "class", "svelte-1w7ltga"); add_location(b1, file$6, 117, 23, 1848); attr_dev(p1, "class", "svelte-1w7ltga"); add_location(p1, file$6, 117, 2, 1827); attr_dev(p2, "class", "svelte-1w7ltga"); add_location(p2, file$6, 118, 2, 1877); attr_dev(info, "class", "svelte-1w7ltga"); add_location(info, file$6, 114, 2, 1758); attr_dev(img, "alt", "Zed's Face"); if (img.src !== (img_src_value = "http://via.placeholder.com/128x128?text=Zed's Face")) attr_dev(img, "src", img_src_value); attr_dev(img, "class", "svelte-1w7ltga"); add_location(img, file$6, 122, 4, 1969); attr_dev(figure, "class", "svelte-1w7ltga"); add_location(figure, file$6, 121, 2, 1956); attr_dev(profile, "class", "svelte-1w7ltga"); add_location(profile, file$6, 113, 2, 1746); attr_dev(content, "class", "svelte-1w7ltga"); add_location(content, file$6, 95, 0, 1387); }, l: function claim(nodes) { throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); }, m: function mount(target, anchor) { insert_dev(target, content, anchor); append_dev(content, header); append_dev(header, nav); append_dev(nav, left); append_dev(left, logo); mount_component(icon, logo, null); append_dev(logo, t0); append_dev(left, t1); append_dev(left, a0); append_dev(left, t3); append_dev(left, a1); append_dev(nav, t5); append_dev(nav, input); append_dev(nav, t6); append_dev(nav, ul); append_dev(ul, li0); append_dev(li0, button0); append_dev(ul, t8); append_dev(ul, li1); append_dev(li1, button1); append_dev(content, t10); append_dev(content, profile); append_dev(profile, info); append_dev(info, h1); append_dev(info, t12); append_dev(info, p0); append_dev(info, t14); append_dev(info, p1); append_dev(p1, b0); append_dev(p1, t16); append_dev(p1, b1); append_dev(p1, t18); append_dev(info, t19); append_dev(info, p2); append_dev(profile, t21); append_dev(profile, figure); append_dev(figure, img); current = true; }, p: noop, i: function intro(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o: function outro(local) { transition_out(icon.$$.fragment, local); current = false; }, d: function destroy(detaching) { if (detaching) detach_dev(content); destroy_component(icon); } }; dispatch_dev("SvelteRegisterBlock", { block, id: create_fragment$7.name, type: "component", source: "", ctx }); return block; } function instance$7($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; validate_slots("Pinterest", slots, []); const writable_props = []; Object.keys($$props).forEach(key => { if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(` was created with unknown prop '${key}'`); }); $$self.$capture_state = () => ({ Icon }); return []; } class Pinterest extends SvelteComponentDev { constructor(options) { super(options); init(this, options, instance$7, create_fragment$7, safe_not_equal, {}); dispatch_dev("SvelteRegisterComponent", { component: this, tagName: "Pinterest", options, id: create_fragment$7.name }); } } /* src/thumbs/Login.svelte generated by Svelte v3.30.0 */ const file$7 = "src/thumbs/Login.svelte"; function create_fragment$8(ctx) { let content; let spacer0; let t0; let form; let header; let t2; let label0; let t4; let input0; let t5; let label1; let t7; let input1; let t8; let br; let t9; let button; let t11; let spacer1; const block = { c: function create() { content = element("content"); spacer0 = element("spacer"); t0 = space(); form = element("form"); header = element("header"); header.textContent = "Login"; t2 = space(); label0 = element("label"); label0.textContent = "Username"; t4 = space(); input0 = element("input"); t5 = space(); label1 = element("label"); label1.textContent = "Password"; t7 = space(); input1 = element("input"); t8 = space(); br = element("br"); t9 = space(); button = element("button"); button.textContent = "Login"; t11 = space(); spacer1 = element("spacer"); add_location(spacer0, file$7, 10, 2, 135); add_location(header, file$7, 12, 4, 166); attr_dev(label0, "for", "username"); add_location(label0, file$7, 13, 4, 193); attr_dev(input0, "type", "text"); attr_dev(input0, "id", "username"); attr_dev(input0, "name", "username"); attr_dev(input0, "size", "32"); attr_dev(input0, "placeholder", "Username"); add_location(input0, file$7, 14, 4, 236); attr_dev(label1, "for", "password"); add_location(label1, file$7, 15, 4, 323); attr_dev(input1, "type", "password"); attr_dev(input1, "id", "password"); attr_dev(input1, "name", "password"); attr_dev(input1, "size", "32"); attr_dev(input1, "placeholder", "Password"); add_location(input1, file$7, 16, 4, 366); add_location(br, file$7, 17, 4, 457); attr_dev(button, "type", "submit"); add_location(button, file$7, 18, 4, 466); add_location(form, file$7, 11, 2, 155); add_location(spacer1, file$7, 20, 2, 515); attr_dev(content, "class", "svelte-t7gl8c"); add_location(content, file$7, 9, 0, 123); }, l: function claim(nodes) { throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); }, m: function mount(target, anchor) { insert_dev(target, content, anchor); append_dev(content, spacer0); append_dev(content, t0); append_dev(content, form); append_dev(form, header); append_dev(form, t2); append_dev(form, label0); append_dev(form, t4); append_dev(form, input0); append_dev(form, t5); append_dev(form, label1); append_dev(form, t7); append_dev(form, input1); append_dev(form, t8); append_dev(form, br); append_dev(form, t9); append_dev(form, button); append_dev(content, t11); append_dev(content, spacer1); }, p: noop, i: noop, o: noop, d: function destroy(detaching) { if (detaching) detach_dev(content); } }; dispatch_dev("SvelteRegisterBlock", { block, id: create_fragment$8.name, type: "component", source: "", ctx }); return block; } function instance$8($$self, $$props) { let { $$slots: slots = {}, $$scope } = $$props; validate_slots("Login", slots, []); const writable_props = []; Object.keys($$props).forEach(key => { if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(` was created with unknown prop '${key}'`); }); return []; } class Login extends SvelteComponentDev { constructor(options) { super(options); init(this, options, instance$8, create_fragment$8, safe_not_equal, {}); dispatch_dev("SvelteRegisterComponent", { component: this, tagName: "Login", options, id: create_fragment$8.name }); } } function simpleSvgPlaceholder({ width = 300, height = 150, text = `${width}×${height}`, fontFamily = 'sans-serif', fontWeight = 'bold', fontSize = Math.floor(Math.min(width, height) * 0.2), dy = fontSize * 0.35, bgColor = '#ddd', textColor = 'rgba(0,0,0,0.5)', dataUri = true, charset = 'UTF-8' } = {}) { const str = ` ${text} `; // Thanks to: filamentgroup/directory-encoder const cleaned = str .replace(/[\t\n\r]/gim, '') // Strip newlines and tabs .replace(/\s\s+/g, ' ') // Condense multiple spaces .replace(/'/gim, '\\i'); // Normalize quotes if (dataUri) { const encoded = encodeURIComponent(cleaned) .replace(/\(/g, '%28') // Encode brackets .replace(/\)/g, '%29'); return `data:image/svg+xml;charset=${charset},${encoded}`; } return cleaned; } var simpleSvgPlaceholder_1 = simpleSvgPlaceholder; const defaults = { bgColor: '#ccc', textColor: '#888', }; const holder = (x, y) => simpleSvgPlaceholder_1({...defaults, width: x, height: y}); /* src/thumbs/Tiles.svelte generated by Svelte v3.30.0 */ const file$8 = "src/thumbs/Tiles.svelte"; function create_fragment$9(ctx) { let content; let tile; let left; let img; let img_src_value; let t0; let middle; let h4; let t2; let p; let t4; let right; let button0; let icon0; let t5; let button1; let icon1; let current; icon0 = new Icon({ props: { name: "check-circle", color: "var(--color-bg)", size: "24" }, $$inline: true }); icon1 = new Icon({ props: { name: "x-circle", color: "var(--color-bg)", size: "24" }, $$inline: true }); const block = { c: function create() { content = element("content"); tile = element("tile"); left = element("left"); img = element("img"); t0 = space(); middle = element("middle"); h4 = element("h4"); h4.textContent = "Tile Example"; t2 = space(); p = element("p"); p.textContent = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."; t4 = space(); right = element("right"); button0 = element("button"); create_component(icon0.$$.fragment); t5 = space(); button1 = element("button"); create_component(icon1.$$.fragment); if (img.src !== (img_src_value = holder(48, 48))) attr_dev(img, "src", img_src_value); add_location(img, file$8, 46, 6, 779); add_location(left, file$8, 45, 4, 766); attr_dev(h4, "class", "svelte-fwzpwr"); add_location(h4, file$8, 50, 6, 841); add_location(p, file$8, 53, 6, 885); attr_dev(middle, "class", "svelte-fwzpwr"); add_location(middle, file$8, 49, 4, 826); attr_dev(button0, "class", "svelte-fwzpwr"); add_location(button0, file$8, 57, 4, 1047); attr_dev(button1, "class", "svelte-fwzpwr"); add_location(button1, file$8, 58, 4, 1131); attr_dev(right, "class", "svelte-fwzpwr"); add_location(right, file$8, 56, 4, 1035); attr_dev(tile, "class", "svelte-fwzpwr"); add_location(tile, file$8, 44, 2, 755); attr_dev(content, "class", "svelte-fwzpwr"); add_location(content, file$8, 43, 0, 743); }, l: function claim(nodes) { throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); }, m: function mount(target, anchor) { insert_dev(target, content, anchor); append_dev(content, tile); append_dev(tile, left); append_dev(left, img); append_dev(tile, t0); append_dev(tile, middle); append_dev(middle, h4); append_dev(middle, t2); append_dev(middle, p); append_dev(tile, t4); append_dev(tile, right); append_dev(right, button0); mount_component(icon0, button0, null); append_dev(right, t5); append_dev(right, button1); mount_component(icon1, button1, null); current = true; }, p: noop, i: function intro(local) { if (current) return; transition_in(icon0.$$.fragment, local); transition_in(icon1.$$.fragment, local); current = true; }, o: function outro(local) { transition_out(icon0.$$.fragment, local); transition_out(icon1.$$.fragment, local); current = false; }, d: function destroy(detaching) { if (detaching) detach_dev(content); destroy_component(icon0); destroy_component(icon1); } }; dispatch_dev("SvelteRegisterBlock", { block, id: create_fragment$9.name, type: "component", source: "", ctx }); return block; } function instance$9($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; validate_slots("Tiles", slots, []); const writable_props = []; Object.keys($$props).forEach(key => { if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(` was created with unknown prop '${key}'`); }); $$self.$capture_state = () => ({ Icon, holder }); return []; } class Tiles extends SvelteComponentDev { constructor(options) { super(options); init(this, options, instance$9, create_fragment$9, safe_not_equal, {}); dispatch_dev("SvelteRegisterComponent", { component: this, tagName: "Tiles", options, id: create_fragment$9.name }); } } var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; function createCommonjsModule(fn, basedir, module) { return module = { path: basedir, exports: {}, require: function (path, base) { return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); } }, fn(module, module.exports), module.exports; } function commonjsRequire () { throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); } var prism = createCommonjsModule(function (module) { /* ********************************************** Begin prism-core.js ********************************************** */ /// var _self = (typeof window !== 'undefined') ? window // if in browser : ( (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) ? self // if in worker : {} // if in node js ); /** * Prism: Lightweight, robust, elegant syntax highlighting * * @license MIT * @author Lea Verou * @namespace * @public */ var Prism = (function (_self){ // Private helper vars var lang = /\blang(?:uage)?-([\w-]+)\b/i; var uniqueId = 0; var _ = { /** * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load * additional languages or plugins yourself. * * By setting this value to `true`, Prism will not automatically highlight all code elements on the page. * * You obviously have to change this value before the automatic highlighting started. To do this, you can add an * empty Prism object into the global scope before loading the Prism script like this: * * ```js * window.Prism = window.Prism || {}; * Prism.manual = true; * // add a new